LoginSignup
16
18

More than 3 years have passed since last update.

データ分析チートシート

Last updated at Posted at 2021-01-26

はじめに

 自分用にデータ分析チートシートを作成しました。

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'

参考

Python初学者のためのPandas100本ノック



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]))

参考

sklearn.ensemble.RandomForestClassifier

16
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
18