Python數據可視化教程之實踐篇

      網友投稿 1095 2022-05-30

      知乎專欄 |?來源

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

      本篇文章在基礎篇的基礎上,選擇實際案例進行了練習。

      再明確一次三個步驟:

      確定問題,選擇圖形

      轉換數據,應用函數

      參數設置,一目了然

      下面,我們通過案例來進行演示:

      %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中的共享單車項目,比賽提供了跨越兩年的每小時共享單車租賃數據,包含天氣信息和日期信息。

      Python數據可視化教程之實踐篇

      字段說明

      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 = pd.read_csv('./Bike.csv')

      Bikedata.head()

      #查看描述統計

      Bikedata.describe()

      #對于整體數據,我們希望查看與三個租賃數量相關的其他特征值的關系,可以選用seaborn包的pairplot函數(多變量圖)

      sns.pairplot(Bikedata,x_vars=['holiday','workingday','season','weather','hour','windspeed_rfr','atemp','humidity','temp'],y_vars=['count','registered','casual'],plot_kws={'alpha': 0.1})

      大致可以看出:會員在工作日出行較多,節假日次數減少,而臨時用戶相反,第一季度出行人數總體偏低,出行人數受天氣影響較大,會員在每天早晚有兩個高峰期,對應上下班時間;非會員在下午出行較密集 風速對出行人數有較大的影響 相對濕度,溫度和體感溫度對非會員出行影響較大,對會員出行影響較小。

      #接下來,我們通過相關系數的大小來依次對特征進行可視化分析

      #首先,列出相關系數矩陣: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

      可見,特征對租賃總量的影響力為:

      時段>溫度>濕度>年份>月份>季節>天氣>風速>工作日>節假日

      對特征逐項分析

      1

      首先對時段進行分析

      第一步

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

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

      第二步

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

      應用函數:直接應用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])

      可以看出:

      在工作日,會員出行對應兩個很明顯的早晚高峰期,并且在中午會有一個小的高峰,可能對應中午外出就餐需求;

      工作日非會員用戶出行高峰大概在下午三點;

      工作日會員出行次數遠多于非會員用戶;

      在周末,總體出行趨勢一致,大部分用車發生在11-5點這段時間,早上五點為用車之最。

      2

      對溫度進行分析

      第一步

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

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

      第二步

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

      應用函數:直接應用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')

      隨著溫度的升高,租賃數量呈上升趨勢;

      在溫度達到35度時,因天氣炎熱,總體數量開始下降;

      在溫度在4度時,租賃數達到最低點;

      3

      濕度對租賃數量的影響

      第一步

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

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

      第二步

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

      應用函數:直接應用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')

      可以觀察到在濕度20左右租賃數量迅速達到高峰值,此后緩慢遞減。

      年份,月份和季節作圖方法類似,都采用折線圖繪制,這里省略。

      4

      查看不同天氣對出行情況的影響

      第一步

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

      適合圖形:因為天氣情況屬于數值型分類變量,我們可以選擇柱形圖觀察數量分布

      第二步

      轉換數據:我們需要一個二維數據框,按照天氣情況對租賃數量取平均值

      應用函數:應用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')

      觀察到天氣等級為4時,平均出行人數比天氣等級為2是還要高,這不符合常理

      我們查看一下天氣等級為4的詳細情況

      count_weather = Bikedata.groupby('weather')

      count_weather[['casual','registered','count']].count()

      天氣狀況為4級的只有一天,我們把數據打印出來查看一下

      Bikedata[Bikedata['weather']==4]

      時間為工作日的下午六點鐘,屬于晚高峰異常數據,不具有代表性。

      5

      會員用戶和臨時用戶在整體用戶中占比

      第一步

      提出問題:查看會員用戶和臨時用戶在整體用戶中的比例

      適合圖形:查看占比,適合用餅圖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')

      python作圖的簡單案例

      6

      總結

      要清楚自己想表達什么,有了明確的問題,選擇合適的圖形,然后按照需求從整體數據中選擇自己需要的數據,查閱資料了解函數的參數設置,最后完成圖形的繪制

      matplotlib是python繪圖的基礎,也是其他拓展包的基礎,認真學習matplotlib的常用圖形和參數是很有必要的

      學習期間思考為什么要加載matplotlib.pyplot?來進行繪圖

      -?END -

      本文為轉載分享&推薦閱讀,若侵權請聯系后臺刪除

      掃一掃下面的二維碼

      一起學習進步哦~~

      “掃一掃,領取Python學習資料”

      Python 應用與數據集成平臺 ROMA Connect 數據可視化

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【前端領域高頻筆試面試】—— Html5+CSS3相關
      下一篇:ROS-Industrial工業機器人培訓課程資料-2019更新-Melodic、Kinetic、Indigo
      相關文章
      亚洲AV成人精品日韩一区| 亚洲精品久久久久无码AV片软件| 亚洲国产美女精品久久久| 亚洲一区在线免费观看| 亚洲美女在线观看播放| 久久国产亚洲精品无码| 亚洲高清在线观看| 亚洲国产精彩中文乱码AV| 亚洲精品~无码抽插| 亚洲国产精品VA在线观看麻豆 | 亚洲综合精品香蕉久久网| 亚洲婷婷国产精品电影人久久| 一本久到久久亚洲综合| 噜噜噜亚洲色成人网站| vvvv99日韩精品亚洲| 亚洲国产综合久久天堂| 亚洲日本中文字幕一区二区三区 | 亚洲欧美在线x视频| 九月婷婷亚洲综合在线| 亚洲欧洲久久久精品| 国产日产亚洲系列最新| 激情97综合亚洲色婷婷五| 国产亚洲老熟女视频| 亚洲熟妇av一区二区三区| 精品久久香蕉国产线看观看亚洲| 国产AV无码专区亚洲Av| 亚洲国产精品lv| 亚洲综合久久1区2区3区 | 亚洲精品第一国产综合精品99| 亚洲国产精品一区二区三区久久| 亚洲精品无码AV中文字幕电影网站| 亚洲精品无码av天堂| 亚洲精品无码久久久久| 亚洲精品自产拍在线观看动漫| 亚洲综合自拍成人| 激情综合亚洲色婷婷五月APP| 亚洲色在线无码国产精品不卡| 午夜亚洲国产理论片二级港台二级 | 亚洲电影中文字幕| 亚洲啪啪免费视频| 午夜亚洲WWW湿好爽|