Python進(jìn)行數(shù)據(jù)科學(xué)工作的簡(jiǎn)單入門教程
Python擁有著極其豐富且穩(wěn)定的數(shù)據(jù)科學(xué)工具環(huán)境。遺憾的是,對(duì)不了解的人來(lái)說(shuō)這個(gè)環(huán)境猶如叢林一般(cue snake joke)。在這篇文章中,我會(huì)一步一步指導(dǎo)你怎么進(jìn)入這個(gè)PyData叢林。
你可能會(huì)問(wèn),很多現(xiàn)有的PyData包推薦列表怎么樣?我覺得對(duì)新手來(lái)說(shuō)提供太多的選擇可能會(huì)受不了。因此這里不會(huì)提供推薦列表,我要討論的范圍很窄,只集中于10%的工具,但它們可以完成你90%的工作。當(dāng)你掌握這些必要的工具后,你就可以瀏覽PyData工具的長(zhǎng)列表了,選擇自己接下來(lái)要使用的。
值得一提的是,我介紹的這幾個(gè)工具可以讓你完成一個(gè)數(shù)據(jù)科學(xué)家日常的絕大部分工作了(比如數(shù)據(jù)輸入輸出、數(shù)據(jù)再加工以及數(shù)據(jù)分析)。
安裝
經(jīng)常會(huì)有人過(guò)來(lái)和我說(shuō)“我聽說(shuō)Python很擅長(zhǎng)處理數(shù)據(jù)科學(xué),所以我想學(xué)一下。但是安裝Python和所有其他模塊就耗費(fèi)了兩天時(shí)間”。安裝Python是很合理的,因?yàn)槟阋盟?,但是?dāng)你不知道真正需要哪些其他工具時(shí)就手動(dòng)安裝所有的PyData工具,這確實(shí)是一項(xiàng)大工程啊。所以我強(qiáng)烈反對(duì)這樣做。
幸運(yùn)的是,Continuum的一伙人創(chuàng)建了Python發(fā)行版Anaconda,它包含了大部分PyData工具包。默認(rèn)沒(méi)有的模塊也可以輕松地通過(guò)GUI安裝。這個(gè)發(fā)行版適用于所有主流平臺(tái)。這樣無(wú)需耗費(fèi)兩天安裝了,可以直接使用它。
IPython Notebook
Python安裝后,大部分人直接啟動(dòng)并開始學(xué)習(xí)。這很合理,但遺憾的是又大錯(cuò)特錯(cuò)了。我沒(méi)見過(guò)直接在Python命令行中運(yùn)行Python科學(xué)計(jì)算環(huán)境的(因人而異)。相反,可以使用IPython,特別是IPython Notebook,它們都是特別強(qiáng)大的Python shell,被廣泛地使用在PyData領(lǐng)域中。我強(qiáng)烈建議你直接使用IPython Notebook(IPyNB)而不用為其他事所煩擾,你不會(huì)后悔的。簡(jiǎn)而言之,IPyNB是一個(gè)通過(guò)瀏覽器訪問(wèn)的Python shell。它允許你混合編輯代碼、文本和圖形(甚至是交互對(duì)象)。本文就是在IPyNB中完成的。在Python的會(huì)議中,幾乎所有的演講都使用IPython Notebook。Anaconda中預(yù)裝了IPyNB,可以直接使用。下面看下它是什么樣的:
In [1]:
print('Hello World')
Hello World
IPyNB發(fā)展很快——每次在會(huì)議中聽(IPyNB的)核心開發(fā)人員演講時(shí),我總被他們想出的新功能所震撼。要了解它的一些先進(jìn)功能,可以看看下面這個(gè)關(guān)于IPython小工具的簡(jiǎn)短教程。這些小工具可以讓你使用滑動(dòng)條交互地控制繪圖:
In [1]:
from IPython.display import YouTubeVideo
YouTubeVideo('wxVx54ax47s') # 沒(méi)錯(cuò),它也可以嵌入youtube視頻
Out[1]:
6. IPython Widgets – IPython Notebook Tutorial
Pandas
通常,大家會(huì)建議你先學(xué)習(xí)NumPy(讀作num-pie,不是num-pee),一個(gè)支持多維數(shù)組的庫(kù)。幾年前肯定得這樣,但現(xiàn)在我?guī)缀醪皇褂肗umPy。因?yàn)镹umPy越來(lái)越成為一個(gè)被其他庫(kù)所使用核心庫(kù),這些庫(kù)通常具有更優(yōu)雅的接口。因此,Pandas成為了處理數(shù)據(jù)所主要使用的庫(kù)。它可以以各種格式(包括數(shù)據(jù)庫(kù))輸入輸出數(shù)據(jù)、執(zhí)行join以及其他SQL類似的功能來(lái)重塑數(shù)據(jù)、熟練地處理缺失值、支持時(shí)間序列、擁有基本繪圖功能和統(tǒng)計(jì)功能,等等還有很多。對(duì)它所有的特性來(lái)說(shuō),肯定有一個(gè)學(xué)習(xí)曲線,但我強(qiáng)烈去建議你先看一下大部分文檔。你所投入的時(shí)間將使你的數(shù)據(jù)再加工過(guò)程更高效,這會(huì)帶來(lái)上千倍的回報(bào)。這里有一些快速技巧會(huì)讓你胃口大開的:
In [18]:
import pandas as pd
df = pd.DataFrame({ 'A' : 1.,
'B' : pd.Timestamp('20130102'),
'C' : pd.Series(1, index=list(range(4)), dtype='float32'),
'D' : pd.Series([1, 2, 1, 2], dtype='int32'),
'E' : pd.Categorical(["test", "train", "test", "train"]),
'F' : 'foo' })
In [19]:
Out[19]:
A B C D E F 0 1 2013-01-02 1 1 test foo 1 1 2013-01-02 1 2 train foo 2 1 2013-01-02 1 1 test foo 3 1 2013-01-02 1 2 train foo
可以通過(guò)列名來(lái)獲取某一列:
In [17]:
df.B
Out[17]:
0 2013-01-02
1 2013-01-02
2 2013-01-02
3 2013-01-02
Name: B, dtype: datetime64[ns]
Compute the sum of D for each category in E:
按E分類,每類對(duì)D求和:
In [21]:
df.groupby('E').sum().D
Out[21]:
E
test 2
train 4
Name: D, dtype: int32
使用NumPy(或者笨重的Matlab)達(dá)到同樣的目的會(huì)很麻煩。
還有非常多的用法。不相信的話可以看一下這個(gè)教程“10 minutes to pandas”。上面的例子也來(lái)自這個(gè)教程。
Seaborn
Matplotlib是Python主要的繪圖庫(kù)。但是,我不建議你直接使用它,原因與開始不推薦你使用NumPy是一樣的。雖然Matplotlib很強(qiáng)大,它本身就很復(fù)雜,你的圖經(jīng)過(guò)大量的調(diào)整才能變精致。因此,作為替代,我推薦你一開始使用Seaborn。Seaborn本質(zhì)上使用Matplotlib作為核心庫(kù)(就像Pandas對(duì)NumPy一樣)。我將簡(jiǎn)短地描述下seaborn的優(yōu)點(diǎn)。具體來(lái)說(shuō),它可以:
- 默認(rèn)情況下就能創(chuàng)建賞心悅目的圖表。(只有一點(diǎn),默認(rèn)不是jet colormap)
- 創(chuàng)建具有統(tǒng)計(jì)意義的圖
- 能理解pandas的DataFrame類型,所以它們一起可以很好地工作。
雖然anaconda預(yù)裝了pandas,卻沒(méi)安裝seaborn??梢酝ㄟ^(guò)conda install seaborn輕松地安裝。
具有統(tǒng)計(jì)意義的圖
In [5]:
%matplotlib inline # IPython magic to create plots within cells
In [7]:
import seaborn as sns
# Load one of the data sets that come with seaborn
tips = sns.load_dataset("tips")
sns.jointplot("total_bill", "tip", tips, kind='reg');

如你所見,僅通過(guò)一行代碼,我們就創(chuàng)建了一個(gè)漂亮復(fù)雜的統(tǒng)計(jì)圖,其中包含擁有置信區(qū)間的最擬合回歸直線、邊界圖,以及相關(guān)系數(shù)。使用matplotlib重新繪制這幅圖的話需要相當(dāng)多的(丑陋)代碼,包括調(diào)用scipy執(zhí)行線性回歸并手動(dòng)利用線性回歸方程繪制直線(我甚至想不出怎么在邊界繪圖,怎么計(jì)算置信區(qū)間)。上面和下面的例子都摘自教程“the tutorial on quantitative linear models”。
與Pandas的DataFrame很好地工作
數(shù)據(jù)有自己的結(jié)構(gòu)。通常我們感興趣的包含不同的組或類(這種情況下使用pandas中g(shù)roupby的功能會(huì)讓人感到很神奇)。比如tips(小費(fèi))的數(shù)據(jù)集是這樣的:
In [9]:
tips.head() Out[9]: total_bill tip sex smoker day time size 0 16.99 1.01 Female No Sun Dinner 2 1 10.34 1.66 Male No Sun Dinner 3 2 21.01 3.50 Male No Sun Dinner 3 3 23.68 3.31 Male No Sun Dinner 2 4 24.59 3.61 Female No Sun Dinner 4
我們可能想知道吸煙者給的小費(fèi)是否與不吸煙的人不同。沒(méi)有seaborn的話,這需要使用pandas的groupby功能,并通過(guò)復(fù)雜的代碼繪制線性回歸直線。使用seaborn的話,我們可以給col參數(shù)提供列名,按我們的需要?jiǎng)澐謹(jǐn)?shù)據(jù):
In [11]:
sns.lmplot("total_bill", "tip", tips, col="smoker");

很整潔吧?
隨著你研究得越深,你可能想更細(xì)粒度地控制這些圖表的細(xì)節(jié)。因?yàn)閟eaborn只是調(diào)用了matplotlib,那時(shí)你可能會(huì)想學(xué)習(xí)這個(gè)庫(kù)。然而,對(duì)絕大部分工作來(lái)說(shuō)我還是喜歡使用seaborn。
總結(jié)
這篇文章的想法是通過(guò)提供部分包來(lái)最大化新手使用Python處理數(shù)據(jù)科學(xué)的效率。
- 掌握python polars庫(kù)進(jìn)行高效高速的數(shù)據(jù)處理。
- python Polars庫(kù)的使用簡(jiǎn)介
- Python mlxtend庫(kù)數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)補(bǔ)充工具功能探索
- 盤點(diǎn)20個(gè)Python數(shù)據(jù)科學(xué)庫(kù)神器打造數(shù)據(jù)魔法世界
- Python?Prometheus接口揭秘?cái)?shù)據(jù)科學(xué)新技巧
- Python 數(shù)據(jù)科學(xué) Matplotlib圖庫(kù)詳解
- 3個(gè)用于數(shù)據(jù)科學(xué)的頂級(jí)Python庫(kù)
- python polars數(shù)據(jù)科學(xué)庫(kù)對(duì)比Pandas優(yōu)勢(shì)分析
相關(guān)文章
python3.7環(huán)境下安裝Anaconda的教程圖解
這篇文章主要介紹了python3.7環(huán)境下安裝Anaconda的教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
Python爬取網(wǎng)頁(yè)中的圖片(搜狗圖片)詳解
沒(méi)想到python是如此強(qiáng)大,令人著迷,以前看見圖片總是一張一張復(fù)制粘貼,現(xiàn)在好了,學(xué)會(huì)python就可以用程序?qū)⒁粡垙垐D片,保存下來(lái)。下面這篇文章主要給大家介紹了利用Python3.6爬取搜狗圖片網(wǎng)頁(yè)中圖片的相關(guān)資料,需要的朋友可以參考下。2017-03-03
Python實(shí)現(xiàn)對(duì)adb命令封裝
這篇文章主要介紹了Python實(shí)現(xiàn)對(duì)adb命令封裝,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
python密碼學(xué)文件解密實(shí)現(xiàn)教程
這篇文章主要為大家介紹了python密碼學(xué)文件解密實(shí)現(xiàn)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

