基础配置如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 针对图片中的中文乱码问题
from matplotlib import rcParams
rcParams['font.family'] = 'SimHei'
rcParams['axes.unicode_minus'] = False
读取数据
file_path = r""
data = pd.read_excel(file_path)
normal = data[data['label'] == 0].iloc[:, :-1] # 根据自己需求处理数据
abnormal = data[data['label'] == 1]
一、折线图
sns.lineplot(x="col-1", y="col-2", data=normal[:10])
plt.show()
二、直方图
sns.displot(data['col-1'], kde=True)
plt.show()
三、箱型图
用来查看数据中的:中位数、上下四分位数、离群点等,可以通过下面程序处理离群点
def outliers_proc(data, col_name, scale=1.5):
"""
data:接收pandas数据格式
col_name: pandas列名
scale: 尺度
"""
data_col = data[col_name]
Q1 = data_col.quantile(0.25) # 0.25分位数
Q3 = data_col.quantile(0.75) # 0,75分位数
IQR = Q3 - Q1
data_col[data_col < Q1 - (scale * IQR)] = Q1 - (scale * IQR)
data_col[data_col > Q3 + (scale * IQR)] = Q3 + (scale * IQR)
return data[col_name]
绘图如下:
rows, cols = 2, 1
fig, ax = plt.subplots(rows, cols, figsize=(10, 4), sharex=True, sharey=True)
fig.suptitle('离群点处理')
sns.boxplot(data=normal, ax=ax[0])
data_new = pd.DataFrame()
for i in range(normal.shape[1]):
column_name = f'col-{i}'
data_new[column_name] = outliers_proc(normal, column_name)
sns.boxplot(data=data_new, ax=ax[1])
ax[0].set_title('(a) 清理前')
ax[1].set_title('(b) 清理后')
plt.show()
四、热力图
corr_ = data.iloc[:, :-1].corr() # 移除标签部分并计算相关系数
plt.suptitle('特征相关性') # 设置图片题目
"""
data: 数据 这里为相关系数
cmap: 控制图形的颜色
linewidths: 控制数值之间的间隙
annot: 是否显示数值
"""
sns.heatmap(data=corr_, cmap="RdBu_r", linewidths=0.3, annot=True)
plt.show()
数据部分显示,利用mask
属性
corr_ = data.iloc[:, :-1].corr()
mask = np.zeros_like(corr_)
# # 将mask的对角线及以上设置为True
# # 这部分就是对应要被遮掉的部分
mask[np.triu_indices_from(mask)] = True
# # 4. 热力图
plt.suptitle('特征相关性')
sns.heatmap(data=corr_, cmap="RdBu_r", linewidths=0.3, annot=True, mask=mask)
plt.show()
五、散点图
sns.jointplot(x="col-1", y="col-3", data=data[:10])
plt.show()
可以通过kind
属性改变呈现模型,例如
sns.jointplot(x="col-1", y="col-3", data=data[:10], kind="kde")
plt.show()