1. 程式人生 > 實用技巧 >Python資料視覺化實戰講解

Python資料視覺化實戰講解

前言

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理。

開運張 | 作者

知乎專欄 | 來源

https://zhuanlan.zhihu.com/p/55642042

三個步驟:

  • 確定問題,選擇圖形
  • 轉換資料,應用函式
  • 引數設定,一目瞭然

首先對時段進行分析

  • 第一步

提出問題:租賃總量對應溼度的變化趨勢

適合圖形:因為溼度屬於連續性數值變數,我們可以選擇折線圖反應變化趨勢

  • 第二步

轉換資料:我們需要一個二維資料框,按照溫度變化排序,取對應的三個租賃數的平均值

應用函式:直接應用plt的plot函式即可完成折線圖

workingday_df = Bikedata[Bikedata['workingday']==1]#t
workingday_df = workingday_df.groupby(['hour'],as_index=True).agg({'count':'mean','registered':'mean','casual':'mean'})

nworkingday_df = Bikedata[Bikedata['workingday']==0]
nworkingday_df = nworkingday_df.groupby(['hour'],as_index=True).agg({'count':'mean','registered':'mean','casual':'mean'})
nworkingday_df.head()

  • 第三步:設定引數
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 at0xe452940>

可以看出:

  • 在工作日,會員出行對應兩個很明顯的早晚高峰期,並且在中午會有一個小的高峰,可能對應中午外出就餐需求;
  • 工作日非會員使用者出行高峰大概在下午三點;
  • 工作日會員出行次數遠多於非會員使用者;
  • 在週末,總體出行趨勢一致,大部分用車發生在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 at0xe57d7f0>

  • 隨著溫度的升高,租賃數量呈上升趨勢;
  • 在溫度達到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 at0xe582400>

可以觀察到在溼度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 at0xe7e0a90>

觀察到天氣等級為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')