[R]Zipf’s law in R

出現頻度がk 番目に大きい要素が全体に占める割合が1/k に比例する、というジップの法則(Zipf’s Law)というのがある。

数学的には次のように定義される。(wikipedia から)

  • N be the number of elements;
  • k be their rank;
  • s be the value of the exponent characterizing the distribution.

  • 単語の使用頻度
  • 都市の人口
  • 人々の収入

などは、この法則に従う例でよく引用される。

wikipedia に N を固定してsを動かした場合の可視化(Probability Mass FunctionCumulative distribution function)があったので、現実逃避に R で再発明をしてみる。

以下、白背景が wikipedia。グレー背景がggplot2
—–
Probability Mass Function

# Zipf Probability mass function
# N = 10 on a log-log scale
create_zipf <- function(N, s) {
  val         <- seq(1, N)
  numerator   <- 1 / (val ^ s)
  denominator <- sum(numerator)
  zipf        <- numerator/denominator
  data.frame(k=val, s=s, zipf=zipf)
}

dat <- rbind(create_zipf(10, 1),
             create_zipf(10, 2),
             create_zipf(10, 3),
             create_zipf(10, 4),
             create_zipf(10, 5))

p <- ggplot(dat, aes(x=k, y=zipf, group=s))
p + geom_line(aes(color=s)) + geom_point() + scale_x_log10() + scale_y_log10() + opts(title='Zipf Probability mass function(N = 10)')

Cumulative distribution function

# Zipf Cumulative distribution function
# N = 10. 

create_cum_zipf <- function(N, s) {
  val           <- seq(1, N)
  numerator     <- 1 / (val ^ s)
  denominator   <- sum(numerator)
  zipf          <- numerator/denominator
  total_zipf    <- sum(zipf)
  relative_zipf <- zipf/total_zipf

  data.frame(k=val, s=s, zipf=cumsum(relative_zipf))
}
dat <- rbind(create_cum_zipf(10, 1),
             create_cum_zipf(10, 2),
             create_cum_zipf(10, 3),
             create_cum_zipf(10, 4),
             create_cum_zipf(10, 5))

p <- ggplot(dat, aes(x=k, y=zipf, group=s))
p + geom_line(aes(color=s)) + geom_point() + opts(title='Zipf Cumulative distribution function(N = 10)')

TODO

時間が足りずギブアップした点

  • データフレームをrbind でつなげている処理はもっとすっきりかけるはず。
  • probability mass function のデータフレームをいじるだけで cumulative function 向けのデータフレームを作成できるはず
Advertisements
Tagged with: , , ,
Posted in R

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 6 months ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 6 months ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 6 months ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 1 year ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 1 year ago
%d bloggers like this: