403-数据可视化

什么是数据可视化

数据可视化:顾名思义就是让数据看的到, 他的作用也很明显, 让人们不用再去阅读枯燥无味的数据, 一眼看去就可以明白数据是什么, 数据间的关系是什么, 更好的让我们通过数据发现潜在的规律进而进行商业决策。

pyecharts模块

Echarts 是个由百度捐给Apache开源基金会的开源的数据可视化工具,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可. 而 Python 是门富有表达力的语言,很适合用于数据处理. 当数据分析遇上数据可视化时pyecharts 诞生了.

特性 :

  1. 简洁的API设计,使用如丝滑般流畅,支持链式调用
  2. 囊括了30+种常见图表
  3. 支持主流Notebook 环境,Jupyter NotebookJupyterLab
  4. 可轻松集成至Flask, Django等主流Web框架
  5. 高度灵活的配置项,可轻松搭配出精美的图表
  6. 详细的文档和示例,帮助开发者更快的上手项目
  7. 多达400+地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持

官网:pyecharys.org

初学就去官网看文档、看官方的案例,官方文档是最全的

每种图像都有base版,是最简单的,先看这个,例如bar_base,就是柱状图里最简单的

pyecharts的缺点是网页数据都是实时从官网获取,所以需要联网并能连通pyecharts官网

创建柱状图(新)

# 导入柱状图模块
from pyecharts.charts import Bar
import pyecharts.options as opts

# 创建图标对象并添加数据,这里是链式操作的设置方法
c = (
    Bar()
    .add_xaxis(['A', 'B', 'C', 'D', 'E', 'F', 'G'])  # 添加x轴数据
    .add_yaxis('category', [10, 20, 30, 40, 50, 60, 70])  # 添加y轴数据
    .add_yaxis('category2', [10, 20, 30, 40, 50, 60, 70])  # 添加y轴数据
    .add_yaxis('category3', [10, 20, 30, 40, 50, 60, 70])  # 添加y轴数据
    .set_global_opts(title_opts=opts.TitleOpts(title='柱状图示例'))  # 设置全局配置项:标题
    .render('bar.html')  # 保存为html文件
)

Faker类

Faker 是一个 Python 库,用于生成虚假数据。它可以帮助你创建随机数据,比如姓名、地址、电话号码、电子邮件地址等。
返回的结果是一个列表

from faker import Faker

fake = Faker()

print(fake.name())  # 生成随机姓名
print(fake.address())  # 生成随机地址
print(fake.phone_number())  # 生成随机电话号码
print(fake.email())  # 生成随机电子邮件地址

按住ctrl+鼠标左键,可以跳转到faker的定义,可以看到所有可以生成随机数据的方法和数据

通过faker类固定选择一组元素

from faker import Faker

print(Faker.phones)

opts配置项

创建柱状图代码中的:.set_global_opts(title_opts=opts.TitleOpts(title='柱状图示例'))就是设置全局配置项,效果是设置标题

# 导入柱状图模块
from pyecharts.charts import Bar
import pyecharts.options as opts  # 导入配置选项模块
from pyecharts.globals import ThemeType  # 导入主题类型

c = (
    Bar(init_opts=opts.InitOpts(width='1400px', height='800px', theme=ThemeType.LIGHT))  # 设置图表的宽度和高度和主题
    .add_xaxis(['A', 'B', 'C', 'D', 'E', 'F', 'G'])
    .add_yaxis('category', [10, 20, 30, 40, 50, 60, 70])
    .set_global_opts(title_opts=opts.TitleOpts(title='柱状图示例'),  # 设置全局配置项:标题
                      legend_opts=opts.LegendOpts(is_show=False))  # 设置全局配置项:图例
    .render('bar.html')
)

通过pyecharts模块创建饼状图(老)

Note

前提:自己搭建好了本地gdp数据的html网页用来爬取
这里用饼状图爬取并展示排名前10的数据

导入模块

# 导入饼图模块
from pyecharts.charts import Pie
# 导入配置选项模块
import pyecharts.options as opts

初始化饼状图:

Pie()函数: 创建饼图

opts.InitOpts参数: Pie(init_opts=opts.InitOpts(width="1400px", height="800px"))

init_opts: 指定参数名

opts.InitOpts: 配置选项

**width="1400px" height="800px" :**界面的宽度和高度

# 创建饼图并设置这个界面的长和高 
# px:像素单位
pie = Pie(init_opts=opts.InitOpts(width="1400px", height="800px"))

给饼图添加数据:

add()函数:

参数1: 名称

参数2: 具体数据, 数据类型为==>[(a,b),(a,b),(a,b)]==>a为数据名称,b为数据大小

参数3: 标签设置 label_opts=opts.LabelOpts(formatter='{b}:{d}%') 符合百分比的形式

# 给饼图添加数据
pie.add(
  "GDP",
  data,
  label_opts=opts.LabelOpts(formatter='{b}:{d}%')
)

给饼图添设置标题:

set_global_opts()函数 :

title_opts=opts.TitleOpts : 设置标题

title="2020年世界GDP排名", subtitle="美元" : 设置主标题和副标题

# 给饼图设置标题
pie.set_global_opts(title_opts=opts.TitleOpts(title="2020年世界GDP排名", subtitle="美元"))

保存数据:

# 保存结果
pie.render()

完整代码

import requests
import re
# 导入饼图模块
from pyecharts.charts import Pie
# 导入配置选项模块
import pyecharts.options as opts

# 存储爬取到的国家的名字
country_list = []
# 春初爬取到的国家gdp的数据
gdp_list = []


def get_gdp_data():
    global country_list
    global gdp_list

    # 获取gdp的html数据
    data = requests.get("http://localhost:8000/gdp.html")
    # 对获取数据进行解码
    data = data.content.decode("utf8")
    # 对gdp的html数据进行按行分割
    data_list = data.split("\n")

    for i in data_list:
        # 对html进行解析获取<国家名字>
        country_result = re.match('.*<a href=""><font>(.*)</font></a>', i)
        # 匹配成功就存放到列表中
        if country_result is not None:
            country_list.append(country_result.group(1))
        # 对html进行解析获取<gdp数据>
        gdp_result = re.match(".*¥(.*)亿元", i)  # 匹配规则
        # 匹配成功就存储到列表中
        if gdp_result is not None:
            gdp_list.append(gdp_result.group(1))


# 创建一个饼状图显示GDP前十的国家
def data_view_pie():
    # 获取前十的过的GDP数据, 同时让数据符合[(),()...]的形式
    data = list(zip(country_list[:10], gdp_list[:10]))  # 切片
    # 创建饼图
    pie = (
        Pie(init_opts=opts.InitOpts(width="1400px", height="800px"))
        # 给饼图添加数据
        .add("GDP", data, label_opts=opts.LabelOpts(formatter='{b}:{d}%'))
        # 给饼图设置标题
        .set_global_opts(title_opts=opts.TitleOpts(title="排名", subtitle="美元"))
        # 保存结果
        .render('pie.html')
          )

if __name__ == '__main__':
    # 获取GDP数据
    get_gdp_data()
    # 生成可视化饼图
    data_view_pie()