30个数据科学工作中最常用的 Python 包

Python 可以说是最容易入门的编程语言,在numpy,scipy等基础包的帮助下,对于数据的处理和机器学习来说Python可以说是目前最好的语言。

在各位大佬和热心贡献者的帮助下Python拥有一个庞大的社区支持技术发展,开发两个各种 Python 包来帮助数据人员的工作。

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

好的文章离不开粉丝的分享、推荐,资料干货、资料分享、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:pythoner666,备注:来自CSDN + 加群
方式②、微信搜索公众号: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]>")  
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:'))  

Python is

有了这个包,可以轻易的输出表情符号。

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!")  

81

TheFuzz 还可以同时从多个单词中提取相似度分数。

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

TheFuzz 适用于任何文本数据相似性检测,这个工作在nlp中非常重要。

6、Numerizer

Numerizer 可将写入的数字文本转换为对应的整数或浮点数。

pip install numerizer  

然后 让我们尝试几个输入来进行转换。

from numerizer import numerize  
numerize('forty two')  

'42'

如果使用另一种书写风格,它也可以工作的。

numerize('forty-two')  

'42'
numerize('nine and three quarters')  

'9.75'

如果输入不是数字的表达式,那么将会保留:

numerize('maybe around nine and three quarters')  
'maybe around 9.75'

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")  
origin  
europe  0.208616  
japan   0.257042  
usa     0.534342  
Name: mpg, dtype: float64

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)  
            df     sum_sq     mean_sq   F        PR(>F)      
C (Species) 2.0    11.344933  5.672467  49.1600  4.492017e-17  
Residual    147.0  16.962000  0.115388  NaN      NaN

获得了 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)  
True

如果匹配,则 Validator 类将输出True 。这样我们可以确保数据结构是正确的。

11、ppscore

ppscore 用于计算与目标变量相关的变量的预测能力。该包计算可以检测两个变量之间的线性或非线性关系的分数。分数范围从 0(无预测能力)到 1(完美预测能力)。

pip install ppscore  

使用 ppscore 包根据目标计算分数。

import seaborn as sns  
import ppscore as pps  
df = 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()  

datatime.datatime.(2022, 8, 8, 6, 44, 10, 141499,  
tzinfo=<UTC>)

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)  
emotions:train - exists, not redownloading    
emotions:test - exists, not redownloading     
  
0.2953795379537954

16、Multiset

Multiset类似于内置的set函数,但该包允许相同的字符多次出现。

pip install multiset  

可以使用下面的代码来使用 Multiset 函数。

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

Multiset({
    
    'a': 2, 'b':1})

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 https://exaempleeele.com ✨."  
docx = nt.TextFrame(text=mytext)  

TextFrame 用于启动 NeatText 类然后可以使用各种函数来查看和清理数据。

docx.describe()  

Key       Value  
Length    : 72  
vowels    : 21  
consonants: 33  
stopwords : 5  
punctuations: 6  
special_char: 6  
tokens(whitespace): 11  
tokens(words): 13

使用 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()  
DT   | Accuracy: 0.9386, ROC:0.9383, F1:0.9521  
LR   | Accuracy: 0.9693, ROC:0.962,  F1:0.9766  
KNN  | Accuracv: 0.9561, ROC:0.9519, F1:0.9662  
RF   | Accuracy: 0.9781, ROC:0.9716, F1:0.9833  
GBDT | Accuracy: 0.9605, ROC:0.9524, F1:0.9699

使用 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  
"A very sexy visitor will cross your path soon.   
If not today, then within a few days.   
Once they arrive, lots of things will change.   
Your organized schedule, for one.   
Not that you'll mind, of coursel"

22、Faker

Faker 可用于简化生成合成数据。许多开发人员使用这个包来创建测试的数据。

pip install Faker  

要使用 Faker 包生成合成数据

from faker import Faker  
fake = Faker()  

生成名字

fake.name()  
'Danielle Cobb'

每次从 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)  
I'm working...    
I'm working...     
I'm working...     
I'm working...     
I'm working...     
I'm working...     
I'm working...     
I'm working...     
I'm working...     
I'm working...  

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.")  
"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)})  

{
    
    0, 2, 4, 6, 8, 10, 12, 14, 16, 18}

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))  
39.2

也可以用作函数检查器。

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

打印的详细程度非常适合分析

总结

在本文中,总结了 30个在数据工作中有用的独特 Python 包。大多数软件包易于使用且简单明了,但有些可能功能较多需要进一步阅读其文档,如果你有兴趣请去pypi网站搜索并查看该软件包的主页和文档,希望本文对你有所帮助。

猜你喜欢

转载自blog.csdn.net/m0_59596937/article/details/130779123