# 效率神器:Python 協同 Gemini,辦公事半功倍(2) [第二堂課後半部份,hugging face教材](https://hackmd.io/0HcFkeD5T4iQMxQWfYuuHA) - 從0開始,透過 **政府公開資料csv、json檔案** 抓取天氣預報(外部訊息) - 結合第一堂課筆記,結合Gemini,生成符合天氣狀況的廣告文案 - 利用Windows內建功能,自動驅動你的本地Pyhton程式碼 >[!Warning]在看此篇教材前 >此篇教材與[第一篇教材](https://hackmd.io/OL9QagF-QkmIYoDhepbgug)有非常緊密的連結,請先閱讀完前篇後再看! ## 政府公開資料 >[!Note]政府資料開放平台 >為各機關於職權範圍內取得或做成,且依法得公開之各類電子**資料**,包含文字、數據、圖片、影像、聲音、詮釋**資料**(metadata)等,以**開放**格式於網路公開,提供個人、學校、團體、企業或**政府**機關等使用者,依其需求連結下載及利用。 在各種網站當中,如果他想要公開收集到的資料,他們都會將資料轉為.csv檔案(逗號區隔檔案),或是.json檔案。 ### CSV (Comma-Separated Values) - ✅ 容易閱讀與編輯: CSV 本質上是純文字檔案,**可以用任何文字編輯器(如記事本、Excel、Google Sheets)打開與編輯。** - ✅ 通用性高: 幾乎所有資料庫(如 MySQL、PostgreSQL)和資料處理工具(如 Python 的 pandas、Excel)都能輕鬆匯入與匯出 CSV 格式。 ### JSON檔案 - **✅ 結構化與可讀性**: JSON 使用 **鍵值對(key-value pairs)** 儲存資料,並支援巢狀結構,能夠表達更複雜的資料關係。 >例如,天氣預報的 JSON 格式可能包含「城市 → 日期 → 各時段天氣狀況」的階層結構,這在 CSV 中較難表達。 - **✅ 適合 API 與網頁應用**: 現在已為 Web 開發、API 資料傳輸的標準格式。 >例如,許多政府的公開資料 **API 都會回傳 JSON 格式**,方便開發者直接在程式中解析與使用。 所以從這兩種可見,CSV 和 JSON 是目前最常見的開放資料格式,廣泛應用於商業與開發領域 ## 那要如何使用? ### 1.先登入到[Colab範例教材](https://colab.research.google.com/drive/1OehEktVL8sE7_zAc-I8L5_1ywY26ar6W?usp=sharing)畫面當中 登入後,你會看到此畫面。 <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/rkRnQbPiyx.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> 我們先將`GEMINI_API_KEY`建立起來,前兩步驟跟(1)教材一樣,點擊執行就可。 當第二步驟執行完後看到 `✅ GEMINI API Key 已成功載入!` 代表已經成功與Gemini連動了! ### 2.開啟政府公開資料網頁,抓取想要分析的資料 我們將下載兩種資料集: - [PM2.5 日均值(CSV 格式)](https://data.gov.tw/dataset/91090) - [一般天氣預報 - 新北市(JSON 格式)](https://data.gov.tw/dataset/9222) <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/BkFKe-Dsyg.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> 我們看到公開資料的畫面 a.對著`下載網址 -> CSV按鈕`點擊右鍵後,點擊`複製連結網址` b.先將此連結隨意貼到Colab中,後續我們會利用網址來讓Python自動從網站下載資料到自身身上。 >[!Note]為何要這樣做,我可以下載檔案後再丟到Colab的Folder中不就好? >雖然可以手動下載後上傳至 Colab,但若資料會隨時間變動,每次都要手動更新很麻煩。 >透過 Python 直接從網址下載,每次執行時都能重新獲取最新數據,省時又方便! ### 3.將複製好的網址分別貼到Colab中 #### 3-1 CSV檔案 <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/BkforZDoke.png" style="width: 70%; border: 2px solid black; padding: 5px;" /> </div> 這樣的程式碼,你可能會很眼熟,這跟(1)教材中讀取Excel檔案的`pd.read_excel`非常像! 沒錯,在 Python 中,使用 pandas 套件處理 CSV 檔案 和 Excel 的單一 Sheet 具有相似性,因為它們都是以表格形式存儲數據,只有前處理(抓取檔案)程式碼不同而已,後續使用如同(1)教材對EXCEL一樣。 總之,只要利用這樣的程式碼,每次驅動,Python就會到此網址下載對應的CSV檔案。 #### 3-2 JSON檔案 <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/S1HGeMDsJg.png" style="width: 70%; border: 2px solid black; padding: 5px;" /> </div> 讀取JSON檔案就相對不同,我們需要對其網址做request請求,我們請求成功後,該網址會吐一個指定的JSON檔案,我們將其儲存到變數`JSON_data`當中,每次驅動就會請求一次,則能夠每次取得最新資訊。 那我們要怎麼讀取需要的資訊呢?實際來看一次JSON檔案內部,以`一般天氣預報 - 新北市(JSON 格式)`為例: <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/ryBE-GvsJx.png" style="width: 70%; border: 2px solid black; padding: 5px;" /> </div> 還記得我們說過 **JSON檔案保留了"巢狀結構"敘述法** ,那我們如果要讀取相對應的Key所代表的值,那就要一層一層撥開他。 以上圖為例,如果我想要知道他"甚麼時候發送的",那我們要抓取Key值在 > `"cwaopendata" -> "sent"` <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/r1hvrfwi1x.png" style="width: 70%; border: 2px solid black; padding: 5px;" /> </div> 我們將訪問到的值放到變數`time_sent`當中,則可以看到結果 --- <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/rJLU8Mvoye.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> 複雜一點,如果我們想要抓取的資料是"天氣描述",那我們要抓的Key值在 > `"cwaopendata" -> "dataset" -> "parameterSet" -> "parameter" ` <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/S1akDfDiye.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> 這樣,我們就能透過"即時更新"的"政府資訊"以讓Gemini判斷 ### 4.提取資訊,給Gemini判斷 #### 4-1 提取"JSON天氣預報",以生成"符合天氣的廣告文案" <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/BkZrIwDoJx.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> 跟之前一樣,我們要做的事情就是: - a.指定我們要哪一個生成式Model - b.將需要Gemini理解的Prompt準備好(將JSON檔案中的`parameter 天氣描述`放到Prompt當中) - c.利用變數`response`接住model生成的結果 - d.print出生成的結果 而以上述案例中,我僅在Prompt中提到"請幫我整理",而他的結果與JSON檔案中給予的相似很多。 >[!Important]是時候挑戰一次看看 >我們現在是一間"服飾店",有賣各種衣服、褲子、帽子...等,那我們希望每天根據當天天氣狀況生成廣告詞 >**如果我們想要他生成"符合天氣的廣告文案",應該怎麼做?** >(提示:(1)中有提到Prompt Engineering,應該要如何下"好的Prompt"?) #### 4-2 提取"CSV空氣品質",以生成"符合天氣的個人管家" <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/SkstvbujJg.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> 在做這件事情之前,你可能要稍微注意一下,如果你查看此CSV檔案,你可能會被他的資料量嚇到。 他的資料量可到1000 Row左右,但如果我們只需要"與指定日期相同的資料"。 <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/Bk0iIzuj1l.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> 這裡的程式相對複雜許多,我們一條一條慢慢講: - `date.today()` 取得今天的日期,`timedelta(days=1)` 表示一天的時間差,`date.today() - timedelta(days=1)` 就是從今天的日期減去一天,得出昨天的日期。 - `CSV_df["monitordate"]` 這是你的 pandas DataFrame 中的 monitordate 欄位,`pd.to_datetime()` 用來將欄位中的 **字符串或其他日期格式轉換成 datetime 類型。** `.dt.date` 會把 datetime 類型轉換為純粹的 date 類型,去掉時間部分,只有年、月、日。 這樣子,我們就能夠提取"指定日期"的表個資訊了! <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/BJOUsM_j1g.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> 跟之前一樣,我們要做的事情就是: - a.指定我們要哪一個生成式Model - b.將需要Gemini理解的Prompt準備好(將`CSV_df_yesterday`變數中的放到Prompt當中) - c.利用變數`response`接住model生成的結果 - d.print出生成的結果 而以上述案例中,我僅在Prompt中提到"請幫我整理並以50字回報",而他的結果與CSV檔案中給予的相似很多。 >[!Important]是時候挑戰一次看看 >如果你希望你的model回應風格是"管家"風格,那我應該如何讓他理解資訊的同時,讓他回答風格更動? >如果我現在除了看一天外,如果我想要比較好幾天的空氣品質,那應該怎麼準備資料? ## Windows環境,自動化腳本執行Python檔案 >[!Warning] >這份教學僅限用於windows系統下,其他作業系統的使用者,抱歉了! ## 自動化執行--前言 這次教學會用到一些工具跟概念 **BAT 檔案(批處理檔案)是一種腳本文件**,主要用於在 Microsoft Windows 操作系統中自動執行一系列命令。 **工作排程器(Task Scheduler)是一種操作系統工具**,用於在預定時間或特定條件下自動執行程序或腳本。 > Windows 工作排程器是一個內建的工具,用於在 Windows 系統中設定和管理排程任務。它允許用戶定義何時執行某些程序或腳本,並提供了多種觸發條件和執行選項。 ## 實際操作一次 >[!Tip] >這份教學會用到 Colab 檔案 [testing_python_with_auto_execute](https://colab.research.google.com/drive/13fOS-lD5xOCJNnEMI9sONdheHD2Nao3-) >此python執行功能: >>當沒有文件的時候,建立一個新的文件.txt檔案 >>如果檔案存在,就在文件裡寫"執行時間"到.txt檔案當中 ### 1. 點擊上方連結進到colab,並且選擇下載檔案 <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/H1nbdGNT0.png" style="width: 70%; border: 2px solid black; padding: 5px;" /> </div> ### 2. 將其檔案放在自己想要放的地方(本文範例是將其放在桌面上自己創建的一個文件夾當中,如下所演示) <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/BJcA_GVaR.png" style="width: 60%; border: 2px solid black; padding: 5px;" /> </div> <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/B1RktMV6C.png" style="width: 60%; border: 2px solid black; padding: 5px;" /> </div> >[!Warning] > 1. 檔案位置非常重要,之後建立腳本檔案的時候會用到 >2. 檔案夾盡量不要打中文字,有時候讀取會出現錯誤 ### 3. 下載Python安裝包,這樣電腦才能跑動.py檔案 <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/HyYQoMV60.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> ### 4.自動化腳本編寫 - 先建立一個.txt檔案 - 在.txt檔案中寫入兩行程式 ``` cd 剛剛建立的檔案夾位置 python 檔案名稱.py ``` 以我為例: <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/rJ5E9fV6A.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> 那我會在我的.txt檔案中寫到: ``` cd C:\Users\user\Desktop\自動化 python testing_python_with_auto_execute.py ``` - 將其.txt檔案轉成.bat檔案(轉成腳本檔案) <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/SJ_GjzVaR.png" style="width: 20%; border: 2px solid black; padding: 5px;" /> </div> 當你完成以上任務後,可以點擊.bat看看,如果點擊完後,python如果有創立一個.txt檔案的話,那就是成功了! ### 5.讓電腦自動去跑動.bat檔案 - 打開**工作排程器**(通常windows有內建此功能) >[!Warning]如果你找不到 >按下 Windows 鍵 + R,輸入`taskschd.msc`,然後按下 Enter 鍵。 - 點擊"建立工作" <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/HyN_szNTR.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> - 輸入工作名稱(取自己看得懂的敘述) - 點擊觸發程序,編寫觸發條件(我們設定"每五分鐘就驅動一次") <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/BJd6jG4pR.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> - 點擊動作,並將剛剛的.bat檔案加到裡面 <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/HJExnzVT0.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> - 按下確定之後,就大功告成啦!! - 接下來,你可以去看"工作排程器程式庫",就能看到我們新增的指令了! <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/H1lDhzEpC.png" style="width: 100%; border: 2px solid black; padding: 5px;" /> </div> ## 影片教學版 如果文字看得不夠清楚,可以跟著下方的影片一起做一遍,約5分鐘就能設置完成 {%youtube q8F4yLrZrEA %}
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up