├── Flask制作股票查询网页 ├── app.py ├── main.css ├── main.html ├── readme.txt ├── utils.py └── 项目文件.png ├── README.md ├── selenium爬取上市公司全部行业及分行业股票行情数据 └── 爬取脚本.py └── 财报下载及分析 ├── 行情数据及财报爬取 └── 资产负债表重构(同时读取3张表) /Flask制作股票查询网页/app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | from flask import request 3 | from flask import render_template 4 | from flask import jsonify 5 | # import pymysql 6 | import uitls 7 | import sys 8 | from jieba.analyse import extract_tags 9 | import string 10 | 11 | # sys.setrecursionlimit(100000) 12 | stock_id = '600009' 13 | 14 | app = Flask(__name__) 15 | 16 | 17 | @app.route("/be") 18 | def get_data(): 19 | data = uitls.get_be_data(str(stock_id)) 20 | return jsonify({"股票名称": data[1],"当前价格": data[3],"成交量": data[6],"涨跌幅": data[32],"流通市值": data[44]}) 21 | 22 | 23 | @app.route("/his", methods=["get", "post"]) 24 | def get_history_data(): 25 | msg = uitls.get_history_data(str(stock_id)) 26 | print(msg) 27 | print(type(msg)) 28 | return jsonify({"日期":msg['日期'],"开盘价":msg['开盘价'],"收盘价":msg['收盘价'],"最低价":msg['最低价'],"最高价":msg['最高价']}) 29 | # jsonify({"日期": msg['日期'][0],"开盘价":msg['开盘价'][0]}) 30 | 31 | 32 | @app.route("/gp", methods=["get", "post"]) 33 | def get_guping(): 34 | data = uitls.get_guping(stock_id) 35 | d = [] 36 | for i in data: 37 | k = i.rstrip(string.digits) 38 | v = i[len(k):] 39 | ks = extract_tags(k) 40 | # print(v) 41 | for j in ks: 42 | if not j.isdigit(): 43 | d.append({'name': j, 'value': v}) 44 | return jsonify({'kws':d}) 45 | 46 | 47 | 48 | @app.route("/time", methods=["get", "post"]) 49 | def get_time(): 50 | return uitls.get_time() 51 | 52 | 53 | @app.route("/", methods=["get", "post"]) 54 | def input_id(): 55 | return render_template("main.html") 56 | 57 | 58 | @app.route("/ind", methods=["get", "post"]) 59 | def get_id(): 60 | global stock_id 61 | stock_id = request.values.get("股票代码") 62 | print(stock_id) 63 | return render_template("main.html") 64 | 65 | 66 | if __name__ == '__main__': 67 | app.run() 68 | -------------------------------------------------------------------------------- /Flask制作股票查询网页/main.css: -------------------------------------------------------------------------------- 1 | body{ 2 | margin: 0; 3 | background: #333; 4 | } 5 | 6 | 7 | #title{ 8 | position: absolute; 9 | width: 40%; 10 | height: 10%; 11 | top: 0; 12 | left: 30%; 13 | /* background-color: #666666; */ 14 | color: white; 15 | font-size: 30px; 16 | 17 | display: flex; 18 | align-items: center; 19 | justify-content: center; 20 | } 21 | 22 | 23 | #ins{ 24 | position: absolute; 25 | width: 40%; 26 | height: 20%; 27 | top: 10%; 28 | left: 0; 29 | background-color: grey; 30 | } 31 | 32 | 33 | #tim{ 34 | position: absolute; 35 | /* width: 30%; */ 36 | height: 10%; 37 | top: 5%; 38 | right: 2%; 39 | color: #FFFFFF; 40 | font-size: 20px; 41 | /* background-color: green; */ 42 | } 43 | 44 | 45 | #be{ 46 | position: absolute; 47 | width: 100%; 48 | height: 30%; 49 | top: 10%; 50 | left: 0; 51 | color: white; 52 | /* background-color: #777777; */ 53 | } 54 | 55 | #bl{ 56 | position: absolute; 57 | width: 50%; 58 | height: 60%; 59 | top: 40%; 60 | left: 0; 61 | background-color: #888888; 62 | } 63 | 64 | #br{ 65 | position: absolute; 66 | width: 50%; 67 | height: 60%; 68 | top: 40%; 69 | left: 50%; 70 | background-color: #999999; 71 | } 72 | 73 | .num{ 74 | width: 20%; 75 | float: left; 76 | display: flex; 77 | align-items: center; 78 | justify-content: center; 79 | color:yellow; 80 | font-size: 20px; 81 | } 82 | 83 | .tex{ 84 | width: 20%; 85 | float: left; 86 | font-family: "幼圆"; 87 | display: flex; 88 | align-items: center; 89 | justify-content: center; 90 | 91 | -------------------------------------------------------------------------------- /Flask制作股票查询网页/main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 股票数据 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
股票查询
15 |
16 | 股票代码 17 | 18 |
19 |
我是时间
20 |
21 |

股票名称

22 |

当前价格

23 |

成交量

24 |

涨跌幅

25 |

流通市值

26 |

123

27 |

123

28 |

123

29 |

123

30 |

123

31 |
32 |
我是瞎做
33 | 228 |
我是下游
229 | 324 | 417 | 418 | 419 | 420 | -------------------------------------------------------------------------------- /Flask制作股票查询网页/readme.txt: -------------------------------------------------------------------------------- 1 | 微信公众号“朋友不发圈” 2 | 3 | 自学python的数据分析,爬虫后,花了几天时间看视频学习Flask做了一个简单的股票查询网页。本来还想着加入一些其他功能,比如财务指标分析,舆情分析,最完美的想法是做成一个股票评分系统,输入股票代码可以自动输出分析结果和最终评分以及排名。但是限于没有服务器(不想花钱买)于是先到此为止,后面计划先实现股票评分的本地系统化,然后有机会再部署到网站上。有类似想法的欢迎交流~ 4 | 先放一张最终效果图。网页左上角输入股票代码,可以在下方显示实时行情、历史走势、股评词云等信息。这是本菜鸡第一次开发网页,所以是非常简单的版本。后面想要继续实现本地化的打分系统,因为虽然同花顺等炒股软件包含智能筛选功能,但是缺少一些个性化的分析指标,不知道我的这个想法是否可行?有没有价值去做?求建议! 5 | 6 | 前端页面输入股票代码传到后端,即可从网易财经、腾讯财经提供的数据接口api爬取相关股票的数据,然后利用ajax和exharts呈现到网页上。右下方的词云图是从东方财富爬取的股评信息后制作的。 7 | 具体实现过程一共花了不到一周时间,下面是全部文档信息。主要文件有四个,app.py为flask写的后端,main.html和main.css写前端,utils.py写了一些爬虫和数据处理的函数。 8 | 9 | 下面分别贴出4个文档的代码,可能包括一些冗余信息(连接mysql的一些操作,之前想做财务指标呈现是用到的)。 10 | 1 app.py 11 | flask写的后端,模式比较固定,难点在于前后台数据的交互(用到ajax)。 12 | 13 | 2.main.html 14 | 这里包含了echarts中的K线图和词云图模板,所以看起来比较长。 15 | 16 | 3 .main.css 17 | 用于网页整体布局。 18 | 19 | 4.utils.py 20 | 写了一些用于爬取数据和处理数据的函数。 21 | 22 | 后面想要继续实现本地化的打分系统,因为虽然同花顺等炒股软件包含智能筛选功能,但是缺少一些个性化的分析指标,不知道我的这个想法是否可行? 23 | -------------------------------------------------------------------------------- /Flask制作股票查询网页/utils.py: -------------------------------------------------------------------------------- 1 | import time 2 | import pymysql 3 | import urllib.request 4 | import pandas as pd 5 | import requests 6 | import re 7 | from bs4 import BeautifulSoup 8 | 9 | 10 | 11 | def get_time(): 12 | time_str = time.strftime("%Y{}%m{}%d{} %X") 13 | return time_str.format("年", "月", "日") 14 | 15 | 16 | def get_conn(): 17 | conn = pymysql.connect(host='127.0.0.1', user='root', password='199395', db='stock', charset='utf8') 18 | cursor = conn.cursor() 19 | return conn,cursor 20 | 21 | 22 | def close_conn(conn,cursor): 23 | cursor.close() 24 | conn.close() 25 | 26 | 27 | def query(sql,*args): 28 | conn,cursor = get_conn() 29 | cursor.execute(sql,args) 30 | res = cursor.fetchall() 31 | close_conn(conn,cursor) 32 | return res 33 | 34 | 35 | # def get_be_data(*args): 36 | # sql = "SELECT * FROM hangqing where stockid = %s" 37 | # res = query(sql, args) 38 | # print(res) 39 | # return res[0] 40 | def get_be_data(code): 41 | url = 'http://qt.gtimg.cn/q=sh' + str(code) 42 | content = urllib.request.urlopen(url, timeout=2).read() 43 | content = content.decode("gbk").encode("utf-8").decode("utf8", "ignore") 44 | content = content.split('~') 45 | return content 46 | 47 | 48 | def get_history_data(code): 49 | url = 'http://quotes.money.163.com/service/chddata.html?code=0'+str(code) 50 | try: 51 | content = urllib.request.urlopen(url).read() 52 | content = content.decode("gbk").encode("utf-8") 53 | with open('E:/hisdata.csv', 'wb')as f: 54 | f.write(content) 55 | data = pd.read_csv('E:/hisdata.csv') 56 | # data = data.to_dict('record') 57 | data = data[["日期","开盘价","收盘价","最低价","最高价"]] 58 | # print(data) 59 | data = data.to_dict() 60 | data['日期'] = list(data['日期'].values()) 61 | data['开盘价'] = list(data['开盘价'].values()) 62 | data['收盘价'] = list(data['收盘价'].values()) 63 | data['最低价'] = list(data['最低价'].values()) 64 | data['最高价'] = list(data['最高价'].values()) 65 | data['日期'] = data['日期'][::-1] 66 | data['开盘价'] = data['开盘价'][::-1] 67 | data['收盘价'] = data['收盘价'][::-1] 68 | data['最低价'] = data['最低价'][::-1] 69 | data['最高价'] = data['最高价'][::-1] 70 | except Exception as e: 71 | print(e) 72 | return data 73 | 74 | 75 | def get_guping(id): 76 | max_page = 2 # input('请输入爬取页数') 77 | b = [] 78 | # head = {'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'} 79 | 80 | for page in range(1, int(max_page) + 1): 81 | url = 'http://guba.eastmoney.com/list,{}_{}.html'.format(id, page) 82 | res = requests.get(url) 83 | soup = BeautifulSoup(res.text, 'html.parser') 84 | urllist = soup.find_all('div', {'class': 'articleh'}) 85 | for i in urllist: 86 | if i.find('a') != None: 87 | try: 88 | title = i.find('a').get_text() 89 | yuedu = i.find('span',{'class':'l1 a1'}).get_text() 90 | # time = i.find('span', {'class': 'l5 a5'}).get_text() 91 | # a = [title + yuedu] 92 | b.append(title + yuedu) 93 | except Exception as e: 94 | print(e) 95 | pass 96 | return b[7:] 97 | 98 | 99 | if __name__ == '__main__': 100 | msg = get_guping(600002) 101 | print(msg) 102 | -------------------------------------------------------------------------------- /Flask制作股票查询网页/项目文件.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dutzxf1993/stock-data-analysis/8e92a8443b4accc945b76a489b33c48cf160238e/Flask制作股票查询网页/项目文件.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # stock-data-analysis 2 | python爬取股市数据,并对各个行业股票行情、财务数据进行重构分析 3 | -------------------------------------------------------------------------------- /selenium爬取上市公司全部行业及分行业股票行情数据/爬取脚本.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Jul 4 08:05:26 2020 4 | 5 | @author: zxf 6 | """ 7 | 8 | from selenium import webdriver 9 | import xlsxwriter 10 | import time 11 | from selenium.webdriver.common.keys import Keys 12 | import re 13 | import csv 14 | 15 | from selenium.webdriver.common.by import By 16 | from selenium.webdriver.support import expected_conditions as EC 17 | from selenium.webdriver.support.wait import WebDriverWait 18 | 19 | browser=webdriver.Chrome('D:/chromedriver') 20 | 21 | def get_total_page(url): #获取某行业股票总页数 22 | # browser=webdriver.Chrome('D:/chromedriver') 23 | # browser.get(url) 24 | time.sleep(1) 25 | inputpage = browser.find_element_by_css_selector('#PageCont') 26 | # print(inputpage.text) 27 | pa = re.findall(r'\d+',inputpage.text) 28 | print(pa) 29 | if len(pa)==0: 30 | # browser.close() 31 | return 1 32 | elif len(pa)==5: 33 | try: 34 | nextclick = browser.find_element_by_css_selector('.next') 35 | nextclick.click() 36 | time.sleep(1) 37 | pa1 = re.findall(r'\d+',inputpage.text) 38 | print(pa1) 39 | return len(pa1) 40 | except Exception as e: 41 | print(e) 42 | return len(pa) 43 | else: 44 | return len(pa) 45 | 46 | def get_url(): #获取各行业股票列表网址 47 | url_dic = {} 48 | browser=webdriver.Chrome('D:/chromedriver') 49 | browser.get("http://quote.eastmoney.com/center/boardlist.html#industry_board") 50 | time.sleep(1) 51 | for i in range(1,5): 52 | inputpage = browser.find_element_by_css_selector('.paginate_input') 53 | inputpage.clear() 54 | inputpage.send_keys(str(i)) 55 | inputclick = browser.find_element_by_css_selector('.paginte_go') 56 | inputclick.click() 57 | time.sleep(1) 58 | hangye = browser.find_element_by_css_selector('table#table_wrapper-table>tbody') 59 | tr_contents = hangye.find_elements_by_tag_name('tr') 60 | for tr in tr_contents: 61 | td = tr.find_elements_by_css_selector('td:nth-child(2)') 62 | for tdd in td: 63 | hre = tdd.find_elements_by_tag_name('a') 64 | # print(tdd.text) 65 | for h in hre: 66 | href = h.get_attribute('href') 67 | # print(href) 68 | url_dic[tdd.text] = href 69 | # print(url_dic) 70 | browser.close() 71 | return url_dic 72 | 73 | 74 | def get_perpage_stock(): #获取每页股票具体数据 75 | # browser=webdriver.Chrome('D:/chromedriver') 76 | # browser.get(url) 77 | time.sleep(1) 78 | element = browser.find_element_by_css_selector('#dt_1') 79 | tr_contents = element.find_elements_by_tag_name('tr') 80 | dat = [] 81 | for tr in tr_contents: 82 | lis = [] 83 | for td in tr.find_elements_by_tag_name('td'): 84 | lis.append(td.text) 85 | dat.append(lis) 86 | return dat 87 | 88 | def get_all_stock(): 89 | for i,url in enumerate(dic.values()): 90 | url_tar = 'http://data.eastmoney.com/bkzj/'+url[-6:]+'.html' 91 | print(url_tar) 92 | dat =[] 93 | stock_data = [] 94 | all_data = {} 95 | browser.get(url_tar) 96 | wait = WebDriverWait(browser,10,0.5) 97 | wait.until(EC.presence_of_element_located((By.ID,"dt_1"))) 98 | total_page = get_total_page(url_tar) 99 | print('该行业股票总页数为{}'.format(total_page)) 100 | if total_page==1: 101 | print('正在爬取{}行业股票数据'.format(list(dic.keys())[i])) 102 | time.sleep(3) 103 | d = get_perpage_stock() 104 | d = d[2:] 105 | print(d) 106 | all_data[list(dic.keys())[i]] = d 107 | # browser.close() 108 | with open('E:/hangye/'+list(dic.keys())[i]+'.csv','w',newline='')as f: 109 | writer = csv.writer(f) 110 | writer.writerows(d) 111 | else: 112 | for page in range(1,total_page+1): 113 | dat =[] 114 | time.sleep(1) 115 | inpupage = browser.find_element_by_css_selector('#PageContgopage') 116 | inpupage.clear() 117 | inpupage.send_keys(page) 118 | inpuclick = browser.find_element_by_css_selector('.btn_link') 119 | inpuclick.click() 120 | time.sleep(1) 121 | print('正在爬取{}股票第{}页数据'.format(list(dic.keys())[i],page)) 122 | time.sleep(3) 123 | dat = get_perpage_stock() 124 | dat = dat[2:] 125 | stock_data.extend(dat) 126 | print(stock_data) 127 | all_data[list(dic.keys())[i]] = stock_data 128 | with open('E:/hangye/'+list(dic.keys())[i]+'.csv','w',newline='')as f: 129 | writer = csv.writer(f) 130 | writer.writerows(stock_data) 131 | return all_data 132 | 133 | 134 | def clear_url(): 135 | try: 136 | if not url_tar is null: 137 | del url_tar 138 | except Exception: 139 | pass 140 | 141 | 142 | 143 | if __name__=='__main__': 144 | time_start = time.time() 145 | clear_url() 146 | all_data = {} 147 | dic = get_url() 148 | all_data = get_all_stock() 149 | time_end = time.time() 150 | print('爬取完成,总耗时{}'.format(time_end-time_start)) 151 | print(all_data) 152 | 153 | 154 | -------------------------------------------------------------------------------- /财报下载及分析/行情数据及财报爬取: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | 3 | df = pd.read_csv('E:/hangye/医药制造.csv',encoding="gbk",header=None) 4 | stockid = list(df.iloc[:,1].astype(str)) 5 | newid = [] 6 | for i in stockid: 7 | i = i.zfill(6) 8 | newid.append(i) 9 | 10 | #获取基本行情数据 11 | import re,urllib 12 | import xlwt 13 | import hashlib 14 | from time import sleep 15 | gpdm=[] 16 | gpmc=[] 17 | price=[] 18 | volume =[] 19 | change = [] 20 | changep = [] 21 | zsz = [] 22 | ltsz=[] 23 | syl=[] 24 | sjl = [] 25 | for count in newid: 26 | if count[0]== '6' or count[0]== '9' : #这里要加单引号,不是int而是str 27 | print(count[0]) 28 | url = 'http://qt.gtimg.cn/q=sh'+ str(count) 29 | print(url) 30 | else: 31 | print(count[0]) 32 | url = 'http://qt.gtimg.cn/q=sz'+ str(count) 33 | print(url) 34 | while True: 35 | try: 36 | content = urllib.request.urlopen(url,timeout=2).read() 37 | content = content.decode("gbk").encode("utf-8").decode("utf8","ignore") 38 | #content = content.decode("gbk").encode("utf-8") 39 | content = content.split('~') 40 | hq = pd.DataFrame(content) 41 | #print(hq) 42 | gpdm.append(hq[0][2]) 43 | gpmc.append(hq[0][1]) 44 | price.append(hq[0][3]) 45 | volume.append(hq[0][6]) 46 | change.append(hq[0][31]) 47 | changep.append(hq[0][32]) 48 | zsz.append(hq[0][45]) 49 | ltsz.append(hq[0][44]) 50 | syl.append(hq[0][52]) 51 | sjl.append(hq[0][46]) 52 | data = pd.DataFrame([gpdm,gpmc,price,volume,change,changep,zsz,ltsz,syl,sjl]) 53 | hqdata = pd.DataFrame(data.values.T,columns = ['股票代码','股票名称','当前价格','成交量','涨跌','涨跌幅','总市值','流通市值','市盈率','市净率']) 54 | #print(hqdata) 55 | #with open('E:/hangqing/'+str(count)+'hq.csv','wb') as f: 56 | #f.write(hq) 57 | sleep(0.5) 58 | #hqdata.to_csv('E:/hangqing/'+str(count)+'hq.csv') 59 | print(count) 60 | break 61 | except Exception as e: 62 | print(count,e) 63 | break 64 | print(count) 65 | hqdata.to_csv('E:/hangqing/hqdata_医药制造.csv') 66 | print('爬取结束') 67 | 68 | #爬取基本财务指标 69 | import re,urllib 70 | from time import sleep 71 | for count in newid: 72 | url = 'http://quotes.money.163.com/service/zycwzb_'+str(count)+'.html?type=report' 73 | print(url) 74 | while True: 75 | try: 76 | content = urllib.request.urlopen(url,timeout=2).read() 77 | content = content.decode("gbk").encode("utf-8") 78 | with open('E:/医药行业/cwzb/'+str(count)+'cwzb.csv','wb')as f: 79 | f.write(content) 80 | data = pd.read_csv('E:/医药行业/cwzb/'+str(count)+'cwzb.csv') 81 | break 82 | sleep(1) 83 | except Exception as e: 84 | print(e,count) 85 | break 86 | 87 | #爬取资产负债表 88 | import re,urllib 89 | from time import sleep 90 | for count in newid: 91 | url = 'http://quotes.money.163.com/service/zcfzb_'+str(count)+'.html' 92 | print(url) 93 | while True: 94 | try: 95 | content = urllib.request.urlopen(url,timeout=2).read() 96 | content = content.decode("gbk").encode("utf-8") 97 | with open('E:/医药行业/zcfzb/'+str(count)+'zcfzb.csv','wb')as f: 98 | f.write(content) 99 | data = pd.read_csv('E:/医药行业/zcfzb/'+str(count)+'zcfzb.csv') 100 | break 101 | sleep(3) 102 | except Exception as e: 103 | print(e,count) 104 | break 105 | 106 | #爬取利润表 107 | import re,urllib 108 | from time import sleep 109 | for count in newid: 110 | url = 'http://quotes.money.163.com/service/lrb_'+str(count)+'.html' 111 | print(url) 112 | while True: 113 | try: 114 | content = urllib.request.urlopen(url,timeout=2).read() 115 | content = content.decode("gbk").encode("utf-8") 116 | with open('E:/医药行业/lrb/'+str(count)+'lrb.csv','wb')as f: 117 | f.write(content) 118 | data = pd.read_csv('E:/医药行业/lrb/'+str(count)+'lrb.csv') 119 | break 120 | sleep(3) 121 | except Exception as e: 122 | print(e,count) 123 | break 124 | 125 | #爬取现金流量表 126 | import re,urllib 127 | from time import sleep 128 | for count in newid: 129 | url = 'http://quotes.money.163.com/service/xjllb_'+str(count)+'.html' 130 | print(url) 131 | while True: 132 | try: 133 | content = urllib.request.urlopen(url,timeout=2).read() 134 | content = content.decode("gbk").encode("utf-8") 135 | with open('E:/医药行业/xjllb/'+str(count)+'xjllb.csv','wb')as f: 136 | f.write(content) 137 | data = pd.read_csv('E:/医药行业/xjllb/'+str(count)+'xjllb.csv') 138 | break 139 | sleep(3) 140 | except Exception as e: 141 | print(e,count) 142 | break 143 | 144 | -------------------------------------------------------------------------------- /财报下载及分析/资产负债表重构(同时读取3张表): -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import glob 3 | import re 4 | 5 | time = '2020-03-31' 6 | time1 = '2019-12-31' 7 | code = [] 8 | zcze = [] 9 | jrzc = [] 10 | yyzc = [] 11 | yyfz = [] 12 | yyzb = [] 13 | gqtz = [] 14 | jyzc = [] 15 | dqzw = [] 16 | cqzw = [] 17 | gdqy = [] 18 | chzz = [] 19 | 20 | for name in glob.glob('E:/医药行业/zcfzb/*zcfzb.csv'): 21 | coder = re.findall('\d{6}',name) 22 | code.extend(coder) #不要用append 23 | df = pd.read_csv(name) #资产负债表 24 | df1 = pd.read_csv('E:/医药行业/lrb/'+str(coder)[2:8]+'lrb.csv') #利润表 25 | df2 = pd.read_csv('E:/医药行业/xjllb/'+str(coder)[2:8]+'xjllb.csv') #现金流量表 26 | df = df.replace('--',0) 27 | df = df.replace(' --',0) 28 | df1 = df1.replace('--',0) 29 | df1 = df1.replace(' --',0) 30 | df2 = df2.replace('--',0) 31 | df2 = df2.replace(' --',0) 32 | while True: 33 | try: 34 | zczer = float(df.loc[df['报告日期'] == '资产总计(万元)'][time].values) 35 | 36 | jrzcr = (float(df.loc[df['报告日期'] == '货币资金(万元)'][time].values)+ 37 | float(df.loc[df['报告日期'] == '交易性金融资产(万元)'][time].values)+ 38 | float(df.loc[df['报告日期'] == '发放贷款及垫款(万元)'][time].values)+ 39 | float(df.loc[df['报告日期'] == '可供出售金融资产(万元)'][time].values)+ 40 | float(df.loc[df['报告日期'] == '持有至到期投资(万元)'][time].values)+ 41 | float(df.loc[df['报告日期'] == '投资性房地产(万元)'][time].values)+ 42 | float(df.loc[df['报告日期'] == '应收股利(万元)'][time].values)+ 43 | float(df.loc[df['报告日期'] == '应收利息(万元)'][time].values)+ 44 | float(df.loc[df['报告日期'] == '其他流动资产(万元)'][time].values)+ 45 | float(df.loc[df['报告日期'] == '递延所得税资产(万元)'][time].values)+ 46 | float(df.loc[df['报告日期'] == '买入返售金融资产(万元)'][time].values)) 47 | 48 | yyzcr = (float(df.loc[df['报告日期'] == '应收票据(万元)'][time].values)+ 49 | float(df.loc[df['报告日期'] == '应收账款(万元)'][time].values)+ 50 | float(df.loc[df['报告日期'] == '预付款项(万元)'][time].values)+ 51 | float(df.loc[df['报告日期'] == '存货(万元)'][time].values)+ 52 | float(df.loc[df['报告日期'] == '其他流动资产(万元)'][time].values)+ 53 | float(df.loc[df['报告日期'] == '长期应收款(万元)'][time].values)) 54 | 55 | yyfzr = (float(df.loc[df['报告日期'] == '应付票据(万元)'][time].values)+ 56 | float(df.loc[df['报告日期'] == '应付账款(万元)'][time].values)+ 57 | float(df.loc[df['报告日期'] == '预收账款(万元)'][time].values)+ 58 | float(df.loc[df['报告日期'] == '应付职工薪酬(万元)'][time].values)+ 59 | #float(df.loc[df['报告日期'] == '应付手续费及佣金']['2020-03-31'].values)+ 60 | float(df.loc[df['报告日期'] == '应交税费(万元)'][time].values)+ 61 | float(df.loc[df['报告日期'] == '其他流动负债(万元)'][time].values)+ 62 | float(df.loc[df['报告日期'] == '递延所得税负债(万元)'][time].values)+ 63 | float(df.loc[df['报告日期'] == '专项应付款(万元)'][time].values)+ 64 | float(df.loc[df['报告日期'] == '递延收益(万元)'][time].values)+ 65 | float(df.loc[df['报告日期'] == '长期递延收益(万元)'][time].values)) 66 | 67 | yyzbr = yyzcr-yyfzr 68 | 69 | gqtzr = float(df.loc[df['报告日期'] == '长期股权投资(万元)'][time].values) 70 | 71 | jyzcr = (float(df.loc[df['报告日期'] == '固定资产(万元)'][time].values)+ 72 | float(df.loc[df['报告日期'] == '在建工程(万元)'][time].values)+ 73 | float(df.loc[df['报告日期'] == '工程物资(万元)'][time].values)+ 74 | float(df.loc[df['报告日期'] == '固定资产清理(万元)'][time].values)+ 75 | float(df.loc[df['报告日期'] == '生产性生物资产(万元)'][time].values)+ 76 | float(df.loc[df['报告日期'] == '油气资产(万元)'][time].values)+ 77 | float(df.loc[df['报告日期'] == '无形资产(万元)'][time].values)+ 78 | float(df.loc[df['报告日期'] == '开发支出(万元)'][time].values)+ 79 | float(df.loc[df['报告日期'] == '商誉(万元)'][time].values)+ 80 | float(df.loc[df['报告日期'] == '递延所得税资产(万元)'][time].values)+ 81 | float(df.loc[df['报告日期'] == '长期待摊费用(万元)'][time].values)) 82 | 83 | dqzwr = (float(df.loc[df['报告日期'] == '短期借款(万元)'][time].values)+ 84 | float(df.loc[df['报告日期'] == '交易性金融负债(万元)'][time].values)+ 85 | float(df.loc[df['报告日期'] == '应付利息(万元)'][time].values)+ 86 | float(df.loc[df['报告日期'] == '应付短期债券(万元)'][time].values)+ 87 | float(df.loc[df['报告日期'] == '一年内到期的非流动负债(万元)'][time].values)) 88 | 89 | cqzwr = (float(df.loc[df['报告日期'] == '长期借款(万元)'][time].values)+ 90 | float(df.loc[df['报告日期'] == '应付债券(万元)'][time].values)+ 91 | float(df.loc[df['报告日期'] == '长期应付款(万元)'][time].values)) 92 | 93 | gdqyr = (float(df.loc[df['报告日期'] == '实收资本(或股本)(万元)'][time].values)+ 94 | float(df.loc[df['报告日期'] == '资本公积(万元)'][time].values)+ 95 | float(df.loc[df['报告日期'] == '专项储备(万元)'][time].values)+ 96 | float(df.loc[df['报告日期'] == '盈余公积(万元)'][time].values)+ 97 | float(df.loc[df['报告日期'] == '一般风险准备(万元)'][time].values)+ 98 | float(df.loc[df['报告日期'] == '未分配利润(万元)'][time].values)+ 99 | float(df.loc[df['报告日期'] == '应付股利(万元)'][time].values)+ 100 | float(df.loc[df['报告日期'] == '外币报表折算差额(万元)'][time].values)) 101 | 102 | chzzr = 2*(float(df1.loc[df1['报告日期'] == '营业收入(万元)'][time].values)- 103 | float(df1.loc[df1['报告日期'] == '其他业务收入(万元)'][time].values))/( 104 | float(df.loc[df['报告日期'] == '存货(万元)'][time].values)+ 105 | float(df.loc[df['报告日期'] == '存货(万元)'][time1].values)) 106 | 107 | 108 | zcze.append(zczer) 109 | jrzc.append(jrzcr) #不要extend 110 | yyzc.append(yyzcr) 111 | yyfz.append(yyfzr) 112 | yyzb.append(yyzbr) 113 | gqtz.append(gqtzr) 114 | jyzc.append(jyzcr) 115 | dqzw.append(dqzwr) 116 | cqzw.append(cqzwr) 117 | gdqy.append(gdqyr) 118 | chzz.append(chzzr) 119 | break 120 | except Exception as e: 121 | zczer = 0 122 | jrzcr = 0 123 | yyzcr = 0 124 | yyfzr = 0 125 | yyzbr = 0 126 | gqtzr = 0 127 | jyzcr = 0 128 | dqzwr = 0 129 | cqzwr = 0 130 | gdqyr = 0 131 | chzzr = 0 132 | zcze.append(zczer) 133 | jrzc.append(jrzcr) 134 | yyzc.append(yyzcr) 135 | yyfz.append(yyfzr) 136 | yyzb.append(yyzbr) 137 | gqtz.append(gqtzr) 138 | jyzc.append(jyzcr) 139 | dqzw.append(dqzwr) 140 | cqzw.append(cqzwr) 141 | gdqy.append(gdqyr) 142 | chzz.append(chzzr) 143 | print(coder,e) 144 | break #不要写成continue 145 | 146 | 147 | 148 | new_zcfzb = pd.DataFrame(columns = ['股票代码','总资产','金融资产','营运资产','营运负债','营运资本','股权投资','长期经营资产','短期债务', 149 | '长期债务','股东权益','存货周转次数']) 150 | new_zcfzb['股票代码'] = code 151 | new_zcfzb['总资产'] = zcze 152 | new_zcfzb['金融资产'] = jrzc 153 | new_zcfzb['营运资产'] = yyzc 154 | new_zcfzb['营运负债'] = yyfz 155 | new_zcfzb['营运资本'] = yyzb 156 | new_zcfzb['股权投资'] = gqtz 157 | new_zcfzb['长期经营资产'] = jyzc 158 | new_zcfzb['短期债务'] = dqzw 159 | new_zcfzb['长期债务'] = cqzw 160 | new_zcfzb['股东权益'] = gdqy 161 | new_zcfzb['存货周转次数'] = chzz 162 | new_zcfzb['金融资产占比'] = new_zcfzb['金融资产'] / new_zcfzb['总资产'] 163 | new_zcfzb['长期经营资产占比'] = new_zcfzb['长期经营资产'] / new_zcfzb['总资产'] 164 | new_zcfzb['营运资本占比'] = new_zcfzb['营运资本'] / new_zcfzb['总资产'] 165 | new_zcfzb['长期股权投资占比'] = new_zcfzb['股权投资'] / new_zcfzb['总资产'] 166 | new_zcfzb['股权资本比率'] = new_zcfzb['股东权益'] / new_zcfzb['总资产'] 167 | new_zcfzb['有息债务率'] = (new_zcfzb['短期债务'] + new_zcfzb['长期债务'])/ new_zcfzb['总资产'] 168 | new_zcfzb['财务杠杆比率']=1 /new_zcfzb['股权资本比率'] 169 | new_zcfzb['营运资本长期化率'] = (new_zcfzb['长期债务'] + new_zcfzb['股东权益']- new_zcfzb['长期经营资产']- new_zcfzb['股权投资'] )/ new_zcfzb['营运资本'] 170 | 171 | new_zcfzb.to_csv('E:/医药制造行业资产资本表.csv',encoding='utf_8_sig') 172 | 173 | --------------------------------------------------------------------------------