【问题标题】:For each class create a scatter plot between two lists为每个类创建两个列表之间的散点图
【发布时间】:2021-10-20 15:48:20
【问题描述】:

我阅读了一个 CSV 文件并创建了以下两个列表。 对于每个类,我希望在 values2 和 values3 之间创建一个散点图。我想查看每个类的 values2 和 values3 之间的相关性。这可能吗?

List1=vehiclesData.groupby('Class')['values2'].apply(list)
List2=vehiclesData.groupby('Class')['values3'].apply(list)

如果你打印 List1,它会是这样的:

Compact Cars                          [2.2, 1.8, 1.8...
Large Cars                            [3.8, 3.8, 3.8...
Midsize Cars                          [2.8, 2.8, 4.0...
Midsize Station Wagons                [3.0, 3.0, 2.3...

如果你打印 List2,它会是这样的:

Compact Cars                          [19, 22, 25...
Large Cars                            [20, 18, 20...
Midsize Cars                          [19, 19, 16...
Midsize Station Wagons                [19, 18, 21...

【问题讨论】:

    标签: python list pandas-groupby data-analysis scatter-plot


    【解决方案1】:

    有三种流行的相关性度量 - Pearson、Spearman 和 Kendall Tau 相关性。两个变量之间的散点图也有助于直观地理解相关性。以下代码将帮助您计算每个 'class' 的所有三种类型的相关性,并在 'values2' 和 'values3 之间创建类散点图em>'。

    代码:

    import pandas as pd
    import matplotlib.pyplot as plt
    from scipy.stats import pearsonr, spearmanr, kendalltau
    
    df = ... # pandas data frame containing the original data
    
    # unique classes
    classes = list(set(list(df.loc[:, "Class"])))
    
    # creating space for making plots
    fig, ax = plt.subplots(ncols = len(classes), figsize = (len(classes)*5, 4.5), dpi = 120)
    
    # Table that holds class-wise correlation values
    correlation_table = pd.DataFrame(columns = ["Class", "Pearson correlation",
                                                "Spearman correlation", "Kendall Tau correlation"])
    
    # populate class-wise correlation values and create class-wise scatter plots
    for i, c in enumerate(classes):
    
        # filter dataset by class
        sub_df = df[df["Class"]==c]
    
        # Pearson correlation
        p_c, _ = pearsonr(sub_df.loc[:, "values2"], sub_df.loc[:, "values3"])
        # Spearman correlation
        s_c, _ = spearmanr(sub_df.loc[:, "values2"], sub_df.loc[:, "values3"])
        # Kendall Tau correlation
        k_c, _ = kendalltau(sub_df.loc[:, "values2"], sub_df.loc[:, "values3"])
        # populate correlation values
        correlation_table = correlation_table.append({"Class": c,
                                                      "Pearson correlation": p_c,
                                                      "Spearman correlation": s_c,
                                                      "Kendall Tau correlation": k_c},
                                                     ignore_index = True)
        
        # Create scatter plot
        ax[i].scatter(sub_df.loc[:, "values2"], sub_df.loc[:, "values3"])
        ax[i].set_title(f"Class: {c}")
        ax[i].set_xlabel("values2")
        ax[i].set_ylabel("values3")
    
    print(correlation_table)
    fig.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 2015-07-09
      • 2017-06-03
      • 2019-04-19
      相关资源
      最近更新 更多