def GetNetProfitGrowth(stockcode): file=os.getcwd()+'\\market_data\\'+'业绩预测.csv' #print(file) df=pd.read_csv(file,index_col=0) df['growth']=df['range'].str.extract('(\d+|-\d+)',expand=True).astype('float') #print(df) if int(stockcode) in list(df.index.values): growth=df.at[int(stockcode),'growth'] if type(growth)==np.float64: #print(growth/100) return growth/100 else: #print(growth[0]/100) return growth[0]/100 else: stockname=ssa.get_stockname(stockcode) file=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'incomestatements.csv' df=pd.read_csv(file,index_col=0) #print(df) TermType={'1-3月':1,'1-6月':2,'1-9月':3,'度':4} i=len(df.columns)-1 CurrentTerm=df.columns[i] LastTerm=str(int(CurrentTerm[:4])-1)+CurrentTerm[4:] if LastTerm not in df.columns: LastTerm=str(int(CurrentTerm[:4])-1)+'年度' if ssa.get_stock_type(stockcode)=='金融类': #金融类与非金融类股票的净利润项目名称不同,故要作区别对待。 NetProfitName='(一)归属于母公司所有者的净利润'#'五、净利润' else: NetProfitName='归属于母公司所有者的净利润'#'四、净利润' CurrentProfit=float(df.at[NetProfitName,CurrentTerm].replace(',',''))/TermType[CurrentTerm[5:]]*4 #print(CurrentTerm,CurrentProfit) LastProfit=float(df.at[NetProfitName,LastTerm].replace(',',''))/TermType[LastTerm[5:]]*4 #print(LastTerm,LastProfit) #print(CurrentProfit/LastProfit-1) return CurrentProfit/LastProfit-1
def GetInventoryRate(stockcode): #获取存货比率 stockname=ssa.get_stockname(stockcode) file1=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'balancesheet.csv' file2=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'incomestatements.csv' df1=pd.read_csv(file1,index_col=0) df2=pd.read_csv(file2,index_col=0) if '现金及存放同业款项' in df1.index.values: #若是金融企业,没有存货,返回none return None,None s_ch=df1.loc['存货'].str.replace(',','').fillna('0').astype(float)/100000000 s_yysr=df2.loc['一、营业收入'].str.replace(',','').fillna('0').astype(float)/100000000 #获取营业收入 s_yysr_new_index=[] for index in s_yysr.index.values: #将季度营业收入转变为年度营业收入 if '1-3月' in index: s_yysr[index]=s_yysr[index]*4 s_yysr_new_index.append(index[0:4]+'-03-31') if '1-6月' in index: s_yysr[index]=s_yysr[index]/2*4 s_yysr_new_index.append(index[0:4]+'-06-30') if '1-9月' in index: s_yysr[index]=s_yysr[index]/3*4 s_yysr_new_index.append(index[0:4]+'-09-30') if '年度' in index: s_yysr_new_index.append(index[0:4]+'-12-31') s_yysr=pd.Series(s_yysr.values,index=s_yysr_new_index) InventoryRate=s_ch/s_yysr*100 labels=list(InventoryRate.index.values) data=list(InventoryRate.values) #print(labels,data) return labels,data
def GET(self,stockcode): labels,data1,data2=sn.GetAssets(stockcode) title=ssa.get_stockname(stockcode)+'(%s)'%stockcode+'-资产负债情况' legend1='总资产' legend2='净资产' yAxesLabel='(亿元)' render=web.template.render('templates') return render.showassets(title,labels,data1,data2,legend1,legend2,yAxesLabel)
def GET(self,stockcode): labels,data1,data2=sn.GetROE(stockcode) title=ssa.get_stockname(stockcode)+'(%s)'%stockcode+'-资产收益率' legend1='总资产收益率' legend2='净资产收益率' yAxesLabel='(%)' render=web.template.render('templates') return render.ShowROE(title,labels,data1,data2,legend1,legend2,yAxesLabel)
def GET(self,stockcode): labels,data1,data2=sn.GetIncomeProfit(stockcode) title=ssa.get_stockname(stockcode)+'(%s)'%stockcode+'-营收情况' legend1='营业收入' legend2='净利润' yAxesLabel='(亿元)' render=web.template.render('templates') return render.ShowIncomeProfit(title,labels,data1,data2,legend1,legend2,yAxesLabel)
def GET(self,stockcode): labels,data=sn.GetReceivablesRate(stockcode) title=ssa.get_stockname(stockcode)+'(%s)'%stockcode+'-应收账款比率' #print(labels,data) #legend='' yAxesLabel='(%)' render=web.template.render('templates') return render.ShowReceivablesRate(title,labels,data,yAxesLabel)
def GET(self,stockcode): labels,data1,data2=sn.GetPosition(stockcode) title=ssa.get_stockname(stockcode)+'(%s)'%stockcode+'-供应链地位' legend1='经营性资产' legend2='经营性负债' yAxesLabel='(亿元)' render=web.template.render('templates') return render.ShowPosition(title,labels,data1,data2,legend1,legend2,yAxesLabel)
def GET(self,stockcode): labels,data=sn.GetAssetsSource(stockcode) title=ssa.get_stockname(stockcode)+'(%s)'%stockcode+'-资产来源' print(labels,data) #legend='' yAxesLabel='(亿元)' render=web.template.render('templates') return render.ShowAssetsSource(title,labels,data,yAxesLabel)
def GetAssetsSource(stockcode): #获取最近一期的资产来源 stockname=ssa.get_stockname(stockcode) file=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'balancesheet.csv' print (file) df=pd.read_csv(file,index_col=0) if '现金及存放同业款项' in df.index.values: #对金融类和非金融类要作区分 df2=df.loc[['向中央银行借款', '同业及其他金融机构存放款项', '短期借款', '拆入资金', '交易性金融负债', '衍生金融负债', '卖出回购金融资产款', '吸收存款', '代理买卖证券款', '代理承销证券款', '应付帐款', '应付票据', '预收款项', '预收保费', '应付手续费及佣金', '应付分保帐款', '应付职工薪酬', '应交税费', '应付利息', '代理业务负债', '预计负债', '应付赔付款', '应付保单红利', '保户储金及投资款', '未到期责任准备金', '未决赔款准备金', '寿险责任准备金', '长期健康险责任准备金', '长期借款', '应付债券', '独立帐户负债', '递延所得税负债', '其他负债', '实收资本(或股本)', '资本公积', '减:库存股', '盈余公积', '一般风险准备', '未分配利润', '少数股东权益', '外币报表折算差额', '非正常经营项目收益调整'], df.columns[-1]].str.replace(',','').fillna('0').astype(float)/100000000 else: df2=df.loc[['短期借款','交易性金融负债','应付票据','应付账款','预收款项', '应付职工薪酬','应交税费','应付利息','应付股利','其他应付款', '应付关联公司款','一年内到期的非流动负债','其他流动负债', '长期借款','应付债券','长期应付款','专项应付款','预计负债', '递延所得税负债','其他非流动负债','实收资本(或股本)','资本公积','盈余公积', '未分配利润','少数股东权益','外币报表折算价差','非正常经营项目收益调整'], df.columns[-1]].str.replace(',','').fillna('0').astype(float)/100000000 return list(df2.index.values),list(df2.values)
def GET(self,stockcode): labels,data1,data2,data3=sn.GetNetCashFlowSum(stockcode) title=ssa.get_stockname(stockcode)+'(%s)'%stockcode+'-资产收益率' legend1='经营性现金净额' legend2='筹资性现金净额' legend3='投资性现金净额' yAxesLabel='(亿元)' render=web.template.render('templates') return render.ShowNetCashFlowSum(title,labels,data1,data2,data3,legend1,legend2,legend3,yAxesLabel)
def GET(self,stockcode): labels,data=sn.GetInventoryRate(stockcode) title=ssa.get_stockname(stockcode)+'(%s)'%stockcode+'-存货比率' #print(labels,data) #legend='' yAxesLabel='(%)' render=web.template.render('templates') if labels==None: return '金融类企业,无法计算存货比率!' else: return render.ShowInventoryRate(title,labels,data,yAxesLabel)
def GetTradePosition(stockcode): stockname=ssa.get_stockname(stockcode) file=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'balancesheet.csv' df0=pd.read_csv(file,index_col=0).fillna('0') df1=df0.loc[['应收票据','应收账款','预付款项','应付票据','应付账款','预收款项']].applymap(ssa.str_to_float) #print(df1) s_jyxzc=sum(df1[df1.columns[-1]][['应收票据','应收账款','预付款项']])#经营性资产 #print(s_jyxzc) s_jyxfz=sum(df1[df1.columns[-1]][['应付票据','应付账款','预收款项']])#经营性负债 #print (s_jyxfz) return s_jyxfz/s_jyxzc
def GetNetInvestmentCashSum(stockcode): stockname=ssa.get_stockname(stockcode) file=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'cashflow.csv' df=pd.read_csv(file,index_col=0).fillna('0') sr=df.loc['投资活动产生的现金流量净额'] ls=[] for i in range(len(sr.index)): if i>0 and sr.index[i][5:]!='1-3月' and sr.index[i-1][5:]!='度': ls.append(float(sr[sr.index[i]].replace(',',''))-float(sr[sr.index[i-1]].replace(',',''))) else: ls.append(float(sr[sr.index[i]].replace(',',''))) return sum(ls)
def GetAssetsStructure(stockcode): #获取最近一期的资产结构 stockname=ssa.get_stockname(stockcode) file=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'balancesheet.csv' print (file) df=pd.read_csv(file,index_col=0) if '现金及存放同业款项' in df.index.values: #对金融类和非金融类要作区分 df2=df.loc[['现金及存放同业款项', '货币资金', '存放中央银行款项', '结算备付金', '贵金属', '拆出资金', '交易性金融资产', '衍生金融资产', '买入返售金融资产', '应收利息', '应收保费', '应收代位追偿款', '应收分保帐款', '应收分保未到期责任准备金', '应收分保未决赔款准备金', '应收分保寿险责任准备金', '应收分保长期健康险责任准备金', '保户质押贷款', '定期存款', '发放贷款及垫款', '存出保证金', '代理业务资产', '应收款项', '预付款项', '可供出售金融资产', '持有至到期投资', '长期股权投资', '存出资本保证金', '投资性房地产', '存货', '固定资产', '在建工程', '无形资产', '长期待摊费用', '固定资产清理', '独立帐户资产', '递延所得税资产', '其他资产'], df.columns[-1]].str.replace(',','').fillna('0').astype(float)/100000000 else: df2=df.loc[['货币资金','交易性金融资产','应收票据','应收账款','预付款项', '其他应收款','应收关联公司款','应收利息','应收股利','存货', '一年内到期的非流动资产','其他流动资产','可供出售金融资产', '长期应收款','长期股权投资','投资性房地产','固定资产','在建工程', '工程物资','固定资产清理','生产性生物资产','无形资产','开发支出', '商誉','长期待摊费用','递延所得税资产','其他非流动资产'], df.columns[-1]].str.replace(',','').fillna('0').astype(float)/100000000 return list(df2.index.values),list(df2.values)
def GetAssets(stockcode): #获取历年总资产与净资产 stockname=ssa.get_stockname(stockcode) file=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'balancesheet.csv' #print (file) df=pd.read_csv(file,index_col=0) if '现金及存放同业款项' in df.index.values: #略有文字不一致,导致对金融类和非金融类要作区分 s_zzc=df.loc['资产总计'].str.replace(',','').fillna('0').astype(float)/100000000#总资产 s_jzc=df.loc['所有者权益(或股东权益)合计'].str.replace(',','').fillna('0').astype(float)/100000000#净资产 else: s_zzc=df.loc['资产总计'].str.replace(',','').fillna('0').astype(float)/100000000#总资产 s_jzc=df.loc['所有者权益(或股东权益)合计'].str.replace(',','').fillna('0').astype(float)/100000000#净资产 l_index=list(s_zzc.index.values) #报告期列表 l_zzc=list(s_zzc.values) #总资产列表 l_jzc=list(s_jzc.values) #净资产列表 return l_index,l_zzc,l_jzc
def GetIncomeGrowth(stockcode): stockname=ssa.get_stockname(stockcode) file=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'incomestatements.csv' df=pd.read_csv(file,index_col=0) #print(df) TermType={'1-3月':1,'1-6月':2,'1-9月':3,'度':4} i=len(df.columns)-1 CurrentTerm=df.columns[i] LastTerm=str(int(CurrentTerm[:4])-1)+CurrentTerm[4:] if LastTerm not in df.columns: LastTerm=str(int(CurrentTerm[:4])-1)+'年度' IncomeName='一、营业收入' CurrentIncome=float(df.at[IncomeName,CurrentTerm].replace(',',''))/TermType[CurrentTerm[5:]]*4 #print(CurrentTerm,CurrentProfit) LastIncome=float(df.at[IncomeName,LastTerm].replace(',',''))/TermType[LastTerm[5:]]*4 return CurrentIncome/LastIncome-1
def GetPosition(stockcode): #获取供应链地位 stockname=ssa.get_stockname(stockcode) file=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'balancesheet.csv' print (file) df=pd.read_csv(file,index_col=0) if '现金及存放同业款项' in df.index.values: #对金融类和非金融类要作区分 df2=df.loc[['吸收存款','发放贷款及垫款']].fillna('0').applymap(ssa.str_to_float)/100000000 s_jyxzc=df2.loc['发放贷款及垫款'] #经营性资产 s_jyxfz=df2.loc['吸收存款'] #经营性负债 else: df2=df.loc[['应收票据','应收账款','预付款项', '应付票据','应付账款','预收款项']].fillna('0').applymap(ssa.str_to_float)/100000000 s_jyxzc=df2.loc['应收票据']+df2.loc['应收账款']+df2.loc['预付款项']#经营性资产 s_jyxfz=df2.loc['应付票据']+df2.loc['应付账款']+df2.loc['预收款项']#经营性负债 labels=list(s_jyxzc.index.values) #报告期 data1=list(s_jyxzc.values) #经营性资产 data2=list(s_jyxfz.values) #经营性负债 return labels,data1,data2
def GetNetProfit(stockcode): stockname=ssa.get_stockname(stockcode) file=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'incomestatements.csv' df=pd.read_csv(file,index_col=0) #print(df) i=len(df.columns)-1 while i>=0: if '年度' in df.columns[i]: LastYear=df.columns[i] #print(LastYear) break i-=1 if ssa.get_stock_type(stockcode)=='金融类': #金融类与非金融类股票的净利润项目名称不同,故要作区别对待。 NetProfitName='(一)归属于母公司所有者的净利润'#'五、净利润' else: NetProfitName='归属于母公司所有者的净利润'#'四、净利润' #print(df.loc[NetProfitName]) NetProfit=float(df.at[NetProfitName,LastYear].replace(',','')) return NetProfit
def GetROE(stockcode): #获取资产收益率 stockname=ssa.get_stockname(stockcode) file1=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'balancesheet.csv' file2=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'incomestatements.csv' df1=pd.read_csv(file1,index_col=0) df2=pd.read_csv(file2,index_col=0) if '现金及存放同业款项' in df1.index.values: #略有文字不一致,导致对金融类和非金融类要作区分 s_zzc=df1.loc['资产总计'].str.replace(',','').fillna('0').astype(float)/100000000#总资产 s_jzc=df1.loc['所有者权益(或股东权益)合计'].str.replace(',','').fillna('0').astype(float)/100000000#净资产 else: s_zzc=df1.loc['资产总计'].str.replace(',','').fillna('0').astype(float)/100000000#总资产 s_jzc=df1.loc['所有者权益(或股东权益)合计'].str.replace(',','').fillna('0').astype(float)/100000000#净资产 if '五、净利润' in df2.index.values: #金融企业与非金融企业,净利润的项目序号不一样,应区别获取 s_jlr=df2.loc['五、净利润'].str.replace(',','').fillna('0').astype(float)/100000000 else: s_jlr=df2.loc['四、净利润'].str.replace(',','').fillna('0').astype(float)/100000000 s_jlr_new_index=[] for index in s_jlr.index.values: #将季度净利润转变为年度净利润 if '1-3月' in index: s_jlr[index]=s_jlr[index]*4 s_jlr_new_index.append(index[0:4]+'-03-31') if '1-6月' in index: s_jlr[index]=s_jlr[index]/2*4 s_jlr_new_index.append(index[0:4]+'-06-30') if '1-9月' in index: s_jlr[index]=s_jlr[index]/3*4 s_jlr_new_index.append(index[0:4]+'-09-30') if '年度' in index: s_jlr_new_index.append(index[0:4]+'-12-31') s_jlr=pd.Series(s_jlr.values,index=s_jlr_new_index) ROA=s_jlr/s_zzc*100 #总资产收益率 ROE=s_jlr/s_jzc*100 #净资产收益率 labels=list(ROA.index.values) data1=list(ROA.values) data2=list(ROE.values) return labels,data1,data2
def GetTotalLevel(stockcode): try: stockname=ssa.get_stockname(stockcode) #print(stockcode,stockname) StockPrice=GetStockPrice(stockcode) #print('股价:',StockPrice) shares=GetShares(stockcode) #print('总股本:',shares) NetProfit=GetNetProfit(stockcode) EPS=NetProfit/shares #print('每股收益:',EPS) NetProfitGrowth=GetNetProfitGrowth(stockcode) #print('净利润增长率:',NetProfitGrowth*100) IncomeGrowth=GetIncomeGrowth(stockcode) #print('营业收入增长率:',IncomeGrowth*100) InterValue=iv(NetProfitGrowth,EPS,0.07,15) #print('估值:',InterValue) #计算安全边际 SecurityLevel=graduation(InterValue/StockPrice*100) #print('股价安全度:',SecurityLevel) #计算成长性 GrowthLevel=graduation(NetProfitGrowth*100) #print('利润成长:',GrowthLevel) #计算营业能力 IncomeLevel=graduation(IncomeGrowth*100) #print('营收增长:',IncomeLevel) #计算现金能力 NetIncomeCashSum=GetNetIncomeCashSum(stockcode) #print('累计经营现金净额:',NetIncomeCashSum) NetInvestmentCashSum=GetNetInvestmentCashSum(stockcode) #print('累计投资现金净额:',NetInvestmentCashSum) CashLevel=graduation(NetIncomeCashSum/abs(NetInvestmentCashSum)*100) #print('运营现金:',CashLevel) #计算供应链地位 TradePosition=GetTradePosition(stockcode) TradePositionLevel=graduation(TradePosition*100) #print('供应链地位:',TradePositionLevel) return stockcode,stockname,SecurityLevel,GrowthLevel,IncomeLevel,CashLevel,TradePositionLevel except: return None,None,None,None,None,None,None
def GetIncomeProfit(stockcode): #获取营业状况 stockname=ssa.get_stockname(stockcode) file=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'incomestatements.csv' df=pd.read_csv(file,index_col=0) s_yysr=df.loc['一、营业收入'].str.replace(',','').fillna('0').astype(float)/100000000 #获取营业收入 s_yysr_new_index=[] for index in s_yysr.index.values: #将季度营业收入转变为年度营业收入 if '1-3月' in index: s_yysr[index]=s_yysr[index]*4 s_yysr_new_index.append(index[0:4]+'-03-31') if '1-6月' in index: s_yysr[index]=s_yysr[index]/2*4 s_yysr_new_index.append(index[0:4]+'-06-30') if '1-9月' in index: s_yysr[index]=s_yysr[index]/3*4 s_yysr_new_index.append(index[0:4]+'-09-30') if '年度' in index: s_yysr_new_index.append(index[0:4]+'-12-31') s_yysr=pd.Series(s_yysr.values,index=s_yysr_new_index) if '五、净利润' in df.index.values: #金融企业与非金融企业,净利润的项目序号不一样,应区别获取 s_jlr=df.loc['五、净利润'].str.replace(',','').fillna('0').astype(float)/100000000 else: s_jlr=df.loc['四、净利润'].str.replace(',','').fillna('0').astype(float)/100000000 for index in s_jlr.index.values: #将季度营业收入转变为年度营业收入 if '1-3月' in index: s_jlr[index]=s_jlr[index]*4 if '1-6月' in index: s_jlr[index]=s_jlr[index]/2*4 if '1-9月' in index: s_jlr[index]=s_jlr[index]/3*4 labels=list(s_yysr.index.values) data1=list(s_yysr.values) data2=list(s_jlr.values) return labels,data1,data2
def GetReceivablesRate(stockcode): #获取应收账款比率 stockname=ssa.get_stockname(stockcode) file1=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'balancesheet.csv' file2=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'incomestatements.csv' df1=pd.read_csv(file1,index_col=0) df2=pd.read_csv(file2,index_col=0) if '现金及存放同业款项' in df1.index.values: #对金融类和非金融类要作区分,计算应收账款 df3=df1.loc[['应收利息','应收保费','应收代位追偿款','应收分保帐款','应收分保未到期责任准备金','应收分保未决赔款准备金', '应收分保寿险责任准备金','应收分保长期健康险责任准备金','应收款项']].fillna('0').applymap(ssa.str_to_float)/100000000 s_yszk=df3.loc['应收利息']+df3.loc['应收保费']+df3.loc['应收代位追偿款']+df3.loc['应收分保帐款']+ \ df3.loc['应收分保未到期责任准备金']+df3.loc['应收分保未决赔款准备金']+df3.loc['应收分保寿险责任准备金']+ \ df3.loc['应收分保长期健康险责任准备金']+df3.loc['应收款项'] else: s_yszk=df1.loc['应收账款'].str.replace(',','').fillna('0').astype(float)/100000000 s_yysr=df2.loc['一、营业收入'].str.replace(',','').fillna('0').astype(float)/100000000 #获取营业收入 s_yysr_new_index=[] for index in s_yysr.index.values: #将季度营业收入转变为年度营业收入 if '1-3月' in index: s_yysr[index]=s_yysr[index]*4 s_yysr_new_index.append(index[0:4]+'-03-31') if '1-6月' in index: s_yysr[index]=s_yysr[index]/2*4 s_yysr_new_index.append(index[0:4]+'-06-30') if '1-9月' in index: s_yysr[index]=s_yysr[index]/3*4 s_yysr_new_index.append(index[0:4]+'-09-30') if '年度' in index: s_yysr_new_index.append(index[0:4]+'-12-31') s_yysr=pd.Series(s_yysr.values,index=s_yysr_new_index) ReceivableRate=s_yszk/s_yysr*100 labels=list(ReceivableRate.index.values) data=list(ReceivableRate.values) #print(labels,data) return labels,data
#print('累计投资现金净额:',NetInvestmentCashSum) CashLevel=graduation(NetIncomeCashSum/abs(NetInvestmentCashSum)*100) #print('运营现金:',CashLevel) #计算供应链地位 TradePosition=GetTradePosition(stockcode) TradePositionLevel=graduation(TradePosition*100) #print('供应链地位:',TradePositionLevel) return stockcode,stockname,SecurityLevel,GrowthLevel,IncomeLevel,CashLevel,TradePositionLevel except: return None,None,None,None,None,None,None if __name__=='__main__': stockcode=input('请输入股票代码:')#'000858' stockname=ssa.get_stockname(stockcode) print(stockcode,stockname) StockPrice=GetStockPrice(stockcode) label0='股价:'+str('{:.2f}'.format(StockPrice))+'元' print(label0) shares=GetShares(stockcode) label1='总股本:'+str('{:.2f}'.format(shares/100000000))+'亿' print(label1) NetProfit=GetNetProfit(stockcode) EPS=NetProfit/shares label2='每股收益:'+str('{:.2f}'.format(EPS))+'元' print(label2) NetProfitGrowth=GetNetProfitGrowth(stockcode) label3='净利润增长率:'+str('{:.2f}'.format(NetProfitGrowth*100))+'%' print(label3) IncomeGrowth=GetIncomeGrowth(stockcode)
def GetNetCashFlowSum(stockcode): #获取累计经营、投资和筹资累计现金流 stockname=ssa.get_stockname(stockcode) file=os.getcwd()+'\\stock_financial\\'+stockcode+stockname+'cashflow.csv' df6=pd.read_csv(file,index_col=0).fillna('0').applymap(ssa.str_to_float) #之所以是df6,是因为从ssa中复制的代码,为尽量偷懒,故延用 s_tzxjje=df6.loc['投资活动产生的现金流量净额']/100000000#投资现金净额 #以下换算成季度数据 s_tzxjje_value=[] s_tzxjje_index=[] s_tzxjje_lj_value=[]#计算累计额 s_tzxjje_lj_index=[] for i in range(len(s_tzxjje)): if i>0 and '年度' in s_tzxjje.index[i] and '1-9月' in s_tzxjje.index[i-1] and s_tzxjje.index[i][:5]==s_tzxjje.index[i-1][:5]: s_tzxjje_value.append(s_tzxjje[i]-s_tzxjje[i-1]) s_tzxjje_index.append(s_tzxjje.index[i][:4]+'-12-31') elif '1-9月' in s_tzxjje.index[i] and '1-6月' in s_tzxjje.index[i-1] and s_tzxjje.index[i][:5]==s_tzxjje.index[i-1][:5]: s_tzxjje_value.append(s_tzxjje[i]-s_tzxjje[i-1]) s_tzxjje_index.append(s_tzxjje.index[i][:4]+'-09-30') elif '1-6月' in s_tzxjje.index[i] and '1-3月' in s_tzxjje.index[i-1] and s_tzxjje.index[i][:5]==s_tzxjje.index[i-1][:5]: s_tzxjje_value.append(s_tzxjje[i]-s_tzxjje[i-1]) s_tzxjje_index.append(s_tzxjje.index[i][:4]+'-06-30') else: s_tzxjje_value.append(s_tzxjje[i]) s_tzxjje_index.append(s_tzxjje.index[i][:4]+'-03-31') s_tzxjje_lj_value.append(sum(s_tzxjje_value))#计算累计额 s_tzxjje_lj_index.append(s_tzxjje_index[i]) s_tzxjje_new=pd.Series(s_tzxjje_value,index=s_tzxjje_index) s_tzxjje_new.name=s_tzxjje.name s_tzxjje_lj_new=pd.Series(s_tzxjje_lj_value,index=s_tzxjje_lj_index) s_tzxjje_lj_new.name=s_tzxjje.name s_czxjje=df6.loc['筹资活动产生的现金流量净额']/100000000#筹资现金净额 #以下换算成季度数据 s_czxjje_value=[] s_czxjje_index=[] s_czxjje_lj_value=[]#计算累计额 s_czxjje_lj_index=[] for i in range(len(s_czxjje)): if i>0 and '年度' in s_czxjje.index[i] and '1-9月' in s_czxjje.index[i-1] and s_czxjje.index[i][:5]==s_czxjje.index[i-1][:5]: s_czxjje_value.append(s_czxjje[i]-s_czxjje[i-1]) s_czxjje_index.append(s_czxjje.index[i][:4]+'-12-31') elif '1-9月' in s_czxjje.index[i] and '1-6月' in s_czxjje.index[i-1] and s_czxjje.index[i][:5]==s_czxjje.index[i-1][:5]: s_czxjje_value.append(s_czxjje[i]-s_czxjje[i-1]) s_czxjje_index.append(s_czxjje.index[i][:4]+'-09-30') elif '1-6月' in s_czxjje.index[i] and '1-3月' in s_czxjje.index[i-1] and s_czxjje.index[i][:5]==s_czxjje.index[i-1][:5]: s_czxjje_value.append(s_czxjje[i]-s_czxjje[i-1]) s_czxjje_index.append(s_czxjje.index[i][:4]+'-06-30') else: s_czxjje_value.append(s_czxjje[i]) s_czxjje_index.append(s_czxjje.index[i][:4]+'-03-31') s_czxjje_lj_value.append(sum(s_czxjje_value))#计算累计额 s_czxjje_lj_index.append(s_czxjje_index[i]) s_czxjje_new=pd.Series(s_czxjje_value,index=s_czxjje_index) s_czxjje_new.name=s_czxjje.name s_czxjje_lj_new=pd.Series(s_czxjje_lj_value,index=s_czxjje_lj_index) s_czxjje_lj_new.name=s_czxjje.name s_jyxjje_0=df6.loc['经营活动产生的现金流量净额']/100000000#未经年度换算的经营现金净额,因尽量偷懒,复制的ssa中的代码 #以下换算成季度数据 s_jyxjje_0_value=[] s_jyxjje_0_index=[] s_jyxjje_0_lj_value=[]#计算累计额 s_jyxjje_0_lj_index=[] for i in range(len(s_jyxjje_0)): if i>0 and '年度' in s_jyxjje_0.index[i] and '1-9月' in s_jyxjje_0.index[i-1] and s_jyxjje_0.index[i][:5]==s_jyxjje_0.index[i-1][:5]: s_jyxjje_0_value.append(s_jyxjje_0[i]-s_jyxjje_0[i-1]) s_jyxjje_0_index.append(s_jyxjje_0.index[i][:4]+'-12-31') elif '1-9月' in s_jyxjje_0.index[i] and '1-6月' in s_jyxjje_0.index[i-1] and s_jyxjje_0.index[i][:5]==s_jyxjje_0.index[i-1][:5]: s_jyxjje_0_value.append(s_jyxjje_0[i]-s_jyxjje_0[i-1]) s_jyxjje_0_index.append(s_jyxjje_0.index[i][:4]+'-09-30') elif '1-6月' in s_jyxjje_0.index[i] and '1-3月' in s_jyxjje_0.index[i-1] and s_jyxjje_0.index[i][:5]==s_jyxjje_0.index[i-1][:5]: s_jyxjje_0_value.append(s_jyxjje_0[i]-s_jyxjje_0[i-1]) s_jyxjje_0_index.append(s_jyxjje_0.index[i][:4]+'-06-30') else: s_jyxjje_0_value.append(s_jyxjje_0[i]) s_jyxjje_0_index.append(s_jyxjje_0.index[i][:4]+'-03-31') s_jyxjje_0_lj_value.append(sum(s_jyxjje_0_value))#计算累计额 s_jyxjje_0_lj_index.append(s_jyxjje_0_index[i]) s_jyxjje_0_new=pd.Series(s_jyxjje_0_value,index=s_jyxjje_0_index) s_jyxjje_0_new.name=s_jyxjje_0.name s_jyxjje_0_lj_new=pd.Series(s_jyxjje_0_lj_value,index=s_jyxjje_0_lj_index) s_jyxjje_0_lj_new.name=s_jyxjje_0.name #整理数据以便输出 labels=list(s_jyxjje_0_lj_new.index.values) #x刻度 data1=list(s_jyxjje_0_lj_new.values) #经营性现金净额 data2=list(s_czxjje_lj_new.values) #筹资性现金净额 data3=list(s_tzxjje_lj_new.values) #投资性现金净额 return labels,data1,data2,data3