【可视化实战】Python 绘制出来的数据大屏真的太惊艳了

news/2024/4/27 13:18:52/文章来源:https://blog.csdn.net/qq_34160248/article/details/129134016

今天我们在进行一个Python数据可视化的实战练习,用到的模块叫做Panel,我们通过调用此模块来绘制动态可交互的图表以及数据大屏的制作。

而本地需要用到的数据集,可在kaggle上面获取 https://www.kaggle.com/datasets/rtatman/188-million-us-wildfires,如果无法访问kaggle,可以找我获取数据集。

导入模块和读取数据

那么首先我们先导入后面会用到的模块,代码如下

# 数据库  
import sqlite3  
# 数据处理  
import numpy as np  
import pandas as pd  
# 数据大屏  
import holoviews as hv   
import colorcet as cc  
import panel as pn  
from holoviews.element.tiles import EsriImagery  
from datashader.utils import lnglat_to_meters  
import hvplot.pandas  
hv.extension('bokeh')  

技术交流

技术要学会分享、交流,不建议闭门造车。一个人走的很快、一堆人可以走的更远。

好的技术文章离不开粉丝的分享、推荐,资料干货、资料分享、数据、ChatGPT 技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:pythoner666,备注:来自CSDN +备注来意
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

那么这回的数据集的背景我们这里简单的做个介绍,是涉及到1992年到2015年美国境内发生的森林火灾的分布情况,那么这里就有涉及到火灾发生的位置,也就是经纬度坐标,由于数据集是放在sqlite数据库当中,因此数据集的导入也会用到Python当中的sqlite3这个模块

# 连接数据库  
conn = sqlite3.connect('./FPA_FOD_20170508.sqlite')  
# 读取出我们需要的字段下面的数据  
df = pd.read_sql_query("SELECT LATITUDE, LONGITUDE, STAT_CAUSE_DESCR, FIRE_SIZE, FIRE_SIZE_CLASS, DISCOVERY_DATE, CONT_DATE, STATE, FIRE_YEAR FROM fires", conn)  
# 删除掉阿拉斯加等其他地方的数据  
df = df.loc[(df.loc[:,'STATE']!='AK') & (df.loc[:,'STATE']!='HI') & (df.loc[:,'STATE']!='PR')]  
# 计算大火燃烧的时间  
df['BURN_TIME'] = df['CONT_DATE'] - df['DISCOVERY_DATE']  
df.head()  

output
在这里插入图片描述

绘制地图

接下来我们来绘制一下全美各个地区发生火灾的次数,将历年发生的火灾都做一个汇总,代码如下

map_tiles = EsriImagery().opts(alpha=0.5, width=700, height=480, bgcolor='black')  
plot = df.hvplot(  'LONGITUDE',   'LATITUDE',   geo=True,  kind='points',   rasterize=True,   cmap=cc.fire,   cnorm='eq_hist',    colorbar=True).opts(colorbar_position='bottom', xlabel='', ylabel='')  
map_tiles * plot  

output

那么涉及到绘制地图,这里就需要依赖其他的模块了,例如ShapelyCartopy以及Pillow等模块,安装起来会稍显复杂,大家可以上网去查阅一下具体的步骤,那么从上面的图表中我们可以看到加州以及佛罗里达州等地发生火灾的次数较多,颜色也就比较深。

要是我们要是想要给图表添加一个时间轴,通过拖拽时间轴来不断调整图表当中数据的变化,就可以这么来做,代码如下

# 绘制时间轴  
year = pn.widgets.IntSlider(name='Year Slider', width=300,  start=1992, end=2015, value=(1993),  step=1,value_throttled=(1993))  
# 显示出选中的时间  
def year_selected(year):  return '### Wildfires Across the US in {}'.format(year)  
# 绘制地图  
def plot_map(year_1):  year_df = df[df['FIRE_YEAR'] == year_1].copy()  plot = year_df.hvplot(  'LONGITUDE',   'LATITUDE',   geo=True,  kind='points',   rasterize=True,   cmap=cc.fire,   cnorm='eq_hist',    colorbar=True).opts(colorbar_position='bottom', xlabel='', ylabel='')  return map_tiles * plot  

我们将自定义的函数结合到一起来使用,代码如下

dashboard = pn.WidgetBox(  pn.Column(  pn.Row(pn.bind(year_selected, year), year),  pn.Row(pn.bind(plot_map, year)), align="start",  sizing_mode="stretch_width"))  
dashboard  

output

绘制柱状图

接下来我们来绘制几张简单的柱状图,首先是对不同的火灾等级进行分组统计并且绘制成柱状图,代码如下

def plot_class(year):  year_df = df[df['FIRE_YEAR'] == year].copy()  count_df = pd.DataFrame(year_df.groupby('FIRE_SIZE_CLASS').size(), columns=['Count'])  count_df['Fire Class'] = count_df.index  return count_df.hvplot.bar(x='Fire Class', y='Count', c='Fire Class', cmap='fire',   legend=False).opts(xlabel="Fire Size Class", ylabel="Number of Fires",  title="发生在{}的森林火灾,根据不同级别来区分".format(year))  
plot_class(2006)  

output

当然我们也可以绘制将柱状图绘制成是水平方向的,例如我们想要探究一下不同原因造成的火灾的持续的时间有多长,代码如下

def plot_cause_duration(year):  year_df = df[df['FIRE_YEAR'] == year].copy()  caused_df = pd.DataFrame(year_df.groupby('STAT_CAUSE_DESCR')[['BURN_TIME']].mean().sort_values('BURN_TIME'))  caused_df['Cause'] = caused_df.index  return caused_df.hvplot.barh(x='Cause', y='BURN_TIME',   c='Cause', cmap='fire_r', legend=False).opts(  ylabel="Duration (Days)",  title="发生在{}年由不同原因造成的森林火灾".format(year))  
plot_cause_duration(2010)  

output

以及我们想要看一下不同原因所造成的火灾的数量,代码如下

def plot_cause_occur(year):  year_df = df[df['FIRE_YEAR'] == year].copy()  caused_df = pd.DataFrame(year_df.groupby('STAT_CAUSE_DESCR').size(), columns=['Count']).sort_values('Count')  caused_df['Cause'] = caused_df.index  return caused_df.hvplot.barh(x='Cause', y='Count',   c='Cause', cmap='fire_r',   legend=False).opts(ylabel="Occurrence",  title="发生在{}年由不同原因造成的森林火灾".format(year))  
plot_cause_occur(2010)  

output

可视化大屏的制作

最后我们将上面绘制出来的图标拼凑到一起,做成可视化大屏,代码如下

plots_box = pn.WidgetBox(pn.Column(pn.Row(pn.bind(year_selected, year), year),  pn.Row(pn.bind(plot_map, year), pn.bind(plot_class, year)) ,  pn.Row(pn.bind(plot_cause_occur, year), pn.bind(plot_cause_duration, year)), align="start",  width=800, sizing_mode="stretch_width"))  
dashboard = pn.Row(plots_box, sizing_mode="stretch_width")  
dashboard  

output

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STM32笔记】__WFI();进入不了休眠的可能原因(系统定时器SysTick一直产生中断)

【STM32笔记】__WFI();进入不了休眠的可能原因(系统定时器SysTick一直产生中断) 【STM32笔记】低功耗模式配置及避坑汇总 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置&am…

UnsupportedOperationException

原因&#xff1a;返回值为list时&#xff0c;返回值类型应为具体的类型参考文章&#xff1a;(139条消息) mybatis中返回结果类型为集合类型&#xff08;List、Map&#xff09;_毒毒毒毒丶的博客-CSDN博客_mybatis返回list<map>集合UnsupportedOperationException 是用于表…

【算法基础】线性、二分法查找

问题&#xff1a; 现有数组int[] arr new int[]{1,3,5,63,2,55,78}&#xff0c;找出值为2的元素&#xff0c;并返回其下标。 1. 线性查找&#xff08;顺序查找&#xff09; 声明两个变量&#xff1a;查找的元素、保存索引的变量用for循环依次遍历 注意&#xff1a; 这里只查…

TCP的三次握手、四次挥手

文章目录前言一、一些重要字段的含义二、TCP总括图三、三次握手详细过程1.第一次握手2.第二次握手3.第三次握手三次握手小结4.为什么必须要进行三次握手&#xff0c;两次或四次就不行四、四次挥手1.第一次挥手2.第二次挥手3.第三次挥手4.第四次挥手四次挥手简述前言 一个TCP的…

gulimall技术栈笔记

文章目录1.项目背景1.1电商模式1.2谷粒商城2.项目架构图3.项目技术&特色4.项目前置要求5.分布式基础概念5.1微服务5.2集群&分布式&节点5.3远程调用5.4负载均衡5.5服务注册/发现&注册中心5.6配置中心5.7服务熔断&服务降级5.7.1服务熔断5.7.2服务降级5.8API网…

Allegro如何通过报表的方式检查单板上是否有假器件操作指导

Allegro如何通过报表的方式检查单板上是否有假器件操作指导 在做PCB设计的时候,输出生产文件之前,必须保证PCB上不能存在假器件,如下图,是不被允许的 当PCB单板比较大,如何通过报表的方式检查是否存在假器件,具体操作如下 点击Tools点击Reports

【华为云-开发者专属集市】DevCloud+ECS、MySQL搭建WordPress

文章目录AppBazaar官网选择与购买项目项目概况操作过程购买DevCloud服务创建项目添加制品库应用部署购买ECS添加部署模板并执行任务故障排除安装及访问WordPress登录网站管理后台访问网站完善部署模板资源释放使用总结AppBazaar官网 首先&#xff0c;我们来到AppBazaar的官网&…

大数据Hadoop教程-01大数据导论与Linux基础

目录 01、大数据导论 02、Linux操作系统概述 P007 P008 P009 P010 P011 P012 P013 P014 P015 P016 P017 01、大数据导论 企业数据分析方向 现状分析&#xff08;分析当下的数据&#xff09;&#xff1a;现阶段的整体情况&#xff0c;各个部分的构成占比、发展、变…

揭开JavaWeb中Cookie与Session的神秘面纱

文章目录1&#xff0c;会话跟踪技术的概述2&#xff0c;Cookie2.1 Cookie的基本使用2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文3&#xff0c;Session3.1 Session的基本使用3.2 Session的原理分析3.3 Session的使用细节3.3.1 Session…

通过命令行快速了解电脑CPU架构

Linux 和 MacOS 使用终端&#xff08;小黑窗&#xff09;执行下面的命令&#xff0c;根据输出结果查表&#xff1a; uname -m输出 的内容分别对应架构 输出对应架构i386, i686i386x86_64amd64arm, armelarm_garbagearmv7l, armhfarmv7*mipsmips*mips64mips64*Window 按 WinR …

【强化学习】解决gym安装Atari2600环境gym[atari,accept-rom-license] RuntimeError 无法下载Roms的问题

先上Roms.tar.gz安装地址&#xff1a;Roms.tar.gz 以下内容是解决问题的思路&#xff0c;如果已经完全知道问题原因可以直接跳过 安装gym[accept-rom-license]时会出现安装失败的情况: 先是卡在&#xff1a;Building wheel for AutoROM.accept-rom-license 然后是显示安装失败…

预告|2月25日 第四届OpenI/O 启智开发者大会昇腾人工智能应用专场邀您共启数字未来!

如今&#xff0c;人工智能早已脱离科幻小说中的虚构想象&#xff0c;成为可触及的现实&#xff0c;并渗透到我们的生活。随着人工智能的发展&#xff0c;我们正在迎来一个全新的时代——数智化时代。数据、信息和知识是这个时代的核心资源&#xff0c;而人工智能则是这些资源的…

感知数据温度,聚焦海量冷数据存储难题

在信息科技高速发展的背景之下&#xff0c;海量数据已经让拥有者和管理者应接不暇&#xff0c;根据IDC发布的《数据时代2025》预测&#xff0c;全球数据圈&#xff08;数据圈代表每年被创建、采集或是复制的数据集合&#xff09;将从2018 年的32ZB增至2025年的175ZB。2018年&am…

骨传导耳机工作原理,骨传导耳机优缺点

骨传导耳机虽说最近是十分火爆的一款单品&#xff0c;但还是有很多人对骨传导耳机不是很了解&#xff0c;骨传导耳机更多使用场景还是在户外运动使用&#xff0c;骨传导耳机对于长时间使用耳机的人来说十分友好&#xff0c;这主要还是得益于骨传导耳机传输声音的特殊性。 下面我…

【轻量级自适应加权网络:超分】

Lightweight adaptive weighted network for single image super-resolution &#xff08;单幅图像超分辨率的轻量级自适应加权网络&#xff09; 近年来&#xff0c;深度学习已成功应用于单幅图像超分辨率&#xff08;SISR&#xff09;任务&#xff0c;并取得了上级的性能。然…

Django使用jinja2模板

Django使用jinja2模板 jinja2介绍 Jinja2&#xff1a;是 Python 下一个被广泛应用的模板引擎&#xff0c;是由Python实现的模板语言&#xff0c;他的设计思想来源于 Django 的模板引擎&#xff0c;并扩展了其语法和一系列强大的功能&#xff0c;尤其是Flask框架内置的模板语言…

异步执行结果-Callable、Future、FutureTask

Callable 实现Runnable接口的任务执行没有返回值&#xff0c;如果我们希望线程运算后将结果返回&#xff0c;应该使用Callable。Callable代表有返回值的任务。 class CallTask implements Callable<String> {Overridepublic String call() throws Exception {return Th…

前端开发环境搭建

文章目录Node.js是什么安装查看版本入门示例NPM使用 npm 命令安装模块常见命令使用淘宝 NPM 镜像TypeScript安装入门示例从github拉取构建项目如何从零创建一个TypeScript项目规划目录结构新建项目Web App运行服务添加依赖打包使用browserify打包使用webpack打包推荐流程目录配…

以学校数据模型为例,掌握在DAS下使用GaussDB

文章目录题目具体操作一、表的创建二、表数据的插入三、数据查询目的&#xff1a; 这里以学校数据库模型为例&#xff0c;介绍GaussDB数据库、表等常见操作&#xff0c;以及SQL语法使用的介绍。题目 假设A市B学校为了加强对学校的管理&#xff0c;引入了华为GaussDB数据库。 在…

GEE学习笔记 六十三:新的地图图层ui.Map.CloudStorageLayer

在GEE中导出数据有一种方式是直接导出地图到Google Cloud Storage中&#xff0c;也就是Export.map.toCloudStorage(xxx)&#xff0c;这种方式是将我们计算生成影像导出成为静态瓦片的格式存放在Google Cloud Storage中。我们可以在其他的前端程序比如OpenLayer、Mapbox GL JS等…