Python和數(shù)據(jù)科學(xué)的起步指南

Python和數(shù)據(jù)科學(xué)的起步指南 ipython notebook

Python擁有著極其豐富且穩(wěn)定的數(shù)據(jù)科學(xué)工具環(huán)境揭北。遺憾的是,對不了解的人來說這個環(huán)境猶如叢林一般(cue snake joke)千贯。在這篇文章中,我會一步一步指導(dǎo)你怎么進(jìn)入這個PyData叢林窖梁。

你可能會問瞪慧,很多現(xiàn)有的PyData包推薦列表怎么樣?我覺得對新手來說提供太多的選擇可能會受不了茅主。因此這里不會提供推薦列表舞痰,我要討論的范圍很窄,只集中于10%的工具诀姚,但它們可以完成你90%的工作响牛。當(dāng)你掌握這些必要的工具后,你就可以瀏覽PyData工具的長列表了学搜,選擇自己接下來要使用的娃善。

值得一提的是,我介紹的這幾個工具可以讓你完成一個數(shù)據(jù)科學(xué)家日常的絕大部分工作了(比如數(shù)據(jù)輸入輸出瑞佩、數(shù)據(jù)再加工以及數(shù)據(jù)分析)聚磺。

安裝

經(jīng)常會有人過來和我說“我聽說Python很擅長處理數(shù)據(jù)科學(xué),所以我想學(xué)一下炬丸。但是安裝Python和所有其他模塊就耗費了兩天時間”瘫寝。安裝Python是很合理的,因為你要用它稠炬,但是當(dāng)你不知道真正需要哪些其他工具時就手動安裝所有的PyData工具焕阿,這確實是一項大工程啊。所以我強烈反對這樣做首启。

幸運的是暮屡,Continuum的一伙人創(chuàng)建了Python發(fā)行版Anaconda,它包含了大部分PyData工具包毅桃。默認(rèn)沒有的模塊也可以輕松地通過GUI安裝褒纲。這個發(fā)行版適用于所有主流平臺准夷。這樣無需耗費兩天安裝了,可以直接使用它莺掠。

IPython Notebook

Python安裝后衫嵌,大部分人直接啟動并開始學(xué)習(xí)。這很合理彻秆,但遺憾的是又大錯特錯了楔绞。我沒見過直接在Python命令行中運行Python科學(xué)計算環(huán)境的(因人而異)。相反唇兑,可以使用IPython酒朵,特別是IPython Notebook,它們都是特別強大的Python shell幔亥,被廣泛地使用在PyData領(lǐng)域中耻讽。我強烈建議你直接使用IPython Notebook(IPyNB)而不用為其他事所煩擾,你不會后悔的帕棉。簡而言之针肥,IPyNB是一個通過瀏覽器訪問的Python shell。它允許你混合編輯代碼香伴、文本和圖形(甚至是交互對象)慰枕。本文就是在IPyNB中完成的。在Python的會議中即纲,幾乎所有的演講都使用IPython Notebook具帮。Anaconda中預(yù)裝了IPyNB,可以直接使用低斋。下面看下它是什么樣的:

In [1]:

1

2print('Hello World')

Hello World

IPyNB發(fā)展很快——每次在會議中聽(IPyNB的)核心開發(fā)人員演講時蜂厅,我總被他們想出的新功能所震撼。要了解它的一些先進(jìn)功能膊畴,可以看看下面這個關(guān)于IPython小工具的簡短教程掘猿。這些小工具可以讓你使用滑動條交互地控制繪圖:

In [1]:

1

2fromIPython.displayimportYouTubeVideo

YouTubeVideo('wxVx54ax47s')# 沒錯,它也可以嵌入youtube視頻

Out[1]:

6. IPython Widgets – IPython Notebook Tutorial

Pandas

通常唇跨,大家會建議你先學(xué)習(xí)NumPy(讀作num-pie稠通,不是num-pee),一個支持多維數(shù)組的庫买猖。幾年前肯定得這樣改橘,但現(xiàn)在我?guī)缀醪皇褂肗umPy。因為NumPy越來越成為一個被其他庫所使用核心庫玉控,這些庫通常具有更優(yōu)雅的接口飞主。因此,Pandas成為了處理數(shù)據(jù)所主要使用的庫。它可以以各種格式(包括數(shù)據(jù)庫)輸入輸出數(shù)據(jù)既棺、執(zhí)行join以及其他SQL類似的功能來重塑數(shù)據(jù)讽挟、熟練地處理缺失值、支持時間序列丸冕、擁有基本繪圖功能和統(tǒng)計功能,等等還有很多薛窥。對它所有的特性來說胖烛,肯定有一個學(xué)習(xí)曲線,但我強烈去建議你先看一下大部分文檔诅迷。你所投入的時間將使你的數(shù)據(jù)再加工過程更高效佩番,這會帶來上千倍的回報。這里有一些快速技巧會讓你胃口大開的:

In?[18]:

1

2

3

4

5

6

7

8importpandas as pd

df=pd.DataFrame({'A':1.,

'B': pd.Timestamp('20130102'),

'C': pd.Series(, index=list(range()), dtype='float32'),

'D': pd.Series([,,,], dtype='int32'),

'E': pd.Categorical(["test","train","test","train"]),

'F':'foo'})

In?[19]:

1

Out[19]:

ABCDEF

012013-01-0211testfoo

112013-01-0212trainfoo

212013-01-0211testfoo

312013-01-0212trainfoo

可以通過列名來獲取某一列:

In?[17]:

1

df.B

Out[17]:

1

2

3

4

5

6

7

8--

--

--

--

Name: B, dtype: datetime64[ns]

Compute thesumof Dforeach categoryinE:

按E分類罢杉,每類對D求和:

In?[21]:

1

df.groupby('E').sum().D

Out[21]:

1

2

3

4E

test

train

Name: D, dtype: int32

使用NumPy(或者笨重的Matlab)達(dá)到同樣的目的會很麻煩趟畏。

還有非常多的用法。不相信的話可以看一下這個教程“10 minutes to pandas”滩租。上面的例子也來自這個教程赋秀。

Seaborn

Matplotlib是Python主要的繪圖庫。但是律想,我不建議你直接使用它猎莲,原因與開始不推薦你使用NumPy是一樣的。雖然Matplotlib很強大技即,它本身就很復(fù)雜著洼,你的圖經(jīng)過大量的調(diào)整才能變精致。因此而叼,作為替代身笤,我推薦你一開始使用Seaborn。Seaborn本質(zhì)上使用Matplotlib作為核心庫(就像Pandas對NumPy一樣)葵陵。我將簡短地描述下seaborn的優(yōu)點液荸。具體來說,它可以:

默認(rèn)情況下就能創(chuàng)建賞心悅目的圖表埃难。(只有一點莹弊,默認(rèn)不是jet colormap

創(chuàng)建具有統(tǒng)計意義的圖

能理解pandas的DataFrame類型,所以它們一起可以很好地工作涡尘。

雖然anaconda預(yù)裝了pandas忍弛,卻沒安裝seaborn】汲可以通過conda install seaborn輕松地安裝细疚。

具有統(tǒng)計意義的圖

In?[5]:

1

%matplotlib inline# IPython magic to create plots within cells

In?[7]:

1

2

3

4

5

6importseaborn as sns

tips=sns.load_dataset("tips")

sns.jointplot("total_bill","tip", tips, kind='reg');

如你所見,僅通過一行代碼川梅,我們就創(chuàng)建了一個漂亮復(fù)雜的統(tǒng)計圖疯兼,其中包含擁有置信區(qū)間的最擬合回歸直線然遏、邊界圖,以及相關(guān)系數(shù)吧彪。使用matplotlib重新繪制這幅圖的話需要相當(dāng)多的(丑陋)代碼待侵,包括調(diào)用scipy執(zhí)行線性回歸并手動利用線性回歸方程繪制直線(我甚至想不出怎么在邊界繪圖,怎么計算置信區(qū)間)姨裸。上面和下面的例子都摘自教程“the tutorial on quantitative linear models”秧倾。

與Pandas的DataFrame很好地工作

數(shù)據(jù)有自己的結(jié)構(gòu)。通常我們感興趣的包含不同的組或類(這種情況下使用pandas中g(shù)roupby的功能會讓人感到很神奇)傀缩。比如tips(小費)的數(shù)據(jù)集是這樣的:

In?[9]:

1

tips.head()

Out[9]:

total_billtipsexsmokerdaytimesize

016.991.01FemaleNoSunDinner2

110.341.66MaleNoSunDinner3

221.013.50MaleNoSunDinner3

323.683.31MaleNoSunDinner2

424.593.61FemaleNoSunDinner4

我們可能想知道吸煙者給的小費是否與不吸煙的人不同那先。沒有seaborn的話,這需要使用pandas的groupby功能赡艰,并通過復(fù)雜的代碼繪制線性回歸直線售淡。使用seaborn的話,我們可以給col參數(shù)提供列名慷垮,按我們的需要劃分?jǐn)?shù)據(jù):

In?[11]:

1

sns.lmplot("total_bill","tip", tips, col="smoker");

很整潔吧揖闸?

隨著你研究得越深,你可能想更細(xì)粒度地控制這些圖表的細(xì)節(jié)换帜。因為seaborn只是調(diào)用了matplotlib楔壤,那時你可能會想學(xué)習(xí)這個庫。然而惯驼,對絕大部分工作來說我還是喜歡使用seaborn蹲嚣。

總結(jié)

這篇文章的想法是通過提供部分包來最大化新手使用Python處理數(shù)據(jù)科學(xué)的效率。

英文出處:twiecki.github.io

文章出處:http://python.jobbole.com/80853/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末祟牲,一起剝皮案震驚了整個濱河市隙畜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌说贝,老刑警劉巖议惰,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異乡恕,居然都是意外死亡言询,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門傲宜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來运杭,“玉大人,你說我怎么就攤上這事函卒×俱荆” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虱咧。 經(jīng)常有香客問我熊榛,道長,這世上最難降的妖魔是什么腕巡? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任玄坦,我火速辦了婚禮,結(jié)果婚禮上绘沉,老公的妹妹穿的比我還像新娘营搅。我一直安慰自己,他們只是感情好梆砸,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著园欣,像睡著了一般帖世。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沸枯,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天日矫,我揣著相機與錄音,去河邊找鬼绑榴。 笑死哪轿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的翔怎。 我是一名探鬼主播窃诉,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赤套!你這毒婦竟也來了飘痛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤容握,失蹤者是張志新(化名)和其女友劉穎宣脉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剔氏,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡塑猖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了谈跛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羊苟。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖币旧,靈堂內(nèi)的尸體忽然破棺而出践险,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布巍虫,位于F島的核電站彭则,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏占遥。R本人自食惡果不足惜俯抖,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瓦胎。 院中可真熱鬧芬萍,春花似錦、人聲如沸搔啊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽负芋。三九已至漫蛔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旧蛾,已是汗流浹背莽龟。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锨天,地道東北人毯盈。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像病袄,于是被迫代替她去往敵國和親搂赋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容