Danfo.js专题 - Danfo.js与Dnotebook简介与入门

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Danfo.js专题 - Danfo.js与Dnotebook简介与入门

Danfo.js与Dnotebook

—— pandas、jupyter的JavaScript版本


【前言】:谷歌公司不仅推出了tensorflow的JavaScript版本tensorflow.js,在2020年又相继推出了pandas和jupyter notebook的JavaScript端替代品——Danfo.js和D notebook,它们和python端具有类似的接口,熟悉python中相关工具的开发者可以很快上手对应的工具。本文将追随者最新的相关内容不断更新系列博客。


1.数据分析 - 为什么有转向JavaScript的呼声?

Python做数据分析仍然是首选,但在某些地方也不尽如人意。

在python中有大量的和数据分析相关的第三方模块,如numpy(数值python)、scipy(科学计算)、sympy(符号数学)、matplotlib(matlab风格的绘图)。由于python是杰丝型语言,有团队基于其开发了使用方便的jupyter notebook,使得python用作数据分析十分方便。

数据分析除了数学运算外、往往还需要通过图表来呈现,除了已经提到了matplotlib外,还有很多大量的第三方库,能够独立或者辅助matplotlib进行绘图,如seaborn等。

matplotlib——经典、强大、功能齐全。但缺乏动态逻辑

熟悉python的开发者在做一些需要进行数据展示的时候其实一直有很多困扰,很多的绘图库,包括著名的matplotlib,都只能够绘制静态的效果图。matplotlib还拥有大量的相关第三方库,在其基础上进行了封装。在数据分析领域,最常用的莫过于seaborn了。不过随着时间的流逝,在当下matplotlib总让人觉得缺少了啥——那就是图片一旦生成它就是固定的,没有逻辑的动态效果。如果研究一下matplotlib的源码,发现其底层也是通过web前端相关的技术实现的,如svg、canvas。可想而知,python其实在者方面远远没有任何优势可言。

Bokeh——让python数据可视化看到了新的希望

那么毕竟很多这些库已经做好了,那就用呗。不过当你想要使得你的数据有更多的动态效果,甚至能够进行人机交互,比如图片上有按钮,这时候你可能发现了也有一些优秀的库作为支撑,比如Bokeh。与matplotlib不同,Bokeh绘制的图片是具有JavaScript的前端逻辑的,

您可以通过此链接尝试一下下面Bokeh的demo:

可以看到,Bokeh除了能显示图像外还可以使用进度条等工具动态地调整参数,其人机效果非matplotlib可比。虽然我们一直对Bokeh包邮很多期望,可是暂时遗憾的是目前该库的绘图样式种类目前仍却远远少于matplotlib,很多类型的图暂时无法绘制。

Node.js出现——让JavaScript不再仅仅能运用于前端

以往,JavaScript只能在浏览器中解释执行,并且在处理文件等方面有诸多的限制,这将其限制成为了一款完全是前端逻辑的语言。然而Node.js的出现打破了这一切。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它使得JavaScript 像python、java等语言一样,具有编写后端的能力。同时Node.js给JavaScript带来了像Python中Pip工具那样的方便的包管理工具npm,可以请见下一节。

2.Node.js(简介)

Node.js 教程 简单的说 Node.js 就是运行在服务端的 JavaScript,是一个基于Chrome V8引擎的JavaScript运行环境。有了Node.js以后,开发者可以使用JavaScript编写以前不能编写的功能,比如从前JS在读取文件方面是及其受限或者说是不能够做到的(即所谓安全的语言),现在不仅能完成这些事情,Node.js还像Python、Java等语言一样提供了丰富的类库,类库都包含了十分丰富的各类函数。因此说Node.js让JavaScript成为与Python、Ruby等服务端语言平起平坐的脚本语言。

3.Dnotebook - Jupyter的JavaScript版本

Danfo Notebook(Dnotebook)是一个开源项目,它源于使用Danfo.js执行快速且交互式的实验/原型制作的需要。DNotebook与流行的Jupyter Notebook相似, 但已针对JavaScript环境进行了自定义。Dnotebook是JSdata宏伟愿景的一部分,该愿景 旨在为JavaScript生态系统带来更多的数据科学和机器学习工具。

想学习Danfo Notebook的读者可以在附录1:Dnotebook(Danfo Notebook)单机资源与汉化文档中学习文档快速上手

4.Danfo.js - pandas的JavaScript

如果你熟悉Python中的pandas库,那么Danfo会让你有不仅是似曾相识的感觉——你会觉得:TM的劳资用过Danfo,就是这么亲切。因为它的和pandas确实有高度的一致,并且是参照pandas中的接口进行开发的。

Danfo 入门级API解析

1. 通用功能

1.1 数据操作

merge 将数据框或命名系列对象与数据库样式的联接合并。
concat 沿着特定轴连接danfo对象,沿着其他轴连接可选的设置逻辑。
get_dummies 将分类变量转换为虚拟/指示变量。类似于OneHotEncoding(独热码)。

1.2 数据处理/标准化

LabelEncoder 用0到n _ classes之间的值对目标标签进行编码。
OneHotEncoder 将分类特征编码为一个热数值数组。
StandardScaler 通过去除均值和单位方差的缩放来标准化特征。
MinMaxScaler 通过将每个要素缩放到给定范围来转换要素。

1.3 日期时间的顶层处理

to_datetime 将参数转换为日期时间。
date_range 返回固定频率的日期时间索引。

2. I/O

将表格/结构化数据轻松读入DataFrame和Series对象的功能和方法

2.1 read_csv

将逗号分隔值(CSV)文件读入数据框。还支持文件的迭代或分段。

danfo.read_csv(source, chunk) [source]

参数 类型 描述 默认值
source: str, path 或者 URL 任何有效的字符串路径都是可以接受的。该字符串可以是一个URL。
有效的URL包括http、ftp、s3、gs和file。对于本地文件路径,应以“file://”为前缀,例如,“file:///home/path/to/table.CSV”。
chunk: int (可选)要读取的文件行数。对读取大文件很有用。

返回值:

Promise 解析为DataFrame

示例

read_csv方法可以从本地磁盘或通过互联网读取csv文件。如果要在节点环境中从本地磁盘读取文件,则必须在完整路径名称前添加前缀“file://”。例如,要读取路径为/home/Desktop/user_names.csv的csv文件,您可以执行以下操作:

Node.js

const dfd = require("danfojs-node")
dfd.read_csv("file:///home/Desktop/user_names.csv")
   .then(df => {
    df.head().print()
   }).catch(err=>{
      console.log(err);
   })

读取大文件

对于无法立即放入内存的超大文件,您可以分块读取顶部。例如,这个[数据集](http://forexcel . com/WP/WP-content/uploads/2017/07/1500000 Sales Records . 7z)有超过150万行,如果您试图一次加载所有内容,将会引发内存错误。要读取这些类型的文件,可以使用read_csv

JavaScript

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);
 })

2.2 read_excel

将Excel值(xls)文件读入DataFrame。

danfo.read_excel(kwargs) [source]

参数 类型 描述
kwargs Object {
source: string, URL 或索引向Excel文件的本地文件的路径。
sheet_name: string, (可选) 要解析的工作表(sheet)的名称。默认为第一个表。
header_index: int, (可选) 代表数据标题(列)的行的索引。默认值将是第一个非空行。
data_index: int, (可选)实际数据(内容)开始的行的索引。默认值将是标题_索引的下一行
}

返回值:

return DataFrame

示例

read_excel方法可以读取从本地磁盘或通过互联网保存的excel文件。

const dfd = require("danfojs-node")
local_xcel = 'testexcel.xls'
async function load_process_data() {
    let df = await dfd.read_excel({source: local_xcel})
    df.head().print()
}
load_process_data()

2.3 read_json

将json值(JSON)文件读入DataFrame。

danfo.read_json(source,) [source]

参数 类型 描述
source: string, path 或 URL 任何有效的字符串路径都是可以接受的。该字符串可以是一个网址。有效的网址方案包括http、https、ftp、s3、gs或本地路径。支持相对路径和绝对路径

返回值:

Promise: 解析为DataFrame

示例

read_json方法可以从本地磁盘或通过互联网读取json文件。例如,在下面的例子中,user_names.json是一个json文件,与我们的脚本位于同一个目录中。要将其读入为danfo DataFrame,您可以指定相对路径:

const dfd = require("danfojs-node")
dfd.read_json("user_names.json")
    .then(df => {
df.head().print()
 }).catch(err=>{
    console.log(err);
 })

附录1:Dnotebook(Danfo Notebook)单机资源与汉化文档


这部分文档分为两个部分,一个是demo部分,另外一个是Getting Started部分,由于内容过长和其它原因,现已整体成单独的文章,请点击下方链接跳转之:

跳转链接:Dnotebook(Danfo Notebook)单机资源与汉化文档



附录2:Dnotebook 汉化修改版本(打包资源)


如果在我国内地使用原版的Dnotebook是无法正常加载的,甚至连官方文档的demo也执行不了。但这并不意味着Dnotebook自身的错误,只是由于总所周知的原因,内地无法加载相关的js文件和数据文件对运行进行支持。
博主通过简单修改,将引用域外文件嵌入本地,使得能够在没有网络的环境下使用Dbotebook。
资源上传到CSDN,无需支付任何费用,点击链接即可获取。

效果图:

资源下载链接地址:

https://download.csdn.net/download/qq_28550263/14991231

目录
相关文章
|
30天前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
233 2
|
10天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
10天前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
17 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
19天前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
50 10
|
16天前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
1月前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
1月前
|
自然语言处理 JavaScript 前端开发
JavaScript高级——ES6基础入门
JavaScript高级——ES6基础入门
22 1
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
417 1
|
1月前
|
Web App开发 JavaScript 前端开发
JavaWeb 22.Node.js_简介和安装
JavaWeb 22.Node.js_简介和安装
|
1月前
|
Web App开发 JSON JavaScript
深入浅出:Node.js后端开发入门与实践
【10月更文挑战第4天】在这个数字信息爆炸的时代,了解如何构建一个高效、稳定的后端系统对于开发者来说至关重要。本文将引导你步入Node.js的世界,通过浅显易懂的语言和逐步深入的内容组织,让你不仅理解Node.js的基本概念,还能掌握如何使用它来构建一个简单的后端服务。从安装Node.js到实现一个“Hello World”程序,再到处理HTTP请求,文章将带你一步步走进Node.js的大门。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往后端开发新世界的大门。