单车骑行网站制做内容(介绍案例来着《从Excel到Python——数据分析进阶指南》)
优采云 发布时间: 2022-03-24 03:08单车骑行网站制做内容(介绍案例来着《从Excel到Python——数据分析进阶指南》)
简介
案例来自《从Excel到Python——数据分析进阶指南》,作者:王艳萍
根据这本书,990万个骑行案例,用于实际操作。代码及注释如下。
案例一,数据源
案例数据来自 Citi Bike。本案例数据选自2015年全年数据,下载后解压到同一文件夹中。
二、分析数据
导入需要的包,以后可能会添加。
import numpy as np
import pandas as pd
import time, datetime
import matplotlib.pyplot as plt
首次导入一月数据
cb1 = pd.DataFrame(pd.read_csv('201501-citibike-tripdata.csv'))
导入其他月份的数据并汇总。
a = ['02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
for i in a:
cb2 = pd.DataFrame(pd.read_csv('2015{}-citibike-tripdata.csv'.format(i)))
cb1 = cb1.append(cb2, ignore_index=True)
print(cb2.shape, cb1.shape)
注意:由于文章中没有详细的步骤,我按照自己的方法导入数据,对append部分有疑问,因为我之前的代码是cb= cb1. append (cb2,ignore_index=True),发现cb的值有问题,一直没找到原因。我以为每次遍历都会自动添加append,但最后一个数据没有。后来百度了一阵子,发现应该改成cb1 = cb1.append(cb2, ignore_index=True),这样才会添加到原来的数据中。
计算唯一租赁点数
唯一的自行车 ID 计数
骑行次数
每辆自行车的租赁频率
每辆自行车的每日租赁频率
每次租赁的平均时长(分钟)
按月汇总骑行数据并汇总折线图
按照书中的代码,但是显示的折线图和书中的折线图不一致。只得再想想。稍后再运行时报错,说没有“starttime”字段,不想再做前面的步骤,所以需要重新设置索引。
reset后查看数据表的header字段,发现还是没有“starttime”字段,于是想到了之前append的问题,应该重新赋值。
果然,再次赋值后,出现“starttime”字段。
图形的X轴没有出现,一定是绘图功能的问题。于是看了一下官网,发现x和y数据需要放在一起,而不是像书里那样分开放置,而且书里的代码漏掉了x轴数据。
根据这个方面,修改了代码,显示的图形终于和书中的图形一样了。
按季度的乘车次数条形图
使用 Citi Bike 的性别比例饼图
花旗自行车年龄百分比条形图
用户成员类别和聚合饼图
用户的 24 小时租用时间
用户骑行时间分布
用户骑行速度6.3km/h
温度与骑行次数的关系
首先,我需要下载2015年的天气数据,于是上网一搜,发现中国气象局和天气网都达不到要求。然后无意中看到贴吧里有回复说NOAA,我直接搜了,虽然是全英文的,但是仔细看还是可以找到对应的资料下载的。 NOAA 数据下载搜索页面。
下载的数据中会有很多站点的天气数据。选择一个站点的数据作为参考。数据必须收录 365 天的天气数据。
weather = pd.DataFrame(pd.read_csv('NewYork2015.csv'))
group_weather_day = np.array(weather['TMAX']).reshape(-1, 1)
cb1_day = cb1.resample('D').apply(len)
group_cb1_day = np.array(cb1_day['bikeid']).reshape(-1, 1)
注意:根据书中的代码group_weather_day =weather['TMAX'],后面运行时出错,因为最新的scaler函数的规则是不接受一维数组,所以需要用 numpy 转换成二维数组。
from sklearn import preprocessing
scaler = preprocessing.StandardScaler().fit(group_weather_day)
X_Standard = scaler.transform(group_weather_day)
scaler = preprocessing.StandardScaler().fit(group_cb1_day)
Y_Standard = scaler.transform(group_cb1_day)
plt.rc('font', family='STXihei', size=15)
plt.scatter(X_Standard, Y_Standard, 60, color='#052B6C', marker='+', alpha=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()
可能是因为所选区域的天气数据与书籍不一致,导致回归线中的数值与书籍不同。
骑行速度和年龄有关系吗?
哪些路线最受欢迎?
start_station = pd.pivot_table(cb5, index=["start station name", "start station latitude", "start station longitude"], values=['bikeid'],
aggfunc=[len], fill_value=0, margins=True).head(10)
end_station=pd.pivot_table(cb5, index=["start station name", "start station latitude", "start station longitude", "end station latitude",
"end station longitude", "end station name"], values=['bikeid'], aggfunc=[len], fill_value=0,
margins=True).head(10)
书中有图表,但我暂时不能用plotly工具,也画不出路线。
结束