【Python】编程练习的解密与实战(四)

02-26 1097阅读

【Python】编程练习的解密与实战(四)

⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。

【Python】编程练习的解密与实战(四)

【Python】编程练习的解密与实战(四)

目录

🪐1. 初识Python

🪐2. 研究报告四

🌍研究目的

🌍研究要求

🌍研究代码

🌍研究结果

🌍研究体会

📝总结


🪐1. 初识Python

Python是一种高级、通用、解释型的编程语言,具有简洁而清晰的语法,被广泛应用于软件开发、数据科学、人工智能等领域。以下是Python技术的一些主要特点和应用领域:

  1. 易学易用: Python的语法设计简单,容易学习和理解。这使得它成为初学者和专业开发人员的首选语言之一。

  2. 开源: Python是开源的,任何人都可以查看、修改和分发其源代码。这为开发者提供了自由和灵活性。

  3. 跨平台: Python可在多个操作系统上运行,包括Windows、Linux和macOS,使其成为跨平台开发的理想选择。

  4. 强大的社区支持: Python拥有庞大的全球开发者社区,用户可以获得丰富的文档、库和工具,方便解决各类问题。

  5. 广泛应用领域: Python在多个领域都有应用,包括Web开发、数据科学、机器学习、人工智能、自动化测试、网络编程等。

  6. 丰富的第三方库: Python拥有丰富的第三方库和框架,如NumPy、Pandas、Django、Flask等,提供了强大的工具来简化开发流程。

  7. 动态类型: Python是一种动态类型语言,允许开发者更加灵活地进行变量和对象的操作。

  8. 面向对象编程: 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.问题一

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      2.问题

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      3.问题三

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)


      🌍研究​​​​​​​体会

      1. 图像RGB色彩模式与数组表示与图像变换: 通过实验,初次了解如何利用Python使用图像的RGB色彩模式,并实现图像的数组表示与变换。在此过程中,熟悉了Python的Seaborn和Matplotlib库,使画图过程更加高效。

      2. Matplotlib画图中的问题和解决方法: 实验1记录了一些问题,例如在使用Matplotlib画图时,为了实现中文显示,需要添加语句mpl.rcParams["font.sans-serif"] = ["SimHei"],并且搭配设置正常显示符号mpl.rcParams["axes.unicode_minus"] = False,以达到更好的效果。

      3. 绘制圆柱和圆的代码添加以及加速效果的思考: 在实验2中,自行添加了画圆柱和画圆的代码。发现使用t.Turtle().screen.delay(0)虽然可以加速,但经常导致内核终止现象,因此对于加速效果的使用需要权衡利弊。


      📝总结

      Python领域就像一片未被勘探的信息大海,引领你勇敢踏入Python数据科学的神秘领域。这是一场独特的学习冒险,从基本概念到算法实现,逐步揭示更深层次的模式分析、匹配算法和智能模式识别的奥秘。

      渴望挑战Python信息领域的技术?不妨点击下方链接,一同探讨更多Python数据科学的奇迹吧。我们推出了引领趋势的💻 Python数据科学专栏:《Python | 编程解码》,旨在深度探索Python模式匹配技术的实际应用和创新。🌐🔍

      【Python】编程练习的解密与实战(四)

      【Python】编程练习的解密与实战(四)

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]