Dataview
介绍
dataview可视为一个基于pandas实现的的针对因子场景的数据库,方便因子的设计实现。通过dataview,可以快捷的调取数据,并在数据集上做运算以生成新的数据集。详细描述见官方用户手册-数据视图
DataView做什么
将频繁使用的DataFrame操作自动化,使用者操作数据时尽量只考虑业务需求而不是技术实现:
- 1.根据字段名,自动从不同的数据api获取数据
- 2.按时间、标的整理对齐(财务数据按发布日期对齐)
- 3.在已有数据基础上,添加字段、加入自定义数据或根据公式计算新数据
- 4.数据查询
- 5.本地存储
数据下载
dataview目前可以通过jaqs官方提供的免费数据源直接从网络获取行情数据和参考数据
步骤:
- 1.配置数据下载的tcp地址(data_config)--使用jaqs官方提供的免费数据源需要提前去官网注册账号,方可使用
- 2.创建DataView和DataService
- 3.配置待请求的数据参数(props)
- 4.数据下载(prepare_data)
import warnings
warnings.filterwarnings('ignore')
from jaqs_fxdayu.data import DataView
from jaqs_fxdayu.data import RemoteDataService # 远程数据服务类
# step 1 其中,username password分别对应官网注册的账号和序列号
data_config = {
"remote.data.address": "tcp://data.quantos.org:8910",
"remote.data.username": "18566262672",
"remote.data.password": "eyJhbGciOiJIUzI1NiJ9.eyJjcmVhdGVfdGltZSI6IjE1MTI3MDI3NTAyMTIiLCJpc3MiOiJhdXRoMCIsImlkIjoiMTg1NjYyNjI2NzIifQ.O_-yR0zYagrLRvPbggnru1Rapk4kiyAzcwYt2a3vlpM"
}
# step 2
ds = RemoteDataService()
ds.init_from_config(data_config)
dv = DataView()
# step 3
props = {'start_date': 20170501, 'end_date': 20171001, 'universe':'000300.SH',
'fields': "pb,pe,total_oper_rev,oper_exp,sw1",
'report_type':'408003000',
'freq': 1}
dv.init_from_config(props, ds)
Begin: DataApi login 18566262672@tcp://data.quantos.org:8910
login success
Initialize config success.
# stp4
dv.prepare_data()
Query data...
Query data - query...
NOTE: price adjust method is [post adjust]
当前请求daily...
{'adjust_mode': None, 'fields': 'trade_status,open,low,close,trade_date,symbol,vwap,open_adj,vwap_adj,low_adj,close_adj,high,high_adj'}
当前请求daily...
{'adjust_mode': 'post', 'fields': 'open,low,close,vwap,high,symbol,trade_date'}
当前请求query_lb_dailyindicator...
{'fields': 'symbol,pe,trade_date,pb'}
WARNING: some data is unavailable:
At fields
Query data - daily fields prepared.
Query data - quarterly fields prepared.
Query instrument info...
Query adj_factor...
Query benchmark...
Query benchmar member info...
Query groups (industry)...
Field [trade_status] is overwritten.
Data has been successfully prepared.
props参数
| 字段 | 缺省值 | 类型 | 说明 |
|---|---|---|---|
| symbol | 不可缺失,symbol与universe二选一 | string | 标的代码,多标的以','隔开,如'000001.SH,600300.SH' |
| universe | 不可缺失,symbol与universe二选一 | string | 指数代码(股票池),将该些指数的成员数据全部请求,多标的以','隔开,如沪深300成分股+上证50成分股'000300.SH,000016.SH' |
| benchmark | 默认为universe中设置的第一个指数 | string | 基准,可以为指数代码或个股代码,单标的 |
| start_date | 不可缺省 | int | 开始日期 |
| end_date | 不可缺省 | int | 结束日期 |
| fields | 不可缺省 | string | 数据字段,多字段以','隔开,如'open,close,high,low' |
| freq | 1 | int | 数据类型,目前只支持1,表示日线数据 |
| all_price | True | bool | 是否默认下载所有日线行情相关数据。默认下载 |
| adjust_mode | 'post' | string | 行情数据复权类型,默认后复权,目前只支持后复权 |
| report_type | '408001000' | string | 财报类型。财报类型共有以下几类:'408001000':合并报表;'408002000':合并报表(单季度);'408003000':合并报表(单季度调整);'408004000':合并报表(调整);'408005000':合并报表(更正前);'408006000':母公司报表;'408007000':母公司报表(单季度);'408008000':母公司报表(单季度调整);'408009000':母公司报表(调整);'408010000':母公司报表(更正前) |
fields可选字段查询方式
dataview的底层数据api提供了字段的文档,可供查阅。目前,只提供了A股财务数据的相关字段文档。更过品种、行情相关字段文档请关注jaqs官方数据文档
from jaqs_fxdayu.data import DataApi
api = DataApi(data_config["remote.data.address"]) # 传入连接到的远端数据服务器的tcp地址
api.login(username=data_config["remote.data.username"],
password=data_config["remote.data.password"])
('username: 18566262672', '0,')
help.apiList
简要描述:
- 查询可选字段的类别
示例:
df , msg = api.query(
view="help.apiList",
fields="",
filter="")
df
| api | comment | name | |
|---|---|---|---|
| 0 | jy.balanceSheet | 资产负债表 | 资产负债表 |
| 1 | jy.cashFlow | 现金流量表 | 现金流量表 |
| 2 | jy.income | 利润表 | 利润表 |
| 3 | jy.qincome | 季度利润表 | 季度利润表 |
| 4 | jz.instrumentInfo | 证券基本信息 | 证券基础信息 |
| 5 | jz.secTradeCal | 交易日历 | 交易日历 |
| 6 | lb.balanceSheet | 资产负债表 | 资产负债表 |
| 7 | lb.cashFlow | 现金流量表 | 现金流量表 |
| 8 | lb.dcCoinInfo | 数字货币信息 | 数字货币信息 |
| 9 | lb.dcDaily | 数字货币日行情 | 数字货币日行情 |
| 10 | lb.dcExchangeInfo | 十大数字货币交易所信息 | 数字货币交易所信息 |
| 11 | lb.dcTradeInfo | 数字货币交易标的信息 | 数字货币交易标的信息 |
| 12 | lb.hkSecDailyIndicator | 港股日行情指标 | 港股日行情指标 |
| 13 | lb.income | 利润表 | 利润表 |
| 14 | lb.indexCons | 指数成份股 | 指数成份股 |
| 15 | lb.indexInfo | 指数基本信息 | 指数基本信息 |
| 16 | lb.industryType | 行业代码表 | 行业代码表 |
| 17 | lb.mfDailyPerform | 公募基金行情表现 | 公募基金行情表现 |
| 18 | lb.mfNav | 公募基金净值 | 公募基金净值 |
| 19 | lb.secAdjFactor | 复权因子 | 复权因子 |
| 20 | lb.secArchives | 公司概况 | 公司概况 |
| 21 | lb.secDailyIndicator | 股票每日指标 | 股票每日指标 |
| 22 | lb.secDailyPerform | 股票行情表现 | 股票行情表现 |
| 23 | lb.secDividend | 分红送股 | 分红送股表 |
| 24 | lb.secFinIndicators | 财务数据指标 | 财务数据指标 |
| 25 | lb.secFrozenPledger | 股东股权冻结和质押 | 股东股权冻结和质押 |
| 26 | lb.secHolderNumber | 股东户数 | 股东户数 |
| 27 | lb.secHoldingStats | 股东持股统计 | 股东持股统计 |
| 28 | lb.secIEXDaily | 美股公司日行情 | 美股公司日行情 |
| 29 | lb.secIEXEps | 美股公司每股收益指标 | 美股公司每股收益指标 |
| 30 | lb.secIEXFinIndex | 美股公司财务报表指标 | 美股公司财务报表指标 |
| 31 | lb.secIEXSymbol | 美股公司股票列表 | 美股公司股票列表 |
| 32 | lb.secIndustry | 行业分类信息 | 行业分类 |
| 33 | lb.secMainHolders | 股东名单 | 股东名单 |
| 34 | lb.secNewestFinIndex | A股公司最新财务指标 | A股公司最新财务指标 |
| 35 | lb.secNewestShareStru | 最新公司股本结构 | 最新公司股本结构 |
| 36 | lb.secSusp | 停复牌数据 | 停复牌 |
help.apiParam
简要描述:
- 查询每个大类别下的可选字段及描述
- 通过filter字段可以限定查询的大类
- 返回结果中,param对应的即是dataview里的可选字段(fields)
示例:
df ,msg = api.query(view="help.apiParam",fields="",filter="api=jy.cashFlow") # 查询现金流量表可选字段
df.head()
| api | comment | dtype | must | param | pname | ptype | |
|---|---|---|---|---|---|---|---|
| 0 | jy.cashFlow | String | N | symbol | 证券代码 | IN | |
| 1 | jy.cashFlow | String | N | start_date | 公告开始日期 | IN | |
| 2 | jy.cashFlow | String | N | end_date | 公告结束日期 | IN | |
| 3 | jy.cashFlow | String | N | start_reportdate | 报告期开始日期 | IN | |
| 4 | jy.cashFlow | String | N | start_reportdate | 报告期结束日期 | IN |
数据查询
fields
jaqs_fxdayu.data.Dataview.fields
简要描述:
- 当前dataview中的数据字段
- 说明:
- 初始请求数据时指定universe,会自动补充index_member(是否是指数成分股)、index_weight(指数成分权重)字段;若universe为多标,取设置的第一个指数为准补充index_member和index_weight
- 初始请求数据时指定all_price=True,会请求open、high、low、close、vwap及相应复权后的结果open_adj、high_adj、low_adj、close_adj、vwap_adj
- 请求行情类数据(open、high、low、close、vwap),若adjust_mode不为空(默认为"post"),会补充相应复权后结果并以'_adj'为后缀。
- 初始请求数据字段中包含季度数据,会自动按时间、标的整理对齐一份到日级别上
- 初始请求数据默认会自动补充adjust_factor(复权因子)、trade_status(交易状态-停牌or可交易)、ann_date(财报公告时间-季度数据)、quarter(季度数据对应披露月份)
示例:
dv.fields
['pe',
'oper_exp',
'high_adj',
'index_weight',
'quarter',
'trade_status',
'low',
'close_adj',
'ann_date',
'open',
'sw1',
'close',
'high',
'low_adj',
'vwap_adj',
'adjust_factor',
'open_adj',
'vwap',
'total_oper_rev',
'index_member',
'pb']
_get_fields
jaqs_fxdayu.data.Dataview._get_fields(field_type, fields)
简要描述:
- 查询众多字段属于某种类型的数据
- field_type:{'market_daily', 'ref_daily', 'income', 'balance_sheet', 'cash_flow', 'fin_indicator', 'group', 'daily', 'quarterly' (对应类型分别为 日行情、日参考数据、收入相关、balance_sheet相关、现金流相关、财务指标相关、行业分类相关、日级别数据、季度级别数据)
- fields:list of str
示例:
dv._get_fields('quarterly',dv.fields) # 查询数据集的字段里有哪些是季度级别数据
['ann_date', 'quarter', 'oper_exp', 'total_oper_rev']
symbol
jaqs_fxdayu.data.Dataview.symbol
简要描述:
- 当前dataview中的标的品种
示例:
dv.symbol[:2] # 前两只股票
['000001.SZ', '000002.SZ']
universe
jaqs_fxdayu.data.Dataview.universe
简要描述:
- 当前dataview中股票池的指数代码
示例:
dv.universe
['000300.SH']
benchmark
jaqs_fxdayu.data.Dataview.benchmark
简要描述:
- 当前dataview中的基准代码
示例:
dv.benchmark
'000300.SH'
data_benchmark
jaqs_fxdayu.data.Dataview.data_benchmark
简要描述:
- 当前dataview中的基准的日行情数据
示例:
dv.data_benchmark.head()
| close | |
|---|---|
| trade_date | |
| 20170306 | 3446.4840 |
| 20170307 | 3453.9565 |
| 20170308 | 3448.7313 |
| 20170309 | 3426.9438 |
| 20170310 | 3427.8916 |
data_inst
jaqs_fxdayu.data.Dataview.data_inst
简要描述:
- 数据集中的证券基础信息
示例:
dv.data_inst.head()
| buylot | delist_date | inst_type | list_date | multiplier | name | pricetick | product | |
|---|---|---|---|---|---|---|---|---|
| symbol | ||||||||
| 600000.SH | 100 | 99999999 | 1 | 19991110 | 1 | 浦发银行 | 0.01 | |
| 600016.SH | 100 | 99999999 | 1 | 20001219 | 1 | 民生银行 | 0.01 | |
| 600030.SH | 100 | 99999999 | 1 | 20030106 | 1 | 中信证券 | 0.01 | |
| 600050.SH | 100 | 99999999 | 1 | 20021009 | 1 | 中国联通 | 0.01 | |
| 600109.SH | 100 | 99999999 | 1 | 19970807 | 1 | 国金证券 | 0.01 |
| 字段 | 字段中文名 |
|---|---|
| inst_type | 证券类型 |
| symbol | 证券代码 |
| name | 证券名称 |
| list_date | 上市日期 |
| delist_date | 退市日期 |
| buylot | 最小买入单位 |
| pricetick | 最小变动单位 |
| product | 合约品种 |
| multiplier | 合约乘数 |
dates
jaqs_fxdayu.data.Dataview.dates
简要描述:
- 数据的日期序列
示例:
dv.dates[:2] #日期序列前两个
array([20170306, 20170307])
data_d
jaqs_fxdayu.data.Dataview.data_d
简要描述:
- 日级别数据集
示例:
dv.data_d.head()
| symbol | 000001.SZ | ... | 603993.SH | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| field | adjust_factor | ann_date | close | close_adj | high | high_adj | index_member | index_weight | low | low_adj | ... | open_adj | oper_exp | pb | pe | quarter | sw1 | total_oper_rev | trade_status | vwap | vwap_adj |
| trade_date | |||||||||||||||||||||
| 20170306 | 100.523 | 20161021.0 | 9.45 | 949.94235 | 9.46 | 950.94758 | 1.0 | 0.008449 | 9.39 | 943.91097 | ... | 15.685408 | 0.0 | 4.7252 | 110.7088 | 9.0 | 240000 | 3.496036e+09 | 交易 | 4.97 | 15.94 |
| 20170307 | 100.523 | 20161021.0 | 9.45 | 949.94235 | 9.46 | 950.94758 | 1.0 | 0.008449 | 9.40 | 944.91620 | ... | 15.974097 | 0.0 | 4.5926 | 107.6027 | 9.0 | 240000 | 3.496036e+09 | 交易 | 4.88 | 15.66 |
| 20170308 | 100.523 | 20161021.0 | 9.42 | 946.92666 | 9.45 | 949.94235 | 1.0 | 0.008449 | 9.40 | 944.91620 | ... | 15.557102 | 0.0 | 4.6211 | 108.2683 | 9.0 | 240000 | 3.496036e+09 | 交易 | 4.87 | 15.62 |
| 20170309 | 100.523 | 20161021.0 | 9.38 | 942.90574 | 9.43 | 947.93189 | 1.0 | 0.008449 | 9.36 | 940.89528 | ... | 15.781638 | 0.0 | 4.6495 | 108.9339 | 9.0 | 240000 | 3.496036e+09 | 交易 | 4.95 | 15.89 |
| 20170310 | 100.523 | 20161021.0 | 9.40 | 944.91620 | 9.41 | 945.92143 | 1.0 | 0.008449 | 9.36 | 940.89528 | ... | 15.525026 | 0.0 | 4.6021 | 107.8246 | 9.0 | 240000 | 3.496036e+09 | 交易 | 4.87 | 15.62 |
5 rows × 6930 columns
data_q
jaqs_fxdayu.data.Dataview.data_q
简要描述:
- 季度级别数据集
示例:
dv.data_q.head()
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | ... | 603858.SH | 603885.SH | 603993.SH | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| field | ann_date | oper_exp | quarter | total_oper_rev | ann_date | oper_exp | quarter | total_oper_rev | ann_date | oper_exp | ... | quarter | total_oper_rev | ann_date | oper_exp | quarter | total_oper_rev | ann_date | oper_exp | quarter | total_oper_rev |
| trade_date | |||||||||||||||||||||
| 20140930 | NaN | NaN | 9 | NaN | NaN | NaN | 9 | NaN | NaN | NaN | ... | 9 | NaN | 20151031.0 | 0.0 | 9 | 5.092343e+09 | NaN | NaN | 9 | NaN |
| 20150331 | NaN | NaN | 3 | NaN | NaN | NaN | 3 | NaN | NaN | NaN | ... | 3 | NaN | 20160421.0 | 0.0 | 3 | 1.956667e+09 | NaN | NaN | 3 | NaN |
| 20150630 | NaN | NaN | 6 | NaN | NaN | NaN | 6 | NaN | NaN | NaN | ... | 6 | NaN | NaN | NaN | 6 | NaN | NaN | NaN | 6 | NaN |
| 20150930 | 20151023.0 | 4.784700e+10 | 9 | 7.115200e+10 | 20151028.0 | 0.0 | 9 | 7.959621e+10 | 20151031.0 | 0.0 | ... | 9 | 7.774995e+09 | 20151031.0 | 0.0 | 9 | 6.262755e+09 | 20151030.0 | 0.0 | 9 | 3.174664e+09 |
| 20151231 | 20160310.0 | 6.726800e+10 | 12 | 9.616300e+10 | 20160314.0 | 0.0 | 12 | 1.955491e+11 | 20160427.0 | 0.0 | ... | 12 | 1.165563e+10 | 20160415.0 | 0.0 | 12 | 8.158238e+09 | 20160325.0 | 0.0 | 12 | 4.196840e+09 |
5 rows × 1320 columns
get
jaqs_fxdayu.data.Dataview.get(symbol="", start_date=0, end_date=0, fields="", date_type="int")
简要描述:
- 综合查询方法:按品种+字段+日期查询数据,返回日期为索引,品种+字段(MultiIndex)为columns的DataFrame
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| symbol | 否 | string | 标的代码,多标的以','隔开,如'000001.SH,600300.SH',默认查询数据集中所有标的 |
| start_date | 否 | int | 开始日期,默认从数据集开始日期起 |
| end_date | 否 | int | 结束日期,默认到数据集结束日期 |
| fields | 否 | string | 数据字段,多字段以','隔开,如'open,close,high,low',默认查询数据集中所有字段 |
| date_type | 否 | "int"/"datetime" | 日期作为索引时返回的索引类型,默认为"int",即日期为整型;当设置为"datetime"时,日期索引返回为python datetime格式 |
示例:
dv.get("000001.SZ,000002.SZ",fields="open,high").head()
| symbol | 000001.SZ | 000002.SZ | ||
|---|---|---|---|---|
| field | high | open | high | open |
| trade_date | ||||
| 20170502 | 8.96 | 8.96 | 19.37 | 19.30 |
| 20170503 | 8.93 | 8.92 | 19.25 | 19.20 |
| 20170504 | 8.89 | 8.89 | 19.19 | 18.90 |
| 20170505 | 8.76 | 8.74 | 19.07 | 18.95 |
| 20170508 | 8.62 | 8.60 | 18.96 | 18.89 |
get_snapshot
jaqs_fxdayu.data.Dataview.get_snapshot(snapshot_date, symbol="", fields="")
简要描述:
- 切片查询方法:指定日期,按品种+字段查询数据,返回品种为索引,字段为columns的DataFrame
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| snapshot_date | 是 | int | 指定查询切片的日期 |
| symbol | 否 | string | 标的代码,多标的以','隔开,如'000001.SH,600300.SH',默认查询数据集中所有标的 |
| fields | 否 | string | 数据字段,多字段以','隔开,如'open,close,high,low',默认查询数据集中所有字段 |
示例:
dv.get_snapshot(20170504, fields="open,high").head()
| field | high | open |
|---|---|---|
| symbol | ||
| 000001.SZ | 8.89 | 8.89 |
| 000002.SZ | 19.19 | 18.90 |
| 000008.SZ | 7.93 | 7.93 |
| 000009.SZ | 8.65 | 8.51 |
| 000027.SZ | 6.93 | 6.84 |
get_symbol
jaqs_fxdayu.data.Dataview.get_symbol(symbol, start_date=0, end_date=0, fields="", date_type="int")
简要描述:
- 切片查询方法:指定品种,按时间+字段查询数据,返回时间为索引,字段为columns的DataFrame
- 查询的结果为日频(季度数据也会被自动扩展为日频)
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| symbol | 是 | string | 标的代码,单标的 |
| start_date | 否 | int | 开始日期,默认从数据集开始日期起 |
| end_date | 否 | int | 结束日期,默认到数据集结束日期 |
| fields | 否 | string | 字段名称,多字段以","隔开,如"close,open",默认查询数据集所有的字段 |
| date_type | 否 | "int"/"datetime" | 日期作为索引时返回的索引类型,默认为"int",即日期为整型;当设置为"datetime"时,日期索引返回为python datetime格式 |
示例:
dv.get_symbol("000001.SZ").head()
| field | adjust_factor | ann_date | close | close_adj | high | high_adj | index_member | index_weight | low | low_adj | ... | open_adj | oper_exp | pb | pe | quarter | sw1 | total_oper_rev | trade_status | vwap | vwap_adj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20170502 | 100.523 | 20170422.0 | 8.94 | 898.67562 | 8.96 | 900.68608 | 1.0 | 0.008049 | 8.90 | 894.65470 | ... | 900.68608 | 1.951800e+10 | 0.8174 | 6.7925 | 3.0 | 银行 | 2.753200e+10 | 1.0 | 8.93 | 897.41 |
| 20170503 | 100.523 | 20170422.0 | 8.91 | 895.65993 | 8.93 | 897.67039 | 1.0 | 0.008049 | 8.89 | 893.64947 | ... | 896.66516 | 1.951800e+10 | 0.8147 | 6.7697 | 3.0 | 银行 | 2.753200e+10 | 1.0 | 8.91 | 895.32 |
| 20170504 | 100.523 | 20170422.0 | 8.74 | 878.57102 | 8.89 | 893.64947 | 1.0 | 0.008049 | 8.72 | 876.56056 | ... | 893.64947 | 1.951800e+10 | 0.7992 | 6.6405 | 3.0 | 银行 | 2.753200e+10 | 1.0 | 8.81 | 885.83 |
| 20170505 | 100.523 | 20170422.0 | 8.63 | 867.51349 | 8.76 | 880.58148 | 1.0 | 0.008049 | 8.58 | 862.48734 | ... | 878.57102 | 1.951800e+10 | 0.7891 | 6.5570 | 3.0 | 银行 | 2.753200e+10 | 1.0 | 8.65 | 869.59 |
| 20170508 | 100.523 | 20170422.0 | 8.57 | 861.48211 | 8.62 | 866.50826 | 1.0 | 0.008049 | 8.54 | 858.46642 | ... | 864.49780 | 1.951800e+10 | 0.7836 | 6.5114 | 3.0 | 银行 | 2.753200e+10 | 1.0 | 8.57 | 861.76 |
5 rows × 21 columns
get_ts
jaqs_fxdayu.data.Dataview.get_ts(field, symbol="", start_date=0, end_date=0, date_type="int")
简要描述:
- 切片查询方法:指定字段,按时间+品种查询数据,返回时间为索引,品种为columns的DataFrame
- 查询的结果为日频(季度数据也会被自动扩展为日频)
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| symbol | 否 | string | 标的代码,多标的以','隔开,如'000001.SH,600300.SH',默认查询数据集中所有标的 |
| start_date | 否 | int | 开始日期,默认从数据集开始日期起 |
| end_date | 否 | int | 结束日期,默认到数据集结束日期 |
| field | 是 | string | 数据字段,单字段 |
| date_type | 否 | "int"/"datetime" | 日期作为索引时返回的索引类型,默认为"int",即日期为整型;当设置为"datetime"时,日期索引返回为python datetime格式 |
示例:
dv.get_ts("open").head()
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | 000009.SZ | 000027.SZ | 000039.SZ | 000060.SZ | 000061.SZ | 000063.SZ | 000069.SZ | ... | 601988.SH | 601989.SH | 601992.SH | 601997.SH | 601998.SH | 603000.SH | 603160.SH | 603858.SH | 603885.SH | 603993.SH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20170502 | 8.96 | 19.30 | 8.09 | 8.40 | 6.99 | 16.09 | 10.33 | 9.32 | 17.73 | 8.15 | ... | 3.58 | 7.05 | 8.09 | 15.70 | 6.01 | 14.90 | 96.55 | 80.25 | 22.28 | 4.41 |
| 20170503 | 8.92 | 19.20 | 7.99 | 8.52 | 6.95 | 16.06 | 10.24 | 9.32 | 17.58 | 8.09 | ... | 3.55 | 6.96 | 8.15 | 15.67 | 5.97 | 14.90 | 97.88 | 80.60 | 22.28 | 4.44 |
| 20170504 | 8.89 | 18.90 | 7.93 | 8.51 | 6.84 | 15.96 | 10.13 | 9.22 | 17.78 | 7.96 | ... | 3.53 | 6.85 | 7.58 | 15.68 | 5.90 | 14.80 | 97.20 | 80.50 | 22.40 | 4.44 |
| 20170505 | 8.74 | 18.95 | 7.90 | 8.54 | 6.85 | 15.70 | 9.91 | 9.16 | 17.80 | 7.98 | ... | 3.52 | 6.74 | 7.78 | 15.56 | 5.85 | 14.35 | 97.00 | 79.71 | 22.40 | 4.30 |
| 20170508 | 8.60 | 18.89 | 7.52 | 8.26 | 6.79 | 15.17 | 9.89 | 9.10 | 17.56 | 7.87 | ... | 3.52 | 6.59 | 7.80 | 15.05 | 5.83 | 14.11 | 94.11 | 78.31 | 22.32 | 4.23 |
5 rows × 330 columns
get_ts_quarter
jaqs_fxdayu.data.Dataview.get_ts_quarter(field, symbol="", start_date=0, end_date=0)
简要描述:
- 切片查询方法:指定字段,按时间+品种查询季度数据,返回报告日期为索引,品种为columns的DataFrame
- 注意:参数中提供的field必须为季度数据,可通过Dataview._get_fields('quarterly',Dataview.fields)查询数据集的字段里有哪些是季度级别数据
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| symbol | 否 | string | 标的代码,多标的以','隔开,如'000001.SH,600300.SH',默认查询数据集中所有标的 |
| start_date | 否 | int | 开始日期,默认从数据集开始日期起 |
| end_date | 否 | int | 结束日期,默认到数据集结束日期 |
| field | 是 | string | 季度数据字段,单字段 |
示例:
dv.get_ts_quarter('total_oper_rev').head()
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | 000009.SZ | 000027.SZ | 000039.SZ | 000060.SZ | 000061.SZ | 000063.SZ | 000069.SZ | ... | 601988.SH | 601989.SH | 601992.SH | 601997.SH | 601998.SH | 603000.SH | 603160.SH | 603858.SH | 603885.SH | 603993.SH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20140930 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 5.092343e+09 | NaN |
| 20150331 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | 1.698335e+09 | NaN | NaN | NaN | NaN | 1.956667e+09 | NaN |
| 20150630 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | 3.622176e+09 | NaN | NaN | 4.815833e+08 | NaN | NaN | NaN |
| 20150930 | 7.115200e+10 | 7.959621e+10 | 7.631092e+08 | 3.145235e+09 | 8.676531e+09 | 4.527115e+10 | 1.149957e+10 | 1.280032e+09 | 6.852324e+10 | NaN | ... | 3.567730e+11 | 3.977208e+10 | 2.590268e+10 | 5.605255e+09 | 1.074530e+11 | 1.066451e+09 | 7.322436e+08 | 7.774995e+09 | 6.262755e+09 | 3.174664e+09 |
| 20151231 | 9.616300e+10 | 1.955491e+11 | 1.295076e+09 | 4.895401e+09 | 1.112998e+10 | 5.868580e+10 | 1.696571e+10 | 1.736651e+09 | 1.001864e+11 | 3.223633e+10 | ... | 4.743210e+11 | 5.981080e+10 | 4.092534e+10 | 7.705192e+09 | 1.451340e+11 | 1.604762e+09 | 1.119601e+09 | 1.165563e+10 | 8.158238e+09 | 4.196840e+09 |
5 rows × 330 columns
数据添加
data_api
jaqs_fxdayu.data.Dataview.data_api
简要描述:
- 数据api(DataService远程数据服务类)
示例:
dv.data_api
<jaqs.data.dataservice.RemoteDataService at 0x7f1ed0679978>
refresh_data
jaqs_fxdayu.data.Dataview.refresh_data(end_date,data_api=None)
简要描述:
- 将数据集中的数据更新至end_date
- 自定义的数据(通过add_formula计算或append_df加入数据集的)无法更新
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| end_date | 是 | int | 更新到的截止日期,如20180411 |
| data_api | 否 | jaqs.data.dataservice.RemoteDataService | DataService远程数据服务类 |
示例:
dv.get_ts("close").tail(2)
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | 000009.SZ | 000027.SZ | 000039.SZ | 000060.SZ | 000061.SZ | 000063.SZ | 000069.SZ | ... | 601988.SH | 601989.SH | 601992.SH | 601997.SH | 601998.SH | 603000.SH | 603160.SH | 603858.SH | 603885.SH | 603993.SH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20170928 | 10.88 | 26.41 | 8.62 | 8.99 | 6.47 | 18.18 | 12.05 | 9.03 | 28.15 | 8.19 | ... | 4.14 | 6.21 | 6.17 | 14.70 | 6.31 | 13.81 | 93.71 | 67.59 | 14.40 | 7.76 |
| 20170929 | 11.11 | 26.25 | 9.03 | 8.99 | 6.45 | 18.15 | 12.13 | 8.82 | 28.30 | 8.17 | ... | 4.12 | 6.21 | 6.35 | 14.71 | 6.30 | 13.84 | 95.44 | 67.76 | 14.45 | 7.84 |
2 rows × 330 columns
dv.refresh_data(20171201)
dv.get_ts("close").tail(2)
Field name [{'quarter', 'adjust_factor'}] not valid, ignore.
Initialize config success.
Query data...
Query data - query...
NOTE: price adjust method is [post adjust]
当前请求daily...
{'adjust_mode': None, 'fields': 'trade_status,symbol,open_adj,vwap,trade_date,index_member,low,close_adj,high,open,high_adj,low_adj,vwap_adj,index_weight,close'}
当前请求daily...
{'adjust_mode': 'post', 'fields': 'vwap,high,low,open,close,symbol,trade_date'}
当前请求query_lb_dailyindicator...
{'fields': 'pe,pb,symbol,trade_date'}
WARNING: some data is unavailable:
At fields
Query data - daily fields prepared.
Query data - quarterly fields prepared.
Query instrument info...
Query adj_factor...
Query benchmark...
Query benchmar member info...
Field [index_member] is overwritten.
Field [index_weight] is overwritten.
Query groups (industry)...
Data has been successfully prepared.
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | 000009.SZ | 000027.SZ | 000039.SZ | 000060.SZ | 000061.SZ | 000063.SZ | 000069.SZ | ... | 601988.SH | 601989.SH | 601992.SH | 601997.SH | 601998.SH | 603000.SH | 603160.SH | 603858.SH | 603885.SH | 603993.SH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20171130 | 13.38 | 31.22 | 8.48 | 7.60 | 6.12 | 19.49 | 10.83 | 7.69 | 33.08 | 8.89 | ... | 3.93 | 6.16 | 5.93 | 14.39 | 6.36 | 12.15 | 111.66 | 54.66 | 13.43 | 7.07 |
| 20171201 | 13.00 | 30.73 | 8.59 | 7.58 | 6.10 | 19.81 | 10.92 | 7.72 | 33.56 | 8.85 | ... | 3.92 | 6.12 | 5.92 | 14.35 | 6.39 | 12.23 | 110.46 | 54.47 | 13.17 | 7.10 |
2 rows × 330 columns
add_comp_info
jaqs_fxdayu.data.Dataview.add_comp_info(index,data_api=None)
简要描述:
- 往数据集里添加两个新字段——symbol是否属于某指数成分股 & symbol在某指数中所占的比重如何
- 区别于通过设置universe初始化默认下载的index_member和index_weight字段, 通过该方法新增的字段可更灵活的查询股票标的与任意指数的关系和权重
- 新增字段名为[index]_member [index]_weight
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| index | 是 | string | 指数代码 |
| data_api | 否 | jaqs.data.dataservice.RemoteDataService | DataService远程数据服务类 |
示例:
dv.add_comp_info('000016.SH')
dv.get_ts("000016.SH_weight").head()
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | 000009.SZ | 000027.SZ | 000039.SZ | 000060.SZ | 000061.SZ | 000063.SZ | 000069.SZ | ... | 601988.SH | 601989.SH | 601992.SH | 601997.SH | 601998.SH | 603000.SH | 603160.SH | 603858.SH | 603885.SH | 603993.SH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20170502 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | 0.01881 | 0.01607 | NaN | NaN | 0.00459 | NaN | NaN | NaN | NaN | NaN |
| 20170503 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | 0.01881 | 0.01607 | NaN | NaN | 0.00459 | NaN | NaN | NaN | NaN | NaN |
| 20170504 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | 0.01881 | 0.01607 | NaN | NaN | 0.00459 | NaN | NaN | NaN | NaN | NaN |
| 20170505 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | 0.01881 | 0.01607 | NaN | NaN | 0.00459 | NaN | NaN | NaN | NaN | NaN |
| 20170508 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | 0.01881 | 0.01607 | NaN | NaN | 0.00459 | NaN | NaN | NaN | NaN | NaN |
5 rows × 330 columns
add_field
jaqs_fxdayu.data.Dataview.add_field(field_name, data_api=None, report_type='408001000')
简要描述:
- 通过远程数据源往数据集里新增新字段(需确保远程数据源中含有该字段的数据)
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| field_name | 是 | string | 待新增的字段名 |
| data_api | 否 | jaqs.data.dataservice.RemoteDataService | DataService远程数据服务类 |
| report_type | 否 | string | 财报类型。财报类型共有以下几类:'408001000':合并报表;'408002000':合并报表(单季度);'408003000':合并报表(单季度调整);'408004000':合并报表(调整);'408005000':合并报表(更正前);'408006000':母公司报表;'408007000':母公司报表(单季度);'408008000':母公司报表(单季度调整);'408009000':母公司报表(调整);'408010000':母公司报表(更正前)。 默认为'408001000':合并报表 |
示例:
dv.add_field("volume")
Query data - query...
NOTE: price adjust method is [post adjust]
当前请求daily...
{'adjust_mode': None, 'fields': 'volume,trade_status,symbol,trade_date'}
Query data - daily fields prepared.
True
dv.get_ts("volume").head()
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | 000009.SZ | 000027.SZ | 000039.SZ | 000060.SZ | 000061.SZ | 000063.SZ | 000069.SZ | ... | 601988.SH | 601989.SH | 601992.SH | 601997.SH | 601998.SH | 603000.SH | 603160.SH | 603858.SH | 603885.SH | 603993.SH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20170502 | 31102610.0 | 18442367.0 | 9684786.0 | 25497861.0 | 6432105.0 | 6327586.0 | 8965345.0 | 4378121.0 | 19238235.0 | 27143591.0 | ... | 66093550.0 | 66530694.0 | 544839719.0 | 10925965.0 | 17520651.0 | 3119911.0 | 2091792.0 | 818200.0 | 926950.0 | 88555440.0 |
| 20170503 | 28031077.0 | 26926611.0 | 7763618.0 | 18416240.0 | 10746444.0 | 6107544.0 | 13106532.0 | 4834657.0 | 34074547.0 | 38599137.0 | ... | 84611551.0 | 86231763.0 | 516934503.0 | 11688295.0 | 23738285.0 | 5159855.0 | 1346232.0 | 854976.0 | 1006828.0 | 58089924.0 |
| 20170504 | 69651707.0 | 17846705.0 | 8177165.0 | 15236008.0 | 7574795.0 | 7298552.0 | 25223485.0 | 5413535.0 | 33992154.0 | 17511452.0 | ... | 74607306.0 | 105007184.0 | 606859878.0 | 15697719.0 | 38672243.0 | 6574210.0 | 823415.0 | 1148000.0 | 1139450.0 | 72505821.0 |
| 20170505 | 62370085.0 | 11655082.0 | 17977630.0 | 19831245.0 | 7462745.0 | 13769005.0 | 14733040.0 | 4027676.0 | 32366194.0 | 20326215.0 | ... | 175567864.0 | 139296698.0 | 318657662.0 | 15302449.0 | 29776701.0 | 7457617.0 | 1135698.0 | 1159354.0 | 2677492.0 | 69479848.0 |
| 20170508 | 46008989.0 | 18399614.0 | 8826250.0 | 19415168.0 | 9090216.0 | 5051955.0 | 14364021.0 | 3932185.0 | 29396110.0 | 29515727.0 | ... | 138086728.0 | 144402061.0 | 383459440.0 | 14624454.0 | 28293010.0 | 5304703.0 | 1563932.0 | 1425800.0 | 1799118.0 | 47210293.0 |
5 rows × 330 columns
add_formula
jaqs_fxdayu.data.Dataview.add_formula(field_name,formula,is_quarterly,add_data=False,overwrite=True,formula_func_name_style='camel',data_api=None,register_funcs = None,within_index=True)
简要描述:
- 通过表达式定义因子
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| field_name | 是 | string | 自定义的因子名称 |
| formula | 是 | string | 因子表达式 |
| is_quarterly | 是 | bool | 公式中的季度数据是否按季频周期提取(若为True,则季度数据时间序列相关计算在季频下进行,否则处理到日频下进行计算。日频数据不会受此参数影响) |
| add_data | 否 | bool | 是否将最终结果添加到dataview数据集中,默认不添加 |
| overwrite | 否 | bool | 若因子名称(field_name)与数据集中已有的字段冲突,是否覆盖。仅在add_data=True时生效,默认覆盖 |
| formula_func_name_style | 否 | string {'upper', 'lower', 'camel'} | 表达式中用到的函数名大小写规则,默认为'camel' |
| data_api | 否 | jaqs.data.dataservice.RemoteDataService | DataService远程数据服务类,若因子表达式中使用到的字段在当前数据集中没有,会通过该api自动从网络请求相应字段添加到当前数据集当中 |
| register_funcs | 否 | dict of function | 因子表达式中用到的自定义方法所组成的dict,如{"name1":func1,"name2":func2} |
| with_index | 否 | bool | 执行因子表达式计算的时候 是否只考虑指数成分股。仅在数据集字段中含有index_member时生效, 默认为True |
示例一: 直接返回
dv.add_formula("momentum", "Return(close_adj, 20)", is_quarterly=False).head()
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | 000009.SZ | 000027.SZ | 000039.SZ | 000060.SZ | 000061.SZ | 000063.SZ | 000069.SZ | ... | 601988.SH | 601989.SH | 601992.SH | 601997.SH | 601998.SH | 603000.SH | 603160.SH | 603858.SH | 603885.SH | 603993.SH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20170502 | -0.015419 | -0.064783 | -0.076389 | -0.057860 | 0.007246 | -0.011707 | -0.074910 | -0.154265 | 0.037647 | 0.120332 | ... | -0.027322 | -0.034578 | 0.708075 | -0.058859 | -0.099548 | -0.107944 | 0.032925 | -0.084092 | -0.032118 | 0.008929 |
| 20170503 | -0.028353 | -0.083576 | -0.093822 | -0.066521 | -0.036517 | -0.006211 | -0.089767 | -0.162579 | 0.050708 | 0.093151 | ... | -0.045946 | -0.076613 | 0.633047 | -0.101772 | -0.119225 | -0.105232 | 0.030166 | -0.089233 | -0.038296 | -0.043550 |
| 20170504 | -0.051031 | -0.075802 | -0.113611 | -0.085653 | -0.057613 | -0.043135 | -0.126427 | -0.179695 | 0.028852 | 0.076716 | ... | -0.040761 | -0.109211 | 0.543860 | -0.087668 | -0.131657 | -0.146903 | 0.001239 | -0.108997 | -0.048739 | -0.151733 |
| 20170505 | -0.061957 | -0.091390 | -0.179543 | -0.114684 | -0.058172 | -0.095238 | -0.128748 | -0.185484 | 0.017929 | 0.059140 | ... | -0.032787 | -0.132199 | 0.377660 | -0.109549 | -0.132244 | -0.162114 | -0.038807 | -0.127279 | -0.039676 | -0.162778 |
| 20170508 | -0.068478 | -0.112019 | -0.194934 | -0.136120 | -0.075000 | -0.095668 | -0.129061 | -0.178796 | -0.013326 | 0.042610 | ... | -0.019231 | -0.161880 | 0.133871 | -0.127647 | -0.130370 | -0.175264 | -0.002776 | -0.132699 | -0.058723 | -0.152260 |
5 rows × 330 columns
示例二: 添加到数据集里,则计算结果之后可以反复调用
dv.add_formula("momentum", "Return(close_adj, 20)", is_quarterly=False, add_data=True)
dv.get_ts("momentum").head()
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | 000009.SZ | 000027.SZ | 000039.SZ | 000060.SZ | 000061.SZ | 000063.SZ | 000069.SZ | ... | 601988.SH | 601989.SH | 601992.SH | 601997.SH | 601998.SH | 603000.SH | 603160.SH | 603858.SH | 603885.SH | 603993.SH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20170502 | -0.015419 | -0.064783 | -0.076389 | -0.057860 | 0.007246 | -0.011707 | -0.074910 | -0.154265 | 0.037647 | 0.120332 | ... | -0.027322 | -0.034578 | 0.708075 | -0.058859 | -0.099548 | -0.107944 | 0.032925 | -0.084092 | -0.032118 | 0.008929 |
| 20170503 | -0.028353 | -0.083576 | -0.093822 | -0.066521 | -0.036517 | -0.006211 | -0.089767 | -0.162579 | 0.050708 | 0.093151 | ... | -0.045946 | -0.076613 | 0.633047 | -0.101772 | -0.119225 | -0.105232 | 0.030166 | -0.089233 | -0.038296 | -0.043550 |
| 20170504 | -0.051031 | -0.075802 | -0.113611 | -0.085653 | -0.057613 | -0.043135 | -0.126427 | -0.179695 | 0.028852 | 0.076716 | ... | -0.040761 | -0.109211 | 0.543860 | -0.087668 | -0.131657 | -0.146903 | 0.001239 | -0.108997 | -0.048739 | -0.151733 |
| 20170505 | -0.061957 | -0.091390 | -0.179543 | -0.114684 | -0.058172 | -0.095238 | -0.128748 | -0.185484 | 0.017929 | 0.059140 | ... | -0.032787 | -0.132199 | 0.377660 | -0.109549 | -0.132244 | -0.162114 | -0.038807 | -0.127279 | -0.039676 | -0.162778 |
| 20170508 | -0.068478 | -0.112019 | -0.194934 | -0.136120 | -0.075000 | -0.095668 | -0.129061 | -0.178796 | -0.013326 | 0.042610 | ... | -0.019231 | -0.161880 | 0.133871 | -0.127647 | -0.130370 | -0.175264 | -0.002776 | -0.132699 | -0.058723 | -0.152260 |
5 rows × 330 columns
示例三: 通过事先定义并注册一些因子计算中需要的函数方法,完成更高自由度的因子计算
# 定义指数平均计算函数-传入一个时间为索引,股票为columns的Dataframe,计算其指数平均序列
# SMAtoday=m/n * Pricetoday + ( n-m )/n * SMAyesterday;
def sma(df, n, m):
a = n / m - 1
r = df.ewm(com=a, axis=0, adjust=False)
return r.mean()
dv.add_formula("double_SMA","SMA(SMA(close_adj,3,1),3,1)",
is_quarterly=False,
add_data=True,
register_funcs={"SMA":sma}).head()
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | 000009.SZ | 000027.SZ | 000039.SZ | 000060.SZ | 000061.SZ | 000063.SZ | 000069.SZ | ... | 601988.SH | 601989.SH | 601992.SH | 601997.SH | 601998.SH | 603000.SH | 603160.SH | 603858.SH | 603885.SH | 603993.SH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20170502 | 902.763220 | 2486.337268 | 222.702230 | 86.694747 | 96.210407 | 384.093500 | 243.687558 | 213.240494 | 298.533382 | 321.033510 | ... | 5.618304 | 12.228624 | 16.337667 | 15.853791 | 8.049842 | 61.962369 | 90.623181 | 81.381230 | 45.732059 | 14.250433 |
| 20170503 | 901.693012 | 2458.607759 | 220.011542 | 86.274281 | 95.764841 | 382.711958 | 242.819760 | 209.993794 | 299.424894 | 320.170244 | ... | 5.610843 | 12.093762 | 16.388825 | 15.822053 | 7.996918 | 61.652794 | 92.037297 | 81.146152 | 45.665220 | 14.262870 |
| 20170504 | 898.648253 | 2434.327687 | 217.509487 | 85.953173 | 95.348827 | 380.921464 | 241.525309 | 207.048611 | 300.227209 | 319.209255 | ... | 5.600827 | 11.952804 | 16.444759 | 15.784386 | 7.943142 | 61.251215 | 93.216093 | 80.872100 | 45.594402 | 14.249688 |
| 20170505 | 893.835609 | 2412.493048 | 214.370868 | 85.402007 | 94.885973 | 377.704290 | 240.001648 | 204.469036 | 300.466335 | 317.786651 | ... | 5.592535 | 11.798688 | 16.461484 | 15.702713 | 7.890575 | 60.693946 | 93.950437 | 80.487844 | 45.588495 | 14.194258 |
| 20170508 | 888.101823 | 2388.403014 | 210.622674 | 84.588481 | 94.241335 | 373.764215 | 238.650220 | 202.458126 | 299.352026 | 316.098221 | ... | 5.591171 | 11.616677 | 16.285680 | 15.569446 | 7.848774 | 60.111181 | 94.615652 | 79.885080 | 45.523878 | 14.133393 |
5 rows × 330 columns
func_doc
jaqs_fxdayu.data.Dataview.func_doc
简要描述:
- add_formula 支持的内置公式查询方法
- 查询方法包括:
- func_doc.doc # 完整文档
- func_doc.funcs # 函数一览
- func_doc.types # 函数类型
- func_doc.descriptions # 函数描述
- func_doc.search_by_type(type) # 根据函数类型查询该类型下所有的函数 type-函数类型(string)
- func_doc.search_by_description(description) # 根据函数描述查询可能符合该描述的所有的函数 description-函数描述(string)
- dv.func_doc.search_by_func(func,precise) # 根据函数名查询该函数 func-函数方法(string) precise-是否模糊查询(bool)
示例:
# 完整文档-前5条
dv.func_doc.doc.head()
| 分类 | 说明 | 公式 | 示例 | |
|---|---|---|---|---|
| 0 | 四则运算 | 加法运算 | + | close + open |
| 1 | 四则运算 | 减法运算 | - | close - open |
| 2 | 四则运算 | 乘法运算 | * | vwap * volume |
| 3 | 四则运算 | 除法运算 | / | close / open |
| 4 | 基本数学函数 | 符号函数,返回值为{-1, 0, 1} | Sign(x) | Sign(close-open) |
# 函数一览-前两个
dv.func_doc.funcs[:2]
array(['+', '-'], dtype=object)
# 函数类型-前两个
dv.func_doc.types[:2]
array(['四则运算', '基本数学函数'], dtype=object)
# 函数描述-前两个
dv.func_doc.descriptions[:2]
array(['加法运算', '减法运算'], dtype=object)
# 根据函数类型查询该类型下所有的函数
dv.func_doc.search_by_type("数学函数")
| 分类 | 说明 | 公式 | 示例 | |
|---|---|---|---|---|
| 4 | 基本数学函数 | 符号函数,返回值为{-1, 0, 1} | Sign(x) | Sign(close-open) |
| 5 | 基本数学函数 | 绝对值函数 | Abs(x) | Abs(close-open) |
| 6 | 基本数学函数 | 自然对数 | Log(x) | Log(close/open) |
| 7 | 基本数学函数 | 对x取负 | -x | -close |
| 8 | 基本数学函数 | 幂函数 | ^ | close ^ 2 |
| 9 | 基本数学函数 | 幂函数x^y | Pow(x,y) | Pow(close,2) |
| 10 | 基本数学函数 | 保持符号的幂函数,等价于Sign(x) * (Abs(x)^e) | SignedPower(x,e) | SignedPower(close-open, 0.5) |
| 11 | 基本数学函数 | 取余函数 | % | oi % 10 |
# 根据函数描述查询可能符合该描述的所有的函数
dv.func_doc.search_by_description("绝对值")
| 分类 | 说明 | 公式 | 示例 | |
|---|---|---|---|---|
| 5 | 基本数学函数 | 绝对值函数 | Abs(x) | Abs(close-open) |
# 根据函数名查询该函数
dv.func_doc.search_by_func("Tan",precise=True)
| 分类 | 说明 | 公式 | 示例 | |
|---|---|---|---|---|
| 24 | 三角函数 | 正切函数 | Tan(x) | Tan(close/open) |
# 根据函数名查询该函数 -模糊查询
dv.func_doc.search_by_func("Tan",precise=False)
| 分类 | 说明 | 公式 | 示例 | |
|---|---|---|---|---|
| 24 | 三角函数 | 正切函数 | Tan(x) | Tan(close/open) |
| 56 | 横截面函数 - 数据处理 | 将指标标准化,即在横截面上减去平均值后再除以标准差 | Standardize(x) | Standardize(close/Delay(close,1)-1) 表示日收益率的标准化 |
append_df
jaqs_fxdayu.data.Dataview.append_df(df, field_name, is_quarterly=False, overwrite=True)
简要描述:
- 外部构造一个pandas.DataFrame,作为新增字段通过此方法添加到数据集中(更灵活的定义因子的方式)
- 注:该方法通常只用于添加日度数据(设置is_qurterly=False),若通过该方法添加季度数据(is_qurterly=True),则添加的数据无法自动对齐到日级别,也无法通过get_ts方法访问到。
- 如需添加季度数据并将其自动对齐到日级别,请使用append_df_quarter方法
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| df | 是 | pandas.DataFrame,日期为索引,品种为columns | 待添加的数据 |
| field_name | 是 | string | 待新增的数据的字段名 |
| is_quarterly | 否 | bool | 是否是季度数据,默认False |
| overwrite | 否 | bool | 若待新增的数据的字段名(field_name)与数据集中已有的字段冲突,是否覆盖。默认覆盖 |
示例:
df = dv.get_ts('close') - dv.get_ts("high")
dv.append_df(df,"close-high",is_quarterly=False)
dv.get_ts("close-high").head()
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | 000009.SZ | 000027.SZ | 000039.SZ | 000060.SZ | 000061.SZ | 000063.SZ | 000069.SZ | ... | 601988.SH | 601989.SH | 601992.SH | 601997.SH | 601998.SH | 603000.SH | 603160.SH | 603858.SH | 603885.SH | 603993.SH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20170502 | -0.02 | -0.17 | -0.15 | -0.04 | -0.04 | -0.25 | -0.10 | -0.17 | -0.15 | -0.13 | ... | -0.02 | -0.07 | -0.09 | -0.12 | -0.06 | -0.19 | -2.00 | -0.49 | -0.10 | -0.15 |
| 20170503 | -0.02 | -0.39 | -0.12 | -0.08 | -0.09 | -0.16 | -0.21 | -0.15 | -0.23 | -0.17 | ... | -0.03 | -0.10 | -0.54 | -0.09 | -0.06 | -0.16 | -0.58 | -0.43 | -0.03 | -0.14 |
| 20170504 | -0.15 | -0.17 | -0.05 | -0.11 | -0.06 | -0.30 | -0.18 | -0.10 | -0.25 | -0.04 | ... | -0.01 | -0.08 | -0.42 | -0.15 | -0.04 | -0.38 | -1.68 | -0.96 | -0.18 | -0.11 |
| 20170505 | -0.13 | -0.18 | -0.36 | -0.32 | -0.09 | -0.62 | -0.12 | -0.07 | -0.29 | -0.18 | ... | -0.02 | -0.18 | -0.21 | -0.47 | -0.02 | -0.34 | -3.63 | -1.41 | -0.15 | -0.03 |
| 20170508 | -0.05 | -0.49 | -0.21 | -0.26 | -0.14 | -0.30 | -0.17 | -0.09 | -0.64 | -0.19 | ... | 0.00 | -0.17 | -0.82 | -0.37 | -0.02 | -0.38 | -2.49 | -1.71 | -0.39 | -0.02 |
5 rows × 330 columns
append_df_quarter
jaqs_fxdayu.data.Dataview.append_df_quarter(df, field_name, overwrite=True)
简要描述:
- 外部构造一个pandas.DataFrame,且DataFrame中为季度数据,作为新增字段通过此方法添加到数据集中(更灵活的定义因子的方式)
与jaqs_fxdayu.data.Dataview.append_df(df, field_name, is_quarterly=True)不同之处在于:该方法为自动将所添加的季度也增加到日度数据中,相当于将数据对齐到日线为新数据df_daily后,再调用一次jaqs_fxdayu.data.Dataview.append_df(df_daily, field_name, is_quarterly=False)。这样可以方便加入季度,然后统一在日线周期下获取数据进行研究。
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| df | 是 | pandas.DataFrame,日期为索引,品种为columns | 待添加的数据 |
| field_name | 是 | string | 待新增的数据的字段名 |
| overwrite | 否 | bool | 若待新增的数据的字段名(field_name)与数据集中已有的字段冲突,是否覆盖。默认覆盖 |
示例:
dv.add_field("roe")
roe = dv.get_ts_quarter('roe')
df = roe.diff()
dv.append_df_quarter(df, "d-roe")
dv.get_ts_quarter("d-roe").dropna().head() # 查询季度数据
Query data - query...
Query data - quarterly fields prepared.
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | 000009.SZ | 000027.SZ | 000039.SZ | 000060.SZ | 000061.SZ | 000063.SZ | 000069.SZ | ... | 601988.SH | 601989.SH | 601992.SH | 601997.SH | 601998.SH | 603000.SH | 603160.SH | 603858.SH | 603885.SH | 603993.SH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20160331 | -11.4660 | -18.4105 | -10.4000 | -18.7879 | -8.1359 | -6.3414 | -3.7253 | -0.3387 | -7.6121 | -12.4472 | ... | -10.4562 | 4.8409 | -5.4368 | -20.6642 | -10.7903 | -9.0602 | -30.5938 | -58.5293 | -26.3598 | -3.9513 |
| 20160630 | 3.4734 | 4.5853 | 0.7098 | 0.9384 | 3.0494 | -2.7715 | 1.3095 | 0.5910 | 2.0323 | 2.5554 | ... | 3.4989 | 0.9899 | 4.2848 | 4.8958 | 3.8221 | -0.2508 | 17.8033 | 5.4220 | 0.5424 | 2.1448 |
| 20160930 | 3.4469 | 2.8231 | 3.9954 | 3.0741 | 2.2083 | 0.6739 | 1.6038 | 3.6994 | 2.6870 | 3.3735 | ... | 2.9932 | 0.2131 | 0.8388 | 5.1189 | 3.1815 | 1.6016 | 18.4533 | 8.0545 | 9.7982 | 0.3639 |
| 20161231 | 2.0210 | 11.4433 | 6.5921 | 0.5512 | 0.0144 | 2.5387 | 2.1093 | -2.5432 | -13.4652 | 9.3406 | ... | 2.1099 | -0.3445 | 1.0118 | 5.1804 | 1.4766 | 1.1263 | 1.5475 | 1.7371 | -0.2593 | 2.2140 |
| 20170331 | -9.3964 | -19.0699 | -11.4174 | -4.4972 | -5.7008 | -0.1440 | -1.5022 | -1.7294 | 9.6676 | -15.1272 | ... | -8.8577 | -0.7407 | -5.5384 | -16.3442 | -8.9765 | -5.5680 | -37.6522 | -16.1615 | -17.3611 | -2.3932 |
5 rows × 330 columns
# 对应的日度数据
dv.get_ts("d-roe").dropna().head()
| symbol | 000001.SZ | 000002.SZ | 000008.SZ | 000009.SZ | 000027.SZ | 000039.SZ | 000060.SZ | 000061.SZ | 000063.SZ | 000069.SZ | ... | 601988.SH | 601989.SH | 601992.SH | 601997.SH | 601998.SH | 603000.SH | 603160.SH | 603858.SH | 603885.SH | 603993.SH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trade_date | |||||||||||||||||||||
| 20170502 | -9.3964 | -19.0699 | -11.4174 | -4.4972 | -5.7008 | -0.144 | -1.5022 | -1.7294 | 9.6676 | -15.1272 | ... | -8.8577 | -0.7407 | -5.5384 | -16.3442 | -8.9765 | -5.568 | -37.6522 | -16.1615 | -17.3611 | -2.3932 |
| 20170503 | -9.3964 | -19.0699 | -11.4174 | -4.4972 | -5.7008 | -0.144 | -1.5022 | -1.7294 | 9.6676 | -15.1272 | ... | -8.8577 | -0.7407 | -5.5384 | -16.3442 | -8.9765 | -5.568 | -37.6522 | -16.1615 | -17.3611 | -2.3932 |
| 20170504 | -9.3964 | -19.0699 | -11.4174 | -4.4972 | -5.7008 | -0.144 | -1.5022 | -1.7294 | 9.6676 | -15.1272 | ... | -8.8577 | -0.7407 | -5.5384 | -16.3442 | -8.9765 | -5.568 | -37.6522 | -16.1615 | -17.3611 | -2.3932 |
| 20170505 | -9.3964 | -19.0699 | -11.4174 | -4.4972 | -5.7008 | -0.144 | -1.5022 | -1.7294 | 9.6676 | -15.1272 | ... | -8.8577 | -0.7407 | -5.5384 | -16.3442 | -8.9765 | -5.568 | -37.6522 | -16.1615 | -17.3611 | -2.3932 |
| 20170508 | -9.3964 | -19.0699 | -11.4174 | -4.4972 | -5.7008 | -0.144 | -1.5022 | -1.7294 | 9.6676 | -15.1272 | ... | -8.8577 | -0.7407 | -5.5384 | -16.3442 | -8.9765 | -5.568 | -37.6522 | -16.1615 | -17.3611 | -2.3932 |
5 rows × 330 columns
append_df_symbol
jaqs_fxdayu.data.Dataview.append_df(df, symbol_name, overwrite=False)
简要描述:
- 外部构造一个pandas.DataFrame(含某个新品种的各个字段的信息),作为新增品种通过此方法添加到数据集中
- 目前,该方法只支持添加日线数据的信息,无法添加季度数据
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| df | 是 | pandas.DataFrame,日期为索引,字段名为columns | 待添加的数据 |
| symbol_name | 是 | string | 待新增的数据的品种名 |
| overwrite | 否 | bool | 若待新增的品种(symbol_name)与数据集中已有的品种冲突,是否覆盖。默认不覆盖 |
示例:
df = dv.get("000001.SZ")
df.columns = df.columns.droplevel("symbol")
dv.append_df_symbol(df=df,symbol_name="000001.SZ",overwrite=True)
Symbol [000001.SZ] is overwritten.
删除数据
remove_field
jaqs_fxdayu.data.Dataview.remove_field(field_names)
简要描述:
- 将指定字段从dataview中删除
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| field_names | 是 | string | 待删除的字段,用","隔开 |
示例:
print("open" in dv.fields)
dv.remove_field("open")
print("open" in dv.fields)
True
False
remove_symbol
jaqs_fxdayu.data.Dataview.remove_symbol(symbols)
简要描述:
- 将指定品种从dataview中删除
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| symbols | 是 | string | 待删除的品种,用","隔开 |
示例:
print("000001.SZ" in dv.symbol)
dv.remove_symbol("000001.SZ")
print("000001.SZ" in dv.symbol)
True
False
数据落地
save_dataview
jaqs_fxdayu.data.Dataview.save_dataview(folder_path)
简要描述:
- 将dataview中的数据保存到本地指定目录(folder_path)下
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| folder_path | 是 | string | 保存路径 |
示例:
import os
dataview_folder = './data'
if not (os.path.isdir(dataview_folder)):
os.makedirs(dataview_folder)
dv.save_dataview(dataview_folder)
Store data...
Dataview has been successfully saved to:
/home/xinger/Desktop/jaqs_plus/jaqs-fxdayu/docs/_source/data
You can load it with load_dataview('/home/xinger/Desktop/jaqs_plus/jaqs-fxdayu/docs/_source/data')
load_dataview
jaqs_fxdayu.data.Dataview.load_dataview(folder_path)
简要描述:
- 将数据从本地指定目录(folder_path)下加载到dataview中
- 目前仅支持全部加载
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| folder_path | 是 | string | 加载路径 |
示例:
dv.load_dataview(dataview_folder)
Dataview loaded successfully.