財(cái)經(jīng)大數(shù)據(jù)分析-以Python為工具 課件全套 王彥超 第1-11章 數(shù)據(jù)創(chuàng)建、數(shù)據(jù)查看-建立上市公司價(jià)值分類判斷指標(biāo)體系 應(yīng)用機(jī)器學(xué)習(xí)_第1頁
財(cái)經(jīng)大數(shù)據(jù)分析-以Python為工具 課件全套 王彥超 第1-11章 數(shù)據(jù)創(chuàng)建、數(shù)據(jù)查看-建立上市公司價(jià)值分類判斷指標(biāo)體系 應(yīng)用機(jī)器學(xué)習(xí)_第2頁
財(cái)經(jīng)大數(shù)據(jù)分析-以Python為工具 課件全套 王彥超 第1-11章 數(shù)據(jù)創(chuàng)建、數(shù)據(jù)查看-建立上市公司價(jià)值分類判斷指標(biāo)體系 應(yīng)用機(jī)器學(xué)習(xí)_第3頁
財(cái)經(jīng)大數(shù)據(jù)分析-以Python為工具 課件全套 王彥超 第1-11章 數(shù)據(jù)創(chuàng)建、數(shù)據(jù)查看-建立上市公司價(jià)值分類判斷指標(biāo)體系 應(yīng)用機(jī)器學(xué)習(xí)_第4頁
財(cái)經(jīng)大數(shù)據(jù)分析-以Python為工具 課件全套 王彥超 第1-11章 數(shù)據(jù)創(chuàng)建、數(shù)據(jù)查看-建立上市公司價(jià)值分類判斷指標(biāo)體系 應(yīng)用機(jī)器學(xué)習(xí)_第5頁
已閱讀5頁,還剩317頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Python與財(cái)經(jīng)大數(shù)據(jù)分析基礎(chǔ)第1章——數(shù)據(jù)創(chuàng)建

CONTENTS目錄1.1數(shù)據(jù)分析模塊介紹1.2DataFrame簡(jiǎn)介1.3DataFrame數(shù)據(jù)創(chuàng)建1.4讀取本地存儲(chǔ)的數(shù)據(jù)1.5實(shí)操練習(xí)題1.1數(shù)據(jù)分析模塊介紹1.1數(shù)據(jù)分析模塊介紹數(shù)據(jù),是一切分析的基礎(chǔ),科學(xué)地創(chuàng)建、整理數(shù)據(jù),是得到可靠分析結(jié)果的重要前提。為了更好地進(jìn)行數(shù)據(jù)分析,我們首先需要構(gòu)建自己的數(shù)據(jù)集或數(shù)據(jù)庫。在數(shù)據(jù)創(chuàng)建時(shí),我們可以構(gòu)建虛擬數(shù)據(jù),也可以讀取現(xiàn)有數(shù)據(jù)公司提供的數(shù)據(jù),也可以利用網(wǎng)絡(luò)爬蟲爬取網(wǎng)上一些特色數(shù)據(jù)。通過Python的數(shù)據(jù)創(chuàng)建功能,可以實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),方便后續(xù)的調(diào)用、清洗、運(yùn)行、計(jì)算和分析。1.1數(shù)據(jù)分析模塊介紹由于爬蟲技術(shù)在后續(xù)章節(jié)會(huì)有介紹,所以本章主要介紹通過DataFrame自行創(chuàng)建,或通過讀取結(jié)構(gòu)化數(shù)據(jù)創(chuàng)建兩種方式。1.2DataFrame簡(jiǎn)介1.2DataFrame簡(jiǎn)介在Python中,DataFrame是一種表格型數(shù)據(jù)結(jié)構(gòu),類似Excel,是Pandas中非常重要的結(jié)構(gòu)化數(shù)據(jù)容器。通過DataFrame,數(shù)據(jù)分析過程中的繁瑣操作在很大程度上簡(jiǎn)化了。DataFrame既有行索引,也有列索引,是二維數(shù)據(jù)結(jié)構(gòu),即數(shù)據(jù)以行和列的表格方式排列。DataFrame也被看做是一系列Series組成的字典。如圖所示,DataFrame由index、columns及data構(gòu)成。1.3DataFrame數(shù)據(jù)創(chuàng)建1.3DataFrame數(shù)據(jù)創(chuàng)建在進(jìn)行數(shù)據(jù)創(chuàng)建時(shí),可以借助Pandas模塊中的DataFrame()函數(shù)。該函數(shù)的具體語法如下所示:1.3DataFrame數(shù)據(jù)創(chuàng)建(1)通過列表(list)創(chuàng)建當(dāng)數(shù)據(jù)為列表(list)類型時(shí),為方便后期分析與運(yùn)算,通常會(huì)將列表(list)轉(zhuǎn)變?yōu)镈ataFrame進(jìn)行操作,同時(shí)可以定義index和columns的值。當(dāng)由多個(gè)列表中創(chuàng)建DataFrame時(shí),需要使用zip()函數(shù)。zip()函數(shù)返回一個(gè)zip類型的對(duì)象,將多個(gè)列表的相同位置的元素配對(duì)在一起,每個(gè)列表形成DataFrame不同的列。1.3DataFrame數(shù)據(jù)創(chuàng)建(2)通過數(shù)組(array)創(chuàng)建我們可以通過Pandas.DataFrame()函數(shù)將生成的數(shù)組轉(zhuǎn)換成一個(gè)標(biāo)準(zhǔn)的DataFrame。為了更方便讀取數(shù)據(jù),我們可以分別定義index和columns的值。1.3DataFrame數(shù)據(jù)創(chuàng)建(3)通過字典(dict)創(chuàng)建作為一種可變?nèi)萜髂P停值洌―ictionary)可存儲(chǔ)任意類型對(duì)象。當(dāng)錄入數(shù)據(jù)為字典(dict)類型時(shí),通過Pandas.DataFrame()函數(shù),可以很方便的將字典轉(zhuǎn)變?yōu)镈ataFrame。其中,字典的Key對(duì)應(yīng)DataFrame中column值,字典中每一對(duì)數(shù)據(jù)會(huì)形成一個(gè)Series,這些Series匯總到一起就是DataFrame中的columns。此外,在使用Pandas.DataFrame()函數(shù)對(duì)字典數(shù)據(jù)進(jìn)行轉(zhuǎn)換時(shí),可以單獨(dú)定義index參數(shù)。1.3DataFrame數(shù)據(jù)創(chuàng)建(4)通過序列Series創(chuàng)建 Series是Pandas庫中一種基本的數(shù)據(jù)結(jié)構(gòu),屬于一維數(shù)據(jù)形式,可以理解為n行2列的簡(jiǎn)單數(shù)據(jù)表格,第一列是索引(index),第二列是值(values)。作為二維數(shù)據(jù)結(jié)構(gòu)的DataFrame可以拆分為一系列Series,同時(shí)一系列Series可以組合成DataFrame?;诖?,DataFrame可以通過Series來創(chuàng)建。其中,index為Series的標(biāo)簽,columns對(duì)應(yīng)各個(gè)Series。當(dāng)遇到Series長度不同的情況時(shí),缺失數(shù)據(jù)會(huì)顯示為NaN。相比于用list創(chuàng)建DataFrame,用Series創(chuàng)建可以實(shí)現(xiàn)自動(dòng)對(duì)齊。1.3DataFrame數(shù)據(jù)創(chuàng)建(5)時(shí)間序列數(shù)據(jù)創(chuàng)建有時(shí)候我們需要構(gòu)建一個(gè)時(shí)間序列,模擬一些數(shù)據(jù)。Pandas.date_range()函數(shù)為我們創(chuàng)建時(shí)間序列提供了便利,通過該函數(shù),我們很方便的可以生成一個(gè)固定頻率的時(shí)間序列。然后,再結(jié)合其他數(shù)據(jù),通過pandas.DataFrame()函數(shù)創(chuàng)建一個(gè)虛擬時(shí)間序列數(shù)據(jù)。1.3DataFrame數(shù)據(jù)創(chuàng)建Pandas.date_range()函數(shù)的具體語法如下所示:1.4讀取本地存儲(chǔ)的數(shù)據(jù)1.4讀取本地存儲(chǔ)的數(shù)據(jù)對(duì)于數(shù)據(jù)分析而言,獲取和利用第三方數(shù)據(jù)是比較有效的方式。目前,市場(chǎng)上有很多專注于數(shù)據(jù)生產(chǎn)的第三方公司,如國泰安(CSMAR)和萬得資訊(Wind)等。這些公司專注于數(shù)據(jù)源的工作,提供數(shù)據(jù)產(chǎn)品給使用者。這些數(shù)據(jù)大部分是結(jié)構(gòu)化數(shù)據(jù)。例如,上市公司年報(bào)信息、重要的公司治理數(shù)據(jù)、環(huán)境數(shù)據(jù)、宏微觀經(jīng)濟(jì)數(shù)據(jù)、重大事件數(shù)據(jù)和市場(chǎng)交易數(shù)據(jù)等等。通過對(duì)這些結(jié)構(gòu)化數(shù)據(jù)的讀取和處理,Python可以高效的輔助我們進(jìn)行數(shù)據(jù)分析、可視化或數(shù)據(jù)挖掘。本小節(jié)將從單個(gè)文件讀取與批量文件讀取兩個(gè)角度,分別介紹csv文件、txt文件與Excel文件的讀取方法。1.4讀取本地存儲(chǔ)的數(shù)據(jù)(1)單個(gè)文件讀取A.讀取文本文件在現(xiàn)有第三方數(shù)據(jù)庫中,很多數(shù)據(jù)被存儲(chǔ)在文本文件(csv文件、txt文件)中。這是因?yàn)槲谋疚募梢詢?chǔ)存較大樣本量的數(shù)據(jù),與其他存儲(chǔ)形式相比能夠節(jié)省大量的儲(chǔ)存空間。Pandas.read_csv()是專門讀取csv文件、txt文件的函數(shù)。該函數(shù)的具體語法如下所示:1.4讀取本地存儲(chǔ)的數(shù)據(jù)1.4讀取本地存儲(chǔ)的數(shù)據(jù)B.讀取表格文件現(xiàn)實(shí)中,很多財(cái)經(jīng)數(shù)據(jù)會(huì)以Excel的形式存儲(chǔ)。在Python中,可以通過Pandas.read_excel()函數(shù)導(dǎo)入已有Excel文件。該函數(shù)的具體語法如下所示:1.4讀取本地存儲(chǔ)的數(shù)據(jù)1.4讀取本地存儲(chǔ)的數(shù)據(jù)(2)批量文件讀取在對(duì)資本市場(chǎng)進(jìn)行分析的過程中,往往需要依靠較長時(shí)間跨度的數(shù)據(jù)資料作為支撐。由于單個(gè)csv和Excel文件儲(chǔ)存的數(shù)據(jù)有限,而資本市場(chǎng)交易數(shù)據(jù)量又很大,在數(shù)據(jù)分析過程中,我們經(jīng)常遇到的是,一個(gè)大的數(shù)據(jù)文件被分割成若干文件,在讀取的時(shí)候需要對(duì)這些文件進(jìn)行批處理,形成一個(gè)整體的文件。1.4讀取本地存儲(chǔ)的數(shù)據(jù)首先,利用for循環(huán),獲取所需讀取全部文件名稱的列表1.4讀取本地存儲(chǔ)的數(shù)據(jù)在獲得文件名稱的列表后,可以根據(jù)文件名稱和文件路徑構(gòu)建文件的絕對(duì)路徑,再按照文件絕對(duì)路徑對(duì)每個(gè)文件進(jìn)行數(shù)據(jù)讀取,具體操作中有以下兩種方法:1.4讀取本地存儲(chǔ)的數(shù)據(jù)方法一:生成一個(gè)空DataFrame,通過read_csv()(或read_excel)和append()函數(shù)對(duì)所有數(shù)據(jù)進(jìn)行讀取,存入DataFrame中。1.4讀取本地存儲(chǔ)的數(shù)據(jù)方法二:

生成一個(gè)空list,通過read_csv()(或read_excel)和append()函數(shù)對(duì)所有數(shù)據(jù)進(jìn)行讀取,存入list中,通過concat()函數(shù)整合數(shù)據(jù),存入DataFrame中。1.4讀取本地存儲(chǔ)的數(shù)據(jù)append()函數(shù)與concat()函數(shù)常用于數(shù)據(jù)合并,兩種方法進(jìn)行數(shù)據(jù)批量讀取的結(jié)果完全一致,但第二種方式只進(jìn)行一次DateFrame合并,因此運(yùn)行速度相對(duì)較快。1.5實(shí)操練習(xí)題1.5實(shí)操練習(xí)題從CSMAR數(shù)據(jù)庫中下載Excel2003格式的1990-2022年資產(chǎn)負(fù)債表、利潤表、現(xiàn)金流量表所有科目的數(shù)據(jù),對(duì)這些文件進(jìn)行批量讀取,分別形成資產(chǎn)負(fù)債表、利潤表、現(xiàn)金流量表數(shù)據(jù)。Python與財(cái)經(jīng)大數(shù)據(jù)分析基礎(chǔ)第3章——數(shù)據(jù)清洗

CONTENTS目錄3.1數(shù)據(jù)標(biāo)簽重命名3.2缺失值處理3.3異常值處理3.4數(shù)據(jù)去重3.5數(shù)據(jù)替換3.6數(shù)據(jù)標(biāo)準(zhǔn)化3.7實(shí)操練習(xí)題

數(shù)據(jù)處理過程中,原始數(shù)據(jù)可能存在著各種不利于分析及后續(xù)處理的因素,如數(shù)據(jù)缺失、異常值等。這些因素不僅會(huì)影響數(shù)據(jù)建模,更會(huì)影響數(shù)據(jù)分析的結(jié)果,故數(shù)據(jù)清洗尤為重要。

數(shù)據(jù)清洗的目的包括兩點(diǎn):第一,通過清洗使數(shù)據(jù)可用;第二,讓數(shù)據(jù)變得更適合后續(xù)的分析過程。換句話說,“臟”的數(shù)據(jù)要洗,干凈的數(shù)據(jù)也要洗。3.1數(shù)據(jù)標(biāo)簽重命名3.1數(shù)據(jù)標(biāo)簽重命名批處理。DateFrame數(shù)據(jù)結(jié)構(gòu)支持批量地重命名行列標(biāo)簽,幫助我們將數(shù)據(jù)行列標(biāo)簽修改為符合自己習(xí)慣的或依照慣例使用的標(biāo)簽名稱,方便后續(xù)調(diào)用、代碼閱讀和理解。3.1缺失值處理3.2缺失值處理3.2

缺失值處理

(1)缺失值查看在pandas包中,可以使用isnull()與notnull()函數(shù)找到數(shù)據(jù)中的缺失值。其通過返回布爾值的方式幫助我們識(shí)別數(shù)據(jù)中的缺失值:若isnull()返回值為True,或notnull()返回值為False,則數(shù)據(jù)中存在缺失值。數(shù)據(jù)集大小不同時(shí)可使用不同的方法查看缺失值:對(duì)于容量較小的數(shù)據(jù)集,可以使用isnull()語句;對(duì)于容量較大的數(shù)據(jù)集,一般采取以下兩種方式:一是可以使用info函數(shù)查看,通過info函數(shù)可以查看字段的數(shù)據(jù)類型以及各字段下非空值的數(shù)量;二是使用對(duì)insull()輸出的布爾值求和來查看。3.2

缺失值處理

(2)缺失值刪除當(dāng)數(shù)據(jù)量較大或數(shù)據(jù)冗余時(shí),需要對(duì)存在缺失值的數(shù)據(jù)進(jìn)行過濾,可以使用dropna()函數(shù)刪除缺失值數(shù)據(jù),也可以選擇刪除整行或整列。該函數(shù)的具體語法如下所示:3.2

缺失值處理

(3)缺失值填充在處理缺失值的過程中,直接刪除缺失值是一種簡(jiǎn)單直接的辦法,但也有可能因此使得原數(shù)據(jù)中的重要信息丟失,本部分將介紹另一種處理缺失值的方法——缺失值填充,使用fillna()函數(shù)可以填充數(shù)據(jù)集中的空值。該函數(shù)的具體語法如下所示:3.2

缺失值處理3.3異常值處理3.3異常值處理異常值,是遠(yuǎn)離絕大多數(shù)樣本點(diǎn)的特殊群體,也稱為離群點(diǎn),這些異常值,在某些建模場(chǎng)景下會(huì)導(dǎo)致結(jié)論的錯(cuò)誤。其中一種典型的異常值即為極端值。極端值是指樣本中其數(shù)值明顯偏離其余值的個(gè)別樣本。在數(shù)據(jù)分析過程中,對(duì)數(shù)據(jù)集進(jìn)行異常值的識(shí)別與修正,是必不可少的一環(huán)。異常值檢測(cè)的方法包括常用法與建模法兩種。其中常用法包括:3σ方法、IQR方法與縮尾法;建模法包括:KNN算法(基于近鄰度異常點(diǎn)檢測(cè))、K-means(基于聚類方法的異常點(diǎn)檢測(cè))等。極端值的處理方式與異常值類似,進(jìn)行極端值檢測(cè)時(shí)常用到上述方法中的3σ方法、IQR方法與縮尾法。3.3異常值處理

3σ方法3σ方法是處理數(shù)據(jù)極端值最常用的方法。它是指按一定概率確定一個(gè)置信區(qū)間,將超過該置信區(qū)間的數(shù)據(jù)進(jìn)行剔除。3σ方法也存在一定局限性,在對(duì)正態(tài)或近似正態(tài)分布的數(shù)據(jù)進(jìn)行處理時(shí),它是一種以數(shù)據(jù)量充分大為前提(n>10)的方法,數(shù)據(jù)量過小時(shí)使用該方法剔除異常值是不夠可靠的。3σ方法的原則如下:μ為平均值,σ為標(biāo)準(zhǔn)差,數(shù)值分布在(μ-σ,μ+σ)的概率為0.6827;數(shù)值分布在(μ-2σ,μ+2σ)的概率為0.9545;數(shù)值分布在(μ-3σ,μ+3σ)的概率為0.9973。當(dāng)數(shù)據(jù)值集中在(μ-2σ,μ+2σ)區(qū)間時(shí),超過此范圍的概率不足5%,屬于小概率事件,可以認(rèn)為處于該區(qū)間外的數(shù)據(jù)為異常值;當(dāng)數(shù)據(jù)值集中在(μ-3σ,μ+3σ)區(qū)間時(shí),超過此范圍的概率不足0.3%,即超出該范圍的數(shù)據(jù)可以認(rèn)為是極端異常值。3.3異常值處理IQR方法四分位距(interquartilerange),是衡量一組數(shù)據(jù)離散程度的統(tǒng)計(jì)量,用IQR表示。其值等于第一四分位數(shù)(25%)和第三四分位數(shù)(75%)的差距,計(jì)算公式為:IQR=Q_3-Q_1定義異常值與極端異常值,表達(dá)式如下所示:3.3異常值處理縮尾法縮尾法(Winsorize)是一種處理極端值的方法。通常,縮尾處理將超出變量特定百分位范圍的數(shù)值替換為其特定百分位數(shù)值。進(jìn)行縮尾法處理異常值或極端值時(shí),將用到winsorize()函數(shù),在處理大樣本數(shù)據(jù)時(shí),縮尾處理比3σ方法高效。winsorize函數(shù)的具體語法如下所示:3.3異常值處理3.3異常值處理KNN算法(基于近鄰度的異常點(diǎn)檢測(cè))在進(jìn)行異常值判斷與處理時(shí),確定數(shù)據(jù)鄰近性度量比確定其統(tǒng)計(jì)分布更有意義,此時(shí),數(shù)據(jù)集的異常點(diǎn)是由其K-最近鄰(KNN)測(cè)定的。異常點(diǎn)測(cè)定對(duì)K值高度敏感。K值過小時(shí),少量的鄰近異常點(diǎn)可能導(dǎo)致較低的異常點(diǎn)得分;K值過大時(shí),點(diǎn)數(shù)少于K的簇中所有的對(duì)象都可能成為異常點(diǎn)。因此,為使K值的選取更具穩(wěn)健性,可以使用K個(gè)最近鄰的平均距離。該方法的優(yōu)勢(shì)在于簡(jiǎn)單、易操作,缺點(diǎn)在于對(duì)于參數(shù)的選取具有敏感性。在第十四章機(jī)器學(xué)習(xí)中,詳細(xì)講解KNN算法的原理與實(shí)戰(zhàn)。3.3異常值處理K-means算法(基于聚類方法的異常點(diǎn)檢測(cè))當(dāng)一個(gè)對(duì)象是基于聚類的離群點(diǎn)時(shí),如果該對(duì)象不強(qiáng)屬于任何簇,那么該對(duì)象屬于離群點(diǎn)。K-means算法是基于聚類的異常點(diǎn)檢測(cè)方法,其對(duì)異常點(diǎn)非常敏感,通過聚類檢測(cè)異常點(diǎn)時(shí),常會(huì)因?yàn)楫惓|c(diǎn)而影響聚類,從而導(dǎo)致結(jié)構(gòu)缺失有效性。因此,可以使用如下方法解決該問題:對(duì)象聚類、刪除異常點(diǎn)、對(duì)象再次聚類。基于線性與接近線性復(fù)雜度的聚類技術(shù)檢測(cè)異常點(diǎn)可能是高度有效的,但聚類算法產(chǎn)生的簇的質(zhì)量對(duì)該算法產(chǎn)生的異常點(diǎn)的質(zhì)量影響非常大。在十四章機(jī)器學(xué)習(xí)中,詳細(xì)講解K-means算法的原理與實(shí)戰(zhàn)。3.4數(shù)據(jù)去重3.4

數(shù)據(jù)去重?cái)?shù)據(jù)去重是指在數(shù)據(jù)集中,找出重復(fù)的數(shù)據(jù)并將其刪除,只保存唯一的數(shù)據(jù)單元的過程。在數(shù)據(jù)預(yù)處理過程中,這是一項(xiàng)經(jīng)常性操作,數(shù)據(jù)去重會(huì)帶來很多好處,如節(jié)省存儲(chǔ)空間、提升寫入性能和提高模型精度等。數(shù)據(jù)去重一般可以通過duplicated()和drop_duplicates()兩個(gè)函數(shù)實(shí)現(xiàn),下面進(jìn)行詳細(xì)介紹。3.4

數(shù)據(jù)去重(1)duplicated()函數(shù)使用duplicated()函數(shù)可以判斷數(shù)據(jù)中是否存在重復(fù)值,函數(shù)輸出結(jié)果將返回一個(gè)布爾序列來顯示各行是否有重復(fù)行,沒有重復(fù)行顯示為False,有重復(fù)行顯示為True。具體語法如下所示:3.4

數(shù)據(jù)去重(2)drop_duplicates()函數(shù)使用drop_duplicates()函數(shù)可以在找出重復(fù)值的同時(shí)將其刪除,只保存唯一的數(shù)據(jù)單元。具體語法如下所示:3.5數(shù)據(jù)替換3.5數(shù)據(jù)替換在進(jìn)行數(shù)據(jù)清洗時(shí),時(shí)常需要批量地替換或插入數(shù)據(jù),但單個(gè)修改一方面效率過低,另一方面也增加了出錯(cuò)的概率。Pandas提供了replace()函數(shù)和insert()函數(shù),能幫助我們高效地完成批量的數(shù)據(jù)替換和插入。(1)replace()函數(shù)replace()函數(shù)常用于數(shù)據(jù)的批量替換,如把字符串中的old(舊字符串)替換為new(新字符串)。具體語法如下所示:3.5數(shù)據(jù)替換3.5數(shù)據(jù)替換(2)insert()函數(shù)insert()函數(shù)用于將指定對(duì)象插入列表的指定位置。具體語法如下所示:3.6數(shù)據(jù)標(biāo)準(zhǔn)化3.6

數(shù)據(jù)標(biāo)準(zhǔn)化在數(shù)據(jù)分析之前,有時(shí)需要將各類數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化預(yù)處理,便于利用標(biāo)準(zhǔn)值進(jìn)行數(shù)據(jù)分析。數(shù)據(jù)標(biāo)準(zhǔn)化在統(tǒng)計(jì)中表現(xiàn)為統(tǒng)計(jì)數(shù)據(jù)的指數(shù)化,數(shù)據(jù)標(biāo)準(zhǔn)化處理主要包括數(shù)據(jù)同趨化處理和無量綱化處理兩個(gè)方面。數(shù)據(jù)同趨化處理主要解決不同性質(zhì)數(shù)據(jù)問題,使所有指標(biāo)對(duì)測(cè)評(píng)方案的作用趨同;數(shù)據(jù)無量綱化處理主要解決數(shù)據(jù)的可比性。3.6

數(shù)據(jù)標(biāo)準(zhǔn)化(1)Z-Score方法Z-Score方法基于原始數(shù)據(jù)的均值和標(biāo)準(zhǔn)差實(shí)現(xiàn)標(biāo)準(zhǔn)化,公式為:Z-Score適合大多數(shù)類型數(shù)據(jù),也是很多工具的默認(rèn)標(biāo)準(zhǔn)化方法。然而,這是一種中心化方法,會(huì)改變?cè)袛?shù)據(jù)的分布結(jié)構(gòu),不適合用于對(duì)稀疏數(shù)據(jù)處理。3.6

數(shù)據(jù)標(biāo)準(zhǔn)化(2)min-max標(biāo)準(zhǔn)化Min-Max標(biāo)準(zhǔn)化是指對(duì)原始數(shù)據(jù)進(jìn)行線性變換,將值映射到[0,1]之間,公式為:min-max標(biāo)準(zhǔn)化方法保留了原始數(shù)據(jù)之間的相互關(guān)系,但是如果標(biāo)準(zhǔn)化后,新輸入的數(shù)據(jù)超過了原始數(shù)據(jù)的取值范圍,即不在原始區(qū)間中,則會(huì)產(chǎn)生越界錯(cuò)誤。因此這種方法適用于原始數(shù)據(jù)的取值范圍已經(jīng)確定的情況。3.7實(shí)操練習(xí)題3.6

數(shù)據(jù)標(biāo)準(zhǔn)化對(duì)已經(jīng)讀取的資產(chǎn)負(fù)債表數(shù)據(jù),進(jìn)行以下操作:1.對(duì)列標(biāo)簽進(jìn)行重命名,標(biāo)簽名為CSMAR數(shù)據(jù)庫中給定的中文名稱;2.查看數(shù)據(jù)缺失的情況,并刪除資產(chǎn)合計(jì)為缺失的行;3.對(duì)資產(chǎn)合計(jì)的極端值按照上下1%進(jìn)行縮尾處理;4.對(duì)其他應(yīng)收款的缺失值用0替換;5.對(duì)資產(chǎn)合計(jì)進(jìn)行Z-Score和Min-Max標(biāo)準(zhǔn)化。Python與財(cái)經(jīng)大數(shù)據(jù)分析基礎(chǔ)第4章

股權(quán)性質(zhì)信息整理——應(yīng)用數(shù)據(jù)轉(zhuǎn)置

CONTENTS目錄4.1T轉(zhuǎn)置4.2行列互換4.3數(shù)據(jù)透視4.4數(shù)組轉(zhuǎn)置4.5應(yīng)用實(shí)踐“轉(zhuǎn)置”是一個(gè)數(shù)學(xué)名詞,常用于矩陣的計(jì)算過程中。設(shè)A為m×n階矩陣(即m行n列),第i行j列的元素為Aij,把A的行列互相交換從而得到一個(gè)新的矩陣AT,這一過程稱為矩陣的轉(zhuǎn)置。在Python中,數(shù)據(jù)轉(zhuǎn)置是將原數(shù)據(jù)的行列互換,以更符合研究邏輯,更方便地進(jìn)行計(jì)算和分析,在數(shù)據(jù)預(yù)處理時(shí)經(jīng)常使用,為之后的數(shù)據(jù)篩選、合并、統(tǒng)計(jì)操作提供方便。本章將介紹以下五個(gè)Pandas模塊與數(shù)據(jù)轉(zhuǎn)置有關(guān)的函數(shù)。4.1T轉(zhuǎn)置4.1T轉(zhuǎn)置最簡(jiǎn)單直接的轉(zhuǎn)置操作是將數(shù)據(jù)沿對(duì)角線翻轉(zhuǎn),在這個(gè)過程中數(shù)據(jù)的形狀發(fā)生了變化,數(shù)據(jù)邏輯也發(fā)生了變化,但是數(shù)據(jù)的對(duì)應(yīng)關(guān)系保持不變。為了更方便地進(jìn)行數(shù)據(jù)處理和分析,充分利用行列的關(guān)系表達(dá),我們時(shí)常使用transpose()函數(shù)對(duì)原數(shù)據(jù)進(jìn)行轉(zhuǎn)置操作,轉(zhuǎn)置效果如下圖所示:4.1T轉(zhuǎn)置transpose()函數(shù)的具體語法如下所示:DateFrame.T是DateFrame.transpose()的別名和簡(jiǎn)寫方法。為方便起見,可以直接使用DateFrame.T進(jìn)行轉(zhuǎn)置操作。transpose()函數(shù)只能進(jìn)行最簡(jiǎn)單的整體翻轉(zhuǎn)操作,想要對(duì)數(shù)據(jù)進(jìn)行更復(fù)雜的行列變換處理,需要其他的轉(zhuǎn)置方式。4.2行列互換4.2行列互換如果數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜,索引層數(shù)較多,則需要使用stack()函數(shù)與unstack()函數(shù)進(jìn)行操作。stack()是將數(shù)據(jù)的列索引轉(zhuǎn)換為行索引,unstack()是將數(shù)據(jù)的行索引轉(zhuǎn)換為列索引,從而改變數(shù)據(jù)樣式,以更符合研究習(xí)慣和后續(xù)調(diào)用。4.2行列互換stack()函數(shù)與unstack()函數(shù)的基本語法類似,stack()函數(shù)將列中指定levels的列,堆疊到行索引中;unstack()函數(shù)將行中指定levels的行,堆疊到列索引中。具體語法如下所示:4.2行列互換4.3數(shù)據(jù)透視4.3數(shù)據(jù)透視4.3.1melt()函數(shù)與stack()函數(shù)和unstack()函數(shù)進(jìn)行行列索引的互換不同,melt()函數(shù)是將列索引轉(zhuǎn)化成數(shù)據(jù),從而將DataFrame從寬格式轉(zhuǎn)換為長格式。melt()函數(shù)的使用效果如下圖所示,類似于Excel中的數(shù)據(jù)逆透視。4.3數(shù)據(jù)透視melt()函數(shù)的主要任務(wù)是將DataFrame壓縮為一種格式,其中一列或多列是標(biāo)識(shí)符變量,而其余列被認(rèn)為是測(cè)量變量,且不會(huì)旋轉(zhuǎn)到行軸,只剩下兩個(gè)非標(biāo)識(shí)符列,分別為變量variable和值value。具體語法如下所示:4.3數(shù)據(jù)透視4.3.2

pivot()函數(shù)與melt()函數(shù)相反,pivot()函數(shù)是將數(shù)據(jù)轉(zhuǎn)化成行列索引,使用來自指定索引的唯一值來形成DataFrame的軸,進(jìn)行數(shù)據(jù)重塑,從而將DataFrame從長格式轉(zhuǎn)換為寬格式。pivot()函數(shù)的使用效果如下圖所示,類似于Excel中的數(shù)據(jù)透視。具體語法如下所示:4.3數(shù)據(jù)透視4.4數(shù)據(jù)轉(zhuǎn)置4.1數(shù)據(jù)轉(zhuǎn)置本節(jié)主要針對(duì)Numpy模塊的多維數(shù)組進(jìn)行轉(zhuǎn)置操作介紹。下圖分別是二維數(shù)組和三維數(shù)組的轉(zhuǎn)置效果圖。Numpy模塊中有三種方式能夠?qū)?shù)組進(jìn)行轉(zhuǎn)置操作,分別是T屬性、transpose()函數(shù)、swapaxes()函數(shù)。4.1數(shù)據(jù)轉(zhuǎn)置4.4.1T屬性T屬性的使用十分簡(jiǎn)單,調(diào)用格式為array.T,比較適合對(duì)低維數(shù)組進(jìn)行轉(zhuǎn)置操作。因此,對(duì)二維數(shù)組的轉(zhuǎn)置通常使用T屬性。對(duì)于高維數(shù)組而言,T屬性也可以應(yīng)用,只不過只能使用默認(rèn)的轉(zhuǎn)置方式,即交換位置序列的第一個(gè)值和最后一個(gè)值。4.1

數(shù)據(jù)轉(zhuǎn)置將轉(zhuǎn)置前后兩個(gè)三維數(shù)組各元素對(duì)應(yīng)位置列在下表,從中可以清晰地看出高維數(shù)組T屬性只交換位置序列的第一個(gè)值和最后一個(gè)值。4.1數(shù)據(jù)轉(zhuǎn)置4.4.2transpose()函數(shù)對(duì)二維數(shù)組進(jìn)行轉(zhuǎn)置,除了使用T屬性,還可以使用transpose()函數(shù),兩者效果完全一致。對(duì)于高維數(shù)組而言,T屬性也可以應(yīng)用,只不過只能使用默認(rèn)的轉(zhuǎn)置方式,即交換位置序列的第一個(gè)值和最后一個(gè)值。4.1數(shù)據(jù)轉(zhuǎn)置4.4.3swapaxes()函數(shù)與transpose()函數(shù)不同的是,swapaxes()函數(shù)接受一對(duì)軸編號(hào),如果想要達(dá)到transpose(2,1,0)的效果,只需要輸入swapaxes(0,2)即可。4.5應(yīng)用實(shí)踐4.5應(yīng)用實(shí)踐出于研究需要,我們需要整理A股上市公司不同年份的股權(quán)性質(zhì)信息,下圖是從Wind導(dǎo)出的數(shù)據(jù)(部分),為了方便后續(xù)調(diào)用數(shù)據(jù),我們需要把它轉(zhuǎn)化為“StkcdReptdt股權(quán)性質(zhì)”三列:WindA股上市公司股權(quán)性質(zhì)信息處理后股權(quán)性質(zhì)信息Python與財(cái)經(jīng)大數(shù)據(jù)分析基礎(chǔ)第5章

篩選財(cái)務(wù)報(bào)表數(shù)據(jù)——應(yīng)用數(shù)據(jù)篩選

CONTENTS目錄5.1索引的基本類型5.2索引設(shè)定與獲取5.3Series對(duì)象的索引與切片5.4DataFrame對(duì)象的索引與切片5.5應(yīng)用實(shí)踐索引概念:當(dāng)打開一本書,我們?nèi)绾尾拍苎杆俚恼业轿覀円业街R(shí)點(diǎn)?索引(書的目錄)為我們提供了便利。這類似于從龐雜的關(guān)系型數(shù)據(jù)庫中找到需要的數(shù)據(jù)。通過索引,我們可以很方便的從關(guān)系型數(shù)據(jù)庫中定位數(shù)據(jù)、選擇數(shù)據(jù)和篩選數(shù)據(jù)。索引提供指向存儲(chǔ)在表的指定列中的數(shù)據(jù)值的指針,數(shù)據(jù)庫使用索引可以方便的找到特定值,然后順指針找到包含該值的行。DataFrame數(shù)據(jù)結(jié)構(gòu)屬于關(guān)系型數(shù)據(jù)對(duì)象,借助索引,我們可以實(shí)現(xiàn)數(shù)據(jù)的查詢、切片與篩選等。5.1索引的基本類型5.1索引的基本類型基本屬性:行索引—index列索引—columns二維數(shù)據(jù)——value5.1索引的基本類型在DataFrame中,通過各種索引可以查找、定位和選擇我們想要的數(shù)據(jù),根據(jù)對(duì)數(shù)據(jù)的檢索方式不同,又可以分為如下幾種索引:位置索引標(biāo)簽索引布爾索引5.1索引的基本類型5.1.1位置索引顧名思義,就是通過元素所處的相對(duì)位置進(jìn)行篩選和定位。也就是說,在DataFrame中,我們根據(jù)行索引(index)和列索引(columns)的相對(duì)位置信息來確定和檢索數(shù)據(jù)。在Python語言中,我們把第一行和第一列都定義為0(行或列),第二行和第二列都定義為1(行或列),并以此類推……5.1索引的基本類型例如,如果在一個(gè)3行4列的表格中,我們要想篩選和定位到黃色格子中的數(shù)據(jù),可以選擇輸入這個(gè)格子所在的相對(duì)位置進(jìn)行定位。5.1索引的基本類型5.1.2標(biāo)簽索引在DataFrame數(shù)據(jù)結(jié)構(gòu)中,我們可以對(duì)表格的行設(shè)置行標(biāo)簽(Index),對(duì)表格的列設(shè)置列標(biāo)簽(Columns),對(duì)表格中數(shù)據(jù)的定位可以通過輸入其所對(duì)應(yīng)的行列標(biāo)簽實(shí)現(xiàn)。5.1索引的基本類型我們可以將行標(biāo)簽定義為[1,2,3],將列標(biāo)簽定義為[‘w’,‘a(chǎn)’,‘n’,‘g’],那么此時(shí)通過標(biāo)簽對(duì)表格中黃色格子的數(shù)據(jù)定位為(2,‘n’)5.1索引的基本類型5.1.3布爾索引布爾索引,又叫邏輯索引,是通過借助True或False判斷來返回?cái)?shù)據(jù)的一種方法。通過布爾索引,我們可以對(duì)DataFrame中的Value進(jìn)行邏輯判斷,然后返回條件為True的值,過濾掉條件為False的值。在數(shù)據(jù)框中,我們可以根據(jù)數(shù)據(jù)過濾數(shù)據(jù)??梢允褂貌煌倪\(yùn)算符對(duì)數(shù)據(jù)框應(yīng)用某些條件,例如==、>、<、<=、>=。當(dāng)我們將這些運(yùn)算符應(yīng)用于數(shù)據(jù)幀時(shí),它會(huì)產(chǎn)生一系列True或False。5.1索引的基本類型布爾值如右表所示:根據(jù)布爾值為真的條件,返回?cái)?shù)值,并形成一個(gè)新表。5.2索引設(shè)定與獲取5.2索引設(shè)定與獲取設(shè)定便于引用和調(diào)整的索引可以幫助我們更容易地進(jìn)行數(shù)據(jù)篩選與數(shù)據(jù)分析。在實(shí)際財(cái)會(huì)數(shù)據(jù)處理的過程中,我們往往需要將其中一列或幾列數(shù)據(jù)設(shè)為索引以方便進(jìn)行數(shù)據(jù)分析。set_index()與reset_index()兩個(gè)函數(shù)可以幫助我們非常容易地完成這類設(shè)定。5.2索引設(shè)定與獲取5.2.1set_index()set_index()函數(shù)可以將DataFrame中的某一列或某幾列設(shè)置為列索引。5.2索引設(shè)定與獲取5.2.2reset_index()在設(shè)定索引后,有時(shí)我們需要取消索引或者更換索引,這時(shí)可以使用reset_index()函數(shù)對(duì)原索引進(jìn)行重制(reset),以下是該函數(shù)的基本語法。5.2索引設(shè)定與獲取5.2.3多級(jí)索引除了簡(jiǎn)單的一維數(shù)據(jù)和二維數(shù)據(jù),在分析財(cái)會(huì)數(shù)據(jù)時(shí)我們時(shí)常需要構(gòu)建并儲(chǔ)存多維數(shù)據(jù),即數(shù)據(jù)索引會(huì)超過2個(gè)鍵,例如,在處理面板數(shù)據(jù)時(shí),行索引可能需要用公司代碼和會(huì)計(jì)年度構(gòu)成,而列索引可能由各類財(cái)務(wù)指標(biāo)名稱構(gòu)成。對(duì)此,Pandas提供了Panel和Panel4D對(duì)象解決三維數(shù)據(jù)與四維數(shù)據(jù)的構(gòu)建與索引問題。在實(shí)踐中,一般通過層級(jí)索引(hierarchicalindexing,也被稱為多級(jí)索引,multi-indexing)配合多個(gè)有不同等級(jí)(level)的一級(jí)索引一起使用,這樣可以將高維數(shù)組轉(zhuǎn)換成類似一維Series和二維DataFrame對(duì)象的形式。表5-1展示了通過多級(jí)索引表現(xiàn)三維張量的邏輯:5.2索引設(shè)定與獲取下表展示了通過多級(jí)索引表現(xiàn)三維張量的邏輯:在對(duì)面板數(shù)據(jù)進(jìn)行處理與分析時(shí),設(shè)定多級(jí)索引可以幫助我們更方便地篩選與統(tǒng)計(jì)數(shù)據(jù)情況。5.2索引設(shè)定與獲取5.2.4布爾索引:比較與邏輯運(yùn)算(1)運(yùn)算符除了算數(shù)運(yùn)算之外,Python中還有比較運(yùn)算和邏輯運(yùn)算兩類常用的運(yùn)算,通常使用對(duì)應(yīng)的運(yùn)算符進(jìn)行。下表展示了Python中常用的比較與邏輯運(yùn)算符及其含義。5.2索引設(shè)定與獲取值得注意的是,Python中的關(guān)鍵字and、or、not也可以進(jìn)行邏輯運(yùn)算,通常與邏輯運(yùn)算符獲得的結(jié)果一致,但在某些情況下會(huì)有所區(qū)別。當(dāng)我們使用and或or時(shí),相當(dāng)于讓Python判斷整個(gè)對(duì)象的真假,而&和|是指判斷對(duì)象中每個(gè)元素的布爾值。如下例所示,當(dāng)我們對(duì)A和B兩個(gè)由0和1組成的Series進(jìn)行“或”的邏輯運(yùn)算時(shí),使用運(yùn)算符“|”會(huì)對(duì)其中每個(gè)元素進(jìn)行“或”的邏輯運(yùn)算,其中有一個(gè)元素為1(True)即輸出1(True),而當(dāng)我們使用or進(jìn)行邏輯運(yùn)算時(shí),系統(tǒng)會(huì)報(bào)錯(cuò),提示我們整個(gè)Series對(duì)象的布爾值無法確定,因此無法進(jìn)行邏輯運(yùn)算。5.2索引設(shè)定與獲取(2)Pandas的運(yùn)算函數(shù)A.query()函數(shù)query()函數(shù)使用字符串代數(shù)式的作為輸入條件進(jìn)行數(shù)據(jù)篩選,輸入的字符串使用代數(shù)式的方法表示對(duì)某列特定的過濾規(guī)則。雖然query()函數(shù)形式簡(jiǎn)潔,但是性能高且節(jié)省內(nèi)存,特別適合處理復(fù)合條件的運(yùn)算。5.2索引設(shè)定與獲取B.isin()函數(shù)使用isin()函數(shù),不僅可以對(duì)整個(gè)DataFrame進(jìn)行篩選,而且可以針對(duì)DataFrame中的特定列(Series)進(jìn)行篩選,還可以用DataFrame中的某一列對(duì)另一個(gè)DataFrame中的數(shù)據(jù)進(jìn)行篩選。5.2索引設(shè)定與獲取C.between()函數(shù)有時(shí)我們需要篩選出特定范圍內(nèi)的數(shù)據(jù),例如篩選收盤價(jià)格在16.30到16.50之間的數(shù)據(jù),如果通過邏輯判斷進(jìn)行,則需要使用復(fù)合邏輯判斷語句,代碼較為繁復(fù)。Between()函數(shù)能簡(jiǎn)化上述篩選過程,表達(dá)式也更具有可讀性,因此比較適合在需要編寫許多篩選條件時(shí)使用。=5.2索引設(shè)定與獲取(3)Pandas的字符串方法在實(shí)際處理財(cái)會(huì)數(shù)據(jù)的過程中,除了要對(duì)數(shù)值進(jìn)行比較與邏輯運(yùn)算,往往還需要對(duì)字符串進(jìn)行操作和比較,提取出包含(或者不包含)某些字符的數(shù)據(jù),例如,提取出行業(yè)代碼包括“C”的公司等。使用Python的一個(gè)優(yōu)勢(shì)就是字符串處理起來比較容易,在此基礎(chǔ)上,Pandas提供了一系列處理字符串的方法,它們都是在數(shù)據(jù)篩選和清洗時(shí)不可或缺的功能。Pandas為包含字符串的Series和DataFrame提供了str屬性,既包括Python內(nèi)置的字符串方法,如len()、lower()、upper()等,又包括其他Pandas獨(dú)有的字符串方法,如get()、get_dummies()、slice()等。在這一小節(jié)中我們介紹常用的幾種字符串方法,如下表所示。5.2索引設(shè)定與獲取5.3Series對(duì)象的索引與切片5.3Series對(duì)象的索引與切片Series對(duì)象是Pandas中的由帶索引數(shù)據(jù)構(gòu)成的一維數(shù)據(jù)結(jié)構(gòu)。與NumPy的ndarray結(jié)構(gòu)類似,區(qū)別在于Series對(duì)象帶有顯式定義的索引。Series具有values和index兩個(gè)屬性,values代表值,index代表顯式定義的索引。Pandas會(huì)默認(rèn)用0到n-1的有序整數(shù)作為Series的index,但我們也可以根據(jù)需求自行指定各種類型的index。Series對(duì)象可以通過列表、數(shù)組、字典創(chuàng)建,也可以通過DataFrame中某一行或者某一列創(chuàng)建。對(duì)Series對(duì)象的獲取與選擇可以通過位置索引、標(biāo)簽索引和布爾索引進(jìn)行。5.4DataFrame對(duì)象的索引與切片5.4DataFrame對(duì)象的索引與切片在數(shù)據(jù)處理時(shí),二維的DataFrame對(duì)象更加常見。DataFrame可以被看作是有序排列的若干Series對(duì)象,也可以被看作是帶有行索引和列索引的二維數(shù)組。DataFrame由data、index及columns構(gòu)成,data為DataFrame中存儲(chǔ)的數(shù)據(jù),index指定行索引,columns指定列索引。Pandas提供了一系列方法對(duì)DataFrame數(shù)據(jù)進(jìn)行篩選。利用DataFrame的行列標(biāo)簽以及隱性位置標(biāo)簽,我們可以選取某個(gè)單元格的數(shù)據(jù)、某一行(列)或某幾行(列)數(shù)據(jù)、以及某幾行的特定幾列的數(shù)據(jù)。實(shí)現(xiàn)數(shù)據(jù)篩選,既可以通過簡(jiǎn)單的df[]的字典形式(dictionary-style)實(shí)現(xiàn),也可以使用df.loc[]、df.iloc[]、df.at[]、df.iat[]等常用的索引器(indexer)實(shí)現(xiàn)。接下來我們將對(duì)這幾種方式進(jìn)行具體講解。5.4DataFrame對(duì)象的索引與切片5.4.1字典形式選取由于DataFrame具有行標(biāo)簽和列標(biāo)簽兩種顯式索引,在進(jìn)行字典形式的數(shù)據(jù)選取時(shí)需要特別注意輸入的標(biāo)簽Pandas會(huì)理解為是行標(biāo)簽還是列標(biāo)簽,以避免篩選錯(cuò)誤。具體而言,字典形式的選取可以用“df[]”的形式(df為DataFrame名稱)選取數(shù)據(jù),方括號(hào)中可以有三種輸入,包括傳入行位置索引或行標(biāo)簽表示的切片索引進(jìn)行行切片(選取多行)、傳入單個(gè)列標(biāo)簽或一組列標(biāo)簽選擇單列或一組列(選取單列或多列)、以及傳入布爾索引選取出符合條件的數(shù)據(jù)。5.4DataFrame對(duì)象的索引與切片5.4.2loc與iloc(1)locloc索引器屬性表示索引和切片操作都依賴于顯式索引,通過行標(biāo)簽或列標(biāo)簽進(jìn)行取值,其基本語法如下。5.4DataFrame對(duì)象的索引與切片5.4.2loc與iloc(2)ilociloc索引器屬性指索引和切片過程中都依賴隱式索引,通過整數(shù)形式的位置索引進(jìn)行取值,其基本語法如下。5.4DataFrame對(duì)象的索引與切片5.4.3at與iat位置定位功能中at與iat是兩種不同的索引方法,主要用于點(diǎn)選取。5.4DataFrame對(duì)象的索引與切片5.4.4filter()在數(shù)據(jù)處理過程中,我們有時(shí)不清楚具體的行列標(biāo)簽,或者有時(shí)想要篩選出標(biāo)簽名稱符合某些規(guī)律的行列標(biāo)簽,這時(shí),filter()函數(shù)就派上了用場(chǎng),以下是該函數(shù)的基本語法。5.4

DataFrame對(duì)象的索引與切片5.4.5np.where()與分位數(shù)索引除了前文介紹的Pandas提供的篩選方法,Numpy也提供了相應(yīng)的定位函數(shù),如where()函數(shù)5.4

DataFrame對(duì)象的索引與切片5.4.6多級(jí)索引篩選運(yùn)用多級(jí)索引可以幫助我們快速地從面板數(shù)據(jù)中篩選出我們所需要的數(shù)據(jù)。與單索引類似,上文介紹的字典形式取值與loc、iloc等索引器都可以應(yīng)用在多級(jí)索引上。用元組表示索引是多級(jí)索引的基礎(chǔ)。在使用多級(jí)索引篩選數(shù)據(jù)之前,為了避免混淆導(dǎo)致的錯(cuò)誤,我們首先區(qū)分在多級(jí)索引中元組和列表兩個(gè)不同的概念:5.5應(yīng)用實(shí)踐5.5應(yīng)用實(shí)踐財(cái)務(wù)報(bào)表是財(cái)務(wù)分析的基礎(chǔ),在會(huì)計(jì)實(shí)證研究中,我們常常需要用處理從數(shù)據(jù)庫中導(dǎo)出的財(cái)務(wù)報(bào)表。我們以從國泰安數(shù)據(jù)庫下載的2018年-2020年的資產(chǎn)負(fù)債表和利潤表為例,展示本節(jié)講解的各類數(shù)據(jù)篩選方法。Python與財(cái)經(jīng)大數(shù)據(jù)分析基礎(chǔ)第6章

合并財(cái)務(wù)報(bào)表——應(yīng)用數(shù)據(jù)合并

CONTENTS目錄6.1數(shù)據(jù)拼接:concat()與append()6.2數(shù)據(jù)合并:merge()與join()6.3combine_first()與update()填充6.4應(yīng)用實(shí)踐數(shù)據(jù)合并種類:1.上下拼接(縱向合并)2.左右拼接(橫向合并)合并后的數(shù)據(jù):1.交集2.并集3.左對(duì)齊4.右對(duì)齊6.1數(shù)據(jù)拼接:concat()與append()6.1數(shù)據(jù)拼接:concat()與append()6.1.1concat()函數(shù)在工作中經(jīng)常會(huì)遇到多個(gè)表進(jìn)行拼接合并的需求,在pandas中有多個(gè)拼接合并的方法,每種方法都有自己擅長的拼接方式pd.concat()函數(shù)可以沿著指定的軸將多個(gè)dataframe或者series拼接到一起通過該函數(shù)參數(shù)控制,可以實(shí)現(xiàn)多個(gè)表格上下拼接,左右拼接,內(nèi)連接和外鏈接6.1數(shù)據(jù)拼接:concat()與append()6.1數(shù)據(jù)拼接:concat()與append()6.1.2

append()函數(shù)在現(xiàn)有DataFrame后追加新的行或新的數(shù)據(jù)。具有相同列的數(shù)據(jù),追加。如果列不同,將會(huì)創(chuàng)建新列。一般用來縱向合并。6.1數(shù)據(jù)拼接:concat()與append()6.2數(shù)據(jù)合并:merge()與join()6.2數(shù)據(jù)合并:merge()與join()6.2.1merge()函數(shù)merge()是pandas最常用的合并函數(shù),能將兩張表的橫軸按共同列進(jìn)行合并。每次兩兩合并。一般用來橫向合并。6.2數(shù)據(jù)合并:merge()與join()6.2數(shù)據(jù)合并:merge()與join()6.2.1join()函數(shù)join()是依附于Series或DataFrame對(duì)象的進(jìn)行合并的方法,可以視為對(duì)pandas.merge()函數(shù)的一種快捷的方法。該方法可以指定索引或者共同列作為合并鍵將另一個(gè)Series或DataFrame對(duì)象合并到原有的對(duì)象上,多用于“一對(duì)一”和“一對(duì)多”關(guān)系下的橫向合并。6.2數(shù)據(jù)合并:merge()與join()6.3combine_first()與update()填充6.3combine_first()與update()填充6.3.1combine_first()方法使用combine_first()方法可以將一張表的非空值依據(jù)行、列索引一致的規(guī)律填充進(jìn)入另一張表的空值中,填充結(jié)果的行列索引為兩張表行列索引的并集。6.3combine_first()與update()填充6.3.2update()方法使用update()方法,可以將輸入的表中的非空值根據(jù)行列索引對(duì)齊的規(guī)則,直接填充進(jìn)原表格。與combine_first()方法相比,update()方法不會(huì)生成新的對(duì)象,而是直接改變被填充的表格,集合操作規(guī)則默認(rèn)為左連接(left)。6.4應(yīng)用實(shí)踐6.4應(yīng)用實(shí)踐在財(cái)經(jīng)大數(shù)據(jù)的分析過程中,準(zhǔn)確地合并不同來源、不同結(jié)構(gòu)的數(shù)據(jù)是必要的過程。例如,為了對(duì)公司的財(cái)務(wù)表現(xiàn)進(jìn)行綜合分析,我們往往需要合并公司的成立年份、行業(yè)、股權(quán)結(jié)構(gòu)等數(shù)據(jù),以便進(jìn)行橫向和縱向的財(cái)務(wù)指標(biāo)對(duì)比分析。下面我們以從國泰安數(shù)據(jù)庫下載的2018年-2020年的資產(chǎn)負(fù)債表、利潤表與公司基本信息表,以及第四章來自wind數(shù)據(jù)庫的股權(quán)結(jié)構(gòu)為例,展示本節(jié)講解的各類數(shù)據(jù)合并方法。Python與財(cái)經(jīng)大數(shù)據(jù)分析基礎(chǔ)第7章制作數(shù)據(jù)透視表和計(jì)算行業(yè)競(jìng)爭(zhēng)度——應(yīng)用數(shù)據(jù)分組

CONTENTS目錄04數(shù)據(jù)排序與排名05數(shù)據(jù)分箱06應(yīng)用實(shí)踐01概述02Groupby語法03數(shù)據(jù)聚合與計(jì)算01概述根據(jù)所給數(shù)據(jù),根據(jù)特定標(biāo)簽或分類變量對(duì)整體數(shù)據(jù)進(jìn)行分組,從而實(shí)現(xiàn)數(shù)據(jù)的高效分類計(jì)算?,F(xiàn)實(shí)中,我們經(jīng)常需要根據(jù)特定標(biāo)簽或字段,對(duì)整體數(shù)據(jù)進(jìn)行分組處理和操作。例如:

按照上市公司資產(chǎn)規(guī)模分兩組,計(jì)算每組市值加權(quán)平均收益率;按照公司是否被提起民事訴訟分為兩類,并統(tǒng)計(jì)他們的特征;按照班級(jí)計(jì)算學(xué)生的平均成績(jī)等等。

7.1概述(一)分組假設(shè),我們有一個(gè)數(shù)據(jù),由4000多家上市公司的日交易數(shù)據(jù)構(gòu)成。我們想分別把每一家上市公司的未來一期(t+1)的收益率return,做一個(gè)滯后(放到t期上顯示),即對(duì)數(shù)據(jù)統(tǒng)一向后遞延一期。該如何處理?

7.1概述(二)分組的應(yīng)用示例處理流程:1)選擇每一只股票;2)進(jìn)行滯后處理3)合并所有股票數(shù)據(jù)數(shù)據(jù)處理方法:1)for循環(huán)每只股票;2)利用DataFrame分組函數(shù)高效處理7.1概述(二)分組的應(yīng)用示例StkcdTrddtReturn(t)Return(t+1)X2022-11-140.010.02X2022-11-150.02-0.05X2022-11-16-0.05NaNY2022-11-150.030.01Y2022-11-160.010.06Y2022-11-170.06-0.02Y2022-11-18-0.02NaN02Groupby語法在DataFrame中,可以通過Groupby來進(jìn)行分組操作。當(dāng)調(diào)動(dòng)Groupby時(shí),它會(huì)生成一個(gè)分組對(duì)象,保存在內(nèi)存里。接著,針對(duì)這個(gè)分組對(duì)象,我們可以引用所需函數(shù)進(jìn)行分組計(jì)算。最后,再按照組別返回對(duì)應(yīng)的處理結(jié)果,形成一個(gè)新的表單。

7.2Groupby語法(一)概述如圖所示:

7.2Groupby語法(一)概述7.2Groupby語法(二)df.groupby()基本語法03數(shù)據(jù)聚合與計(jì)算7.3數(shù)據(jù)聚合與計(jì)算(一)概述在DataFrame中,引用Groupby對(duì)數(shù)據(jù)分組后,接下來就是引用相應(yīng)的方法對(duì)數(shù)據(jù)分組聚合和計(jì)算。數(shù)據(jù)聚合的常用方法agg;數(shù)據(jù)分組計(jì)算的常用函數(shù)apply,自由度最高。7.3數(shù)據(jù)聚合與計(jì)算(二)數(shù)據(jù)聚合方法——aggdf.groupby(‘Key1’).agg({‘Key4’:[np.mean,np.count]})7.3數(shù)據(jù)聚合與計(jì)算(三)數(shù)據(jù)聚合方法——applydf.groupby(‘Column’).apply(func,axis=0)該函數(shù)是基于分組后,對(duì)組層面的運(yùn)算;傳入該函數(shù)的是分組后的,每一個(gè)DataFrame經(jīng)過運(yùn)算后返回為新的DataFrame或Series或Scalar,最終再合并輸出為一個(gè)DataFrame?;菊Z法:func:對(duì)行或列進(jìn)行運(yùn)算的函數(shù);axis:1表示對(duì)每列進(jìn)行運(yùn)算,0表示對(duì)每行進(jìn)行運(yùn)算;7.3數(shù)據(jù)聚合與計(jì)算(三)數(shù)據(jù)聚合方法——applydf.groupby(’class‘).apply(np.mean)classaroelevX3......Y1......Y3......X6......Y5......Z2......Z4......X9......Z6......classaroelevX3......X6......X9classaroelevY1......Y3......Y5classaroelevZ2......Z4......Z6......classaX6Y3Z404數(shù)據(jù)排序與排名7.4數(shù)據(jù)排序與排名(一)概述在DataFrame中,所謂排序,就是根據(jù)制定列或行對(duì)整體數(shù)據(jù)進(jìn)行重新排列,方便瀏覽數(shù)據(jù),也方便觀察特定變量變化趨勢(shì),與其他變量之間的關(guān)系。所謂排名,則是根據(jù)指定列值的大小,進(jìn)行排序,根據(jù)大小排序,并不改變?cè)瓟?shù)據(jù)的排列。7.4數(shù)據(jù)排序與排名(一)概述classaX2Y1Y3X6classarank_aX23Y14Y32X61classaY1X2Y3X6排序排名7.4數(shù)據(jù)排序與排名(二)數(shù)據(jù)排序DataFrame.sort_values(by,*,axis=0,ascending=True,inplace=False)主要參數(shù):by:str或listofstraxis:{0或‘index’,1或‘columns’}ascending:defaultTrue,升序排列,F(xiàn)alse是降序排列。inplace:排序后保留覆蓋原數(shù)據(jù)。DataFrame.sort_index()7.4數(shù)據(jù)排序與排名(三)數(shù)據(jù)排名DataFrame.rank(axis=0,method='average',ascending=True)主要參數(shù)說明:axis{0or‘index’,

1or‘columns’},default0method{‘a(chǎn)verage’,‘min’,‘max’,‘first’,‘dense’},default‘a(chǎn)verage’當(dāng)組內(nèi)有重復(fù)值的時(shí)候如何處理:average:組均值;min:組最小值;max:組最大值;first:

按照出現(xiàn)在數(shù)據(jù)中的先后順序;dense:類似min,但逐漸增加1。05數(shù)據(jù)分箱7.5數(shù)據(jù)排序與排名(一)概述變量分箱(binning)屬于對(duì)連續(xù)變量離散化類型中的一種,例如,信用評(píng)分系統(tǒng)中一般有常用的等距分段、等深分段、最優(yōu)分段。在資產(chǎn)定價(jià)領(lǐng)域,我們?cè)谟?jì)算famaandFrench規(guī)模因子SMB的時(shí)候,需要對(duì)規(guī)模按照中位數(shù)分為Big和Small兩類。按照價(jià)值選股因子,綜合打分,并根據(jù)購買等級(jí)分類等等。在DataFrame中,對(duì)所有數(shù)據(jù)進(jìn)行分箱操作的函數(shù),經(jīng)常用到的兩個(gè)pd.cut(等距分組)和pd.qcut(等頻分組或分位數(shù)分組)。7.5數(shù)據(jù)排序與排名(二)數(shù)據(jù)分箱方法——pd.cut可以將數(shù)據(jù)從大到小進(jìn)行等距劃分7.5數(shù)據(jù)排序與排名(二)數(shù)據(jù)分箱方法——pd.cut可以將數(shù)據(jù)從大到小進(jìn)行等距劃分50總距離=最大-最小=50-0=50;假設(shè)分為5組;組間間隔=總距離/組數(shù)=50/5=10;第1組:(min:min+10]-----------------------對(duì)應(yīng)a組第2組:(min+10:min+10+10]--------------------對(duì)應(yīng)b組第3組:(min+10+10:min+10+10+10]---------對(duì)應(yīng)c組---空第4組:(min+10+10+10:min+10+10+10+10]--------對(duì)應(yīng)d組第5組:(min+10+10+10+10:min+10+10+10+10+10]--對(duì)應(yīng)e假設(shè):right=True,右邊界算在內(nèi)07.5數(shù)據(jù)排序與排名(三)數(shù)據(jù)分箱方法——pd.qcutpandas.qcut(x,q,labels=None,retbins=False,precision=3,duplicates='raise')參數(shù)說明:x:ndarray或Series。q:integer,指示劃分的組數(shù)。labels:array或bool,默認(rèn)為None。當(dāng)傳入數(shù)組時(shí),分組的名稱由label指示;當(dāng)傳入Flase時(shí),僅顯示分組下標(biāo)。precision:int,精度,默認(rèn)為3。7.5數(shù)據(jù)排序與排名(三)數(shù)據(jù)分箱方法——pd.qcut0050505050454040201010

按照值大小排序,根據(jù)分位數(shù);也就是根據(jù)位置把數(shù)據(jù)分為相應(yīng)的組別。06應(yīng)用實(shí)踐7.6應(yīng)用實(shí)踐使用第八章合并后的深主板上市公司基本信息與各年度財(cái)務(wù)數(shù)據(jù)作為案例,結(jié)合本章內(nèi)容在財(cái)務(wù)大數(shù)據(jù)處理過程中的應(yīng)用,制作財(cái)務(wù)數(shù)據(jù)的數(shù)據(jù)透視表并計(jì)算行業(yè)競(jìng)爭(zhēng)度(HHI)。Python與財(cái)經(jīng)大數(shù)據(jù)分析基礎(chǔ)第8章分析一般公司債的票面利率影響因素——應(yīng)用統(tǒng)計(jì)分析CONTENTS目錄04回歸分析05應(yīng)用實(shí)踐01描述性統(tǒng)計(jì)02隨機(jī)變量及其概率分布03推斷統(tǒng)計(jì)01描述性統(tǒng)計(jì)描述性統(tǒng)計(jì)是指綜合運(yùn)用計(jì)算指標(biāo)、分類等方式來描述一組數(shù)據(jù)的特征,幫助讀者了解數(shù)據(jù)。描述性統(tǒng)計(jì)的基本指標(biāo)主要包括數(shù)據(jù)的位置以及數(shù)據(jù)的離散程度。8.1描述性統(tǒng)計(jì)(一)概述在獲取數(shù)據(jù)之后,我們通常需要了解數(shù)據(jù)的位置分布特征,例如最小值、最大值、平均數(shù)、中位數(shù)、眾數(shù)、分位數(shù)等指標(biāo)。Python中可以使用Pandas模塊完成數(shù)據(jù)位置指標(biāo)的獲取。8.1描述性統(tǒng)計(jì)(二)數(shù)據(jù)的位置分布函數(shù)函數(shù)說明DataFrame.min()/DataFrame.max()最小值/最大值DataFrame.mean()平均數(shù)DataFrame.median()中位數(shù)DataFrame.mode()眾數(shù)DataFrame.quantile()分位數(shù)數(shù)據(jù)位置指標(biāo)能幫助讀者分析一組數(shù)據(jù)的平均水平或中間位置,但是要了解數(shù)據(jù)集中和分散程度,則需要用到極差、偏差、方差以及標(biāo)準(zhǔn)差,在Python中主要通過Pandas模塊完成數(shù)據(jù)離散度指標(biāo)的獲取。8.1描述性統(tǒng)計(jì)(三)數(shù)據(jù)的離散程度函數(shù)函數(shù)說明DataFrame.max()-DataFrame.min()極差DataFrame.mad()平均絕對(duì)偏差DataFrame.var()方差DataFrame.std()標(biāo)準(zhǔn)差

Pandas庫提供descibe()函數(shù),可以直接得到描述性統(tǒng)計(jì)的主要指標(biāo),例如樣本量、均值、方差、最值、分位數(shù)等統(tǒng)計(jì)特征。8.1描述性統(tǒng)計(jì)(三)describe函數(shù)02隨機(jī)變量及其概率分布隨機(jī)變量是隨機(jī)試驗(yàn)各種結(jié)果的實(shí)值單值函數(shù),隨機(jī)事件的數(shù)量表現(xiàn)。隨機(jī)變量分為離散型隨機(jī)變量和連續(xù)型隨機(jī)變量。一般而言,隨機(jī)數(shù)并不是真正的“隨機(jī)”,而是服從于某種概率分布,根據(jù)隨機(jī)變量的分類,有離散型概率分布和連續(xù)型概率分布。財(cái)會(huì)金融領(lǐng)域經(jīng)常使用的概率分布如下所示。8.2隨機(jī)變量及其概率分布(一)概述

8.2隨機(jī)變量及其概率分布(二)正態(tài)分布在Numpy庫中使用normal()函數(shù)生成正態(tài)分布。8.2隨機(jī)變量及其概率分布(二)正態(tài)分布假設(shè)X服從標(biāo)準(zhǔn)正態(tài)分布N(0,,1),Y服從自由度為n的卡方分布,那么變量Z服從自由度為n的t分布,記作Z~t(n)。隨著自由度n逐漸增大,t分布將逐漸接近標(biāo)準(zhǔn)正態(tài)分布。8.2隨機(jī)變量及其概率分布(三)t分布假設(shè)兩個(gè)隨機(jī)變量x1和x2相互獨(dú)立,且分別服從自由度是n1和n2的卡方分布,則稱統(tǒng)計(jì)量F服從自由度n1和n2的F分布,記作F~F(n1,n2)。8.2隨機(jī)變量及其概率分布(四)F分布03推斷統(tǒng)計(jì)推斷統(tǒng)計(jì)是研究如何利用樣本數(shù)據(jù)來推斷總體特征的統(tǒng)計(jì)方法。推斷統(tǒng)計(jì)包括兩方面的內(nèi)容:參數(shù)估計(jì)和假設(shè)檢驗(yàn)。8.3推斷統(tǒng)計(jì)(一)概述

8.3推斷統(tǒng)計(jì)(二)參數(shù)估計(jì)假設(shè)檢驗(yàn)是用來判斷樣本與樣本、樣本與總體的差異是由抽樣誤差引起還是本質(zhì)差別造成的推斷統(tǒng)計(jì)方法。

進(jìn)行假設(shè)檢驗(yàn)主要經(jīng)歷四個(gè)步驟。第一,提出原假設(shè)H0和備擇假設(shè)H1。第二,構(gòu)造檢驗(yàn)的統(tǒng)計(jì)量及其分布。第三,確定顯著性水平α,以及確定檢驗(yàn)規(guī)則。第四,根據(jù)檢驗(yàn)規(guī)則作出決策。8.3推斷統(tǒng)計(jì)(三)假設(shè)檢驗(yàn)

不拒絕H0拒絕H0H0為真1-α(正確)α(拒真錯(cuò)誤)H1為假

(取偽錯(cuò)誤)1-

(正確)t檢驗(yàn)主要用于樣本含量較小(例如樣本量小于30),總體標(biāo)準(zhǔn)差σ未知的正態(tài)分布。常見的t檢驗(yàn)主要有單樣本t檢驗(yàn)、配對(duì)樣本t檢驗(yàn)和獨(dú)立樣本t檢驗(yàn)。8.3推斷統(tǒng)計(jì)(二)假設(shè)檢驗(yàn)04回歸分析協(xié)方差表示的是兩個(gè)變量總體誤差的期望。如果兩個(gè)變量的變化趨勢(shì)一致,那么兩個(gè)變量之間的協(xié)方差就是正值;如果兩個(gè)變量的變化趨勢(shì)相反,那么兩個(gè)變量之間的協(xié)方差就是負(fù)值;如果兩個(gè)變量是統(tǒng)計(jì)獨(dú)立的,那么二者之間的協(xié)方差就是0。8.4

回歸分析(一)協(xié)方差cov()函數(shù)相關(guān)系數(shù)是用以反映變量之間相關(guān)關(guān)系密切程度的統(tǒng)計(jì)指標(biāo)。與協(xié)方差不同,相關(guān)系數(shù)排除了變量之間量綱的差異。常見的相關(guān)系數(shù)計(jì)算方法包括pearson相關(guān)系數(shù)、spearman相關(guān)系數(shù)等。8.4

回歸分析(二)相關(guān)系數(shù)corr()函數(shù)8.4

回歸分析(三)線性回歸線性回歸是找到多維空間中的一條直線(線性回歸方程),使得其盡可能地去擬合變量之間的“隱式關(guān)系”。普通最小二乘法(OrdinaryLeastSquare,OLS),是線性回歸模型中最基本的估計(jì)方法,原理就是使殘差的平方和達(dá)到最小。statsmodel庫是Python一個(gè)強(qiáng)大的統(tǒng)計(jì)分析庫。我們使用statsmodels.api庫的OLS()進(jìn)行線性回歸。需要特別注意的是,進(jìn)行線性回歸的變量不能有缺失值,否則會(huì)報(bào)錯(cuò)。8.4

回歸分析(三)線性回歸05應(yīng)用實(shí)踐“指數(shù)信息.xlsx”為2008年至2021年發(fā)行的一般公司債數(shù)據(jù),票面利率為發(fā)行時(shí)票面利率,總資產(chǎn)報(bào)酬率、資產(chǎn)負(fù)債率、流動(dòng)比率為債券2020年的財(cái)務(wù)比率,對(duì)其做描述性統(tǒng)計(jì)。分析一般公司債的票面利率在2021年與2022年是否存在顯著差異。分析一般公司債的票面利率影響因素,因變量為票面利率,自變量分別為發(fā)行時(shí)信用評(píng)級(jí)、總資產(chǎn)報(bào)酬率、資產(chǎn)負(fù)債率、流動(dòng)比率。8.5應(yīng)用實(shí)踐Python與財(cái)經(jīng)大數(shù)據(jù)分析基礎(chǔ)第9章使用ARIMA模型預(yù)測(cè)股票價(jià)格——時(shí)間序列CONTENTS目錄04應(yīng)用實(shí)踐01時(shí)間序列簡(jiǎn)介02時(shí)間序列處理03時(shí)間序列基本性質(zhì)01時(shí)間序列簡(jiǎn)介時(shí)間序列是指將同一統(tǒng)計(jì)指標(biāo)的數(shù)值按其發(fā)生的時(shí)間先后順序排列而成的數(shù)列,其實(shí)質(zhì)是反映某個(gè)或者某些隨機(jī)變量隨時(shí)間不斷變化的趨勢(shì)。常見的時(shí)間序列如按秒或分鐘更新的股價(jià)數(shù)據(jù)、按天更新的利率數(shù)據(jù)、按月更新的征信數(shù)據(jù)以及按年更新的宏觀經(jīng)濟(jì)數(shù)據(jù)等。9.1時(shí)間序列簡(jiǎn)介(一)時(shí)間序列基本概念datetime模塊是Python處理日期和時(shí)間的標(biāo)準(zhǔn)庫,提供多種處理日期、時(shí)間相關(guān)的類。不僅支持日期和時(shí)間的算法,也能實(shí)現(xiàn)有效的屬性提取和格式輸出,本部分將介紹使用datetime創(chuàng)建時(shí)間對(duì)象、查看時(shí)間對(duì)象屬性和轉(zhuǎn)換時(shí)間格式等方法。9.1時(shí)間序列簡(jiǎn)介(二)datetime模塊類名功能說明date日期對(duì)象,常用屬性有year,month,daytime時(shí)間對(duì)象,常用屬性有hour,minute,seconddatetime日期時(shí)間對(duì)象,是date和time的結(jié)合timedelta時(shí)間間隔,即兩個(gè)時(shí)間點(diǎn)之間的長度tzinfo時(shí)區(qū)信息對(duì)象在日常數(shù)據(jù)分析中,最為常用的是datetime模塊的datetime類,因此我們主要介紹datetime類。9.1時(shí)間序列簡(jiǎn)介(三)datetime類02時(shí)間序列處理時(shí)間序列的缺失值處理一般采用插值方法,使用缺失值周圍的兩個(gè)已知數(shù)據(jù)點(diǎn)估計(jì)丟失的數(shù)據(jù)點(diǎn)。較為常見的插值方法有基于時(shí)間的插值、樣條插值和線性插值,一般通過pandas模塊的interpolate()函數(shù)來實(shí)現(xiàn)。9.2時(shí)間序列處理(一)時(shí)間序列缺失值處理移動(dòng)是指沿著時(shí)間軸將數(shù)據(jù)前移或后移,在財(cái)經(jīng)金融數(shù)據(jù)處理中,時(shí)常會(huì)用到時(shí)間滯后。時(shí)間滯后是將t期的數(shù)據(jù)轉(zhuǎn)換為(t-n)期的數(shù)據(jù),可以通過shift()函數(shù)實(shí)現(xiàn)。9.2時(shí)間序列處理(二)時(shí)間序列數(shù)據(jù)移動(dòng)和滯后計(jì)算第九章數(shù)據(jù)分組介紹了groupby()函數(shù),其主要作用是進(jìn)行數(shù)據(jù)的分組以及分組后的組內(nèi)運(yùn)算,常與agg()和apply()函數(shù)搭配使用。這一函數(shù)在時(shí)間序列數(shù)據(jù)中也十分常用,同樣對(duì)時(shí)間序列進(jìn)行分組,之后再進(jìn)行組內(nèi)運(yùn)算,從而獲取所需的數(shù)據(jù)或觀察不同組別間的差異。9.2時(shí)間序列處理(三)時(shí)間序列數(shù)據(jù)分組時(shí)間序列通常由趨勢(shì)、周期性、季節(jié)性、誤差構(gòu)成,其中最經(jīng)常被分析的是趨勢(shì)和季節(jié)性。時(shí)間序列可以被看作是趨勢(shì)、季節(jié)性和誤差項(xiàng)的整合,其各個(gè)觀測(cè)值可以是以上成分相加或相乘得到的。9.2時(shí)間序列處理(四)時(shí)間序列的分解時(shí)間序列的分解可以通過statsmodels模塊的seasonal_decompose來實(shí)現(xiàn)。9.2時(shí)間序列處理(四)時(shí)間序列的分解

9.2時(shí)間序列處理(五)時(shí)間序列的平滑在了解時(shí)間序列數(shù)據(jù)之后,我們可以對(duì)其進(jìn)行簡(jiǎn)單的分析,比如進(jìn)行描述性統(tǒng)計(jì)。這里我們沿用上節(jié)數(shù)據(jù),基于前序章節(jié)內(nèi)容,可以直接使用describe()函數(shù)查看數(shù)據(jù)的均值方差等。9.2時(shí)間序列處理(六)時(shí)間序列數(shù)據(jù)描述性統(tǒng)計(jì)03時(shí)間序列基本性質(zhì)研究不同變量之間的相關(guān)性,是為了揭示變量之間的因果關(guān)系,以更好地預(yù)測(cè)目標(biāo)變量,而時(shí)間序列的自相關(guān)性同樣也是研究和利用時(shí)間序列的重要性質(zhì)。所謂“歷史可以重演”,即希望找到時(shí)間序列所具有的可延續(xù)性特征,以幫助我們更好地預(yù)測(cè)未來。時(shí)間序列的自相關(guān)性可以通過自協(xié)方差、自相關(guān)系數(shù)等統(tǒng)計(jì)量來體現(xiàn)。9.3時(shí)間序列基本性質(zhì)(一)自相關(guān)性

Python中statsmodels模塊包含的acf()函數(shù)可以便捷計(jì)算自相關(guān)系數(shù)。9.3時(shí)間序列基本性質(zhì)(一)自相關(guān)性時(shí)間序列的平穩(wěn)性是時(shí)間序列研究的基本前提,通過前一節(jié)的介紹,我們希望通過自相關(guān)性找到時(shí)間序列的可延續(xù)性特征,并在預(yù)測(cè)未來時(shí)利用該特征,而時(shí)間序列的平穩(wěn)性則是決定該特征能否延續(xù)到未來的重要性質(zhì)。9.3時(shí)間序列基本性質(zhì)(二)平穩(wěn)性增廣迪基·富勒檢驗(yàn)(ADF檢驗(yàn))是最常用的單位根檢驗(yàn)方法,Python中的arch模塊提供了ADF()函數(shù)幫助我們便捷地進(jìn)行ADF檢驗(yàn)。9.3時(shí)間序列基本性質(zhì)(二)平穩(wěn)性KPSS檢驗(yàn)可以用于趨勢(shì)平穩(wěn)性檢驗(yàn),Python中的statsmodels模塊提供了kpss()函數(shù)幫助我們便捷地進(jìn)行KPSS檢驗(yàn)。9.3時(shí)間序列基本性質(zhì)(二)平穩(wěn)性白噪聲序列是指序列中任意兩個(gè)時(shí)間點(diǎn)的變量均不相關(guān),序列均值為0、方差為常數(shù),這使得白噪聲序列符合平穩(wěn)時(shí)間序列的條件。白噪聲序列中沒有任何規(guī)律,不能用于預(yù)測(cè)和推斷,所以發(fā)現(xiàn)一個(gè)時(shí)間序列為白噪聲序列時(shí),說明該時(shí)間序列已經(jīng)失去了繼續(xù)研究的意義。9.3時(shí)間序列基本性質(zhì)(三)白噪聲序列可以通過Ljung-Box檢驗(yàn)該序列是否為白噪聲序列,Python中statsmodels模塊提供了q_stat()完成該檢驗(yàn)。9.3時(shí)間序列基本性質(zhì)(三)白噪聲序列04應(yīng)用實(shí)踐

ARIMA(AutoregressiveIntegratedMovingAverage)模型是一種廣泛使用的時(shí)間序列分析方法,它可以用于對(duì)未來的數(shù)據(jù)進(jìn)行預(yù)測(cè)。ARIMA模型由自回歸模型(AR模型)、差分整合模型(I模型)和移動(dòng)平均模型(MA模型)組成,因此也被稱為ARIMA(p,d,q)模型。其中,p表示自回歸階數(shù),d表示差分階數(shù),q表示移動(dòng)平均階數(shù)。嘗試使用ARIMA模型,對(duì)貴州茅臺(tái)股票價(jià)格進(jìn)行預(yù)測(cè)分析。9.4應(yīng)用實(shí)踐Python與財(cái)經(jīng)大數(shù)據(jù)分析基礎(chǔ)第10章

繪制股票日K線圖——應(yīng)用可視化表達(dá)

CONTENTS目錄10.1Matplotlib安裝10.2Matplotlib庫的基礎(chǔ)用法10.3Matplotlib庫的常用技巧10.4應(yīng)用實(shí)踐應(yīng)用場(chǎng)景分析:在金融數(shù)據(jù)分析中,數(shù)據(jù)可視化是至關(guān)重要的環(huán)節(jié)。所謂“千言萬語,不如一圖”,數(shù)據(jù)可視化可以直觀的觀測(cè)數(shù)據(jù)的分布規(guī)律和變化趨勢(shì)。本章關(guān)于可視化的主要工具是Matplotlib(一個(gè)基于Python的2D繪圖庫),它能以各種硬拷貝格式和跨平臺(tái)的交互式環(huán)境生成出版質(zhì)量級(jí)別的圖形,也是利用Python實(shí)現(xiàn)可視化最基礎(chǔ)的庫。10.1Matplotlib安裝10.1Matplotlib安裝首先需要安裝第三方Matplotlib庫。如果已經(jīng)安裝Matplotlib庫,請(qǐng)輸入以下代碼,驗(yàn)證是否安裝成功。如果沒有報(bào)錯(cuò),則為成功安裝。本教材使用的Matplotlib版本為3.5.2。不同版本在代碼編寫上略有差異,建議讀者在學(xué)習(xí)時(shí)安裝相同的版本。10.1Matplotlib安裝當(dāng)圖中包含中文時(shí),可能會(huì)產(chǎn)生亂碼問題。如果出現(xiàn)中文亂碼,讀者可根據(jù)以下步驟進(jìn)行設(shè)置。第一,輸入In[3]代碼,獲得緩存文件夾路徑。第二,打開命令提示符(Windows系統(tǒng))或終端(MacOS系統(tǒng)),輸入命令刪除緩存文件夾下的文件,命令為rm-r/Users/user1/.matplotlib/*。讀者需要注意兩點(diǎn):一是,這個(gè)命令不是在Python編輯器(如PyCharm或Jupyter)輸入,而是在命令提示符或終端;二是,讀者需要根據(jù)In[3]輸出的路徑進(jìn)行設(shè)定。第三,下載SeiHei.ttf字體,并放入相應(yīng)文件夾C:\Windows\Fonts(Windows系統(tǒng))或~/.fonts(MacOS系統(tǒng))。如果MacOS系統(tǒng)沒有該文件夾,可在終端輸入mkdir~/.fonts,創(chuàng)建文件夾。10.1Matplotlib安裝在數(shù)據(jù)分析之前,需要導(dǎo)入相關(guān)包,包括numpy、pandas、matplotlib。In[4]#1設(shè)定numpy的隨機(jī)種子數(shù),確保隨機(jī)數(shù)據(jù)相同;In[4]#2和In[4]#3分別對(duì)pandas設(shè)置列示全部的列和列的寬度;In[4]#4設(shè)置負(fù)數(shù)顯示格式,如果不設(shè)置,當(dāng)圖形中包含負(fù)數(shù)時(shí)可能會(huì)亂碼;In[4]#5設(shè)置字體,如果不設(shè)置,當(dāng)圖形中包含中文時(shí)可能會(huì)亂碼。10.2Matplotlib庫的基礎(chǔ)用法10.2Matplotlib庫的基礎(chǔ)用法

通過matplotlib官方指南中給出的示意圖可以發(fā)現(xiàn),一個(gè)完整的圖應(yīng)具備:畫板(Figure)、軸域(Axes)、橫縱坐標(biāo)線(Spines)及其標(biāo)簽(X/Yaxislabel)、主/子刻度(Major/Minortick)、網(wǎng)格(Grid)、線(Line)、標(biāo)點(diǎn)(Markers)、圖例(Legend)以及標(biāo)題(Title)等。10.2Matplotlib庫的基礎(chǔ)用法10.2.1繪制柱形圖(1)第1種方法10.2Matplotlib庫的基礎(chǔ)用法(2)第2種方法Matplotlib繪圖時(shí),首先需要確定一個(gè)合適大小的“畫板”(figure),它是繪圖元素的頂層容器。然后,我們?cè)谶@個(gè)畫板繪制各種圖形元素。Matplotlib庫使用figure()方法設(shè)定畫板。10.2Matplotlib庫的基礎(chǔ)用法10.2Matplotlib庫的基礎(chǔ)用法(3)第3種方法在畫板上也可以通過subplots()方法創(chuàng)建軸域。subplots()方法的基本語法如下。10.2Matplotlib庫的基礎(chǔ)用法10.2.2設(shè)置坐標(biāo)軸刻度最小值和最大值Matplotlib繪圖時(shí)會(huì)根據(jù)數(shù)據(jù)自動(dòng)設(shè)置坐標(biāo)軸刻度的最小值和最大值。我們可以通過set_xlim()方法和set_ylim()方法分別設(shè)置X軸和Y軸坐標(biāo)軸刻度的最小值和最大值。10.2Matplotlib庫的基礎(chǔ)用法10.2.3設(shè)置坐標(biāo)軸刻度(1)設(shè)置坐標(biāo)軸主刻度Matplotlib繪圖時(shí)會(huì)根據(jù)數(shù)據(jù)自動(dòng)設(shè)置坐標(biāo)軸主刻度。我們可以通過set_major_loc

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論