titanic_0003:資料繪圖
2022/06/29
說明:
本文示範如何用 pandas plot [1] - [9] 以及 matplotlib [10] - [12] 繪製鐵達尼號的訓練集資料 [5]。
-----
https://pixabay.com/zh/photos/umbrella-only-sad-depression-2603980/
-----
Q1:如何圖示鐵達尼號訓練集的資料。
A1:參考代碼一,從圖一到圖四依序說明。
-----
代碼一
import pandas as pd import matplotlib.pyplot as plt # open file df = pd.read_csv('/content/drive/My Drive/colab/data/titanic/train.csv') # fig. 1. df.plot(figsize = (16, 16), fontsize = 40) plt.legend(fontsize = 30) plt.savefig('/content/drive/My Drive/colab/data/titanic/t0003_1.png') # fig. 2. df.plot(figsize = (16, 16), kind = 'scatter', x = 'PassengerId', y = 'Age') plt.savefig('/content/drive/My Drive/colab/data/titanic/t0003_2.png') # fig. 3. dh = df.head(10) f3 = dh.plot(figsize = (16, 16), kind = 'scatter', x = 'PassengerId', y = 'Age') f3.set_xlabel('_PassengerId', fontdict = {'fontsize':30}) f3.set_ylabel('_Age', fontdict = {'fontsize':30}) plt.savefig('/content/drive/My Drive/colab/data/titanic/t0003_3.png') # fig. 4. x = dh.PassengerId y = dh.Age plt.figure(figsize = (16, 16)) plt.scatter(x, y) plt.xticks(fontsize = 40) plt.yticks(fontsize = 40) plt.xlabel('_PassengerId', fontsize = 30) plt.ylabel('_Age', fontsize = 30) plt.savefig('/content/drive/My Drive/colab/data/titanic/t0003_4.png')
-----
圖一:
1. 放大圖片與 x-y 軸刻度的字體 [1], [2]。
2. 放大 legend 的字體 [3], [4]。
參考 w3schools 的「Pandas - Plotting」[1],將要讀取的 csv 檔改成鐵達尼號的訓練集。放大圖片 figsize 後,刻度的字體顯的較小,於是又放大 fontsize [2],最後則放大 legend [3]。
圖一的左上角有一些資料的類型,叫做 legend,中文是圖例。如果圖表當中包括兩組以上的數據,使用圖例(可簡稱為 key )解釋兩組的稱呼,基本上用不同的顏色來區分 [4]。圖一的七類都是數值,英文與中文對應如下:
「PassengerId(Passenger Identity Number,乘客識別號碼,乘客編號,流水號,由 1 到 891)
Survived(倖存,0 為否、1 為是)
Pclass(Passenger Class,船艙等級,1 等、2 等、3 等)
Age (年齡)
SibSp(Siblings / Spouse,兄弟姐妹與配偶人數的總和)
Parch(Parents / Children,父母與子女人數的總和)
Fare(票價)」[5]。
每筆資料的另外五個欄位不是數值 [6],以 pandas 的 plot 繪圖時不顯現出來:
「Name(姓名)
Sex(性別)
Ticket(船票號碼)
Cabin(艙房號碼)
Embarked(登船的港口)」[5]。
-----
Fig. 1. 鐵達尼號資料集的數值資料呈現。
-----
圖二:
1. 繪製散佈圖 [1], [7]。
參考 w3schools 的「Pandas - Plotting」[1],以乘客編號與年齡繪製散佈圖。散佈圖主要用來顯示一群資料的兩種數值參數為無相關、正相關、或者是負相關 [7]。w3schools 的範例二顯示運動的持續時間(Duration)與運動過程中消耗的卡路里(Calories)呈正相關,範例三顯示運動的持續時間(Duration)與運動過程中的最大心率值(Maxpulse)無明顯相關性 [1]。
圖二顯示乘客編號與年齡無明顯相關性。本例故意不放大字體,在圖片放大後顯的字體較小。
-----
Fig. 2. 乘客編號與年齡的散佈圖。
-----
圖三:
1. 取前 10 筆資料繪圖 [8]。
2. 放大兩軸標籤的字體大小 [9]。
由於圖二的資料較多,密集的圖示會令人誤以為同一個人有好幾個年齡,因此只取前 10 位乘客的資料加以繪圖 [8],如此可以清楚看出前 10 位乘客的年齡均不相同。附帶一提的是乘客 6 無年齡資料。
另外我們也示範如何放大兩軸的標籤 [9]。[2] 中並無此選項。
-----
Fig. 3. 前十位,乘客編號與年齡的散佈圖。
-----
圖四:
1. 將圖三改以功能更強大的 matplotlib 重新繪製一遍 [10], [11]。
以備之後的需要。
-----
Fig. 4. 前十位,乘客編號與年齡的散佈圖(以 matplotlib 繪圖)。
-----
References
# 使用 pandas 繪圖
[1] Pandas - Plotting
https://www.w3schools.com/python/pandas/pandas_plotting.asp
# 調整 pandas plot 圖的大小跟兩軸刻度的字體大小
[2] pandas.DataFrame.plot — pandas 1.4.3 documentation
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html
# legend 圖例 字體大小
[3] Change the font size of the legend in df.plot
https://www.linuxtut.com/en/379f9486f17546778c6d/
# legend 圖例
[4] 統計圖表 - 維基百科,自由的百科全書
https://zh.m.wikipedia.org/zh-tw/%E7%B5%B1%E8%A8%88%E5%9C%96%E8%A1%A8
# 欄位意義
[5] 鐵達尼號的悲劇:預測船難生還者的特徵工程筆記(搭配 FLAML 自動化建模)以及對 Kaggle 競賽的一些觀察 | by Alan Wang | Medium
# pandas dtype object
[6] Overview of Pandas Data Types - Practical Business Python
https://pbpython.com/pandas_dtypes.html
# scatter
[7] 散佈圖 (Scatter Diagram, Scatter Plot) | Quality Taiwan 中文品質筆記
https://qualitytaiwan.wordpress.com/2013/09/20/557/
# 取得 pandas dataframe 的部分資料
[8] Pandas - Analyzing DataFrames
https://www.w3schools.com/python/pandas/pandas_analyzing.asp
# 調整 pandas plot 兩軸標籤的字體大小
[9] Pandas set font size plot | Autoscripts.net
# 使用 matplotlib 繪圖
[10] matplotlib.pyplot.figure — Matplotlib 3.5.2 documentation
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.figure.html
# matplotlib pyplot xticks font size
[11] 如何在 Matplotlib 中設定刻度標籤 xticks 字型大小 | D棧 - Delft Stack
https://www.delftstack.com/zh-tw/howto/matplotlib/how-to-set-tick-labels-font-size-in-matplotlib/
# 使用 matplotlib 存檔
[12] matplotlib.pyplot.savefig — Matplotlib 3.5.2 documentation
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.savefig.html
-----
鐵達尼號 Python 實作(目錄)
https://mandhistory.blogspot.com/2022/06/titanic.html
-----
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。