【Python】编程练习的解密与实战(四)
⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。
目录
🪐1. 初识Python
🪐2. 研究报告四
🌍研究目的
🌍研究要求
🌍研究代码
🌍研究结果
🌍研究体会
📝总结
🪐1. 初识Python
Python是一种高级、通用、解释型的编程语言,具有简洁而清晰的语法,被广泛应用于软件开发、数据科学、人工智能等领域。以下是Python技术的一些主要特点和应用领域:
-
易学易用: Python的语法设计简单,容易学习和理解。这使得它成为初学者和专业开发人员的首选语言之一。
-
开源: Python是开源的,任何人都可以查看、修改和分发其源代码。这为开发者提供了自由和灵活性。
-
跨平台: Python可在多个操作系统上运行,包括Windows、Linux和macOS,使其成为跨平台开发的理想选择。
-
强大的社区支持: Python拥有庞大的全球开发者社区,用户可以获得丰富的文档、库和工具,方便解决各类问题。
-
广泛应用领域: Python在多个领域都有应用,包括Web开发、数据科学、机器学习、人工智能、自动化测试、网络编程等。
-
丰富的第三方库: Python拥有丰富的第三方库和框架,如NumPy、Pandas、Django、Flask等,提供了强大的工具来简化开发流程。
-
动态类型: Python是一种动态类型语言,允许开发者更加灵活地进行变量和对象的操作。
-
面向对象编程: Python支持面向对象编程,使得代码结构更加模块化、可维护性更强。
总体而言,Python是一门功能强大、灵活易用的编程语言,适用于各种规模和类型的项目,从小型脚本到大型应用,都能够得心应手。
🪐2. 研究报告四
🌍研究目的
-
掌握Jupyter Notebook编程工具的基本用法:
- 学习并掌握Jupyter Notebook的基本用法,包括代码编写、执行和Markdown文档的编辑等。
-
理解并熟悉Python的Seaborn和Matplotlib画图:
- 了解Seaborn和Matplotlib这两个Python库在数据可视化方面的作用。
- 熟悉它们的画图函数和参数,能够使用它们创建各种图表。
-
使用图像的RGB色彩模式并实现图像的数组表示与图像变换:
- 理解图像的RGB色彩模式,了解每个像素由红、绿、蓝三个通道组成。
- 学习如何将图像表示为数组,掌握图像数组的基本概念。
- 实现图像的变换,例如通过调整色彩、大小或应用滤镜等方式对图像进行修改。
🌍研究要求
-
操作书上第九章内容:阅读并实践书籍中的第九章内容,深入了解相关知识和技能。
-
请画出如图2.png所示的图形:进行图形绘制工作,按照图2.png的示例绘制相应的图形。
-
通过编码获得fcity.jpg的手绘图像(如beijing.jpg所示):利用编码技术,对fcity.jpg进行处理,生成类似beijing.jpg的手绘效果图像。这可能涉及图像处理算法和相关库的使用。
🌍研究代码
1. 操作书上第九章内容
## 1.操作书上第九章内容 import matplotlib.pyplot as plt import numpy as np import pandas as pd ## 直线图 data=np.arange(10) plt.plot(data) ## 创建画布 fig=plt.figure() axs=plt.subplots(2,3) axs ## 折线图 plt.figure() plt.plot([1,2,3,4,5,6,7],[10,15,13,16,18,20,10]) plt.show() ## 散点图 # 0.准备数据 x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64, 163.56, 120.06, 207.83, 342.75, 147.9 , 53.06, 224.72, 29.51, 21.61, 483.21, 245.25, 399.25, 343.35] y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9 , 239.34, 140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1 , 30.74, 400.02, 205.35, 330.64, 283.45] # 1.创建画布 plt.figure(figsize=(20, 8), dpi=100) # 2.绘制图像 plt.scatter(x, y) # 3.图像显示 plt.show() ## 柱状图 movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它'] # 横坐标 x = range(len(movie_name)) # 票房数据 y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222] # 1.创建画布 plt.figure(figsize=(20, 8), dpi=100) # 2.绘制图像 plt.bar(x, y, color=['b','r','g','y','c','m','y','k','c','g','b'], width=0.7) # 2.1 修改x轴显示 plt.xticks(x, movie_name) # 2.2 添加网格 plt.grid(line, alpha=0.8) # 2.3 添加标题 plt.title("电影票房收入对比") # 3.图像显示 plt.show() ## 绘制基本图像 import random from pylab import mpl # 设置显示中文字体 mpl.rcParams["font.sans-serif"] = ["SimHei"] # 设置正常显示符号 mpl.rcParams["axes.unicode_minus"] = False x=range(60) y_shanghai=[random.uniform(15,8) for i in x] # 建画布 plt.figure(figsize=(20,8),dpi=80) # 绘折线图 plt.plot(x,y_shanghai) # 显示图像 plt.show() ## 修改x,y间隔 x=range(60) y_shanghai=[random.uniform(15,8) for i in x] # 建画布 plt.figure(figsize=(20,8),dpi=80) # 绘折线图 plt.plot(x,y_shanghai) # 修改x,y轴刻度 x_ticks_label=["11点{}分".format(i) for i in x] y_ticks=range(40) # 修改x,y间隔 plt.xticks(x[::5]) plt.yticks(y_ticks[::5]) # 显示图像 plt.show() ## 解决中文问题 x=range(60) y_shanghai=[random.uniform(15,8) for i in x] # 建画布 plt.figure(figsize=(20,8),dpi=80) # 绘折线图 plt.plot(x,y_shanghai) # 修改x,y轴刻度 x_ticks_label=["11点{}分".format(i) for i in x] y_ticks=range(40) # 修改x,y间隔 plt.xticks(x[::5],x_ticks_label[::5]) plt.yticks(y_ticks[::5]) # 显示图像 plt.show() ## 添加网格信息 x=range(60) y_shanghai=[random.uniform(15,8) for i in x] # 建画布 plt.figure(figsize=(20,8),dpi=80) # 绘折线图 plt.plot(x,y_shanghai) # 修改x,y轴刻度 x_ticks_label=["11点{}分".format(i) for i in x] y_ticks=range(40) # 修改x,y间隔 plt.xticks(x[::5],x_ticks_label[::5]) plt.yticks(y_ticks[::5]) #添加网格信息 plt.grid(True,line,alpha=1) # 显示图像 plt.show() ## 添加x、y轴还有标题描述信息 x=range(60) y_shanghai=[random.uniform(15,8) for i in x] # 建画布 plt.figure(figsize=(20,8),dpi=80) # 绘折线图 plt.plot(x,y_shanghai) # 修改x,y轴刻度 x_ticks_label=["11点{}分".format(i) for i in x] y_ticks=range(40) # 修改x,y间隔 plt.xticks(x[::5],x_ticks_label[::5]) plt.yticks(y_ticks[::5]) #添加网格信息 plt.grid(True,line,alpha=1) # 2.3 添加描述信息 plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点-12点某城市温度变化图", fontsize=20) # 显示图像 plt.show() ## 图像保存 x=range(60) y_shanghai=[random.uniform(15,8) for i in x] # 建画布 plt.figure(figsize=(20,8),dpi=80) # 绘折线图 plt.plot(x,y_shanghai) # 修改x,y轴刻度 x_ticks_label=["11点{}分".format(i) for i in x] y_ticks=range(40) # 修改x,y间隔 plt.xticks(x[::5],x_ticks_label[::5]) plt.yticks(y_ticks[::5]) #添加网格信息 plt.grid(True,line,alpha=1) # 2.3 添加描述信息 plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点-12点某城市温度变化图", fontsize=20) # 2.4 图像保存 plt.savefig("./test.png") # 显示图像 plt.show() ## 在一个坐标系中绘制多个图像 x=range(60) y_shanghai=[random.uniform(15,8) for i in x] y_beijing=[random.uniform(1,3) for i in x] # 建画布 plt.figure(figsize=(20,8),dpi=80) # 绘折线图 plt.plot(x, y_shanghai, label="上海") plt.plot(x, y_beijing, color="r", line, label="北京") # 修改x,y轴刻度 x_ticks_label=["11点{}分".format(i) for i in x] y_ticks=range(40) # 修改x,y间隔 plt.xticks(x[::5],x_ticks_label[::5]) plt.yticks(y_ticks[::5]) #添加网格信息 plt.grid(True,line,alpha=1) # 2.3 添加描述信息 plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点-12点某城市温度变化图", fontsize=20) # 2.4 图像保存 plt.savefig("./test.png") # 2.5 显示图例 plt.legend(loc=0) # 显示图像 plt.show() ## 只建画布+绘制图像 x=range(60) y_shanghai=[random.uniform(15,8) for i in x] y_beijing=[random.uniform(1,3) for i in x] # 1.创建画布 # plt.figure(figsize=(20, 8), dpi=100) fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100) # 2.绘制图像 # plt.plot(x, y_shanghai, label="上海") # plt.plot(x, y_beijing, color="r", line, label="北京") axes[0].plot(x, y_shanghai, label="上海") axes[1].plot(x, y_beijing, color="r", line, label="北京") # 修改x,y轴刻度 x_ticks_label=["11点{}分".format(i) for i in x] y_ticks=range(40) # 修改x,y间隔 plt.xticks(x[::5],x_ticks_label[::5]) plt.yticks(y_ticks[::5]) #添加网格信息 plt.grid(True,line,alpha=1) # 2.3 添加描述信息 plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点-12点某城市温度变化图", fontsize=20) # 2.4 图像保存 plt.savefig("./test.png") # 2.5 显示图例 plt.legend(loc=0) # 显示图像 plt.show() ## 完善 # 0.准备数据 x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] y_beijing = [random.uniform(1, 3) for i in x] # 1.创建画布 # plt.figure(figsize=(20, 8), dpi=100) fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100) # 2.绘制图像 # plt.plot(x, y_shanghai, label="上海") # plt.plot(x, y_beijing, color="r", line, label="北京") axes[0].plot(x, y_shanghai, label="上海") axes[1].plot(x, y_beijing, color="r", line, label="北京") # 2.1 添加x,y轴刻度 # 设置x,y轴刻度 x_ticks_label = ["11点{}分".format(i) for i in x] y_ticks = range(40) # 修改x,y轴坐标刻度显示 # plt.xticks(x_ticks_label[::5]) # 坐标刻度不可以直接通过字符串进行修改 # plt.xticks(x[::5], x_ticks_label[::5]) # plt.yticks(y_ticks[::5]) axes[1].set_xticks(x[::5]) axes[1].set_yticks(y_ticks[::5]) axes[1].set_xticklabels(x_ticks_label[::5]) # 2.2 添加网格显示 # plt.grid(True, line, alpha=1) axes[0].grid(True, line, alpha=1) axes[1].grid(True, line, alpha=1) # 2.3 添加描述信息 # plt.xlabel("时间") # plt.ylabel("温度") # plt.title("中午11点-12点某城市温度变化图", fontsize=20) axes[0].set_xlabel("时间") axes[0].set_ylabel("温度") axes[0].set_title("中午11点-12点某城市温度变化图", fontsize=20) axes[1].set_xlabel("时间") axes[1].set_ylabel("温度") axes[1].set_title("中午11点-12点某城市温度变化图", fontsize=20) # 2.4 图像保存 plt.savefig("./test.png") # 2.5 显示图例 # plt.legend(loc=0) axes[0].legend(loc=0) axes[1].legend(loc=0) # 3.图像显示 plt.show() ## 波形图应用举例 import numpy as np # 0.准备数据 x = np.linspace(-10, 10, 1000) y = np.sin(x) # 1.创建画布 plt.figure(figsize=(20, 8), dpi=100) # 2.绘制函数图像 plt.plot(x, y) # 2.1 添加网格显示 plt.grid() # 3.显示图像 plt.show() ## 利用seaborn画图 import seaborn as sns import numpy as np import pandas as pd np.random.seed(0) #确定随机数生成数据一样 arr=np.random.randn(100) sns.distplot(arr,bins=10,hist=True,kde=True,rug=True) # 绘制双变量分布 ## 绘制散点图 df=pd.DataFrame({"x":np.random.randn(500),"y":np.random.randn(500),"z":np.random.randn(500),"k":np.random.randn(500)}) sns.jointplot("x","y",data=df,kind='scatter',color="red",size=5,ratio=5,space=1,dropna=True) sns.jointplot("x","y",data=df,kind='kde',color="red",size=5,ratio=5,space=1,dropna=True) sns.jointplot("x","y",data=df,kind='hex',color="blue",size=5,ratio=5,space=1,dropna=True) ## 绘制成对双变量分布 sns.pairplot(df) ## 绘制类别散点图 ddf=pd.DataFrame({"x":np.random.randn(5),"y":np.random.randn(5),"z":np.random.randn(5),"k":np.random.randn(5),"week":["one","two","three","four","five"]}) ddf sns.swarmplot(x="week",y="x",data=ddf,hue="y")
2. 请画出如图2.png所示的图形
## 请画出如图2.png所示的图形 import turtle as t t.Turtle().screen.delay(0) #加速 s=0 t.pen t.seth(0) length=0 while (length !=400): #当边长达到400时循环结束 t.penup() #提起画笔 t.goto(s,s) #新的起点坐标 t.pendown() #放下画笔 for i in range(4): t.fd(length) #边长 t.left(90) #画笔方向向左旋转90度 length += 10 #边长加10 s -= 5 #改变画笔起点 t.hideturtle() #绘图结束后把笔头隐藏起来 t.done() #绘图结束后使窗口停留 ## 画圆柱 import turtle as t import numpy as np t.Turtle().screen.delay(0) #加速 s=0 t.pen t.seth(0) length=0 while (length !=400): #当边长达到400时循环结束 t.penup() #提起画笔 t.goto(s,s) #新的起点坐标 t.pendown() #放下画笔 for i in range(90): t.fd(length) #边长 t.left(4) #画笔方向向左旋转90度 length =2*np.pi #边长加10 s -= 5 #改变画笔起点 t.hideturtle(True) #绘图结束后把笔头隐藏起来 t.done() #绘图结束后使窗口停留 ## 画圆 import turtle as t import numpy as np #t.Turtle().screen.delay(0) #加速 s=0 t.pen t.seth(0) length=0 r=1 t.penup() #提起画笔 t.goto(s,s) #新的起点坐标 t.pendown() #放下画笔 for i in range(360): t.fd(length) #边长 t.left(4) #画笔方向向左旋转90度 length =2*np.pi*r #边长加10 t.hideturtle(True) #绘图结束后把笔头隐藏起来 t.done() #绘图结束后使窗口停留
3. 通过编码获得fcity.jpg的手绘图像(如beijing.jpg所示)
## 通过编码获得fcity.jpg的手绘图像(如beijing.jpg所示) from PIL import Image import numpy as np a = np.asarray(Image.open('C:/Users/86151/mycode/fcity.jpg').convert('L')).astype('float') depth = 10. # (0-100) grad = np.gradient(a)#取图像灰度的梯度值 grad_x, grad_y = grad #分别取横纵图像梯度值 grad_x = grad_x*depth/100. grad_y = grad_y*depth/100. #深度调整x、y的梯度值 A = np.sqrt(grad_x**2 + grad_y**2 + 1.) #梯度归一化 uni_x = grad_x/A uni_y = grad_y/A uni_z = 1./A vec_el = np.pi/2.2 # 光源的俯视角度,弧度值 vec_az = np.pi/4. # 光源的方位角度,弧度值 dx = np.cos(vec_el)*np.cos(vec_az) #光源对x 轴的影响 dy = np.cos(vec_el)*np.sin(vec_az) #光源对y 轴的影响 dz = np.sin(vec_el) #光源对z 轴的影响 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源归一化,梯度转化为灰度 b = b.clip(0,255) #避免数据越界 im = Image.fromarray(b.astype('uint8')) #重构图像 im ## 修改光源1 from PIL import Image import numpy as np a = np.asarray(Image.open('C:/Users/86151/mycode/fcity.jpg').convert('L')).astype('float') depth = 10. # (0-100) grad = np.gradient(a)#取图像灰度的梯度值 grad_x, grad_y = grad #分别取横纵图像梯度值 grad_x = grad_x*depth/100. grad_y = grad_y*depth/100. #深度调整x、y的梯度值 A = np.sqrt(grad_x**2 + grad_y**2 ) #梯度归一化 uni_x = grad_x/A uni_y = grad_y/A uni_z = 1./A vec_el = np.pi/2.2 # 光源的俯视角度,弧度值 vec_az = np.pi/4. # 光源的方位角度,弧度值 dx = np.cos(vec_el)*np.cos(vec_az) #光源对x 轴的影响 dy = np.cos(vec_el)*np.sin(vec_az) #光源对y 轴的影响 dz = np.sin(vec_el) #光源对z 轴的影响 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源归一化,梯度转化为灰度 b = b.clip(0,255) #避免数据越界 im = Image.fromarray(b.astype('uint8')) #重构图像 im ## 图像的数组表示 from PIL import Image #图像处理的库 import numpy as np im = np.array(Image.open('C:/Users/86151/mycode/fcity.jpg')) print(im.shape,im.dtype) ## 修改光源2 from PIL import Image #图像处理的库 import numpy as np a1 = np.array(Image.open('C:/Users/86151/mycode/fcity.jpg')) print(a1.shape,a1.dtype) b1=[255,255,255]-a1 im1 = Image.fromarray(b1.astype('uint8')) #重构图像 im1 ## 修改光源3 from PIL import Image #图像处理的库 import numpy as np a = np.array(Image.open('C:/Users/86151/mycode/fcity.jpg').convert('L')) b=255-a im2 = Image.fromarray(b.astype('uint8')) #重构图像 im2 ## 修改光源4 from PIL import Image #图像处理的库 import numpy as np a = np.array(Image.open('C:/Users/86151/mycode/fcity.jpg').convert('L')) b=(100/255)*a+150 #区间变换 im3 = Image.fromarray(b.astype('uint8')) #重构图像 im3 ## 修改光源5 from PIL import Image #图像处理的库 import numpy as np a = np.array(Image.open('C:/Users/86151/mycode/fcity.jpg').convert('L')) b=(255)*(a/255)**2 #像素平方 im3 = Image.fromarray(b.astype('uint8')) #重构图像 im3 ## 修改光源6 from PIL import Image #图像处理的库 import numpy as np a = np.array(Image.open('C:/Users/86151/mycode/fcity.jpg').convert('L')) b=(255)*(a/255)**2 #像素平方 b = b.clip(0,255) im3 = Image.fromarray(b.astype('uint8')) #重构图像 im3
🌍研究结果
1.问题一
2.问题
3.问题三
🌍研究体会
-
图像RGB色彩模式与数组表示与图像变换: 通过实验,初次了解如何利用Python使用图像的RGB色彩模式,并实现图像的数组表示与变换。在此过程中,熟悉了Python的Seaborn和Matplotlib库,使画图过程更加高效。
-
Matplotlib画图中的问题和解决方法: 实验1记录了一些问题,例如在使用Matplotlib画图时,为了实现中文显示,需要添加语句mpl.rcParams["font.sans-serif"] = ["SimHei"],并且搭配设置正常显示符号mpl.rcParams["axes.unicode_minus"] = False,以达到更好的效果。
-
绘制圆柱和圆的代码添加以及加速效果的思考: 在实验2中,自行添加了画圆柱和画圆的代码。发现使用t.Turtle().screen.delay(0)虽然可以加速,但经常导致内核终止现象,因此对于加速效果的使用需要权衡利弊。
📝总结
Python领域就像一片未被勘探的信息大海,引领你勇敢踏入Python数据科学的神秘领域。这是一场独特的学习冒险,从基本概念到算法实现,逐步揭示更深层次的模式分析、匹配算法和智能模式识别的奥秘。
渴望挑战Python信息领域的技术?不妨点击下方链接,一同探讨更多Python数据科学的奇迹吧。我们推出了引领趋势的💻 Python数据科学专栏:《Python | 编程解码》,旨在深度探索Python模式匹配技术的实际应用和创新。🌐🔍
-