Python 人機協作

ChatGPT’s Code Interpreter

(本文同步發表於計算思維學院

OpenAI 日前釋出了 ChatGPT 上的 Code Interpreter plugin, 效果非常好,帶給我的震驚不亞於首次接觸 ChatGPT. 簡單來說,Code Interpreter 能作到的事情是:你給它資料,問一個問題,它會自行產生一段或多段 Python 程式、執行該程式、再告訴你答案。以下分享兩個實測案例。

資料分析

資料欄位解讀

我給它一個日誌檔(檔案出處),檔案的前幾行如下圖。我先問它這個日誌檔裡面有哪些資訊。它回答了裡面的四個欄位及意義。注意:檔案內第一行的 “Staus” 是錯字,但不妨礙它解讀為 “Status”

點開 “Finished working” 按鈕,你會看到它自行產生、用以回答問題的程式碼。它使用 pandas, read_csv(), 以及 dataframe.head() 預覽資料,跟我們作資料分析的起手式相同。

簡單分析及圖表

接著,我要它分析日期欄位,告訴我 (1) 最早與最晚的日期; (2) 依照月份計算資料筆數,用表格與柱狀圖分別呈現。它先處理並正確地回答了第一個問題:

這邊你看到三個 “Finished working”,因為它在處理過程中知道程式執行報錯,自我糾正後算出了正確的答案。程式報錯是因為檔案內容包含了錯誤格式的字串 (“cannot”),所以它再度呼叫 to_datetime() 時加上了 errors='coerce' 參數,並使用 dataframe.dropna()跳過無法解讀的資料列。

接著它回答了第二個問題,產生出正確的圖表:

想知道圖表是怎麼產生的,或是想驗算結果,點開 ”Finished working” 就能看到程式碼

稍微複雜的分析

眼看簡單的資料分析難不倒它,我又試了一個複雜一點的例子。日誌中每一個 URL 欄位值都包含了這個請求的 HTTP Action (如 GET 或 POST),我要它列出每一個 IP 位址的 HTTP Action 類型及數量(注意:我並沒有告訴它要去哪個欄位找 HTTP action):

看起來它還是成功了!上表中 10.131.0.1 的 POST 數量為 181,驗算一下答案是正確的:

基礎機器學習

第二個例子是我從 Kaggle 上找的 Random Forest 建模教學。在深度學習當道的今日,Random Forest 還是一個很好用的 baseline,讓你可以快速了解問題的難度,以及取得一個模型比較的基準。這個問題是透過二手車的各項屬性去預測其行情價 (class 欄位,其值有四種:不可接受、可接受、好、非常好),我只問了三個問題:

  1. 告訴它資料欄位定義,叫它訓練一個 Random Forest 模型,可以從其他欄位預測 class 欄位的值
  2. 叫它導出這個模型讓我可以下載
  3. 問它我要怎麼在我的 Python code 中使用下載的模型

它很好地回答了以上的問題,並訓練出了一個準確度 96% 的模型。對細節有興趣的可以直接看對話紀錄:

https://chat.openai.com/share/005ab817-5ec7-4a09-9d79-5194079b77e3

當然,以上的測試都是使用公開資料,不能排除它在沒看過的資料或任務上表現較差的可能性。

結語

Code Interpreter 已經能夠大量節省資料分析與視覺化的時間。雖然機器產出的結果還是需要人類的最終判斷,但 AI 將會把自動化的概念推向前所未有的境界。人機協作的未來,以及知識工作者工作方式的改變,已經近在咫尺。