2014年02月12日

エクセルでデータを間引いてグラフを描く。maxif の実現


 エクセルで何万レコードもあるデータをそのままグラフにしようとかなんとかしようとすると、とっても時間がかかるし、そもそも無駄なので、データを間引きたくなります。

 これを書き始めてから、ふと検索してみたら、

 データを間引く方法−INDIRECT関数・ROW関数:Excel(エクセル)の関数・数式の使い方-検索・行列

 と、数行ごとにする方法を見つけて、なるほどですが、ここでは今回行った maxif みたいなことができる別解を自分のためにメモ。「エクセル maxif 」とか検索すると間引きには使えない方法ばかりヒットするので。(以前もこうしたのに忘れててまた一から考えてしまいました)

 データはA,B列にあるとして、A列でソートしてあるとします。
 J列にA列で取り上げたい数値を並べます(10, 20, 30, 40, ....とか)。

 K列を =COUNTIF(A$2:A$10000,"<"&J2) として、
 M列を =INDEX(A$2:A$10000,K2)
 L列を =INDEX(B$2:B$10000,K2)
とすると、M,L列に新しい間引かれたデータ列ができます。

COUNTIF のところで、与えた数字(J2の値)を超えない最大の行を求めて、
INDEXで、その行のデータを取り出しています。

なお、J2が小さくて countif が 0 になる場合は誤動作するので、正確には
 M列を =IF($K2>0,INDEX(A$2:A$10000,$K2),0)
 L列を =IF($K2>0,INDEX(B$2:B$10000,$K2),0)

とかします。
posted by 産業創出ネットワーク at 12:28 | 記事 | このブログの読者になる | 更新情報をチェックする

2014年02月09日

規模別対象値合計関数の両対数グラフ


 ニッチ度補遺

で作った窓についての続きです。

 対象値視点の規模別対象値合計関数 S_1(x) は次のように表せました。

 

 このS_1(x)の対数は次のようになります。

 

 したがって、S_1を両対数のグラフに書くとその曲線は

 

 となります。たとえば、pが正規分布の確率密度関数の場合、log(p)は上に凸の二次関数となり、+ξ で軸が正の方向に少し移動しますが、全体としては、やはり上に凸の二次関数になっています。

pdistwindow.png

ということで、以前書いたこのグラフは、 S_1 を両対数で描いたグラフということが分かりました。

 手元にあるいくつかの分布は、このグラフを描いたとき、二次曲線で近似するのは少し誤差が大きいようです。今後、どのような関数で近似できるのかを調べるのが今後の興味深い問題です。
 

posted by 産業創出ネットワーク at 21:38 | 記事 | このブログの読者になる | 更新情報をチェックする

ニッチ度補遺

 
 ロングテールは、ヒトの多様な欲望を満たす

 で、ニッチ度 c という変数xの逆数を定義して、その確率密度分布から、元のロングテール分布を再現できると書きましたが、そんなん元の x の確率密度分布からだって同じことできるじゃんと思うかもしれません(自分が思った)。

 ニッチ度 c の方が便利なのは、分布を具体的に理想的なべき乗則で考えると分かりやすいです。つまり x の相補累積分布関数 F_c(x) について、



とすると、その確率密度分布 f(x) は、



となりますが、ニッチ度 c = 1/x の補累積分布関数 G_c(x) について確率密度分布 g(x) を求めると、


(C は適当な定数)


となり、c に対して一様になります。S_1、つまり対象値視点の規模別対象値合計関数が定数になるのも同様です。S_1の方は、私たちの実体験を関数で表したものであり、g(c)が同じ関数で書けることも g(c)がとても便利な点です。

 gとS_1がなぜ同じになるのか、まだちょっと直感的に理解していないのですが、良くF_c(x) = P_c(log x)のように log x で変換して考えるので、すべて log 空間で考えると分かりやすいのかもしれません。互いに行き来する演算子みたいなの定義して書くとか。

 ちょっとまだそこまでこなれていないのですが、その準備として、F_c(x) = 1/x という式について、P_c の表記で一通り書いておきます。



 従って、


 となり、同じ関数になります。それが決定的な意味を持つのかはよく分かりませんが、S_1 や g に関して、


と定数になることがわかります。

 ついでに p を log で変換した p^l を考えると、

となりますが、これを微分した関数は定数になっていて、似たような変換は S_1 を求める時にもやっているので、この両対数での p' は S_1 と同じような意味を持つのではないかとにらんでいます。

 特に、ロングテールは対数正規分布で近似できることがあるのですが、その確率密度関数φについて、同様の操作を施すと、



と上に凸の二次関数になっています。このとき元の分布は対数正規分布になります。
pdistwindow.png
つまり、このグラフ上でいろんな形の分布を作ってやることで、現実の様々なロングテールをより上手に近似することができるでしょう。またこのグラフの意味が分かれば、ロングテールを調べるということは、このグラフを調べることになるかもしれません。

 一般にロングテールというと、このグラフ上で実際の窓を直線で近似してその傾きを調べていると思いますが、そんな近似はとても原始的で、今後は少なくとも上記のように二次関数などで近似することが必要になってくるのではないでしょうか。



posted by 産業創出ネットワーク at 12:00 | 記事 | このブログの読者になる | 更新情報をチェックする