您的位置首页百科知识

citi

citi

的有关信息介绍如下:

citi

通常我们认为共享单车是这样的:

实际上我们最早认识的单车是这样的:

在国外,我们叫这种单车叫citi bike,在国内,我们叫城市单车,一般在沿海城市这种城市单车很常见,只要你在相关单位办一张卡就能使用这种城市单车,而且特便宜,相比起来,比我们现在使用的共享单车更实惠,只是城市单车有局限性,你不能放在你公司楼下的停车的地方,而共享就可以,这也是我们我们技术革新的产物,不过对于个人而言,共享经济控制的市场就是垄断市场,就像现在的滴滴一样,只要资本雄厚,谁能耗到最后,谁就是老大。这样的商业模式最终买单的还是用户,就像现在膜拜单车,最终,我们还是要买单的。

话不多说,看看今天的数据分析项目:

本次分析的数据来自:

虽然项目创建已经四年了,但是我们依然可以使用。话不多说直接上报告。

在这之前还是要复习一下分析思路:

其实真实步骤是下面的步骤,在上一片文章中我也总结了这样的步骤,这里再重现一下,下面我们依照这样的步骤进行项目演示和学习,有错的地方希望大家能够提出,有待指教

提出问题(Business Understanding )

理解数据(Data Understanding)

采集数据

导入数据

查看数据集信息

3.数据清洗(Data Preparation )

数据预处理

特征工程(Feature Engineering)

4.构建模型(Modeling)

5.模型评估(Evaluation)

6.方案实施 (Deployment)

提交结果到Kaggle

报告撰写

1.提出问题

这个问题在上一篇文章我已经做过回答,这里的问题就是业务,要么是你的上司提出来的, 要么就是客户提出来的,还有就是你自己对自己提出的高水平的要求

2.理解数据

2.1导入数据

import pandas as pd import matplotlib.pyplot as plt import datetime import warnings # 忽略报错级别warning warnings.filterwarnings('ignore') train_data = pd.read_csv('./train_bike.csv') test_data = pd.read_csv('./test_bike.csv')

2.2理解数据:这里我们是理解字段

2.3 查看数据集信息

3.数据清洗

3.1数据预处理(这里我们直接用train_data进行数据选取,上面可以看出数据没有缺失),这一步略去

3.2特征数据选取

查看字段信息

时间特征处理

这里我们处理datetime进行拆分,拆分成 hour weekday month date

from datetime import datetime train_data['data'] = train_data['datetime'].apply(lambda x:x.split(" ")) train_data['year'] = train_data['datetime'].apply(lambda x:datetime.strptime(x.split(" "),'%Y-%m-%d').year) train_data['month'] = train_data['datetime'].apply(lambda x:datetime.strptime(x.split(' '),'%Y-%m-%d').month) train_data['day'] = train_data['datetime'].apply(lambda x:datetime.strptime(x.split(' '),'%Y-%m-%d').day) train_data['hour'] = train_data['datetime'].apply(lambda x:int(x.split(' ').split(':'))) train_data['weekday'] = train_data['datetime'].apply(lambda x:datetime.strptime(x.split(' '),'%Y-%m-%d').weekday()) train_data.pop('datetime') train_data.head(1)

查看相关系数矩阵

train_corr = train_data . corr () train_corr [ 'count' ]

这篇文章在于分析,所以侧重点不会只是代码,在于分析图表。下面我们开始图表分析。

相关系数热度图

fig=plt.figure(figsize=(12,12)) ax1=fig.add_subplot(1,1,1) sns.set(style='dark') sns.heatmap(train_corr,ax=ax1,vmax=1,square=False,annot=True,cmap='YlGnBu',linewidths=.5) plt.title('Heatmap on Correlation',fontsize=30,color='white') plt.xticks(fontsize=18,rotation=45) plt.yticks(fontsize=18) plt.savefig('./train_corr.jpg') plt.show()

与 使用量 相关的因数的数据分析:

1.这里我们可以看出与每天的时间段是正相关的,这里我们需要进一步分析温度也呈正相关

2.影响最大的就是注册用户和非注册用户,这里我们可以具体分析,争取到更多用户

3.季节和月份我们可以选择其中一个具体分析,这里我们使用月份进行分析

季度与节假日分析

from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False fig = plt.subplots(figsize=(20,20)) # 月均使用量分析 ax1 = plt.subplot2grid((4,2), (0,0), colspan=2) df1 = train_data.groupby(['month', 'year']).sum().unstack()['count'] df1.plot(kind='area', ax=ax1, alpha=0.6) # ax1.set_title('2011-2012 a place citibike monthly statistic ',fontsize=15) plt.title('2011-2012 月均使用量分析') ax1.set_xlabel('monthly statistic',color='white') ax1.set_xticks(list(range(13))) ax1.set_xticklabels([0,'Jan','Feb','Mar','Apr','May','June','July','Aug','Sept','Oct','Nov','Dec']) ax1.set_xlim(True) ax1.legend(loc=0) # 节假日与非节假日使用量分析 # holiday 1=节假日 0=非节假日 ax2 = plt.subplot2grid((4,2), (1,0)) df2 = train_data[['count', 'holiday']] df2.boxplot(by='holiday', ax=ax2) ax2.set_title('2011-2012 节假日与非节假日使用量分析 ',fontsize=15) ax2.set_xlabel('Holidays and non-holidays statistic',color='white') ax2.set_xticklabels(['非节假日','节假日'], rotation='horizontal') ax2.set_ylim(0,800) # 日均使用量分析 ax3 = plt.subplot2grid((4,2), (1,1)) df3 = train_data[['count', 'weekday']] df3.boxplot(by='weekday', ax=ax3) ax3.set_title('2011-2012 日均使用量分析',fontsize=15) ax3.set_xlabel('Daily average usage statistic',color='white') ax3.set_xticklabels(['Mon','Tue','Wed','Thu','Fri','Sat','Sun'], rotation='horizontal') ax3.set_ylim(0,800)

1)季度分析:

我们看见季度分析图表,2012与2011相比,我们直观的看见,用户的使用量是2011的两倍,但是仅仅这两年的用户使用量是不能反应客户的饱和度;另一方面,我们看见从月4月到12月,2012年使用量一直20万辆自行车左右,那2013的自行车我们需要再增加一倍的最大自行车用量吗,这里是最坏的投资方案,这里我们已经存在了竞争对手了,我们这样的分析还对吗,显然和数据量没有关系了,我们需要更多的字段再进行分析,这里就要用到定位系统了,对每个地点进行检测,预测某一地点最大的用户使用数,以此来投放自行车数量。

2)工作日和节假日分析:

节假日和星期箱线图,我们可以看见,节假日的使用量都会减少,这里我们可以用节假日的时间对自行车进行排查,对自行车进行维修,以此减少自行车的损失量,减少资本增加,这里我说的解决方案可能并不合理,应为这里有成本问题。

# 假期与工作日分析 ax4 = plt.subplot2grid((4,2), (2,0), colspan=2) df41 = train_data.groupby(['hour', 'holiday']).mean().unstack()['count'].rename(columns={0:'non-holiday',1:'holiday'}) df42 = train_data.groupby(['hour', 'workingday']).mean().unstack()['count'].rename(columns={0:'non-workingday',1:'workingday'}) df41.plot(ax=ax4, style=':,') df42.plot(ax=ax4, style='-o') ax4.set_title('2011-2012 假期与工作日分析',fontsize=15) ax4.set_xlabel('hour') ax4.set_ylabel('count') ax4.set_xticks(list(range(24))) ax4.set_xticklabels(list(range(24))) ax4.set_xlim(0,23) ax4.legend(loc=0) fig = plt.subplots(figsize=(20,20)) # 季节使用量 ax4 = plt.subplot2grid((4,2), (2,0), colspan=2) df4 = train_data.groupby(['hour', 'season']).mean().unstack()['count'] df4.columns=['Spring','Summer','autumn','Winter'] df4.plot(ax=ax4, style='--.') ax4.set_title('2011-2012 季节使用量分析',fontsize=15) ax4.set_xlabel('时间') ax4.set_ylabel('使用量') ax4.set_xticks(list(range(24))) ax4.set_xticklabels(list(range(24))) ax4.set_xlim(0,23) ax4.legend(loc=0)

3)每小时用车量分析:

我们以两张图作为对比,可以发现,早上7点至9点和晚上4点到8点是早晚峰高峰期,这段时间也是用车量最大的时间段,一般的休息日用车量就会减少

这个城市春季自行车使用量最少,其他季节每天的使用量特别是早高峰时间6点到9点使用量时间基本相同,并且夏秋冬季节时间段上使用自行车上数量相差不多

from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False fig, axes = plt.subplots(1, 3, figsize=(20, 4)) ax1 = plt.subplot(1,3,1) df1 = climateDf[['humidity', 'count']] ax1.scatter(df1['humidity'], df1['count'], s=df1['count']/5, c=df1['count'], marker='.', alpha=0.6) ax1.set_title('2011-2012 湿度分析',fontsize=15) ax1.set_xlabel('湿度') ax1.set_ylabel('使用量') ax2 = plt.subplot(1,3,2) df2 = climateDf[['temp', 'count']] ax2.scatter(df2['temp'], df2['count'], s=df2['count']/5, c=df2['count'], marker='.', alpha=0.6) ax2.set_title('2011-2012 温度分析',fontsize=15) ax2.set_xlabel('温度') ax2.set_ylabel('使用量') ax2 = plt.subplot(1,3,3) df2 = climateDf[['windspeed', 'count']] ax2.scatter(df2['windspeed'], df2['count'], s=df2['count']/5, c=df2['count'], marker='.', alpha=0.6) ax2.set_title('2011-2012 风速大小分析',fontsize=15) ax2.set_xlabel('风速') ax2.set_ylabel('使用量')

4)温度、湿度、风量自行车使用量分析

湿度在40%左右用车量最大,这里我们看出湿度可以提高用户使用次数

温度在25度至30度之间,用户对自行车的使用次数更高

风的大小也会影响用车量,没用风的情况下,用车量最大,风速越大,用车量越小

from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False indexs = [x for x in range(0,24)] legends = ['casual','registered'] df = pd.DataFrame(train_data.groupby("hour")['casual'].sum(),index=indexs,columns=legends) df2 = pd.DataFrame(train_data.groupby("hour")['registered'].sum(),index=indexs,columns=legends) df['registered'] = df2['registered'] df.plot.barh(stacked=True) plt.title('2011-2012 注册用户与非注册用户分析') plt.xlabel('使用量') plt.ylabel('时间') plt.grid(True) plt.show()

5)注册用户与非注册用户分析

注册用户使用时间段是有规律的我们能看出早晚高峰使用量最大,而非注册用用用户成正太分布的的形状,我们可以认为这部分用户是零散用户,我们需要确定这个用户的使用次数来推断这个用户是否能成为注册用户,通过一些优惠手段来获取用户注册。

最后我们需要一个总结:

整体的分析完成了,图表的分析就到这里。具体详细的操作内容可以参考下面推荐的书。

这里推荐一本书,之前要是不好好看这本工具书,那么就不能好好用matplotlib了。

好了,报告已经生成,下面我们开始学习统计分析了,加油吧,骚年!!!!