共享单车租用量变化趋势及其影响因素分析

该博客分析了2012年共享单车租用量较2011年的变化趋势,发现租用量增长66.10%,会员用户增长率69.85%,非会员用户增长率51.05%。研究发现,季节、节假日、工作日、天气、温度等多维度因素影响租用量。非会员用户在特定气候条件下租用更多,会员用户则在工作日活跃。2012年7月和10月周末租用量下降与环境因素有关,特别是温度和体感温度。
摘要由CSDN通过智能技术生成

作者:lzyu86(紫雨)

目录

1.提出问题

1.2012年共享单车整体租用量较2011变化趋势如何;
2.造成该变化趋势的影响因素有哪些

2.理解数据

理解数据分为三部分:

1.采集数据:以kaggle中共享单车预测项目所提供的train_bike数据为本次数据分析的数据源

2.导入数据:将下载好的csv文件导入到Python中的数据结构中

3.查看数据集信息

2.1 采集数据

本次数据源

2.2 导入数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

path= './input/train_bike.csv'
df = pd.read_csv(path)

2.3查看数据集信息

df.head()

在这里插入图片描述

df.info()

在这里插入图片描述

3.数据清洗

3.1数据预处理

#查看有无缺失值
df.isnull().sum()

#查看有无异常值
df.describe()

在这里插入图片描述

#humidity在日常生活中不可能为0,删除为0 的数据并存储
df_del = df.loc[df['humidity']!=0,:].copy()
df_del =df_del.reset_index()
#查看有无重复值
df_del.duplicated().value_counts()

在这里插入图片描述

#提取具体时间
df_del['year']=df_del.datetime.apply(lambda x:x.split('-')[0])
df_del['month']=df_del.datetime.apply(lambda x:x.split('-')[1])
df_del['day']=df_del.datetime.apply(lambda x:x.split('-')[2].split()[0])
df_del['hour']=df_del.datetime.apply(lambda x:x.split()[1].split(':')[0])
df_del = df_del.drop('index',axis=1)
#删除datetime列
date=df_del.pop('datetime')
df_del.head()

在这里插入图片描述

print('2011年数据有 %s行' % (df_del[df_del['year']=='2011'].shape[0]),'\n','2012年数据有 %s行' % (df_del[df_del['year']=='2012'].shape[0]))

在这里插入图片描述
查看2011年和2012年的数据,可以发现,2011年数据相较于2012年数据要少,为便于比较,删减2011年和2012年数据,使数据中两年出现的的日期均相同,以保证两年的数据量相同。

#查看两年数量不同的月份
df_del.groupby(by=['year','month'])['month'].count().T['2012']-df_del.groupby(by=['year','month'])['month'].count().T['2011']

在这里插入图片描述

df_2011 = df_del[df_del['year']=='2011']
df_2012 = df_del[df_del['year']=='2012']
df_co = df_2012.merge(right=df_2011,how='inner',on=['month','day','hour'])
df_2012 = df_co.iloc[:,0:15]
df_2011 = pd.concat([df_co.iloc[:,15:28],df_co[['month','day','hour']]],axis=1)
df_2012.rename(columns={
   'season_x':'season','holiday_x':'holiday','workingday_x':'workingday','weather_x':'weather','temp_x':'temp','atemp_x':'atemp','humidity_x':'humidity','windspeed_x':'windspeed','casual_x':'casual','registered_x':'registered','count_x':'count','year_x':'year'},inplace=True)
df_2011.rename(columns={
   'season_y':'season','holiday_y':'holiday','workingday_y':'workingday','weather_y':'weather','temp_y':'temp','atemp_y':'atemp','humidity_y':'humidity','windspeed_y':'windspeed','casual_y':'casual','registered_y':'registered','count_y':'count','year_y':'year'},inplace=True)
df_all = pd.concat([df_2011,df_2012],axis=0).reset_index().drop('index',axis=1)

3.2特征值提取

df_all['temp_interval']=pd.cut(df_all.temp,bins=[0,10,20,30,40,50],labels=['0-10','10-20','20-30','30-40','40-50'])
df_all['atemp_interval']=pd.cut(df_all.atemp,bins=[0,10,20,30,40,50],labels=['0-10','10-20','20-30','30-40','40-50'])
df_all['humidity_interval']=pd.cut(df_all.humidity,bins=[0,10,20,30,40,50,60,70,80,90,100],labels=['0-10','10-20','20-30','30-40','40-50','50-60','60-70','70-80','80-90','90-100'])
df_all['windspeed_interval']=pd.cut(df_all.windspeed,bins=[0,10,20,30,40,50,60],labels=['0-10','10-20','20-30','30-40','40-50','50-60'],include_lowest=True)

4.数据分析及可视化

4.1描述统计

df_2012['count'].sum()

在这里插入图片描述

df_2012['count'].describe()

在这里插入图片描述
2012年共享单车总租用量为1297765辆,每小时平均租用量为240辆。平均值>中位数,为右偏分布。

4.2同比增长及增长率

all = df_all.pivot_table(index='year',values=['casual','registered','count'],aggfunc='sum')
all

在这里插入图片描述

count_inc = (all.loc['2012','count'] - all.loc['2011','count'])/all.loc['2011','count']
registered_inc = (all.loc['2012','registered'] - all.loc['2011','registered'])/all.loc['2011','registered']
casual_inc = (all.loc['2012','casual'] - all.loc['2011','casual'])/all.loc['2011','casual']
print('2012年较2011年总租用量增长率为 %.2f%% \n 会员用户增长率为 %.2f%% \n 非会员用户增长率为 %.2f%%' % (count_inc*100,registered_inc*100,casual_inc*100))

在这里插入图片描述

all['count_inc']=np.array([0,count_inc])
all['casual_inc']=np.array([0,casual_inc])
all['registered_inc']=np.array([0,registered_inc])
all

在这里插入图片描述

a = df_all.pivot_table(index='month',columns='year',values='casual',aggfunc='sum')
a['growth_rate'] = (a['2012']-a['2011'])/a['2011']
b = df_all.pivot_table(index='month',columns='year',values='registered',aggfunc='sum')
b['growth_rate'] = (b['2012']-b['2011'])/b['2011']

plt.style.use('ggplot')
plt.figure(figsize=(20,12))

ax1=plt.subplot(311)
all[['casual','registered']].plot.bar(stacked = True,alpha=0.6,ax=ax1)
all['count_inc'].plot(style='b--.',alpha=0.6,secondary_y=True)
ax1.set_title('2011与2012年共享单车总租用量')
ax1.set_ylabel('租用量')
ax1.right_ax.set_ylabel('增长率')
ax1.right_ax.set_ylim(-0.1, 1)
ax1.set_xlabel('图1')
ax1.set_xticklabels(['非会员','会员'], rotation='horizontal')

ax2=plt.subplot(323)
all['casual'].plot.bar(alpha=0.6,ax=ax2)
all['casual_inc'].plot(style='b--.',alpha=0.6,secondary_y=True)
ax2.set_title('2011与2012年共享单车非会员租用量')
ax2.set_ylabel('租用量')
ax2.right_ax.set_ylabel('增长率')
ax2.right_ax.set_ylim(-0.1, 1)
ax2.set_xlabel('图2')
ax2.set_xticks(range(0,2))
ax2.set_xticklabels(['非会员','会员'], rotation='horizontal')

ax3=plt.subplot(324)
all['registered'].plot.bar(stacked = True,alpha=0.6,ax=ax3)
all['registered_inc'].plot(style='b--.',alpha=0.6,secondary_y=True)
ax3.set_title('2011与2012年共享单车会员租用量')
ax3.set_ylabel('租用量')
ax3.right_ax.set_ylabel('增长率')
ax3.right_ax.set_ylim(-0.1, 1)
ax3.set_xlabel('图3')
ax3.set_xticklabels(['非会员','会员'], rotation='horizontal')

ax4=plt.subplot(325)
a[['2011','2012']].plot.bar(alpha=0.6,ax=ax4)
a['growth_rate'].plot(style='b--.',alpha=0.6,secondary_y=True)
ax4.set_title('2012年共享单车非会员租用同比增长率')
ax4.set_ylabel('租用量')
ax4.right_ax.set_ylabel('增长率')
ax4.right_ax.set_ylim(-0.1, 2)
ax4.set_xlabel('图4')

ax5=plt.subplot(326)
b[['2011','2012']].plot.bar(alpha=0.6,ax=ax5)
b['growth_rate'].plot(style='b--.',alpha=0.6,secondary_y=True)
ax5.set_title('2011与2012年共享单车会员租用同比增长率')
ax5.set_ylabel('租用量')
ax5.right_ax.set_ylabel('增长率')
ax5.right_ax.set_ylim(-0.1, 2)
ax5.set_xlabel('图5')

plt.show()

在这里插入图片描述
从租用量的柱形图中可以明显看出,推测进行了相应的推广,2012年较2011年明显增长,总租用量增长率为 66.10% 。
其中,非会员用户增长率为 51.05%,会员用户增长率为 69.85% ,整体及部分均呈现出明显的增长趋势。

再观察同比增长率图,非会员用户同比增长率在7月份出现负增长,其余月份均呈现出同比正增长的趋势,且4月份在租用量占比较大的月份中,同比增长率最高;会员用户同比增长率均为正增长,在5月份及以后增长率区域平稳。

4.3多维分析

season = df_all.pivot_table(index='season',columns='year',values=['casual','registered'],aggfunc='sum')
season.rename(index={
   1:'春',2:'夏',3:'秋',4:'冬'},inplace=True)
season

在这里插入图片描述

holiday=df_all.pivot_table(index='holiday',columns='year',values=['casual','registered'],aggfunc='sum')
holiday.rename(index={
   1:'节假日',0:'非节假日'})

在这里插入图片描述

workingday=df_all.pivot_table(index='workingday',columns='year',values=['casual'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值