探索 Bokeh:轻松创建交互式数据可视化的强大工具
探索 Bokeh:轻松创建交互式数据可视化的强大工具
在数据科学和数据分析领域,交互式数据可视化是一项不可或缺的技能。Bokeh 是一个强大的 Python 库,它可以帮助我们快速构建高质量的交互式图表和仪表盘,同时兼具高性能和灵活性。本文将带您了解 Bokeh 的核心功能,并通过实际示例展示它的应用。
什么是 Bokeh?
Bokeh 是一个用于创建交互式、Web 优化数据可视化的 Python 库。它的核心特点包括:
- 交互性:用户可以通过缩放、平移、悬停工具动态探索图表。
- 易集成:支持嵌入 HTML 页面或 Jupyter Notebook。
- 多功能性:提供从简单图表到复杂仪表盘的构建能力。
- 高性能:适合处理大规模数据。
安装和入门
在开始使用 Bokeh 前,请先确保已安装库:
pip install bokeh
接下来,我们通过简单示例体验 Bokeh 的基本功能。
创建一个简单的折线图
以下代码展示了如何使用 Bokeh 创建一个交互式折线图:
from bokeh.plotting import figure, show
from bokeh.io import output_notebook# 在 Jupyter Notebook 中显示输出
output_notebook()# 数据
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]# 创建图形对象
p = figure(title="Simple Line Plot", x_axis_label='X-Axis', y_axis_label='Y-Axis')# 添加折线
p.line(x, y, legend_label="Line", line_width=2)# 显示图表
show(p)
运行代码后,您将看到一个可以交互的折线图。通过工具栏,您可以缩放、平移并悬停查看详细数据。
使用 Pandas 数据快速绘图
Bokeh 与 Pandas 集成得很好,您可以直接将 Pandas DataFrame 作为数据源来绘图。例如:
import pandas as pd
from bokeh.plotting import figure, show# 创建示例 DataFrame
data = {"Month": ["Jan", "Feb", "Mar", "Apr", "May"],"Sales": [100, 200, 150, 300, 400]
}
df = pd.DataFrame(data)# 创建柱状图
p = figure(x_range=df["Month"], title="Monthly Sales", x_axis_label="Month", y_axis_label="Sales")# 添加柱状图
p.vbar(x=df["Month"], top=df["Sales"], width=0.5, color="blue")# 显示图表
show(p)
这段代码生成了一个按月份显示销售额的柱状图,直观展现了数据变化。
添加交互工具
Bokeh 的强大之处在于它的交互工具。以下示例展示了如何添加悬停提示和缩放功能:
from bokeh.models import HoverTool# 创建图形对象
p = figure(title="Interactive Plot", x_axis_label="X", y_axis_label="Y", tools="pan,box_zoom,reset")# 添加数据
p.circle(x, y, size=10, color="navy", alpha=0.5, legend_label="Data Points")# 添加悬停工具
hover = HoverTool()
hover.tooltips = [("X Value", "@x"), ("Y Value", "@y")]
p.add_tools(hover)# 显示图表
show(p)
通过悬停,您可以动态查看每个数据点的详细信息。
构建多子图布局
Bokeh 提供了 gridplot
来构建多图布局,这在创建仪表盘时非常有用。例如:
from bokeh.layouts import gridplot# 创建多个图表
p1 = figure(title="Line Plot")
p1.line(x, y, color="blue", legend_label="Line")p2 = figure(title="Scatter Plot")
p2.scatter(x, y, size=10, color="green", legend_label="Points")# 使用 gridplot 布局
layout = gridplot([[p1, p2]])
show(layout)
运行代码后,您将看到两个图表并排显示。
动态数据更新
Bokeh 允许实时更新图表,适合处理动态数据。例如,绘制一个实时更新的折线图:
from bokeh.plotting import curdoc
from bokeh.models import ColumnDataSource
from bokeh.layouts import column
from bokeh.plotting import figure
import random# 数据源
source = ColumnDataSource(data=dict(x=[], y=[]))# 创建图表
p = figure(title="Real-Time Plot", x_axis_label="Time", y_axis_label="Value")
p.line('x', 'y', source=source)# 更新数据的回调函数
def update():new_data = dict(x=[source.data['x'][-1] + 1 if source.data['x'] else 0], y=[random.randint(0, 10)])source.stream(new_data, rollover=50)# 每秒更新一次数据
curdoc().add_periodic_callback(update, 1000)# 显示布局
curdoc().add_root(column(p))
在运行这段代码时,图表会自动更新,显示实时生成的数据。
构建交互式仪表盘
以下代码展示了如何创建一个交互式仪表盘,包含下拉菜单和滑块控件:
from bokeh.models import Select, Slider
from bokeh.layouts import row, column# 创建图表
p = figure(title="Interactive Dashboard")
line = p.line(x, y, legend_label="Line", line_width=2)# 创建交互控件
select = Select(title="Line Color", value="blue", options=["blue", "green", "red"])
slider = Slider(title="Line Width", value=2, start=1, end=10, step=1)# 控件回调函数
def update(attr, old, new):line.glyph.line_color = select.valueline.glyph.line_width = slider.value# 将控件与回调关联
select.on_change("value", update)
slider.on_change("value", update)# 布局
layout = column(row(select, slider), p)
curdoc().add_root(layout)
运行代码后,您可以通过下拉菜单和滑块动态更改折线的颜色和宽度。
基础总结
Bokeh 是一个功能丰富且灵活的交互式可视化工具,非常适合快速开发 Web 优化的可视化应用。通过 Bokeh,您可以轻松完成以下任务:
- 生成各种交互式图表。
- 构建多视图仪表盘。
- 实现实时数据更新。
Bokeh 实战:从数据分析到交互式仪表盘开发
在本节中,我们将通过一个完整的实战项目,展示如何用 Bokeh 构建一个交互式仪表盘,实时可视化和分析销售数据。
实战场景
假设我们有一个电商平台的销售数据集,其中包含以下字段:
- 订单日期(
Order Date
):订单的日期。 - 销售额(
Sales
):订单金额。 - 类别(
Category
):商品类别,如 “Electronics”、“Clothing” 等。 - 地区(
Region
):订单所属地区。
目标是通过 Bokeh 构建一个交互式仪表盘,完成以下功能:
- 按时间查看销售趋势。
- 对比不同商品类别的销售额占比。
- 显示各地区销售分布。
- 通过滑块和下拉菜单动态过滤数据。
数据准备
首先,我们模拟一个数据集:
import pandas as pd
import numpy as np# 生成示例数据
np.random.seed(42)
dates = pd.date_range(start="2023-01-01", end="2023-12-31", freq="D")
data = {"Order Date": np.random.choice(dates, 1000),"Sales": np.random.randint(100, 2000, 1000),"Category": np.random.choice(["Electronics", "Clothing", "Home Appliances"], 1000),"Region": np.random.choice(["North", "South", "East", "West"], 1000)
}
df = pd.DataFrame(data)# 转换日期格式
df['Order Date'] = pd.to_datetime(df['Order Date'])
df['Month'] = df['Order Date'].dt.to_period('M').astype(str) # 生成月度字段
构建图表
1. 月销售趋势图
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource# 数据聚合
monthly_sales = df.groupby("Month")["Sales"].sum().reset_index()
monthly_sales_source = ColumnDataSource(monthly_sales)# 绘制折线图
trend_plot = figure(title="Monthly Sales Trend",x_range=monthly_sales["Month"],x_axis_label="Month",y_axis_label="Total Sales",tools="pan,box_zoom,reset,hover"
)
trend_plot.line(x="Month",y="Sales",source=monthly_sales_source,line_width=2,color="blue",legend_label="Monthly Sales"
)
trend_plot.legend.location = "top_left"
2. 商品类别销售额占比图
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure# 数据聚合
category_sales = df.groupby("Category")["Sales"].sum().reset_index()
category_source = ColumnDataSource(category_sales)# 绘制饼图
from math import pi
from bokeh.transform import cumsum
from bokeh.palettes import Category20ccategory_sales["angle"] = category_sales["Sales"] / category_sales["Sales"].sum() * 2 * pi
category_sales["color"] = Category20c[len(category_sales)]category_pie_plot = figure(title="Sales by Category",tools="hover",tooltips="@Category: @Sales",x_range=(-0.5, 1.0)
)
category_pie_plot.wedge(x=0,y=1,radius=0.4,start_angle=cumsum("angle", include_zero=True),end_angle=cumsum("angle"),line_color="white",fill_color="color",legend_field="Category",source=ColumnDataSource(category_sales)
)
category_pie_plot.axis.visible = False
category_pie_plot.grid.visible = False
3. 地区销售分布柱状图
# 数据聚合
region_sales = df.groupby("Region")["Sales"].sum().reset_index()
region_source = ColumnDataSource(region_sales)# 绘制柱状图
region_bar_plot = figure(title="Sales by Region",x_range=region_sales["Region"],x_axis_label="Region",y_axis_label="Total Sales",tools="pan,box_zoom,reset"
)
region_bar_plot.vbar(x="Region",top="Sales",width=0.5,color="blue",source=region_source
)
添加交互控件
1. 滑块控件:按销售额过滤
from bokeh.models import Slider# 创建滑块
sales_slider = Slider(title="Minimum Sales Filter",start=100,end=2000,value=100,step=100
)# 滑块回调函数
def update_data(attr, old, new):filtered_data = df[df["Sales"] >= sales_slider.value]updated_monthly_sales = filtered_data.groupby("Month")["Sales"].sum().reset_index()monthly_sales_source.data = updated_monthly_salesupdated_region_sales = filtered_data.groupby("Region")["Sales"].sum().reset_index()region_source.data = updated_region_salessales_slider.on_change("value", update_data)
2. 下拉菜单:按类别过滤
from bokeh.models import Select# 创建下拉菜单
category_select = Select(title="Select Category",value="All",options=["All"] + list(df["Category"].unique())
)# 下拉菜单回调函数
def filter_category(attr, old, new):filtered_data = df[df["Category"] == category_select.value] if category_select.value != "All" else dfupdated_monthly_sales = filtered_data.groupby("Month")["Sales"].sum().reset_index()monthly_sales_source.data = updated_monthly_salesupdated_region_sales = filtered_data.groupby("Region")["Sales"].sum().reset_index()region_source.data = updated_region_salescategory_select.on_change("value", filter_category)
构建仪表盘布局
利用 Bokeh 的 layout
布局工具,将图表和控件组合在一起:
from bokeh.layouts import column, row
from bokeh.io import curdoc# 布局
dashboard = column(row(category_select, sales_slider),trend_plot,row(category_pie_plot, region_bar_plot)
)# 添加到文档
curdoc().add_root(dashboard)
curdoc().title = "Sales Dashboard"
启动 Bokeh 服务
将上述代码保存为 dashboard.py
文件,然后在终端运行以下命令:
bokeh serve --show dashboard.py
浏览器将自动打开,您可以通过滑块和下拉菜单动态过滤数据,并实时查看图表的更新。
总结
通过本次实战,我们完成了一个交互式仪表盘的开发,展示了 Bokeh 的以下强大功能:
- 快速创建各种图表(折线图、饼图、柱状图)。
- 利用控件(滑块、下拉菜单)动态过滤数据。
- 构建多视图仪表盘并实时更新。
下一步,您可以尝试:
- 将仪表盘部署到云端,让更多用户访问。
- 添加更多控件和图表,丰富数据分析维度。
- 与 Flask 或 Django 集成,构建完整的数据应用。
赶快用 Bokeh 动手构建属于自己的交互式数据可视化项目吧!
相关文章:
探索 Bokeh:轻松创建交互式数据可视化的强大工具
探索 Bokeh:轻松创建交互式数据可视化的强大工具 在数据科学和数据分析领域,交互式数据可视化是一项不可或缺的技能。Bokeh 是一个强大的 Python 库,它可以帮助我们快速构建高质量的交互式图表和仪表盘,同时兼具高性能和灵活性。…...
光谱相机在农业的应用
一、作物生长监测1、营养状况评估 原理:不同的营养元素在植物体内的含量变化会导致植物叶片或其他组织的光谱反射率特性发生改变。例如,氮元素是植物叶绿素的重要组成部分,植物缺氮时,叶绿素含量下降,其在可见光波段&a…...
SYD881X RTC定时器事件在调用timeAppClockSet后会出现比较大的延迟
RTC定时器事件在调用timeAppClockSet后会出现比较大的延迟 这里RTC做了两个定时器一个是12秒,一个是185秒: #define RTCEVT_NUM ((uint8_t) 0x02)//当前定时器事件数#define RTCEVT_12S ((uint32_t) 0x0000002)//定时器1s事件 /*整分钟定时器事件,因为其余的…...
【Java基础面试题026】Java中的String、StringBuffer和StringBuilder的区别是什么?
回答重点 他们都是Java中处理字符串的类,区别主要体现在可变性、线程安全和性能上 1)String 不可变:String是不可变类,字符串对象创建,存储在堆中,字符串内容存储在字符串常量池中,一旦创建内…...
Ajax中的axios
既然提到Ajax,那就先来说一说什么是Ajax吧 关于Ajax Ajax的定义 Asynchronous JavaScript And XML:异步的JavaScript和XML。 反正就是一句话总结: 使用XML HttpRequest 对象与服务器进行通讯。 AJAX 是一种在无需重新加载整个网页的情况下&…...
学习ASP.NET Core的身份认证(基于JwtBearer的身份认证3)
根据参考文献1中JWT Token的组成及计算方式,对照参考文献2中的界面,实现简单的JWT Token解析及验证程序,主要功能包括: 1)拆分Token字符串,将前两段使用Base64UrlEncoder类解码并转为UTF8字符串&#x…...
jmeter后端监视器
一、概述 JMeter 后端监听器(Backend Listener)是 JMeter 提供的一个功能强大的插件,用于将测试执行期间收集的性能数据发送到外部系统进行监控和分析。通过后端监听器,您可以实时地将 JMeter 测试执行期间收集的数据发送到外部系统,如图形化展示、数据库、数据分析工具等…...
vue CSS 自定义宽高 翻页 剥离 效果
新增需求,客户需要类似PPT的剥离效果用于WEB页面翻页,查找资料后,参考下方的掘金博主的文章,并将HTML修改成vue的页面进行使用。其中宽度、高度改成了变量,样式style中的属性与宽高的关系整理成了公式进行动态计算。 …...
函数:参数与返回值类型
本文我们将深入探讨 函数的参数和返回值类型,这是 TypeScript 中最常用的特性之一。了解如何为函数参数和返回值添加类型,不仅能帮助你避免常见的错误,还能提高代码的可读性和可维护性。 在 JavaScript 中,函数的参数和返回值是没…...
【学习总结|DAY022】Java网络编程
网络编程是Java开发中非常重要的一环,它允许程序与网络上的其他设备进行数据交互。本文将介绍Java网络编程的基础知识,包括网络编程三要素、UDP和TCP通信协议,以及BS架构的原理。 网络编程三要素 网络通信至少需要三个要素:IP地…...
帝国cms同一条信息使用不同的多个内容页模板伪静态实现教程
理论上可以实现一条信息使用无数个内容页模板,实现过程: 1、/e/action目录下新建bishun.php,内容如下: <?php require(../class/connect.php); require(../class/db_sql.php); require(../class/functions.php); require(..…...
解决Linux<云服务器>访问HuggingFace的问题(操作记录)
一、准备配置文件 cache.db clash config.yaml Country.mmdb(1)cache.db、clash的获取 链接:百度网盘 提取码:82t0 (2)config.yaml、Country.mmdb的获取 启动本地已安装的clash软件→找到“配置订阅”…...
selenium 报错 invalid argument: invalid locator
环境: Python3.12.2 selenium4.0 报错信息: invalid argument: invalid locator 错误分析: selenium语法错误,find_element方法少写By.XPATH参数 错误语法如下: driver.find_element(//div[id"myid"]) 解决办…...
springboot——登录认证(包括jwt技术、拦截器过滤器)
实现登录的原理 用户名和密码都输入正确,登录成功,否则,登录失败 登录功能的本质:查询,根据用户名和密码查询员工信息 实现登录的步骤 登录需要确定用户的id、username、name、token(用于 身份校验),对此要重新定义一个类LoginInfo public class LoginInfo {priva…...
【IN、NOT、AND、OR】在 MySql 中的使用方法,使用场景、注意事项
目录 IN NOT AND OR 注意事项: 使用场景: IN 用于指定某个字段的值在一个预定义的列表中。 SELECT * FROM users WHERE age IN (20, 25, 30);查询返回 age 字段 是20、25 、30 的用户记录。 NOT 用于对条件进行否定。 查询将返回与指定 条件相…...
html <a>设置发送邮件链接、打电话链接 <a href=“mailto:></a> <a href=“tel:></a>
1.代码 <ul><li>电话:<a href"tel:18888888888">188-8888-8888</a></li><li>邮箱:<a href"mailto:10000qq.com">10000qq.com</a></li><li>邮箱:<a hre…...
Mac上详细配置java开发环境和软件(更新中)
文章目录 概要JDK的配置JDK下载安装配置JDK环境变量文件 Idea的安装Mysql安装和配置Navicat Premium16.1安装安装Vscode安装和配置Maven配置本地仓库配置阿里云私服Idea集成Maven Cpolar快速入门 概要 这里使用的是M3型片 14.6版本的Mac 用到的资源放在网盘 链接: https://pan…...
游戏渠道假量解决方案
某推广公司在推广过程中被查出“短期内点击量激增”“存在同一地址多次访问”“已注册用户重复注册”等数据作弊行为,法院判罚退还服务费200余万元,并赔偿违约金约350万元。 某公司为提升其游戏在应用商店榜单排名,委托某网络公司进行下载、注…...
Java重要面试名词整理(二):SpringMyBatis
文章目录 Spring篇Spring核心推断构造方法AOP动态代理Advice的分类Advisor的理解AOP相关的概念 定义BeanASM技术JFR依赖注入循环依赖LifecycleSpring AOT Spring事务Spring事务传播机制Spring事务传播机制是如何实现的呢?Spring事务传播机制分类 SpringMVCHandlerHandlerMappi…...
powershell美化
powershell美化 写在前面 除了安装命令,其他都是测试命令,后续再写进配置文件 安装主题控件 安装主题oh-my-posh,powershell中执行 winget install JanDeDobbeleer.OhMyPosh -s winget oh-my-posh init pwsh | Invoke-Expression # 查看…...
D102【python 接口自动化学习】- pytest进阶之fixture用法
day102 pytest的usefixtures方法 学习日期:20241219 学习目标:pytest基础用法 -- pytest的usefixtures方法 学习笔记: fixture调用方法 实际应用 总结 pytest.mark.usefixtures(func),pytest的usefixtures方法,无…...
Excel生成DBC脚本源文件
Excel制作 新建一个Excel,后缀为“.xls” 工作本名称改为“CAN_Matrix” 在首行按照列来起名字,在里面只需要填写必须的内容即可。 列数名称第0列Message Name第1列Message Format第2列Message ID第3列Message Length (byte)第4列Message Transmitte…...
【Leetcode 每日一题】2545. 根据第 K 场考试的分数排序
问题背景 班里有 m m m 位学生,共计划组织 n n n 场考试。给你一个下标从 0 0 0 开始、大小为 m n m \times n mn 的整数矩阵 s c o r e score score,其中每一行对应一位学生,而 s c o r e [ i ] [ j ] score[i][j] score[i][j] 表示…...
Spring MVC(上)
上一篇博客的补充: 一般出现这种问题,我们就要检查版本了 我们需要查看这几个地方是否版本是对的 注意: jdk版本运行取决于什么? 1.通过cmd运行,jdk版本就是你设置的环境变量 2.通过Idea运行,取决于该项目设置的JDK版本 创建项目的方式: 1> 我们上个博客用idea进行创建 2…...
【优选算法---归并排序衍生题目】剑指offer51---数组中的逆序对、计算右侧小于当前元素的个数、翻转对
一、剑指offer51---数组中的逆序对 题目链接: LCR 170. 交易逆序对的总数 - 力扣(LeetCode) 题目介绍: 在数组中的两个数字,如果前面⼀个数字大于后面的数字,则这两个数字组成⼀个逆序对。输入一个数组,…...
单体到微服务:电商平台架构的演变与可扩展性探索
目录 一、整体理解可扩展性 二、从电商平台架构发展看架构的可扩展性 (一)单体架构 (二)分布式架构 (三)SOA架构 (四)微服务架构 三、1号店App服务端架构升级说明 ÿ…...
clickhouse-副本和分片
1、副本 1.1、概述 集群是副本和分片的基础,它将ClickHouse的服务拓扑由单节点延伸到多个节点,但它并不像Hadoop生态的某些系统那样,要求所有节点组成一个单一的大集群。ClickHouse的集群配置非常灵活,用户既可以将所有节点组成…...
C语言版解法力扣题:将整数按权重排序
1.题目描述 我们将整数 x 的 权重 定义为按照下述规则将 x 变成 1 所需要的步数: 如果 x 是偶数,那么 x x / 2 如果 x 是奇数,那么 x 3 * x 1 比方说,x3 的权重为 7 。因为 3 需要 7 步变成 1 (3 --> 10 -->…...
ubuntu18.04升级到ubuntu20.04
为了使用qt6,在ubuntu18.04上各种折腾失败,无奈只能升级到ubuntu20.04, 按照网上的教程没成功。自己摸索了 lsb_release -a df -h sudo apt update sudo apt upgrade -y sudo apt dist-upgrade -y sudo apt autoremove -y sudo apt clean sudo apt inst…...
【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写
我们知道,stdin会往“缓冲区”先读入数据,如果我们劫持这个所谓“缓冲区”到其他地址呢?是否可以读入数据到任意地址?答案是肯定的。 注意!代码中的“-------”分隔,是为了区分一条调用链上不同代码片段&am…...
<mutex>注释 11:重新思考与猜测、补充锁的睡眠与唤醒机制,结合 linux0.11 操作系统代码的辅助(上)
(46)问题的起源: 因为上面的内核代码,我们编写多线程代码时,对手里的家伙事不那么自信。但我们知道,多线程在竞争锁时,若得不到锁,会进入睡眠,并会在被唤醒后重新尝试得…...
C/C++圣诞树
系列文章 序号直达链接1C/C爱心代码2C/C跳动的爱心3C/C李峋同款跳动的爱心代码4C/C满屏飘字表白代码5C/C大雪纷飞代码6C/C烟花代码7C/C黑客帝国同款字母雨8C/C樱花树代码9C/C奥特曼代码10C/C精美圣诞树11C/C俄罗斯方块12C/C贪吃蛇13C/C孤单又灿烂的神-鬼怪14C/C闪烁的爱心15C…...
upload-labs-master第21关超详细教程
目录 环境配置解题思路利用漏洞 操作演示 环境配置 需要的东西 phpstudy-2018 链接: phpstudy-2018 提取码:0278 32 位 vc 9 和 11 运行库 链接: 运行库 提取码:0278 upload-labs-master 靶场 链接: upload-lasb-ma…...
Python基础——数学运算
目录 1. 算术运算符 2. 比较运算符 3. 赋值运算符 4. 逻辑运算符 5. 成员运算符 6. 身份运算符 7. 三目运算符 Python数学计算通过多种运算符来执行,常用的运算符类型包括算术运算符、比较运算符、赋值运算符、逻辑运算符、成员运算符、身份运算符、三目…...
ubuntu 安装更新 ollama新版本
ubuntu 安装更新 ollama新版本 我这里是 2024-12-18 ollama 版本是 0.5.3 1手动下载 ollama-linux-amd64.tgz https://github.com/ollama/ollama/releases 2下载脚本 https://ollama.com/install.sh install.sh 和 ollama-linux-amd64.tgz 在相同路径下 修改:…...
汽车IVI中控开发入门及进阶(45):凌阳科技车载娱乐芯片
概述: Sunplus科技有限公司成立于1990年,是一家领先的多媒体和汽车应用芯片提供商,如DVD播放器、便携式DVD播放器、家庭娱乐音频产品、汽车信息娱乐和高级驾驶辅助系统(ADAS)。与此同时,凌阳正在为消费类、便携式和连接设备上的广泛应用提供高速I/O IP、高性能数据转换I…...
Linux export命令
本文来自智谱清言 --------- 在Linux系统中,export 是一个用来设置环境变量的命令。 环境变量是操作系统运行时用于存储有关系统环境的信息的变量,它们对于用户和程序都是可访问的。下面是关于 export 命令的一些基本用法: 基本语法 ba…...
AI自我进化的新篇章:谷歌DeepMind推出苏格拉底式学习,语言游戏解锁无限潜能
各位AI爱好者、技术研究者,大家好!今天我们来聊聊一个令人兴奋的AI研究新进展——谷歌DeepMind推出的“苏格拉底式学习”方法。这项研究的独特之处在于,它让AI在没有外部数据的情况下,通过“语言游戏”实现自我进化,这…...
【BUG】记一次context canceled的报错
文章目录 案例分析gorm源码解读gin context 生命周期context什么时候cancel的什么时候context会被动cancel掉呢? 野生协程如何处理 案例分析 报错信息 {"L":"ERROR","T":"2024-12-17T11:11:33.0050800","file"…...
JAVA前端开发中type=“danger“和 type=“text“的区别
在前端开发中,type 属性通常用于指定按钮或其他元素的样式或行为。不同的框架和库可能对 type 属性有不同的定义和用法。常见的框架包括 Bootstrap、Ant Design(antd)、Element Plus 等。下面我将分别介绍在这些框架中 type"danger"…...
sqlite3 支持位运算 和view和 triger
数据设置条件以后可以.根据门限自动调整其他的值 由数据库记录修改时间,及记录-> 网元设备的告警产生时间,设置超时清除时间,记录系统的原始时间戳 CPp 有 sqlite 支持 json 导出字符串,json 库将字符串,映射为结构体 triger update table 更新到一个 可设置参数列表 ,view …...
Mysql复习(一)
数据库系统的核心是( 数据库管理系统 )。 以下的标识符中符合标识符命名规则的有几个?(3个) 3abc7, abc73, bc73a, c73ab,*73abc 标识符的第一个字符允许包括哪些符号?( _ 或者 或者 #) 关系表达式运算的…...
Redis bitmaps 使用
应用场景: 记录id为 1 的用户,2024年12月签到情况,并统计; 记录 1号签到 zxys-redis:0>setbit 1:202412 1 1 记录 2号签到 zxys-redis:0>setbit 1:202412 2 1 记录 3号未签到 zxys-redis:0>setbit 1:202412 3 0 …...
计算无人机俯拍图像的地面采样距离(GSD)矩阵
引言 在无人机遥感、测绘和精细农业等领域,地面采样距离(Ground Sampling Distance,简称 GSD)是一个非常重要的指标。GSD 是指图像中每个像素在地面上实际代表的物理距离,通常以米或厘米为单位。GSD 决定了图像的空间…...
Java基础 | 数据库的命名规范
数据库的命名规范 1. 基本原则2. 命名规范详解2.1 命名禁止项2.2 命名规范3. 通用字段规范4. 特殊表命名建议 1. 基本原则 统一性:全库采用一致的命名规范简洁性:在表达清晰的前提下尽量简短规范性:遵循数据库标准规范可读性:命名…...
计算机网络基础(2):网络安全/ 网络通信介质
1. 网络安全威胁 网络安全:目的就是要让网络入侵者进不了网络系统,及时强行攻入网络,也拿不走信息,改不了数据,看不懂信息。 事发后能审查追踪到破坏者,让破坏者跑不掉。 网络威胁来自多方面:…...
Reactor
文章目录 正确的理解发送double free问题 1.把我们的reactor进行拆分2.链接管理3.Reactor的理论 listensock只需要设置_recv_cb,而其他sock,读,写,异常 所以今天写nullptr其实就不太对,添加为空就没办法去响应事件 获…...
介绍 Html 和 Html 5 的关系与区别
HTML(HyperText Markup Language)是构建网页的标准标记语言,而 HTML5 是 HTML 的最新版本,包含了一些新的功能、元素、API 和属性。HTML5 相对于早期版本的 HTML(比如 HTML4)有许多重要的改进和变化。以下是…...
已有 containerd 的情况下部署二进制 docker 共存
文章目录 [toc]学习目的开始学习dockerd启动 containerd准备配置文件启动 containerd 启动 docker准备配置文件启动 docker 环境验证停止 docker 和 containerd 学习目的 使用容器的方式做一些部署的交付,相对方便很多,不需要担心别人的环境缺少需要的依…...
Springboot @Transactional使用时需注意的几个问题
一、事务的隔离级别 在Springboot应用中,如果我们想实现方法一旦执行有异常产生,就触发事务回滚,可以在方法上面添加Transactional注解。如果应用采用mysql数据库,虽然mysql本身也有事务隔离机制,但在Sping数据库的应…...