作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
自从我学会了欣赏咖啡里的甜味,我的味觉就扩大了 Python and R. 数据科学是一门艺术,可以从多个角度进行研究,但需要仔细平衡语言, libraries, 和专业知识. Python和R的扩展功能提供了语法糖:语法简化了我们的工作,并允许我们使用short来解决复杂的问题, 优雅的解决方案.
这些语言为我们探索解决方案空间提供了独特的方式. 每种语言都有自己的优点和缺点. 有效使用每种工具的诀窍是认识到哪种问题类型可以从每种工具中受益,并决定我们希望如何传达我们的发现. 每种语言中的语法糖使我们的工作效率更高.
R和Python作为底层代码之上的交互接口, 允许数据科学家使用他们选择的语言进行数据探索, 可视化, 和建模. 这种互动性使我们能够避免编辑和编译代码的不断循环, 这会使我们的工作不必要地复杂化吗.
这些高级语言允许我们以最小的摩擦工作,用更少的代码做更多的事情. 每种语言的语法糖使我们能够在REPL(读取-求值-打印循环)中快速测试我们的想法。, 可以实时执行代码的交互界面. 这种迭代方法是一个关键组成部分 现代数据处理周期.
R和Python的强大之处在于它们的表现力和灵活性. 每种语言都有特定的用例,其中它比另一种语言更强大. 另外, 每种语言沿着不同的向量和非常不同的输出类型解决问题. 这些风格往往有不同的开发人员社区,其中一种语言是首选的. 随着每个社区的有机发展, 他们偏爱的语言和特性集倾向于独特的语法风格,以减少解决问题所需的代码量. 随着社区和语言的成熟,语言的语法糖往往变得更加甜蜜.
尽管每种语言都提供了解决数据问题的强大工具集, 我们必须利用这些工具的特殊优势来解决这些问题. R是作为一种统计计算语言诞生的,它有一套广泛的工具可用于执行统计分析和解释数据. Python和它的机器学习方法解决了类似的问题,但只有那些适合机器学习模型的问题. 我们可以把统计计算和机器学习看作是 数据建模虽然这些学校是高度相互联系的, 它们的起源和数据建模范式是不同的.
R已经发展成为一个提供统计分析的丰富软件包, 线性建模, 和可视化. 因为这些包几十年来一直是R生态系统的一部分, 他们很成熟, efficient, 并且有充分的证据. 当一个问题需要统计计算方法时,R是适合这项工作的工具.
R受到社区喜爱的主要原因可以归结为:
为了了解R有多简洁,让我们创建一个预测钻石价格的例子. 首先,我们需要数据. 我们将使用 diamonds
默认数据集,它是用R安装的,包含颜色和切割等属性.
我们还将演示R的管道操作符(%>%
),相当于Unix命令行管道(|
) operator. 这个流行的R语法糖特性是由 Tidyverse包套件. 这个操作符和生成的代码风格是R中的游戏规则改变者,因为它允许R动词的链接(例如.e.(R函数)来划分和解决一系列问题.
下面的代码加载所需的库,处理我们的数据,并生成一个线性模型:
库(tidyverse)
库(ggplot2)
mode <- function(data) {
freq <- unique(data)
freq[which.max(汇总(匹配(数据、频率))))
}
data <- diamonds %>%
变异(((.数值),~ replace_na(., median(., na.rm = TRUE)))) %>%
变异(((.numeric), scale)) %>%
突变(在((否定(在哪里.数值)),~ replace_na(.x, mode(.x))))
model <- lm(price~., data =数据)
model <- step(model)
总结(模型)
Call:
Lm(公式=价格~克拉+切工+颜色+净度+深度+
表+ x + z, data = data)
残差:
最小1Q中位数3Q最大值
-5.3588 -0.1485 -0.0460 0.0943 2.6806
系数:
估计性病. Error t value Pr(>|t|)
(拦截)0.140019 0.002461 -56.892 < 2e-16 ***
克拉1.337607 0.005775 231.630 < 2e-16 ***
cut.L 0.146537 0.005634 26.010 < 2e-16 ***
cut.Q -0.075753 0.004508 -16.805 < 2e-16 ***
cut.C 0.037210 0.003876 9.601 < 2e-16 ***
削减^ 4 0.005168 0.003101 -1.667 0.09559 .
color.L -0.489337 0.004347 -112.572 < 2e-16 ***
color.Q -0.168463 0.003955 -42.599 < 2e-16 ***
color.C -0.041429 0.003691 -11.224 < 2e-16 ***
颜色^ 4 0.009574 0.003391 2.824 0.00475 **
颜色^ 5 0.024008 0.003202 -7.497 6.64e-14 ***
颜色^ 6 0.012145 0.002911 -4.172 3.02e-05 ***
clarity.L 1.027115 0.007584 135.431 < 2e-16 ***
clarity.Q -0.482557 0.007075 -68.205 < 2e-16 ***
clarity.C 0.246230 0.006054 40.676 < 2e-16 ***
清晰^ 4 0.091485 0.004834 -18.926 < 2e-16 ***
清晰^ 5 0.058563 0.003948 14.833 < 2e-16 ***
清晰^ 6 0.001722 0.003438 0.501 0.61640
清晰^ 7 0.022716 0.003034 7.487 7.13e-14 ***
深度0.022984 0.001622 -14.168 < 2e-16 ***
表0.014843 0.001631 -9.103 < 2e-16 ***
x -0.281282 0.008097 -34.740 < 2e-16 ***
z -0.008478 0.005872 -1.444 0.14880
---
Signif. 代码:0 ' ***' 0.001 ‘**' 0.01 ‘*' 0.05 ‘.' 0.1 ‘ ' 1
残差标准误差:0.53917自由度上的2833
乘以r²等于0.调整后的r²为0.9198
f统计量:2.81e+04 on 22 and 53917 DF, p-value: < 2.2e-16
R用它的语法糖使这个线性方程易于编程和理解. 现在,让我们把注意力转移到Python的王者地位.
Python是一个强大的, 通用语言, 它的主要用户社区之一专注于机器学习, 利用流行的库 scikit-learn, imbalanced-learn, and Optuna. 许多最有影响力的机器学习工具包,比如 TensorFlow, PyTorch, and Jax,主要是为Python编写的.
Python的语法糖是机器学习专家喜欢的魔力, 包括简洁的数据管道语法, 除了scikit-learn的fit-transform-predict模式:
scikit-learn库封装了匹配此模式的功能,同时简化了用于探索和可视化的编程. 机器学习周期的每一步也有许多特征对应, 提供交叉验证, hyperparameter调优, 和管道.
现在我们将关注一个使用Python的简单机器学习示例, 和R没有直接的比较. 我们将使用相同的数据集,并在一段非常紧凑的代码中突出显示fit-transform-predict模式.
按照机器学习的方法,我们将把数据分成训练和测试两部分. 我们将在每个分区上应用相同的转换,并将包含的操作与管道链接起来. 这些方法(fit和score)是scikit-learn中包含的强大机器学习方法的关键示例:
导入numpy为np
以pd方式导入熊猫
从sklearn.linear_model LinearRegression
从sklearn.Model_selection导入train_test_split
从sklearn.预处理导入StandardScaler
从sklearn.预处理导入OneHotEncoder
从sklearn.导入SimpleImputer
从sklearn.管道进口
从sklearn.组合导入ColumnTransformer
从熊猫.api.类型导入is_numeric_dtype
钻石= SNS.load_dataset(钻石)
钻石=钻石.dropna()
X_train,x_test,y_train,y_test = train_test_split.Drop ("price", axis=1), diamonds["price"], test_size=0.2, random_state = 0)
Num_idx = x_train.Apply (lambda x: is_numeric_dtype(x)).values
Num_cols = x_train.列(num_idx).values
Cat_cols = x_train.列(~ num_idx).values
num_pipeline = Pipeline(steps=[("imputer")), SimpleImputer(策略=“中值”)), ("scaler", StandardScaler ())))
cat_steps = Pipeline(steps=[("imputer")), SimpleImputer(策略=“常数”, fill_value = "失踪")), ("onehot", OneHotEncoder(下降=“第一”, 稀疏= False))))
#数据转换和模型构造器
preprocessor = ColumnTransformer(transformers=[("num")), num_pipeline, num_cols), ("cat", cat_steps, cat_cols)))
mod = Pipeline(steps=[("preprocessor", preprocessor), ("linear", LinearRegression())])
# .符合()调用 .依次为Fit_transform ()
mod.fit (x_train y_train)
# .预测()调用 .依次变换()
mod.预测(x_test)
打印(f"R的平方得分:{mod.分数(x_test y_test):.3f}")
我们可以看到Python中的机器学习过程是多么的流畅. 此外,Python的 sklearn
类可以帮助开发人员避免与通过模型传递数据相关的泄漏和问题,同时还可以生成结构化和生产级代码.
除了解决统计应用和创建机器学习模型, R和Python擅长报告, APIs, 交互式仪表板, 以及外部低级代码库的简单包含.
开发人员可以用R和Python生成交互式报表, 但是用R开发它们要简单得多. R还支持将这些报表导出为PDF和HTML.
这两种语言都允许数据科学家创建交互式数据应用程序. R和Python使用这些库 Shiny and Streamlit,分别创建这些应用程序.
最后,R和Python都支持到底层代码的外部绑定. 这通常用于向库中注入高性能操作,然后从所选语言内部调用这些函数. R使用 Rcpp 包,而Python使用 pybind11 包来完成这个任务.
在我作为数据科学家的工作中,我经常使用R和Python. 关键是要了解每种语言最强大的地方,然后调整问题以适应优雅的编码解决方案.
与客户沟通时, 数据科学家希望用最容易理解的语言来做这件事. Therefore, 我们必须权衡统计或机器学习演示哪个更有效,然后使用最合适的编程语言.
Python和R都提供了不断增长的语法糖集合, 既简化了我们作为数据科学家的工作,又便于其他人理解. 语法越精细,就越容易实现自动化并与首选语言进行交互. 我喜欢我的数据科学语言是甜蜜的,而由此产生的优雅的解决方案更是甜蜜的.
R在统计分析方面比Python更好,无论是在代码方面还是在表示方面.
在研究集中于统计分析的问题时,R更容易使用, 线性建模, 或可视化.
R最常用于使用统计方法和线性模型探索解空间.
Python在实现机器学习解决方案时非常出色. 可以访问许多高级库和高效的语法糖,从而简化了编码并缩短了开发时间.
Python是一种流行的通用编程语言. 它易于学习,灵活,并且有强大的库支持.
世界级的文章,每周发一次.
世界级的文章,每周发一次.