生活随笔
收集整理的這篇文章主要介紹了
利用卡口数据绘制路段基本图(出入量法)——Python交通数据分析
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
一、卡口數(shù)據(jù)簡介
數(shù)據(jù)名稱含義
| DEVICEID | 設(shè)備ID |
| TRAVELID | 車輛ID,可分辨車輛 |
| hpzl | 車輛類型,1表示大型車,2表示小汽車 |
| SJ | 時(shí)間 |
| LANEID | 車道編號,較長編號表示該位置處于上下游車道過渡區(qū)域,無劃線;-1表示由于技術(shù)原因?qū)е碌臒o效計(jì)數(shù),可忽略該檢測值 |
| LANNUM | 車道數(shù) |
| SPEED | 瞬時(shí)車速 |
| TURN | 車道方向信息,LSR分別表示左直右及其組合,LU和RU分別表示左掉頭和右掉頭,LC表示上下游車道連接過渡段,表明此斷面包含車道變化區(qū)域 |
| FTNODE | 起始節(jié)點(diǎn) |
卡口布設(shè)簡圖
二、路段基本圖
繪出東進(jìn)口道(下游檢測器編號504,上游檢測器編號508)的路段基本圖,與斷面基本圖對比。
交通流特性(流速密)在斷面、路段上的區(qū)別
利用卡口數(shù)據(jù)繪制斷面基本圖——Python交通數(shù)據(jù)分析
import numpy
as np
import pandas
as pd
from pandas
import DataFrame
from numpy
import *
import scipy
from scipy
import stats
import matplotlib
.pyplot
as plt
from matplotlib
.font_manager
import FontProperties
import matplotlib
.dates
as mdate
import timekk_data
= pd
.read_csv
('data/kk_data/kk.csv')
kk_data
['SJ'] = pd
.to_datetime
(kk_data
['SJ'])
kk_data
['TRAVELID'] = kk_data
['TRAVELID'].astype
(str) kk_data_504
= kk_data
[kk_data
['DEVICEID'] == 504].copy
()
kk_data_504
= kk_data_504
.sort_values
(by
= 'SJ')
kk_data_504
.rename
(columns
={'SJ':'OUT_SJ'},inplace
=True) kk_data_508
= kk_data
[kk_data
['DEVICEID']==508].copy
()
kk_data_508
= kk_data_508
.sort_values
(by
= 'SJ')
kk_data_508
.rename
(columns
={'SJ':'IN_SJ'},inplace
=True)data_merge
= pd
.merge
(kk_data_508
,kk_data_504
,on
='TRAVELID',how
='inner')
data_merge
['time'] = data_merge
['OUT_SJ'] - data_merge
['IN_SJ']
wrong_data
= data_merge
[(data_merge
['time'] < pd
.Timedelta
(seconds
=5)) | (data_merge
['time'] >= pd
.Timedelta
(minutes
=3))]
wrong_data_TRAVELID
= wrong_data
['TRAVELID'].tolist
()
for i
in wrong_data_TRAVELID
:kk_data_508
= kk_data_508
[kk_data_508
['TRAVELID']!=i
]kk_data_504
= kk_data_504
[kk_data_504
['TRAVELID']!=i
]
data_merge
= data_merge
[(data_merge
['time'] > pd
.Timedelta
(seconds
=5)) & (data_merge
['time'] <= pd
.Timedelta
(minutes
=3))]kk_data_508
= kk_data_508
.reset_index
()
kk_data_504
= kk_data_504
.reset_index
()
data_merge
= data_merge
.reset_index
()
data_merge_TRAVELID
= data_merge
['TRAVELID'].tolist
()labels_list
= []
for i
in range(5,len(kk_data_504
)):ID
= kk_data_504
['TRAVELID'].iloc
[i
]if ID
not in data_merge_TRAVELID
:labels_list
.append
(i
)
kk_data_504
.drop
(labels
=labels_list
,axis
=0,inplace
=True)
kk_data_504
= kk_data_504
.reset_index
()
labels_list
= []
for i
in range(0, (len(kk_data_508
) - 10)):ID
= kk_data_508
['TRAVELID'].iloc
[i
]if ID
not in data_merge_TRAVELID
:labels_list
.append
(i
)
kk_data_508
.drop
(labels
=labels_list
,axis
=0,inplace
=True)
kk_data_508
= kk_data_508
.reset_index
()
time
= data_merge
['time']
sec
= []
V
= []
for i
in range(0,len(time
),1):sec
.append
(time
[i
].seconds
)V
.append
((300/time
[i
].seconds
)*3.6)
data_merge
['sec'] = sec
data_merge
['V'] = V
E
= 2
K
= []
Q
= []
time
= pd
.datetime
(2019,7,9,6,0)
while(time
< pd
.datetime
(2019,7,9,10,0)):data_IN
= kk_data_508
[(kk_data_508
['IN_SJ']>=time
) & (kk_data_508
['IN_SJ']<(time
+pd
.Timedelta
(minutes
=1)))].copy
()data_OUT
= kk_data_504
[(kk_data_504
['OUT_SJ']>=time
) & (kk_data_504
['OUT_SJ']<(time
+pd
.Timedelta
(minutes
=1)))].copy
()data_V
= data_merge
[(data_merge
['OUT_SJ']>(time
+pd
.Timedelta
(minutes
=1))) & (data_merge
['IN_SJ']<=(time
+pd
.Timedelta
(minutes
=1)))].copy
()count
= len(data_IN
) - len(data_OUT
)E
= E
+ countV_mean
= data_V
['V'].mean
()K
.append
(E
/ (2 * 0.3)) Q
.append
(V_mean
* (E
/ (2 * 0.3))) time
= time
+ pd
.Timedelta
(minutes
=1)
def kk(kk_data
):kk_data
['1/SPEED'] = 1 / kk_data
['SPEED']kk_data_group
= kk_data
.groupby
(['DEVICEID',pd
.Grouper
(key
='IN_SJ',freq
='5min')])kk_data_flow
= kk_data_group
['DEVICEID'].count
()kk_data_flow
= kk_data_flow
* 12 kk_data_speed
= 1 / (kk_data_group
['1/SPEED'].mean
())return kk_data_flow
,kk_data_speed
kk_flow
,kk_speed
= kk
(kk_data_508
)
kk_density
= kk_flow
/ kk_speedplt
.xlabel
('K: veh/km/lane')
plt
.ylabel
('Q: veh/h/lane', rotation
=360, horizontalalignment
='right', verticalalignment
='center')
plt
.scatter
(K
,Q
)
plt
.scatter
(kk_density
,kk_flow
)
plt
.legend
(['Road','Section'])
plt
.show
()
注意,東進(jìn)口道可能并不是一條封閉的路段,才需要清洗這么多數(shù)據(jù)
水平有限,僅供參考,有錯誤請指出
總結(jié)
以上是生活随笔為你收集整理的利用卡口数据绘制路段基本图(出入量法)——Python交通数据分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。