用 Python 入門數據科學
數據科學是計算領域一個令人興奮的新領域,它圍繞分析、可視化和關聯以解釋我們的計算機收集的有關世界的無限信息而建立。當然,稱其為「新」領域有點不誠實,因為該學科是統計學、數據分析和普通而古老的科學觀察派生而來的。
但是數據科學是這些學科的形式化分支,擁有自己的流程和工具,並且可以廣泛應用於以前從未產生過大量不可管理數據的學科(例如視覺效果)。數據科學是一個新的機會,可以重新審視海洋學、氣象學、地理學、製圖學、生物學、醫學和健康以及娛樂行業的數據,並更好地了解其中的模式、影響和因果關係。
像其他看似包羅萬象的大型領域一樣,知道從哪裡開始探索數據科學可能會令人生畏。有很多資源可以幫助數據科學家使用自己喜歡的編程語言來實現其目標,其中包括最流行的編程語言之一:Python。使用 Pandas、Matplotlib 和 Seaborn 這些庫,你可以學習數據科學的基本工具集。
如果你對 Python 的基本用法不是很熟悉,請在繼續之前先閱讀我的 Python 介紹。
創建 Python 虛擬環境
程序員有時會忘記在開發計算機上安裝了哪些庫,這可能導致他們提供了在自己計算機上可以運行,但由於缺少庫而無法在所有其它電腦上運行的代碼。Python 有一個系統旨在避免這種令人不快的意外:虛擬環境。虛擬環境會故意忽略你已安裝的所有 Python 庫,從而有效地迫使你一開始使用通常的 Python 進行開發。
為了用 venv
激活虛擬環境, 為你的環境取個名字 (我會用 example
) 並且用下面的指令創建它:
$ python3 -m venv example
導入 該環境的 bin
目錄里的 activate
文件以激活它:
$ source ./example/bin/activate
(example) $
你現在「位於」你的虛擬環境中。這是一個乾淨的狀態,你可以在其中構建針對該問題的自定義解決方案,但是額外增加了需要有意識地安裝依賴庫的負擔。
安裝 Pandas 和 NumPy
你必須在新環境中首先安裝的庫是 Pandas 和 NumPy。這些庫在數據科學中很常見,因此你肯定要時不時安裝它們。它們也不是你在數據科學中唯一需要的庫,但是它們是一個好的開始。
Pandas 是使用 BSD 許可證的開源庫,可輕鬆處理數據結構以進行分析。它依賴於 NumPy,這是一個提供多維數組、線性代數和傅立葉變換等等的科學庫。使用 pip3
安裝兩者:
(example) $ pip3 install pandas
安裝 Pandas 還會安裝 NumPy,因此你無需同時指定兩者。一旦將它們安裝到虛擬環境中,安裝包就會被緩存,這樣,當你再次安裝它們時,就不必從互聯網上下載它們。
這些是你現在僅需的庫。接下來,你需要一些樣本數據。
生成樣本數據集
數據科學都是關於數據的,幸運的是,科學、計算和政府組織可以提供許多免費和開放的數據集。雖然這些數據集是用於教育的重要資源,但它們具有比這個簡單示例所需的數據更多的數據。你可以使用 Python 快速創建示例和可管理的數據集:
#!/usr/bin/env python3
import random
def rgb():
NUMBER=random.randint(0,255)/255
return NUMBER
FILE = open('sample.csv','w')
FILE.write('"red","green","blue"')
for COUNT in range(10):
FILE.write('n{:0.2f},{:0.2f},{:0.2f}'.format(rgb(),rgb(),rgb()))
這將生成一個名為 sample.csv
的文件,該文件由隨機生成的浮點數組成,這些浮點數在本示例中表示 RGB 值(在視覺效果中通常是數百個跟蹤值)。你可以將 CSV 文件用作 Pandas 的數據源。
使用 Pandas 提取數據
Pandas 的基本功能之一是可以提取數據和處理數據,而無需程序員編寫僅用於解析輸入的新函數。如果你習慣於自動執行此操作的應用程序,那麼這似乎不是很特別,但請想像一下在 LibreOffice 中打開 CSV 並且必須編寫公式以在每個逗號處拆分值。Pandas 可以讓你免受此類低級操作的影響。以下是一些簡單的代碼,可用於提取和列印以逗號分隔的值的文件:
#!/usr/bin/env python3
from pandas import read_csv, DataFrame
import pandas as pd
FILE = open('sample.csv','r')
DATAFRAME = pd.read_csv(FILE)
print(DATAFRAME)
一開始的幾行導入 Pandas 庫的組件。Pandas 庫功能豐富,因此在尋找除本文中基本功能以外的功能時,你會經常參考它的文檔。
接下來,通過打開你創建的 sample.csv
文件創建變數 FILE
。Pandas 模塊 read_csv
(在第二行中導入)使用該變數來創建 數據幀 。在 Pandas 中,數據幀是二維數組,通常可以認為是表格。數據放入數據幀中後,你可以按列和行進行操作,查詢其範圍,然後執行更多操作。目前,示例代碼僅將該數據幀輸出到終端。
運行代碼。你的輸出會和下面的輸出有些許不同,因為這些數字都是隨機生成的,但是格式都是一樣的。
(example) $ python3 ./parse.py
red green blue
0 0.31 0.96 0.47
1 0.95 0.17 0.64
2 0.00 0.23 0.59
3 0.22 0.16 0.42
4 0.53 0.52 0.18
5 0.76 0.80 0.28
6 0.68 0.69 0.46
7 0.75 0.52 0.27
8 0.53 0.76 0.96
9 0.01 0.81 0.79
假設你只需要數據集中的紅色值(red
),你可以通過聲明數據幀的列名稱並有選擇地僅列印你感興趣的列來做到這一點:
from pandas import read_csv, DataFrame
import pandas as pd
FILE = open('sample.csv','r')
DATAFRAME = pd.read_csv(FILE)
# define columns
DATAFRAME.columns = [ 'red','green','blue' ]
print(DATAFRAME['red'])
現在運行代碼,你只會得到紅色列:
(example) $ python3 ./parse.py
0 0.31
1 0.95
2 0.00
3 0.22
4 0.53
5 0.76
6 0.68
7 0.75
8 0.53
9 0.01
Name: red, dtype: float64
處理數據表是經常使用 Pandas 解析數據的好方法。從數據幀中選擇數據的方法有很多,你嘗試的次數越多就越習慣。
可視化你的數據
很多人偏愛可視化信息已不是什麼秘密,這是圖表和圖形成為與高層管理人員開會的主要內容的原因,也是「信息圖」在新聞界如此流行的原因。數據科學家的工作之一是幫助其他人理解大量數據樣本,並且有一些庫可以幫助你完成這項任務。將 Pandas 與可視化庫結合使用可以對數據進行可視化解釋。一個流行的可視化開源庫是 Seaborn,它基於開源的 Matplotlib。
安裝 Seaborn 和 Matplotlib
你的 Python 虛擬環境還沒有 Seaborn 和 Matplotlib,所以用 pip3
安裝它們。安裝 Seaborn 的時候,也會安裝 Matplotlib 和很多其它的庫。
(example) $ pip3 install seaborn
為了使 Matplotlib 顯示圖形,你還必須安裝 PyGObject 和 Pycairo。這涉及到編譯代碼,只要你安裝了必需的頭文件和庫,pip3
便可以為你執行此操作。你的 Python 虛擬環境不了解這些依賴庫,因此你可以在環境內部或外部執行安裝命令。
在 Fedora 和 CentOS 上:
(example) $ sudo dnf install -y gcc zlib-devel bzip2 bzip2-devel readline-devel
sqlite sqlite-devel openssl-devel tk-devel git python3-cairo-devel
cairo-gobject-devel gobject-introspection-devel
在 Ubuntu 和 Debian 上:
(example) $ sudo apt install -y libgirepository1.0-dev build-essential
libbz2-dev libreadline-dev libssl-dev zlib1g-dev libsqlite3-dev wget
curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libcairo2-dev
一旦它們安裝好了,你可以安裝 Matplotlib 需要的 GUI 組件。
(example) $ pip3 install PyGObject pycairo
用 Seaborn 和 Matplotlib 顯示圖形
在你最喜歡的文本編輯器新建一個叫 vizualize.py
的文件。要創建數據的線形圖可視化,首先,你必須導入必要的 Python 模塊 —— 先前代碼示例中使用的 Pandas 模塊:
#!/usr/bin/env python3
from pandas import read_csv, DataFrame
import pandas as pd
接下來,導入 Seaborn、Matplotlib 和 Matplotlib 的幾個組件,以便你可以配置生成的圖形:
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import rcParams
Matplotlib 可以將其輸出導出為多種格式,包括 PDF、SVG 和桌面上的 GUI 窗口。對於此示例,將輸出發送到桌面很有意義,因此必須將 Matplotlib 後端設置為 GTK3Agg
。如果你不使用 Linux,則可能需要使用 TkAgg
後端。
設置完 GUI 窗口以後,設置窗口大小和 Seaborn 預設樣式:
matplotlib.use('GTK3Agg')
rcParams['figure.figsize'] = 11,8
sns.set_style('darkgrid')
現在,你的顯示已配置完畢,代碼已經很熟悉了。使用 Pandas 導入 sample.csv
文件,並定義數據幀的列:
FILE = open('sample.csv','r')
DATAFRAME = pd.read_csv(FILE)
DATAFRAME.columns = [ 'red','green','blue' ]
有了適當格式的數據,你可以將其繪製在圖形中。將每一列用作繪圖的輸入,然後使用 plt.show()
在 GUI 窗口中繪製圖形。plt.legend()
參數將列標題與圖形上的每一行關聯(loc
參數將圖例放置在圖表之外而不是在圖表上方):
for i in DATAFRAME.columns:
DATAFRAME[i].plot()
plt.legend(bbox_to_anchor=(1, 1), loc=2, borderaxespad=1)
plt.show()
運行代碼以獲得結果。
![第一個數據可視化](/data/attachment/album/201909/30/001927sbk9jbqi11s2y2kq.png "First data visualization")
你的圖形可以準確顯示 CSV 文件中包含的所有信息:值在 Y 軸上,索引號在 X 軸上,並且圖形中的線也被標識出來了,以便你知道它們代表什麼。然而,由於此代碼正在跟蹤顏色值(至少是假裝),所以線條的顏色不僅不直觀,而且違反直覺。如果你永遠不需要分析顏色數據,則可能永遠不會遇到此問題,但是你一定會遇到類似的問題。在可視化數據時,你必須考慮呈現數據的最佳方法,以防止觀看者從你呈現的內容中推斷出虛假信息。
為了解決此問題(並展示一些可用的自定義設置),以下代碼為每條繪製的線分配了特定的顏色:
import matplotlib
from pandas import read_csv, DataFrame
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import rcParams
matplotlib.use('GTK3Agg')
rcParams['figure.figsize'] = 11,8
sns.set_style('whitegrid')
FILE = open('sample.csv','r')
DATAFRAME = pd.read_csv(FILE)
DATAFRAME.columns = [ 'red','green','blue' ]
plt.plot(DATAFRAME['red'],'r-')
plt.plot(DATAFRAME['green'],'g-')
plt.plot(DATAFRAME['blue'],'b-')
plt.plot(DATAFRAME['red'],'ro')
plt.plot(DATAFRAME['green'],'go')
plt.plot(DATAFRAME['blue'],'bo')
plt.show()
這使用特殊的 Matplotlib 表示法為每列創建兩個圖。每列的初始圖分配有一種顏色(紅色為 r
,綠色為 g
,藍色為 b
)。這些是內置的 Matplotlib 設置。 -
表示實線(雙破折號,例如 r--
,將創建虛線)。為每個具有相同顏色的列創建第二個圖,但是使用 o
表示點或節點。為了演示內置的 Seaborn 主題,請將 sns.set_style
的值更改為 whitegrid
。
![改進的數據可視化](/data/attachment/album/201909/30/001932q8nq81e4pq8nefqg.png "Improved data visualization")
停用你的虛擬環境
探索完 Pandas 和繪圖後,可以使用 deactivate
命令停用 Python 虛擬環境:
(example) $ deactivate
$
當你想重新使用它時,只需像在本文開始時一樣重新激活它即可。重新激活虛擬環境時,你必須重新安裝模塊,但是它們是從緩存安裝的,而不是從互聯網下載的,因此你不必聯網。
無盡的可能性
Pandas、Matplotlib、Seaborn 和數據科學的真正力量是無窮的潛力,使你能夠以有意義和啟發性的方式解析、解釋和組織數據。下一步是使用你在本文中學到的新工具探索簡單的數據集。Matplotlib 和 Seaborn 不僅有折線圖,還有很多其他功能,因此,請嘗試創建條形圖或餅圖或完全不一樣的東西。
一旦你了解了你的工具集並對如何關聯數據有了一些想法,則可能性是無限的。數據科學是尋找隱藏在數據中的故事的新方法。讓開源成為你的媒介。
via: https://opensource.com/article/19/9/get-started-data-science-python
作者:Seth Kenlon 選題:lujun9972 譯者:GraveAccent 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive