import pandas as pd
import openpyxl
import re
xlsx = '水电及其他电.xlsx'
df = pd.read_excel(xlsx)
exf = openpyxl.load_workbook(xlsx)
sheet = exf.active
C2 = sheet['C2']
C = sheet['C']
links = [c.value for c in C]
links_1 = links[1:-1]
links_2 = ''.join(links_1)
sample = '=HYPERLINK("http://news.windin.com/ns/bulletin.php?code=2B41260EA8F3&id=123597160&type=1","方正证券:2020年年度报告")'
p = re.compile('"(.*?)","(.*?)"')
list_of_tuple = p.findall(links_2)
df2 = pd.DataFrame({'link':[t[0] for t in list_of_tuple], 'f_name':[t[1] for t in list_of_tuple]})
df2.to_csv('水电及其他.csv')
import re
import pandas as pd
import os
m= open('水电及其他.csv',encoding='utf-8')
df=pd.read_csv(m)
p = re.compile('(?<=\d{4}(年度))')
f_names = [p.sub('年年度报告', f) for f in df.f_name]
df['f_name'] = f_names; del p,f_names
def filter_links(words,df,include=True):
ls = []
for word in words:
if include:
ls.append([word in f for f in df.f_name])
else:
ls.append([word not in f for f in df.f_name])
index = []
for r in range(len(df)):
flag = not include
for c in range(len(words)):
if include:
ls.append([word not in f for f in df.f_name])
index=[]
for r in range(len(df)):
flag=not include
for c in range(len(words)):
if include:
flag = flag or ls[c][r]
else:
flag = flag and ls[c][r]
index.append(flag)
df2=df[index]
return(df2)
df_all = filter_links(['摘要','问询函','社会责任','审计','财务','风险','债券'],df,include=[False])
df_orig = filter_links(['(','('],df_all,include=[False])
df_updt = filter_links(['(','('],df_all,include=[True])
df_updt = filter_links(['取消'],df_updt,include=[False])
def sub_with_update(df_updt,df_orig):
df_newest = df_orig.copy()
index_orig=[]
index_updt=[]
for i,f in enumerate(df_orig.f_name):
for j,fn in enumerate(df_updt.f_name):
if f in fn:
index_orig.append(i)
index_updt.append(j)
for n in range(len(index_orig)):
i = index_orig[n]
j = index_updt[n]
df_orig.iloc[i,-2] = df_updt.iloc[j,-2]
return(df_newest)
df_newest = sub_with_update(df_updt,df_orig)
df_all.sort_values(by=['f_name'],inplace=True)
df_newest['公司简称'] = [f[:4] for f in df_newest.f_name]
counts = df_newest['公司简称'].value_counts()
ten_company = []
for cn in counts.index[:10]:
ten_company.append(filter_links([cn],df_newest))
if not os.path.exists('10companies'):
os.makedirs('10companies')
for df_com in ten_company:
cn=df_com['公司简称'].iloc[0]
df_com.to_csv('10companies/%s.csv' % cn)
xm=os.listdir('10companies')
print(xm)
import re
import requests
import pandas as pd
import time
import os
os.chdir('/Users/21954/Desktop/新建文件夹/10companies')
fil=os.listdir()
fil.remove(fil[2])
links= []
f_names=[]
for dfil in fil:
m= open(dfil,encoding='utf-8')
fmo = pd.read_csv(m)
for link in fmo['link']:
links.append(link)
for f_name in fmo['f_name']:
f_names.append(f_name)
def get_PDF_url(url):
r = requests.get(url);r.encoding = 'utf-8'; html = r.text
r.close()
p = re.compile('<a href=(.*?)\s.*?>(.*?)</a>', re.DOTALL)
a = p.search(html)
if a is None:
Warning('没有找到下载链接。请手动检查链接:%s' % url)
return()
else:
href = a.group(1); fname = a.group(2).strip()
href = r.url[:26] + href
return((href,fname))
hrefs=[];fnames=[]
for link in links:
href,fname = get_PDF_url(link)
hrefs.append(href)
fnames.append(fname)
time.sleep(10)
df_final_links=pd.DataFrame({'href':hrefs,'fname':fnames})
df_final_links.to_csv('final_links水电.csv')
m1= open('final_links水电.csv',encoding='gbk')
df_final_links=pd.read_csv(m1)
f_names=df_final_links['f_name']
hrefs=df_final_links['href']
for i in range(len(hrefs)):
href=hrefs[i];f_name=f_names[i]
r = requests.get(href, allow_redirects=True)
open('%s' %f_name, 'wb').write(r.content)
time.sleep(10)
r.close()
import pdfplumber
import os
#将不同公司的年报划分至不同文件夹,一次全部读取,这里以黔源电力为例
os.chdir('/Users/21954/Desktop/新建文件夹/黔源电力')
f_1=os.listdir()
for f_2 in f_1:
file_path = f_2
with pdfplumber.open(file_path) as pdf:
page = pdf.pages[4]
print(page.extract_table())
for row in page.extract_tables() :
print(row)
print(row[0])#读取每行表头对应的数字
这里着重对各个公司的营业收入和年度现金流量进行了可视化分析,西昌电力和梅雁吉祥因为数据缺失和无法下载先不做分析*
import xlrd
import matplotlib.pyplot as plt
import os
os.chdir('/Users/21954/Desktop/新建文件夹')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#导入excel文件,以及第几张表
data = xlrd.open_workbook('桂冠电力.xlsx')
table = data.sheets()[0]
#第一个图的数据
t1 = table.col_values(1)
tt = t1[2:9]
xAxis1 = range(2013,2020)
#第二个图的数据
t2 = table.col_values(2)
tu = t2[2:9]
xAxis2 = range(2013,2020)
#作图
plt.figure(figsize=(15,8))
plt.plot(xAxis1, tt, label='营业收入')
plt.plot(xAxis2, tu, label='经营活动产生的现金流量净额')
plt.xlabel('年份')
plt.ylabel(u'金额数值',fontsize=15)
plt.title(u'桂冠电力',fontsize=20)
plt.legend()
plt.show()
import xlrd
import matplotlib.pyplot as plt
import os
os.chdir('/Users/21954/Desktop/新建文件夹')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#导入excel文件,以及第几张表
data = xlrd.open_workbook('川投能源.xlsx')
table = data.sheets()[0]
#第一个图的数据
t1 = table.col_values(1)
tt = t1[2:9]
xAxis1 = range(2013,2020)
#第二个图的数据
t2 = table.col_values(2)
tu = t2[2:9]
xAxis2 = range(2013,2020)
#作图
plt.figure(figsize=(15,8))
plt.plot(xAxis1, tt, label='营业收入')
plt.plot(xAxis2, tu, label='经营活动产生的现金流量净额')
plt.xlabel('年份')
plt.ylabel(u'金额数值',fontsize=15)
plt.title(u'川投能源',fontsize=20)
plt.legend()
plt.show()
import xlrd
import matplotlib.pyplot as plt
import os
os.chdir('/Users/21954/Desktop/新建文件夹')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#导入excel文件,以及第几张表
data = xlrd.open_workbook('长江电力.xlsx')
table = data.sheets()[0]
#第一个图的数据
t1 = table.col_values(1)
tt = t1[2:9]
xAxis1 = range(2013,2020)
#第二个图的数据
t2 = table.col_values(2)
tu = t2[2:9]
xAxis2 = range(2013,2020)
#作图
plt.figure(figsize=(15,8))
plt.plot(xAxis1, tt, label='营业收入')
plt.plot(xAxis2, tu, label='经营活动产生的现金流量净额')
plt.xlabel('年份')
plt.ylabel(u'金额数值',fontsize=15)
plt.title(u'长江电力',fontsize=20)
plt.legend()
plt.show()
import xlrd
import matplotlib.pyplot as plt
import os
os.chdir('/Users/21954/Desktop/新建文件夹')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#导入excel文件,以及第几张表
data = xlrd.open_workbook('甘肃电投.xlsx')
table = data.sheets()[0]
#第一个图的数据
t1 = table.col_values(1)
tt = t1[2:9]
xAxis1 = range(2013,2020)
#第二个图的数据
t2 = table.col_values(2)
tu = t2[2:9]
xAxis2 = range(2013,2020)
#作图
plt.figure(figsize=(15,8))
plt.plot(xAxis1, tt, label='营业收入')
plt.plot(xAxis2, tu, label='经营活动产生的现金流量净额')
plt.xlabel('年份')
plt.ylabel(u'金额数值',fontsize=15)
plt.title(u'甘肃电投',fontsize=20)
plt.legend()
plt.show()
import xlrd
import matplotlib.pyplot as plt
import os
os.chdir('/Users/21954/Desktop/新建文件夹')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#导入excel文件,以及第几张表
data = xlrd.open_workbook('湖南发展.xlsx')
table = data.sheets()[0]
#第一个图的数据
t1 = table.col_values(1)
tt = t1[2:9]
xAxis1 = range(2013,2020)
#第二个图的数据
t2 = table.col_values(2)
tu = t2[2:9]
xAxis2 = range(2013,2020)
#作图
plt.figure(figsize=(15,8))
plt.plot(xAxis1, tt, label='营业收入')
plt.plot(xAxis2, tu, label='经营活动产生的现金流量净额')
plt.xlabel('年份')
plt.ylabel(u'金额数值',fontsize=15)
plt.title(u'湖南发展',fontsize=20)
plt.legend()
plt.show()
湖南发展最新一年的经营活动产生的现金流量净额是负值,因此导致了上图的结果,受流域降雨减少、合并报表范围变更、新冠疫情等综合因素影响,公司实现营业收入31,088.59万元,同比增长27.48%;实现归属于上市公司股东的净利润9,787.99万元,同比减少29.25%,受疫情和气候的影响较为严重。
import xlrd
import matplotlib.pyplot as plt
import os
os.chdir('/Users/21954/Desktop/新建文件夹')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#导入excel文件,以及第几张表
data = xlrd.open_workbook('闽东电力.xlsx')
table = data.sheets()[0]
#第一个图的数据
t1 = table.col_values(1)
tt = t1[2:9]
xAxis1 = range(2013,2020)
#第二个图的数据
t2 = table.col_values(2)
tu = t2[2:9]
xAxis2 = range(2013,2020)
#作图
plt.figure(figsize=(15,8))
plt.plot(xAxis1, tt, label='营业收入')
plt.plot(xAxis2, tu, label='经营活动产生的现金流量净额')
plt.xlabel('年份')
plt.ylabel(u'金额数值',fontsize=15)
plt.title(u'闽东电力',fontsize=20)
plt.legend()
plt.show()
import xlrd
import matplotlib.pyplot as plt
import os
os.chdir('/Users/21954/Desktop/新建文件夹')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#导入excel文件,以及第几张表
data = xlrd.open_workbook('韶能股份.xlsx')
table = data.sheets()[0]
#第一个图的数据
t1 = table.col_values(1)
tt = t1[2:9]
xAxis1 = range(2013,2020)
#第二个图的数据
t2 = table.col_values(2)
tu = t2[2:9]
xAxis2 = range(2013,2020)
#作图
plt.figure(figsize=(15,8))
plt.plot(xAxis1, tt, label='营业收入')
plt.plot(xAxis2, tu, label='经营活动产生的现金流量净额')
plt.xlabel('年份')
plt.ylabel(u'金额数值',fontsize=15)
plt.title(u'韶能股份',fontsize=20)
plt.legend()
plt.show()
import xlrd
import matplotlib.pyplot as plt
import os
os.chdir('/Users/21954/Desktop/新建文件夹')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#导入excel文件,以及第几张表
data = xlrd.open_workbook('黔源电力.xlsx')
table = data.sheets()[0]
#第一个图的数据
t1 = table.col_values(1)
tt = t1[2:9]
xAxis1 = range(2013,2020)
#第二个图的数据
t2 = table.col_values(2)
tu = t2[2:9]
xAxis2 = range(2013,2020)
#作图
plt.figure(figsize=(15,8))
plt.plot(xAxis1, tt, label='营业收入')
plt.plot(xAxis2, tu, label='经营活动产生的现金流量净额')
plt.xlabel('年份')
plt.ylabel(u'金额数值',fontsize=15)
plt.title(u'黔源电力',fontsize=20)
plt.legend()
plt.show()
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['font.family'] = 'simhei'
people = pd.read_excel('历年营业收入.xlsx')
people.plot.bar(x='公司名称',y='2013年营业收入',color='blue')
plt.xticks(rotation=360)
plt.show()
people.plot.bar(x='公司名称',y='2014年营业收入',color='blue')
plt.xticks(rotation=360)
plt.show()
people.plot.bar(x='公司名称',y='2015年营业收入',color='blue')
plt.xticks(rotation=360)
plt.show()
people.plot.bar(x='公司名称',y='2016年营业收入',color='blue')
plt.xticks(rotation=360)
plt.show()
people.plot.bar(x='公司名称',y='2017年营业收入',color='blue')
plt.xticks(rotation=360)
plt.show()
people.plot.bar(x='公司名称',y='2018年营业收入',color='blue')
plt.xticks(rotation=360)
plt.show()
people.plot.bar(x='公司名称',y='2019年营业收入',color='blue')
plt.xticks(rotation=360)
plt.show()
people.plot.bar(x='公司名称',y='2020年营业收入',color='blue')
plt.xticks(rotation=360)
plt.show()
从年报数据来看,除了坐拥三峡集团的长江电力在气候和疫情多变的情况下保持了稳步增长,其他在分析行列的公司均有不同程度的折损,尤其是闽东电力和湖南发展,本区域水电开发资源枯竭,全国能源工作会议却指出,要着力提高能源供给水平,加快风电光伏发展,稳步推进水电核电建设,大力提升新能源消纳和储存能力,深入推进煤炭清洁高效开发利用,进一步优化完善电网建设,这对于这些区域条件受限的公司来说,有了很大程度的挑战,从年报数据上来看,不止营收下降,减少派息,投资其他产业等都是艰难情况下不得已而为之的必要手段。