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

news2024/12/25 9:16:52

今天我们在进行一个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.coloradmin.cn/o/360694.html

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

相关文章

SpringBoot之DEBUG远程调试黑科技?

所谓的远程调试就是服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地 的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道 远程服务端的此时的内部状态。 简单的…

计算机408考研先导课---C语言难点

以下为小编在重温C语言时,容易犯错的一些点,希望列出来对大家有一定帮助! 一、整型变量数的范围 类型说明符长度(字节)数的范围int4/2(有些为4字节,有些为2字节)-32768~32767short2…

ArcMap出图小技巧:主图设计、图例、比例尺、指北针、标题

ArcMap一个重要的功能是出图!!!!! 因为图片对于一些文字描述来说更为直观,所以掌握一些出图技巧也是极为重要的,不仅能让我们在数据处理过程快速得到我们想要的图层,也可以让图层看起…

Teradata退了? 无所谓,GBASE会出手

近期,就在2月15日,国内IT界有搞出个大瓜,Teradata以对中国当前及未来商业环境的不确定性,慎重考虑后决定退出中国运营,后续将进入中国公司关闭程序。Teradata是一家有着40多年历史的数据仓库企业,被业界专业…

动态规划从入门到精通-蓝桥杯

一、了解动态规划1.简单来说动态规划是一种状态转移与递推2.例题引入——最少硬币问题有多个不同面值的硬币(任意面值); 数量不限; 输入金额S,输出最少硬币组合。 (回顾用贪心求解硬币问题。)贪心法硬币面值1、2、5。支…

2023年中职网络安全竞赛跨站脚本渗透解析-2(超详细)

跨站脚本渗透 任务环境说明:需求环境可私信博主! 服务器场景:Server2126(关闭链接)服务器场景操作系统:未知访问服务器网站目录1,根据页面信息完成条件,将获取到弹框信息作为flag提交;访问服务器网站目录2,根据页面信息完成条件,将获取到弹框信息作为flag提交;访问…

CenterMask paper笔记

CenterMask是一个anchor free的实例分割模型, 来自paper: CenterMask: Real-Time Anchor-Free Instance Segmentation 提起anchor free, 会想到FCOS模型,是用来目标检测的, 那么这里就用到了FCOS, 不过换了backbone, 在FCOS检测出目标框后&…

插装式比例插装阀比例节流阀比例顺序阀放大器

都是直动式,不需要最小先导压力以及先导流量。它们的动作执行都是基于平衡力的设计理念。(电磁力能按比例地反作用于液压力)所有的比例螺线管都是按照5000psi(350bar)的标准设计,所以这些阀的所有口都可以承…

卷积网络与全连接网络的区别

问题卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习。卷积神经网络具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类,因此也被称为“平移不变人工神经网络。全连接神经网络是具有多层感知器的的网络&a…

vs2022 实现无线调试安卓(Windows)

文章目录VS安装安卓调试环境前提条件Android SDK 版本查看安卓开启无线调试开启开发者模式打开USB调试功能打开无线调试功能查看配对信息(再次点击无限调试,不是switch开关)准备电脑端输入adb命令配对安卓查看设备清单如果没有设备VS无线调试…

python--matplotlib(3)

前言 Matplotlib画图工具的官网地址是 http://matplotlib.org/ Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示,制作的图形达到出版级的标准。 其他matplotlib文章 python--matpl…

C++性能白皮书

最近看完了《C性能白皮书》,这本书列出了一些性能优化的思路,不过只是一些指引,没有讲具体细节,我整理出了其中的关键点分享给大家: 硬件篇 作为一个程序员,想要性能优化,最好要了解些硬件&…

关于JavaScript使用window.onload的解释说明

文章目录window.onload简介为什么使用window.onload()绑定有名的函数绑定执行多个函数window.onload 与 jQuery ready() 区别window.onload简介 window.onload() 方法用于在网页加载完毕后立刻执行的操作,即当 HTML 文档加载完毕后,立刻执行某个方法。 …

苹果手机怎么拦截垃圾短信,亲测有效的方法,图文教学

​当小伙伴的苹果手机频繁收到垃圾短信时,不仅会影响正常的日常生活,还有可能泄露个人信息,给小伙伴带来不必要的麻烦。苹果手机怎么拦截垃圾短信?本文小编将介绍苹果手机拦截垃圾短信的实用技巧,帮助你轻松应对垃圾短…

PPT怎么做都丑?试试这个自动化工具吧,酷炫报表的救星!

昨晚在网上冲浪的时候,看到某位字节员工在脉脉上发帖:31岁,被PPT弄丢了工作,理由是PPT做得太丑,配不上公司形象,建议人力评估,安排离职沟通。 其实看到这时,我并没有多大得感触。因…

Ceres的自动求导实现原理剖析

目录数学原理实现原理总结首先注意数值求导和自动求导在使用的时候的不同之处。 实际上,正是自动求导这个地方使用了类模板,导致它不仅可以传入参数,还可以传入Jet类型的数据,从而实现了参数的雅可比矩阵的计算,完成自…

centos7 搭建ELK(elasticsearch、logstash、kibana)

1、下载安装包 使用华为镜像站下载速度很快,华为镜像站:https://mirrors.huaweicloud.com/home,下载时需要保证版本一致 2、安装elasticsearch 解压到当前目录 [rootlocalhost elk]# tar zxvf elasticsearch-7.4.2-linux-x86_64.tar.gz 安…

RFID盘点软件为企业提供RFID固定资产管理方案

随着科技的发展,固定资产管理系统也经过了一些变革,从刚开始的单机版逐渐发展成SaaS版本,物联网版本等。从刚开始只支持条形码到支持二维码、RFID码。RFID固定资产管理系统上线后,通过给每个实物资产绑定一个RFID码标签后&#xf…

2022-06-16_555时基的迷人历史和先天缺陷!

https://www.eet-china.com/news/magazine220608.html 555时基的迷人历史和先天缺陷! 发布于2022-06-16 03:39:12 LARRY STABILE 流行数十年的555时基,业内不知晓的工程师应该寥寥无几!几乎所有的数字电路教材中,都有该芯片的身影…

华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】

使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12201821.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 分糖果 小明从糖果…