iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
1
自我挑戰組

用Line聊天機器人串起多媒體系統系列 第 11

Day 11 : Google Colab 實用奧步篇 ( 連結硬碟、繪圖中文顯示問題 )

  • 分享至 

  • xImage
  •  

延續 Day 10 的 Colab 介紹文,本篇分享自己踩過的坑與填坑,並期待 Colab 真正能成為您程式開發的助力。

如何讓您的 Google 雲端硬碟檔案與 Colab 連結?

方法1. 先來懶人包

  • 以下為執行碼複製貼上,將os.chdir()改您的Google雲端硬碟資料夾位址即可)
#Colab資料夾設定方法
#!pip install google.colab #如未安裝取消註解後執行
import os

from google.colab import drive
drive.mount('/content/drive')

##出現提示欄進行授權

os.chdir('/content/drive/My Drive/{你的google雲端硬碟資料夾位址}') #切換該目錄
os.listdir() #確認目錄內容

Colab 現在更方便的方法是在左側的工具列,選擇掛接雲端硬碟即可,更方便了。

拆解說明

  • 當你開啟 Colab 互動環境,其實是開啟了一個虛擬機,你可以透過與雲端硬碟連結。在 Colab 左側程式碼的提示為下方兩行,執行後授權Colab與你的google雲端硬碟帳戶連結。

    from google.colab import drive
    drive.mount('/content/drive')
    
  • 過程中會出現等待您的授權碼,請點選連結,複製授權碼貼回 Colab 等待的對話框即可。

  • 進一步讓 Colab 能存取你指定的 Google 雲端硬碟路徑,你需要執行以下程式碼,讓 os 模組切換至您的 Google 雲端硬碟資料夾位址:

    import os
    os.chdir('/content/drive/My Drive/{Google雲端硬碟資料夾位址}') 
    
  • 要確定是否順利切換到指定目錄,可以用os.listdir()檢查目錄之下檔案是否如預期,如果看到自己的資料夾目錄代表成功。

    os.listdir() #確認目錄內容
    
  • 注意事項:如果 Colab 要從外部下載安裝第三方套件(如Talib),記得先安裝好Talib再切換到自己的雲端硬碟目錄,不然執行時可能會有錯誤狀況,發生錯誤也別緊張,重啟服務即可。

方法2. 直接點圖示完成連線 (NEW!)

  • 因為 Google Colab 為雲端服務持續更新,介面更新也不會特別更您說,目前的最新狀態是: 側邊欄的 Google 雲端硬碟圖示點下去,確認您授權操作Google 雲端硬碟,就大功告成了!

超前填坑? Colab 繪圖如何正常顯示繁體中文?

本方法同樣適用於 ChatGPT 繪製的圖表,因為背後的製圖模組皆為 matplotlib 。

懶人包 [2021年更新]

更新解法

  • 感謝蔡炎龍老師在 Python 社群分享更簡潔的做法
  • 此作法新增並指定字體後,即可正常顯示中文字,不需要再增加 fontproperties 參數。
  • 另外如果有修正 matplotlib 的 style 風格,請記得在更改字體前修正。
# Colab 進行matplotlib繪圖時顯示繁體中文
# 下載台北思源黑體並命名taipei_sans_tc_beta.ttf,移至指定路徑
!wget -O TaipeiSansTCBeta-Regular.ttf https://drive.google.com/uc?id=1eGAsTN1HBpJAkeVM57_C7ccp7hbgSz3_&export=download

import matplotlib as mpl
import matplotlib.pyplot as plt 
from matplotlib.font_manager import fontManager

# 改style要在改font之前
# plt.style.use('seaborn')  

fontManager.addfont('TaipeiSansTCBeta-Regular.ttf')
mpl.rc('font', family='Taipei Sans TC Beta')

原解法

# Colab 進行matplotlib繪圖時顯示繁體中文
# 下載台北思源黑體並命名taipei_sans_tc_beta.ttf,移至指定路徑
!wget -O taipei_sans_tc_beta.ttf https://drive.google.com/uc?id=1eGAsTN1HBpJAkeVM57_C7ccp7hbgSz3_&export=download
!mv taipei_sans_tc_beta.ttf /usr/local/lib/python3.7/dist-packages/matplotlib//mpl-data/fonts/ttf

from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt 

# 自定義字體變數
myfont = FontProperties(fname=r'/usr/local/lib/python3.7/dist-packages/matplotlib/mpl-data/fonts/ttf/taipei_sans_tc_beta.ttf')

# !!!!後續在相關函式中增加fontproperties=myfont屬性即可!!!!

拆解說明

Python 的 matplotlib 是常用的數據分析/資料視覺化模組,因 matplotlib 預設字體不支援中文,中文顯示會出現一堆口口,繪圖要顯示中文需要修改相關設定,經過一番苦心找到解法,並且使用開源且可商用的「台北黑體」(感謝 翰字鑄造JT Foundry開源如此美觀大方的字體)。

  1. 下載指定字體置於 Colab 指定位置
    2. 以 !wget 下載字體
    3. 存置 Colab 路徑: /usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf
  2. 原解法需在各種文字輸出的函數加入 fontproperties 屬性,新版就不用囉!!原解法如下:
    plt.title("自訂標題",fontproperties=myfont) 
    plt.ylabel("自訂y軸",fontproperties=myfont) 
    plt.xlabel("自訂x軸",fontproperties=myfont) 
    ax.annotate('註解說明',fontproperties=myfont)
    ax.set_title('自訂標題',fontproperties=myfont)
    ax.set_xlabel('自訂x軸',fontproperties=myfont)
    ax.set_ylabel('自訂y軸',fontproperties=myfont)
    複製以下cell並執行即可
    
  3. 這邊貼上本文 Colab 範例執行 matplotlib 繪圖的中文顯示成果:


    中文可以正常顯示囉。

最後,用 Colab 建立自己的軍火庫吧!

  • Colab 可以雲端建立 .ipynb 的筆記本檔案,而且他是個具有專屬 URL 的服務,你可以做到以下事情:
    • 透過權限設定分享 Colab 的 URL ,就跟 Google 雲端硬碟檔案分享方式一樣。
    • 把寫好的 Python 小程式加入你的 Chrome 瀏覽器我的最愛,跨裝置都可以開啟變成行動軍火庫!

小結

  • 透過 Colab 雲端環境、是個 linux 虛擬機的特性,就可以幫助程式開發且不怕弄髒環境,髒了再開就好。
  • 連結硬碟我們多了一個 os.listdir() 指令確認資料夾已經能順利讀取, matplotlib 要更改環境變數才能繪圖顯示中文,本文的方法也試圖克服了 Colab 顯示結果。
  • 本系列文主要功能會透過 Python 將 LINE 聊天機器人功能以 Flask 佈署在 Heroku 伺服器,聽起來就會有不少環節需要注意,故後續為 LINE ChatBOT 新增的功能,會先以 Colab 實作與介紹,再轉移到 Heroku 佈署,謝謝您的堅持,我們下篇見!

參考

責任更新!

因Colab所使用的Python版本迄今(2023/6/2)已更新為3.10版(原文章為3.6版),請使用指令時確認版本狀況,懶人包修正如下,後續如有類似情形即可自行排除,謝謝:

# Colab 進行matplotlib繪圖時顯示繁體中文
# 下載台北思源黑體並命名taipei_sans_tc_beta.ttf,移至指定路徑
!wget -O taipei_sans_tc_beta.ttf https://drive.google.com/uc?id=1eGAsTN1HBpJAkeVM57_C7ccp7hbgSz3_&export=download
!mv taipei_sans_tc_beta.ttf /usr/local/lib/python3.7/dist-packages/matplotlib//mpl-data/fonts/ttf![](http://)

from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt 

# 自定義字體變數
myfont = FontProperties(fname=r'/usr/local/lib/python3.7/dist-packages/matplotlib/mpl-data/fonts/ttf/taipei_sans_tc_beta.ttf')

# !!!!後續在相關函式中增加fontproperties=myfont屬性即可!!!!

或採用 再次更新的懶人包,即可無視 Python 版本使用中文囉,且不用每次都增加 fontproperties=myfont 屬性,是不是更簡潔了!

# Colab 進行matplotlib繪圖時顯示繁體中文
# 下載台北思源黑體並命名taipei_sans_tc_beta.ttf,移至指定路徑
!wget -O TaipeiSansTCBeta-Regular.ttf https://drive.google.com/uc?id=1eGAsTN1HBpJAkeVM57_C7ccp7hbgSz3_&export=download

import matplotlib as mpl
import matplotlib.pyplot as plt 
from matplotlib.font_manager import fontManager

# 改style要在改font之前
# plt.style.use('seaborn')  

fontManager.addfont('TaipeiSansTCBeta-Regular.ttf')
mpl.rc('font', family='Taipei Sans TC Beta')

為了更方便使用,也獨立成Matplotlib顯示中文方法,之後直接貼上程式碼取用即可。


上一篇
Day 10 : 左手只是輔助 - 用 Google Colab 協助開發日常
下一篇
Day 12 : 以本機招喚 3 星鸚鵡 LINE Chat Bot - 1 (串起你的 LINE Message API )
系列文
用Line聊天機器人串起多媒體系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言