《城市公交IC卡·数据分析方法及应用》 陈学武、李海波、候贤耀著
目录
《城市公交IC卡·数据分析方法及应用》——上车点识别
一般情况下,IC卡是没有记录上车点的信息,需要结合其他数据对IC卡处理
通常情况下,使用时间特征对数据匹配
公交运营时间和乘客刷卡时间特征
公交车辆运营一趟的的总时间:
T
=
t
a
n
−
t
a
l
=
∑
i
=
1
k
−
1
(
T
s
k
−
T
r
k
)
T = t_{an}-t_{al} = \sum_{i=1}^{k-1}(T_{sk}-T_{rk})
T=tan−tal=i=1∑k−1(Tsk−Trk)
总时间 = 运行时间+停靠时间
公交车辆到达第k个站点的时间:
t
a
k
=
t
a
1
+
∑
i
=
1
k
−
1
(
T
s
i
−
T
r
i
)
t_{ak} = t_{a1}+\sum_{i= 1}^{k-1}(T_{si} - T_{ri})
tak=ta1+i=1∑k−1(Tsi−Tri)
到达第k个站点的时间 = 起始时间 +此站前的总时间
车辆离开第K个站点的时间:
t
s
k
=
t
a
1
+
∑
i
=
1
k
−
1
(
T
s
i
−
T
r
i
)
+
T
s
k
t_{sk} = t_{a1}+\sum_{i= 1}^{k-1}(T_{si} - T_{ri})+T_{sk}
tsk=ta1+i=1∑k−1(Tsi−Tri)+Tsk
离开第K个站点的时间 = 到达时间+停靠时间
综上,车辆在第K歌站点停留时间区间为:
[
t
a
k
,
t
l
k
]
=
[
t
a
1
+
∑
i
=
1
k
−
1
(
T
s
i
−
T
r
i
)
,
t
a
1
+
∑
i
=
1
k
−
1
(
T
s
i
−
T
r
i
)
+
T
s
k
]
[t_{ak},t_{lk}] = [t_{a1}+\sum_{i= 1}^{k-1}(T_{si} - T_{ri}) , t_{a1}+\sum_{i= 1}^{k-1}(T_{si} - T_{ri})+T_{sk}]
[tak,tlk]=[ta1+i=1∑k−1(Tsi−Tri),ta1+i=1∑k−1(Tsi−Tri)+Tsk]
其中:
k ——站点号
t a 1 t_{a1} ta1 —— 起点发车时间
t l 1 t_{l1} tl1 —— 起点离开时间
t a k t_{ak} tak —— 到达第k个站点的时间
t l k t_{lk} tlk —— 离开第k个站点的时间
T s 1 T_{s1} Ts1—— 起点站发车时间与离开时间间隔
T r 1 T_{r1} Tr1 —— 起点发车时间(第一站)到下一站的运行时间
T s k T_{sk} Tsk —— 车辆在第k个站点的停留时间
T r k T_{rk} Trk —— 车辆离开第k个站到达下一个站的运行时间
仅仅依赖公交调度表结合线路平均运营速度对算到站时间的可靠性不高,还需要结合上乘客的刷卡数据
乘客刷卡时间特征
在乘客较多或者存在行动不方便的乘客时,会出现公交启动离站后才刷卡的情况,也就意味着刷卡存在一个刷卡时间区间。
乘客的刷卡行为呈现一种明显的集中性和有序性,可以使用聚类方法将同意站点乘坐同一车次的刷卡记录聚合成一组,以达到聚类数据的刷卡时间与公交车辆到达时间的良好匹配关系
考虑到公交线路的周期性以及一个车次中不会每站都有人上车,所以可以将一周的时间集中在一起聚类分析
上车点识别
聚类分析
聚类分析方法主要依据数据客体之间的相似性和相异性,将这种关系看成一种距离上的远近的一种度量。将距离近的归类为同一种类,距离远的归结为另一类
主要方法分为 层次聚类和 非层次聚类,如:k-means、BIRCH、DBSCAN等方法
由于不是每一个站点都会有人上车,所以聚类只能聚合出有刷卡数据的站点数据
对于这类问题有以下解决办法:
- 在公交IC卡数据聚类的基础上,利用公交调度数据推算公交车辆到站时间,利用公交IC卡时间与公交车辆到站时间匹配识别上车点。
- 依据换乘行为,将识别出来的换成站点作为控制站点来推断其他上车站点
基于公交调度数据的算法
公交IC卡数据聚类
对于一辆公交车,乘客上车客流具有很强的时间群集特性,即刷卡时间也具有时间群集特征。可以通过对刷卡数据的聚类分析,以时间长短作为相似性依据
对刷卡时间进行聚类的分类数量不确定,只有采用层次聚类方法:
- 提取所有记录,将每个记录看成一类,初始数量设为K
- 计算相邻类的刷卡时间最短间隔设为距离 D p q D_{pq} Dpq,将距离最小的几类合并
- 重复步骤2,知道min( D i j D_{ij} Dij)> T u T_u Tu,即相邻两类的最小距离中的最小值大于该线路相邻两站点之间最短的刷卡间隔 (两个最小值比较)
聚类之后,将各组分类号建字段存储到刷卡数据表中
计算 各组刷卡数据的 中间值 与 最大刷卡间隔 并存储 以备和车辆停靠时间匹配,确定上车点
中间值:组内各组刷卡时间的算数平均数(个人看法:取中位数研究)
最大时间间隔:组中最后一次和第一次之间的时间间隔
车辆停靠时刻推算
这里定义公交停靠时刻 为车辆停靠在停靠站 停靠的中间时刻 即:
t
k
=
t
a
k
+
(
t
l
k
+
t
a
k
)
2
=
t
l
(
k
−
1
)
+
T
r
(
k
−
1
)
+
T
s
k
2
,
k
>
=
2.
t_k = t_{ak} + \frac{(t_{lk}+t_{ak})}{2} \\= t_{l(k-1)} + T_{r(k-1)}+\frac{T_{sk}}{2},k>=2.
tk=tak+2(tlk+tak)=tl(k−1)+Tr(k−1)+2Tsk,k>=2.
可以从公交调度信息表中提取出车辆起点发车时刻t_l1 与 终点站到站时刻t_an
推算公交车辆离开各站点的时刻:
t l k = t l ( k − 1 ) + T r ( k − 1 ) + T s k 离 开 时 刻 = 上 一 站 离 开 时 刻 + 上 一 段 路 上 运 行 时 间 + 此 站 的 停 靠 时 间 = [ t l ( k − 2 ) + T r ( k − 2 ) + T s ( k − 1 ) ] + T r ( k − 1 ) + T s k 通 过 递 归 , 递 推 到 t l 1 = t l 1 + ∑ i = 1 k − 1 T r i + ∑ i = 2 k T s i 整 理 后 得 到 上 面 的 公 式 t_{lk} = t_{l(k-1)}+T_{r(k-1)}+T_{sk}\\ 离开时刻 = 上一站离开时刻+上一段路上运行时间+此站的停靠时间\\ \qquad\\\qquad\\ =[t_{l(k-2)}+T_{r(k-2)}+T_{s(k-1)}]+T_{r(k-1)}+T_{sk}\\ 通过递归,递推到t_{l1}\\ \qquad\\\qquad\\ = t_{l1}+\sum_{i = 1}^{k-1}T_{ri}+\sum_{i=2}^{k}T_{si}\\ 整理后得到上面的公式 tlk=tl(k−1)+Tr(k−1)+Tsk离开时刻=上一站离开时刻+上一段路上运行时间+此站的停靠时间=[tl(k−2)+Tr(k−2)+Ts(k−1)]+Tr(k−1)+Tsk通过递归,递推到tl1=tl1+i=1∑k−1Tri+i=2∑kTsi整理后得到上面的公式
对于首末站,近似的认为到站时间和出站时间相等
停靠时间 T s k T_{sk} Tsk:注意到的刷卡数据聚类后计算得到的各组的刷卡时间间隔(Δk表示)数据可以近似表示为 站点停靠时间,其他没有刷卡数据的站点其停靠时间可以根据 调查近似值
站点间运行时间
T
s
k
T_{sk}
Tsk: 即 站间距离/平均运行速度的值,单位s,计算公式:
T
r
k
=
l
k
(
k
+
1
)
V
‾
V
‾
=
l
t
a
n
−
t
l
n
−
∑
i
=
2
n
−
1
T
s
i
即
:
T
r
k
=
l
k
(
k
+
1
)
∗
(
t
a
n
−
t
l
n
−
∑
i
=
2
n
−
1
T
s
i
)
l
T_{rk} = \frac{l_{k(k+1)}}{\overline{V}}\\ \qquad\\\qquad\\ \overline{V} = \frac{l}{t_{an}-t_{ln}-\sum_{i = 2}^{n-1}T_{si}}\\ \qquad\\\qquad\\ 即:T_{rk} = \frac{l_{k(k+1)}*(t_{an}-t_{ln}-\sum_{i = 2}^{n-1}T_{si})}{l}\\
Trk=Vlk(k+1)V=tan−tln−∑i=2n−1Tsil即:Trk=llk(k+1)∗(tan−tln−∑i=2n−1Tsi)
刷卡时间与停靠时间匹配
通过聚类分析和停靠时刻推算得到个各类中公交刷卡时间的“中间值 t m t_m tm” 和 公交车辆在各站点的“停靠时刻 t k t_k tk”
通过t_m和t_k之间的距离 Δmk ,当Δmk = min( | t m − t k t_m - t_k tm−tk | ) 时,所取 t k t_k tk 对应的停靠站点认为时 t m t_m tm 所对应的刷卡记录的刷卡站点,即上车站点
《城市公交IC卡·数据分析方法及应用》 陈学武、李海波、候贤耀著
《城市公交IC卡·数据分析方法及应用》——基于换乘点的上车点识别·笔记
换乘点
通常情况下,公交乘客总是选择步行距离或者时间最短的站点间进行换乘,同时,换成距离应该在可接收的范围内
如果两条公交线路之间,有且仅有 一对公交站点之间的步行距离在可接受的换乘距离之内 即正交换乘
推导参数
-
线路参数表包含以下字段:
- 记录编号、线路编号、行车方向、发车间隔、线路行程时间、站点行程时间临界值——线路内个站点之间的平均最小形势时间
-
正交换乘参数表包括以下字段:
- 换乘站点、正交换乘线路、换成判断临界时间——换乘站点换乘耗时与目标线路行程时间之和
刷卡数据按不同班次聚类
公交车辆从始发站除法沿途统考每个点,到达终点站后停留一段时间返回
对应的刷卡时间有以下特征:
抽取某日一条线路的所有刷卡数据,按车辆编号、刷卡时间顺序排列、以刷卡序列号为x轴、刷卡时间为y轴建立二维坐标系,此时刷卡时间大致呈阶梯状分布,且每隔若干个阶梯出现一次较大的时间间隔,记为GAP(i),其时间长度为
T
G
A
P
(
i
)
T_{GAP(i)}
TGAP(i),两个相邻GAP间的时间间隔记作
t
G
A
P
(
i
−
1
)
,
G
A
P
(
i
)
t_{GAP(i-1),GAP(i)}
tGAP(i−1),GAP(i),如图
区分不同班次:
if
T
G
A
P
(
i
)
T_{GAP(i)}
TGAP(i)>=Depint且
t
G
A
P
(
i
−
1
)
,
G
A
P
(
i
)
t_{GAP(i-1),GAP(i)}
tGAP(i−1),GAP(i)∈[Tratime-Tratime/5,Tratime+Tratime/5]:
GAP(i-1)与GAP(i)之间的刷卡记录为一个班次的完整刷卡记录
if
T
G
A
P
(
i
)
T_{GAP(i)}
TGAP(i)>=Depint/2且
t
G
A
P
(
i
−
1
)
,
G
A
P
(
i
)
t_{GAP(i-1),GAP(i)}
tGAP(i−1),GAP(i)∈[Tratime-Tratime/10,Tratime+Tratime/10]:
GAP(i-1)与GAP(i)之间的刷卡记录为一个班次的完整刷卡记录
else:
提取GAP(i-1) 后面所有满足
t
G
A
P
(
i
−
1
)
,
G
A
P
(
i
)
t_{GAP(i-1),GAP(i)}
tGAP(i−1),GAP(i)∈[Tratime-Tratime10,Tratime+Tratime/10]的记录
按
T
G
A
P
(
j
)
T_{GAP(j)}
TGAP(j)排序
记MAX(GAP(j)) 与 已经有的GAP (i-1)之间的刷卡记录为一个班次的完整刷卡记录
其中:
Depint:发车间隔
Tratime:线路行程时间
注:以上存在可以改进的点
刷卡记录上车站点匹配
刷卡数据按站点聚类
抽取某日一条线路的所有刷卡数据,按车辆编号、刷卡时间顺序排列、以刷卡序列号为x轴、刷卡时间为y轴建立二维坐标系,此时刷卡时间大致呈阶梯状分布,相邻阶梯的时间间隔记为一个STATION(j),其时间长度为 T S T A T I O N ( j ) T_{STATION(j)} TSTATION(j),两个相邻SATATION间的时间间隔记作 t S T A T I O N ( j − 1 ) , S A T A T I O N ( j ) t_{STATION(j-1),SATATION(j)} tSTATION(j−1),SATATION(j),如上图
将一个站点对应的所有刷卡记录作为一个类,按顺序进行以下几步判断,完成刷卡数据站点的聚类
if
T
S
T
A
T
I
O
N
(
j
)
T_{STATION(j)}
TSTATION(j)>=60s且
t
S
T
A
T
I
O
N
(
j
−
1
)
,
S
A
T
A
T
I
O
N
(
j
)
t_{STATION(j-1),SATATION(j)}
tSTATION(j−1),SATATION(j)∈[Stacritime-Stacritime/5,Stacritime+Stacritime/5]:
STATION(j-1)与SATATION(j)之间的刷卡记录为一个站点的完整刷卡记录
if
T
G
A
P
(
i
)
T_{GAP(i)}
TGAP(i)>=30s且
t
S
T
A
T
I
O
N
(
j
−
1
)
,
G
A
P
(
i
)
t_{STATION(j-1),GAP(i)}
tSTATION(j−1),GAP(i)∈[Stacritime-Stacritime/10,Tratime+Tratime/10]:
STATION(j-1)与SATATION(j)之间的刷卡记录为一个站点的完整刷卡记录
else:
提取STATION(j-1)后面所有满足
t
S
T
A
T
I
O
N
(
j
−
1
)
,
S
A
T
A
T
I
O
N
(
j
)
t_{STATION(j-1),SATATION(j)}
tSTATION(j−1),SATATION(j)∈[Stacritime-Stacritime/10,Tratime+Tratime/10]的记录
按
T
S
A
T
A
T
I
O
N
(
j
)
T_{SATATION(j)}
TSATATION(j)排序
记MAX(SATATION(j)) 的刷卡记录为一个站点的完整刷卡记录
其中:Stacritime:站点行程时间临界值
正交换乘站点刷卡数据匹配
对于通过上述步骤处理的数据,抽取某日某条线路以及可将该线路作为正交换乘线路的其他线路的刷卡数据,提取在目标线路的刷卡时间晚于其他线路刷卡时间的对应刷卡记录,判断其刷卡间隔是否<换乘判断临界时间
如果满足,则标定 该线路的此刷卡记录对应的上车站点为对应换乘点,完成换乘站点刷卡数据匹配
其余站点刷卡数据匹配
其余站点刷卡数据匹配利用最大相似原理
已完成匹配的换乘站点的刷卡记录作为基本类,其余站点的刷卡记录作为待定类
比较 站点间刷卡时间间隔 与 站点间标准行程时间的 偏差,以完成其余站点的刷卡数据匹配
参照上图,具体描述如下:
对于通过刷卡数据按站点聚类后的数据,
令
t
i
j
t_{ij}
tij表示 类j的第一次刷卡时间 与 类 i 的最后一次刷卡时间的差值 (i对应站点处于j对应站点的上游)
T
a
b
T_{ab}
Tab表示 实际中站点a至站点b的标准行程时间。
已完成匹配的换乘站点的刷卡记录作为 基本类,
两相邻基本类之间(或顶点 与 基本类之间)的部分称为类段,
一个类段所包含的类的数量称为该类段的容量
对于容量为M的类段,其对应的待定站点数量为N(由于某些站点可能没有刷卡记录,所以显然有M <= N)
其第m个类的判断值
x
i
x_i
xi 计算如下:
if 为第一个类段:
x
i
=
(
t
m
R
−
T
i
R
)
2
,
i
=
m
,
…
…
,
N
x_i = (t_{mR} - T_{iR})^2,i = m,……,N
xi=(tmR−TiR)2,i=m,……,N
if 为中间类段 :
x
i
=
(
t
L
m
−
T
L
i
)
2
+
(
t
m
R
−
T
i
R
)
2
,
i
=
m
,
…
…
,
N
x_i = (t_{Lm} - T_{Li})^2+(t_{mR}-T_{iR})^2,i = m,……,N
xi=(tLm−TLi)2+(tmR−TiR)2,i=m,……,N
if 为最后一个类段:
x
i
=
(
t
L
m
−
T
L
i
)
2
,
i
=
m
,
…
…
,
N
x_i = (t_{Lm} - T_{Li})^2,i = m,……,N
xi=(tLm−TLi)2,i=m,……,N
其中:
L(R)——类m的左(右)临基本类
t
L
m
(
t
m
R
)
t_{Lm}(t_{mR})
tLm(tmR)——左(右)临基本类 与 m类的刷卡时间间隔
T
L
i
(
T
i
R
)
T_{Li}(T_{iR})
TLi(TiR)——站点i 与 左(右)临基本站点的标准行程时间
求出最小的
x
i
x_i
xi,其对应的m和i满足最大的相似匹配条件,即类m的所有刷卡记录对应的上车站点为i
《城市公交IC卡·数据分析方法及应用》 陈学武、李海波、候贤耀著
《城市公交IC卡·数据分析方法及应用》基于IC&AVL数据的上车站点识别
算法基本思路:
此处算法的核心思想是:通过IC卡数据和AVL数据的时间匹配,获取IC卡记录对应的上车站点
算法所需要的数据主要是公交IC卡数据和AVL定位数据
以到离站时间数据为例
公交刷卡数据包括:乘客IC卡卡号、卡类型、刷卡日期、刷卡时间、所乘线路编号、所乘车辆编号等字段
进出站时间数据应包括车辆识别、线路识别、线路方向、站点名称、进站时间、出站时间等字段
假设从公交IC卡数据库中提取出某辆公交车的M条公交IC卡记录,从AVL数据中提取出对应公交车的N条进出站时间记录。
设第i条刷卡记录的刷卡时间位
t
i
t_i
ti,对应的上车站点为
S
i
S_i
Si,第j条进出站时间记录的进站时间为
t
j
i
n
t_j^{in}
tjin,出站时间为
t
j
o
u
t
t_j^{out}
tjout,对应的站点为
S
j
S_j
Sj,则
I
F
t
j
i
n
<
t
i
≤
t
j
o
u
t
S
i
=
S
j
E
L
S
E
j
=
j
+
1
IF \quad t_j^{in}<t_i\le t_j^{out}\\ S_i=S_j\\ ELSE\qquad\qquad\qquad\\ j = j+1
IFtjin<ti≤tjoutSi=SjELSEj=j+1
现实中,刷卡滞后是不可避免发生的,需要对以上规则做出一定的修改:
认为第j个公交站点进展时间与第j+1 个公站点的进站时间之间的所有IC卡刷卡记录对应的上车站点均为公交站点 S j S_j Sj
即:
I
F
t
j
i
n
<
t
i
≤
t
j
+
1
i
n
S
i
=
S
j
E
L
S
E
j
=
j
+
1
IF \quad t_j^{in}<t_i\le t_{j+1}^{in}\\ S_i=S_j\\ ELSE\qquad\qquad\qquad\\ j = j+1
IFtjin<ti≤tj+1inSi=SjELSEj=j+1
公交IC卡系统时间修正
现在很多城市采用的是离线式公交IC卡收费系统,存在IC卡终端时间基准漂移,导致IC卡时间数据与实际数据不符,可以通过AVL数据矫正
易知,刷卡时间会早于或晚于实际时间 ,现在需要设计一个合理的时差就可以对数据修正,
主要推导步骤
-
1、IC卡数据提取:
- 从公交IC卡原视数据ODB_IC中提取卡号、刷卡时间、车辆标识、线路标识等字段
-
2、AVL数据提取
- 从公交AVL原始数据ODB_AVL 中提取车辆标识、线路标识、线路方向、站点名称、进站时间、出站时间等字段
- 生成公交AVL分析数据库DB_AVL
-
3、数据清洗:
-
4、抽取线路中的车辆:
- 从公交IC卡分析数据库和公交AVL分析数据可以中提取出第m条公交线路LIne_m的第r辆公交车Bus_n的IC卡数据和AVL数据,分别记为DB_IC_mn和DB_AVL_mn,其所包含记录条数分别为I_mn和A_mn;
-
5、上车点识别:
- 比较DB_IC_mn中的第i条记录的公交IC卡刷卡时间t_i与DB_AVL_mn中第j条记录的进站时间 t j b t_{jb} tjb和出站时间 t j e t_{je} tje;
- if t j b t_{jb} tjb < t i t_i ti <= t j e t_{je} tje,DB_AVL_mn中第j条记录的对应的站点即为DB_IC_mn中的第i条记录对应的上车站点 ,存入结果数据库DB_OD,并转至6
-
6、判断IC卡中记录是否已经全部处理结束。
- if i>=I_mn
- 转至7
- else
- i++
- goto 5
-
7、判断线路中所有车辆是否已经全部处理结束
- if n>=B_m
- 转至8
- else
- n++
- goto 4
-
8、判断所有线路是否已经全部处理结束
- if m>=N
- END
- else
- m++
- goto 4