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

网友投稿 330 2022-11-03

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

Danfo.js 的主要特性

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

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()

输出:

您可以轻松地将数组、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 和分隔)加载数据。完整和分块均可:

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 进行数据集的数据加载、操作和预处理,然后导出张量对象。

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.js 的工具让基于网络的应用可以轻松支持 ML 特性,从而让应用生态系统更加丰富多彩。

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[云原生专题-37]:K8S - 核心概念 - 存储抽象- 搭建NFS网络文件系统与常见操作命令
下一篇:[云原生专题-36]:K8S - 核心概念 - 存储抽象- Pod之间的数据共享与数据持久化 - 网络文件系统、网络分布式数据库
相关文章

 发表评论

暂时没有评论,来抢沙发吧~