跳转到主要内容

从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的数据,可能需要几分钟)。

将数据集传输到表格

要将它们导入当前文件夹中位于的本地SQLite数据库,请运行

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的 在线文档 详细介绍了所有方面。您可能会对以下章节特别感兴趣

项目详细信息


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码发行版

此版本没有可用的源代码发行版文件。请参阅有关生成发行版归档的教程。

编译后的发行版

pimdb-0.3.0-py3-none-any.whl (22.9 kB 查看哈希值)

上传时间 Python 3

由以下提供支持