共享单车项目计划书_共享单车项目相关性分析

一、项目介绍

1.1 项目背景

共享单车是指企业在校园、地铁站点、公交站点、居民区、商业区、公共服务区等提供自行车单车共享服务,人们可以从各站点租赁自行车,到达目的地进行归还。

1.2 项目需求

本项目需要结合历史天气数据的使用信息,来预测共享单车租赁需求。本文将通过相关分析探究影响租赁额的因素,暂不对租赁需求进行预测。

二、数据理解

2.1 数据来源

Bike Sharing Demand | Kaggle​www.kaggle.com

2.2 导入数据

# 忽略警告
import warnings 
warnings.filterwarnings('ignore')

# 导入处理数据包
import numpy as np 
import pandas as pd

# 导入数据
# 训练数据集
train = pd.read_csv("D:/BaiduNetdiskDownload/train_bike.csv")  # 用正斜杠
# 测试数据集
test = pd.read_csv("D:/BaiduNetdiskDownload/test_bike.csv")

2.3 数据字段含义

共12个字段,其含义如下:

4df1e74205502beb207e8561414d458a.png

2.4 查看数据信息

# 查看训练数据集、测试数据集共有几行几列
print('训练数据集大小:',train.shape,'测试数据集大小',test.shape)

e6525d6de4590344eb4e79871495a923.png
# 查看数据集的前几行
train.head()

2435e792d87e542eaaca63692580ac85.png
# 查看训练数据的描述统计信息
train.describe()

fb9b76cd78928fb6bfcde53f21172228.png
train.info()

610c48143fdc2ba19a881de151183f51.png
# 查看测试数据
test.info()

9e9e00e4e36c4da9bc40eb38c212164d.png

训练数据集大小为(10886,12),测试数据集大小为(6493,8),利用info方法查看各列数据大小、类型,发现训练数据集、测试数据集均无缺失值。

三、数据清洗

对时间进行处理,增加日期、月份、时段、星期列。

# 先备份测试数据集
bikeDf = train

# 将时间增加日期,月份,时段,星期几
from datetime import datetime

bikeDf['date'] = bikeDf['datetime'].apply( lambda c : c.split()[0] )
bikeDf['month'] = bikeDf['datetime'].apply( lambda c : c.split()[0].split('-')[1] ).astype('int')
bikeDf['hour'] = bikeDf['datetime'].apply( lambda c : c.split()[1].split(':')[0] ).astype('int')
# datetime.strptime() 将字符串格式转化为日期格式
# datetime.datetime.isoweekday() 返回的1-7代表周一至周日;date.weekday()返回的0-6代表周一至周日
bikeDf['weekday'] = bikeDf['date'].apply( lambda c : datetime.strptime(c,'%Y-%m-%d').isoweekday() )
bikeDf.head()

1cd8050cc6aa021784b6c3224f236ba8.png

四、相关性分析

由于总租赁数量=注册用户租赁数量+临时用户租赁数量,因此下文从整体研究租赁额的3个值与其他特征值的关系。

sns.pairplot(bikeDf,x_vars = ['holiday','workingday','weather','season','month','weekday','hour','windspeed','humidity','temp','atemp'],
            y_vars = ['casual','registered','count'],plot_kws = {'alpha':0.1})

05c521d3c8ec01e65da9bf1b5440ba82.png

从上图可以看出:

(1)注册用户用车占多数,且注册用户在工作日出行比在假日出行多,临时用户在假日出行比工作日出行多。

(2)临时用户和注册用户随天气等级增加而减少用车。

(3)临时用户和注册用户在春天用车数量较少。

(4)临时用户租赁数量随时段的变化呈正态分布,注册用户租赁数量随时间变化呈两个高峰。

(5)随温度升高,租赁额呈上升的趋势

(6)湿度对临时用户影响较大,对注册用户影响不大。

由于特征值很多,这里只研究对租赁额影响较大的3个因素,以下将通过相关系数热力图来确定。

4.1 相关系数热力图

# 求出相关系数
correlation = bikeDf.corr()
correlation

a43b1feec5792ef23c2c54d55911e08e.png

对相关系数进行可视化,便于分析。

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

# figsize设置图形的大小,figure(a,b),a为图形的宽,a为图形的高
fig = plt.figure(figsize = (12,12))
ax1 = fig.add_subplot(1,1,1)
sns.set(style = 'dark')

"""
seaborns.heatmap()各参数介绍
(1) vmax,vmin图例中最大值和最小值的显示值,没有该参数时默认不显示
(2) annot 是annotate的缩写,annot默认为False,当annot为True时,在heatmap中每个方格写入数据
(3)cmap:matplotlib 的colormap名称或颜色对象,若没有提供,默认为cubehelix map(数据集为连续数据集时)或RdBu_r(数据集为离散数据集时)
  注意cmap中的YlGnBu是L的小写,而非是数据1或字母I,出错解决方式:复制错误提示中的正确值至代码中,就发现解决了
(4)linewidths热力图矩阵之间的间隔大小
"""
sns.heatmap(correlation,ax=ax1,vmax=1,square=False,annot=True,cmap='YlGnBu',linewidths=.5)  

plt.show()

3bda360280f287f588015156c1ad096a.png

根据上图,可以看到租赁额(count)与hour、temp、humidity相关度较高,因此将从这3个方面研究对租赁额的影响。

4.2 不同时段对租赁额的影响

workingday_df = bikeDf[bikeDf['workingday']==1]
# agg方法将一个函数使用在一个数列上,然后返回一个标量的值。即agg每次传入的是一列数据,对其聚合后返回标量。这里是返回平均值。
workingday_df = workingday_df.groupby(['hour'],as_index=True).agg({'casual':'mean','registered':'mean','count':'mean'})

nworkingday_df = bikeDf[bikeDf['workingday']==0]
nworkingday_df = nworkingday_df.groupby(['hour'],as_index=True).agg({'casual':'mean','registered':'mean','count':'mean'})

fig,axes = plt.subplots(1 ,2 ,sharey = True)
sns.set_style('whitegrid')

workingday_df.plot(figsize=(15,5),title = 'The average number of rentals initiated per hour in the working day',ax = axes[0])
nworkingday_df.plot(figsize=(15,5),title = 'The average number of rentals initiated per hour in the nworkingdays',ax = axes[1])

0fa762d827ab9a8300268db630cefd7b.png

结论:

(1)在工作日注册用户租赁额呈两个高峰,集中在上下班时间,临时用户用车在17点达到最高峰

(2)在非工作日注册用户和临时用户基本呈正态分布。

4.3 不同温度对租赁额的影响

temp_df = bikeDf.groupby(['temp'],as_index = True).agg({'casual':'mean','registered':'mean','count':'mean'})
temp_df.plot(figsize = (15,5),title = 'The average of numbers of rentals initiated per hour changes with the temperature')

653bc3e797d1f59107c44aeff9126568.png

租赁额随温度升高呈上升的趋势,当温度为36度时,租赁额开始下降,在38度时温度达到最低值。

4.4 不同湿度对租赁额的影响

humidity_df = bikeDf.groupby(['humidity'],as_index = True ).agg({'casual':'mean','registered':'mean','count':'mean'})
humidity_df.plot(figsize = (15,5),title = 'The average of number of rentals initiated  with the humidity')

0c03037e5d60e7891457a46111b4ddc1.png

当湿度在20度左右,租赁额达到最大值,此后租赁额随湿度增加而不断下降。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值