• Python基础复习【第二弹】【黑马】


    本篇是观看b站黑马视频所做的笔记第一弹,为99-126节。

    b站-黑马Python

    1. import json
    2. from pyecharts.charts import Line
    3. from pyecharts.charts import Bar
    4. from pyecharts.options import *
    5. from pyecharts.globals import ThemeType
    6. # 1.1 将一个列表转换为json
    7. data = [{"name":"张大山","age":13},{"name":"小虎","age":12}]
    8. json_str = json.dumps(data, ensure_ascii=False)
    9. print(type(json_str))
    10. # 1.2 将字典转换为json
    11. d = {"name":"小明","addr":"芜湖"}
    12. json_str2 = json.dumps(d,ensure_ascii=False)
    13. print(type(json_str2))
    14. print(json_str2)
    15. # 1.3 将Json字符串转换为py数据类型
    16. s = '[{"name":"小花","age":12},{"name":"小纳","age":15}]'
    17. l = json.loads(s)
    18. print(type(l))
    19. s1 = '{"name":"小明","addr":"芜湖"}'
    20. l1 = json.loads(s1)
    21. print(type(l1))
    22. # 2.1 基础折线图
    23. line = Line()
    24. line.add_xaxis(["中国","美国","英国"])
    25. line.add_yaxis("GDP",[20,30,10])
    26. line.set_global_opts(
    27. title_opts = TitleOpts(title = "GDP展示", pos_left="center", pos_bottom="1%"),
    28. legend_opts = LegendOpts(is_show=True),
    29. toolbox_opts = ToolboxOpts(is_show=True),
    30. visualmap_opts = VisualMapOpts(is_show=True)
    31. )
    32. # line.render()
    33. # 处理数据
    34. f_us = open("D:/PyCharm/Test/YiQingData/美国.txt", "r", encoding="UTF-8")
    35. us_data = f_us.read() # 美国的全部内容
    36. f_jp = open("D:/PyCharm/Test/YiQingData/日本.txt", "r", encoding="UTF-8")
    37. jp_data = f_jp.read() # 日本的全部内容
    38. f_in = open("D:/PyCharm/Test/YiQingData/印度.txt", "r", encoding="UTF-8")
    39. in_data = f_in.read() # 印度的全部内容
    40. # 去掉不合JSON规范的开头
    41. us_data = us_data.replace("jsonp_1629344292311_69436(", "")
    42. jp_data = jp_data.replace("jsonp_1629350871167_29498(", "")
    43. in_data = in_data.replace("jsonp_1629350745930_63180(", "")
    44. # 去掉不合JSON规范的结尾
    45. us_data = us_data[:-2]
    46. jp_data = jp_data[:-2]
    47. in_data = in_data[:-2]
    48. # JSON转Python字典
    49. us_dict = json.loads(us_data)
    50. jp_dict = json.loads(jp_data)
    51. in_dict = json.loads(in_data)
    52. # 获取trend key
    53. us_trend_data = us_dict['data'][0]['trend']
    54. jp_trend_data = jp_dict['data'][0]['trend']
    55. in_trend_data = in_dict['data'][0]['trend']
    56. # 获取日期数据,用于x轴,取2020年(到314下标结束)
    57. us_x_data = us_trend_data['updateDate'][:314]
    58. jp_x_data = jp_trend_data['updateDate'][:314]
    59. in_x_data = in_trend_data['updateDate'][:314]
    60. # 获取确认数据,用于y轴,取2020年(到314下标结束)
    61. us_y_data = us_trend_data['list'][0]['data'][:314]
    62. jp_y_data = jp_trend_data['list'][0]['data'][:314]
    63. in_y_data = in_trend_data['list'][0]['data'][:314]
    64. # 生成图表
    65. line = Line() # 构建折线图对象
    66. # 添加x轴数据
    67. line.add_xaxis(us_x_data) # x轴是公用的,所以使用一个国家的数据即可
    68. # 添加y轴数据 label_opts=LabelOpts(is_show=False)可以把数字去掉 要不乱乱的
    69. line.add_yaxis("美国确诊人数", us_y_data, label_opts=LabelOpts(is_show=False)) # 添加美国的y轴数据
    70. line.add_yaxis("日本确诊人数", jp_y_data, label_opts=LabelOpts(is_show=False)) # 添加日本的y轴数据
    71. line.add_yaxis("印度确诊人数", in_y_data, label_opts=LabelOpts(is_show=False)) # 添加印度的y轴数据
    72. # 设置全局选项
    73. line.set_global_opts(
    74. # 标题设置
    75. title_opts=TitleOpts(title="2020年美日印三国确诊人数对比折线图", pos_left="center", pos_bottom="1%")
    76. )
    77. # 调用render方法,生成图表
    78. line.render()
    79. # 关闭文件对象
    80. f_us.close()
    81. f_jp.close()
    82. f_in.close()
    83. # 数据分析的案例 黑马124集
    84. class Record:
    85. def __init__(self, data, order_id, money, province):
    86. self.data = data
    87. self.order_id = order_id
    88. self.money = money
    89. self.province = province
    90. def __str__(self):
    91. return f"{self.data},{self.order_id},{self.money},{self.province}"
    92. class FileReader:
    93. # 把读到的文件转换为Record对象
    94. def read_data(self) -> list[Record]:
    95. pass
    96. class TextFileReader(FileReader):
    97. def __init__(self, path):
    98. self.path = path
    99. def read_data(self) -> list[Record]:
    100. f = open(self.path,"r",encoding="UTF-8")
    101. record_list: list[Record] = []
    102. for line in f.readlines():
    103. line = line.strip()
    104. data_list = line.split(",")
    105. record = Record(data_list[0], data_list[1],int(data_list[2]),data_list[3])
    106. record_list.append(record)
    107. f.close()
    108. return record_list
    109. class JsonFileReader(FileReader):
    110. def __init__(self, path):
    111. self.path = path
    112. def read_data(self) -> list[Record]:
    113. f = open(self.path, "r", encoding="UTF-8")
    114. record_list: list[Record] = []
    115. for line in f.readlines():
    116. data_dict = json.loads(line)
    117. record = Record(data_dict["date"], data_dict["order_id"], int(data_dict["money"]), data_dict["province"])
    118. record_list.append(record)
    119. f.close()
    120. return record_list
    121. if __name__ == '__main__':
    122. text_file_reader = TextFileReader("D:/Document/黑马python资料/第13章资料/2011年1月销售数据.txt")
    123. list1: list[Record] = text_file_reader.read_data()
    124. json_file_reader = JsonFileReader("D:/Document/黑马python资料/第13章资料/2011年2月销售数据JSON.txt")
    125. list2: list[Record] = json_file_reader.read_data()
    126. # for l in list1:
    127. # print(l)
    128. # for l in list2:
    129. # print(l)
    130. data_dict = {}
    131. all_data: list[Record] = list1 + list2
    132. for record in all_data:
    133. if record.data in data_dict.keys():
    134. data_dict[record.data] += record.money
    135. else:
    136. data_dict[record.data] = record.money
    137. print(data_dict)
    138. # 可视化图标开发
    139. bar = Bar()
    140. bar.add_xaxis(list(data_dict.keys()))
    141. bar.add_yaxis("销售额",list(data_dict.values()),label_opts=LabelOpts(is_show=False))
    142. bar.set_global_opts(
    143. title_opts=TitleOpts(title="每日销售额")
    144. )
    145. bar.render("每日销售额柱状图.html")
    146. # 1.类的对象,类的具体案例 类的属性:变量,成员变量 类的行为:函数,成员方法
    147. class Student:
    148. name = None
    149. gender = None
    150. nationality = None
    151. native_place = None
    152. age = None
    153. def say_hi(self):
    154. print(f"Hello World, i am {self.name}")
    155. stu_1 = Student()
    156. stu_1.name = "林俊杰"
    157. stu_1.gender = "男"
    158. stu_1.nationality = "中国"
    159. stu_1.age = 31
    160. stu_1.say_hi()
    161. # 2.init构造方法
    162. class Student1:
    163. name = None
    164. gender = None
    165. nationality = None
    166. native_place = None
    167. age = None
    168. # 在类内的方法都需要加上self
    169. def __init__(self, name, age, gender, nationality, native_place):
    170. self.name = name
    171. self.age = age
    172. self.gender = gender
    173. self.nationality = nationality
    174. self.native_place = native_place
    175. print("这句话会随着构造方法的执行而自然执行")
    176. stu_2 = Student1("小蛋蛋", 13, "男", "US", "London")
    177. print(stu_2.name)
    178. # 3.常用的类内置方法 成为魔术方法 __lt__ 比较大小 __le__ 小于等于 __eq__
    179. class Student2:
    180. def __init__(self, name, gender):
    181. self.name = name
    182. self.gender = gender
    183. def __str__(self):
    184. return f"对象的name为{self.name},gender为{self.gender}"
    185. stu_3 = Student2("小康",23)
    186. print(str(stu_3))
    187. print(stu_3)
    188. # 4.封装 私有成员变量 私有成员方法 不公开的属性和方法 不能被类直接使用,可以被,类中其他方法使用
    189. class Phone:
    190. __current_voltage = None
    191. face_id = " 10000"
    192. def __keep_single_core(self):
    193. print("私有的成员方法")
    194. def call_by_single(self):
    195. self.__keep_single_core()
    196. print("类内部的方法使用了类内部的私有方法")
    197. phone1 = Phone()
    198. phone1.call_by_single()
    199. # 5.继承 calss 类名(父类名)
    200. # 5.1 可多继承 class 类名(父类1, 父类2, ...)
    201. # 5.2 父类中都有同样的属性,则继承的是先来的那个 先入为主
    202. # 5.3 pass可略过,补全语法
    203. class iPhone(Phone):
    204. # 复写父类的属性与方法
    205. face_id = " 10001"
    206. def call_by_5g(self):
    207. print("5g通话")
    208. print(Phone.face_id)
    209. # or
    210. print(super().face_id)
    211. iphoneX = iPhone()
    212. iphoneX.call_by_5g()
    213. iphoneX.call_by_single()
    214. # 6. 类型注解 3.5版本引入了类型注解 提供了数据的显式说明
    215. # 6.1 可以进行简单注解 也可以进行详细的注解
    216. # 6.2 无法一眼看出变量的类型 通常才使用注解
    217. # 6.3 注解是提示性的 不是强制执行的
    218. var_1: int = 10
    219. var_2: bool = True
    220. pho: Phone = Phone()
    221. my_list1: list = [1, 2, 3]
    222. my_set: set[int] = {1, 2, 3}
    223. my_tuple: tuple[str, int, bool] = ("d", 2, True)
    224. # 6.2 通过注释来注解
    225. import random
    226. var_3 = random.randint(1,10) # type: int
    227. # 6.4 函数和方法的类型注解 包括对返回值进行限定类型 都不是强制型的
    228. def add_xy(x: int, y: int) -> int:
    229. return x+y
    230. # 6.5 union注解 定义联合类型注解 针对混合类型
    231. from typing import Union
    232. my_dict1: dict[str,Union[str,int]] = {"name":"小明","age":12}
    233. def func_1(data: Union[int,str]) -> Union[int,str]:
    234. pass
    235. # 7. 多态 同样的行为 传入不同的对象 得到不同的状态
    236. # 7.05 父类来确定有那些方法 具体的实现 由子类自行决定
    237. class Animal():
    238. def speak(self):
    239. pass
    240. class Cat(Animal):
    241. def speak(self):
    242. print("喵喵喵")
    243. class Dog(Animal):
    244. def speak(self):
    245. print("汪汪汪")
    246. def makeNoise(animal: Animal):
    247. animal.speak()
    248. cat = Cat()
    249. cat.speak()
    250. dog = Dog()
    251. dog.speak()
    252. # 7.1 抽象类 含有抽象方法的类成为抽象类 抽象方法:方法体是空实现的 pass 成为抽象方法
    253. # 也就是上面的Animal类 是顶层设计 相当于给子类做规范

     

  • 相关阅读:
    企事业单位/公司电脑文件透明加密保护 | 防泄密软件\系统!
    MindSpore编译构建后Vmap模块的RuntimeError问题
    如何在CentOS 7中卸载Python 2.7,并安装3.X
    使用Vite创建Vue3项目 配置路由+路径(包教包会)
    为什么要考一级建造师,一建证书含金量有多高?
    windows.h
    RocketMQ和Kafka到底选哪个
    Mysql笔记1
    JWT 登录
    在JavaScript中,如何存储你需要的信息 — 变量(关于变量的详细讲解)
  • 原文地址:https://blog.csdn.net/weixin_45532984/article/details/133971102