財(cái)經(jīng)大數(shù)據(jù)分析-以Python為工具 課件 王彥超 第1-7章 數(shù)據(jù)創(chuàng)建、數(shù)據(jù)查看-制作數(shù)據(jù)透視表和計(jì)算行業(yè)競(jìng)爭(zhēng)度-應(yīng)用數(shù)據(jù)分組_第1頁(yè)
財(cái)經(jīng)大數(shù)據(jù)分析-以Python為工具 課件 王彥超 第1-7章 數(shù)據(jù)創(chuàng)建、數(shù)據(jù)查看-制作數(shù)據(jù)透視表和計(jì)算行業(yè)競(jìng)爭(zhēng)度-應(yīng)用數(shù)據(jù)分組_第2頁(yè)
財(cái)經(jīng)大數(shù)據(jù)分析-以Python為工具 課件 王彥超 第1-7章 數(shù)據(jù)創(chuàng)建、數(shù)據(jù)查看-制作數(shù)據(jù)透視表和計(jì)算行業(yè)競(jìng)爭(zhēng)度-應(yīng)用數(shù)據(jù)分組_第3頁(yè)
財(cái)經(jīng)大數(shù)據(jù)分析-以Python為工具 課件 王彥超 第1-7章 數(shù)據(jù)創(chuàng)建、數(shù)據(jù)查看-制作數(shù)據(jù)透視表和計(jì)算行業(yè)競(jìng)爭(zhēng)度-應(yīng)用數(shù)據(jù)分組_第4頁(yè)
財(cái)經(jīng)大數(shù)據(jù)分析-以Python為工具 課件 王彥超 第1-7章 數(shù)據(jù)創(chuàng)建、數(shù)據(jù)查看-制作數(shù)據(jù)透視表和計(jì)算行業(yè)競(jìng)爭(zhēng)度-應(yīng)用數(shù)據(jù)分組_第5頁(yè)
已閱讀5頁(yè),還剩167頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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ù)庫(kù)。在數(shù)據(jù)創(chuàng)建時(shí),我們可以構(gòu)建虛擬數(shù)據(jù),也可以讀取現(xiàn)有數(shù)據(jù)公司提供的數(shù)據(jù),也可以利用網(wǎng)絡(luò)爬蟲(chóng)爬取網(wǎng)上一些特色數(shù)據(jù)。通過(guò)Python的數(shù)據(jù)創(chuàng)建功能,可以實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),方便后續(xù)的調(diào)用、清洗、運(yùn)行、計(jì)算和分析。1.1數(shù)據(jù)分析模塊介紹由于爬蟲(chóng)技術(shù)在后續(xù)章節(jié)會(huì)有介紹,所以本章主要介紹通過(guò)DataFrame自行創(chuàng)建,或通過(guò)讀取結(jié)構(gòu)化數(shù)據(jù)創(chuàng)建兩種方式。1.2DataFrame簡(jiǎn)介1.2DataFrame簡(jiǎn)介在Python中,DataFrame是一種表格型數(shù)據(jù)結(jié)構(gòu),類(lèi)似Excel,是Pandas中非常重要的結(jié)構(gòu)化數(shù)據(jù)容器。通過(guò)DataFrame,數(shù)據(jù)分析過(guò)程中的繁瑣操作在很大程度上簡(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ù)的具體語(yǔ)法如下所示:1.3DataFrame數(shù)據(jù)創(chuàng)建(1)通過(guò)列表(list)創(chuàng)建當(dāng)數(shù)據(jù)為列表(list)類(lèi)型時(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類(lèi)型的對(duì)象,將多個(gè)列表的相同位置的元素配對(duì)在一起,每個(gè)列表形成DataFrame不同的列。1.3DataFrame數(shù)據(jù)創(chuàng)建(2)通過(guò)數(shù)組(array)創(chuàng)建我們可以通過(guò)Pandas.DataFrame()函數(shù)將生成的數(shù)組轉(zhuǎn)換成一個(gè)標(biāo)準(zhǔn)的DataFrame。為了更方便讀取數(shù)據(jù),我們可以分別定義index和columns的值。1.3DataFrame數(shù)據(jù)創(chuàng)建(3)通過(guò)字典(dict)創(chuàng)建作為一種可變?nèi)萜髂P?,字典(Dictionary)可存儲(chǔ)任意類(lèi)型對(duì)象。當(dāng)錄入數(shù)據(jù)為字典(dict)類(lèi)型時(shí),通過(guò)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)通過(guò)序列Series創(chuàng)建 Series是Pandas庫(kù)中一種基本的數(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可以通過(guò)Series來(lái)創(chuàng)建。其中,index為Series的標(biāo)簽,columns對(duì)應(yīng)各個(gè)Series。當(dāng)遇到Series長(zhǎng)度不同的情況時(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í)間序列提供了便利,通過(guò)該函數(shù),我們很方便的可以生成一個(gè)固定頻率的時(shí)間序列。然后,再結(jié)合其他數(shù)據(jù),通過(guò)pandas.DataFrame()函數(shù)創(chuàng)建一個(gè)虛擬時(shí)間序列數(shù)據(jù)。1.3DataFrame數(shù)據(jù)創(chuàng)建Pandas.date_range()函數(shù)的具體語(yǔ)法如下所示:1.4讀取本地存儲(chǔ)的數(shù)據(jù)1.4讀取本地存儲(chǔ)的數(shù)據(jù)對(duì)于數(shù)據(jù)分析而言,獲取和利用第三方數(shù)據(jù)是比較有效的方式。目前,市場(chǎng)上有很多專注于數(shù)據(jù)生產(chǎn)的第三方公司,如國(guó)泰安(CSMAR)和萬(wàn)得資訊(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ù)等等。通過(guò)對(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ù)庫(kù)中,很多數(shù)據(jù)被存儲(chǔ)在文本文件(csv文件、txt文件)中。這是因?yàn)槲谋疚募梢詢?chǔ)存較大樣本量的數(shù)據(jù),與其他存儲(chǔ)形式相比能夠節(jié)省大量的儲(chǔ)存空間。Pandas.read_csv()是專門(mén)讀取csv文件、txt文件的函數(shù)。該函數(shù)的具體語(yǔ)法如下所示:1.4讀取本地存儲(chǔ)的數(shù)據(jù)1.4讀取本地存儲(chǔ)的數(shù)據(jù)B.讀取表格文件現(xiàn)實(shí)中,很多財(cái)經(jīng)數(shù)據(jù)會(huì)以Excel的形式存儲(chǔ)。在Python中,可以通過(guò)Pandas.read_excel()函數(shù)導(dǎo)入已有Excel文件。該函數(shù)的具體語(yǔ)法如下所示:1.4讀取本地存儲(chǔ)的數(shù)據(jù)1.4讀取本地存儲(chǔ)的數(shù)據(jù)(2)批量文件讀取在對(duì)資本市場(chǎng)進(jìn)行分析的過(guò)程中,往往需要依靠較長(zhǎng)時(shí)間跨度的數(shù)據(jù)資料作為支撐。由于單個(gè)csv和Excel文件儲(chǔ)存的數(shù)據(jù)有限,而資本市場(chǎng)交易數(shù)據(jù)量又很大,在數(shù)據(jù)分析過(guò)程中,我們經(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,通過(guò)read_csv()(或read_excel)和append()函數(shù)對(duì)所有數(shù)據(jù)進(jìn)行讀取,存入DataFrame中。1.4讀取本地存儲(chǔ)的數(shù)據(jù)方法二:

生成一個(gè)空l(shuí)ist,通過(guò)read_csv()(或read_excel)和append()函數(shù)對(duì)所有數(shù)據(jù)進(jìn)行讀取,存入list中,通過(guò)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ù)庫(kù)中下載Excel2003格式的1990-2022年資產(chǎn)負(fù)債表、利潤(rùn)表、現(xiàn)金流量表所有科目的數(shù)據(jù),對(duì)這些文件進(jìn)行批量讀取,分別形成資產(chǎn)負(fù)債表、利潤(rùn)表、現(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ù)處理過(guò)程中,原始數(shù)據(jù)可能存在著各種不利于分析及后續(xù)處理的因素,如數(shù)據(jù)缺失、異常值等。這些因素不僅會(huì)影響數(shù)據(jù)建模,更會(huì)影響數(shù)據(jù)分析的結(jié)果,故數(shù)據(jù)清洗尤為重要。

數(shù)據(jù)清洗的目的包括兩點(diǎn):第一,通過(guò)清洗使數(shù)據(jù)可用;第二,讓數(shù)據(jù)變得更適合后續(xù)的分析過(guò)程。換句話說(shuō),“臟”的數(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ù)中的缺失值。其通過(guò)返回布爾值的方式幫助我們識(shí)別數(shù)據(jù)中的缺失值:若isnull()返回值為T(mén)rue,或notnull()返回值為False,則數(shù)據(jù)中存在缺失值。數(shù)據(jù)集大小不同時(shí)可使用不同的方法查看缺失值:對(duì)于容量較小的數(shù)據(jù)集,可以使用isnull()語(yǔ)句;對(duì)于容量較大的數(shù)據(jù)集,一般采取以下兩種方式:一是可以使用info函數(shù)查看,通過(guò)info函數(shù)可以查看字段的數(shù)據(jù)類(lèi)型以及各字段下非空值的數(shù)量;二是使用對(duì)insull()輸出的布爾值求和來(lái)查看。3.2

缺失值處理

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

缺失值處理

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

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

3σ方法3σ方法是處理數(shù)據(jù)極端值最常用的方法。它是指按一定概率確定一個(gè)置信區(qū)間,將超過(guò)該置信區(qū)間的數(shù)據(jù)進(jìn)行剔除。3σ方法也存在一定局限性,在對(duì)正態(tài)或近似正態(tài)分布的數(shù)據(jù)進(jìn)行處理時(shí),它是一種以數(shù)據(jù)量充分大為前提(n>10)的方法,數(shù)據(jù)量過(guò)小時(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í),超過(guò)此范圍的概率不足5%,屬于小概率事件,可以認(rèn)為處于該區(qū)間外的數(shù)據(jù)為異常值;當(dāng)數(shù)據(jù)值集中在(μ-3σ,μ+3σ)區(qū)間時(shí),超過(guò)此范圍的概率不足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ù)的具體語(yǔ)法如下所示: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值過(guò)小時(shí),少量的鄰近異常點(diǎn)可能導(dǎo)致較低的異常點(diǎn)得分;K值過(guò)大時(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算法(基于聚類(lèi)方法的異常點(diǎn)檢測(cè))當(dāng)一個(gè)對(duì)象是基于聚類(lèi)的離群點(diǎn)時(shí),如果該對(duì)象不強(qiáng)屬于任何簇,那么該對(duì)象屬于離群點(diǎn)。K-means算法是基于聚類(lèi)的異常點(diǎn)檢測(cè)方法,其對(duì)異常點(diǎn)非常敏感,通過(guò)聚類(lèi)檢測(cè)異常點(diǎn)時(shí),常會(huì)因?yàn)楫惓|c(diǎn)而影響聚類(lèi),從而導(dǎo)致結(jié)構(gòu)缺失有效性。因此,可以使用如下方法解決該問(wèn)題:對(duì)象聚類(lèi)、刪除異常點(diǎn)、對(duì)象再次聚類(lèi)?;诰€性與接近線性復(fù)雜度的聚類(lèi)技術(shù)檢測(cè)異常點(diǎn)可能是高度有效的,但聚類(lèi)算法產(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ù)單元的過(guò)程。在數(shù)據(jù)預(yù)處理過(guò)程中,這是一項(xiàng)經(jīng)常性操作,數(shù)據(jù)去重會(huì)帶來(lái)很多好處,如節(jié)省存儲(chǔ)空間、提升寫(xiě)入性能和提高模型精度等。數(shù)據(jù)去重一般可以通過(guò)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è)布爾序列來(lái)顯示各行是否有重復(fù)行,沒(méi)有重復(fù)行顯示為False,有重復(fù)行顯示為T(mén)rue。具體語(yǔ)法如下所示:3.4

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

數(shù)據(jù)標(biāo)準(zhǔn)化在數(shù)據(jù)分析之前,有時(shí)需要將各類(lèi)數(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ù)同趨化處理和無(wú)量綱化處理兩個(gè)方面。數(shù)據(jù)同趨化處理主要解決不同性質(zhì)數(shù)據(jù)問(wèn)題,使所有指標(biāo)對(duì)測(cè)評(píng)方案的作用趨同;數(shù)據(jù)無(wú)量綱化處理主要解決數(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ù)類(lèi)型數(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ù)超過(guò)了原始數(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ù)庫(kù)中給定的中文名稱;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ì)算過(guò)程中。設(shè)A為m×n階矩陣(即m行n列),第i行j列的元素為Aij,把A的行列互相交換從而得到一個(gè)新的矩陣AT,這一過(guò)程稱為矩陣的轉(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è)過(guò)程中數(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ù)的具體語(yǔ)法如下所示:DateFrame.T是DateFrame.transpose()的別名和簡(jiǎn)寫(xiě)方法。為方便起見(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ù)的基本語(yǔ)法類(lèi)似,stack()函數(shù)將列中指定levels的列,堆疊到行索引中;unstack()函數(shù)將行中指定levels的行,堆疊到列索引中。具體語(yǔ)法如下所示: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)換為長(zhǎng)格式。melt()函數(shù)的使用效果如下圖所示,類(lèi)似于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。具體語(yǔ)法如下所示:4.3數(shù)據(jù)透視4.3.2

pivot()函數(shù)與melt()函數(shù)相反,pivot()函數(shù)是將數(shù)據(jù)轉(zhuǎn)化成行列索引,使用來(lái)自指定索引的唯一值來(lái)形成DataFrame的軸,進(jìn)行數(shù)據(jù)重塑,從而將DataFrame從長(zhǎng)格式轉(zhuǎn)換為寬格式。pivot()函數(shù)的使用效果如下圖所示,類(lèi)似于Excel中的數(shù)據(jù)透視。具體語(yǔ)法如下所示: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)用,只不過(guò)只能使用默認(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)用,只不過(guò)只能使用默認(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索引的基本類(lèi)型5.2索引設(shè)定與獲取5.3Series對(duì)象的索引與切片5.4DataFrame對(duì)象的索引與切片5.5應(yīng)用實(shí)踐索引概念:當(dāng)打開(kāi)一本書(shū),我們?nèi)绾尾拍苎杆俚恼业轿覀円业街R(shí)點(diǎn)?索引(書(shū)的目錄)為我們提供了便利。這類(lèi)似于從龐雜的關(guān)系型數(shù)據(jù)庫(kù)中找到需要的數(shù)據(jù)。通過(guò)索引,我們可以很方便的從關(guān)系型數(shù)據(jù)庫(kù)中定位數(shù)據(jù)、選擇數(shù)據(jù)和篩選數(shù)據(jù)。索引提供指向存儲(chǔ)在表的指定列中的數(shù)據(jù)值的指針,數(shù)據(jù)庫(kù)使用索引可以方便的找到特定值,然后順指針找到包含該值的行。DataFrame數(shù)據(jù)結(jié)構(gòu)屬于關(guān)系型數(shù)據(jù)對(duì)象,借助索引,我們可以實(shí)現(xiàn)數(shù)據(jù)的查詢、切片與篩選等。5.1索引的基本類(lèi)型5.1索引的基本類(lèi)型基本屬性:行索引—index列索引—columns二維數(shù)據(jù)——value5.1索引的基本類(lèi)型在DataFrame中,通過(guò)各種索引可以查找、定位和選擇我們想要的數(shù)據(jù),根據(jù)對(duì)數(shù)據(jù)的檢索方式不同,又可以分為如下幾種索引:位置索引標(biāo)簽索引布爾索引5.1索引的基本類(lèi)型5.1.1位置索引顧名思義,就是通過(guò)元素所處的相對(duì)位置進(jìn)行篩選和定位。也就是說(shuō),在DataFrame中,我們根據(jù)行索引(index)和列索引(columns)的相對(duì)位置信息來(lái)確定和檢索數(shù)據(jù)。在Python語(yǔ)言中,我們把第一行和第一列都定義為0(行或列),第二行和第二列都定義為1(行或列),并以此類(lèi)推……5.1索引的基本類(lèi)型例如,如果在一個(gè)3行4列的表格中,我們要想篩選和定位到黃色格子中的數(shù)據(jù),可以選擇輸入這個(gè)格子所在的相對(duì)位置進(jìn)行定位。5.1索引的基本類(lèi)型5.1.2標(biāo)簽索引在DataFrame數(shù)據(jù)結(jié)構(gòu)中,我們可以對(duì)表格的行設(shè)置行標(biāo)簽(Index),對(duì)表格的列設(shè)置列標(biāo)簽(Columns),對(duì)表格中數(shù)據(jù)的定位可以通過(guò)輸入其所對(duì)應(yīng)的行列標(biāo)簽實(shí)現(xiàn)。5.1索引的基本類(lèi)型我們可以將行標(biāo)簽定義為[1,2,3],將列標(biāo)簽定義為[‘w’,‘a(chǎn)’,‘n’,‘g’],那么此時(shí)通過(guò)標(biāo)簽對(duì)表格中黃色格子的數(shù)據(jù)定位為(2,‘n’)5.1索引的基本類(lèi)型5.1.3布爾索引布爾索引,又叫邏輯索引,是通過(guò)借助True或False判斷來(lái)返回?cái)?shù)據(jù)的一種方法。通過(guò)布爾索引,我們可以對(duì)DataFrame中的Value進(jìn)行邏輯判斷,然后返回條件為T(mén)rue的值,過(guò)濾掉條件為False的值。在數(shù)據(jù)框中,我們可以根據(jù)數(shù)據(jù)過(guò)濾數(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索引的基本類(lèi)型布爾值如右表所示:根據(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ù)處理的過(guò)程中,我們往往需要將其中一列或幾列數(shù)據(jù)設(shè)為索引以方便進(jìn)行數(shù)據(jù)分析。set_index()與reset_index()兩個(gè)函數(shù)可以幫助我們非常容易地完成這類(lèi)設(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ù)的基本語(yǔ)法。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ì)超過(guò)2個(gè)鍵,例如,在處理面板數(shù)據(jù)時(shí),行索引可能需要用公司代碼和會(huì)計(jì)年度構(gòu)成,而列索引可能由各類(lèi)財(cái)務(wù)指標(biāo)名稱構(gòu)成。對(duì)此,Pandas提供了Panel和Panel4D對(duì)象解決三維數(shù)據(jù)與四維數(shù)據(jù)的構(gòu)建與索引問(wèn)題。在實(shí)踐中,一般通過(guò)層級(jí)索引(hierarchicalindexing,也被稱為多級(jí)索引,multi-indexing)配合多個(gè)有不同等級(jí)(level)的一級(jí)索引一起使用,這樣可以將高維數(shù)組轉(zhuǎn)換成類(lèi)似一維Series和二維DataFrame對(duì)象的形式。表5-1展示了通過(guò)多級(jí)索引表現(xiàn)三維張量的邏輯:5.2索引設(shè)定與獲取下表展示了通過(guò)多級(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)算兩類(lèi)常用的運(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ì)象的布爾值無(wú)法確定,因此無(wú)法進(jìn)行邏輯運(yùn)算。5.2索引設(shè)定與獲?。?)Pandas的運(yùn)算函數(shù)A.query()函數(shù)query()函數(shù)使用字符串代數(shù)式的作為輸入條件進(jìn)行數(shù)據(jù)篩選,輸入的字符串使用代數(shù)式的方法表示對(duì)某列特定的過(guò)濾規(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ù),例如篩選收盤(pán)價(jià)格在16.30到16.50之間的數(shù)據(jù),如果通過(guò)邏輯判斷進(jìn)行,則需要使用復(fù)合邏輯判斷語(yǔ)句,代碼較為繁復(fù)。Between()函數(shù)能簡(jiǎn)化上述篩選過(guò)程,表達(dá)式也更具有可讀性,因此比較適合在需要編寫(xiě)許多篩選條件時(shí)使用。=5.2索引設(shè)定與獲取(3)Pandas的字符串方法在實(shí)際處理財(cái)會(huì)數(shù)據(jù)的過(guò)程中,除了要對(duì)數(shù)值進(jìn)行比較與邏輯運(yùn)算,往往還需要對(duì)字符串進(jìn)行操作和比較,提取出包含(或者不包含)某些字符的數(shù)據(jù),例如,提取出行業(yè)代碼包括“C”的公司等。使用Python的一個(gè)優(yōu)勢(shì)就是字符串處理起來(lái)比較容易,在此基礎(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)類(lèi)似,區(qū)別在于Series對(duì)象帶有顯式定義的索引。Series具有values和index兩個(gè)屬性,values代表值,index代表顯式定義的索引。Pandas會(huì)默認(rèn)用0到n-1的有序整數(shù)作為Series的index,但我們也可以根據(jù)需求自行指定各種類(lèi)型的index。Series對(duì)象可以通過(guò)列表、數(shù)組、字典創(chuàng)建,也可以通過(guò)DataFrame中某一行或者某一列創(chuàng)建。對(duì)Series對(duì)象的獲取與選擇可以通過(guò)位置索引、標(biāo)簽索引和布爾索引進(jìn)行。5.4DataFrame對(duì)象的索引與切片5.4DataFrame對(duì)象的索引與切片在數(shù)據(jù)處理時(shí),二維的DataFrame對(duì)象更加常見(jiàn)。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ù)篩選,既可以通過(guò)簡(jiǎn)單的df[]的字典形式(dictionary-style)實(shí)現(xiàn),也可以使用df.loc[]、df.iloc[]、df.at[]、df.iat[]等常用的索引器(indexer)實(shí)現(xiàn)。接下來(lái)我們將對(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索引器屬性表示索引和切片操作都依賴于顯式索引,通過(guò)行標(biāo)簽或列標(biāo)簽進(jìn)行取值,其基本語(yǔ)法如下。5.4DataFrame對(duì)象的索引與切片5.4.2loc與iloc(2)ilociloc索引器屬性指索引和切片過(guò)程中都依賴隱式索引,通過(guò)整數(shù)形式的位置索引進(jìn)行取值,其基本語(yǔ)法如下。5.4DataFrame對(duì)象的索引與切片5.4.3at與iat位置定位功能中at與iat是兩種不同的索引方法,主要用于點(diǎn)選取。5.4DataFrame對(duì)象的索引與切片5.4.4filter()在數(shù)據(jù)處理過(guò)程中,我們有時(shí)不清楚具體的行列標(biāo)簽,或者有時(shí)想要篩選出標(biāo)簽名稱符合某些規(guī)律的行列標(biāo)簽,這時(shí),filter()函數(shù)就派上了用場(chǎng),以下是該函數(shù)的基本語(yǔ)法。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ù)。與單索引類(lèi)似,上文介紹的字典形式取值與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ù)庫(kù)中導(dǎo)出的財(cái)務(wù)報(bào)表。我們以從國(guó)泰安數(shù)據(jù)庫(kù)下載的2018年-2020年的資產(chǎn)負(fù)債表和利潤(rùn)表為例,展示本節(jié)講解的各類(lèi)數(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ù)合并種類(lèi):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è)拼接合并的方法,每種方法都有自己擅長(zhǎng)的拼接方式pd.concat()函數(shù)可以沿著指定的軸將多個(gè)dataframe或者series拼接到一起通過(guò)該函數(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)建新列。一般用來(lái)縱向合并。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)行合并。每次兩兩合并。一般用來(lái)橫向合并。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ù)的分析過(guò)程中,準(zhǔn)確地合并不同來(lái)源、不同結(jié)構(gòu)的數(shù)據(jù)是必要的過(guò)程。例如,為了對(duì)公司的財(cái)務(wù)表現(xiàn)進(jìn)行綜合分析,我們往往需要合并公司的成立年份、行業(yè)、股權(quán)結(jié)構(gòu)等數(shù)據(jù),以便進(jìn)行橫向和縱向的財(cái)務(wù)指標(biāo)對(duì)比分析。下面我們以從國(guó)泰安數(shù)據(jù)庫(kù)下載的2018年-2020年的資產(chǎn)負(fù)債表、利潤(rùn)表與公司基本信息表,以及第四章來(lái)自wind數(shù)據(jù)庫(kù)的股權(quán)結(jié)構(gòu)為例,展示本節(jié)講解的各類(lèi)數(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語(yǔ)法03數(shù)據(jù)聚合與計(jì)算01概述根據(jù)所給數(shù)據(jù),根據(jù)特定標(biāo)簽或分類(lèi)變量對(duì)整體數(shù)據(jù)進(jìn)行分組,從而實(shí)現(xiàn)數(shù)據(jù)的高效分類(lèi)計(jì)算?,F(xiàn)實(shí)中,我們經(jīng)常需要根據(jù)特定標(biāo)簽或字段,對(duì)整體數(shù)據(jù)進(jìn)行分組處理和操作。例如:

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

7.1概述(一)分組假設(shè),我們有一個(gè)數(shù)據(jù),由4000多家上市公司的日交易數(shù)據(jù)構(gòu)成。我們想分別把每一家上市公司的未來(lái)一期(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語(yǔ)法在DataFrame中,可以通過(guò)Groupby來(lái)進(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語(yǔ)法(一)概述如圖所示:

7.2Groupby語(yǔ)法(一)概述7.2Groupby語(yǔ)法(二)df.groupby()基本語(yǔ)法03數(shù)據(jù)聚合與計(jì)算7.3數(shù)據(jù)聚合與計(jì)算(一)概述在DataFrame中,引用Groupby對(duì)數(shù)據(jù)分組后,接下來(lái)就是引用相應(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)過(guò)運(yùn)算后返回為新的DataFrame或Series或Scalar,最終再合并輸出為一個(gè)DataFrame?;菊Z(yǔ)法: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ì),與其他變量之間的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論