Python基础——基础综合案例之数据可视化

前言

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

Python基础模块总目录

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

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的变化趋势

基础柱状图

  1. 通过 Bar() 构建一个柱状图对象

  2. 和折线图一样,通过 add_xaxis()add_yaxis() 添加x和y轴数据

  3. 通过柱状图对象的:reversal_axis(),反转x和y轴

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

需求分析

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

  1. GDP数据处理为亿级

  2. 有时间轴,按照年份为时间轴的点

  3. x轴和y轴反转,同时每一年的数据只要前8名国家

  4. 有标题,标题的年份会动态更改

  5. 设置了主题为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")
  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一份关于西安地铁客流量分析的数据课程设计: 1. 课程目标:通过本课程的学习,学生将能够了解数据基础知识和技术,掌握如何使用数据工具分析和展示西安地铁的客流量数据,提高学生的数据分析和可能力。 2. 课程内容: (1)数据类型和格式:介绍常见的数据类型和格式,包括文本、表格、图像、JSON等。 (2)数据准备和清洗:讲解如何准备和清洗数据,包括数据获取、数据预处理、数据清洗等。 (3)可工具和技术:介绍常见的数据工具和技术,包括Python的Matplotlib、Seaborn、Plotly等,以及Tableau、PowerBI等商业工具。 (4)数据分析和可案例:通过具体的案例分析,让学生了解如何使用数据工具分析和展示西安地铁的客流量数据,例如客流量的时间分布、空间分布、高峰期客流量分析等。 3. 教学方法:采用讲解、案例分析、实践操作、小组讨论等教学方法,以满足学生的不同需求和学习风格。 4. 课程评估:设计实践项目和考试,以检验学生的学习效果和能力。实践项目可以要求学生使用具体的数据工具完成西安地铁客流量数据的分析和展示,考试可以采用选择题、填空题、简答题等形式。 5. 资源准备:准备必要的教学资源,例如PPT、教材、参考书籍、数据集等,以帮助学生更好地理解课程内容和实践操作。数据集可以从公开的数据源中获取,例如西安地铁公司官网、国家数据等。 6. 实践项目:设计实践项目,让学生使用具体的数据工具完成西安地铁客流量数据的分析和展示。可以要求学生在特定的时间段内,收集某一地铁站的客流量数据,并使用数据工具展示数据分析结果,例如时间序列图、热力图、地图等。 以上是一份关于西安地铁客流量分析的数据课程设计,希望能对您有所帮助。如果您需要更加具体的帮助或者有其他问题,欢迎随时向我提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值