Prophecy Book - 为 TensorFlowJS 做的 Notebook 小工具

1,278 阅读3分钟

乱了很久终于还是签了三方,虽然工资不多还是算是有结果了。现在在学校上课无所事事,所以想着自己部门是做数据技术的,来做个东西玩AI好了(并不承认本人感染了AI)这个工具目前还是demo雏型,bug和功能需求,希望大家都能踊跃的提到github上面!

因为要tfjs使用方便,请使用最新Chrome浏览器

Github地址:github.com/mxz96102/pr…

线上demo地址: pbook.hustfe.com/

Why and How

实际上在编写数据相关的代码时候,一个一体化的东西能很大的提高生产效率,所以在自己能力范围内编写一个方便自己玩tfjs的工具。因为觉得其实在py数据处理工具里面使用的notebook工具真的比较方便,所以这个工具是notebook型的,旨在仅需浏览器,实现代码到数据可视化的链路。

这次因为是自己的项目,所以使用了自己喜欢的mobx+ts+react来写。(在公司写了四个月的antd+dva型项目,让自己呼吸一下喜欢的技术栈吧)

另外,此次是兴起而发,所以没有做同类工具的调研,所以大家有建议或者更好的工具都可以提出了

主要功能

Prophecy Book 是基于功能块来进行使用的,所以在一个book里面你能看到的,都是块(section),这样也方便各种的新模块加入。

文本块

说到文本就是markdown了,所以pbook采用了markdown来更快的做文本格式的安排。 在平时,文本块是按照编译以后的样式展示的。

在双击以后,markdown就会进入编辑状态。

代码块

代码块是通过书写js代码来进行阶段性数据处理的地方,在这里,我设置了数据当前上下文和全局上下文的概念。

在此,我们有以下全局变量

function set(name, value) {/*设定数据*/}
function get(name, value) {/*获取数据*/}
function end() {/*结束当前代码运行*/}
import tf from '@tensorflow/tfjs'

set和get均是在全局上下文里操作数据,每一个代码块是一个单独的当前上下文。

有end函数是因为,代码本身如果有异步操作是无法探知代码结束这样的一个时间点的,所以每一个代码块都有一个end函数来知会代码执行过程完成

其余的就是正常的js代码书写。 执行成功后代码在当前上下文set的数据会被打出log,如果有错误,那么log打出来的是错误原因。

在双击代码块后,可以只运行当前块。

Chart块

有一堆数据其实也不知道要干什么,所以我们需要更直观的形式来可视化数据,这里直接用了g2来进行可视化。目前只推出了冒泡图,之后会支持更多

Chart块通过脚本来进行数据转化。下面这段代码,展示的如何让before和after的数据格式化到制定的格式

let before = get('before')
let after = get('after')
let ys = get('ys')
let data = []

before.map((e, i) => data.push({
	x: e, y: ys[i], type: 'before'
}))

after.map((e, i) => data.push({
	x: e, y: ys[i], type: 'after'
}))

set('data', data)
end()

储存

现在的文档数据支持储存到json文件(不包含全局上下文),读取后就能复现完整文档。example是tensorflowjs的第一个教程,github.com/mxz96102/pr…

展望

之后会加入更好的代码块体验和更多的chart形式,并且希望大家可以多提意见,让这个小工具更加好用,代码完全开源,大家也可以直接pr贡献~

小广告:另一个小工具,做给同学算薪资用的 tax.hustfe.com/