1.准备工作
1.1首先,需要导入相关的包
import numpy as np
import pandas as pd
%matplotlib inline
1.2使用python的pandas库导入所要分析的文件,在导入时可能出现红色的警告,这是因为数据类型不是很统一(mixed types)
data=pd.read_csv('/Users/clark/Downloads/Python数据分析入门与实战-数据集/bike.csv')
然后查看数据,可以得到以下的表格。

2.开始分析,处理数据
#由于在分析时,隔天的数据不好分析,所以我们选取在当天结束骑行的。
data=data[data['StartDay']==data['EndDay']]
#由于变量太多不利于分析,分析出来效果不好,我们在这里只选取成员类型,骑行时间,开始日期,开始时间,开始地点,及结束地点。
data=data[['MemberType','TripDurationSec','StartDay','StartTime','StartDate','StartStationName','EndStationName']]

由于,在表格中出现很多的空值,所以我们要处理空值。
#处理空值
data=data.dropna(how='all')
#对月份进行提取
data['StartDate']=data.StartDate.map(lambda x:x.split('/')[0])
#使用数据透视表,改变表格的形状,选取自己所需要的那几个变量重新组成一个表格
#接下来分析一周当中各个类型成员的累计平均骑行时间的情况
table=data.pivot_table(values='TripDurationSec',index='StartDay',columns='MemberType',aggfunc=np.mean)
查看使用数据透视表组成的表格。

#由于表格并不是很直观可以看出来他们之间的区别,我们这时候将其转换成柱状图,并让其堆积一起,方便对比
#可以看出周日的时候消费者的骑行时间是最长的。
table.plot.bar(stacked=True)

为了更加直观的看出不同客户的骑行时间的多少,所以,我们将其时间除于总的时间,可以算出不同类型客户所占比例的不同
table_norm=table.div(table.sum(1),axis=0)

#接下来,我们进一步分析在一天24小时中不同类型客户累计骑行时间,可以看出晚上8点骑行时间最长,其次是凌晨4点
data.pivot_table(values='TripDurationSec',index='StartTime',columns='MemberType',aggfunc=np.mean).plot.barh(figsize=(10,12))

#之后,我们在分析一下车辆的使用情况,我们运用车辆在开始地点的总数减去车辆在目的地的总数,就可以得出不同地方车辆的供应是否充足
#比如200 River这个车站,它出发的车远少于到达的车,说明这个车站可以相应减少一些共享单车的供应
#100 Walnut St这个车站,它出发的车远大于到达的车,说明这个车站需要相应增加一些共享单车的供应
Num=data.StartStationName.value_counts()-data.EndStationName.value_counts()
Num.sort_values()


#我们还可以使用层次化索引来分析,在每周当中,每个车站的不同客户的 累计骑行情况
table=data.pivot_table('TripDurationSec',index='StartStationName',columns=['MemberType','StartDay'],aggfunc=np.size,margins=True,fill_value=0)

#customer用户在一周当中从不同车站出发的累计骑行情况
table['Customer']

网友评论