0 前言
?? 這兩年開始畢業(yè)設計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設題目缺少創(chuàng)新和亮點,往往達不到畢業(yè)答辯的要求,這兩年不斷有學弟學妹告訴學長自己做的項目系統(tǒng)達不到老師的要求。
為了大家能夠順利以及最少的精力通過畢設,學長分享優(yōu)質畢業(yè)設計項目,今天要分享的是
?? 基于大數(shù)據(jù)的共享單車數(shù)據(jù)分析與可視化
??學長這里給一個題目綜合評分(每項滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點:4分
1 課題背景
前幾年共享單車項目在國內大熱,五顏六色的單車一夜之間遍布城市的各個角落。其實,早在3年前國外就有類似的項目興起:通過歷史用車記錄結合天氣等數(shù)據(jù)預測共享單車項目在華盛頓的需求
數(shù)據(jù)的特征解釋
2 數(shù)據(jù)清洗
導庫
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ù)量可能時間有關
- .租借數(shù)量可能與天氣的好壞有著很大的聯(lián)系
- 租借的數(shù)量與是否為工作日有關
- 租借的數(shù)量可能與風速有關
查看有無缺失值和數(shù)據(jù)類型的情況
發(fā)現(xiàn)并無缺失值,不過時間的數(shù)據(jù)類型是object 需要轉化為時間類型,同時為了更方便的分析數(shù)據(jù),將datetime拆為 Year Month Weekday Hour
特征提取
#數(shù)據(jù)預處理
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()
查看一下各個特征的相關性*
可以看出與count正相關最大的是temp 和atemp,holiday的相關性最小
3 數(shù)據(jù)可視化
通過Matplotlib、Seaborn等工具可視化理解數(shù)據(jù),分析特征與標簽之間的相關性。
熱力圖
為了更直觀的表現(xiàn)出數(shù)據(jù)的背后意義,我們需要用可視化來做輔助,首先將上述的相關系數(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倍以上,各月的增長情況相類似,特別11-12月份成下坡趨勢,猜測可能是溫度的原因,季節(jié)屬于冬季
2.圖二是節(jié)假日和非節(jié)假日的租借數(shù)量的箱形圖,不難看出,租借的數(shù)量的離散型情況相似。
3.圖三是每星期的離散情況,周末有異常值,數(shù)量并不是很多,可能與活動有關,增加了出行的人數(shù)
上述兩圖分別是季節(jié)和工作日的線形圖
1.圖一中,各季節(jié)的租借趨勢相同,同時秋季最高,春季最低,租借的高峰時間7-9和16-18點正好是早晚高峰時間
2.圖二也呈現(xiàn)出形式的趨勢,在工作日租借的高峰時間7-9和16-18點,同時與此相反,非工作日,11-16點的租借人數(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)
天氣對于租借數(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ù)和不同風速下的租借總數(shù),平均數(shù)
1.晴天多云的租借總數(shù)最多平均數(shù)也最多,天氣越好租借的概率越大,大雨大雪的租借平均數(shù)反倒上升,取出這個天氣下的數(shù)據(jù),發(fā)現(xiàn)只有一例,為特殊情況,不予分析
2.風速對于租借的影響還是很大的,風速超過25就少有租借情況,畢竟騎起來太累了,風速在10以下租借情況良好,同時當風速超過25后,平均租借數(shù)量上升,圖中也能看出這種情況下的租借數(shù)量很少,不做考慮
濕度與溫度對于租借數(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)
# 溫度與濕度的關系度量
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)
上述兩圖為溫度與濕度對于租借情況的影響,溫度和租借數(shù)量呈現(xiàn)正相關,濕度呈現(xiàn)負相關,租借數(shù)量在15-30度適應性最好,30度到35度租借數(shù)量沒有低于100的情況,不多租借的數(shù)量不是很多,顏色較淺,濕度在30-60適應性最好
注冊用戶與未注冊用戶
# 衍生特征
data['dif']=data['registered']-data['casual'] # 衍生特征注冊用戶與非注冊用戶的騎行需求差值
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:小時差異
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)
上面四幅為注冊用戶與非注冊用戶在各因素下的差異組合圖(從左到右排序):
p1是月度差異圖,整體趨勢相同,注冊用戶遠高于非注冊用戶;
p2是小時差異圖,注冊用戶的小時規(guī)律明顯,非注冊用戶則只在12am~5pm存在峰值,整體差異較大;
p3是工作日差異圖,注冊用戶工作日小時規(guī)律明顯,二非注冊用戶趨勢平緩;
p4是非工作日差異圖,非工作日兩者差異相較于其他因素差異較小,且趨勢相同。
總體來說,注冊用戶需求遠高于非注冊用戶,注冊用戶的使用規(guī)律明顯,而非注冊用戶受其他因素的影響相對較弱。
4 總結:
通過以上的可視化分析,我們可以清晰的發(fā)現(xiàn)印象租借數(shù)量的因素
1.溫度對于租借的影響較大,15-30度間,租借數(shù)量最多,呈正相關
2.濕度在30-60的時候租借數(shù)量最大,呈負相關
3.早晚高峰時間段租借數(shù)量最多
4.早晚高峰時間段租借的用戶較多為注冊用戶,注冊用戶周末租借量減少,相反,非租借用戶周末租借量增加
5.天氣情況和風速對于租借也有較大的影響,晴天租借最多,大雨大雪租借最少,風速在10以下租借的數(shù)量最多
6.共享單車前景良好,12較11年租借數(shù)量有增加2倍之多文章來源:http://www.zghlxwxcb.cn/news/detail-839155.html
5 最后
?? 選題指導, 項目分享: https://gitee.com/yaa-dc/warehouse-1/blob/master/python/README.md文章來源地址http://www.zghlxwxcb.cn/news/detail-839155.html
到了這里,關于大數(shù)據(jù)畢設項目 - 基于大數(shù)據(jù)的共享單車數(shù)據(jù)分析與可視化的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!