《大数据财务分析——基于Python》课后习题答案.docx
《《大数据财务分析——基于Python》课后习题答案.docx》由会员分享,可在线阅读,更多相关《《大数据财务分析——基于Python》课后习题答案.docx(47页珍藏版)》请在冰豆网上搜索。
第一章Python基础快速入门
Part1:
单项选择题
1.下面哪个数据类型表示整数(B)
A:
char B:
int
C:
float D:
list
该题选B。
选项A不是python的数据类型,C为小数格式,D为列表。
2.下面(C)不是推荐的变量名。
A:
a B:
banana
C:
list D:
my-score
该题选C。
变量命名需要便于理解和阅读,选项a缺乏含义,不易于阅读;选项c与列表名相同,容易混淆;选项d为非法命名。
3.下列代码的执行结果是(B)
A:
1 B:
3
C:
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=0
foriinrange(10001):
num+=i
print(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='华能信托是家好公司'
#方法1
result1=a.strip()
print(result1)
#方法2
result2=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/14
print(ROE_2020)
#方法二:
ROE=3.3/14
print('{}%'.format(round(ROE*100,2)))
#方法三:
ROE=3.3/14
print(str(round(ROE*100,2))+'%')
7.假设公司A是贵州茅台,通过字符串拼接得到它的完整股票代码:
600519.SH。
(上交所上市的股票代码后缀名为“.SH”,深交所为“.SZ”。
)
ID='600519'
Exchange='.SH'
Name=ID+Exchange
print(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_profi
C:
total_revenue D:
operate_profit
2.使用tushare获取经营活动产生的现金流量净额的输出变量为(A)
A:
n_cashflow_act B:
free_cashflow
C:
n_cashflow_inv_act D:
n_cash_flows_fnc_act
3.使用tushare获取交易性金融资产的输出变量为(B)
A:
intan_assets B:
trad_asset
C:
acct_payable D:
lt_eqt_invest
Part2:
多项选择题
1.以下属于获取资产负债表输入参数的是(ABC)
A、ts_code
B、Period
C、Fields
D、Date
2.以下为tushare可用的接口是(BD)
A、Balance资产负债表的接口是balancesheet,该选项不完整
B、stock_company上市公司基本信息接口
C、stk_audit
D、fina_mainbz主营业务构成接口
B:
上市公司基本信息接口
D:
主营业务构成接口
A、C为拼写错误选项
Part3:
判断题
1.在获取宏观数据时,获取GDP数据的开始季度为必选参数,结束季度为可选参数。
错误,均非必选参数。
Part4:
代码练习题
1.参照2.2.4小节内容,利用Tushare接口获取中信特钢(000708.SZ)、抚顺特钢(600399.SH)、方大特钢(600507.SH)2018至2020年三张报表的数据,并另存为excel文件。
importtushareasts
pro=ts.pro_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_fstg
4.参照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:
获取单列dataframe
D:
错误写法
3.根据列对数据进行排序时,要对c2列进行降序排序,应输入ascending=(A)
A:
False B:
True
C:
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、And
C、&
D、|
该题选CD。
在对DF筛选时多个条件的拼接符号通常为&或|
Pandas-Part3:
判断题
1.使用merge函数进行两个Dataframe合并时,默认的合并是取并集。
错误。
默认的合并是取交集,若要取并集,需要设置how参数。
Pandas-Part4:
代码练习题
1.pandas入门-创建二维表格
(1)通过列表,创建如下DataFrame。
0
1
2
0
10
20
30
1
40
50
60
(2)通过设置行、列索引的列表创建方式,创建如下DataFrame。
人均收入
人均支出
中国
8000
6000
韩国
7000
5000
美国
6500
4000
(3)通过创建一个空DataFrame,然后列表添加的方式,创建如下DataFrame。
日期
分数
0
2
92
1
4
95
2
6
100
(4)修改上一小题的列名为date和score。
答:
(1)
importpandasaspd
a=pd.DataFrame([[10,20,30],[40,50,60]])
(2)
a=pd.DataFrame([[8000,6000],[7000,5000],[6500,4000]],columns=['人均收入','人均支出'],index=['中国','韩国','美国'])
(3)
a=pd.DataFrame()#创建一个空DataFrame
date=[2,4,6]
score=[92,95,100]
a['日期']=date
a['分数']=score
(4)
a=pd.DataFrame()#创建一个空DataFrame
date=[2,4,6]
score=[92,95,100]
a['日期']=date
a['分数']=score
#方法1
a.columns=['date','score']
#方法2
a=a.rename(columns={'日期':
'date','分数':
'score'})
#方法3
a.rename(columns={'日期':
'date','分数':
'score'},inplace=True)
2.pandas基础操作1-数据选取(5分)
已知如下表格数据,为3人的日常生活缴费情况:
(1)根据列筛选数据
查看3人的房租情况,此外,查看3人的水费和房租的情况
importpandasaspd
df=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行的数据,此外,查看最后一行的数据。
importpandasaspd
df=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)按照区块来选取数据
查看丁一和王二的水费和房租情况
importpandasaspd
df=pd.DataFrame([[10,20,30],[40,50,60],[70,80,90]],columns=['水费','电费','房租'],index=['丁一','王二','张三'])
a=df.iloc[0:
2][['水费','房租']]
print(a)
(4)iloc函数同时选择行和列
查看王二的电费情况
importpandasaspd
df=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-