Análisis de correlación de Pearson y trazado de gráficos (histograma de coeficiente de correlación, dibujo de un histograma del número de valores no nulos)

Análisis de correlación de Pearson y trazado de gráficos (histograma de coeficiente de correlación, dibujo de un histograma del número de valores no nulos)

1. Análisis de correlación de Pearson

  • El análisis de correlación de Pearson es un método estadístico utilizado para detectar la fuerza de una relación lineal entre dos variables, con un resultado entre -1 y 1. Un coeficiente de correlación de 1 indica una relación positiva perfecta, -1 indica una relación negativa perfecta y 0 indica que no hay relación lineal. El análisis de correlación de Pearson asume que los datos provienen de una distribución normal y es sensible a los valores atípicos.

2. Ejemplo de análisis de correlación de Pearson

# 计算pearsonr相关系数
def calculate_pearsonr(pd):
    head = pd.head().columns.values
    GDM = pd["目标变量"].tolist()
    coefficient_of_association = {
    
    }
    significance_level = {
    
    }
    feature_cnt = {
    
    }
    for feature in head:
        if feature != "目标变量":
            ftc = 0
            feature_values = pd[feature].tolist()
            GDM_temp, feature_temp, tag = [], [], 0
            for v in feature_values:
                if str(v) != "nan":
                    ftc += 1
                    GDM_temp.append(GDM[tag])
                    feature_temp.append(v)
                tag += 1
            feature_cnt[feature] = ftc
            if len(feature_temp) > 1:
                pc = pearsonr(np.array(feature_temp), np.array(GDM_temp))
                if str(pc[0]) != "nan":
                    ca = pc[0]
                    if ca < -0.0001:
                        ca = ca*-1
                        coefficient_of_association[feature] = ca
                        significance_level[feature] = pc[1]
                    elif ca > 0.0001:
                        coefficient_of_association[feature] = ca
                        significance_level[feature] = pc[1]
    dp_ca = sorted(
        coefficient_of_association.items(),
        key=lambda x: x[1],
        reverse=True)
    print("pearsonr-相关系数:",dp_ca)
   
    dp_ca_Nempty=[(i[0], feature_cnt[i[0]]) for i in dp_ca]
    print("非空值的数量:",dp_ca_Nempty)

    return dp_ca

import matplotlib.pyplot as plt
def plot1(dp_ca):
    # 将元组列表转换为字典
    dp_ca_dict = dict(dp_ca)

    # 创建子图
    # fig, ax = plt.subplots()

    fig = plt.figure(figsize=(16, 10))
    ax = fig.add_subplot(1, 1, 1)

    # 绘制相关性系数柱状图
    ax.bar(dp_ca_dict.keys(), dp_ca_dict.values())
    ax.set_title('Correlation between Feature and 目标变量')
    ax.set_xlabel('Features')
    ax.set_ylabel('Correlation Coefficient')

    # 调整布局并显示图形
    plt.xticks(rotation=45,ha='right') ## # 将x轴标签旋转45度,并以最后一个字符为旋转中心
    # 设置x轴刻度标签字体大小为8
    ax.tick_params(axis='x', labelsize=10)

    plt.tight_layout()
    plt.savefig("./Pearson.jpeg")
    plt.show()

if __name__ == '__main__':

    file = pd.read_excel("./filename.xlsx")
    dp_ca=calculate_pearsonr(file)
    plot1(dp_ca)

inserte la descripción de la imagen aquí

3.trazar el dibujo (histograma del coeficiente de correlación, dibujar un histograma del número de valores no nulos)

import matplotlib.pyplot as plt

# 获取数据
dp_ca = [('feature1', 0.8), ('feature2', 0.6), ('feature3', 0.4),('feature4', 0.77), ('feature5', 0.2), ('feature6', 0.4)]
dp_ca_Nempty = [('feature1', 100), ('feature3', 50), ('feature2', 20),('feature4', 70), ('feature5', 10), ('feature6', 26)]

# 将元组列表转换为字典
dp_ca_dict = dict(dp_ca)
dp_ca_Nempty_dict = dict(dp_ca_Nempty)

# 创建子图
fig, axs = plt.subplots(1, 2, figsize=(10, 5))

# 绘制相关性系数柱状图
axs[0].bar(dp_ca_dict.keys(), dp_ca_dict.values())
axs[0].set_title('Pearson correlation coefficients')
axs[0].set_xlabel('Features')
axs[0].set_ylabel('Correlation coefficient')

# 绘制非空值数量柱状图
axs[1].bar(dp_ca_Nempty_dict.keys(), dp_ca_Nempty_dict.values())
axs[1].set_title('Number of non-empty values')
axs[1].set_xlabel('Features')
axs[1].set_ylabel('Count')

# 调整布局并显示图形
plt.xticks(rotation=45,ha='right') ## # 将x轴标签旋转45度,并以最后一个字符为旋转中心

# 设置x轴刻度标签字体大小为10
axs[0].tick_params(axis='x', labelsize=10)
axs[1].tick_params(axis='x', labelsize=10)

# 调整布局并显示图形
plt.tight_layout()
plt.show()

Por favor agregue una descripción de la imagen

Supongo que te gusta

Origin blog.csdn.net/crist_meng/article/details/129840456
Recomendado
Clasificación