Pandas和SQL,数据科学家应该用哪个?

Pandas和SQL,数据科学家应该用哪个?

介绍

Pandas和SQL不仅对数据科学家很重要,对数据分析和商业智能等类似领域的业内人士也很重要。话虽如此,数据科学家在什么情况下应该专门使用 Pandas 而不是 SQL,什么情况下用SQL而不是Pandas?在某些情况下,只用SQL就可以了,而在其他情况下,用pandas 会更好,特别是对于那些处于 Jupyter Notebook 设置环境的数据科学家。

下面,我将详细讨论什么时候选用Pandas和SQL。请记住,这两个工具都有特定的用例,但很多时候,两者的功能是重叠的,下面我会比较这两种工具。如果你想了解更多数据分析相关内容,可以阅读以下这些文章:
怎么用Pandas聚合时间序列数据?
如何在Pandas里写SQL查询语句?
如何用Pandas 三步清洗数据?
一文上手用Pandas给数据加标签

Pandas

Pandas [3] 是 Python 编程语言中的开源数据分析工具。Pandas 的优势体现在处理你已经有的数据集(通常来源于 SQL )这一大差异意味着,Pandas和SQL是独立的,但却存在多个相同的功能,例如,你可以在 pandas 现有列中创建新特征,但这可能比在 SQL 中更容易操作、速度也更快。

需要注意的是,我不是在比较 Pandas 能做什么,而 SQL 不能做什么。从我个人的经验来看,我是在选择一种更高效或更适合的工具,然后将其运用至数据科学工作。

下面这些情况中, Pandas 比 SQL 更有优势——但两者功能是相同的。

  • 根据已有特征创建计算

在合并更复杂的 SQL 查询时,通常还需要合并子查询,来分割不同列的值。你可以通过 Pandas更轻松地划分特征,如下所示:

df["new_column"] = df["first_column"]/df["second_column"]

上面的代码显示了如何划分两个单独的列,并将这些值分配给新列。在这个例子中,你是对整个数据集或数据框创建特征。你还可以将此功能用于数据科学特征探索和特征工程。

  • 分组grouping by

同样以子查询为例,使用SQL 进行分组会非常复杂,因为分组需要一行行的代码,这些代码在视觉上可能会给人造成混淆。但在 Pandas 中,仅使用一行代码即可进行分组。我不是指在简单的表查询选择结束时的组,而是指涉及了多个子查询的组。

df.groupby(by="first_column").mean()

代码结果将返回数据框中每一列的 first_column 的平均值。还有许多其他方法可以使用这个分组功能, Pandas 文档中详细地介绍了这些方法。

  • 检查数据类型

在 SQL 中,你经常需要转换类型,但我们可以很清楚地看到:pandas 是以垂直格式排列数据类型,而不是像 SQL 以滚动浏览水平输出。你可以看到一些数据类型返回至 int64、float64、datetime64[ns] 和 object。

df.dtypes

虽然在 Pandas 和 SQL 中,这些功能非常基础,但在 SQL 中,有些功能操作起来非常复杂,反而在 Pandas 数据框中更容易操作。现在,让我们一起看看 SQL 更擅长执行哪些操作。

SQL

业内人士最常使用的语言可能就是SQL了。例如,数据工程师和产品经理、和Tableau开发可能会使用 SQL或Tableau。而数据科学家相比他们,会更常使用SQL。需要注意的是,SQL有几个不同版本,这些版本包含的功能一般都相差无几,只是格式略有不同。

有时 SQL 比 Pandas 更有优势——但两者功能相同:

  • WHERE 子句(WHERE Clause)

SQL中经常使用WHERE子句,pandas也可以执行该子句。然而,在 Pandas 中执行该操作存在一定困难,或者说没有那么直观。例如,你必须写出冗余的代码,而在 SQL 中,你只需要写出 WHERE。

SELECT ID
FROM TABLE
WHERE ID > 100

而在Pandas中,操作如下:

df[df["ID"] > 100]["ID"]

是的,两者都很简单,只是另一个更直观。

  • 连接(JOINS)

Pandas 有几种连接(JOINS)方式,可能会让人觉得混淆,而在 SQL 中,你只需执行如下连接:INNER、LEFT、RIGHT

SELECT
one.column_A,
two.column_B
FROM FIRST_TABLE one
INNER JOIN SECOND_TABLE two on two.ID = one.ID

在这段代码中,与Pandas相比,SQL中的连接更容易读取。在 Pandas 中,你必须合并数据框,尤其是当你合并两个以上的数据框时,情况会更复杂。而SQL可以在同一个查询中执行多个连接,无论是INNER JOIN还是其他连接。

无论是 SQL 还是 Pandas,都可以用于探索数据科学中的数据分析,也可供特征工程师使用,并在模型结果存储到数据库后进行查询。

总结

本文有关pandas 与 SQL 的比较更多是从我个人角度出发的。所以,我们的想法可能不同。但是,我希望本文仍然可以解释 pandas 和 SQL 之间的差异,让大家了解到可以使用略微不同的编码技术和截然不同的语言在两种工具中执行相同的操作。

总而言之,我们已经比较了 Pandas 和 SQL 各自的优势,以及这两种工具中相同的功能:

* creating calculated fields from existing features
* grouping by
* checking data types
* WHERE clause
* JOINS

希望我的文章在有趣的同时还能帮到你。如果你认同文章中有关SQL和Pandas的比较,请随时在下面发表评论 – 为什么会是这样或为什么不是这样?你是否认为其中一种工具比另一种更好?你认为还有哪些数据科学工具可以进行类似的比较?我们还可以比较pandas和SQL的其他哪些功能?

感谢你的阅读!你还可以订阅我们的YouTube频道,观看大量数据科学相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/

原文作者:Matt Przybyla
翻译作者:Lia
美工编辑:过儿
校对审稿:Jiawei Tong
原文链接:https://towardsdatascience.com/pandas-vs-sql-when-data-scientists-should-use-one-over-the-other-ba5f27a78e5d