1.準(zhǔn)備工作
1.1首先隶糕,需要導(dǎo)入相關(guān)的包
?import numpy as np
?import pandas as pd
%matplotlib inline?
1.2使用python的pandas庫導(dǎo)入所要分析的文件办桨,在導(dǎo)入時可能出現(xiàn)紅色的警告斗这,這是因為數(shù)據(jù)類型不是很統(tǒng)一(mixed types)
data=pd.read_csv('/Users/clark/Downloads/Python數(shù)據(jù)分析入門與實戰(zhàn)-數(shù)據(jù)集/bike.csv')
然后查看數(shù)據(jù)后添,可以得到以下的表格享郊。
2.開始分析骄蝇,處理數(shù)據(jù)
#由于在分析時狼忱,隔天的數(shù)據(jù)不好分析羡玛,所以我們選取在當(dāng)天結(jié)束騎行的别智。
data=data[data['StartDay']==data['EndDay']]
#由于變量太多不利于分析,分析出來效果不好稼稿,我們在這里只選取成員類型薄榛,騎行時間,開始日期让歼,開始時間敞恋,開始地點,及結(jié)束地點谋右。
data=data[['MemberType','TripDurationSec','StartDay','StartTime','StartDate','StartStationName','EndStationName']]
由于硬猫,在表格中出現(xiàn)很多的空值,所以我們要處理空值改执。
#處理空值
data=data.dropna(how='all')
#對月份進行提取
data['StartDate']=data.StartDate.map(lambda x:x.split('/')[0])
#使用數(shù)據(jù)透視表啸蜜,改變表格的形狀,選取自己所需要的那幾個變量重新組成一個表格
#接下來分析一周當(dāng)中各個類型成員的累計平均騎行時間的情況
table=data.pivot_table(values='TripDurationSec',index='StartDay',columns='MemberType',aggfunc=np.mean)
查看使用數(shù)據(jù)透視表組成的表格辈挂。
#由于表格并不是很直觀可以看出來他們之間的區(qū)別衬横,我們這時候?qū)⑵滢D(zhuǎn)換成柱狀圖,并讓其堆積一起终蒂,方便對比
#可以看出周日的時候消費者的騎行時間是最長的蜂林。
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))
#之后,我們在分析一下車輛的使用情況早龟,我們運用車輛在開始地點的總數(shù)減去車輛在目的地的總數(shù)惫霸,就可以得出不同地方車輛的供應(yīng)是否充足
#比如200 River這個車站猫缭,它出發(fā)的車遠(yuǎn)少于到達(dá)的車,說明這個車站可以相應(yīng)減少一些共享單車的供應(yīng)
#100 Walnut St這個車站壹店,它出發(fā)的車遠(yuǎn)大于到達(dá)的車猜丹,說明這個車站需要相應(yīng)增加一些共享單車的供應(yīng)
Num=data.StartStationName.value_counts()-data.EndStationName.value_counts()
Num.sort_values()
#我們還可以使用層次化索引來分析,在每周當(dāng)中硅卢,每個車站的不同客戶的 累計騎行情況
table=data.pivot_table('TripDurationSec',index='StartStationName',columns=['MemberType','StartDay'],aggfunc=np.size,margins=True,fill_value=0)
#customer用戶在一周當(dāng)中從不同車站出發(fā)的累計騎行情況
table['Customer']