数据可视化 数据分析 常用图 seaborn

20 篇文章 1 订阅
14 篇文章 0 订阅

本文主要介绍几种数据分析阶段常用的统计图,可以用来验证数据分布,发现数据之间的关系,或进行异常值检测等。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt	
import seaborn as sns
from scipy import stats
import math

import warnings 
warnings.filterwarnings("ignore")

数据准备

首先准备两份数据,鸢尾花数据集

第一份是iris原始数据,第二份iris_z将所有特征取整

然后观察数据基本信息,如缺失值,平均值等

1.构造数据

from sklearn.datasets import load_iris
data=load_iris().data
target=load_iris().target
data_f=pd.DataFrame(data)
target_f=pd.DataFrame(target)
iris=pd.concat([data_f,target_f],axis=1)
data_f.columns=["w1","w2","l1","l2"]
for column in data_f.columns:
    data_f[column]=data_f[column]=data_f[column].apply(lambda x :math.floor(x))
iris_z=pd.concat([data_f,target_f],axis=1)
iris.columns=["w1","w2","l1","l2","target"]
iris.head()
w1w2l1l2target
05.13.51.40.20
14.93.01.40.20
24.73.21.30.20
34.63.11.50.20
45.03.61.40.20
iris_z.columns=["w1","w2","l1","l2","target"]
iris_z.head()
w1w2l1l2target
053100
143100
243100
343100
453100

2.观察基本信息

iris.describe()
w1w2l1l2target
count150.000000150.000000150.000000150.000000150.000000
mean5.8433333.0540003.7586671.1986671.000000
std0.8280660.4335941.7644200.7631610.819232
min4.3000002.0000001.0000000.1000000.000000
25%5.1000002.8000001.6000000.3000000.000000
50%5.8000003.0000004.3500001.3000001.000000
75%6.4000003.3000005.1000001.8000002.000000
max7.9000004.4000006.9000002.5000002.000000
iris.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 5 columns):
w1        150 non-null float64
w2        150 non-null float64
l1        150 non-null float64
l2        150 non-null float64
target    150 non-null int32
dtypes: float64(4), int32(1)
memory usage: 5.4 KB

绘图

1.countplot

对w1特征进行分析,看其取值不同时,对应的target分别有哪些

sns.countplot("w1",hue="target",data=iris_z)

在这里插入图片描述

2.透视图

看w1和w2的不同取值组合,分别对应的target的平均值

k=iris_z.groupby(["w1","w2"])["target"].mean()
k
w1  w2
4   2     0.750000
    3     0.000000
5   2     1.208333
    3     0.242424
    4     0.000000
6   2     1.440000
    3     1.689655
7   2     2.000000
    3     1.888889
Name: target, dtype: float64

3. 数据分布图

对两个数据的"w1"特征进行分析,蓝色线条是数据的分布,黑色是期待的分布,

可以看到将数据离散化后得到iris_z,与正态分布差异较大

sns.distplot(iris["w1"],fit=stats.norm)
plt.show()
sns.distplot(iris_z["w1"],fit=stats.norm)
plt.show()

在这里插入图片描述
在这里插入图片描述

4.qq图

qq图,蓝色点越接近红线,就越符合正态分布

对上面的iris[“w1”]进行分析,发现其非常符合正态分布

而iris_z[“w1”]则不符合正态分布

x=stats.probplot(iris["w1"],plot=plt)
plt.show()
x=stats.probplot(iris_z["w1"],plot=plt)

在这里插入图片描述
在这里插入图片描述

5.分布比较图

把数据分成训练集和测试集,看特征w1在两个数据及上分布是否一致

如果不一致,说明这个特征不应该被使用,应该被删除

下图中,差异比较小,说明w1可以使用

iris_copy=iris.copy()
iris_shuffle=iris_copy.sample(frac=1)
x_train=iris_shuffle.iloc[0:120]
x_test=iris_shuffle.iloc[120:]
ax=sns.kdeplot(x_train["w1"],color="red",shade=True)
ax=sns.kdeplot(x_test["w1"],color="blue",shade=True)

在这里插入图片描述

6.相关性热力图

用于比较特征之间的相关度

绝对值越大,相关性越强,即“-1”比“0”更相关

下图中,可以发现target与l1、l2相关度较高

plt.figure(figsize=[5,5])
sns.heatmap(iris[["l1","l2","w1","w2","target"]].corr(),annot=True)

在这里插入图片描述

7.箱型图

观察上一步中,w2的分散情况,可以用来发现异常值,如果需要还可以删除

fig = plt.figure(figsize=(6,4))
w2=pd.DataFrame(iris["w2"]) 
box=w2.boxplot(
    return_type="both",
            notch=True, # 是否用盒子形状
            sym='r*',    # 用红色矩形展示异常值
            showmeans=True,#展示均值点
            patch_artist=False,#是否要填充色
            meanline=True,#展示均值线
            widths=0.5,#设置箱盒宽度
            vert=True)   #垂直展示图形
 
t = plt.title('Box plot')
# 原文链接:https://blog.csdn.net/opp003/article/details/84959020

在这里插入图片描述

异常值的上下界,可以用

box.lines[“whiskers”][0] 和 box.lines[“whiskers”][0] 来获得

print("line1:",box.lines["whiskers"][0].get_ydata())
print("line2:",box.lines["whiskers"][1].get_ydata())

low_value=box.lines["whiskers"][0].get_ydata()[1]
high_value=box.lines["whiskers"][1].get_ydata()[1]
print("low_value:",low_value)
print("high_value:",high_value)
line1: [2.8 2.2]
line2: [3.3 4. ]
low_value: 2.2
high_value: 4.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值