Phani Kiran 发布的文章

Pandas 是一个十分流行的 Python 第三方库。本文介绍了 Pandas 库中的一些特性和函数,并且我们鼓励读者亲手使用 Pandas 库,来解决实际的业务问题。

Pandas 为 Python 中数据分析提供了基础和高级的构建组件。Pandas 库是用于数据分析与数据操作的最强大和最灵活的开源分析工具之一,并且它还提供了用于建模和操作表格数据(以行和列组织的数据)的数据结构

Pandas 库有两个主要的数据结构:第一个是 “ 系列 Series ”,该数据结构能够很方便地从 Python 数组或字典中按位置或指定的索引名称来检索数据;第二个是“ 数据帧 DataFrames ”,该数据结构将数据存储在行和列中。列可以通过列名访问,行通过索引访问。列可以有不同类型的数据,包括列表、字典、序列、数据帧、NumPy 数组等。

Pandas 库可以处理各种文件格式

有各种各样的文件格式。用于数据分析的工具必须能够提供处理各种文件格式的方法。

Pandas 可以读取各种文件格式,例如 CSV 文件、JSON 文件、XML 文件、Parquet 文件、SQL 文件,详见下表。

写入读取
CSV 文件to_csv 函数read_csv 函数
JSON 文件to_json 函数read_json 函数
Parquet 文件to_parquet 函数read_parquet 函数
SQL 文件to_sql 函数read_sql 函数,read_sql_query 函数,read_sql_table 函数
XML 文件to_xml 函数read_xml 函数

使用 Pandas 进行数据清理

在现实场景中,很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。此外,数据还会有需要 屏蔽 mask 的敏感和机密信息。接下来,Pandas 提供了清理、丢弃、替换、屏蔽等方法,来处理这些坏数据。

Pandas 清洗空值:

a. 空行可以使用 df.dropna(inplace=True) 方法来删除。

b. 空值可以使用 df.fillna(<value>, inplace=True) 方法来替换。还可以指定某一个列来替换该列的空数据。

Pandas 屏蔽数据:

c. 要屏蔽所有不满足条件 my_list.where(my_list < 5) 的敏感数据的值,可以使用 my_list.mask(my_list < 5)

Pandas 清洗重复数据:

d. 要删除重复数据,可以使用 drop_duplicates() 方法:

df.drop_duplicates(‘<column>’, keep = False)
df.drop_duplicates(‘<column>’, keep = ‘first’)
df.drop_duplicates(‘<column>’, keep = ‘last’)

使用 Pandas 进行数据分析

下面的表格列出了 Pandas 中进行数据分析的各种函数,以及其语法。(请注意:df 代表一个 数据帧 DataFrame 数据结构的实例。)

语法描述
df.head(x)head() 函数用于读取前面的 x 行,如果不填参数 x,默认返回 5 行
df.tail(x)tail() 函数用于读取尾部的 x 行,如果不填参数 x ,默认返回最后 5 行,空行各个字段的值返回 NaN
loc(x:y)Loc 函数返回指定行的数据,也可以对数据进行切片
groupby('<column>')对指定列的数据进行分组
df['column'].sum()计算指定列数据的总和
df['column']. mean()计算指定列数据的算术平均值
df['column'].min()计算指定列数据的最小值
df['column'].max()计算指定列数据的最大值
df.sort_values(['column'])在指定列上根据数值进行排序,默认升序
df.size返回元素的个数,即为行数 * 列数
df.describe返回对各列的统计汇总
pd.crosstab(df['column1'], df['column2'], margins = True)创建 column1column2 的交叉表
df.duplicated([column1, 'column2'])根据 column1column2 中的重复值,返回 TrueFalse

Pandas 的优点

  • 支持多索引(层次索引),方便分析多维数据。
  • 支持数据透视表的创建,堆栈和取消堆栈操作。
  • 可以使用 Pandas 处理有限值的分类数据。
  • 支持分组和聚合运算。
  • 可以禁用排序。
  • 支持行级过滤(获取满足过滤条件的行)和列级过滤(只选择需要的列)。
  • 有助于重塑数据集(数组的维度变换)。还可以转置数组的值,并转换为列表。当你使用 Python 处理数据时,可以将 Pandas 数据帧转换为多维 NumPy 数组。
  • 支持面向标签的数据切片。

Pandas 的不足

Pandas 的代码和语法与 Python 不同,所以人们需要额外再学习 Pandas。此外,相较于 Pandas,像三维数据这样的高维数据会在 NumPy 等其他库有更好的处理。

总结

Pandas 能够大幅提升数据分析的效率。它与其他库的兼容性使它在其他 Python 库中都能有效地使用。


via: https://www.opensourceforu.com/2022/08/pandas-the-popular-python-library-for-data-analysis-and-data-science/

作者:Phani Kiran 选题:lkxed 译者:chai001125 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Spark SQL 是 Spark 生态系统中处理结构化格式数据的模块。它在内部使用 Spark Core API 进行处理,但对用户的使用进行了抽象。这篇文章深入浅出地告诉你 Spark SQL 3.x 的新内容。

有了 Spark SQL,用户可以编写 SQL 风格的查询。这对于精通结构化查询语言或 SQL 的广大用户群体来说,基本上是很有帮助的。用户也将能够在结构化数据上编写交互式和临时性的查询。Spark SQL 弥补了 弹性分布式数据集 resilient distributed data sets (RDD)和关系表之间的差距。RDD 是 Spark 的基本数据结构。它将数据作为分布式对象存储在适合并行处理的节点集群中。RDD 很适合底层处理,但在运行时很难调试,程序员不能自动推断 模式 schema 。另外,RDD 没有内置的优化功能。Spark SQL 提供了 数据帧 DataFrame 和数据集来解决这些问题。

Spark SQL 可以使用现有的 Hive 元存储、SerDes 和 UDF。它可以使用 JDBC/ODBC 连接到现有的 BI 工具。

数据源

大数据处理通常需要处理不同的文件类型和数据源(关系型和非关系型)的能力。Spark SQL 支持一个统一的数据帧接口来处理不同类型的源,如下所示。

  • 文件:

    • CSV
    • Text
    • JSON
    • XML
  • JDBC/ODBC:

    • MySQL
    • Oracle
    • Postgres
  • 带模式的文件:

    • AVRO
    • Parquet
  • Hive 表:

    • Spark SQL 也支持读写存储在 Apache Hive 中的数据。

通过数据帧,用户可以无缝地读取这些多样化的数据源,并对其进行转换/连接。

Spark SQL 3.x 的新内容

在以前的版本中(Spark 2.x),查询计划是基于启发式规则和成本估算的。从解析到逻辑和物理查询计划,最后到优化的过程是连续的。这些版本对转换和行动的运行时特性几乎没有可见性。因此,由于以下原因,查询计划是次优的:

  • 缺失和过时的统计数据
  • 次优的启发式方法
  • 错误的成本估计

Spark 3.x 通过使用运行时数据来迭代改进查询计划和优化,增强了这个过程。前一阶段的运行时统计数据被用来优化后续阶段的查询计划。这里有一个反馈回路,有助于重新规划和重新优化执行计划。

Figure 1: Query planning

自适应查询执行(AQE)

查询被改变为逻辑计划,最后变成物理计划。这里的概念是“重新优化”。它利用前一阶段的可用数据,为后续阶段重新优化。正因为如此,整个查询的执行要快得多。

AQE 可以通过设置 SQL 配置来启用,如下所示(Spark 3.0 中默认为 false):

spark.conf.set(“spark.sql.adaptive.enabled”,true)

动态合并“洗牌”分区

Spark 在“ 洗牌 shuffle ”操作后确定最佳的分区数量。在 AQE 中,Spark 使用默认的分区数,即 200 个。这可以通过配置来启用。

spark.conf.set(“spark.sql.adaptive.coalescePartitions.enabled”,true)

动态切换连接策略

广播哈希是最好的连接操作。如果其中一个数据集很小,Spark 可以动态地切换到广播连接,而不是在网络上“洗牌”大量的数据。

动态优化倾斜连接

如果数据分布不均匀,数据会出现倾斜,会有一些大的分区。这些分区占用了大量的时间。Spark 3.x 通过将大分区分割成多个小分区来进行优化。这可以通过设置来启用:

spark.conf.set(“spark.sql.adaptive.skewJoin.enabled”,true)

Figure 2: Performance improvement in Spark 3.x (Source: Databricks)

其他改进措施

此外,Spark SQL 3.x还支持以下内容。

动态分区修剪

3.x 将只读取基于其中一个表的值的相关分区。这消除了解析大表的需要。

连接提示

如果用户对数据有了解,这允许用户指定要使用的连接策略。这增强了查询的执行过程。

兼容 ANSI SQL

在兼容 Hive 的早期版本的 Spark 中,我们可以在查询中使用某些关键词,这样做是完全可行的。然而,这在 Spark SQL 3 中是不允许的,因为它有完整的 ANSI SQL 支持。例如,“将字符串转换为整数”会在运行时产生异常。它还支持保留关键字。

较新的 Hadoop、Java 和 Scala 版本

从 Spark 3.0 开始,支持 Java 11 和 Scala 2.12。 Java 11 具有更好的原生协调和垃圾校正,从而带来更好的性能。 Scala 2.12 利用了 Java 8 的新特性,优于 2.11。

Spark 3.x 提供了这些现成的有用功能,而无需开发人员操心。这将显着提高 Spark 的整体性能。


via: https://www.opensourceforu.com/2022/05/structured-data-processing-with-spark-sql/

作者:Phani Kiran 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出