Danfo.js专题 - 附:Dnotebook(Danfo Notebook)单机资源与汉化文档

简介: Danfo.js专题 - 附:Dnotebook(Danfo Notebook)单机资源与汉化文档



demo部分


demo

快速可视化

[1]

var df2
load_csv("//localhost:4400/javascripts/datas/train.csv").then((df)=>{
  df2 = df
})

[2]

table(df2.head())

Out

Product_Identifier Supermarket_Identifier Product_Supermarket_Identifier Product_Weight Product_Fat_Content Product_Shelf_Visibility Product_Type Product_Price Supermarket_Opening_Year Supermarket _Size Supermarket_Location_Type Supermarket_Type Product_Supermarket_Sales
0 DRA12 CHUKWUDI010 DRA12_CHUKWUDI010 11.6 Low Fat 0.068535039 Soft Drinks 357.54 2005 NaN Cluster 3 Grocery Store 709.08
1 DRA12 CHUKWUDI013 DRA12_CHUKWUDI013 11.6 Low Fat 0.040911824 Soft Drinks 355.79 1994 High Cluster 3 Supermarket Type1 6381.69
2 DRA12 CHUKWUDI017 DRA12_CHUKWUDI017 11.6 Low Fat 0.041177505 Soft Drinks 350.79 2014 NaN Cluster 2 Supermarket Type1 6381.69
3 DRA12 CHUKWUDI018 DRA12_CHUKWUDI018 11.6 Low Fat 0.041112694 Soft Drinks 355.04 2016 Medium Cluster 3 Supermarket Type2 2127.23
4 DRA12 CHUKWUDI035 DRA12_CHUKWUDI035 11.6 Ultra Low fat 0 Soft Drinks 354.79 2011 Small Cluster 2 Supermarket Type1 2481.77


[3]

table(df2.describe())

Out

Product_Shelf_Visibility Product_Price Supermarket_Opening_Year Product_Supermarket_Sales
count 4990 4990 4990 4990
mean 0.066916 391.803772 2004.783447 6103.52002
std 0.053058 119.378259 8.283151 4447.333835
min 0 78.730003 1992 83.230003
median 0.053564 393.86 2006 5374.675
max 0.328391 667.219971 2016 32717.410156
variance 0.002815 14251.168763 68.610594 19778778.23941

[4]

//Display the number of rows and columns
console.log(df2.shape)

Out

[4990,13]

[5]

console.log(df2.dtypes)

Out

[string,string,string,string,string,float32,string,float32,int32,string…3 more]

为了同时查看列及其类型。让我们创建一个序列,然后将索引设置为列名,并将值设置为tyoe

[6]

let dtypes = new dfd.Series(df2.dtypes,{index: df2.columns})
table(dtypes)

Out

0
Product_Identifier string
Supermarket_Identifier string
Product_Supermarket_Identifier string
Product_Weight string
Product_Fat_Content string
Product_Shelf_Visibility float32
Product_Type string
Product_Price float32
Supermarket_Opening_Year int32
Supermarket _Size string
Supermarket_Location_Type string
Supermarket_Type string
Product_Supermarket_Sales float32

[7]

//Remove Id columns
let cols_2_remove = ['Product_Identifier', 'Supermarket_Identifier', 'Product_Supermarket_Identifier']
var new_df = df2.drop({columns:cols_2_remove,axis:1}) // drop the columns
table(new_df.head())

Out

Product_Weight Product_Fat_Content Product_Shelf_Visibility Product_Type Product_Price Supermarket_Opening_Year Supermarket _Size Supermarket_Location_Type Supermarket_Type Product_Supermarket_Sales
0 11.6 Low Fat 0.068535039 Soft Drinks 357.54 2005 NaN Cluster 3 Grocery Store 709.08
1 11.6 Low Fat 0.040911824 Soft Drinks 355.79 1994 High Cluster 3 Supermarket Type1 6381.69
2 11.6 Low Fat 0.041177505 Soft Drinks 350.79 2014 NaN Cluster 2 Supermarket Type1 6381.69
3 11.6 Low Fat 0.041112694 Soft Drinks 355.04 2016 Medium Cluster 3 Supermarket Type2 2127.23
4 11.6 Ultra Low fat 0 Soft Drinks 354.79 2011 Small Cluster 2 Supermarket Type1 2481.77


[8]

console.log(df2.dtypes)

Out

[string,string,string,string,string,float32,string,float32,int32,string....3 more]

为了一起查看columns及其类型。让我们创建一个Series ,然后将索引设置为列名,并将值设置为tyoe。

let dtypes = new dfd.Series(df2.dtypes,{index: df2.columns})
table(dtypes)

Out

0
Product_Identifier string
Supermarket_Identifier string
Product_Supermarket_Identifier string
Product_Weight string
Product_Fat_Content string
Product_Shelf_Visibility float32
Product_Type string
Product_Price float32
Supermarket_Opening_Year int32
Supermarket _Size string
Supermarket_Location_Type string
Supermarket_Type string
Product_Supermarket_Sales float32
//Remove Id columns
let cols_2_remove = ['Product_Identifier', 'Supermarket_Identifier', 'Product_Supermarket_Identifier']
var new_df = df2.drop({columns:cols_2_remove,axis:1}) // drop the columns
table(new_df.head())
Product_Weight Product_Fat_Content Product_Shelf_Visibility Product_Type Product_Price Supermarket_Opening_Year Supermarket_Size Supermarket_Location_Type Supermarket_Type Product_Supermarket_Sales
0 11.6 Low Fat 0.068535039 Soft Drinks 357.54 2005 NaN Cluster 3 Grocery Store 709.08
1 11.6 Low Fat 0.040911824 Soft Drinks 355.79 1994 High Cluster 3 Supermarket Type1 6381.69
2 11.6 Low Fat 0.041177505 Soft Drinks 350.79 2014 NaN Cluster 2 Supermarket Type1 6381.69
3 11.6 Low Fat 0.041112694 Soft Drinks 355.04 2016 Medium Cluster 3 Supermarket Type2 2127.23
4 11.6 Ultra Low fat 0 Soft Drinks 354.79 2011 Small Cluster 2 Supermarket Type1 2481.77
//print the shape
console.log(new_df.shape)

Out

[4990,10]
//list out the categorical and numerical variable
var cat_cols = ['Product_Fat_Content','Product_Type',
                        'Supermarket _Size', 'Supermarket_Location_Type',
                    'Supermarket_Type' ]
var num_cols = ['Product_Weight', 'Product_Shelf_Visibility',
                        'Product_Price', 'Supermarket_Opening_Year', 'Product_Supermarket_Sales']
for(let i in cat_cols){
  let col = cat_cols[i]
  let counts = new_df[col].value_counts()
  var layout = {
    title: `Bar Plot for ${col}`
  }
  viz(`cat_viz${i}`, x =>{
    counts.plot(x).bar({layout:layout})
  })
}

for(let i in num_cols){
  let col = num_cols[i]
  let layout ={
    xaxis:{
      title: col
    },
    yaxis: {
      title:'Product_Supermarket_Sales'
    }
  }
  viz(`num_col${i}`, x=>{
      new_df.plot(x).scatter({x:col,y:'Product_Supermarket_Sales'})
  })
}

for(let i in cat_cols){
  let col = cat_cols[i]
  let layout ={
    xaxis:{
      title: col
    },
    yaxis: {
      title:'Product_Supermarket_Sales'
    }
  }
  viz(`cat_cols${i}`, x=>{
    new_df.plot(x).box({x:col, y:'Product_Supermarket_Sales'})
  })
}


Getting Started 部分


Getting Started

使用Dnotebooks的快速指南

安装

要安装Dnotebooks,必须安装Node.js。如果您没有,请按照这里的官方指南进行安装。

安装Node.js后,您可以通过在终端上运行以下命令来安装Dnotebook:

npm install -g dnotebook

建议如上全局安装Dnotebook。这使得从任何地方启动服务器都很容易。

运行 Dnotebook

安装后,在您打开的终端中运行以下命令:

dnotebook

这将在您的默认网页浏览器中打开一个url为 http://localhost:4400 的新选项卡.应该如下图所示:

此页面是默认的笔记本界面。从这里你可以开始写JavaScript或者Markdown。

单元格(Cells)

单元格(Cell)们构成了笔记本的主体。 在上面的截图中,黑色的单元格(Cell)为空单元格. 有两种类型的单元格,即:

  • Code cell: 这些单元格包含要执行的JavaScript代码,输出如下所示。
  • Markdown cell: 这些包含使用 Markdown 的文本.

代码单元格(Code Cell)

新笔记本的第一个单元格始终是代码单元格。任何JavaScript代码都可以在代码单元中编写和执行。让我们用经典的hello world示例来测试一下。键入console.log("Hello World!")输入代码单元格,然后单击运行按钮。

将鼠标悬停在代码单元格上,会显示Run按钮。或者,可以使用快捷键****Ctrl + Enter** (Win)或者Command + Enter (Mac) 来运行代码单元格。

结果应该如下所示:

Markdown

Markdown 是一种轻量级标记语言,可用于向纯文本文档添加格式元素。标记写在文本单元格中。要创建文本单元格,请将鼠标悬停在任意单元格上,然后单击 text 按钮。您可以选择在当前单元格的上方或下方添加降价单元格。

在文本框中,您可以添加任何减价文本。例如,将下面的文本复制并粘贴到标记文本框中。

# This is a level 1 heading
## This is a level 2 heading
This is some plain text that forms a paragraph.
Add emphasis via **bold** and __bold__, or *italic* and _italic_.
Paragraphs must be separated by an empty line.
* Sometimes we want to include lists.
* Which can be indented.
1. Lists can also be numbered.
2. For ordered lists.
[It is possible to include hyperlinks](https://www.example.com)
Inline code uses single backticks: `foo()`, and code blocks use triple backticks:
```
bar()
```
Or can be indented by 4 spaces:
    foo()
And finally, adding images is easy: ![Alt text](https://www.example.com/image.jpg)

要运行markdown 单元格,您可以双击它,或使用运行按钮。这将代替markdown 呈现输出。

要再次编辑一个markdown 单元格,你再次双击即可.

持久化/State

笔记本的每个实例都运行一个持久状态,并且在任何单元格中声明的变量对所有单元格都可用。

例如,如果您在一个单元格中加载包或声明变量,它们将在另一个单元格中可用。通过这种方式,您可以认为笔记本文档有点类似于脚本文件,只是它是多媒体。让我们试试这个来感受一下。首先,我们将加载danfo.js和tensorflow.js包,然后创建一个简单的模型。

//load package downloads and install any JavaScript package via its CDN
load_package(["https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest",
              "https://cdn.jsdelivr.net/npm/danfojs@0.2.4/dist/index.min.js"])

load_package是一种内置方法,可帮助您通过库/包的CDN链接将其加载到笔记本中。它可以接受一系列链接。

一旦我们执行了上面的单元,我们就可以在任何其他单元中引用tf (Tensorflow.js)和dfd (Danfo.js)。例如,我们可以从下面的代码创建一个Danfo DataFrame:

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

要显示Danfo对象(DataFrame/Series),请通过传递要显示的对象来使用内置的table函数。如果使用普通的print()语句,结果会打印到浏览器控制台

添加一个新的代码单元,并创建一些简单的张量,如下所示:

var xs = tf.tensor2d([[0,0],[0,1],[1,0],[1,1]])
var ys = tf.tensor2d([[0],[1],[1],[0]])
function getModel(){
  var model = tf.sequential()
  model.add(tf.layers.dense({units:8, inputShape:2, activation: 'tanh'}))
  model.add(tf.layers.dense({units:1, activation: 'sigmoid'}))
  model.compile({optimizer: 'sgd', loss: 'binaryCrossentropy', lr:0.1})
  return model
}

您可以使用console.log函数打印出任何对象。这将在浏览器控制台和单元格下的输出div中打印对象。

console.log(xs)

键入 Option + ⌘ + J (在 macOS系统上), 或者 Shift + CTRL + J (在 Windows/Linux系统上)以打开网页浏览器的console。我们鼓励您在实验时打开控制台,因为控制台中的错误消息格式正确。

在下面的新单元中,您可以创建和训练一个简单的模型:

var loss = []
var epochs = []
const model = getModel()
model.fit(xs, ys, {
  batchSize: 1,
  epochs: 50,
  callbacks: {
    onEpochEnd: async(epoch, logs)=>{epochs.push(epoch); loss.push((logs.loss).toFixed(4))}
  }
})

我们保存了每个epoch后的loss,因此我们可以使用Danfo.js内置的绘图方法进行绘图。

s = new dfd.Series(loss)
s.plot(this_div()).line()

要使用Danfo.js绘图,您需要指定一个div名称。您可以通过调用函数**this_div( )**来访问每个代码单元格下的输出div

文件选项

单击Option选项卡会为您的笔记本显示几个文件选项:

你可以重命名、下载和上传笔记本。

重命名笔记本

单击重命名选项会打开一个模态框,您可以在其中输入名称。完成后,单击关闭按钮。

下载你的笔记本

你可以下载一个笔记本供以后使用。下载按钮将笔记本保存为JSON对象,可以重新上传到Dnotebooks。例如,您将下载您创建的示例笔记本,并在下面重新上传:

导入保存的笔记本

您可以上传上例中保存的笔记本。首先,刷新页面,在新实例中,单击option 然后upload

选择你早期下载的笔记本 (myNotebook.json). 这将自动加载并显示文件:

您还可以像使用任何其他笔记本一样进行交互和运行笔记本。

Extra Functions

load_package()

加载包方法可以帮助您通过CDN链接轻松地将外部包/库添加到笔记本中。例如,要加载Tensorflow.js和Plotly.js,您可以执行以下操作:

load_package(["https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest", 
             "https://cdn.plot.ly/plotly-latest.min.js"])

加载包后,您可以像在HTML页面中一样访问它们。例如,您可以绘制如下所示的交互式图表:

var trace1 = {
  x: [1, 2, 3, 4],
  y: [10, 11, 12, 13],
  mode: 'markers',
  marker: {
    size: [40, 60, 80, 100]
  }
};
var data = [trace1];
var layout = {
  title: 'Marker Size',
  showlegend: false,
  height: 600,
  width: 600
};
Plotly.newPlot(this_div(), data, layout); //this_div is a function that returns the current output div name

load_csv()

load_csv函数帮助您通过互联网将csv文件异步加载到Danfo.js DataFrame中。在读取大文件并且想要跟踪进度的时候,应该用这个代替Danfo.js内置的read_csv函数。load_csv在导航栏上显示一个微调器,以指示加载方法的状态。

将下面一行代码添加到代码单元格中,然后运行它。

var df
load_csv("https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
.then((d)=>{
  df = d
})

如果您观察右上角,您会注意到一个指示单元格状态的微调器。

table()

要轻松显示Danfo.js的DataFrame/series,可以使用内置的table函数。只需从任何单元格中调用它,并传入DataFrame对象。例如,加载上述finance数据集后,您可以如下所示显示它:

table(df) //displays object as a formated table

this_div()

函数this_div()将返回当前代码单元格输出的id。这可以在绘图时使用,或者当您想要在输出单元格中显示内容时使用。

请参见下面的示例,该示例根据日期索引绘制了finance DataFrame 中的两列。

var layout = {
    title: 'A financial charts',
    xaxis: {
      title: 'Date',
    },
    yaxis: {
      title: 'Count',
    }
}
new_df = df.set_index({ key: "Date" })
new_df.plot(this_div()).line({ columns: ["AAPL.Open", "AAPL.High"], layout: layout })

forlog()

当循环(looping)时,**console.log()**将只显示输出单元格中循环的最后一个元素:

for(let i=0; i<10; i++){
  console.log(i)
}

要查看输出单元格中循环的所有元素,可以使用如下所示的forlog 方法:

for(let i=0; i<10; i++){
  console.forlog(i)
}

目录
相关文章
|
3月前
|
JavaScript 前端开发 UED
让 HTML 向 Vue.js 华丽转身:如何把 `wangEditor` 仿腾讯文档项目整合进 Vue.js
让 HTML 向 Vue.js 华丽转身:如何把 `wangEditor` 仿腾讯文档项目整合进 Vue.js
|
4月前
|
JavaScript 前端开发
js之DOM 文档对象模型
js之DOM 文档对象模型
29 1
js之DOM 文档对象模型
|
4月前
|
JavaScript 前端开发
js之DOM 文档对象模型
js之DOM 文档对象模型
|
5月前
|
安全 Java API
Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档
这篇文章介绍了Swagger,它是一组开源工具,围绕OpenAPI规范帮助设计、构建、记录和使用RESTAPI。文章主要讨论了Swagger的主要工具,包括SwaggerEditor、SwaggerUI、SwaggerCodegen等。然后介绍了如何在Nest框架中集成Swagger,展示了安装依赖、定义DTO和控制器等步骤,以及如何使用Swagger装饰器。文章最后总结说,集成Swagger文档可以自动生成和维护API文档,规范API标准化和一致性,但会增加开发者工作量,需要保持注释和装饰器的准确性。
151 0
Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档
|
5月前
|
JavaScript
js【图解】滚动条的位置(文档与屏幕间的距离),鼠标事件距离(位置),元素距离(位置)
js【图解】滚动条的位置(文档与屏幕间的距离),鼠标事件距离(位置),元素距离(位置)
120 7
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的线上学习资源智能推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的线上学习资源智能推荐系统附带文章源码部署视频讲解等
71 5
|
6月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的高校实验室资源综合管理系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的高校实验室资源综合管理系统附带文章和源代码部署视频讲解等
47 5
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的学习资源推送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的学习资源推送系统附带文章源码部署视频讲解等
49 0
|
6月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的高校学生课堂考勤系统附带文章和源代码设计说明文档ppt
基于ssm+vue.js+uniapp小程序的高校学生课堂考勤系统附带文章和源代码设计说明文档ppt
37 1
|
5月前
|
JavaScript 前端开发
js/javascript 操作时间日期【全】含时间日期的创建、获取、比较、计算、格式化、时间戳、昨天、今天、星期汉化、计时、相关插件等
js/javascript 操作时间日期【全】含时间日期的创建、获取、比较、计算、格式化、时间戳、昨天、今天、星期汉化、计时、相关插件等
118 0