ハンズオンで学ぶPythonを用いた簡単な統計学

このエントリーをはてなブックマークに追加

こんにちは。データサイエンティストの堀です。
今回は我々データサイエンティストが普段どのような統計的な分析を行っているかを、ハンズオンを通して紹介したいと思います。
世の中ではAIがブームですが、需要予測や価格推計などのモデルを構築する前に共通して今回紹介するような古典的な統計学を使用し、インサイトを得ます。
データのサマリーや関係性を見るために複雑な数式やプログラムは必要ありません。今回はPythonの簡単なコードを用いてハンズオンを進めていきますが、Excelでも同じように解析することが可能ですので、是非試してみてください。

目次

  • 準備
  • ハンズオン
    1. データのロード
    2. 要約統計量と簡単な前処理
    3. ヒストグラムの作成
    4. 散布図の作成
  • まとめ

準備

実際に手を動かしながら読んでいただけると理解が深まると思いますので、Jupyter notebookの環境が整っていない方は、以下の記事を参考に、Anacondaを準備していただければ幸いです。

誰でも簡単に分析環境構築 ~Anacondaセットアップ~

ハンズオン

1. データのロード

ハンズオンには国土交通省の不動産取引価格情報を使用します。
ダウンロードは以下から行うことが出来ます。

https://www.land.mlit.go.jp/webland/download.html

ここから2019年第3四半期の東京都世田谷区のデータをダウンロードしました。

このデータには、過去に取引された不動産の価格やそれに付随する情報が記されています。
※ダウンロード時点が異なるとデータ内容が変わる可能性があるため、ブログ内容と実行結果が異なる可能性があります。

Zipを解凍したのち、中のcsvファイルをnotebookファイルと同じ階層に配置し、実際にプログラムでロードしてみましょう。

コードは以下のとおりです。

import pandas as pd
pd.set_option(“display.max_columns”, 100)
df = pd.read_csv(“13112_20193_20193.csv”, encoding=”CP932”)
df.head(3)

データはpandasと呼ばれるデータ加工のライブラリを使用してロードします。
コード中に

pd.set_option(“display.max_columns”, 100)

とありますが、これはpandasでデータを表示しようとしたときに列が標準だと20列しか表示されないため、表示範囲を100列まで広げています。

df = pd.read_csv(“13112_20193_20193.csv”, encoding=”CP932”)

ここが実際にデータをロードしている行です。
「13112_20193_20193.csv」というcp932文字コードのデータをdfという変数に格納しています。

df.head(2)

で、データ先頭2行を表示しています。
右端が切れているように見えますが、表示量が多いためです。下のスクロールバーを右に移動すると見えるようになります。
以下が実行結果で出力されたデータの先頭2行です。

2. 要約統計量と簡単な前処理

データを入手したら最初にやるべきことは「要約統計量」を確認することです。
「要約統計量」は、データの特徴を要約して表す値のことを指します。

以下のコードを先程書いたコードに続けて書き、実行することで要約統計量を表示することが出来ます。

df.describe()

実行すると以下の図のような結果が出てきます。

各カラムに対して、「欠損ではないサンプル数:count」、「平均:mean」、「標準偏差:std」、「最小値:min」、「25パーセンタイル:25%」、「中央地:50%」、「75パーセンタイル:75%」、「最大値:max」が表示されています。

データサイエンティストはこの要約統計量を見てデータの特徴や異常を把握することになります。
要約統計量を見てみると「取引価格(総額)」の最大値が「5.800000e+08(580,000,000)」と高いことや、面積も75パーセンタイルと最大値を比較すると最大値が「880m2」と高いことがわかります。

実はこのデータ、戸建住宅や中古マンション、土地の取引が混在しています。
それぞれではデータの性質が全く異なってくるため、今回は中古マンションに焦点を当てることにしましょう。
以下のコードを追記して実行します。

df = df[df["種類"] == "中古マンション等"]

データを抽出した後、要約統計量を確認すると、「取引価格(総額)」や「面積」の最大値が先程より小さくなっていることが確認できると思います。
データ分析をする際に象データに関する知識が十分ではない時があります。その際はこの要約統計量を通して、全体を把握します。

3. ヒストグラムの作成

要約統計量でデータ全体の特徴を理解したら、次は更に細かくデータを見ていきましょう。
データ分析では記述統計を見た後にヒストグラムを見ることが多いです。
ヒストグラムとは、データを区間で区切り、その区間に含まれるデータ数やデータの割合を可視化するものです。また、データサイエンティストが「分布が綺麗」などと言っているのは基本的にこのヒストグラムで可視化されたデータの性質を示しています。
面積のヒスログラムを見るために、以下のコードを追記して実行しましょう。

import seaborn as sns
%matplotlib inline

sns.distplot(df[“面積(㎡)”] , bins=10)

実行するとこの様になると思います。

この図から、面積には二峰性(ヒストグラム中に山が2つある状態)が確認できます。今回のケースでは大体15~40, 40~90のような山が確認できますが、この場合、「市場にワンルームマンションが多いから15m2付近に山があるのだろうか?」など、データの細かい要因に関して分析を進めることが出来ます。
このような二峰性がある場合はデータの性質が異なった2つの属性が混在している可能性があります。正しく分析するために、どのような属性が混在しているかを確認し、適切な前処理(データクレンジング)を行いましょう。
前処理(データクレンジング)については以下の記事も見ていただけるとより理解が深まると思います。

なぜAIプロジェクトはコストがかかるのか?  ~前処理について~

4. 散布図の作成

要約統計量やヒストグラムは各カラムに関しての統計量を表しています。しかし、分析を進めていくと取引価格と面積などカラム間の関係性を確認したいケースが出てきます。関係性を確認する方法は多くありますが、その中で直感的にわかりやすいのが散布図です。取引価格と面積の散布図であれば、x軸に面積、y軸に取引価格を設定し、プロットを行います。

以下のコードを追記し、実行してみましょう。

sns.scatterplot(df["面積(㎡)"], df["取引価格(総額)"])

実行すると次のような結果が得られます。

図を見ると、面積が増えるごとに取引価格が増える関係性が分かると思います。大雑把にみると面積と取引価格には比例の関係があるので、この傾きと切片が分かれば、面積から価格を予測することが出来ます。

まとめ

今回はハンズオンを通してデータサイエンティストが普段行っている統計的な分析を体験していただきました。今回は不動産のデータを用いて分析を行いましたが、ほかのデータに関しても同様に実行可能ですので、是非ご自身のお持ちのデータで試してみてください。

何かご不明点がございましたら、お気軽にお問い合わせください。
最後までご覧いただきありがとうございました。

【無料ウェビナーのお知らせ】
「DX/AI推進を担当しているがうまく進まない」方に最適なウェビナーを企画しました

DX/AI推進を担当しているものの、「社内にAIがわかる人材がいない」「導入効果が得られるか不安」「どの課題から着手すべきかわからない」などの課題はありませんか?
AI・データを使ったDXの実現が全く進まないクリティカルな理由と、それにどう対応すれば良いかを3つのポイントに絞ってお伝えします。

<ウェビナータイトル>
なぜ貴社ではAI・データを使ったDXの実現が全く進まないのか?
<プログラム>
1.DX/AI・データ分析とは
2.AI・データを使ったDXの実現が進まない理由
3.AI・データ分析プロジェクトを推進する3つのポイント
4.QAタイム
★参加者には取り組むべき課題を選定するためのフレームワーク「DIVA」のワークシートと説明資料をプレゼント

日時:2021年2月18日(木) 13:15~14:15
参加方法:Zoomで参加(参加費無料)

お申し込みはこちら

WRITER
Takahito Hori

データサイエンティスト

堀   貴仁 Takahito Hori

複数業界にてAI活用プロジェクトのデータアナリティクス、データサイエンスを担当。大手飲食店様・不動産会社様のAIモデル構築実績あり。

SNSで最新情報を発信しています

最新記事

ページTOPへ