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 仅在主数据文件中使用,不在组合键文本中使用。
事实证明,这些报告是每天发布的,但数据并不一定每天都是新的。一些司法管辖区报告频率要低得多,因此为每个新日期包含其数据会导致重复。
它成为了一个经典的提取、转换、加载过程。
将固定位置数据(纬度、经度等)提取到单独的表格中,用于美国县、省/州和国家/地区,并为每个表格提供组合键字符串。
- 中国大陆 -> 中国
- 韩国,南 -> 韩国
从 Last_Updated 列提取日期,并重构为 ISO 日期标准 (yyyy-mm-dd)。
添加缺少的组合键列,并使用美国县、省/州和国家/地区的串联填充该列。
删除不必要的字段。
使用日期作为文件名将行写入输出文件。
处理完所有文件后,将所有文件合并到一个大型 Python 集合中(以消除重复项),并保存到文件中。最后,将数据导入到数据库中。
启动 Eric 并选择“项目”,“新建”。将显示“项目属性”窗口。大部分内容不言自明。这是一个快速简易的基于文本的项目,因此“项目类型”为“控制台”。