2地点所要時間分析

2地点間の流動アドレスについて、時間間隔(departureとarrival)の分布を調べてみる。

id lat lon 地点名
kofu2 35.658933 138.571024 三枝豆店
kofu3 35.660988 138.571165 風月堂
kofu4 35.670632 138.565893 永田楽器
kofu5 35.662019 138.571818 文化のるつぼ Hechima
kofu7 35.666474 138.567104 ライフインナカゴミ
kofu8 35.669087 138.566179 オスカー本社・朝日店
kofu9 35.663483 138.568223 防災新館1F
kofu10 35.660508 138.571015 河野スポーツ
kofu11 35.65898 138.569654 内藤セイビドー眼鏡店
kofu12 35.665457 138.567812 立ち食い焼肉 鷹の
kofu13 35.659908 138.571535 ブラザー(文房具)
kofu14 35.666835 138.571457 甲州夢小路
kofu16 35.662705 138.570433 甲府クラフトラボ
kofu17 35.661394 138.56881 ダン珈琲店
kofu19 35.660883 138.570182 きぬや
kofu20 35.66005 138.56915 そば処 奥義
kofu21 35.671693 138.566729 玉屋
kofu22 35.665733 138.568327 奥藤本店
kofu23 35.665305 138.567282 六曜館珈琲店 本店
kofu24 35.660092 138.570098 ルパンザバール ワイン酒場前
In [120]:
import pandas as pd
import numpy as np
import matplotlib
from datetime import datetime, timedelta

sdate = "20181201" # 日にち範囲指定
edate = "20181207"
base_filename = "/home/raspimngr/wifi_csv/summary_kofu/traveler/travelerCount_kofu_"
day = datetime.strptime(sdate, "%Y%m%d")
last_day = datetime.strptime(edate, "%Y%m%d")

src_data = pd.DataFrame(columns=["addr","start","dep_date","goal",
                                 "arrival_date", "local_bit"])
while day <= last_day:
    day_str = datetime.strftime(day, "%Y%m%d")
    tr_data = pd.read_csv(base_filename + day_str + ".csv",
                          sep=",",
                          names=("addr","start","dep_date",
                                 "goal", "arrival_date", "local_bit"))
    src_data =pd.concat([src_data,tr_data], ignore_index=True)
    # src_data = src_data.append(tr_data, ignore_index=True) # 上記と同じ
    day += timedelta(days=1)
    
src_data.info()
# src_data.head()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1014016 entries, 0 to 1014015
Data columns (total 6 columns):
addr            1014016 non-null object
start           1014016 non-null object
dep_date        1014016 non-null object
goal            1014016 non-null object
arrival_date    1014016 non-null object
local_bit       1014016 non-null object
dtypes: object(6)
memory usage: 46.4+ MB
In [121]:
from datetime import datetime as dt

src_data["time_delta"] = (pd.to_datetime(src_data['arrival_date']) - 
                        pd.to_datetime(src_data['dep_date']))
src_data["total_seconds"] = [i.total_seconds() for i in src_data.time_delta]
# 所要時間を分刻みとして追加
src_data["total_min"] = (src_data["total_seconds"]/60).astype(int)
In [122]:
src_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1014016 entries, 0 to 1014015
Data columns (total 9 columns):
addr             1014016 non-null object
start            1014016 non-null object
dep_date         1014016 non-null object
goal             1014016 non-null object
arrival_date     1014016 non-null object
local_bit        1014016 non-null object
time_delta       1014016 non-null timedelta64[ns]
total_seconds    1014016 non-null float64
total_min        1014016 non-null int64
dtypes: float64(1), int64(1), object(6), timedelta64[ns](1)
memory usage: 69.6+ MB
In [123]:
# 9: 防災会館 17:ダン珈琲店
hist_dt = src_data[(src_data["start"]==9) &
                   (src_data["goal"]==17) &
                   (src_data["local_bit"] == 0)]
hist_dt.tail()       
Out[123]:
addr start dep_date goal arrival_date local_bit time_delta total_seconds total_min
1011964 fc:08:4a:5c:a2:01 9 2018-12-07 07:27:10 17 2018-12-07 07:28:26 0 00:01:16 76.0 1
1011970 fc:08:4a:5c:a3:f3 9 2018-12-07 16:45:06 17 2018-12-07 16:47:02 0 00:01:56 116.0 1
1011993 fc:08:4a:5c:bc:3c 9 2018-12-07 18:05:23 17 2018-12-07 18:07:25 0 00:02:02 122.0 2
1012159 fc:62:b9:d3:50:d8 9 2018-12-07 15:57:13 17 2018-12-07 15:58:47 0 00:01:34 94.0 1
1012336 fc:d8:48:29:4f:53 9 2018-12-07 15:22:36 17 2018-12-07 15:34:41 0 00:12:05 725.0 12
In [124]:
bin_list = [0,1,2,3,5,10,30,60,600]
pd.cut(hist_dt["total_min"],bin_list, right=False).value_counts(sort=True)
Out[124]:
[1, 2)       587
[60, 600)    543
[0, 1)       505
[2, 3)       442
[3, 5)       409
[10, 30)     252
[5, 10)      222
[30, 60)     129
Name: total_min, dtype: int64
In [125]:
bin_list = [0,1,2,3,5,10,30,60,600]
bin_label = ["0-1", "1-2","2-3","3-5", "5-10", "10-30","30-60", "60<"]
data = pd.cut(hist_dt["total_min"],bins=bin_list, labels=bin_label,
              right=False).value_counts(sort=False)
ax = data.plot.bar()
ax.set_title("防災会館 - ダン珈琲店 観測時刻間隔(12/01-12/07)", size=14)
ax.set_xlabel("minutes", size=14)
ax.set_ylabel("number of global addresses", size=14)
Out[125]:
Text(0,0.5,'number of global addresses')

防災会館とダン珈琲店の距離はGoogle Mapによれば約300m(徒歩約4分)

  • 1分以内は車
  • 1分~3分は車or自転車

とすると、車と自転車・バイクはほぼ同程度ではないか。