Engee 文档
Notebook

使用分组数据创建点图

导言

此示例演示如何使用分组样本数据创建散点图。 散点图是一个变量如何依赖于另一个变量的简单图形。

功能scatter 创建点图。 我们将创建一个函数 gplotmatrix,从而可以创建显示几对变量之间关系的这种图形的矩阵。 各种图形符号将用于指示组中的成员资格。 这样,将创建这些图形的分组版本。 这对于确定两个变量的值是否相同或它们在每个组中的关系很有用。

初始数据

我们将导入并附加必要的库。

In [ ]:
import Pkg 
Pkg.add(["PlotlyKaleido", "StatsPlots", "DataFrames", "StatsBase", "CSV", "RDatasets", "Statistics", "Random"])
using StatsPlots, DataFrames, StatsBase, CSV, RDatasets, Statistics, Random
plotly()

假设我们需要研究三个不同年份制造的汽车的重量和里程。

导入和显示有关汽车的数据集。

In [ ]:
автомобили = dataset("datasets", "mtcars")
Out[0]:
32×12 DataFrame
7 rows omitted
RowModelMPGCylDispHPDRatWTQSecVSAMGearCarb
String31Float64Int64Float64Int64Float64Float64Float64Int64Int64Int64Int64
1Mazda RX421.06160.01103.92.6216.460144
2Mazda RX4 Wag21.06160.01103.92.87517.020144
3Datsun 71022.84108.0933.852.3218.611141
4Hornet 4 Drive21.46258.01103.083.21519.441031
5Hornet Sportabout18.78360.01753.153.4417.020032
6Valiant18.16225.01052.763.4620.221031
7Duster 36014.38360.02453.213.5715.840034
8Merc 240D24.44146.7623.693.1920.01042
9Merc 23022.84140.8953.923.1522.91042
10Merc 28019.26167.61233.923.4418.31044
11Merc 280C17.86167.61233.923.4418.91044
12Merc 450SE16.48275.81803.074.0717.40033
13Merc 450SL17.38275.81803.073.7317.60033
21Toyota Corona21.54120.1973.72.46520.011031
22Dodge Challenger15.58318.01502.763.5216.870032
23AMC Javelin15.28304.01503.153.43517.30032
24Camaro Z2813.38350.02453.733.8415.410034
25Pontiac Firebird19.28400.01753.083.84517.050032
26Fiat X1-927.3479.0664.081.93518.91141
27Porsche 914-226.04120.3914.432.1416.70152
28Lotus Europa30.4495.11133.771.51316.91152
29Ford Pantera L15.88351.02644.223.1714.50154
30Ferrari Dino19.76145.01753.622.7715.50156
31Maserati Bora15.08301.03353.543.5714.60158
32Volvo 142E21.44121.01094.112.7818.61142

由于呈现的数据集中没有关于发布年份的信息,因此我们假设它们是1970年、1976年和1982年。 我们将手动添加此数据。

In [ ]:
n=nrow(汽车)
观察值in_year=div(n,3)
发布年份=重复([1970,1976,1982],inner=observation_in_year)
如果长度(发布年份)<n
    追加!(release years,发布年份[1:(n-length(release years))])
end
洗牌!(发行年份)
汽车[,:发布年份]=发布年份_;
汽车
Out[0]:
32×13 DataFrame
7 rows omitted
RowModelMPGCylDispHPDRatWTQSecVSAMGearCarbГод_выпуска
String31Float64Int64Float64Int64Float64Float64Float64Int64Int64Int64Int64Int64
1Mazda RX421.06160.01103.92.6216.4601441982
2Mazda RX4 Wag21.06160.01103.92.87517.0201441970
3Datsun 71022.84108.0933.852.3218.6111411970
4Hornet 4 Drive21.46258.01103.083.21519.4410311976
5Hornet Sportabout18.78360.01753.153.4417.0200321970
6Valiant18.16225.01052.763.4620.2210311982
7Duster 36014.38360.02453.213.5715.8400341976
8Merc 240D24.44146.7623.693.1920.010421976
9Merc 23022.84140.8953.923.1522.910421982
10Merc 28019.26167.61233.923.4418.310441970
11Merc 280C17.86167.61233.923.4418.910441982
12Merc 450SE16.48275.81803.074.0717.400331970
13Merc 450SL17.38275.81803.073.7317.600331976
21Toyota Corona21.54120.1973.72.46520.0110311970
22Dodge Challenger15.58318.01502.763.5216.8700321976
23AMC Javelin15.28304.01503.153.43517.300321976
24Camaro Z2813.38350.02453.733.8415.4100341970
25Pontiac Firebird19.28400.01753.083.84517.0500321976
26Fiat X1-927.3479.0664.081.93518.911411976
27Porsche 914-226.04120.3914.432.1416.701521970
28Lotus Europa30.4495.11133.771.51316.911521970
29Ford Pantera L15.88351.02644.223.1714.501541982
30Ferrari Dino19.76145.01753.622.7715.501561970
31Maserati Bora15.08301.03353.543.5714.601581982
32Volvo 142E21.44121.01094.112.7818.611421970

让我们建立燃料消耗对汽车质量的依赖性的点图。

In [ ]:
p1=散射(汽车。WT,汽车。石油气, 
        =汽车。发行年份,
        markershape=[:x :o :square],
        markercolor=[:blue :green :red],
        xlabel="重量", ylabel="特定动力储备",
        title="燃料消耗对质量的依赖",
        legend_title="发行年份",
        legend=:best,
        markersize=7)
display(p1)

功能scatter创建散点图,其中每个组由特定符号表示。

数据集автомобили它包含描述汽车各种特性的其他变量。 我们可以通过创建图表矩阵在一个窗口中探索其中的几个。

让我们创建一个生成数据以显示图表矩阵的函数。

In [ ]:
xvars = [:WT, :Disp, :HP] 
yvars = [:MPG, :QSec]   

gplotmatrix函数(df,xvars,yvars,group)
    nx = length(xvars)
    ny = length(yvars)
    plt = plot(layout=(ny, nx), size=(800, 600), dpi=150)
    xlabels = ["重量", "发动机容量", "功率(马力)"]
    ylabels = ["特定动力储备", "加速时间(秒)"]
    
    for i in 1:ny  
        for j in 1:nx  
            subplot_idx = (i-1)*nx + j
            颜色=[:蓝色,:绿色,:红色]
            图标=[:x,:o,:正方形]
            обозначения = ["1970", "1976", "1982"]
            
            for (k, grp) in enumerate([1970 1976 1982])
                面具=df[!,组]==grp
                scatter!(df[mask, xvars[j]], df[mask, yvars[i]],
                        subplot=subplot_idx,
                        标记=图标[k],
                        颜色=颜色[k],
                        标签=名称[k],
                        markersize=6,
                        alpha=0.7,
                        legend=(i==1 && j==1) ? :best : false)
            end
            
            if i == ny
                xlabel!(plt.subplots[subplot_idx], xlabels[j])
            end
            if j == 1
                ylabel!(plt.subplots[subplot_idx], ylabels[i])
            end
        end
    end
    
    return plt
end
Out[0]:
gplotmatrix (generic function with 1 method)

我们将显示一个图表矩阵。

In [ ]:
matrix_plot=gplotmatrix(cars,xvars,yvars,:发布年份)
display(matrix_plot)

图表矩阵显示了一些不同参数对其他参数的依赖性。 例如,根据左上图,我们可以概括地说,汽车的重量越低,比动力储备越高。

结论

所提出的分组数据可视化方法是统计和机器学习分析的重要工具。

图表矩阵允许您评估不同组中变量之间关系的一致性。 这有助于确定模型是否需要包括定量变量和类别变量之间相互作用的影响,这对于正确规范统计模型至关重要。

在机器学习中,这种可视化有助于识别数据的组结构和类的不平衡,这对于对数据分布敏感的算法尤为重要。 它还允许您选择模型的最佳复杂程度-从单个全局依赖到子组中的单独训练,从而降低过度拟合的风险。

因此,分组图作为初级数据分析和形式化模型构建之间的桥梁,有助于创建更准确和解释的解决方案。