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日へと分配すればよいことになります(厳密には時間ごとの分布を考えないとダメですがそこまでは気にしない)。
ということで、Python の時系列操作メソッドを用いて、タイムゾーンを変換したのち、日付別データを日時別データへとアップサンプリングし、それをまた日付にダウンサンプリングするという手順を踏みました。
こんなコードになりました。
元のデータと変換後(JST)のグラフです。変換後のグラフは右に少しずれているのが分かります。
下図は driving(車移動)のグラフの3月下旬のアップです。3月20日(金・祝日)からの3連休(20,21,22)での増加がJST(オレンジ線)ではみてとれます。元のデータ(青線)では19日(木・平日)から増加しており、ズレがあることがわかります。
他の国々のデータもこのように変換していかないとちゃんとした比較ができなさそうですが、タイムゾーンをいちいち調べるのが面倒なのでまたいつか(たぶんやらない)。
- 第1弾:Appleマップのログによる通行量データの日本関係のをグラフ化[2020-04-15-1]
- 第2弾:Appleマップの通行量データの増減パターンが似ている国を調べた[2020-04-16-1]
- データはここから:COVID‑19 - Mobility Trends Reports - Apple
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)のグラフです。変換後のグラフは右に少しずれているのが分かります。
下図は driving(車移動)のグラフの3月下旬のアップです。3月20日(金・祝日)からの3連休(20,21,22)での増加がJST(オレンジ線)ではみてとれます。元のデータ(青線)では19日(木・平日)から増加しており、ズレがあることがわかります。
他の国々のデータもこのように変換していかないとちゃんとした比較ができなさそうですが、タイムゾーンをいちいち調べるのが面倒なのでまたいつか(たぶんやらない)。
この記事に言及しているこのブログ内の記事
