【小旭学长-使用python进行城市数据分析】笔记篇(下)【完结】

【小旭学长-使用python进行城市数据分析】笔记篇(下)【完结】,第1张

【小旭学长-使用python进行城市数据分析】笔记篇(下)【完结】

2021.11.13
【小旭学长-使用python进行城市数据分析】笔记篇(上):https://blog.csdn.net/wistonty11/article/details/121089882
【小旭学长-使用python进行城市数据分析】笔记篇(中):https://blog.csdn.net/wistonty11/article/details/121210664

文章目录
  • 五. 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:ProgramDataAnaconda3envstensorflowlibsite-packagesipykernel_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:ProgramDataAnaconda3envstensorflowlibsite-packagesipykernel_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

# 对整行进行 *** 作,然后列名就是col
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(进站),第二笔刷卡有费用(出站)
# 去掉 ID1
#data = data.drop('ID1', axis=1)

# 选出同一天的
#data = data[data['date'] == data['date1']]
#data = data.drop('date1', axis=1)

#第一笔没扣费,第二笔扣费的
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

  • 把站点坐标分辨给进站信息和出站信息,这是名字要一致
#sstation对齐
stop.columns = ['sstation', 'slon', 'slat']
od = pd.merge(od,stop)
#eesstation对齐
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

#运行这个代码可以让Python不显示warnings
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

# 将stop内容进行分解
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

# 默认升序,用ascending =False 倒排
# drop = True重新算行号
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

# 为了merge重命名
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'])

# 对整行进行 *** 作,然后列名就是col+'1'
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)
#eesstation对齐
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)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5480526.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存