中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

帶你和Python與R一起玩轉(zhuǎn)數(shù)據(jù)科學(xué): 探索性數(shù)據(jù)分析(附代碼)

2018-08-06    來(lái)源:raincent

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用
內(nèi)容簡(jiǎn)介

本系列將介紹如何在現(xiàn)在工作中用兩種最流行的開(kāi)源平臺(tái)玩轉(zhuǎn)數(shù)據(jù)科學(xué)。本文先來(lái)看一看數(shù)據(jù)分析過(guò)程中的關(guān)鍵步驟 – 探索性數(shù)據(jù)分析(Exploratory Data Analysis,EDA)。

探索性數(shù)據(jù)分析發(fā)生在數(shù)據(jù)收集和數(shù)據(jù)清理之后,而在數(shù)據(jù)建模和分析結(jié)果可視化展現(xiàn)之前。然而,這是一個(gè)可反復(fù)的過(guò)程。做完某種EDA后,我們可以嘗試建立一些數(shù)據(jù)模型或者生成一些可視化結(jié)果。同時(shí),根據(jù)最新的分析結(jié)果我們又可以進(jìn)行進(jìn)一步的EDA,等等。所有的這些都是為了更快地找到線索,而不用糾結(jié)在數(shù)據(jù)細(xì)節(jié)和美觀上。EDA的主要目的是為了了解我們的數(shù)據(jù),了解它的趨勢(shì)和質(zhì)量,同時(shí)也是為了檢查我們的假設(shè)甚至開(kāi)始構(gòu)建我們的假設(shè)算法。

了解了以上內(nèi)容,我們將解釋如何用描述統(tǒng)計(jì)學(xué)、基本繪圖和數(shù)據(jù)框來(lái)回答一些問(wèn)題,同時(shí)指導(dǎo)我們做進(jìn)一步的數(shù)據(jù)分析。

準(zhǔn)備數(shù)據(jù)

我們將繼續(xù)使用在介紹數(shù)據(jù)框時(shí)已經(jīng)裝載過(guò)的相同的數(shù)據(jù)集。因此你可以接著數(shù)據(jù)框相關(guān)教程繼續(xù)這個(gè)章節(jié)。

我們要回答的問(wèn)題

在任何的數(shù)據(jù)分析過(guò)程中,總有一個(gè)或多個(gè)問(wèn)題是我們要回答的。定義這些問(wèn)題,是整個(gè)數(shù)據(jù)分析過(guò)程中最基本也是最重要的一個(gè)步驟。因?yàn)槲覀円谖覀兊慕Y(jié)核病數(shù)據(jù)集中做探索性數(shù)據(jù)分析,有一些問(wèn)題需要我們回答:

哪些國(guó)家擁有最高傳染性結(jié)核病發(fā)病率?

從1990年到2007年世界結(jié)核病的總體趨勢(shì)是什么?

哪些國(guó)家沒(méi)有符合這個(gè)趨勢(shì)?

還有哪些關(guān)于這個(gè)疾病的真相可以從我們的數(shù)據(jù)中得到?

描述性統(tǒng)計(jì)

Python

在Python中,對(duì)一個(gè)pandas.DataFrame對(duì)象的基本的描述性統(tǒng)計(jì)方法是describe()。它等同于R語(yǔ)言中data.frame的summary()方法。

 

 

這里列出了所有列的統(tǒng)計(jì)信息,我們可以用以下方法來(lái)訪問(wèn)每個(gè)列的匯總信息:

 

 

Pandas包中有多得可怕的描述性統(tǒng)計(jì)方法。其中一部分已經(jīng)包含在了我們的summary對(duì)象中,但是還有更多的方法不在其中。在接下來(lái)的教程中我們將好好的利用它們來(lái)更好的了解我們的數(shù)據(jù)。

例如,我們可以得到西班牙(Spain)每年結(jié)核病發(fā)病量的變化百分比:

 

 

同時(shí)從以上結(jié)果得到最大值:

 

 

也可以對(duì)英國(guó)(United Kingdom)做同樣的操作:

 

 

如果我們要了解索引值(year),我們用argmax 方法(或Pandas新版本中的idmax調(diào)用方法)如下:

 

 

也就是說(shuō),1998年和1992年分別是西班牙和英國(guó)肺結(jié)核發(fā)病量增長(zhǎng)最糟糕的年。

R

在R語(yǔ)言中基本的描述性統(tǒng)計(jì)方法,如我們說(shuō)過(guò)的,是summary()。

 

 

這個(gè)方法返回一個(gè)表格對(duì)象,使我們擁有了一個(gè)包含各列統(tǒng)計(jì)信息的數(shù)據(jù)框。表格對(duì)象有利于我們觀察數(shù)據(jù),但作為數(shù)據(jù)框卻不利于我們?cè)L問(wèn)和索引數(shù)據(jù);旧,我們是把它當(dāng)作矩陣,通過(guò)坐標(biāo)位來(lái)訪問(wèn)其中的數(shù)據(jù)。通過(guò)這種方法,如果我們要得到第一列,Afghanistan的相關(guān)數(shù)據(jù),我們?cè)撨@樣做:

 

 

有個(gè)竅門可以通過(guò)列名訪問(wèn)數(shù)據(jù),那就是將原始數(shù)據(jù)框中的列名和which()方法一起使用。我們還可以在結(jié)果集上構(gòu)建一個(gè)新的數(shù)據(jù)框。

 

 

R做為一種函數(shù)式語(yǔ)言,我們可以對(duì)向量使用函數(shù)方法例如sum、 mean、 sd等等。記住一個(gè)數(shù)據(jù)框就是一個(gè)向量的列表(也就是說(shuō)各個(gè)列都是一個(gè)值的向量),如此我們便可以很容易地用這些函數(shù)作用于列上。最終我們將這些函數(shù)和lapply或sapply一起使用并作用于數(shù)據(jù)框的多列數(shù)據(jù)上。

不管怎樣,在R語(yǔ)言中有一家族的函數(shù)可以作用于列數(shù)據(jù)或行數(shù)據(jù)上以直接得到均值或和值。這樣做比用apply函數(shù)更有效,并且還允許我們將他們不光用在列數(shù)據(jù)上,更可用在行數(shù)據(jù)上。例如,你輸入‘?colSums’命令,幫助頁(yè)面會(huì)彈出所有這些函數(shù)的描述性說(shuō)明。

比如我們想得到每年的平均病發(fā)量,我們只需要一個(gè)簡(jiǎn)單的函數(shù)調(diào)用:

 

 

圖表繪制

在這個(gè)章節(jié)中我們要看一看在Python/Pandas和R中的基本的繪圖制表功能。然而,還有其它如ggplot2,這樣繪圖功能更強(qiáng)大語(yǔ)言包可以選擇。ggplot2最初是為R語(yǔ)言創(chuàng)建的,Yhat的人又提供了它的Python語(yǔ)言的實(shí)現(xiàn)。

Python

Pandas包中DataFrame對(duì)象實(shí)現(xiàn)的即時(shí)可用的作圖方法有3個(gè)之多第一個(gè)方法是一個(gè)基本的線圖繪制,作用于索引中的連續(xù)變量。當(dāng)我們用IPython notebook工具繪圖時(shí),這第一條線也許我們會(huì)用得著:

 

 

或者我們可以用箱線圖來(lái)得到給定連續(xù)變量的摘要視圖:

 

 

還有一個(gè)histogram()方法,但是我們現(xiàn)在還不能將它作用于我們這種類型的數(shù)據(jù)。

R

和ggplot2相比,R語(yǔ)言的基礎(chǔ)繪圖不是非常精密復(fù)雜,但它還是功能強(qiáng)大同時(shí)又操作便利的。它的很多數(shù)據(jù)類型都自定義并實(shí)現(xiàn)了plot()方法,可以允許我們簡(jiǎn)單地調(diào)用方法對(duì)它們進(jìn)行繪圖。然而并不總是如此便利,更多的情況是我們需要將正確的元素集傳給我們的基礎(chǔ)繪圖函數(shù)。

正像之前用Python/Pandas繪制線型圖,我們也從基礎(chǔ)的線型圖繪制開(kāi)始:

 

 

 

 

你可以比較出在Pandas中繪制三條連續(xù)變量線型圖是多么容易,而用R的基礎(chǔ)繪圖繪制相同的圖代碼是多么冗長(zhǎng)。我們至少需要三個(gè)函數(shù)調(diào)用,先是為了圖形和線,然后還有圖的標(biāo)注,等等。R語(yǔ)言的基本繪圖的真正用意就是繪制快速而不完善的圖。

現(xiàn)在讓我們來(lái)使用箱線圖:

 

 

這是一段簡(jiǎn)短的箱線圖代碼,我們甚至沒(méi)有要圖的顏色和圖例說(shuō)明。

回答問(wèn)題

現(xiàn)在讓我們開(kāi)始正真好玩的章節(jié)。一旦我們了解了我們的工具(從之前的數(shù)據(jù)框教程到當(dāng)下這個(gè)教程),我們就可以用它們來(lái)回答關(guān)于傳染性肺結(jié)核病在全球的發(fā)病率和盛行率的一些問(wèn)題。

問(wèn)題:我們想知道,每年,哪個(gè)國(guó)家存在的、新的傳染性肺結(jié)核病例最多?

Python

如果我們只是想得到病例最多的國(guó)家,我們可以利用apply和argmax函數(shù)。記住,默認(rèn)的,apply作用于列數(shù)據(jù)(在我們的例子里是國(guó)家列),而我們希望它作用于每一年。如此這樣,我們需要在使用數(shù)據(jù)框之前顛倒它的行列位置,或傳入?yún)?shù)axis=1。

 

 

但是這樣做過(guò)分簡(jiǎn)單了。另外,我們要得到的是位于最后四分區(qū)的國(guó)家。而我們首先要做的是找出全球的總的發(fā)病趨勢(shì)。

全球傳染性肺結(jié)核發(fā)病趨勢(shì):

為了探索全球總趨勢(shì),我們需要對(duì)三個(gè)數(shù)據(jù)集中所有國(guó)家的每年的數(shù)據(jù)分別求和。

 

 

現(xiàn)在我們要?jiǎng)?chuàng)建一個(gè)新的數(shù)據(jù)框,里面包含各個(gè)之前得到的和集,然后用數(shù)據(jù)框的plot()方法進(jìn)行繪圖。

 

 

看上去全球每十萬(wàn)人中現(xiàn)存病例總數(shù)歷年來(lái)呈整體下降趨勢(shì)。然而新的病例總數(shù)呈上升趨勢(shì),雖然2005年后好像有所下降。所以怎么可能在新的病例總數(shù)增長(zhǎng)的情況下現(xiàn)存病例總數(shù)下降呢?其中一個(gè)原因可能是我們可以在圖中觀察到的上升的每十萬(wàn)人的因病死亡人數(shù),但是我們不得不考慮其主要原因是因?yàn)槿藗兊玫搅酥委煻謴?fù)了健康。康復(fù)率加上死亡率大于新的病發(fā)率?傊瓷先バ碌陌l(fā)病率增加了,而同時(shí)我們治愈它們的水平也更好了。我們需要改進(jìn)預(yù)防措施和傳染病控制能力。

超出整體趨勢(shì)的國(guó)家

所以之前是全球作為一個(gè)整體的總趨勢(shì)。那么哪些國(guó)家呈現(xiàn)不同的趨勢(shì)呢(更糟糕)?為了找出這些國(guó)家,首先我們需要了解每個(gè)國(guó)家平均年死亡率的分布情況。

 

 

我們可以畫(huà)出這些分布圖從而了解這些國(guó)家年平均分布情況。

 

 

我們要得到那些概率大于四分位間距(IQR、50%)1.5倍的國(guó)家。

先得到上限值:

 

 

現(xiàn)在我們可以利用這些值來(lái)得到從1990年到2007年平均概率大于這些上限值的國(guó)家。

 

 

我們有多少比例的國(guó)家是超出整體趨勢(shì)的?對(duì)于死亡率:

 

 

對(duì)于存在病率(患病率):

 

 

對(duì)于新病率(發(fā)生率):

 

 

現(xiàn)在我們可以用這些指標(biāo)來(lái)對(duì)我們?cè)嫉臄?shù)據(jù)框做篩選。

 

 

這是一個(gè)嚴(yán)肅的事情。根據(jù)傳染性肺結(jié)核病的分布,我們有超過(guò)全球三分之一的國(guó)家在現(xiàn)存病率、新病率和死亡率上超出普遍概率。然而如果我們以四分位間距(IQR)的5倍為上限呢?讓我們重復(fù)之前的過(guò)程。

 

 

那么現(xiàn)在的比例是多少呢?

 

 

讓我們得到相應(yīng)的數(shù)據(jù)框。

 

 

讓我們把注意力放在傳染病控制上,來(lái)看一看這個(gè)新的數(shù)據(jù)框:

 

 

讓我們生成一些圖表來(lái)加深一下印象。

 

 

我們有了22個(gè)國(guó)家,在這些國(guó)家中新病的年平均率大于全球新病率中間值的5倍。讓我們創(chuàng)建一個(gè)國(guó)家代表了這22個(gè)國(guó)家的平均值:

 

 

現(xiàn)在讓我們?cè)賱?chuàng)建一個(gè)國(guó)家代表了其它國(guó)家的平均值:

 

 

現(xiàn)在讓我們用這兩個(gè)平均國(guó)家繪圖:

 

 

新病率的增長(zhǎng)趨勢(shì)在平均特超國(guó)家(超出上限的22個(gè)國(guó)家的平均值代表)上非常顯著,這么顯著的趨勢(shì)很難在改善國(guó)家(22個(gè)國(guó)家之外的其它國(guó)家的平均值代表)中觀察到。在90年代,這些國(guó)家的傳染性肺結(jié)核病的發(fā)病數(shù)量有一個(gè)可怕的上漲。然而讓我們看一下真實(shí)的數(shù)據(jù)。

 

 

根據(jù)這張圖,改善和異常國(guó)家的發(fā)病率增長(zhǎng)趨勢(shì)在同一時(shí)間發(fā)生了相同的波動(dòng)和恢復(fù),并且在大約2002年的時(shí)候有事情發(fā)生。在下一章節(jié)中我們將嘗試找出到底發(fā)生了什么。

R

我們已經(jīng)了解到在R中我們可以用max函數(shù)作用于數(shù)據(jù)框的列上以得到列的最大值。額外的,我們還可以用which.max來(lái)得到最大值的位置(等同于在Pandas中使用argmax)。如果我們使用行列換位的數(shù)據(jù)框,我們可以用函數(shù)lapply或sapply對(duì)每一個(gè)年列進(jìn)行操作,然后得到一列表或一向量的指標(biāo)值(我們將會(huì)用sapply函數(shù)返回一個(gè)向量)。我們只需要做一點(diǎn)微調(diào),利用一個(gè)包含國(guó)家名的向量來(lái)使操作返回國(guó)家名而不是國(guó)家所在的位置。

 

 

全球傳染性肺結(jié)核發(fā)病趨勢(shì):

再次,為了探索全球的總趨勢(shì),我們需要將三個(gè)數(shù)據(jù)集中的所有國(guó)家的數(shù)值按年相加。

但是首先我們需要加載另外兩個(gè)數(shù)據(jù)集以得到死亡數(shù)量和新病數(shù)量。

 

 

同時(shí)現(xiàn)在是按行求和。我們需要將返回的數(shù)字向量轉(zhuǎn)化為數(shù)據(jù)框。

 

 

現(xiàn)在我們可以用目前我們已經(jīng)學(xué)到的技巧來(lái)繪出各線圖。為了得到一個(gè)包含各總數(shù)的向量以傳給每個(gè)繪圖函數(shù),我們使用了以列名為索引的數(shù)據(jù)框。

 

 

從上圖中得到的結(jié)論顯然和我們用Python時(shí)得到的相同。

超出整體趨勢(shì)的國(guó)家:

所以哪些國(guó)家是超出整體趨勢(shì)的呢(更糟糕)?再一次,為了找出答案,我們首先需要了解每個(gè)國(guó)家的年平均分布情況。我們用函數(shù)colMeans 以達(dá)到目的。

 

 

我們可以繪制出分布圖以對(duì)各個(gè)國(guó)家的年平均值的分布情況有所了解。我們對(duì)單個(gè)國(guó)家不是非常感興趣,我們感興趣的是分布情況本身。

 

image

 

 

 

再一次我們可以在圖上看到有三部分走勢(shì),開(kāi)始部分緩慢地上升,接下來(lái)第二部分上升走勢(shì),最后一個(gè)尖起的峰值明顯地不同于其它部分。

這次讓我們跳過(guò)1.5倍的四分位間距部分,直接來(lái)到5倍四分位間距。在R語(yǔ)言中,我們要采用不同的方法。我們將使用函數(shù)quantile()來(lái)得到四分位間距從而判斷離群值的臨界值。

因?yàn)槲覀円呀?jīng)從Python章節(jié)中知道了結(jié)果,讓我們只對(duì)新病率找出離群國(guó)家,如此一來(lái)我們要再次繪制之前的圖。

 

 

離群比例:

 

 

讓我們從中得到一個(gè)數(shù)據(jù)框,只包含離群的國(guó)家信息。

 

 

現(xiàn)在我們已經(jīng)準(zhǔn)備好了繪制圖形。

 

 

我們可以明顯看到使用Pandas基本繪圖與R基本繪圖的優(yōu)勢(shì)!

到目前為止結(jié)果是相符的。我們有22個(gè)國(guó)家,平均每年的新病例數(shù)大于分布中值的5倍。讓我們來(lái)創(chuàng)建一個(gè)國(guó)家代表這個(gè)平均值,在這里我們使用rowMeans()。

 

 

現(xiàn)在讓我們創(chuàng)建一個(gè)國(guó)家代表其他國(guó)家。

 

 

現(xiàn)在將這兩個(gè)國(guó)家放在一起。

 

 

谷歌一下關(guān)于肺結(jié)核病的事件以及日期

在此章節(jié)中我們只用Python來(lái)分析。關(guān)于谷歌檢索,其實(shí)我們只是直接訪問(wèn)維基百科關(guān)于這個(gè)疾病的目錄(https://en.wikipedia.org/wiki/Tuberculosis#Epidemiology)。

在疫情章節(jié)我們可以找到如下內(nèi)容:

肺結(jié)核病的發(fā)病總數(shù)從2005年開(kāi)始下降,而新病發(fā)現(xiàn)量則從2002年開(kāi)始就已經(jīng)下降了。

這一點(diǎn)已經(jīng)被我們之前的分析證實(shí)了。

中國(guó)取得了尤其顯著的進(jìn)展,從1990年到2010年,傳染性肺結(jié)核病的死亡率下降了大約80%。讓我們來(lái)看一下:

 

 

在2007年,預(yù)估傳染性肺結(jié)核病的新病發(fā)生率最高的國(guó)家是斯威士蘭,10萬(wàn)人中有1200起病例。

 

 

在維基百科中還有更多的發(fā)現(xiàn)是我們可以通過(guò)分析這些Google數(shù)據(jù)或其它Gapminder提供的數(shù)據(jù)來(lái)證實(shí)的。例如,傳染性肺結(jié)核病和艾滋病經(jīng)常被關(guān)聯(lián)起來(lái),同它們一起關(guān)聯(lián)起來(lái)還有貧困水平。將它們相關(guān)的數(shù)據(jù)集關(guān)聯(lián)起來(lái),探索它們各自的變化趨勢(shì)將會(huì)很有意思。讀者們可以去試著分析一下并和我們分享你們的發(fā)現(xiàn)。

總結(jié)

探索性數(shù)據(jù)分析是數(shù)據(jù)分析的一個(gè)關(guān)鍵步驟。在此階段我們開(kāi)始使接下來(lái)的工作逐漸成型。它發(fā)生于任一數(shù)據(jù)可視化或機(jī)器學(xué)習(xí)工作之前,向我們展示我們的數(shù)據(jù)或假設(shè)的好壞。

傳統(tǒng)上,R語(yǔ)言是大多數(shù)探索性數(shù)據(jù)分析工作選擇的武器,雖然使用其它的展示能力更佳的繪圖程式庫(kù)是相當(dāng)方便的,如gglot2。事實(shí)上,當(dāng)我們用Python時(shí),Pandas中所包含的基本的繪圖功能使這個(gè)步驟更加清晰和便捷。不管怎樣,我們這里回答的這些問(wèn)題都非常簡(jiǎn)單而且沒(méi)有包含多變量和數(shù)據(jù)編碼。在這種復(fù)雜的情況下,一個(gè)進(jìn)階的程式庫(kù)如ggplot2將大放光彩。除了能給我們更漂亮的繪圖之外,它的豐富的變現(xiàn)手法和重用性將大大地節(jié)省我們的時(shí)間。

盡管我們的分析和圖表都如此簡(jiǎn)單,我們依然能夠證明一個(gè)論點(diǎn),那就是像肺結(jié)核這樣的疾病引發(fā)的人道危機(jī)是多么嚴(yán)重,特別是考慮到這種疾病在更加發(fā)達(dá)的國(guó)家被相對(duì)更好地控制了。我們已經(jīng)看到了一些編程技巧和大量的求知欲,從而允許我們?cè)诖酥辖⒁恍┱J(rèn)知和其它的全球化問(wèn)題。

本文作者:Jose A Dianes

標(biāo)簽: Google 代碼 谷歌 數(shù)據(jù)分析

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:Google計(jì)劃在新加坡建第三座數(shù)據(jù)中心 投資總額增至8.5億美元

下一篇:數(shù)據(jù)中心如何從模塊化走向智能化?