日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

利用Python实现财务分析/经营分析自动化

發布時間:2023/12/14 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用Python实现财务分析/经营分析自动化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前寫公司研究報告時,所有的數據都是通過翻看招股說明書/年報的PDF獲取的,把數字從PDF里復制粘貼到EXCEL里再生成圖表的過程非常繁瑣,而且容易因為看錯行/列摘錯數據。使用Python可以實現提取財務數據、計算財務指標、可視化呈現等一系列操作的自動化,加之可以通過爬蟲從巨潮資訊、雪球等網站批量獲取公司財務報表,在沒有專用數據庫可用的情況下,Python能為財務大數據分析、大范圍的公司研究、行業研究提供極大便利。

一、獲取報表
巨潮資訊上的數據最權威,但是各個年度數據是分開存放的,而雪球提供財務數據是各年度都在同一個CSV里。由于經營分析涉及趨勢研究,需要連續多年的數據,在數據按年度分為多個文件的情況下還得多進行一次遍歷,不是很方便,故這里選擇從雪球批量獲取財務報表。

import pandas as pd import requests from multiprocessing.dummy import Pool as ThreadPoollrb_base_url = 'http://api.xueqiu.com/stock/f10/incstatement.csv?page=1&size=10000&symbol=' llb_base_url = 'http://api.xueqiu.com/stock/f10/cfstatement.csv?page=1&size=10000&symbol=' fzb_base_url = 'http://api.xueqiu.com/stock/f10/balsheet.csv?page=1&size=10000&symbol='header = {'User-Agent': 'Mozilla/5.0'}

定義利潤表、資產負債表、現金流量表的下載函數:

def download_lrb(url):r = requests.get(url, headers=headers)filename = url.split('=')[-1] + '_lrb.csv'print(filename)with open(filename, 'wb') as f:f.write(r.content)def download_fzb(url):r = requests.get(url, headers=headers)filename = url.split('=')[-1] + '_fzb.csv'print(filename)with open(filename, 'wb') as f:f.write(r.content)def download_llb(url):r = requests.get(url, headers=headers)filename = url.split('=')[-1] + '_llb.csv'print(filename)with open(filename, 'wb') as f:f.write(r.content)

股票代碼.txt存放需要分析的公司的股票代碼,格式為SHXXXXXX或SZXXXXXX

with open('股票代碼.txt', 'r', encoding='utf-8') as f:symbol = [s.strip() for s in f.readlines()]lrb_urls = [lrb_base_url + i for i in symbol] fzb_urls = [fzb_base_url + i for i in symbol] llb_urls = [llb_base_url + i for i in symbol]pool = ThreadPool(10) pool.map(download_lrb, lrb_urls) pool.close() pool.join() pool = ThreadPool(10) pool.map(download_fzb, fzb_urls) pool.close() pool.join() pool = ThreadPool(10) pool.map(download_llb, llb_urls) pool.close() pool.join()

美的集團SZ000333
格力電器SZ000651

下載結果:

二、以格力電器為例的經營分析
經營分析主要包括兩個方面:公司的業績和公司的經營水平。相關數據可從利潤表和資產負債表獲取。

# 導入所需要的庫 import pandas as pd import matplotlib.pyplot as plt import numpy as np

輸入要分析的公司的股票代碼

# 股票代碼 stock_0 = 'SZ000651' #格力電器 # 輸入年份(輸入年報數據截止年份的下一年) year = 2018

定義函數:讀取csv文件,轉化為DataFrame格式

def get_lrb(stock_id):# 讀取利潤表數據lrb = pd.read_csv(r'data/%s_lrb.csv' % (stock_id),encoding='utf-8',header=0,index_col=None)list_lrb = [] #獲取所有截止日期的列表for i in lrb['報表期截止日']:list_lrb.append(str(i))list_lrb_0 = [] #將20171231的格式轉換為2017-12-31for i in list_lrb:i_ = i[:4] + '-' + i[4:6] + '-' + i[6:8]list_lrb_0.append(i_)lrb['報告時間'] = [pd.to_datetime(t) for t in list_lrb_0] #轉為日期數據類型lrb.index = lrb['報告時間'] #重新設置利潤表索引data_lrb = lrb[::-1] #由于csv中為時間倒序,將表倒序排列使之呈時間正序return data_lrbdef get_fzb(stock_id):# 讀取資產負債表表數據fzb = pd.read_csv(r'data/%s_fzb.csv' % (stock_id),encoding='utf-8',header=0,index_col=None)list_fzb = [] for i in fzb['報表日期']:list_fzb.append(str(i))list_fzb_0 = [] for i in list_fzb:i_ = i[:4] + '-' + i[4:6] + '-' + i[6:8]list_fzb_0.append(i_)fzb['報告時間'] = [pd.to_datetime(t) for t in list_fzb_0]fzb.index = fzb['報告時間'] data_fzb = fzb[::-1]return data_fzb

定義函數:篩選出年報數據,根據月份篩選,12月的即為年報數據

def get_data_month(data, month):data_month = data[data.index.month == month]return data_month

定義函數:實現數據可視化

def data_plot(data, y, legend='格力電器', kind='bar'):l_0 = len(data)s_0 = list(range(l_0))x_0 = np.array(s_0)y_0 = tuple([str(i) for i in range(year - l_0, year)])data[y].plot(kind=kind)plt.title(y)plt.legend([legend], loc='upper left')plt.xticks(x_0, y_0)plt.grid(color='#95a5a6', linestyle='--', linewidth=1, axis='y',alpha=0.4)plt.savefig(r'pic/%s.png' % (y,))return

(1)公司業績分析
公司業績主要看業績結果和業績質量。業績結果的主要指標為營業收入、毛利、凈利;業績質量的主要指標為毛利率、凈利率、成本費用率。數據全部來自利潤表。
定義函數:計算業績分析需要的指標

# 經營分析:公司業績 def get_performance(data):result_p = pd.DataFrame()#業績結果result_p['營業收入'] = data['營業收入']result_p['毛利'] = data['營業收入'] - data['營業成本']result_p['凈利'] = data['歸屬于母公司所有者的凈利潤'] #業績質量 result_p['毛利率'] = (data['營業收入'] - data['營業成本']) / data['營業收入']result_p['凈利率'] = data['歸屬于母公司所有者的凈利潤'] / data['營業收入']result_p['成本費用率'] = (data['營業成本']+data['營業稅金及附加']+data['銷售費用']+data['管理費用']+data['財務費用'] )/ data['營業收入']result_p.index = data['報告時間']return result_p

實現數據讀取、篩選、計算、可視化

# 讀取數據 data_lrb = get_lrb(stock_0) #數據全部來自利潤表 # 篩選年報數據 data_lrb_year = get_data_month(data_lrb, 12) # 計算所需指標 result_p = get_performance(data_lrb_year) #可視化 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #顯示中文 for i in ['營業收入','毛利','凈利','毛利率','凈利率','成本費用率']:data_plot(result_p, i)plt.show()




營業收入和毛利近年波動較大,但凈利基本保持高速增長。



近年毛利率基本保持穩定,凈利率穩步高速增長,成本費用率有降低的趨勢,說明經營效率在逐步提高。
(2)公司經營水平分析
經營水平的核心指標有凈利率、資產周轉率、資產負債率、凈資產收益率。數據來自利潤表和資產負債表。
定義函數:計算經營水平分析需要的指標

# 經營分析:經營水平 def get_management(data):result_m = pd.DataFrame()result_m['凈利率'] = data['歸屬于母公司所有者的凈利潤'] / data['營業收入']result_m['資產周轉率'] = data['營業收入'] / data['資產總計']result_m['資產負債率'] = data['負債合計'] / data['資產總計']result_m['凈資產收益率'] = data['歸屬于母公司所有者的凈利潤'] / (data['資產總計']-data['負債合計'])result_m.index = data.indexreturn result_m

實現數據讀取、篩選、計算、可視化:

#讀取數據,數據來自利潤表和資產負債表 data_lrb = get_lrb(stock_0) data_fzb = get_fzb(stock_0) #篩選年報數據 data_lrb_year = get_data_month(data_lrb, 12) data_fzb_year = get_data_month(data_fzb, 12) #將利潤表和資產負債表合為一表,方便計算 data=pd.merge(left=data_lrb_year.drop(columns = ['報告時間']),right=data_fzb_year.drop(columns = ['報告時間']),on="報告時間") #計算所需指標 result_m = get_management(data) #可視化 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] for i in ['凈利率','資產周轉率','資產負債率','凈資產收益率']:data_plot(result_m, i)plt.show()





這一類指標通常需要與競爭對手相比較才能判斷優劣,后續深入分析可以將同類公司(如美的、奧克斯…)的股票代碼做成一個列表,使用for循環批量下載財務報表、將相關指標可視化進行對比分析。
三、風險分析
這里深入分析一下格力的資產負債率,即使不進行同類對比,也可以看出格力的資產負債率非常高,幾乎始終在70%~80%之間,資產負債率普遍較高的房地產企業平均水平也就70%左右(此處只是舉例,資產負債率不能跨行業對比)。理論上高資產負債率的企業風險更大(償債壓力大),那么格力這么高的資產負債率是否真的意味著高風險?
理論上講,高資產負債率帶來的風險即償債風險,公司面臨較大償債壓力,因此需要進一步探究企業的流動負債結構以判別高風險是否真實存在。
定義函數:分析流動負債結構

def get_structure(data):result_s = pd.DataFrame()data=data.fillna(0) #填充空值為0result_s['經營性負債占比'] = (data['應付賬款']+data['應付票據']+data['預收款項']) / data['流動負債合計']result_s['貸款占比'] = (data['短期借款']+data['一年內到期的非流動負債']) / data['流動負債合計']result_s.index = data['報告時間']return result_s

實現數據讀取、篩選、計算、可視化:

data_fzb = get_fzb(stock_0) data_fzb_year = get_data_month(data_fzb, 12) result_s = get_structure(data_fzb_year)plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] for i in ['經營性負債占比','貸款占比']:data_plot(result_s, i)plt.show()



可以看出格力的經營性負債一直較高,在1999-2006甚至達到了80%或90%以上,即便近年有所下降依然處于40%的高位,而貸款占比很少,近年有所上升也不到15%,由此可以看出,高資產負債率的格力實際上償債風險并不高。流動負債中會帶來償債壓力的貸款占比很少,經營性負債才是主體,而大量的應付款項和預收款項實際上是供應商、經銷商資金的占用,在產品不愁銷路的情況下一般不會有什么問題,反而是競爭力的體現,這說明格力在整個產業鏈中非常強勢。

本文只是展示使用Python進行財務分析/公司研究的大概思路和流程,分析本身存在不嚴謹之處。定義好計算相關指標的函數后,只要列出研究對象的股票代碼,使用for循環便能實現快速披露獲取報表、讀取數據、處理數據、計算指標并最終實現可視化,使分析效率大大提高。

總結

以上是生活随笔為你收集整理的利用Python实现财务分析/经营分析自动化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。