2017-1-13 14:48
Python是一門通用的編程語言,在過去十年中被數據科學領域廣泛使用斋日。事實上劝术,Python在數據科學領域是僅次于R的第二熱門的編程語言甘穿。
本篇文章的主要目的在于向大家展示使用Python學習數據科學有多么的容易。你可能以為自己要先成為一名高級Python程序員胯陋,然后才能進行通常與數據科學相關的復雜任務蕊温,然而事實并非如此。Python附帶了很多有用的工具庫遏乔,它們可以在后臺為你提供強大的支持义矛。你甚至不需要知道程序在運行什么,你不必關心這些盟萨。唯一你真正需要知道的是凉翻,你需要執(zhí)行一些特定的任務,而Python使這些任務變得相當簡單捻激。
配置數據科學所需的Python環(huán)境
無論你使用的電腦是Mac還是Windows制轰,我都建議你下載一個免費的能夠讓你輕松訪問盡可能多的有用模塊的Python發(fā)行版本。
我試用了一些Python的發(fā)行版本胞谭,在這里垃杖,我推薦大家使用Continuum Analytics提供的Anaconda。這個Python發(fā)行版本包含200多個工具庫丈屹。要理解Python中包调俘、模塊和庫的差異,請查閱這篇文章旺垒。
在你下載Anaconda的時候彩库,你需要選擇下載Python 2版本還是Python 3版本。我強烈建議你使用Python 2.17.12版本先蒋。截止到2016年底骇钦,絕大多數的非計算機科學的Python用戶都使用了這個Python版本。它能夠出色地完成數據科學任務竞漾,比Python 3更容易學習眯搭,而且像GitHub這樣的網站中有數百萬的Python腳本和代碼片段,可供大家參考业岁,生活會變得更加容易鳞仙。
Anaconda也附帶了Ipython編程環(huán)境,建議大家使用叨襟。安裝Anaconda后,只需要導航到Jupyter筆記本并開啟程序幔荒,就可以在Web瀏覽器中打開IPython糊闽。Jupyter筆記本的程序會自動啟動Web瀏覽器中的應用程序梳玫。
第二熱門語言:從入門到精通,Python數據科學簡潔教程
你可以參考這篇文章了解如何在Ipython筆記本中更改路徑右犹。
基礎知識學習
在你深入了解Python的數據科學庫之前提澎,你首先需要學習一些Python的基礎知識。Python是一門面向對象的編程語言念链。在Python中盼忌,對象既可以賦值給一個變量,也可以作為參數傳遞給一個函數掂墓。以下都是Python中的對象:數字谦纱、字符串、列表君编、元組跨嘉、集合、字典吃嘿、函數以及類祠乃。
Python中的函數與普通數學中的函數基本上是一致的——它接收輸入數據,對數據進行處理并輸出結果兑燥。輸出的結果完全取決于函數是如何被設計的亮瓷。另一方面,Python中的類是被設計為輸出其他對象的對象的原型降瞳。
如果你的目標是編寫快速嘱支、可復用、易于修改的Python代碼力崇,那么你必須使用函數和類斗塘。使用函數和類有助于保證代碼的高效與整潔。
現在亮靴,讓我們看看Python中有哪些可用的數據科學工具庫馍盟。
科學計算:Numpy與Scipy
Numpy是一個主要用于處理n維數組對象的Python工具包,而Scipy則提供了許多數學算法與復雜函數的實現茧吊,可用來擴展Numpy庫的功能贞岭。Scipy庫為Python添加了一些專門的科學函數,以應對數據科學中的一些特定任務搓侄。
為了在Python中使用Numpy(或其他任何Python庫)瞄桨,你必須首先導入對應的工具庫。
第二熱門語言:從入門到精通讶踪,Python數據科學簡潔教程
np.array(scores) 將一個列表轉換成一個數組芯侥。
當你使用普通的Python程序時——未使用任何外部擴展(例如工具庫)的Python程序——你只能受限地使用一維列表來存儲數據。但是,如果你使用Numpy庫來擴展Python柱查,你可以直接使用n維數組廓俭。(如果你想知道的話,n維數組是包含一個或多個維度的數組唉工。)
最開始就學習Numpy研乒,是因為在使用Python進行科學計算時Numpy必不可少。對Numpy的深入了解將有助于你高效地使用Pandas和Scipy這樣的工具庫淋硝。
數據再加工:Pandas
Pandas是數據再加工過程中使用的最為廣泛的工具雹熬。它包含為使數據分析更加快速便捷而設計的高級數據結構與數據操作工具。對于使用R語言進行統(tǒng)計計算的用戶谣膳,一定不會對DataFrame的變量名感到陌生竿报。
Pandas是Python成長為一個強大而高效的數據分析平臺的關鍵因素之一。
接下來参歹,我將向你展示如何使用Pandas處理一個小型數據集仰楚。
第二熱門語言:從入門到精通,Python數據科學簡潔教程
DataFrame是一個電子表格結構犬庇,包含一個有序的列集合僧界。每個列都可以有不同的變量類型。DataFrame既包含行索引臭挽,也包含列索引捂襟。
第二熱門語言:從入門到精通,Python數據科學簡潔教程
可視化:Matplotlib + Seaborn + Bokeh
Matlplotlib是Python中一個用于數據可視化的模塊欢峰。Matplotlib可使你輕松地繪制線形圖葬荷、餅狀圖、直方圖以及其他專業(yè)圖表纽帖。
你可以使用Matplotlib自定義圖表中的每個細節(jié)宠漩。當你在IPython中使用Matplotlib時,Matplotlib具備縮放懊直、平移等交互特性扒吁。Matplotlib在所有操作系統(tǒng)上均支持不同的GUI后端,同時室囊,它也可以將圖表導出為若干種常見的圖像格式雕崩,如PDF、SVG融撞、JPG盼铁、PNG、BMP尝偎、GIF等饶火。
第二熱門語言:從入門到精通,Python數據科學簡潔教程
Seaborn是一個基于Matplotlib的數據可視化工具庫,用來在Python中創(chuàng)建富有吸引力且內容翔實的統(tǒng)計圖表肤寝。Seaborn的主要特點在于牧挣,其僅使用相對簡單的命令就可以從Pandas數據中創(chuàng)建出復雜的圖表類型。我使用Seaborn繪制了下面這幅圖:
第二熱門語言:從入門到精通醒陆,Python數據科學簡潔教程
機器學習: Scikit-learn
機器學習的目標在于通過向機器(軟件)提供一些示例(如何執(zhí)行任務或者執(zhí)行什么無法完成任務)來教會機器執(zhí)行任務。
Python中有很多機器學習的工具庫裆针,然而刨摩,Scikit-learn是最受歡迎的一個。Scikit-learn建立在Numpy世吨、Scipy與Matplotlib庫之上澡刹。基于Scikit-learn庫耘婚,你幾乎可以實現所有的機器學習算法罢浇,如回歸、聚類沐祷、分類等等嚷闭。因此,如果你打算使用Python學習機器學習赖临,那么我建議你從學習Scikit-learn開始胞锰。
K近鄰算法可用于分類或回歸。下面這段代碼展示了如何使用KNN模型對鳶尾花數據集進行預測兢榨。
第二熱門語言:從入門到精通嗅榕,Python數據科學簡潔教程
第二熱門語言:從入門到精通,Python數據科學簡潔教程
其他的一些機器學習庫還有:
Theano
Pylearn2
Pyevolve
Caffe
Tensorflow
統(tǒng)計學:Statsmodels與Scipy.stats
Statsmodels和Scipy.stats是Python中兩個熱門的統(tǒng)計學習模塊吵聪。Scipy.stats主要用于概率分布的實現凌那。另一方面,Statsmodels則為統(tǒng)計學模型提供了類似于R的公式框架吟逝。包括描述統(tǒng)計學帽蝶、統(tǒng)計檢驗、繪圖函數以及結果統(tǒng)計在內的擴展功能均適用于不同類型的數據以及每一種估計器澎办。
下面的代碼展示了如何使用Scipy.stats模塊調用正態(tài)分布嘲碱。
第二熱門語言:從入門到精通,Python數據科學簡潔教程
第二熱門語言:從入門到精通局蚀,Python數據科學簡潔教程
正態(tài)分布是一種連續(xù)的輸入為實線上任何值的分布或函數麦锯。正態(tài)分布可通過以下兩個參數進行參數化:分布的均值μ以及方差σ2。
Web抓壤派稹:Requests扶欣、Scrapy與BeautifulSoup
Web抓取表示從網絡中獲取非結構化數據(通常為HTML格式),并將其轉換為便于分析的結構化格式數據的過程。
深受歡迎的用于Web抓取的工具庫有:
Scrapy
URl lib
Beautifulsoup
Requests
要從網站中爬取數據料祠,你需要了解一些HTML的基本知識骆捧。
這里有一個使用BeautifulSoup庫進行網絡爬取的示例:
import urllib2
import bs4
第二熱門語言:從入門到精通,Python數據科學簡潔教程
代碼beautiful = urllib2.urlopen(url).read();前往bigdataexaminer.com并獲取了網站對應的整個HTML文本髓绽。隨后敛苇,我將文本存儲在變量beautiful中。
我使用了urllib2來獲取url為網頁鏈接 的網站頁面顺呕,你也可以使用Requests做同樣的事情枫攀。這里有篇文章可以幫助你了解urllib2和Requests間的差別。
Scrapy與BeautifulSoup類似株茶。后端工程師Prasanna Venkadesh在Quora上解釋了這兩個工具庫的差別:
"Scrapy是一個Web爬蟲来涨,或者說,是一個Web爬蟲框架启盛,你為Scrapy提供一個開始抓取操作的根URL蹦掐,然后你可以指定一些約束,例如要抓取多少個URL等等僵闯,這是一個用于Web抓取或爬取的完整框架卧抗。
而BeautifulSoup則是一個解析庫,它也可以出色地頁面爬取任務鳖粟,并允許你輕松地解析頁面中的某些內容颗味。但是,BeautifulSoup只會抓取你提供URL的頁面的內容牺弹。它不會抓取其他頁面浦马,除非你以一定方式手動地將頁面URL添加到循環(huán)中來。
簡單來說张漂,你可以用BeautifulSoup構建出與Scrapy類似的東西晶默。但是BeautifulSoup是一個Python庫,而Scrapy則是一個完整的框架航攒。"
結論
現在磺陡,你知道了Python的一些基礎知識以及這些工具庫的用途。是時候使用你所學到的知識來解決具體的數據分析問題了漠畜。你可以先處理結構化的數據集币他,之后可以解決那些復雜的非結構化數據分析問題了。