ロングテール

#市場にN種類の本があるとする
N<-1000
#単位時間当たりの販売数の割合
#売れる本もあれば、売れない本もある
S<-sort(rexp(N,1)^2,decreasing=TRUE)
#販売冊数(ある期間での総冊数)
#たくさん売れるので、売れる順番だけを気にして、売れる間隔は等しいとみなすことにする
T<-1000000
#売れた本の名前(IDのリスト)
ord<-sample(1:N,T,replace=TRUE,prob=S/sum(S))

# 仮に次のランキングからスタート
# よく売れる本の順位をビリにしてある
ranking<-N:1
# 推移の観察
# 何番目に売れる本に着目するかを指定する
focuseditem<-500
# 着目した本の順位の推移を格納する
focusedRank<-rep(0,length(ord))
for(i in 1:length(ord)){
 # 順位は、本が売れる度に、売れた本より高ランクの本の順位を一つ下げ(数字を1増やし)
 # 売れた本の順位を1とし、
 # 売れない本の順位は変えない
 newranking<-ranking
 lesslist<-which(ranking<ranking[ord[i]])
 newranking[lesslist]<-ranking[lesslist]+1
 newranking[ord[i]]<-1
 ranking<-newranking
 focusedRank[i]<-ranking[focuseditem]
}

plot(focusedRank,type="l")
  • 順序はグラフの辺の置き換え操作で逐次更新し、順位が知りたいときだけ、グラフ(直線状)を読めばよい(明日の記事にその様子を表した図)