前言

本文是根据黑马程序员Python教程所作之笔记,目的是为了方便我本人以及广大同学们查漏补缺。 不想做笔记直接来我的频道。当然啦,自己的笔记才是最好的哦! PS:感谢黑马程序员! 教程链接:黑马程序员最新Python教程,8天python从入门到精通,学python看这套就够了

Python基础模块总目录

第一章:你好Python 第二章:Python基础语法 第三章:Python判断语句 第四章:Python循环语句 第五章:Python函数 第六章:Python数据容器 第七章:Python函数进阶 第八章:Python文件操作 第九章:Python异常、模块与包 基础综合案例之数据可视化

目录

前言Python基础综合案例(数据可视化 - 折线图可视化)json数据格式pyecharts模块介绍pyecharts快速入门数据处理创建折线图

Python基础综合案例(数据可视化 - 地图可视化)基础地图使用疫情地图-国内疫情地图疫情地图-省级疫情地图

Python基础综合案例(数据可视化 - 动态柱状图)基础柱状图基础时间线柱状图GDP动态柱状图绘制

Python基础综合案例(数据可视化 - 折线图可视化)

效果一:2020年印美日新冠累计确诊人数

2020年是新冠疫情爆发的一年,随着疫情的爆发,国内外确诊人数成了大家关心的热点,相信大家都有看过类似的疫情报告。本案例对印度美国日本三个国家确诊人数的进行了可视化处理,形成了可视化的疫情确诊人数报告。

效果二:全国疫情地图可视化

效果三:动态GDP增长图

数据来源

本案例数据全部来自 <<百度疫情实时大数据报告>>,及公开的全球各国GDP数据 使用的技术: Echarts 是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可. 而 Python 是门富有表达力的语言,很适合用于数据处理. 当数据分析遇上数据可视化时pyecharts 诞生了.

json数据格式

什么是json

JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。类似于:

国际通用语言-英语 中国56个民族不同地区的通用语言-普通话

Python语言使用JSON有很大优势,因为:JSON无非就是一个单独的字典或一个内部元素都是字典的列表

所以JSON可以直接和Python的字典或列表进行无缝转换。

json有什么用

各种编程语言存储数据的容器不尽相同,在Python中有字典dict这样的数据类型,而其它语言可能没有对应的字典。为了让不同的语言都能够相互通用的互相传递数据,JSON就是一种非常良好的中转数据格式。如下图,以Python和C语言互传数据为例:

json格式数据转化

json格式的数据要求很严格,下面我们看一下他的要求

Python数据和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模块

如果想要做出数据可视化效果图, 可以借助pyecharts模块来完成 概况 : Echarts 是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时 pyecharts 诞生了

pyecharts模块安装

使用在前面学过的pip命令即可快速安装PyEcharts模块 pip install pyecharts

查看官方示例

打开官方画廊:

https://gallery.pyecharts.org/#/README

pyecharts快速入门

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全局配置选项: 运行效果图:

Python基础综合案例(数据可视化 - 地图可视化)

基础地图使用

基础地图演示

基础地图演示 - 视觉映射器

疫情地图-国内疫情地图

案例效果

代码总览

"""

演示全国疫情可视化地图开发

"""

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")

Python基础综合案例(数据可视化 - 动态柱状图)

案例效果

通过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动态柱状图绘制

需求分析

简单分析后,发现最终效果图中需要:

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")

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: