同济大学Python程序设计基础 实验九:数据可视化

1.创建一个2行1列的绘图区并在第1行第1列绘制函数f(x)=x2 的曲线图(x的取值范围[-1,1]),在第2行第1列绘制函数f(x)=1/x的曲线图(x的取值范围[0,1]),效果如图2.9.1所示。

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.subplot(211,title='平方曲线')
x = np.linspace(-1, 1)
y = x**2
plt.ylim(0, 1)
plt.plot(x, y)

plt.subplot(212, title='倒数曲线')
x = np.linspace(0, 1)
y = 1/x
plt.xlim(0.05, 0.95)
plt.ylim(0, 10)
plt.plot(x, y)

plt.subplots_adjust(hspace = 0.5)

plt.show()

2.调用scatter函数绘制正弦函数的曲线,请在曲线中添加一个表示XY的轴线,并在X轴方向输出刻度标记文本,效果如图2.9.2所示。 提示:利用plot函数绘制直线,然后在合适位置显示标记字符。

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']

x = np.linspace(-np.pi,np.pi,63)
y = np.sin(x)
plt.xlim(-4,4)
plt.ylim(-1.25,1.25)

colors = [plt.cm.tab10(i%10/10.0) for i in range(len(x))]

for i in range(len(x)):
    plt.scatter(x[i],y[i],color=colors[i],marker='*')
plt.title('Sin函数曲线')

plt.plot([-4,4],[0,0],'b')
plt.plot([0,0],[-1.25,1.25],color='orange')

plt.text(0.1,1.1,'Y')
plt.text(-3.4,-0.1,'-pi')
plt.text(3.3,-0.1,'pi')
plt.text(0.2,-0.1,'0')
plt.text(3.8,-0.1,'X')

plt.show()

3.调用bar()函数绘制教材部分例8.6中的图像直方图效果,图像文件可以自己任意指定。

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

im = np.array(Image.open(r"lena.png"))

n = int(im.size/3)
hd = [0]*n
row = im.shape[0]
col = im.shape[1]

for i in range(row):
    for j in range(col):
        v = im[i,j,0]*0.299+im[i,j,1]*0.587+im[i,j,2]*0.114
        hd[i*row+j] = v
        
plt.hist(hd,256,color='k')
plt.show()

4.绘制一个心形图案, 参考数学函数为ρ=a(1-sinθ) (θ的取值范围[0,2]),x=pcosθ,y=psinθ,在直角坐标系上的绘制图案效果如图2.9.3(a)所示,在极坐标中的绘制效果如图2.9.3(b)所示。 提示:极坐标绘制函数参考格式:plt.polar(theta,p)

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']

theta = np.linspace(0,2*np.pi)
a = 1
p = a*(1-np.sin(theta))
plt.polar(theta,p)

plt.show()

x = p*np.cos(theta)
y = p*np.sin(theta)

plt.plot(x,y,color='r')
plt.title('心形曲线-直角坐标系')
plt.show()

5. 绘制一个饼图,显示你每个月各项消费支出的比例,消费支出主要包括:学习用品、日常用品、伙食费、通讯费、娱乐费和其他开支。 

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']

persent = [0.08,0.23,0.45,0.05,0.15,0.04]
labels = ['学习用品','日常用品','伙食费','通讯费','娱乐费','其他开支']

plt.pie(persent,autopct="%.1f%%",labels=labels)
plt.title('每月各项消费支出比例')

plt.show()

6.读取“三国人名汇总.txt”中的人物名字,读取“三国演义.txt”的全部内容,先统计所有人物的名字在书本中出现的次数,并对出现次数超过100次的人物绘制一个柱状图,然后根据人物的词频大小绘制一个三国人名的词云图,效果如图2.9.4所示。(数据文件下载链接:https://pan.baidu.com/s/1b81lMIx3In-V64vs7bsHkw,提取码:jg41)

import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud
from PIL import Image
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']

fp1 = open(r'三国人名汇总.txt',"r",encoding="ANSI")
fp2 = open(r'三国演义.txt',"r",encoding="ANSI")

lines = fp1.readlines()

names = []
num = []
for line in lines:
    line = line.strip('\n')
    line = line.split(" ")
    for name in line:
        names.append(name)

f = fp2.read()
book = jieba.lcut(f)

for i in names:
    n = 0
    for j in book:
        if i==j:
            n = n+1
    num.append(n)

m = []
l = []

for k in range(len(num)):
    if num[k]>100:
        m.append(names[k])
        l.append(num[k])

plt.bar(m,l)

plt.show()

words = " ".join(names)

mask = np.array(Image.open(r"sg.png"))
wordcloud = WordCloud(font_path='C:/Windows/Fonts/simhei.ttf',
                      prefer_horizontal=0.99,
                      mask=mask,
                      background_color="white",
                      max_words=100,
                      max_font_size=30).generate(words)

plt.imshow(wordcloud)

fp1.close()
fp2.close()

7.神经网络模型在训练过程中将显示每一个训练回合所用的时间、训练集上的损失值、训练集上的准确率、验证集上的损失值和验证集上的准确率,把这些数据保存到变量history,训练结束后对这些数据进行分析,图2.9.5显示了前面5个回合的训练数据。  图2.9.5 神经网络模型训练过程 现将50个训练回合产生的数据写入到文件Epoch.txt中。用记事本中打开Epoch.txt,前面5行数据的显示结果如图2.9.6所示,其中第1列为训练集的损失值,第2列为训练集的准确率,第3列为验证集上的损失值,第4列为验证集上的准确率。  131  图2.9.6 训练产生的部分数据 下面请读入Epoch.txt文件中的数据,可视化显示训练集与验证集的准确率及损失值的变化趋势,可视化显示的结果将有助于判别本次训练的神经网络模型其拟合情况,输出结果如图2.9.7所示。(Epoch.txt文件的下载链接为https://pan.baidu.com/s/1KukeCMtSkAhzgDsRVbtwzg,提取码为:iqjy) 

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']

fp = open(r"epoch.txt","r",encoding="utf-8")
lines = fp.readlines()
loss,acc,val_loss,val_acc = [],[],[],[]
for line in lines:
    line = line.strip('\n')
    line = line.split('\t')
    loss.append(float(line[0]))
    acc.append(float(line[1]))
    val_loss.append(float(line[2]))
    val_acc.append(float(line[3]))
    
x = np.array([i for i in range(1,51)])
y1 = np.array(acc)
y2 = np.array(val_acc)
y3 = np.array(loss)
y4 = np.array(val_loss)

plt.figure(1)
plt.title('训练集和验证集的准确率')
plt.xlabel('训练轮数')
plt.ylabel('准确率')
plt.scatter(x,y1,color='cyan',label='训练集准确率')
plt.plot(x,y2,color='r',label='验证集准确率')
plt.legend(loc='lower right')

plt.figure(2)
plt.title('训练集和验证集的损失值')
plt.xlabel('训练轮数')
plt.ylabel('损失值')
plt.scatter(x,y3,color='b',label='训练集损失')
plt.plot(x,y4,color='r',label='验证集损失')
plt.legend()

plt.show()

  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实验三:Python程序设计基础 实验目的: 1.掌握Python程序的基本结构。 2.理解Python程序的执行过程。 3.学会使用Python基本的数据类型和控制结构。 4.学会定义和调用函数。 实验环境: Python 3.7以上版本,Jupyter Notebook 实验任务: 任务一:Python程序基本结构 1. Python程序的基本结构是什么? 2. 请用Python代码输出“Hello World!”。 任务二:Python程序的执行过程 1. Python程序的执行过程是什么? 2. Python程序中的语句是按照什么顺序执行的? 任务三:Python基本数据类型和控制结构 1. Python中基本的数据类型有哪些? 2. Python中的控制结构有哪些? 3. 请用Python代码实现以下功能: (1)定义一个列表,包含数字1到10。 (2)输出列表中的所有元素。 (3)输出列表中的第一个和最后一个元素。 (4)输出列表中的第2到第5个元素。 (5)将列表中的元素按照从大到小的顺序排列并输出。 任务四:Python函数的定义和调用 1. Python中如何定义函数? 2. Python中如何调用函数? 3. 请用Python代码实现以下功能: (1)定义一个函数,计算任意两个数的和。 (2)调用该函数,计算2和3的和并输出结果。 (3)定义一个函数,计算任意两个数的积。 (4)调用该函数,计算4和5的积并输出结果。 (5)定义一个函数,将任意一个字符串反转并输出。 (6)调用该函数,将字符串“abcdefg”反转并输出结果。 实验报告: 请按照实验任务提交实验报告,将代码和运行结果截图并附在报告中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值