本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理
以下文章來源于碧茂大資料 ,作者碧茂大資料
明確三個步驟:
- 確定問題,選擇圖形
- 轉換資料,應用函式
- 引數設定,一目了然
下面,我們通過案例來進行演示:
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt #匯入plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')#忽略警告
加載資料
資料采用kaggle中的共享單車專案,比賽提供了跨越兩年的每小時共享單車租賃資料,包含天氣資訊和日期資訊,
欄位說明
- datetime(日期) - hourly date + timestamp
- season(季節) - 1 = spring, 2 = summer, 3 = fall, 4 = winter
- holiday(是否假日) - whether the day is considered a holiday
- workingday(是否作業日) - whether the day is neither a weekend nor holiday
- weather(天氣等級)
- Clear, Few clouds, Partly cloudy 清澈,少云,多云,
- Mist + Cloudy, Mist + Broken clouds, Mist + Few clouds, Mist 霧+陰天,霧+碎云、霧+少云、霧
- Light Snow, Light Rain + Thunderstorm + Scattered clouds, Light Rain + Scattered clouds 小雪、小雨+雷暴+多云,小雨+云
- Heavy Rain + Ice Pallets + Thunderstorm + Mist, Snow + Fog 暴雨+冰雹+雷暴+霧,雪+霧
- temp(溫度) - temperature in Celsius
- atemp(體感溫度) - "feels like" temperature in Celsius
- humidity(相對濕度) - relative humidity
- windspeed(風速) - wind speed
- casual(臨時租賃數量) - number of non-registered user rentals initiated
- registered(會員租賃數量) - number of registered user rentals initiated
- count(總租賃數量) - number of total rentals
- date(日期) - 由datetime拆分得到
- hour(小時)-由datetime拆分得到
- year(年份)-由datetime拆分得到
- month(月份)-由datetime拆分得到
- weeekday(周幾)-由datetime拆分得到
- windspeed_rfr(經過隨機森林樹填充0值得到的風速)
#讀取資料
#Bikedata = https://www.cnblogs.com/hhh188764/archive/2020/10/16/pd.read_csv('./Bike.csv')
Bikedata.head()
#查看描述統計
Bikedata.describe()
#接下來,我們通過相關系數的大小來依次對特征進行可視化分析
#首先,列出相關系數矩陣:df.corr()
corrdf = Bikedata.corr()
corrdf
大致可以看出:會員在作業日出行較多,節假日次數減少,而臨時用戶相反,第一季度出行人數總體偏低,出行人數受天氣影響較大,會員在每天早晚有兩個高峰期,對應上下班時間;非會員在下午出行較密集 風速對出行人數有較大的影響 相對濕度,溫度和體感溫度對非會員出行影響較大,對會員出行影響較小,
#接下來,我們通過相關系數的大小來依次對特征進行可視化分析
#首先,列出相關系數矩陣:df.corr()
corrdf = Bikedata.corr()
corrdf
#各特征按照與租賃總量count的相關系數大小進行排序
corrdf['count'].sort_values(ascending=False)
count 1.000000
registered 0.966209
casual 0.704764
hour 0.405437
temp 0.385954
atemp 0.381967
year 0.234959
month 0.164673
season 0.159801
windspeed_rfr 0.111783
windspeed 0.106074
weekday 0.022602
holiday 0.002978
workingday -0.020764
weather -0.127519
humidity -0.317028
Name: count, dtype: float64
可見,特征對租賃總量的影響力為:
時段>溫度>濕度>年份>月份>季節>天氣>風速>作業日>節假日
對特征逐項分析
首先對時段進行分析
- 第一步
提出問題:租賃總量對應濕度的變化趨勢
適合圖形:因為濕度屬于連續性數值變數,我們可以選擇折線圖反應變化趨勢
- 第二步
轉換資料:我們需要一個二維資料框,按照溫度變化排序,取對應的三個租賃數的平均值
應用函式:直接應用plt的plot函式即可完成折線圖
figure,axes = plt.subplots(1,2,sharey=True)#設定一個1*2的畫布,且共享y軸
workingday_df.plot(figsize=(15,5),title='The average number of rentals initiated per hour in the working day',ax=axes[0])
nworkingday_df.plot(figsize=(15,5),title='The average number of rentals initiated per hour in the nworking day',ax=axes[1])
<matplotlib.axes._subplots.AxesSubplot at 0xe452940>
- 第三步:設定引數
figure,axes = plt.subplots(1,2,sharey=True)#設定一個1*2的畫布,且共享y軸
workingday_df.plot(figsize=(15,5),title='The average number of rentals initiated per hour in the working day',ax=axes[0])
nworkingday_df.plot(figsize=(15,5),title='The average number of rentals initiated per hour in the nworking day',ax=axes[1])
<matplotlib.axes._subplots.AxesSubplot at 0xe452940>
可以看出:
- 在作業日,會員出行對應兩個很明顯的早晚高峰期,并且在中午會有一個小的高峰,可能對應中午外出就餐需求;
- 作業日非會員用戶出行高峰大概在下午三點;
- 作業榷訓員出行次數遠多于非會員用戶;
- 在周末,總體出行趨勢一致,大部分用車發生在11-5點這段時間,早上五點為用車之最,
對溫度進行分析
- 第一步
提出問題:租賃總量對應濕度的變化趨勢
適合圖形:因為濕度屬于連續性數值變數,我們可以選擇折線圖反應變化趨勢
- 第二步
轉換資料:我們需要一個二維資料框,按照溫度變化排序,取對應的三個租賃數的平均值
應用函式:直接應用plt的plot函式即可完成折線圖
- 第三步
引數設定:只需要設定折線圖的標題,其他引數默認
temp_df = Bikedata.groupby(['temp'],as_index='True').agg({'count':'mean','registered':'mean','casual':'mean'})
temp_df.plot(title = 'The average number of rentals initiated per hour changes with the temperature')
<matplotlib.axes._subplots.AxesSubplot at 0xe57d7f0>
- 隨著溫度的升高,租賃數量呈上升趨勢;
- 在溫度達到35度時,因天氣炎熱,總體數量開始下降;
- 在溫度在4度時,租賃數達到最低點;
濕度對租賃數量的影響
- 第一步
提出問題:租賃總量對應濕度的變化趨勢
適合圖形:因為濕度屬于連續性數值變數,我們可以選擇折線圖反應變化趨勢
- 第二步
轉換資料:我們需要一個二維資料框,按照溫度變化排序,取對應的三個租賃數的平均值
應用函式:直接應用plt的plot函式即可完成折線圖
- 第三步
引數設定:只需要設定折線圖的標題,其他引數默認
humidity_df = Bikedata.groupby(['humidity'],as_index=True).agg({'count':'mean','registered':'mean','casual':'mean'})
humidity_df.plot(title='Average number of rentals initiated per hour in different humidity')
<matplotlib.axes._subplots.AxesSubplot at 0xe582400>
可以觀察到在濕度20左右租賃數量迅速達到高峰值,此后緩慢遞減,
年份,月份和季節作圖方法類似,都采用折線圖繪制,這里省略,
查看不同天氣對出行情況的影響
- 第一步
提出問題:租賃總量對應濕度的變化趨勢
適合圖形:因為天氣情況屬于數值型分類變數,我們可以選擇柱形圖觀察數量分布
- 第二步
轉換資料:我們需要一個二維資料框,按照天氣情況對租賃數量取平均值
應用函式:應用plt的plot.bar函式繪制組合柱形圖
- 第三步
引數設定:只需要設定折線圖的標題,其他引數默認
weather_df = Bikedata.groupby(['weather'],as_index=True).agg({'registered':'mean','casual':'mean'})
weather_df.plot.bar(stacked=True,title='Average number of rentals initiated per hour in different weather')
<matplotlib.axes._subplots.AxesSubplot at 0xe7e0a90>
觀察到天氣等級為4時,平均出行人數比天氣等級為2時還要高,這不符合常理
我們查看一下天氣等級為4的詳細情況
count_weather = Bikedata.groupby('weather')
count_weather[['casual','registered','count']].count()
天氣狀況為4級的只有一天,我們把資料列印出來查看一下
Bikedata[Bikedata['weather']==4]
時間為作業日的下午六點鐘,屬于晚高峰例外資料,不具有代表性,
會員用戶和臨時用戶在整體用戶中占比
- 第一步
提出問題:查看會員用戶和臨時用戶在整體用戶中的比例
適合圖形:查看占比,適合用餅圖pie
- 第二步
轉換資料:需要一個二維資料框,按天數取兩種用戶的平均值
應用函式:應用plt的plot.pie函式繪制餅圖
- 第三步
引數設定:這是資料標簽和類別標簽
#考慮到相同日期是否作業日,星期幾,以及所屬年份等資訊是一樣的,把租賃資料按天求和,其它日期類資料取平均值
day_df = Bikedata.groupby(['date'], as_index=False).agg({'casual':'sum','registered':'sum','count':'sum', 'workingday':'mean','weekday':'mean','holiday':'mean','year':'mean'})
day_df.head()
#按天取兩種型別用戶平均值
number_pei=day_df[['casual','registered']].mean()
number_pei
casual 517.411765
registered 2171.067031
dtype: float64
#繪制餅圖
plt.axes(aspect='equal')
plt.pie(number_pei, labels=['casual','registered'], autopct='%1.1f%%', pctdistance=0.6 , labeldistance=1.05 , radius=1 )
plt.title('Casual or registered in the total lease')
Text(0.5,1,'Casual or registered in the total lease')
總結
- 要清楚自己想表達什么,有了明確的問題,選擇合適的圖形,然后按照需求從整體資料中選擇自己需要的資料,查閱資料了解函式的引數設定,最后完成圖形的繪制
- matplotlib是python繪圖的基礎,也是其他拓展包的基礎,認真學習matplotlib的常用圖形和引數是很有必要的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/174414.html
標籤:其他
