Python机器学习实验 Python 数据可视化

1.实验目的

掌握 Matplotlib 数据可视化的常用方法。

2.实验内容

1.  绘制鸢尾花数据集的特征分布图

说明:鸢尾花是单子叶百合目花卉,是一种比较常见的花,鸢尾花的品种较多。 鸢尾花数据集最初由 Edgar Anderson  测量得到,而后在著名的统计学家和生物学

家 R.A Fisher 于 1936 年发表的文章中被使用。它是一个很小的数据集,仅有 150 行,5

列。该数据集的四个特征属性的取值都是数值型的,他们具有相同的量纲,不需要做 任何标准化的处理,第五列为通过前面四列所确定的鸢尾花所属的类别名称。

鸢尾花数据集有 4 个属性列和一个品种类别列:sepal length(萼片长度)、sepal width(萼片宽度)、petal length(花瓣长度)、petal width (花瓣宽度),单位都是 厘米。3 个品种类别是 Setosa、Versicolour、Virginica,样本数量 150 个,每类 50 个。

(1)使用 pandas.read_csv()函数读取“iris.csv”。 操作提示:

数据没有标题,设置参数 header=None。同时手动设置标题,如:df.columns = ['sepalLength','sepalWidth','petalLength','petalWidth','kind']。

图 5-1   鸢尾花数据集

#使用pandas.read_csv()函数读取iris.csv
import pandas as pd
df = pd.read_csv(r'D:\iris.csv',header=None)
df.columns = ['sepalLength','sepalWidth','petalLength','petalWidth','kind']
print(df)

2)  绘制包含两个子图的图表。

先绘制第一幅子图,显示花瓣宽度和花萼宽度的对比散点图;再绘制第二幅子

图,显示花瓣宽度的条形图。完成效果如图 5-2 所示。

操作提示:

条形图的 X 轴上的数值数量与鸢尾花数据集的样本数量保存一致。

图 5-2   鸢尾花图表

#绘制包含两个子图的图表,第一幅子图,显示花瓣宽度和花萼宽度的对比散点图,第二幅子图,显示花瓣宽度的条形图
import matplotlib.pyplot as plt
plt.scatter(df['sepalWidth'],df['petalWidth'])
plt.xlabel('sepalWidth')
plt.ylabel('petalWidth')
plt.title('花萼/花瓣宽度散点图')
plt.show()
# 为了条形图,我们需要创建一个与样本数量一致的索引序列
index = range(len(df['petalWidth']))
plt.bar(index,df['petalWidth'])
plt.xlabel('index')
plt.ylabel('petalWidth')
plt.title('花萼/花瓣宽度条形图')
plt.show()

2.  多个图表的绘制

生成 0 到 10、间隔 0.1 的数值序列作为 x,绘制如下图所示的图表,各子图的内容 分别为:

第一幅子图:计算对应的 cos(x)函数值,根据数值和 cos 值绘制曲线图。 第二幅子图:绘制 y=2x、y=3x、y=4x 的直线组。

第三幅子图:以数值序列作为横轴,100 以内的随机作为纵轴,绘制绿色、“+”号 的散点图。

第四幅子图:绘制 y=sin(x)*ex/100 的曲线。

#生成 0 到 10、间隔 0.1 的数值序列作为 x,绘制如下图所示的图表,各子图的内容 分别为:第一幅子图:计算对应的 cos(x)函数值,根据数值和 cos 值绘制曲线图。 第二幅子图:绘制 y=2x、y=3x、y=4x 的直线组。第三幅子图:以数值序列作为横轴,100 以内的随机作为纵轴,绘制绿色、“+”号 的散点图。第四幅子图:绘制 y=sin(x)*ex/100 的曲线。
import numpy as np
import matplotlib.pyplot as plt

# 生成0到10、间隔0.1的数值序列
x = np.arange(0, 10.1, 0.1)

# 第一幅子图:计算cos(x)并绘制曲线图
plt.subplot(4, 1, 1)  # 4行1列的子图,当前是第1个子图
plt.plot(x, np.cos(x))
plt.title('y = cos(x)')
plt.xlabel('x')
plt.ylabel('y')

# 第二幅子图:绘制y=2x, y=3x, y=4x的直线组
plt.subplot(4, 1, 2)  # 4行1列的子图,当前是第2个子图
for slope in [2, 3, 4]:
    plt.plot(x, slope * x, label=f'y={slope}x')
plt.title('y = mx Lines')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()

# 第三幅子图:以数值序列作为横轴,100以内的随机数作为纵轴,绘制绿色、“+”号的散点图
plt.subplot(4, 1, 3)  # 4行1列的子图,当前是第3个子图
y_random = np.random.rand(len(x)) * 100  # 生成100以内的随机数
plt.scatter(x, y_random, color='green', marker='+')
plt.title('Random Scatter Plot')
plt.xlabel('x')
plt.ylabel('y')

# 第四幅子图:绘制y=sin(x)*exp(x)/100的曲线
plt.subplot(4, 1, 4)  # 4行1列的子图,当前是第4个子图
y = np.sin(x) * np.exp(x) / 100
plt.plot(x, y)
plt.title('y = sin(x) * exp(x) / 100')
plt.xlabel('x')
plt.ylabel('y')

# 调整子图间距并显示图表
plt.tight_layout()
plt.show()

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值