2021.11.13
【小旭学长-使用python进行城市数据分析】说明篇(开篇 )https://blog.csdn.net/wistonty11/article/details/121347825
【小旭学长-使用python进行城市数据分析】笔记篇(上):https://blog.csdn.net/wistonty11/article/details/121089882
【小旭学长-使用python进行城市数据分析】笔记篇(中):https://blog.csdn.net/wistonty11/article/details/121210664
【小旭学长-使用python进行城市数据分析】笔记篇(下):https://blog.csdn.net/wistonty11/article/details/121308188
文章目录
- 五. IC刷卡数据的基本处理
* - 5.1基于IC刷卡数据的地铁OD提取
- 六. 可视化
- 七. 练习
* - 7.1 每一条地铁线路的客流量
- 7.2 统计每小时搭乘地铁的客流量
- 7.3 统计出十个流量最大的地铁站
- 7.4 统计出十个流量最大的OD
五. IC刷卡数据的基本处理
5.1基于IC刷卡数据的地铁OD提取
① 读取数据,添加列名
import pandas as pd
data = pd.read_csv("SPTCC-20150401-sample.csv",header = None)
data
012345601004058442015-04-0112:43:2411号线祁连山路地铁4.0非优惠11004058442015-04-0118:22:0411号线枫桥路地铁3.0非优惠21004058442015-04-0108:21:182号线娄山关路地铁3.0非优惠31004058442015-04-0112:07:312号线娄山关路地铁0.0非优惠41004058442015-04-0118:08:4211号线祁连山路地铁0.0非优惠……………………44285523011082662015-04-0123:48:212号线中山公园地铁4.0非优惠44285623011082662015-04-0123:06:452号线虹桥火车站地铁0.0非优惠44285721041621232015-04-0123:48:072号线中山公园地铁4.0非优惠44285821041621232015-04-0123:18:162号线虹桥火车站地铁0.0非优惠44285931038851412015-04-0123:16:192号线虹桥火车站地铁0.0非优惠
442860 rows × 7 columns
data.columns = ['ID', 'date', 'Time', 'stop', 'mode', 'price', 'type']
data
IDdateTimestopmodepricetype01004058442015-04-0112:43:2411号线祁连山路地铁4.0非优惠11004058442015-04-0118:22:0411号线枫桥路地铁3.0非优惠21004058442015-04-0108:21:182号线娄山关路地铁3.0非优惠31004058442015-04-0112:07:312号线娄山关路地铁0.0非优惠41004058442015-04-0118:08:4211号线祁连山路地铁0.0非优惠……………………44285523011082662015-04-0123:48:212号线中山公园地铁4.0非优惠44285623011082662015-04-0123:06:452号线虹桥火车站地铁0.0非优惠44285721041621232015-04-0123:48:072号线中山公园地铁4.0非优惠44285821041621232015-04-0123:18:162号线虹桥火车站地铁0.0非优惠44285931038851412015-04-0123:16:192号线虹桥火车站地铁0.0非优惠
442860 rows × 7 columns
② 帅选出地铁方式的出行,并将站点信息拆成,线路和站名
data = data[data['mode'] == '地铁']
data
IDdateTimestopmodepricetype01004058442015-04-0112:43:2411号线祁连山路地铁4.0非优惠11004058442015-04-0118:22:0411号线枫桥路地铁3.0非优惠21004058442015-04-0108:21:182号线娄山关路地铁3.0非优惠31004058442015-04-0112:07:312号线娄山关路地铁0.0非优惠41004058442015-04-0118:08:4211号线祁连山路地铁0.0非优惠……………………44285523011082662015-04-0123:48:212号线中山公园地铁4.0非优惠44285623011082662015-04-0123:06:452号线虹桥火车站地铁0.0非优惠44285721041621232015-04-0123:48:072号线中山公园地铁4.0非优惠44285821041621232015-04-0123:18:162号线虹桥火车站地铁0.0非优惠44285931038851412015-04-0123:16:192号线虹桥火车站地铁0.0非优惠
360873 rows × 7 columns
r = data['stop'].iloc[0]
r
'11号线祁连山路'
r.find('线')
3
r[:r.find('线')+1]
'11号线'
r[r.find('线')+1:]
'祁连山路'
data['line'] = data['stop'].apply(lambda r:r[:r.find('线')+1])
data
C:\ProgramData\Anaconda3\envs\tensorflow\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
"""Entry point for launching an IPython kernel.
IDdateTimestopmodepricetypeline01004058442015-04-0112:43:2411号线祁连山路地铁4.0非优惠11号线11004058442015-04-0118:22:0411号线枫桥路地铁3.0非优惠11号线21004058442015-04-0108:21:182号线娄山关路地铁3.0非优惠2号线31004058442015-04-0112:07:312号线娄山关路地铁0.0非优惠2号线41004058442015-04-0118:08:4211号线祁连山路地铁0.0非优惠11号线………………………44285523011082662015-04-0123:48:212号线中山公园地铁4.0非优惠2号线44285623011082662015-04-0123:06:452号线虹桥火车站地铁0.0非优惠2号线44285721041621232015-04-0123:48:072号线中山公园地铁4.0非优惠2号线44285821041621232015-04-0123:18:162号线虹桥火车站地铁0.0非优惠2号线44285931038851412015-04-0123:16:192号线虹桥火车站地铁0.0非优惠2号线
360873 rows × 8 columns
data['stop'] = data['stop'].apply(lambda r:r[r.find('线')+1:])
data
C:\ProgramData\Anaconda3\envs\tensorflow\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
"""Entry point for launching an IPython kernel.
IDdateTimestopmodepricetypeline01004058442015-04-0112:43:24祁连山路地铁4.0非优惠11号线11004058442015-04-0118:22:04枫桥路地铁3.0非优惠11号线21004058442015-04-0108:21:18娄山关路地铁3.0非优惠2号线31004058442015-04-0112:07:31娄山关路地铁0.0非优惠2号线41004058442015-04-0118:08:42祁连山路地铁0.0非优惠11号线………………………44285523011082662015-04-0123:48:21中山公园地铁4.0非优惠2号线44285623011082662015-04-0123:06:45虹桥火车站地铁0.0非优惠2号线44285721041621232015-04-0123:48:07中山公园地铁4.0非优惠2号线44285821041621232015-04-0123:18:16虹桥火车站地铁0.0非优惠2号线44285931038851412015-04-0123:16:19虹桥火车站地铁0.0非优惠2号线
360873 rows × 8 columns
③ 我们想用点对,所以用ID进行排序 然后用 .shift
让数据表错一行,让两表连接,去掉不是一个人的
- 用
.sort_values()
进行排序
data = data.sort_values(by = ['ID', 'date', 'Time'])
- 创建一个从第二列开始的表
data['ID1'] = data["ID"].shift(-1)
data
IDdateTimestopmodepricetypelineID1334427820242015-04-0108:48:25西藏北路地铁0.0非优惠8号线8.202400e+04334426820242015-04-0109:07:29江湾体育场地铁4.0非优惠10号线8.895700e+04381022889572015-04-0115:46:58宜山路地铁0.0非优惠3号线8.895700e+04381021889572015-04-0116:20:58东宝兴路地铁4.0非优惠3号线9.931300e+04376286993132015-04-0108:26:26延吉中路地铁0.0非优惠8号线9.931300e+04…………………………21839140000390672015-04-0107:32:48颛桥地铁1.0优惠5号线4.000040e+0937358540000397432015-04-0118:11:15南京西路地铁0.0非优惠2号线4.000040e+0937358440000397432015-04-0118:28:44交通大学地铁3.0非优惠10号线4.000041e+0917170140000406652015-04-0108:48:34上海体育场地铁0.0非优惠4号线4.000041e+0917170240000406652015-04-0109:16:55南京东路地铁4.0非优惠10号线NaN
360873 rows × 9 columns
data = data.drop('ID1' ,axis = 1)
data
IDdateTimestopmodepricetypeline334427820242015-04-0108:48:25西藏北路地铁0.0非优惠8号线334426820242015-04-0109:07:29江湾体育场地铁4.0非优惠10号线381022889572015-04-0115:46:58宜山路地铁0.0非优惠3号线381021889572015-04-0116:20:58东宝兴路地铁4.0非优惠3号线376286993132015-04-0108:26:26延吉中路地铁0.0非优惠8号线………………………21839140000390672015-04-0107:32:48颛桥地铁1.0优惠5号线37358540000397432015-04-0118:11:15南京西路地铁0.0非优惠2号线37358440000397432015-04-0118:28:44交通大学地铁3.0非优惠10号线17170140000406652015-04-0108:48:34上海体育场地铁0.0非优惠4号线17170240000406652015-04-0109:16:55南京东路地铁4.0非优惠10号线
360873 rows × 8 columns
for col in data.columns:
data[col+'1'] = data[col].shift(-1)
print(col)
ID
date
Time
stop
mode
price
type
line
data
IDdateTimestopmodepricetypelineID1date1Time1stop1mode1price1type1line1334427820242015-04-0108:48:25西藏北路地铁0.0非优惠8号线8.202400e+042015-04-0109:07:29江湾体育场地铁4.0非优惠10号线334426820242015-04-0109:07:29江湾体育场地铁4.0非优惠10号线8.895700e+042015-04-0115:46:58宜山路地铁0.0非优惠3号线381022889572015-04-0115:46:58宜山路地铁0.0非优惠3号线8.895700e+042015-04-0116:20:58东宝兴路地铁4.0非优惠3号线381021889572015-04-0116:20:58东宝兴路地铁4.0非优惠3号线9.931300e+042015-04-0108:26:26延吉中路地铁0.0非优惠8号线376286993132015-04-0108:26:26延吉中路地铁0.0非优惠8号线9.931300e+042015-04-0109:07:27打浦桥地铁4.0非优惠9号线……………………………………………21839140000390672015-04-0107:32:48颛桥地铁1.0优惠5号线4.000040e+092015-04-0118:11:15南京西路地铁0.0非优惠2号线37358540000397432015-04-0118:11:15南京西路地铁0.0非优惠2号线4.000040e+092015-04-0118:28:44交通大学地铁3.0非优惠10号线37358440000397432015-04-0118:28:44交通大学地铁3.0非优惠10号线4.000041e+092015-04-0108:48:34上海体育场地铁0.0非优惠4号线17170140000406652015-04-0108:48:34上海体育场地铁0.0非优惠4号线4.000041e+092015-04-0109:16:55南京东路地铁4.0非优惠10号线17170240000406652015-04-0109:16:55南京东路地铁4.0非优惠10号线NaNNaNNaNNaNNaNNaNNaNNaN
360873 rows × 16 columns
- 让数据选出同一人的行为
data = data[data['ID'] == data['ID1']]
data
IDdateTimestopmodepricetypelineID1date1Time1stop1mode1price1type1line1334427820242015-04-0108:48:25西藏北路地铁0.0非优惠8号线8.202400e+042015-04-0109:07:29江湾体育场地铁4.0非优惠10号线381022889572015-04-0115:46:58宜山路地铁0.0非优惠3号线8.895700e+042015-04-0116:20:58东宝兴路地铁4.0非优惠3号线376286993132015-04-0108:26:26延吉中路地铁0.0非优惠8号线9.931300e+042015-04-0109:07:27打浦桥地铁4.0非优惠9号线376283993132015-04-0109:07:27打浦桥地铁4.0非优惠9号线9.931300e+042015-04-0118:09:51打浦桥地铁0.0非优惠9号线376285993132015-04-0118:09:51打浦桥地铁0.0非优惠9号线9.931300e+042015-04-0118:46:06延吉中路地铁4.0非优惠8号线……………………………………………23488740000381212015-04-0109:05:42人民广场地铁3.0优惠1号线4.000038e+092015-04-0121:32:28人民广场地铁0.0非优惠1号线23488940000381212015-04-0121:32:28人民广场地铁0.0非优惠1号线4.000038e+092015-04-0122:12:52金运路地铁4.0非优惠13号线21839240000390672015-04-0107:22:58剑川路地铁0.0非优惠5号线4.000039e+092015-04-0107:32:48颛桥地铁1.0优惠5号线37358540000397432015-04-0118:11:15南京西路地铁0.0非优惠2号线4.000040e+092015-04-0118:28:44交通大学地铁3.0非优惠10号线17170140000406652015-04-0108:48:34上海体育场地铁0.0非优惠4号线4.000041e+092015-04-0109:16:55南京东路地铁4.0非优惠10号线
263583 rows × 16 columns
③ 选出同一天 而且 前一笔刷卡金额是0(进站),第二笔刷卡有费用(出站)
data = data[(data['price'] == 0) & (data['price1'] != 0)]
data
IDdateTimestopmodepricetypelineTime1stop1mode1price1type1line1334427820242015-04-0108:48:25西藏北路地铁0.0非优惠8号线09:07:29江湾体育场地铁4.0非优惠10号线381022889572015-04-0115:46:58宜山路地铁0.0非优惠3号线16:20:58东宝兴路地铁4.0非优惠3号线376286993132015-04-0108:26:26延吉中路地铁0.0非优惠8号线09:07:27打浦桥地铁4.0非优惠9号线376285993132015-04-0118:09:51打浦桥地铁0.0非优惠9号线18:46:06延吉中路地铁4.0非优惠8号线60621164352015-04-0112:24:49大连路地铁0.0非优惠4号线12:56:16中山公园地铁3.0优惠3号线………………………………………23488840000381212015-04-0108:19:28金运路地铁0.0非优惠13号线09:05:42人民广场地铁3.0优惠1号线23488940000381212015-04-0121:32:28人民广场地铁0.0非优惠1号线22:12:52金运路地铁4.0非优惠13号线21839240000390672015-04-0107:22:58剑川路地铁0.0非优惠5号线07:32:48颛桥地铁1.0优惠5号线37358540000397432015-04-0118:11:15南京西路地铁0.0非优惠2号线18:28:44交通大学地铁3.0非优惠10号线17170140000406652015-04-0108:48:34上海体育场地铁0.0非优惠4号线09:16:55南京东路地铁4.0非优惠10号线
178943 rows × 14 columns
④ 清除多余的列
metrood = data[["ID", 'date', 'Time', 'line', 'stop','Time1', 'line1', 'stop1', 'price1']]
metrood.columns = ["ID", 'date', 'stime', 'sline', 'sstation','etime', 'eline', 'estation', 'price']
metrood
IDdatestimeslinesstationetimeelineestationprice334427820242015-04-0108:48:258号线西藏北路09:07:2910号线江湾体育场4.0381022889572015-04-0115:46:583号线宜山路16:20:583号线东宝兴路4.0376286993132015-04-0108:26:268号线延吉中路09:07:279号线打浦桥4.0376285993132015-04-0118:09:519号线打浦桥18:46:068号线延吉中路4.060621164352015-04-0112:24:494号线大连路12:56:163号线中山公园3.0…………………………23488840000381212015-04-0108:19:2813号线金运路09:05:421号线人民广场3.023488940000381212015-04-0121:32:281号线人民广场22:12:5213号线金运路4.021839240000390672015-04-0107:22:585号线剑川路07:32:485号线颛桥1.037358540000397432015-04-0118:11:152号线南京西路18:28:4410号线交通大学3.017170140000406652015-04-0108:48:344号线上海体育场09:16:5510号线南京东路4.0
178943 rows × 9 columns
metrood.to_csv(r'od.csv', index = None)
⑤ 地铁OD的集计
为了方便可视化,左乘比较小的记录,我们以出发小时为单位的集计
import pandas as pd
metrood = pd.read_csv(r"od.csv")
metrood['hour'] = metrood['stime'].apply(lambda r:r[:2])
metrood
IDdatestimeslinesstationetimeelineestationpricehour0820242015-04-0108:48:258号线西藏北路09:07:2910号线江湾体育场4.0081889572015-04-0115:46:583号线宜山路16:20:583号线东宝兴路4.0152993132015-04-0108:26:268号线延吉中路09:07:279号线打浦桥4.0083993132015-04-0118:09:519号线打浦桥18:46:068号线延吉中路4.01841164352015-04-0112:24:494号线大连路12:56:163号线中山公园3.012……………………………17893840000381212015-04-0108:19:2813号线金运路09:05:421号线人民广场3.00817893940000381212015-04-0121:32:281号线人民广场22:12:5213号线金运路4.02117894040000390672015-04-0107:22:585号线剑川路07:32:485号线颛桥1.00717894140000397432015-04-0118:11:152号线南京西路18:28:4410号线交通大学3.01817894240000406652015-04-0108:48:344号线上海体育场09:16:5510号线南京东路4.008
178943 rows × 10 columns
od = metrood.groupby(['hour', 'sstation','estation'])['ID'].count().rename("count").reset_index()
od
hoursstationestationcount004上海南站翔殷路2104常熟路新闸路1204漕宝路汶水路1305七宝打浦桥1405七宝新村路1……………11793923静安寺中山公园111794023静安寺娄山关路111794123马陆马陆111794223黄陂南路外环路111794323龙华中路耀华路1
117944 rows × 4 columns
⑥ 读取站点信息坐标
stop = pd.read_csv(r"stop.csv")
stop
stationnameslinenamelonlat0富锦路地铁1号线(富锦路-莘庄)121.42001231.3940781友谊西路地铁1号线(富锦路-莘庄)121.42335131.3829582宝安公路地铁1号线(富锦路-莘庄)121.42629031.3716803共富新村地铁1号线(富锦路-莘庄)121.42946231.3568664呼兰路地铁1号线(富锦路-莘庄)121.43310731.341553……………1033三鲁公路轨道交通浦江线(沈杜公路-汇臻路)121.52321131.0582071034闵瑞路轨道交通浦江线(沈杜公路-汇臻路)121.52611231.0503211035浦航路轨道交通浦江线(沈杜公路-汇臻路)121.52639231.0432801036东城一路轨道交通浦江线(沈杜公路-汇臻路)121.52792531.0324971037汇臻路轨道交通浦江线(沈杜公路-汇臻路)121.52033831.027464
1038 rows × 4 columns
- 去重
stop = stop.drop_duplicates( subset = ["stationnames"])
stop = stop[['stationnames', 'lon', 'lat']]
stop
stationnameslonlat0富锦路121.42001231.3940781友谊西路121.42335131.3829582宝安公路121.42629031.3716803共富新村121.42946231.3568664呼兰路121.43310731.341553…………1026汇臻路121.52033831.0274641027东城一路121.52792531.0324971028浦航路121.52639231.0432801029闵瑞路121.52611231.0503211030三鲁公路121.52321131.058207
387 rows × 3 columns
- 把站点坐标分辨给进站信息和出站信息,这是名字要一致
stop.columns = ['sstation', 'slon', 'slat']
od = pd.merge(od,stop)
stop.columns =['estation', 'elon', 'elat']
od = pd.merge(od,stop)
od
hoursstationestationcountslonslatelonelat004上海南站翔殷路2121.42521931.156776121.52766931.307069106上海南站翔殷路1121.42521931.156776121.52766931.307069209上海南站翔殷路2121.42521931.156776121.52766931.307069306常熟路翔殷路1121.44670631.215520121.52766931.307069417常熟路翔殷路1121.44670631.215520121.52766931.307069………………………11403614龙阳路华夏中路1121.55315431.205246121.57727931.17677111403718龙阳路华夏中路1121.55315431.205246121.57727931.17677111403808书院华夏中路1121.84647730.961623121.57727931.17677111403908松江新城华夏中路1121.22635131.032349121.57727931.17677111404012罗山路华夏中路1121.58887731.155643121.57727931.176771
114041 rows × 8 columns
od.to_csv(r'od_fi.csv', index = None)
六. 可视化
sanddance,kepler,mobmap
https://sanddance.js.org/app/
https://kepler.gl/
七. 练习
- 每一条地铁线路的客流量
- 统计每小时搭乘地铁的客流量
- 统计出客流量最大的是个地铁站
- 统计出客流量最大的10个OD
import warnings
warnings.filterwarnings("ignore")
import pandas as pd
icdata = pd.read_csv(r'SPTCC-20150401-sample.csv',header = None)
icdata
012345601004058442015-04-0112:43:2411号线祁连山路地铁4.0非优惠11004058442015-04-0118:22:0411号线枫桥路地铁3.0非优惠21004058442015-04-0108:21:182号线娄山关路地铁3.0非优惠31004058442015-04-0112:07:312号线娄山关路地铁0.0非优惠41004058442015-04-0118:08:4211号线祁连山路地铁0.0非优惠……………………44285523011082662015-04-0123:48:212号线中山公园地铁4.0非优惠44285623011082662015-04-0123:06:452号线虹桥火车站地铁0.0非优惠44285721041621232015-04-0123:48:072号线中山公园地铁4.0非优惠44285821041621232015-04-0123:18:162号线虹桥火车站地铁0.0非优惠44285931038851412015-04-0123:16:192号线虹桥火车站地铁0.0非优惠
442860 rows × 7 columns
7.1 每一条地铁线路的客流量
① 对数据进行初步处理
od = metrood.groupby(['hour', 'sstation','estation'])['ID'].count().rename("count").reset_index()
od
icdata.columns = ['ID', 'date', 'Time', 'stop', 'mode', 'price', 'type']
icdata = icdata[icdata['mode'] == '地铁']
icdata
IDdateTimestopmodepricetype01004058442015-04-0112:43:2411号线祁连山路地铁4.0非优惠11004058442015-04-0118:22:0411号线枫桥路地铁3.0非优惠21004058442015-04-0108:21:182号线娄山关路地铁3.0非优惠31004058442015-04-0112:07:312号线娄山关路地铁0.0非优惠41004058442015-04-0118:08:4211号线祁连山路地铁0.0非优惠……………………44285523011082662015-04-0123:48:212号线中山公园地铁4.0非优惠44285623011082662015-04-0123:06:452号线虹桥火车站地铁0.0非优惠44285721041621232015-04-0123:48:072号线中山公园地铁4.0非优惠44285821041621232015-04-0123:18:162号线虹桥火车站地铁0.0非优惠44285931038851412015-04-0123:16:192号线虹桥火车站地铁0.0非优惠
360873 rows × 7 columns
icdata['line'] = icdata['stop'].apply(lambda r:r[:r.find('线')+1])
icdata['station'] = icdata['stop'].apply(lambda r:r[r.find('线')+1:])
icdata
IDdateTimestopmodepricetypelinestation01004058442015-04-0112:43:2411号线祁连山路地铁4.0非优惠11号线祁连山路11004058442015-04-0118:22:0411号线枫桥路地铁3.0非优惠11号线枫桥路21004058442015-04-0108:21:182号线娄山关路地铁3.0非优惠2号线娄山关路31004058442015-04-0112:07:312号线娄山关路地铁0.0非优惠2号线娄山关路41004058442015-04-0118:08:4211号线祁连山路地铁0.0非优惠11号线祁连山路…………………………44285523011082662015-04-0123:48:212号线中山公园地铁4.0非优惠2号线中山公园44285623011082662015-04-0123:06:452号线虹桥火车站地铁0.0非优惠2号线虹桥火车站44285721041621232015-04-0123:48:072号线中山公园地铁4.0非优惠2号线中山公园44285821041621232015-04-0123:18:162号线虹桥火车站地铁0.0非优惠2号线虹桥火车站44285931038851412015-04-0123:16:192号线虹桥火车站地铁0.0非优惠2号线虹桥火车站
360873 rows × 9 columns
- 解决第一个问题,每一条地铁线路的客流量
od_flow = icdata.groupby(['line'])['line'].count().rename("count").reset_index()
od_flow
linecount010号线25596111号线22259212号线6409313号线6261416号线347051号线5441562号线5902673号线3299384号线2416295号线5758106号线15677117号线31465128号线38366139号线35016
od_flow.to_csv(r'od_flow.csv', index = None)
7.2 统计每小时搭乘地铁的客流量
② 吧小时单独拿出来进行统计
icdata['hour'] = icdata['Time'].apply(lambda r:r[:2])
icdata
IDdateTimestopmodepricetypelinestationhour01004058442015-04-0112:43:2411号线祁连山路地铁4.0非优惠11号线祁连山路1211004058442015-04-0118:22:0411号线枫桥路地铁3.0非优惠11号线枫桥路1821004058442015-04-0108:21:182号线娄山关路地铁3.0非优惠2号线娄山关路0831004058442015-04-0112:07:312号线娄山关路地铁0.0非优惠2号线娄山关路1241004058442015-04-0118:08:4211号线祁连山路地铁0.0非优惠11号线祁连山路18……………………………44285523011082662015-04-0123:48:212号线中山公园地铁4.0非优惠2号线中山公园2344285623011082662015-04-0123:06:452号线虹桥火车站地铁0.0非优惠2号线虹桥火车站2344285721041621232015-04-0123:48:072号线中山公园地铁4.0非优惠2号线中山公园2344285821041621232015-04-0123:18:162号线虹桥火车站地铁0.0非优惠2号线虹桥火车站2344285931038851412015-04-0123:16:192号线虹桥火车站地铁0.0非优惠2号线虹桥火车站23
360873 rows × 10 columns
icdata_flowByHour = icdata.groupby(['hour'])['hour'].count().rename("count").reset_index()
icdata_flowByHour
hourcount0046105919206953630734341408559525092794761013758711118718121275191313355101413067111514629121618928131736720141841739151922236162013583172111850182270421923643
icdata_flowByHour.to_csv(r'icdata_flowByHour.csv', index = None)
7.3 统计出十个流量最大的地铁站
icdata_flowStation = icdata.groupby(['station'])['station'].count().rename("count").reset_index()
icdata_flowStation
stationcount0七宝27031三林9892三林东6533三门路3134上南路485………283龙柏新村957284龙溪路553285龙漕路1109286龙耀路248287龙阳路2951
288 rows × 2 columns
icdata_flowStation.sort_values(by='count' , ascending =False).reset_index(drop = True)
stationcount0人民广场86151上海火车站73832徐家汇63393静安寺62034陆家嘴5744………283惠南东94284远东大道84285复兴岛76286殷高东路65287华夏中路21
288 rows × 2 columns
icdata_flowStation = icdata_flowStation.sort_values(by='count' , ascending =False).reset_index(drop = True)[:10]
icdata_flowStation
stationcount0人民广场86151上海火车站73832徐家汇63393静安寺62034陆家嘴57445南京东路52666中山公园52647莘庄51378陕西南路50839南京西路4165
③ 加入位置坐标
stop = pd.read_csv(r"stop.csv")
stop
stationnameslinenamelonlat0富锦路地铁1号线(富锦路-莘庄)121.42001231.3940781友谊西路地铁1号线(富锦路-莘庄)121.42335131.3829582宝安公路地铁1号线(富锦路-莘庄)121.42629031.3716803共富新村地铁1号线(富锦路-莘庄)121.42946231.3568664呼兰路地铁1号线(富锦路-莘庄)121.43310731.341553……………1033三鲁公路轨道交通浦江线(沈杜公路-汇臻路)121.52321131.0582071034闵瑞路轨道交通浦江线(沈杜公路-汇臻路)121.52611231.0503211035浦航路轨道交通浦江线(沈杜公路-汇臻路)121.52639231.0432801036东城一路轨道交通浦江线(沈杜公路-汇臻路)121.52792531.0324971037汇臻路轨道交通浦江线(沈杜公路-汇臻路)121.52033831.027464
1038 rows × 4 columns
stop = stop.drop_duplicates( subset = ["stationnames"])
stop = stop[['stationnames', 'lon', 'lat']]
stop
stationnameslonlat0富锦路121.42001231.3940781友谊西路121.42335131.3829582宝安公路121.42629031.3716803共富新村121.42946231.3568664呼兰路121.43310731.341553…………1026汇臻路121.52033831.0274641027东城一路121.52792531.0324971028浦航路121.52639231.0432801029闵瑞路121.52611231.0503211030三鲁公路121.52321131.058207
387 rows × 3 columns
stop.columns = ['station', 'lon', 'lat']
stop
stationlonlat0富锦路121.42001231.3940781友谊西路121.42335131.3829582宝安公路121.42629031.3716803共富新村121.42946231.3568664呼兰路121.43310731.341553…………1026汇臻路121.52033831.0274641027东城一路121.52792531.0324971028浦航路121.52639231.0432801029闵瑞路121.52611231.0503211030三鲁公路121.52321131.058207
387 rows × 3 columns
icdata_flowStation = pd.merge(icdata_flowStation,stop,on='station', how ='left')
icdata_flowStation
stationcountlonlat0人民广场8615121.47063531.2349381上海火车站7383121.45134731.2492522徐家汇6339121.43373031.1946663静安寺6203121.44167931.2250844陆家嘴5744121.49795031.2401915南京东路5266121.47924431.2391156中山公园5264121.41373631.2204117莘庄5137121.38111631.1129828陕西南路5083121.45564031.2192259南京西路4165121.45550731.231766
icdata_flowStation.to_csv(r'icdata_flowStation.csv', index = None)
7.4 统计出十个流量最大的OD
④ 找到OD对
icdata = icdata.sort_values(by = ['ID', 'date', 'Time'])
for col in icdata.columns:
icdata[col+'1'] = icdata[col].shift(-1)
icdata = icdata[icdata['ID'] == icdata['ID1']]
icdata = icdata[icdata['date'] == icdata['date1']]
icdata = icdata[(icdata['price'] == 0) & (icdata['price1'] != 0)]
icdata
IDdateTimestopmodepricetypelinestationhourID1date1Time1stop1mode1price1type1line1station1hour1334427820242015-04-0108:48:258号线西藏北路地铁0.0非优惠8号线西藏北路088.202400e+042015-04-0109:07:2910号线江湾体育场地铁4.0非优惠10号线江湾体育场09381022889572015-04-0115:46:583号线宜山路地铁0.0非优惠3号线宜山路158.895700e+042015-04-0116:20:583号线东宝兴路地铁4.0非优惠3号线东宝兴路16376286993132015-04-0108:26:268号线延吉中路地铁0.0非优惠8号线延吉中路089.931300e+042015-04-0109:07:279号线打浦桥地铁4.0非优惠9号线打浦桥09376285993132015-04-0118:09:519号线打浦桥地铁0.0非优惠9号线打浦桥189.931300e+042015-04-0118:46:068号线延吉中路地铁4.0非优惠8号线延吉中路1860621164352015-04-0112:24:494号线大连路地铁0.0非优惠4号线大连路121.164350e+052015-04-0112:56:163号线中山公园地铁3.0优惠3号线中山公园12………………………………………………………23488840000381212015-04-0108:19:2813号线金运路地铁0.0非优惠13号线金运路084.000038e+092015-04-0109:05:421号线人民广场地铁3.0优惠1号线人民广场0923488940000381212015-04-0121:32:281号线人民广场地铁0.0非优惠1号线人民广场214.000038e+092015-04-0122:12:5213号线金运路地铁4.0非优惠13号线金运路2221839240000390672015-04-0107:22:585号线剑川路地铁0.0非优惠5号线剑川路074.000039e+092015-04-0107:32:485号线颛桥地铁1.0优惠5号线颛桥0737358540000397432015-04-0118:11:152号线南京西路地铁0.0非优惠2号线南京西路184.000040e+092015-04-0118:28:4410号线交通大学地铁3.0非优惠10号线交通大学1817170140000406652015-04-0108:48:344号线上海体育场地铁0.0非优惠4号线上海体育场084.000041e+092015-04-0109:16:5510号线南京东路地铁4.0非优惠10号线南京东路09
178943 rows × 20 columns
od = icdata[['ID', 'date', 'Time', 'line', 'station', 'Time1', 'price1', 'line1', 'station1']]
od
IDdateTimelinestationTime1price1line1station1334427820242015-04-0108:48:258号线西藏北路09:07:294.010号线江湾体育场381022889572015-04-0115:46:583号线宜山路16:20:584.03号线东宝兴路376286993132015-04-0108:26:268号线延吉中路09:07:274.09号线打浦桥376285993132015-04-0118:09:519号线打浦桥18:46:064.08号线延吉中路60621164352015-04-0112:24:494号线大连路12:56:163.03号线中山公园…………………………23488840000381212015-04-0108:19:2813号线金运路09:05:423.01号线人民广场23488940000381212015-04-0121:32:281号线人民广场22:12:524.013号线金运路21839240000390672015-04-0107:22:585号线剑川路07:32:481.05号线颛桥37358540000397432015-04-0118:11:152号线南京西路18:28:443.010号线交通大学17170140000406652015-04-0108:48:344号线上海体育场09:16:554.010号线南京东路
178943 rows × 9 columns
od.columns = ["ID", 'date', 'stime', 'sline', 'sstation', 'etime', 'price', 'eline', 'estation']
od
IDdatestimeslinesstationetimepriceelineestation334427820242015-04-0108:48:258号线西藏北路09:07:294.010号线江湾体育场381022889572015-04-0115:46:583号线宜山路16:20:584.03号线东宝兴路376286993132015-04-0108:26:268号线延吉中路09:07:274.09号线打浦桥376285993132015-04-0118:09:519号线打浦桥18:46:064.08号线延吉中路60621164352015-04-0112:24:494号线大连路12:56:163.03号线中山公园…………………………23488840000381212015-04-0108:19:2813号线金运路09:05:423.01号线人民广场23488940000381212015-04-0121:32:281号线人民广场22:12:524.013号线金运路21839240000390672015-04-0107:22:585号线剑川路07:32:481.05号线颛桥37358540000397432015-04-0118:11:152号线南京西路18:28:443.010号线交通大学17170140000406652015-04-0108:48:344号线上海体育场09:16:554.010号线南京东路
178943 rows × 9 columns
⑤ 对相同OD进行统计
od1 = od.groupby(['sstation','estation'])['ID'].count().rename("count").reset_index()
od1
sstationestationcount0七宝七宝31七宝三林62七宝上南路13七宝上大路14七宝上海体育场5…………41541龙阳路黄陂南路741542龙阳路龙华141543龙阳路龙华中路441544龙阳路龙柏新村241545龙阳路龙阳路5
41546 rows × 3 columns
⑥ 对OD数量进行排序
od1 = od1.sort_values(by='count' , ascending =False).reset_index(drop = True)[:10]
od1
sstationestationcount0九亭漕河泾开发区1621通河新村上海火车站1622莘庄徐家汇1503徐家汇莘庄1374陆家嘴南京东路1325漕河泾开发区九亭1296彭浦新村上海火车站1247莘庄人民广场1218人民广场莘庄1179陕西南路莘庄116
- 没有按小时 按得是一天 所以没有对hour进行集计
- 排序 取前十
⑦ 将车站坐标引进
stop
estationelonelat0富锦路121.42001231.3940781友谊西路121.42335131.3829582宝安公路121.42629031.3716803共富新村121.42946231.3568664呼兰路121.43310731.341553…………1026汇臻路121.52033831.0274641027东城一路121.52792531.0324971028浦航路121.52639231.0432801029闵瑞路121.52611231.0503211030三鲁公路121.52321131.058207
387 rows × 3 columns
stop.columns = ['sstation', 'slon', 'slat']
od1 = pd.merge(od1,stop)
stop.columns =['estation', 'elon', 'elat']
od1 = pd.merge(od1,stop)
od1
sstationestationcountslonslatelonelat0九亭漕河泾开发区162121.31500531.139231121.39298131.1723091通河新村上海火车站162121.43692831.332913121.45134731.2492522彭浦新村上海火车站124121.44409231.308468121.45134731.2492523莘庄徐家汇150121.38111631.112982121.43373031.1946664莘庄人民广场121121.38111631.112982121.47063531.2349385徐家汇莘庄137121.43373031.194666121.38111631.1129826人民广场莘庄117121.47063531.234938121.38111631.1129827陕西南路莘庄116121.45564031.219225121.38111631.1129828陆家嘴南京东路132121.49795031.240191121.47924431.2391159漕河泾开发区九亭129121.39298131.172309121.31500531.139231
od1.to_csv(r'ODsort10.csv', index = None)
Original: https://blog.csdn.net/wistonty11/article/details/121308188
Author: 羊老羊
Title: 【小旭学长-使用python进行城市数据分析】笔记篇(下)【完结】
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/699388/
转载文章受原作者版权保护。转载请注明原作者出处!