乾貨!小白入門Python數據科學全教程

前言

  • 本文講解了從零開始學習Python數據科學的全過程,涵蓋各類工具和方法
  • 你將會學習到如何使用python作基本的數據分析
  • 你還能夠了解機器學習算法的原理和使用

說明

先說一段題外話。我是一名數據工程師,在用SAS作分析超過5年後,決定走出溫馨區,尋找其它有效的數據分析工具,很快我發現了Python!html

我很是喜歡編程,這是我真正喜歡作的事情。事實證實,編程並無想象中的那麼難。python

我在一週以內學習了Python的基本語法,接着我一方面繼續深刻探索Python,另外一方面幫助其餘人學習這門語言。Python最初是一門簡單的腳本語言,但隨着Python社區的不斷髮展壯大,愈來愈多的開發者參與到Python工具庫開發中來,因此Python擁有極其豐富的數據科學第三方庫。web

內容目錄

一、Python數據分析的基本概況算法

  • 爲什麼使用Python作數據分析?
  • Python2.7仍是Python3.7?
  • 如何安裝Python?
  • 使用Python運行一段簡單的代碼
  • 如何使用Jupyter notebook

二、Python數據結構和庫shell

  • Python數據結構
  • Python循環結構和判斷語句
  • Python庫

三、使用Pandas作探索性分析編程

  • Series和DataFrame數據結構介紹
  • 具體數據集案例分析

四、Numpy基本概念後端

  • Numpy常見函數使用

五、使用Pandas和numpy作數據清洗數組

  • 處理數據集中的空值
  • 如何使用apply方法?

六、使用Matplotlib繪製圖表瀏覽器

  • Matplotlib介紹
  • 使用Matplotlib繪製簡單的柱狀圖

七、使用Scikit-learn創建預測模型服務器

  • 邏輯迴歸算法
  • 決策樹算法
  • 隨機森林算法

一、Python數據分析的基本概況

爲什麼使用Python作數據分析?

最近幾年,Python用做數據分析語言引發了很是多的關注,一度超越R成爲最受歡迎的數據科學工具。做爲Python的使用者,我支持Python做爲數據分析工具備如下理由:

  • 開源-免費安裝使用
  • 語言簡潔,是一門真正的強大的編程語言
  • 很是強大的在線社區
  • 學習門檻低
  • 極其豐富的第三方數據科學庫

但它也有一些缺點:

Python是一種解釋性語言而非編譯性,速度相對比較慢。可是考慮到在學習和代碼上節省的時間,Python依然是不二的選擇。

Python 2.7仍是Python 3.7?

不少初學者還在糾結選擇Python 2.7仍是Python 3.7?這兩個版本有很是大的差別,簡直就是兩種語言。它們各有各的優缺點,取決於你使用的需求。

爲何Python 2.7

  • 絕對優點的社區支持!Python 2.x誕生於2000年,已經被使用快20年,許多公司依然在使用Python 2.7
  • 豐富的第三方庫!目前絕大部分第三方庫都是創建在Python 2.x基礎上的,不少庫並不支持Python 3.x版本。若是你將Python用於特定的應用程序,如高度依賴外部模塊的web開發,那麼建議使用Python 2.7

爲何Python 3.7

  • 語法更加簡潔和快速。Python開發人員改進了Python 2.x的缺點,Python 3.x表明了Python將來發展的方向
  • Python 2.7 只維護到2020年
  • Python官方建議直接學習Python 3.x

若是將Python做爲數據科學工具,我建議使用Python 3.x,由於基本上全部的數據科學第三方庫都已經支持Python 3.x。固然選擇哪個版本不是目的,應當專一的是如何使用Python更好地服務於數據科學。

如何安裝Python?

這裏兩種安裝方法可供參考:

  • 直接去Python官網下載Python3.7安裝包,再選擇安裝本身須要的第三方庫和編輯器
  • 或者,你不想這麼麻煩,你能夠選擇安裝Anaconda,這是一個開源的Python發行版本,其預裝了180多個第三方庫和依賴包

第二種方法包含了數據科學用到的大部分工具包,爲你省去不少安裝時間。這也是本教程建議初學者使用的安裝方法 。

選擇Python開發環境

一旦你安裝好了python,就須要選擇開發環境用於Python編程,這裏有四個經常使用選擇:

  • 終端交互模式
  • IDLE(默認環境)
  • 其它IDE,如pycharm
  • Jupyter notebook(ipython)

IDLE(默認環境)

這裏不對它們做具體比較,讀者可自行上網查詢,選擇什麼樣的開發環境取決於你的需求。

我建議初學者使用Jupyter notebook(ipython)做爲Python數據分析的開發環境。Jupyter Notebook 是一個交互式筆記本,本質是一個 Web 應用程序,便於建立和共享程序文檔,支持實時代碼,數學方程,可視化和markdown。 用途包括:數據清理和轉換,數值模擬,統計建模,機器學習等等。數據挖掘領域中最熱門的比賽 Kaggle 裏的資料都是Jupyter 格式。

本教程也是使用Jupyter Notebook 做爲代碼環境。

Jupyter Notebook編程界面

使用Python運行一段簡單的代碼

如何使用Jupyter Notebook

Anaconda預裝了Jupyter Notebook庫,因此安裝Anaconda後就能夠直接使用Jupyter Notebook。

啓動Jupyter Notebook有兩種方法,你能夠在命令行中鍵入jupyter notebook再按enter鍵,即可以進入Jupyter Notebook環境,記住不要關閉命令行窗口,不然Jupyter環境會失效。

命令行鍵入jupyter notebook

還能夠在開始菜單Anaconda文件夾中直接雙擊Jupyter Notebook

而後進入Jupyter Notebook主界面,點擊New新建,點擊Python 3,就能夠開始愉快的編程了。

Jupyter Notebook主界面notebook界面

你能夠修改該notebook的名字,添加或刪除代碼編輯框,使用「Shift + Enter」 或者「Ctrl + Enter」快捷鍵運行代碼。具體功能快捷鍵這裏不作贅述,能夠去Jupyter Notebook 快捷鍵 查看。

二、Python數據結構和庫

Python數據結構

接下來要講到Python的數據結構,你應該儘量熟悉它,由於在接下來的數據分析代碼中會常常用到這些數據結構。

  • 字符串

Python 能夠操做字符串。字符串有多種形式,可使用單引號('……'),雙引號("……")均可以得到一樣的結果2。反斜槓\能夠用來轉義:

字符串示例

  • 列表

Python 中能夠經過組合一些值獲得多種複合數據類型。其中最經常使用的列表,能夠經過方括號括起、逗號分隔的一組值獲得。一個列表能夠包含不一樣類型的元素,但一般使用時各個元素類型相同:

列表示例

  • 元組

能夠看到列表和字符串有不少共同特性,例如索引和切片操做。Python的元組與列表相似,不一樣之處在於元組的元素不能修改。元組使用小括號,列表使用方括號。元組建立很簡單,只須要在括號中添加元素,並使用逗號隔開便可。

元組示例

  • 字典

另外一個很是有用的 Python 內置數據類型是字典。字典在其餘語言裏可能會被叫作 聯合內存 或 聯合數組。與以連續整數爲索引的序列不一樣,字典是以 關鍵字 爲索引的,關鍵字能夠是任意不可變類型,一般是字符串或數字。若是一個元組只包含字符串、數字或元組,那麼這個元組也能夠用做關鍵字。但若是元組直接或間接地包含了可變對象,那麼它就不能用做關鍵字。列表不能用做關鍵字,由於列表能夠經過索引、切片或 append() 和 extend() 之類的方法來改變。

理解字典的最好方式,就是將它看作是一個 鍵: 值 對的集合,鍵必須是惟一的(在一個字典中)。一對花括號能夠建立一個空字典:{} 。另外一種初始化字典的方式是在一對花括號裏放置一些以逗號分隔的鍵值對,而這也是字典輸出的方式。

如下是使用字典的一些簡單示例:

字典示例

Python循環結構和判斷語句

  • for循環

和大多數編程語言同樣,Python也有for循環結構,其被普遍使用在迭代方法中。

Python 中的for語句與你在 C 或 Pascal 中可能用到的有所不一樣。 Python 中的for語句並不老是對算術遞增的數值進行迭代(如同 Pascal),或是給予用戶定義迭代步驟和暫停條件的能力(如同 C),而是對任意序列進行迭代(例如列表或字符串),條目的迭代順序與它們在序列中出現的順序一致。

若是在循環內須要修改序列中的值(好比重複某些選中的元素),推薦你先拷貝一份副本。對序列進行循環不表明製做了一個副本進行操做。切片操做使這件事很是簡單:

若是寫成for w in words:,這個示例就會建立無限長的列表,一次又一次重複地插入defenestrate

  • range函數

若是你確實須要遍歷一個數字序列,內置函數range()會派上用場。它生成算術級數:

  • if判斷語句

可能最爲人所熟知的編程語句就是if語句了,這是python中的判斷語句。

使用形式爲if ... elif ... else ...

能夠有零個或多個elif部分,以及一個可選的else部分。 關鍵字 'elif' 是 'else if' 的縮寫,適合用於避免過多的縮進。 一個if...elif...elif... 序列能夠看做是其餘語言中的switchcase語句的替代。

如今你熟悉了Python中的循環結構和判斷語句,能夠更進一步去學習更多的語法知識。

若是每作一件事都須要從頭開始寫代碼,那麼這將是一場噩夢,好比你想要對一個列表裏數字進行加法運算,難道還要一個一個數字加起來嗎?這樣的話,你確定不想學習python了。慶幸的是,python有不少工具庫,能夠幫助咱們更加直接有效地解決問題。

例如,求數學中的階乘,你能夠很簡單的導入math模塊,使用已經編譯好的階乘函數:

固然在使用函數以前,你必需要導入庫和函數。話很少說,一塊兒來探索更多的Python庫吧!

Python庫

在學習更酷炫實用的Python庫以前,第一步要知道什麼是Python庫。

Python庫是一個相關功能模塊的集合,裏面包含各類函數方法,用來解決複雜的問題。

這些庫分爲兩類:標準庫和第三方庫,標準庫是Python內置庫,無需再安裝,如math、range;第三方庫須要另外安裝,如jupyter、pandas、numpy

  • 安裝第三方庫

安裝第三方庫有兩種方法,第一種是pip方法,pip是Python包管理工具,自帶無需安裝,提供了對Python 庫的查找、下載、安裝、卸載的功能。

若是想安裝pandas庫,你能夠在命令行輸入:

pip install pandas

接下來等待自行下載安裝。

第二種是手動安裝,在python庫集合裏下載相關庫文件並安裝。

  • 導入庫和庫函數

使用庫以前,須要將其導入Python環境。一樣有兩種方法能夠作到(以math庫爲例):

import math

或者

from math import *

第一種方法,導入整個庫,若是你須要使用庫中的某個函數,好比階乘函數factorial,那麼,須要用math.factorial()形式。

第二種方法直接導入了math庫的全部方法和函數,直接factorial()就能夠了。

建議使用第一種方法,用什麼導入什麼,不浪費。

最經常使用的數據科學庫列表

  • numpy:它是一個由多維數組對象和用於處理數組的例程集合組成的庫,裏面包含了大量的計算函數,能夠很輕鬆的進行科學計算。
  • scipy:科學計算的另外一個核心庫是 SciPy。它基於 NumPy,其功能也所以獲得了擴展。SciPy 主數據結構又是一個多維數組,由 Numpy 實現。這個軟件包包含了幫助解決線性代數、機率論、積分計算和許多其餘任務的工具。此外,SciPy 還封裝了許多新的 BLAS 和 LAPACK 函數。
  • pandas:是基於NumPy 的一種工具,該工具是爲了解決數據分析任務而建立的,具有強大的數據展現功能。Pandas 歸入了大量庫和一些標準的數據模型,提供了高效地操做大型數據集所需的工具。你很快就會發現,它是使Python成爲強大而高效的數據分析環境的重要因素之一。
  • matplotlib:是一個Python 2D繪圖庫,能夠生成各類硬拷貝格式和跨平臺交互式環境的出版物質量數據。Matplotlib可用於Python腳本,Python和IPython shell,Jupyter筆記本,Web應用程序服務器和四個圖形用戶界面工具包。只需幾行代碼便可生成繪圖,直方圖,功率譜,條形圖,偏差圖,散點圖等。
  • scikit-learn:是一個機器學習庫,能夠對數據進行分類,迴歸,無監督,數據降維,數據預處理等等,包含了常見的大部分機器學習方法。
  • StatsModels:Statsmodels 是一個 Python 模塊,它爲統計數據分析提供了許多機會,例如統計模型估計、執行統計測試等。在它的幫助下,你能夠實現許多機器學習方法並探索不一樣的繪圖可能性。
  • Seaborn:Seaborn 本質上是一個基於 matplotlib 庫的高級 API。它包含更適合處理圖表的默認設置。此外,還有豐富的可視化庫,包括一些複雜類型,如時間序列、聯合分佈圖(jointplots)和小提琴圖(violin diagrams)。
  • Plotly:Plotly 是一個交互可視化庫,它可讓你輕鬆構建複雜的圖形。該軟件包適用於交互式 Web 應用程,可實現輪廓圖、三元圖和三維圖等視覺效果。
  • Bokeh:Bokeh 庫使用 JavaScript 小部件在瀏覽器中建立交互式和可縮放的可視化。該庫提供了多種圖表集合,樣式可能性(styling possibilities),連接圖、添加小部件和定義回調等形式的交互能力,以及許多更有用的特性。
  • Scrapy:Scrapy 是一個用來建立網絡爬蟲,掃描網頁和收集結構化數據的庫。此外,Scrapy 能夠從 API 中提取數據。因爲該庫的可擴展性和可移植性,使得它用起來很是方便。
  • TensorFlow:TensorFlow 是一個流行的深度學習和機器學習框架,由 Google Brain 開發。它提供了使用具備多個數據集的人工神經網絡的能力。在最流行的 TensorFlow應用中有目標識別、語音識別等。在常規的 TensorFlow 上也有不一樣的 leyer-helper,如 tflearn、tf-slim、skflow 等。
  • Keras:Keras 是一個用於處理神經網絡的高級庫,運行在 TensorFlow、Theano 之上,如今因爲新版本的發佈,還可使用 CNTK 和 MxNet 做爲後端。它簡化了許多特定的任務,而且大大減小了單調代碼的數量。然而,它可能不適合某些複雜的任務。
  • requests:requests庫是一個經常使用的用於http請求的模塊,它使用python語言編寫,能夠方便的對網頁進行爬取,是學習python爬蟲的較好的http請求模塊。
  • Blaze:Blaze生態系統爲python用戶對大數據提供了高效計算的高層接口,Blaze整合了包括Python的Pandas、NumPy及SQL、Mongo、Spark在內的多種技術,使用Blaze可以很是容易地與一個新技術進行交互。

如今你熟悉了Python了Python數據結構和庫的使用,接下來要用這些知識去解決一些簡單的問題。好比說利用pandas去作數據探索,用matplotlib可視化圖表等等。

使用Pandas作探索性分析

爲了更好地探索數據中的奧祕,接下來要介紹一位重量級嘉賓-Pandas

哈哈,開個玩笑。這裏的pandas不是國寶大熊貓,而是python的一個國寶級第三方數據科學庫。就像前面介紹過的,pandas具有強大的數據展現功能, 歸入了大量庫和一些標準的數據模型,提供了高效地操做大型數據集所需的工具。是pandas的出現奠基了python在數據科學領域霸主的地位。

接下來,咱們要使用pandas讀取數據集,而後進行數據探索性分析(EDA),就是研究數據各個變量或變量之間的統計學關係。

pandas的數據結構

pandas有兩種數據結構,Series和DataFrame。

Series相似一維數組(只有一列),由數據和索引組成,能夠保存任何數據類型(整數,字符串,浮點數,Python對象等)。

 

DataFrame則相似二維數組,像excel表格,有一個或多個變量(多列)。

當咱們用pandas讀取數據集的時候,數據會以DataFrame的格式保存在內存裏,你能夠對數據的行和列進行各類函數操做(如分組、聚合、拼接、運算)。相似SQL能作的,pandas都能作,SQL不能作的,pandas也能作。

數據集

這裏數據集就用經典的titanic(泰坦尼克)數據集,在這裏 下載。

該數據集規格爲891*12,也就是891行,12列。這12個變量包括乘客年齡、性別、姓名、是否存活等等,瞭解便可。

讀取數據

來看看數據集長什麼樣

import pandas as pd #導入pandas庫
data = pd.read_csv(r'train.csv') #讀取數據
data.head(10) #查看前10行數據

數據DataFrame格式

數據統計學描述

數據描述有兩個函數(info和describe)來作,一般這是數據探索的開始!

data.info() #查看數據集每一個變量的非空長度、類型,以及整個數據集的大小

info函數對數據的描述

data.describe() #數據統計學描述函數,查看每個變量的統計學狀況,包括最大值、標準差等

describe函數對數據的描述

取數據列

若是我想拎出數據集的某一列或幾列怎麼辦

data['Age'] # 取出age這一列數據
data[['Age','Name']] # 取出age和name兩列

繪製圖表

由於須要在notebook上繪製圖表並顯示,因此須要在代碼行添加魔法命令使得notebook上顯示圖像:

%matplotlib inline

pandas庫自帶繪圖功能,你能夠繪製簡單的統計學圖表,好比我想繪製age的分佈直方圖:

data['Age'].hist(bins=10) # hist爲直方圖函數,bins是參數,能夠調節年齡分多少段數

age字段直方圖

未完待續!

若是你們想要學習更多的python數據分析知識,請關注個人公衆號:pydatas

相關文章
相關標籤/搜索