利用Python进行简单杜邦分析
“巧妇难为无米之炊”,找不到数据,量化分析、财务报表分析也就无从谈起。对于分析者来说,获取数据是量化分析的第一步。Python的一个强大功能之一就是数据获取(爬虫)。但是对于没时间学爬虫程序的小白来说,python丰富的开源包为我们节省了不少时间精力,只要会用前人的车轮(wheel),就可以造就自己的车(py)。
【tushare财经数据包安装】
Tushare是一个免费、开源的python财经数据接口包,可以获取新浪财经、腾讯财经、上交所和深交所提供的数据。如果安装了Anaconda(建议),可以使用Anaconda Prompt或者通过win+R输入cmd调出dos操作界面,输入pip install tushare进行安装。如果没有pip或pip3,可以先用conda install pip (或pip3)安装。
【获取财务报表数据】
Tushare包可以获取宏观经济数据、股票交易数据、基本面数据(公司盈利能力、业绩报告等)、新闻事件、银行间同业拆放利率等,下面着重介绍使用tushare包获取财务报表数据和可视化分析。
1、引入需要的包(模块module):import xxx
其中,pandas和matplotlib分别是数据处理和画图常用的包,as意味着后面调用这些包将分别使用缩写ts、pd、plt。
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import *
from pyecharts import Map, configure
2、获取所需数据
tushare获取数据的接口为pro = ts.pro_api(),很直观。如获取个股每天的股价命令为df = ts.pro.daily(ts_code=‘000001.SZ’, start_date=‘20180701’, end_date=‘20180718’),资产负债表ts.pro.income(ts_code=‘002230.SZ’, start_date=‘20090101’, end_date=‘20181230’),利润表ts.pro.balancesheet(ts_code=‘002230.SZ’, start_date=‘20090101’, end_date=‘20181230’)。下面主要以杜邦分析举例进行分析。
SZZS = pro.index_daily(ts_code='000001.SH', start_date='20090101', end_date='20190130')
SZZS.index = pd.DatetimeIndex(SZZS.trade_date)#获取上证指数十年的数据
print(SZZS.head())
3、读取数据和可视化
可以使用to_csv或者to_excel将数据保存到本地,然后再进行分析,本次以pandas直接对数据进行分析
首先调取全国的上市公司基本数据,ts库所给的基本信息非常全面。
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
将当前所有正常上市交易的股票列表存放在变量data里面,下面对公司所在地区进行简单的分析
data_counts = data['area'].value_counts() #对dataframe某一列的数据按照这一列重复值的个数排序,重要
data_counts = pd.DataFrame(data_counts)
attr = list(data_counts.index)
data_counts.area = data_counts.area / 5
val = list(data_counts.area.values)
map = Map("全国上市公司分布", width=1200, height=600)
map.add("",attr,val,maptype="china",is_visualmap=True,visual_text_color="#000",)
map.render("render上市公司分布.html")
最后用 pyecharts中的 Map库进行可视化
如图所示,颜色越深的地方代表上市公司越多,北上广以及江浙等沿海一带占了绝大多数,另外山东和四川也不少。
4、举例分析
看完了全国的分布,重点来了,选择两家比较有代表性的上市公司进行杜邦分析,其一选择这两年非常火热的风口人工智能板块,具有使命意义的科大讯飞和老牌经典永不褪色的国酒茅台。
开始吧,首先利用ts库将近十年两只股票的走势和大盘的趋势对比
KDXF = pro.daily(ts_code='002230.SZ', start_date='20090101', end_date='201