Python是一种可行的统计分析语言吗?

数据挖掘 机器学习 Python r 统计数据 数据分析
2021-10-10 22:36:51

我最初来自 R,但现在 Python 似乎是更常见的语言。理想情况下,我会在 Python 中完成所有编码,因为语法更容易,而且我在使用它时有更多的实际经验——而且来回切换是一种痛苦。

除了 ML 类型的东西之外,我所做的所有统计分析都是在 R 中进行的——比如回归、时间序列、方差分析、逻辑回归等。我从来没有真正在 Python 中做过那种类型的东西。但是,我正在尝试为自己创建一堆代码模板,在开始之前,我想知道 Python 是否足够深,可以完全取代 R 作为我选择的语言。我最终确实计划更多地转向 ML,并且我知道 Python 可以做到这一点,最终我会想象我必须使用更基础的语言,比如 C++。

任何人都知道 Python 在统计分析方面的局限性是什么,或者与使用 R 与 Python 作为统计分析的主要语言的优缺点有关吗?

4个回答

Python 更“通用”,而 R 则更清楚(呃)关注统计数据。但是,您可以在 R 中完成的大多数(如果不是全部)事情也可以在 Python 中完成。不同之处在于您需要在 Python 中使用额外的包来完成一些可以在基础 R 中执行的操作。

一些例子:

  • 数据框是基础 R,而您需要在 Python中使用Pandas 。
  • 线性模型 ( lm) 是基础 R,而您需要在 Python中使用statsmodelsscikit 。有一些重要的概念差异需要考虑。
  • 对于一些相当基本的数学运算,您需要使用numpy

总体而言,这导致需要在 Python 中流利地工作所需的一些额外努力(和知识)。我个人经常觉得使用基础 R 更舒服,因为我觉得在(基础)R 中“更接近数据”。

然而,在其他情况下,例如当我使用 boosting 或神经网络时,Python 似乎比 R 更有优势。许多算法都是在C++(例如KerasLightGBM)中开发的,并适用于 Python 和(通常后来)R。至少在如果您使用 Windows,这通常更适用于 Python。你可以在 R 中使用诸如 Tensorflow/Keras、LightGBM、Catboost 之类的东西,但有时在 R 中运行额外的包可能会让人望而生畏(尤其是在 GPU 支持的情况下)。

许多包(或方法)可用于 R 和 Python,例如 GLMnet(for R / for Python)。您还可以根据“统计学习简介”的实验室(也可用于 RPython )看到,就您可以做什么而言,这两种语言之间并没有太大的区别。不同之处更像事情的完成方式。

最后,由于 Python 比 R 更“通用”(至少在我看来),你可以用 Python 做一些有趣和有趣的事情(除了统计数据),而用 R 做不到(至少它更难)。

Python 被更广泛地使用是一个重要的考虑因素。这在申请工作时尤其重要。此外,Python 拥有与 R 一样多的关键统计和 ML/AI 工具,以及更大的开源基础可供使用。Python 是为程序员设计的,R 是为统计学家设计的。最初我是一名 R 程序员,但我的大多数同事都在使用 Python,所以我最终转行了。

以下是一些基本区别:

Python:

  1. 程序员友好
  2. 调试更容易
  3. 更多的开源支持(堆栈网站等)

回复:

  1. 更容易和更简单地编写脚本
  2. 与其他语言一起使用更好
  3. 更多内置功能

很好的参考:datacamp.com/community/tutorials/r-or-python-for-data-analysis

还应该提到我在 Python 中使用 R 代码,使用 Rpy2。如果您使用的是笔记本,只需在安装必要的 R 库后使用 %%R

我想在现有答案中添加两点:

  • R 和 python 之间有很好的交互,每个方向都有各种可能性。

    对我来说,python 与 R 的决定并不重要。决定是为手头的项目选择适当的主要语言,然后如果出于某种原因更好的话,用另一种语言做部分。

  • 我发现在 R 中生成报告的工具更加方便。
    由于我的许多工作都在于生成有关统计分析的报告,因此我主要使用 R。

    如果我今天遇到我认为在 python 中完成的数据分析+报告,我会将报告设置为“R”markdown 并在 python 块中执行 python。

从 R 到 Python 的一个问题是 Python 统计生态系统往往更面向机器学习而不是推理统计。

这可能会造成一些麻烦,因为 R 中的一些默认值是默认值,因为在社会科学中进行推理统计的人总是使用它们,而不是主要 Python 库中的默认值。

例如,Statsmodels(推理统计的标准库之一)在执行线性回归时默认不包含截距,除非您将 R-style 公式与 Patsy 一起使用,在这种情况下它包含在内。

另一个例子:Python 中的 Scikit-learn 使用除以 n(“人口”)公式计算标准差,而 R 使用除以 n-1(“样本”)公式。

这类事情往往会让生态系统新手感到困惑,并造成完全不必要的认知负担。所以这是一个权衡。