畢業(yè)設(shè)計(jì) 大數(shù)據(jù)共享單車數(shù)據(jù)分析與可視化
0 前言
?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。
為了大家能夠順利以及最少的精力通過(guò)畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天要分享的是
?? ?基于大數(shù)據(jù)的共享單車數(shù)據(jù)分析與可視化
??學(xué)長(zhǎng)這里給一個(gè)題目綜合評(píng)分(每項(xiàng)滿分5分)
難度系數(shù):3分
工作量:3分
創(chuàng)新點(diǎn):4分
畢設(shè)幫助,選題指導(dǎo),技術(shù)解答,歡迎打擾,見B站個(gè)人主頁(yè)
https://space.bilibili.com/33886978
1 課題背景
前幾年共享單車項(xiàng)目在國(guó)內(nèi)大熱,五顏六色的單車一夜之間遍布城市的各個(gè)角落。其實(shí),早在3年前國(guó)外就有類似的項(xiàng)目興起:通過(guò)歷史用車記錄結(jié)合天氣等數(shù)據(jù)預(yù)測(cè)共享單車項(xiàng)目在華盛頓的需求
數(shù)據(jù)的特征解釋

2 數(shù)據(jù)清洗
導(dǎo)庫(kù)
import datetime
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from pyecharts.charts import *
import pyecharts.options as opts
from pyecharts.faker import Faker
from pyecharts.commons.utils import JsCode
讀數(shù)據(jù)
df=pd.read_csv('data.csv')
提出假設(shè)
這里我們將研究決定單車租借的因素,上面給出了各個(gè)特征的解釋,首先我們先大膽的提出假設(shè):
租借數(shù)量可能時(shí)間有關(guān)
.租借數(shù)量可能與天氣的好壞有著很大的聯(lián)系
租借的數(shù)量與是否為工作日有關(guān)
租借的數(shù)量可能與風(fēng)速有關(guān)
查看有無(wú)缺失值和數(shù)據(jù)類型的情況

發(fā)現(xiàn)并無(wú)缺失值,不過(guò)時(shí)間的數(shù)據(jù)類型是object 需要轉(zhuǎn)化為時(shí)間類型,同時(shí)為了更方便的分析數(shù)據(jù),將datetime拆為 Year Month Weekday Hour
特征提取
#數(shù)據(jù)預(yù)處理
data['season'] = data['season'].map({1:'spring',2:'summer',3:'fall',4:'winner'})
data['weather'] = data['weather'].map({1:'Good',2:'Normal',3:'Bad',4:'ver Bad'})#特征衍生
data['datetime'] = pd.to_datetime(data['datetime'])
data['year'] = data.datetime.apply(lambda d:d.year)
data['month'] = data.datetime.apply(lambda d:d.month)
data['day'] = data.datetime.apply(lambda d:d.day)
data['hour'] = data.datetime.apply(lambda d:d.hour)
data['minute'] = data.datetime.apply(lambda d:d.minute)
data.head()

*查看一下各個(gè)特征的相關(guān)性**

可以看出與count正相關(guān)最大的是temp 和atemp,holiday的相關(guān)性最小
3 數(shù)據(jù)可視化
通過(guò)Matplotlib、Seaborn等工具可視化理解數(shù)據(jù),分析特征與標(biāo)簽之間的相關(guān)性。
熱力圖
為了更直觀的表現(xiàn)出數(shù)據(jù)的背后意義,我們需要用可視化來(lái)做輔助,首先將上述的相關(guān)系數(shù)的數(shù)據(jù)可視化為熱力圖的呈現(xiàn)方式

整體特征分布
sns.set_style('ticks')
plt.figure(figsize=(10,6))
sns.kdeplot(data['count'])
sns.despine(left=True)
plt.grid(linestyle='--',alpha=0.5,axis='y')
plt.title('Demand Distribution',fontsize=15)
plt.xlabel('Demand',fontsize=13)
plt.ylabel('Frequence',fontsize=13)

查看2011-2012間的單車租借情況

1.圖一是2011-2012年的每月租借情況,較去年租借數(shù)量,2012同比上升較大,圖示2012的面積是2011的2倍以上,各月的增長(zhǎng)情況相類似,特別11-12月份成下坡趨勢(shì),猜測(cè)可能是溫度的原因,季節(jié)屬于冬季
2.圖二是節(jié)假日和非節(jié)假日的租借數(shù)量的箱形圖,不難看出,租借的數(shù)量的離散型情況相似。
3.圖三是每星期的離散情況,周末有異常值,數(shù)量并不是很多,可能與活動(dòng)有關(guān),增加了出行的人數(shù)

上述兩圖分別是季節(jié)和工作日的線形圖
1.圖一中,各季節(jié)的租借趨勢(shì)相同,同時(shí)秋季最高,春季最低,租借的高峰時(shí)間7-9和16-18點(diǎn)正好是早晚高峰時(shí)間
2.圖二也呈現(xiàn)出形式的趨勢(shì),在工作日租借的高峰時(shí)間7-9和16-18點(diǎn),同時(shí)與此相反,非工作日,11-16點(diǎn)的租借人數(shù)最高,符合睡覺睡到自然醒。
附上代碼
#繪制圖像
fig,[ax1,ax2] = plt.subplots(2,1,figsize=(12,15))
plt.subplots_adjust(hspace=0.3)
Month_tendency_2011.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',ax=ax1)
ax1.set_title('2011 Demand Tendency',fontsize=15)
ax1.grid(linestyle='--',alpha=0.8)
ax1.set_ylim(0,150000)
ax1.set_xlabel('Month',fontsize=13)
ax1.set_ylabel('Count',fontsize=13)
Month_tendency_2012.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',ax=ax2)
ax2.set_title('2012 Demand Tendency',fontsize=15)
ax2.grid(linestyle='--',alpha=0.8)
ax2.set_ylim(0,150000)
ax2.set_xlabel('Month',fontsize=13)
ax2.set_ylabel('Count',fontsize=13)
sns.despine(left=True)
天氣對(duì)于租借數(shù)量的影響
Weather_Demand=data.groupby(['weather','day'])[['count']].sum()
Weather_Demand.reset_index(inplace=True)
plt.figure(figsize=(12,6))
sns.stripplot(x='weather',y='count',data=Weather_Demand,palette='Set2',jitter=True,alpha=1.0)
sns.despine(left=True)
plt.xlabel('Season',fontsize=13)
plt.ylabel('Count',fontsize=13)
plt.title('Demand Distribution by Weather',fontsize=15)


上述兩圖分別是4中天氣情況下的租借總數(shù),平均數(shù)和不同風(fēng)速下的租借總數(shù),平均數(shù)
1.晴天多云的租借總數(shù)最多平均數(shù)也最多,天氣越好租借的概率越大,大雨大雪的租借平均數(shù)反倒上升,取出這個(gè)天氣下的數(shù)據(jù),發(fā)現(xiàn)只有一例,為特殊情況,不予分析
2.風(fēng)速對(duì)于租借的影響還是很大的,風(fēng)速超過(guò)25就少有租借情況,畢竟騎起來(lái)太累了,風(fēng)速在10以下租借情況良好,同時(shí)當(dāng)風(fēng)速超過(guò)25后,平均租借數(shù)量上升,圖中也能看出這種情況下的租借數(shù)量很少,不做考慮
濕度與溫度對(duì)于租借數(shù)量的影響
plt.figure(figsize=(10,8))
sns.kdeplot(data['temp'],data['atemp'],shade=True,shade_lowest=False,cut=10,cmap='YlGnBu',cbar=True)
sns.despine(left=True)
plt.grid(linestyle='--',alpha=0.4)
plt.xlim(0,50)
plt.ylim(0,50)
plt.xlabel('Temperature',fontsize=13)
plt.ylabel('Atemp',fontsize=13)
plt.title('correlation of temp and atemp',fontsize=15)# 溫度與濕度的關(guān)系度量
plt.figure(figsize=(10,8))
sns.kdeplot(data['temp'],data['humidity'],shade=True,shade_lowest=False,cut=10,cmap='YlGnBu',cbar=True)
sns.despine(left=True)
plt.grid(linestyle='--',alpha=0.4)
plt.xlim(0,40)
plt.ylim(0,110)
plt.xlabel('Temperature',fontsize=13)
plt.ylabel('Humidity',fontsize=13)
plt.title('correlation of temp and humidity',fontsize=15)


上述兩圖為溫度與濕度對(duì)于租借情況的影響,溫度和租借數(shù)量呈現(xiàn)正相關(guān),濕度呈現(xiàn)負(fù)相關(guān),租借數(shù)量在15-30度適應(yīng)性最好,30度到35度租借數(shù)量沒(méi)有低于100的情況,不多租借的數(shù)量不是很多,顏色較淺,濕度在30-60適應(yīng)性最好
注冊(cè)用戶與未注冊(cè)用戶
# 衍生特征
data['dif']=data['registered']-data['casual'] # 衍生特征注冊(cè)用戶與非注冊(cè)用戶的騎行需求差值
fig,axes=plt.subplots(2,2,figsize=(20,8))
plt.subplots_adjust(hspace=0.3,wspace=0.1)
# 繪制子圖1:月度差異
Month_Dif =data.groupby('month')[['casual','registered']].mean()
Month_Dif.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',ax=axes[0,0])
axes[0,0].set_title('Month Demand Tendency Dif',fontsize=15)
axes[0,0].grid(linestyle='--',alpha=0.8)
axes[0,0].set_xlabel('Month',fontsize=13)
axes[0,0].set_ylabel('Count',fontsize=13)
#繪制子圖2:小時(shí)差異
Hour_Dif = data.groupby('hour')[['casual','registered']].mean()
Hour_Dif.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',ax=axes[0,1])
axes[0,1].set_title('Hour Demand Tendency Dif',fontsize=15)
axes[0,1].grid(linestyle='--',alpha=0.8)
axes[0,1].set_xlabel('Hour',fontsize=13)
axes[0,1].set_ylabel('Count',fontsize=13)
# 繪制子圖3:工作日差異
H2_1 = data[data.workingday==1].groupby('hour')[['casual','registered']].mean() # 工作日
H2_0 = data[data.workingday==0].groupby('hour')[['casual','registered']].mean() # 非工作日
H2_1.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',ax=axes[1,0])
axes[1,0].set_title('Workingday Hour Demand Dif',fontsize=15)
axes[1,0].grid(linestyle='--',alpha=0.8)
axes[1,0].set_xlabel('Hour',fontsize=13)
axes[1,0].set_ylabel('Count',fontsize=13)
# 繪制子圖4:非工作日差異
H2_0.plot(kind='line',linestyle='--',linewidth=2,colormap='Set1',ax=axes[1,1])
axes[1,1].set_title('Holiday Hour Demand Dif',fontsize=15)
axes[1,1].grid(linestyle='--',alpha=0.8)
axes[1,1].set_xlabel('Hour',fontsize=13)
axes[1,1].set_ylabel('Count',fontsize=13)
sns.despine(left=True)

上面四幅為注冊(cè)用戶與非注冊(cè)用戶在各因素下的差異組合圖(從左到右排序):
p1是月度差異圖,整體趨勢(shì)相同,注冊(cè)用戶遠(yuǎn)高于非注冊(cè)用戶;
p2是小時(shí)差異圖,注冊(cè)用戶的小時(shí)規(guī)律明顯,非注冊(cè)用戶則只在12am~5pm存在峰值,整體差異較大;
p3是工作日差異圖,注冊(cè)用戶工作日小時(shí)規(guī)律明顯,二非注冊(cè)用戶趨勢(shì)平緩;
p4是非工作日差異圖,非工作日兩者差異相較于其他因素差異較小,且趨勢(shì)相同。
總體來(lái)說(shuō),注冊(cè)用戶需求遠(yuǎn)高于非注冊(cè)用戶,注冊(cè)用戶的使用規(guī)律明顯,而非注冊(cè)用戶受其他因素的影響相對(duì)較弱。
4 總結(jié):
通過(guò)以上的可視化分析,我們可以清晰的發(fā)現(xiàn)印象租借數(shù)量的因素
1.溫度對(duì)于租借的影響較大,15-30度間,租借數(shù)量最多,呈正相關(guān)
2.濕度在30-60的時(shí)候租借數(shù)量最大,呈負(fù)相關(guān)
3.早晚高峰時(shí)間段租借數(shù)量最多
4.早晚高峰時(shí)間段租借的用戶較多為注冊(cè)用戶,注冊(cè)用戶周末租借量減少,相反,非租借用戶周末租借量增加
5.天氣情況和風(fēng)速對(duì)于租借也有較大的影響,晴天租借最多,大雨大雪租借最少,風(fēng)速在10以下租借的數(shù)量最多
6.共享單車前景良好,12較11年租借數(shù)量有增加2倍之多
5 最后
畢設(shè)幫助,選題指導(dǎo),技術(shù)解答,歡迎打擾,見B站個(gè)人主頁(yè)
https://space.bilibili.com/33886978