Databend x HuggingFace,海量数据,随心分析

作者:尚卓燃(PsiACE)

澳门科技大学在读硕士,Databend 研发工程师实习生

Apache OpenDAL(Incubating) Committer

https://github.com/PsiACE

HuggingFace 是目前全球最流行的 AI 社区,推动数据科学家和企业在模型、数据集和应用等诸多方面进行创新与合作。HuggingFace 上存在各种各样的数据集,不光可以用作学习和练习的样本,也可以作为企业模型数据来源的基石。

为了更好发挥数据集的作用,往往需要对数据集中的原始数据进行清洗,并且归档在数据湖中提供统一的访问入口。Databend 围绕 ETL/ELT 为中心的工作流进行设计,在载入同时即可直接对数据进行清洗、转化、合并等操作;具备丰富的结构化与半结构化数据类型,能够直接查询和分析多种格式的原始数据;企业版还支持虚拟列、计算列等高级特性,确保数据始终就绪。

在这篇文章中,我们将会展示如何利用 Databend 轻松访问 HuggingFace 上托管的数据集,并且使用 SQL 进行简单高效的分析和处理。此外,示例中还包含一个使用 SQL 实现的白盒模型,展示如何在数据仓库中进行类别预测,并验证模型精度。

访问 HuggingFace 数据集

HuggingFace 提供公开可访问的 REST API ,并且支持在上传时将数据集文件自动转化为 Parquet ,使其能够与数据库和数据分析工具轻松集成。

其数据集的页面如下所示,透过 Dataset card 可以直观了解数据的相关信息并获得预览,而 Files and Versions 页面将会有助于了解目录结构和修订版本等信息。

Databend 提供多种与 HuggingFace 集成的方式,在接下来的部分,我们将会以 fka/awesome-chatgpt-prompts 作为例子,说明如何使用 Databend 访问 HuggingFace 数据集。

fka/awesome-chatgpt-prompts 是一个流行的 GPT Prompts 数据集,包含 153 条高质量的 Prompts 及其对应的场景。

外部 Stage/Location

现在很多数据库支持使用 HTTPS 协议直接访问远端的数据文件,这种模式不光适用于 HuggingFace ,也可以与其他提供 HTTPS 访问的文件服务集成。但是,直接使用远程 URL 访问存在一些弊端,比如遇到预期外的响应、错误的转义和编解码、为了定位文件需要进行复杂的 JSON 解析。

Databend 除了支持上述方式之外,还可以直接将 HuggingFace 文件系统作为外部 Location 访问或者挂载为外部 Stage,能够有效避免访问问题,轻松处理数据查询。

对于 HuggingFace ,其适用的 externalLocation 参数如下:

externalLocation ::="hf://<repo_id>[<path>]"CONNECTION = (<connection_parameters>)

URI格式:hf://{repo_id}/path/to/file,其中repo_id 类似 fka/awesome-chatgpt-prompts 。

支持的配置包括:

  • repo_type: HuggingFace 仓库类型,默认为 dataset,可用选项有 datasetmodel 。
  • revision: HuggingFace 修订版本,默认为 main。可以是仓库中的分支、标签或提交。
  • token: HuggingFace 的 API 令牌。
以外部 Location 的形式查询原始 CSV 数据文件

下面示例展示了如何使用 Databend 直接查询 fka/awesome-chatgpt-prompts 的原始 CSV 数据文件,并列出其中 CSV 文件第一列的 5 条数据。

SELECT $1 FROM 'hf://fka/awesome-chatgpt-prompts/' (PATTERN => '.*csv' FILE_FORMAT => 'CSV') LIMIT 5;

以外部 Stage 的形式查询转化的 Parquet 数据文件

前面提到 HuggingFace 提供转化后的 Parquet 文件,而 Databend 也支持以外部 Stage 形式挂载 HuggingFace 文件系统,下面的示例展示了其用法:

创建 Stage

对于本示例,转化后的文件位于 refs%2Fconvert%2Fparquet 这个分支的 /default/train/ PATH 下,我们可以直接挂载这个路径。

CREATE STAGE IF NOT EXISTS stage_huggingface_fka_prompts url = 'hf://fka/awesome-chatgpt-prompts/default/train/' connection = (revision = 'refs%2Fconvert%2Fparquet');

列出对应文件

可以利用 PATTERN 列出 Stage 中符合特定模式的文件名,方便查询和分析。

LIST @stage_huggingface_fka_prompts PATTERN = '.*parquet';

查询数据

由于此前已经从 CSV 文件中获取了文件的信息,在查询 Parquet 文件时候,我们可以直接选取其中的列,考虑到 prompt 在终端中不方便全部展示,这里截断为 80 个字符。

SELECT act, left(prompt, 80) FROM @stage_huggingface_fka_prompts/0000.parquet LIMIT 5;

使用 SQL  数据科学

上面介绍了如何对位于 HuggingFace 的远程数据集进行简单查询,这一节中我们来看一个具体的案例,探索使用 SQL 的数据科学。

为了方便理解,我们选取数据科学入门常用的鸢尾花分类数据集(iris)作为示例。Iris 数据集出现在 R.A. Fisher 1936年的经典论文 The Use of Multiple Measurements in Taxonomic Problems ,也可以在 UCI 机器学习知识库中找到,非常适合演示简单的分类模型。

本文中使用的 HuggingFace 数据集位于 https://huggingface.co/datasets/scikit-learn/iris 。

数据挂载

我们将会将数据集挂载为 Databend 的外部 Stage :

CREATE STAGE IF NOT EXISTS stage_iris url = 'hf://scikit-learn/iris/default/train/' connection = (revision = 'refs%2Fconvert%2Fparquet');LIST @stage_iris PATTERN = '.*parquet';SELECT * FROM @stage_iris/0000.parquet LIMIT 5;

数据清洗

外部 Stage 中的数据相当于是原始数据,为了满足数据规范和使用需要,可以在导入时进行清洗,对于 Iris 数据集,典型的清洗操作包括:

  • 移除 id 列。
  • 将 species 列转换成类别标签,即整数形式。
  • 将特征列从 float64 转换成 float32 。
  • 将特征列重命名为蛇形命名法(snake case)。

Databend 中可以利用 COPY INTO 语句在载入时完成数据清洗。

创建对应的表

执行下述语句,可以在 Databend 中创建符合数据规范的表。

CREATE TABLE iris (sepal_length FLOAT,sepal_width FLOAT,petal_length FLOAT,petal_width FLOAT,species INT
);

使用 COPY INTO 导入数据

执行下述语句,可以在导入数据的同时,一步到位完成数据清洗工作。

COPY INTO iris
FROM (SELECT to_float32(t.sepallengthcm),to_float32(t.sepalwidthcm), to_float32(t.petallengthcm),to_float32(t.petalwidthcm),CASEWHEN species = 'Iris-setosa' THEN 1WHEN species = 'Iris-versicolor' THEN 2WHEN species = 'Iris-virginica' THEN 3ELSE NULLEND AS speciesFROM @stage_iris t
)
FILE_FORMAT = (TYPE = PARQUET)
PATTERN = '.*parquet';

基本统计

执行下述语句,我们可以得到清洗后数据中,不同类别的数目各有多少。

SELECT species, COUNT(*) AS count
FROM iris
GROUP BY species;

基本分析

执行下述语句,我们可以得到每种鸢尾花的平均萼片长度:

SELECT species, AVG(sepal_length) as avg_sepal_length
FROM iris
GROUP BY species;

使用 SQL 预测鸢尾花类型

利用 SQL 表达简单的白盒模型,能够直观感受到模型的预测标准,并且省去与模型服务进行交互的步骤。

下面的示例仅供演示使用,并不符合严谨的训练、验证、应用的数据科学流程。

在数据科学家利用数据进行分析之后,我们可以得到一些可以量化的分类依据,结合 CASE WHEN 语句,可以使用 SQL 对简单的模型进行表达。

SELECT sepal_length, sepal_width, petal_length, petal_width, species, CASE WHEN petal_width < 0.75 THEN 1 WHEN petal_width >= 0.75 AND petal_width < 1.35 THEN 2 WHEN petal_width >= 0.75 AND petal_width < 1.75 AND petal_width >= 1.35 AND sepal_width < 2.65 THEN 3 WHEN petal_width >= 0.75 AND petal_width < 1.75 AND petal_width >= 1.35 AND sepal_width >= 2.65 THEN 2 WHEN petal_width >= 0.75 AND petal_width >= 1.75 THEN 3 END AS prediction 
FROM iris;

上述 SQL 将会在选中的数据后附加一个预测列,展示预测的类别。

由于我们的鸢尾花数据集本身是具有类别的,所以可以使用 SQL 根据预测结果进一步计算模型在数据集上的精度:

SELECTCOUNT(*) AS total_count,SUM(CASE WHEN subquery.species = subquery.prediction THEN 1 ELSE 0 END) AS correct_count,SUM(CASE WHEN subquery.species <> subquery.prediction THEN 1 ELSE 0 END) AS incorrect_count,SUM(CASE WHEN subquery.species = subquery.prediction THEN 1 ELSE 0 END) / COUNT(*) AS accuracy
FROM(SELECTsepal_length,sepal_width,petal_length,petal_width,species,CASEWHEN petal_width < 0.75 THEN 1WHEN petal_width >= 0.75 AND petal_width < 1.35 THEN 2WHEN petal_width >= 0.75 AND petal_width < 1.75 AND petal_width >= 1.35 AND sepal_width < 2.65 THEN 3WHEN petal_width >= 0.75 AND petal_width < 1.75 AND petal_width >= 1.35 AND sepal_width >= 2.65 THEN 2WHEN petal_width >= 0.75 AND petal_width >= 1.75 THEN 3END AS predictionFROMiris) AS subquery;

总结

在这篇文章中,我们展示了如何使用 Databend 直接访问和查询 HuggingFace 数据集。并且展示了如何使用 SQL 对数据进行预处理,使其符合数据规范。此外,利用 CASE WHEN 语句,我们可以轻松表达简单的模型,在 SQL 中完成对 Iris 数据集的预测任务,并且进行精度统计。

本文涉及的所有操作均可以在 Databend Cloud(海外版)上直接体验。如果你对使用 Databend 进行数据科学分析感兴趣,也欢迎使用 Databend Cloud 上就绪的计算集群进行一步探索。

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

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

相关文章

Numpy的学习 第一课 了解以及使用

1.输入模式 1.编辑模式 绿色2.命令模式 蓝色 2.运行 直接输入jupyter notebook 3.文档注释 查看函数帮助文档命令 help(函数) 单问号与多问号 单问号显示文档 多问号显示文档代码 3.shifttab 显示参数 4.运行外部文件 %run 路径,可绝对可相对 这里运行了就相当于方法了,或者…

VRPSolverEasy:支持VRP问题快速建模的精确算法Python包

文章目录 前言一步步安装免费版主要模块介绍1. depot point2. customer point3. links4. vehicle type VRPTW 算例数据说明模型建立输出求解状态及结果 前言 VRPSolverEasy 是用于车辆路径问题&#xff08;VRP&#xff09;的最先进的分支切割和定价算法求解器1&#xff0c;它的…

某国产沙盒游戏的启动器逆向

游戏近期改变了登录方式&#xff0c;于是把之前的研究成果分享一下研究仅供学习交流&#xff0c;如有侵权请联系删除 抓包 启动启动器&#xff0c;输入账号密码&#xff0c;点击登录&#xff0c;抓包得到一些信息 接口 1 https://wskacchm.mini1.cn:14100/login/auth_secur…

命令行参数环境变量和进程空间地址

文章目录 命令行参数环境变量进程地址空间 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 命令行参数 什么是命令行参数&#xff1f; 我…

存储任意类型

code /* * c17 std::any */#include <cstdint> #include <cstring> #include <cstdlib> #include <iostream> #include <thread> #include <chrono>namespace lxz {// T不为指针时 template<typename T> struct Data {Data(): data…

QT第六天

要求&#xff1a;使用QT绘图&#xff0c;完成仪表盘绘制&#xff0c;如下图。 素材 运行效果&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPen>QT_BEGIN_NAMESPACE name…

网络端口映射和端口转发的区别和联系

目 录 一、端口映射技术 1.1 原理 1.2 应用场景 1、远程访问 2、游戏主机 3、文件共享 4、监控视频共享 二、端口转发技术 2.1 原理 2.2 应用场景 1、网络负载均衡 2、网络安全 3、网络代理 三、端口映射和转发的实现方法 3.1 路由器配置 3.2 网络防火墙 …

跨平台兼容,无限可能:Apple Remote Desktop for Mac让远程控制更简单

Apple Remote Desktop for Mac是一款远程桌面管理软件&#xff0c;提供了一系列强大的功能&#xff0c;让用户可以轻松地管理和控制远程计算机。以下是该软件的一些主要功能和特点&#xff1a; 实时远程访问和控制&#xff1a;使用Apple Remote Desktop&#xff0c;用户可以在…

跟着pink老师前端入门教程-day05

七、CSS的引入方式 根据CSS样式书写的位置&#xff08;或者引入的方式&#xff09;&#xff0c;CSS样式表可以分为三大类 1. 行内样式表&#xff08;行内式&#xff09; 内部样式表&#xff08;内嵌样式表&#xff09;是写到HTML页面内部&#xff0c;将所有的CSS代码抽取出…

【Proteus仿真】【Arduino单片机】智能助眠机系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用蜂鸣器闹铃模块、LCD1602显示模块、心率血氧模块、ADC模块、按键模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示传感器采…

HackTheBox - Medium - Linux - Mentor

Mentor Mentor 是一台中等难度的 Linux 机器&#xff0c;其路径包括在到达 root 之前在四个不同的用户之间切换。使用可暴力破解的社区字符串扫描“SNMP”服务后&#xff0c;会发现用于“API”端点的明文凭据&#xff0c;该端点被证明容易受到盲目远程代码执行的影响&#xff…

如何实现无公网ip远程访问内网本地BUG管理服务【内网穿透】

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

精通Discord营销:多账号注册与管理,高效打造矩阵

Discord虽然是一个海外小众平台&#xff0c;但在Z世代群体来说却非常受欢迎。通常在游戏行业、年轻化的电商特定品类、软件等业务中&#xff0c;Discord的社群营销可以起到非常卓越的效果。但是&#xff0c;您必须学会管理不同的帐户&#xff0c;以构成矩阵打造社区&#xff0c…

更适合3D项目的UI、事件交互!纯国产数字孪生引擎持续升级中!!!

UI和事件交互是3D可视化项目中最常见的模块&#xff0c;主要用于信息添加、展示&#xff0c;用来确保按照用户需求呈现内容并完成交互。 平时工作在进行UI和交互设计时&#xff0c;经常出现以下问题&#xff1a;UI过于复杂导致3D项目内交互效率低下&#xff0c;或者是结合3D项目…

简单了解【多智能体强化学习(MARL)】

我们的现实生活中有着许多多智能体共同决策的场景&#xff0c;比如多机械臂协同&#xff0c;多个无人机或多个机器人完成某共同目标。下面介绍单智能体强化学习的进化&#xff0c;多智能体强化学习。 含义 多智能体系统中包含 m 个智能体&#xff0c;智能体共享环境&#xff…

【vsan数据恢复】vsan逻辑架构出现故障的数据恢复案例

VSAN数据恢复环境&#xff1a; 一套有三台服务器节点的VSAN超融合基础架构&#xff0c;每台服务器节点上配置2块SSD硬盘和4块机械硬盘。 每个服务器节点上配置有两个磁盘组&#xff0c;每个磁盘组使用1个SSD硬盘作为缓存盘&#xff0c;2个机械硬盘作为容量盘。三台服务器节点上…

c/c++的指针函数与函数指针

函数 定义&#xff1a; 函数是数学中的一个概念&#xff0c;它是定义在某个数集上的一个特殊的映射关系。函数将输入值&#xff08;或自变量&#xff09;映射到输出值&#xff08;或因变量&#xff09;。函数的输入和输出可以是任何类型的数据&#xff0c;如数字、字符串、数组…

ArcGIS Pro 如何新建布局

你是否已经习惯了在ArcGIS中数据视图和布局视图之间来回切换&#xff0c;到了ArcGIS Pro中却找不到二者之间切换的按钮&#xff0c;即使新建布局后却发现地图怎么却是一片空白。 这一切的一切都是因为ArcGIS Pro的功能框架完全不同&#xff0c;这里为大家介绍一下在ArcGIS Pro…

前端react入门day04-useEffect与Hook函数

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 useEffect 的使用 useEffect 的概念理解 useEffect 依赖项参数说明 useEffect — 清除副作用 自定义Ho…

Baichuan2百川模型部署的bug汇总

1.4bit的量化版本最好不要在Windows系统中运行&#xff0c;大概原因报错原因是bitsandbytes不支持window&#xff0c;bitsandbytes-windows目前仅支持8bit量化。 2. 报错原因是机器没有足够的内存和显存&#xff0c;offload_folder设置一个文件夹来保存那些离线加载到硬盘的权…