python实验报告8 数据可视化操作

我发现很多人都不太清楚这个csv是怎么弄的,其实通俗的讲就是,你不能用excel形式的改后缀名,你必须通过文本文档去改后缀名,并且必须用或者说默认有题头,行与行之间用换行符,但是数据之间得有逗号(英文版)隔开,不会的话,拿这里我写好的cv到文本文档里面保存改后缀即可,别忘了文件的位置要和你的py文件平齐。

一、实验内容

1.根据示例创建ndarray,并按要求完成操作:

[1, 2, 3],
   [4, 5, 6],
   [7, 8, 9] 

1按要求进行切片操作

12,3,5,6

2)4,5

3)7

4)1,4,7

源代码:

import numpy as np

ndarray = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

slice1=ndarray[0:1,1:3]
slice2=ndarray[1,1:3]
slice3=ndarray[2,0]
slice4=ndarray[0:3,0]

print(slice1)

print(slice2)

print(slice3)

print(slice4)

列出测试数据和实验结果截图:

 

(2)将数组中的每个元素乘2后,按行和按列方式分别计算其最大值,打印输出结果

源代码:

import numpy as np

ndarray = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

nd_times_2=ndarray*2

row=np.max(nd_times_2,axis=1)
column=np.max(nd_times_2,axis=0)

print(f'每行的最大值:{row}')
print(f'每列的最大值:{column}')

列出测试数据和实验结果截图:

2、利用Matplotlib库,绘制出抛物线曲线图,线为红色圆型点线图,横坐标取值范围:[-10, 10],绘制点数50,加上坐标轴说明(x轴:x tick,y轴:voltage),图标题为抛物线示意图。

源代码:

import numpy as np
import matplotlib.pyplot as plt

x_line=np.linspace(-10,10,50)
y_col=x_line**2

plt.plot(x_line,y_col,'ro-')

plt.xlabel('x tick')
plt.ylabel('voltage')
plt.title('y=x^2')

plt.grid(True)

plt.show()

列出测试数据和实验结果截图:

3、下图为商品信息表,数据暂存于CSV文件(goods.csv),请根据下述要求完成题目。

    商品名称 商品规格 商品价格

香皂 盒 25

洗发水 个 39

毛巾 条 15

(1)请从文件goods.csv中读取数据,并打印输出结果。

(2)请按照商品的价格从高到低对商品进行排序,并输出这组商品的最高价格最低价格平均价格

输出格式如下:商品的最高价格:39,最低价格:15,平均价格:26.33平均价格保留两位小数

(3)展示图中的数据,让用户能够直观的看出商品价格分布情况。

源代码:

import csv
import matplotlib.pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定中文字体

# (1) 从文件goods.csv中读取数据,并打印输出结果
file_path = 'goods.csv'
data = []

with open(file_path, newline='', encoding='utf-8') as csvfile:
    reader = csv.reader(csvfile)
    header = next(reader)  # 读取文件头部
    print("商品信息表:")
    for row in reader:
        print(row)
        data.append(row)

# (2) 按照商品价格从高到低对商品进行排序
sorted_data = sorted(data, key=lambda x: int(x[2]), reverse=True)

# 输出排序后的结果
print("\n按商品价格排序后的商品信息表:")
for item in sorted_data:
    print(item)

# 计算最高价格、最低价格和平均价格
prices = [int(item[2]) for item in sorted_data]
max_price = max(prices)
min_price = min(prices)
avg_price = sum(prices) / len(prices) if len(prices) > 0 else 0

# 输出价格统计信息
print(f"\n商品的最高价格:{max_price},最低价格:{min_price},平均价格:{avg_price:.2f}")

# (3) 绘制商品价格分布图表
plt.figure(figsize=(8, 5))
product_names = [item[0] for item in sorted_data]
product_prices = [int(item[2]) for item in sorted_data]
plt.bar(product_names, product_prices, color='skyblue')
plt.xlabel('商品名称')
plt.ylabel('商品价格')
plt.title('商品价格分布情况')
plt.tight_layout()

# 显示图表
plt.show()

列出测试数据和实验结果截图:

二、实验总结 

1.切片操作 slice1 = arr[0:2, 1:3]:

arr[0:2] 表示选择数组 arr 中的第 0 行到第 1 行(不包括第 2 行)。

arr[0:2, 1:3] 表示在这些行中,选择第 1 列到第 2 列(不包括第 3 列)的元素。因此,slice1 包含的元素是原数组中的 (0,1), (0,2), (1,1), (1,2),即 2, 3, 5, 6。

2.图标的相关

plt.plot(x_values, y_values, 'ro-'):

plt.plot:该函数用于创建图表。它接受 x 和 y 坐标的数据点以及一个可选的格式字符串,用于指定绘图的样式。

x_values, y_values:这些是 x 和 y 坐标的数据点,分别是 x 坐标和对应的 y 坐标。

'ro-':这是一个格式字符串,用于指定绘图的样式。

它由三个部分组成:

'r':表示红色。

'o':表示每个数据点使用圆形标记(圆点)。

'-':表示连接数据点的是实线。

因此,'ro-' 实际上表示一个带有圆形标记的红色线。

 3.显示网格线:plt.grid(True)

 4.显示图形:plt.show()

 5.生成横坐标数据:np.linspace

 6.matplotlib.pyplot不直接支持中文,会出现乱码,所以这么解决:

 
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定中文字体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

 

 7.plt.figure(figsize=(8, 5)):创建一个新的图形对象,并设置了图形的大小为(8, 5)英寸

 8.plt.tight_layout() 是 Matplotlib 库中的一个函数,它用于自动调整子图参数,以便适应当前图形区域,并确保子图之间的间距和布局合适。当你在绘图时,特别是在有多个子图的情况下,使用这个函数可以避免一些常见的布局问题,使得图形更为美观。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值