2022年7月28日 星期四

titanic_0007:繪製表格

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

-----

沒有留言:

張貼留言

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