0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Danfo.js提供高性能、直观易用的数据结构,支持结构化数据的操作和处理

Tensorflowers 来源:TensorFlow 作者:TensorFlow 2020-09-23 18:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Danfo.js 是个 JavaScript 开源库,提供了高性能、直观易用的数据结构,支持结构化数据的操作和处理。Danfo.js 深受 Python Pandas 库的启发,并提供了类似的接口/API。因此熟悉 Pandas API 且了解 JavaScript 的用户可以轻松上手。

Danfo.js 的一大目标是为 JavaScript 开发者提供数据处理、机器学习AI 工具。这与我们的愿景一致,本质上也符合 TensorFlow.js 团队向 Web 引入 ML 的目标。Numpy 和 Pandas 等开源库全面革新了 Python 中数据操作的便利性。因此很多工具都围绕它们构建,进一步推动了 Python 中 ML 生态系统的蓬勃发展。

Danfo.js
https://danfo.jsdata.org/

Danfo.js 建立在 TensorFlow.js 上。也就是说,就像 Numpy 为 Pandas 的算术运算提供技术支持一样,我们是利用 TensorFlow.js 为我们的低级算术运算提供技术支持。

Danfo.js 的主要特性

Danfo.js 速度快。它基于 TensorFlow.js 构建,与张量无缝兼容。您可以在 Danfo 中加载张量,也可以将 Danfo 数据结构转换为张量。利用这两个库,既有了数据处理库 (Danfo.js),也有了强大的 ML 库 (TensorFlow.js)。

以下示例将展示如何从张量对象创建 Danfo DataFrame:

const dfd = require("danfojs-node") const tf = require("@tensorflow/tfjs-node") let data = tf.tensor2d([[20,30,40], [23,90, 28]]) let df = new dfd.DataFrame(data) let tf_tensor = df.tensor console.log(tf_tensor); tf_tensor.print()

输出:

Tensor { kept: false, isDisposedInternal: false, shape: [ 2, 3 ], dtype: 'float32', size: 6, strides: [ 3 ], dataId: {}, id: 3, rankType: '2' } Tensor [[20, 30, 40], [23, 90, 28]]

您可以轻松地将数组、JSON 或对象转换为 DataFrame 对象操作。

JSON 对象到 DataFrame:

const dfd = require("danfojs-node") json_data = [{ A: 0.4612, B: 4.28283, C: -1.509, D: -1.1352 }, { A: 0.5112, B: -0.22863, C: -3.39059, D: 1.1632 }, { A: 0.6911, B: -0.82863, C: -1.5059, D: 2.1352 }, { A: 0.4692, B: -1.28863, C: 4.5059, D: 4.1632 }] df = new dfd.DataFrame(json_data) df.print()

输出:

带列标签的对象数组到 DataFrame:

const dfd = require("danfojs-node") obj_data = {'A': [“A1”, “A2”, “A3”, “A4”], 'B': ["bval1", "bval2", "bval3", "bval4"], 'C': [10, 20, 30, 40], 'D': [1.2, 3.45, 60.1, 45], 'E': ["test", "train", "test", "train"] } df = new dfd.DataFrame(obj_data) df.print()

输出:

您可以轻松处理浮点和非浮点数据中的缺失数据(以 NaN 表示):

const dfd = require("danfojs-node") let data = {"Name":["Apples", "Mango", "Banana", undefined], "Count": [NaN, 5, NaN, 10], "Price": [200, 300, 40, 250]} let df = new dfd.DataFrame(data) let df_filled = df.fillna({columns: ["Name", "Count"], values: ["Apples", df["Count"].mean()]}) df_filled.print()

输出:

基于智能标签的切片、花式索引和大数据集查询:

const dfd = require("danfojs-node") let data = { "Name": ["Apples", "Mango", "Banana", "Pear"] , "Count": [21, 5, 30, 10], "Price": [200, 300, 40, 250] } let df = new dfd.DataFrame(data) let sub_df = df.loc({ rows: ["0:2"], columns: ["Name", "Price"] }) sub_df.print()

输出:

强大的 IO 工具,用于从平面文件(CSV 和分隔)加载数据。完整和分块均可:

const dfd = require("danfojs-node") //read the first 10000 rows dfd.read_csv("file:///home/Desktop/bigdata.csv", chunk=10000) .then(df => { df.tail().print() }).catch(err=>{ console.log(err); })

DataFrame 和 Series 支持OneHotEncoders、LabelEncoders等强大的数据预处理函数和 StandardScaler 和 MinMaxScaler 等 Scaler:

const dfd = require("danfojs-node") let data = ["dog","cat","man","dog","cat","man","man","cat"] let series = new dfd.Series(data) let encode = new dfd.LabelEncoder() encode.fit(series) let sf_enc = encode.transform(series) let new_sf = encode.transform(["dog","man"])

输出:

交互式、灵活且直观的 API,用于在浏览器中绘制 DataFrame 和 Series:

Document

输出:

示例:泰坦尼克号幸存预测

以下是使用 Danfo.js 和 TensorFlow.js 的简单端到端分类任务。使用 Danfo 进行数据集的数据加载、操作和预处理,然后导出张量对象。

const dfd = require("danfojs-node") const tf = require("@tensorflow/tfjs-node") async function load_process_data() { let df = await dfd.read_csv("https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv") //A feature engineering: Extract all titles from names columns let title = df['Name'].apply((x) => { return x.split(".")[0] }).values //replace in df df.addColumn({ column: "Name", value: title }) //label Encode Name feature let encoder = new dfd.LabelEncoder() let cols = ["Sex", "Name"] cols.forEach(col => { encoder.fit(df[col]) enc_val = encoder.transform(df[col]) df.addColumn({ column: col, value: enc_val }) }) let Xtrain,ytrain; Xtrain = df.iloc({ columns: [`1:`] }) ytrain = df['Survived'] // Standardize the data with MinMaxScaler let scaler = new dfd.MinMaxScaler() scaler.fit(Xtrain) Xtrain = scaler.transform(Xtrain) return [Xtrain.tensor, ytrain.tensor] //return the data as tensors }

接下来使用 TensorFlow.js 创建一个简单的神经网络

function get_model() { const model = tf.sequential(); model.add(tf.layers.dense({ inputShape: [7], units: 124, activation: 'relu', kernelInitializer: 'leCunNormal' })); model.add(tf.layers.dense({ units: 64, activation: 'relu' })); model.add(tf.layers.dense({ units: 32, activation: 'relu' })); model.add(tf.layers.dense({ units: 1, activation: "sigmoid" })) model.summary(); return model }

最后进行训练,首先将模型和处理后的数据加载为张量。这可以直接馈送到神经网络。

async function train() { const model = await get_model() const data = await load_process_data() const Xtrain = data[0] const ytrain = data[1] model.compile({ optimizer: "rmsprop", loss: 'binaryCrossentropy', metrics: ['accuracy'], }); console.log("Training started....") await model.fit(Xtrain, ytrain,{ batchSize: 32, epochs: 15, validationSplit: 0.2, callbacks:{ onEpochEnd: async(epoch, logs)=>{ console.log(`EPOCH (${epoch + 1}): Train Accuracy: ${(logs.acc * 100).toFixed(2)}, Val Accuracy: ${(logs.val_acc * 100).toFixed(2)} `); } } }); }; train()

您可能注意到 Danfo 的 API 与 Pandas 非常相似,即使不是 Javascript 程序员也可以轻松阅读和理解代码。您可参考以上演示的完整源代码 (https://gist.github.com/risenW/f54e4e5b6d92e7b1b9b1f30e884ca83c)。

结语

基于网络的机器学习已经日趋成熟,对应的专用高效数据科学工具必不可少。类似 Danfo.js 的工具让基于网络的应用可以轻松支持 ML 特性,从而让应用生态系统更加丰富多彩。

这场变革始于 TensorFlow.js 为 Python 带来的 ML 功能。我们希望为 Danfo.js 作为高效的同伴一路提供支持。我们对 Danfo.js 的发展充满期待!希望它也能成为网络社区的关键成员。

原文标题:深受 Pandas 启发的 JavaScript 开源库 — Danfo.js 现已推出!

文章出处:【微信公众号:TensorFlow】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    3014

    浏览量

    116994
  • 开源
    +关注

    关注

    3

    文章

    4415

    浏览量

    46566

原文标题:深受 Pandas 启发的 JavaScript 开源库 — Danfo.js 现已推出!

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    告别手动!1688商品详情API让你秒级获取商品数据

    分析 价格/库存监控 商品信息同步到自家平台 2. API 获取商品数据的优势 优势 说明 秒级响应 API 直接返回 JSON 数据,比爬虫快且稳定 自动 可批量抓取,无需人工操作
    的头像 发表于 05-09 16:44 599次阅读

    NVIDIA cuDF和cuVS获全球领先数据平台采用

    企业每年产生数百 ZB (Zettabyte) 的数据,并在争相将这些信息转化为洞察。NVIDIA cuDF 和 cuVS 作为基于 NVIDIA CUDA-X 构建的加速数据库,正在被各行业的数据平台所应用,带来至高 5 倍
    的头像 发表于 03-19 15:46 565次阅读

    线性编程与结构化编程的不同点

    线性编程是将整个用户程序连续放置在一个循环程序块(OB1)中,按顺序执行的编程范式。这种结构与PLC所代替的硬接线继电器控制类似,CPU逐条地处理指令,体现了早期PLC编程的简单性和直观
    的头像 发表于 03-16 16:58 626次阅读
    线性<b class='flag-5'>化</b>编程与<b class='flag-5'>结构化</b>编程的不同点

    锂离子电池高性能负极结构化复合集流体综述

    结构化集流体通过精心的表面与体相结构设计,为上述问题提供了系统性解决方案。Flexfilm探针式台阶仪可以实现表面微观特征的精准表征与关键参数的定量测量,精确测
    的头像 发表于 02-04 18:03 2707次阅读
    锂离子电池<b class='flag-5'>高性能</b>负极<b class='flag-5'>结构化</b>复合集流体综述

    操作系统体系结构

    内核。   大内核系统将操作系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为应用提供高性能的系统服务。因为各管理模块之间共享信息,能有效利用相互之间的有效特性,所以具有无可比拟的
    发表于 01-15 08:19

    C语言主要特点

    指针类型数据,使用十分灵活和多样,能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。 4.具有结构化的控制语句。用函数作为程序的模块单位,便于实现程序的模块
    发表于 01-05 07:41

    请问CW32 UART支持哪些种类的数据结构

    CW32 UART支持哪些种类的数据结构
    发表于 12-29 06:13

    请问CW32 UART支持哪些数据结构呢?

    请问 CW32 UART 支持哪些数据结构
    发表于 12-26 07:45

    结构化布线中使用电缆标签的4个主要优势

    在现代通信和网络基础设施建设中,结构化布线系统扮演着至关重要的角色。它不仅确保了网络的高效传输和稳定运行,还为未来的扩展和维护提供了便利。而在结构化布线中,电缆标签的使用虽看似是一个小小的细节,却能
    的头像 发表于 11-24 10:34 447次阅读

    数据全复用高性能层设计思路分享

    大家好,本团队此次分享的内容为可实现数据全复用高性能层设计思路,核心部分主要由以下3个部分组成; 1.SRAM读取模块;——池使用的存储为SRAM 基于SRAM读与写时序,约束池
    发表于 10-29 07:10

    【HZ-T536开发板免费体验】6、使用protoc-gen-gorm生成标准数据结构

    在设计espnow协议的时候,考虑到我需要在esp32,Linux设备,web上使用相同的数据结构,那就需要考虑一下,是否使用一个通用的跨平台序列数据结构。这时候我想起了protobuf,这个就是
    发表于 08-26 00:32

    盘点嵌入式就业所需要的技能有哪些?

    语言,如C/C++、Java等。 - 掌握操作系统原理,了解Linux/Android等操作系统的内核架构和驱动开发。 - 具备良好的数据结构和算法基础,能够进行高性能计算和
    发表于 08-11 15:43

    智能体AI面临非结构化数据难题:IBM推出解决方案

    ,同时提供一个开放的混合数据基础架构和企业级的结构化和非结构化数据管理。 智能体AI面临非结构化
    的头像 发表于 07-02 09:40 723次阅读

    DDN携手NVIDIA释放非结构化数据的AI价值

    DDN 通过与 NVIDIA AI 数据平台的合作,推出联合解决方案,简化了企业对非结构化数据的存储、访问和激活方式,助力客户释放生成式 AI 的巨大商业潜能。DDN 全球合作伙伴负责人
    的头像 发表于 06-10 10:31 1110次阅读

    SQLSERVER数据库是什么

    支持在Linux和容器环境中运行。 核心特点 关系型数据库 基于SQL(结构化查询语言)进行数据操作
    的头像 发表于 05-26 09:19 1363次阅读