必须要的可视化库
import matplotlib.pyplot as plt
import seaborn as sns
缺失值
查看缺失值分布
import missingno as msno
msno.matrix(data)
查看缺失值比例
missing = train.isnull().sum()
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()
相关性分析
# 针对数值型特征
price_numeric = Train_data[numeric_features]
correlation = price_numeric.corr()
print(correlation['price'].sort_values(ascending=False),'\n')
f, ax = plt.subplots(figsize = (7, 7))
plt.title('Correlation of Numeric Features with Price',y=1,size=16)
sns.heatmap(correlation,square = True, vmax=0.8)
展示变量两两之间的关系
sns.pairplot():展示变量两两之间的关系(线性或非线性,有无较为明显的相关关系):
- 对角线:各个属性的直方图,用diag_kind属性控制图类型,可选"scatter"与"reg"
- 非对角线:两个不同属性之间的相关图,用kind属性控制图类型,可选"scatter"与"reg"
- hue :针对某一字段进行分类
sns.set()
columns = ['price', 'v_12', 'v_8' , 'v_0', 'power', 'v_5', 'v_2', 'v_6', 'v_1', 'v_14']
sns.pairplot(Train_data[columns],size = 2 ,kind ='scatter',diag_kind='kde')
plt.show()
查看两变量之间的关系
sns.barplot(x="Sex", y="Survived", data=train)
查看类别个数
sns.countplot(y = train_2['current_service'])
查看某连续型变量的分布
sns.distplot(data['age'])
data['volume'].plot()
回归标签可视化
定义目标变量SalePrice的可视化
def lable_cv(data_series):
# 初始化图片
fig = plt.figure(constrained_layout=True, figsize=(15,10))
# 切割图片
grid = gridspec.GridSpec(ncols=3,nrows=3,figure=fig)
# 开始画第一个图,指定画图位置
ax1 = fig.add_subplot(grid[0,:2])
# 开始画图
ax1.set_title('housePrice')
sns.distplot(data_series,ax=ax1) # 指定坐标
# 画第二个图,指定位置
ax2 = fig.add_subplot(grid[1,:2])
ax2.set_title('QQplot')
stats.probplot(data_series,plot=ax2)
#第三个图
ax3 = fig.add_subplot(grid[:,2])
ax3.set_title('box_plot')
sns.boxplot(data_series,orient='v',ax=ax3)
print('salePrice的偏度:',data_series.skew())
print('salePrice的峰度:',data_series.kurt())
时间序列可视化
随着时间迁移,交通数据的流量、速度、占有率如何变化
# 将时间设置为index
data.set_index('starttime',inplace=True)
# 数据归一化
df_norm = (data - data.min()) / (data.max() - data.min())
# 绘制时间序列
plt.figure(figsize=(16,5))
sns.lineplot(data=df_norm,dashes=False)
plt.ylabel('norm_value')
plt.xlabel('time')
三维散点图
for i in range(0,2):
x_1 = data['occupancy'].values
x_2 = data['speed'].values
z = data['volume'].values
X, Y = np.meshgrid(x_1, x_2)#网格的创建,这个是关键
Z = -0.164*X*X + 9.566*X - 0.015*Y*Y+2.607*Y+0.0167X*Y-101.870
plt.figure(figsize=(8,6))
ax = plt.subplot(111, projection='3d') # 创建一个三维的绘图工程
# 将数据点分成三部分画,在颜色上有区分度
ax.scatter(x_1, x_2, z, c='lightblue',label='real volume') # 绘制数据点
ax.scatter(x_1, x_2, Z, c='pink',label='predict volume') # 绘制数据点
# ax.plot_surface(X,Y,Z,color='dodgerblue') # mintcream mintcream
# cmap='pink'
ax.legend()
ax.set_xlabel('occupancy')
ax.set_ylabel('speed')
ax.set_zlabel('volume')
if(i==1):
ax.view_init(30, 70) # 画出两幅图,第二幅图为旋转图
参考链接:https://mp.weixin.qq.com/s/IOlHIEIQhuIaubTeP4o39w