# -*- coding:utf-8 -*-
import matplotlib.pyplot as plt #from matplotlib import pyplot as plt
from matplotlib import ticker
import sqlite3
import pandas as pd
import os
st_list=input("请输入您要分析财报的股票代码(以逗号分开,如6011111,002241,603986):")
st_list=st_list.split(",")
for st in st_list:
# 数据库文件
print(st)
db = 'stockfin.db'
# 连接数据库,如果没有则创建数据库
conn = sqlite3.connect(db)
bs_sql='SELECT * from bs where 代码="{}" and "年报日期" like "%2%" order by "年报日期";'.format(st)
bs=pd.read_sql_query(bs_sql, conn)
print(bs)
bs["归属母公司所有者权益(或股东权益)"]=bs["归属母公司所有者权益(或股东权益)"].apply(pd.to_numeric)
bs["归属母公司所有者权益均值"]=(bs["归属母公司所有者权益(或股东权益)"]+bs["归属母公司所有者权益(或股东权益)"].shift(4).fillna(0))/2 #期初+期末/2
st_name=bs["简称"][0]
print(st_name)
pl_sql='SELECT * from pl_yapcc where 代码="{}" and "年报日期" like "%2%" order by "年报日期";'.format(st)
pl=pd.read_sql_query(pl_sql, conn)
print(pl)
#ROE=净利润 /净资产=净利润 /(资产-负债)
BSPL=pd.merge(bs,pl, on="年报日期",how="inner") #取日期的交集
roe=pd.DataFrame(BSPL,columns=["归属母公司所有者权益均值", "归属于母公司所有者的净利润","年报日期"])
#roe[["归属母公司所有者权益(或股东权益)", "归属于母公司所有者的净利润"]]=roe[["归属母公司所有者权益(或股东权益)", "归属于母公司所有者的净利润"]].astype(float)
#roe[["归属母公司所有者权益(或股东权益)", "归属于母公司所有者的净利润"]]=roe[["归属母公司所有者权益(或股东权益)", "归属于母公司所有者的净利润"]].apply(pd.to_numeric)
print(roe)
#print(roe["归属母公司所有者权益(或股东权益)"])
#print(roe["归属母公司所有者权益(或股东权益)"].shift(4).fillna(0))
#average=(roe["归属母公司所有者权益(或股东权益)"]+roe["归属母公司所有者权益(或股东权益)"].shift(4).fillna(0))/2 #期初+期末/2
#print(average)
roe["净资产收益率"]=roe["归属于母公司所有者的净利润"]/roe["归属母公司所有者权益均值"]
#roe["净资产收益率"]=roe["净资产收益率"].apply(lambda x: format(x, '.2%')) #Series.apply()让序列的值依次在lambda函数中执行;
print(roe)
line_lable=st+"_"+st_name
plt.cla()
plt.figure()
fig =plt.figure(figsize=(12,5)) #Figure:指整个图形(可以通过plt.figure()设置画布的大小和分辨率等)
## 可用MarkerEdgeColor或mec设置标记边缘颜色;MarkerFaceColor或mfc设置标记填充颜色;MarkerSize设置标记大小
x=roe["年报日期"]
y=roe["净资产收益率"]
plt.plot(x, y, marker='o', mec='r', mfc='w',label=line_lable, linewidth=4)
print(type(plt.gca()))
plt.gca().yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=1)) #百分比显示
# zip joins x and y coordinates in pairs
for a,b in zip(x,y):
label = "{:.2f}".format(b) #b代表轴数据
plt.annotate(label, # this is the texts
(a,b), # this is the point to label
textcoords="offset points", # how to position the text
xytext=(0,10), # distance from text to points (x,y)
ha='center') # horizontal alignment can be left, right or center
# 设置图表标题,并给坐标轴添加标签
title=st+"_"+st_name+"_"+"归属母公司净资产收益率(ROE)趋势"
plt.title(title, fontsize=20)
#显示图形的图例
plt.legend()
plt.xlabel("报告日期", fontsize=12)
plt.ylabel("净资产收益率", fontsize=12)
f_name=title+".jpg"
csv_name=title+".csv"
# 获取今日日期,并转换为字符串的形式。以此日期命名建立文件路径
data = st+"_"+st_name+ "//"
# 判断是否存在此文件夹
folder = os.path.exists(data)
# 如果不存在就新建该文件夹
if not folder:
os.makedirs(data)
save_file = os.path.join(data, f_name)
print(save_file)
roe.to_csv(os.path.join(data, csv_name),encoding="utf_8_sig")
plt.savefig(save_file)
#plt.show()
plt.clf()
conn.close()
2020-08-19
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...