📘

1-②[AI][Kaggle]Kaggle入門(機械学習Intro 2.基本的なデータ探索)

に公開

Kaggle入門1 機械学習Intro 1.モデルの仕組み
Kaggle入門1 機械学習Intro 2.基本的なデータ探索
Kaggle入門1 機械学習Intro 3.初めての機械学習モデル
Kaggle入門1 機械学習Intro 4.モデルの検証
Kaggle入門1 機械学習Intro 5.アンダーフィッティングとオーバーフィッティング
Kaggle入門1 機械学習Intro 6. ランダムフォレスト
Kaggle入門1 機械学習Intro 7. 機械学習コンペティション 最終回

Kaggle入門2 Python Pandasライブラリの使い方 1.生成/読込/書込

Kaggle入門(機械学習Intro 1.モデルの仕組み)の続きです。

Abstract

Kaggle「Intro to Machine LearningのBasic Data Exploration」の翻訳と実行方法の解説

2. 基本的なデータ探索

理論編

🏡 Pandasを使ってデータに慣れる

機械学習プロジェクトにおける最初のステップは、データに慣れることです。これにはPandasライブラリを使用します。Pandasは、データサイエンティストがデータの探索と操作のために使用する主要なツールです。ほとんどの人は、コード内でPandasをpdと省略します。これは以下のコマンドで行います。

import pandas as pd

Pandasライブラリの最も重要な部分はDataFrameです。DataFrameは、テーブルとして考えられるような種類のデータを保持します。これは、Excelのシートや、SQLデータベースのテーブルに似ています。Pandasには、この種のデータに対して行いたいほとんどのことについて、強力なメソッドが備わっています。
例として、オーストラリアのメルボルンにおける住宅価格に関するデータを見てみます。実習では、同じプロセスをアイオワ州の住宅価格に関する新しいデータセットに適用します。この例(メルボルン)のデータは、ファイルパス ../input/melbourne-housing-snapshot/melb_data.csvにあります。以下のコマンドでデータを読み込み、探索します。

#ファイルパスを変数に保存し、アクセスしやすくする
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
# データを読み込み、melbourne_dataというタイトルのDataFrameに格納する
melbourne_data = pd.read_csv(melbourne_file_path) 
# Melbourneデータに関する要約を出力する
melbourne_data.describe()
Rooms Price Distance Postcode Bedroom2 Bathroom Car Landsize BuildingArea YearBuilt Lattitude Longtitude Propertycount
count 13580.00 1.358000e+04 13580.00 13580.00 13580.00 13580.00 13518.00 13580.00 7130.00 8205.00 13580.00 13580.00 13580.00
mean 2.937997 1.075684e+06 10.137776 3105.301915 2.914728 1.534242 1.610075 558.416127 151.967650 1964.684217 -37.809203 144.995216 7454.417378
std 0.955748 6.393107e+05 5.868725 90.676964 0.965921 0.691712 0.962634 3990.669241 541.014538 37.273762 0.079260 0.103916 4378.581772
min 1.000000 8.500000e+04 0.000000 3000.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1196.000000 -38.182550 144.431810 249.000000
25% 2.000000 6.500000e+05 6.100000 3044.000000 2.000000 1.000000 1.000000 177.000000 93.000000 1940.000000 -37.856822 144.929600 4380.000000
50% 3.000000 9.030000e+05 9.200000 3084.000000 3.000000 1.000000 2.000000 440.000000 126.000000 1970.000000 -37.802355 145.000100 6555.000000
75% 3.000000 1.330000e+06 13.000000 3148.000000 3.000000 2.000000 2.000000 651.000000 174.000000 1999.000000 -37.7564001 45.058305 10331.000000
max 10.000000 9.000000e+06 48.100000 3977.000000 20.000000 8.000000 10.000000 433014.000000 44515.000000 2018.000000 -37.408530 145.526350 21650.000000

📈 データの説明を解釈する

この結果は、元のデータセットの各列について8つの数値を示しています。最初の数値であるcount(カウント) は、欠損値がない行がいくつあるかを示しています。

欠損値が発生する理由はさまざまです。たとえば、1ベッドルームの家を調査する際には、2つ目の寝室のサイズは収集されません。欠損データのトピックについては、後で改めて触れます。

2番目の値はmean(平均)で、これは平均値です。その下のstdは標準偏差で、値が数値的にどれだけ散らばっているかを示す尺度です。

min、25%、50%、75%、およびmaxの値を解釈するには、各列を最も低い値から最も高い値へと並べ替えることを想像してください。最初の(最小の)値がminです。リストを4分の1進んだところにある値は、値の25%よりも大きく、75%よりも小さい数値です。これが**25%**の値(「25パーセンタイル」と発音されます)です。50パーセンタイルと75パーセンタイルも同様に定義され、maxは最大の数値です。この解説で、Pandasを使ったデータ探索の概要が理解できたでしょうか?このデータセットから特定の列(例えばPrice)の平均値や中央値(50%)だけを知りたい、といった要望が発生することがあります。


実践編

準備1.

これは準備です。実習を開始するために必要な手順です。下記の赤丸を押下してください。

Setup Completeが表示されたら、実習を開始できます。

Step 1: データ読み込み

この演習では、データファイルを読み込み、そのデータに関する統計を理解する能力を試します。

後の演習では、データをフィルタリングする手法を適用し、機械学習モデルを構築し、そして反復的にモデルを改善していきます。

このコースの例題では、メルボルンのデータを使用します。これらの手法を自分で適用できることを確実にするため、新しいデータセット(アイオワ州の住宅価格データ)に適用していただくことになります。

演習では「ノートブック」のコーディング環境を使用します。ノートブックに慣れていない場合は、90秒の紹介ビデオをご用意しています。

演習
作業の進行に合わせて検証を行うコードチェックを設定するために、次のセルを実行してください。

import pandas as pd

# 読み込むファイルのパス
iowa_file_path = '../input/home-data-for-ml-course/train.csv'

# 以下の行を記入して、ファイルを home_data という変数に読み込んでください
home_data = pd.read_csv(iowa_file_path) 

# データが正しく読み込まれたかを確認するために、引数を指定せずに以下の行を呼び出してください
step_1.check()


Correctが表示されたらOK.
このステップでは、データを読込んでhome_dataにデータがセットされることを確認できればOK。

確認


↑の赤丸を押下すると、↓再生ボタンに変化します。再生ボタンを押下します。

Solution:の下の行に表示されるのが答えになります。実習2の答えは、"home_data = pd.read_csv(iowa_file_path)"を記述してねってことになります。

Step 2: 読み込んだデータを確認する

学習したコマンドを使用して、データの概要統計を表示します。そして、変数を入力して次の質問に答えます

# 次の行に要約統計を出力します
home_data.describe()

下記赤丸を押下します。

理論編で説明したmean(平均)、min、25%、50%、75%、maxの値が表示されるのが分かります。
これでデータの概要が見えてきます。

次に下記を実行します。

# 平均敷地面積はどれくらいですか(最も近い整数に四捨五入)?
avg_lot_size = round(home_data['LotArea'].mean())

# 今日の時点で、最も新しい家は築何年目ですか (現在の年 - 建てられた日)
newest_home_age = 2025 - home_data['YearBuilt'].max()

# 答えを確認
step_2.check()

下記赤丸を押下。

下記赤丸を押下して答え合わせを行います。


↑Solution:のところに答えが出てますね。

データについて考える

あなたのデータの中で最も新しい家は、それほど新しくありません。これにはいくつかの考えられる説明があります。

  1. このデータが収集された地域では、新しい家が建設されていない。
  2. データがかなり前に収集された。データ公開後に建てられた家は、データに現れない。

理由が上記の説明1だった場合、このデータで構築するモデルへの信頼性に影響を与えますか?説明2だった場合はどうでしょうか?

どちらの説明がより妥当であるかを見るために、どのようにデータを詳しく調べることができますか?

他の人がどのように考えているかを確認したり、あなたのアイデアを追加したりするには、こちらのディスカッションスレッドをご覧ください。

次の章(3.初めての機械学習モデル)

Discussion