財務自動化工具開發(fā)與應用-基于Python和DeepSeek 課件 第6-10章 基于Python的Excel操作自動化基礎-Python在課件操作自動化領域的應用_第1頁
財務自動化工具開發(fā)與應用-基于Python和DeepSeek 課件 第6-10章 基于Python的Excel操作自動化基礎-Python在課件操作自動化領域的應用_第2頁
財務自動化工具開發(fā)與應用-基于Python和DeepSeek 課件 第6-10章 基于Python的Excel操作自動化基礎-Python在課件操作自動化領域的應用_第3頁
財務自動化工具開發(fā)與應用-基于Python和DeepSeek 課件 第6-10章 基于Python的Excel操作自動化基礎-Python在課件操作自動化領域的應用_第4頁
財務自動化工具開發(fā)與應用-基于Python和DeepSeek 課件 第6-10章 基于Python的Excel操作自動化基礎-Python在課件操作自動化領域的應用_第5頁
已閱讀5頁,還剩226頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第六章基于Python的Excel操作自動化基礎目錄016.1Python在Excel操作自動化領域的應用介紹0203第六章

基于Python的Excel操作自動化基礎6.2Pandas基礎6.3Openpyxl基礎及Excel操作6.1Python在Excel操作自動化領域的應用介紹Python在財務圖像識別和電子郵件處理自動化領域的應用:數(shù)據(jù)處理與錄入自動化客戶與供應商信息管理及風險預警預算管理與成本控制薪酬計算與發(fā)放財務報告生成與深度分析財務結算與流程優(yōu)化6.2Pandas基礎Pandas庫是一個開源Python庫,廣泛應用于數(shù)據(jù)的快速分析、清洗和準備工作。若使用Anaconda版本的Python,Pandas庫已集成在Anaconda的基礎環(huán)境中,無需額外安裝。Pandas庫擅長處理二維數(shù)據(jù)結構。Pandas庫包含兩種主要的數(shù)據(jù)結構:Series和DataFrame。Series類似于由Numpy生成的一維數(shù)組,但Series對象不僅包含數(shù)值,還包含索引信息,使得數(shù)據(jù)的組織和訪問更為靈活和直觀。代碼如下:若輸出s1的內(nèi)容,結果如下:s1是一個一維數(shù)據(jù)結構,每個元素都配備有行索引,以便于定位。例如,通過s1[1]可以訪問到第二個元素“王二”。6.2Pandas基礎二維數(shù)據(jù)表格DataFrame的創(chuàng)建通過列表創(chuàng)建DataFrame通過列表創(chuàng)建DataFrame時,應傳遞一個二維列表,即一個列表中包含多個單層列表,且這些單層列表的長度必須一致。示例代碼如下:將a打印輸出,運行結果如下:此外,可以自定義列索引和行索引的名稱,代碼如下:6.2Pandas基礎二維數(shù)據(jù)表格DataFrame的創(chuàng)建通過列表創(chuàng)建DataFrame在DataFrame中,columns參數(shù)用于指定列索引名稱,而index參數(shù)用于指定行索引名稱。DataFrame變量內(nèi)容輸出如下:除了通過列表生成DataFrame,還可以先創(chuàng)建一個空的DataFrame,然后逐列添加數(shù)據(jù)。演示代碼如下:在添加數(shù)據(jù)時,必須確保date列表和score列表的長度一致,否則將引發(fā)錯誤。DataFrame變量內(nèi)容輸出如下,其效果與直接從列表創(chuàng)建DataFrame相同。6.2Pandas基礎二維數(shù)據(jù)表格DataFrame的創(chuàng)建通過字典創(chuàng)建DataFrame除了通過列表創(chuàng)建DataFrame,還可以通過字典來創(chuàng)建DataFrame并允許自定義列索引,其中字典的鍵自動成為列名,代碼如下:輸出結果如下,列索引已根據(jù)字典鍵進行了設置。若要將字典鍵設置為行索引,可以通過from_dict方式將字典轉換為DataFrame,并指定orient參數(shù)為index,代碼如下:轉換后的DataFrame輸出結果表明,字典鍵已轉變?yōu)樾兴饕?,即字典中的值按行進行排列。6.2Pandas基礎二維數(shù)據(jù)表格DataFrame的創(chuàng)建通過二維數(shù)組創(chuàng)建利用Numpy庫生成的二維數(shù)組可以用于創(chuàng)建DataFrame。例如,使用先前提到的二維數(shù)組,可以創(chuàng)建一個具有3行4列的DataFrame,代碼如下:其打印輸出結果如下所示:6.2Pandas基礎二維數(shù)據(jù)表格DataFrame的創(chuàng)建補充知識點:修改行索引或列索引名稱在數(shù)據(jù)處理中,有時需要對DataFrame的行索引或列索引的名稱進行修改。這可以通過rename()函數(shù)實現(xiàn)。首先,采用如下代碼構造一個DataFrame表格a:此時表格a如下所示:若要對索引進行重命名,可以使用rename()函數(shù),代碼如下:需要注意的是,使用rename函數(shù)后,原表格a結構并未改變,需要將結果重新賦值給a,或者在調用rename()時設置inplace參數(shù)為“True”,以實現(xiàn)對原表格的直接替換,代碼如下:此時,表格a如下所示:6.2Pandas基礎二維數(shù)據(jù)表格DataFrame的創(chuàng)建補充知識點:修改行索引或列索引名稱接下來,若要將行索引轉換為某列的內(nèi)容,可以使用set_index()函數(shù),代碼如下:此時的表格a如下所示:與rename()函數(shù)類似,也可以通過設置inplace參數(shù)為“True”,避免重新賦值操作,代碼如下:最后,若需將行索引重置為數(shù)字索引,可以使用reset_index()函數(shù),代碼如下:此時的表格a將使用數(shù)字作為行索引,其結構如下所示:6.2Pandas基礎Excel等文件的讀取和寫入文件讀取為了讀取Excel數(shù)據(jù),可以采用以下代碼:函數(shù)read_excel允許設置多個參數(shù),使用方式如下:除了Excel文件,Pandas庫也支持讀取CSV文件。CSV文件是一種文本文件格式,用于存儲數(shù)據(jù)。與Excel文件相比,CSV文件不包含格式、公式或宏,因此通常占用的空間較小。CSV文件中的數(shù)據(jù)通過逗號分隔,可以通過Excel或文本編輯器(如記事本)打開。輸入以下代碼,用于讀取CSV文件。函數(shù)read_csv同樣支持參數(shù)設置,使用方式如下:6.2Pandas基礎Excel等文件的讀取和寫入文件寫入可以通過以下代碼將數(shù)據(jù)寫入Excel文件。文件存儲路徑可以使用相對路徑,也可以指定為絕對路徑。運行代碼后,將在代碼所在的文件夾生成名為“data.xlsx”的Excel文件,如表所示。在生成的Excel文件中,如果第一列包含了索引信息且不需要保留,可以通過設置to_excel的參數(shù)index為“False”來去除。to_excel方法有以下常見參數(shù)。sheet_name:指定工作表的名稱;index:布爾值,用于控制是否保存索引信息,默認為“True”即表示在輸出文件的第一列保留索引值,若設置為False則表示忽略索引信息;columns:指定需要寫入文件的列;encoding:指定文件的編碼方式。6.2Pandas基礎Excel等文件的讀取和寫入文件寫入例如,若僅需將數(shù)據(jù)表格的第一列寫入Excel文件,并忽略索引信息,則代碼如下:類似地,也可以將數(shù)據(jù)寫入CSV文件,代碼如下:和to_excel類似,to_csv方法同樣支持index、columns、encoding等參數(shù)。特別地,如果在導出CSV文件時遇到中文亂碼問題,且將encoding參數(shù)設置為“utf-8”無效時,可以嘗試將其設置為“utf_8_sig”,代碼如下:6.2Pandas基礎數(shù)據(jù)讀取與篩選DataFrame的操作方法與Excel具有一定的相似性。例如,都可以通過索引來選擇特定的數(shù)據(jù),執(zhí)行表格切片等操作。本節(jié)將介紹多種讀取數(shù)據(jù)的方式以及數(shù)據(jù)篩選的技巧。首先,創(chuàng)建一個具有三行三列的DataFrame,其中行索引分別為r1、r2和r3,列索引分別為c1、c2和c3,以此為例展示如何讀取和篩選數(shù)據(jù)。代碼如下:DataFrame也可以通過數(shù)組的方式創(chuàng)建。例如,使用從數(shù)字1開始到數(shù)字9結束(不包括10)的序列來生成數(shù)據(jù),代碼如下:兩種方法打印輸出結果如下所示:6.2Pandas基礎數(shù)據(jù)讀取與篩選按照行列進行數(shù)據(jù)切片數(shù)據(jù)切片操作可以通過行列進行,主要涉及按照列來選取數(shù)據(jù)、按照行來選取數(shù)據(jù)以及按照區(qū)塊來選取。(1)按照列來選取數(shù)據(jù)可以按列選取數(shù)據(jù)。首先介紹如何選取單列數(shù)據(jù),代碼如下:其打印輸出結果如下所示:此時返回的里一個一維序列結構的Series變量,不包含表頭信息。若要保留表頭信息,可以在['c1']前添加一層中括號,代碼如下所示:此時返回結果為一個二維的DataFrame表格,其打印輸出結果如下所示:6.2Pandas基礎數(shù)據(jù)讀取與篩選按照行列進行數(shù)據(jù)切片按照列來選取數(shù)據(jù)若需選取多列數(shù)據(jù),應在中括號[]內(nèi)提供一個列名列表。例如,若要讀取c1和c3列,應編寫為data[['c1','c3']]。需要特別注意的是,必須使用列表形式,而不能使用data['c1','c3'],代碼如下:其打印輸出結果如下所示:6.2Pandas基礎數(shù)據(jù)讀取與篩選按照行列進行數(shù)據(jù)切片(2)按照行來選取數(shù)據(jù)可以通過行的索引號來選擇特定的行,代碼如下:其打印輸出結果如下所示:推薦使用Pandas庫中的iloc方法來根據(jù)行的索引號進行行選擇,因為這種方法更加直觀,與data[1:3]相比,不容易引起混淆,代碼如下:當需要選取單行數(shù)據(jù)時,必須采用iloc方法,例如選擇數(shù)據(jù)集中的最后一行,代碼如下:6.2Pandas基礎數(shù)據(jù)讀取與篩選按照行列進行數(shù)據(jù)切片(2)按照行來選取數(shù)據(jù)在這種情況下,若使用data[-1]可能會引發(fā)錯誤,因為該表達式可能會被誤解指向列名,從而導致混淆和錯誤。除了通過行的索引號選擇行之外,還可以使用loc方法根據(jù)行的標簽進行選擇,代碼如下:在處理大量行數(shù)據(jù)時,可以通過head()方法來選擇前5行數(shù)據(jù),代碼如下:由于本例中僅創(chuàng)建了3行數(shù)據(jù),因此使用data.head()將返回所有數(shù)據(jù)。若僅希望獲取前兩行的數(shù)據(jù),可以修改為data.head(2)。6.2Pandas基礎數(shù)據(jù)讀取與篩選按照行列進行數(shù)據(jù)切片(3)按照區(qū)塊來選取有時候需要選取數(shù)據(jù)表中特定行和列的子集。例如,若需獲取c1和c3列的前兩行數(shù)據(jù),可以通過以下代碼實現(xiàn):此方法實際上是將基于行和列索引選擇數(shù)據(jù)的策略進行了整合,運行結果如下:在實際應用中,通常推薦使用iloc與列索引結合的方式來選取特定的數(shù)據(jù)塊或單個值,代碼如下:這種方法不僅效果一致,而且邏輯清晰,有助于避免代碼混淆。具體操作為:首先利用iloc根據(jù)行的數(shù)值索引選擇行,然后根據(jù)列的數(shù)值索引選擇列。這也是Pandas官方文檔所推薦的使用方法。對于單個值的選取,這種方法尤其有用。例如,若要獲取c3列第一行的數(shù)據(jù),不應使用data['c3'][0]或data[0]['c3']這樣的寫法。以下代碼提供了一種更清晰的選擇方式,即先通過iloc[0]選取第一行,然后再選取c3列。6.2Pandas基礎數(shù)據(jù)讀取與篩選按照行列進行數(shù)據(jù)切片(3)按照區(qū)塊來選取此外,也可以通過iloc和loc方法同時選擇行和列,代碼如下:需要注意的是,loc方法使用字符串索引來選擇行和列,而iloc方法則使用數(shù)值索引。為了便于記憶,可以將loc理解為“l(fā)ocation”(定位、位置)的縮寫,意味著通過字符索引進行定位;而iloc由于多了一個字母“i”,通常代表數(shù)值,因此iloc方法使用數(shù)值索引進行選擇,其打印輸出結果如下所示:6.2Pandas基礎數(shù)據(jù)讀取與篩選按照特定條件篩選在數(shù)據(jù)選擇過程中,可以通過在方括號內(nèi)定義條件來過濾行。例如,若需選擇c1列中數(shù)值大于1的所有行,可以采用如下代碼:其打印輸出結果如下所示:當存在多個篩選條件時,可以使用邏輯運算符“&”(表示邏輯“與”)或“|”(表示邏輯“或”)來組合這些條件。例如,若需篩選c1列數(shù)值大于1且c2列數(shù)值小于8的行,代碼如下。在編寫條件時,確保每個條件都被小括號包圍。其打印輸出結果如下所示:6.2Pandas基礎數(shù)據(jù)讀取與篩選數(shù)據(jù)整體情況查看利用表格的shape屬性,可以獲取表格的行數(shù)和列數(shù),這對于處理大量數(shù)據(jù)時快速了解數(shù)據(jù)結構非常有用。代碼如下:運行結果如下,將顯示兩個數(shù)字,第一個代表行數(shù),第二個代表列數(shù)。通過調用表格的describe()函數(shù),可以迅速獲得每列的統(tǒng)計摘要,包括計數(shù)、平均值、標準差、最小值、第一四分位數(shù)、中位數(shù)、第三四分位數(shù)和最大值。代碼如下:運行效果如表所示。6.2Pandas基礎數(shù)據(jù)讀取與篩選數(shù)據(jù)整體情況查看6.2Pandas基礎數(shù)據(jù)讀取與篩選數(shù)據(jù)整體情況查看此外,使用value_counts()函數(shù)可以快速查看特定列中不同數(shù)據(jù)的分布及其頻次,代碼如下:運行效果如下,c1列包含三種不同的數(shù)據(jù),每種數(shù)據(jù)各出現(xiàn)了一次。6.2Pandas基礎數(shù)據(jù)讀取與篩選數(shù)據(jù)運算、排序與刪除(1)數(shù)據(jù)運算通過對現(xiàn)有列中進行運算,可以生成一個新的列,代碼如下:輸出結果如下所示。使用data.head()函數(shù)可以展示數(shù)據(jù)表的前五行,由于此處數(shù)據(jù)表僅包含三行,則會展示全部行。(2)數(shù)據(jù)排序利用sort_values()函數(shù),可以根據(jù)某一列對數(shù)據(jù)進行排序。例如,若需對c2列進行降序排序,可以通過設置ascending=False實現(xiàn)。代碼如下:6.2Pandas基礎數(shù)據(jù)讀取與篩選數(shù)據(jù)運算、排序與刪除(2)數(shù)據(jù)排序其打印輸出結果如下所示:若按列篩選,可以省略“by=”,直接指定列名,排序效果相同。此外,sort_index()函數(shù)允許根據(jù)行索引進行排序。例如,可以按行索引升序排列,代碼如下:運行代碼后,數(shù)據(jù)表的行索引將按照"r1,r2,r3"的指定順序重新排列。若需進行降序排序,可將ascending參數(shù)設置為"False"。6.2Pandas基礎數(shù)據(jù)讀取與篩選數(shù)據(jù)運算、排序與刪除(3)數(shù)據(jù)刪除若需從數(shù)據(jù)中移除特定數(shù)據(jù),可使用drop()函數(shù)。具體用法如下:例如,若要刪除c1列的數(shù)據(jù),代碼如下:若需同時刪除多列數(shù)據(jù),如c1和c3列,可以通過列表形式指定要刪除的列,代碼如下:刪除行數(shù)據(jù)時,例如刪除第一行和第三行,需注意使用行索引的名稱而非數(shù)字序號,代碼如下。若行索引名稱為數(shù)字,則可直接輸入對應的數(shù)字。執(zhí)行刪除操作后,若將結果賦值給新變量,則不會改變原始數(shù)據(jù)表data的結構。若希望改變原始數(shù)據(jù)表的結構,應將inplace參數(shù)設置為"True",代碼如下:6.2Pandas基礎數(shù)據(jù)表拼接Pandas提供了一系列高級功能,其中包括數(shù)據(jù)合并與重塑,這些功能極大地便利了數(shù)據(jù)表的合并操作。本部分將介紹merge和concat等方法,并以實例進行演示。若有如下的兩個DataFrame表格,需要進行合并操作。表格df1和df2如表所示,其中分數(shù)代表分析師對該公司的評分。6.2Pandas基礎數(shù)據(jù)表拼接merge()函數(shù)merge()函數(shù)根據(jù)一個或多個鍵將不同表格中的行進行連接,示例如下:合并后的表格df3如表所示。通過merge()函數(shù),可以直接選擇相同的列名(例如“公司”列)進行合并。默認情況下,合并操作選取的是兩個表共有的列內(nèi)容(如“萬科”、“阿里”)。如果存在多個相同的列名,可以通過on參數(shù)指定依據(jù)哪一列進行合并,代碼如下:默認的合并操作是取交集(innerjoin),即僅選取兩個表共有的內(nèi)容。若需選取并集(outerjoin),即包含兩個表的所有內(nèi)容,可以通過設置how參數(shù)來實現(xiàn),代碼如下:6.2Pandas基礎數(shù)據(jù)表拼接merge()函數(shù)運行效果如表所示,可以看到包含兩個表的所有內(nèi)容,未匹配的內(nèi)容則以空值NaN表示。若希望保留左表全部內(nèi)容,而對右表不作要求,可以將how參數(shù)設置為“l(fā)eft”,代碼如下:此時df3如表所示,df1的內(nèi)容(包括“萬科”、“阿里”、“百度”)將被完整保留。6.2Pandas基礎數(shù)據(jù)表拼接merge()函數(shù)同理,若希望保留右表全部內(nèi)容,而對左表不作要求,可以將how參數(shù)設置為“right”。此外,若需根據(jù)行索引進行合并,可以通過設置left_index和right_index參數(shù)來實現(xiàn),代碼如下:此時df3如表所示,兩個表根據(jù)它們的行索引進行合并。6.2Pandas基礎數(shù)據(jù)表拼接補充知識點:根據(jù)行索引合并的join()函數(shù)join()函數(shù)同樣可以根據(jù)行索引進行表格合并,它是一種常見的數(shù)據(jù)表拼接函數(shù),演示代碼如下:其合并效果與merge()函數(shù)相同,如表所示:在使用join()函數(shù)時,需注意兩個表中不能存在同名的列。如果存在,需要通過設置lsuffix參數(shù)和rsuffix參數(shù)來區(qū)分左表和右表中的同名列。若無同名列,可以直接使用df1.join(df2)進行合并,其寫法相對于merge()函數(shù)更為簡潔。6.2Pandas基礎數(shù)據(jù)表拼接concat()函數(shù)concat()函數(shù)實現(xiàn)了全連接(unionall)操作,它允許直接合并數(shù)據(jù),而無需對齊索引或列(即不需要兩個表的某些列或者索引相同,只是把數(shù)據(jù)進行整合)。與merge()函數(shù)不同,concat()不具備how和on參數(shù),而是通過axis參數(shù)來指定連接的軸向。默認情況下,axis參數(shù)值為0,表示按行方向進行連接,代碼如下:合并后的結果如表所示。6.2Pandas基礎數(shù)據(jù)表拼接concat()函數(shù)此時,行索引保留原來兩個表各自的索引。若需重置索引,可以在concat()函數(shù)中設置ignore_index=True,這樣將忽略原有的索引,并按照新的數(shù)字索引進行排序。若需按列方向進行連接,可以將axis參數(shù)設置為1,代碼如下:合并的結果如表所示。6.3Openpyxl基礎及Excel操作Openpyxl庫安裝Openpyxl庫可通過pip命令輕松安裝。首先,通過按下“Win+R”組合鍵調出運行窗口,輸入“cmd”并回車以打開命令提示符,在命令行界面中輸入“pipinstallopenpyxl”,按下回車鍵后即可安裝。Openpyxl的基本對象Openpyxl模塊定義了三個基本對象,每個對象的名稱均以大寫字母開頭:Workbook是對工作簿的抽象,Worksheet是對表格的抽象,Cell是對單元格的抽象。在使用Openpyxl庫進行Excel文檔操作時,通常不會有Excel程序窗口彈出,因為Openpyxl直接對Excel文檔進行操作,而非通過Excel程序界面。6.3Openpyxl基礎及Excel操作工作簿操作新建工作簿:通過如下代碼可以新建Excel工作簿。打開已有工作簿:若要打開一個已存在的Excel文檔,可以使用load_workbook(filepath)方法,并將Excel文件的路徑作為參數(shù)傳遞。此方法返回一個Workbook對象,代表所打開的文檔。代碼如下:保存工作簿:保存Excel文檔時,需使用Workbook對象的save()方法,代碼如下:需要注意的是,無論是保存新建的Workbook對象還是已打開的現(xiàn)有Workbook對象,都必須指定保存的文件路徑,否則程序將報錯。6.3Openpyxl基礎及Excel操作工作表操作創(chuàng)建新的工作表在Openpyxl庫中,創(chuàng)建新的工作表可通過調用create_sheet()方法實現(xiàn),代碼如下:例如,創(chuàng)建一個名為“新建工作表”的工作表,并將其位置設置為所有工作表的最前面,代碼如下:接下來的示例則展示了如何將“新建工作表”插入至最后一個工作表的前面,代碼如下:獲取工作表對象在Openpyxl庫中,可以通過Workbook對象的worksheets屬性來獲取所有工作表對象。返回的是一個列表,包含了工作簿中的所有工作表對象。代碼如下:6.3Openpyxl基礎及Excel操作工作表操作獲取工作表對象通過遍歷worksheets屬性返回的列表,可以以訪問列表的形式依次輸出每個工作表對象的名稱,獲取結果如下:獲取所有工作表名稱若僅需獲取所有工作表的名稱,而非工作表對象本身,可以使用Workbook對象的sheetnames屬性。該屬性同樣返回一個列表,但列表僅包含工作表的名稱,而非工作表對象。代碼如下:代碼運行結果如下:6.3Openpyxl基礎及Excel操作單元格操作獲取單元格對象在工作表中獲取單元格對象可以通過如下兩種基本方法:第一種方法使用工作表對象加單元格坐標的形式;第二種方法是依據(jù)行號和列號來獲取單元格對象。代碼如下:在第二種方式中,cell屬性有兩個參數(shù),其中row參數(shù)代表單元格所在的行,column參數(shù)代表單元格所在的列。例如,可以通過以下代碼獲取名為sheet1的工作表中A1單元格的對象,并打印其的內(nèi)容:代碼運行結果如下,因為此時A1單元格初始時為空,則輸出結果將顯示為None。6.3Openpyxl基礎及Excel操作單元格操作修改單元格內(nèi)容若要修改單元格的內(nèi)容,只需將相應的內(nèi)容賦值給單元格的value屬性。代碼如下:對A1單元格進行賦值操作后,再次通過print(cell.value)打印結果,代碼運行結果如下,可以觀察到A1單元格內(nèi)容已經(jīng)更新。獲取數(shù)據(jù)區(qū)域范圍通過訪問Worksheet對象的max_row和max_column屬性,可以獲取數(shù)據(jù)區(qū)域的最大行號和最大列號,代碼如下:由于工作簿中僅A1單元格包含內(nèi)容,因此獲取結果如下所示:第七章Python在Excel操作自動化領域的應用——財務自動化審計目錄017.1Python在Excel操作自動化領域的應用——財務自動化審計介紹0203第七章Python在Excel操作自動化領域的應用——財務自動化審計7.2自動匯總填寫各公司抽樣審計信息7.3批量填寫多公司試算平衡表7.1Python在Excel操作自動化領域的應用——財務自動化審計介紹Python在Excel操作自動化領域中財務自動化審計的主要應用場景:數(shù)據(jù)處理與信息匯總報表生成與填充實時監(jiān)控與持續(xù)審計7.2自動匯總填寫各公司抽樣審計信息審計抽樣是指審計人員在執(zhí)行審計程序時,從審計對象的總體中抽取一定數(shù)量的樣本進行測試,并基于測試結果對總體進行推斷的過程。在此過程中,所涉及的抽樣參數(shù)是審計過程中的關鍵信息。利用Python語言中的Pandas庫,可以自動化地匯總和填寫這些參數(shù)。任務介紹在Excel文件“數(shù)據(jù)源1”中,已整理了20家公司的審計數(shù)據(jù),如圖7-1所示。7.2自動匯總填寫各公司抽樣審計信息任務介紹接下來的任務包括:(1)提取每家公司的PM、AMPT、其他收入、適用重大風險等數(shù)據(jù)。(2)將這些數(shù)據(jù)準確填入名為“template1.xlsx”的模板Excel文件的相應單元格中。該模板位于代碼所在文件夾中,源自畢馬威抽樣計劃,清晰地列出了所需的抽樣參數(shù)。例如,圖7-2紅框中的“Moderate”值即來源于圖7-1的“適用重大風險”列。7.2自動匯總填寫各公司抽樣審計信息任務介紹其他列應與“template1.xlsx”模板Excel中的行列信息相對應,如表7-1所示。7.2自動匯總填寫各公司抽樣審計信息任務介紹最終,每家公司的數(shù)據(jù)將按照模板格式生成一個結果Excel文件,并按照規(guī)范命名后保存在名為“result”的文件夾中,如圖7-3所示。7.2自動匯總填寫各公司抽樣審計信息代碼實現(xiàn)相應庫的安裝和導入這里需要用到四個庫:Pandas、Openpyxl、OS和Shutil。Pandas和Openpyxl已為讀者所熟知,故在此不作贅述。接下來,將詳細闡述其余兩個庫的功能及應用:OS庫,即“OperatingSystem”的縮寫,旨在提供Python程序與操作系統(tǒng)交互的接口。利用OS模塊,不僅可以便捷地實現(xiàn)與操作系統(tǒng)的交互,還能顯著提升代碼的可移植性。作為Python的內(nèi)置庫,OS在安裝Python時即已包含,無需額外安裝,可以直接使用。Shutil庫可視為OS庫的補充,它提供了一系列文件操作功能,包括復制、移動、刪除、壓縮和解壓等。同樣作為Python的內(nèi)置庫,Shutil庫也無需單獨按照,即可直接調用。在安裝并導入這四個庫之后,可以開始引入所需的相關庫以進行后續(xù)操作,代碼如下:7.2自動匯總填寫各公司抽樣審計信息代碼實現(xiàn)相關數(shù)據(jù)及文件的準備利用pd.read_excel()函數(shù),可以將數(shù)據(jù)源中的數(shù)據(jù)導入至一個DataFrame中,代碼如下:為了存儲生成的結果Excel,需使用os.mkdir()函數(shù)創(chuàng)建一個名為“result”的文件夾,代碼如下:在調用os.mkdir()函數(shù)創(chuàng)建文件夾之前,應先通過os.path.isdir()函數(shù)檢查該文件夾是否已存在。若未進行檢查而直接創(chuàng)建,且該文件夾已存在,則會引發(fā)如下報錯:此外,os.mkdir()函數(shù)僅支持創(chuàng)建單級目錄。若需創(chuàng)建多級目錄結構,應使用os.makedirs()函數(shù)。7.2自動匯總填寫各公司抽樣審計信息代碼實現(xiàn)設置模板通過以下代碼,可以加載模板Excel文件,以便后續(xù)讀取數(shù)據(jù)并將其填充至該模板中。在Excel的單元格中填入數(shù)據(jù)將用到如下關鍵的Python語句:shutil.copyfile()函數(shù)用于復制文件,在文件操作中扮演著基礎角色;op.load_workbook()函數(shù)用于加載Excel表格,這是處理Excel數(shù)據(jù)的前提;核心函數(shù)cell()用于向特定的單元格賦值,需要注意的是,類似于在列表中通過索引訪問元素,單元格的索引從0開始;save()函數(shù)用于保存對文件或工作簿所做的更改。相關代碼如下:7.2自動匯總填寫各公司抽樣審計信息代碼實現(xiàn)在Excel的單元格中填入數(shù)據(jù)7.3批量填寫多公司試算平衡表任務介紹讀取“數(shù)據(jù)源2.xlsx”中2020年和2019年的兩個工作表,如圖所示。D列包含財務細分科目的名稱。例如,B列中的庫存現(xiàn)金、銀行存款、結算中心存款等均歸屬于D列所指的貨幣資金科目,之后需要將這些不同的庫存現(xiàn)金、銀行存款、結算中心存款等項目進行匯總,以形成貨幣資金總額,并將其填入相應的模板中。從F列開始包含了不同公司的信息,以G列為例,它展示了公司A001的具體財務信息。在第2至3行,分別列出了公司的代碼和名稱,從第5行開始則是各個公司的具體財務數(shù)據(jù)。7.3批量填寫多公司試算平衡表任務介紹將各細分科目的數(shù)字匯總后,將金額填入TB模板“template2.xlsx”中相應的總科目中,不同年份的數(shù)據(jù)應分別填入不同的列中。在填寫過程中,應避免在模板中加粗的科目行和無科目的空白行進行填寫,因為這可能會導致0值的輸入,從而破壞原有的格式和加總公式。如圖所示,template2.xlsx模板中,黃色高亮的單元格需要通過代碼自動讀取數(shù)據(jù)并進行填寫。具體來說,B1-B4單元格應填入“數(shù)據(jù)源2.xlsx”文件中的公司基礎信息,E列和F列則應分別填入2020和2019年的財務數(shù)據(jù)。以2020年的貨幣資金為例,應將屬于貨幣資金科目的各個子科目的數(shù)值加總,并將結果填入E9單元格。在E列和F列中,如果模板文件中的單元格內(nèi)容顯示為“-”,則表示該單元格已包含函數(shù),無需再次填寫。此外,E列的7、82、106、116行單元格應填入日期“31/12/2020”,F(xiàn)列的相應行單元格應填入日期“31/12/2019”,G列的相應行單元格應填入“2020vs2019”。G列內(nèi)容由于內(nèi)嵌了函數(shù),會自動計算顯示為E列內(nèi)容減去F列內(nèi)容的結果。7.3批量填寫多公司試算平衡表任務介紹7.3批量填寫多公司試算平衡表代碼實現(xiàn)導入Pandas、Shutil和OS模塊,這些模塊的功能與上個項目相同,在此不再詳細闡述,代碼如下:賦值年份,并將數(shù)據(jù)源中讀入成DataFrame格式,代碼如下:7.3批量填寫多公司試算平衡表代碼實現(xiàn)遍歷表格的列值,對每家公司進行迭代(第一層級循環(huán)),代碼如下:寫入信息。下面將信息寫入Excel,涵蓋復制模板并打開文件、寫入基本信息、寫入財務信息的內(nèi)容。1)復制模板并打開文件。新文件以公司代碼命名(考慮到公司名稱中可能包含特殊字符,不宜用于文件命名),并存儲于result文件夾中,代碼如下:7.3批量填寫多公司試算平衡表代碼實現(xiàn)寫入信息。2)寫入基本信息,如圖7-6所示。TB表單的左上角寫入基本信息:公司代碼、公司名稱、幣種、日期說明(第二層級循環(huán)),代碼如下:在TB表單的第7、82、106、116行寫入年份信息(第二層級循環(huán)),代碼如下:7.3批量填寫多公司試算平衡表代碼實現(xiàn)寫入信息。3)寫入財務信息(核心代碼)遍歷模板中的每個總科目(第二層級循環(huán)),代碼如下:對細分科目的金額進行匯總,并寫入(第三層級循環(huán)),代碼如下:7.3批量填寫多公司試算平衡表代碼實現(xiàn)寫入信息。3)寫入財務信息(核心代碼)最終,保存該公司的Excel文件,代碼如下:第八章Python在Excel操作自動化領域的應用——財務報表自動分析目錄018.1Python在Excel操作自動化領域的應用——財務報表自動分析介紹0203第八章Python在Excel操作自動化領域的應用——財務報表自動分析8.2財務靜態(tài)分析8.3財務趨勢分析048.4同業(yè)比較058.5綜合打分篩選優(yōu)質上市公司8.1Python在Excel操作自動化領域的應用——財務報表自動分析Python在Excel操作自動化領域中財務報表自動分析的應用:財務比率與趨勢分析預算預測與風險評估報告生成與分享8.2財務靜態(tài)分析本節(jié)將探討如何運用Python進行財務靜態(tài)分析。在傳統(tǒng)的財務報表分析中,比率分析占據(jù)著極其重要的位置。其核心理念在于財務報表及其項目之間存在著內(nèi)在聯(lián)系,僅僅分析單個財務項目是不夠的,必須同時考慮項目間的相互關系,方能全面揭示企業(yè)經(jīng)濟活動的實際情況。傳統(tǒng)的比率分析通常涵蓋以下四個關鍵領域:盈利能力、償債能力(財務風險)、運營能力和成長能力。由于這些分析均基于企業(yè)某一特定時期的財務數(shù)據(jù),因此它們被歸類為靜態(tài)分析。即使成長能力分析涉及時間變化,但從多年趨勢的角度來看,單一年度的變化也可以被視為“靜態(tài)”。此外,本節(jié)將重點介紹如何使用Python來讀取和處理數(shù)據(jù),而對于各項指標的具體含義,建議讀者參考財務分析學的專業(yè)教材以獲得更深入的理解。在此,僅對這些指標進行簡單說明。為了將理論與實踐緊密結合,本章將以貴州茅臺這一實際公司為例。首先使用Pandas庫來分別讀取資產(chǎn)負債表、利潤表和現(xiàn)金流量表的數(shù)據(jù),核心代碼如下:8.2財務靜態(tài)分析在Excel文件中,三張財務報表分別在位于不同的工作表中,因此需要指定參數(shù)sheet_name以讀取相應的工作表。若未指定,系統(tǒng)將默認讀取第一張工作表。為了便于后續(xù)財務指標的計算,建議將資產(chǎn)負債表、利潤表和現(xiàn)金流量表進行橫向合并,代碼如下:8.2財務靜態(tài)分析此時的data如圖所示:為了提升表格的美觀性,在進行合并操作時,應考慮將可能重復的列索引納入?yún)?shù)設置中,代碼如下:8.2財務靜態(tài)分析通過這種方式,可以得到一個更為美觀的表格data,如圖所示。8.2財務靜態(tài)分析盈利能力指標本節(jié)將探討反映企業(yè)盈利能力的指標,這些指標主要包括毛利率、凈利潤率、營業(yè)利潤率以及凈資產(chǎn)收益率,各指標的具體含義見表。8.2財務靜態(tài)分析盈利能力指標該四項指標使用Python進行計算,代碼如下:8.2財務靜態(tài)分析盈利能力指標通過Pandas庫篩選出股票代碼、報告期、毛利率、營業(yè)利潤率、凈利潤率以及凈資產(chǎn)收益率(ROE),代碼如下:執(zhí)行上述篩選操作后,將得到如表所示的結果。8.2財務靜態(tài)分析盈利能力指標在分析“貴州茅臺”的合并利潤表時,需注意區(qū)分“營業(yè)總收入”與“營業(yè)收入”以及“營業(yè)總成本”與“營業(yè)成本”。“營業(yè)總收入”與“營業(yè)總成本”僅在合并利潤表中出現(xiàn)。“營業(yè)總收入”涵蓋“營業(yè)收入”、“利息收入”、“已賺保費”及“手續(xù)費及傭金收入”。其中“利息收入”、“已賺保費”和“手續(xù)費及傭金收入”項目多見于銀行和保險公司。對于主要生產(chǎn)銷售產(chǎn)品的企業(yè)而言,“營業(yè)總收入”通常等同于“營業(yè)收入”。然而,由于貴州茅臺擁有一家財務子公司,負責集團內(nèi)部的借貸業(yè)務,類似于內(nèi)部銀行,因此在其合并利潤表中出現(xiàn)了通常僅金融機構會有的收入科目,導致“營業(yè)總收入”高于“營業(yè)收入”。鑒于財務子公司的業(yè)務與茅臺主業(yè)關聯(lián)不大,計算毛利率時宜采用“營業(yè)收入”,排除子公司金融業(yè)務的收入與成本。與收入不同,“營業(yè)總成本”與“營業(yè)成本”必然存在差異?!盃I業(yè)總成本”由“營業(yè)成本”、“管理費用”、“銷售費用”等期間費用以及“資產(chǎn)減值損失”等損益項目構成。因此,在計算產(chǎn)品毛利率時,應使用“營業(yè)成本”而非“營業(yè)總成本”。上述計算方式直接采用利潤表中的“營業(yè)利潤”計算“營業(yè)利潤率”,可能與實際情況存在偏差,因為茅臺財務子公司的存在使得營業(yè)利潤中包含了金融業(yè)務的利潤。為了更準確地計算茅臺的營業(yè)利潤率,應依據(jù)“營業(yè)收入-營業(yè)成本-稅金及附加-銷售費用-管理費用-研發(fā)費用-財務費用+其他收益+投資收益+公允價值變動收益-信用減值損失-資產(chǎn)減值損失+資產(chǎn)處置收益”的具體科目進行計算。此外,盈利能力指標還包括總資產(chǎn)回報率(ROA)、EBIT利潤率等。8.2財務靜態(tài)分析運營能力指標在接下來的部分,將對企業(yè)的運營能力進行分析,該能力主要通過存貨周轉率、總資產(chǎn)周轉率和應收賬款周轉率來衡量。這些指標反映了企業(yè)在進行日常經(jīng)營活動時的周轉效率,相關指標的具體含義見表。8.2財務靜態(tài)分析運營能力指標與前一節(jié)的分析相似,計算運營能力相關的比率時,需要使用年度平均值。因此,必須獲取上一年度的相關數(shù)據(jù)。例如,計算存貨周轉率時,其分母為存貨的年度平均值,而2019年的存貨平均值則需基于2019年期初余額(即2018年期末余額)和2019年期末余額來確定。這三項指標將通過Python計算,代碼如下:8.2財務靜態(tài)分析運營能力指標結果見表。8.2財務靜態(tài)分析運營能力指標通過查閱貴州茅臺的資產(chǎn)負債表,可以確認在2016至2019年間,該企業(yè)并未記錄任何應收賬款,而2015年除外。這一財務狀況說明,貴州茅臺的銷售策略以現(xiàn)金交易為主,不涉及賒賬,從而凸顯了其品牌的強大影響力。鑒于貴州茅臺在應收賬款方面的特殊情況,本教材將采用五糧液為例來計算應收賬款周轉率,具體代碼如下:8.2財務靜態(tài)分析運營能力指標計算結果見表。8.2財務靜態(tài)分析償債能力指標在探討企業(yè)財務風險即償債能力時,關鍵的財務指標包括流動比率、速動比率和利息保障倍數(shù),各指標的具體定義如表所示。8.2財務靜態(tài)分析償債能力指標上述三項指標使用Python進行計算,代碼如下:8.2財務靜態(tài)分析償債能力指標結果如表所示。8.2財務靜態(tài)分析償債能力指標在實際案例分析中,計算利息保障倍數(shù)時,應將分母“利息費用”定義為本期發(fā)生的全部應付利息。這不僅包括利潤表中財務費用部分的利息費用,還應涵蓋計入固定資產(chǎn)成本的資本化利息。盡管資本化利息不在利潤表中直接扣除,但它是企業(yè)未來必須償還的負債。利息保障倍數(shù)的核心在于評估企業(yè)支付利息的能力;若企業(yè)的息稅前利潤不足以覆蓋利息支出,利息的支付就會發(fā)生困難。這里簡化計算,將財務費用中的“利息支出”作為分母。值得注意的是,企業(yè)的利潤表通常不會直接顯示息稅前利潤(EBIT)。然而,可以通過以下公式自行計算:息稅前利潤=凈利潤+所得稅+財務費用。在利潤表中,如果未明確披露利息費用,則可暫時采用財務費用作為替代。除了前述指標,衡量償債能力的其他關鍵指標還包括現(xiàn)金比率、資產(chǎn)負債率和債務權益比率等。8.2財務靜態(tài)分析成長能力指標在資本市場中,某些公司的盈利能力可能不顯著,表現(xiàn)為凈利潤較低甚至出現(xiàn)虧損,如早期的亞馬遜和京東。這些公司的償債能力可能同樣令人擔憂,且可能面臨較高的財務杠桿。盡管如此,這些公司的股價仍然保持高位,這通常是因為投資者對其未來發(fā)展?jié)摿Τ钟袠酚^預期。成長能力指標主要包括營收增長率、營業(yè)利潤增長率和凈利潤增長率,各指標的具體含義如表所示。8.2財務靜態(tài)分析成長能力指標成長能力指標的計算同樣需要依賴于上一年度的數(shù)據(jù)。例如,要計算2016年的營收增長率,則需使用2015年的相關數(shù)據(jù)。這些指標使用Python進行計算,代碼如下:8.2財務靜態(tài)分析成長能力指標結果如表所示。除了前述指標,成長能力指標還包括凈資本增長率、固定資產(chǎn)增長率和總資產(chǎn)增長率等。8.2財務靜態(tài)分析綜合案例單家公司本部分將采用“貴州茅臺”為例,讀取其2016至2019年的財務比率。如同本節(jié)開頭所述,首先將分別提取貴州茅臺的資產(chǎn)負債表數(shù)據(jù)、利潤表以及現(xiàn)金流量表的數(shù)據(jù),代碼如下:8.2財務靜態(tài)分析綜合案例單家公司將三張財務報表合并為一個綜合數(shù)據(jù)表data之后,為避免后續(xù)計算過程中報錯(尤其是分母為零的情況),應將表中的空值填充為0,代碼如下:考慮到部分財務比率的計算依賴于前期數(shù)據(jù),需要把這些數(shù)據(jù)的前期值納入表中。一種有效的方法是將當前表中的數(shù)據(jù)直接滯后一期,作為新列添加到原表中。例如,初始表如表所示。8.2財務靜態(tài)分析綜合案例單家公司滯后一期后如表所示,其中nan表示空值:將滯后的列合并為原表后,結果如表所示。Pandas庫中的shift函數(shù)可用于實現(xiàn)這一功能。通過使用shift(-1),可以將上表的左列轉換為右列,即數(shù)據(jù)滯后一期;相反,shift(1)則用于數(shù)據(jù)提前一期。以貴州茅臺的“存貨”項目為例,可以通過以下代碼添加其前期余額:8.2財務靜態(tài)分析綜合案例單家公司由于需要處理的項目較多,可以采用批量處理的方法,代碼如下:完成這一步后,表中2014年的數(shù)據(jù)將不再需要,可以將其刪除,僅保留前5行數(shù)據(jù),代碼如下:隨后,將計算各項財務比率指標,代碼如下:8.2財務靜態(tài)分析綜合案例單家公司8.2財務靜態(tài)分析綜合案例單家公司通過將計算結果賦值給變量df_ratio,得到“財務比率表”,并進行轉置,代碼如下:由于轉置后的表頭顯示為0/1/2/3……,而第一行內(nèi)容為報告期日期,為了使報告期日期作為表頭,以及從原表的第二行開始取數(shù),需要進行相應的調整,代碼如下:最終,需要打開本地已生成的“貴州茅臺.xlsx”文件,該文件包含三個工作表,分別對應三張財務報表。接著,需要在該文件中新建一個名為“財務比率表”的工作表,并將處理后的數(shù)據(jù)保存至其中,代碼如下:8.2財務靜態(tài)分析綜合案例單家公司此外,當嘗試添加已存在的工作表時可能會報錯。為避免這種情況,可以利用tryexcept語句來處理可能出現(xiàn)的異常,代碼如下:補充知識點如下:某些公司名稱中可能包含“*ST”標識,以示其面臨退市風險。例如,2022年的“*ST皇臺”。然而,在文件命名中,“*”符號是不被允許的。因此,若需處理包含“*ST”的公司名稱,可以在writer=pd.ExcelWriter(comp+'.xlsx',mode="a",engine="openpyxl")代碼之前添加如下兩行代碼以將“*”替換為空字符:8.2財務靜態(tài)分析綜合案例單家公司最后打開“貴州茅臺.xlsx”,觀察到在原有的三張報表基礎上新增了一張“財務比率表”。也可以在JupyterNotebook環(huán)境中打印df_ratio來展示該表,如表所示。需要注意的是,Excel中的“財務比率表”不包含左上角的“報告期”字樣,這是因為在利用ExcelWriter函數(shù)進行數(shù)據(jù)寫入時,系統(tǒng)默認忽略了左上角的索引列名稱。8.2財務靜態(tài)分析綜合案例多家公司將上一小節(jié)的代碼封裝為函數(shù),方便調用,使其能夠生成多家公司的財務比率表,代碼如下:8.2財務靜態(tài)分析綜合案例多家公司8.2財務靜態(tài)分析綜合案例多家公司調用該函數(shù)以生成三張報表及財務比率表的代碼如下:利用此代碼,可以高效地對多個公司進行財務靜態(tài)分析。8.3財務趨勢分析趨勢分析數(shù)據(jù)預處理本節(jié)內(nèi)容將在已得到的財務比率表基礎上,闡述如何運用Python進行財務趨勢分析,以便更客觀地評估企業(yè)的財務狀況。趨勢分析主要通過圖形化手段,直觀地展示各項財務比率隨時間的變化趨勢,從而評估企業(yè)在不同方面的能力變化。首先,將導入上一節(jié)中生成的貴州茅臺公司的“財務比率表”,并對數(shù)據(jù)進行必要的處理。具體的數(shù)據(jù)處理方法(包括引入Pandas等庫的代碼)在此不再詳細展開,相關代碼可以參考本書提供的源代碼文件,代碼如下:8.3財務趨勢分析趨勢分析數(shù)據(jù)預處理為了便于后續(xù)的圖形繪制,建議將數(shù)據(jù)按照年份從早到晚的順序進行排列。為此,可以采用逆序排列的操作。同時,為了確保圖形繪制的順利進行,需要將數(shù)據(jù)中的無窮大值(inf)替換為零。完成這些預處理步驟后,數(shù)據(jù)表格將如圖所示。8.3財務趨勢分析財務趨勢--盈利能力分析在本節(jié)中,將繼續(xù)采用第8.2節(jié)財務靜態(tài)分析中的財務指標來評估公司的盈利能力。然而,與上一節(jié)僅計算各年度指標數(shù)值的做法不同,本節(jié)將綜合歷年數(shù)據(jù),對這些指標的表現(xiàn)進行深入分析,從而更清晰地揭示局勢,以判斷其是否表現(xiàn)優(yōu)異。為了使趨勢分析更為直觀,本節(jié)將為每個指標繪制圖表以展示其變動趨勢。接下來,將通過matplotlib庫對這一結果進行可視化處理,代碼如下:8.3財務趨勢分析財務趨勢--盈利能力分析輸出的毛利率結果如圖所示。毛利率于2017年呈現(xiàn)下降趨勢,該指標衡量的是毛利占營業(yè)收入的比例。其下降可能歸因于營業(yè)成本的增加、營業(yè)收入的減少,或兩者的共同作用。8.3財務趨勢分析財務趨勢--盈利能力分析輸出的營業(yè)利潤率結果如圖所示??鄢巳椯M用(銷售費用、管理費用和財務費用)和其他費用之后,2017年的營業(yè)利潤率呈現(xiàn)出增長趨勢。這一現(xiàn)象可能源于2016年較高的三項費用在2017年有所減少。然而,毛利率這一指標無法完全反映這種變化。因此,單一的財務指標不足以全面評價企業(yè)的經(jīng)營能力。8.3財務趨勢分析財務趨勢--盈利能力分析輸出的凈利潤率結果如圖所示。2017年,貴州茅臺的凈利潤率增長幅度超過了營業(yè)利潤率。這表明在考慮所得稅影響后,企業(yè)的盈利能力呈現(xiàn)出不同的變化。這一現(xiàn)象強調了在評估企業(yè)盈利能力時,必須綜合考慮多個財務指標。8.3財務趨勢分析財務趨勢--盈利能力分析輸出的凈資產(chǎn)收益率(ROE)結果如圖所示。可以看到凈資產(chǎn)收益率在2016年至2017年期間顯著上升,但在2019年有所回落。這一趨勢進一步說明了企業(yè)財務狀況的動態(tài)變化,以及在不同時間點對企業(yè)績效進行評估時,需要采用多維度的分析方法。8.3財務趨勢分析財務趨勢--其他能力分析(運營能力、償債能力、成長能力)與前一節(jié)相似,由于涉及運營能力的比率計算需要依賴于年度平均值,因此,為了分析2016年至2019年的趨勢,2015年的數(shù)據(jù)同樣不可或缺。例如,在計算存貨周轉率時,分母為存貨的年度平均值。對于2016年的存貨平均值的計算,需要同時考慮2016年的期初余額(即2015年的期末余額)以及2016年的期末余額。因此,必須讀取2015年的三張財務報表數(shù)據(jù)以確保分析的準確性。代碼如下:8.3財務趨勢分析財務趨勢--其他能力分析(運營能力、償債能力、成長能力)8.3財務趨勢分析趨勢分析綜合評分在先前的分析中,通過折線圖對各個財務指標的變化趨勢進行了可視化。本節(jié)將探討如何將這些指標進行綜合分析,以得出對公司財務指標的趨勢的綜合評分。完成這一步驟后,可以對多家公司進行批量評分,并根據(jù)評分進行排序,從而篩選出在趨勢分析中表現(xiàn)優(yōu)異的公司。需要注意的是,對指標評分的標準具有一定的主觀性,不同的分析師或投資者可能會有不同的評價標準。因此,本教材旨在提供一種評分和篩選的思路,而非一個固定不變的答案。對于某些指標,如毛利率和存貨周轉率,通常認為其數(shù)值越高越好,因為它們反映了公司運營效率的提升。在對這些指標進行評分時,可以采用以下規(guī)則:如果某年的指標值較上一年有所增長,則該年得1分,否則不得分。以5年的數(shù)據(jù)為例,一個指標的最高可能得分為4分。以茅臺的毛利率為例,如果在2018年和2019年較上年有所增長,則該指標在這段時間內(nèi)得分為2分。然而,對于流動比率和速動比率等指標,情況則更為復雜。雖然較高的比率通常意味著較強的短期償債能力,但過高的比率可能意味著企業(yè)有大量現(xiàn)金未被有效利用,這可能會降低企業(yè)的盈利能力。一般而言,流動比率維持在2左右,速動比率維持在1左右被認為是較為合理的。但在本節(jié)的綜合評分體系中,為了簡化分析,暫時不考慮這些指標的理想范圍,而是假設這些指標的數(shù)值越高越好。8.3財務趨勢分析趨勢分析綜合評分在對每個指標進行評分后,可以將分數(shù)標準化至100分制。例如,如果毛利率指標得分為2分,則在100分制下,其得分為50分。接下來,以貴州茅臺為例,對其財務比率進行趨勢評分。首先,需要讀取已準備好的財務比率表,代碼如下:得到如圖所示的財務比率表。8.3財務趨勢分析趨勢分析綜合評分在接下來的步驟中,將對各項指標進行評估,并創(chuàng)建一個空的列表以存儲每個指標的得分,代碼如下:8.3財務趨勢分析趨勢分析綜合評分通過這一過程,得到了如下的scores分數(shù)列表:將該列表添加到財務比率表中,并保存該評分表,代碼如下:8.3財務趨勢分析趨勢分析綜合評分得到評分結果如圖所示。8.3財務趨勢分析趨勢分析綜合評分在完成所有指標的評分后,進行總得分的計算。假設各指標的權重相等,則總得分可通過計算各指標得分的平均值得出,代碼如下:打印trend_score得到如下總分:在計算總得分時,應注意到此處采用的是各指標得分的平均值,這意味著在計算過程中假設每個指標在重要性上是等同的(即權重相等)。然而,這種假設可能并不精確。在不同行業(yè)或不同發(fā)展階段的公司中,某些財務指標的重要性可能遠超過其他指標。因此,評分者需要對各個指標的權重有深入的理解,并根據(jù)專業(yè)知識和經(jīng)驗,為這些指標設定更為合理和科學的權重。通過這種方式,可以提高評分結果的準確性。8.4同業(yè)比較企業(yè)的歷史表現(xiàn)可作為評估特定年度指標優(yōu)劣的基準,而在財務分析中,另一個常用的標準維度是企業(yè)在同行業(yè)競爭者中的地位。本節(jié)將介紹如何利用Python進行基礎的行業(yè)比較及數(shù)據(jù)可視化。以貴州茅臺2020年的財務數(shù)據(jù)為例,將探討其在白酒行業(yè)中的表現(xiàn)。首先,需導入白酒行業(yè)的相關財務數(shù)據(jù),隨后進行分析,代碼如下:打印data,結果如圖所示。8.4同業(yè)比較同業(yè)比較--盈利能力比較凈資產(chǎn)收益率類似于趨勢分析,本部分的重點不在于指標的計算復雜性,而在于其在行業(yè)比較中的應用。因此,不采用加權平均ROE的計算方法,而是選擇計算更簡便的全面攤薄ROE(報告期歸母凈利潤/報告期期末歸母凈資產(chǎn))。這種方法便于快速比較不同企業(yè)間的盈利能力,代碼如下:8.4同業(yè)比較同業(yè)比較--盈利能力比較凈資產(chǎn)收益率最終的輸出結果如圖所示。8.4同業(yè)比較同業(yè)比較--盈利能力比較凈資產(chǎn)收益率為了在統(tǒng)計學意義上更準確地展現(xiàn)數(shù)據(jù)特征,可以通過調用describe()函數(shù)對table表進行描述性統(tǒng)計分析,并將結果進行可視化處理,代碼如下:8.4同業(yè)比較同業(yè)比較--盈利能力比較凈資產(chǎn)收益率輸出結果如圖所示。8.4同業(yè)比較同業(yè)比較--盈利能力比較凈利潤率類似地,關于凈利潤率的代碼如下:8.4同業(yè)比較同業(yè)比較--盈利能力比較凈利潤率輸出結果如圖所示。8.4同業(yè)比較同業(yè)比較--盈利能力比較凈利潤率相比于凈資產(chǎn)收益率,貴州茅臺的凈利潤率在同行業(yè)公司中的表現(xiàn)尤為顯著。通過應用describe()函數(shù),可以進一步觀察統(tǒng)計結果,代碼如下:8.4同業(yè)比較同業(yè)比較--盈利能力比較凈利潤率統(tǒng)計結果如圖所示。8.4同業(yè)比較同業(yè)比較--其他能力比較(運營能力、償債能力、成長能力)本節(jié)將對企業(yè)的運營能力、償債能力和成長能力進行同業(yè)比較,匯總代碼如下:8.4同業(yè)比較同業(yè)比較--其他能力比較(運營能力、償債能力、成長能力)8.4同業(yè)比較同業(yè)比較--其他能力比較(運營能力、償債能力、成長能力)8.4同業(yè)比較同業(yè)分析綜合評分類似于上一節(jié)的結尾部分,本段將探討如何對企業(yè)進行同業(yè)綜合評分。以白酒行業(yè)為例,該行業(yè)包含20家上市公司。評分標準如下:若該指標在同業(yè)中排名前25%,則賦予100分;若位于同業(yè)的50%至75%之間,則賦予75分;若位于同業(yè)的25%至50%之間,則賦予50分;若某項指標在同業(yè)中排名后25%,則賦予0分。首先,需讀取提供的“com_data.xlsx”數(shù)據(jù)文件,計算這些公司在“財務比率表”中各項指標的五年均值,并將所有同行業(yè)公司的數(shù)據(jù)匯總至一張表格中,代碼如下:8.4同業(yè)比較同業(yè)分析綜合評分得到的同業(yè)數(shù)據(jù)表ratio_ind如圖所示(展示部分數(shù)據(jù))。在后續(xù)步驟中,將計算每個指標的上四分位數(shù)、中位數(shù)和下四分位數(shù),可以采用Pandas庫中的describe函數(shù),代碼如下:8.4同業(yè)比較同業(yè)分析綜合評分得到如圖所示的評分標準表。隨后進行的是評分操作,其核心邏輯遵循本小節(jié)開頭所述的打分邏輯,代碼如下:8.4同業(yè)比較同業(yè)分析綜合評分得到的同業(yè)評分表如圖所示(按總評分從高到低排列展示部分結果)。8.5綜合打分篩選優(yōu)質上市公司指標體系可以發(fā)現(xiàn)在前幾節(jié)中,用于評分的指標具有相似性,主要從盈利能力、償債能力、運營能力和發(fā)展能力四個維度選取了一些經(jīng)典指標。以下是對這些指標的簡要回顧:盈利能力指標包括毛利率、營業(yè)利潤率、凈利潤率和ROE;運營能力指標涵蓋存貨周轉率、總資產(chǎn)周轉率和應收賬款周轉率;償債能力指標則包括流動比率、速動比率和利息保障倍數(shù);成長能力指標涉及營業(yè)收入增長率、營業(yè)利潤增長率和凈利潤增長率。在接下來的章節(jié)中,將對現(xiàn)金流量表中的重要信息進行介紹,該表在財務分析中占據(jù)不可忽視的地位。因此,將引入現(xiàn)金流量表相關的指標,具體包括:經(jīng)營活動產(chǎn)生的現(xiàn)金流量凈額與凈利潤的比率、銷售商品和提供勞務收到現(xiàn)金與營業(yè)收入的比率、期末現(xiàn)金及現(xiàn)金等價物余額與有息負債(包括應付債券、短期借款和長期借款)的比率、自由現(xiàn)金流。由于現(xiàn)金流畫像的量化難度較大,故在此不作考慮。這四個現(xiàn)金流指標實際上也可以歸入前述的四個能力類別中,例如,第三個指標是衡量償債能力的一個指標。之所以在此單獨列出,是為了與本書的結構和順序保持一致。通過上述分析,可以構建一個相對完善且全面的指標體系。在進行打分時,還需考慮如何設定衡量標準的問題。8.5綜合打分篩選優(yōu)質上市公司標準維度在標準維度方面,本章節(jié)的第二、三節(jié)介紹了基于趨勢維度和同業(yè)維度的評分方法。趨勢維度的評分反映了企業(yè)自身歷史數(shù)據(jù)的比較,而同業(yè)維度的評分則體現(xiàn)了企業(yè)與同行業(yè)其他企業(yè)之間的比較。本節(jié)將綜合財務比率的趨勢分析與同業(yè)分析,以形成綜合評分。關于現(xiàn)金流指標是否適合趨勢評分的問題,經(jīng)過簡單思考可以發(fā)現(xiàn),這是可行的。關鍵在于識別某個指標是逐年增長更為有利,還是逐年減少更為有利。在進行公司評價時,趨勢分析和同業(yè)分析對公司評價的重要性可以通過賦予不同的權重來體現(xiàn)。本書將趨勢分析的權重設定為40%,同業(yè)分析的權重設定為60%,以凸顯同業(yè)分析的重要性。然而,權重的分配并無固定標準,它取決于評分者的專業(yè)經(jīng)驗以及對行業(yè)特性的理解。讀者可以根據(jù)自身的理解和需求,自定義權重分配。8.5綜合打分篩選優(yōu)質上市公司案例實戰(zhàn)接下來,將詳細介紹代碼實現(xiàn)的具體步驟。首先,對先前的代碼進行必要的修改,以便適應新的分析需求。在本部分,將采用2015至2020年的財務報告數(shù)據(jù),作為計算評分表的基礎,代碼如下:8.5綜合打分篩選優(yōu)質上市公司案例實戰(zhàn)隨后,將進行同業(yè)評分,具體的方法和細節(jié)將在第8.4節(jié)“同業(yè)分析綜合評分”中詳細闡述,代碼如下:8.5綜合打分篩選優(yōu)質上市公司案例實戰(zhàn)最后,將趨勢評分表和同業(yè)評分表進行合并,并根據(jù)預先設定的權重計算得出綜合評分,代碼如下:合并后的綜合評分表將按照綜合得分進行排序,示例如圖所示(僅展示部分公司的數(shù)據(jù)),可以從中獲得每個指標的具體得分。第九章Python在Word操作自動化領域的應用目錄019.1Python在Word操作自動化領域的應用介紹0203第九章Python在Word操作自動化領域的應用9.2Python-Word基礎9.3Python-Word進階049.4Python操作Word案例實戰(zhàn)——自動生成上市公司研究報告9.1Python在Word操作自動化領域的應用介紹Python在Word操作自動化領域的應用:財務報告生成預算和預測報告制作稅務文檔準備財務政策和程序文檔化發(fā)票和收據(jù)批量生成合同和協(xié)議模板管理與定制審計跟蹤和記錄財務數(shù)據(jù)可視化9.2Python-Word基礎Python-docx庫的安裝為了使Python能夠操作Word文檔,需要安裝一個名為Python-docx的庫。建議采用pip安裝方法。用戶可以通過按下“Win+R”組合鍵來調出運行對話框,輸入“cmd”并按回車鍵打開命令提示符。如圖所示,在命令提示符窗口中輸入命令pipinstallpython-docx并回車,即可完成安裝。Python-docx庫的官方文檔提供了全面的說明,文檔地址為:https://python-docx.readthedocs.io/en/latest/index.html。該文檔為英文版本,用戶可以通過谷歌瀏覽器的翻譯功能將其翻譯為中文(簡體)。盡管官方文檔內(nèi)容詳盡,但由于信息量較大,有時可能難以迅速定位到所需知識點。此外,目前尚無中文官方文檔,這使得處理與中文相關的內(nèi)容,如設置中文字體等,可能需要一些額外的小技巧。本章節(jié)將重點介紹一些常用的知識點以及處理中文時的技巧。9.2Python-Word基礎Python-docx庫的初步介紹安裝Python-docx庫后,可使用以下代碼來初步探索其功能。示例中的文本內(nèi)容選自武漢大學舉辦的三行情書比賽的獲獎作品。9.2Python-Word基礎Python-docx庫的初步介紹如圖所示,指定的文件夾內(nèi)已自動生成了Word文檔,其內(nèi)容為三行情書。字體設置將在后續(xù)小節(jié)中詳細討論。9.2Python-Word基礎Python-docx庫的基礎知識創(chuàng)建及保存Word文檔利用docx.Document()函數(shù),可以創(chuàng)建一個新的Word文檔,代碼如下:若需打開已存在的Word文檔,僅需將文件路徑作為參數(shù)傳遞給docx.Document()函數(shù)即可,代碼如下:利用save()方法,可以對文檔進行保存和命名,代碼如下:9.2Python-Word基礎Python-docx庫的基礎知識添加標題:在文檔編輯過程中,可通過調用add_heading的方法來插入標題,代碼如下:添加段落文字:段落文本的添加可以通過add_paragraph方法實現(xiàn),代碼如下:添加圖片:可以通過add_picture方法添加圖片,代碼如下:添加分頁符:分頁符的添加可以通過調用add_page_break()方法實現(xiàn),代碼如下:9.2Python-Word基礎Python-docx庫的基礎知識添加表格:表格可以通過add_table方法添加至文檔中,代碼如下:讀取Word文檔:Python不僅能夠創(chuàng)建Word文檔,還能用于讀取Word文檔內(nèi)容,其方法與打開Word文檔類似,代碼如下:內(nèi)容的匯總可以通過字符串拼接實現(xiàn),代碼如下:9.2Python-Word基礎Python-docx庫的基礎知識讀取Word文檔:此外,也可以創(chuàng)建一個空列表,使用列表名.append(新元素)方法將內(nèi)容添加到列表中,然后通過''.join(列表名)將列表轉換為字符串,以便進行進一步的分析和處理,代碼如下:9.2Python-Word基礎Python-docx庫的基礎知識讀取Word文檔:運行結果如圖所示。9.3Python-Word進階

設置中文字體在Python中操作Word文檔時,設置中文字體是一個關鍵且具有一定挑戰(zhàn)性的任務,代碼如下:具體使用方法是將上述代碼添加在程序的起始部分,代碼如下:9.3Python-Word進階設置字體大小及顏色在Word中,paragraph(段落)之下存在一個稱為run的結構層次,如圖所示。其中最左側的document代表Word應用程序本身,而paragraph則是指文本中的段落,run可以被視作段落內(nèi)部的語句,它既可以是單一的句話,也可以包含多個句子。通常情況下,具有相同格式特征的語句被歸類于同一個run,文字樣式、大小以及下劃線等文本屬性均包含在run對象之內(nèi)。9.3Python-Word進階設置字體大小及顏色在Word文檔中,若需調整字體大小及顏色,應對段落內(nèi)的具體文本(即run內(nèi)容)進行調整。以下為示例代碼。首先,將p.add_run('螃蟹在剝我的殼,筆記本在寫我')賦值給變量run,隨后可通過run.font訪問并修改字體屬性,其中font代表字體,而run則指段落內(nèi)的文本。需要注意的是,僅段落內(nèi)的文字支持字體屬性設置,段落本身并不具備此功能,所以不能直接使用font=p.font進行設置。隨后,可以對字體屬性進行修改,例如調整字體的大小,代碼如下:在美國,磅是衡量文字大小的常用單位,而在中國,人們更傾向于使用字號作為衡量標準。兩者之間的對應關系如表所示。9.3Python-Word進階設置字體大小及顏色9.3Python-Word進階設置字體大小及顏色字體顏色的設置同樣可以通過Python-docx庫實現(xiàn),但需先引入相應的字體顏色功能,其代碼如下:除了調整字體大小和顏色,還可以對字體樣式進行多樣化設置,包括加粗、斜體以及添加下劃線等,代碼如下:9.3Python-Word進階設置段落樣式:對齊方式、文本縮進、行間距、段間距、段落序號在文檔編輯過程中,段落樣式的設置是至關重要的,它包括對齊方式、文本縮進、行間距、段間距及段落序號等。本小節(jié)將詳細介紹如何進行這些設置。首先討論對齊方式。居中對齊是一種常見的文本排列方式,代碼如下:如表所示,除了居中對齊,還可以設置其他對齊方式,如左對齊、右對齊或兩端對齊等,以適應不同的文檔排版需求。9.3Python-Word進階設置段落樣式:對齊方式、文本縮進、行間距、段間距、段落序號除了設置對齊方式,文本縮進也是段落格式設置中的一個重要方面。首行縮進是常見的一種文本縮進方式,它有助于提高文檔的可讀性和美觀性。代碼如下:若需調整行間距和段間距,可按照以下代碼進行設置。9.3Python-Word進階設置段落樣式:對齊方式、文本縮進、行間距、段間距、段落序號段落間距的設置方法與行間距相似,代碼如下:此外,可通過Python實現(xiàn)段落序號的設置,盡管這一功能使用頻率不高。在設置過程中,僅需要添加style='序號格式',其中ListBullet代表點序號,而ListNumber則代表數(shù)字序號,代碼如下:讀者可以將上述代碼逐一輸入Python中執(zhí)行,以觀察實際效果。隨后,打開生成的Word文件,在Word中通過右鍵點擊并選擇“段落”選項,即可查看段落設置。9.3Python-Word進階設置段落樣式:對齊方式、文本縮進、行間距、段間距、段落序號最后效果如圖所示。若需了解更多關于段落樣式的信息,可訪問Python-docx官方文檔:https://python-docx.readthedocs.io/en/latest/user/text.html。9.3Python-Word進階設置表格樣式通過表格樣式可以設置表格邊框,其代碼實現(xiàn)相對簡單。在創(chuàng)建表格時,只需添加style="表格樣式"即可,代碼如下:9.3Python-Word進階設置表格樣式例如,創(chuàng)建一個具有兩行三列的表格,并選擇“LightShadingAccent1”作為表格樣式,其效果如圖所示。除了“LightShadingAccent1”之外,還有多種表格樣式可供選擇。有關其他表格樣式的詳細信息,可以參考Python-docx的官方網(wǎng)站:https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html。以下是一些常用的表格樣式。表格樣式1:TableGrid,這是一種常見的黑白邊框樣式。如表所示。表格樣式2:LightShading,該樣式在每隔一行添加一個陰影行。如表所示。9.3Python-Word進階設置表格樣式表格樣式3:LightShadingAccent1,這是案例中使用的藍色表格樣式。通過將數(shù)字1替換為2、3、4、5、6,可以改變顏色,分別對應紅、綠、紫、青、橙。如表所示。表格樣式4:LightList,這種樣式具有簡潔的黑色標題框。若使用LightListAccent1,則標題框變?yōu)樗{色。同樣,通過將數(shù)字1替換為2、3、4、5、6,可以改變顏色。如表所示。表格樣式5:MediumShading1Accent1,該樣式的標題框為深藍色,而下面的框為淡藍色。通過將第二個數(shù)字1替換為2、3、4、5、6,可以改變顏色。如果將第一個數(shù)字1替換為2,則第一列將具有深色背景。如表所示。9.3Python-Word進階設置圖片樣式圖片樣式的設置相對簡單,主要涉及圖片的寬度和高度調整,分別使用width(寬度)和height(高度)進行設置。首先,需要從Python-docx庫中引入Inches

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論