python基于iris数据集画出散点图

最近数据挖掘选修课需要根据iris数据集(又名:鸢尾花数据集)画出散点图,说起来,第一眼看到iris这个名词,让我想起了同名的iris(虹膜),哈哈哈,由于前阵子报了关于虹膜识别的题目,所以对iris这个词相当敏感。

 

原来老师的要求是使用matlab画出散点图,哎,一听到要用到matlab,心想:为什么数据挖掘这么适合锻炼Python能力的一门课程,却偏偏选了做数学的matlab当作工具呢?提起matlab,就想起了大一一段辛酸故事,明明一名读软件的,羡慕别人使用matlab做数学做得很6,然后想着自学matlab,结果在破解matlab花的时间,比学习的时间多得多。。。

 

python基于iris数据集画出散点图_第1张图片

 

 

不管了,matlab是不会用的了,学习成本也未免太高了吧。然后学生党,建议import一个选择能够与matlab媲美的matplotlib包吧,哈哈哈。我喜欢这个话(出自Numpy Beginner's Guide second edition)

 

先看一下matplotlib做的图,然后查看代码,需要import几个包,一个是matplotlib(作图)、一个numpy(数据操作)、一个sklearn(利用iris数据集),好像还需要一个scikit-learn(机器学习)。

本来想着应该没有涉及到机器学习这一块,不知道为什么会报错,可能是sklearn需要基于scikit-learn吧,不清楚不清楚。

下面就是python写的图了。

 

 

python基于iris数据集画出散点图_第2张图片

 

代码也不难,做实验的时候,老师说的两个for循环就可以搞定,我在想:干!怎么可能两个for就可以搞定。

最后自己被自己的实力打脸。。。

 

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris

iris = load_iris()  # 加载机器学习的下的iris数据集,先来认识一下iris数据集的一些操作,其实iris数据集就是一个字典集。下面注释的操作,可以帮助理解

# print(iris.keys())  # 打印iris索引,关键字

# n_sample, n_features = iris.data.shape

# print(iris.data.shape[0])  # 样本
# print(iris.data.shape[1])  # 4个特征
#
# print(n_sample, n_features)
#
# print(iris.data[0])
#
# print(iris.target.shape)
# print(iris.target)  # 三个种类,分别用0,1,2来表示
# print(iris.target_names)  # 三个种类的英文名称
# print("feature_names:", iris.feature_names)

iris_setosa = iris.data[:50]  # 第一种花的数据

iris_versicolor = iris.data[50:100]  # 第二种花的数据

iris_virginica = iris.data[100:150]  # 第三种花的数据

# print(iris_setosa)


iris_setosa = np.hsplit(iris_setosa, 4)  # 运用numpy.hsplit水平分割获取各特征集合,分割成四列
iris_versicolor = np.hsplit(iris_versicolor, 4)
iris_virginica = np.hsplit(iris_virginica, 4)

setosa = {'sepal_length': iris_setosa[0], 'sepal_width': iris_setosa[1], 'petal_length': iris_setosa[2],
          'petal_width': iris_setosa[3]}

versicolor = {'sepal_length': iris_versicolor[0], 'sepal_width': iris_versicolor[1], 'petal_length': iris_versicolor[2],
              'petal_width': iris_versicolor[3]}

virginica = {'sepal_length': iris_virginica[0], 'sepal_width': iris_virginica[1], 'petal_length': iris_virginica[2],
             'petal_width': iris_virginica[3]}

size = 5  # 散点的大小
setosa_color = 'b'  # 蓝色代表setosa
versicolor_color = 'g'  # 绿色代表versicolor
virginica_color = 'r'  # 红色代表virginica

sepal_width_ticks = np.arange(2, 5, step=0.5)  # sepal_length分度值和刻度范围
sepal_length_ticks = np.arange(4, 8, step=0.5)  # sepal_width分度值和刻度范围
petal_width_ticks = np.arange(0, 2.5, step=0.5)  # petal_width分度值和刻度范围
petal_length_ticks = np.arange(1, 7, step=1)  # petal_length分度值和刻度范围

ticks = [sepal_length_ticks, sepal_width_ticks, petal_length_ticks, petal_width_ticks]
label_text = ['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width']

# print(ticks)

plt.figure(figsize=(12, 12))  # 设置画布大小
plt.suptitle("Iris Set (blue=setosa, green=versicolour, red=virginca) ", fontsize=30)

for i in range(0, 4):
    for j in range(0, 4):
        plt.subplot(4, 4, i * 4 + j + 1) # 创建子画布

        if i == j:
            print(i*4+j+1) #序列号

            plt.xticks([])
            plt.yticks([])
            plt.text(0.1, 0.4, label_text[i], size=18)

        else:
            plt.scatter(iris_setosa[j], iris_setosa[i], c=setosa_color, s=size)
            plt.scatter(iris_versicolor[j], iris_versicolor[i], c=versicolor_color, s=size)
            plt.scatter(iris_virginica[j], iris_virginica[i], c=virginica_color, s=size)
            # plt.xlabel(label_text[j])
            # plt.ylabel(label_text[i])
            plt.xticks(ticks[j])
            plt.yticks(ticks[i])

#plt.show()  //需要保存的时候不能show,即调用savefig()保存图片的时候,不能调用show(),这个我也不知道为什么这样。。。

plt.savefig('iris.png', format='png')   #保存图片

 

你可能感兴趣的:(Python)