我有股市数据。每个文件都以公司命名,并包含基本属性,如OHLCV, Date等。
我想创建一个扫描仪,例如:
Get a list of stock where open>50,,market_cap祝辞100000
这将返回指定给定条件的公司列表。
现在的问题是:我应该使用database
还是将数据保留为csv
文件。
查询方法:
我应该做几张表?每个公司一张桌子好吗?我的回答是肯定的,然后我会遵循这个策略,例如,当我想要一份拥有open price
>我必须从每个表中查询最新的行。在这种情况下,使用date-wise
表不是更好吗?如何决定?
文件
我创建了包含公司部门名称的新文件。因此,每个文件都以一个扇区命名,例如IT。文件IT.csv
将包含属于该部门的所有公司的名称。
我必须实现上述两种情况,但我不能决定更好的方法。我应该考虑哪些因素?
对于这种类型的查询,最好有一个数据库,否则每次要提取数据时都要编写文件爬虫。
如果您将所有项目放在一个表中,并为公司添加一列,您将具有运行全局查询的优势(例如,查找连续3天为正的公司,查找在某一天排名前10位的公司,等等)。
您还可以考虑向表中添加哪些索引以加快提取速度。
您的数据似乎非常适合使用关系数据库。它具有预定义的行和列,并且数据不是二进制格式的。
我不确定什么是"扫描仪"。但是您给出的示例查询非常适合SQL语句。
建模的常用方法是将属于逻辑实体类型的数据存储在单个表中。在您的例子中,您可能有:
stock_events
-------------
id (primary key)
event_date (datetime)
stock_symbol (string)
open_price (decimal)
market_cap (decimal)
....
你的查询可以写成:
select *
from stock_events
where open_price > 50
and market_cap > 50000
and event_date = ?
您的挑战将变成索引创建—您的查询可能是临时的,因此很难提前优化。您还可能需要将一只股票与自己或其他股票进行长期比较的查询。
为此,您需要学习相当数量的SQL。
另一种方法是使用R或Python的大数据工具(pandas)等工具来分析这些数据。这样做的好处是,你可以从很多已经存在的例子(例如Kaggle)中学习,但是学习曲线可能会很陡。