『IPython データサイエンスクックブック』の第7章のレシピ7.4を写経して、jupyterのdownload asでhtmlをはき出し、そのままブログに貼り付けてみました。色とかおかしいところがあるので、出力方法に関しては今後色々と調べなくてはなりません。ただ、実際に触ってみて、ユーザーインターフェースに関してRとの著しい乖離はない印象です。ここでは扱いませんが、ランダムフォレストを用いた重要な回帰特徴量などもRに比べてコードの長さも遜色ありませんでした。iPython jupyterはRからPythonへ手を広げるハードルを下げてくれる良い環境だと思いました。
以下では、Datasets used in the IPython Cookbook, the definitive guide to high-performance scientific computing and data science in Pythonのtennisという、テニス大会と選手に関するデータをもとに、ロジャー・フェデラーのエースと得点との関係を扱っています。手法としては相関係数の計算と、カイ二乗検定を行っています。
In [1]:
#NumPy,pandas,SciPy.stats,matplotlibをインポートする。
import numpy as np
import pandas as pd
import scipy.stats as st
import matplotlib.pyplot as plt
%matplotlib inline
In [2]:
#ロジャー・フェデラーのデータを読み込む。カレントディレクトリにデータを置いておきましょう。
player = 'Roger Federer'
filename = "data/{name}.csv".format(
name=player.replace(' ', '-'))
df = pd.read_csv(filename)
In [31]:
#データを確認する。
print("Number of columns: " + str(len(df.columns)))
df[df.columns[:8]].tail()
Out[31]:
In [4]:
#全ポイントに占める特典の割合とエースの割合だけを表示する。
npoints = df['player1 total points total']
points = df['player1 total points won'] / npoints
aces = df['player1 aces'] / npoints
In [5]:
plt.plot(points, aces, '.')
plt.xlabel('% of points won')
plt.ylabel('% of aces')
plt.xlim(0., 1.)
plt.ylim(0.)
Out[5]:
In [6]:
#二つの列だけを持つDataFrameオブジェクトを新しく作る。
df_bis = pd.DataFrame({'points': points,
'aces': aces}).dropna()
df_bis.tail()
Out[6]:
In [7]:
#ピアソン相関係数を計算する。
df_bis.corr()
Out[7]:
In [9]:
#変数の二値化
df_bis['result'] = df_bis['points'] > df_bis['points'].median()
df_bis['manyaces'] = df_bis['aces'] > df_bis['aces'].median()
In [10]:
#それぞれの可能性の頻度からなる分割表を作る。
pd.crosstab(df_bis['result'], df_bis['manyaces'])
Out[10]:
In [11]:
#カイ二乗検定の統計値とp値の計算(2番目の数値がp値)
st.chi2_contingency(_)
Out[11]:
In [ ]: