Pythonでpandas入門3(データの統計量の計算)
Pythonのデータ分析で用いられるpandasの入門編です。データ(DataFrame)の最大値や平均などの統計量の計算について解説します。
目次
データの要約統計量
describe()メソッドで、DataFrameの各列の統計量(平均や最大値など)を要約して出力できます。
import pandas as pd
df = pd.read_csv('test.csv', encoding='shift_jis')
stat = df.describe()
print(df)
print(stat)
最初にDataFrameの中身を表示して、その後にDataFrameの要約統計量を表示します。
Name World Japan
0 Windows 75.56 65.88
1 OS X 16.48 16.64
2 Chrome OS 2.09 0.51
3 Linux 1.97 1.34
World Japan
count 4.000000 4.000000
mean 24.025000 21.092500
std 35.025469 30.765486
min 1.970000 0.510000
25% 2.060000 1.132500
50% 9.285000 8.990000
75% 31.250000 28.950000
max 75.560000 65.880000
各列まとめて計算してくれるのは便利ですね。
各種統計量を計算する
各列の統計量を計算するメソッドは、それぞれ下記のようになっています。
統計量 |
メソッド |
---|---|
最小値 |
min() |
最大値 |
max() |
平均値 |
mean() |
中央値 |
median() |
合計値 |
sum() |
標準偏差 |
std() |
import pandas as pd
df = pd.read_csv('test.csv', encoding='shift_jis')
mi = df.min()
ma = df.max()
me = df.mean()
md = df.median()
su = df.sum()
st = df.std()
print(df)
print('最小値\r\n' + str(mi))
print('最大値\r\n' + str(ma))
print('平均値\r\n' + str(me))
print('中央値\r\n ' + str(md))
print('合計値\r\n ' + str(su))
print('標準偏差\r\n ' + str(st))
最初にDataFrameの中身を表示して、その後に各統計量を表示します。
Name World Japan
0 Windows 75.56 65.88
1 OS X 16.48 16.64
2 Chrome OS 2.09 0.51
3 Linux 1.97 1.34
最小値
Name Chrome OS
World 1.97
Japan 0.51
dtype: object
最大値
Name Windows
World 75.56
Japan 65.88
dtype: object
平均値
World 24.0250
Japan 21.0925
dtype: float64
中央値
World 9.285
Japan 8.990
dtype: float64
合計値
Name WindowsOS XChrome OSLinux
World 96.1
Japan 84.37
dtype: object
標準偏差
World 35.025469
Japan 30.765486
dtype: float64
合計は「Name」列の文字列が足されてますね。
列を指定して統計量を計算する
特定の列を指定して統計量を計算することもできます。
例として「World」列の合計値を計算します。
import pandas as pd
df = pd.read_csv('test.csv', encoding='shift_jis')
su = df['World'].sum()
print(df)
print('合計値\r\n ' + str(su))
最初にDataFrameの中身を表示して、その後に合計値を表示します。
Name World Japan
0 Windows 75.56 65.88
1 OS X 16.48 16.64
2 Chrome OS 2.09 0.51
3 Linux 1.97 1.34
合計値
96.10000000000001
最頻値を計算する
mode()メソッドでDataFrameの最頻値を計算できます。
import pandas as pd
df1 = pd.DataFrame([[0,0,0],[0,1,1],[1,1,2],[2,2,4]], columns=['c1','c2','sum'])
mo = df1.mode()
mo2 = df1['c2'].mode()
print(df1)
print(mo)
print(mo2)
最初にDataFrameの中身を表示して、その後に各列の最頻値を表示し、その後に「c2」列の最頻値を表示します。
c1 c2 sum
0 0 0 0
1 0 1 1
2 1 1 2
3 2 2 4
c1 c2 sum
0 0.0 1.0 0
1 NaN NaN 1
2 NaN NaN 2
3 NaN NaN 4
0 1
dtype: int64
「sum」列は0, 1, 2, 4の各数字が同じ頻度で出現しますので、結果が4つ表示されます。「c1」列と「c2」列は最頻値が1つだけなので、それ以外がNaNになっています。
関数を指定して集計する
agg()メソッドを使うと、関数を指定して集計ができます。
import pandas as pd
df = pd.read_csv('test.csv', encoding='shift_jis')
stat = df.agg({'World':['min','max'], 'Japan':['min','max','sum']})
print(df)
print(stat)
最初にDataFrameの中身を表示して、その後に「World」列の最大値と最小値および「Japan」列の最大値と最小値と合計を表示します。
Name World Japan
0 Windows 75.56 65.88
1 OS X 16.48 16.64
2 Chrome OS 2.09 0.51
3 Linux 1.97 1.34
World Japan
min 1.97 0.51
max 75.56 65.88
sum NaN 84.37
「World」列の方に指定しなかった関数の結果には、NaNが表示されていますね。
データをグループ化して統計量を計算する
groupby()メソッドで、データをグループ化できます。グループ化すると、それぞれのグループについて統計量の計算ができます。
import pandas as pd
df = pd.read_csv('test.csv', encoding='shift_jis')
df['platform'] = ['x64/arm', 'x64', 'x64/arm', 'x64/arm']
stat = df[['World','Japan','platform']].groupby('platform').min()
print(df)
print(stat)
最初にDataFrameの中身を表示して、「platform」列でグループ化した状態で各列の最小値を計算します。
Name World Japan platform
0 Windows 75.56 65.88 x64/arm
1 OS X 16.48 16.64 x64
2 Chrome OS 2.09 0.51 x64/arm
3 Linux 1.97 1.34 x64/arm
World Japan
platform
x64 16.48 16.64
x64/arm 1.97 0.51
MacのM1プロセッサがArmだってのは知ってます。この調査の時にはまだ出てなかったんです。
データのグループ毎のデータ数をカウントする
各グループ毎のデータ数をカウントします。
value_counts()メソッドでグループ分けしたい列を指定してカウントする方法と、groupby()メソッドでグループ化してからcount()メソッドでカウントする方法があります。
import pandas as pd
df = pd.read_csv('test.csv', encoding='shift_jis')
df['platform'] = ['x64/arm', 'x64', 'x64/arm', 'x64/arm']
cn1 = df['platform'].value_counts()
cn2 = df.groupby('platform')['platform'].count()
print(df)
print(cn1)
print(cn2)
最初にDataFrameの中身を表示して、その後にvalue_counts()メソッドでの結果を、さらにcount()メソッドでの結果を表示します。
Name World Japan platform
0 Windows 75.56 65.88 x64/arm
1 OS X 16.48 16.64 x64
2 Chrome OS 2.09 0.51 x64/arm
3 Linux 1.97 1.34 x64/arm
x64/arm 3
x64 1
Name: platform, dtype: int64
platform
x64 1
x64/arm 3
Name: platform, dtype: int64
value_counts()メソッドの方が便利ですね。
公開日
広告
Pythonでデータ分析カテゴリの投稿
- DataFrameの欠損値を特定の値で置き換える
- Pythonでpandas入門1(データの入力とデータへのアクセス)
- Pythonでpandas入門2(データの追加と削除および並び替え)
- Pythonでpandas入門3(データの統計量の計算)
- Pythonでpandas入門4(データの連結と結合)
- Pythonでpandas入門5(欠損値(NaN)の扱い)
- Pythonでデータを学習用と検証用に分割する
- Pythonでデータ分析入門1(初めての回帰分析)
- Pythonでデータ分析入門2(初めてのロジスティック回帰(2クラス分類))
- Pythonでデータ分析入門3(初めての決定木(多クラス分類))
- Pythonで回帰モデルの評価関数
- Pythonで箱ひげ図を描く
- Python(pandas)でExcelファイルを読み込んでDataFrameにする
- pandasでカテゴリ変数を数値データに変換する
- pandasでクロス集計する
- pandasで同じデータ(要素)がいくつあるか調べる
- pandasで相関係数を計算する
- pandasとseabornでデータの可視化(散布図行列)
- pandasの学習用のデータセットを入手する
- scikit-learnのサンプルデータセットを入手する