“みたけ山トレイルラン”のCDFをグラフにしてみます。
以下の内容の続きです
”みたけ山トレイルラン”のPMF
http://jbclub.xii.jp/?p=587
再びの”みたけ山トレイルラン”のヒストグラム
http://jbclub.xii.jp/?p=573
#CDF
累積分布関数(CDF)
値をパーセンタイル順位に対応づける関数
パーセンタイル順位とは
分布中の与えられた値以下の値が分布中に占めるパーセント
たとえば、テストの順位で90パーセンタイル順位だった場合、受験者の90パーセントの人と同じかより良い結果をだしたということ。
CDFのグラフの出し方
#秒に変換 df['D'] = df['A'] / pd.to_timedelta('00:00:01') //1 df.head(10) Out[133]: A B C D 0 01:05:03 13.0 01:05:00 3903.0 1 01:07:10 13.0 01:05:00 4030.0 2 01:07:52 13.0 01:05:00 4072.0 3 01:12:00 14.0 01:10:00 4320.0 4 01:12:14 14.0 01:10:00 4334.0 5 01:12:31 14.0 01:10:00 4351.0 6 01:12:54 14.0 01:10:00 4374.0 7 01:13:23 14.0 01:10:00 4403.0 8 01:13:44 14.0 01:10:00 4424.0 9 01:13:54 14.0 01:10:00 4434.0 cdf = thinkstats2.Cdf(df['D']) thinkplot.Cdf(cdf) #グラフ化の体裁を整える plt.xticks([3600, 4500, 5400, 6300, 7200, 8100,9000,9900], ['1:00:00','1:15:00','1:30:00','1:45:00','2:00:00','2:15:00','2:30:00','2:45:00']) plt.xlabel('TIME') plt.ylabel('CDF')
最初にデータフレームのD列で秒表示にしているのはthinkplotでグラフにできないからです。
グラフはこうなります。
CDFを計算すればパーセンタイル順位の計算は簡単にできまうす。Cdfクラスには2つのメソッドが用意されています。
パーセンタイル順位
PercentileRank(X)
値xについてパーセンタイル順位を計算する。
Percentile(p)
パーセンタイル順位について対応する値xを計算する
パーセンタイル順位を計算するにはA列でCDFを計算しておいたほうがよいです。
cdf2 = thinkstats2.Cdf(df['A'])
パーセンタイル順位の計算
cdf2.PercentileRank(pd.to_timedelta('1:45:00')) Out[143]: 25.518925518925517 #今回はタイムが早いほうが順位が高いので、パーセンタイル順位は 100 - 25.518925518925517 Out[144]: 74.48107448107449
になります。
逆は例えば90パーセンタイル順位を知りたいとすると
以下のようにできます。
#パーセンタイル順位から対応する時間を計算 cdf2.Percentile(10) Out[57]: Timedelta('0 days 01:30:00')
こんな感じです。
以上