为大量数据集找到唯一索引
项目描述
搜索电子表格
当我们搜索普通书面文件时,我们向搜索引擎发送单词,并返回一页页的单词。
如果我们能够通过将电子表格发送到搜索引擎并获取电子表格来搜索电子表格,结果顺序将由各种专业统计数据确定;正如我们使用PageRank来查找相关超文本文档一样,我们可以开发其他有助于我们查找相关电子表格的统计数据。
数据表
我想了很多关于行和列。当我们定义关系数据库中的表时,我们可以根据名称和类型相当好地说明每一列的含义,以及基于唯一索引的行的含义。在电子表格中,我们仍然有列名,但我们没有其他一切。
我将数据表定义为描述一组类似事物的文档,每个事物都有类似的信息(http://www.datakind.org/blog/whats-in-a-table/)。当我们以表格形式表示数据表时,每一行是一个观察结果(一个事物),每一列是一个变量。Blizzard使用这种表格结构来查找任意数据表之间的联系。
唯一索引
我将唯一索引定义为数据表中的一列,或列的组合,其中每一行都有一个不同的值。
唯一索引告诉我们很多;它们让我们了解表中的观测单位以及我们可以与该表很好地连接或合并的其他表。因此,我开发了一个包,用于在普通CSV文件中查找唯一索引。
pip3 install special_snowflake
它被称为“特殊雪花”,但需要一个更好的名字。
如果我们将其中的鸢尾花数据集传递给它,
"Sepal.Length","Sepal.Width","Petal.Length","Petal.Width","Species" 5.1,3.5,1.4,0.2,"setosa" 4.9,3,1.4,0.2,"setosa" 4.7,3.2,1.3,0.2,"setosa" 4.6,3.1,1.5,0.2,"setosa" ...
我们得到没有唯一键
>>> special_snowflake.fromcsv(open('iris.csv')) set()
因为没有任何列的组合可以唯一标识行。当然,如果我们添加一个标识符列,
"Id","Sepal.Length","Sepal.Width","Petal.Length","Petal.Width","Species" 1,5.1,3.5,1.4,0.2,"setosa" 2,4.9,3,1.4,0.2,"setosa" 3,4.7,3.2,1.3,0.2,"setosa" 4,4.6,3.1,1.5,0.2,"setosa" ...
那么它会返回。
>>> special_snowflake.fromcsv(open('iris.csv')) {('Id',)}
让我们看看更有趣的例子:chickweight。
“weight”,”Time”,”Chick”,”Diet” 42,0,”1”,”1” 51,2,”1”,”1” 59,4,”1”,”1” 64,6,”1”,”1” 76,8,”1”,”1” …
我可以阅读这个数据集的文档,并告诉你它的统计单元是(在R中是 ChickWeight),或者我可以让 special_snowflake 为我解决这个问题。
>>> special_snowflake.fromcsv(open('chick.csv')) {('Time', 'Chick')}
统计单元是时间上的小鸡。也就是说,观察了多只小鸡,并且从每只(至少一只)小鸡那里进行了多次观察。
一些电子表格的标识符不那么明显。在这个有1219行和33列的表格中,
>>> from urllib.request import urlopen >>> url = 'http://data.iledefrance.fr/explore/dataset/liste-des-points-de-contact-du-reseau-postal-dile-de-france/download/?format=csv' >>> fp = urlopen(url) >>> special_snowflake.fromcsv(fp, delimiter = ';') {('adresse', 'code_postal'), ('adresse', 'localite'), ('identifiant',), ('libelle_du_site',), ('wgs84',)}
我们发现五个功能唯一键。仅通过查看列名,我猜测前两个是邮政地址部分的组合,而后三个看起来像是正式标识符。并且当我正确地进行操作并查看 数据字典 时,我得到了相同的解释。
这告诉我这个数据集是关于邮政服务地点的,每行一个地点。它还让我对可以作为邮政服务地点唯一标识符的事物有了一些想法。
在单个电子表格上运行这个功能很有趣,但在许多电子表格上运行这个功能则更有趣。在暴风雪中,我找到了具有相同唯一索引的电子表格,然后我寻找这些电子表格之间的重叠。重叠程度高的电子表格可能适合相互连接,而重叠程度低的电子表格可能适合相互并集。
目前这一切都非常粗糙,所以我有点惊讶竟然能得出有趣的结果。
项目详情
blizzard-0.0.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 83fe7738d5477e4b964574735e15109675a95a462e4a71e8c1d3211fad7a7eae |
|
MD5 | f8deb2994beeb4f53c3f4ed310614050 |
|
BLAKE2b-256 | 782c95ea864b01ef57dbe24b936c75eff0129ced2c8bc9737a07e3564f008895 |