双方向全体を見るために、風月堂と武藤呉服店の合計を見てみる。
以前のデータは、センサに対応する地点の情報だけだったので、武藤呉服店のデータが含まれていなかった(元の測定データに会ったので追加。)
地点IDは"3a"である。"3"が風月堂。
pandasのDataFrameに対して使う技術
2018年のデータ
data = pd.read_csv("/home/toyoki/work/kofu/pedesData/18/kofuPedesSurvey20181130a.csv",
comment="#", names=["id", "date", "hour", "kind", "direction", "number"])
temp = data[data["id"]=="3"].groupby(['hour','direction']).sum()
temp.reset_index().drop('date', axis=1)
# 武藤
temp_a = data[data["id"]=="3a"].groupby(['hour','direction']).sum()
temp_a.reset_index().drop('date', axis=1)
# 結合 x: 風月堂, y: 武藤
two_point_data = pd.merge(temp, temp_a, on=["hour", "direction"]).reset_index()
# 2地点の和
two_point_data['total'] = two_point_data['number_x'] + two_point_data['number_y']
two_point_data
import pandas as pd
# 1130
data = pd.read_csv("/home/toyoki/work/kofu/pedesData/18/kofuPedesSurvey20181130a.csv",
comment="#", names=["id", "date", "hour", "kind", "direction", "number"])
# 風月堂
temp = data[data["id"]=="3"].groupby(['hour','direction']).sum()
temp.reset_index().drop('date', axis=1)
# 武藤
temp_a = data[data["id"]=="3a"].groupby(['hour','direction']).sum()
temp_a.reset_index().drop('date', axis=1)
# 結合 x: 風月堂, y: 武藤
two_point_data = pd.merge(temp, temp_a, on=["hour", "direction"]).reset_index()
# 2地点の和
two_point_data['total'] = two_point_data['number_x'] + two_point_data['number_y']
# 余分な列を落とす
two_point_data = two_point_data.drop(['date_x', 'date_y'], axis=1)
# 2地点の東向き(total_east), 西向き(total_west)の列を作り、一つのファイルに
temp = two_point_data[two_point_data['direction'] == "E"].rename(
columns={
'number_x': 'fugetsu_east',
'number_y': 'muto_east',
'total': 'total_east'
})
temp1 = two_point_data[two_point_data['direction'] == "W"].rename(
columns={
'number_x': 'fugetsu_west',
'number_y': 'muto_west',
'total': 'total_west'
})
two_points = pd.merge(temp,temp1, on="hour").drop(['direction_x', 'direction_y'], axis=1)
two_points
上記の作業をまとめて関数にし、3日間のデータを図示
import pandas as pd
def mergeTwoPoints(filename, id1, id2, name1='point1', name2='point2'):
data = pd.read_csv(
filename,
comment="#",
names=["id", "date", "hour", "kind", "direction", "number"])
# 風月堂
temp = data[data["id"] == id1].groupby(['hour', 'direction']).sum()
temp.reset_index().drop('date', axis=1)
# 武藤
temp_a = data[data["id"] == id2].groupby(['hour', 'direction']).sum()
temp_a.reset_index().drop('date', axis=1)
# 結合
two_point_data = pd.merge(
temp, temp_a, on=["hour", "direction"]).reset_index()
# 2地点の和
two_point_data[
'total'] = two_point_data['number_x'] + two_point_data['number_y']
# 余分な列を落とす
two_point_data = two_point_data.drop(['date_x', 'date_y'], axis=1)
# 2地点の東向き(total_east), 西向き(total_west)の列を作り、一つのファイルに
temp = two_point_data[two_point_data['direction'] == "E"].rename(
columns={
'number_x': name1 + '_east',
'number_y': name2 + '_east',
'total': 'total_east'
})
temp1 = two_point_data[two_point_data['direction'] == "W"].rename(
columns={
'number_x': name1 + '_west',
'number_y': name2 + '_west',
'total': 'total_west'
})
return pd.merge(
temp, temp1, on="hour").drop(['direction_x', 'direction_y'], axis=1)
# 3日間のデータを読み込んで処理
import matplotlib.pyplot as plt
from datetime import datetime as dt
filename_body = "/home/toyoki/work/kofu/pedesData/18/kofuPedesSurvey"
dt20181130 = mergeTwoPoints(filename_body + "20181130a.csv", "3", "3a",
"fugetsu", "muto")
dt20181201 = mergeTwoPoints(filename_body + "20181201a.csv", "3", "3a",
"fugetsu", "muto")
dt20181202 = mergeTwoPoints(filename_body + "20181202a.csv", "3", "3a",
"fugetsu", "muto")
plt.rcParams["font.size"] = 16
fig, axes = plt.subplots(ncols=3, nrows=1, figsize=(15, 5))
dt20181130.plot(
x='hour',
y=['total_east', 'total_west'],
ax=axes[0],
label=["東向き", "西向き"],
title="2018/11/30",
fontsize=14)
dt20181201.plot(
x='hour',
y=['total_east', 'total_west'],
ax=axes[1],
label=["東向き", "西向き"],
title="2018/12/01")
dt20181202.plot(
x='hour',
y=['total_east', 'total_west'],
ax=axes[2],
label=["東向き", "西向き"],
title="2018/12/02")
file_body = "JotoPedesData2018"
plt.savefig(file_body + ".svg", bbox_inches="tight")
import subprocess
subprocess.run("inkscape --file " + file_body + ".svg" + " --export-emf " + file_body + ".emf", shell=True)
fig, axes = plt.subplots(ncols=3, nrows=1, figsize=(15, 5))
dt20181130.plot(x='hour', y=['fugetsu_east', 'fugetsu_west'], ax=axes[0])
dt20181201.plot(x='hour', y=['fugetsu_east', 'fugetsu_west'], ax=axes[1])
dt20181202.plot(x='hour', y=['fugetsu_east', 'fugetsu_west'], ax=axes[2])
城東通の2か所のデータを抜き出したものを利用(並木君が作成したセンサ設置全地点のデータとは形式が異なる)
import pandas as pd
import numpy as np
#
data = pd.read_csv("/home/toyoki/work/kofu/pedesData/jotoPedesSurvey2019.csv",
comment="#", names=["id", "date", "hour", "kind", "direction", "number"])
data
# 日付列の型を文字に
data['date'].astype(np.int64).astype(str)
data.head()
# kind(歩行、自転車、原付)の和を取る
# 風月堂
temp = data[data["id"]=="3"].groupby(['date','hour','direction']).sum()
# 武藤
temp_a = data[data["id"]=="3a"].groupby(['date','hour','direction']).sum()
#temp_a.reset_index().drop('date', axis=1)
temp.head()
# マルチインデックスを平らに
temp = temp.reset_index()
temp_a = temp_a.reset_index()
temp.head()
# 風月堂、武藤を一つのデータフレームに
df2019 = pd.merge(temp, temp_a, on=['date', 'hour','direction'])
df2019.head()
# 列名変更と風月堂と武藤呉服店の合計(total)の列を作成
df2019["total"] = df2019['number_x'] + df2019['number_y']
df2019.rename(columns = {'number_x': 'fugetsu', 'number_y': 'muto'}, inplace=True)
df2019.head(10)
# データの書き出し
df2019.to_csv("pedestrianData2019.csv", index=False)
# 図表示
from matplotlib import pyplot as plt
fig, axes = plt.subplots(1, 3, figsize=(15, 6))
a = df2019.groupby(['date','direction'])
a.get_group((20191129,'E')).plot(x='hour', y='total', label='Eastbound', ax=axes[0])
a.get_group((20191129,'W')).plot(x='hour', y='total', label='Westbound', ax=axes[0])
a.get_group((20191130,'E')).plot(x='hour', y='total', label='Eastbound', ax=axes[1])
a.get_group((20191130,'W')).plot(x='hour', y='total', label='Westbound', ax=axes[1])
a.get_group((20191201,'E')).plot(x='hour', y='total', label='Eastbound', ax=axes[2])
a.get_group((20191201,'W')).plot(x='hour', y='total', label='Westbound', ax=axes[2])
axes[0].set_title("2019/11/29")
axes[1].set_title("2019/11/30")
axes[2].set_title("2019/12/01")
fig,axes = plt.subplots(ncols=1, nrows=1, figsize=(7,7))
a = df2019.groupby(['date','direction'])
a.get_group((20191129,'E')).plot(x='hour', y='total', label='11/29 東向き', ax=axes, lw=2)
a.get_group((20191129,'W')).plot(x='hour', y='total', label='11/29 西向き', ax=axes, lw=2)
a.get_group((20191130,'E')).plot(x='hour', y='total', label='11/30 東向き', ax=axes, lw=2)
a.get_group((20191130,'W')).plot(x='hour', y='total', label='11/30 西向き', ax=axes, lw=2)
a.get_group((20191201,'E')).plot(x='hour', y='total', label='12/01 東向き', ax=axes, lw=2)
a.get_group((20191201,'W')).plot(x='hour', y='total', label='12/01 西向き', ax=axes, lw=2)
axes.set_title("歩行量 (風月堂+武藤呉服店, 2019)")
file_body = "歩行量ー風月堂ー武藤2019"
plt.savefig(file_body + ".svg", bbox_inches="tight")
import subprocess
subprocess.run("inkscape --file " + file_body + ".svg" + " --export-emf " + file_body + ".emf", shell=True)
JARTICのデータは1か月遅れで公開されるので、1月時点では9,10,11月のデータしかない。
"""
あらかじめsakura_dori.csvとkasuga.csvを作っておく
8tops上では
grep "地点名" yamanashiTraffic201909.csv > xxxx.csv
でOK
grep "春日モール" yamanashiTraffic201909.csv > kasuga.csv
grep "桜通り中" yamanashiTraffic201909.csv > sakura_dori.csv
"""
import matplotlib.pyplot
from datetime import datetime as dt
import csv
sakura_file = "/home/toyoki/work/kofu/traffic_data/sakura_dori.csv"
kasuga_file = "/home/toyoki/work/kofu/traffic_data/kasuga.csv"
joto_data = {}
with open(sakura_file, 'r') as f:
reader = csv.reader(f)
header = next(reader)
for line in reader:
joto_data[line[0]] = {"桜通り中 東進出": int(line[7])}
with open(kasuga_file, 'r') as f:
reader = csv.reader(f)
header = next(reader)
for line in reader:
if not line[0] in joto_data:
joto_data[line[0]] = {"春日モール北 西進出": int(line[7])}
else:
joto_data[line[0]]["春日モール北 西進出"]= int(line[7])
# print(joto_data)
import pandas as pd
pd_joto = pd.DataFrame.from_dict(joto_data, orient='index')
pd_joto['date'] = pd.to_datetime(pd_joto.index)
pd_joto.set_index('date', inplace=True)
pd_joto.tail()
pd_joto['2019-11-29 06:00:00': '2019-11-29 20:00:00'].plot(title="2019/11/29") # 範囲指定して
pd_joto['hour'] = pd_joto.index.hour
#pd_joto.head(30)
pd_joto_hour = pd_joto.groupby('hour')[['桜通り中 東進出', '春日モール北 西進出']].sum()
pd_joto_hour.plot(figsize=(10,5),fontsize=14, title="2019/09 - 2019/11")
東行きの方が恒常的に交通量が多いというデータになっている。
下記、目視データとは異なる。???
目視データは、「桜通り 西進入」、「桜通り 東進出」なので、桜通り南北から入った車の量分が異なる? JARTICデータにはそのようなカテゴリはないので、厳密な比較は不可能。
import csv
import pandas as pd
from datetime import datetime as dt
''' データの読み込み: westboundとeastboundをキーとする辞書に '''
filename = {"1130": "/home/toyoki/work/kofu/handCountData/20191130_all.csv",
"1201": "/home/toyoki/work/kofu/handCountData/20191201_all.csv",
"1203": "/home/toyoki/work/kofu/handCountData/20191203_all_trunc10.csv" # 10時以前のデータを削除したもの
}
east_idx = 0
west_idx = 1
del_idx = -1 # 取り消しid (直前のを取り消す)
data = {"2019-11-30": {"westbound": [], "eastbound": []},
"2019-12-01": {"westbound": [], "eastbound": []},
"2019-12-03": {"westbound": [], "eastbound": []}
}
label = {"1130": "2019-11-30", "1201": "2019-12-01", "1203": "2019-12-03"}
for d in filename:
with open(filename[d], 'r') as f:
reader = csv.reader(f)
header = next(reader)
for line in reader:
flag = int(line[1])
if flag == east_idx :
data[label[d]]['eastbound'].append(dt.strptime(line[0], "%Y-%m-%d %H:%M:%S"))
prev_direction = "eastbound"
elif flag == west_idx:
data[label[d]]['westbound'].append(dt.strptime(line[0], "%Y-%m-%d %H:%M:%S"))
prev_direction = "westbound"
elif flag == del_idx :
data[label[d]][prev_direction].pop(-1) # 「取り消し」の処理 (一つ前を消す)
''' 時間幅を設定してカウント (カウントには、pandasの機能を使う) '''
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
delta_min = "60min" # 集計時間間隔
plt.rcParams["font.size"] = 14
fig, axes = plt.subplots(ncols=3, nrows=1, figsize=(18, 5))
fig_no =0
for day in data:
e_data = pd.DataFrame(data[day]['eastbound'], columns=['date'])
e_data['eastbound'] = 1 # groupbyで集計するためのダミー変数
w_data = pd.DataFrame(data[day]['westbound'], columns=['date'])
w_data['westbound'] = 1
e = e_data.groupby(pd.Grouper(key="date", freq=delta_min)).count()
w = w_data.groupby(pd.Grouper(key="date", freq=delta_min)).count()
traffic = pd.concat([e,w], axis=1, join='outer')
traffic = traffic.fillna(0) # NaNを0に
traffic.plot(title= day + " (width=" + delta_min + ")", ylim=[0,620], rot=45, ax = axes[fig_no])
fig_no += 1
file_body = "JotoVehicleData2019"
plt.savefig(file_body + ".svg", bbox_inches="tight")
import subprocess
subprocess.run("inkscape --file " + file_body + ".svg" + " --export-emf " + file_body + ".emf", shell=True)
# 目視交通量1枚の図に
delta_min = "60min" # 集計時間間隔
plt.rcParams["font.size"] = 16
fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(7, 7))
fig_no =0
for day in data:
e_data = pd.DataFrame(data[day]['eastbound'], columns=['date'])
e_data[day + '東向き'] = 1 # groupbyで集計するためのダミー変数
w_data = pd.DataFrame(data[day]['westbound'], columns=['date'])
w_data[day + '西向き'] = 1
e = e_data.groupby(pd.Grouper(key="date", freq=delta_min)).count()
w = w_data.groupby(pd.Grouper(key="date", freq=delta_min)).count()
traffic = pd.concat([e,w], axis=1, join='outer')
traffic = traffic.fillna(0) # NaNを0に
traffic = traffic.reset_index()
traffic['時刻'] = traffic['date'].dt.strftime("%H:%M")
traffic.plot(x='時刻', y = day + "東向き", ylim=[0,620], rot=45, ax = ax, lw=2)
traffic.plot(x='時刻', y = day + "西向き", ylim=[0,620], rot=45, ax = ax, lw=2)
# fig_no += 1
ax.set_title("目視自動車交通量" )
file_body = "城東・目視自動車交通量"
plt.savefig(file_body + ".svg", bbox_inches="tight")
import subprocess
subprocess.run("inkscape --file " + file_body + ".svg" + " --export-emf " + file_body + ".emf", shell=True)
traffic = traffic.reset_index()
# traffic['time'] = pd.to_datetime(traffic['時刻'], "%H:%M")
#traffic[traffic['date']>= dt.strptime("2019-12-03 10:00:00", "%Y-%m-%d %H:%M:%S")]
# データの書き出し(他のデータとの統合用)
delta_min = "60min" # 集計時間間隔
data = {"1130": {"car_west": [], "car_east": []},
"1201": {"car_west": [], "car_east": []},
"1203": {"car_west": [], "car_east": []}
}
for d in filename:
with open(filename[d], 'r') as f:
reader = csv.reader(f)
header = next(reader)
for line in reader:
flag = int(line[1])
if flag == east_idx :
data[d]['car_east'].append(dt.strptime(line[0], "%Y-%m-%d %H:%M:%S"))
prev_direction = "car_east"
elif flag == west_idx:
data[d]['car_west'].append(dt.strptime(line[0], "%Y-%m-%d %H:%M:%S"))
prev_direction = "car_west"
elif flag == del_idx :
data[d][prev_direction].pop(-1) # 「取り消し」の処理 (一つ前を消す)
traffic_all = pd.DataFrame()
for day in data:
e_data = pd.DataFrame(data[day]['car_east'], columns=['date'])
e_data['car_east'] = 1 # groupbyで集計するためのダミー変数
w_data = pd.DataFrame(data[day]['car_west'], columns=['date'])
w_data['car_west'] = 1
e = e_data.groupby(pd.Grouper(key="date", freq=delta_min)).count()
w = w_data.groupby(pd.Grouper(key="date", freq=delta_min)).count()
traffic = pd.concat([e,w], axis=1, join='outer')
traffic.reset_index(inplace=True)
traffic['day'] = traffic['date'] .dt.strftime("%Y%m%d")
traffic['hour'] = traffic['date'].dt.strftime("%H")
traffic_all = pd.concat([traffic_all, traffic])
traffic_all.drop(columns=['date'], inplace=True)
traffic_all.rename(columns={'day': 'date'},inplace=True)
#traffic_all
traffic_all.to_csv("car_traffic2019.csv", index=False)
GoobleのAPIを通じて得られる2地点間の車での所要時間を取得する。
方法(プログラム)については、
https://toyoki-lab.ee.yamanashi.ac.jp/~toyoki/labTips/UseGoogleAPI.html
に書いてある通り。
2019/12/23より、城東通のNTT甲府支社東の交差点から甲府警察署交差点(平和通と城東通の交差点)の所要時間を記録している。
つぎのようにしてみることができる。
# 8tops上で採取しているデータの閲覧
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter # 時間軸のフォーマットを自在に
fig, ax = plt.subplots(figsize=(8, 4))
df = pd.read_csv("/ssd/toyoki/googleData/joto/jotoBothTrafficByGoogle.csv",sep=",",skipinitialspace=True)
df['date'] = pd.to_datetime(df['date'], format='%Y/%m/%d %H:%M:%S')
df.plot(x='date', y=['east_bound','west_bound'], figsize=(16,8), ax=ax)
ax.xaxis.set_major_formatter(DateFormatter('%m/%d %H:%M'))
曜日別の平均はあとで行うとして、データのある日にちを折りたたんで、1日の変化をみてみる。
# これまでに得られた日にちについて時刻ごとに平均した値 (平日、休日を分けたほうが良いのだが)
df['date_obj'] = pd.to_datetime(df['date']) # dateは文字列なので、datetime型の列を新設
df['hour_min'] = df['date_obj'].dt.strftime("%H:%M") # 時分の文字列の列を新設
# groupbyによる平均値計算mean()を行うとマルチインデックスのデータ構造になる
# reset_index()によりマルチインデックスが解除になる
mean_df = df.groupby('hour_min').mean().reset_index()
# mean_df
# df.head()
# 取得期間を平均した日変位データmean_dfをプロット
fig, ax = plt.subplots(figsize=(8, 4))
mean_df.plot(x='hour_min', y=['east_bound','west_bound'], ax=ax,fontsize=14)
ax.set_title("NTT甲府支店東 -甲府警察署西 所要時間(秒)")
file_body = "JotoGoogleDirectionData"
plt.savefig(file_body + ".svg", bbox_inches="tight")
import subprocess
subprocess.run("inkscape --file " + file_body + ".svg" + " --export-emf " + file_body + ".emf", shell=True)
# 曜日指定した時系列、歩行量調査と比べるために、xx:00,xx:20,xx:40, xx+1:00 の平均をxx時の所要時間とする
# 曜日は日曜から順に0,1,2,.,6
df['day_of_week'] = df['date_obj'].dt.strftime('%w').astype(int)
df['hour'] = df['date_obj'].dt.strftime('%H').astype(int)
df['min'] = df['date_obj'].dt.strftime('%M').astype(int)
mean_df = df.groupby(['hour_min', 'day_of_week']).mean().reset_index()
mean_df.head(30)
# day_of_weekでソートしておく
temp_df = mean_df.sort_values(['day_of_week','hour_min'])
temp_df.head()
# 4行ずつの移動平均
temp_df1 = temp_df.loc[:,['day_of_week','west_bound', 'east_bound','hour','min']].rolling(4, center=True).mean()
temp_df1.tail(20)
# min=15.0が xx:00, xx:20, xx:40, xx:0 の平均なので、その行だけを抜き出す
temp_df2 = temp_df1.query('min=="15.0"')
temp_df2.dropna().reset_index(inplace=True) # NaN の行を落とす
temp_df2.reset_index(drop=True) # インデックスの振り直し
temp_df3 = temp_df2.loc[:,['day_of_week','west_bound', 'east_bound','hour']] # 必要な列だけをdeep copy!
temp_df3['new_hour'] = temp_df3['hour'].astype(int) # hourを整数化
temp_df3['week'] = temp_df3['day_of_week'].astype(int) # 曜日を整数化
temp_df3.reset_index(drop=True,inplace=True) # インデックスを振り直し
temp_df3.loc[temp_df3['day_of_week'] % 1 ==0.25,'new_hour']=23 # 日付が変わる23時は、移動平均したときに17.25になってしまうので直す
final_df = temp_df3.loc[:,['week','new_hour', 'west_bound','east_bound']]
final_df.rename(columns={'new_hour': 'hour'}, inplace=True)
final_df
# ファイルへ書き出し
final_df.to_csv("google_traffic_hours.csv", index=False)
# 特定の曜日の表示
final_df[final_df['week']==2]
# Wi-FiのDBから時間ごとの2地点間流動数を返す
# DB接続
import sqlite3
import pandas as pd
# 8tops上でのファイル (ファイル名は環境に応じて変更すること)
conn = sqlite3.connect("/home/raspimngr/db/kofu_traveler.sqlite3")
#conn = sqlite3.connect("kofu_traveler.sqlite3")
cur = conn.cursor()
# テーブル名 (flow, flow_trunc10, flow_all_trunc, flow_all, flow_all_trunc10のどれか)
table_name = "flow_trunc10"
# 時間帯別流動数
def get_hourly_flow_days(path, start_day, end_day):
"""
path = {"west_bound": ["3", "17"], "east_bound": ["17", "3"]} のようにdictionaryで
kofu3: 風月堂, kofu17: ダン
日付は "2019-11-11"の形式
"""
count_data = {"00": {}, "01":{},"02": {},"03": {},"04": {},"05": {},"06": {},"07": {},"08": {},"09": {},
"10": {},"11": {},"12": {},"13": {},"14": {},"15": {},"16": {},"17": {},"18": {},"19": {},
"20": {},"21": {},"22": {},"23": {}}
opt_direction = ""
for l, pos in path.items():
sql = ("select hour, sum(number) from " + table_name
+ ' where origin="' + pos[0] + '" and destination="' + pos[1] + '"'
+ ' and yearday>="' + start_day + '" and yearday<="' + end_day + '" '
+ ' group by hour order by hour')
result = cur.execute(sql).fetchall()
for v in result:
count_data[v[0]][l] = v[1]
df = pd.DataFrame.from_dict(count_data)
df = df.T
df.fillna(0, inplace=True)
df = df.reset_index()
return df
# Wi-Fiデータ
paths = {"west_bound": ["3", "17"], "east_bound": ["17", "3"]}
wifi_df1129 = get_hourly_flow_days(paths, "2019-11-29", "2019-11-29").rename(
columns={"index": "hour", "east_bound": "wifi_east", "west_bound": "wifi_west"})
wifi_df1130 = get_hourly_flow_days(paths, "2019-11-30", "2019-11-30").rename(
columns={"index": "hour", "east_bound": "wifi_east", "west_bound": "wifi_west"})
wifi_df1201 = get_hourly_flow_days(paths, "2019-12-01", "2019-12-01").rename(
columns={"index": "hour", "east_bound": "wifi_east", "west_bound": "wifi_west"})
wifi_df1129['date'] = "20191129"
wifi_df1130['date'] = "20191130"
wifi_df1201['date'] = "20191201"
wifi_df = pd.concat([wifi_df1129, wifi_df1130, wifi_df1201])
wifi_df.to_csv('joto_wifi20191129-20191201.csv', index=False)
結果が、下のtotal_dfというデータフレーム
# 1. ダン、風月堂の歩行量調査データを読み込み
pedes_df = pd.read_csv("pedestrianData2019.csv")
#pedes_df.head()
# east, westを横並びに
pedes_east = pedes_df[pedes_df['direction']=='E'].drop('direction', axis=1)
pedes_west = pedes_df[pedes_df['direction']=='W'].drop('direction', axis=1)
pedes_df = pd.merge(pedes_east, pedes_west, on=['date','hour'])
pedes_df.rename(columns={'fugetsu_x': 'fugetsu_east', 'fugetsu_y': 'fugetsu_west',
'muto_x': 'muto_east', 'muto_y': 'muto_west',
'total_x': 'pedes_total_east', 'total_y': 'pedes_total_west'}, inplace=True)
pedes_df.head()
# 2. WiFiデータの読み込み
wifi_df = pd.read_csv('joto_wifi20191129-20191201.csv')
wifi_df.head()
# 3. Google traffic dataの読み込み
# 曜日ごとの平均データなので、各日にちの曜日のデータとする
temp_df = pd.read_csv("google_traffic_hours.csv")
g_df1129 = temp_df[temp_df['week']==5].reset_index()
g_df1129['date'] = 20191129
g_df1130 = temp_df[temp_df['week']==6].reset_index()
g_df1130['date'] = 20191130
g_df1201 = temp_df[temp_df['week']==0].reset_index()
g_df1201['date'] = 20191201
google_df = pd.concat([g_df1129, g_df1130, g_df1201]).reset_index()
google_df.head()
# Google trafficデータを統合用データとしてセーブ
google_df.drop(columns={'level_0', 'index', 'week'}, inplace=True)
google_df.rename(columns={'west_bound': 'google_west_time', 'east_bound':'google_east_time'})
# google_df.to_csv("google_traffic2019.csv", index=False)
#google_df.dtypes
# 4. 目視自動車交通量
car_traffic_df = pd.read_csv("car_traffic2019.csv")
car_traffic_df.head()
# 1203 を 1129に強制変更
car_traffic_df.loc[car_traffic_df['date'] == 20191203,'date']=20191129
car_traffic_df.head()
# 統合
total_df = pd.merge(pedes_df, wifi_df, on = ['date','hour']) # 歩行量とWi-Fiの結合
total_df = pd.merge(total_df, car_traffic_df, on = ['date', 'hour']) # 目視交通量の追加
total_df = pd.merge(total_df, google_df, on = ['date', 'hour']) # google所要時間データの追加
total_df.reset_index(inplace=True)
total_df.drop(columns=['index'], inplace=True)
total_df
列名の意味
total_df.to_csv("joto_data_summary.csv")