Pandasを用いて統計量を取得する方法を解説します。統計量とは、平均や標準偏差、最大値、最小値、などを指します。データ分析をする時の初手として用いることが多いので、しっかりと覚えましょう。
本記事後半で生データにから統計量を取得する例を示します。生データは時折、汚いデータであることがあります。今回の例では、汚いデータの1例、測定していない箇所(セル)に「-」の文字列が含まれている場合の前処理をし、統計量を取得する方法の解説をします。
統計量の取得は、pandasでのデータ分析の基本です。
しっかりとマスターしましょう。
pandasによる統計量の取得方法
df.describe()
pandasで統計量を取得するには、pandas.describe()
を使用します。pandas.describe()
では、pandas.DataFrame
の各列の以下の値を算出可能です。
- count:データ数
- mean:平均値
- std:標準偏差
- min:最小値
- 25%:1/4分位数
- 50%:中央値(median)
- 75%:3/4分位数
- max:最大値
様々な型の列が存在するpandas.DataFrame
の場合、デフォルトでは数値(整数型int、浮動小数点型float)の列のみが選択されます。
pandasによる統計量の取得例
データセット
以下のサイトの表1のデータをダウンロードして、用います。
実行環境
Jupyter notebookを用います。
Jupyter notebookは、「Anaconda Navigator」より起動可能です。起動方法の詳細は以下のリンク先より確認ください。
コード例
CSV読み込む
import pandas as pd
df = pd.read_csv('c01.csv',encoding="SHIFT-JIS")#csv読み出し
各列の統計量を抽出する
df.describe()
実行結果
あれ、人口が計算されなかった。
原因を調査する。dtype
でデータの型を確認する。
すると、objectのデータの統計量が算出できていない。object
には、str
やfloat
などのデータ混在しているケースです。
df.dtypes
なので、str
の型をfloat
の型に変換しましょう。変換するには、.astype(float)
を用います。
df['人口(総数)'].astype(float)
‘-‘がfloatに変換できない。なるほど、どこかのセルに’-‘が含まれているのですね。
そこで、’-‘を’0’に変換(*1)し、float型に変換(*2)します。そのあと、float型の0を欠損値に変換(*3)します。
なぜ、欠損値にするかというと、この対象セルでは、”測定していない”という意味だからです。
0に変換したまま、統計量を求めると、値が不正確になります。なので、欠損値に変換します。欠損値は、numpyで表現可能です。
import numpy as np
df['人口(総数)']=df ['人口(総数)'].str.replace('-', '0')#(*1)
df['人口(総数)']=df['人口(総数)'].astype(float)#(*2)
df.loc[df['人口(総数)'] == 0, ['人口(総数)'] ] = np.nan#(*3)
他の二つのセルも同様に処理しましょう。
df['人口(男)']=df['人口(男)'].str.replace('-', '0')
df['人口(男)']=df['人口(男)'].astype(float)
df.loc[df['人口(男)'] == 0, ['人口(男)'] ] = np.nan
df['人口(女)']=df ['人口(女)'].str.replace('-', '0')
df['人口(女)']=df['人口(女)'].astype(float)
df.loc[df['人口(女)'] == 0, ['人口(女)'] ] = np.nan
そして再度実行します。
df.describe().astype(int)
実行できました。
このように、汚いデータにおいては、前処理が大切になります。この汚いデータをどのように処理するのかをなどのより実践的な内容を学びたい人は、こちらの書籍で学ぶことをお勧めします。
コメント