SQLMesh 系列教程:Airbnb数据分析项目实战
在本文中,我们将探讨如何利用dbt项目的代码库来实现一个简单的SQLMesh项目。本文的基础是基于Udemy讲师为dbt课程创建的示例项目,可以在这个GitHub repo中获得。这个dbt项目是相对完整的示例,我们将使用它作为模板来演示SQLMesh(下一代数据转换工具)的功能。
dbt示例项目在Snowflake中使用Airbnb数据集分析端到端的数据工程工作流。该项目包括将原始数据加载到Snowflake中,创建各种模型,并执行转换以从数据中获得有意义的见解。我们打算使用duckdb作为分析数据库,方便读者直接在本机上测试运行。
简要说明Airbnb数据集
本项目中使用的Airbnb数据集由三个主表组成:raw_listings、raw_reviews和raw_hosts。这些表格包含有关Airbnb房源的信息、对房源的评论以及房东的详细信息。理解这些表之间的关系和意义对于处理和分析数据至关重要。
-
raw_listings(原始房源信息):
• 描述:此表包含有关爱彼迎房源的详细信息,包括房源 ID、网址、名称、房型、最短入住天数、房东 ID、价格以及创建和更新的时间戳。
• 重要性:房源数据提供了爱彼迎上可用房源的全面视图。它是与评论和房东数据相连接的核心表。 -
原始评论:
• 描述:此表包含爱彼迎房源的评论,包含房源 ID、评论日期、评论者姓名、评论内容和情感倾向等信息。
• 重要性:评论数据能提供有关客户体验和满意度的见解。它通过房源 ID 与房源数据相关联。 -
raw_hosts:
• 描述:此表包含有关房源的信息,包括房源 ID、名称、超级房源状态以及创建和更新的时间戳。
• 重要性:房源数据提供了有关提供房源的个人或实体的详细信息。它通过 host_id 与房源数据相关联。
项目最终目标
本项目的首要目标是分析满月日期对爱彼迎(Airbnb)评分和评论的影响。通过利用房源、评论和房东之间的关系,我们旨在得出有关月相周期对客户反馈和满意度影响的有意义的见解。
实现SQLMesh项目的步骤
- 初始化SQLMesh项目
创建一个名为airbnb_sqlmesh的文件夹,并进入该文件夹。执行如下命令初始化SQLMesh项目:
python -m venv .venv
source .venv/bin/activate
pip install "sqlmesh"
sqlmesh init duckdb
-
项目结构
在初始化完成后,将会创建以下目录和文件,从而为我们的 SQLMesh 项目提供组织结构:
• config.yaml:用于您项目的数据库配置文件。
• models:存放 SQL 和 Python 模型的目录。
• audits:存放共享审计的目录。
• tests:存放单元测试的目录。
• macros:存放宏的目录。
删除models、seeds以及tests目录下的示例文件,后续我们会添加实际业务需要的模型。
-
项目配置
在配置文件中定义SQLMesh项目配置。yaml文件。该文件包含数据库连接细节和模型默认值:
gateways:duckdb:connection:type: duckdbdatabase: dw.dbdefault_gateway: duckdbmodel_defaults:dialect: duckdbstart: 2025-03-17
-
加载原始数据
使用以下SQL脚本将原始数据加载到duckdb表中:
INSTALL httpfs;
LOAD httpfs;-- Create and load raw_listings table
CREATE OR REPLACE TABLE raw_listings (id integer,listing_url string,name string,room_type string,minimum_nights integer,host_id integer,price string,created_at datetime,updated_at datetime
);COPY raw_listings FROM 's3://dbtlearn/listings.csv' (ignore_errors true);-- Create and load raw_reviews table
CREATE OR REPLACE TABLE raw_reviews (listing_id integer,date datetime,reviewer_name string,comments string,sentiment string
);COPY raw_reviews FROM 's3://dbtlearn/reviews.csv' (ignore_errors true);-- Create and load raw_hosts table
CREATE OR REPLACE TABLE raw_hosts (id integer,name string,is_superhost string,created_at datetime,updated_at datetime
);COPY raw_hosts FROM 's3://dbtlearn/hosts.csv' (ignore_errors true);
创建模型
源(Source )模型
我们在 models/source 文件夹内的原始数据表基础上创建了三个模型 src_hosts.sql、src_listings.sql 和 src_reviews.sql:
本项目中的源模型旨在对来自 Airbnb 数据集的原始数据进行标准化和准备,以便进一步处理和分析。它们充当中间层,通过重命名列、选择相关字段以及标准化数据等方式将原始数据转换为更易于使用的格式。所有源模型都被实现为视图,确保数据干净、结构化,并为后续在维度和事实模型中的转换和分析做好准备。
src_listings.sql 模型:
MODEL ( name src.SRC_LISTINGS,kind view
);WITH mr_listings AS (SELECT * FROM main.RAW_LISTINGS
)
SELECTid AS listing_id,name AS listing_name,listing_url,room_type,minimum_nights,host_id,price AS price_str,created_at,updated_at
FROM mr_listings;
src_reviews.sql模型:
MODEL (name src.SRC_REVIEWS,kind view
);WITH mr_reviews AS (SELECT * FROM main.raw_reviews
)
SELECTlisting_id,date AS review_date,reviewer_name,comments AS review_text,sentiment AS review_sentiment
FROM mr_reviews;
src_hosts.sql模型:
MODEL (name src.SRC_HOSTS,kind view
);WITH mr_hosts AS (SELECT * FROM main.RAW_HOSTS
)
SELECTid AS host_id,name AS host_name,is_superhost,created_at,updated_at
FROM mr_hosts;
运行命令,生成源模型:
sqlmesh plan dev
生成src__dev schema以及三个视图:
D select table_catalog, table_schema,table_name, table_type from information_schema.tables where table_schema='src__dev';
┌───────────────┬──────────────┬──────────────┬────────────┐
│ table_catalog │ table_schema │ table_name │ table_type │
│ varchar │ varchar │ varchar │ varchar │
├───────────────┼──────────────┼──────────────┼────────────┤
│ dw │ src__dev │ src_hosts │ VIEW │
│ dw │ src__dev │ src_listings │ VIEW │
│ dw │ src__dev │ src_reviews │ VIEW │
└───────────────┴──────────────┴──────────────┴────────────┘
维度模型
在models/dim文件夹中创建维度模型作为视图:
维度模型实现对源数据的清理、丰富和组合,以便进行详细分析。它们处理空值、格式化字段和合并相关数据集。模型dim.dim_hosts_cleaned和dim. dim_listings_cleaned被具体化为视图,而dim.dim_listings_w_hosts被具体化为一个完整的表,每次都完全重新加载。
dim.dim_hosts_cleaned模型:
MODEL (name dim.dim_hosts_cleansed,kind view
);WITH src_hosts AS (SELECT * FROM SOURCE.SRC_HOSTS
)
SELECThost_id,NVL(host_name, 'Anonymous') AS host_name,is_superhost,created_at,updated_at
FROM src_hosts;
dim. dim_listings_cleaned模型:
MODEL (name dim.dim_listings_cleansed,kind view
);WITH src_listings AS (SELECT * FROM SOURCE.SRC_LISTINGS
)
SELECTlisting_id,listing_name,room_type,CASE WHEN minimum_nights = 0 THEN 1 ELSE minimum_nights END AS minimum_nights,host_id,REPLACE(price_str, '$', '')::NUMERIC(10, 2) AS price,created_at,updated_at
FROM src_listings;
dim.dim_listings_w_hosts模型
MODEL (name dim.dim_listings_w_hosts,kind full
);WITH l AS (SELECT * FROM dim.dim_listings_cleansed
),
h AS (SELECT * FROM dim.dim_hosts_cleansed
)
SELECTl.listing_id,l.listing_name,l.room_type,l.minimum_nights,l.price,l.host_id,h.host_name,h.is_superhost AS host_is_superhost,l.created_at,GREATEST(l.updated_at, h.updated_at) AS updated_at
FROM l
LEFT JOIN h ON (h.host_id = l.host_id);
运行命令,生成维度表:
D select table_catalog, table_schema,table_name, table_type from information_schema.tables where table_schema='dim__dev';
┌───────────────┬──────────────┬───────────────────────┬────────────┐
│ table_catalog │ table_schema │ table_name │ table_type │
│ varchar │ varchar │ varchar │ varchar │
├───────────────┼──────────────┼───────────────────────┼────────────┤
│ dw │ dim__dev │ dim_hosts_cleansed │ VIEW │
│ dw │ dim__dev │ dim_listings_cleansed │ VIEW │
│ dw │ dim__dev │ dim_listings_w_hosts │ VIEW │
└───────────────┴──────────────┴───────────────────────┴────────────┘
事实模型
Fact 模型会在 models/fct 文件夹内创建增量型 Fact 模型:
Fact 模型 fct.reviews 会处理并汇总来自源模型的评论数据。这是一个增量型模型,意味着它只会加载新数据,这极大地减少了每次模型运行所需的计算资源。在模型中,@start 和 @end_date 是 SQLMesh 宏,在 sqlmesh 计划或运行期间会根据运行的适当开始和结束日期进行渲染。此外,@GENERATE_SURROGATE_KEY 宏用于根据给定的输入列生成 MD5 哈希值,为数据生成一个替代键。
MODEL (name fct.reviews,kind INCREMENTAL_BY_TIME_RANGE (time_column review_date)
);WITH src_reviews AS (SELECT * FROM SOURCE.SRC_REVIEWS
)
SELECT@GENERATE_SURROGATE_KEY(listing_id, review_date, reviewer_name, review_text) AS review_id,*
FROM src_reviews
WHERE review_text IS NOT NULLAND review_date BETWEEN @start_date AND @end_date;
运行命令,生成事实表:
D select table_catalog, table_schema,table_name, table_type from information_schema.tables where table_schema='fct__dev';
┌───────────────┬──────────────┬────────────┬────────────┐
│ table_catalog │ table_schema │ table_name │ table_type │
│ varchar │ varchar │ varchar │ varchar │
├───────────────┼──────────────┼────────────┼────────────┤
│ dw │ fct__dev │ reviews │ VIEW │
└───────────────┴──────────────┴────────────┴────────────┘
业务层模型
转到业务层,我们需要分析满月日期如何影响评审意见。为此,我们需要一个包含满月日期的表。这可以使用SQLMesh中的种子文件来实现。从提供的链接下载种子文件,并将其放在SQLMesh项目的种子文件夹中。然后,创建一个名为full_moon_dates_seed.sql 的种子模型。
MODEL (name seed.full_moon_dates,kind SEED (path '../seeds/seed_full_moon_dates.csv')
);
运行命令,生成seed日期模型:
D select table_catalog, table_schema,table_name, table_type from information_schema.tables where table_schema='seed__dev';
┌───────────────┬──────────────┬─────────────────┬────────────┐
│ table_catalog │ table_schema │ table_name │ table_type │
│ varchar │ varchar │ varchar │ varchar │
├───────────────┼──────────────┼─────────────────┼────────────┤
│ dw │ seed__dev │ full_moon_dates │ VIEW │
└───────────────┴──────────────┴─────────────────┴────────────┘
对于最终的模型,创建名为models/mart的文件夹,并在其中添加以下模型:
MODEL (name mart.mart_fullmoon_reviews,kind full
);WITH fct_reviews AS (SELECT * FROM fct.reviews
),
full_moon_dates AS (SELECT * FROM seed.full_moon_dates
)SELECTr.*,CASEWHEN fm.full_moon_date IS NULL THEN 'not full moon'ELSE 'full moon'END AS is_full_moon
FROMfct_reviews as rLEFT JOIN full_moon_dates as fmON ( r.review_date = DATE_ADD(strptime(fm.full_moon_date, '%Y-%m-%d'), INTERVAL 1 DAY) )
运行命令,生成模型:
D select table_catalog, table_schema,table_name, table_type from information_schema.tables where table_schema='mart__dev';
┌───────────────┬──────────────┬───────────────────────┬────────────┐
│ table_catalog │ table_schema │ table_name │ table_type │
│ varchar │ varchar │ varchar │ varchar │
├───────────────┼──────────────┼───────────────────────┼────────────┤
│ dw │ mart__dev │ mart_fullmoon_reviews │ VIEW │
└───────────────┴──────────────┴───────────────────────┴────────────┘
一旦所有的模型都创建好了,项目结构应该是这样的:
在开发模式下测试成功后,我们在生产模式下运行sqlmesh计划:
sqlmesh plan prod
输出结果:
sqlmesh plan prod`prod` environment will be initializedModels:
└── Added:├── dim.dim_hosts_cleansed├── dim.dim_listings_cleansed├── dim.dim_listings_w_hosts├── fct.reviews├── mart.mart_fullmoon_reviews├── seed.full_moon_dates├── src.src_hosts├── src.src_listings└── src.src_reviews
Apply - Virtual Update [y/n]:
选择y,sqlmesh会自动创建生产环境所需的模型,SQLMesh不会像在开发环境中那样重新处理所有数据。相反,它重用在开发环境中创建的模型。有关SQLMesh虚拟环境的更多信息,请参阅此链接。
最后通过命令sqlmesh ui
启动web开发页面,图示如下:
相关文章:
SQLMesh 系列教程:Airbnb数据分析项目实战
在本文中,我们将探讨如何利用dbt项目的代码库来实现一个简单的SQLMesh项目。本文的基础是基于Udemy讲师为dbt课程创建的示例项目,可以在这个GitHub repo中获得。这个dbt项目是相对完整的示例,我们将使用它作为模板来演示SQLMesh(下…...
LeetCode hot 100 每日一题(11)——189. 轮转数组
这是一道难度为中等的题目,让我们来看看题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3…...
VLAN综合实验
一、实验拓扑 二、实验要求 1、PC1/3处于同一个网段,所在接口为access,属于VLAN 2。 2、PC2/4/5/6处于同一网段。 3、PC2可以访问PC4/5/6。 4、PC4可以访问PC5,但不能访问PC6。 5、PC5不能访问PC6。 6、所有PC通过DHCP获取IP地址&#…...
杨辉三角(js实现,LeetCode118)
看到这道题我的第一反应是找规律,核心突破点是numRows这个参数,杨辉三角的第numRows行拥有的元素数量为numRows个,并且头尾都是1,由此我们可以通过双层for循环,先生成每一行的数组,然后将每一行的数组push进…...
C语言复习笔记--数组
今天继续来浅浅推进一下C语言的复习,这次是数组的复习,话不多说,正文开始. 数组的概念 数组是⼀组相同类型元素的集合,一种自定义类型.数组中元素个数不能为0.数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组. 下面从一维数组说起. 一维数组的创建和…...
Linux操作系统实验报告单(3)文本编辑器vi/vim
一、实验目的 掌握vi/vim编辑器的进入和退出方式了解vi/vim的三种模式熟练vi/vim的操作命令 二、实验内容 1.在家目录下新建一个名为“vitest_name”(“name”为学生姓名拼音)的目录。 ●创建用户目录命令:sudo mkdir /home/vitest_lw3613 …...
docker linux 常用操作命令
以下是 Docker 的常见操作命令及其简单介绍,帮助你快速上手 Docker 的基本使用: 1. 镜像操作 拉取镜像 docker pull 镜像名称:标签示例: docker pull ubuntu:20.04从 Docker Hub 拉取 Ubuntu 20.04 镜像。 拉取镜像 docker build -t"…...
除自身以外数组的乘积——面试经典150题(力扣)
题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时…...
打破煤矿通信屏障,无线系统赋能生产安全与智能进阶
项目背景 在煤矿行业智能化转型的浪潮中,七台河矿业局积极回应国家煤矿智能化建设的号召,采取了具有前瞻性的战略举措——在七台河地区的煤矿部署了“井上井下”无线覆盖与广播一体化系统。此举旨在消除井上与井下之间的通信障碍,加强矿业局与…...
DeepSeek + Kimi 自动生成 PPT
可以先用deepseek生成ppt大纲,再把这个大纲复制到Kimi的ppt助手里: https://kimi.moonshot.cn/kimiplus/conpg18t7lagbbsfqksg 选择ppt模板: 点击生成ppt就制作好了。...
Blender标注工具
按住键盘D键 鼠标左键绘制 / 右键擦除 也可以在上方选择删除...
鸿蒙开发:远场通信服务rcp拦截器问题
前言 本文基于Api13。 上篇文章,简单的对rcp中的会话问题做了概述,本篇文章,我们聊一聊rcp中的拦截器问题,按照正常开发,其实拦截器中也不存在问题的,毕竟都是很官方的开发方式,但是在结合了创建…...
调研报告:Hadoop 3.x Ozone 全景解析
Ozone 是 Hadoop 的分布式对象存储系统,具有易扩展和冗余存储的特点。 Ozone 不仅能存储数十亿个不同大小的对象,还支持在容器化环境(比如 Kubernetes)中运行。 Apache Spark、Hive 和 YARN 等应用无需任何修改即可使用 Ozone。Ozone 提供了 Java API、S3 接口和命令行接口…...
Thinkphp 多文件压缩
控制器 <?phpnamespace app\api\controller; use think\Controller; use think\facade\Db; use think\facade\Request;use ZipArchive;class DrugTestResult {public function download(){if(Request::isPost()){$data Request::post();$idnumber Request::param(idnumb…...
NGINX中的反向代理实践
以下是一个全面和优化的配置示例,包括了错误处理、超时设置、头部信息调整等: server {listen 80;server_name your.domain.name; # 替换为你的实际域名或IP地址# 前端应用的静态资源处理location / {root /path/to/vue/dist; # Vue 应用的dist目录try_…...
redis分布式锁实现Redisson+redlock中watch dog是如何判断当前线程是否持有锁进行续租的呢?
在 Redis 中,Watch Dog(看门狗)机制主要用于实现分布式锁的自动续期(如 Redisson 的 RedLock 实现)。其核心目的是确保当业务逻辑执行时间超过锁的初始过期时间(leaseTime)时,锁不会…...
[spring] Spring JPA - Hibernate 多表联查 1
[spring] Spring JPA - Hibernate 多表联查 1 之前在 [spring] spring jpa - hibernate 名词解释&配置 和 [spring] spring jpa - hibernate CRUD 简单的学习了一下怎么使用 Hibernate 实现 CRUD 操作,不过涉及到的部分都是逻辑上比较简单的实现——只在一张表…...
在 Elasticsearch 中探索基于 NVIDIA 的 GPU 加速向量搜索
作者:来自 Elastic Chris Hegarty 及 Hemant Malik 由 NVIDIA cuVS 提供支持,此次合作旨在为开发者在 Elasticsearch 中的向量搜索提供 GPU 加速。 在 Elastic Engineering 组织内,我们一直致力于优化向量数据库的性能。我们的使命是让 Lucen…...
2025年图生视频模型技术全景解析
一、开源图生视频模型 阿里通义万象Wan2.1系列 I2V-14B-480P: 14B参数基础模型支持480P分辨率图生视频显存需求16GB以上 I2V-14B-720P: 高清增强版模型采用分帧渲染技术,输出分辨率达1280720 技术特性: 支持中文提示词自动解析内置…...
Docker build 会在本地产生巨大的文件
Docker build 会在本地产生巨大的文件, 比如 用 这个命令列出本地镜像 docker images 可见size都是很大的, 到docker目录下,看到ext4.vhdx的大小 80多G 那只能用这个命令把不用的镜像删掉了: (rmi后面是镜像id&a…...
使用LLaMA Factory微调导出模型,并用ollama运行,用open webui使用该模型
本篇记录学习使用llama factory微调模型的过程,使用ollama运行微调好的模型,使用open webui前端调用ollama的模型; 测试机信息: 系统:Ubuntu 24.04.2 LTS(桌面版) cpu:i9-14900KF …...
Git远程拉取和推送配置
Git进行远程代码拉取和推送时候提示配置user.name 和 user.email 背景:换新电脑后使用Git进行代码拉取和推送过程中,提示“Make sure you configure your “user.name” and “user.email” in git.”。这个配置针对git的正常使用仅需要配置一次…...
正则魔法:解码 return /^\d+$/.test(text) ? text : ‘0‘ 的秘密
🚀 正则魔法:解码 return /^\d$/.test(text) ? text : 0 的秘密 🌟 嘿,技术探险家们!👋 今天我们要破解一段看似简单的代码:return /^\d$/.test(text) ? text : 0。它藏在一个 Vue 前端组件中…...
[023-01-47].第47节:组件应用 - GetWay与 Sentinel 集成实现服务限流
SpringCloud学习大纲 一、需求说明: 实现网关cloudalibaba-sentinel-gateway9528模块保护cloudalibaba-provider-payment9001 二、编码实现: 2.1.建module: 新建模块,名称是:cloudalibaba-sentinel-gateway9528 2.2.改pom &l…...
【自用】NLP算法面经(5)
一、L1、L2正则化 正则化是机器学习中用于防止过拟合并提高模型泛化能力的技术。当模型过拟合时,它已经很好地学习了训练数据,甚至是训练数据中的噪声,所以可能无法在新的、未见过的数据上表现良好。 比如: 其中,x1和…...
AI视频生成产品体验分享(第2趴):Vidu、Hailuo、Runway、Pika谁更胜一筹?
hi,大家,继上次体验完可灵、即梦和pixverse,今天打算从产品经理的角度再研究下Vidu、Hailuo、Runway、Pika这几款产品!欢迎加入讨论! 一、产品简介 1. Vidu:国产自研的「一致性标杆」 📌官网…...
火绒终端安全管理系统V2.0——行为管理(软件禁用+违规外联)
火绒终端安全管理系统V2.0:行为管理策略分为软件禁用和违规外联两部分,能够管理终端用户软件的使用,以及终端用户违规连接外部网络的问题。 l 软件禁用 软件禁用策略可以选择软件名单的属性、添加软件名单以及设置发现终端使用禁用软件时的…...
台式机电脑组装---电脑机箱与主板接线
台式机电脑组装—电脑机箱与主板接线 1、机箱连接主板的跳线一般主要有USB 2.0、USB 3.0、前置音频接口(HD_AUDIO)以及POWER SW、RESET SW、POWER LED、HDD LED四个主板跳线,这些跳线分别的含义如下。 RESET SW:机箱重启按键;注:…...
【总结】常用API架构类型
引言 在现代软件开发中,API(应用程序编程接口)已经成为各类系统之间交互的核心。不同的 API 架构类型适用于不同的业务需求和技术场景,选择合适的架构可以提高系统的性能、可维护性和扩展性。本文将介绍几种常见的 API 架构类型,并分析它们的…...
ffmpeg库视频硬解码使用流程
FFmpeg 的硬解码(Hardware Decoding)通过调用 GPU 或专用硬件的编解码能力实现,能显著降低 CPU 占用率。 一、FFmpeg 支持的硬件解码类型 FFmpeg 原生支持多种硬件加速类型,具体由 AVHWDeviceType 定义,包括&…...
两个常用的用于读写和操作DXF文件C#库:netDxf 和 DXF.NET
netDxf 和 DXF.NET 是两个常用的C#库,用于读取、写入和操作DXF文件。以下是它们的详细介绍和用法示例。 1. netDxf 简介 netDxf 是一个开源的DXF文件读写库,支持AutoCAD DXF格式的读取和写入。它支持大多数DXF实体和对象,并且易于使用。 Gi…...
jmeter吞吐量控制器-Throughput Controller
jmeter吞吐量控制器-Throughput Controller 新增吞吐量控制器名词解释测试场景场景1:场景2:场景3场景4场景5场景6场景7场景8 测试结论 根据百分比执行不同的接口测试场景测试结果 新增吞吐量控制器 名词解释 Based on: Total Executions(总执行数)/Perc…...
windows 平台编译openssl
文章目录 准备环境安装perl安装NASM获取源码 源码编译配置编译 准备环境 安装perl 下载Perl 5.40.0.1 Portable zip strawberryperl 解压后设置系统环境变量 测试安装是否成功 perl --versionThis is perl 5, version 40, subversion 0 (v5.40.0) built for MSWin32-x64-m…...
【Linux】Makefile秘籍
> 🍃 本系列为Linux的内容,如果感兴趣,欢迎订阅🚩 > 🎊个人主页:【小编的个人主页】 >小编将在这里分享学习Linux的心路历程✨和知识分享🔍 >如果本篇文章有问题,还请多多包涵&a…...
Python散点图(Scatter Plot):数据探索的“第一张图表”
在数据可视化领域,散点图是一种强大而灵活的工具,它能够帮助我们直观地理解和探索数据集中变量之间的关系。本文将深入探讨散点图的核心原理、应用场景以及如何使用Python进行高效绘制。 后续几篇将介绍高级技巧、复杂应用场景。 Python散点图(Scatter Plot):高阶分析、散点…...
Spring AI Alibaba快速使用
AI 时代,Java 程序员也需要与时俱进,这两个框架必须掌握。 一个是 Spring AI一个是 Spring Alibaba AI。 Spring AI 是一个AI工程领域的应用程序框架,它的目标是将 Spring生态系统的设计原则应用于人工智能领域。 但是, Spring…...
Redis 跳表原理详解
一、引言 在 Redis 中,有序集合(Sorted Set)是一种非常重要的数据结构,它可以实现元素的有序存储和高效查找。而实现有序集合的底层数据结构之一就是跳表(Skip List)。跳表是一种随机化的数据结构ÿ…...
安全地自动重新启动 Windows 资源管理器Bat脚本
安全地自动重新启动 Windows 资源管理器脚本 可以直接运行的 Windows 批处理脚本,用于安全地自动重新启动 Windows 资源管理器。该脚本会在杀死资源管理器之前检查是否有其他进程正在使用资源管理器相关的文件。 Bat脚本 echo off title 资源管理器安全重启工具 co…...
【C++模板】
模板初阶 前言1.定义模板2.函数模板2.1定义2.2实例化函数模板2.3模板参数的匹配原则 3.类模板3.1类模板实例化 前言 模板是C中泛型编程的基础,一个模板就是一个创建类和函数的蓝图或公式。 1.定义模板 假定我们希望编写一个函数来比较两个值,并指出第…...
基于Debian搭建FTP服务器
操作系统 Debian-9.6.0-amd64,图形化安装 基础操作 1.软件安装管理 命令方式: 在线安装 sudo apt-get install vim/ifconfig 查看安装软件 dpkg -l 图形化桌面方式 : 通过“软件管理”工具管理 2.网络管理 /etc/network/interfaces 3.文本…...
如果我的项目是用ts写的,那么如何使用webpack的动态导入功能呢?
在 TypeScript 项目中使用 Webpack 的动态导入(Dynamic Imports)功能,需要结合 TypeScript 的语法和 Webpack 的配置。以下是具体实现方法和注意事项: 一、基础配置 1. 修改 tsconfig.json 确保 TypeScript 支持动态导入语法&am…...
构建高效的LinkedIn图像爬取工具
一. 项目背景与目标 LinkedIn上的用户头像数据可以用于多种场景,例如: 人才招聘:通过分析目标职位候选人的头像,了解其职业形象。市场调研:收集特定行业从业者的头像,用于分析职业群体的特征。学术研究&a…...
在windows下安装windows+Ubuntu16.04双系统(下)
这篇文章的内容主要来源于这篇文章,为正式安装windowsUbuntu16.04双系统部分。在正式安装前,若还没有进行前期准备工作(1.分区2.制作启动u盘),见《在windows下安装windowsUbuntu16.04双系统(上)》 二、正式安装Ubuntu …...
浅分析 PE3R 感知高效的三维重建
"近期,二维到三维感知技术的进步显著提升了对二维图像中三维场景的理解能力。然而,现有方法面临诸多关键挑战,包括跨场景泛化能力有限、感知精度欠佳以及重建速度缓慢。为克服这些局限,我们提出了感知高效三维重建框架&#…...
调和Django与Sql server2019的关系
数据库升级成sqlserver2019后,用户发现一些APP不能用了,检查发现是Django连接sqlserver的APP全部不能用了,页面打开都是500错误,进入Pycharm调试发现: 1.遇到错误1:django.db.backends.XXX错误 File "…...
【canvas】一键自动布局:如何让流程图节点自动找到最佳位置
一键自动布局:如何让流程图节点自动找到最佳位置 引言 在流程图、拓扑图和系统架构图设计中,节点布局往往是最令人头疼的问题。如果手动调整每个节点位置,不仅耗时费力,还难以保证美观性和一致性。本文将深入解析如何实现自动布…...
Flutter 学习之旅 之 flutter 使用 SQLite(sqflite) 实现简单的数据本地化 保存/获取/移除/判断是否存在 的简单封装
Flutter 学习之旅 之 flutter 使用 SQLite(sqflite) 实现简单的数据本地化 保存/获取/移除/判断是否存在 的简单封装 目录 Flutter 学习之旅 之 flutter 使用 SQLite(sqflite) 实现简单的数据本地化 保存/获取/移除/判断是否存在…...
[unity 组件] Content Size Fitter 横向填充不满解决办法
可以看到,当只有3个或者4个元素的时候,布局组件并没有将横向宽度占满来布局。之所以有此困惑的原因是我以为他的布局策略是,从左到右,从上至下,尽量占满空间,不够了再换行,其实不然。 5到6个元…...
Dify 项目开源大模型应用开发平台
Dify 是一款开源的大语言模型(LLM)应用开发平台,旨在简化生成式 AI 应用的创建、部署和持续优化流程。以下从多个维度对该项目进行详细介绍: 一、项目定义与核心功能 Dify 的核心定位是结合 后端即服务(BaaSÿ…...
使用 `pytest` 框架时,可以通过极限封装将 YAML 文件的读取、解析
在使用 pytest 框架时,可以通过极限封装将 YAML 文件的读取、解析和测试用例的通用逻辑封装成共享的方法或 fixture,从而减少重复代码。以下是详细的实现步骤和示例。 1. 封装 YAML 文件读取和解析 将 YAML 文件的读取和解析逻辑封装到一个工具函数中,供所有测试用例调用。…...