📜  Julia 中的数据处理

📅  最后修改于: 2022-05-13 01:54:55.040000             🧑  作者: Mango

Julia 中的数据处理

数据分析是一个过程,使用该过程以有用的方式对原始数据进行清理、转换和建模,以将其用于制定业务决策或发现某些信息。原始数据不能按原样使用。数据集中会有很多缺陷,比如缺失值。此外,必须以某种方式处理数据以查找信息。这种将原始数据转换和映射成其他形式以便有效地用于分析的过程称为数据转换。它也称为数据争吵。它是数据科学中最重要的组成部分之一。用于使数据对分析有用的一些过程是拆分-应用-组合功能。

需要的包

数据集可以从RDataset包中加载。 R 语言中可用的标准数据集可通过此包在 Julia 中使用。可以通过在 Julia 终端中编写以下命令来安装它。

要加载数据集并处理多维数组,例如Python中的 Pandas 数据框,是必需的。在这里,此类功能由两个包DataFramesDataFramesMeta提供。这些也可以使用 Julia 终端安装并导入程序中。要添加这些包,请在终端中键入以下命令。

需要数据集

为了说明数据修改的概念,本文使用数据集mtcars 。它包含 1973-74 型号的 32 辆汽车的信息。考虑的特征是燃料消耗和下面列出的更多属性。

  1. mpg – 英里/加仑(美国)。
  2. cyl – 气缸数。
  3. disp – 位移 (cu.in)。
  4. hp——总马力
  5. drat – 后轴比率。
  6. 重量- 重量
  7. qsec – 1/4 英里时间
  8. vs – 引擎形状,其中0 表示 V 形1 表示直
  9. 上午——传输。 0表示自动, 1表示手动。
  10. gears – 前进档数
  11. carb——化油器的数量。

加载数据集

Julia
using RDatasets
cars = dataset("datasets", "mtcars")
head(cars)


Julia
using RDatasets
  
# loading the dataset
cars = dataset("datasets", "mtcars")
  
# split based on engine type alone
groupby(cars, :VS)


Julia
using RDatasets
cars = dataset("datasets", "mtcars")
  
# split based on engine type 
# and number of cylinders
res = groupby(cars, [:Cyl, :VS])
  
# Show the first group
res[1]


Julia
using RDatasets
cars = dataset("datasets", "mtcars")
  
# splitting based on size
# and displaying eah group's size
by(cars, :Cyl, size)


Julia
using RDatasets
using Statistics
  
cars = dataset("datasets", "mtcars")
  
# splitting based on no.of.cylinders
# Mean of the miles/gallon is calculated
by(cars, :Cyl, cars->mean(cars[:MPG]))


Julia
using RDatasets
using Statistics
  
cars = dataset("datasets", "mtcars")
  
# splitting based on transmission and 
# no.of.forward gears mean and 
# variance of MPG calculation
by(cars, [:AM, :Gear]) do a
    DataFrame(Mean_of_MPG = mean(a[:MPG]),
              Variance_of_MPG = var(a[:MPG]))
end


Julia
using RDatasets
  
cars = dataset("datasets", "mtcars")
  
# Splitting based on no.of.cylinders
# display size of each column
println(aggregate(cars, :Cyl, size))


输出:

使用 groupby()函数

这里的 groupby()函数根据指定的列对数据进行分组。这是一个仅用于拆分数据帧的函数。如果使用此函数,数据集将被拆分为子集。它返回子集的分组视图。可以使用从1开始的索引来访问分组的数据帧。

语法是:

传递的参数是:

  • d——数据框。
  • :col_names – 必须根据其拆分数据集的列。列名前面应该有一个冒号。
  • sort - 默认情况下,该值为false并决定返回的数据帧是否应以排序方式。
  • skipmissing – 决定是否跳过数据集中的缺失值。默认值为

查看示例以获得更好的理解。

朱莉娅

using RDatasets
  
# loading the dataset
cars = dataset("datasets", "mtcars")
  
# split based on engine type alone
groupby(cars, :VS)

输出:

现在根据引擎类型(V 型或直型),数据集分为两部分。所有具有 V 型发动机的车型(记为'0' )将是第一组,直列发动机的车型将是最后一组。如果将生成的数据帧分配给变量,则该变量也将成为数据帧,并且可以使用索引号进行访问。数据集可以基于多个列进行拆分。对于基于两个或多个键的拆分,它们必须用方括号括起来。看下面的代码片段:

朱莉娅

using RDatasets
cars = dataset("datasets", "mtcars")
  
# split based on engine type 
# and number of cylinders
res = groupby(cars, [:Cyl, :VS])
  
# Show the first group
res[1]

输出:

使用 by()函数

它执行拆分应用功能。数据集将在指定的列处拆分,并且提到的函数将应用于每个组。语法如下:

参数是:

  • d - 数据框
  • :col_names – 数据应该基于哪些列进行拆分。
  • 函数 – 要应用于每个组的内置函数或用户定义函数。
  • sort – 决定是否对结果数据框进行排序。默认值为false

示例 1:根据柱面数拆分数据集并显示每组的大小。

朱莉娅

using RDatasets
cars = dataset("datasets", "mtcars")
  
# splitting based on size
# and displaying eah group's size
by(cars, :Cyl, size)

输出:

数据集分为三组,因为数据集中的任何汽车都包含 6 个气缸或 4 个气缸或 8 个气缸。传递给 by()函数的数据帧是cars ,每组的大小,即每组中的行数和列数作为元组返回。例如,这里的 group-1 包含 7 行和 12 列。

示例 2:根据气缸数拆分数据集,并计算每组中 Miles/Gallon 的平均值

lambda 类型的函数也可以作为参数传递。用于查找均值、方差、标准差的统计函数可以应用于适当的列。该函数将应用于拆分后产生的组。看下面的例子。在这里,数据集根据柱面数进行拆分。每组英里/加仑的平均值是使用必须为其导入统计数据包的 mean()函数计算的。

朱莉娅

using RDatasets
using Statistics
  
cars = dataset("datasets", "mtcars")
  
# splitting based on no.of.cylinders
# Mean of the miles/gallon is calculated
by(cars, :Cyl, cars->mean(cars[:MPG]))

输出:

数据集已分为三组, X1列表示每组中英里/加仑的平均值。执行指定的函数并将结果向量添加为单独的列。可以执行多个函数,也可以将do-block 语法与此 by()函数结合使用。 do-block用作它前面的函数的参数。对于 by()函数,第一个参数是数据帧,下一个是列名,第三个是要执行的函数, do-block充当函数的角色。

示例 3:根据传输模式和前进档数拆分数据集。计算英里/加仑的平均值和方差

朱莉娅

using RDatasets
using Statistics
  
cars = dataset("datasets", "mtcars")
  
# splitting based on transmission and 
# no.of.forward gears mean and 
# variance of MPG calculation
by(cars, [:AM, :Gear]) do a
    DataFrame(Mean_of_MPG = mean(a[:MPG]),
              Variance_of_MPG = var(a[:MPG]))
end

输出:

使用聚合()函数

aggregate()函数是一个拆分-应用-组合函数。它根据指定的列拆分数据框,将给出的函数应用于拆分数据的所有列,并将它们组合为数据框并返回。语法如下:

  • df -数据框。
  • :col_names - 数据集应基于哪些列进行拆分。
  • 函数 - 要应用于每行的所有列的函数。它可以是单个函数或函数向量。这些函数将向量作为参数。这些函数应该返回一个相同长度的值或向量。

看下面的例子。数据集根据柱面数进行拆分,每列的大小作为单个向量返回并组合形成数据框。

朱莉娅

using RDatasets
  
cars = dataset("datasets", "mtcars")
  
# Splitting based on no.of.cylinders
# display size of each column
println(aggregate(cars, :Cyl, size))

输出: