python_从pyecharts数据准备到封装

数据准备&创建图表
  1. 获得json数据

  1. 观察json数据,处理:

  1. f open打开文件

  1. read全部数据

  1. 首尾是否要[]切片

  1. json.loads将json转python字典

  1. 切片获取合适层级的key

  1. 设定x轴

  1. 设定y轴

  1. render 生成图表,调整效果

地图-基本地图使用

示例:

 from pyecharts.charts import Map
 from pyecharts.options import VisualMapOpts
 map = Map()
 # 准备数据
 data = [
     ("北京市", 9),
     ("上海市", 19),
     ("湖南省", 299),
     ("台湾省", 3999),
     ("广东省", 49999),
 ]
 # 添加数据
 map.add("test map", data, "china")
 # 设置全局选项
 map.set_global_opts(
     visualmap_opts=VisualMapOpts(
         is_show=True,  # 打开地图视觉指示器
         is_piecewise=True,  # 设置视觉指示器分段
         pieces=[  # 分段具体设置
             {"min": 1, "max": 9, "label": "1-9", "color": "#CCFFFF"},
             {"min": 10, "max": 99, "label": "10-99", "color": "#FFFF99"},
             {"min": 100, "max": 999, "label": "100-999", "color": "#FF6666"},
             {"min": 1000, "max": 9999, "label": "1000-9999", "color": "#CC3333"},
             {"min": 10000, "label": "10000以上", "color": "#990033"}
         ]
     )
 )
 ​
 map.render(r"D:\CODE\testproject\test230228\可视化_地图\test_map.html")
全国疫情地图构建

黑马示例代码:

 """
 演示全国疫情可视化地图开发
 """
 import json
 from pyecharts.charts import Map
 from pyecharts.options import *
 ​
 # 读取数据文件
 f = open("D:/疫情.txt", "r", encoding="UTF-8")
 data = f.read()     # 全部数据
 # 关闭文件
 f.close()
 # 取到各省数据
 # 将字符串json转换为python的字典
 data_dict = json.loads(data)        # 基础数据字典
 # 从字典中取出省份的数据
 province_data_list = data_dict["areaTree"][0]["children"]
 # 组装每个省份和确诊人数为元组,并各个省的数据都封装入列表内
 data_list = []      # 绘图需要用的数据列表
 for province_data in province_data_list:
     province_name = province_data["name"]                   # 省份名称
     province_confirm = province_data["total"]["confirm"]    # 确诊人数
     data_list.append((province_name, province_confirm))
 ​
 ​
 # 创建地图对象
 map = Map()
 # 添加数据
 map.add("各省份确诊人数", data_list, "china")
 # 设置全局配置,定制分段的视觉映射
 map.set_global_opts(
     title_opts=TitleOpts(title="全国疫情地图"),
     visualmap_opts=VisualMapOpts(
         is_show=True,           # 是否显示
         is_piecewise=True,      # 是否分段
         pieces=[
             {"min": 1, "max": 99, "lable": "1~99人", "color": "#CCFFFF"},
             {"min": 100, "max": 999, "lable": "100~9999人", "color": "#FFFF99"},
             {"min": 1000, "max": 4999, "lable": "1000~4999人", "color": "#FF9966"},
             {"min": 5000, "max": 9999, "lable": "5000~99999人", "color": "#FF6666"},
             {"min": 10000, "max": 99999, "lable": "10000~99999人", "color": "#CC3333"},
             {"min": 100000, "lable": "100000+", "color": "#990033"},
         ]
     )
 )
 # 绘图
 map.render("全国疫情地图.html")

数据流向:

  1. )))json数据(原始):疫情.txt

  1. 读取json数据:data

  1. )))python字典:data_dict

  1. )))省份数据列表:province_data_list

  1. )))具体数据转化为元组

  1. ——>形成具体数据列表:data_list

基础柱状图构建

pyecharts官方示例:

 from pyecharts.charts import Bar
 from pyecharts import options as opts
 c = (
     Bar()
     .add_xaxis(
         [
             "名字很长的X轴标签1",
             "名字很长的X轴标签2",
             "名字很长的X轴标签3",
             "名字很长的X轴标签4",
             "名字很长的X轴标签5",
             "名字很长的X轴标签6",
         ]
     )
     .add_yaxis("商家A", [10, 20, 30, 40, 50, 40])
     .add_yaxis("商家B", [20, 10, 40, 30, 40, 50])
     .set_global_opts(
         xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
         title_opts=opts.TitleOpts(title="Bar-旋转X轴标签", subtitle="解决标签名字过长的问题"),
     )
     .render(r"D:\CODE\testproject\test230228\可视化_柱状图\test_bar.html")
 )
 #反转xy轴:.reversal_axis(),此时在可在y轴数值处设置label在ti'y'c
时间线绘制
 from pyecharts.charts import Bar, Timeline
 from pyecharts.options import *
 from pyecharts.globals import ThemeType
 # 读取数据
 f = open(r"D:\CODE\testproject\test230301\1960-2019全球GDP数据.csv","r", encoding="GB2312")
 data_lines = f.readlines() # read返回的字符串,readlines得到的是列表
 f.close()
 data_lines.pop(0) # 删除第一条没用的数据 
 # 将数据处理为字典,格式:
 # {1960:[[美国,123][][],....],1961:....}
 data_dict = {}  # 定义一个字典对象
 # 创建时间线对象,下面for循环时数据需要添加到timeline中
 timeline = Timeline({"theme": ThemeType.LIGHT})
 for line in data_lines:  # 拿到每一行数据
     year = int(line.split(",")[0])
     country = line.split(",")[1]
     gdp = float(line.split(",")[2])  # 利用float可以避免科学计数法带来的问题
     # 如何判断字典里面有没有定义的key
     try:
         # 获取年份,如果year存在(比方说1960已经取过美国数据,现在要取1960中国数据,这样data_dict[year]不需要重复建立),追加填入country和gdp数据
         data_dict[year].append([country, gdp])
     except KeyError:
         data_dict[year] = []
         data_dict[year].append([country, gdp])  # 如果没有,就创建一个data_dict[year]
 # print(data_dict) 看了一下,数据准备没问题
 # 因为字典无序,主动排序年份
 sorted_year_list = sorted(data_dict.keys())
 # print(sorted_year_list) 看一下,年份正序排列
 ​
 # 只取每年前十进行展示
 for year in sorted_year_list:
     # key=xxx是关键字传参(因为不是sort函数默认排第一个的变量),data_dict[year]数据是本年[['美国',123123123],['英国',123123123],....]形式的,用sort按照下标1(gdp数据)逆向排序
     data_dict[year].sort(key=lambda element: element[1], reverse=True)
     year_data = data_dict[year][0:10]  # 取出本年份前十名的国家
     x_data = []
     y_data = []  # 为作图做准备,设置x,y轴坐标数据的空列表
     for country_gdp in year_data:
         x_data.append(country_gdp[0])  # x轴添加国家
         y_data.append(country_gdp[1])  # y轴添加gdp
 ​
     # 构建柱状图
     bar = Bar()
     x_data.reverse()
     y_data.reverse()  # 这两步,将前十的数据,x和y都进行调转,相比原本不调转时GDP高的图像显示在下方,等于是将GDP高的图像显示在上方
     bar.add_xaxis(x_data)
     bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(
         position="right"))  # y轴名称,数据,设置数据在右(因为要反转xy轴)
     bar.reversal_axis()  # 反转xy轴
     bar.set_global_opts(
         title_opts=TitleOpts(title=f"{year}年全球GDP前十国家数据")  # 设置标题,每年改变
     )
 ​
     # 将年份数据添加到timeline中
     timeline.add(bar, str(year))
 ​
 # 设置时间线自动播放
 timeline.add_schema(
     play_interval=1000,
     is_timeline_show=True,
     is_auto_play=True,
     is_loop_play=False
 )
 # 绘图
 timeline.render(r"D:\CODE\testproject\test230301\1969-2019全球GDP前十国家.html")

第二阶段

Chap1面向对象

初识对象

程序中组织数据的方式类似于生活中的使用表格:

  1. 设计类class > 设计表格

  1. 创建对象 > 打印表格

  1. 对象属性赋值 > 填写表格

类的成员方法
  1. 类由哪两部分组成:

  1. 属性:成员变量

  1. 行为:成员方法

注意:函数是写在类外的,定义在类的内部,我们称之为方法

  1. 类和成员方法和定义语法:

 class类名称:
     成员变量
     
     def成员方法(self, 参数列表):
         成员方法体
         
 对象 = 类名称()
  1. self的作用

  1. 表示类对象本身的意思

  1. 只有通过self,成员方法才能访问类的成员变量

  1. self出现在形参列表中,但是不占用参数位置,无需理会

类和对象
  1. 类和对象的关系:

  1. 类是程序中的“设计图纸”

  1. 对象是基于图纸生产的具体实体

  1. 什么是面向对象编程:使用对象进行编程,即设计一个类,基于类创建对象,并使用对象完成具体的工作

构造方法
  1. 构造方法的作用:

  1. 在创建类对象(构造类)的时候,会自动执行

  1. 在创建类对象(构造类)的时候,将传入参数自动传递给init方法使用

  1. 定义语法示例:

 class Student:
     def __init__(self, name, age, tel):
         self.name = name
         self.age = age
         self.tel = tel#构造方法中使用成员变量,self.既有定义的功能,又有赋值的功能
         print("Student类创建了一个类对象")
         
 stu = Student("xiaoming",19,"119") #此时已经自动执行了一遍构造方法
 print(stu.name)
 print(stu.age)
 print(stu.tel)
 '''
 结果:
 Student类创建了一个类对象
 xiaoming
 '''
  1. 注意:

  1. 构造方法也是成员方法,参数列表中要提供self

  1. 在方法内使用成员变量需要使用self

  1. 示例:

 '''
 设计一个类,记录学生的姓名、年龄、地址
 实现:
 通过for循环,配合input语句,并使用构造方法,完成学生信息的键盘录入
 输入完成后,使用print语句,完成信息的输出
 '''
 ​
 ​
 class Student:
     def __init__(self, name, age, add):
         for i in range(1, 11):
             print(f"当前录入第{i}位学生信息,总共需录入10名同学信息")
             self.name = input("请输入学生姓名:")
             self.age = input("请输入学生年龄:")
             self.add = input("请输入学生地址:")
             print(f"学生{i}信息录入完成,信息为:【学生姓名:{self.name},年龄:{self.age},地址:{self.add}】")
 ​
 ​
 stu = Student("", "", "")
魔术方法
  1. 是什么:python内置的一些类方法,有各自的功能(作用在类对象上)

功能:

  1. 示例:

  1. str字符串方法:

 class Student:
     def __init__(self,name,age):
         self.name = name
         self.age = age
 ​
     #str魔术方法
     def __str__(self):
         returnf"Student类对象,name:{self.name},age:{self.age}"#自行控制Student类对象返回什么内容 
     
 stu = Student("xiaoming",19)
 print(stu) #Student类对象,name:xiaoming,age:19
 print(str(stu)) #Student类对象,name:xiaoming,age:19
  1. lt小于符号比较:(小于 or 大于

 class Student:
     def __init__(self, name, age):
         self.name = name
         self.age = age
 ​
     # lt魔术方法
     def __lt__(self, other): #other
         return self.age < other.age
 ​
 ​
 stu1 = Student("xiaoming", 19)
 stu2 = Student("xiaowang", 18)
 print(stu1<stu2) #结果:Flase
 print(stu2<stu1) #结果:True
  1. le小于等于符号比较:(小于等于 or 大于等于)逻辑同上

  1. eq比较运算符实现方法:(等于

封装
面向对象编程:
基于类去创建对象,使用对象完成功能开发
面向对象三大主要特性:
封装
继承
多态
  1. 是什么:将现实世界事物的属性行为,封装到类中,描述为成员变量成员方法,从而完成程序对现实世界事物的描述

  1. 私有成员(包括成员变量和成员方法):均以两个下划线开头

  1. 无法被类对象使用

 # 定义一个类,内含私有成员变量和私有成员方法
 class Phone:
     __cunrrent_voltage = None  # 私有成员变量
 ​
     def __keep_single_core(self):  # 私有成员变量
         print("让CPU单核运行")
 ​
 ​
 phone = Phone()
 phone.__keep_single_core() #报错
 print(phone.__cunrrent_voltage) #报错
  1. 可以被其他成员使用

 class Phone:
     __current_voltage = 0.5
 ​
     def __keep_single_core(self):
         print("Keep single core")
 ​
     def call_by_5g(self):
         if self.__current_voltage >= 1:
             print("Call by 5G")
         else:
             self.__keep_single_core()
             print("电量不足,无法5g通话")
 ​
 phone = Phone()
 phone.call_by_5g()
 ​
 #对voltage更改数值,可以触发call_by_5g的功能,说明私有成员可以被其他成员调用
  1. 示例:

 '''
 设计一个手机类,内部包含:
 私有成员变量:__is_5g_enable,类型bool,True表示开启5g,False表示关闭5g
 私有成员方法:__check_5g(),会判断私有成员__is_5g_enable的值
     如果为True,打印输出:5g开启
     如果为False,打印输出:5g关闭,使用4g
 公开成员方法:call_by_5g(),调用它会执行:
     调用私有成员方法:__check_5g(),判断5g网络状态
     打印输出:正在通话中
 '''
 class Phone():
     __is_5g_enable = False
     
     def __check_5g(self):
         if self.__is_5g_enable == True: #注意别漏掉self
             print("5g开启")
         else:
             print("5g关闭,使用4g")
             
     def call_by_5g(self):
         self.__check_5g()
         print("正在通话中")
 ​
 phone = Phone()
 phone.call_by_5g()

 '''
 结果:
 5g关闭,使用4g
 正在通话中
 '''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值