在上一篇文章中,我们分析了用户的骑行时间,骑行时长,骑行速度,并得出了相关的结论。在数据分析中,最重要的事情之一就是进行相关性分析,我们都听说过啤酒与尿布的故事,这就是一个相关性分析的很好的例子。通过对事物的相关性分析,我们可以得出更加精准的预测,可以更加了解用户的行为,可以分析出用户的潜在需求并以此来优化服务。在本文中,我们将对骑行与气温,骑行速度与时间这两个条件进行相关性分析。
1.骑行与气温之间的相关性分析
在第一篇文章中,我们得出了这样一个结论:第一季度用户对Citi Bike的使用量最低,第三季度使用量最高。可以推测,骑行有明显的季节因素。下面我们导入纽约市2015年的气象数据,来看下天气因素与Citi Bike间是否存在关联,并试着用天气的变化来预测Citi Bike的使用量。
weather=pd.DataFrame(pd.read_csv('823248.csv'))#读取2015年纽约市的气象数据
group_weather_day=weather['TMAX'] #提取每日最高气温数据
cb_day=cb1.resample('D',how=len)#对2015年骑行时间按天汇总计算
group_cb_day=cb1_day['bikeid']#提取每日骑行数量
#对每日最高气温和骑行量数据进行标准化处理
from sklearn import preprocessing
scaler = preprocessing.StandardScaler().fit(group_weather_day) X_Standard=scaler.transform(group_weather_day)
scaler = preprocessing.StandardScaler().fit(group_cb_day) Y_Standard=scaler.transform(group_cb_day)
#绘制最高气温和骑行数据散点图
plt.rc('font', family='STXihei', size=15) plt.scatter(X_Standard,Y_Standard,60,color='#052B6C',marker='+',a lpha=0.8,linewidth=1.5)
plt.xlabel(' 日 最 高 气 温 ') plt.ylabel('Citi Bike 租 赁 次 数 ') plt.title('最高气温与Citi Bike之间的关系')
plt.grid(color='#95a5a6',linestyle='--', linewidth=1,axis='both', alpha=0.4)
plt.show()
#设置每日最高气温为自变量X
X = np.array(weather[['TMAX']]) #设置每日骑行数量为因变量Y
Y = np.array(cb1_day[['bikeid']])
#导入线性回归库
from sklearn import linear_model
clf = linear_model.LinearRegression()
clf.fit (X,Y)
clf.score(X,Y)#计算相关度R方
print(clf.coef_)#斜率array([[ 536.64465091]])
print(clf.intercept_)#截距array([-7282.61437278])
#得出回归方程:租赁数量=536.64*最高气温-7282.61
#分布对19,39和97华氏度的Citi Bike租赁量进行预测
clf.predict(19)
#租赁量:array([[ 2913.63399443]])
clf.predict(39)
#租赁量:array([[ 13646.52701255]])
clf.predict(97)
#租赁量:array([[ 44771.9167651]])
从图中可以发现Citi Bike的使用量与日最高气温间呈正相关,随着日最高气温的增长Citi Bike的使用量也在逐渐增长。
2.骑行速度与年龄的相关性分析
从第二篇文章和第三篇文章中我们已经知道了每次骑行用户的年龄和骑行速度信息,那么这两者之间是否存在关联呢?换句话说是否随着年龄的增长骑行速度会逐渐减慢呢?我们通过简单的一元回归来分析下两者间的联系。这里我们只使用2015年5月的数据进行分析。
#计算并增加年龄字段
cb5['age']=2015-cb5['birth year'] #提取年龄和骑行速度字段age_speed=cb5[['speed','age']]
#去除骑行速度为0的数据age_speed=age_speed.dropna() #年龄设置为自变量X
X = np.array(age_speed[['age']]) #速度设置为因变量Y
Y = np.array(age_speed[['speed']])
#导入线性回归库
from sklearn import linear_model #将数据导入模型
clf = linear_model.LinearRegression()
clf.fit (X,Y)
print(clf.coef_)
#斜率array([[-0.02899706]])
print(clf.intercept_)
#截距array([ 10.05513438])
print(clf.score(X,Y))
#R方:0.011272777068773165
clf.predict(20)
array([[ 9.47519327]])
#array([[ 9.47519327]]) 20岁的骑行速度预测为9.4公里
clf.predict(50)
array([[ 8.60528161]])
#array([[ 8.60528161]]) 50岁的骑行速度预测为8.6公里
从R方来看年龄与骑行速度间并没有太大的关联,骑行速度并不会随着年龄的增长而增长。这里主要的原因我想有两个。第一,Citi Bike的使用场所主要在城市里,并且多为短途。第二,使用者除了城市居民上下班通勤外,还有一部分的游客,他们的目的是欣赏沿途美丽的风景因此骑行速度也会较慢。
总结
我们通过Python对纽约自行车共享系统Citi Bike 骑行数据的简单分析,得到以下用户骑行的信息。
- 使用Citi Bike的用户以纽约市的中年男性为主
- 在每天的早晨的8点和傍晚6点是Citi Bike的使用高峰
- 由于Citi Bike对超时单独收取费用,用户的骑行时间多数在20分钟以内
- 用户对Citi Bike的使用受季节和气温的影响,相关度达到0.6
- 夏秋两季租赁量最大,冬季最低
- 用户的年龄与骑行速度关联并不紧密,平均骑行速度为6.3公里/小时