跳轉到內容

Eric 6 使用者指南/使用 Eric 編輯/快速簡易編輯器

來自華夏公益教科書

快速簡易編輯器

[編輯 | 編輯原始碼]

您想要將一些資料匯入資料庫。為此,您需要操作一些文字以保持一致性,將類似於以下的文字

省/州,國家/地區,最後更新,確診,死亡,康復
安徽,中國大陸,2020/1/22 17:00,1,,
北京,中國大陸,2020/1/22 17:00,14,,

以及以下內容

省/州,國家/地區,最後更新,確診,死亡,康復,緯度,經度
湖北,中國大陸,2020-03-03T11:43:02,67217,2835,36208,30.9756,112.2707
,韓國,2020-03-03T09:43:02,5186,28,30,36.0000,128.0000
,義大利,2020-03-03T20:03:06,2502,79,160,43.0000,12.0000
,伊朗,2020-03-03T14:23:03,2336,77,291,32.0000,53.0000
廣東,中國大陸,2020-03-03T10:23:10,1350,7,1101,23.3417,113.4244

以及以下內容

FIPS,Admin2,Province_State,Country_Region,Last_Update,Lat,Long_,Confirmed,Deaths,Recovered,Active,Combined_Key
45001,Abbeville,南卡羅來納州,美國,2020-04-10 22:54:07,34.22333378,-82.46170658,7,0,0,0,"Abbeville, South Carolina, US"
22001,Acadia,路易斯安那州,美國,2020-04-10 22:54:07,30.295064899999996,-92.41419698,94,4,0,0,"Acadia, Louisiana, US"
51001,Accomack,弗吉尼亞州,美國,2020-04-10 22:54:07,37.76707161,-75.63234615,12,0,0,0,"Accomack, Virginia, US"

轉換成以下格式

Rpt_Date,Confirmed,Deaths,Recovered,Combined_Key
"2020-05-18",35,0,0,"Abbeville, South Carolina, US"
"2020-05-18",198,12,0,"Acadia, Louisiana, US"
"2020-05-18",688,9,0,"Accomack, Virginia, US"
"2020-05-18",773,22,0,"Ada, Idaho, US"
"2020-05-18",5,0,0,"Adair, Iowa, US"

對於 Python 和 Eric 來說,這是一個完美的快速簡易專案。您決定這將是一個僅限控制檯的應用程式 - 無需類或花哨的 GUI 即可清理一些文字檔案。

一切都始於一個無辜的想法。您只是想看看 Covid-19 感染情況在您親近的地方如何發展,比如您有親戚的英國。您之前檢視的網頁圖表不夠靈活,無法顯示您想看到的內容。提供這些圖表的網站將約翰霍普金斯大學(JHU)系統科學與工程中心列為資料來源。事實證明,JHU 正在 github 上公開共享這些資料。

檢視後,您發現了看起來像 .csv 檔案的內容。“太棒了 - 我只需下載一些檔案,在 LibreOffice Calc 中開啟它們,然後製作一些自己的圖表。”

情況並不完全如此簡單。有全球報告,也有僅限於美國的更詳細的報告。您感興趣的是全球資料。有兩種型別的資料檔案:時間序列和每日報告。

對於時間序列,JHU 每天更新三個綜合表格,用於確診病例、死亡病例和康復病例。每個表格包含位置名稱作為行,日期作為列。病例數顯示在其交匯處。每天都會新增一個新的日期列。新的位置行會間歇性新增。

每日報告包含位置作為行,一個 Last_Updated 列,以及確診病例、死亡病例、康復病例和活躍病例的列,以及在不同時間新增的其他資料,如緯度和經度。

報告名稱的格式為 "<report>.csv",但當您下載了一些檔案後,發現它們實際上是 HTML 格式。在瀏覽器中檢視資料時,您發現可以使用頁面的 RAW 按鈕將頁面資料作為純文字匯出。瀏覽器中使用“檔案”,“另存為”生成了一個基本的 csv 檔案。這有點麻煩,但可以處理。您只需要檢視幾個日期的資料。

您下載了一些資料,製作了自己的圖表,感到很滿意。

時間流逝,Covid 疫情也持續發展。您不斷返回獲取更多資料。這變得很乏味,您不再那麼滿意了。

現在,您是一個數據人員,擁有一些基本的 SQL 技能。您知道您可以使用像 Firebird 這樣的開源關係型資料庫管理系統 (RDBMS),並可能使用某種 GUI 工具與之協作。“太好了,”您想,“我只需要將資料匯入 RDBMS。然後我就可以隨心所欲地切片、切塊和圖表了。”

如果生活真的如此簡單就好了。

您一直使用時間序列報告,但發現它們並不適合資料庫結構。例如,這些報告為每個日期新增一個新的列。在資料庫術語中,這是 ALTER DATABASE,這是一種不常見的新資料新增方式 - 更常見的是透過使用 INSERT 新增一行來完成。還有一些其他的問題。您決定改為使用每日報告,將它們合併成一個大型文字檔案,以便匯入到資料庫中。

但每日報告也有一些問題。一些位置名稱不一致:在早期,“中國大陸”被使用,後來變成了“中國”。“韓國”變成了“韓國,南”,然後又變成了“韓國”。隨著病毒的傳播,覆蓋範圍擴大到包括更多國家、省/州和美國縣。日期格式在 m/d/yyyy 和 yyyy-mm-dd 之間多次切換。最終添加了一個唯一的文字鍵用於表示每個位置。還建立了一個包含每個位置的數字通用 ID (UID) 的表格,但 UID 僅在主資料檔案中使用,不在組合鍵文字中使用。

事實證明,這些報告是每天釋出的,但資料並不一定每天都是新的。一些司法管轄區報告頻率要低得多,因此為每個新日期包含其資料會導致重複。

它成為了一個經典的提取、轉換、載入過程。

ETL 計劃

[編輯 | 編輯原始碼]

將固定位置資料(緯度、經度等)提取到單獨的表格中,用於美國縣、省/州和國家/地區,併為每個表格提供組合鍵字串。

中國大陸 -> 中國
韓國,南 -> 韓國

從 Last_Updated 列提取日期,並重構為 ISO 日期標準 (yyyy-mm-dd)。

新增缺少的組合鍵列,並使用美國縣、省/州和國家/地區的串聯填充該列。

刪除不必要的欄位。

使用日期作為檔名將行寫入輸出檔案。

處理完所有檔案後,將所有檔案合併到一個大型 Python 集合中(以消除重複項),並儲存到檔案中。最後,將資料匯入到資料庫中。

Eric – 新專案

[編輯 | 編輯原始碼]

啟動 Eric 並選擇“專案”,“新建”。將顯示“專案屬性”視窗。大部分內容不言自明。這是一個快速簡易的基於文字的專案,因此“專案型別”為“控制檯”。

華夏公益教科書