繁簡切換您正在訪問的是FX168財經網,本網站所提供的內容及信息均遵守中華人民共和國香港特別行政區當地法律法規。

FX168财经网>人物频道>帖子

python3 可用的获取一段时期财务数据的季报、年报数据,及其总和与均值共享函数

作者/dsajasd 2019-05-09 17:22 0 来源: FX168财经网人物频道

学习过程中发现分享的基本面函数都没法在python3研究中使用,罪魁祸首是range函数。略作更改就能python2和python3通用了。

def get_fundamentals_sum_mean_value(security='000001.XSHE', search=income.basic_eps, count=5, frequency='quarter'):
    '''
    输入:
        security:  要查询股票的代码
        search:    要查询的字段,详情参考 API: get_fundamentals-查询财务数据
        count:     单位时间长度,表示返回前几多少期的季报或者年报
        frequency: 获取数据类型,'quarter'为季报,'year'为年报
    输出:
        sum_num:  总值
        mean_num: 平均值
        df:       一段时间内季报或者年报的 DataFrame
    注:
        对于年报数据, 我们目前只有 现金流表 和 利润表, 当查询其他表时, 会返回该年份最后一个季报的数据"
    '''
    import pandas as pd

    def get_quarter(month):
        if month in (1,2,3):  
            return 1  
        elif month in (4,5,6):  
            return 2
        elif month in (7,8,9):  
            return 3
        elif month in (10,11,12):
            return 4

    # 查询条件
    q = query(
                income.code,
                income.statDate,
                search,
              ).filter(
                income.code.in_([security])
            )
    # 获取最近一次报表发布的日期
    statDate_num = get_fundamentals(q)['statDate'][0]
    # 获取最近一次报表发布所属的年份
    year = datetime.datetime.strptime(statDate_num, "%Y-%m-%d").year
    # 获取最近一次报表发布所属的月份
    month = datetime.datetime.strptime(statDate_num, "%Y-%m-%d").month
    # 获取最近一次报表发布日期所属的季度
    qt = get_quarter(month)
    # 获取季度列表
    qt_list = list(range(qt,0,-1))+list(range(4,0,-1))*(count//4+1)
    qt_list = qt_list[:count]
    # 查询时间列表
    data_list = []
    # 获取查询的名称
    name = str(search).split('.')[-1]
    # 列名称
    colums_list = []
    # 获取拼接后的 DataFrame
    if frequency == 'quarter':
        for num in range(len(qt_list)):
            s = str(year)+'q'+str(qt_list[num])
            data_list.append(s)
            colums_list.append(name + '_' + s)
            if qt_list[num] == 1:
                year -= 1
        # 拼接列表
        df = get_fundamentals(q, statDate = data_list[0])
        df.set_index(df.code.values, inplace=True)
        for t in data_list[1:]:
            d = get_fundamentals(q, statDate = t)
            d.set_index(d.code.values, inplace=True)
            df = pd.concat([df[name],d[name]],axis = 1)
    elif frequency == 'year':
        for num in range(count):
            year -= 1
            s = str(year)
            data_list.append(s)
            colums_list.append(name + '_' + s)
        # 拼接列表
        df = get_fundamentals(q, statDate = data_list[0])
        df.set_index(df.code.values, inplace=True)
        for t in data_list[1:]:
            d = get_fundamentals(q, statDate = t)
            d.set_index(d.code.values, inplace=True)
            df = pd.concat([df[name],d[name]],axis = 1)
    else:
        print("请输入正确的 frequency 参数,'quarter'为季报,'year'为年报. \n对于年报数据, 我们目前只有 现金流表 和 利润表, \n\
        当查询其他表时, 会返回该年份最后一个季报的数据")
        return
    # 设置列名称
    df.columns = colums_list[:len(df.iloc[0])]
    # 计算总值
    sum_num = sum(df.iloc[0])
    # 计算平均值
    mean_num = mean(df.iloc[0])
    # 返回结果
    return sum_num, mean_num, df
sum_num, mean_num, df = get_fundamentals_sum_mean_value()
sum_num
mean_num
df
basic_eps_2017q1 basic_eps_2016q4 basic_eps_2016q3 basic_eps_2016q2 basic_eps_2016q1
000001.XSHE 0.3619 0.226 0.37 0.29 0.43
sum_num
1.6779
mean_num
0.33558
 
分享到:
举报财经168客户端下载

全部回复

0/140

投稿 您想发表你的观点和看法?

更多人气分析师

  • 张亦巧

    人气2144文章4145粉丝45

    暂无个人简介信息

  • 梁孟梵

    人气2152文章3177粉丝39

    qq:2294906466 了解群指导添加微信mfmacd

  • 指导老师

    人气1856文章4423粉丝52

    暂无个人简介信息

  • 李冉晴

    人气2296文章3821粉丝34

    李冉晴,专业现贷实盘分析师。

  • 刘钥钥1

    人气2016文章3119粉丝34

    专业从事现货黄金、现货白银模似实盘操作分析指导

  • 张迎妤

    人气1896文章3305粉丝34

    个人专注于行情技术分析,消息面解读剖析,给予您第一时间方向...

  • 金泰铬J

    人气2320文章3925粉丝51

    投资问答解咨询金泰铬V/信tgtg67即可获取每日的实时资讯、行情...

  • 金算盘

    人气2696文章7761粉丝125

    高级分析师,混过名校,厮杀于股市和期货、证券市场多年,专注...

  • 金帝财神

    人气4728文章8329粉丝118

    本文由资深分析师金帝财神微信:934295330,指导黄金,白银,...