Python数据可视化---pygal模块
pygal模块
安装pygal模块
pygal模块的安装非常简单,只需输入一行pip命令即可
pip install pygal
安装完成:
pygal模块介绍
pygal官网地址
pygal是Python的第三方库,他的主要功能就是数据可视化,即将数字转化成图表的形式来呈现,它提供的图表样式有柱状图、折线图、饼状图、雷达图......
柱状图
单列柱状图
import pygal
view = pygal.Bar()
#图表名
view.title = '柱状图'
#添加数据
view.add('numbers', [0,2,4,6,8,10])
#在浏览器中查看
#view.render_in_browser()
#保存为view.svg(也可以保存为jpg)
view.render_to_file('view.svg')
效果图:
注意:svg图片用系统自带的图片查看器打开可能会显示全黑色,可以尝试使用Google浏览器打开
多列柱状图
#添加数据
view.add('numbers', [0,2,4,6,8,10])
view.add('numbers_2', [0,1,3,5,7,9])
堆叠柱状图
view = pygal.StackedBar()
横向柱状图
view = pygal.HorizontalStackedBar()
折线图
简单折线图
import pygal
view = pygal.Line()
#图表名
view.title = '折线图'
#添加数据
view.add('numbers', [0,2,4,6,8,10])
view.add('numbers_2', [0,1,3,5,7,9])
#在浏览器中查看
#view.render_in_browser()
#保存为view.svg(也可以保存为jpg)
view.render_to_file('view.svg')
效果图:
纵向折线图
view = pygal.HorizontalLine()
堆叠折线图
view = pygal.StackedLine(fill=True)
饼状图
简单饼状图
import pygal
view = pygal.Pie()
#图表名
view.title = '饼状图'
#添加数据
view.add('A', 31)
view.add('B', 55)
view.add('C', 14)
#保存为view.svg(也可以保存为jpg)
view.render_to_file('view.svg')
效果图:
多级饼状图
#添加数据
view.add('A', [31,25])
view.add('B', [55,38])
view.add('C', [14,37])
圆环图
#设置空心圆半径
view = pygal.Pie(inner_radius=0.4)
半圆图
view = pygal.Pie(half_pie=True)
雷达图
基础雷达图
import pygal
view = pygal.Radar()
#图表名
view.title = '雷达图'
#添加数据(可以为任意个)
view.add('A', [31,56,34,67,34])
view.add('B', [23,18,57,45,35])
view.add('C', [14,45,76,34,76])
#保存为view.svg(也可以保存为jpg)
view.render_to_file('view.svg')
效果图:
其他图表介绍
直方图
盒子图
圆点图
坐标图
锥形图
环状图
仪表图
塔形图
树图
地图
爬取中国福彩网彩票数据并以图表形式显示
网页分析
首先打开中国福彩网,点击双色球,选择往期开奖栏目
进入栏目后,选定往期的奖金数目作为我们想要爬取的目标内容
明确目标后,开始寻找数据所在的位置
鼠标右击页面,打开网页源代码,在源代码中搜索是否存在奖金金额数目
搜索过后,发现这个金额数据没有在网页的源代码中,所以想到用抓包的方式来尝试获取这些金额数据
右击检查,选择network选项卡,按下ctrl+r键刷新界面,开始捕捉数据包
在过滤掉一些png、jpg的数据包之后,我们锁定了一个以findDrawNotice开头的数据包,打开观察数据包的内容,发现这个正是我们想要抓取的数据包
现在已经找到了想要抓包的内容,现在可以开始着手写代码了
数据提取
我们分析过网页之后,选定了要抓取的数据包,开始使用requests请求来获取数据
url = 'http://www.cwl.gov.cn/cwl_admin/kjxx/findDrawNotice?name=ssq&issueCount=30'
headers = {
"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36",
"Referer":"http://www.cwl.gov.cn/kjxx/ssq/"
}
response = requests.get(url,headers=headers).text
这个网页可能会有一个小的反爬措施,于是我们就在headers中加入user-agent和referer两个头信息
我们使用print语句来打印一下response的内容
print之后会发现这个内容是以字符串的格式打印出来的,如果我们想从中提取数据,则必须将它转换成字典的格式
data_json = json.loads(response) #将数据转换为json格式
将数据转换之后,我们就可以使用键值对的方式来提取我们想要的数据了
datas = data_json["result"]
for data in datas:
prizegrades = data["prizegrades"] #包含中奖金额的字典提取
for item in prizegrades:
print(item)
typemoney = item['typemoney'] #中奖金额提取
print(typemoney)
这里我们尝试着逐层提取彩票的奖金信息,提取到最近的一层时,将数据打印出来分析数据
可以看到前三个和我们想要提取的数据内容是一致的,这些type后面的数字指的是奖金的等级,就是说对应到的号码是多少就是几等奖
到此为止,我们已经将需要获取的中奖金额提取出来了
转换数据
等我们看到这些数据的时候,虽然看到的是数字形式,但是他的数据类型确是字符形,通过此前对pygal模块的了解,我们知道这个模块只可以将整形的数字转换成图表格式。
所以我们需要做的就是将每一个数字提取出来,并且转换成整形存入到列表中
由于我们想要提取的只是一等奖的奖金金额(因为二、三等奖的金额远小于一等奖,不适合在图表中观察),所以这里我加上了一个if语句判断
money_list = [] #创建空列表
for data in datas:
prizegrades = data["prizegrades"]
for item in prizegrades:
type_num = item['type']
typemoney = item['typemoney']
if type_num == 1: #判断奖金等级是否为1
money_list.append(int(typemoney))
但是我在运行这段代码的时候会提示错误,经过我的一番疯狂分析(百度求助),发现出错的原因是在提取奖金的时候会出现下划线和空字符串的干扰,而int转换数据类型则只能装换纯数字组成的字符串,所以转换的过程中会报错。但是这并不是一个大问题,我们只需要写一个if语句来跳过非法字符串就可以解决了,下面是正确的代码:
money_list = [] #创建空列表
for data in datas:
prizegrades = data["prizegrades"]
for item in prizegrades:
typemoney = item['typemoney']
if type_num == 1: #判断奖金等级是否为1
if typemoney == "": #忽略空字符
pass
elif typemoney == "_": #忽略下划线
pass
else: #将其他的可用数字放入列表
money_list.append(int(typemoney))
print(money_list)
观察输出:
将数据转换成图表
#设置图表样式为柱状图
view = pygal.Bar()
#图表名
view.title = '奖金金额(¥)'
#将数据填入图表
view.add('money',money_list)
#在浏览器中显示图表
view.render_in_browser()
完整代码
import json
import pygal
url = 'http://www.cwl.gov.cn/cwl_admin/kjxx/findDrawNotice?name=ssq&issueCount=30'
headers = {
"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36",
"Referer":"http://www.cwl.gov.cn/kjxx/ssq/"
}
response = requests.get(url,headers=headers).text
data_json = json.loads(response)
datas = data_json["result"]
money_list = [] #创建空列表
for data in datas:
prizegrades = data["prizegrades"]
for item in prizegrades:
type_num = item['type']
typemoney = item['typemoney']
if type_num == 1: #判断奖金等级是否为1
if typemoney == "": #忽略空字符
pass
elif typemoney == "_": #忽略下划线
pass
else: #将其他的可用数字放入列表
money_list.append(int(typemoney))
#设置图表样式为柱状图
view = pygal.Bar()
#图表名
view.title = '奖金金额(¥)'
#将数据填入图表
view.add('money',money_list)
#在浏览器中显示图表
view.render_in_browser()
实现结果
Python数据可视化---pygal模块的更多相关文章
- Python数据可视化编程实战——导入数据
1.从csv文件导入数据 原理:with语句打开文件并绑定到对象f.不必担心在操作完资源后去关闭数据文件,with的上下文管理器会帮助处理.然后,csv.reader()方法返回reader对象,通过 ...
- Python数据可视化编程实战pdf
Python数据可视化编程实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1vAvKwCry4P4QeofW-RqZ_A 提取码:9pcd 复制这段内容后打开百度 ...
- python数据可视化编程实战PDF高清电子书
点击获取提取码:3l5m 内容简介 <Python数据可视化编程实战>是一本使用Python实现数据可视化编程的实战指南,介绍了如何使用Python最流行的库,通过60余种方法创建美观的数 ...
- Python数据可视化 -- Wordcloud
Python数据可视化 -- Wordcloud 安装 启动命令行,输入:pip install wordcloud word cloud 库介绍 及简单使用 wordcloud库,可以说是pytho ...
- python数据可视化-matplotlib入门(7)-从网络加载数据及数据可视化的小总结
除了从文件加载数据,另一个数据源是互联网,互联网每天产生各种不同的数据,可以用各种各样的方式从互联网加载数据. 一.了解 Web API Web 应用编程接口(API)自动请求网站的特定信息,再对这些 ...
- Python数据可视化——使用Matplotlib创建散点图
Python数据可视化——使用Matplotlib创建散点图 2017-12-27 作者:淡水化合物 Matplotlib简述: Matplotlib是一个用于创建出高质量图表的桌面绘图包(主要是2D ...
- Python数据可视化-seaborn库之countplot
在Python数据可视化中,seaborn较好的提供了图形的一些可视化功效. seaborn官方文档见链接:http://seaborn.pydata.org/api.html countplot是s ...
- 【数据科学】Python数据可视化概述
注:很早之前就打算专门写一篇与Python数据可视化相关的博客,对一些基本概念和常用技巧做一个小结.今天终于有时间来完成这个计划了! 0. Python中常用的可视化工具 Python在数据科学中的地 ...
- Python数据可视化的四种简易方法
摘要: 本文讲述了热图.二维密度图.蜘蛛图.树形图这四种Python数据可视化方法. 数据可视化是任何数据科学或机器学习项目的一个重要组成部分.人们常常会从探索数据分析(EDA)开始,来深入了解数据, ...
随机推荐
- 泛微E-cology OA 远程代码执行漏洞
分析文章:https://dwz.cn/bYtnsKwa http://127.0.0.1/weaver/bsh.servlet.BshServlet 若存在如上页面,则用下面数据包进行测试. POS ...
- dijkstra模板题 洛谷1339 邻接图建边
题目链接:https://www.luogu.com.cn/problem/P1339 朴素dijkstra算法的复杂度是O(n^2),用堆优化的dijkstra复杂度是O(nlogn)的.在本题中前 ...
- node 模块载入原理【1】
简单介绍 我们会从简单的模块载入原理来开始,尝试阅读下 Node.js 源代码.首先我们知道 Node.js 的源代码主要是由 C++ 和 JavaScript 编写的,JS 部分主要在 lib 目录 ...
- Building Applications with Force.com and VisualForce (DEV401) (二四):JavaScript in Visualforce
Dev401-025:Visualforce Pages: JavaScript in Visualforce Module Objectives1.Describe the use of AJAX ...
- Jmeter接口测试之参数化(十)
在接口测试中,某些时候一些场景会使用到参数化的场景,参数化简单的说就是同一个请求需要不同的数据,比如在性能测试中需要并发多个用户的场景,这样的目的是为了模拟真实的用户场景,需要模拟不同的账号,这里就需 ...
- 【Redis】入门
Redis概述 Redis常用数据结构 Redis删除过期数据策略 Redis内存淘汰机制 Redis持久化机制 缓存问题及解决方案 Redis概述 Redis是一个开源的.基于内存的数据结构存储器 ...
- 死磕Lambda表达式(六):Consumer、Predicate、Function复合
你的无畏来源于无知.--<三体> 在上一篇文章(传送门)中介绍了Comparator复合,这次我们来介绍一下其他的复合Lambda表达式. Consumer复合 Consumer接口中,有 ...
- element的多文件上传
项目需求: 可上传多个文件 可删除 文件过大时用户输入可上传至其他网站,并将文件名和地址上传至本网站 问题点: 大文件用户输入内容无法合并到已上传文件的列表进行展示 上传多个大文件地址时前面已上传的大 ...
- 细数Java项目中用过的配置文件(ini 篇)
Java 菜鸟,会把可变的配置信息写死在代码里:Java 老鸟,会把可变的配置信息提取到配置文件中.坊间流传这么一句非科学的衡量标准,来评判程序员的级别. 那么,项目中的配置信息,你平时都是怎样来实现 ...
- SpringBoot 入门:项目属性配置
开发一个SpringBoot 项目,首当其冲,必然是配置项目 一.项目属性配置 1. SpringBoot自带了Tomcat服务器,通过使用项目配置文件来修改项目的配置,如图配置了部署在80端口,目录 ...