在互联网上,关于提高工作效率的建议和专家意见层出不穷。然而,对于数据科学从业者来说,了解正确的工具来轻松完成工作是至关重要的。在数据科学实践中,可能会遇到与高内存/CPU使用率、大型数据集加载问题、特定函数进度跟踪、代码格式化和Python包升级相关的问题。本文将介绍五个Python包来解决上述问题。
Datatable最初是作为一个工具包,用于在单节点机器上以最大速度执行高达100GB的大数据操作。它与R的data.table紧密相关,并尝试模仿其核心算法和API。目前,它处于Beta阶段,但可以快速读取大型数据集,通常比Pandas更快。虽然它缺乏Pandas提供的灵活性,但可以在几秒钟内将datatable数据框转换为Pandas数据框。以下是安装和使用datatable的示例:
pip install datatable
import pandas as pd
import datatable as dt
train = pd.read_csv("../input/jane-street-market-prediction/train.csv")
print("Train Shape:", train.shape)
data = dt.fread("../input/jane-street-market-prediction/train.csv")
print("Data Shape:", data.shape)
df = data.to_pandas()
通过datatable加载大型数据集并将其转换为Pandas数据框的速度明显快于直接使用Pandas加载大型数据集。
Joblib提供了用于流水线化Python作业的实用工具。它还提供了更高效地保存和加载Python对象的实用工具。作为pickle的替代品,Joblib可以帮助使用Parallel方法加速任何函数,并且比pickle在处理包含大型数据的Python对象时更有效。以下是使用Joblib的示例代码:
from joblib import Parallel, delayed
import time
def sqr_fn(num):
time.sleep(1)
return num**2
Parallel(n_jobs=2)(delayed(sqr_fn)(i) for i in range(10))
首先,从joblib导入了Parallel和delayed方法,以及Python的内置time模块(为了故意增加数据处理时间,以便观察时间差异)。创建了一个函数,用于计算任何数字的平方。在Parallel方法中,n_jobs用于指定应该使用多少并发进程或线程来并行化joblib的例程。可以根据处理器的核心数增加或减少n_jobs。如果设置为-1,则使用所有CPU。
是否希望在迭代时有一个进度条,以便对循环所需的总时间有一个大致的估计?使用tqdm可以立即让循环显示智能进度表——只需将任何可迭代对象包装在tqdm(iterable)中即可!以下是使用tqdm的示例:
from tqdm import tqdm
for i in tqdm(range(100)):
sqr_fn(i)
此外,tqdm还提供了诸如set_description、update等功能。可以访问官方文档了解更多信息。
是否是一个懒得按照PEP8指南编写格式良好的Python代码的程序员,但又希望如此?不用担心,Black来拯救了。Black是一个不妥协的Python代码格式化器。Black为提供了速度、确定性和免受pycodestyle关于格式化的唠叨。将节省时间和精神能量,专注于更重要的事情。以下是安装和使用Black的示例:
pip install black
black {source_file_or_directory}
如果作为脚本运行Black不起作用,可以将其作为包运行:
python -m black {source_file_or_directory}
pip install pip-review
pip-review --auto # 自动安装所有可用更新
pip-review --interactive # 交互式运行,询问每个包是否升级