前回の記事
基本統計量の確認
- 各列の基本統計量を計算したい
df.describe()
count | 標本数 | 行数 |
mean | 平均値 | 算術平均 |
std | 標準偏差 | データのばらつき |
min | 最小値 | 最も小さい値 |
25% | 第1四分位数 | データを降順に並び替えたとき、後半から4分の1番目にあたる値 |
50% | 第2四分位数(中央値) | データを降順に並び替えたとき、後半から4分の2番目にあたる値 |
75% | 第3四分位数 | データを降順に並び替えたとき、後半から4分の3番目にあたる値 |
max | 最大値 | 最も大きい値 |
個別の統計量の計算
要素の個数 | データフレーム名.count() | |
算術平均 | データフレーム名.mean() | |
標準偏差 | データフレーム名.std() | n-1で割った不偏標準偏差 |
最小値 | データフレーム名.min() | |
最大値 | データフレーム名.max() | |
中央値 | データフレーム名.median() | |
最頻値 | データフレーム名.mode() | 最も出現回数の多い値 |
ユニークな値の個数 | データフレーム名.nuique() | 重複を除いた値の個数 |
特定の列のユニーク値の出現頻度 | データフレーム名["列名"].value_counts() | Series型メソッド |
df.nunique() -> pd.Series
# 各列のユニークな数
df["特定カラム"].value_count() -> pd.Series
# 特定列のユニークな値の出現回数
groupby
df = pd.DataFrame({
'city': ['osaka', 'osaka', 'osaka', 'osaka', 'tokyo', 'tokyo', 'tokyo'],
'food': ['apple', 'orange', 'banana', 'banana', 'apple', 'apple', 'banana'],
'price': [100, 200, 250, 300, 150, 200, 400],
'quantity': [1, 2, 3, 4, 5, 6, 7]
})
df
city | food | price | quantity | |
---|---|---|---|---|
0 | osaka | apple | 100 | 1 |
1 | osaka | orange | 200 | 2 |
2 | osaka | banana | 250 | 3 |
3 | osaka | banana | 300 | 4 |
4 | tokyo | apple | 150 | 5 |
5 | tokyo | apple | 200 | 6 |
6 | tokyo | banana | 400 | 7 |
object = df.groupby("グループ化したい列").関数
df.groupby("city").mean()
price | quantity | |
---|---|---|
city | ||
osaka | 212.5 | 2.5 |
tokyo | 250.0 | 6.0 |
indexの表示
これでindex表示してくれる
df.groupby(['city', 'food'], as_index=False).mean()
メソッドの適用
- count
- 標本数
(欠損値を含まない)
- 標本数
- size
- 標本数
(欠損値を含む)
- 標本数
- sum
- 合計
- mean
- 平均
- var
- 分散
- std
- 標準偏差
- max
- 最大値
- min
- 最小値
aggオブジェクト
df.groupby("カラム").agg(処理方法)
- aggはリストとして入れられるからそれぞれ表示できたりもする
- さらにlambdaを代入できる
df.groupby("column").agg(lambda x: x*1.1)
# それぞれ1.1倍になる
ピボットテーブル
- ピボットテーブルとはユニーク値ごとにグループ化して統計量の算出をするために用いられる.
df.pivot_table(index = "まとめたい単位",
values = "まとめたい列",
aggfunc = "集計方法"
)
df.pivot_table(index = "集計単位",
columns = "集計単位2",
values = "集計する列名",
aggfunc = "関数",
margins = "合計列を追加するかどうか",
margins_name = "合計列の名前"
)
終わり
ピボットテーブルは正直たくさんやって感覚でなれる必要があると思う.そもそもいつ使うのかいまいちわかってないけどできてて損はないからマスターしたい
乙