赞
踩
本文是根据黑马程序员Python教程所作之笔记,目的是为了方便我本人以及广大同学们查漏补缺。
不想做笔记直接来我的频道。当然啦,自己的笔记才是最好的哦!
PS:感谢黑马程序员!
教程链接:黑马程序员最新Python教程,8天python从入门到精通,学python看这套就够了
Python基础模块总目录
第一章:你好Python
第二章:Python基础语法
第三章:Python判断语句
第四章:Python循环语句
第五章:Python函数
第六章:Python数据容器
第七章:Python函数进阶
第八章:Python文件操作
第九章:Python异常、模块与包
基础综合案例之数据可视化
效果一:2020年印美日新冠累计确诊人数
2020年是新冠疫情爆发的一年,随着疫情的爆发,国内外确诊人数成了大家关心的热点,相信大家都有看过类似的疫情报告。本案例对印度美国日本三个国家确诊人数的进行了可视化处理,形成了可视化的疫情确诊人数报告。
效果二:全国疫情地图可视化
效果三:动态GDP增长图
数据来源
本案例数据全部来自 <<百度疫情实时大数据报告>>,及公开的全球各国GDP数据
使用的技术:
Echarts 是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可. 而 Python 是门富有表达力的语言,很适合用于数据处理. 当数据分析遇上数据可视化时pyecharts 诞生了.
什么是json
JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据
JSON本质上是一个带有特定格式的字符串
主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。类似于:
国际通用语言-英语
中国56个民族不同地区的通用语言-普通话
Python语言使用JSON有很大优势,因为:JSON无非就是一个单独的字典或一个内部元素都是字典的列表
所以JSON可以直接和Python的字典或列表进行无缝转换。
json有什么用
json格式数据转化
Python数据和Json数据的相互转化
通过 json.dumps(data) 方法把python数据转化为了 json数据
data = json.dumps(data)
如果有中文可以带上:ensure_ascii=False
参数来确保中文正常转换
通过 json.loads(data) 方法把josn数据转化为了 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) # 准备字典,将字典转换为JSON d = {"name":"周杰轮", "addr":"台北"} json_str = json.dumps(d, ensure_ascii=False) print(type(json_str)) print(json_str) # 将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) # 将JSON字符串转换为Python数据类型{k: v, k: v} s = '{"name": "周杰轮", "addr": "台北"}' d = json.loads(s) print(type(d)) print(d)
pyecharts模块
如果想要做出数据可视化效果图, 可以借助pyecharts模块来完成
概况 :
Echarts 是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时 pyecharts 诞生了
pyecharts模块安装
使用在前面学过的pip命令即可快速安装PyEcharts模块
pip install pyecharts
查看官方示例
打开官方画廊:
https://gallery.pyecharts.org/#/README
pyechars入门
""" 演示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]) # 设置全局配置项set_global_opts来设置, line.set_global_opts( title_opts=TitleOpts(title="GDP展示", 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()
pyecharts有哪些配置选项
pyecharts模块中有很多的配置选项,常用到2个类别的选项:
全局配置选项
系列配置选项
全局配置项能做什么?
配置图表的标题
配置图例
配置鼠标移动效果
配置工具栏
等整体配置项
set_global_opts方法
这里全局配置选项可以通过 set_global_opts 方法来进行配置,相应的选项和选项的功能如下:
系列配置项,我们在后面构建案例时讲解
数据处理
原始数据格式:
导入模块:
对数据进行整理,让数据符合json格式:
导入模块
导入模块:
折线图相关配置项
折线图相关配置项:
创建折线图
这里的Line()是构建类对象,我们先不必理解是什么意思,后续在Python高阶中进行详细讲解。
目前我们简单的会用即可
添加数据
.add_yaxis相关配置选项:
运行效果图:
全局配置选项
.set_global_opts全局配置选项:
运行效果图:
基础地图演示
基础地图演示 - 视觉映射器
案例效果
代码总览
""" 演示全国疫情可视化地图开发 """ import json from pyecharts.charts import Map from pyecharts.options import * # 读取数据文件 f = open("C:/地图数据疫情.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")
省疫情地图
效果展示
代码总览
""" 演示河南省疫情地图开发 """ import json from pyecharts.charts import Map from pyecharts.options import * # 读取文件 f = open("C:/疫情.txt", "r", encoding="UTF-8") data = f.read() # 关闭文件 f.close() # 获取河南省数据 # json数据转换为python字典 data_dict = json.loads(data) # 取到河南省数据 cities_data = data_dict["areaTree"][0]["children"][3]["children"] # 准备数据为元组并放入list data_list = [] for city_data in cities_data: city_name = city_data["name"] + "市" city_confirm = city_data["total"]["confirm"] data_list.append((city_name, city_confirm)) # 手动添加济源市的数据 data_list.append(("济源市", 5)) # 构建地图 map = Map() map.add("河南省疫情分布", data_list, "河南") # 设置全局选项 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")
案例效果
通过pyechars可以实现数据的动态显示, 直观的感受1960~2019年全世界各国GDP的变化趋势
通过 Bar()
构建一个柱状图对象
和折线图一样,通过 add_xaxis()
和 add_yaxis()
添加x和y轴数据
通过柱状图对象的:reversal_axis()
,反转x和y轴
通过 label_opts=LabelOpts(position="right")
设置数值标签在右侧显示
通过Bar构建基础柱状图
反转x和y轴
数值标签在右侧
""" 演示基础柱状图的开发 """ from pyecharts.charts import Bar from pyecharts.options import LabelOpts # 使用Bar构建基础柱状图 bar = Bar() # 添加x轴的数据 bar.add_xaxis(["中国", "美国", "英国"]) # 添加y轴数据 bar.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position="right")) # 设置数值标签在右侧 # 反转x和y轴 bar.reversal_axis() # 绘图 bar.render("基础柱状图.html")
创建时间线
Timeline() - 时间线
柱状图描述的是分类数据,回答的是每一个分类中『有多少?』这个问题。这是柱状图的主要特点,同时柱状图很难动态的描述一个趋势性的数据。这里pyecharts为我们提供了一种解决方案 - 时间线
如果说一个Bar、Line对象是一张图表的话,时间线就是创建一个一维的x轴,轴上每一个点就是一个图表对象
""" 演示带有时间线的柱状图开发 """ from pyecharts.charts import Bar, Timeline from pyecharts.options import LabelOpts from pyecharts.globals import ThemeType bar1 = Bar() bar1.add_xaxis(["中国", "美国", "英国"]) bar1.add_yaxis("GDP", [30, 30, 20], label_opts=LabelOpts(position="right")) bar1.reversal_axis() bar2 = Bar() bar2.add_xaxis(["中国", "美国", "英国"]) bar2.add_yaxis("GDP", [50, 50, 50], label_opts=LabelOpts(position="right")) bar2.reversal_axis() bar3 = Bar() bar3.add_xaxis(["中国", "美国", "英国"]) bar3.add_yaxis("GDP", [70, 60, 60], label_opts=LabelOpts(position="right")) bar3.reversal_axis() # 构建时间线对象 timeline = Timeline({"theme": ThemeType.LIGHT}) # 在时间线内添加柱状图对象 timeline.add(bar1, "点1") timeline.add(bar2, "点2") timeline.add(bar3, "点3") # 自动播放设置 timeline.add_schema( play_interval=1000, is_timeline_show=True, is_auto_play=True, is_loop_play=True ) # 绘图是用时间线对象绘图,而不是bar对象了 timeline.render("基础时间线柱状图.html")
自动播放
时间线设置主题
timeline = Timeline({"theme": ThemeType.LIGHT})
需求分析
简单分析后,发现最终效果图中需要:
GDP数据处理为亿级
有时间轴,按照年份为时间轴的点
x轴和y轴反转,同时每一年的数据只要前8名国家
有标题,标题的年份会动态更改
设置了主题为LIGHT
列表的sort方法
在前面我们学习过sorted函数,可以对数据容器进行排序。
在后面的数据处理中,我们需要对列表进行排序,并指定排序规则,sorted函数就无法完成了。
我们补充学习列表的sort方法。
使用方式:
列表.sort(key=选择排序依据的函数, reverse=True|False)
参数key,是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据
参数reverse,是否反转排序结果,True表示降序,False表示升序
代码总览
""" 演示第三个图表:GDP动态柱状图开发 """ from pyecharts.charts import Bar, Timeline from pyecharts.options import * from pyecharts.globals import ThemeType # 读取数据 f = open("C:/1960-2019全球GDP数据.csv", "r", encoding="GB2312") data_lines = f.readlines() # 关闭文件 f.close() # 删除第一条数据 data_lines.pop(0) # 将数据转换为字典存储,格式为: # { 年份: [ [国家, gdp], [国家,gdp], ...... ], 年份: [ [国家, gdp], [国家,gdp], ...... ], ...... } # { 1960: [ [美国, 123], [中国,321], ...... ], 1961: [ [美国, 123], [中国,321], ...... ], ...... } # 先定义一个字典对象 data_dict = {} for line in data_lines: year = int(line.split(",")[0]) # 年份 country = line.split(",")[1] # 国家 gdp = float(line.split(",")[2]) # gdp数据 # 如何判断字典里面有没有指定的key呢? try: data_dict[year].append([country, gdp]) except KeyError: data_dict[year] = [] data_dict[year].append([country, gdp]) # 创建时间线对象 timeline = Timeline({"theme": ThemeType.LIGHT}) # 排序年份 sorted_year_list = sorted(data_dict.keys()) for year in sorted_year_list: data_dict[year].sort(key=lambda element: element[1], reverse=True) # 取出本年份前8名的国家 year_data = data_dict[year][0:8] x_data = [] y_data = [] for country_gdp in year_data: x_data.append(country_gdp[0]) # x轴添加国家 y_data.append(country_gdp[1] / 100000000) # y轴添加gdp数据 # 构建柱状图 bar = Bar() x_data.reverse() y_data.reverse() bar.add_xaxis(x_data) bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(position="right")) # 反转x轴和y轴 bar.reversal_axis() # 设置每一年的图表的标题 bar.set_global_opts( title_opts=TitleOpts(title=f"{year}年全球前8GDP数据") ) timeline.add(bar, str(year)) # for循环每一年的数据,基于每一年的数据,创建每一年的bar对象 # 在for中,将每一年的bar对象添加到时间线中 # 设置时间线自动播放 timeline.add_schema( play_interval=1000, is_timeline_show=True, is_auto_play=True, is_loop_play=False ) # 绘图 timeline.render("1960-2019全球GDP前8国家.html")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。