从IMDb数据集构建数据库
项目描述
pimdb
Pimdb是一个Python包和命令行实用程序,用于维护基于互联网电影数据库 (IMDb) 的TSV文件的本地副本,这些文件可以从IMDb数据集中获取。
许可证
IMDb数据集仅可用于个人和非商业用途。有关详细信息,请参阅前面的链接。
Pimdb是开源的,并按照BSD许可证分发。源代码可在https://github.com/roskakori/pimdb找到。
安装
Pimdb可在PyPI获取,并可以使用以下命令安装
$ pip install pimdb
快速入门
下载数据集
要将当前IMDb数据集下载到当前文件夹,请运行
pimdb download all
(这将下载约1 GB的数据,可能需要几分钟)。
将数据集传输到表格
要将它们导入当前文件夹中位于
pimdb transfer all
这将需要数小时,在MacBook Pro M1上大约11小时。
生成的数据库包含每个数据集一个表。表名是数据集名称的PascalCase变体。例如,来自数据集 title.basics
的日期存储在表 TitleBasics
中。表中的列名与数据集名称匹配,例如 TitleBasics.primaryTitle
。所有数据集和列的简要描述可以在 IMDb 数据集 的下载页面上找到。
可选地,您可以使用带有 --database
选项的 SQLAlchemy 引擎配置 来指定不同的数据库。
查询表
要查询表,您可以使用任何支持SQLite的数据库工具,例如免费且平台独立的社区版 DBeaver 或 SQLite 的 命令行外壳。
对于简单的查询,您也可以使用 pimdb
并将结果作为UTF-8编码的TSV查看。例如,以下是IMDb根据IMDb排名前10位最长寿的人的详细信息。
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
包含一个以逗号分隔的tconsts列表,如 "tt2076794,tt0116514,tt0118577,tt0086491"。
为了有效地执行此类查询,您可以通过运行以下命令从数据集表构建严格规范化的表。
pimdb build
如果您在之前的 transfer
命令中指定了 --database
,那么您必须在 build
中指定相同的值以找到源数据。这些表通常使用 snake_case 命名表和列,例如 title_allias.is_original
。
这需要一些时间,在MacBook Pro M1上大约需要30分钟。
查询规范化表
N:M关系存储在以 some_to_other
为命名模板的表中,例如 name_to_known_for_title
。这些关系表仅包含指向实际数据的相应数字ID以及一个数字列 ordering
,以记住IMDb数据集列中逗号分隔列表的排序顺序。
例如,以下是列出艾伦·斯密斯的知名作品的SQL查询。
select
title.primary_title,
title.start_year
from
name_to_known_for_title
join name on
name.id = name_to_known_for_title.name_id
join title on
title.id = name_to_known_for_title.title_id
where
name.primary_name = 'Alan Smithee'
有关可用哪些表以及它们之间如何关联的更多信息,请阅读有关 pimdb数据模型 的章节。
下一步
Pimdb的 在线文档 详细介绍了所有方面。您可能会对以下章节特别感兴趣
项目详细信息
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。