来源丨数据STUDIO
在本文中,云朵君将介绍一些非常独特的并且好用的 Python 包,它们可以在许多方面帮助你构建数据的工作流。
Python 可以说是最容易入门的编程语言,在numpy,scipy等基础包的帮助下,对于数据的处理和机器学习来说Python可以说是目前最好的语言,在各位大佬和热心贡献者的帮助下Python拥有一个庞大的社区支持技术发展,开发两个各种 Python 包来帮助数据人员的工作。
1、Knockknock
Knockknock是一个简单的Python包,它会在机器学习模型训练结束或崩溃时通知您。我们可以通过多种渠道获得通知,如电子邮件、Slack、Microsoft Teams等。
为了安装该包,我们使用以下代码。
代码语言:javascript复制pip install knockknock
例如,我们可以使用以下代码将机器学习建模训练状态通知到指定的电子邮件地址。
代码语言:javascript复制from knockknock import email_sender
from sklearn.linear_model import LinearRegression
import numpy as np
@email_sender(recipient_emails=["<your_email@address.com>", "<your_second_email@address.com>"], sender_email="<sender_email@gmail.com>")
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就是你需要的。这个包将在你的笔记本或命令提示符中提供一个简单的进度计。
让我们从安装包开始。
代码语言:javascript复制pip install tqdm
然后可以使用以下代码来显示循环过程中的进度条。
代码语言:javascript复制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,可以使用它了解所有数据分析步骤。
安装包
代码语言:javascript复制pip install pandas-log
安装包之后,看看下面的示例。
代码语言:javascript复制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 操作记录。
代码语言:javascript复制with pandas_log.enable():
res = (df.drop("born", axis = 1)
.groupby('name')
)
通过 pandas-log,我们可以获取所有的执行信息。
4、Emoji
顾名思义,Emoji 是一个支持 emoji 文本解析的 Python 包。通常,我们很难用 Python 处理表情符号,但 Emoji 包可以帮助我们进行转换。
使用以下代码安装 Emoji 包。
代码语言:javascript复制pip install emoji
看看下面代码:
代码语言:javascript复制import emoji
print(emoji.emojize('Python is :thumbs_up:'))
代码语言:javascript复制Python is
有了这个包,可以轻易的输出表情符号。
5、TheFuzz
TheFuzz 使用 Levenshtein 距离来匹配文本以计算相似度。
代码语言:javascript复制pip install thefuzz
下面代码介绍如何使用 TheFuzz 进行相似性文本匹配。
代码语言:javascript复制from thefuzz import fuzz, process
#Testing the score between two sentences
fuzz.ratio("Test the word", "test the Word!")
代码语言:javascript复制81
TheFuzz 还可以同时从多个单词中提取相似度分数。
代码语言:javascript复制choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
process.extract("new york jets", choices, limit=2)
代码语言:javascript复制[('new york jets', 100),
('new york Giants', 79)]
TheFuzz 适用于任何文本数据相似性检测,这个工作在nlp中非常重要。
6、Numerizer
Numerizer 可将写入的数字文本转换为对应的整数或浮点数。
代码语言:javascript复制pip install numerizer
然后 让我们尝试几个输入来进行转换。
代码语言:javascript复制from numerizer import numerize
numerize('forty two')
代码语言:javascript复制'42'
如果使用另一种书写风格,它也可以工作的。
代码语言:javascript复制numerize('forty-two')
代码语言:javascript复制'42'
代码语言:javascript复制numerize('nine and three quarters')
代码语言:javascript复制'9.75'
如果输入不是数字的表达式,那么将会保留:
代码语言:javascript复制numerize('maybe around nine and three quarters')
代码语言:javascript复制'maybe around 9.75'
7、PyAutoGUI
PyAutoGUI 可以自动控制鼠标和键盘。
代码语言:javascript复制pip install pyautogui
然后我们可以使用以下代码测试。
代码语言:javascript复制import pyautogui
pyautogui.moveTo(10, 15)
pyautogui.click()
pyautogui.doubleClick()
pyautogui.press('enter')
上面的代码会将鼠标移动到某个位置并单击鼠标。当需要重复操作(例如下载文件或收集数据)时,非常有用。
8、Weightedcalcs
Weightedcalcs 用于统计计算。用法从简单的统计数据(例如加权平均值、中位数和标准变化)到加权计数和分布等。
代码语言:javascript复制pip install weightedcalcs
使用可用数据计算加权分布。
代码语言:javascript复制import seaborn as sns
df = sns.load_dataset('mpg')
import weightedcalcs as wc
calc = wc.Calculator("mpg")
然后我们通过传递数据集并计算预期变量来进行加权计算。
代码语言:javascript复制calc.distribution(df, "origin")
代码语言:javascript复制origin
europe 0.208616
japan 0.257042
usa 0.534342
Name: mpg, dtype: float64
9、scikit-posthocs
scikit-posthocs 是一个用于“事后”测试分析的 python 包,通常用于统计分析中的成对比较。该软件包提供了简单的类似 scikit-learn API 来进行分析。
代码语言:javascript复制pip install scikit-posthocs
然后让我们从简单的数据集开始,进行 ANOVA 测试。
代码语言:javascript复制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)
代码语言:javascript复制 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 测试结果,但不确定哪个变量类对结果的影响最大,可以使用以下代码进行原因的查看。
代码语言:javascript复制sp.posthoc_ttest(df,
val_col='SepalWidth',
group_col='Species',
p_adjust='holm')
使用 scikit-posthoc,我们简化了事后测试的成对分析过程并获得了 P 值
10、Cerberus
Cerberus 是一个用于数据验证的轻量级 python 包。
代码语言:javascript复制pip install cerberus
Cerberus 的基本用法是验证类的结构。
代码语言:javascript复制from cerberus import Validator
schema = {'name': {'type': 'string'},
'gender':{'type': 'string'},
'age':{'type':'integer'}}
v = Validator(schema)
定义好需要验证的结构后,可以对实例进行验证。
代码语言:javascript复制document = {'name': 'john doe', 'gender':'male', 'age': 15}
v.validate(document)
代码语言:javascript复制True
如果匹配,则 Validator 类将输出True 。这样我们可以确保数据结构是正确的。
11、ppscore
ppscore 用于计算与目标变量相关的变量的预测能力。该包计算可以检测两个变量之间的线性或非线性关系的分数。分数范围从 0(无预测能力)到 1(完美预测能力)。
代码语言:javascript复制pip install ppscore
使用 ppscore 包根据目标计算分数。
代码语言:javascript复制import seaborn as sns
import ppscore as pps
df = sns.load_dataset('mpg')
pps.predictors(df, 'mpg')
结果进行了排序。排名越低变量对目标的预测能力越低。
12、Maya
Maya 用于尽可能轻松地解析 DateTime 数据。
代码语言:javascript复制 pip install maya
然后我们可以使用以下代码轻松获得当前日期。
代码语言:javascript复制import maya
now = maya.now()
print(now)
还可以为明天日期。
代码语言:javascript复制tomorrow = maya.when('tomorrow')
tomorrow.datetime()
代码语言:javascript复制datatime.datatime.(2022, 8, 8, 6, 44, 10, 141499,
tzinfo=<UTC>)
13、Pendulum
Pendulum 是另一个涉及 DateTime 数据的 python 包。它用于简化任何 DateTime 分析过程。
代码语言:javascript复制pip install pendulum
我们可以对实践进行任何的操作。
代码语言:javascript复制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包。该包是各种编码方法的集合,我们可以根据需要将其应用于各种分类数据。
代码语言:javascript复制pip install category_encoders
可以使用以下示例应用转换。
代码语言:javascript复制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 用于训练机器学习模型以预测具有两个以上类别目标的数据集。
代码语言:javascript复制pip install scikit-multilearn
利用样本数据集进行多标签KNN来训练分类器并度量性能指标。
代码语言:javascript复制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)
代码语言:javascript复制emotions:train - exists, not redownloading
emotions:test - exists, not redownloading
0.2953795379537954
16、Multiset
Multiset类似于内置的set函数,但该包允许相同的字符多次出现。
代码语言:javascript复制pip install multiset
可以使用下面的代码来使用 Multiset 函数。
代码语言:javascript复制from multiset import Multiset
set1 = Multiset('aab')
set1
代码语言:javascript复制Multiset({'a': 2, 'b':1})
17、Jazzit
Jazzit 可以在我们的代码出错或等待代码运行时播放音乐。
代码语言:javascript复制pip install jazzit
使用以下代码在错误情况下尝试示例音乐。
代码语言:javascript复制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中的数学公式过程。它将任何数学函数转换为其方程形式。
代码语言:javascript复制pip install handcalcs
使用以下代码来测试 handcalcs 包。使用 %%render 魔术命令来渲染 Latex 。
代码语言:javascript复制import handcalcs.render
from math import sqrt
%%rendera = 4
b = 6
c = sqrt(3*a b/7)
19、NeatText
NeatText 可简化文本清理和预处理过程。它对任何 NLP 项目和文本机器学习项目数据都很有用。
代码语言:javascript复制pip install neattext
使用下面的代码,生成测试数据
代码语言:javascript复制import neattext as nt
mytext = "This is the word sample but ,our WEBSITE is https://exaempleeele.com ✨."
docx = nt.TextFrame(text=mytext)
TextFrame 用于启动 NeatText 类然后可以使用各种函数来查看和清理数据。
代码语言:javascript复制docx.describe()
代码语言:javascript复制Key Value
Length : 72
vowels : 21
consonants: 33
stopwords : 5
punctuations: 6
special_char: 6
tokens(whitespace): 11
tokens(words): 13
使用 describe 函数,可以显示每个文本统计信息。进一步清理数据,可以使用以下代码。
代码语言:javascript复制docx.normalize()
20、Combo
Combo 是一个用于机器学习模型和分数组合的 python 包。该软件包提供了一个工具箱,允许将各种机器学习模型训练成一个模型。也就是可以对模型进行整合。
代码语言:javascript复制pip install combo
使用来自 scikit-learn 的乳腺癌数据集和来自 scikit-learn 的各种分类模型来创建机器学习组合。
代码语言:javascript复制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
接下来,看一下用于预测目标的单个分类器。
代码语言:javascript复制# 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()
代码语言:javascript复制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 模型。
代码语言:javascript复制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 来获得这些信息!这个包有幸运数字、幸运标志、心情等等。这是我们人工智能算命的基础数据,哈
代码语言:javascript复制pip install pyaztro
使用以下代码访问今天的星座信息。
代码语言:javascript复制import pyaztro
pyaztro.Aztro(sign='gemini').description
代码语言:javascript复制"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 可用于简化生成合成数据。许多开发人员使用这个包来创建测试的数据。
代码语言:javascript复制pip install Faker
要使用 Faker 包生成合成数据
代码语言:javascript复制from faker import Faker
fake = Faker()
生成名字
代码语言:javascript复制fake.name()
代码语言:javascript复制'Danielle Cobb'
每次从 Faker 类获取 .name 属性时,Faker 都会随机生成数据。
23、Fairlearn
Fairlearn 用于评估和减轻机器学习模型中的不公平性。该软件包提供了许多查看偏差所必需的 API。
代码语言:javascript复制pip install fairlearn
然后可以使用 Fairlearn 的数据集来查看模型中有多少偏差。
代码语言:javascript复制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 指数是一个编程排名数据,对于开发人员来说是非常重要的因为我们不想错过编程世界的下一件大事。
代码语言:javascript复制pip install tiobeindexpy
可以通过以下代码获得当月前 20 名的编程语言排名。
代码语言:javascript复制from tiobeindexpy import tiobeindexpy as tb
df = tb.top_20()
25、pytrends
pytrends 可以使用 Google API 获取关键字趋势数据。如果想要了解当前的网络趋势或与我们的关键字相关的趋势时,该软件包非常有用。这个需要访问google,所以你懂的。
代码语言:javascript复制pip install pytrends
假设我想知道与关键字“Present Gift”相关的当前趋势,
代码语言:javascript复制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 包。该包可以检测数据类型并推断列的数据应该是什么。
代码语言:javascript复制pip install visions
可以使用以下代码检测数据中的列数据类型。这里使用 seaborn 的 Titanic 数据集。
代码语言:javascript复制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 可以为任何代码创建作业调度功能
代码语言:javascript复制pip install schedule
例如,我们想10 秒工作一次:
代码语言:javascript复制import schedule
import time
def job():
print("I'm working...")
schedule.every(10).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
代码语言:javascript复制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 包,可应用于多种语言。用法很简单,并且对数据清理过程非常有用。
代码语言:javascript复制pip install autocorrect
可以使用类似于以下代码进行自动更正。
代码语言:javascript复制from autocorrect import Speller
spell = Speller()
spell("I'm not sleaspy and tehre is no place, I'm giong to.")
代码语言:javascript复制"I'm not sleaspy and tehre is no place,
I'm giong to."
29、funcy
funcy 包含用于日常数据分析使用的精美实用功能。包中的功能太多了,我无法全部展示出来,有兴趣的请查看他的文档。
代码语言:javascript复制pip install funcy
这里只展示一个示例函数,用于从可迭代变量中选择一个偶数,如下面的代码所示。
代码语言:javascript复制from funcy import select, even
select(even, {i for i in range (20)})
代码语言:javascript复制{0, 2, 4, 6, 8, 10, 12, 14, 16, 18}
30、IceCream
IceCream 可以使调试过程更容易。该软件包在打印/记录过程中提供了更详细的输出。
代码语言:javascript复制pip install icecream
可以使用下面代码
代码语言:javascript复制from icecream import ic
def some_function(i):
i = 4 (1 * 2)/ 10
return i 35
ic(some_function(121))
代码语言:javascript复制39.2
也可以用作函数检查器。
代码语言:javascript复制def foo():
ic()
if some_function(12):
ic()
else:
ic()
foo()
打印的详细程度非常适合分析
总结
在本文中,总结了 30个在数据工作中有用的独特 Python 包。大多数软件包易于使用且简单明了,但有些可能功能较多需要进一步阅读其文档,如果你有兴趣请去pypi网站搜索并查看该软件包的主页和文档,希望本文对你有所帮助。
代码语言:javascript复制- END -对比Excel系列图书累积销量达15w册,让你轻松掌握数据分析技能,可以点击下方链接进行了解选购: