版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章Python基础快速入门Part1:单项选择题1.下面哪个数据类型表示整数(B)A:char B:intC:float D:list该题选B。选项A不是python的数据类型,C为小数格式,D为列表。2.下面(C)不是推荐的变量名。A:a B:bananaC:list D:my-score该题选C。变量命名需要便于理解和阅读,选项a缺乏含义,不易于阅读;选项c与列表名相同,容易混淆;选项d为非法命名。3.下列代码的执行结果是(B)A:1 B:3C:8 D:4该题选B,列表ls包括三个列表格式的元素。Part2:多项选择题1.下面说法正确的是(ABC)A、int函数可以将字符串转为整数但对字符串也有要求,如果字符串内有小数就不能直接转为整数B、str函数可以将数字转为字符串C、len函数可以统计字符串的长度D、strip函数可以进行字符替换
用于移除字符串头尾指定的字符序列该题选ABC,strip函数适用于头尾字符删除。2.下面说法错误的是(BCD)A、Python代码是逐行编写的B、Python可以通过/进行注释应该是通过#注释C、Python中缩进不重要
缩进会影响代码的运行逻辑D、for语句是判断语句是循环语句而不是判断语句B:使用/不能用于注释,该字符通过‘Ctr+/’,用于单行和多行注释方式,前提是选中需要注释的代码,注释通常则使用#或'''''';C:缩进决定代码是否运行错误,很重要;D:判断语句一般为ifelse。Part3:判断题1.列表的索引序号从1开始。该题答案为错误。索引序号从0开始。Part4:代码练习题1.使用for循环语句计算从1加到10000的值。num=0foriinrange(10001):
num+=iprint(num)2.通过if判断语句、for循环语句和range()函数批量打印出1到100内的奇数。foriinrange(1,101):
ifi%2==1:
print(i)3.请提取a=’2020-07-2510:53’中的年月日信息。
#方法一:a='2020-07-2510:53'a=a.split('')[0]print(a)#方法二:a='2020-07-2510:53'year=a[:4]month=a[5:7]day=a[8:10]print('年份为:'+year,'月份为:'+month,'日期为:'+day)4.请用2种方法清除a='
华能信托是家好公司
'两旁的空格。
a='华能信托是家好公司'#方法1result1=a.strip()print(result1)#方法2result2=a.replace('','')print(result2)5.请提取列表a=['丁一','王二','张三','李四','赵五']中奇数序号的姓名。a=['丁一','王二','张三','李四','赵五']foriinrange(len(a)):
ifi%2==0:
print(a[i])6.公司A在2016—2020年的净利润分别为2.5,2.8,3.1,2.9,3.3亿元,净资产分别为10,11,13,13.5,14亿元,通过print()函数打印输出2020年公司A的净资产收益率(ROE)。#方法一:ROE_2020=3.3/14print(ROE_2020)#方法二:ROE=3.3/14print('{}%'.format(round(ROE*100,2)))#方法三:ROE=3.3/14print(str(round(ROE*100,2))+'%')7.假设公司A是贵州茅台,通过字符串拼接得到它的完整股票代码:600519.SH。(上交所上市的股票代码后缀名为“.SH”,深交所为“.SZ”。)ID='600519'Exchange='.SH'Name=ID+Exchangeprint(Name)8.分别创建两个名为“net_profit”和“net_equity”的列表,列表元素分别为第6题中的5年净利润和5年净资产。
net_profit=[2.5,2.8,3.1,2.9,3.3]net_equity=[10,11,13,13.5,14]9.根据第8题中的两个列表计算得到2016—2020年每年的ROE,把结果放入新列表“ROE”中,并依次打印输出该列表中的所有元素。
#方法一:ROE=[]foriinrange(len(net_profit)):
roe=net_profit[i]/net_equity[i]
ROE.append(roe)
print(roe)
#方法二:ROE=[net_profit[i]/net_equity[i]foriinrange(len(net_profit))]print(ROE)10.选取第9题列表“ROE”中2018年的指标;选取5年中第2年到第4年的指标。print(ROE[2])print(ROE[1:4])11.公司A在2020年的收入为100亿元,资产总额为30亿元,首先计算总资产周转率,然后用if判断语句,如果公司A的总资产周转率大于2,则打印输出“总资产周转率为:xx,指标较好”,否则,打印输出“总资产周转率为:xx,指标较差”。#方法一:TAT=round(100/30,2)ifTAT>2:
print('总资产周转率为:'+str(TAT)+',指标较好')else:
print('总资产周转率为:'+str(TAT)+',指标较差')#方法二:TAT=round(100/30,2)ifTAT>2:
print('总资产周转率为:{},指标较好'.format(TAT))else:
print('总资产周转率为:{},指标较差'.format(TAT))
12.给定一个包含6位股票代码的列表stock=[‘600519',’000725',’600031'],通过for循环语句和if判断语句判断列表中每个代码是来自上交所还是深交所,并加上相应的后缀名“.SH”或“.SZ”,得到的新列表命名为“stockcode”。(提示:上交所的股票代码通常是6开头,深交所的股票代码通常是0开头。)
stock=['600519','000725','600031']stockcode=[]foriinstock:
ifi[0]=='6':
stockcode.append(i+'.SH')
else:
stockcode.append(i+'.SZ')print(stockcode)13.假设从财经网站获取了部分公司名称列表['贵州茅台','五粮液','泸州老窖'],以及这些公司对应的毛利率[‘0.75’,‘0.66’,’0.58’],使用str()函数分别把公司名称和对应的毛利率拼接成字符串(格式为“xx公司的毛利率为xx”)并依次输出结果。
name=['贵州茅台','五粮液','泸州老窖']GP=[0.75,0.66,0.58]foriinrange(len(name)):
result=name[i]+'公司的毛利率为:'+str(GP[i])
print(result)14.假设从财经网站获取了部分公司名称列表['贵州茅台''五粮液''泸州老窖'],以及这些公司对应的毛利率[0'.75'0'.66'0'.58'],注意获取到的毛利率格式为字符串类型。依次判断各家公司的毛利率是否大于0.6,大于则输出“xx公司的毛利率优秀”,否则输出“xx公司的毛利率正常”。name=['贵州茅台','五粮液','泸州老窖']GP=['0.75','0.66','0.58']foriinrange(len(name)):
iffloat(GP[i])>0.6:
print(name[i]+'公司的毛利率优秀')
else:
print(name[i]+'公司的毛利率正常')15.创建一个名为transcode的函数,实现输入股票的6位数字代码可自动输出股票的完整代码(即包含上交所后缀名“.SH”或深交所后缀名“.SZ”)。使用该封装好的函数批量判断列表stock=[‘600519',‘000725',
‘600031']并输出结果。(提示:上交所的股票代码通常是6开头,深交所的股票代码通常是0开头。deftranscode(code):
ifcode[0]=='6':
print(code+'.SH')
else:
print(code+'.SZ')
stock=['600519','000725','600031']foriinstock:
transcode(i)第二章通过Python接口快速获取财务数据Part1:单项选择题1.使用tushare获取利润表中营业总收入的输出变量为(C)A:oth_b_income B:total_profiC:total_revenue D:operate_profit2.使用tushare获取经营活动产生的现金流量净额的输出变量为(A)A:n_cashflow_act B:free_cashflow C:n_cashflow_inv_act D:n_cash_flows_fnc_act3.使用tushare获取交易性金融资产的输出变量为(B)A:intan_assets B:trad_assetC:acct_payable D:lt_eqt_investPart2:多项选择题1.以下属于获取资产负债表输入参数的是(ABC)A、ts_codeB、PeriodC、FieldsD、Date2.以下为tushare可用的接口是(BD)A、Balance资产负债表的接口是balancesheet,该选项不完整B、stock_company上市公司基本信息接口C、stk_auditD、fina_mainbz主营业务构成接口B:上市公司基本信息接口D:主营业务构成接口A、C为拼写错误选项Part3:判断题1.在获取宏观数据时,获取GDP数据的开始季度为必选参数,结束季度为可选参数。错误,均非必选参数。Part4:代码练习题1.参照2.2.4小节内容,利用Tushare接口获取中信特钢(000708.SZ)、抚顺特钢(600399.SH)、方大特钢(600507.SH)2018至2020年三张报表的数据,并另存为excel文件。importtushareastspro=_api('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')#需要获取数据的公司名称、股票代码、年份comps=['中信特钢','抚顺特钢','方大特钢']codes=['000708.SZ','600399.SH','600507.SH']years=[2020,2019,2018]#循环获取语句foriinrange(len(comps)):
foryearinyears:
df_balance=pro.balancesheet(ts_code=codes[i],period=str(year)+'1231')
df_income=pro.income(ts_code=codes[i],period=str(year)+'1231')
df_cash=pro.cashflow(ts_code=codes[i],period=str(year)+'1231')
#保存为表格
df_balance.to_excel(comps[i]+'_资产负债表_'+str(year)+'年.xlsx')
df_income.to_excel(comps[i]+'_利润表_'+str(year)+'年.xlsx')
df_cash.to_excel(comps[i]+'_现金流量表_'+str(year)+'年.xlsx')2.参照2.3.1小节内容,利用Tushare接口获取抚顺特钢(600399.SH)基本信息、管理层信息、财务审计意见(2016年至2020年)以及主营业务构成(分别按地区和业务)。df=pro.stock_company(ts_code='600399.SH',fields='ts_code,chairman,reg_capital,introduction,employees,main_business,business_scope')df#JupyterNotebook中输入变量名打印,Pycharm中需输入print(df)df=pro.stk_managers(ts_code='600399.SH')df#JupyterNotebook中输入变量名打印,Pycharm中需输入print(df)audit=pro.fina_audit(ts_code='600519.SH',start_date='20160101',end_date='20210101')print(audit)df=pro.fina_mainbz(ts_code='600399.SH',period='20201231',type='P')df#JupyterNotebook中直接输入变量名打印,Pycharm中需要输入print(df)df=pro.fina_mainbz(ts_code='600399.SH',period='20201231',type='D')df#JupyterNotebook中直接输入变量名打印,Pycharm中需要输入print(df)3.参照2.3.2小节内容,利用Tushare接口获取抚顺特钢(600399.SH)所属行业、地域和上市时间信息。df_fstg=pro.stock_basic(ts_code='600399.SH',fields='ts_code,symbol,name,area,industry,list_date')
df_fstg4.参照2.3.3小节内容,利用Tushare接口获取‘上证A指’指数2021年上半年的行情数据。(提示,先利用index_basic接口获得指数代码)。df=pro.index_basic(name='上证A指')df#JupyterNotebook中直接输入变量名打印,Pycharm中需要输入print(df)
5.参照2.3.4小节内容,利用Tushare接口获取2020年一整年的LIBOR拆借利率数据(提示:相关接口为pro.libor)。df=pro.libor(start_date='20200101',end_date='20201201')df#JupyterNotebook中直接输入变量名打印,Pycharm中需要输入print(df)第三章财务数据分析利器--Pandas库Part1:单项选择题1.以下不为常用创建DataFrame的方法是(C)A:通过列表创建
B:通过字典创建C:通过字符串创建 D:通过外部导入excel该题选C。常用的创建方法为列表法、字典法、空DF法、导入法等。2.对名为data的dataframe进行数据筛选时,获取多列二维表格的方法是(C)A:a=data['c1'] series一维 B:b=data[['c1']]只有一列C:c=data[['c1','c3']]
D:d=data.iloc[1,1]写法不对该题选C。A:为一维数组B:获取单列dataframeD:错误写法3.根据列对数据进行排序时,要对c2列进行降序排序,应输入ascending=(A)A:False B:TrueC:Up D:Down该题选A。对数据进行排序时,使用False代表降序、True代表升序。Pandas-Part2:多项选择题1.以下为Dataframe常用的拼接方法是(ABC)A、merge()函数B、concat()函数C、append()函数D、extend()函数该题选ABC。前三项为DF常用拼接方法,选项D用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)2.在多个筛选条件时,可用的连接符号是(CD)A、+B、AndC、&D、|该题选CD。在对DF筛选时多个条件的拼接符号通常为&或|Pandas-Part3:判断题1.使用merge函数进行两个Dataframe合并时,默认的合并是取并集。错误。默认的合并是取交集,若要取并集,需要设置how参数。Pandas-Part4:代码练习题1.pandas入门-创建二维表格(1)通过列表,创建如下DataFrame。01201020301405060(2)通过设置行、列索引的列表创建方式,创建如下DataFrame。人均收入人均支出中国80006000韩国70005000美国65004000(3)通过创建一个空DataFrame,然后列表添加的方式,创建如下DataFrame。日期分数0292149526100(4)修改上一小题的列名为date和score。答:(1)importpandasaspda=pd.DataFrame([[10,20,30],[40,50,60]])(2)a=pd.DataFrame([[8000,6000],[7000,5000],[6500,4000]],columns=['人均收入','人均支出'],index=['中国','韩国','美国'])(3)a=pd.DataFrame()#创建一个空DataFramedate=[2,4,6]score=[92,95,100]a['日期']=datea['分数']=score(4)a=pd.DataFrame()#创建一个空DataFramedate=[2,4,6]score=[92,95,100]a['日期']=datea['分数']=score#方法1a.columns=['date','score']#方法2a=a.rename(columns={'日期':'date','分数':'score'})#方法3a.rename(columns={'日期':'date','分数':'score'},inplace=True)2.pandas基础操作1-数据选取(5分)已知如下表格数据,为3人的日常生活缴费情况:(1)根据列筛选数据查看3人的房租情况,此外,查看3人的水费和房租的情况importpandasaspddf=pd.DataFrame([[10,20,30],[40,50,60],[70,80,90]],columns=['水费','电费','房租'],index=['丁一','王二','张三'])a=df['房租']#也可以写成a=df[['房租']]print(a)b=df[['水费','房租']]print(b)(2)根据行筛选数据查看第2到3行的数据,此外,查看最后一行的数据。importpandasaspddf=pd.DataFrame([[10,20,30],[40,50,60],[70,80,90]],columns=['水费','电费','房租'],index=['丁一','王二','张三'])a=df[1:3]#也可以写成a=df.iloc[1:3],或者df.iloc[1,2]print(a)b=df.iloc[-1]#本题因为行数不多,也可以写成df.iloc[2]print(b)(3)按照区块来选取数据查看丁一和王二的水费和房租情况importpandasaspddf=pd.DataFrame([[10,20,30],[40,50,60],[70,80,90]],columns=['水费','电费','房租'],index=['丁一','王二','张三'])a=df.iloc[0:2][['水费','房租']]print(a)(4)iloc函数同时选择行和列查看王二的电费情况importpandasaspddf=pd.DataFrame([[10,20,30],[40,50,60],[70,80,90]],columns=['水费','电费','房租'],index=['丁一','王二','张三'])a=df.iloc[1]['电费']#或者写成a=df.iloc[1][['电费']]print(a)(5)iloc函数和loc函数的主要区别简介iloc函数和loc函数的主要区别iloc是根据数字进行索引,而loc是根据名称进行索引3.pandas基础操作2-表头筛选请读取该Excel表格(信息表-单页.xlsx),并将表头设置为第二行内容,且正式内容从第三行开始。信息表-单页.xlsx变成如下格式:答:(读取Excel1分,设置表头2分,从第三行开始提取数据2分)importpandasaspddf=pd.read_excel('信息表-单页.xlsx')df.columns=df.iloc[0]df=df[1:]df4.pandas基础操作3-按特定条件筛选(4分)(1)筛选如下表格中电费列大于20的内容(2)筛选如下表格中电费列大于20且房租列小于85的内容答:(每小问2分)(1)importpandasaspddf=pd.DataFrame([['张三',20,30],['李四',50,60],['张三',80,90]],columns=['姓名','电费','房租'])a=df[df['电费']>20]print(a)(2)importpandasaspddf=pd.DataFrame([['张三',20,30],['李四',50,60],['张三',80,90]],columns=['姓名','电费','房租'])a=df[(df['电费']>20)&(df['房租']<85)]#需要加括号print(a)5.pandas基础操作4-数据运算、排序与删除(6分)(1)运算计算下面每个人的电费加房租的和(2)排序按照房租的价格,进行倒序排列表格(3)删除删除姓名列答:(每小问2分)(1)importpandasaspddf=pd.DataFrame([['张三',20,30],['李四',50,60],['赵五',80,90]],columns=['姓名','电费','房租'])df['电费+房租']=df['电费']+df['房租']print(df)(2)importpandasaspddf=pd.DataFrame([['张三',20,30],['李四',50,60],['赵五',80,90]],columns=['姓名','电费','房租'])a=df.sort_values('房租',ascending=False)
print(a)
(3)importpandasaspddf=pd.DataFrame([['张三',20,30],['李四',50,60],['赵五',80,90]],columns=['姓名','电费','房租'])a=df.drop(columns='姓名')
print(a)
#方法2df.drop(columns='姓名',inplace=True)
6.数据表拼接(6分)将下面3个Excel工作簿(信息表-技术部.xlsx;信息表-财务部.xlsx;信息表-行政部.xlsx)中的sheet表单“员工信息表”合并为一张表,并存为“汇总信息表.xlsx”。信息表-技术部.xlsx信息表-财务部.xlsx信息表-行政部.xlsx答:(数据读取2分,数据拼接3分,数据导出1分)importpandasaspddf1=pd.read('信息表-技术部.xlsx',sheet_name='员工信息表')df2=pd.read('信息表-财务部.xlsx',sheet_name='员工信息表')df3=pd.read('信息表-行政部.xlsx',sheet_name='员工信息表')df_all=pd.DataFrame()df_all=df_all.append(df1).append(df2).append(df3)#也可以拆成3行写df_all.to_excel('汇总信息表.xlsx',index=False)第四章财务可视化基础
-Matplotlib库Part1:单项选择题1.以下哪个代表绘制折线图(A)A:plt.plot() B:plt.scatter()C:plt.bar() D:plt.hist()选择A。其余选项分别为柱状图、散点图、直方图。2.折线图设置线条实虚格式使用哪个参数(B)A:figure B:linestyle C:bins D:edgecolormarkersize:标记大小color:线条颜色marker:数据标记的形状,默认是没有标记linestyle:线条样式,默认为实线3.哪个函数用来设置双坐标轴(D)A:plt.twin-x()B:plt.xticks()C:plt.title() D:plt.twinx()选择D。使用twinx设置双坐标轴4.设置‘长为800、宽为600’像素,以下代码哪个是正确的(B)A.plt.rcParams['figure.figsize']=(800,600)B.plt.rcParams['figure.figsize']=(8,6)C.plt.rcParams['figure.figsize']=(600,800)D.plt.rcParams['figure.figsize']=(6,8)选择B。设置像素时括号为先长后宽,100像素=15.哪个代码可以解决中文显示的问题(B)A.plt.rcParams['axes.unicode_minus']=FalseB.plt.rcParams['font.sans-serif']=['SimHei']C.plt.rcParams['loc']=['SimHei']D.plt.rcParams['label']=['SimHei']选择B。使用plt.rcParams['font.sans-serif']进行中文字体设置。Part2:多项选择题1.mplfinance能绘制哪些内容(ABC)A.收盘价B.成交价C.均线D.下一日价格预测选择ABC。mplfinance没有下一日预测的功能。Part3:判断题1.Matplotlib不能显示负号。错误。可以显示,代码是plt.rcParams['axes.unicode_minus']=FalsePart4:代码题1.利用给出的数据(源代码文件中获取),参照4.3.2小节的方法绘制白酒行业该年的净利润率同业比较图。要求:数值升序显示,标签位于图形左上角。得到的结果参考下图4-24:data=pd.read_excel('第四章第一题初始数据.xlsx')#2、绘图plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(10,6))plt.bar(data['name'],data['netprofit_margin'],label='销售净利率')plt.legend(loc='upperleft')plt.xticks(data['name'],rotation=45)plt.show()2.利用贵州茅台和五粮液从2010年至今(最新)的销售净利率数据,绘制双坐标轴折线图比较趋势。得到的结果参考下图4-25:data=pd.read_excel('第四章第二题原始数据.xlsx')plt.figure(figsize=(15,9))plt.plot(data['时间'],data['茅台净利率'],color='red',linestyle='--',label='贵州茅台')plt.legend(loc='upperleft')
#该图图例设置在左上角plt.xticks(data['时间'],rotation=45)plt.twinx()
#设置双坐标轴plt.plot(data['时间'],data['五粮液净利率'],label='五粮液')plt.legend(loc='upperright')
#改图图例设置在右上角plt.xticks(data['时间'],rotation=45)plt.show()3.参照4.3.1小节的方法,绘制贵州茅台2021年3月1日至9月30日半年间的股价K线图。得到的结果参考下图4-26:importpandasaspdimporttushareastsimportmatplotlib.pyplotaspltimportmplfinanceasmpf#1、获取行情信息pro=_api('75fe6c69bb10c996a556a402dde9fdf6e691dfdd2c30ff028ebd5a37')df0=pro.stock_basic(name='贵州茅台',fields='ts_code')codename=df0.loc[0]['ts_code']df=pro.daily(ts_code=codename,start_date='20210301',end_date='20210930')data=df[['trade_date','open','close','high','low','vol']]data.columns=['Date','Open','Close','High','Low','Volume']data=data.rename(columns={'trade_date':'Date','open':'Open','close':'Close','high':'High','low':'Low','vol':'Volume'})data.set_index('Date',inplace=True)data.index=pd.DatetimeIndex(data.index)data=data.sort_index(ascending=True)#2、绘图my_color=mpf.make_marketcolors(up='red',down='green')my_style=mpf.make_mpf_style(marketcolors=my_color)mpf.plot(data,type='candle',mav=(5,10,20),volume=True,show_nontrading=False,style=my_style)第五章
财务静态分析Part1:单项选择题1.想要获取存货的上一期数据,可以使用哪种方法(C)A:data['存货(上期)']=data['存货'].shift(+1) B:data['存货(上期)']=data['存货'].shift(0) C:data['存货(上期)']=data['存货'].shift(-1) D:data['存货(上期)']=data['存货'].shift(1) 选择C。-1代表上一期2.分析时如何保留小数(A)A:round B:ratio C:flow D:str选择A。详情见第一章。3.除了自己运算,tushare哪个参数可以输出财务指标(B)A:fina_indicateB:fina_indicatorC:fina_title() D:fina_balance()选择B。使用indicator函数获取财务指标,其余接口含义详见第三章。Part2:多项选择题1.使用Python进行静态分析可以分析哪些内容(ABCD)A.盈利能力B.运营能力C.偿债能力D.成长能力选择ABCD。python静态分析通常为运营、盈利、偿债、成长四部分。Part3:代码题1.参照本章的内容,获取贵州茅台(或读者自己感兴趣的其他公司)2015-2020年的相关数据,从上述四个方面进行财务分析。importpandasaspdimportnumpyasnpimporttushareastsimportmatplotlib.pyplotaspltpro=_api('75fe6c69bb10c996a556a402dde9fdf6e691dfdd2c30ff028ebd5a37')df_balancesheet=pd.read_excel('贵州茅台.xlsx',sheet_name='资产负债表')df_income=pd.read_excel('贵州茅台.xlsx',sheet_name='利润表')df_cashflow=pd.read_excel('贵州茅台.xlsx',sheet_name='现金流量表')data=pd.merge(df_income,df_balancesheet,on='报告期')
data=pd.merge(data,df_cashflow,on='报告期')data=pd.merge(df_income,df_balancesheet,on=['报告期','TS股票代码','公告日期','实际公告日期','报表类型','公司类型'])#按报告期列进行合并data=pd.merge(data,df_cashflow,on=['报告期','TS股票代码','公告日期','实际公告日期','报表类型','公司类型'])data#盈利能力data['毛利率']=round((data['营业收入']-data['减:营业成本'])/data['营业收入'],4)
data['营业利润率']=round((data['营业利润'])/data['营业收入'],4)
data['净利润率']=round(data['净利润(含少数股东损益)']/data['营业收入'],4)
df_2014=pro.balancesheet(ts_code='600519.SH',period='20141231')[-1:]asset_2014=df_2014['total_hldr_eqy_exc_min_int'][0]asset0=data['股东权益合计(不含少数股东权益)'][1:].to_list()asset0.append(asset_2014)data['股东权益(上期余额)']=asset0data['ROE']=round(data['净利润(不含少数股东损益)']/((data['股东权益合计(不含少数股东权益)']+data['股东权益(上期余额)'])/2),4)data[['TS股票代码','报告期','毛利率','营业利润率','净利润率','ROE']]#运营能力data['毛利率']=round((data['营业收入']-data['减:营业成本'])/data['营业收入'],4)
data['营业利润率']=round((data['营业利润'])/data['营业收入'],4)
data['净利润率']=round(data['净利润(含少数股东损益)']/data['营业收入'],4)
df_2014=pro.balancesheet(ts_code='600519.SH',period='20141231')[-1:]asset_2014=df_2014['total_hldr_eqy_exc_min_int'][0]asset0=data['股东权益合计(不含少数股东权益)'][1:].to_list()asset0.append(asset_2014)data['股东权益(上期余额)']=asset0data['ROE']=round(data['净利润(不含少数股东损益)']/((data['股东权益合计(不含少数股东权益)']+data['股东权益(上期余额)'])/2),4)data[['TS股票代码','报告期','毛利率','营业利润率','净利润率','ROE']]#偿债能力data['流动比率']=round(data['流动资产合计']/data['流动负债合计'],4)
data['速动比率']=round((data['流动资产合计']-data['存货']-data['预付款项'])/data['流动负债合计'],4)
data['利息保障倍数']=round(data['息税前利润']/data['减:利息支出'],4)
data[['TS股票代码','报告期','流动比率','速动比率','利息保障倍数']]#成长能力#1、现金比率:现金比率=(流动资产合计-存货-预付款项-应收账款)/流动负债合计)data=pro.balancesheet(ts_code='600518.SH',start_date='20150101')data['股票代码']=data['ts_code']data['报告期']=data['end_date']data['现金比率']=round((data['total_cur_assets']-data['inventories']-data['prepayment']-data['accounts_receiv'])/data['total_cur_liab'],4)data[['股票代码','报告期','现金比率']]#2、净资产增长率=(期末净资产-期初净资产)/期初净资产)df_2014=pro.balancesheet(ts_code='600518.SH',period='20141231')[-1:]theemi_14=df_2014['total_hldr_eqy_exc_min_int'].iloc[0]theemi0=data['total_hldr_eqy_exc_min_int'][1:].to_list()theemi0.append(theemi_14)data['期初净资产']=theemi0data['净资产增长率']=round((data['total_hldr_eqy_exc_min_int']-data['期初净资产'])/data['期初净资产'],4)data[['股票代码','报告期','净资产增长率']]#3、固定资产增长率=营业收入/[(期初净资产+期末净资产)/2]data1=pro.balancesheet(ts_code='600518.SH',start_date='20141231')df_ic=pro.income(ts_code='600518.SH',start_date='20141231')df=pd.merge(data1,df_ic,on='end_date')theemi_14=df_2014['total_hldr_eqy_exc_min_int'].iloc[0]theemi0=df['total_hldr_eqy_exc_min_int'][1:].to_list()theemi0.append(theemi_14)df['期初净资产']=theemi0df['报告期']=df['end_date']df['固定资产增长率']=round((df['revenue']/(df['期初净资产']+df['total_hldr_eqy_exc_min_int'])/2),4)data['固定资产增长率']=df[['固定资产增长率']]data[['股票代码','报告期','现金比率','净资产增长率','固定资产增长率']]2.除了本章提到的指标之外,读者可以再构造几个其他指标(现金比率(计算公式:现金比率=(流动资产合计-存货-预付款项-应收账款)/流动负债合计)、净资产增长率(计算公式:净资产增长率=(期末净资产-期初净资产)/期初净资产)、固定资产周转率(计算公式:固定资产周转率=营业收入/[(期初净资产+期末净资产)/2])),参照已有指标的计算方法,利用Python进行指标计算(而不是直接利用财务指标接口)。#现金比率data=data.fillna(0)data['现金比率']=round((data['流动资产合计']-data['存货']-data['预付款项']-data['应收账款'])/data['流动负债合计'],4)data[['TS股票代码','报告期','现金比率']]#净资产增长率#计算净资产data['净资产']=data['资产总计']-data['负债合计']#获取2014年的净资产数据df_2014=pro.balancesheet(ts_code='600519.SH',period='20141231')[-1:]asset_14=df_2014['total_assets'].iloc[0]-df_2014['total_liab'].iloc[0]#把2014年~2018年的资产、作为新列表,并把列表加入表格asset0=data['净资产'][1:].to_list()asset0.append(asset_14)data['净资产(上期余额)']=asset0#计算营业利润增长率data['净资产增长率']=round((data['净资产']-data['净资产(上期余额)'])/data['净资产(上期余额)'],4)data[['TS股票代码','报告期','净资产增长率']]#总资产周转率#获取2014年的固定资产数据df_2014=pro.balancesheet(ts_code='600519.SH',period='20141231')[-1:]inv_2014=df_2014['fix_assets'][0]#把2014年~2018年的固定资产作为新列表,并把列表加入表格inv0=data['固定资产'][1:].to_list()inv0.append(inv_2014)data['固定资产(上期余额)']=inv0#计算固定资产周转率data['固定资产周转率']=round(data['营业收入']/((data['固定资产']+data['固定资产(上期余额)'])/2),4)data[['TS股票代码','报告期','固定资产周转率']]3.根据第2题的作答,适当改写获取多家公司数据的代码,加入你自己写好的指标计算公式,并利用该函数调取贵州茅台、五粮液、泸州老窖(或者读者感兴趣的其他上市公司)2015-2020年的财务数据。pro=_api('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')#定义获取三张报表的函数defaccess_data(comps,codes,years):
#定义列重命名函数,把列名自动改为中文名
defrename_col(data):
rename_sheet=pd.read_excel('重命名.xlsx')
eng=rename_sheet['名称'].tolist()
chi=rename_sheet['描述'].tolist()
re_dict=dict(zip(eng,chi))
data=data.rename(columns=re_dict)
returndata
foriinrange(len(comps)):
#各新建一个空DataFrame
df_balance=pd.DataFrame()
df_income=pd.DataFrame()
df_cash=pd.DataFrame()
foryearinyears:
df_balance0=pro.balancesheet(ts_code=codes[i],period=str(year)+'1231')[-1:]
df_income0=pro.income(ts_code=codes[i],period=str(year)+'1231')[-1:]
df_cash0=pro.cashflow(ts_code=codes[i],period=str(year)+'1231')[-1:]
#拼接各年份报表
df_balance=df_balance.append(df_balance0)
df_income=df_income.append(df_income0)
df_cash=df_cash.append(df_cash0)
#更改索引名称
df_balance=rename_col(df_balance)
df_income=rename_col(df_income)
df_cash=rename_col(df_cash)
#保存为表格
writer=pd.ExcelWriter(comps[i]+'.xlsx')
df_balance.to_excel(writer,'资产负债表',index=False)
df_income.to_excel(writer,'利润表',index=False)
df_cash.to_excel(writer,'现金流量表',index=False)
writer.save()#定义财务比率表生成函数defratio_sheet(comps):
forcompincomps:
#读取报表数据
df_balancesheet=pd.read_excel(comp+'.xlsx',sheet_name='资产负债表')
df_income=pd.read_excel(comp+'.xlsx',sheet_name='利润表')
df_cashflow=pd.read_excel(comp+'.xlsx',sheet_name='现金流量表')
#报表拼接
data=pd.merge(df_income,df_balancesheet,on=['报告期','TS股票代码','公告日期','实际公告日期','报表类型','公司类型'])
data=pd.merge(data,df_cashflow,on=['报告期','TS股票代码','公告日期','实际公告日期','报表类型','公司类型'])
#把空值填充为0,防止计算出错
data=data.fillna(0)
#把相关数据的上期余额加入新表,包括股东权益、存货、资产总计、应收账款、营业收入、营业利润、负债合计、净利润(不含少数股东损益)
columns0=['股东权益合计(不含少数股东权益)','存货','资产总计','固定资产','应收账款','营业收入','营业利润','负债合计','净利润(不含少数股东损益)']
forcolumnincolumns0:
data[column+'(上期)']=data[column].shift(-1)
#去除2014年数据,只取前五行数据保存
data=data[0:5]
#计算各项指标
#盈利能力
data['毛利率']=round((data['营业收入']-data['减:营业成本'])/data['营业收入'],4)
data['营业利润率']=round((data['营业利润'])/data['营业收入'],4)
data['净利润率']=round(data['净利润(含少数股东损益)']/data['营业收入'],4)
data['ROE']=round(data['净利润(不含少数股东损益)']/((data['股东权益合计(不含少数股东权益)']+data['股东权益合计(不含少数股东权益)(上期)'])/2),4)
#营运能力
data['存货周转率']=round(data['减:营业成本']/((data['存货']+data['存货(上期)'])/2),4)
data['总资产周转率']=round(data['营业收入']/((data['资产总计']+data['资产总计(上期)'])/2),4)
data['应收账款周转率']=round(data['营业收入']/((data['应收账款']+data['应收账款(上期)'])/2),4)
data['固定资产周转率']=round(data['营业收入']/((data['固定资产']+data['固定资产(上期余额)'])/2),4)
#偿债能力
data['流动比率']=round(data['流动资产合计']/data['流动负债合计'],4)
data['速动比率']=round((data['流动资产合计']-data['存货']-data['预付款项'])/data['流动负债合计'],4)
data['现金比率']=round((data['流动资产合计']-data['存货']-data['预付款项']-data['应收账款'])/data['流动负债合计'],4)
data['利息保障倍数']=round(data['息税前利润']/data['减:财务费用'],4)
#成长能力
data['营业收入增长率']=round((data['营业收入']-data['营业收入(上期)'])/data['营业收入(上期)'],4)
data['营业利润增长率']=round((data['营业利润']-data['营业利润(上期)'])/data['营业利润(上期)'],4)
data['净资产']=data['资产总计']-data['负债合计']
data['净资产(上期)']=data['资产总计(上期)']-data['负债合计(上期)']
data['净资产增长率']=round((data['净资产']-data['净资产(上期)'])/data['净资产(上期)'],4)
data['净利润增长率']=round((data['净利润(不含少数股东损益)']-data['净利润(不含少数股东损益)(上期)'])/data['净利润(不含少数股东损益)(上期)'],4)
#取出财务比率
df_ratio=data[
['报告期','毛利率','营业利润率','净利润率','ROE','存货周转率','总资产周转率','应收账款周转率','固定资产周转率','现金比率','流动比率','速动比率','利息保障倍数','营业收入增长率',
'营业利润增长率','净资产增长率','净利润增长率']]
df_ratio=df_ratio.T
#转置
#因为上一行代码转置之后,第一行是0/1/2/3……,我们希望把第二行的报告期作为表头,并从第二行开始取数
df_ratio.columns=df_ratio.iloc[0].apply(
lambdax:int(x))
#重新命名表头,并且通过apply+lambda配合int取整函数将日期变成整数格式(原本保存成了小数格式)
df_ratio=df_ratio[1:]
#把财务比率保存为现有表格中的sheet
writer=pd.ExcelWriter(comp+'.xlsx',mode="a",engine="openpyxl")
df_ratio.to_excel(writer,'财务比率表')
writer.save()
returndf_ratio
#这行其实也可以不写,主要就是为了查看下获取的比率结果#批量需要获取数据的公司名称、股票代码、年份comps=['贵州茅台','五粮液','泸州老窖']codes=['600519.SH','000858.SZ','000568.SZ']years=[2020,2019,2018,2017,2016,2015]#调用函数生成相关Excel文件access_data(comps,codes,years)df_ratio=ratio_sheet(comps)print(df_ratio)第六章
财务趋势分析Part1:单项选择题1.以下哪个不属于趋势分析中的盈利能力分析()A:毛利率 B:存货周转率C:营业利润率 D:ROE本题选b。b为运营能力分析中运用的指标。2.以下一定不属于指标越大越好的比率是(A)A:流动比率B:毛利率C:存货周转率D:ROE流动比率过大,可能是因为企业存在货币资金闲置、应收账款过多或者存货积压的问题,这意味着企业的资产使用效率低,赊销业务的管理不善。3.哪一项不属于常见的趋势分析(C)A:盈利能力B:运营能力C:创新能力D:成长能力本题选c。常见趋势分析包括运营、盈利、成长、偿债。Part2:多项选择题1.以下属于成长能力指标的选项是(AC)A.营收增长率B.流动比率C.营业利润增长率D.总资产周转率本题选ac。b选项反应偿债能力、d选项反应运营能力Part3:判断题1.进行趋势分析综合评分时,必须给每项指标相同的权重。错误。应该根据企业所在的行业特点以及企业自身的经营目标和业务模式,合理设置不同指标的权重。Part4:代码题1.参照6.5节综合评分的流程,自定义各指标权重(注意权重之和为1),加总后看看总分有何变化,结合权重分布思考为何会有这种变化?#习题1:需要加上以下代码:#权重分配仅供参考,无标准答案score_sheet['权重']=[0.05,0.05,0.05,0.1,0.05,0.05,0.1,0.05,0.1,0.05,0.1,0.1,0.05,0.1]trend_score=0foriinscore_sheet.shape[0]:
trend_score+=round(score_sheet.loc[i,'评分']*score_sheet.loc[i,'权重'],2)print(trend_score)2.沿用第1题的答案,尝试对白酒行业所有上市公司进行批量趋势打分(获取白酒行业所有上市公司代码的方法可以提前学习下一章开头的内容),并按照最终分数降序排列。#首先需要利用上一章的函数获取每个公司的财务数据com_data=pro.stock_basic(exchange='',list_status='L',fields='ts_code,symbol,name,area,industry,list_date')bj_com=com_data[com_data['industry']=='白酒']bj_list=bj_com['ts_code'].tolist()#批量需要获取数据的公司名称、股票代码、年份comps=bj_com['name']codes=bj_listyears=[2020,2019,2018,2017,2016,2015]#调用函数生成相关Excel文件access_data(comps,codes,years)df_ratio=ratio_sheet(comps)result=pd.DataFrame()forcomincomps:
df_ratio=pd.read_excel(com+'.xlsx',sheet_name='财务比率表',header=0)
df_ratio=df_ratio.set_index('报告期')
data=df_ratio.T
scores=[]
foriinrange(len(data.T)):
n=0
forjinrange(4):
ifnp.isinf(data.iloc[j,i])==True:
n=n+1
elifdata.iloc[j,i]>data.iloc[j+1,i]:
n=n+1
#分数标准化为100分
n=n/4*100
scores.append(n)
score_sheet=data.T
score_sheet['评分']=scores
score_sheet['权重']=[0.05,0.05,0.05,0.1,0.05,0.05,0.1,0.05,0.1,0.05,0.1,0.1,0.15]
trend_score=0
foriinscore_sheet.shape[0]:
trend_score+=round(score_sheet.loc[i,'评分']*score_sheet.loc[i,'权重'],2)
score_sheet.to_excel('贵州茅台_趋势评分表.xlsx')
result[com]=trend_scoreresult=result.T.sort_values(ascending=False)print(result)第七章财务同业比较分析Part1:单项选择题1.财务同业比较中,进行净资产收益率分析时,采用什么ROE计算方式(C)A:平均ROEB:上期ROEC:全面摊薄ROED:加权平均ROE 本题选c。公式为:报告期归母净利润/报告期期末归母净资产2.财务同业比较中,进行运营能力分析时,常用的指标为(A/B)A:存货周转率B:总资产周转率C:速动比率反映偿债能力D:净利润增长率反映成长能力本题选a。c反映偿债能力、d反应成长能力。3.进行同业比较时,常用的python库包括(A)A:pandasB:Scikit-learnC:NLPD:Requests本题选a。b在机器学习常见、c为nlp分析时使用、d为网页爬虫。Part2:多项选择题1.进行同业比较时,可视化主要选取什么方法(AC)A:同业直观比较B:同业潜在比较C:同业统计量分析D:同业预测量分析本题选ac。bd不为同业比较可视化的主要内容。Part3:判断题1.进行同业分析综合评分时,可以自行选取该行业中的部分企业进行计算。(T)本题选ac。bd不为同业比较可视化的主要内容。Part4:代码题1.参照上述指标的分析思路,同样针对白酒行业,分析2020年各公司利息保障倍数的表现(进行可视化呈现)。importpandasaspdtable=pd.DataFrame(index=range(1))forcominrange(data.shape[0]):
table.loc[0,data.loc[com,'name']]=round((data.loc[com,'ebit'])/(-data.loc[com,'fin_exp']),4)table=table.T.sort_values(0,ascending=False).Tplt.figure(figsize=(10,6))
#设置下图片大小,不然有点挤plt.bar(table.columns,table.loc[0],label='利息保障倍数')plt.legend(loc='upperleft')
#设置图例位置为左上角plt.xticks(range(len(table.columns)),table.columns,rotation=45)plt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论