用 Python 入門資料科學

Seth Kenlon發表於2019-09-30

使用 Python 開展資料科學為你提供了無限的潛力,使你能夠以有意義和啟發性的方式解析、解釋和組織資料。

資料科學是計算領域一個令人興奮的新領域,它圍繞分析、視覺化和關聯以解釋我們的計算機收集的有關世界的無限資訊而建立。當然,稱其為“新”領域有點不誠實,因為該學科是統計學、資料分析和普通而古老的科學觀察派生而來的。

但是資料科學是這些學科的形式化分支,擁有自己的流程和工具,並且可以廣泛應用於以前從未產生過大量不可管理資料的學科(例如視覺效果)。資料科學是一個新的機會,可以重新審視海洋學、氣象學、地理學、製圖學、生物學、醫學和健康以及娛樂行業的資料,並更好地瞭解其中的模式、影響和因果關係。

像其他看似包羅永珍的大型領域一樣,知道從哪裡開始探索資料科學可能會令人生畏。有很多資源可以幫助資料科學家使用自己喜歡的程式語言來實現其目標,其中包括最流行的程式語言之一:Python。使用 PandasMatplotlibSeaborn 這些庫,你可以學習資料科學的基本工具集。

如果你對 Python 的基本用法不是很熟悉,請在繼續之前先閱讀我的 Python 介紹

建立 Python 虛擬環境

程式設計師有時會忘記在開發計算機上安裝了哪些庫,這可能導致他們提供了在自己計算機上可以執行,但由於缺少庫而無法在所有其它電腦上執行的程式碼。Python 有一個系統旨在避免這種令人不快的意外:虛擬環境。虛擬環境會故意忽略你已安裝的所有 Python 庫,從而有效地迫使你一開始使用通常的 Python 進行開發。

為了用 venv 啟用虛擬環境, 為你的環境取個名字 (我會用 example) 並且用下面的指令建立它:

$ python3 -m venv example

匯入source該環境的 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(在第二行中匯入)使用該變數來建立資料幀dataframe。在 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 顯示圖形,你還必須安裝 PyGObjectPycairo。這涉及到編譯程式碼,只要你安裝了必需的標頭檔案和庫,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()

執行程式碼以獲得結果。

第一個資料視覺化

你的圖形可以準確顯示 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

改進的資料視覺化

停用你的虛擬環境

探索完 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

本文由 LCTT 原創編譯,Linux中國 榮譽推出

用 Python 入門資料科學

訂閱“Linux 中國”官方小程式來檢視

相關文章