2022年6月29日 星期三

titanic_0003:資料繪圖

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

https://alankrantas.medium.com/%E9%90%B5%E9%81%94%E5%B0%BC%E8%99%9F%E7%9A%84%E6%82%B2%E5%8A%87-%E9%A0%90%E6%B8%AC%E8%88%B9%E9%9B%A3%E7%94%9F%E9%82%84%E8%80%85%E7%9A%84%E7%89%B9%E5%BE%B5%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98-%E6%90%AD%E9%85%8D-flaml-%E8%87%AA%E5%8B%95%E5%8C%96%E5%BB%BA%E6%A8%A1-%E4%BB%A5%E5%8F%8A%E5%B0%8D-kaggle-%E7%AB%B6%E8%B3%BD%E7%9A%84%E4%B8%80%E4%BA%9B%E8%A7%80%E5%AF%9F-ca3f4b11af34


# 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

https://www.autoscripts.net/pandas-set-font-size-plot/#how-to-change-pandas-dataframeplot-fontsize-of-xlabel


# 使用 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

-----

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。