python进行财务分析,python和财务管理
之前写公司调研报告的时候,所有的数据都是通过翻看招股书/年报的PDF获得的。将PDF中的数字复制粘贴到EXCEL中然后生成图表的过程非常繁琐,很容易因为错误的行/列而挑错数据。使用Python可以实现提取财务数据、计算财务指标、可视化呈现等一系列操作的自动化。另外,公司财务报表可以通过爬虫从巨潮资讯、雪球等网站批量获取。在没有专用数据库的情况下,Python可以为金融大数据分析、大型公司研究、行业研究提供极大的便利。
首先,获取报告
巨潮资讯上的数据是最权威的,但是每一年的数据都是分开存储的,而雪球提供的财务数据是每一年都在同一个CSV中。由于经营分析涉及趋势研究,需要连续多年的数据,当数据按年划分为多个文件时,不方便再遍历一次,所以我们选择在这里批量从雪球获取财务报表。
将熊猫作为pdimport请求从多处理导入。将虚拟导入池作为ThreadPoollrb _ base _ URL= http://API . xueqiu . com/stock/F10/Inc statement . CSV?page=1 size=10000 symbol= LLB _ base _ URL= http://API . xueqiu . com/stock/F10/cf statement . CSV?page=1 size=10000 symbol= fzb _ base _ URL= http://API . xueqiu . com/stock/F10/bal sheet . CSV?page=1 size=10000 symbol= header={ user-agent : Mozilla/5.0 }定义损益表、资产负债表和现金流量表的下载功能:
def download _ lrb(URL):r=requests . get(URL,Headers=Headers)filename=URL . split(=)[-1] _ lrb . CSV print(filename)with open(filename, WB )as f:f . write(r . content)def download _ fzb(URL):r=requests . get(URL,Headers=Headers)filename=URL . split(=)[-1] _ fzb . CSV print(filename)with open(filename, WB )as f:f . write(URL
With (stock code.txt , r ,encoding= utf-8 )as f:symbol=[s . strip()for s in f . readlines()]Lrb _ URLs=[Lrb _ base _ URL I for I in symbol]fzb _ base _ URL I for I in symbol]LLB _ URLs=[LLB _ base _ URL I for I in symbol]pool=thread pool(10)pool . map(download _ Lrb,Lrb _ URLs) pool.close () pool .
格力电器SZ000651
下载结果:
第二,以格力电器为例进行经营分析。
经营分析主要包括公司业绩和公司经营水平两个方面。相关数据可以从损益表和资产负债表中获得。
# import required library import panda as PD import matplotlib . py plot as PLT import numpy as NP输入要分析公司的股票代码。
#股票代码stock_0=SZ000651 #格力电器#输入年份(输入年报数据当年的后一年)year=2018 Define功能:读取csv文件,转换为DataFrame格式。
Get _ lrb (stock _ id): #读取利润表数据lrb=PD . Read _ CSV(r data/% s _ lrb . CSV %(stock _ id),编码= UTF-8 ,header=0,Index_col=None) list_lrb=[] #获取lrb中I的所有截止日期列表[报告期结束日期]:List _ lrb . append(str(I))List _ lrb _ 0=[]#将20171231的格式转换为2017-17append(I _)LRB[ Report Time For in list _ lrb _ 0]#更改为日期数据类型lrb.index=lrb[ report time] #重置损益表数据的索引_lrb=lrb[:-1] #因为csv中的时间是逆序的,所以按逆序排列表以显示时间顺序返回DATA _ LRBDEF GET _ FZB (stock _ ID): #读取资产负债表表数据FZB=PD。READ _ CSV (r data/%s _ FZB。CSV% (stock _ ID),encoding= UTF-8 ,header=0,Index _ col=none)list _ fzb=[]for I in fzb[报告日期]:list _ fzb . append(str(I))list _ fzb _ 0=[]for I in list _ fzb:I _=I[:4]- I[4:4]- I[6:8]list _ fzb _ 0 . append(I _)fzb[报告时间]=[pd.to _中
DEF _ DATA _ MONTH (data,MONTH):DATA _ MONTH=DATA[DATA . index . MONTH==MONTH]返回DATA _ MONTH定义函数:实现数据可视化。
Def _ plot (data,y,legend=格力电器,kind= bar ):l _ 0=len(data)s _ 0=list(range(l _ 0))x _ 0=NP . array(s _ 0)y _ 0=tuple([str(I)for I in range(year-l _ 0,year)]) data[y]。plot(kind=kind)PLT . title(y)PLT . legend([legend],loc=左上角)plt.xticks(x_0,y_0) plt.grid(color=#95a5a6 ,linestyle= -,线宽=1,轴= y ,alpha=0.4) PLT。SAVEFIG (R PIC/%s.png% (y,))return (1)公司业绩分析
公司业绩主要看业绩结果和业绩质量。业绩的主要指标是营业收入、毛利和净利润;业绩的主要指标是毛利率、净利率和成本费用率。所有数据来自损益表。
定义:计算绩效分析所需的指标。
#经营分析:公司业绩def get _ performance(Data):Result _ p=PD . Data frame()#业绩结果result_p[营业收入]=data[毛利]=data[营业收入]-data[营业成本] result_p[净利润]=data[归属于母公司所有者的净利润] #业绩质量result_p[毛利率]=(data[营业收入]-data[营业成本])/data=(data[营业成本] data[营业税金及附加] data[销售费用] data[管理费用] data[财务费用] )/data[营业收入] result _ p .
# Read data data _ lrb=get _ lrb(stock _ 0)#所有数据来自利润表#筛选年报数据data _ lrb _ year=get _ data _ month(data _ lrb,12)#计算所需指标result _ p=get _ performance(data _ lrb _ year)# visualize PLT . RC params[ font . sans-serif ]=[微软雅黑] #在[营业收入,毛利,净利润,毛利中为I显示中文。
营业收入和毛利近年来波动较大,但净利润基本保持高速增长。
近年来,毛利率基本保持稳定,净利润率稳步快速增长,成本费用率有下降趋势,表明经营效益在逐步改善。
(2)公司经营水平分析
业务水平的核心指标包括净利率、资产周转率、资产负债率和净资产收益率。数据来自损益表和资产负债表。
定义:计算业务层面分析所需的指标。
#业务分析:业务层面def get _ management(data):result _ m=PD . data frame()result _ m[净利率]=data[归属于母公司所有者的净利润] /data[营业收入] result_m[资产周转率]=data[营业收入]/data[总资产] result_m[资产负债率]=data[总负债]/data[总资产] result_m[净资产收益率]=data[净利润
#从损益表和资产负债表中读取数据data _ lrb=get _ lrb(stock _ 0)data _ fzb=get _ fzb(stock _ 0)#筛选年报数据data _ lrb _ year=get _ data _ month(data _ lrb,12)data _ fzb _ year=get _ data _ month(data _ fzb,12) #将损益表和资产负债表合并成一个表, 哪个方便计算data=PD . merge(left=data _ lrb _ year . drop(columns=[报表时间]),Right=data _ fzb _ year . drop(columns=[报表时间]),On=报表时间)#计算所需指标result _ m=get _ management(data)# visualization PLT . rcparams[ font . sans-serif ]=[微软雅黑] for I in [净利率,资产周转率,资产负债率,净资产收益率]:
这类指标通常需要与竞争对手进行对比,以判断优劣。后续的深入分析可以将同类公司(如美的、奥克斯……)的股票代码列表,利用for循环批量下载财务报表,可视化相关指标进行对比分析。
三。风险分析
这里深入分析一下格力的资产负债率,格力的资产负债率很高,几乎都在70%-80%之间,资产负债率普遍较高的房地产企业平均水平在70%左右(这只是个例,资产负债率不能跨行业比较)。理论上,资产负债率高的企业风险更大(偿债压力大),那么格力的高资产负债率真的意味着高风险吗?
从理论上讲,高资产负债率带来的风险是债务风险,公司面临较大的偿债压力。因此,有必要进一步探讨企业目前的负债结构,以确定高风险是否真的存在。
定义:分析流动负债的结构
get _ structure(Data):result _ s=PD . Data frame()Data=Data . fillna(0)#空白值为0 result_s[经营负债比例]=(data[应付账款] data[应付票据] data[预付账款])/Data[流动负债总额] result_s[贷款比例]=(data[短期贷款] data[一年内到期的非流动负债]/data [流动负债总额]result _ s . index=Data[ 1
data _ fzb=get _ fzb(stock _ 0)data _ fzb _ year=get _ data _ month(data _ fzb,12)result _ s=get _ structure(data _ fzb _ year)PLT . RC params[ font . sans-serif ]=[ Microsoft ya hei ]for I in[营业负债比例,贷款比例]: data _ plot (result _ s,I) pl
可以看出,格力的经营负债一直居高不下,1999-2006年甚至达到80%以上,即使近年来有所下降,但仍处于40%的高位,而贷款占比很小,近年来增长不足15%。由此可见,格力高资产负债率的债务风险其实并不高。会带来偿债压力的贷款在流动负债中占比很小,经营性负债是主体,而大量的应付账款和预收账款实际上占用了供应商和经销商的资金。一般产品不愁卖就不会有问题,但这是竞争力的体现,说明格力在整个产业链上是很强的。
本文仅展示了使用Python进行财务分析/公司研究的大致思路和流程,但分析本身并不严谨。在定义了计算相关指标的函数后,只要列出研究对象的股票代码,就可以使用for循环快速披露并获取报表,读取数据,处理数据,计算指标并最终实现可视化,大大提高了分析效率。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。