可视化实战,Python绘制出来的数据大屏真的太惊艳了!!
今天我们在进行一个Python
数据可视化的实战练习,用到的模块叫做Panel
,我们通过调用此模块来绘制动态可交互的图表以及数据大屏的制作,而本地需要用到的数据集,可在kaggle
上面获取
https://www.kaggle.com/datasets/rtatman/188-million-us-wildfires
导入模块和读取数据
那么首先我们先导入后面会用到的模块,代码如下
# 数据库
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')
那么这回的数据集的背景我们这里简单的做个介绍,是涉及到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
那么涉及到绘制地图,这里就需要依赖其他的模块了,例如Shapely
、Cartopy
以及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.indexreturn 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.indexreturn 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.indexreturn 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
NO.1
往期推荐
Historical articles
Pandas50个必知必会的高级操作,建议收藏!!
Python+ChatGPT制作了一个AI百宝箱,太实用了!!
强烈推荐一个Python可视化模块,简单又好用!!
盘点了Jupyter Notebook的高效使用技巧,建议收藏!!
分享、收藏、点赞、在看安排一下?
可视化实战,Python绘制出来的数据大屏真的太惊艳了!!相关推荐
- 50 行 Python 代码制作一个数据大屏
今天给大家分享一个制作数据大屏的工具,非常的好用,100行左右的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. PywebIO介绍 Python当中的PywebIO模块 ...
- 用Python绘制超酷的gif动图,惊艳了所有人
在之前的一篇文章当中,小编当时分享了如何用Python当中的gif模块来制作gif格式的图表, 厉害了,用Python绘制动态可视化图表,并保存成gif格式 今天小编再给大家来介绍一种制作gif格式图 ...
- 解决 “数据大屏“ 展示的屏幕适配问题
现在非常流行的大数据可视化方案,不过要做数据大屏有一个很重要的问题就是屏幕适配. 一.引入flexible文件 flexible是移动端屏幕适配非常著名的的插件,能够帮助我们修改rem的值,也就是修改 ...
- 《七天数据可视化之旅》第七天:可视化设计实战-数据大屏
<七天数据可视化之旅>第七天:可视化设计实战-数据大屏 Destiny,某物流公司数据产品经理,目前从事数据平台搭建和可视化相关的工作.持续学习中,期望与大家多多交流数据相关的技术和实际应 ...
- 3000 字推荐一个可视化神器,50 行 Python 代码制作数据大屏
作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编给大家分享一个制作数据大屏的工具,非常的好用,100行左右的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. Py ...
- 一个基于Python数据大屏可视化开源项目
今天给大家介绍一个开源数据大屏可视化工具. 项目简介 这是一个基于Python开发的,结构简单的项目.可通过配置Json的数据,实现数据报表大屏显示. 优点:代码清晰.结构简单.配置Json数据 ...
- 用 Python 制作数据大屏,超简单
作者 | 俊欣 来源 | 关于数据分析与可视化 今天我们用Streamlit模块来制作一个数据面板,将数据更加直观地呈现给别人观看,整个页面大致如下图所示: 制作工具栏 在页面的左侧是一个工具栏,工具 ...
- Vue.js 打造酷炫的可视化数据大屏
可视化技术与 Vue 介绍 实验介绍 在本节实验中,将对可视化技术的应用场景.发展历程进行介绍,让大家对可视化技术有一个基础的概念.随后将介绍如今流行的可视化框架与其之间的优缺点对比.最后介绍 Vue ...
- 工资8000以下的程序员注意了:《零coding数据大屏实战宝典.pdf》
马云曾说:"整个世界将变成数据,这还只是数据时代的开始.新浪潮即将来临,很多就业机会将被夺走.有些人会赶上潮流,变得富有和成功.但是对那些落后的人,未来将是痛苦的. 大数据从2013年一路发 ...
最新文章
- AI算法连载17:统计之半监督学习
- 如何获取变量token的值
- Edge 浏览器有秘密白名单,允许 Facebook 运行 Flash 代码
- c语言输入括号配对成功输出1,用数组实现括号配对检查,输出不正确,请大家指点解决办法...
- uva 10246(变形floyd)
- Hibernate —— 映射关联关系
- 当要写验证性的代码时,利用git进行代码管理
- 用DELPHI下载官方SVN中的示例原码
- 计算机应用维护师实习周记,计算机系统维护专业毕业实习周记
- 来看看你踩坑没有,新手做自媒体却没有收益?原因都在这5点
- 一文读懂 DNS 解析的工作机制和优化挑战
- flink cdc 2.2.1 mysql connector
- android分享微信朋友圈带编辑功能吗,终于被我等到了,微信新版本能编辑别人的朋友圈啦!...
- 大数据可视化(六)文本数据可视化
- Dungeon Master题解bfs
- 如何免费将excel表格转换成Word文档?
- 打通对账的最后一公里——对账管理平台
- 六个月离职空档期获得足够时间反思自我+常见Netty面试题详解
- 高中数学这些解题的思维你是否掌握(名师总结)
- SunTorque-螺栓扭矩衰减与处理