Categories: Python

みたけ山トレイルランのヒストグラム

先日出てきたみたけ山トレイルラン(15km)の大会の記録をPythonを使ってヒストグラムにしてみました。
http://www.kfctriathlon.jp/pdf/result_mitake2015.pdf
記録は公開されていますがPDF形式なのでCSVに変換する必要があります。
この作業が一番大変だったかも。

from pandas import Series, DataFrame
import pandas as pd
import numpy as np

CSVファイルを取り込みます。データに漢字が入っているとエラーになったりします。
sakuraエディタとかで文字コードを SJIS→UTF-8にしてからやるとうまく取り込めました。

tm = pd.read_csv('C:/work/mitake.csv',skiprows=1, names=['Rank', 'No','FamilyName','FirstName','Age','Sex','Pref','Time'], encoding='utf-8')

時間データの変換

pd.__version__で0.16.2のバージョンの場合
tmd = pd.to_timedelta(tm['Time'])

'0.17.0'のバージョンの場合
tmd = Series([pd.to_timedelta(str(i)) for i in tm['Time']])

インデックスの作成

rng= pd.timedelta_range('1:05:00',periods=22,freq='5T')

groupbyを使用するためDataFrameの形にしています。

df = pd.DataFrame({"time":tmd,"value":tm['Rank']})

五分毎の人数のカウント

s = df.groupby(tmd / pd.to_timedelta('00:05:00') // 1).value.count()

インデックスを時間にします。

s.index = rng

これで5分ごとの人数がでました。

s
Out[24]: 
01:05:00     3
01:10:00     8
01:15:00     3
01:20:00    18
01:25:00    27
01:30:00    34
01:35:00    56
01:40:00    60
01:45:00    67
01:50:00    78
01:55:00    66
02:00:00    67
02:05:00    60
02:10:00    53
02:15:00    77
02:20:00    51
02:25:00    41
02:30:00    22
02:35:00    15
02:40:00     9
02:45:00     2
02:50:00     2
Freq: 5T, Name: value, dtype: int64

次にグラフにしてみます。
一旦インデックスを元に戻します。

s = df.groupby(tmd / pd.to_timedelta('00:05:00') // 1).value.count()

棒グラフにします。

%pylab
import matplotlib.pyplot as plt 
x = s.index
y = s.values
plt.bar(x,y,width = 1,align="center")
plt.xticks([12.5, 15.5, 18.5, 21.5, 24.5,27.5,30.5,33.5], ['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.xticks([12, 15, 18, 21, 24,27,30,33], ['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('COUNT') 

できました。

へーこういう分布だったんだー
って感じですかね。

※参考
■Pythonで日本語を扱うには? – 文字コードについて理解しよう
http://news.mynavi.jp/series/python/014/

■Python pandas プロット機能を使いこなす
http://sinhrks.hatenablog.com/entry/2015/11/15/222543

■Pandas ドキュメント
http://pandas.pydata.org/pandas-docs/stable/timeseries.html
http://pandas.pydata.org/pandas-docs/version/0.17.1/whatsnew.html

■How to resample timedeltas?
http://stackoverflow.com/questions/20270012/how-to-resample-timedeltas

■標準python、numpy、pandasを行ったり来たりするために①
http://qiita.com/richi40/items/6b3af6f4b00d62dbe8e1

■棒グラフの描写
http://yubais.net/doc/matplotlib/bar.html
■参考2014ハセツネデータ解析!!
http://usakame7.web.fc2.com/diary/2014/1012/2.html

関連する投稿:

kaz

View Comments

Share
Published by
kaz

Recent Posts

よく使うショートカットキー

土曜日の日経新聞のNIKKEI…

3年 ago

気になるETFのメモ

ETFを色々調べていたので銘柄…

4年 ago

SPDRゴールド・シェアETF(GLD)を買いました

無事に米国株取引口座を開設でき…

4年 ago

インフレになったらどうなるのか

最近、インフレになったらどうな…

4年 ago

複利の話とiDeCoのすすめ

転職した会社には確定拠出年金が…

4年 ago