iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0

一、視覺化為何如此重要

終於進入到視覺化的部分了!雖然現在有很多的繪圖軟體,但我認為初期用python自己畫出圖,可以增強自己的編碼能力。其實視覺化一直都是資料分析很重要的一環,我用下圖舉例,你就可以了解為什麼要做視覺化了。以下是我用卡方分配去挑選重要的特徵,得出來的結果。
https://ithelp.ithome.com.tw/upload/images/20210904/20140427BmsbB19JkS.png
假如你是個大學教授,學生在跟你報告的時候,你希望學生用一張圖解釋在資料中做了什麼發現了什麼(左圖),還是貼出一張程式碼逐行解釋每一行的功用,最後又貼出一張程式碼跑出來的分數(右圖)呢?
我想絕大多數會選擇左圖吧,教授要看到的只是做出來的結果,而不是程式碼怎麼執行的,就算程式coding有多厲害,沒有搭配圖表去解釋你的結果,就不能算是一個好的報告。


二、資料視覺化所涵蓋的統計概念

有一些基本的統計工具及工具圖必須要先了解,才能在畫圖的時候用對工具。

1.資料分配分為間斷型以及連續型

間斷型的機率質量函數圖形

https://ithelp.ithome.com.tw/upload/images/20210904/20140427kkqmCNAmbf.png

  1. 間斷型畫出來的圖形會像這樣,彼此之間不會相連,常見的間斷型資料是性別:男生在資料中佔幾個,女生佔幾個。
  2. 而為何稱機率”質量“函數呢?因為他的機率函數值代表他的機率質量大小。意思就是函數值是多少機率值就是多少。因此稱為機率質量函數。

連續型的機率密度函數圖形

https://ithelp.ithome.com.tw/upload/images/20210904/20140427Qul35jq22o.png

  1. 連續型畫出來的圖形會是連續不間斷的。在資料中會遇到的,例如像台北市資產分佈,每天每小時的pm2.5濃度等......
  2. 而為何稱機率”密度“函數呢?因為他的機率值必須求算他的面積才能得到。因此稱為機率密度函數。

2.各圖形所代表的意義及功用

  1. 直方圖:將 一組數據分成數組後,依照各組距的範圍與次數,繪製成連續型資料之次數分布圖,通常可呈現等距及比率變數的資料
  2. 長條圖:與 直方圖類似,但主要用以顯示類別資料的分布情形,因此條柱不相連。
    藉由將各組的標誌放在圖形的橫軸上,縱軸則為次數尺度或累積次數尺度等
  3. 盒鬚圖:亦稱箱型圖(box-plot),利用圖形呈現資料的中央趨勢與離散程度,不需繪製出實際的觀察值即可顯示所分配的總計統計量
  4. 折線圖:由一條線連接數點以顯示序列,以圖表呈現資料分布的變化趨勢
  5. 散佈圖:在多維空間中給出 p 個變數關係的點。由點的疏密程度和延展方向等分布特徵,初步瞭解變數的關係。

三、各類型基本圖表實作

1.直方圖

以鐵達尼號資料集為例

資料集來源:https://www.kaggle.com/c/titanic/data

index_survived = (train_df["Age"].isnull()==False)&(train_df["Survived"]==1)
index_died = (train_df["Age"].isnull()==False)&(train_df["Survived"]==0)

sns.distplot( train_df.loc[index_survived ,'Age'], bins=20, color='blue', label='Survived' )
sns.distplot( train_df.loc[index_died ,'Age'], bins=20, color='red', label='Survived' )

https://ithelp.ithome.com.tw/upload/images/20210904/20140427O3wfZU3ocT.jpg

2.長條圖

以員工離職預測率重要程度為例

資料集來源:https://aidea-web.tw/topic/2f3ee780-855b-4ea7-8fc8-61f26447af1d

import seaborn as sns
fig = plt.figure(figsize=(10,12))         #畫布大小   
sns.barplot(a['Score'],a['Feature'])      #前面是X軸你要放的特徵 ,後面是Y軸你要放的東西

https://ithelp.ithome.com.tw/upload/images/20210904/20140427tbMhRtcd7a.png

3.盒鬚圖

以員工離職預測“任職前工作平均年數”畫出盒鬚圖

可以看到右邊的點即為資料中的離群值

資料集來源:https://www.kaggle.com/djhavera/beijing-pm25-data-data-set

import seaborn as sns
sns.boxplot(train['任職前工作平均年數'])

https://ithelp.ithome.com.tw/upload/images/20210904/20140427aNlaFFMR0s.png

4.折線圖

畫出每個天氣特徵月的變化

資料集來源:https://www.kaggle.com/djhavera/beijing-pm25-data-data-set

plt.style.use("ggplot")               # 使用ggplot主題樣式
plt.xticks(day)
#畫第多條線,plt.plot(x, y, c)參數分別為x軸資料、y軸資料、線顏色
plt.plot(e["month"],e["pm2.5"],c = colors[0])  
plt.plot(e["month"],e["DEWP"],c = colors[1])  
plt.plot(e["month"],e["TEMP"],c = colors[2])  
plt.plot(e["month"],e["PRES"],c = colors[3])  
plt.plot(e["month"],e["Iws"],c = colors[4])  
plt.plot(e["month"],e["Is"],c = colors[5])  
plt.plot(e["month"],e["Ir"],c = colors[6])  
# 設定圖例,參數為標籤、位置
plt.legend(labels=['pm2.5', 'DEWP', 'TEMP', 'PRES', 'Iws', 'Is','Ir'], loc = 'best')
plt.xlabel("months", fontweight = "bold")                # 設定x軸標題及粗體
plt.ylabel(" Average of feature", fontweight = "bold")    # 設定y軸標題及粗體
plt.title("2014 months average change", fontsize = 15, fontweight = "bold", y = 1.1)

https://ithelp.ithome.com.tw/upload/images/20210904/20140427xCVK2wjOdt.png

5.散佈圖

以天氣資料為例,可以看到資料呈現負相關。

資料集來源:https://www.kaggle.com/djhavera/beijing-pm25-data-data-set

plt.scatter(df_weather1["Temperature"],df_weather1["RH"])
plt.xlabel("Temperature") #X軸標簽
plt.ylabel("RH") #Y軸標簽
plt.grid(True)

https://ithelp.ithome.com.tw/upload/images/20210904/20140427FinGSrEkTs.png

6.相關係數熱力圖

透過相關係數的計算,我們可以將它已圖顯示出來最。可以更快找到資料彼此之間的關聯。

顏色越深代表關聯性越高。

資料集來源:https://www.kaggle.com/djhavera/beijing-pm25-data-data-set

corr_pd = train.corr() #先算出資料間彼此的相關係數
#使用seaborn做視覺化
import seaborn as sns
import matplotlib.pyplot as plt
# 指定畫幅
plt.figure(figsize=(8,6))
# 繪製熱力圖
sns.heatmap(corr_pd, cmap='YlGnBu')

https://ithelp.ithome.com.tw/upload/images/20210904/20140427QW0nq2GpVc.png


四、結論

其實網路上有很多大神畫的圖都很漂亮,可以去上面看他們提供的程式碼,去研究他怎麼畫出來的,以下是這些網站的介紹。


上一篇
DAY06 探索性資料分析
下一篇
DAY08 資料前處理-缺失值處理方法
系列文
學資料科學的小孩不會變壞- 從入門到實戰全攻略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言