Python進(jìn)行數(shù)據(jù)科學(xué)工作的簡單入門教程
Python擁有著極其豐富且穩(wěn)定的數(shù)據(jù)科學(xué)工具環(huán)境。遺憾的是,對不了解的人來說這個(gè)環(huán)境猶如叢林一般(cue snake joke)。在這篇文章中,我會(huì)一步一步指導(dǎo)你怎么進(jìn)入這個(gè)PyData叢林。
你可能會(huì)問,很多現(xiàn)有的PyData包推薦列表怎么樣?我覺得對新手來說提供太多的選擇可能會(huì)受不了。因此這里不會(huì)提供推薦列表,我要討論的范圍很窄,只集中于10%的工具,但它們可以完成你90%的工作。當(dāng)你掌握這些必要的工具后,你就可以瀏覽PyData工具的長列表了,選擇自己接下來要使用的。
值得一提的是,我介紹的這幾個(gè)工具可以讓你完成一個(gè)數(shù)據(jù)科學(xué)家日常的絕大部分工作了(比如數(shù)據(jù)輸入輸出、數(shù)據(jù)再加工以及數(shù)據(jù)分析)。
安裝
經(jīng)常會(huì)有人過來和我說“我聽說Python很擅長處理數(shù)據(jù)科學(xué),所以我想學(xué)一下。但是安裝Python和所有其他模塊就耗費(fèi)了兩天時(shí)間”。安裝Python是很合理的,因?yàn)槟阋盟?,但是?dāng)你不知道真正需要哪些其他工具時(shí)就手動(dòng)安裝所有的PyData工具,這確實(shí)是一項(xiàng)大工程啊。所以我強(qiáng)烈反對這樣做。
幸運(yùn)的是,Continuum的一伙人創(chuàng)建了Python發(fā)行版Anaconda,它包含了大部分PyData工具包。默認(rèn)沒有的模塊也可以輕松地通過GUI安裝。這個(gè)發(fā)行版適用于所有主流平臺(tái)。這樣無需耗費(fèi)兩天安裝了,可以直接使用它。
IPython Notebook
Python安裝后,大部分人直接啟動(dòng)并開始學(xué)習(xí)。這很合理,但遺憾的是又大錯(cuò)特錯(cuò)了。我沒見過直接在Python命令行中運(yùn)行Python科學(xué)計(jì)算環(huán)境的(因人而異)。相反,可以使用IPython,特別是IPython Notebook,它們都是特別強(qiáng)大的Python shell,被廣泛地使用在PyData領(lǐng)域中。我強(qiáng)烈建議你直接使用IPython Notebook(IPyNB)而不用為其他事所煩擾,你不會(huì)后悔的。簡而言之,IPyNB是一個(gè)通過瀏覽器訪問的Python shell。它允許你混合編輯代碼、文本和圖形(甚至是交互對象)。本文就是在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小工具的簡短教程。這些小工具可以讓你使用滑動(dòng)條交互地控制繪圖:
In [1]:
from IPython.display import YouTubeVideo YouTubeVideo('wxVx54ax47s') # 沒錯(cuò),它也可以嵌入youtube視頻
Out[1]:
6. IPython Widgets – IPython Notebook Tutorial
Pandas
通常,大家會(huì)建議你先學(xué)習(xí)NumPy(讀作num-pie,不是num-pee),一個(gè)支持多維數(shù)組的庫。幾年前肯定得這樣,但現(xiàn)在我?guī)缀醪皇褂肗umPy。因?yàn)镹umPy越來越成為一個(gè)被其他庫所使用核心庫,這些庫通常具有更優(yōu)雅的接口。因此,Pandas成為了處理數(shù)據(jù)所主要使用的庫。它可以以各種格式(包括數(shù)據(jù)庫)輸入輸出數(shù)據(jù)、執(zhí)行join以及其他SQL類似的功能來重塑數(shù)據(jù)、熟練地處理缺失值、支持時(shí)間序列、擁有基本繪圖功能和統(tǒng)計(jì)功能,等等還有很多。對它所有的特性來說,肯定有一個(gè)學(xué)習(xí)曲線,但我強(qiáng)烈去建議你先看一下大部分文檔。你所投入的時(shí)間將使你的數(shù)據(jù)再加工過程更高效,這會(huì)帶來上千倍的回報(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
可以通過列名來獲取某一列:
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分類,每類對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”。上面的例子也來自這個(gè)教程。
Seaborn
Matplotlib是Python主要的繪圖庫。但是,我不建議你直接使用它,原因與開始不推薦你使用NumPy是一樣的。雖然Matplotlib很強(qiáng)大,它本身就很復(fù)雜,你的圖經(jīng)過大量的調(diào)整才能變精致。因此,作為替代,我推薦你一開始使用Seaborn。Seaborn本質(zhì)上使用Matplotlib作為核心庫(就像Pandas對NumPy一樣)。我將簡短地描述下seaborn的優(yōu)點(diǎn)。具體來說,它可以:
- 默認(rèn)情況下就能創(chuàng)建賞心悅目的圖表。(只有一點(diǎn),默認(rèn)不是jet colormap)
- 創(chuàng)建具有統(tǒng)計(jì)意義的圖
- 能理解pandas的DataFrame類型,所以它們一起可以很好地工作。
雖然anaconda預(yù)裝了pandas,卻沒安裝seaborn。可以通過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');
如你所見,僅通過一行代碼,我們就創(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)是否與不吸煙的人不同。沒有seaborn的話,這需要使用pandas的groupby功能,并通過復(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è)庫。然而,對絕大部分工作來說我還是喜歡使用seaborn。
總結(jié)
這篇文章的想法是通過提供部分包來最大化新手使用Python處理數(shù)據(jù)科學(xué)的效率。
- 掌握python polars庫進(jìn)行高效高速的數(shù)據(jù)處理。
- python Polars庫的使用簡介
- Python mlxtend庫數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)補(bǔ)充工具功能探索
- 盤點(diǎn)20個(gè)Python數(shù)據(jù)科學(xué)庫神器打造數(shù)據(jù)魔法世界
- Python?Prometheus接口揭秘?cái)?shù)據(jù)科學(xué)新技巧
- Python 數(shù)據(jù)科學(xué) Matplotlib圖庫詳解
- 3個(gè)用于數(shù)據(jù)科學(xué)的頂級(jí)Python庫
- python polars數(shù)據(jù)科學(xué)庫對比Pandas優(yōu)勢分析
相關(guān)文章
python中面向?qū)ο蟮淖⒁恻c(diǎn)概述總結(jié)
大家好,本篇文章主要講的是python中面向?qū)ο蟮淖⒁恻c(diǎn)概述總結(jié),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02淺談PyQt5中異步刷新UI和Python多線程總結(jié)
今天小編就為大家分享一篇淺談PyQt5中異步刷新UI和Python多線程總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python數(shù)據(jù)處理-導(dǎo)入導(dǎo)出excel數(shù)據(jù)
這篇文章主要介紹了Python數(shù)據(jù)處理-導(dǎo)入導(dǎo)出excel數(shù)據(jù),Python的一大應(yīng)用就是數(shù)據(jù)分析了,而數(shù)據(jù)分析中,經(jīng)常碰到需要處理Excel數(shù)據(jù)的情況。這里做一個(gè)Python處理Excel數(shù)據(jù)的總結(jié),需要的小伙伴可以參考一下2022-01-01python 實(shí)現(xiàn)批量xls文件轉(zhuǎn)csv文件的方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)批量xls文件轉(zhuǎn)csv文件的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10Python3+Appium實(shí)現(xiàn)多臺(tái)移動(dòng)設(shè)備操作的方法
這篇文章主要介紹了Python3+Appium實(shí)現(xiàn)多臺(tái)移動(dòng)設(shè)備操作的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python3 執(zhí)行Linux Bash命令的方法
今天小編就為大家分享一篇Python3 執(zhí)行Linux Bash命令的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07