30 個數據工程必備的Python 包
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
- 天翼雲全場景業務無縫替換至國產原生作業系統CTyunOS!
- 以羊了個羊為例,淺談小程式抓包與響應報文修改
- 這幾種常見的 JVM 調優場景,你知道嗎?
- 如此狂妄,自稱高效能佇列的Disruptor有啥來頭?
- 為什麼要學習GoF設計模式?
- 827. 最大人工島 : 簡單「並查集 列舉」運用題
- 手把手教你如何使用 Timestream 實現物聯網時序資料儲存和分析
- 850. 矩形面積 II : 掃描線模板題
- Java 併發程式設計解析 | 基於JDK原始碼解析Java領域中的併發鎖,我們可以從中學習到什麼內容?
- 【手把手】光說不練假把式,這篇全鏈路壓測實踐探索
- 大廠鍾愛的全鏈路壓測有什麼意義?四種壓測方案詳細對比分析
- 寫個續集,填坑來了!關於“Thread.sleep(0)這一行‘看似無用’的程式碼”裡面留下的坑。
- 857. 僱傭 K 名工人的最低成本 : 列舉 優先佇列(堆)運用題
- Vue3 實現一個自定義toast(小彈窗)
- 669. 修剪二叉搜尋樹 : 常規樹的遍歷與二叉樹性質
- 讀完 RocketMQ 原始碼,我學會了如何優雅的建立執行緒
- 效能調優——小小的log大大的坑
- 1582. 二進位制矩陣中的特殊位置 : 簡單模擬題
- elementui原始碼學習之仿寫一個el-switch
- 646. 最長數對鏈 : 常規貪心 DP 運用題