您的位置:首页 > 其它

用数据可视化直观理解数据--iris数据集为例

2017-04-07 15:43 519 查看
原文:https://www.kaggle.com/benhamner/d/uciml/iris/python-data-visualizations

See Kaggle Datasets for other datasets to try visualizing. The World Food Facts data is an especially rich one for visualization.

比较常用的图表有:

查看目标变量的分布。当分布不平衡时,根据评分标准和具体模型的使用不同,可能会严重影响性能。

-iris[“Species”].value_counts()

对 Numerical Variable,可以用 Box Plot 来直观地查看它的分布。

-sns.boxplot(x=”Species”, y=”PetalLengthCm”, data=iris)

对于坐标类数据,可以用 Scatter Plot 来查看它们的分布趋势和是否有离群点的存在。

-iris.plot(kind=”scatter”, x=”SepalLengthCm”, y=”SepalWidthCm”)

-sns.jointplot(x=”SepalLengthCm”, y=”SepalWidthCm”, data=iris, size=5)

对于分类问题,将数据根据 Label 的不同着不同的颜色绘制出来,这对 Feature 的构造很有帮助。

-sns.FacetGrid(iris,hue=”Species”,size=5).map(plt.scatter,”SepalLengthCm”,”SepalWidthCm”).add_legend()

绘制变量之间两两的分布和相关度图表。

-sns.pairplot(iris, hue=”Species”, size=3)

-sns.pairplot(iris, hue=”Species”, size=3, diag_kind=”kde”)

详细例子说明

# coding=utf-8
import pandas as pd
from sklearn.datasets import load_iris

# 载入seaborn,因为载入时会有警告出现,因此先载入warnings,忽略警告。
import warnings
warnings.filterwarnings("ignore")
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="white", color_codes=True)

iris = pd.DataFrame(load_iris().data)
iris.columns = ['SepalLengthCm','SepalWidthCm','PetalLengthCm','PetalWidthCm']
iris['Species'] = load_iris().target
# 首先探索一下数据集的大体情况,多少个样本,每一个样本多少个特征等
print iris.shape
print iris.head()




# 探索一下是否为均衡分类
# 分几类?每一类多少个样本?
# 可以从结果看出,很均匀。。。若为不均衡分类,则可参照此文https://www.svds.com/learning-imbalanced-classes/进行处理。
print iris["Species"].value_counts()




# plot是画图的最主要方法,Series和DataFrame都有plot方法。
# plot默认生成是曲线图,你可以通过kind参数生成其他的图形,可选的值为:line, bar(柱状图), barh,
# kde, density, scatter(散点图)。
# 对于坐标类数据,可以用 Scatter Plot 来查看它们的分布趋势和是否有离群点的存在
iris.plot(kind="scatter", x="SepalLengthCm", y="SepalWidthCm")




# 用seaborn库来画出与上面相似的图
# seaborn 的 jointplot 函数可以在同一个图中画出二变量的散点图和单变量的柱状图
sns.jointplot(x="SepalLengthCm", y="SepalWidthCm", data=iris, size=5)




# 上面的两个散点图并不能显示每一个点所属的类别
# 所以,接下来用 seaborn 的 FacetGrid 函数按照Species花的种类来在散点图上标上不同的颜色,hue英文是色彩的意思。
sns.FacetGrid(iris, hue="Species", size=5).map(plt.scatter, "SepalLengthCm", "SepalWidthCm").add_legend()




# 通过箱线图来查看单个特征的分布
# 对 Numerical Variable,可以用 Box Plot 来直观地查看不同花类型的分布。
sns.boxplot(x="Species", y="PetalLengthCm", data=iris)




# 下面的操作,将每一个Species所属的点加到对应的位置,加上散点图,
# 振动值jitter=True 使各个散点分开,要不然会是一条直线
# 注意此处要将坐标图用ax先保存起来,这样第二次才会在原来的基础上加上散点图
ax = sns.boxplot(x="Species", y="PetalLengthCm", data=iris)
ax = sns.stripplot(x="Species", y="PetalLengthCm", data=iris, jitter=True, edgecolor="gray")




# violinplot 小提琴图,查看密度分布,结合了前面的两个图,并且进行了简化
# 数据越稠密越宽,越稀疏越窄
sns.violinplot(x="Species", y="PetalLengthCm", data=iris, size=6)

# sns.kdeplot == kernel density 核密度图(单个变量)
sns.FacetGrid(iris, hue="Species", size=6).map(sns.kdeplot, "PetalLengthCm").add_legend()

# pairplot 任意两个变量间的关系
sns.pairplot(iris, hue="Species", size=3)




# 上图中,中间对角线的部分图形也可以用kde显示
sns.pairplot(iris, hue="Species", size=3, diag_kind="kde")




# 下面的用Pandas自带的画图
# We can quickly make a boxplot with Pandas on each feature split out by species
iris.boxplot(by="Species", figsize=(12, 6))

# Andrews Curves 用样本的各个属性作为傅里叶级数的系数然后画出来
# Andrews Curves 将高维的点化为二维的曲线,曲线是一条傅里叶函数的样子,参数项为不# 同的特征值,臆想出来了自变量t,这样每个点都是一条曲线
from pandas.tools.plotting import andrews_curves
andrews_curves(iris, "Species")
#
# Another multivariate visualization technique pandas has is parallel_coordinates
# Parallel coordinates 将每个特征作为单独的一列画,然后用线将每一个样本的特征连接起来
from pandas.tools.plotting import parallel_coordinates
parallel_coordinates(iris, "Species")

# Which puts each feature as a point on a 2D plane, and then simulates
# having each sample attached to those points through a spring weighted by the
# relative value for that feature
from pandas.tools.plotting import radviz
radviz(iris, "Species")

plt.show()


完整版代码,可直接下载:http://download.csdn.net/download/u013527419/9806632

seaborn 库的一些简单用法,可以见:http://blog.csdn.net/longgb123/article/details/53228256

里面有几篇文章是介绍这个库的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据可视化
相关文章推荐