Python

python pandas③|【初心者向け】統計量の取得

Python
https://amzn.to/3pk3BcY

Pandasを用いて統計量を取得する方法を解説します。統計量とは、平均や標準偏差、最大値、最小値、などを指します。データ分析をする時の初手として用いることが多いので、しっかりと覚えましょう。

本記事後半で生データにから統計量を取得する例を示します。生データは時折、汚いデータであることがあります。今回の例では、汚いデータの1例、測定していない箇所(セル)に「-」の文字列が含まれている場合の前処理をし、統計量を取得する方法の解説をします。

Tsukimitech
Tsukimitech

統計量の取得は、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のデータをダウンロードして、用います。

国勢調査 時系列データ CSV形式による主要時系列データ | ファイル | 統計データを探す | 政府統計の総合窓口
 国勢調査は、日本に住んでいるすべての人と世帯を対象とする国の最も重要な統計調査で、5年ごとに実施されます。国勢調査から得られる日本の人口や世帯の実態は、国や地方公共団体の行政において利用されることはもとより、民間企業や研究機関でも広く利用され、そのような利用を通じて国民生活に役立てられています。  国勢調査では、年齢...

実行環境

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には、strfloatなどのデータ混在しているケースです。

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)

実行できました。

このように、汚いデータにおいては、前処理が大切になります。この汚いデータをどのように処理するのかをなどのより実践的な内容を学びたい人は、こちらの書籍で学ぶことをお勧めします。

コメント

タイトルとURLをコピーしました