titanic_0007:繪製表格
2022/07/18
說明:
將 Pandas 的 dtype 表格 [1] 輸出到螢幕 [2], [3] 以及輸出到圖檔 [4] - [10]。
-----
https://pixabay.com/zh/photos/umbrella-only-sad-depression-2603980/
-----
Q1:如何將 Pandas 的 dataframe 以表格型式輸出到螢幕?
A1:參考代碼一 [2]。
代碼一
# 代碼一
# 將 dataframe 以表格輸出到螢幕
import pandas as pd
# read dtype.csv
f_p = '/content/drive/My Drive/colab/data/titanic/' # file path
df = pd.read_csv(f_p+'dtype.csv')
# display the DataFrame
df.style.set_properties(**{'border': '1.5px solid blue', 'color': 'red'})
-----
Fig. 1. Dtype [1] - [3].
圖一是 pandas 的 dtype 表格 [1]。這用 Excel 來做很容易,不過本篇可以作為練習,將 dataframe 的內容輸出到表格再轉存圖檔。
先從 [2] 裡面的範例找出比較美觀的,然後將 dtype 的表格從 [1] 複製到 Excel,稍作修改後,轉存 csv 檔,以 pandas 讀取後用 style 的方式呈現 [3],最後進行螢幕截圖。
-----
Q2:如何將 Pandas 的 dataframe 以表格型式輸出到圖檔?
A2:參考代碼二。
代碼二
# 代碼二
# 將 dataframe 轉成 matplotlib 的 table
import matplotlib.pyplot as plt
import pandas as pd
# read dtype.csv
f_p = '/content/drive/My Drive/colab/data/titanic/' # file path
df = pd.read_csv(f_p+'dtype.csv')
fig, ax = plt.subplots(figsize=(32, 8))
ax.axis('off')
dtype_table = ax.table(cellText=df.values,
colLabels=df.columns, # 共有四個 col
colWidths=[0.11, 0.41, 0.1, 0.34], # 總和不用為 1
colColours=['yellow'] * 4, # 共有四個 col
loc='center')
dtype_table.auto_set_font_size(False)
dtype_table.set_fontsize(28) # 設定字型大小
for key, cell in dtype_table.get_celld().items():
cell.set_height(0.18) # 設定 row 高,預設值為 0.045
plt.savefig(f_p+'t0007_2.png') # 存檔
-----
Fig. 2. Dtype [1].
圖二可以說是從 [4] 開始,最後調整到接近圖一的程度,重點在圖二不是螢幕截圖,而是直接輸出到圖檔。
[4] 是一個簡單的範例,先找到 [5] 有存圖的功能,但 [5] 從 pandas 直接繪圖,現階段的程度較難調整參數。[6] 有一些方法,但較難整合。[7] 則是仔細的參數調整,這在後面有使用到。[8] 調整參數的方法讀完後有更清楚些。[9] 後來沒用到。最後,以 [10] 為模本,[7] 為細節,完成代碼二與圖二。
-----
Appendix. A. NA and nan
「Missing values caused by reading files, etc.
nan (not a number) is considered a missing value
None is also considered a missing value
String is not considered a missing value
Infinity inf is not considered a missing value by default
pd.NA is the experimental value (as of 1.4.0)」[11]。
「讀取文件等導致的缺失值
nan(不是數字)被認為是缺失值
None 也被認為是缺失值
字符串不被視為缺失值
Infinity inf 默認不被視為缺失值
pd.NA 是實驗值(截至 1.4.0)」
-----
Appendix. B.
NA [12]。
-----
References
# dtype
[1] Overview of Pandas Data Types - Practical Business Python
https://pbpython.com/pandas_dtypes.html
# table
[2] Pandas 以表格樣式顯示 DataFrame | D棧 - Delft Stack
https://www.delftstack.com/zh-tw/howto/python-pandas/pandas-display-dataframe-in-a-table-style/
# style
[3] Table Visualization — pandas 1.4.3 documentation
https://pandas.pydata.org/docs/user_guide/style.html
# ax.table,基本的表格呈現
[4] 如何在 Matplotlib 中繪製一個表格 | D棧 - Delft Stack
https://www.delftstack.com/zh-tw/howto/matplotlib/plot-table-using-matplotlib/
# table png,生成 dataframe 後,放到 axes 上。pandas 繪圖修改參數較不容易
[5] [Python] 將Pandas table轉成圖檔 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
https://ithelp.ithome.com.tw/articles/10231378
# table png,一些方法
[6] python - How to save a pandas DataFrame table as a png - Stack Overflow
https://stackoverflow.com/questions/35634238/how-to-save-a-pandas-dataframe-table-as-a-png
# colWidths,仔細的表格呈現與參數設定
[7] 小狐狸事務所: Python 學習筆記 : Matplotlib 資料視覺化 (四) 表格篇
https://yhhuang1966.blogspot.com/2022/07/python-matplotlib.html
# fontsize,較精簡的參數設定
[8] python - How to change the tables' fontsize with matplotlib.pyplot - Stack Overflow
https://stackoverflow.com/questions/15514005/how-to-change-the-tables-fontsize-with-matplotlib-pyplot
# rect = [left, bottom, width, height],table 在 axes 上的位置
[9] matplotlib.pyplot.axes — Matplotlib 3.5.2 documentation
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.axes.html
# 簡明有用的範例樣本
[10] How to change a table's fontsize with matplotlib.pyplot?
https://www.tutorialspoint.com/how-to-change-a-table-s-fontsize-with-matplotlib-pyplot
# nan
[11] Missing values in pandas (nan, None, pd.NA) | note.nkmk.me
https://note.nkmk.me/en/python-pandas-nan-none-na/
[12] NaN, None and Experimental NA. Illustrated missing values conventions | by Deepak Tunuguntla | Jun, 2021 | Towards Data Science | Towards Data Science
https://towardsdatascience.com/nan-none-and-experimental-na-d1f799308dd5
-----
鐵達尼號 Python 實作(目錄)
https://mandhistory.blogspot.com/2022/06/titanic.html
-----