原文: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.
完整版代码,可直接下载:http://download.csdn.net/download/u013527419/9806632
seaborn 库的一些简单用法,可以见:http://blog.csdn.net/longgb123/article/details/53228256
里面有几篇文章是介绍这个库的
比较常用的图表有:
- 查看目标变量的分布。当分布不平衡时,根据评分标准和具体模型的使用不同,可能会严重影响性能。
-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”)
详细例子说明
import pandas as pd
from sklearn.datasets import load_iris
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()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
# 探索一下是否为均衡分类
# 分几类?每一类多少个样本?
# 可以从结果看出,很均匀。。。若为不均衡分类,则可参照此文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()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21