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中相关工具的开发者可以很快上手对应的工具。本文将追随者最新的相关内容不断更新系列博客。

李俊才的个人博客
邮箱 :291148484@163.com
CSDN 主页https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343
本文地址https://blog.csdn.net/qq_28550263/article/details/123482797

目录/索引

1.转向JavaScript

2.Node.js(简介) - 从前端到横跨前后两端的JavaScript

3.Dnotebook - Jupyter的替代方案

4.Danfo.js - pandas的JavaScript端版本

★附录1:Dnotebook(Danfo Notebook)单机资源与汉化文档用得上的,上面都是闲扯

★附录2:Dnotebook 汉化修改版本用得上的,上面都是闲扯


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]

参数类型描述
kwargsObject{
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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jcLee95

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值