kaggleなどのデータ分析で忘れがちなpythonコードを使用する段階ごとにまとめておきます
jupyter notebookの使用を想定しています
はじめ
定番モジュールの読み込み
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # numpyとpandas import numpy as np import pandas as pd # ファイルシステム管理(カーネルでのみ利用) import os # 警告を消す import warnings warnings.filterwarnings('ignore') # 可視化 import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline #表示する最大列数を変更 pd.set_option('display.max_columns', 100) # 表示する最大行数を変更 pd.set_option('display.max_rows', 100) |
訓練データを読み込み、データサイズと先頭行を把握
1 2 3 4 5 6 | # sepでデータ間の区切り文字を指定(デフォルトでは',') # index_colでindexとなるカラムを指定(デフォルトでは自動で0,1,2...のindexが割り当てられる) # index_col=0にすると、元々のデータの一番左のカラムが自動でindexとなる df_train=pd.read_csv('パス or URL',sep=';',index_col=0) print('Training data shape: ', df_train.shape) df_train.head() |
元々のデータの左端に0,1,2...のindexが書かれている場合は、index_col=0にしないと、0,1,2..のindexが重複してしまうよ♪
テストデータを読み込み、データサイズと先頭行を把握
1 2 3 4 | # 訓練データと同様 df_test=pd.read_csv('パス or URL',sep=';',index_col=0) print('Testing data shape: ', df_test.shape) df_test.head() |
データの値を観察
全体に注目
統計量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # カラムごとのdtypeとnon-nullデータ数 df.info() # 最頻値 df.mode() # 分散 df.var() # 標準偏差 df.std() np.sqrt(df.std()) # カラムごとの平均値、中央値、標準偏差などを一気に表示 # include='all'にするとカテゴリカルなカラムでも統計量を表示(count,unique,top,freqのみ) # 25%:第1四分位点(全体を100とした時小さい方から25番目の値),50%:中央値 # 75%:第3四分位点(全体を100とした時小さい方から75番目の値) df.describe(include='all') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # カラムごとの欠損値数とその割合を算出する関数 def missing_values_table(df): # 全欠損値数 mis_count = df.isnull().sum() # 欠損値の割合 mis_count_percent = 100 * df.isnull().sum() / len(df) # 出力する表の作成 mis_count_table = pd.concat([mis_count, mis_count_percent], axis=1) # カラム名のリネーム mis_count_table = mis_count_table.rename(columns = {0 : 'Missing count', 1 : '% of Total count'}) # 欠損値数が0じゃないものだけを取り出し降順に並び替え mis_count_table = mis_count_table[ mis_count_table.iloc[:,1] != 0].sort_values( '% of Total count', ascending=False).round(1) # 全カラム数と欠損値のあるカラム数を出力 print ("Your selected dataframe has " + str(df.shape[1]) + " columns.\n"\ "There are " + str(mis_count_table.shape[0]) +" columns that have missing values.") return mis_count_table missing_values_df = missing_values_table(df) |
他のカラムに注目
統計量
1 2 3 4 5 6 | # 特定のカラムにおいて各値ごとの個数 df['カラム名'].value_counts() # カテゴリカルなデータだけの統計量を表示 # df.describe()でinclude='all'とすると出現していた部分 df.select_dtypes('object').describe() |
グラフで図示
1 2 3 4 5 6 7 8 | #ヒストグラム df['カラム名'].plot.hist() #複数のカラムでのヒストグラムと複数のカラム間の関係性グラフ sns.pairplot(df[["カラム名1","カラム名2","カラム名3"]]) #箱ひげ図 plt.boxplot([df['カラム名1'],df['カラム名2']]) |
データの加工
ラベルエンコーディングとone-hotエンコーディング