Python scikit-learn付属のボストン市の住宅価格データ(Boston house prices dataset)をcsvファイル化する

'20/01/01更新: csvファイル化せずに直接読み出す場合についても文末に追記しました。
 本プログラム実行後のフォルダ内を下図に示す。3つのcsvファイルを出力しています。

f:id:HK29:20191210201007p:plain

「boston_Xdata.csv」…入力変数Xデータ(設計因子)

f:id:HK29:20191210201205p:plain

「boston_XYdata.csv」…出力変数Yデータ(目的関数)も加えた

f:id:HK29:20191210201241p:plain

「boston_describe.csv」…要約統計量

f:id:HK29:20191210201308p:plain

■本プログラム

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from sklearn import datasets
import pandas as pd

### sklearnのボストンデータセットをロード
### 変な書式になってるため、csvファイルとして保存するにはデータの加工処理をする
def create_boston_data():
    boston = datasets.load_boston()
    
    boston_df=pd.DataFrame(boston.data) # 説明変数Xをpandas形式に変換
    boston_df.columns = boston.feature_names # カラム名を挿入
    boston_df.to_csv('boston_Xdata.csv', sep=',', index=False, encoding='utf-8', header=True)

    boston_df['PRICE'] = pd.DataFrame(boston.target) # 目的変数Yをカラム名PRICEで追記
    boston_df.to_csv('boston_XYdata.csv', sep=',', index=False, encoding='utf-8', header=True)
    
    boston_df.describe().to_csv('boston_describe.csv', sep=',',
                      index=True, encoding='utf-8') #  基本統計量をcsvで保存
    
    x_df = boston_df.drop("PRICE", axis=1) # Xデータのみ抽出。pandasのDataFrame形式。複数列で列名有り
    y_df = boston_df.loc[:,['PRICE']] # Yデータのみ抽出。
    x_column_name_np = boston.feature_names # 特徴量名(説明変数, 設計因子)。numpy形式。sklearn内にあるのをコピペしただけ

    return x_df, y_df, x_column_name_np # XYデータをタプルで返す。カッコを付けた場合はリストとなる。

if __name__ == "__main__":
    x_df, y_df, x_column_name_np = create_boston_data() #上記関数を呼び出し、その返り値をアンパック代入
    print(x_df)
    print(type(x_df))
    print(y_df)
    print(type(y_df))
    print(x_column_name_np)
    print(type(x_column_name_np))
    

参考までに、csvファイル出力せずに直接読み込む場合を下記に示す。

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split

boston = load_boston()
# Xデータを抽出(Pandasのデータフレーム形式)
X_df = pd.DataFrame(boston.data, columns=boston.feature_names)
# Yデータを抽出(Pandasのシリーズ形式)
Y_s = boston.target
# 学習用データとテスト用データへ分割
X_train, X_test, y_train, y_test = train_test_split(X_df, Y_s, test_size=0.3)

以上

<広告>