自分のキャリアをあれこれ考えながら、Pythonで様々なデータを分析していくブログです

(その2) アップル引越しの需要予測のデータ確認

Data Analytics
Data Analytics

前回の続きで、アップル引越しのデータの中身を確認していきたいと思います。

(その1) アップル引越しの需要予測の分析計画
今回から時系列データの分析に入りたいと思います。データはSIGNATE社のデータ分析コンペでダウンロード出来る、アップル引っ越しセンターの引越し実績を利用したいと思います。アップル引っ越しセンターは下記サイトになります。IT化によってコスト...
import pandas as pd
# 訓練データと予測付与用データの読み込み
df = pd.read_csv("/Users/hinomaruc/Desktop/blog/dataset/applehikkoshi/train.csv",parse_dates=['datetime'],index_col='datetime')
df_test = pd.read_csv("/Users/hinomaruc/Desktop/blog/dataset/applehikkoshi/test.csv",parse_dates=['datetime'],index_col='datetime')
# 上から5件のデータを確認
df.head()
Out[0]

y client close price_am price_pm
datetime
2010-07-01 17 0 0 -1 -1
2010-07-02 18 0 0 -1 -1
2010-07-03 20 0 0 -1 -1
2010-07-04 20 0 0 -1 -1
2010-07-05 14 0 0 -1 -1
# infoメソッドでデータの概要を把握
df.info()
Out[0]
DatetimeIndex: 2101 entries, 2010-07-01 to 2016-03-31
Data columns (total 5 columns):
 #   Column    Non-Null Count  Dtype
---  ------    --------------  -----
 0   y         2101 non-null   int64
 1   client    2101 non-null   int64
 2   close     2101 non-null   int64
 3   price_am  2101 non-null   int64
 4   price_pm  2101 non-null   int64
dtypes: int64(5)
memory usage: 98.5 KB
# カラム名を確認
df.columns
Out[0]
Index(['y', 'client', 'close', 'price_am', 'price_pm'], dtype='object')
# 描画設定
from IPython.display import HTML
import seaborn as sns
from matplotlib import ticker
import matplotlib.pyplot as plt
sns.set_style("whitegrid")
from matplotlib import rcParams
rcParams['font.family'] = 'Hiragino Sans' # Macの場合
#rcParams['font.family'] = 'Meiryo' # Windowsの場合
#rcParams['font.family'] = 'VL PGothic' # Linuxの場合
rcParams['xtick.labelsize'] = 12       # x軸のラベルのフォントサイズ
rcParams['ytick.labelsize'] = 12       # y軸のラベルのフォントサイズ
rcParams['axes.labelsize'] = 18        # ラベルのフォントとサイズ
rcParams['figure.figsize'] = 18,8      # 画像サイズの変更(inch)
スポンサーリンク

時系列データをグラフで確認する

いつも通りデータの中身を見てみたいと思います。

引越し数(y)の確認 (全期間)

sns.lineplot(data=df, x=df.index, y="y", hue="close")
plt.xticks(rotation=90)
plt.title('hikkoshi-cnt')
plt.show()
Out[0]

closeは休業日なので引っ越しはしないはず。ということでhueにcloseカラムを指定して営業日と休業日を分けて表示させてみました。
おそらく3月でしょうか?スパイクが毎年あって、数値も全体的に右肩傾向にあるようです。各年ごとに確認してみます。

引越し数(y)の確認 (年ごと)

# 2011 ~ 2015のデータを表示
for idx, yyyy in enumerate(range(2011,2016), 1):

    plt.subplot(3,2,idx)
    sns.lineplot(data=df[df.index.year == yyyy], x=df[df.index.year == yyyy].index, y="y", hue="close")
    if idx <= 3:
        plt.xticks([])
        plt.xlabel("")
    plt.title('hikkoshi-cnt')
    plt.xticks(rotation=90)

plt.show()

# 2010と2016のデータ (一年分ないので分けてグラフ化した)
plt.subplot(1,2,1)
sns.lineplot(data=df[df.index.year == 2010], x=df[df.index.year == 2010].index, y="y", hue="close")

plt.title('hikkoshi-cnt')
plt.xticks(rotation=90)

plt.subplot(1,2,2)
sns.lineplot(data=df[df.index.year == 2016], x=df[df.index.year == 2016].index, y="y", hue="close")

plt.title('hikkoshi-cnt')
plt.xticks(rotation=90)
plt.show()
Out[0]


やはり3月に引っ越し数が多くなるようです。

法人が絡む特殊な引越し日フラグ(client) の確認

sns.lineplot(data=df, x=df.index, y="client")
plt.xticks(rotation=90)
plt.title('client')
plt.show()
Out[0]

2014年からしか出現していないようです。

休業日(close)の確認 (グラフ)

sns.lineplot(data=df, x=df.index, y="close")
plt.xticks(rotation=90)
plt.title('close')
plt.show()
Out[0]

定期的にあるようです。これだけだと分かりにくいので表で確認してみます。

休業日(close)の確認 (表形式)

df.query("close == 1")
Out[0]

y client close price_am price_pm
datetime
2010-12-31 0 0 1 -1 -1
2011-01-01 0 0 1 -1 -1
2011-01-02 0 0 1 -1 -1
2011-01-03 0 0 1 -1 -1
2011-12-31 0 0 1 -1 -1
2012-01-01 0 0 1 -1 -1
2012-01-02 0 0 1 -1 -1
2012-01-03 0 0 1 -1 -1
2012-12-31 0 0 1 -1 -1
2013-01-01 0 0 1 -1 -1
2013-01-02 0 0 1 -1 -1
2013-01-03 0 0 1 -1 -1
2013-08-12 0 0 1 -1 -1
2013-12-31 0 0 1 -1 -1
2014-01-01 0 0 1 -1 -1
2014-01-02 0 0 1 -1 -1
2014-01-03 0 0 1 -1 -1
2014-08-12 0 0 1 -1 -1
2014-12-31 0 0 1 -1 -1
2015-01-01 0 0 1 -1 -1
2015-01-02 0 0 1 -1 -1
2015-01-03 0 0 1 -1 -1
2015-08-12 0 0 1 -1 -1
2015-12-31 0 0 1 -1 -1
2016-01-01 0 0 1 -1 -1
2016-01-02 0 0 1 -1 -1
2016-01-03 0 0 1 -1 -1

年末年始と8/12が2013年から休業日のようです。

8/12は毎年アップル引越しセンターの社員が集まる日だったのでしょうか?

今年は8/23(火)が休業日のようです。

図: アップル引越しセンターのホームページより抜粋 (22/08/20)

会社を休みにしてまで研修するなんてとても社員のことも考えてくれているいい会社さんですね。

午前の料金区分(price_am)と午後の料金区分(price_pm)の確認

import matplotlib.pyplot as plt

plt.subplot(1,2,1)
sns.lineplot(data=df, x=df.index, y="price_am")

plt.subplot(1,2,2)
sns.lineplot(data=df, x=df.index, y="price_pm")
Out[0]

PMの方が安めの料金設定になっているように見えます。lineplotよりcountplotやhistplotの方が見やすそうなので確認してみます。

import matplotlib.pyplot as plt

plt.subplot(1,2,1)
sns.histplot(data=df, x="price_am",stat="percent",color="b")

plt.subplot(1,2,2)
sns.histplot(data=df, x="price_pm",stat="percent",color="r")
Out[0]

・やはりAMの方が値段が高い傾向にありそうです (0の割合がprice_amの方がprice_pmより低い)。同じ表に2つのグラフを横並びに表示した方が分かりやすかったかも知れません。

スポンサーリンク

まとめ

データの理解が進みました。右肩あがりに引っ越し数が伸びているのと3月に季節性があることは時系列を予測をする上でポイントになりそうです。

また休業日も決まっているようなので考慮してあげる必要があるかも知れません。

次回からは時系列モデルを色々試してみたいと思います。

データ加工は必要であれば時系列モデルを作成する中でやっていきます。

タイトルとURLをコピーしました