从IMDb数据集构建数据库
pimdb的Python项目详细描述
pimdb公司
Pimdb是一个python包和命令行实用程序,用于维护 基本部分 ^在TSV文件中基于{a1}(IMDb) 可从IMDb datasets获得。在
许可证
IMDb datasets仅适用于 个人和非商业用途。有关详细信息,请参阅上一个链接。在
Pimdb是开源的,它分布在 BSD license。来源 代码可从https://github.com/roskakori/pimdb获得。在
安装
Pimdb可从PyPI获得,并且可以 安装使用:
$ pip install pimdb
快速入门
下载数据集
要将当前IMDb数据集下载到当前文件夹,请运行:
^{pr2}$(这将下载大约1GB的数据,可能需要几分钟的时间)。在
将数据集传输到表中
将它们导入到位于当前 文件夹,运行:
pimdb transfer all
(这需要一段时间。在一个有本地数据库的现代笔记本电脑上 你可以期待大约2小时)。在
结果数据库为每个数据集包含一个表。表名
是数据集名称的Pascalase变体。例如,从
数据集title.basics
存储在表TitleBasics
中。列名
例如,在表中匹配来自数据集的名称
TitleBasics.primaryTitle
。所有数据集和
可以在下载页面找到
IMDb datasets。在
也可以使用--database
选项指定其他数据库
带着
SQLAlchemy engine configuration。在
查询表
要查询表,可以使用任何支持SQLite的数据库工具 示例 DBeaver或 command line shell for SQLite。在
对于简单的查询,您还可以使用pimdb
,并将结果视为
UTF-8编码的TSV。例如,以下是十大最古老的
根据IMDb,活着的人:
pimdb query "select * from NameBasics where birthYear is not null and deathYear is null order by birthYear limit 10" >oldest_people_alive.tsv
也可以运行存储在文件中的SQL语句:
pimdb query --file some.sql
构建标准化表
到目前为止,这些表几乎是IMDb数据集的逐字副本 异常,可能的重复行已被删除。此数据模型 已经允许非常容易地执行几种查询 效率高。在
然而,IMDb数据集并没有提供查询N:M关系的简单方法。
例如,列NameBasics.knownForTitles
包含逗号分隔
TConst列表,如“tt2076794、tt0116514、tt0118577、tt0086491”。在
为了高效地执行这些查询,可以构建严格规范化的表 通过运行以下命令从数据集表派生:
pimdb build
如果之前确实为transfer
命令指定了--database
,那么必须
为build
指定相同的值以查找源数据。这些桌子
例如,表和列通常都使用snake_case名称
title_allias.is_original
。在
查询规范化表
N:M关系使用命名模板some_to_other
存储在表中,
例如name_to_known_for_title
。这些关系表仅包含
数字标识对应的实际数据,数字列ordering
到
记住IMDb数据集列中逗号分隔列表的排序顺序。在
例如,下面是一个SQL查询,列出alansmithee已知的头衔 用于:
selecttitle.primary_title,title.start_yearfromname_to_known_for_titlejoinnameonname.id=name_to_known_for_title.name_idjointitleontitle.id=name_to_known_for_title.title_idwherename.primary_name='Alan Smithee'
有关哪些表可用的详细信息,请参见它们之间的关系 阅读关于 pimdb data model。在
从这里到哪里去
Pimdb的online documentation描述了所有 更详细的方面。你可能会发现下面几章是特别的 利息:
- Usage:all命令行 解释的选项
- Data model: 可用表和示例SQL查询
- Contributing: 获取源代码并在本地构建项目
- 项目
标签: