30 個數據工程必備的Python 包

語言: CN / TW / HK

Python 可以說是最容易入門的程式語言,在numpy,scipy等基礎包的幫助下,對於資料的處理和機器學習來說Python可以說是目前最好的語言,在各位大佬和熱心貢獻者的幫助下Python擁有一個龐大的社群支援技術發展,開發兩個各種 Python 包來幫助資料人員的工作。

在本文中,將介紹一些非常獨特的並且好用的 Python 包,它們可以在許多方面幫助你構建資料的工作流。

1、Knockknock

Knockknock是一個簡單的Python包,它會在機器學習模型訓練結束或崩潰時通知您。我們可以通過多種渠道獲得通知,如電子郵件、Slack、Microsoft Teams等。

為了安裝該包,我們使用以下程式碼。

pip install knockknock

例如,我們可以使用以下程式碼將機器學習建模訓練狀態通知到指定的電子郵件地址。

from knockknock import email_sender
from sklearn.linear_model import LinearRegression
import numpy as np

@email_sender(recipient_emails=["<[email protected]>", "<[email protected]>"], sender_email="<[email protected]m>")
def train_linear_model(your_nicest_parameters):
    x = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
    y = np.dot(x, np.array([1, 2])) + 3 
    regression = LinearRegression().fit(x, y)
return regression.score(x, y)

這樣就可以在該函數出現問題或者完成時獲得通知。

2、tqdm

當需要進行迭代或迴圈時,如果你需要顯示進度條?那麼tqdm就是你需要的。這個包將在你的筆記本或命令提示符中提供一個簡單的進度計。

讓我們從安裝包開始。

pip install tqdm

然後可以使用以下程式碼來顯示迴圈過程中的進度條。

from tqdm import tqdm
q = 0
for i in tqdm(range(10000000)):
    q = i +1

就像上面的gifg,它可以在notebook上顯示一個很好的進度條。當有一個複雜的迭代並且想要跟蹤進度時,它會非常有用。

3、Pandas-log

Panda -log可以對Panda的基本操作提供反饋,如.query、.drop、.merge等。它基於R的Tidyverse,可以使用它瞭解所有資料分析步驟。

安裝包

pip install pandas-log

安裝包之後,看看下面的示例。

import pandas as pd
import numpy as np
import pandas_log
df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
                   "toy": [np.nan, 'Batmobile', 'Bullwhip'],
                   "born": [pd.NaT, pd.Timestamp("1940-04-25"),   pd.NaT]})

然後讓我們嘗試用下面的程式碼做一個簡單的 pandas 操作記錄。

with pandas_log.enable():
    res = (df.drop("born", axis = 1)
             .groupby('name')
          )

通過 pandas-log,我們可以獲取所有的執行資訊。

4、Emoji

顧名思義,Emoji 是一個支援 emoji 文字解析的 Python 包。通常,我們很難用 Python 處理表情符號,但 Emoji 包可以幫助我們進行轉換。

使用以下程式碼安裝 Emoji 包。

pip install emoji

看看下面程式碼:

import emoji
print(emoji.emojize('Python is :thumbs_up:'))

有了這個包,可以輕易的輸出表情符號。

5、TheFuzz

TheFuzz 使用 Levenshtein 距離來匹配文字以計算相似度。

pip install thefuzz

下面程式碼介紹如何使用 TheFuzz 進行相似性文字匹配。

from thefuzz import fuzz, process

#Testing the score between two sentences
fuzz.ratio("Test the word", "test the Word!")

TheFuzz 還可以同時從多個單詞中提取相似度分數。

choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
process.extract("new york jets", choices, limit=2)

TheFuzz 適用於任何文字資料相似性檢測,這個工作在nlp中非常重要。

6、Numerizer

Numerizer 可將寫入的數字文字轉換為對應的整數或浮點數。

pip install numerizer

然後 讓我們嘗試幾個輸入來進行轉換。

from numerizer import numerize
numerize('forty two')

如果使用另一種書寫風格,它也可以工作的。

numerize('forty-two')

numerize('nine and three quarters')

如果輸入不是數字的表示式,那麼將會保留:

numerize('maybe around nine and three quarters')

7、PyAutoGUI

PyAutoGUI 可以自動控制滑鼠和鍵盤。

pip install pyautogui

然後我們可以使用以下程式碼測試。

import pyautogui
pyautogui.moveTo(10, 15)
pyautogui.click()
pyautogui.doubleClick()
pyautogui.press('enter')

上面的程式碼會將滑鼠移動到某個位置並單擊滑鼠。當需要重複操作(例如下載檔案或收集資料)時,非常有用。

8、Weightedcalcs

Weightedcalcs 用於統計計算。用法從簡單的統計資料(例如加權平均值、中位數和標準變化)到加權計數和分佈等。

pip install weightedcalcs

使用可用資料計算加權分佈。

import seaborn as sns
df = sns.load_dataset('mpg')
import weightedcalcs as wc
calc = wc.Calculator("mpg")

然後我們通過傳遞資料集並計算預期變數來進行加權計算。

calc.distribution(df, "origin")

9、scikit-posthocs

scikit-posthocs 是一個用於“事後”測試分析的 python 包,通常用於統計分析中的成對比較。該軟體包提供了簡單的類似 scikit-learn API 來進行分析。

pip install scikit-posthocs

然後讓我們從簡單的資料集開始,進行 ANOVA 測試。

import statsmodels.api as sa
import statsmodels.formula.api as sfa
import scikit_posthocs as sp
df = sa.datasets.get_rdataset('iris').data
df.columns = df.columns.str.replace('.', '')

lm = sfa.ols('SepalWidth ~ C(Species)', data=df).fit()
anova = sa.stats.anova_lm(lm)
print(anova)

獲得了 ANOVA 測試結果,但不確定哪個變數類對結果的影響最大,可以使用以下程式碼進行原因的檢視。

sp.posthoc_ttest(df, val_col='SepalWidth', group_col='Species', p_adjust='holm')

使用 scikit-posthoc,我們簡化了事後測試的成對分析過程並獲得了 P 值

10、Cerberus

Cerberus 是一個用於資料驗證的輕量級 python 包。

pip install cerberus

Cerberus 的基本用法是驗證類的結構。

from cerberus import Validator
schema = {'name': {'type': 'string'}, 'gender':{'type': 'string'}, 'age':{'type':'integer'}}
v = Validator(schema)

定義好需要驗證的結構後,可以對例項進行驗證。

document = {'name': 'john doe', 'gender':'male', 'age': 15}
v.validate(document)

如果匹配,則 Validator 類將輸出True 。這樣我們可以確保資料結構是正確的。

11、ppscore

ppscore 用於計算與目標變數相關的變數的預測能力。該包計算可以檢測兩個變數之間的線性或非線性關係的分數。分數範圍從 0(無預測能力)到 1(完美預測能力)。

pip install ppscore

使用 ppscore 包根據目標計算分數。

import seaborn as sns
import ppscore as ppsdf = sns.load_dataset('mpg')
pps.predictors(df, 'mpg')

結果進行了排序。排名越低變數對目標的預測能力越低。

12、Maya

Maya 用於儘可能輕鬆地解析 DateTime 資料。

pip install maya

然後我們可以使用以下程式碼輕鬆獲得當前日期。

import maya
now = maya.now()
print(now)

還可以為明天日期。

tomorrow = maya.when('tomorrow')
tomorrow.datetime()

13、Pendulum

Pendulum 是另一個涉及 DateTime 資料的 python 包。它用於簡化任何 DateTime 分析過程。

pip install pendulum

我們可以對實踐進行任何的操作。

import pendulum
now = pendulum.now("Europe/Berlin")

now.in_timezone("Asia/Tokyo")

now.to_iso8601_string()

now.add(days=2)

14、category_encoders

category_encoders 是一個用於類別資料編碼(轉換為數值資料)的python包。該包是各種編碼方法的集合,我們可以根據需要將其應用於各種分類資料。

pip install category_encoders

可以使用以下示例應用轉換。

from category_encoders import BinaryEncoder
import pandas as pd

enc = BinaryEncoder(cols=['origin']).fit(df)
numeric_dataset = enc.transform(df)
numeric_dataset.head()

15、scikit-multilearn

scikit-multilearn 可以用於特定於多類分類模型的機器學習模型。該軟體包提供 API 用於訓練機器學習模型以預測具有兩個以上類別目標的資料集。

pip install scikit-multilearn

利用樣本資料集進行多標籤KNN來訓練分類器並度量效能指標。

from skmultilearn.dataset import load_dataset
from skmultilearn.adapt import MLkNN
import sklearn.metrics as metrics

X_train, y_train, feature_names, label_names = load_dataset('emotions', 'train')
X_test, y_test, _, _ = load_dataset('emotions', 'test')

classifier = MLkNN(k=3)
prediction = classifier.fit(X_train, y_train).predict(X_test)

metrics.hamming_loss(y_test, prediction)

16、Multiset

Multiset類似於內建的set函式,但該包允許相同的字元多次出現。

pip install multiset

可以使用下面的程式碼來使用 Multiset 函式。

from multiset import Multiset
set1 = Multiset('aab')
set1

17、Jazzit

Jazzit 可以在我們的程式碼出錯或等待程式碼執行時播放音樂。

pip install jazzit

使用以下程式碼在錯誤情況下嘗試示例音樂。

from jazzit import error_track

@error_track("curb_your_enthusiasm.mp3", wait=5)
def run():
    for num in reversed(range(10)):
        print(10/num)

這個包雖然沒什麼用,但是它的功能是不是很有趣,哈

18、handcalcs

handcalcs 用於簡化notebook中的數學公式過程。它將任何數學函式轉換為其方程形式。

pip install handcalcs

使用以下程式碼來測試 handcalcs 包。使用 %%render 魔術命令來渲染 Latex 。

import handcalcs.render
from math import sqrt
%%rendera = 4
b = 6
c = sqrt(3*a + b/7)

19、NeatText

NeatText 可簡化文字清理和預處理過程。它對任何 NLP 專案和文字機器學習專案資料都很有用。

pip install neattext

使用下面的程式碼,生成測試資料

import neattext as nt 
mytext = "This is the word sample but ,our WEBSITE is http://exaempleeele.com :blush::sparkles:."
docx = nt.TextFrame(text=mytext)

TextFrame 用於啟動 NeatText 類然後可以使用各種函式來檢視和清理資料。

docx.describe()

使用 describe 函式,可以顯示每個文字統計資訊。進一步清理資料,可以使用以下程式碼。

docx.normalize()

20、Combo

Combo 是一個用於機器學習模型和分數組合的 python 包。該軟體包提供了一個工具箱,允許將各種機器學習模型訓練成一個模型。也就是可以對模型進行整合。

pip install combo

使用來自 scikit-learn 的乳腺癌資料集和來自 scikit-learn 的各種分類模型來建立機器學習組合。

from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier

from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer

from combo.models.classifier_stacking import Stacking
from combo.utils.data import evaluate_print

接下來,看一下用於預測目標的單個分類器。

# Define data file and read X and y
random_state = 42
X, y = load_breast_cancer(return_X_y=True)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4,random_state=random_state)
# initialize a group of clfs
classifiers = [DecisionTreeClassifier(random_state=random_state),
                   LogisticRegression(random_state=random_state),
                   KNeighborsClassifier(),
                   RandomForestClassifier(random_state=random_state),
                   GradientBoostingClassifier(random_state=random_state)]
clf_names = ['DT', 'LR', 'KNN', 'RF', 'GBDT']

for i, clf in enumerate(classifiers):
    clf.fit(X_train, y_train)
    y_test_predict = clf.predict(X_test)
    evaluate_print(clf_names[i] + '   |   ', y_test, y_test_predict)
    print()

使用 Combo 包的 Stacking 模型。

clf = Stacking(classifiers, n_folds=4, shuffle_data=False,
                   keep_original=True, use_proba=False,
                   random_state=random_state)

clf.fit(X_train, y_train)
y_test_predict = clf.predict(X_test)

evaluate_print('Stacking | ', y_test, y_test_predict)

21、PyAztro

你是否需要星座資料或只是對今天的運氣感到好奇?可以使用 PyAztro 來獲得這些資訊!這個包有幸運數字、幸運標誌、心情等等。這是我們人工智慧算命的基礎資料,哈

pip install pyaztro

使用以下程式碼訪問今天的星座資訊。

import pyaztro
pyaztro.Aztro(sign='gemini').description

22、Faker

Faker 可用於簡化生成合成資料。許多開發人員使用這個包來建立測試的資料。

pip install Faker

要使用 Faker 包生成合成資料

from faker import Faker
fake = Faker()

生成名字

fake.name()

每次從 Faker 類獲取 .name 屬性時,Faker 都會隨機生成資料。

23、Fairlearn

Fairlearn 用於評估和減輕機器學習模型中的不公平性。該軟體包提供了許多檢視偏差所必需的 API。

pip install fairlearn

然後可以使用 Fairlearn 的資料集來檢視模型中有多少偏差。

from fairlearn.metrics import MetricFrame, selection_rate
from fairlearn.datasets import fetch_adult

data = fetch_adult(as_frame=True)
X = data.data
y_true = (data.target == '>50K') * 1
sex = X['sex']

selection_rates = MetricFrame(metrics=selection_rate,
                              y_true=y_true,
                              y_pred=y_true,
                              sensitive_features=sex)

fig = selection_rates.by_group.plot.bar(
    legend=False, rot=0,
    title='Fraction earning over $50,000')

Fairlearn API 有一個 selection_rate 函式,可以使用它來檢測組模型預測之間的分數差異,以便我們可以看到結果的偏差。

24、tiobeindexpy

tiobeindexpy 用於獲取 TIOBE 索引資料。TIOBE 指數是一個程式設計排名資料,對於開發人員來說是非常重要的因為我們不想錯過程式設計世界的下一件大事。

pip install tiobeindexpy

可以通過以下程式碼獲得當月前 20 名的程式語言排名。

from tiobeindexpy import tiobeindexpy as tb
df = tb.top_20()

25、pytrends

pytrends 可以使用 Google API 獲取關鍵字趨勢資料。如果想要了解當前的網路趨勢或與我們的關鍵字相關的趨勢時,該軟體包非常有用。這個需要訪問google,所以你懂的。

pip install pytrends

假設我想知道與關鍵字“Present Gift”相關的當前趨勢,

from pytrends.request import TrendReq
import pandas as pd
pytrend = TrendReq()

keywords = pytrend.suggestions(keyword='Present Gift')
df = pd.DataFrame(keywords)
df

該包將返回與關鍵字相關的前 5 個趨勢。

26、visions

visions 是一個用於語義資料分析的 python 包。該包可以檢測資料型別並推斷列的資料應該是什麼。

pip install visions

可以使用以下程式碼檢測資料中的列資料型別。這裡使用 seaborn 的 Titanic 資料集。

import seaborn as sns
from visions.functional import detect_type, infer_type
from visions.typesets import CompleteSet
df = sns.load_dataset('titanic')
typeset = CompleteSet()

converting everything to strings
print(detect_type(df, typeset))

27、Schedule

Schedule 可以為任何程式碼建立作業排程功能

pip install schedule

例如,我們想10 秒工作一次:

import schedule
import time

def job():
    print("I'm working...")

schedule.every(10).seconds.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

28、autocorrect

autocorrect 是一個用於文字拼寫更正的 python 包,可應用於多種語言。用法很簡單,並且對資料清理過程非常有用。

pip install autocorrect

可以使用類似於以下程式碼進行自動更正。

from autocorrect import Speller
spell = Speller()
spell("I'm not sleaspy and tehre is no place I'm giong to.")

29、funcy

funcy 包含用於日常資料分析使用的精美實用功能。包中的功能太多了,我無法全部展示出來,有興趣的請檢視他的文件。

pip install funcy

這裡只展示一個示例函式,用於從可迭代變數中選擇一個偶數,如下面的程式碼所示。

from funcy import select, even
select(even, {i for i in range (20)})

30、IceCream

IceCream 可以使除錯過程更容易。該軟體包在列印/記錄過程中提供了更詳細的輸出。

pip install icecream

可以使用下面程式碼

from icecream import ic

def some_function(i):
    i = 4 + (1 * 2)/ 10 
    return i + 35

ic(some_function(121))

也可以用作函式檢查器。

def foo():
    ic()

    if some_function(12):
        ic()
    else:
        ic()

foo()

列印的詳細程度非常適合分析

總結

在本文中,總結了 30個在資料工作中有用的獨特 Python 包。大多數軟體包易於使用且簡單明瞭,但有些可能功能較多需要進一步閱讀其文件,如果你有興趣請去pypi網站搜尋並檢視該軟體包的主頁和文件,希望本文對你有所幫助。

http://avoid.overfit.cn/post/b8a5170206934a119d1420dbb358bbc6

作者:Cornellius Yudha Wijaya