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.湿度一定程度上影响租车需求,当湿度过大,也就是潮湿的天气会抑制租车需求。