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