美國(guó)西雅圖人們使用自行車(chē)情況分析與預(yù)測(cè)(進(jìn)階)

這篇博客和美國(guó)西雅圖人們使用自行車(chē)情況分析與預(yù)測(cè)(初步)是姊妹篇讲岁,是對(duì)前一篇博客的延續(xù)惜傲,更多的背景信息這里不多介紹务冕,可以去以上提到的博客中找到硼身,同樣的所有數(shù)據(jù)和源代碼都是可以重現(xiàn)的拇囊。
和上一篇博客不同的是迂曲,這篇博客不在建立模型去預(yù)測(cè)未來(lái)的情況,而是立足于數(shù)據(jù)寥袭,從數(shù)據(jù)中找出有趣的東西來(lái)路捧,換句話說(shuō)关霸,我們不再像上一篇博客一樣去使用有監(jiān)督的機(jī)器學(xué)習(xí)方法,取而代之杰扫,我們使用無(wú)監(jiān)督的學(xué)習(xí)方法队寇,類(lèi)似聚類(lèi),把具有相似行為的使用自行車(chē)的人們進(jìn)行聚類(lèi)章姓,挖掘出一些有趣的玩意佳遣。

Part 1: 數(shù)據(jù)來(lái)源

這篇博客和上篇博客使用的數(shù)據(jù)基本一致,我們可以在github下載凡伊,或者我在博客結(jié)尾會(huì)給出我本人的聯(lián)系方式零渐,找我要也行。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn; seaborn.set()  # 這是更高級(jí)一點(diǎn)的庫(kù)窗声,繪圖更酷炫
data = pd.read_csv(r"E:\研究生階段課程作業(yè)\python\好玩的數(shù)據(jù)分析\SeattleBike-master\Fremont_Bridge.csv",index_col = "Date", parse_dates = True)
data.sample(n = 5)   #隨機(jī)抽樣5個(gè)樣本
隨機(jī)抽樣5行數(shù)據(jù)
data.columns = ["West","East"]   #原來(lái)的列名太長(zhǎng)相恃,蛋疼,改的簡(jiǎn)單一些
data.fillna(0,inplace=True)  #填充null值笨觅,用0填充拦耐,同時(shí)就地填充:就是直接對(duì)data進(jìn)行填充,不用一系列的賦值之類(lèi)的操作
data['total'] = data.West + data.East  #增加一個(gè)新列见剩,計(jì)算每個(gè)時(shí)刻的經(jīng)過(guò)這座橋的自行車(chē)總數(shù)
![Uploading 5_633120.png . . .]

data.resample('w',how = 'sum').plot()
每周橋上不同方向和總數(shù)的自行車(chē)數(shù)量變化圖

到目前為止杀糯,好像和上篇博客沒(méi)有什么不同,處理方法也是一致的苍苞,好啦固翰,下面開(kāi)始放大招了

#因?yàn)槲覀兿胫廊藗冊(cè)诓煌掌谑褂米孕熊?chē)的習(xí)慣,我們對(duì)數(shù)據(jù)進(jìn)行透視
data_pivoted = data.pivot_table(values = ["West","East"], index = data.index.date,columns = data.index.hour,fill_value = 0)
data_pivoted.sample(n = 10)
經(jīng)過(guò)透視表操作后的數(shù)據(jù)

經(jīng)過(guò)處理后的數(shù)據(jù)列有48維羹呵,為了可視化需要骂际,我們對(duì)48列進(jìn)行降維

from sklearn.decomposition import PCA          #使用自帶的pca進(jìn)行降維
xpca = PCA(n_components = 2).fit_transform(x)    #只保留2維

total_trips = data_pivoted.sum(1)       #計(jì)算每一天的經(jīng)過(guò)自行車(chē)總數(shù)
plt.scatter(xpca[:, 0], xpca[:, 1], c=total_trips,
            cmap='cubehelix')
plt.colorbar(label='total trips');

很明顯,我們可以看出這些數(shù)據(jù)明顯可以分成兩類(lèi)冈欢,下面要做的就很簡(jiǎn)單了歉铝,聚類(lèi)開(kāi)始登場(chǎng)。首先我們使用kmeans

#首先使用kmeans凑耻,聚類(lèi)的數(shù)目為2:
from sklearn.cluster import KMeans
kmeans_model = KMeans(n_clusters=2, random_state=1)
kmeans_model.fit(xpca)
labels = kmeans_model.labels_
#對(duì)聚類(lèi)結(jié)果進(jìn)行可視化
plt.scatter(xpca[:,0],xpca[:,1],c = labels)
plt.colorbar(label='total trips');
kmeans

果然kmeans表現(xiàn)的還是那么菜太示,聚類(lèi)的效果并不完美,下面我們使用高斯混合模型聚類(lèi)

#使用高斯混合模型香浩,進(jìn)行聚類(lèi)
from sklearn.mixture import GMM
gmm = GMM(2, covariance_type='full', random_state=0)
gmm.fit(xpca)
cluster_label = gmm.predict(xpca)
plt.scatter(xpca[:, 0], xpca[:, 1], c=cluster_label);
9.png

還是高斯混合模型靠譜啊类缤,多試幾種方法,找出最適合你的方法吧

data_pivoted["Cluster"] = cluster_label
data_new = data.join(data_pivoted["Cluster"],on = data.index.date)  
data_new.sample(10)
增加了一個(gè)所屬類(lèi)別
#對(duì)兩個(gè)聚類(lèi)按照時(shí)間分別作圖
#data_new_0        #包含cluster為0的所有數(shù)據(jù)
#data_new_1        #包含cluser為1的所有數(shù)據(jù)
data_new_0 = data_new[data_new.Cluster == 0]
data_new_1 = data_new[data_new.Cluster == 1]

by_hour_0 = data_new_0.groupby(data_new_0.index.time).mean()
by_hour_1 = data_new_1.groupby(data_new_1.index.time).mean()

by_hour_0[["West","East","total"]].plot()
plt.xlabel("time")
plt.ylabel("mean of bikes")
第一個(gè)類(lèi)中邻吭,自行車(chē)數(shù)量變化圖

這個(gè)結(jié)果相當(dāng)耐人尋味餐弱,我們可以看到,差不多在早上八點(diǎn)左右,自行車(chē)數(shù)量到達(dá)第一個(gè)巔峰膏蚓,然后下午五點(diǎn)左右猖败,自行車(chē)數(shù)量到達(dá)第二個(gè)巔峰。是不是這些日子都是工作日呢降允,大家騎著自行車(chē)去上班,換句話說(shuō)艺糜,第一個(gè)聚類(lèi)難道都是工作日剧董。這個(gè)問(wèn)題有待繼續(xù)解答,我們?cè)倏吹诙€(gè)聚類(lèi)的情況.

by_hour_1[["West","East","total"]].plot()
plt.xlabel("time")
plt.ylabel("mean of bikes")
12.png

和第一個(gè)聚類(lèi)相比,這個(gè)結(jié)果沒(méi)有出現(xiàn)明顯的波峰破停,大約在下午兩年的時(shí)候翅楼,自行車(chē)數(shù)量最多,好吧真慢,你肯定在猜測(cè)毅臊,這些日子是不是周末呢。大家吃過(guò)中飯黑界,騎車(chē)出來(lái)浪呢管嬉。為了搞清楚這些疑問(wèn),我們計(jì)算每個(gè)日期對(duì)應(yīng)的星期幾朗鸠。

plt.scatter(xpca[:,0],xpca[:,1],c = data_pivoted.index.dayofweek,cmap=plt.cm.get_cmap('jet', 7))
cb = plt.colorbar(ticks=range(7))
cb.set_ticklabels(['Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat', 'Sun'])
13.png

我們可以得出這樣的結(jié)論蚯撩,周六和周末,人們對(duì)自行車(chē)的使用有著很大的相似烛占,而周一到周五人們對(duì)自行車(chē)的使用也很相似胎挎,結(jié)合前面的聚類(lèi)結(jié)果
但是我們很奇怪的發(fā)現(xiàn)一個(gè)現(xiàn)象:有一些工作日的人們表現(xiàn)的和周末很相似,這些特別的日子具體是神馬日子的忆家,是不是節(jié)假日犹菇,另外和其他的工作日相比,周五表現(xiàn)的和周末很曖昧不清,這我們需要思考
另外在工作日的聚類(lèi)中芽卿,我們發(fā)現(xiàn)竟然沒(méi)有一個(gè)非工作日的(至少?gòu)膱D中沒(méi)有發(fā)現(xiàn)特例)揭芍,結(jié)果真是這樣嗎,我們需要進(jìn)一步的使用數(shù)據(jù)進(jìn)行分析

days = ['Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat', 'Sun']     #分別對(duì)應(yīng)“dayofweek”:[0,1,2,3,4,5,6]
def get_weekday(index):
    return days[index.dayofweek]
data_new_0["weekday"] = data_new_0.index.map(get_weekday)
data_new_0_exception = data_new_0[data_new_0.weekday.isin(["Sat","Sun"])]#在第一個(gè)聚類(lèi)中蹬竖,找特例,換句話說(shuō)沼沈,就是找出這樣的周六周末,人們對(duì)自行車(chē)的使用像工作日一樣
len(data_new_0_exception)   #結(jié)果和我們?cè)谏蠄D可視化的結(jié)果一樣币厕,沒(méi)有一個(gè)周六周末列另,人們使用自行車(chē)像工作日一樣
out:0

沒(méi)有一個(gè)周末,人們使用自行車(chē)和工作日一樣旦装,這也能從側(cè)面看出页衙,看來(lái)美帝真心不加班啊,不像天朝,加班累成狗店乐。

data_new_1['weekday'] = data_new_1.index.map(get_weekday)
data_new_1_exception = data_new_1[data_new_1.weekday.isin(['Mon', 'Tues', 'Wed', 'Thurs', 'Fri'])]#在第2個(gè)聚類(lèi)中艰躺,找特例
len(data_new_1_exception):
out:600

倒是有不少天,人們?cè)诠ぷ魅盏臅r(shí)候和周六周末使用自行車(chē)的習(xí)慣差不多眨八,我們猜測(cè)這些工作日很可能是假期腺兴,真的是這樣嗎,我們來(lái)驗(yàn)證一下廉侧。

date = set(data_new_1_exception.index.date)
#列出從2012-2016年页响,美國(guó)的所有假期
from pandas.tseries.holiday import USFederalHolidayCalendar
cal = USFederalHolidayCalendar()
holidays = cal.holidays('2012', '2016', return_name=True)
holidays_all = pd.concat([holidays,
                         "Day Before " + holidays.shift(-1, 'D'),
                         "Day After " + holidays.shift(1, 'D')])
holidays_all = holidays_all.sort_index()
holidays_all.ix[(date)]

不出意外,這些表現(xiàn)反常的工作日段誊,全部都在假期中闰蚕。大家都放假了,當(dāng)然開(kāi)始騎車(chē)去浪了

最后一個(gè)問(wèn)題连舍,為什么周五的數(shù)據(jù)没陡,可視化的時(shí)候,有幾個(gè)點(diǎn)表現(xiàn)的特別反常索赏,這幾天究竟發(fā)生了什么

fri_day = (data_pivoted.index.dayofweek == 4)   #周5為true盼玄,其他為false
plt.scatter(xpca[:, 0], xpca[:, 1], c='gray', alpha=0.2)
plt.scatter(xpca[fri_day, 0], xpca[fri_day, 1], c='yellow');
15.png
weird_fridays = pivoted.index[fridays & (Xpca[:, 0] < -600)]weird_fridays
weird_fridays
out: Index([2013-05-17, 2014-05-16, 2015-05-15], dtype='object')

果然是,周五的這幾個(gè)奇異點(diǎn)潜腻,果然有情況强岸,我查閱了一下資料,這三天是一年一度的
自行車(chē)日砾赔。蝌箍。。暴心。妓盲。果然沒(méi)有無(wú)緣無(wú)故的愛(ài)

總結(jié)

關(guān)于西雅圖市人們使用自行車(chē)習(xí)慣的數(shù)據(jù)分析到此就結(jié)束了,數(shù)據(jù)蘊(yùn)含著很多信息等待我們?nèi)ネ诰蜃ㄆ铡S⑽倪^(guò)得去的話悯衬,建議直接看原文章,如果有不懂的話檀夹,再結(jié)合這中文譯文進(jìn)行參照筋粗,如果你對(duì)python和機(jī)器學(xué)習(xí),數(shù)據(jù)挖掘等感興趣炸渡,我們也可以一起學(xué)習(xí)娜亿,一起分享好玩的文章。

QQ 1527927373
EMAIL 1527927373@qq.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚌堵,一起剝皮案震驚了整個(gè)濱河市买决,隨后出現(xiàn)的幾起案子沛婴,更是在濱河造成了極大的恐慌,老刑警劉巖督赤,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘁灯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡躲舌,警方通過(guò)查閱死者的電腦和手機(jī)丑婿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)没卸,“玉大人枯冈,你說(shuō)我怎么就攤上這事“煳颍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵滩褥,是天一觀的道長(zhǎng)病蛉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)瑰煎,這世上最難降的妖魔是什么铺然? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮酒甸,結(jié)果婚禮上魄健,老公的妹妹穿的比我還像新娘。我一直安慰自己插勤,他們只是感情好沽瘦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著农尖,像睡著了一般析恋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盛卡,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天助隧,我揣著相機(jī)與錄音,去河邊找鬼滑沧。 笑死并村,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的滓技。 我是一名探鬼主播哩牍,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼令漂!你這毒婦竟也來(lái)了姐叁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎外潜,沒(méi)想到半個(gè)月后原环,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡处窥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年嘱吗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滔驾。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谒麦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哆致,到底是詐尸還是另有隱情绕德,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布摊阀,位于F島的核電站耻蛇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胞此。R本人自食惡果不足惜臣咖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漱牵。 院中可真熱鬧夺蛇,春花似錦、人聲如沸酣胀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闻镶。三九已至截型,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間儒溉,已是汗流浹背宦焦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顿涣,地道東北人波闹。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像涛碑,于是被迫代替她去往敵國(guó)和親精堕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容