はじめに
自分用にデータ分析チートシートを作成しました。
Pandas
import pands as pd
データの要約
関数名 | 内容 | メモ |
---|---|---|
df.describe() | データ要約 | |
df.info() | データ要約 欠測値の確認 |
|
df.nunique() | ユニークな要素数の確認 | |
df['name'].value_counts() | 要素と出現回数の確認 | |
df.mean(axis=1) | 列方向に平均値を算出 | |
df.groupby('age').max() | グルーピングして算出 | |
df.corr() | Peasonの相関行列 | |
df.idxmax() | 最大値の行名を取得 | |
df.value_counts() | 要素数の確認 |
データ取り出し
関数名 | 内容 | メモ |
---|---|---|
df.iloc(index,columns(数字) | データ取出 [行,列(数字)]で指定する |
|
df.sort_index(axis=0) | インデックスで並べ替え | |
df.copy() | 値渡しでコピー | df2 = dfだとbyRef |
df.index.values | インデックスをnparrayで取り出し | tolist()ならリストで出力 |
df.loc[:,:] | 行・列を指定してデータを取り出し | 列はラベルで指定 |
df.iloc[:,:] | 行・列を指定してデータを取り出し | 列はindexで指定 |
df_copy.to_csv('t.csv') | CSVに出力 | |
df[df['age']>=30] | 指定条件でデータを抽出 | |
df['sex'][df['sex']=='male'] | 指定条件 & 指定列 | |
df.query('sex=="female" and age>=40') | 指定条件をクエリで指定 | |
df.query(' a == @x') | x=1等、変数を使用して検索条件を指定 | |
df.query(' a in @y') | y=[1,2,3]等、変数リストを使用 | |
df.query('name.str.contains("Sato")') | 文字列に特定文字が含まれる場合 | ' "を使い分ける |
|
加工
関数名 | 内容 | メモ |
---|---|---|
df.round() | 数字の丸め | |
df.drop(3,axis=0) | 軸を指定してdropする | |
df.rename(columns={'name':'nickname'}) | 列名をリネーム | |
df.rename(index={1:10}) | indexをリネーム | |
df['age'] = df['age'].fillna(17) | Na(欠測値)を置換 | |
df.dropna() | 一つでも欠測値がある行を削除 | |
df.sample(frac=0.5) | データの一部をランダムに抽出 | |
df2.drop_duplicates() | 重複行を削除 | |
df.transpose() | 行と列を入れ替え | |
pd.merge(df2,df3,on='name',how='left') | SQLのように指定列に対して結合する | |
pd.get_dummies(df, colums=['sex']) | ワンホットエンコーディング |
グラフ化
# 以下を入力することで、日本語対応可能
from matplotlib import rcParams
rcParams['font.family'] = 'meiryo'
関数名 | 内容 | メモ |
---|---|---|
df.hist() | ヒストグラム | |
df.plot(kind='hist',x=a) | ヒストグラム | kind = bar, scatterなど種々グラフに対応 |
pd.plotting.scatter_matrix(df) | 散布図行列 | sns.pairplot()の方がベターか? |
df.plot(kind='scatter', x=a,y=b) | 個別散布図 |
seaborn
import seaborn as sns
# 以下を入れることで日本語対応
from matplotlib import rcParams
rcParams['font.family'] = 'meiryo'
参考
scikit-learn
インポート時はそれぞれのクラスをインポートして使用することが多い。
from scikit-learn import MinMaxScaler
標準化の方法
scikit-learnで標準化を行う場合、keras等と同様に StandardScaler
をインスタンス化したのち、fitで訓練 → transformで適応する。
# 標準化モデルのインスタンス化
scaler = StandardScaler()
# データ訓練
scaler.fit(df)
# 訓練データで変換 (出力は多重リスト)
df_std = scaler.transform(df)
# データフレームへ変換
df_std = pd.DataFrame(df_std, columns=df.columns)
# 元データへの変換
df_inverse = scaler.inverse_transform(df_std)
ラベルのエンコーディング
StandardScaler
と同様にLabelEncoder
をインスタンス化して使用する。
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder() #ラベルエンコーダのインスタンスを作成
df['sex'] = le.fit_transform(df['sex']) #エンコーディング
df.head()
テストデータの分割
単純にデータを分解する方法は以下の通り。
from sklearn.model_selection import train_test_split
(features , test_X , target , test_y) = train_test_split(features, target , test_size = 0.3 , random_state = 0)
参考
sklearn.model_selection.cross_val_score
予測の実行と評価
単純にデータを分解する方法は以下の通り。
from sklearn.ensemble import RandomForestClassifier
# ランダムフォレストのインスタンスを作成
model = RandomForestClassifier(n_estimators=100,random_state=0)
# 学習の実行
model.fit(features,target)
# 予測の実行
pred = model.predict(test_X)
# 予測の整合性確認(評価指標は選択する必要有)
from sklearn.metrics import accuracy_score
accuracy_score(pred,test_y)
# 特徴量の重要度を表示
importace = model.feature_importances_
print('Feature Importances:')
for i, feat in enumerate(['pclass','age','sex','fare','embarked']):
print('\t{0:20s} : {1:>.5f}'.format(feat, importace[i]))