Python数据预处理+正态性检验+异常值处理+Q-Q图-K-S检验+相关性分析(2024MathorCup A题为例)

#数据预处理#正态性检验、Q-Q图、箱线图、直方图、相关性分析
#Q-Q图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy.stats import probplot
a=pd.read_excel('附件1:小区基本信息.xlsx',engine='openpyxl')
b=pd.read_excel('附件2:冲突及干扰矩阵数据.xlsx',engine='openpyxl')
c=pd.read_excel('附件3:混淆矩阵数据.xlsx',engine='openpyxl')

一、正态性检验

K-S检验:

#正态性检验
#k-s检验
from scipy.stats import kstest
d1 = a.values[:,2]
d2 = b.values[:,2]
d3 = c.values[:,2]
print(kstest(d1, 'norm'))
print(kstest(d2, 'norm'))
print(kstest(d3, 'norm'))

KstestResult(statistic=0.9938007877149561, pvalue=0.0, statistic_location=3, statistic_sign=-1)
KstestResult(statistic=0.8413447460685429, pvalue=0.0, statistic_location=1, statistic_sign=-1)
KstestResult(statistic=0.8413447460685429, pvalue=0.0, statistic_location=1, statistic_sign=-1)

将文件写入excel:

pd.DataFrame([kstest(d1,'norm'),kstest(d2, 'norm'),kstest(d3, 'norm')]).to_excel('正态性检验.xlsx',header=['k-s统计量','p值'],index=False)
df=pd.read_excel('正态性检验.xlsx',engine='openpyxl')
#表格添加一列PCI 1、PCI 2、PCI 3
df.insert(0,'指标',['PCI 1','PCI 2','PCI 3'])
df.to_excel('正态性检验.xlsx',index=False)

Q-Q图:

#Q-Q图
# 提取数据
d1 = a.values[:,2]
# 计算均值和标准差
mu1 = d1.mean()
s1 = d1.std()
sd1 = sorted(d1)
n1 = len(d1)
# 计算分位数
x1 = (np.arange(n1) + 1 / 2) / n1
yi1 = norm.ppf(x1, mu1, s1)

# 提取数据
d2 = b.values[:,2]

# 计算均值和标准差
mu2 = d2.mean()
s2 = d2.std()
sd2 = sorted(d2)
n2 = len(d2)

# 计算分位数
x2 = (np.arange(n2) + 1 / 2) / n2
yi2 = norm.ppf(x2, mu2, s2)

#提取数据
d3 = c.values[:,2]

# 计算均值和标准差
mu3 = d3.mean()
s3 = d3.std()
sd3 = sorted(d3)
n3 = len(d3)
    
# 计算分位数
x3 = (np.arange(n3) + 1 / 2) / n3
yi3 = norm.ppf(x3, mu3, s3)
    
# 设置字体和大小
plt.rc('font', size=12)
plt.rc('font', family='SimHei')
plt.rc('axes', unicode_minus=False)
# 创建画布
plt.figure(figsize=(20, 5))
# 绘制QQ图
plt.subplot(131)
plt.plot(yi1, sd1, 'o', label='QQ图')
plt.plot(sd1, sd1, label='参照直线')
plt.legend()
plt.xlabel('PCI 1')
plt.ylabel('现网PCI')

plt.subplot(132)
plt.plot(yi2, sd2, 'o', label='QQ图')
plt.plot(sd2, sd2, label='参照直线')
plt.legend()
plt.xlabel('PCI 2')
plt.ylabel('冲突MR数')

plt.subplot(133)
plt.plot(yi3, sd3, 'o', label='QQ图')
plt.plot(sd3, sd3, label='参照直线')
plt.legend()
plt.xlabel('PCI 3')
plt.ylabel('混淆MR数')
# 保存图片
plt.savefig('Q-Q图PCI 1.png')

 

plt.figure(figsize=(20, 5))
# 使用probplot绘制QQ图
plt.subplot(131)
probplot(d1, plot=plt)
plt.subplot(132)
probplot(d2, plot=plt)
plt.subplot(133)
probplot(d3, plot=plt)
plt.savefig('Q-Q图PCI 2.png')

 二、异常值检测

箱线图

#箱线图
import pandas as pd
import matplotlib.pyplot as plt
a=pd.read_excel('附件1:小区基本信息.xlsx',engine='openpyxl')
b=pd.read_excel('附件2:冲突及干扰矩阵数据.xlsx',engine='openpyxl')
c=pd.read_excel('附件3:混淆矩阵数据.xlsx',engine='openpyxl')
plt.figure(figsize=(20, 5))
plt.subplot(131)
plt.boxplot(a.values[:,2])
plt.xlabel('PCI 1')
plt.ylabel('现网PCI')
plt.subplot(132)
plt.boxplot(b.values[:,2])
plt.xlabel('PCI 2')
plt.ylabel('冲突MR数')
plt.subplot(133)
plt.boxplot(c.values[:,2])
plt.xlabel('PCI 3')
plt.ylabel('混淆MR数')
plt.savefig('箱线图.png')

正态分布直方图 

#直方图
import pandas as pd
import matplotlib.pyplot as plt
a=pd.read_excel('附件1:小区基本信息.xlsx',engine='openpyxl')
b=pd.read_excel('附件2:冲突及干扰矩阵数据.xlsx',engine='openpyxl')
c=pd.read_excel('附件3:混淆矩阵数据.xlsx',engine='openpyxl')
plt.figure(figsize=(20, 5))
plt.subplot(131)
plt.hist(a.values[:,2], bins=20)
#添加拟合曲线
mu = a.values[:,2].mean()
sigma = a.values[:,2].std()
x1 = np.linspace(a.values[:,2].min(), a.values[:,2].max(), 100)
y1 = 1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (x1 - mu)**2 / (2 * sigma**2))
plt.plot(x1, y1, 'r-')
plt.xlabel('PCI 1')
plt.ylabel('现网PCI')

plt.subplot(132)
plt.hist(b.values[:,2], bins=20)
#添加拟合曲线
mu = b.values[:,2].mean()
sigma = b.values[:,2].std()
x2 = np.linspace(b.values[:,2].min(), b.values[:,2].max(), 100)
y2 = 1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (x2 - mu)**2 / (2 * sigma**2))
plt.plot(x2, y2, 'r-')
plt.xlabel('PCI 2')
plt.ylabel('冲突MR数')

plt.subplot(133)
plt.hist(c.values[:,2], bins=20)
#添加拟合曲线
mu = c.values[:,2].mean()
sigma = c.values[:,2].std()
x3 = np.linspace(c.values[:,2].min(), c.values[:,2].max(), 100)
y3 = 1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (x3 - mu)**2 / (2 * sigma**2))
plt.plot(x3, y3, 'r-')
plt.xlabel('PCI 3')
plt.ylabel('混淆MR数')
plt.savefig('直方图.png')

三、相关性分析 

#相关性分析
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
a=pd.read_excel('附件1:小区基本信息.xlsx',engine='openpyxl')
b=pd.read_excel('附件2:冲突及干扰矩阵数据.xlsx',engine='openpyxl')
c=pd.read_excel('附件3:混淆矩阵数据.xlsx',engine='openpyxl')
plt.figure(figsize=(20, 5))
plt.subplot(131)
sns.heatmap(a.corr(), annot=True, cmap='coolwarm')
plt.subplot(132)
sns.heatmap(b.corr(), annot=True, cmap='coolwarm')
plt.subplot(133)
sns.heatmap(c.corr(), annot=True, cmap='coolwarm')
plt.savefig('相关性分析.png')

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡卡_R-Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值