順位を支配する黄金ルール part2 | 科学アラカルト [実践] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 実戦 | 科学アラカルト | 科学に関する話題をrpnで探求!調べて実験してみよう。

HOME > 実践 > 科学アラカルト > 順位を支配する黄金ルール part2

hatena twitter facebook rss ソーシャルブックマーク

順位を支配する黄金ルール part2

前のページに戻るLinkIcon

 ウェブにアクセスするかしないかはユーザが決めます。いかにも人為的で、このような領域にジップの法則は適合しやすい気がします。例えば、都市の人口に関してもジップの法則が成り立つことが言われていますが、人口の多い都市には仕事も多く、より人が集まる傾向があります。ウェブの事例ととても構造が似ています。

そこで、人為的でも社会現象でもないような事例においても、ジップの法則を検証してみる必要がありそうです。以下では人間の関与がないと思われるものに限定してジップの法則を見ていきます。

七大大陸の面積とジップの法則

 七大大陸(アフリカ大陸、北アメリカ大陸、南アメリカ大陸、ヨーロッパ大陸、アジア大陸、オーストラリア大陸、南極大陸)の面積がジップの法則に従っているか検証してみます。大陸の場合、アフリカの国境のように人為的に決められた可能性は皆無です。

では、大陸を面積の大きい順に並べてみましょう。大きさの感覚を得るために面積に比例した棒グラフも併記してあります。

  大陸           面積       スケール
  ============== =========  ======================
  アジア         4400万k㎡  ロロロロロロロロロロロロロロロロロロロロロロ
  アフリカ       3000万k㎡  ロロロロロロロロロロロロロロロ
  北アメリカ     2400万k㎡  ロロロロロロロロロロロロ
  南アメリカ     1800万k㎡  ロロロロロロロロロ
  南極           1300万k㎡  ロロロロロロ
  ヨーロッパ     1000万k㎡  ロロロロロ
  オーストラリア  762万k㎡  ロロロロ


ちなみに日本は38万k㎡です。全世界の陸地面積中、僅か0.26%です。

アジア大陸が一番大きく、意外にヨーロッパ大陸が小さいことが分かります。オーストラリアは島なのか大陸なのかと議論されることがありますが、一応大陸として分類してあります。なお、面積のデータはファイルの"continen.txt"に格納されているものとします。

  >type continen.txt
  44000000
  30000000
  24000000
  18000000
  13000000
  10000000
  7620000


簡便法で見てみると7×7620000=53340000で1位の44000000とで17%の誤差です。倍は違わないという程度に考えるとすれば、ジップの法則に従っている可能性があります。

検証を続けていきます。まず、大陸の面積を構成比に変換し、同時にジップの法則に従って7つの大陸に対応する占有率を計算します。それぞれ、ファイルの"ele.txt"と"zipf.txt"に計算結果を格納します。

  >rpn -c rowele <continen.txt >ele.txt
  >rpn 7 -c seq | rpn 7 -c zipf >zipf.txt


では、ファイルを横結合して、両者を比較してみましょう。

  >paste ele.txt zipf.txt
  0.300095        0.385675
  0.204611        0.192837
  0.163688        0.128558
  0.122766        0.0964187
  0.0886646       0.077135
  0.0682035       0.0642792
  0.0519711       0.0550964


上位の数値から下位の数値に向かっての減少具合など似ている感じはします。グラフにしてみます。

  >paste ele.txt zipf.txt | rpn 1 -c rownum >tmp
  >xyp -x,7 -y,.5 -s1,.1 -k2 -n -m <tmp | npd
  ^y 0.5
  |
  0.4
  |    +
  |
  0.3  *
  |
  |
  0.2        *
  |          +
  |               *
  0.1             +     *
  |                     +    +     *
  |                                +     +
  |o                                     7
  +----1-----2-----3----4-----5-----6---->
      アジア      北アメリカ       南極      オーストラリア
           アフリカ      南アメリカ       ヨーロッパ


"*"が実際の値で、"+"が理論値です。要素が7つしかないのに関わらず、多少のズレはありますが、ほぼ一致している様子が見て取れます。

日本の都道府県の面積とジップの法則

 県境の決定には多分に恣意的なものがあるように思えるので、都道府県の面積を検証に使うのは避けたいのですが、もしかしたら県境は川であったり、沼地であったり、山脈であったりと何らかの地形が関与している可能性もあります。少なくとも県境にアフリカの国境のような不自然な直線はありません。

そこで、改めて調べてみることにします。まず、都道府県の面積を集めたファイルの"japan.txt"を用意します。縦に長いので折り曲げて表示します(単位はk㎡です)。

  >rpn 7 -c fold <japan.txt
  83456 9607 7405 6339 4976 4145 2415
  15278 9323 7285 6112 4726 4095 2275
  13782 9187 7113 6095 4613 4017 2187
  13562 8478 7105 5776 4465 3797 1896
  12583 8395 6707 5677 4247 3691 1876
  11612 7780 6408 5164 4189 3507
  10621 7734 6363 5156 4185 2439


トップ3は大きい順に北海道、岩手、福島です。逆にラスト3は小さい順に香川、大阪、東京です。北海道の面積がダントツですね。さっそく、構成比に変換します。

  >rpn -c rowele <japan.txt >ele.txt


計算結果はファイルは"ele.txt"に格納することにします。次にジップの法則に従って47都道府県を処理します。結果を入れるファイルは"zipf.txt"とします。

  >rpn 47 -c seq | rpn 47 -c zipf >zipf.txt


では、両者の比較です。縦に長いので途中を省略して、上位10位と下位10位を表示しています。

  >paste ele.txt zipf.txt
  0.220874        0.225329
  0.0404347       0.112664
  0.0364754       0.0751095
  0.0358931       0.0563321
  0.0333021       0.0450657
              :
            (中略)
              :
  0.00639153      0.0052402
  0.006021        0.0051211
  0.0057881       0.0050073
  0.00501794      0.00489845
  0.00496501      0.00479422


2位の差が激しくズレていますが、大体は似ている感じがします。グラフ化してみますが、都道府県の数が多いので横軸を引き伸ばしてあります(都道府県名とプロット位置はテキスト文字のサイズの関係上、一致していません)。

  >paste ele.txt zipf.txt | rpn 1 -c rownum >tmp
  >xyp -x,47 -y,.23 -s5,.1 -k2 -n -m -w65 <tmp | npd
  ^+ 0.23
  0.2
  |
  |
  |
  |
  |
  | +
  0.1
  |
  |   +
  |    +
  | * **+ ++
  |        *+ +++ ++ +** *** *** **                               x
  |o                  ++ +++ +++ ++ +++ +++ +++ ++ +++ +++ +++ ++4+
  +-----5------10-----15-----20-----25-----30-----35-----40-----45>
  北岩福長新秋岐青山鹿                          滋埼奈鳥佐神沖東大香
  海手島野潟田阜森形児        …(中略)…        賀玉良取賀奈縄京阪川
  道                島                                    川


"*"が実際の値で、"+"が理論値です。予想されたことですが下位のほうになると値が小さいのでほとんど同じに見えます。逆に激しくズレていた2位を含む、上位の部分が気になります。そこで、1位から10位までの部分を拡大してみます。

  >xyp -x0,10 -y,.23 -s1,.1 -k2 -n -m <tmp
  ^y +.23
  0.2
  |
  |
  |
  |
  |
  |      +
  0.1
  |
  |          +
  |              +
  |      *   *   *   +   +   +
  |                          *   +   +   +
  |o                                    10
  +--1---2---3---4---5---6---7---8---9--->


2位や3位の差が大きいこと以外は、大体一致していますね。特に1位の北海道の面積はジップの法則どおりピッタリです("+"が"*"を上書き)。

日本の都道府県の面積分布はアフリカの国々に比べるととてもきれいな曲線を描いています。

破片の重さとジップの法則

 最後に人為的な要素を極力排した実験を行なってみます。ワインのハーフボトルを大きな石に叩き付けて破壊します。当然、粉々に砕けますが、それぞれの破片の重さを1つ1つ測った場合、欠片の重さの分布はジップの法則に従うのでしょうか。

結果、測定可能な破片(1g以上)は全部で48個、それぞれの重さを測定すると以下のようになりました。なお、データはファイルの"wine.txt"にあるものとします。それぞれの数字の桁数が少ないので、今度は横方向に折り曲げて表示しています。

  >rpn 30 -c fold' <wine.txt
  23 15 13 12 11 10 9 8 7 6 5 5 5 5 4 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2
  2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1


実際はハーフボトルを袋に入れて大きなブロックを上から落として破砕しました。ちなみに壊す前のボトルの重さは241g。測定可能な破片は合計で200gだったので、41gが残り微細な破片分です(目視可能な1g未満の破片は90個。その他は無数の粉状の破片です)。

上記と同様に実際に測定した値の構成比とジップの法則の数値を計算します。以下のrpn式でそれぞれファイルの"ele.txt"と"zipf.txt"に結果が格納されます。

  >rpn -c rowele <wine.txt >ele.txt
  >rpn 48 -c seq | rpn 48 -c zipf >zipf.txt


2つのファイルを横結合して、比較してみましょう。

  >paste ele.txt zipf.txt
  0.115   0.224276
  0.075   0.112138
  0.065   0.0747586
  0.06    0.0560689
  0.055   0.0448551
        :
      (中略)
        :
  0.005   0.00509718
  0.005   0.00498391
  0.005   0.00487556
  0.005   0.00477182
  0.005   0.00467241


大体、合っているような結果です。ただ、下位はかなり一致していますが、上位にはズレを感じます。とりあえず、グラフ化してみましょう。都道府県同様、要素数が多いので横に引き伸ばしてあります。

  >paste ele.txt zipf.txt | rpn 1 -c rownum >tmp
  >xyp -x,48 -y,.3 -k2 -s5,.1 -n -m -w65 <tmp
  ^y 0.3
  |
  |
  |+
  0.2
  |
  |
  |
  |
  0*+
  |
  | * +
  |    ++ **
  |       +++ +++ ***                                             x
  |o              +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++4+
  +-----5------10-----15-----20----25-----30-----35-----40----45-->


やはり、1位と2位の差が目立ちますが、大枠はジップの法則どおりですね。

        *


 今回は測定可能な破片のみを使って検証してみたのですが、仮に測定不可能な破片の90個を加えるとどうなるでしょうか。ジップの法則で計算できるので、仮想的にトップ5の占有率を求めてみましょう。

  >rpn 48 90 + -c seq | rpn 48 90 + -c zipf | rpn 5 -c head
  0.181551
  0.0907756
  0.0605171
  0.0453878
  0.0363102


理論上の占有率が低下しています。では、先ほどの実測値と比較してみましょう。ついでに、誤差百分率も併記しておきます。

       実測値  理論値(48個)  誤差     理論値(138個)   誤差
       =====================================================
       0.115   0.224276     -0.950     0.181551      -0.578
       0.075   0.112138     -0.495     0.0907756     -0.210
       0.065   0.0747586    -0.150     0.0605171      0.068
       0.06    0.0560689     0.065     0.0453878      0.243
       0.055   0.0448551     0.184     0.0363102      0.339
       -----------------------------------------------------
  平均 0.074   0.102419     -0.2692    0.0829083     -0.0276


実際には41g分が測定不能な破片と無数の粉状の破片分としてあるので、実測値の構成比も低下するはずです。従って、一概に上の表でもって結論付けることはできませんが、誤差は改善されているようです。

目視できない無数の粉状の破片を加えて、もっと精度の高い計測器で重量を測れば、よりジップの法則に近似する可能性がありますね。

        *


ベンフォードの法則のときも、理論値に一致した事例がありました。人為的なウェブへのアクセスや非人為的な大陸の面積、ボトルの破片などの結果を考察すると、ジップの法則もそれに負けず劣らず、適用範囲は広いようです。

ベンフォードの法則(1から9までの分布)とジップの法則(1位から9位までの分布)を比較するとほぼ一致します。誤差は最大16.5%、最小0.3%、平均8.1%です。

英単語の使用頻度から始まったジップの法則は、その後の研究から自然現象や社会現象にまで範囲を広げ、ウェブへのアクセス、都市の人口や音符の使用頻度、日本人の苗字、遺伝子の発現量、地震の大きさ、インターネット回線容量にまで至っています。

ジップの法則は冪乗則の1つですが、この法則は自己相似系の特徴も持っているのが興味深いところです。つまり、大きなスケールでの様相(グラフの形状)と小さなスケールでの様相が同じになるのです(スケールフリー)。七大大陸と似たような分布は、溶けて7つに割れた氷山でも同じように見られるということです。

ジップの法則…。まさに驚異的だと思えませんか。

実践科学アラカルトに戻るLinkIcon

情報ジップの法則からあまりに掛け離れた所得分布になると社会的に不安定になるとジップ自身が論文で述べています。所得分配の不平等に関しては応用コーナー不平等と格差の見える化にも詳しくあります。興味があれば閲覧ください。

警告rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。

情報pasteは講座サポートで公開されています。seq, fold, fold'はユーティリティーパッケージに同梱されています。headはrpnマイスターパッケージに同梱されています。rownum, rowacc, roweleはカンタン分析パッケージに同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

科学アラカルト

調べて実験してみよう

※実践コーナーのTOP

紹介 rpnの利用シーンはこちら…

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ
物語データを見抜くojt物語もどうぞ

実践他の分野への挑戦は実践TOP

応用rpnアプリケーションは応用TOP

part2

調べて実験してみよう

※実践コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ
物語データを見抜くojt物語もどうぞ

実践他の分野への挑戦は実践TOP

応用rpnアプリケーションは応用TOP

書籍紹介

記事に関連した書籍

本ウェブサイトで扱った話題に関連した書物で、スタッフが実際に読了したものを紹介。

書籍数学の書籍
数の世界は思ったよりもエキサイティング

書籍投資の書籍
失敗しない投資には広範囲で実践的な知識が必要

警告バックスラッシュはエンマークに読み替えて下さい(IE)。
バックスラッシュとエンマーク

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn試用版と標準版(2kリビジョン)はダブルクォートで囲って下さい。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS参照ください。

注意rpnの障害情報はこちら

警告rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。あくまで無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。