从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的数据库工具 示例 DBeavercommand 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描述了所有 更详细的方面。你可能会发现下面几章是特别的 利息:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java OnResizeListener或OnDrawListener或类似的东西   java Orika映射嵌套子列表   保存时java Heroku请求超时代码H12   数据库在Java中出现socket读取超时异常的原因是什么?   java如何更改来自Sqlite数据库的特定数据在Listview中的行颜色   java JAXB解组器无法正确处理XML中的列表   java Android日期时区让我抓狂   java不透明属性在Swing中如何工作?   eclipse从JavaEE代码生成流程图   java如何在Hibernate中从相关表中获取计数   java Glassfish部署了项目的依赖项库   java使内容适合JavaFx中的WebView   java不满意的链接错误libcrypto。所以1.0.0   循环中java数组的使用   java找出哪个包调用服务