15分ですぐ仕事に使える!【Excelで重回帰分析】AI講座 第10回|Pythonではじめる人工知能入門講座

エクセルで学ぶ人工知能編

カリフォルニアの住宅価格データセットの説明

# 今回はGoogleコラボを使うので不要 
!pip install scikit-learn 
!pip install pandas

まず、今回のエクセルを使った重回帰分析で使用するデータセ ットについて説明します。
使用するデータは、アメリカの都市カリフォルニアの住宅価格に関するデータセットです。
このデータセットは、scikit-learn(サイキットラーン)ライブラリの中に入っています。

データセットの準備

はじめに、scikit-learn(サイキットラーン)ライブラリからデータを取得し、Excelファイルを作成します。
今回は、Google Colaboratoryを使用します。
pythonの実行環境が整っていない方でも、Googleアカウントさえあればすぐに使うことができます。
詳しい使い方を知りたい方は、こちらの動画をご参照ください。

では、GoogleChoromeを開き、こちらのURL(https://colab.research.google.com/ )にアクセスします。
すると、このようなページが開きます。
「ノートブックを新規作成」をクリックします。
ノートブックが開きました。

import pandas as pd
from sklearn.datasets import fetch_california_housing

データセットを読み込む準備をしていきましょう。
カリフォルニアの住宅価格のデータセットの抽出に使用するライブラリをインポートします。
このように書きましょう。
まず、pandasをインポートします。
そして、scikit-learnのデータセットの中の、カリフォルニアの住宅価格のデータセットをインポートします。
実行します。
インポートができました。

ca_data=fetch_california_housing(as_frame=True) 
ca_data

次に、カリフォルニアの住宅価格のデータセットを読み込みます。
fetch_california_housing()という関数を変数ca_dataに代入します。
データを取得するために、引数as_frameにはTrueを渡します。
そして、ca_dataの中身を確認してみましょう。
実行します。

たくさんの情報が表示されました。
このデータは辞書型になっていることがわかります。
dataの中には説明変数の値が入っており、targetの中には目的変数の値が入っています。
今回はこのMedHouseVal、すなわち、ある地区の住宅価格の中央値が目的変数です。
そして、frameには説明変数の略称が入っています。
その地区の収入の中央値、築年数、平均の部屋数などが入っていることがわかります。

df_X = pd.DataFrame(ca_data.data) 
df_y = pd.DataFrame(ca_data.target) 
df = pd.concat([df_X, df_y], axis=1) 
df

それでは、このデータセットをデータフレームの形にしましょう。
変数df_Xにca_dataのdataをデータフレーム形式で代入します。
同様に、変数df_yにca_dataのtargetをデータフレーム形式で代入します。
そして、concat関数を用いて、df_Xとdf_yを結合します。
引数axisに1を渡して、横方向に結合します。
dfの中身を確認してみましょう。
実行します。

データセットがデータフレーム形式で抽出できました。
ただし、データが2万件以上あります。
エクセルで分析するにはデータが多すぎるので最初の300件だけを抽出しましょう。

df2 = df.iloc[:300, :] 
df2

データフレームのilocプロパティを使うと、データの抽出ができます。
ilocと書き、角括弧の中に抽出する行と列を,(カンマ)で区切って指定します。
抽出する行の方は、:(コロン)300と書きます。
こうすると先頭から300件の行を抽出できます。
次に,(カンマ)を書きます。
抽出する列の方は、:(コロン)だけを書きます。
こうすると全ての列を抽出できます。
抽出したデータフレームを変数df2に代入し、df2の中身を確認してみましょう。
実行します。

最初の300件のデータの、全てのカラムを抽出できています。

df3 = df2[["HouseAge", "AveRooms", "MedHouseVal"]] 
df3

この中から今回使用するカラムだけを抽出しましょう。
df2の後ろに角括弧を2つ書き、データフレームとして抽出します。
角括弧の中に抽出したい"HouseAge","AveRooms","MedHouseVal"を書きます。
このカラムはそれぞれ築年数の中央値、平均の部屋数、住宅価格の中央値を表しています。
抽出したデータフレームを変数df3に代入し、中身を確認してみましょう。
実行します。

3つのカラムを抽出できています。

df3.to_excel("data.xlsx", index=False)

このデータフレームをエクセル形式で保存しましょう。
データフレームのto_excelメソッドを使い、引数にファイル名を渡します。
今回はファイル名をdata.xlsxとして保存します。
またインデックスは必要ないので、引数indexにFalseを渡しましょう。
実行します。

左のタブを開き、フォルダを確認します。
エクセルファイルが保存できました。
右クリックでダウンロード、このエクセルファイルを使って説明を進めます。

エクセルで散布図を作成(Windowsを使用)

書き出したデータをエクセルで開くとこのようになっていると思います。

左から、築年数の中央値、平均の部屋数、住宅価格の中央値のデータです。
このデータを散布図で可視化してみましょう。
まず、築年数と住宅価格の散布図を作成します。
A列をクリックしてA列全体を選択します。

次にコントロールキーを押しながらC列をクリックしてC列全体も選択します。

挿入タブをクリックし、グラフの中から散布図を選択します。

そうすると散布図を作成できます。
横軸が築年数、縦軸が住宅価格を表しています。
築年数が高いほど、住宅価格は低くなる傾向があるように見えます。
次に、部屋数と住宅価格の散布図を作成します。
今度はB列をクリックしながら、C列まで選択します。

そして、同じように挿入タブから散布図を選択します。

先ほどと同様に散布図を作成できました。
今度は横軸が部屋数、縦軸が住宅価格を表しています。
部屋数が多いほど、住宅価格は高くなる傾向がありそうです。

エクセルで重回帰分析(Windowsを使用)

数式に沿って回帰方程式を導出

それでは、このデータを使って重回帰分析を行ってみましょう。
まず、数式に沿って重回帰分析を行います。
数式を使って理解編で説明したとおり、重回帰分析の回帰方程式はこのような式で表せるんでしたね。

エクセルで重回帰分析(Windowsを使用)

LINEST関数を使って回帰方程式を導出

まとめ

エクセルの関数の読み方の参考サイト
「ヘルプの森」 https://www.helpforest.com/excel/ex_list/ex110008.htm