使用Plotly和Python进行交互式数据可视化

news2024/12/22 22:37:16

使用Plotly和Python进行交互式数据可视化

Python是数据探索和数据分析的好帮手,这都要归功于numpy、pandas、matplotlib等神奇库的支持。在我们的数据探索和数据分析阶段,理解我们正在处理的数据是非常重要的,为此,数据的可视化表示可能是非常重要的。

对我们来说,使用Jupyter笔记本来完成这些项目是很常见的,因为它们很好,很快速,很简单,而且它们允许我们与我们的数据进行互动和游戏。然而,我们能做的事情是有限制的,通常我们在处理图表时,会使用matplotlib或seaborn等库,但这些库会呈现出我们的图表和图形的静态图像。但是,很多东西会在细节中丢失,因此我们需要对我们的图表进行微调,以探索我们数据的各个部分。如果我们可以通过缩放来与我们的图表互动,为我们的数据点添加上下文信息,如悬停互动,那不是很好吗?这里就是Plotly可以帮助我们的地方。

Plotly是一个Python库,可以制作交互式的、具有出版质量的图表,如线图、散点图、面积图、条形图、误差条、箱形图、直方图、热图、子图,以及更多更多。

但我们谈得够多了,让我们开始制作一些图表......


安装依赖项

在我们构建任何东西之前,让我们先安装依赖性。我喜欢使用pipenv ,但同样适用于Anaconda或其他软件包管理器。

下面是我们需要的依赖项的列表:

  • jupyter。网络应用程序,允许你创建和分享包含实时代码的文档,方程式....,你知道的!
  • pandas。非常强大的数据分析库,我们将在我们的项目中使用它来处理我们的数据
  • numpy。Python的科学计算,在我们的项目中用于数学和生成随机数
  • seaborn。基于matplotlib的统计数据可视化,我们将使用它来加载库中的一些样本数据。
  • cufflinks。允许 plotly 与 pandas 一起工作
  • plotly。交互式图表库

以下是安装它们的命令:

pipenv install jupyter
pipenv install plotly cufflinks pandas seaborn numpy
复制代码

入门

为了开始,我们需要启动我们的 jupyter 笔记本并创建一个新的文档:

pipenv run jupyter notebook
复制代码

一旦我们在那里,我们可以开始添加一些代码。由于这篇文章不是一个关于Jupyter笔记本的教程,我将只关注代码,而不是如何使用文档的问题。

让我们开始导入库:

import pandas as pd
import numpy as np
import seaborn as sns
import cufflinks as cf
复制代码

Plotly在其他库的帮助下可以在不同的背景下呈现图,例如在jupyter笔记本上,在plotly仪表盘上在线,等等。默认情况下,该库在离线模式下工作,这正是我们想要的。然而,我们还需要告诉cufflinks,我们将对图表使用离线模式。这个设置可以通过在我们的笔记本上添加以下单元格来以编程方式完成:

cf.go_offline()
复制代码

现在我们已经准备好获取一些数据并开始绘图了。


生成随机数据

我不想过多地关注如何加载或检索数据,因此,为此,我们将简单地为图表生成随机数据,在一个新的单元格中,我们可以使用pandas和numpy来建立一个3D矩阵:

df = pd.DataFrame(np.random.randn(300, 3), columns = ["X", "Y", "Z"])
df.head()
复制代码

太棒了,使用numpy我们可以生成我们的随机数,我们可以把它们加载到pandas DataFrame对象中。让我们看看我们的数据是什么样子的:

df.head()
复制代码

而我们得到的是:

          X              Y             Z
0      0.176117      1.221648      1.201206
1      1.931615      -2.303667     1.914741
2      1.213322      -0.434855     -0.639277
3      0.763220      0.118211      -0.838034
4      0.245442      0.697897      1.169540
复制代码

这很好!是时候绘制一些图表了。


我们的第一张图

绘制DataFrame的一个方便的方法是使用Series和DataFrames上可用的iplot方法,这是cufflinks的功劳。让我们从所有的默认值开始。

df.iplot()
复制代码

折线图 - 所有默认值

简单来看,它和其他图表一样,但是如果你把鼠标悬停在图表上,你就会看到一些神奇的东西。在屏幕右上方悬停时,会出现一个工具栏,允许你进行缩放、平移和其他操作。该图表还允许你通过在图表上画出一个区域来放大,或者简单地在每个数据点上看到一个工具提示,上面有附加信息,如数值。

我们上面的图表当然比静态图表好,但是仍然不是很好。让我们试着用散点图来呈现同样的图表。

df.iplot(mode = "markers")
复制代码

标记图

不是很糟糕,但也不是很好,这些点太大了,让我们调整一下它们的大小。

df.iplot(mode = "markers", size = 5)
复制代码

标记图--自定义数据点大小

好多了!接下来,让我们试试不同的东西。

柱状图

让我们暂时忘记我们随机生成的数据集,让我们从seaborn库中加载一个流行的数据集来渲染一些其他的图表类型。

titanic = sns.load_dataset("titanic")
titanic.head()
复制代码

我们将要处理的数据集叫做 "泰坦尼克号",它包含了关于在那个悲惨的日子里在泰坦尼克号上旅行的人所发生的事情的信息。

这个数据集中的一个特殊变量是survived ,它包含布尔信息,0代表死亡的人,1代表事故中幸存的人。让我们建立一个柱状图,看看有多少男人和女人幸存下来:

titanic.iplot(kind = "bar", x = "sex", y = "survived")
复制代码

柱状图

趋势很容易看到,但是,如果你只是分享这个图表,就不可能知道我们在说什么,因为它没有图例,也没有标题。因此,让我们来解决这个问题:

titanic.iplot(kind = "bar", x = "sex", y = "survived", title = "Survivors", xTitle = "Sex", yTitle = "Number of survived")
复制代码

带标题的条形图

这样就好多了

但是,如果我们想画一个水平条形图呢?很简单。

titanic.iplot(kind = "barh", x = "sex", y = "survived")
复制代码

水平条形图

很好!让我们来探索一些更多的功能


主题

到目前为止,我们的图表看起来不错,但也许我们想为我们的图表使用不同的颜色模式。幸运的是,我们有一组主题,我们可以用它们来渲染我们的图。让我们列出它们,然后切换到另一个。

列出主题:

cf.getThemes()
复制代码

它应该输出如下内容:

['ggplot', 'pearl', 'solar', 'space', 'white', 'polar', 'henanigans']
复制代码

我们可以通过简单的添加来切换所有未来图表的主题:

cf.set_config_file(theme="solar")
复制代码

现在,如果我们再次渲染我们的条形图,我们会得到这样的东西:

titanic.iplot(kind = "bar", x = "sex", y = "survived")
复制代码

带有太阳能主题的条形图

黑暗模式,是我的最爱之一,但请检查一下,让我知道哪一个是你的最爱。


表面图表

到目前为止,我们渲染了惊人的2D图表,但plotly也支持3D图表。让我们建立一些3D图表来享受一些乐趣。我们要做的下一个图表是三维表面图,为此,我们需要用pandas创建一些数据,如下图所示。

df = pd.DataFrame({"A": [100, 200, 300, 200, 100], "B": [100, 200, 300, 200, 100], "C": [100, 200, 300, 200, 100]})
df.head()
复制代码

你应该得到类似的东西:

        A        B	  C
0      100      100      100
1      200      200      200
2      300      300      300
3      200      200      200
4      100      100      100
复制代码

现在,让我们用 "表面 "的方式把它放到一个三维图表上:

df.iplot(kind = "surface")
复制代码

 表面图

看起来真不错!而且色彩鲜艳,让我们改变一下色阶,让它在视觉上更吸引人:

df.iplot(kind = "surface", colorscale = "rdylbu")
复制代码

带有自定义色标的表面图

真漂亮但这还不算完,你试过在笔记本上与图表互动吗?你甚至可以旋转它!


总结

Plotly是一个伟大的图表替代品,用于你的数据探索和分析。正如所见,它提供的交互式仪表盘可以帮助你更好地识别你的异常值,并通过导航来更好地了解你的数据。我可能不会对每一个数据集都使用 plotly,但它是一个非常有趣的库,我们应该了解一下。

谢谢你的阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Swin-Transformer算法解析

本文参考: SwinTransformer:使用shifted window的层级Transformer(ICCV2021)_tzc_fly的博客-CSDN博客 https://zhuanlan.zhihu.com/p/430047908 目录 1 为什么在视觉中使用Transformer 2 Swin-Transformer算法总体架构 3 Swin-Transformer Block详述…

C# 源码 等值线(等高线)云图绘制 ,图上含等高线数值

C# 源码 数据格式为XYZ数据,XY为坐标,Z为对应的值 X Y Z -0.671053 -0.850000 83.330742 -0.671053 -0.850000 85.469604 -0.671053 -0.760526 89.225899 -0.671053 -0.760526 86.994576 -0.671053 -0.760526 86.994576 -0.671053 -0.760526 89.225899 -…

【解读】《云事件响应框架》:云服务用户响应和管理事件首选指南

微信搜索”国际云安全联盟“,回复关键词“云事件”下载本报告 当今互联时代,全面的事件响应策略对于需要管理与降低风险的组织必不可少。然而,在基于云的基础设施和系统的事件响应策略方面,部分由于云的责任共担特性,…

sql的四种连接——左外连接、右外连接、内连接、全连接

一、内连接 满足条件的记录才会出现在结果集中。 二、 左外连接(left outer join,outer可省略) 左表全部出现在结果集中,若右表无对应记录,则相应字段为NULL 举例说明: 客户表: 订单表&#x…

2023年2月系统集成项目管理工程师认证【报名入口】

系统集成项目管理工程师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职…

Qt 根据参数 自动生成vs 工程

一,需求 给算法部门提供一套代码框架,让其写算法dll。为了使dll能融入主工程,其框架对格式有一定要求,为了增加算法部门的快发效率,因此开发一个小工具,用于自动生成这套框架。 运行后,只需要…

cdh+dolphinscheduler开启kerberos

搭建环境多台linux主机搭建集群CDH 6.3.2 (Parcel)版本dolphinscheduler 1.3.2版本本流程在CDH已搭建完成并可正常使用后,开启kerberos功能dolphinscheduler用于大数据任务管理与执行,是很不错的任务调度平台,是否提前部署均可开启kerberos目…

数据结构与算法:二叉树的学习

1.了解树形结构 1.概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: …

《Unity Shader 入门精要》 第7章 基础纹理

第7章 基础纹理 纹理最初的目的就是使用一张图片来控制模型的外观。使用纹理映射技术(texture mapping),我们可以把一张图黏在模型表面,逐纹素(texel)(纹素的名字是为了和像素进行区分)地控制模型的颜色。…

爱了爱了,这是什么神仙级Apache Dubbo实战资料,清晰!齐全!已跪!

都2026年了 还没有用过Dubbo? Dubbo是国内最出名的分布式服务框架,也是 Java 程序员必备的必会的框架之一。Dubbo 更是中高级面试过程中经常会问的技术,面试的时候是不是经常不能让面试官满意?无论你是否用过,你都必须…

Postman(2): postman发送带参数的GET请求

发送带参数的GET请求示例:微信公众号获取access_token接口,业务操作步骤1、打开微信公众平台,微信扫码登录:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?tsandbox/login2、打开微信开放文档,找到获取access_toek…

运放电路中各种电阻的计算-运算放大器

运放电路中各种电阻的计算 在学习运算放大器电路的时候,经常需要计算电路的: 输入阻抗Ri, 输出阻抗Ro, 同相端对地等效电阻RP, 反相端对地等效电阻RN, 这些参数很重要,在学习运放相关电路的时候经常要用到&#…

mysql8+mybatis-plus 查询json格式数据

sql 测试json表CREATE TABLE testjson (id int NOT NULL AUTO_INCREMENT,json_obj json DEFAULT NULL,json_arr json DEFAULT NULL,json_str varchar(100) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT2 DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;IN…

API 网关策略二三事

作者暴渊,API7.ai 技术工程师,Apache APISIX Committer。 近些年随着云原生和微服务架构的日趋发展,API 网关以流量入口的角色在技术架构中扮演着越来越重要的作用。API 网关主要负责接收所有请求的流量并进行处理转发至上游服务,…

【数据结构和算法】认识队列,并实现循环队列

上接前文,我们学习了栈的相关知识内容,接下来,来认识一个与栈类似的,另一种特殊的线性表,队列,本文目的是了解并认识队列这一概念,并实现循环队列 目录 一、认识队列 1.队列的概念 2.队列的实…

入门力扣自学笔记232 C++ (题目编号:1669)

1669. 合并两个链表 题目: 给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。 请你将 list1 中下标从 a 到 b 的全部节点都删除,并将list2 接在被删除节点的位置。 下图中蓝色边和节点展示了操作后的结果: 请…

Docker-harbor私有仓库部署与管理

目录 前言 一、Harbor概述 二、Harbor的特性 三、Harbor的构成 四、Harbor构建Docker私有仓库 环境配置 部署Harbor服务 物理机访问server IP 添加项目并填写项目名称 通过127.0.0.1来登陆和推送镜像 其他客户端上传镜像到Harbor 维护管理Harbor 创建Harbor用户 …

JavaWeb_JavaScript

一、简介 JavaScript 是一门跨平台、面向对象的脚本语言,而Java语言也是跨平台的、面向对象的语言,只不过Java是编译语言,是需要编译成字节码文件才能运行的;JavaScript是脚本语言,不需要编译,由浏览器直接…

GPT-3是精神病患者吗?从心理学角度评估大型语言模型

原文链接:https://www.techbeat.net/article-info?id4494 作者:seven_ 20世纪60年代,麻省理工学院人工智能实验室的Joseph Weizenbaum编写了第一个自然语言处理(NLP)聊天机器人ELIZA[1],ELIZA通过使用模式…

linux Redis 集群搭建

在单例模式下继续执行,新增文件夹将之前解压后的文件复制到新增的文件夹中修改配置文件,并放入bin中bind 10.88.99.251(ip设置)protected-mode yes(默认yes,开启保护模式,限制为本地访问&#x…