プログラミング

【Python】pandasでデータの詳細を確認する【チートシート】

pandasのチートシートです。

pandasでデータの詳細を確認するときに使用する関数をまとめてみました。

データ分析・解析にはまずデータの全体像を確認する必要があります。具体的にはデータの数や欠損値の有無の確認などです。

いきなり解析や機械学習しようとするとエラーが多発しますのであらかじめデータの詳細を確認するようにしましょう。

今回は解析にGoogle Colaboratoryを使用しています。

Google Colaboratoryはpythonで機械学習、データ解析をする際に簡単にスタートできるためおすすめです。

プログラミング初学者がつまづきがちな環境構築のハードルもありません!

今回も各関数の詳細は公式ドキュメントを参考にしています。

その他引数や詳細な操作などは公式ドキュメンをご参考ください。

pandas documentation Version: 1.2.2

データの全体を確認する

データを読み込んだら無事データが読み取られているかどうかを確認します。データの読み取りに関しては以下の記事にまとめています。

【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.indexdf.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(家の価格の中央値)が正の相関が強いことがわかります。

相関とヒートマップはデータの可視化に非常に便利なので覚えておいて損ではありません。

まとめ

ポイント

データ解析する際はデータの詳細を確認し、解析の方針を決めていきましょう

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です