当前位置: 首页 > news >正文

奥运数据可视化:探索数据讲述奥运故事

在数据可视化的世界里,体育数据因其丰富的历史和文化意义,常常成为最有吸引力的主题之一。今天我要分享一个令人着迷的奥运数据可视化项目,它巧妙地利用交互式图表和动态动画,展现了自1896年至今奥运会的发展历程和各国奥运成就的演变。

项目概览

该项目基于夏季奥运会的历史数据,构建了一套完整的交互式可视化系统,主要包含三个核心模块:

  1. 奥运奖牌历时演变:通过动态时间轴展示各国奖牌数量随历届奥运会的变化,以及排名的动态变化过程
  1. 主办城市表现分析:直观展示"东道主效应",即举办国在主办奥运会前后的表现变化
  1. 国家运动项目优势:揭示各国在特定体育项目上的统治力及其随时间的演变

项目采用了Flask作为后端框架,结构清晰:

from flask import Flask, render_template, jsonify, request
import sqlite3
import pandas as pd
import os
import jsonapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')@app.route('/medals-evolution')
def medals_evolution():return render_template('medals_evolution.html')@app.route('/host-city-performance')
def host_city_performance():return render_template('host_city_performance.html')@app.route('/sport-dominance')
def sport_dominance():return render_template('sport_dominance.html')

奥运奖牌历时演变

这个模块最引人注目的特点是排名的动态变化动画。在传统的静态图表中,我们只能看到某一时刻的排名情况,而无法直观感受排名变化的过程。

后端数据接口设计如下:

@app.route('/api/medal-tally')def get_medal_tally():conn = sqlite3.connect('olympic_data.db')conn.row_factory = sqlite3.Rowcursor = conn.cursor()cursor.execute('''SELECT mt.NOC as noc, mt.Games_ID as games_id, gs.Year as year,mt.Gold as gold, mt.Silver as silver, mt.Bronze as bronze,mt.Total as total, gs.Host_country as host_countryFROM medal_tally mtJOIN games_summary gs ON mt.Games_ID = gs.Games_IDORDER BY gs.Year, mt.Total DESC''')medals = [dict(row) for row in cursor.fetchall()]conn.close()return jsonify(medals)

前端动画实现的核心代码:

function animateRankings(data, selectedCountries, medalType) {// 设置动画的基本参数const duration = 750;const maxDisplayCount = 10;// 更新排名图表函数function updateRankingChart(yearIdx) {// 获取当前年份数据const currentYear = data.years[yearIdx];const yearData = selectedCountries.map(country => ({country: country,medals: data.medals[country][medalType][yearIdx] || 0})).filter(d => d.medals > 0)  // 只显示有奖牌的国家.sort((a, b) => b.medals - a.medals)  // 按奖牌数排序.slice(0, maxDisplayCount);  // 只取前N名// 创建动态更新的比例尺const xScale = d3.scaleLinear().domain([0, d3.max(yearData, d => d.medals) * 1.1]).range([0, width]);const yScale = d3.scaleBand().domain(yearData.map(d => d.country)).range([0, height]).padding(0.1);// 使用D3的enter-update-exit模式更新条形图const bars = svg.selectAll(".rank-bar").data(yearData, d => d.country);// 新增条形(enter)bars.enter().append("rect").attr("class", "rank-bar").attr("x", 0).attr("y", d => yScale(d.country)).attr("height", yScale.bandwidth()).attr("width", 0).attr("fill", d => colorScale(d.country)).attr("opacity", 0).transition().duration(duration).attr("width", d => xScale(d.medals)).attr("opacity", 1);// 更新现有条形(update)bars.transition().duration(duration).attr("y", d => yScale(d.country)).attr("width", d => xScale(d.medals));// 移除多余条形(exit)bars.exit().transition().duration(duration).attr("width", 0).attr("opacity", 0).remove();// 更新标签updateLabels(yearData, xScale, yScale);}// 播放控制let animationTimer;playButton.on("click", () => {if (isPlaying) {clearInterval(animationTimer);playButton.text("播放");} else {animationTimer = setInterval(() => {yearIndex = (yearIndex + 1) % data.years.length;updateRankingChart(yearIndex);}, duration + 200);playButton.text("暂停");}isPlaying = !isPlaying;});
}

这种动态可视化方式让我们能够直观观察到冷战时期美苏两强的竞争,中国在改革开放后的迅速崛起,以及东欧国家在苏联解体后的排名变化等历史现象。

主办城市表现分析

"东道主效应"是奥运研究中常被提及的现象。该模块的后端数据处理如下:

@app.route('/api/host-performance')
def get_host_performance():host_country = request.args.get('country')if not host_country:return jsonify({"error": "Host country parameter is required"}), 400conn = sqlite3.connect('olympic_data.db')conn.row_factory = sqlite3.Rowcursor = conn.cursor()# 查找主办国的所有主办年份cursor.execute('''SELECT Year as yearFROM games_summaryWHERE Host_country = ?ORDER BY Year''', (host_country,))host_years = [row['year'] for row in cursor.fetchall()]if not host_years:return jsonify({"error": f"No hosting records found for {host_country}"}), 404# 查找该国的所有奥运表现cursor.execute('''SELECT cp.Country as country, gs.Year as year, mt.Gold as gold, mt.Silver as silver, mt.Bronze as bronze, mt.Total as total,(gs.Host_country = cp.Country) as is_hostFROM medal_tally mtJOIN games_summary gs ON mt.Games_ID = gs.Games_IDJOIN country_profiles cp ON mt.NOC = cp.NOCWHERE cp.Country = ?ORDER BY gs.Year''', (host_country,))performance = [dict(row) for row in cursor.fetchall()]result = {"country": host_country,"host_years": host_years,"performance": performance}return jsonify(result)

前端实现东道主效应的动画效果:

function createHostEffectChart(data) {// 获取主办年和表现数据const hostYears = data.host_years;const performance = data.performance;// 创建时间比例尺const xScale = d3.scaleBand().domain(performance.map(d => d.year)).range([0, width]).padding(0.1);// 创建奖牌数量比例尺const yScale = d3.scaleLinear().domain([0, d3.max(performance, d => d.total) * 1.1]).range([height, 0]);// 添加柱状图,使用时间流动动画const bars = svg.selectAll(".medal-bar").data(performance).enter().append("rect").attr("class", d => d.is_host ? "medal-bar host-bar" : "medal-bar").attr("x", d => xScale(d.year)).attr("width", xScale.bandwidth()).attr("y", height)  // 初始位置在底部.attr("height", 0)  // 初始高度为0.attr("fill", d => d.is_host ? "#FF9900" : "#3498db").attr("stroke", "#fff").attr("stroke-width", 1);// 按时间顺序添加生长动画bars.transition().duration(800).delay((d, i) => i * 100)  // 时间顺序延迟.attr("y", d => yScale(d.total)).attr("height", d => height - yScale(d.total));// 计算并展示东道主效应const hostYearsData = performance.filter(d => d.is_host);const nonHostYearsData = performance.filter(d => !d.is_host);const avgHostMedals = d3.mean(hostYearsData, d => d.total);const avgNonHostMedals = d3.mean(nonHostYearsData, d => d.total);const hostEffect = avgHostMedals / avgNonHostMedals;// 添加效应数值动画d3.select('#host-effect-value').transition().duration(1500).tween('text', function() {const i = d3.interpolate(1, hostEffect);return t => this.textContent = i(t).toFixed(2) + 'x';});
}

国家运动项目优势

该模块创新地设计了"统治力指数"这一综合指标,后端计算实现如下:

@app.route('/api/sport-country-matrix')
def sport_country_matrix():try:import pandas as pd# 读取奥运项目结果数据event_data = pd.read_csv('Olympic_Event_Results.csv')# 只分析夏季奥运会数据summer_data = event_data[event_data['edition'].str.contains('Summer', na=False)]# 计算每个国家在每个项目上的奖牌总数medal_counts = summer_data.groupby(['sport', 'country_noc']).size().reset_index(name='count')# 计算金牌数gold_counts = summer_data[summer_data['medal'] == 'Gold'].groupby(['sport', 'country_noc']).size().reset_index(name='gold_count')# 合并数据medal_data = pd.merge(medal_counts, gold_counts, on=['sport', 'country_noc'], how='left')medal_data['gold_count'] = medal_data['gold_count'].fillna(0)# 计算统治力指数medal_data['dominance_score'] = medal_data.apply(lambda row: calculate_dominance(row['count'], row['gold_count']), axis=1)# 获取排名前20的国家和项目组合top_combinations = medal_data.sort_values('dominance_score', ascending=False).head(100)# 构建国家-项目矩阵matrix_data = []for _, row in top_combinations.iterrows():matrix_data.append({'country': row['country_noc'],'sport': row['sport'],'total_medals': int(row['count']),'gold_medals': int(row['gold_count']),'dominance_score': float(row['dominance_score'])})return jsonify(matrix_data)except Exception as e:print(f"Error generating sport-country matrix: {e}")import tracebacktraceback.print_exc()return jsonify({"error": str(e)}), 500def calculate_dominance(medal_count, gold_count):# 简化的统治力计算公式base_score = medal_count * 1.0gold_bonus = gold_count * 1.5return base_score + gold_bonus

前端实现"赛马图"动画的核心代码:

function createRaceChart(sportData, countries) {// 按年份组织数据const yearData = {};sportData.forEach(d => {if (!yearData[d.year]) yearData[d.year] = [];yearData[d.year].push({country: d.country,score: d.dominance_score});});// 获取所有年份并排序const years = Object.keys(yearData).sort();// 设置动画参数let currentYearIndex = 0;const duration = 1000;function updateChart() {const year = years[currentYearIndex];const data = yearData[year].sort((a, b) => b.score - a.score).slice(0, 10);// 更新标题d3.select('#current-year').text(year);// 更新比例尺xScale.domain([0, d3.max(data, d => d.score) * 1.1]);yScale.domain(data.map(d => d.country));// 更新条形const bars = svg.selectAll('.bar').data(data, d => d.country);// 进入的条形bars.enter().append('rect').attr('class', 'bar').attr('x', 0).attr('y', d => yScale(d.country)).attr('height', yScale.bandwidth()).attr('width', 0).attr('fill', d => colorScale(d.country)).transition().duration(duration).attr('width', d => xScale(d.score));// 更新现有条形bars.transition().duration(duration).attr('y', d => yScale(d.country)).attr('width', d => xScale(d.score));// 退出的条形bars.exit().transition().duration(duration).attr('width', 0).remove();// 更新国家标签updateLabels(data);}// 自动播放控制playButton.on('click', () => {if (isPlaying) {clearInterval(timer);playButton.text('播放');} else {timer = setInterval(() => {currentYearIndex = (currentYearIndex + 1) % years.length;updateChart();}, duration + 100);playButton.text('暂停');}isPlaying = !isPlaying;});// 初始化图表updateChart();
}

高维数据可视化的创新

项目实现了一个高维热力图来展示国家-项目之间的关系:

function createHeatmap(data) {// 提取唯一的国家和项目const countries = [...new Set(data.map(d => d.country))];const sports = [...new Set(data.map(d => d.sport))];// 创建二维网格数据const gridData = [];countries.forEach(country => {sports.forEach(sport => {const match = data.find(d => d.country === country && d.sport === sport);gridData.push({country: country,sport: sport,value: match ? match.dominance_score : 0});});});// 创建比例尺const xScale = d3.scaleBand().domain(sports).range([0, width]).padding(0.05);const yScale = d3.scaleBand().domain(countries).range([0, height]).padding(0.05);// 创建颜色比例尺const colorScale = d3.scaleSequential(d3.interpolateYlOrRd).domain([0, d3.max(gridData, d => d.value)]);// 绘制热力图单元格svg.selectAll(".heatmap-cell").data(gridData).enter().append("rect").attr("class", "heatmap-cell").attr("x", d => xScale(d.sport)).attr("y", d => yScale(d.country)).attr("width", xScale.bandwidth()).attr("height", yScale.bandwidth()).attr("fill", d => d.value > 0 ? colorScale(d.value) : "#eee").attr("stroke", "#fff").attr("stroke-width", 0.5).on("mouseover", showTooltip).on("mouseout", hideTooltip);// 实现聚类算法以识别相似模式// ... 聚类实现代码 ...
}

桑基图实现

为展示奥运会中奖牌的"流动"情况,项目实现了桑基图:

function createSankeyDiagram(data) {// 准备节点和连接数据const nodes = [];const links = [];// 创建国家节点data.countries.forEach((country, i) => {nodes.push({id: `country-${country}`,name: country,type: 'country'});});// 创建项目节点data.sports.forEach((sport, i) => {nodes.push({id: `sport-${sport}`,name: sport,type: 'sport'});});// 创建连接data.flows.forEach(flow => {links.push({source: `country-${flow.country}`,target: `sport-${flow.sport}`,value: flow.medals});});// 设置桑基图参数const sankey = d3.sankey().nodeWidth(15).nodePadding(10).extent([[1, 1], [width - 1, height - 5]]);// 计算布局const graph = sankey({nodes: nodes.map(d => Object.assign({}, d)),links: links.map(d => Object.assign({}, d))});// 绘制连接svg.append("g").selectAll("path").data(graph.links).enter().append("path").attr("d", d3.sankeyLinkHorizontal()).attr("stroke-width", d => Math.max(1, d.width)).attr("stroke", d => {// 基于国家的颜色插值return colorScale(d.source.name);}).attr("fill", "none").attr("stroke-opacity", 0.5).on("mouseover", highlightLink).on("mouseout", resetHighlight);// 绘制节点svg.append("g").selectAll("rect").data(graph.nodes).enter().append("rect").attr("x", d => d.x0).attr("y", d => d.y0).attr("height", d => d.y1 - d.y0).attr("width", d => d.x1 - d.x0).attr("fill", d => d.type === 'country' ? colorScale(d.name) : "#aaa").attr("stroke", "#000").on("mouseover", highlightNode).on("mouseout", resetHighlight);
}

结语

这个奥运数据可视化项目不仅是一个技术展示,更是数据讲故事能力的生动体现。通过丰富的交互设计和精心构思的动态效果,它让冰冷的奥运数据变成了一个个鲜活的历史故事。项目的核心技术包括:

  1. 使用D3.js的enter-update-exit模式实现数据驱动的动画
  1. 多视图协同分析架构
  1. 创新的统治力评分算法
  1. 高维数据可视化技术

在数据爆炸的时代,如何从海量数据中提取洞见并以直观方式呈现,是数据可视化领域的核心挑战。这个项目展示了现代可视化技术如何将复杂数据转化为可理解、可探索的视觉形式,让数据不仅被"看到",更被"理解",这正是数据可视化的魅力所在。

相关文章:

奥运数据可视化:探索数据讲述奥运故事

在数据可视化的世界里,体育数据因其丰富的历史和文化意义,常常成为最有吸引力的主题之一。今天我要分享一个令人着迷的奥运数据可视化项目,它巧妙地利用交互式图表和动态动画,展现了自1896年至今奥运会的发展历程和各国奥运成就的…...

linux环境下 安装svn并且创建svn版本库详细教程

​一、安装SVN​ ​通过yum安装Subversion​ 在Linux系统中执行以下命令安装: yum install subversion -y 安装完成后,验证版本: svnserve --version ​二、创建版本库 ​选择存储路径并创建目录​ 通常将版本库放在/var/svn或/usr/local/…...

STM32控制电机

初始化时钟:在 STM32 的程序中,初始化系统时钟,一般会使用 RCC(Reset and Clock Control)相关函数来配置时钟。例如,对于 STM32F103 系列,可能会使用 RCC_APB2PeriphClockCmd 函数来使能 GPIO 和…...

Ubuntu 更改 Nginx 版本

将 1.25 降为 1.18 先卸载干净 # 1. 完全卸载当前Nginx sudo apt purge nginx nginx-common nginx-core# 2. 清理残留配置 sudo apt autoremove sudo rm -rf /etc/apt/sources.list.d/nginx*.list修改仓库地址 # 添加仓库(通用稳定版仓库) codename$(…...

微服务初步学习

系统架构演变过程 一、单体架构 前后端都在一个项目中,包括我们现在的前后端分离开发,都可以看作是一个单体项目。 二、集群架构 把一个服务部署多次,可以解决服务不够的问题,但是有些不必要的功能也跟着部署多次。 三、垂直架…...

旧 docker 版本通过 nvkind 搭建虚拟多节点 gpu 集群的坑

踩坑 参考nvkind教程安装到Setup这一步,由于docker版本较旧,–cdi.enabled 和 config 参数执行不了 手动修改 /etc/docker/daemon.json 配置文件 "features": {"cdi": true}手动修改 /etc/nvidia-container-runtime/config.toml 配…...

Fabric 服务端插件开发简述与聊天事件监听转发

原文链接&#xff1a;Fabric 服务端插件开发简述与聊天事件监听转发 < Ping通途说 0. 引言 以前写过Spigot的插件&#xff0c;非常简单&#xff0c;仅需调用官方封装好的Event类即可。但Fabric这边在开发时由于官方文档和现有互联网资料来看&#xff0c;可能会具有一定的误…...

Wise Disk Cleaner:免费系统清理工具,释放空间,提升性能

Wise Disk Cleaner是一款功能强大且完全免费的系统清理工具&#xff0c;专为帮助用户清理系统中的无用文件和垃圾文件而设计。它能够有效释放磁盘空间&#xff0c;提高系统运行速度&#xff0c;确保电脑始终保持最佳性能。无论是日常维护还是深度清理&#xff0c;Wise Disk Cle…...

排序算法之高效排序:快速排序,归并排序,堆排序详解

排序算法之高效排序&#xff1a;快速排序、归并排序、堆排序详解 前言一、快速排序&#xff08;Quick Sort&#xff09;1.1 算法原理1.2 代码实现&#xff08;Python&#xff09;1.3 性能分析 二、归并排序&#xff08;Merge Sort&#xff09;2.1 算法原理2.2 代码实现&#xf…...

主打「反激进」的一汽丰田,靠稳扎稳打的技术实现突围

文/王俣祺 导语&#xff1a;今年的上海车展&#xff0c;当新势力都在用“1000TOPS算力”“激光雷达矩阵”等参数堆砌着一个个技术神话的时候&#xff0c;一汽丰田却选择了一条不同的路——用“反激进”的技术哲学&#xff0c;在电动化和智能化的大风向中&#xff0c;构建独特的…...

变量赋值和数据类型

对象 Python是面相对象的编程语言&#xff0c;在Python一些都是对象&#xff0c;对象由标识、类型、值三部分组成&#xff0c;本质上来讲&#xff0c;系统分配一块内存&#xff0c;这块内存中存储了特定了的值&#xff0c;还支持特定类型的相关操作。 标识&#xff1a;即对象…...

【笔记】cri-docker.service和containerd

cri-docker.service 和 containerd 都是 Kubernetes 支持的容器运行时组件&#xff0c;但它们的架构、功能定位及与 Docker 的关系有显著差异。以下是它们的核心区别和关联&#xff1a; 1. 功能定位 组件核心角色是否直接支持 CRIcontainerd轻量级容器运行时&#xff0c;直接管…...

技术文章:解决汇川MD500系列变频器干扰问题——GRJ9000S EMC滤波器的应用

1. 引言 汇川MD500系列变频器&#xff08;Variable Frequency Drive, VFD&#xff09;以其高性能、宽功率范围&#xff08;0.4kW-500kW&#xff09;和灵活的控制方式&#xff0c;广泛应用于工业自动化领域&#xff0c;如风机、水泵、传送带和压缩机等。然而&#xff0c;MD500系…...

频域中的反射-信号完整性分析

频域中的反射: 频域与时域的桥梁是傅里叶变换,一个周期信号可以拆分为许多个正弦波。所谓从频域中看信号,看到的可以是很多个频域中的点,也可以是许多个正弦波。 所以在大家眼中看到的信号如图4-13所示。我们可以将该信号分解为图4-14所示信号。 让我们来思考下面这个问题:…...

window nvidia-smi命令 Failed to initialize NVML: Unknown Error

如果驱动目录下的可以执行&#xff0c;那可能版本原因 "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"复制"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"替换 C:\Windows\System32\nvidia-smi.exe 或者 把C:\Windows\System3…...

ubuntu 20.04 更改国内镜像源-阿里源 确保可用

镜像源是跟linux版本一一对应的,查询自己系统的版本号&#xff1a; 命令&#xff1a;lsb_release -a macw:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal macw:~$…...

Elasticsearch 学习(一)如何在Linux 系统中下载、安装

目录 一、Elasticsearch 下载二、使用 yum、dnf、zypper 命令下载安装三、使用 Docker 本地快速启动安装&#xff08;ESKibana&#xff09;【测试推荐】3.1 介绍3.2 下载、安装、启动3.3 访问3.4 修改配置&#xff0c;支持ip访问 官网地址&#xff1a; https://www.elastic.co/…...

PYTHON训练营DAY27

装饰器 编写一个装饰器 logger&#xff0c;在函数执行前后打印日志信息&#xff08;如函数名、参数、返回值&#xff09; logger def multiply(a, b):return a * bmultiply(2, 3) # 输出: # 开始执行函数 multiply&#xff0c;参数: (2, 3), {} # 函数 multiply 执行完毕&a…...

Shell脚本日志输出完整指南(AI)

一、基础日志输出方法 1. 标准输出与错误重定向 在Shell脚本中&#xff0c;可以使用重定向操作符将命令输出记录到日志文件&#xff1a; >&#xff1a;覆盖写入文件>>&#xff1a;追加写入文件2>&#xff1a;重定向错误输出&>&#xff1a;同时重定向标准…...

node.js文件系统(fs) - 创建文件、打开文件、写入数据、追加数据、读取数据、创建目录、删除目录

注意&#xff1a;以下所有示例均是异步语法&#xff01; 注意&#xff1a;以下所有示例均是异步语法&#xff01; 创建文件 node.js 允许我们在计算机本地创建文件&#xff0c;例如创建一个 word 文件&#xff1a; // 引入核心模块(fs) var fs require(fs)// API fs.writeF…...

关于如何本地启动xxl-job,并且整合SpringBoot

1. 本地安装xxl-job并启动 拉取xxl-job的代码 git clone gitgithub.com:xuxueli/xxl-job.git配置xxl-job数据库 拉取代码后&#xff0c;代码的doc/db目录下有官方配置好的sql脚本&#xff0c;执行里面的sql脚本至本地数据库 3. 修改xxl-job默认的数据库配置 spring.dataso…...

基于Unity的简单2D游戏开发

基于Unity的简单2D游戏开发 摘要 本文围绕基于Unity的简单2D游戏开发进行深入探讨,旨在分析其开发过程中的技术架构与实现策略。通过文献综述与市场分析,研究发现,近年来Unity引擎因其优秀的跨平台特性及可视化编程理念,成为2D游戏开发的主要工具。文章首先梳理了游戏开发的…...

在服务器上安装AlphaFold2遇到的问题(3)_cat: /usr/include/cudnn_version.h: 没有那个文件或目录

[rootlocalhost ~]# cat /usr/include/cudnn_version.h cat: /usr/include/cudnn_version.h: 没有那个文件或目录这个错误表明系统找不到 cudnn_version.h 头文件&#xff0c;说明 cuDNN 的开发文件&#xff08;头文件&#xff09;没有正确安装。以下是完整的解决方案&#xff…...

Java生产环境设限参数教学

哈哈&#xff0c;这个问题问得好&#xff01;咱们用开餐厅的比喻来理解生产环境的四大必须设限参数&#xff0c;保证你听完再也不会忘&#xff01;&#xff08;搓手手&#xff09; 1. 堆内存上限&#xff1a;-Xmx&#xff08;厨房的最大容量&#xff09; 问题&#xff1a;想象…...

武汉火影数字全息剧秀制作:科技与艺术的梦幻联动

全息剧秀是通过全息投影技术、多媒体互动技术、舞台表演艺术等元素深度融合的新型演出形式。 随着科技的不断进步&#xff0c;投影技术的更加成熟&#xff0c;全息剧秀作为演艺行业的创新力量&#xff0c;正以其独特的魅力和无限的潜力&#xff0c;为观众带来全新的视听盛宴。 …...

MySQL锁机制详解与加锁流程全解析

一、MySQL锁机制全景图 1.1 锁类型体系 #mermaid-svg-czUB6iJgmHuOPdN1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-czUB6iJgmHuOPdN1 .error-icon{fill:#552222;}#mermaid-svg-czUB6iJgmHuOPdN1 .error-text{f…...

云轴科技ZStack官网上线Support AI,智能助手助力高效技术支持

5月16日&#xff0c;云轴科技ZStack在官网&#xff08;www.zstack.io&#xff09;正式上线ZStack Support AI智能助手。该系统是ZStack应用人工智能于技术支持服务领域的重要创新&#xff0c;基于自研ZStack AIOS平台智塔及LLMOPS技术打造。 ZStack Support AI定位为智能客服&…...

深度学习笔记23-LSTM实现火灾预测(Tensorflow)

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a; 一、前期准备 1.导入数据 import pandas as pd import numpy as npdf_1 pd.read_csv("D:\TensorFlow1\woodpine2.csv") df_1import matplotlib.pyplot as…...

单例模式(Singleton Pattern)详解

单例模式(Singleton Pattern)详解 1. 定义与核心目标 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。核心目标: 控制实例数量:防止重复创建对象,节省资源。统一管理共享资源:如配置管理、数据库连接池、日志处理器等。2. 实现方式及对比 (…...

IntelliJ IDEA打开项目后,目录和文件都不显示,只显示pom.xml,怎样可以再显示出来?

检查.idea文件夹 如果项目目录中缺少.idea文件夹&#xff0c;可能导致项目结构无法正确加载。可以尝试删除项目根目录下的.idea文件夹&#xff0c;然后重新打开项目&#xff0c;IDEA会自动生成新的.idea文件夹和相关配置文件&#xff0c;从而恢复项目结构。 问题解决&#xff0…...

LongRefiner:解决长文档检索增强生成的新思路

大语言模型与RAG的应用越来越广泛&#xff0c;但在处理长文档时仍面临不少挑战。今天我们来聊聊一个解决这类问题的新方法——LongRefiner。 背景问题&#xff1a;长文档处理的两大难题 使用检索增强型生成&#xff08;RAG&#xff09;系统处理长文档时&#xff0c;主要有两个…...

Tcping详细使用教程

Tcping详细使用教程 下载地址 https://download.elifulkerson.com/files/tcping/0.39/在windows环境下安装tcping 在以上的下载地中找到exe可执行文件&#xff0c;其中tcping.exe适用于32位Windows系统&#xff0c;tcping64.exe适用于64位Windows操作系统。 其实tcping是个…...

Java + 鸿蒙双引擎:ZKmall开源商城如何定义下一代B2C商城技术标准?

在 B2C 电商领域持续革新的当下&#xff0c;技术架构的优劣成为决定商城竞争力的核心要素。ZKmall开源商城以其创新融合的 Java 与鸿蒙双引擎&#xff0c;为下一代 B2C 商城技术标准勾勒出全新蓝图&#xff0c;在性能、兼容性、拓展性等关键维度实现了重大突破。 一、Java 技术…...

华为云Flexus+DeepSeek征文|基于Dify平台tiktok音乐领域热门短视频分析Ai agent

前言 在当今数字化快速发展的时代&#xff0c;人工智能技术尤其是大模型的应用&#xff0c;正逐渐成为推动各行业创新与变革的关键力量。大模型凭借其强大的语言理解、生成和逻辑推理能力&#xff0c;为企业和开发者提供了全新的解决方案和应用可能性。然而&#xff0c;将这些…...

排序算法之线性时间排序:计数排序,基数排序,桶排序详解

排序算法之线性时间排序&#xff1a;计数排序、基数排序、桶排序详解 前言一、计数排序&#xff08;Counting Sort&#xff09;1.1 算法原理1.2 代码实现&#xff08;Python&#xff09;1.3 性能分析1.4 适用场景 二、基数排序&#xff08;Radix Sort&#xff09;2.1 算法原理2…...

HarmonyOS 开发之 —— 合理使用动画与转场

HarmonyOS 开发之 —— 合理使用动画与转场 谢谢关注!! 前言:上一篇文章主要介绍HarmonyOs开发之———UIAbility进阶:https://blog.csdn.net/this_is_bug/article/details/147976323?spm=1011.2415.3001.10575&sharefrom=mp_manage_link 在移动应用开发中,动画与转…...

网络流量分析 | NetworkMiner

介绍 NetworkMiner 是一款适用于Windows&#xff08;也适用于Linux/Mac&#xff09;的开源网络取证分析工具。它可被用作被动网络嗅探器/数据包捕获工具&#xff0c;也可被用于检测操作系统、会话、主机名、开放端口等&#xff0c;还能被用于解析pcap文件进行离线分析。点击此…...

EtherCAT转ProfiNet智能网关选型策略匹配S7-1500与CX5140通讯需求的关键参数对比

一、案例背景 随着新能源行业的迅猛发展&#xff0c;锂电池生产制造企业面临着日益激烈的市场竞争和不断增长的生产需求。某锂电池生产企业在扩大产能的过程中&#xff0c;新建了一条锂电池生产线。该生产线采用了倍福CX5140PLC作为EtherCAT协议主站&#xff0c;控制着涂布机、…...

适合学校使用的桌面信息看板,具有倒计时、桌面时钟、课程表、天气预报、自动新闻联播、定时关机、消息通知栏、随机点名等功能。

简介 教育时钟&#xff08;Education Clock&#xff09; 是一款致力于帮助学习者科学规划学习时间、提高学习效率的开源工具。由 Return-Log 团队开发&#xff0c;适配多平台&#xff08;Windows、Mac、Linux&#xff09;&#xff0c;界面简洁直观&#xff0c;操作便捷。通过设…...

兰亭妙微设计:为生命科技赋予人性化的交互语言

在医疗科技日新月异的今天&#xff0c;卓越的硬件性能唯有匹配恰如其分的交互语言&#xff0c;方能真正发挥价值。作为专注于医疗UI/UX设计的专业团队&#xff0c;兰亭妙微设计&#xff08;www.lanlanwork.com&#xff09;始终相信&#xff1a;每一处像素的排布&#xff0c;都应…...

redis数据结构-12(配置 RDB 快照:保存间隔和压缩)

配置 RDB 快照&#xff1a;保存间隔和压缩 Redis 持久性对于确保在服务器重启或发生故障时数据不会丢失至关重要。虽然 Redis 以其内存中数据存储而闻名&#xff0c;但它提供了将数据持久化到磁盘的机制。本章节重点介绍其中一种机制&#xff1a;Redis 数据库 &#xff08;RDB…...

SG7050VAN差分晶振,X1G0042810033,EPSON爱普生以太网6G晶振

产品简介 SG7050VAN差分晶振,X1G0042810033,EPSON爱普生以太网6G晶振&#xff0c;日本EPSON爱普生株式会社&#xff0c;进口晶振型号&#xff1a;SG7050VAN&#xff0c;编码为&#xff1a;X1G0042810033&#xff0c;频率为&#xff1a;156.250000 MHz&#xff0c;小体积晶振尺…...

nfs网络文件系统

nfs网络文件系统简介 NFS (Network File system ,网络文件系统)是由SUN公司研制的UNIX表示层协议&#xff0c;它允许网络中的计算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源&#xff0c;主要在unix系列操作系统上使用。在NFS的应用中&#xff0c;本地NFS的客…...

西安前端面试

面试1 1.vue2和vue3的原理及区别 2.伪数组 3.对箭头函数怎么理解的 4.vue父子组件传值的几种方式 5.对Promise的理解 面试2 1.两个升序数组实现合并升序排序 2.数组拍平[3, [[7, [1, 5]], 4], 8, [6]] 面试3 1.let var const的区别&#xff0c;什么时候const能改变 …...

Linux常用命令42——tar压缩和解压缩文件

在使用Linux或macOS日常开发中&#xff0c;熟悉一些基本的命令有助于提高工作效率&#xff0c;tar 是 Linux 和 Unix 系统中用于归档文件和目录的强大命令行工具。tar 名字来自 "tape archive"&#xff08;磁带归档&#xff09;&#xff0c;最初用于将文件打包到磁带…...

AML 数据集

在公开的AML&#xff08;急性髓性白血病&#xff09;数据集中&#xff0c;有几个包含图像和多组学数据的资源&#xff0c;且部分带有生存状态和生存时间的标签。以下是一些相关数据集&#xff1a; 1. TCGA-AML (The Cancer Genome Atlas - Acute Myeloid Leukemia) 描述&…...

什么是Rosetta?

Apple 提供的「动态二进制翻译器」&#xff0c;让基于 Intel 的 x86_64 应用/二进制在 Apple Silicon&#xff08;M1/M2/M3&#xff0c;ARM 架构&#xff09;上运行 项目说明&#x1f9e0; Rosetta 2是 Apple 提供的一种「Intel → ARM 翻译器」&#x1f5a5;️ 功能让你的 AR…...

Redis解析

Redis解析 一、单线程模型 redis在io层面是多线程的&#xff0c;在数据处理层面是单线程的。 多线程一般用于&#xff1a; 关闭连接删除/淘汰内存网络IO 1.1 io多路复用 redis使用nio&#xff08;select、poll、epoll&#xff09;的方式处理socket 主线程负责接收建立连接…...

轨迹误差评估完整流程总结(使用 evo 工具)

roslaunch .launch rosbag play your_dataset.bag -r 2.0 ✅ 第二步&#xff1a;录制估计轨迹 bash 复制编辑 rosbag record -O traj_only.bag /aft_mapped_to_init 运行一段时间后 CtrlC 停止&#xff0c;生成 traj_only.bag 第三步&#xff1a;提取估计轨迹和真值轨迹为…...

服务器死机了需要检查哪些问题

在这个数字化的时代&#xff0c;服务器就像是我们信息世界的“大管家”&#xff0c;可要是它突然死机了&#xff0c;那可真是让人头疼。今天咱们就来聊聊&#xff0c;服务器死机了&#xff0c;到底需要检查哪些问题。 一、硬件问题 电源供应&#xff1a;检查电源是否稳定&…...