学术研究里的可复现性一直是个问题,金融学也不例外。一篇论文提出了一个指标,接下来每个人在使用它的时候都要各自花时间去编程再实现一遍,俗称“重复造轮子”。这是个无奈的事情,因为大部分研究者发表论文都不会公布源代码和数据,发布的代码也不一定能无修改运行。这样的事让我深恶痛绝。研究应该尽可能地关注创新和实现,而不是浪费时间去重复造轮子。这就是我开发 frds 的动机——做个一键计算各种常用金融学术指标的开源框架。

frds - financial research data services 是一个基于Python3.8开发的计算常用金融学术指标的开源库,源代码托管在GitHub,发布于PyPI。我的愿景是整合金融学研究里常用的各种数据源,然后标准化并实现重要论文里的指标。因为之前有做了一个市场微结构指标的学术数据库的经验,这次打算进一步地整合并开源。

简明的图形界面

frds 的目标是提供一个最简单的方式去获取计算好的标准化指标,因此跨平台的图形界面是和其核心与各种内置指标同步开发的。

基于PyQt5的跨平台图形界面 图例为frds在Windows下的v0.2.1版本

简单的安装配置

frds 是一个Python库,因此可以通过pip一键安装:

$ pip install frds --upgrade

注意,因为 frds 使用了Python3.8中多进程共享内存的新功能,因此请使用Python3.8及以上的版本。安装后会在用户目录下创建一个名为frds的目录:

  1. Windows下地址为:%USERPROFILE%frds
  2. Mac/Linux下地址为:~/frds

该目录内含有一个data目录用于储存下载的原始数据,一个result目录用于储存计算出来的指标,以及一个名为config.ini的配置文件包含以下默认内容:

[Paths]
base_dir: ~/frds
data_dir: ${base_dir}/data
result_dir: ${base_dir}/result[Login]
wrds_username:
wrds_password: 

用户需要把自己的WRDS用户名和密码键入。如果对于明文储存的密码有担心的话,也可以缺省并在每次启动图形界面时手动输入。

使用示例

最简单的使用方法是打开一个终端,并运行以下命令来启动图形界面:

$ python -m frds.gui.run

通过使用图形界面,用户可以自行选择需要计算的指标,修改数据储存路径等。若不运行图形界面,也可以通过以下命令来以默认参数计算全部内置指标并将结果储存在默认路径下。

$ python -m frds.run

举个例子,下图是 Accounting Restatement 的结果。frds 会从WRDS下载:

  • Compustat Fundamental Annual
  • AuditAnalytics Non-Reliance Restatement

按GVKEY和Fiscal Year合并,并计算过去财年里各种 restatements 的数量。结果保存为Stata的.dta格式数据集,存在result目录下。

本财年内各种restatements的数量

在Python中使用 frds

在Python中使用frds也是非常简单的:

from frds import Professor
from frds.measures import AccountingRestatement, ROA, FirmSize, ROE, AssetTangibilitymeasures = [# 带参数的指标AccountingRestatement(years=1),  # 本财年内的各种restatement数量AccountingRestatement(years=2),  # 过去两个财年内的各种restatement数量# 不带参数或使用默认参数的指标ROA(),FirmSize(),# 这个list可以非常长,frds.Professor会自动控制并行计算的指标数量在CPU核心数以内ROE(),AssetTangibility,
]config = dict(wrds_username="your_wrds_username",wrds_password="you_wrds_password",result_dir="path/to/where/you/want/to/store/the/result/",data_dir="path/to/where/you/want/to/store/the/data/",
)if __name__ == "__main__":# Professor会调度和分发工作给frds.ra.ResearchAssistant来完成计算和数据储存# Professor(主进程)和 ResearchAssistant(子进程)间通过共享内存来交换数据# 在Windows环境下为spawn,Unix/Mac下为forkwith Professor(config=config) as prof:prof.calculate(measures)

内置指标

frds 致力于标准化尽可能多的指标。目前内置支持的指标目录可以在GitHub上浏览。我会不断更新并加入更多的指标到 frds 中来。

开发你自己的指标

开发和使用你自己的指标也是非常简单的,你可以查看GitHub上的README来了解如何通过简单的继承frds.measures.Measure来实现一个定制化的指标——你只需要描述需要的数据源、数据集和使用到的变量名,实现一个名为estimate的函数来即可。

from typing import Dict, List, Tuple
import numpy as np
import pandas as pd
from frds import Professor
from frds.measures import Measure
from frds.data import Dataset# 给出要使用到的数据集和变量
DATASETS_REQUIRED: List[Dataset] = [Dataset(source='wrds',library="comp",table="funda",vars=["datadate", "gvkey", "at", "ib"],date_vars=["datadate"],)
]
# 给出结果数据集的变量标签(label)
VARIABLE_LABELS: Dict[str, str] = {}class NewMeasure(Measure):"""自定义的新measure"""def __init__(self):# Note: `name` will be used to name the result dataset. # So this will lead to a `New Measure.dta` in the `result` folder.# If the new measure contains custom parameters, please also implement# the `__str__()` function to differentiatesuper().__init__(name="New Measure", datasets_required=DATASETS_REQUIRED)def estimate(self, nparrays: List[np.recarray]) -> Tuple[pd.DataFrame, Dict[str, str]]:# do something with nparrays and produce a `result` pandas DataFrame# ...assert isinstance(result, pd.DataFrame)return result, VARIABLE_LABELSmeasures = [NewMeasure(),
]if __name__ == "__main__":with Professor(config=config) as prof:prof.calculate(measures)

开发计划

后续的计划就是拓展数据源。目前只有WRDS,下面要加入SEC EDGAR,Federal Reserve Board H.15 Release,等等。然后把我之前写过的指标统统都翻译到Python然后丢进来。如果有志同道合的朋友想要加入进来一起开发就更好了。项目源码在GitHub,MIT许可。


GitHub地址:https://github.com/mgao6767/frds

项目官网:frds.io 不过现在没空写文档,后续会陆续完善。

我的个人主页:https://mingze-gao.com/

python datasets 下载_frds:金融学术研究数据的Python库相关推荐

  1. python datasets 下载_Python机器学习·微教程

    Python目前是机器学习领域增长最快速的编程语言之一. 该教程共分为11小节.在这个教程里,你将学会: 如何处理数据集,并构建精确的预测模型 使用Python完成真实的机器学习项目 这是一个非常简洁 ...

  2. 学 Python 爬虫,你可以研究下 GoPUP, 一个用于学术研究的小爬虫库

    今天是持续写作的第 22 / 100 天. 如果你有想要交流的想法.技术,欢迎在评论区留言. 熟练的使用 Python 第三方库,00 后程序员必备神器. 每天对着电脑 10 多个小时,畅游在互联网的 ...

  3. python批量下载网页文件-超简单超详细python小文件、大文件、批量下载教程

    按照不同的情况,python下载文件可以分为三种: 小文件下载 大文件下载 批量下载 python 小文件下载 流程:使用request.get请求链接,返回的内容放置到变量r中,然后将r写入到你想放 ...

  4. 2018年python工作好找吗-2018年最新数据:python、大数据、人工智能从业者薪资表...

    问一个很现实的问题,以你目前的薪资,多久能赚到100万? 在一线城市,年薪10万仅能饱腹,就算熬夜加班苦干10年达到100万,相信也所剩无几. 所以要想多赚钱,就要转变思路.勤奋努力,年薪30万并不是 ...

  5. python anaconda下载包_用Anaconda安装本地python包

    Anaconda确实带来了很多方便,但是之前也过多的依赖了conda自带的一键下载python包的功能.这不,这几天突然要用FastFM这个包,无奈conda里没有,于是只能从github下载下来,实 ...

  6. python获取键盘输入_python之判断数据异常Python读取键盘输入

    Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.如下: <python之判断数据异常Python读取键盘输入>总结了关于python网站教程,对于我们来www. ...

  7. python sklearn下载了但是引用失败_关于python:导入sklearn时出错

    Python版本:3.5.2 我开始学习机器学习和事物...所以我安装了sklearn和其他一些以pip形式出现的软件包. 除了sklearn以外,所有其他组件都能够成功安装,因此,我下载了车轮并从此 ...

  8. python eel 多线程_使用EEL将数据从Python发送到Javascript - javascript

    我正在尝试使用EEL及其文档将数据从python发送到Javascript,但它似乎不起作用...我的html / js页面中一直保持null. 这就是我所拥有的.基本上,我想获取BING壁纸的链接并 ...

  9. 用Python进行数据分析之金融和经济数据应用

    金融经济数据方面应用Python非常广泛,也可以算是用Python进行数据分析的一个实际应用. 数据规整化方面的应用 时间序列与截面对齐 在处理金融数据时,最费神的一个问题就是所谓的"数据对 ...

最新文章

  1. 数据结构与算法(6-4)线索二叉树
  2. 【linux】shell中整数运算的加、减、乘、除
  3. Hiberante+jpa,注解生成32字符的Id
  4. java imap 标记已读,JavaMail通过IMAP和POP3接收未读以及设置已读邮件
  5. java中static作用_java中static作用详解
  6. Mac插件分享——AE插件、PS插件、FCPX插件【持续更新中】
  7. matlab制作强光效果代码,自己动手做一个雷达PPI显示器的动态效果图(附Matlab代码)...
  8. EvnetTimeWindow API
  9. java cloud面试题_spring cloud 面试题
  10. 给闪讯加装路由器的一个简单方法
  11. ifconfig 配置ip,netmask,gw
  12. 实验二 SQL Server数据查询
  13. 关于720vr 全景平台 全景图片制作系统 仿720云需要注意的坑 诚意贴
  14. 我是一个线程(修订版)
  15. 人生启示录效应篇之破窗效应:及时矫正和补救正在发生的问题
  16. 你了解多少?空气净化器八大净化技术解读
  17. EXE工程和OCX工程的转化(2002/5/30 三金 版权所有)
  18. 病毒及攻击防御手册之四
  19. Python入门学习难吗
  20. 迈普S5820万兆交换机配置策略路由案例

热门文章

  1. ajax显示失败信息,javascript
  2. matlab nntool教程,Matlab nntool 应用实例教材.doc
  3. 研究大学生基础课程成绩和专业课程成绩的关系,证明两者之间是否有线性关系
  4. 2018.09.07阿里巴巴笔试题
  5. 后期处理之一:雾蒙蒙风景照片处理技巧
  6. 集中式 vs 分布式 版本控制
  7. 安装nodejs插件并在sublime text 3上使用
  8. 当程序员,你应该懂的法则
  9. char varchar nchar nvarchar 四者的区别是什么(为何SQL Server自动给字符串末尾加空格)...
  10. 千万别被“读书无用”给害了