Python 数据可视化神器Pyecharts绘制图像练习


Posted in Python onFebruary 28, 2022

前言:

Echarts 是百度开源的一款数据可视化 JS 工具,数据可视化类型十分丰富,但是得通过导入 js 库在 Java Web 项目上运行。

作为工作中常用 Python 的选手,不能不知道这款数据可视化插件的强大。那么,能否在 Python 中也能用到 Echarts 的功能呢?寻找中惊喜地发现了 pyecharts,只需在python中安装该模块即可使用。

安装:

常用的pip安装包一键安装pyecharts

 pyecharts安装命令:

ython -m pip install pyecharts

Python + pyecharts具体应用

结合工作中的项目数据,我选择了 test 项目需求中 hotel_code_new 为 CNSZVS_002,CWSWS_003 对应2019年12个月指标为 RNs 的数据做可视化展示与分析。

1.Hive数据库查询sql

hive_sql内容如下:

# sql中所使用的部分语法为hive sql中常规的语法,与mysql有所不同,请注意。
select rrrd1.hotel_code_new as hotel_code_new
      ,dda.natural_date as natural_date
      ,nvl(rrrd.room_nights, 0) as room_nights
 from ( select distinct substr(natural_dt,1,7) as natural_date 
    from dws.dws_test_date_calendar
    where dt_year='2019'
        )dda
        left join 
         (select 'CNSZVS_002' hotel_code_new
            UNION all select  'CWSWS_003' hotel_code_new
      )rrrd1
        left join
         (select  hotel_code_new
                    ,substr(stay_date,1,7) as stay_date
                    ,sum(number_of_room_nights) as room_nights
                from dwm.dwm_test_resvs_rom_daily_df
                where dt='2021-10-24'
                and hotel_code_new in(CNSZVS_002', 'CWSWS_003')
                    and resv_status in('CHECKEDSSSIN','CHECKEDSSSOUT')
                    and substr(stay_date,0,4) = '2019' 
                    group by hotel_code_new,substr(stay_date,1,7)
        )rrrd 
        on dda.natural_date = rrrd.stay_date 
        and rrrd1.hotel_code_new=rrrd.hotel_code_new
        order by rrrd.hotel_code_new;

2.Python代码实现—柱状图

from impala.dbapi import connect
import warnings

#数据仓库数据获取准备
def hive_connect(sql):
    warnings.filterwarnings('ignore')
    config_hive_beta = {
        'host': '10.7.0.12',  #hive的host地址
        'port': 10000,    #hive的端口号
        'user': 'hive',    #hive的username
        'password': 'hive',    #hive的password
        'database': 'tmp',     #hive中需要查询的数据库名
        'auth_mechanism': 'PLAIN' #hive的hive-site.xml配置文件中获取
    }
    conn = connect(**config_hive_beta)
    cursor = conn.cursor()
    cursor.execute(sql)
    hive_all_data = cursor.fetchall()
    return hive_all_data


# all_data = hive_connect(hive_sql)
# 通过调用hive_connect方法获取到的数据库查询结果数据如all_data列表所示
all_data = [('CNSZVS_002', '2019-01', 0), ('CNSZVS_002', '2019-02', 0), ('CNSZVS_002', '2019-03', 0),
            ('CNSZVS_002', '2019-04', 0), ('CNSZVS_002', '2019-05', 0), ('CNSZVS_002', '2019-06', 2353),
            ('CNSZVS_002', '2019-07', 2939), ('CNSZVS_002', '2019-08', 5148), ('CNSZVS_002', '2019-09', 3850),
            ('CNSZVS_002', '2019-10', 4973), ('CNSZVS_002', '2019-11', 5467), ('CNSZVS_002', '2019-12', 4742),
            ('CWSWS_003', '2019-01', 5914), ('CWSWS_003', '2019-02', 4434), ('CWSWS_003', '2019-03', 6003),
            ('CWSWS_003', '2019-04', 6611), ('CWSWS_003', '2019-05', 6586), ('CWSWS_003', '2019-06', 5840),
            ('CWSWS_003', '2019-07', 6624), ('CWSWS_003', '2019-08', 7001), ('CWSWS_003', '2019-09', 5792),
            ('CWSWS_003', '2019-10', 6898), ('CWSWS_003', '2019-11', 6944), ('CWSWS_003', '2019-12', 5404)]

# 从pyecharts模块导入柱状图-Bar
from pyecharts import Bar
# 设置横轴行名,这里使用12个月份的英文简称
columns = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
# 分别新建2个空list用于存储每个月份对应的RNs的值
CNSZVS_002 = []
CWSWS_003 = []

for i in all_data:
    if i[0] == 'CNSZVS_002':
        CNSZVS_002.append(i[2])
    elif i[0] == 'CWSWS_003':
        CWSWS_003.append(i[2])
    else:
        pass
# 设置柱状图的主标题与副标题
bar = Bar("柱状图", "Test需求—2019年的RNs")
# 添加柱状图的数据及配置项-求平均值、最大值、最小值
bar.add("CNSZVS_002", columns, CNSZVS_002, mark_line=["average"], mark_point=["max", "min"])
bar.add("CWSWS_003", columns, CWSWS_003, mark_line=["average"], mark_point=["max", "min"])
# 在本py文件同级目录下生成名为render.html的本地文件(默认为.html文件)
bar.render()
# 也可设置成指定的路径用于保存html文件
#bar.render(r"D:bar_render.html")

柱状效果图展示:

Python 数据可视化神器Pyecharts绘制图像练习

生成的柱状效果图是html格式的,可以在浏览器中打开查看,在浏览器中支持下载成图片格式到本地,并且点击图例即可置灰对应的图例,同时隐藏图例对应的柱状图数据,

如下图所示:

Python 数据可视化神器Pyecharts绘制图像练习

3.Python代码实现—饼状图

注意:数据准备部分的代码与柱状图一样,这里只展示饼状图特有的代码

# 从pyecharts模块中导入饼图Pie
from pyecharts import Pie
# 设置主标题与副标题,标题设置居中,设置宽度为1000
pie = Pie("饼状图", "Test需求—2019年的RNs", title_pos='left', width=1000)
# 使用add导入数据,设置坐标位置为【20,50】,上方的colums选项取消显示
pie.add("CNSZVS_002", columns, CNSZVS_002, center=[20, 50], is_legend_show=True)
# 使用add导入数据,设置坐标位置为【75,50】,上方的colums选项正常显示
pie.add("CWSWS_003", columns, CWSWS_003, center=[75, 50], is_legend_show=False, is_label_show=True)
# 保存图表
pie.render()

饼状效果图展示——隐藏所占百分比

Python 数据可视化神器Pyecharts绘制图像练习

饼状效果图展示——展示所占百分比

Python 数据可视化神器Pyecharts绘制图像练习

4.Python代码实现—箱型图

# 从pyecharts模块导入箱型图Boxplot
from pyecharts import Boxplot
boxplot = Boxplot("箱型图", "Test需求—2019年的RNs")
x_axis = ['CNSZVS_002', 'CWSWS_003']
y_axis = [CNSZVS_002, CWSWS_003]
# prepare_data方法可以将数据转为嵌套的 [min, Q1, median (or Q2), Q3, max]
yaxis = boxplot.prepare_data(y_axis)
boxplot.add("2019年RNs统计", x_axis, yaxis)
boxplot.render()

箱型图效果展示:

Python 数据可视化神器Pyecharts绘制图像练习

5.Python代码实现—折线图

from pyecharts import Line
line = Line("折线图", "Test需求—2019年的RNs")
# is_label_show属性是设置上方数据是否显示
line.add("CNSZVS_002", columns, CNSZVS_002, is_label_show=True)
line.add("CWSWS_003", columns, CWSWS_003, is_label_show=True)
line.render()

折线图效果展示:

Python 数据可视化神器Pyecharts绘制图像练习

6.Python代码实现—雷达图

from pyecharts import Radar
radar = Radar("雷达图", "Test需求—2019年的RNs")
# 由于雷达图传入的数据得为多维数据,需要将list再进行list转换一次
CNSZVS_002 = [CNSZVS_002]
CWSWS_003 = [CWSWS_003]
# 设置column的最大值,为了雷达图更为直观,这里的月份最大值设置依据真实数据的值来设置,因此各个月份有所不同
schema_diff = [
    ("Jan", 7000), ("Feb", 5000), ("Mar", 6500),
    ("Apr", 7000), ("May", 7000), ("Jun", 6200),
    ("Jul", 6800), ("Aug", 7200), ("Sep", 6000),
    ("Oct", 7300), ("Nov", 7500), ("Dec", 6000)
]
# 传入坐标
radar.config(schema_diff)
radar.add("CNSZVS_002", CNSZVS_002)
# 一般默认为同一种颜色,这里为了便于区分,需要设置item的颜色
radar.add("CWSWS_003", CWSWS_003, item_color="#1C86EE")
radar.render()

雷达效果图展示:

Python 数据可视化神器Pyecharts绘制图像练习

7.Python代码实现—散点图

from pyecharts import Scatter
scatter = Scatter("散点图", "Test需求—2019年的RNs")
# xais_name是设置横坐标名称,这里由于显示问题,还需要将y轴名称与y轴的距离进行设置
scatter.add("CWSWS_003&CNSZVS_002 RNs的散点分布", CNSZVS_002, CWSWS_003, xaxis_name="CNSZVS_002", yaxis_name="CWSWS_003", yaxis_name_gap=40)
scatter.render()

散点图效果展示:

Python 数据可视化神器Pyecharts绘制图像练习

总结:

  • 准备符合要求的数据及其格式
  • 导入对应图表所使用的包
  • add()方法:主要方法,用于添加图表的数据和设置各种配置项
  • render()方法:用于保存生成的图表

 到此这篇关于Python 数据可视化神器Pyecharts绘制图像练习的文章就介绍到这了,更多相关Python 数据可视化神器Pyecharts内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
Python字符串格式化
Jun 15 Python
Python中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
Python装饰器用法实例总结
May 26 Python
windows下 兼容Python2和Python3的解决方法
Dec 05 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
python opencv 二值化 计算白色像素点的实例
Jul 03 Python
python 控制台单行刷新,多行刷新实例
Feb 19 Python
Python多个装饰器的调用顺序实例解析
May 22 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 Python
python request 模块详细介绍
Nov 10 Python
教你怎么用python selenium实现自动化测试
May 27 Python
Python使用OpenCV实现虚拟缩放效果
python保存图片的四个常用方法
Python可视化学习之seaborn调色盘
Python可视化学习之matplotlib内置单颜色
Python可视化学习之seaborn绘制矩阵图详解
Python matplotlib可视化之绘制韦恩图
Python语言中的数据类型-序列
Feb 24 #Python
You might like
自己动手做一个SQL解释器
2006/10/09 PHP
用PHP调用数据库的存贮过程!
2006/10/09 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
php去除HTML标签实例
2013/11/06 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
jquery蒙版控件实现代码
2010/12/08 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
Vue实现滑动拼图验证码功能
2019/09/15 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
python共享引用(多个变量引用)示例代码
2013/12/04 Python
初步讲解Python中的元组概念
2015/05/21 Python
python去除字符串中的换行符
2017/10/11 Python
微信跳一跳python代码实现
2018/01/05 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
HTML5实现签到 功能
2018/10/09 HTML / CSS
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
怎样创建、运行java程序
2014/08/01 面试题
副护士长竞聘演讲稿
2014/04/30 职场文书
城管大队整治方案
2014/05/06 职场文书
本科应届生自荐信
2014/06/29 职场文书
人口与计划生育目标管理责任书
2014/07/29 职场文书
租房安全协议书
2014/08/20 职场文书
信仰观后感
2015/06/03 职场文书
教师节领导致辞
2015/07/29 职场文书