单车骑行网站制做内容(介绍案例来着《从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工具,也画不出路线。

  结束

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线