跳轉到內容

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

來自 Wikibooks,開放世界中的開放書籍

快速簡易編輯器

[編輯 | 編輯原始碼]

您想將一些資料匯入資料庫。為此,您需要操作一些文字以確保一致性,將如下文字

省/州,國家/地區,最後更新時間,確診,死亡,康復
安徽,中國大陸,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,省/州,國家/地區,最後更新時間,緯度,經度_,確診,死亡,康復,活躍,組合鍵
45001,Abbeville,南卡羅來納州,美國,2020-04-10 22:54:07,34.22333378,-82.46170658,7,0,0,0,"Abbeville, 南卡羅來納州, 美國"
22001,Acadia,路易斯安那州,美國,2020-04-10 22:54:07,30.295064899999996,-92.41419698,94,4,0,0,"Acadia, 路易斯安那州, 美國"
51001,Accomack,弗吉尼亞州,美國,2020-04-10 22:54:07,37.76707161,-75.63234615,12,0,0,0,"Accomack, 弗吉尼亞州, 美國"

轉換為如下格式

報告日期,確診,死亡,康復,組合鍵
"2020-05-18",35,0,0,"Abbeville, 南卡羅來納州, 美國"
"2020-05-18",198,12,0,"Acadia, 路易斯安那州, 美國"
"2020-05-18",688,9,0,"Accomack, 弗吉尼亞州, 美國"
"2020-05-18",773,22,0,"Ada, 愛達荷州, 美國"
"2020-05-18",5,0,0,"Adair, 愛荷華州, 美國"

對於 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 並選擇“專案,新建”。將顯示“專案屬性”視窗。它大部分是自解釋的。這是一個快速簡易的基於文字的專案,因此“專案型別”為“控制檯”。

華夏公益教科書