前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >量化分析入门——从聚宽获取财务数据Pandas Dataframe

量化分析入门——从聚宽获取财务数据Pandas Dataframe

作者头像
100000798482
发布2022-01-25 11:26:36
1.5K0
发布2022-01-25 11:26:36
举报
文章被收录于专栏:一个番茄说一个番茄说

NOW现在行动!

Pandas是一个强大的分析结构化数据的工具集;它基于Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。它是Python下用于数据工作的一个强有力的工具,数据分析、机器学习、金融、统计等很多领域都有着广泛应用。想要涉足这些领域的同学,Pandas建议一定要学一学。

两大数据结构

  • DataFrame——带标签的,大小可变的,二维异构表格
  • Series——带标签的一维同构数组

重点说下DataFrame,它是Pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。

获取财务数据Dataframe

聚宽是国内不错的量化交易云平台,目前可以通过申请获得本地数据的使用权。授权之后,就可以通过其提供的SDK获取到你想要的数据。在这里,将通过一个获取上市公司财务数据的例子来展示DataFrame的使用。

代码语言:javascript
复制
import jqdatasdk as d

def auth(username, password):
    d.auth(username, password)
    if not d.is_auth():
        raise Exception('Auth failed')


def get_financial_report():
    q = d.query(
        d.valuation, d.income
    ).filter(
        d.valuation.code.in_(['000001.XSHE', '600519.XSHG', '000009.XSHE', '600000.XSHG'])
    )
    df = d.get_fundamentals(q, date='2015-10-15')
    return df


if __name__ == '__main__':
    auth('你的电话号码', '密码')
    res = get_financial_report()
    print(res)

这里的d.get_fundamentals会返回一个DataFrame对象。上面说了DataFrame是一个二维的表格,那么具体是怎么样的一个情况呢。我们可以通过.columns方法来查看支持的列:

代码语言:javascript
复制
> df.index
> Index(['id', 'code', 'pe_ratio', 'turnover_ratio', 'pb_ratio', 'ps_ratio',
       'pcf_ratio', 'capitalization', 'market_cap', 'circulating_cap',
       ...,
       'ci_minority_owners'],
      dtype='object')

由于在这里我们获取的是聚宽的财务数据,因此可以看到返回了非常多的列。

我们可以使用tail()方法比较方便地返回指定的尾部的某条数据,也可以通过head()方法查看第一条数据。

代码语言:javascript
复制
> df.tail(1)
> [1 rows x 56 columns]
        id         code  ...  ci_parent_company_owners  ci_minority_owners
0  5024884  000001.XSHE  ...                       NaN                 0.0

describe查看简单统计

DataFrame还提供一个叫做describe()的方法可以快速查看数据的统计摘要,比如这里查看这几家公司的统计摘要。

代码语言:javascript
复制
                 id   pe_ratio  ...  ci_parent_company_owners  ci_minority_owners
count  4.000000e+00   4.000000  ...              3.000000e+00        3.000000e+00
mean   5.130738e+07  26.053175  ...              9.289807e+09        3.540128e+08
std    1.152475e+03  21.007061  ...              8.683778e+09        3.138209e+08
min    5.130583e+07   5.946700  ...              6.309906e+07        1.260925e+08
25%    5.130700e+07  10.042600  ...              5.283211e+09        1.750462e+08
50%    5.130756e+07  23.860150  ...              1.050332e+10        2.240000e+08
75%    5.130794e+07  39.870725  ...              1.390316e+10        4.679730e+08
max    5.130859e+07  50.545700  ...              1.730300e+10        7.119460e+08

describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、freq(最高频数)

rolling移动窗口函数

这是一个在量化分析时非常有用的函数。比如对于一段时间内股票收盘价,想要快速地获得这段时间内每一天的最近30天的最高价,那就可以用这个函数快速的获取。

代码语言:javascript
复制
stock_dataframe.High.rolling(window=30).max()

Series

前面也说到了Series是同构的一维数据,其实在这里也就是DataFrame中的某一列,比如ci_parent_company_owners这一列数据,想要获取这一列的数据的话,使用df.ci_parent_company_owners或者df['ci_parent_company_owners']都可以。

方便的绘图能力

我们可以利用Pandas很方便地绘制出类似Matlab那样丰富的图表,比如:我们将上面代码里获取到的四家公司的市盈率数据展示出来,只需要加上如下的代码即可:

代码语言:javascript
复制
plot = df['pe_ratio'].plot(title='PE Ratio')
plot.set_xticklabels(['000001.XSHE', '600519.XSHG', '000009.XSHE', '600000.XSHG'])
plt.show()

最后

Pandas的功能远不止这里列举的,在此只是开了一扇门,门外的世界还需要你我共同去探索。在数据分析这块,Pandas无疑是我们的神兵利器。我们可以用它很方便地进行各种函数计算,图标展示等工作,将会大大提升我们的工作效率。后续我也将逐渐记录下更多有意思的玩儿法。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 拍篮球的键盘侠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档