993万次骑行:纽约自行车共享系统分析(与19年4月对比)

本文是从蓝鲸网站分析博客转载而来,有些代码在jupyter notebook中会报错,进行了部分修正,并把原文中15年的数据和19年4月最新的数据进行了对比,加入了八哥自己的一点理解,算是对python数据分析的一次练习。今天练的时候发现,很多语法并不是辣么清晰,这玩意忘得快,无他只能多练。

import numpy as np
import pandas as pd
import time,datetime
import matplotlib.pyplot as plt
cb1 = pd.DataFrame(pd.read_csv(~q~201501-citibike-tripdata.csv~q~))
cb2 = pd.DataFrame(pd.read_csv(~q~201502-citibike-tripdata.csv~q~))
cb3 = pd.DataFrame(pd.read_csv(~q~201503-citibike-tripdata.csv~q~))
cb4 = pd.DataFrame(pd.read_csv(~q~201504-citibike-tripdata.csv~q~))
cb5 = pd.DataFrame(pd.read_csv(~q~201505-citibike-tripdata.csv~q~))
cb6 = pd.DataFrame(pd.read_csv(~q~201506-citibike-tripdata.csv~q~))
cb7 = pd.DataFrame(pd.read_csv(~q~201507-citibike-tripdata.csv~q~))
cb8 = pd.DataFrame(pd.read_csv(~q~201508-citibike-tripdata.csv~q~))
cb9 = pd.DataFrame(pd.read_csv(~q~201509-citibike-tripdata.csv~q~))
cb10 = pd.DataFrame(pd.read_csv(~q~201510-citibike-tripdata.csv~q~))
cb11 = pd.DataFrame(pd.read_csv(~q~201511-citibike-tripdata.csv~q~))
cb12 = pd.DataFrame(pd.read_csv(~q~201512-citibike-tripdata.csv~q~))

cb19 = pd.DataFrame(pd.read_csv(~q~201904-citibike-tripdata.csv~q~))
cb4.shape
(652390, 15)
cb19.shape  # 19年4月比15年4月的数据多了近两倍
(1766094, 15)
# Citi Bike的数据是按月存储的,因此我们需要逐月读取并将各个月份的数据进行拼接。

cb = cb1.append(cb2,ignore_index=False)
cb = cb.append(cb3,ignore_index=False)
cb = cb.append(cb4,ignore_index=False)
cb = cb.append(cb5,ignore_index=False)
cb = cb.append(cb6,ignore_index=False)
cb = cb.append(cb7,ignore_index=False)
cb = cb.append(cb8,ignore_index=False)
cb = cb.append(cb9,ignore_index=False)
cb = cb.append(cb10,ignore_index=False)
cb = cb.append(cb11,ignore_index=False)
cb = cb.append(cb12,ignore_index=False)

# DataFrame.append(otherData, ignore_index=False, verify_integrity=False)
# ignore_index 参数默认值为False,如果为True,会对新生成的dataframe使用新的索引(自动产生),忽略原来数据的索引。
# verify_integrity参数默认值为False,如果为True,当ignore_index为False时,会检查添加的数据索引是否冲突,如果冲突,则会添加失败。
# 2015年Citi Bike数据共包含993万行,15列数据。其中每一行数据都代表一次“Citi Bank”的租借和骑行记录。

cb.shape  # cb是2015年全年的数据
(9937969, 15)
cb.head()

cb19.head()  # 19年4月的时间监测更精确了,租客的年龄也呈下降趋势            

# 2015年唯一租赁点数量计数 车站
len(cb[~q~start station name~q~].unique())
497
# 2019年4月唯一租赁点数量计数,扩建的速度并不快,美国人基建的能力确实不及咱中国人,
# 难怪美国人要采取绕过5G建设追赶华为,而直奔6G建设。
len(cb19[~q~start station name~q~].unique())
784
# 2015年唯一自行车ID计数 自行车数量
len(cb[~q~bikeid~q~].unique())
8477
# 2019年4月唯一自行车ID计数,这个速度也不快
len(cb19[~q~bikeid~q~].unique())
14457
# 2015年骑行次数计数 租赁次数
cb[~q~starttime~q~].count()
9937969
cb[~q~starttime~q~].count()/12
828164.0833333334
# 2019年4月骑行次数计数
cb19[~q~starttime~q~].count()  # 超过15年月均骑行次数的2倍
1766094
# 2015年每辆自行车租借频率
cb[~q~bikeid~q~].count()/len(cb[~q~bikeid~q~].unique())
1172.3450513153239
# 2019年4月每辆自行车租借频率
cb19[~q~bikeid~q~].count()/len(cb19[~q~bikeid~q~].unique())  # 这个因为只有一个月租借数据,所以不大,122*12=1464,平均来看也超过15年的租借频率
122.16185930691015
# 2015年每辆自行车每日租借频率
cb[~q~bikeid~q~].count()/len(cb[~q~bikeid~q~].unique())/365
3.2119042501789696
# 2019年4月每辆自行车每日租借频率
cb19[~q~bikeid~q~].count()/len(cb19[~q~bikeid~q~].unique())/30  # 似乎上升没有多少
4.072061976897005
# 每次租借平均时长(分钟)
cb[~q~tripduration~q~].sum()/cb[~q~bikeid~q~].count()/60
16.134794237132358
cb19[~q~tripduration~q~].sum()/cb19[~q~bikeid~q~].count()/60  # 基本持平
17.65569167515055
# 对starttime设置日期格式
cb[~q~starttime~q~] = pd.to_datetime(cb[~q~starttime~q~])
# 将starttime设置为数据表索引
cb = cb.set_index(~q~starttime~q~)
# 按月对骑行数据进行计数
cb_month = cb.resample(~q~M~q~,how=len)
# 提取汇总后的bikeid字段
group_cb_month = cb_month[~q~bikeid~q~]
# 汇总按月汇总的骑行次数折线图
plt.rc(~q~font~q~,family=~q~STXihei~q~,size=15)  # plt.rc对全图字体进行统一修改,华文细黑
plt.plot(group_cb_month,color=~q~#39A2E1~q~,linewidth=3,markeredgewidth=3,markeredgecolor=~q~#39A2E1~q~,alpha=0.8)
plt.xlabel(~q~月份~q~)
plt.ylabel(~q~租赁骑行次数~q~)
plt.title(~q~2015年Citi Bike每月骑行次数~q~)
plt.grid( color=~q~#95a5a6~q~,linestyle=~q~--~q~, linewidth=1 ,axis=~q~y~q~,alpha=0.4)
plt.xticks(rotation=45)
plt.show()


2015年的Citi Bike的使用量整体趋势由低到高,2月Citi Bike的使用量最低,然后使用量逐月增长,直到9月出现使用量最高值。11月使用量开始下降。这可能是由于季节和气温因素导致的。我们下面按季度对骑行数据进行汇总并进行对比。

# 对starttime设置日期格式
cb19[~q~starttime~q~] = pd.to_datetime(cb19[ cb cb19 pd 计数 进行

分享新闻到
微信朋友圈
扫描后点
右上角分享

0 Comments

Leave a Comment

Ad

Related Posts: