嗨,我是 django 新手,我认为用它来可视化我从某些网站抓取的数据会很有趣,比如这个视频)
(https://www.youtube.com/watch?v=TcnWEQMT3_A&list=PL-2EBeDYMIbTt63EH9ubqbvQqJkBP3vzy&index=1)
但是我发现很难选择正确的加载数据的方式。
现在,我有一个 python 程序,可以从 fbref.com(足球相关网站)抓取 5 大联赛球员的统计数据,并将其存储到 csv 文件中。
我想我现在有两个选择?
在 django 中创建模型并读取 csv 文件以将每一行存储为单独的模型。所以基本上,我将数据存储在 Django db 中,类似于
不创建单独的 Django 模型并使用 pandas 数据框。 (不将我的数据存储到 Django DB)。
我觉得第一种方法效率较低,因为我正在考虑稍后添加进一步的数据分析,所以无论如何我最终都会主要使用 pandas dataframe。不过,我很低调,担心如果我不使用 Django 数据库,是否会出现严重错误。
哪种方法更好?有更好的方法吗?
谢谢!
我最初尝试了第二种方法,但我担心数据管理,
通常您不需要对“所有”数据进行数据处理。事实上,您经常需要(非常)狭窄的数据子集。例如,如果您想要处理西班牙联赛过去五个赛季的进球统计数据。如果您必须将“所有”数据加载到数据框中,那么您经常会做错事。当您不断抓取数据时,文件会变得越来越大,最终服务器将耗尽内存,并且处理时间将花费更长的时间,因为它需要更多的磁盘 I/O。 数据库经过优化以检索数据子集:通过使用 索引,它们很少需要遍历所有记录,并且通常可以在
𝓞(log n)中查看哪些记录是必要的,然后仅执行磁盘操作I/O 仅检索这些项目,并与一些高级缓存机制相结合。 在某种程度上,pandas 的作用与数据库的作用相同,只不过它将所有数据保存在内存中。如果数据相当小,那就没问题。随着数据的增长,并非所有数据都适合内存。但即使是这样,将文件加载到内存中也需要与总行数呈线性关系的时间,而不是您“感兴趣”的行。 所以通常最好将数据存储在数据库中,使用它进行一些过滤和聚合。如果您需要更高级的功能,可以通过
QuerySet
[pypi.org]
将 DjangoDataFrame
转换为 pandas django-pandas
。这样就可以进行额外的处理。但首先使用数据库通常会大大减少磁盘 I/O 量和内存使用量。