來源 | 雲棲社區python
摘要: 本文介紹了一些常見的用於數據分析任務的Python庫,如Numpy、Pandas、Matplotlib、Scikit-learn以及BeautifulSoup等,這些工具庫功能強大,便於上手。有了這些幫助,數據分析會變得分外簡單。程序員
Python是一門通用的編程語言,在過去十年中被數據科學領域普遍使用。事實上,Python在數據科學領域是僅次於R的第二熱門的編程語言。算法
本篇文章的主要目的在於向你們展現使用Python學習數據科學有多麼的容易。你可能覺得本身要先成爲一名高級Python程序員,而後才能進行一般與數據科學相關的複雜任務,然而事實並不是如此。Python附帶了不少有用的工具庫,它們能夠在後臺爲你提供強大的支持。你甚至不須要知道程序在運行什麼,你沒必要關心這些。惟一你真正須要知道的是,你須要執行一些特定的任務,而Python使這些任務變得至關簡單。編程
那麼,讓咱們如今就開始吧。後端
不管你使用的電腦是Mac仍是Windows,我都建議你下載一個免費的可以讓你輕鬆訪問儘量多的有用模塊的Python發行版本。數組
我試用了一些Python的發行版本,在這裏,我推薦你們使用Continuum Analytics提供的Anaconda。這個Python發行版本包含200多個工具庫。要理解Python中包、模塊和庫的差別,請查閱這篇文章。瀏覽器
在你下載Anaconda的時候,你須要選擇下載Python 2版本仍是Python 3版本。我強烈建議你使用Python 2.17.12版本。截止到2016年末,絕大多數的非計算機科學的Python用戶都使用了這個Python版本。它可以出色地完成數據科學任務,比Python 3更容易學習,並且像GitHub這樣的網站中有數百萬的Python腳本和代碼片斷,可供你們參考,生活會變得更加容易。網絡
Anaconda也附帶了Ipython編程環境,建議你們使用。安裝Anaconda後,只須要導航到Jupyter筆記本並開啓程序,就能夠在Web瀏覽器中打開IPython。Jupyter筆記本的程序會自動啓動Web瀏覽器中的應用程序。數據結構
你能夠參考這篇文章瞭解如何在Ipython筆記本中更改路徑。框架
在你深刻了解Python的數據科學庫以前,你首先須要學習一些Python的基礎知識。Python是一門面向對象的編程語言。在Python中,對象既能夠賦值給一個變量,也能夠做爲參數傳遞給一個函數。如下都是Python中的對象:數字、字符串、列表、元組、集合、字典、函數以及類。
Python中的函數與普通數學中的函數基本上是一致的——它接收輸入數據,對數據進行處理並輸出結果。輸出的結果徹底取決於函數是如何被設計的。另外一方面,Python中的類是被設計爲輸出其餘對象的對象的原型。
若是你的目標是編寫快速、可複用、易於修改的Python代碼,那麼你必須使用函數和類。使用函數和類有助於保證代碼的高效與整潔。
如今,讓咱們看看Python中有哪些可用的數據科學工具庫。
Numpy是一個主要用於處理n維數組對象的Python工具包,而Scipy則提供了許多數學算法與複雜函數的實現,可用來擴展Numpy庫的功能。Scipy庫爲Python添加了一些專門的科學函數,以應對數據科學中的一些特定任務。
爲了在Python中使用Numpy(或其餘任何Python庫),你必須首先導入對應的工具庫。
np.array(scores) 將一個列表轉換成一個數組。
當你使用普通的Python程序時——未使用任何外部擴展(例如工具庫)的Python程序——你只能受限地使用一維列表來存儲數據。可是,若是你使用Numpy庫來擴展Python,你能夠直接使用n維數組。(若是你想知道的話,n維數組是包含一個或多個維度的數組。)
最開始就學習Numpy,是由於在使用Python進行科學計算時Numpy必不可少。對Numpy的深刻了解將有助於你高效地使用Pandas和Scipy這樣的工具庫。
Pandas是數據再加工過程當中使用的最爲普遍的工具。它包含爲使數據分析更加快速便捷而設計的高級數據結構與數據操做工具。對於使用R語言進行統計計算的用戶,必定不會對DataFrame的變量名感到陌生。
Pandas是Python成長爲一個強大而高效的數據分析平臺的關鍵因素之一。
接下來,我將向你展現如何使用Pandas處理一個小型數據集。
DataFrame是一個電子表格結構,包含一個有序的列集合。每一個列均可以有不一樣的變量類型。DataFrame既包含行索引,也包含列索引。
Matlplotlib是Python中一個用於數據可視化的模塊。Matplotlib可以使你輕鬆地繪製線形圖、餅狀圖、直方圖以及其餘專業圖表。
你可使用Matplotlib自定義圖表中的每一個細節。當你在IPython中使用Matplotlib時,Matplotlib具有縮放、平移等交互特性。Matplotlib在全部操做系統上均支持不一樣的GUI後端,同時,它也能夠將圖表導出爲若干種常見的圖像格式,如PDF、SVG、JPG、PNG、BMP、GIF等。
Seaborn是一個基於Matplotlib的數據可視化工具庫,用來在Python中建立富有吸引力且內容翔實的統計圖表。Seaborn的主要特色在於,其僅使用相對簡單的命令就能夠從Pandas數據中建立出複雜的圖表類型。我使用Seaborn繪製了下面這幅圖:
機器學習的目標在於經過向機器(軟件)提供一些示例(如何執行任務或者執行什麼沒法完成任務)來教會機器執行任務。
Python中有不少機器學習的工具庫,然而,Scikit-learn是最受歡迎的一個。Scikit-learn創建在Numpy、Scipy與Matplotlib庫之上。基於Scikit-learn庫,你幾乎能夠實現全部的機器學習算法,如迴歸、聚類、分類等等。所以,若是你打算使用Python學習機器學習,那麼我建議你從學習Scikit-learn開始。
K近鄰算法可用於分類或迴歸。下面這段代碼展現瞭如何使用KNN模型對鳶尾花數據集進行預測。
其餘的一些機器學習庫還有:
Theano
Pylearn2
Pyevolve
Caffe
Tensorflow
複製代碼
Statsmodels和Scipy.stats是Python中兩個熱門的統計學習模塊。Scipy.stats主要用於機率分佈的實現。另外一方面,Statsmodels則爲統計學模型提供了相似於R的公式框架。包括描述統計學、統計檢驗、繪圖函數以及結果統計在內的擴展功能均適用於不一樣類型的數據以及每一種估計器。
下面的代碼展現瞭如何使用Scipy.stats模塊調用正態分佈。
正態分佈是一種連續的輸入爲實線上任何值的分佈或函數。正態分佈可經過如下兩個參數進行參數化:分佈的均值μ以及方差σ2。
Web抓取表示從網絡中獲取非結構化數據(一般爲HTML格式),並將其轉換爲便於分析的結構化格式數據的過程。
深受歡迎的用於Web抓取的工具庫有:
Scrapy
URl lib
Beautifulsoup
Requests
複製代碼
要從網站中爬取數據,你須要瞭解一些HTML的基本知識。
這裏有一個使用BeautifulSoup庫進行網絡爬取的示例:
import urllib2
import bs4
複製代碼
代碼beautiful = urllib2.urlopen(url).read();前往bigdataexaminer.com並獲取了網站對應的整個HTML文本。隨後,我將文本存儲在變量beautiful中。
我使用了urllib2來獲取url爲http://www.bigdataexaminer.com/ 的網站頁面,你也可使用Requests作一樣的事情。這裏有篇文章能夠幫助你瞭解urllib2和Requests間的差異。
Scrapy與BeautifulSoup相似。後端工程師Prasanna Venkadesh在Quora上解釋了這兩個工具庫的差異:
_"Scrapy是一個Web爬蟲,或者說,是一個Web爬蟲框架,你爲Scrapy提供一個開始抓取操做的根URL,而後你能夠指定一些約束,例如要抓取多少個URL等等,這是一個用於Web抓取或爬取的完整框架。
而BeautifulSoup則是一個解析庫,它也能夠出色地頁面爬取任務,並容許你輕鬆地解析頁面中的某些內容。可是,BeautifulSoup只會抓取你提供URL的頁面的內容。它不會抓取其餘頁面,除非你以必定方式手動地將頁面URL添加到循環中來。
簡單來講,你能夠用BeautifulSoup構建出與Scrapy相似的東西。可是BeautifulSoup是一個Python庫,而Scrapy則是一個完整的框架。
如今,你知道了Python的一些基礎知識以及這些工具庫的用途。是時候使用你所學到的知識來解決具體的數據分析問題了。你能夠先處理結構化的數據集,以後能夠解決那些複雜的非結構化數據分析問題了。