Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Python中使用Pygal进行交互可视化

在Python中使用Pygal进行交互可视化

作者头像
HuangWeiAI
发布于 2021-03-12 09:07:52
发布于 2021-03-12 09:07:52
1.4K00
代码可运行
举报
文章被收录于专栏:浊酒清味浊酒清味
运行总次数:0
代码可运行

1

前言

我们需要处理、分析和探索的大量数据;随着技术的进步,这个数字只会越来越大。现在,想象一下必须盯着电子表格中的数千行数据,试图找到隐藏的模式并追踪数字的变化。这就是数据可视化的切入点。拥有可视化的信息摘要比浏览电子表格更容易识别模式和趋势。由于数据分析的目的是获得见解和发现模式,将数据可视化将使其更有价值,更容易探索。不同类型的图表和图表使交流数据发现更快和更有效。

可视化数据的重要性不仅仅是简化数据的解释。可视化数据有很多好处,比如:

  1. 显示数据随时间的变化。
  2. 确定相关事件发生的频率。
  3. 指出不同事件之间的相关性。
  4. 分析不同机会的价值和风险。

在本文中,我们将介绍一个Python库,它可以帮助我们创建引人注目的、令人惊叹的、交互式的可视化。它就是Pygal

2

Pygal介绍

当使用Python可视化数据时,大多数数据科学家使用臭名昭著的Matplotlib、Seaborn或Bokeh。然而,一个经常被忽视的库是Pygal。Pygal允许用户创建漂亮的交互式图,这些图可以以最佳的分辨率转换成svg,以便使用Flask或Django打印或显示在网页上。

熟悉Pygal

Pygal提供了各种各样的图表,我们可以使用它们来可视化数据,确切地说,Pygal中有14种图表类别,比如柱状图、柱状图、饼状图、树形图、测量图等等。

要使用Pygal,我们得先安装它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip install pygal

我们来画第一张图。我们将从最简单的字符开始,一个条形图。要使用Pygal绘制条形图,我们需要创建一个图表对象,然后向其添加一些值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bar_chart = pygal.Bar()

我们将绘制0到5的阶乘。在这里,我定义了一个简单的函数来计算一个数字的阶乘,然后使用它生成一个数字从0到5的阶乘列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def factorial(n):
    if n == 1 or n == 0:
        return 1
    else:
        return n * factorial(n-1)
fact_list = [factorial(i) for i in range(11)]

现在,我们可以使用它来创建我们的绘图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bar_chart = pygal.Bar(height=400)
bar_chart.add('Factorial', fact_list)
display(HTML(base_html.format(rendered_chart=bar_chart.render(is_unicode=True))))

这将生成一个漂亮的交互图

如果我们想要绘制不同类型的图表,我们将遵循相同的步骤。您可能已经注意到,用于将数据链接到图表的主要方法是add方法。

现在,让我们开始基于实际数据构建一些东西。

应用

接下来,我将使用美国COVID-19病例数据集来解释Pygal的不同方面。

首先,为了确保一切顺利进行,我们需要确保两件事:

  • Pandas和Pygal都装上了。
  • 在jupiter Notebook中,我们需要启用IPython显示和HTML选项。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from IPython.display import display, HTML
base_html = """
<!DOCTYPE html>
<html>
  <head>
  <script type="text/javascript" src="http://kozea.github.com/pygal.js/javascripts/svg.jquery.js"></script>
  <script type="text/javascript" src="https://kozea.github.io/pygal.js/2.0.x/pygal-tooltips.min.js""></script>
  </head>
  <body>
    <figure>
      {rendered_chart}
    </figure>
  </body>
</html>
"""

现在我们已经设置好了,我们可以开始使用Pandas来探索我们的数据,然后使用不同类型的图表来操作和准备它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pygal
import pandas as pd
data = pd.read_csv("https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv")

该数据集包含基于日期、县和州的COVID-19病例和死亡信息。我们可以通过data.column看出这一点。列,以了解数据的形状。执行该命令将返回:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Index(['date', 'county', 'state', 'fips', 'cases', 'deaths'], dtype='object')

我们可以获得一个10行的样本来查看我们的数据帧是什么样子的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data.sample(10)

条形图

让我们首先绘制一个柱状图,显示每个状态的案例数的平均值。为此,我们需要执行以下步骤:

将数据按状态分组,提取每个状态的案例号,然后计算每个状态的平均值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mean_per_state = data.groupby('state')['cases'].mean()

开始构建数据并将其添加到条形图中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
barChart = pygal.Bar(height=400)
[barChart.add(x[0], x[1]) for x in mean_per_state.items()]
display(HTML(base_html.format(rendered_chart=barChart.render(is_unicode=True))))

瞧,我们有一个条形图。我们可以通过从图例列表中取消选择来删除数据,也可以通过重新选择来重新添加数据。

柱状图的完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#Import needed libraries
import pygal
import pandas as pd
#Parse the dataframe
data = pd.read_csv("https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv") 
#Get the mean number of cases per states
mean_per_state = data.groupby('state')['cases'].mean()
#Draw the bar chart
barChart = pygal.Bar(height=400)
[barChart.add(x[0], x[1]) for x in mean_per_state.items()]
display(HTML(base_html.format(rendered_chart=barChart.render(is_unicode=True))))

Treemap

条形图有助于显示整体数据,但如果我们想要更具体,我们可以选择不同类型的char,即treemap。树图对于显示数据中的类别非常有用。例如,在我们的数据集中,我们有基于每个州每个县的病例数量。柱状图显示了每个州的均值,但我们看不到每个州每个县的病例分布。一种方法是使用树图。

假设我们想要查看案例数量最多的10个州的详细案例分布情况。然后,在绘制数据之前,我们需要先对数据进行操作。

我们需要根据案例对数据进行排序,然后按州进行分组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sort_by_cases = data.sort_values(by=['cases'],ascending=False).groupby(['state'])['cases'].apply(list)

使用排序列表来获得案例数量最多的前10个州。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
top_10_states = sort_by_cases[:10]

使用这个子列表来创建我们的树图。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
treemap = pygal.Treemap(height=400)
[treemap.add(x[0], x[1][:10]) for x in top_10_states.items()]
display(HTML(base_html.format(rendered_chart=treemap.render(is_unicode=True))))

然而,这个树图没有被标记,所以当我们悬停在方块上时,我们无法看到县名。我们将在该州的所有县街区上看到该州的名称。为了避免这种情况并将县名添加到我们的treemap中,我们需要标记向图表提供的数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#Import needed libraries
import pygal
import pandas as pd
#Parse the dataframe
data = pd.read_csv("https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv") 
#Sort states by cases count
sort_by_cases = data.sort_values(by=['cases'],ascending=False).groupby(['state'])['cases'].apply(list)
#Get the top 10 states with the highest number of cases
top_10_states = sort_by_cases[:10]
#Draw the treemap
treemap = pygal.Treemap(height=400)
[treemap.add(x[0], x[1][:10]) for x in top_10_states.items()]
display(HTML(base_html.format(rendered_chart=treemap.render(is_unicode=True))))

在此之前,我们的数据每天都会更新。因此,每个县将进行几次重复。因为我们关心每个县的病例总数,所以在将数据添加到树图之前,我们需要清理数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#Get the cases by county for all states
cases_by_county = data.sort_values(by=['cases'],ascending=False).groupby(['state'], axis=0).apply(
    lambda x : [{"value" : l, "label" : c } for l, c in zip(x['cases'], x['county'])])
cases_by_county= cases_by_county[:10]
#Create a new dictionary that contains the cleaned up version of the data
clean_dict = {}
start_dict= cases_by_county.to_dict()
for key in start_dict.keys():
    values = []
    labels = []
    county = []
    for item in start_dict[key]:
        if item['label'] not in labels:
            labels.append(item['label'])
            values.append(item['value'])
        else:
            i = labels.index(item['label'])
            values[i] += item['value']
    
    for l,v in zip(labels, values):
        county.append({'value':v, 'label':l})
    clean_dict[key] = county
#Convert the data to Pandas series to add it to the treemap
new_series = pd.Series(clean_dict)

然后,我们可以将该系列添加到treemap,并绘制它的标记版本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
treemap = pygal.Treemap(height=200)
[treemap.add(x[0], x[1][:10]) for x in new_series.iteritems()]
display(HTML(base_html.format(rendered_chart=treemap.render(is_unicode=True))))

太棒了!现在我们的树形图被标记了。如果将鼠标悬停在这些块上,就可以看到县的名称、州和该县的病例数。

完整的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#Import needed libraries
import pygal
import pandas as pd
#Parse the dataframe
data = pd.read_csv("https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv") 
#Get the cases by county for all states
cases_by_county = data.sort_values(by=['cases'],ascending=False).groupby(['state'], axis=0).apply(
    lambda x : [{"value" : l, "label" : c } for l, c in zip(x['cases'], x['county'])])
cases_by_county= cases_by_county[:10]
#Create a new dictionary that contains the cleaned up version of the data
clean_dict = {}
start_dict= cases_by_county.to_dict()
for key in start_dict.keys():
    values = []
    labels = []
    county = []
    for item in start_dict[key]:
        if item['label'] not in labels:
            labels.append(item['label'])
            values.append(item['value'])
        else:
            i = labels.index(item['label'])
            values[i] += item['value']
    
    for l,v in zip(labels, values):
        county.append({'value':v, 'label':l})
    clean_dict[key] = county
#Convert the data to Pandas series to add it to the treemap
new_series = pd.Series(clean_dict)
#Draw the treemap
treemap = pygal.Treemap(height=200)
[treemap.add(x[0], x[1][:10]) for x in new_series.iteritems()]
display(HTML(base_html.format(rendered_chart=treemap.render(is_unicode=True))))

饼状图

我们可以用另一种形式来展示这一信息,那就是用饼状图来展示案例数量最多的10个州。使用饼状图,我们可以看到一个州的案例数相对于其他州的百分比。

由于我们已经完成了所有的数据帧操作,我们可以使用它来立即创建饼图。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
first10 = list(sort_by_cases.items())[:10]
[pi_chart.add(x[0], x[1]) for x in first10]
display(HTML(base_html.format(rendered_chart=pi_chart.render(is_unicode=True))))

饼状图的完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#Import needed libraries
import pygal
import pandas as pd
#Parse the dataframe
data = pd.read_csv("https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv") 
#Get the mean number of cases per states
sort_by_cases = data.sort_values(by=['cases'],ascending=False).groupby(['state'])['cases'].apply(list)
#Draw the bar chart
pi_chart = pygal.Pie(height=400)
#Get the top 10 states
first10 = list(sort_by_cases.items())[:10]
[pi_chart.add(x[0], x[1]) for x in first10]
display(HTML(base_html.format(rendered_chart=pi_chart.render(is_unicode=True))))

·END·

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python学会 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
COVID-19数据分析实战:统计分析及可视化
第一篇文章和第二篇文章我们对line list 数据集进行清洗,以及对文本内容进行词云分析。
统计学家
2020/05/25
1.7K0
COVID-19数据分析实战:统计分析及可视化
教你几招,Pandas 轻松处理超大规模数据
处理大规模数据集时常是棘手的事情,尤其在内存无法完全加载数据的情况下。在资源受限的情况下,可以使用 Python Pandas 提供的一些功能,降低加载数据集的内存占用。可用技术包括压缩、索引和数据分块。
昱良
2020/11/03
1.2K0
教你几招,Pandas 轻松处理超大规模数据
5行代码搞定14种常见图的python可视化库,还自带16种优美主题,真是太喜欢了
pygal比较小众,专注于SVG图,擅长交互,最主要的是它能用非常少的代码就可画出非常漂亮的图形
Python进阶者
2021/03/09
5360
5行代码搞定14种常见图的python可视化库,还自带16种优美主题,真是太喜欢了
干货分享 | 用Streamlit来制作数据可视化面板实战
在上回初步介绍了“steamlit”框架的基本用法之后(干货分享 | 用 Streamlit 来制作数据可视化面板教程(一)),这回我们动手来实践一下,用“streamlit”框架来制作一个可视化仪表盘,用到的数据是印度在新冠病毒的影响之下病例数据,包括了印度每个州的“死亡数据”、“治愈数据”、“确诊数据”以及“活跃病例”,感兴趣的童鞋也可以一起动手来实现一下。
用户6888863
2021/07/19
2.5K1
为了这个GIF,我专门建了一个网站
我已经用streamlit+bar_chart_race实现了,然后白嫖了heroku的服务器,大家通过下面的网址上传csv格式的表格就可以轻松制作条形竞赛图,生成的视频可以保存本地。
统计学家
2021/12/27
7740
为了这个GIF,我专门建了一个网站
生信技巧 | GNU 并行操作
有些分析需要很长时间,因为它在单个处理器上运行并且有大量数据需要处理。如果数据可以分成块并单独处理,那么问题就被认为是可并行化的。
数据科学工厂
2023/09/20
3050
生信技巧 | GNU 并行操作
图解大数据 | 综合案例-使用spark分析新冠肺炎疫情数据
教程地址:http://www.showmeai.tech/tutorials/84
ShowMeAI
2022/03/08
5.3K0
图解大数据 | 综合案例-使用spark分析新冠肺炎疫情数据
Pygal,可导出矢量图的Python可视化利器
Python有很多优秀的可视化库,其中有名的像matplotlib、seaborn、plotly,可以绘制出各式绚丽的图表。
DataCharm
2021/02/22
1.3K0
Pygal,可导出矢量图的Python可视化利器
【学习】Python可视化工具概述-外文编译
本文由 PPV课 - korobas 翻译,未经许可,禁止转载! 原文翻译链接:http://pbpython.com/visualization-tools-1.html 一、介绍 在Python中,有很多数据可视化途径。因为这种多样性,造成很难选择。本文包括一些比较常见的可视化工具的样例,并将指导如何利用它们来创建简单的条形图。我将采用下面的工具来创建绘图数据示例: Pandas Seaborn ggplot Bokeh pygal Plotly 在实例中,我们利用pandas来操作数据,驱动
小莹莹
2018/04/23
2.1K0
【学习】Python可视化工具概述-外文编译
使用公开可用的FracFocus数据和Python的Matplotlib函数可视化二叠纪盆地石油和天然气公司的完井策略
最近写了一些脚本,自动数据来自公开的FracFocus数据库,这是一个政府运营的数据源,提供了在美国非常规石油和天然气完井工作中泵送的水力压裂化学品的全面列表。该数据库是一个很好的资源 - 不仅适用于公众,也适用于希望对其他运营商的完井策略进行竞争情报分析的石油和天然气公司。随着这个宝库的数据随时可用,想用它做一些分析。在今天的帖子中使用Python中的基本数据可视化包Matplotlib,分析了西德克萨斯州二叠纪盆地的运营商完井信息。
代码医生工作室
2019/07/16
6390
使用公开可用的FracFocus数据和Python的Matplotlib函数可视化二叠纪盆地石油和天然气公司的完井策略
深度好文 | Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)
在数据分析和可视化中最有用的 50 个 Matplotlib 图表。 这些图表列表允许您使用 python 的 matplotlib 和 seaborn 库选择要显示的可视化对象。
数据派THU
2019/05/09
1.7K0
深度好文 | Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)
技巧|Python 制作动态图表的正确方式
关于动态图表,相信大家都或多或少的接触过一些,如果是代码水平比较不错的,可以选择 Matplotlib,当然也可以使用 pyecharts 的相关功能,不过这些工具都专注于图表的制作,也就是对于图表的数据,你是需要自行转换的。而今天介绍的这个可视化图库,完美的结合了 Pandas 数据格式,又辅以 Matplotlib 的强大功能,使得我们制作动图变得容易的多了。
码农向前冲
2021/12/22
1.5K2
技巧|Python 制作动态图表的正确方式
如何用Jupyter Notebook制作新冠病毒疫情追踪器?
新冠肺炎已在全球范围内爆发。为了解全球疫情分布情况,有技术人员使用Jupyter Notebook绘制了两种疫情的等值线地图(choropleth chart)和散点图。
AI科技大本营
2020/03/18
8070
50个数据可视化最有价值的图表(附完整Python代码)
导读:本文总结了 Matplotlib 以及 Seaborn 用的最多的50个图形,掌握这些图形的绘制,对于数据分析的可视化有莫大的作用,强烈推荐大家阅读后收藏。
IT阅读排行榜
2019/03/11
2.1K0
50个数据可视化最有价值的图表(附完整Python代码)
看完这篇文章,我彻底爱上了Python动态图表!
关于动态条形图,小F以前推荐过「Bar Chart Race」这个库。三行代码就能实现动态条形图的绘制。
小F
2020/12/16
8190
看完这篇文章,我彻底爱上了Python动态图表!
一个小众但很好用的数据可视化利器:Pygal矢量库
当使用Python可视化数据时,大多数数据科学家会选择使用著名的Matplotlib、Seaborn或Bokeh。Matplotlib 以其强大的功能而闻名,Seaborn 以其易用性而闻名,Bokeh 以其交互性而闻名,Plotly 以其协作而闻名,其实Pygal也很惊艳,Pygal允许用户创建漂亮的交互式图,这些图可以以最佳的分辨率转换成svg,以便使用Flask或Django打印或显示在网页上。
数据STUDIO
2022/05/24
9490
一个小众但很好用的数据可视化利器:Pygal矢量库
【5】数据可视化pygal,画出美观的图表
去官网https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer下载
汀丶人工智能
2022/12/21
5060
【5】数据可视化pygal,画出美观的图表
新冠肺炎的可视化和预测分析(附代码)
新冠肺炎现在情况怎么样了?推荐一份Jupyter notebook代码进行了分析,把数据可视化,并对感染人数进行了预测。 来源:https://www.kaggle.com/corochann/cov
黄博的机器学习圈子
2020/04/21
1.8K1
新冠肺炎的可视化和预测分析(附代码)
6个令人称赞的Python可视化库
今天给大家介绍6个Python可视化库:matplotlib、seaborn、plotly、Bokeh、altair、pygal
皮大大
2024/12/14
5530
精选6种制作竞赛动图的方法,收藏!
上面的两个动图,就是条形竞赛图和折线竞赛图,今天我们就来看看都有哪些方便的方法来制作呢
周萝卜
2022/02/10
1.4K0
精选6种制作竞赛动图的方法,收藏!
推荐阅读
相关推荐
COVID-19数据分析实战:统计分析及可视化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验