LoginSignup
3
2

More than 5 years have passed since last update.

ランダムフォレストで遊んでみた~その2~

Posted at

背景

その2です。

今回はkaggle datasetsの「Avocado Prices」のデータを使ってみます。
https://www.kaggle.com/neuromusic/avocado-prices

含まれているデータは下記の通り

  • Date - 観測日
  • AveragePrice - 1つのアボカドの平均価格
  • type - 従来型またはオーガニック
  • year - 年
  • Region - 観測の都市または地域
  • Total Volume - 販売されたアボカドの総数
  • 4046 - PLU 4046を販売しているアボカドの総数
  • 4225 - PLU 4225を販売しているアボカドの総数
  • 4770 - PLU 4770を販売しているアボカドの総数

この中で、TotalVolumeを計算していきたいと思います。

なお、アメリカの観測されている都市はたくさんありますが、今回はAlbanyのみ扱っていきます。また、アボカドのタイプは「conventional」「
organic」の2つがありましたが、今回は「conventional」を対象にします。

本題

main.py

import numpy as numpy
import pandas as pd
import pandas_profiling as pdp
import os
import sys

まずはインポートです。
EDAに便利というPandas_profilingを使ってみたかったので、インストールしてみました。

main.py

#ファイル読み込み
avc_csv_data = pd.read_csv("avocado.csv")
avc_csv_data.info()
profile = pdp.ProfileReport(avc_csv_data)
profile.to_file(outputfile="EDA.html")
avc_csv_data["region"].drop_duplicates()

ファイルを読み込み、pandas_profilingでEDAをしてみました。
結果は、、、一発でここまでできるのはすごいなと思いました。
参考:https://qiita.com/h_kobayashi1125/items/02039e57a656abe8c48f

avc_csv_data["region"].drop_duplicates()
をしているのは、どの領域のデータがあるか確認したかったからです。
結果は下記の通りです。

0                  Albany
1                 Atlanta
2     BaltimoreWashington
3                   Boise
4                  Boston
5        BuffaloRochester
6              California
7               Charlotte
8                 Chicago
9        CincinnatiDayton
10               Columbus
11          DallasFtWorth
12                 Denver
13                Detroit
14            GrandRapids
15             GreatLakes
16     HarrisburgScranton
17    HartfordSpringfield
18                Houston
19           Indianapolis
20           Jacksonville
21               LasVegas
22             LosAngeles
23             Louisville
24      MiamiFtLauderdale
25               Midsouth
26              Nashville
27       NewOrleansMobile
28                NewYork
29              Northeast
30     NorthernNewEngland
31                Orlando
32           Philadelphia
33          PhoenixTucson
34             Pittsburgh
35                 Plains
36               Portland
37      RaleighGreensboro
38        RichmondNorfolk
39                Roanoke
40             Sacramento
41               SanDiego
42           SanFrancisco
43                Seattle
44          SouthCarolina
45           SouthCentral
46              Southeast
47                Spokane
48                StLouis
49               Syracuse
50                  Tampa
51                TotalUS
52                   West
53       WestTexNewMexico

都市のレベル感はばらばらだと思いました。
51行目はTotalUSですし。

main.py
#欠損値の有無
avc_csv_data.isnull().any(axis=0)

#年の確認
avc_csv_data.groupby(["year"]).mean()

#albanyだけ考える
alb_avo = avc_csv_data[avc_csv_data["region"]=='Albany']
#print(alb_avo)

#typeをconventionalとorganicに分ける
alb_avo_con = alb_avo[alb_avo["type"]=='conventional']
alb_avo_org = alb_avo[alb_avo["type"]=='organic']

#日付でソート
alb_avo_con.sort_values('date',ascending=True)
alb_avo_org.sort_values('date',ascending=True)

欠損値を確認し、Albany、type、日付でソートしています。

main.py
#trainとvalに分割
y_train = res.loc['2015':'2016',['Total Volume']]
y_train.info()
y_val = res.loc['2017',['Total Volume']]
X_train = res.loc['2015':'2016',['AveragePrice','4046','4225','4770','Total Bags']]
X_val = res.loc['2017',['AveragePrice','4046','4225','4770','Total Bags']]

trainとvalをわけています。
今回は2015、2016年をtrainとし、2017年を予想していきたいと思います。
特徴量は、基本的に全部使います。

main.py
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

#モデルを定義
RF_model = RandomForestRegressor(random_state=1)

#学習開始
RF_model.fit(X_train,y_train)
RF_val_pred = RF_model.predict(X_val)
print(y_val)
print(RF_val_pred)
RF_val_mae = mean_absolute_error(RF_val_pred,y_val)
print(RF_val_mae)

MAEは4181.937603773585でした。

あとがき

やはりpandasの使い方が慣れない。

それと、プロットしないと、結果がわかりにくい。可視化大事だなと思いました。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2