共享單車數(shù)據(jù)可視化分析(Python/Seaborn)

項(xiàng)目數(shù)據(jù)來源于kaggle項(xiàng)目 Bike Share Demand鳄炉,使用Python對(duì)數(shù)據(jù)進(jìn)行了可視化分析:

共享單車項(xiàng)目分析_頁面_01.jpg
共享單車項(xiàng)目分析_頁面_02.jpg
共享單車項(xiàng)目分析_頁面_03.jpg
共享單車項(xiàng)目分析_頁面_04.jpg
共享單車項(xiàng)目分析_頁面_05.jpg

共享單車項(xiàng)目分析_頁面_06.jpg
共享單車項(xiàng)目分析_頁面_07.jpg
共享單車項(xiàng)目分析_頁面_08.jpg
共享單車項(xiàng)目分析_頁面_09.jpg
共享單車項(xiàng)目分析_頁面_10.jpg

分析過程代碼如下:

1. 提出問題
影響共享單車租用數(shù)量的因素有哪些队伟?影響程度如何?

2. 理解數(shù)據(jù)

import numpy as np
import pandas as pd

bike_train = pd.read_csv(".../train.csv")

bike_train.head()
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 3 13 16
1 2011/1/1 1:00 1 0 0 1 9.02 13.635 80 0 8 32 40
2 2011/1/1 2:00 1 0 0 1 9.02 13.635 80 0 5 27 32
3 2011/1/1 3:00 1 0 0 1 9.84 14.395 75 0 3 10 13
4 2011/1/1 4:00 1 0 0 1 9.84 14.395 75 0 0 1 1
bike_train.info()
<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.6+ KB

變量說明:

  • datatime 日期+時(shí)間
  • season 1=春 2=夏 3=秋 4=冬
  • holiday 1=節(jié)假日 0=非節(jié)假日
  • workingday 1=工作日 0=周末
  • weather 1=晴天多云 2=霧天陰天 3=小雪小雨 4=大雨大雪大霧
  • temp 氣溫?cái)z氏度
  • atemp 體感溫度
  • humidity 濕度
  • windspeed 風(fēng)速
  • casual 非注冊(cè)用戶個(gè)數(shù)
  • registered 注冊(cè)用戶個(gè)數(shù)
  • count 給定日期時(shí)間(每小時(shí))總租車人數(shù)

3.數(shù)據(jù)清洗

1)數(shù)據(jù)預(yù)處理:數(shù)據(jù)完整無缺失值
2)特征工程:從datetime中提取年、月达罗、日、時(shí)、星期等時(shí)間信息

import calendar

bike_train['date']=bike_train.datetime.apply(lambda x :x.split()[0])
bike_train['year']=bike_train.date.apply(lambda x:x.split("-")[0])
bike_train['month']=bike_train.date.apply(lambda x:x.split("-")[1])
bike_train['day']=bike_train.date.apply(lambda x:x.split("-")[2])
bike_train['hour']=bike_train.datetime.apply(lambda x: x.split()[1].split(":")[0])
bike_train['weekday'] = bike_train.datetime.apply(lambda x: calendar.day_name[pd.to_datetime(x).weekday()])
#把季節(jié)和天氣轉(zhuǎn)換成文字
bike_train['season']=bike_train.season.map({1: "Spring", 2 : "Summer", 3 : "Fall", 4 :"Winter" })
bike_train[:50:20]
datetime season holiday workingday weather temp atemp humidity windspeed casual registered count date year month day hour weekday
0 2011-01-01 00:00:00 Spring 0 0 1 9.84 14.395 81 0 3 13 16 40544 2011 1 1 0 Saturday
20 2011-01-01 20:00:00 Spring 0 0 2 16.4 20.455 87 16.9979 11 25 36 40544 2011 1 1 20 Saturday
40 2011-01-02 17:00:00 Spring 0 0 1 13.94 16.665 57 12.998 7 58 65 40545 2011 1 2 17 Sunday

4. 可視化分析

1)單車使用量在天氣維度上的分析(天氣燕酷、溫度籍凝、濕度和風(fēng)速相關(guān)性)

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

#租車輛與天氣的關(guān)系
fig = plt.subplots(figsize=(5,5))
sns.boxplot(data=bike_train, y='count', x='weather')

<matplotlib.axes._subplots.AxesSubplot at 0x1146cf2b0>
output_10_1.png

可以看到,整體租車量受天氣影響較為明顯苗缩,極端的天氣租車數(shù)量減少饵蒂。
4級(jí)天氣看起來有些異常,于是統(tǒng)計(jì)數(shù)據(jù)條目:

#統(tǒng)計(jì)各天氣數(shù)據(jù)數(shù)量
weather_count = pd.DataFrame(bike_train.assign(weather_count=0).groupby('weather').weather_count.apply(len).reset_index())
weather_count['weather']=weather_count.weather.map({1:"晴天酱讶、多云",2:"霧天退盯、陰天",3:"小學(xué)、小雪",4:"大風(fēng)泻肯、大雪渊迁、大雨"})
weather_count
weather weather_count
0 晴天、多云 7192
1 霧天灶挟、陰天 2834
2 小學(xué)琉朽、小雪 859
3 大風(fēng)、大雪膏萧、大雨 1

可以看到漓骚,4級(jí)天氣只有1條數(shù)據(jù)記錄,這種極端天氣情況出現(xiàn)的數(shù)據(jù)極少榛泛。

#使用量與溫度蝌蹂、濕度、風(fēng)速的關(guān)系
#繪制heatmap
corrMatt = bike_train[["temp","atemp","humidity","windspeed","count"]].corr()
mask = np.array(corrMatt)    
mask[np.tril_indices_from(mask)] = False 
fig = plt.figure(figsize=(10, 10))
sns.heatmap(corrMatt, mask=mask,square=True,annot=True)
output_16_1.png

溫度和使用量有正相關(guān)關(guān)系曹锨,濕度與使用量有負(fù)相關(guān)關(guān)系孤个,風(fēng)速和使用量幾乎不相關(guān)。

#繪制線性圖像
fig,(ax1,ax2,ax3) = plt.subplots(1,3, figsize=(12,5))
sns.regplot(x="temp", y="count", data=bike_train,ax=ax1)
sns.regplot(x="windspeed", y="count", data=bike_train,ax=ax2)
sns.regplot(x="humidity", y="count", data=bike_train,ax=ax3)
output_18_1.png

由圖像可看出沛简,使用量與溫度齐鲤、濕度和風(fēng)速的關(guān)系,相關(guān)性有限椒楣。

2)單車使用量在時(shí)間維度上的分析(月份给郊、季節(jié)、時(shí)間捧灰、星期等相關(guān)性)

#租車總量和工作日淆九、節(jié)假日的關(guān)系
fig,(ax1,ax2) = plt.subplots(1,2, figsize=(10,5))
sns.boxplot(data=bike_train, y='count', x='workingday',ax=ax1)
sns.boxplot(data=bike_train, y='count', x='holiday',ax=ax2)

ax1.set(xticklabels=['Not holiday','Holiday'])
ax2.set(xticklabels=['Weekend','Workday'])
output_21_1.png

總量來看,節(jié)假日和周末/工作日的租車數(shù)量基本相同毛俏。

fig,axes = plt.subplots(3,1, figsize=(12,20))
#租車輛按月份炭庙、年份統(tǒng)計(jì)
month_Aggregated = pd.DataFrame(bike_train.groupby(['year','month'])['count'].mean()).reset_index() 
sns.barplot(data=month_Aggregated,x="month",y="count",hue='year',ax=axes[0])
axes[0].set(xlabel='Month', ylabel='Avearage Count',title="Average Count By Month")

#每日租車輛按季節(jié)統(tǒng)計(jì)
hour_Aggregated1 = pd.DataFrame(bike_train.groupby(['hour','season'])['count'].mean()).reset_index()
sns.pointplot(data=hour_Aggregated1,x='hour',y='count',hue='season',hue_order=['Spring','Summer','Fall','Winter'],join=True, ax=axes[1])
axes[1].set(xlabel='Hour', ylabel='Avearage Count',title="Average Count By Hour Across Season")

#日租車輛按周統(tǒng)計(jì)
hour_Aggregated2 = pd.DataFrame(bike_train.groupby(['hour','weekday'])['count'].mean()).reset_index()
sns.pointplot(data=hour_Aggregated2,x='hour',y='count',hue='weekday',join=True,ax=axes[2])
axes[2].set(xlabel='Hour', ylabel='Avearage Count',title="Average Count By Hour Across weekday")

output_23_1.png

圖1可以看出2012年共享單車的使用量高于2011年,消費(fèi)人群增加了1.5~2倍煌寇。兩年內(nèi)租車量隨月份變化的趨勢(shì)相同焕蹄,6、7阀溶、8月有明顯的高需求腻脏。

圖2可以看出租車時(shí)間高峰為上午7-8點(diǎn)鸦泳,下午5-6點(diǎn),符合上下班通勤的時(shí)間范圍迹卢。季節(jié)上看辽故,春天的租車輛明顯少于其它三個(gè)季節(jié)。

圖3可以看出工作日租車輛主要為上下班時(shí)間腐碱,周末租車輛主要集中在10am-4pm之間。

3)單車使用量與注冊(cè)用戶/非注冊(cè)用戶的相關(guān)性

fig,axes=plt.subplots(2,1,figsize=(12,10))
hour_Transform=pd.melt(bike_train[['hour','casual','registered','weekday']],id_vars=['hour','weekday'],value_vars=['casual','registered'])
hour_Aggregated3=pd.DataFrame(hour_Transform.groupby(['hour','variable'])['value'].mean()).reset_index()
sns.pointplot(data=hour_Aggregated3,x='hour',y='value',hue='variable',hue_order=['casual','registered'],join=True,ax=axes[0])

weekday_Aggregated=pd.DataFrame(hour_Transform.groupby(['weekday','variable'])['value'].mean()).reset_index()
sns.barplot(data=weekday_Aggregated,x='weekday',y='value',hue='variable',order=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'],ax=axes[1])


output_26_1.png

注冊(cè)人數(shù)使用量明顯高于非注冊(cè)人數(shù)掉弛,
非會(huì)員casual主要是周末出行症见,為了游玩; 會(huì)員registered主要是為了周一到周五上班。

5. 總結(jié)

  • 時(shí)間:需求量最大的時(shí)間為夏殃饿、秋季工作日上谋作、下班時(shí)間,其次為周末10am-4pm乎芳。需求量最小的時(shí)間為每年1-3月遵蚜,時(shí)間集中在半夜/凌晨。
  • 天氣:除極端情況外(大風(fēng)奈惑、高溫吭净、低溫、強(qiáng)降水等)肴甸,天氣對(duì)租車量的影響不明顯寂殉。
  • 用戶類型:注冊(cè)用戶和普通用戶行為特征明顯,前者主要為工作日通勤使用原在,后者為節(jié)假日出游友扰。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市庶柿,隨后出現(xiàn)的幾起案子村怪,更是在濱河造成了極大的恐慌,老刑警劉巖浮庐,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甚负,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡兔辅,警方通過查閱死者的電腦和手機(jī)腊敲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來维苔,“玉大人碰辅,你說我怎么就攤上這事〗槭保” “怎么了没宾?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵凌彬,是天一觀的道長。 經(jīng)常有香客問我循衰,道長铲敛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任会钝,我火速辦了婚禮伐蒋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘迁酸。我一直安慰自己先鱼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布奸鬓。 她就那樣靜靜地躺著焙畔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪串远。 梳的紋絲不亂的頭發(fā)上宏多,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音澡罚,去河邊找鬼伸但。 笑死,一個(gè)胖子當(dāng)著我的面吹牛始苇,可吹牛的內(nèi)容都是我干的砌烁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼催式,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼函喉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荣月,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤管呵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后哺窄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捐下,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年萌业,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坷襟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡生年,死狀恐怖婴程,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抱婉,我是刑警寧澤档叔,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布桌粉,位于F島的核電站,受9級(jí)特大地震影響衙四,放射性物質(zhì)發(fā)生泄漏铃肯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一传蹈、第九天 我趴在偏房一處隱蔽的房頂上張望押逼。 院中可真熱鬧,春花似錦卡睦、人聲如沸宴胧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乞娄,卻和暖如春瞬逊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仪或。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工确镊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人范删。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓蕾域,卻偏偏與公主長得像,于是被迫代替她去往敵國和親到旦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旨巷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • 01 目的 手里有一份A市近兩年來共享單車的租車數(shù)據(jù),字段豐富添忘,可挖掘的東西蠻多的采呐,真是讓人蠢蠢欲動(dòng)~~ 那么今天...
    Sudden閱讀 3,667評(píng)論 2 6
  • 一. 姐發(fā)現(xiàn)斧吐,最近大家看得熱門電影,題材好像都還蠻嚴(yán)肅的仲器。 像姐這般愛快樂的girl煤率,那是斷斷然要悶悶一下。 所以...
    娜就醬吧閱讀 393評(píng)論 0 0
  • 01 “爸裳涛!你放我出去木张!我不去上海工作,我不去端三!”奧鈴拼命捶打著門背舷礼。 “你給我好好呆著!去西藏郊闯,你想都別想妻献!”老...
    覓羽閱讀 673評(píng)論 0 0
  • 最近在接觸AI的事情,Google到很多破解版的matlab团赁,大多數(shù)都存到百度網(wǎng)盤上了育拨,為此還買了一個(gè)月VIP。欢摄。...
    Jogis閱讀 1,124評(píng)論 0 0