共享单车数据分析

一、项目背景
共享单车是指企业在校园、地铁站点、公交站点、居民区、商业区、公共服务区等提供自行车单车共享服务,是一种分时租赁模式,是一种新型绿色环保共享经济。

共享单车系统是一种租赁自行车的方法,注册会员、租车、还车都将通过城市中的站点网络自动完成。使用共享单车,可以注册会员,存入一定金额用于使用结束后自动扣费结算;也可以不注册会员,临时使用后通过其提供的支付方式结算费用。人们通过下载APP使用这个系统进行扫码开锁取车,然后从取车地骑到自己的目的地后停放锁车归还,系统自动按实际使用时长计费。

共享单车是近年来流行起来的新兴产业,发展具有重要价值通过对租车数据进行统计以及可视化分析,对单车运营维护团队提出改善性意见

二、项目分析具体步骤

#导入工具包
import datetime
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from pyecharts.charts import *
import pyecharts.options as opts
from pyecharts.faker import Faker
#读入数据
data = pd.read_csv('/home/kesci/input/first_dataset1318/train.csv')
data.head()

0 2011-01-01 00:00:00 1 0 0 1 9.84 14.395 81 0.0 3 13 16
1 2011-01-01 01:00:00 1 0 0 1 9.02 13.635 80 0.0 8 32 40
2 2011-01-01 02:00:00 1 0 0 1 9.02 13.635 80 0.0 5 27 32
3 2011-01-01 03:00:00 1 0 0 1 9.84 14.395 75 0.0 3 10 13
4 2011-01-01 04:00:00 1 0 0 1 9.84 14.395 75 0.0 0 1 1
数据预处理和特征提取

#数据预处理
data['season'] = data['season'].map({1:'spring',2:'summer',3:'fall',4:'winner'})
data['weather'] = data['weather'].map({1:'Good',2:'Normal',3:'Bad',4:'ver Bad'})
#特征衍生
data['datetime'] = pd.to_datetime(data['datetime'])

data['year'] = data.datetime.apply(lambda d:d.year)
data['month'] = data.datetime.apply(lambda d:d.month)
data['day'] = data.datetime.apply(lambda d:d.day)
data['hour'] = data.datetime.apply(lambda d:d.hour)
data['minute'] = data.datetime.apply(lambda d:d.minute)
data.head()

三、数据可视化
标签特征的整体分布

#标签特征的整体分布
sns.set_style('ticks')
plt.figure(figsize=(10,6))
sns.kdeplot(data['count'])
sns.despine(left=True)
plt.grid(linestyle='--',alpha=0.5,axis='y')
plt.title('Demand Distribution',fontsize=15)
plt.xlabel('Demand',fontsize=13)
plt.ylabel('Frequence',fontsize=13)

时间维度看需求趋势(月份维度)

#时间维度看需求趋势
#月份维度 数据含括了两年的跨度,因此按年分分开绘制每月的骑行需求
Month_tendency_2011 = data[data['year'] == 2011].groupby('month')[['casual','registered','count']].sum()
Month_tendency_2012 = data[data['year'] == 2012].groupby('month')[['casual','registered','count']].sum()

#绘制图像
fig,[ax1,ax2] = plt.subplots(2,1,figsize=(12,15))
plt.subplots_adjust(hspace=0.3)
Month_tendency_2011.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',ax=ax1)
ax1.set_title('2011 Demand Tendency',fontsize=15)
ax1.grid(linestyle='--',alpha=0.8)
ax1.set_ylim(0,150000)
ax1.set_xlabel('Month',fontsize=13)
ax1.set_ylabel('Count',fontsize=13)


Month_tendency_2012.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',ax=ax2)
ax2.set_title('2012 Demand Tendency',fontsize=15)
ax2.grid(linestyle='--',alpha=0.8)
ax2.set_ylim(0,150000)
ax2.set_xlabel('Month',fontsize=13)
ax2.set_ylabel('Count',fontsize=13)
sns.despine(left=True)

在这里插入图片描述

上图为可视化结果,整体上可见2012年相较于2011年,骑行的需求有了大幅的增长。总需求和注册用户需求的变化最为明显,而非注册用户提升效果一般,这说明:经过一年的运营,越来越多的使用者在平台上注册了,注册用户提升显著。从月份角度,我们能看到的是:6月 ~ 9月是骑行旺季,12月~2月是骑行淡季

时间维度看需求趋势(小时维度)

#提取出每个小时的骑行需求均值
Hour_tendency = data.groupby('hour')[['casual','registered','count']].mean()

Hour_tendency.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',figsize=(12,6))
plt.grid(linestyle='--',alpha=0.8)
plt.ylim(0,500)
plt.xlabel('Hour',fontsize=13)
plt.ylabel('Count',fontsize=13)
sns.despine(left=True)

在这里插入图片描述

按照一天24小时可视化骑行需求,我们能发现一些有趣的结论
从24小时观察骑行需求:存在6~ 7AM以及5~6PM两个峰值,中午12AM有一个小峰值,符合通勤规律,注册用户特征更为明显,而非注册用户则变化平缓。

时间维度看需求趋势(工作日和非工作日小时维度)

#工作人和非工作日每小时的骑行是否有差异
plt.figure(figsize=(12,6))
sns.pointplot(x='hour',y='count',hue='workingday',data=data,ci=None,palette='Spectral')
sns.despine(left=True)
plt.xlabel('Hour',fontsize=13)
plt.ylabel('Count',fontsize=13)
plt.grid(linestyle='--',alpha=0.5)
plt.title('workdday/holiday Demand Tendency',fontsize=15)
Text(0.5, 1.0, 'workdday/holiday Demand Tendency')

在这里插入图片描述

可见工作日与非工作日的骑行需求规律反差巨大,非工作日的共享单车苏醒慢,骑行需求高峰出现在12AM ~ 3PM的这段时间内,另外凌晨0AM~4AM的骑行需求大于工作日,周末使劲造!

不同季节的小时维度

#不同季节的小时维度
plt.figure(figsize=(12,6))
sns.pointplot(x='hour',y='count',hue='season',data=data,ci=None,palette='Spectral')
sns.despine(left=True)
plt.xlabel('Hour',fontsize=13)
plt.ylabel('Count',fontsize=13)
plt.grid(linestyle='--',alpha=0.5)
plt.title('Demand Tendency by season',fontsize=15)
Text(0.5, 1.0, 'Demand Tendency by season')

在这里插入图片描述

春夏秋冬四季24小时需求趋势一致,值得关注的是春季的整体小于夏秋冬三个季节,体感舒适度最高的秋天整体骑行需求最高。
为何春季需求会低于其他季节?这是个值得思考的问题,单限于数据信息有限,未找出合理的解释。
这也说明了结合业务的重要性,只有深入了解了业务规律才能做出准确判断。

四、天气维度

(1)不同天气状况的散点图
plt.figure(figsize=(12,6)) sns.stripplot(x='weather',y='count',data=Weather_Demand,palette='Set2',jitter=True,alpha=1.0) sns.despine(left=True) plt.xlabel('Season',fontsize=13) plt.ylabel('Count',fontsize=13) plt.title('Demand Distribution by Weather',fontsize=15) Text(0.5, 1.0, 'Demand Distribution by Weather')

在这里插入图片描述

可见,天气越不好,骑行数量需求越少,极端天气未形成趋势线,极端天气还是占少数的(这个维度分析有必要吗,这不是常识吗)

(2)气温与体表温度

# 温度与体表温度的关系度量
plt.figure(figsize=(10,8))
sns.kdeplot(data['temp'],data['atemp'],shade=True,shade_lowest=False,cut=10,cmap='YlGnBu',cbar=True)
sns.despine(left=True)
plt.grid(linestyle='--',alpha=0.4)
plt.xlim(0,50)
plt.ylim(0,50)
plt.xlabel('Temperature',fontsize=13)
plt.ylabel('Atemp',fontsize=13)
plt.title('correlation of temp and atemp',fontsize=15)

Text(0.5, 1.0, 'correlation of temp and atemp')

在这里插入图片描述

从两者的关系度量图中我们能看出呈现正相关分布,另外能获取到的信息是:
颜色最深的分布最为集中,最适宜的气温27℃~28℃、体表温度31℃左右的骑行需求是最密集的。

(3)气温与风速

# 温度与风速的关系度量
plt.figure(figsize=(10,8))
sns.kdeplot(data['temp'],data['windspeed'],shade=True,shade_lowest=False,cut=10,cmap='YlGnBu',cbar=True)
sns.despine(left=True)
plt.grid(linestyle='--',alpha=0.4)
plt.xlim(0,50)
plt.ylim(-10,40)
plt.xlabel('Temperature',fontsize=13)
plt.ylabel('Windspeed',fontsize=13)
plt.title('correlation of temp and windspeed',fontsize=15)
Text(0.5, 1.0, 'correlation of temp and windspeed')

风速的分布存在断层,初步推断可能是异常数据, 这里先不做处理;可见气温27℃~28℃, 风速8~9骑行需求是最密集的。

**
(4)气温与温度

**

# 温度与湿度的关系度量
plt.figure(figsize=(10,8))
sns.kdeplot(data['temp'],data['humidity'],shade=True,shade_lowest=False,cut=10,cmap='YlGnBu',cbar=True)
sns.despine(left=True)
plt.grid(linestyle='--',alpha=0.4)
plt.xlim(0,40)
plt.ylim(0,110)
plt.xlabel('Temperature',fontsize=13)
plt.ylabel('Humidity',fontsize=13)
plt.title('correlation of temp and humidity',fontsize=15)
Text(0.5, 1.0, 'correlation of temp and humidity')

在这里插入图片描述

可见气温27℃~28℃ ,湿度80~90骑行需求是最密集的。

天气因素与骑行需求
将气温和风速作为天气因素分析骑行需求(忽略体表温度,气温即代表了体表温度),
使用散点图绘制,散点的大小和颜色代表了骑行量,每个散点代表一天。

plt.figure(figsize=(12,6))
plt.scatter(x='temp',y='windspeed',
            s=data['count']/2,
            c='count',cmap='RdBu_r',
            edgecolors='black',linestyle='--',linewidth=0.2,alpha=0.6,
            data=data)
plt.title('Count distribution by temp and windspeed',fontsize=15)
plt.xlabel('Temperature',fontsize=13)
plt.ylabel('Windspeed',fontsize=13)
sns.despine(left=True)

在这里插入图片描述

可见骑行需求较多的分布范围:气温20℃~35℃,风速40以下;人们更热衷于温暖天气骑行,炎热天气需求也大的原因可能是因为相对于公共交通,骑行更加灵活方便吧。

**(5)将气温和湿度作为天气因素分析骑行需求:

plt.figure(figsize=(12,6))
plt.scatter(x='temp',y='humidity',
            s=data['count']/2,
            c='count',cmap='RdBu_r',
            edgecolors='black',linestyle='--',linewidth=0.2,alpha=0.6,
            data=data)
plt.title('Count distribution by temp and windspeed',fontsize=15)
plt.xlabel('Temperature',fontsize=13)
plt.ylabel('Windspeed',fontsize=13)
sns.despine(left=True)

在这里插入图片描述

可见骑行需求较多的分布范围: 气温20℃~ 35℃,湿度20~80。

(6)注册用户与未注册用户

如何能提升平台用户数量?当然是拉新促活促转化,接下来,让我们来观察下注册用户与非注册用户的差异吧。

# 绘制子图1:月度差异
Month_Dif =data.groupby('month')[['casual','registered']].mean()
Month_Dif.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',ax=axes[0,0])
axes[0,0].set_title('Month Demand Tendency Dif',fontsize=15)
axes[0,0].grid(linestyle='--',alpha=0.8)
axes[0,0].set_xlabel('Month',fontsize=13)
axes[0,0].set_ylabel('Count',fontsize=13)
#绘制子图2:小时差异
Hour_Dif = data.groupby('hour')[['casual','registered']].mean()
Hour_Dif.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',ax=axes[0,1])
axes[0,1].set_title('Hour Demand Tendency Dif',fontsize=15)
axes[0,1].grid(linestyle='--',alpha=0.8)
axes[0,1].set_xlabel('Hour',fontsize=13)
axes[0,1].set_ylabel('Count',fontsize=13)
# 绘制子图3:工作日差异
H2_1 = data[data.workingday==1].groupby('hour')[['casual','registered']].mean() # 工作日
H2_0 = data[data.workingday==0].groupby('hour')[['casual','registered']].mean() # 非工作日
H2_1.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',ax=axes[1,0])
axes[1,0].set_title('Workingday Hour Demand Dif',fontsize=15)
axes[1,0].grid(linestyle='--',alpha=0.8)
axes[1,0].set_xlabel('Hour',fontsize=13)
axes[1,0].set_ylabel('Count',fontsize=13)
# 绘制子图4:非工作日差异
H2_0.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',ax=axes[1,1])
axes[1,1].set_title('Holiday Hour Demand Dif',fontsize=15)
axes[1,1].grid(linestyle='--',alpha=0.8)
axes[1,1].set_xlabel('Hour',fontsize=13)
axes[1,1].set_ylabel('Count',fontsize=13)
sns.despine(left=True)

在这里插入图片描述

上图为注册用户与非注册用户在各因素下的差异组合图:

第一幅为两者的月度差异图,可见整体趋势相同,注册用户远高于非注册用户;

第二幅为两者的小时差异图,可见注册用户的小时规律明显,非注册用户则只在12AM~5PM存在峰值,整体差异较大;

第三幅为两者的工作日差异图,可见注册用户工作日小时规律明显,二非注册用户趋势平缓;

第四幅为两者的非工作日差异图,可见非工作日两者差异相较于其他因素差异较小,且趋势相同,值得注意的是注册用户在凌晨更加活跃。

总的来说,注册用户需求远高于非注册用户,注册用户的使用规律明显,而非注册用户受其他因素的影响相对较弱。

数据分析总结
1、共享单车由注册用户与非注册用户构成,而主要群体以注册用户为主。

2、共享单车的用户总数主要受摄氏度、体感温度、湿度、时刻影响比较明显。

3、根据数据分析提出几个建议

(1)用户总数随时间在持续上升,可以增加共享单车的投放数量以满足业务需求;

(2)用户总数在夏季、秋季、冬季较多,而在春季较少,可以选择在春季大批量回收车辆进行维修保养;

(3)用户总数在工作日的上下班时段达到高峰期,因此在此时间段前进行车辆调度集中投放在地铁口、公交站台、小区出口等附近以供人们方便使用,提高用户量; 而在假期,则在白天时刻集中投放在各小区出口、地铁口、景点等附近以供人们方便使用,用以提供用户量;

(4)用户总数在温度达到20-25摄氏度之间达到高峰期,因为温度较舒服,人们喜欢骑单车出行,因此在这种天气时增大投放量。

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值