数据分析大作战,SQL V.S. Python,来看看这些考题你都会吗 ⛵

💡 作者:韩信子@ShowMeAI
📘 数据分析实战系列https://www.showmeai.tech/tutorials/40
📘 本文地址https://www.showmeai.tech/article-detail/314
📢 声明:版权所有,转载请联系平台与作者并注明出处
📢 收藏ShowMeAI查看更多精彩内容

对于数据分析师、数据科学家等数据从业人员来说,我们有很多的工具可以帮助我们探索与分析数据,发现数据之下的分布与模式规律,最常见和实用的技能是使用 SQL 和 Python 进行数据分析。SQL 和 Python 进行数据分析各有优势:

  • SQL 支持很多数据库(如 MS SQL、MySQL、SQLite、PostgreSQL等),可以很方便跨数据库使用,而且无需编程语言基础,可以快速上手。
  • Python 数据分析(这里指的使用 Pandas 工具库)比较灵活,可以进行数据清理、清洗、格式变化、复杂计算等,还支持很好的可视化,并能无缝衔接后续进一步深入挖掘与建模等流程。

但在大部分需求与功能上,SQL 和 Pandas 都是可以完成的,在本篇内容中,ShowMeAI就帮大家把所有的核心数据分析功能梳理处理,并用 SQL 和 Pandas 进行实现,我们可以轻松对比学习。

对于 Python 数据分析和 SQL 更详尽的内容,欢迎大家查阅ShowMeAI制作的系列教程和速查表:

💡 场景&数据集

我们这里使用到的是 🏆 mtcars数据集,它是一份1974年摩托风尚杂志的数据(1974 Motor Trend Magazine),你可以在这里下载到csv文本格式的文件,能够导入数据库的db格式文件可以在这里下载。

🏆 实战数据集下载(百度网盘):公众号『ShowMeAI研究中心』回复『 实战』,或者点击 这里 获取本文 [21]SQL与Pandas数据分析实操大全mtcars数据集

ShowMeAI官方GitHubhttps://github.com/ShowMeAI-Hub

我们先用python对数据进行读取,读取为pandas dataframe格式。

import numpy as np
import pandas as pd

mtcars_df = pd.read_csv("mtcars.csv")

下面我们梳理一下数据分析中会使用到的核心技能,并对比SQL和Pandas分别是如何实现这些功能的。

💡 数据选择

有时我们需要返回数据集的列(字段)子集。 例如,我们要从 mtcars数据集中选择 Miles/(US) 加仑 ( mpg), 气缸数( cyl) 和总马力 ( hp)这几个字段对应的数据。

📌 SQL

我们使用标准的 SELECT语句就可以完成数据选择。

SELECT
      mpg,
      disp,
      cyl
FROM mtcars

.
.
.

📌 Pandas

我们直接把字段子集的列表给到 dataframe 即可取出对应的数据子集。

mtcars_df[['mpg', 'disp', 'cyl']]

.
.
.

💡 限制

有时候我们希望提前查看一下数据集,但是在总体数据集很大的情况下,我们不能查看所有数据,我们会做一个限制,比如查看数据的前 5 行对表的结构和数据类型进行一个速览。

📌 SQL

SQL有 LIMIT n语法可以限制与返回数据前 n行。

SELECT *
FROM mtcars
  LIMIT 5;

📌 Pandas

Pandas通过 df.head(n = 5)的参数传入来返回头部 5

mtcars_df.head(n = 5)

💡 统计计数

如果我们要对数据进行统计计数,SQL 和 Pandas 的实现方式也不太一样。

📌 SQL

SQL通过 count(*)语法返回数据集的计数(例如下面是总行数)。

SELECT COUNT(*)
FROM
  mtcars LIMIT 5;

📌 Pandas

Pandas dataframe 有一个属性 shape,它返回数据集中的行数和列数。

nrows, ncols = mtcars_df.shape
print("Number of Rows: ", nrows)

💡 排序

在 SQL 和 Pandas 中,我们可以根据一列或多列的值对数据进行升序或降序排列。

📌 SQL

SQL通过 ORDER BY来对数据进行排序,默认升序。

SELECT *
FROM mtcars
  ORDER BY mpg
  LIMIT 5;

我们也可以指定降序排列( DESC)。

SELECT *
FROM mtcars
  ORDER BY mpg DESC
  LIMIT 5;

我们也可以同时指定按照某些列升序,某些列降序进行排序,例如下面我们按照 mpg升序和 model降序对数据排列。

SELECT *
FROM mtcars
  ORDER BY mpg ASC, model DESC
  LIMIT 5;

📌 Pandas

Pandas中的 sort_values函数可以完成排序。

mtcars_df.sort_values(by = 'mpg').head(n = 5)

我们可以在 sort_values函数中指定排序字段和方式。

mtcars_df.sort_values(by = 'mpg', ascending=False).head(n = 5)

当我们要对多个字段排序并指定不同的规则时,只要在 sort_values中传入对应的字段和排序规则列表即可。

mtcars_df.sort_values(by = ['mpg', 'model'], ascending=[True, False]).head(n = 5)

💡 新字段生成

假如我们要基于目前已有字段 mpgwt创建两个新列 kg-per-gallon kplwt_kg,计算后保留小数点后两位,那 SQL 和 Pandas 的计算方式分别如下:

📌 SQL

我们通过 SELECT可以直接构建新的字段与重命名,SQL 中也支持用 ROUND函数对数值精度进行控制。

SELECT ROUND(mpg*1.60934, 2) AS kpg,
       ROUND(wt*1000*0.453592, 2) AS wt_kg
FROM mtcars LIMIT 5;

📌 Pandas

Pandas 创建新字段也非常简单,对于数值进行精度控制需要借助 numpy 和 round 函数。

mtcars_df['kpg'] = np.round(mtcars_df['mpg']*1.60934, 2)
mtcars_df['wt_kg'] = np.round(mtcars_df['wt']*1000*0.453592, 2)
mtcars_df[['kpg', 'wt_kg']].head(n = 5)

💡 数据选择

我们经常需要对数据进行条件选择,SQL 中会通过 WHERE语句来进行条件选择,而在 Pandas 中我们可以直接在 dataframe 后添加单一或组合条件来进行数据选择。具体示例如下:

📌 SQL

从 mtcars 数据集中选择档位为4( gear为4)的汽车如下

SELECT *
FROM mtcars
  WHERE gear = 4;

如果我们需要使用组合条件,比如选择 gear为4以及气缸数 cyl小于或等于 6的数据,那在where 语句中我们可以用 AND等进行条件组合:

SELECT *
FROM mtcars
  WHERE gear = 4 AND cyl  6;

如果上面两个条件不是且关系,而是满足任何一个都可以,那我们把条件组合方式换成 OR

SELECT *
FROM mtcars
  WHERE gear = 4 OR cyl  6;

📌 Pandas

mtcars中返回 gear == 4的数据

mtcars_df[mtcars_df.gear == 4]

如果要求 gear == 4 以及 cyl <= 6< code>&#xFF0C;&#x90A3; Pandas &#x5199;&#x6CD5;&#x5982;&#x4E0B;&#xFF1A;<!--=-->

mtcars_df[(mtcars_df.gear == 4) & (mtcars_df.cyl  6)]

如果要求 gear == 4cyl <= 6< code>&#xFF0C;&#x90A3; Pandas &#x5199;&#x6CD5;&#x5982;&#x4E0B;&#xFF1A;<!--=-->

mtcars_df[(mtcars_df.gear == 4) | (mtcars_df.cyl  6)]

💡 数据分组

我们对数据进行分析,分组和按组统计是最重要的核心功能,我们来看看 SQL 和 Pandas 都分别如何对数据分组:

📌 SQL

在 SQL 中可以借助于 GROUP BY语句对数据进行分组,例如下面是我们基于 gear 字段进行数据分组。

SELECT
    gear,
    COUNT(*)
    FROM mtcars
        GROUP BY gear;

Pandas 中可以直接对 dataframe 使用 groupby 函数进行数据分组,如下:

📌 Pandas

mtcars_df.groupby("gear").count()['model']

💡 统计均值

非常常见的统计任务之一是对数据进行均值统计,对应的 SQL 和 Pandas 操作如下:

📌 SQL

SELECT
    AVG(wt),
    AVG(hp),
    AVG(mpg)
FROM mtcars;

📌 Pandas

mtcars_df[['wt', 'hp', 'mpg']].mean()

💡 方差

对于方差而言,SQL 和 Pandas 的计算方式如下:

📌 SQL

SELECT AVG(wt*wt) - AVG(wt)*AVG(wt) AS WT,
        AVG(hp*hp) - AVG(hp)*AVG(hp) AS HP,
        AVG(mpg*mpg) - AVG(mpg)*AVG(mpg) AS MPG
FROM mtcars;

📌 Pandas

mtcars_df[['wt', 'hp', 'mpg']].var(ddof=0)

💡 极差/范围

另外一个常用统计量是极差(最大值 – 最小值),SQL 和 Pandas 的做法如下:

📌 SQL

SELECT min(gear) AS MIN,
           max(gear) AS MAX,
           sum(gear) AS TOTAL,
           max(gear)-min(gear) AS RANGE
FROM mtcars;

📌 Pandas


mtcars_df['gear'].min()

mtcars_df['gear'].max()

mtcars_df['gear'].sum()

mtcars_df['gear'].max() - mtcars_df['gear'].min()

💡 总结

在本篇中,ShowMeAI将使用 SQL 和 Python(Pandas 工具库)进行数据分析做了梳理和对比,两个都是非常常见的工具和方式,大家可以对比学习掌握后灵活使用。

参考资料

数据分析大作战,SQL V.S. Python,来看看这些考题你都会吗 ⛵

Original: https://blog.csdn.net/ShowMeAI/article/details/126492921
Author: ShowMeAI
Title: 数据分析大作战,SQL V.S. Python,来看看这些考题你都会吗 ⛵

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/600383/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球