深度挖掘——共享单车需求分析

1. 共享单车数据分析

从某处下载到某市的共享单车部分数据,见链接:https://github.com/Suddennebbus/Python/blob/master/sharebike.csv。现在我们就来挖掘一下什么因素是影响共享单车的租车需求,再进一步预测未来共享单车的租车量。

1.1 共享单车数据初步认识

import pandas as pd
sharebikes_data = pd.read_csv(r'H:\DataAnalysis\sharebike\data.csv')
pd.set_option('display.max_columns',none)
print(sharebikes_data.head())
#print(sharebikes_data.columns)
print(sharebikes_data.info)

我们可以看到共享单车的数据总共有10886行数据,其中特征总共有12项,包含租车时间、季节、是否节假日、是否工作日、天气、温度、体感温度、湿度、风速、非注册租户、注册租户。让人开心的是这些数据都是没有缺失值的。这样就少了一部分工作。

        datetime  season  holiday  workingday  weather  temp   atemp  humidity  windspeed  casual  registered  count
0  2011/1/1 0:00       1        0           0        1  9.84  14.395       81        0.0       3          13     16  
1  2011/1/1 1:00       1        0           0        1  9.02  13.635       80        0.0       8          32     40 
2  2011/1/1 2:00       1        0           0        1  9.02  13.635       80        0.0       5          27     32  
3  2011/1/1 3:00       1        0           0        1  9.84  14.395       75        0.0       3          10     13  
4  2011/1/1 4:00       1        0           0        1  9.84  14.395       75        0.0       0           1      1  

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10886 entries, 0 to 10885
Data columns (total 12 columns):
datetime      10886 non-null object
season        10886 non-null int64
holiday       10886 non-null int64
workingday    10886 non-null int64
weather       10886 non-null int64
temp          10886 non-null float64
atemp         10886 non-null float64
humidity      10886 non-null int64
windspeed     10886 non-null float64
casual        10886 non-null int64
registered    10886 non-null int64
count         10886 non-null int64
dtypes: float64(3), int64(8), object(1)
memory usage: 1020.7+ KB

这里datetime是字符串列,可以转化生成四列date_day, date_month, date_weekday, date_hour。

import time
date_day = []
date_month = []
date_weekday = []
date_hour = []

for datetime_line in sharebikes_data.datetime:
	tmptime = time.strptime(datetime_line, '%Y/%m/%d %H:%M')
	date_day.append(tmptime.tm_yday)
	date_month.append(tmptime.tm_mon)
	date_weekday.append(tmptime.tm_wday)
	date_hour.append(tmptime.tm_hour)

sharebikes_data['day'] = date_day
sharebikes_data['month'] = date_month
sharebikes_data['weekday'] = date_weekday
sharebikes_data['hour'] = date_hour
sharebikes_data.drop(['datetime'], axis=1)	

1.2 共享单车数据分析

初步分析季节、是否节假日、是否工作日对租车需求的影响。

import matplotlib.pyplot as plt
count_season = []
for season_no in range(0,4):
	tmpcount = sharebikes_data[sharebikes_data.season==season_no+1]['count']
	count_season.append(tmpcount.sum()/tmpcount.shape[0])

count_holiday = []
for holiday_ornot in range(0,2):
	tmpcount = sharebikes_data[sharebikes_data.holiday==holiday_ornot]['count']
	count_holiday.append(tmpcount.sum()/tmpcount.shape[0])

count_workingday = []
for workingday_ornot in range(0,2):
	tmpcount = sharebikes_data[sharebikes_data.workingday==workingday_ornot]['count']
	count_workingday.append(tmpcount.sum()/tmpcount.shape[0])

seasons = ('Spring', 'Summer', 'Autumn', 'Winter')
holidayornot = ('NO', 'YES')
workingdayornot = ('NO', 'YES')

fig, axs = plt.subplots(1,3)
axs[0].bar(seasons, count_season)
axs[0].set_ylabel('mean count per hour')
axs[0].set_title('mean count per hour of different season')

axs[1].bar(holidayornot, count_holiday)
axs[1].set_ylabel('mean count per hour')
axs[1].set_title('mean count per hour of holiday or not')

axs[2].bar(workingdayornot, count_workingday)
axs[2].set_ylabel('mean count per hour')
axs[2].set_title('mean count per hour of workingday or not')
plt.show()

在这里插入图片描述以上数据图显示
1.非节假日的租车需求大于节假日的租车需求,工作日的租车需求大于周末的租车需求,两者综合起来看租车人群中有一定比例的上班族,这部分用户在非节假日和工作日的租车需求会释放出来。
2.不同季节的租车需求大小排序 三季度>二季度>四季度>一季度,一季度租车需求最低,而且是远低于二季度、三季度和四季度,二季度、三季度和四季度三者差别略小。进一步分析各个季度的温度差异如下图,可以看到各个季度的温度变化和各季度的租车需求呈现高度相关性,可以初步判断温度是影响租车需求的重要因素
在这里插入图片描述

另外第一季度的需求大幅少于其他季度还有可能是由于春节,全民放假回家过年,导致上班族和外来务工等需求消失,租车需求最低。

进一步分析温度对租车的影响,由于温度是连续变量,需要将其离散化。

import math
tempmax = sharebikes_data.temp.max()
tempmin = sharebikes_data.temp.min()
tempgap = math.ceil(tempmax - tempmin)

count_temp = []

for loopi in range(int(tempmin), tempgap+int(tempmin)):
	tmptemp = sharebikes_data[(sharebikes_data.temp<=loopi+1) & (sharebikes_data.temp>loopi)]['count']
	count_temp.append(tmptemp.sum()/tmptemp.shape[0])

fig, ax = plt.subplot(1,1)
ax[0].scatter(range(int(tempmin), tempgap+int(tempmin)), count_temp)
ax[0].set_xlabel('temperature')
ax[0].set_ylabel('count per hour')
ax[0].set_title('count per hour of different temperature')

在这里插入图片描述
从上图可以观察到温度与租车需求的强相关性,在温度小于32℃时,随着温度的增加,租车需求总体呈现线性大幅增加,在温度在32~33°C时达到最大,在温度大于33℃时,租车需求随着温度的进一步增加而下降。
体感温度和租车需求基本上也符合上述规律。
在这里插入图片描述
再来看一下湿度是否对租车需求有影响。

在这里插入图片描述
继续看风速对租车需求的影响。
在这里插入图片描述
从上图中观察风速对租车的需求影响不显著。
接下来看时间对与租车需求的影响。分析不同季度在每一天中的租车需求量的变化,可以观察到两点:
1.基本上不同季度的一天中每小时租车订单量都遵照3季度>2季度>4季度>1季度,同季节分析一致;
2.在不同季度中的一天都呈现同样的趋势,即存在上下班高峰期与订单需求猛增高度吻合。
在这里插入图片描述在进一步分析不同季度的工作日和周末的每时每刻的租车订单量,发现:
1.在周末,租车订单高发期是上午10点以后到下午6点以前,这可能与周末人们出行时间比较吻合;
2.在工作日,租车订单暴增期是7点到9点,下午17点到19点,与上下班高峰期高度吻合,中午时段有一个小高峰,可能是由于上午工作后出去吃午饭出行而至。
在这里插入图片描述
综合分析,可以得出以下结论:
1.时间是影响租车需求的最重要的因素,在工作日租车订单与上下班高峰期高度吻合;
2.温度是影响租车需求的重要因素,温度过低极大的抑制租车需求,温度过高也一定程度抑制租车需求;
3.湿度一定程度上影响租车需求,当湿度过大,也就是潮湿的天气会抑制租车需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的骆驼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值