数据可视化大屏设计与实现

本文将带你一步步了解如何使用 ECharts 实现一个数据可视化大屏,并且如何动态加载天气数据展示。通过整合 HTML、CSS、JavaScript 以及后端接口请求,我们可以构建一个响应式的数据可视化页面。

1. 页面结构介绍

在此例中,整个页面分为几个主要部分:大屏展示区域、多个数据图表、动态加载的表格数据,以及地图展示等功能模块。我们将详细介绍每一部分的实现和交互。

1.1 页面整体结构

以下是页面的结构,其中包含多个图表、数据表格和地图组件:

<body><!-- 放大显示的容器 --><div id="overlay1" class="echarts-overlay"><div id="echart-large1" class="echarts-large"></div></div><div id="overlay2" class="echarts-overlay"><div id="echart-large2" class="echarts-large"></div></div><div id="overlay3" class="echarts-overlay"><div id="echart-large3" class="echarts-large"></div></div><div id="overlay4" class="echarts-overlay"><div id="echart-large4" class="echarts-large"></div></div><div id="overlay5" class="echarts-overlay"><div id="echart-large5" class="echarts-large"></div></div><div id="overlay6" class="echarts-overlay"><div id="echart-large6" class="echarts-large"></div></div><div id="overlay7" class="echarts-overlay"><div id="echart-large7" class="echarts-large"></div></div><div id="main" class="main"><div id="title" class="title">大屏可视化展板-ECharts</div><div id="content" class="content"><div id="left-chart" class="left-chart"><div id="chart1" class="chart chart1"></div><div id="chart2" class="chart chart2"></div><div id="chart3" class="chart chart3"></div></div><div id="mid-chart" class="mid-chart"><div class="count"><div id="count1" class="container number"></div><div class="container number count2">328193</div></div><div id="chart7" class="chart7 map"></div></div><div id="right-chart" class="right-chart"><div id="chart4" class="chart chart4"></div><div id="chart5" class="chart chart5"></div><div id="chart6" class="chart chart6"></div></div></div></div><div class="model_content"><div class="model model1"><div class="title-content"><table><thead><tr><th class="th1">城市</th><th class="th2">天气</th></tr></thead></table></div><div class="scroll-content"><table><tbody id="tableBody"><!-- 通过 JavaScript 插入数据 --></tbody></table></div></div><div class="model model1"><div class="title-content"><table><thead><tr><th class="th1">城市</th><th class="th2">温度</th></tr></thead></table></div><div class="scroll-content"><table><tbody id="tableBody2"><!-- 通过 JavaScript 插入数据 --></tbody></table></div></div></div><script>document.addEventListener("DOMContentLoaded", function () {axios.get('http://localhost:5000/api/weather_data').then(response => {console.log("1111", response.data);const tableBody = document.getElementById('tableBody');if (tableBody) {let rowsHTML = '';response.data.forEach((item) => {rowsHTML += `<tr><td>${item.city}</td><td>${item.weather}</td></tr>`;});tableBody.innerHTML = rowsHTML;}}).catch(error => {console.error("Error fetching weather data", error);});});</script><script src="chart1.js"></script>
</body>

1.2 页面布局说明

页面采用了一个主页面和多个区域:

  • Overlay 区域:用于展示大图,通常是当用户点击某个图表时,将会弹出放大的图表展示区域。
  • Main 区域:包含了标题和三个区域(左侧图表区域、中间数字和地图展示区域、右侧图表区域)。这些区域通过 ECharts 图表进行数据的动态展示。
  • Model Content 区域:包含两个表格模块,分别展示了天气信息和温度信息。表格内容通过接口返回的数据动态填充。

2. 数据可视化实现

2.1 图表部分

通过使用 ECharts 图表库,我们可以在页面的不同位置展示各种类型的图表(如折线图、柱状图、饼图等)。

<div id="chart1" class="chart chart1"></div>
<div id="chart2" class="chart chart2"></div>
<div id="chart3" class="chart chart3"></div>

2.2 动态加载天气数据

页面中的天气表格通过 Axios 从后台接口 http://localhost:5000/api/weather_data 获取天气数据,并将数据动态填充到表格中。

document.addEventListener("DOMContentLoaded", function () {axios.get('http://localhost:5000/api/weather_data').then(response => {const tableBody = document.getElementById('tableBody');if (tableBody) {let rowsHTML = '';response.data.forEach((item) => {rowsHTML += `<tr><td>${item.city}</td><td>${item.weather}</td></tr>`;});tableBody.innerHTML = rowsHTML;}}).catch(error => {console.error("Error fetching weather data", error);});
});

3. 样式和布局

通过适当的 CSS 样式来确保页面的响应式布局,确保页面在不同的设备和分辨率下展示良好。

#main {display: flex;justify-content: space-between;margin-top: 20px;
}
.left-chart, .mid-chart, .right-chart {width: 32%;
}
.chart {height: 200px;margin-bottom: 20px;
}

4. 整合 ECharts 和数据接口

我们还需要创建 ECharts 实例并绑定到对应的 DOM 元素中。例如:

var myChart1 = echarts.init(document.getElementById('chart1'));
var option1 = {title: { text: '示例图表1' },xAxis: { data: ['A', 'B', 'C', 'D'] },yAxis: {},series: [{ data: [120, 200, 150, 80], type: 'bar' }]
};
myChart1.setOption(option1);

同样的方法可以应用到其他图表中,根据不同的需求加载对应的图表类型。

5. 完整代码

index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>大屏数据可视化</title><script src="echarts.js"></script><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><!-- 引入世界地图数据 --><script src="world.js"></script><script src="echarts-gl.min.js"></script><script src="axios.min.js"></script><script src="china.js"></script> <!-- 引入 china.js 文件 --><script src="hunan.json"></script> <!-- 引入 china.json 文件 --><link rel="icon" href="favicon.png" type="image/png"><link rel="stylesheet" href="index.css"><style>/* 放大后的容器 */.echarts-overlay {position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: rgba(0, 0, 0, 0.7);display: none;justify-content: center;align-items: center;z-index: 9999;}/* 放大的 ECharts 图表 */.echarts-large {/* margin: 50% 50%; */width: 100vw;height: 95vh;z-index: 9999;}</style>
</head><body><!-- 放大显示的容器 --><div id="overlay1" class="echarts-overlay"><div id="echart-large1" class="echarts-large"></div></div><div id="overlay2" class="echarts-overlay"><div id="echart-large2" class="echarts-large"></div></div><div id="overlay3" class="echarts-overlay"><div id="echart-large3" class="echarts-large"></div></div><div id="overlay4" class="echarts-overlay"><div id="echart-large4" class="echarts-large"></div></div><div id="overlay5" class="echarts-overlay"><div id="echart-large5" class="echarts-large"></div></div><div id="overlay6" class="echarts-overlay"><div id="echart-large6" class="echarts-large"></div></div><div id="overlay7" class="echarts-overlay"><div id="echart-large7" class="echarts-large"></div></div><div id="main" class="main"><div id="title" class="title">大屏可视化展板-ECharts</div><div id="content" class="content"><div id="left-chart" class="left-chart"><div id="chart1" class="chart chart1"></div><div id="chart2" class="chart chart2"></div><div id="chart3" class="chart chart3"></div></div><div id="mid-chart" class="mid-chart"><div class="count"><div id="count1" class="container number"></div><div class="container number count2">328193</div></div><div id="chart7" class="chart7 map"></div></div><div id="right-chart" class="right-chart"><div id="chart4" class="chart chart4"></div><div id="chart5" class="chart chart5"></div><div id="chart6" class="chart chart6"></div></div></div></div><div class="model_content"><div class="model model1"><div class="title-content"><table><thead><tr><th class="th1">城市</th><th class="th2">天气</th></tr></thead></table></div><div class="scroll-content"><table><tbody id="tableBody"><!-- 通过 JavaScript 插入数据 --></tbody></table></div></div><div class="model model1"><div class="title-content"><table><thead><tr><th class="th1">城市</th><th class="th2">温度</th></tr></thead></table></div><div class="scroll-content"><table><tbody id="tableBody2"><!-- 通过 JavaScript 插入数据 --></tbody></table></div></div></div><script>document.addEventListener("DOMContentLoaded", function () {// 代码在页面完全加载后执行axios.get('http://localhost:5000/api/weather_data').then(response => {console.log("1111", response.data);const tableBody = document.getElementById('tableBody');// 如果表格主体部分存在,开始插入数据if (tableBody) {let rowsHTML = '';for (let i = 0; i < response.data.length; i++) {rowsHTML += `<tr><td>${response.data[i].name}</td><td>天气 ${response.data[i].values.weather}</td></tr>`;}tableBody.innerHTML = rowsHTML;} else {console.error('tableBody元素未找到');}}).catch(error => console.error('Error:', error));});document.addEventListener("DOMContentLoaded", function () {// 代码在页面完全加载后执行axios.get('http://localhost:5000/api/weather_data').then(response => {console.log("1111", response.data);const tableBody = document.getElementById('tableBody2');// 如果表格主体部分存在,开始插入数据if (tableBody) {let rowsHTML = '';for (let i = 0; i < response.data.length; i++) {rowsHTML += `<tr><td>${response.data[i].name}</td><td>${response.data[i].value} ℃</td></tr>`;}tableBody.innerHTML = rowsHTML;} else {console.error('tableBody元素未找到');}}).catch(error => console.error('Error:', error));});</script><script src="chart1.js"></script><script src="chart2.js"></script><script src="chart3.js"></script><script src="chart4.js"></script><script src="chart5.js"></script><script src="chart6.js"></script><script src="chart7.js"></script><script src="count1.js"></script><script>// 监听窗口大小变化,确保 ECharts 图表自适应window.addEventListener('resize', function () {var chart1 = echarts.getInstanceByDom(document.getElementById('chart1'));var chart2 = echarts.getInstanceByDom(document.getElementById('chart2'));var chart3 = echarts.getInstanceByDom(document.getElementById('chart3'));var chart4 = echarts.getInstanceByDom(document.getElementById('chart4'));var chart5 = echarts.getInstanceByDom(document.getElementById('chart5'));var chart6 = echarts.getInstanceByDom(document.getElementById('chart6'));var chart7 = echarts.getInstanceByDom(document.getElementById('chart7'));if (chart1) chart1.resize();if (chart2) chart2.resize();if (chart3) chart3.resize();if (chart4) chart4.resize();if (chart5) chart5.resize();if (chart6) chart6.resize();if (chart7) chart7.resize();});let debounceTimeout;window.addEventListener('resize', function () {// 清除之前的延时调用clearTimeout(debounceTimeout);// 设置新的延时调用,在窗口大小调整停止 300 毫秒后刷新页面debounceTimeout = setTimeout(function () {if (window.innerWidth < 1200) {window.location.reload();}}, 100); // 300 毫秒的延迟});</script>
</body></html>

index.css

.main {width: 100%;height: 100%;display: grid;grid-template-rows: 5% 95%;background-image: url("background.png");background-repeat: no-repeat;background-size: cover;
}.title {width: 100%;text-align: center;line-height: 56.14px;font-size: 30px;font-weight: 700;color: aliceblue;text-shadow: 0px 0px 9px #159AFF;position: relative;/* 为了定位下划线 */color: #00f7ff;/* 文字颜色为科技感的蓝色 */
}/* 下框线效果 */
.title::after {content: '';/* 创建一个空的内容来作为下框线 */position: absolute;/* 定位到标题下方 */left: 0;/* 从左边开始 */bottom: -2px;/* 离文字稍微有点距离 */width: 100%;/* 让下框线宽度与标题一致 */height: 3px;/* 下框线的高度 */background: linear-gradient(90deg, rgba(0, 247, 255, 0.8), rgba(255, 0, 255, 0.8));/* 使用渐变效果 */box-shadow: 0 0 10px rgba(0, 247, 255, 0.6), 0 0 15px rgba(255, 0, 255, 0.6);/* 加入光晕效果 */
}.content {width: 100%;height: 100vh;display: grid;grid-template-columns: 30% 40% 30%;
}.left-chart {width: 100%;height: 100vh;display: grid;grid-template-rows: repeat(3, 1fr);/* 3行平分容器高度 */
}.mid-chart {width: 100%;height: 100vh;display: grid;grid-template-rows: 1fr 5fr;/* 3行平分容器高度 */
}.right-chart {width: 100%;height: 100vh;display: grid;grid-template-rows: repeat(3, 1fr);/* 3行平分容器高度 */
}.chart {width: 100%;height: 100%;background-image: url("kk.png");background-repeat: no-repeat;background-size: 100% 103%;background-position: center;
}.chart7 {width: 100%;height: 80%;
}@font-face {font-family: "DS-Digital";src: url("./count.ttf");
}.number {text-align: center;font-family: DS-Digital;font-size: 80px;color: aliceblue;line-height: 200px;text-shadow: 0px 0px 9px #159AFF;
}.count {display: grid;grid-template-columns: 1fr 1fr;background-image: url("VCG211513642548.png");background-repeat: no-repeat;background-size: 120% 130%;background-position: center;margin-top: 10px;
}/* 窗口尺寸变化时调整布局 */
@media (max-width: 1200px) {.main {}.content {grid-template-columns: 1fr 1fr 1fr;/* 中等屏幕时,调整为两列 */}.title {font-size: 2vw;}
}@media (max-width: 768px) {.content {grid-template-columns: 1fr;/* 小屏幕时,调整为单列 */}.title {font-size: 2vw;}
}/* 使 model_content 定位到页面的中间下方 */
.model_content {position: fixed;/* 使用固定定位 */left: 50%;/* 使其水平居中 */bottom: 20px;/* 距离页面底部 20px */transform: translateX(-50%);/* 完全居中对齐 */z-index: 999;/* 确保浮动层在其他内容之上 */display: flex;/* 使用 flexbox 来排列两个 .model 元素 */gap: 50px;/* 两个 .model 元素之间的间隙 */
}/* 给 model 元素设置大小和背景蒙版 */
.model {width: 300px;/* 设置每个 model 的宽度 */height: 200px;/* 设置每个 model 的高度 */background-color: rgba(173, 216, 230, 0.4);/* 设置半透明黑色背景 */border-radius: 10px;/* 设置圆角 */position: relative;/* 使其可嵌套其他内容 */overflow: hidden;/* 隐藏超出盒子的内容 */
}/* .model1 和 .model2 可以有不同的颜色或样式,按照需要自定义 */
.model1 {background-color: rgba(0, 0, 0, 0.6);/* 半透明深黑色 */
}.model2 {background-color: rgba(0, 0, 0, 0.4);/* 半透明浅黑色 */
}/* 滚动内容容器 */
.scroll-content {display: flex;flex-direction: column;/* 垂直排列数据 */overflow: hidden;/* 隐藏超出容器的内容 */animation: scroll 50s linear infinite;
}/* 控制数据项的间距 */
.scroll-content p {margin: 10px 0;
}/* 表格样式 */
table {width: 100%;border-collapse: collapse;/* 合并边框 *//* 半透明背景 */border-radius: 8px;box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}.title-content {position: relative;z-index: 999;
}/* 表头样式 */
th {background-color: rgb(4, 45, 97);/* 半透明蓝色背景 */color: rgb(167, 165, 165);/* 白色文字 */padding: 10px;font-weight: bold;                                                                                                                                     border-bottom: 1px solid rgba(255, 255, 255, 0.3);text-align: center;
}/* 表格单元格样式 */
td {padding: 8px;text-align: left;border-bottom: 1px solid #ddd;font-size: 14px;text-align: center;color: rgb(223, 218, 218);
}/* 鼠标悬浮时改变表格行背景 */
tr:hover {background-color: rgba(0, 123, 255, 0.1);
}/* 设置滚动动画 */
@keyframes scroll {0% {transform: translateY(0);}100% {transform: translateY(-100%);/* 向上滚动一个完整的容器高度 */}
}

api.py

from flask import Flask, jsonify
from flask_cors import CORS  # 导入CORS
import sqlite3# 创建Flask应用实例
app = Flask(__name__)# 启用CORS
# CORS(app)  # 这将允许所有源的请求
CORS(app, origins='http://127.0.0.1:5500')# 定义路由和视图函数
@app.route('/')
def hello_world():return 'Hello, World!'@app.route('/api/bar_data')
def get_data():"""从SQLite数据库中读取数据,并将其转换为JSON格式返回。:return: 一个JSON格式的响应,包含从数据库中读取的数据。"""conn = sqlite3.connect('database.db')cursor = conn.cursor()# 查询数据cursor.execute('SELECT category, sales FROM bar_data')rows = cursor.fetchall()# 将数据转换为字典列表data = {'categories': [row[0] for row in rows], 'sales': [row[1] for row in rows]}# 关闭连接conn.close()return jsonify(data)@app.route('/api/weather_data')
def get_weather_data():"""从SQLite数据库中读取数据,并将其转换为JSON格式返回。:return: 一个JSON格式的响应,包含从数据库中读取的数据。"""conn = sqlite3.connect('database.db')cursor = conn.cursor()# 查询数据cursor.execute('SELECT date, city,weather, max_tem, min_tem, tem, update_time FROM weather')rows = cursor.fetchall()# 将数据转换为字典列表data = [{'name': row[1], 'value': row[5], 'values': {'weather':row[2],'max_tem':row[3],'min_tem':row[4],}} for row in rows]# 关闭连接conn.close()return jsonify(data)@app.route('/api/line_bar_data')
def get_line_bar_data():"""从SQLite数据库中读取数据,并将其转换为JSON格式返回。:return: 一个JSON格式的响应,包含从数据库中读取的数据。"""conn = sqlite3.connect('database.db')cursor = conn.cursor()# 查询数据cursor.execute('SELECT category, value FROM line_bar_data')rows = cursor.fetchall()# 将数据转换为字典列表data = {'categories': [row[0] for row in rows],'values': [row[1] for row in rows]}print(data)# 关闭连接conn.close()return jsonify(data)# 启动应用
if __name__ == '__main__':app.run(debug=True)

6. 小结

通过结合 ECharts、Axios 和后端数据接口,您可以轻松构建一个功能全面、动态更新的数据可视化大屏。本示例通过展示图表、动态填充表格数据和地图展示等功能,帮助用户实现实时数据的可视化展示。

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

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

相关文章

搭建Hadoop源代码阅读环境

个人博客地址:搭建Hadoop源代码阅读环境 | 一张假钞的真实世界 环境 Mac OS X EI Capitan 10.11.6java version “1.7.0_80”git version 2.7.4 (Apple Git-66)Apache Maven 3.3.9下载源代码 从Git上下载最新源代码: git clone git://git.apache.org/hadoop-common.git 构…

【2024年华为OD机试】 (B卷,100分)- 金字塔,BOSS的收入(Java JS PythonC/C++)

一、问题描述 微商模式收入计算 题目描述 微商模式中&#xff0c;下级每赚 100 元就要上交 15 元。给定每个级别的收入&#xff0c;求出金字塔尖上的人的收入。 输入描述 第一行输入 N&#xff0c;表示有 N 个代理商上下级关系。接下来输入 N 行&#xff0c;每行三个数&am…

光伏储能交直流微电网Matlab/Simulink仿真模型

博士毕业后项目和课题的交接工作也都基本上结束了&#xff0c;之前从20年我博一开始创作的博客&#xff0c;我也将从25年伊始重新进行更新&#xff0c;在保留原有内容的基础上&#xff0c;在对现如今的研究热点进行补充&#xff0c;希望能为各位校友提供一定的研究思路。首先是…

Windows中安装RabbitMQ

安装Erlang 下载地址&#xff1a;https://www.erlang.org/downloads 配置环境变量 变量名&#xff1a;ERLANG_HOME 变量值&#xff1a;D:\tools\Erlang-27.2 Path&#xff1a;%ERLANG_HOME%\bin 验证配置是否成功 erl 安装RabbitMQ 下载地址&#xff1a;https://www.rabbitm…

线性代数概述

矩阵与线性代数的关系 矩阵是线性代数的研究对象之一&#xff1a; 矩阵&#xff08;Matrix&#xff09;是一个按照长方阵列排列的复数或实数集合&#xff0c;是线性代数中的核心概念之一。矩阵的定义和性质构成了线性代数中矩阵理论的基础&#xff0c;而矩阵运算则简洁地表示和…

2024年度总结:从后端Java到全栈成长的蜕变

目录 前言1. 用数据与实践书写成长篇章2. 技术与生活的双重蜕变3. 技术的进阶与生活的绽放 前言 今年是我入行的第十年&#xff0c;也是记录在CSDN平台上的第五年。这五年来&#xff0c;我始终坚持记录成长的点滴&#xff0c;将个人事业与博客创作紧密相连。一路走来&#xff0…

关于new和delete的匹配问题

目录 引入 原理 引入 大家先看如下代码&#xff1a; class A { private:int _a 0; };int main() {A* arr1 new A[10];delete arr1;return 0; } 可以发现这里new了一个数组但却用delete释放。先看运行结果&#xff1a; 可以看到程序正常结束并没有崩 &#xff0c;别急我们…

蓝桥杯3526 子树的大小 | 数学规律

题目传送门 这个题目是一个数学题&#xff0c;比较好的方法是从上往下寻找子树的最左和最右的结点&#xff0c;每层统计子结点数&#xff0c;到树的底部时打印结果。 如何求最左、最右的子结点呢&#xff1f; 对于第i个结点,其前面有i-1个结点,每个结点各有m个孩子,再加上1号结…

计算机毕业设计Python+卷积神经网络租房推荐系统 租房大屏可视化 租房爬虫 hadoop spark 58同城租房爬虫 房源推荐系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Rust实现内网穿透工具:从原理到实现

目录 1.前言2.内网穿透原理3.丐版实现3.1 share3.2 server3.3 client3.4 测试4.项目优化4.1 工作空间4.2 代码合并4.3 无锁优化4.4 数据分离4.5 错误处理4.6 测试代码4.7 参数解析本篇原文为:Rust实现内网穿透工具:从原理到实现 更多C++进阶、rust、python、逆向等等教程,可…

Mysql 主从复制原理及其工作过程,配置一主两从实验

主从原理&#xff1a;MySQL 主从同步是一种数据库复制技术&#xff0c;它通过将主服务器上的数据更改复制到一个或多个从服务器&#xff0c;实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器&#xff0c;并在从服务器上执行这些日志中的操作…

【Vue3进阶】Pinia 中的 Store 组合式写法

Hey小伙伴们&#xff01;今天来给大家分享一个 Vue3 状态管理库 Pinia 中非常实用的功能——Store 的组合式写法。通过这种写法&#xff0c;我们可以将多个 store 进行组合和复用&#xff0c;使得代码更加模块化、清晰易读。 如果你对 Vue3 和 Pinia 感兴趣&#xff0c;或者想…

00_专栏《Redis 7.x企业级开发实战教程》介绍

大家好,我是袁庭新。Redis作为一款高性能、多用途的内存数据库,凭借其丰富的数据结构、高速读写能力、原子操作特性及发布订阅等功能,在缓存加速、分布式锁、消息队列等场景中不可或缺,极大提升了系统性能与开发效率,是现代互联网应用架构的关键组件。 你是否在学习Redis…

TensorFlow DAY3: 高阶 API(Keras,Estimator)(完)

TensorFlow 作为深度学习框架&#xff0c;当然是为了帮助我们更便捷地构建神经网络。所以&#xff0c;本次实验将会了解如何使用 TensorFlow 来构建神经网络&#xff0c;并学会 TensorFlow 构建神经网络的重要函数和方法。 知识点 Keras 顺序模型Keras 函数模型Keras 模型存储…

第14章:Python TDD应对货币类开发变化(一)

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…

macOS查看当前项目的 tree 结构

文章目录 使用 tree 命令 macOS 系统默认不包含 tree 命令 使用 tree 命令 使用homebrew自动安装脚本/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"安装 tree&#xff1a;brew install tree查看项目的 tree 结构&#…

Python自动化:基于faker批量生成模拟数据(以电商行业销售数据为例)

引言&#xff1a;个人认为&#xff0c;“造数据”是一个数据分析师的一项基本技能&#xff0c;当然啦&#xff0c;“造数据”不是说胡编乱造&#xff0c;而是根据自己的需求去构造一些模拟数据集&#xff0c;用于测试等用途&#xff0c;而且使用虚拟数据不用担心数据隐私和安全…

WPS数据分析000004

目录 一、表格阅读技巧 冻结窗格 拆分窗口 新建窗口 阅读模式 护眼模式 二、表格打印技巧 打印预览 打印缩放 打印区域 打印标题 分页打印 打印位置 页眉页脚 逐份打印 三、表格保护技巧 锁定单元格 隐藏公式 文档权限 文件加密 一、表格阅读技巧 冻结窗…

【前端】CSS学习笔记

目录 CSS的简介CSS的概念语法 CSS的引入方式内联样式&#xff08;行内样式&#xff09;内部样式外部样式&#xff08;推荐&#xff09; 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…

STL--set(集合)

目录 前言 set: multiset: 一、set 对象创建 1、默认构造 2、初始化列表 3、迭代器 4、拷贝构造 二、set 赋值操作 1、set对象 2、初始化列表 三、set 大小操作 1、判空 2、大小 四、set 数据插入 1、单值插入 2、多值插入 五、set 数据查找 六、set 数据删除…