Python学习打卡:day11

06-20 1455阅读

day11

笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了

目录

  • day11
    • 83、自定义 Python 包
      • 创建包
      • 导入包
        • 方式1
        • 方式2
        • 方式3
        • 方式4
        • 84、安装第三方包
          • 安装第三方包——pip
            • pip的网络优化
            • 安装第三方包——PyCharm
            • 85、异常—模块—包综合案例
              • 模块1
                • 自写
                • 视频写法
                • 模块2
                  • 自写
                  • 视频写法
                  • 总结
                  • 86、JSON数据格式的转换
                    • 基础概念
                    • json 数据的格式:字典以及 内部元素都是字典的列表
                    • Python 数据和 Json 数据的相互转化
                    • 87、pyecharts 模块简介
                    • 88、pyecharts的入门使用
                      • 基础折线图
                      • pyecharts配置选项
                      • 89、数据准备
                        • 原始数据格式
                        • 数据处理
                        • 90、生成折线图
                          • 导入模块
                          • 折线图相关配置项
                            • 折线图相关配置项
                            • 创建折线图
                            • 添加数据
                            • .add_yaxis相关配置选项
                            • 全局配置选项(.set_global_opts)
                            • 91、数据可视化案例——地图——基础地图的使用
                              • 基础地图演示

                                83、自定义 Python 包

                                如果Python的模块太多了,就可能造成一定的混乱,那么就需要通过Python包的功能来管理。

                                从物理上看,包就是一个文件夹,在该文件夹下包含了一个 __init__.py 文件,该文件夹可用于包含多个模块文件;

                                从逻辑上看,包的本质依然是模块。

                                创建包

                                构建包的步骤如下:

                                1. 新建包my_package;

                                  Python学习打卡:day11

                                2. 新建包内模块:my_module1 和 my_module2;

                                3. 模块内代码如下:

                                  Python学习打卡:day11

                                Python学习打卡:day11

                                Python学习打卡:day11

                                tips:新建包后,包内部会自动创建 __init__.py 文件,这个文件控制着包的导入行为。

                                导入包

                                方式1
                                import 包名.模块名
                                包名.模块名.目标
                                

                                示例代码:

                                import my_package_83.my_module1_83
                                import my_package_83.my_module2_83
                                my_package_83.my_module1_83.info_print1()
                                my_package_83.my_module2_83.info_print2()
                                
                                方式2
                                from 包名 import 模块名
                                模块名.目标
                                

                                示例代码:

                                from my_package_83 import my_module1_83
                                from my_package_83 import my_module2_83
                                my_module1_83.info_print1()
                                my_module2_83.info_print2()
                                
                                方式3
                                from 包名.模块名 import 目标
                                目标
                                

                                示例代码:

                                from my_package_83.my_module1_83 import info_print1
                                from my_package_83.my_module2_83 import info_print2
                                info_print1()
                                info_print2()
                                
                                方式4
                                from 包名 import *
                                模块名.目标
                                

                                示例代码:

                                # 通过 __all__ 变量,控制 import*
                                from my_package_83 import *
                                my_module1_83.info_print1()
                                # error,__init__.py 文件中设置了 __all__ 只导入:my_module1_83,因此 my_module2_83 不管用
                                # my_module2_83.info_print2()
                                

                                tips:必须在__init__.py文件中添加__all__ = [],控制允许导入的模块列表

                                84、安装第三方包

                                在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:

                                • 科学计算中常用的:numpy包
                                • 数据分析中常用的:pandas包
                                • 大数据计算中常用的:pyspark、apache-flink包
                                • 图形可视化常用的:matplotlib、pyecharts
                                • 人工智能常用的:tensorflow
                                • 但是由于是第三方,所以Python没有内置,所以我们需要安装它们才可以导入使用。

                                  安装第三方包——pip

                                  第三方包的安装非常简单,我们只需要使用Python内置的pip程序即可。

                                  打开我们许久未见的:命令提示符程序,在里面输入:

                                  pip install 包名称
                                  

                                  即可通过网络快速安装第三方包。

                                  pip的网络优化

                                  由于pip是连接的国外的网站进行包的下载,所以有的时候会速度很慢。

                                  我们可以通过如下命令,让其连接国内的网站进行包的安装:

                                  pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
                                  

                                  安装第三方包——PyCharm

                                  Python学习打卡:day11

                                  Python学习打卡:day11

                                  同样使用国内清华镜像源进行下载:

                                  Python学习打卡:day11

                                  85、异常—模块—包综合案例

                                  Python学习打卡:day11

                                  模块1

                                  自写
                                  # 自写
                                  def str_reverse(s):
                                      str = ""
                                      for element in s:
                                          str = element + str
                                      return str
                                  def substr(s, x, y):
                                      str1 = ""
                                      str2 = ""
                                      str3 = ""
                                      list = []
                                      i = 0
                                      if x > y:
                                          tmp = x
                                          x = y
                                          y = tmp
                                      while i  
                                  
                                  视频写法
                                  # 视频写法
                                  def str_reverse(s):
                                      """
                                      功能:反转字符串
                                      :param s: 将被反转的字符串
                                      :return: 反转后的字符串
                                      """
                                      return s[::-1]
                                  def substr(s, x, y):
                                      """
                                      功能:按照给定的下标完成字符串的切片
                                      :param s: 即将被切片的字符串
                                      :param x: 切片的开始下标
                                      :param y: 切片的结束下标
                                      :return: 切片完成后的字符串
                                      """
                                      return s[x:y]
                                  if __name__ == '__main__':
                                      print(str_reverse("黑马程序员"))
                                      print(substr("黑马程序员", 1, 3))
                                  

                                  模块2

                                  自写
                                  def print_file_info(file_name):
                                      try:
                                          f = open(file_name, "r", encoding="UTF-8")
                                          print(f"文件存在,读取的内容为:\n{f.read()}")
                                      except:
                                          print("文件不存在")
                                      finally:
                                          f.close()
                                  def append_to_file(filename, data):
                                      f = open(filename, "a", encoding="UTF-8")
                                      f.write(data)
                                      f.close()
                                  if __name__ == '__main__':
                                      # print_file_info("/home/yin-roc/1-Github/Ubuntu20.04-VMware/pythonProject/Python_Learning/02_Python入门语法/74_test.txt")
                                      append_to_file("84_test.txt", "helloworld")
                                  
                                  视频写法
                                  def print_file_info(file_name):
                                      """
                                      功能: 将指定路径的文件内容输出到控制台
                                      :param file_name: 即将读取文件的路径
                                      :return: None
                                      """
                                      f = None
                                      try:
                                          f = open(file_name, "r", encoding="UTF-8")
                                          content = f.read()
                                          print("文件内容如下:")
                                          print(content)
                                      except Exception as e:
                                          print(f"程序出现异常,原因是:{e}")
                                      finally:
                                          if f:
                                              f.close()
                                  def append_to_file(filename, data):
                                      """
                                      功能:将指定的数据追加到指定的文件中
                                      :param filename: 指定文件的路径
                                      :param data: 指定的数据
                                      :return: None
                                      """
                                      f = open(filename, "a", encoding="UTF-8")
                                      f.write(data)
                                      f.write("\n")
                                      f.close()
                                  if __name__ == '__main__':
                                      # print_file_info("84_test.txt")
                                      append_to_file("84_test.txt", "good")
                                  
                                  总结
                                  1. 函数写法的规范要记得,包括函数功能的描述、参数的解释

                                  2. 字符串的切片操作除了 split,还有:

                                    my_str = "01234567"
                                    result4 = my_str[::-1]  
                                    

                                  86、JSON数据格式的转换

                                  基础概念

                                  JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据。

                                  JSON本质上是一个带有特定格式的字符串

                                  主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。

                                  各种编程语言存储数据的容器不尽相同,在Python中有字典dict这样的数据类型,而其它语言可能没有对应的字典。

                                  为了让不同的语言都能够相互通用的互相传递数据,JSON就是一种非常良好的中转数据格式。如下图,以Python和C语言互传数据为例:

                                  Python学习打卡:day11

                                  json 数据的格式:字典以及 内部元素都是字典的列表

                                  # json数据的格式可以是: 
                                  {"name":"admin","age":18} 
                                  # 也可以是:  
                                  [{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20}] 
                                  

                                  Python 数据和 Json 数据的相互转化

                                  # 导入json模块 
                                  import json 
                                  # 准备符合格式json格式要求的python数据 
                                  data = [{"name": "老王", "age": 16}, {"name": "张三", "age": 20}]
                                   
                                  # 通过 json.dumps(data) 方法把python数据转化为了 json数据 
                                  data = json.dumps(data) 
                                  # 通过 json.loads(data) 方法把json数据转化为了 python数据 
                                  data = json.loads(data)
                                  

                                  示例代码:

                                  """
                                  演示 JSON 数据和 Python 字典的相互转换
                                  """
                                  import json
                                  # 准备列表,列表内的每一个元素都是字典,将其转化为 JSON
                                  data = [{"name":"张大山", "age":11}, {"name":"王大锤", "age":13}, {"name":"赵小虎", "age":16}]
                                  json_str = json.dumps(data, ensure_ascii=False)
                                  print(type(json_str))
                                  print(json_str)
                                  print("--------------------------------------------------------------")
                                  # 准备字典,将字典转换为 JSON
                                  d = {"name":"zhoujielun", "addr":"taibei"}
                                  json_str = json.dumps(d)
                                  print(type(json_str))
                                  print(json_str)
                                  print("--------------------------------------------------------------")
                                  # 将 JSON 字符串转换为 Python 数据类型 [{k:v, k:v}, {k:v, k:v}]
                                  s = '[{"name": "张大山", "age": 11}, {"name": "王大锤", "age": 13}, {"name": "赵小虎", "age": 16}]'
                                  l = json.loads(s)
                                  print(type(l))
                                  print(l)
                                  print("--------------------------------------------------------------")
                                  # 将 JSON 字符串转换为 Python 数据类型 {k:v, k:v}
                                  s = '{"name": "zhoujielun", "addr": "taibei"}'
                                  d = json.loads(s)
                                  print(type(d))
                                  print(d)
                                  # 结果
                                  
                                  [{"name": "张大山", "age": 11}, {"name": "王大锤", "age": 13}, {"name": "赵小虎", "age": 16}]
                                  -----------------------------------------------------------------------
                                  
                                  {"name": "zhoujielun", "addr": "taibei"}
                                  -----------------------------------------------------------------------
                                  
                                  [{'name': '张大山', 'age': 11}, {'name': '王大锤', 'age': 13}, {'name': '赵小虎', 'age': 16}]
                                  -----------------------------------------------------------------------
                                  
                                  {'name': 'zhoujielun', 'addr': 'taibei'}
                                  

                                  87、pyecharts 模块简介

                                  如果想要做出数据可视化效果图, 可以借助pyecharts模块来完成

                                  概况 :

                                  Echarts 是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时pyecharts 诞生了。

                                  快速安装

                                  pip install pyecharts
                                  

                                  官方画廊

                                  https://gallery.pyecharts.org

                                  88、pyecharts的入门使用

                                  基础折线图

                                  # 导包
                                  from pyecharts.charts import Line
                                  from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts,VisualMapOpts
                                  # 创建一个折线图对象
                                  line = Line()
                                  # 给折线图对象添加 x 轴的数据
                                  line.add_xaxis(["中国", "美国", "英国"])
                                  # 给折线图对象添加 y 轴的数据
                                  line.add_yaxis("GDP", [30, 20, 10])
                                  # 通过 render 方法,将代码生成图像
                                  line.render()
                                  

                                  结果如下:

                                  Python学习打卡:day11

                                  pyecharts配置选项

                                  pyecharts模块中有很多的配置选项, 常用到2个类别的选项:

                                  • 全局配置选项
                                  • 系列配置选项

                                    全局配置选项可以通过set_global_opts方法来进行配置, 相应的选项和选项的功能如下:

                                    Python学习打卡:day11

                                    示例:

                                    """
                                    演示 pyecharts 的基础入门
                                    """
                                    # 导包
                                    from pyecharts.charts import Line
                                    from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts,VisualMapOpts
                                    # 创建一个折线图对象
                                    line = Line()
                                    # 给折线图对象添加 x 轴的数据
                                    line.add_xaxis(["中国", "美国", "英国"])
                                    # 给折线图对象添加 y 轴的数据
                                    line.add_yaxis("GDP", [30, 20, 10])
                                    # 设置全局配置项
                                    line.set_global_opts(
                                        title_opts=TitleOpts(, pos_left="center", pos_bottom="1%"),
                                        legend_opts=LegendOpts(is_show=True),
                                        toolbox_opts=ToolboxOpts(is_show=True),
                                        visualmap_opts=VisualMapOpts(is_show=True)
                                    )
                                    # 通过 render 方法,将代码生成图像
                                    line.render()
                                    

                                    结果:

                                    Python学习打卡:day11

                                    89、数据准备

                                    原始数据格式

                                    Python学习打卡:day11

                                    数据处理

                                    导入模块:

                                    import json
                                    

                                    对数据进行整理,让数据符合 json 格式:

                                    # 处理数据
                                    f_us = open("/home/yin-roc/1-Github/Ubuntu20.04-VMware/pythonProject/Python_Learning/02_Python入门语法/可视化案例数据/折线图数据/美国.txt", "r", encoding="UTF-8")
                                    us_data = f_us.read()   # 美国的全部内容
                                    # 去掉不合 JSON 规范的开头
                                    us_data = us_data.replace("jsonp_1629344292311_69436(", "")
                                    # 去掉不合 JSON 规范的结尾
                                    # us_data = us_data.replace(");", "")
                                    us_data = us_data[:-2]
                                    # JSON 转 Python 字典
                                    us_dict = json.loads(us_data)
                                    # print(type(us_dict))
                                    # print(us_dict)
                                    # 获取 trend key
                                    trend_data = us_dict['data'][0]['trend']
                                    # print(type(trend_data))
                                    # print(trend_data)
                                    # 获取日期数据,用于 x 轴,取2020年(到314下标结束)
                                    x_data = trend_data['updateDate'][:314]
                                    # print(x_data)
                                    # 获取确认数据,用于 y 轴,取2020年(到315下标结束)
                                    y_data = trend_data['list'][0]['data'][:314]
                                    # print(y_data)
                                    

                                    90、生成折线图

                                    导入模块

                                    from pyecharts.charts import Line
                                    from pyecharts.options import TitleOpts, LabelOpts
                                    

                                    折线图相关配置项

                                    折线图相关配置项
                                    配置项作用代码实例
                                    init_opts对折线图初始化设置宽高init_opts=opts.InitOpts(width=“1600px”, height=“800px”)
                                    .add_xaxis添加x轴数据.add_xaxis(列表)
                                    .add_yaxis添加y轴数据.add_yaxis(纵坐标标题, 列表)
                                    创建折线图

                                    Python学习打卡:day11

                                    这里的**Line()**是构建类对象,我们先不必理解是什么意思,后续在Python高阶中进行详细讲解。

                                    添加数据

                                    Python学习打卡:day11

                                    .add_yaxis相关配置选项
                                    配置项作用代码实例
                                    series_name设置图例名称series_name=“美国确诊人数”
                                    y_axis输入y轴数据y_axis=[“列表”]
                                    symbol_size设置点的大小symbol_size=10
                                    label_opts标签设置项:不显示标签label_opts=opts.LabelOpts(is_show=False)
                                    linestyle_opts线条宽度和样式linestyle_opts=opts.LineStyleOpts(width=2)

                                    示例:

                                    Python学习打卡:day11

                                    效果如下:

                                    Python学习打卡:day11

                                    全局配置选项(.set_global_opts)
                                    配置项作用代码实例
                                    title_opts设置图标题和位置title_opts=opts.TitleOpts(title=“标题”, pos_left=“center”)
                                    yaxis_optsy轴配置项yaxis_opts=opts.AxisOpts(name=“累计确诊人数”)
                                    xaxis_optsx轴配置项xaxis_opts=opts.AxisOpts(name=“时间”)
                                    legend_opts图例配置项legend_opts=opts.LegendOpts(pos_left=‘70%’)

                                    示例代码:

                                    .set_global_opts(
                                    	# 设置图标题和位置 
                                    	title_opts=opts.TitleOpts(,pos_left="center"), 
                                    	# x轴配置项 
                                    	xaxis_opts=opts.AxisOpts(name=“时间”),    # 轴标题 
                                    	# y轴配置项 
                                    	yaxis_opts=opts.AxisOpts(name=“累计确诊人数”),    # 轴标题 
                                    	# 图例配置项 
                                    	legend_opts=opts.LegendOpts(pos_left=‘70%‘),    # 图例的位置 
                                    )
                                    

                                    效果如下:

                                    Python学习打卡:day11

                                    示例代码:

                                    """
                                    演示 可视化需求1:折线图开发
                                    """
                                    import json
                                    from pyecharts.charts import Line
                                    from pyecharts.options import TitleOpts, LabelOpts
                                    # 处理数据
                                    f_us = open("/home/yin-roc/1-Github/Ubuntu20.04-VMware/pythonProject/Python_Learning/02_Python入门语法/可视化案例数据/折线图数据/美国.txt", "r", encoding="UTF-8")
                                    us_data = f_us.read()   # 美国的全部内容
                                    f_jp = open("/home/yin-roc/1-Github/Ubuntu20.04-VMware/pythonProject/Python_Learning/02_Python入门语法/可视化案例数据/折线图数据/日本.txt", "r", encoding="UTF-8")
                                    jp_data = f_jp.read()   # 日本的全部内容
                                    f_in = open("/home/yin-roc/1-Github/Ubuntu20.04-VMware/pythonProject/Python_Learning/02_Python入门语法/可视化案例数据/折线图数据/印度.txt", "r", encoding="UTF-8")
                                    in_data = f_in.read()   # 日本的全部内容
                                    # 去掉不合 JSON 规范的开头
                                    us_data = us_data.replace("jsonp_1629344292311_69436(", "")
                                    jp_data = jp_data.replace("jsonp_1629350871167_29498(", "")
                                    in_data = in_data.replace("jsonp_1629350745930_63180(", "")
                                    # 去掉不合 JSON 规范的结尾
                                    # us_data = us_data.replace(");", "")
                                    us_data = us_data[:-2]
                                    jp_data = jp_data[:-2]
                                    in_data = in_data[:-2]
                                    # JSON 转 Python 字典
                                    us_dict = json.loads(us_data)
                                    jp_dict = json.loads(jp_data)
                                    in_dict = json.loads(in_data)
                                    # print(type(us_dict))
                                    # print(us_dict)
                                    # 获取 trend key
                                    us_trend_data = us_dict['data'][0]['trend']
                                    jp_trend_data = jp_dict['data'][0]['trend']
                                    in_trend_data = in_dict['data'][0]['trend']
                                    # print(type(trend_data))
                                    # print(trend_data)
                                    # 获取日期数据,用于 x 轴,取2020年(到314下标结束)
                                    us_x_data = us_trend_data['updateDate'][:314]
                                    jp_x_data = jp_trend_data['updateDate'][:314]
                                    in_x_data = in_trend_data['updateDate'][:314]
                                    # print(x_data)
                                    # 获取确认数据,用于 y 轴,取2020年(到315下标结束)
                                    us_y_data = us_trend_data['list'][0]['data'][:314]
                                    jp_y_data = jp_trend_data['list'][0]['data'][:314]
                                    in_y_data = in_trend_data['list'][0]['data'][:314]
                                    # print(y_data)
                                    # 生成图表
                                    line = Line()   # 构建折线图对象
                                    # 添加 x 轴数据
                                    line.add_xaxis(us_x_data)   # x 轴是公用的,所以使用一个国家的数据即可
                                    # 添加 y 轴数据
                                    line.add_yaxis("美国确诊人数", us_y_data, label_opts=LabelOpts(is_show=False))
                                    line.add_yaxis("日本确诊人数", jp_y_data, label_opts=LabelOpts(is_show=False))
                                    line.add_yaxis("印度确诊人数", in_y_data, label_opts=LabelOpts(is_show=False))
                                    # 设置全局选项
                                    line.set_global_opts(
                                        # 标题设置
                                        title_opts=TitleOpts(, pos_left="center", pos_bottom="1%")
                                    )
                                    # 调用 render 方法生成图表
                                    line.render()
                                    # 关闭文件对象
                                    f_us.close()
                                    f_jp.close()
                                    f_in.close()
                                    

                                    91、数据可视化案例——地图——基础地图的使用

                                    基础地图演示

                                    Python学习打卡:day11

                                    Python学习打卡:day11

                                    设置颜色级别:

                                    Python学习打卡:day11

                                    Python学习打卡:day11

                                    tips:RGB颜色查询对照表

                                    Python学习打卡:day11

VPS购买请点击我

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

目录[+]