みなさん、こんにちは。
本稿は米国株ではなく、データ解析のお話です。
機械学習の前に立ちはだかる、もっともテンションが下がる作業。データの前処理についてまとめます。
私も、まとまった時間に解析を始めようと意気込むのですが、小一時間ほどデータと格闘し疲れて寝るパターンが多いので、本稿では毎回調べるPandasの基本操作となります。
なお、明記しませんが、本稿で扱っているデータはどこかで拾ったワインに関するサンプルデータです。
スポンサーリンク
データの確認
操作 | コマンド |
---|---|
行数の確認 | len(df) |
次元数の確認 | df.shape |
カラム情報の一覧 | df.info() |
平均、四分位 | df.describe() |
head/tail |
df.head(5) df.tail(5) |
データ操作
loc,iloc,ixと複数ありわかりづらいですね。
操作 | コマンド |
---|---|
列名の指定 | df['Class'] df[['Class','Alcohol']] |
locによる列指定 | df.loc[:,'Ash'] df.loc[:,['Class','Alcohol']] |
ilocによる列指定 | df.iloc[:,3] df.iloc[:,0:5] |
ixによる列指定 | df.ix[:,'Class'] df.ix[0:4,3:8] df.ix[0:1,['Class','Alcohol']] |
データの選択
細かい操作をする際はこの辺りが必要。
操作 | コマンド |
---|---|
queryによる選択 | df.query('Class == 2') |
複数条件(アンド) |
df.query("Alcohol > 13 & Class == 2") |
複数条件(オア) | df.query("Alcohol >14 | Ash < 2.2") |
変数名の指定 | df.query("Proline == @変数名") |
indexを使ったSubsetting | df.query("index == 11") df.query("index in [11,12]") |
ソート
稀に使う。
操作 | コマンド |
---|---|
昇順でソート | df.sort_values(by = "Alcohol",ascending = True) |
複数項目でソート |
df.sort_values(by = ["Alcohol","Flavanoids"],ascending = True) |
複数項目でソートB | df.sort_values(by = ["Alcohol","Flavanoids"],ascending = [True,False]) |
指定のリストで ソート |
pd.Categorical(df["項番"],list) |
基本統計量
変数毎の計算など、よく使います。
操作 | コマンド |
---|---|
列方向で総和 | df["Alcohol"].sum(axis = 0) |
行方向で総和 |
df.sum(axis = 1) |
クロス集計 |
df.pivot_table("Alcohol", |
ピボットテーブル | df.pivot_table(values = 'Alcohol', index=["Class","Magnesium"], columns=["Ash"], fill_value = 0, aggfunc="sum") |
Groupby
ラベル毎のクロス集計などでよく使いますが、よく忘れます。
1 2 3 4 |
# クラスでグループ化 df_grouped = df.groupby("Class") df_grouped[["Alcohol","Ash"]].agg(['mean','std']) |
Alcohol | Ash | |||
---|---|---|---|---|
mean | std | mean | std | |
Class | ||||
1 | 13.744746 | 0.462125 | 2.455593 | 0.227166 |
2 | 12.278732 | 0.537964 | 2.244789 | 0.315467 |
3 | 13.153750 | 0.530241 | 2.437083 | 0.184690 |