pandasのチートシートです。
pandasでデータの詳細を確認するときに使用する関数をまとめてみました。
データ分析・解析にはまずデータの全体像を確認する必要があります。具体的にはデータの数や欠損値の有無の確認などです。
いきなり解析や機械学習しようとするとエラーが多発しますのであらかじめデータの詳細を確認するようにしましょう。
今回は解析にGoogle Colaboratoryを使用しています。
Google Colaboratoryはpythonで機械学習、データ解析をする際に簡単にスタートできるためおすすめです。
プログラミング初学者がつまづきがちな環境構築のハードルもありません!
データの全体を確認する
データを読み込んだら無事データが読み取られているかどうかを確認します。データの読み取りに関しては以下の記事にまとめています。
【Python】pandasでデータの詳細を確認する【チートシート】
今回はGoogle Colaboratoryにもともと入っているカリフォルニアの住宅情報のデータを読み込みました。
import pandas as pd
df = pd.read_csv('/content/sample_data/california_housing_test.csv')
df.head()
df.head()
ではデータの頭の部分を読み取ることができます。
実際に使われるデータの大半は大量のデータであり、数千行のデータも少なくありません。
データを全て読み込むとメモリを多く消費するため、表示に時間もかかります。データの読み取りがうまくできたかの確認するためにはdf.head()
がおすすめです。df.head()
ではデータの頭5行を抽出することができます。
print(df.head())
longitude latitude ... median_income median_house_value
0 -122.05 37.37 ... 6.6085 344700.0
1 -118.30 34.26 ... 3.5990 176500.0
2 -117.81 33.78 ... 5.7934 270500.0
3 -118.36 33.82 ... 6.1359 330000.0
4 -119.67 36.33 ... 2.9375 81700.0
引数のデフォルトが5になっているため、先頭の5行を抜き出しています。もし先頭10行の場合はdf.head(10)
というように抜き出したい数だけ()の中に入れることができます。
どのようなデータが格納されているか、列の確認、データのタイプ(文字列なのか数値なのか)、ヘッダーがうまく読まれているかなどを確認できます。csvやExcelファイルを読み込んだ際はまずdf.head()
で確認するのがおすすめです。
df.tail()
df.tail()
はdf.head()
と逆で、データの末尾を確認することができます。
print(df.head())
longitude latitude ... median_income median_house_value
2995 -119.86 34.42 ... 1.1790 225000.0
2996 -118.14 34.06 ... 3.3906 237200.0
2997 -119.70 36.30 ... 2.2895 62000.0
2998 -117.12 34.10 ... 3.2708 162500.0
2999 -119.63 34.42 ... 8.5608 500001.0
データの末尾が見れると新しく入ったデータが無事にデータフレームに入っているかを確認できます。また、データの個数も確認できるのも魅力です。今回の場合、データは3000個あるんだなと確認することができます。
df.shape
データの形をタプルで返し、何行何列のデータかを把握することができます。
df.shape
(3000, 9)
これにより今回のデータが3000行9列であることがわかります。
df.columns
データにどのような列があるか確認するときに用います。データフレームからデータを射影(必要な列を抽出すること)する際に列の名前を指定する必要があります。そのため、データにどのような列があるか確認することはとても重要です。
df.columns
Index(['longitude', 'latitude', 'housing_median_age', 'total_rooms',
'total_bedrooms', 'population', 'households', 'median_income',
'median_house_value'],
dtype='object')
df.columns
があるのと同様にdf.index
も存在します。df.index
はdf.tail()
やdf.shape
で行数を確認できるため、あまり使用する機会はありません。
データの重複や欠損値を確認する
データの重複や欠損値はデータ解析の大きな障壁となります。それらのデータは削除や特定の値で置換などで対処する必要があります。
データの重複や欠損値を確認する関数を記していきます。
df.duplicated()
df.duplicated()
はデータの重複を確認する関数です。
df.duplicated()
0 False
1 False
2 False
3 False
4 False
...
2995 False
2996 False
2997 False
2998 False
2999 False
Length: 3000, dtype: bool
今回のようなデータ数が多い場合にはどの行のデータが重複しているかを把握することができません。データの重複数を確認するためにはsum関数を用います。
df.duplicated().sum()
0
今回は重複するデータはありませんでした。
引数に何も指定しないと全ての列で一致するデータしか抽出されません。特定の列の値で重複するデータを抽出する場合はsubset
の引数に列名を指定することで抽出することができます。subset
はリストにすることで複数の列で重複しているかを指定することができます。
今回は’total_rooms’と’housing_median_age’の両方が重複しているデータの数を確認していきます。
df.duplicated(subset=['total_rooms','housing_median_age']).sum()
26
重複しているデータが26個あることがわかりました。
df.isnull()
df.isnull()
はデータの欠損値を確認できます同様の関数にdf.isna()
がありますが、両者は同じ意味です。
df.duplicated()
と同様、該当する行をbool値で返すため、df.isnull().sum()
を使うことが多いです。
df.isnull.sum()
longitude 0
latitude 0
housing_median_age 0
total_rooms 0
total_bedrooms 0
population 0
households 0
median_income 0
median_house_value 0
dtype: int64
今回は欠損値のデータがないことがわかりました。
df.isnull().any()
をすると数ではなくbool値で返すこともできます。
df.isnull().any()
longitude False
latitude False
housing_median_age False
total_rooms False
total_bedrooms False
population False
households False
median_income False
median_house_value False
dtype: bool
データの欠損値の処理を行ったあとはisnull().sum()
やisull().any()
で欠損値がなくなっているか確認しましょう。
データの統計量を確認する
df.describe()
pandasではデータの要約統計量を確認する関数が用意されています。平均、最大最小値、標準偏差、四分位数を確認することができます。
print(df.describe())
longitude latitude ... median_income median_house_value
count 3000.000000 3000.00000 ... 3000.000000 3000.00000
mean -119.589200 35.63539 ... 3.807272 205846.27500
std 1.994936 2.12967 ... 1.854512 113119.68747
min -124.180000 32.56000 ... 0.499900 22500.00000
25% -121.810000 33.93000 ... 2.544000 121200.00000
50% -118.485000 34.27000 ... 3.487150 177650.00000
75% -118.020000 37.69000 ... 4.656475 263975.00000
max -114.490000 41.92000 ... 15.000100 500001.00000
データの要約からデータのおおまかな分布を確認することができます。
データの相関を確認する
df.corr()
データが数値である場合、データの相関係数を確認することができます。相関係数に関してはWikipediaなどを参照してください。-1〜1の値で表され、1に近ければ近いほど正の相関、-1に近いほど負の相関、逆に0に近ければ無相関であると言われています。
print(df.corr())
longitude latitude ... median_income median_house_value
longitude 1.000000 -0.925017 ... -0.018701 -0.050662
latitude -0.925017 1.000000 ... -0.072363 -0.138428
housing_median_age -0.064203 -0.025143 ... -0.144315 0.091409
total_rooms 0.049865 -0.039632 ... 0.221249 0.160427
total_bedrooms 0.070869 -0.068245 ... 0.024025 0.082279
population 0.111572 -0.117318 ... 0.032361 -0.001192
households 0.051062 -0.068296 ... 0.048625 0.100176
median_income -0.018701 -0.072363 ... 1.000000 0.672695
median_house_value -0.050662 -0.138428 ... 0.672695 1.000000
同じ列名同士であれば相関は必ず1になるので行列の対角線は1が並びます。
数値のみではぱっと見印象がわかりませんが、seabornのヒートマップを使うとより視覚化できます。

図から見るにlongitude(経度)とlatitude(緯度)が負の相関が強く、median_income(収入の中央値)とmedian_house_value(家の価格の中央値)が正の相関が強いことがわかります。
相関とヒートマップはデータの可視化に非常に便利なので覚えておいて損ではありません。
まとめ
データ解析する際はデータの詳細を確認し、解析の方針を決めていきましょう