古い記事
ランダムジャンプ
新しい記事
Apple から公開されているAppleマップのログによる通行量のデータを分析する話の第3弾です。この3月から本格的に学び始めた Python の修行の一環です。


Appleマップの通行量データの日付は、Pacific time(アップル本社のあるアメリカ西海岸時間)となっています。そうなると日本とは17時間とかズレるわけで、結構な問題です。これまではスルーしてきたのですが、それもあんまりですので、日本時間にあわせて変換する作業を行いました。

基本的な考え方を書いていきます。

データは一日単位なので、これを24時間に分割して考えます。

Pacfic time で 2020-02-01 00:00 は、日本時間(JST) では 2020-02-01 17:00 になります。6時は23時に、7時は翌2月2日0時に、23時は翌2月2日16時になります。

となると、Pacific time での2月1日0時から6時までのデータは日本の2月1日へ、2月1日7時から23時までは2月2日へと分配すればよいことになります(厳密には時間ごとの分布を考えないとダメですがそこまでは気にしない)。

Pcific time (2/1)
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
17 18 19 20 21 22 23 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16
JST (2/1-2/2)

ということで、Python の時系列操作メソッドを用いて、タイムゾーンを変換したのち、日付別データを日時別データへとアップサンプリングし、それをまた日付にダウンサンプリングするという手順を踏みました。

こんなコードになりました。
コード
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns; sns.set()

df = pd.read_csv("data/applemobilitytrends-2020-04-13.csv")

transportation_type = ("driving", "transit", "walking")

fig = plt.figure(figsize=(15,15))
fig.subplots_adjust(hspace=0.5)

data_title = "Apple Maps Mobility Trends Reports"

for i, tt in enumerate(transportation_type, 1):
    tf = df[(df['region'] == 'Tokyo') & (df['transportation_type'] == tt)].iloc[:,3:-1]
    tf.index = ['Tokyo ' + tt]
    tf = tf.transpose()
    tf.index = pd.to_datetime(tf.index)

    # 比較用: Pacific time での日付 (original)
    tf_pt = tf.copy()
    tf_pt.index = tf_pt.index.tz_localize('Japan') # merge での整合性のため

    # 修正日付: JSTにして集計しなおし
    tf.index = tf.index.tz_localize('US/Pacific').tz_convert('Japan')
    tf_ja = tf.resample('h').ffill().resample('D').mean()

    tmp = pd.merge(tf_pt, tf_ja, left_index=True, right_index=True, suffixes=[" (US/Pacific)", " (JST)"])

    ax = fig.add_subplot(3,1,i)
    tmp.plot(ax=ax)
    ax.set_title(tt + " - " + data_title)
    ax.set_ylim(0,210)
    ax.legend(loc='upper right')
    ax.grid(which='minor')


元のデータと変換後(JST)のグラフです。変換後のグラフは右に少しずれているのが分かります。

Apple-Maps-Mobility-Trends-Reports-PacificToJST

下図は driving(車移動)のグラフの3月下旬のアップです。3月20日(金・祝日)からの3連休(20,21,22)での増加がJST(オレンジ線)ではみてとれます。元のデータ(青線)では19日(木・平日)から増加しており、ズレがあることがわかります。

Apple-Maps-Mobility-Trends-Reports-PacificToJST zoomup

他の国々のデータもこのように変換していかないとちゃんとした比較ができなさそうですが、タイムゾーンをいちいち調べるのが面倒なのでまたいつか(たぶんやらない)。