danfo.js is an open source, JavaScript library providing high performance, intuitive, and easy to use data structures for manipulating and processing structured data.

Overview


Danfojs: powerful javascript data analysis toolkit

Node.js CI Coverage Status Twitter Patreon donate button

What is it?

Danfo.js is a javascript package that provides fast, flexible, and expressive data structures designed to make working with "relational" or "labeled" data both easy and intuitive. It is heavily inspired by Pandas library, and provides a similar API. This means that users familiar with Pandas, can easily pick up danfo.js.

Main Features

  • Danfo.js is fast. It is built on Tensorflow.js, and supports tensors out of the box. This means you can convert Danfo data structure to Tensors.
  • Easy handling of missing-data (represented as NaN) in floating point as well as non-floating point data
  • Size mutability: columns can be inserted/deleted from DataFrame
  • Automatic and explicit alignment: objects can be explicitly aligned to a set of labels, or the user can simply ignore the labels and let Series, DataFrame, etc. automatically align the data for you in computations
  • Powerful, flexible groupby functionality to perform split-apply-combine operations on data sets, for both aggregating and transforming data
  • Make it easy to convert Arrays, JSONs, List or Objects, Tensors and differently-indexed data structures into DataFrame objects
  • Intelligent label-based slicing, fancy indexing, and querying of large data sets
  • Intuitive merging and joining data sets
  • Robust IO tools for loading data from flat-files (CSV, Json, Excel, Data package).
  • Powerful, flexible and intutive API for plotting DataFrames and Series interactively.
  • Timeseries-specific functionality: date range generation and date and time properties.
  • Robust data preprocessing functions like OneHotEncoders, LabelEncoders, and scalers like StandardScaler and MinMaxScaler are supported on DataFrame and Series

To use Danfo.js via script tags, copy and paste the CDN below to the body of your HTML file

    <script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/bundle.min.js"></script> 

Example Usage in the Browser

See the example below in Code Sandbox

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.plot.ly/plotly-1.2.0.min.js"></script> 
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/bundle.min.js"></script> 

    <title>Document</title>
</head>

<body>

    <div id="div1"></div>
    <div id="div2"></div>
    <div id="div3"></div>

    <script>

        dfd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
            .then(df => {

                df['AAPL.Open'].plot("div1").box() //makes a box plot

                df.plot("div2").table() //display csv as table

                new_df = df.set_index({ key: "Date" }) //resets the index to Date column
                new_df.plot("div3").line({ columns: ["AAPL.Open", "AAPL.High"] })  //makes a timeseries plot

            }).catch(err => {
                console.log(err);
            })

    </script>
    
</body>

</html>

Output in Browser:

How to install

Danfo.js is hosted on NPM, and can installed via package managers like npm and yarn

npm install danfojs-node

Example usage in Nodejs

const dfd = require("danfojs-node")


dfd.read_csv("https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv")
  .then(df => {
    //prints the first five columns
    df.head().print()

    //Calculate descriptive statistics for all numerical columns
    df.describe().print()

    //prints the shape of the data
    console.log(df.shape);

    //prints all column names
    console.log(df.column_names);

    //prints the inferred dtypes of each column
    df.ctypes.print()

    //selecting a column by subsetting
    df['Name'].print()

    //drop columns by names
    cols_2_remove = ['Age', 'Pclass']
    df_drop = df.drop({ columns: cols_2_remove, axis: 1 })
    df_drop.print()


    //select columns by dtypes
    let str_cols = df_drop.select_dtypes(["string"])
    let num_cols = df_drop.select_dtypes(["int32", "float32"])
    str_cols.print()
    num_cols.print()


    //add new column to Dataframe
    let new_vals = df['Fare'].round().values
    df_drop.addColumn({ column: "fare_round", value:  new_vals})
    df_drop.print()

    df_drop['fare_round'].print(5)

    //prints the number of occurence each value in the column
    df_drop['Survived'].value_counts().print()

    //print the last ten elementa of a DataFrame
    df_drop.tail(10).print()

    //prints the number of missing values in a DataFrame
    df_drop.isna().sum().print()

  }).catch(err => {
    console.log(err);
  })

Output in Node Console:

If you want to use Danfo in frontend frameworks like React/Vue, read this guide

You can play with Danfo.js on Dnotebooks playground here

See the Official Getting Started Guide

Documentation

The official documentation can be found here

Discussion and Development

Development discussions take place here.

Contributing to Danfo

All contributions, bug reports, bug fixes, documentation improvements, enhancements, and ideas are welcome. A detailed overview on how to contribute can be found in the contributing guide.

Licence MIT

Created by Rising Odegua and Stephen Oni

Danfo.js - Open Source JavaScript library for manipulating data. | Product Hunt Embed

Comments
  • Integrate with vue 3

    Integrate with vue 3

    This seems like a novice question and yet I don't understand it. How do I import and use a third party js library in vue 3? In this case I'm trying to use Danfo.js https://danfo.jsdata.org/getting-started by doing npm install danfojs (even though it only shows to use cdn for browser use I think this is the same thing but correct me if wrong). Then idk if this is something that I import in each file I want to use or if I do it in main.js and it works globally automatically or what. I tried making main.js

    import { createApp } from 'vue'
    import App from './App.vue'
    
    import danfo from 'danfojs';
    
    const app = createApp(App)
    app.use(danfo)
    app.mount('#app')
    
    

    and then idk if that's correct but if so then how do I call dfd from inside the setup() of a component

    function danfoTest(){
          console.log('idk', dfd)
          const 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 }]
                        
            const df = new dfd.DataFrame(json_data)
            console.log('here')
            df['A'].print()
        }
    

    Idk if this is a lack of vue 3 understanding or lack of Danfo.js understanding but either way would appreciate some help, thanks!

    Also is is possible can is only option? When adding the <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/index.min.js"></script> tag to index.js it did work but I was getting errors in terminal about dfd not being defined although calling dfd did work. I assume because it loads the script later idk either way I think I want the npm install way and the npm install danfojs-node I believe is for a node version not the browser version which is why I did npm install danfojs

    Also side question is this a long-term supported project with tensor or more of a side project

    no-issue-activity 
    opened by 24jr 15
  • Error:  The Node.js native addon module (tfjs_binding.node) can not be found at path...

    Error: The Node.js native addon module (tfjs_binding.node) can not be found at path...

    I am trying to install DanfoJS on windows 10 using below command:

    npm install danfojs-node
    

    but I get following error when I run npm start

    Error: The Node.js native addon module (tfjs_binding.node) can not be found at path:

    I tried to ran npm rebuild @tensorflow/tfjs-node build-addon-from-source but still having problem.

    opened by samiragol 15
  • Series index is not retained after sorting values

    Series index is not retained after sorting values

    sortValues seems inconvinient because it does reset the index and its hard to reindex it if I only have numbers...

    The Index gets ignored too often in general for example:

    Series.toJSON() or toCSV() only includes the values. This is inconvinient. There should be an option to not drop the index. Pandas doesn't drop the index either.

    Also is it possible to combine the functions valueCounts() and sortValues, just like pandas does? The missing index when passing a Series makes further calculations unnecessarily complicated..

    If it is intended to leave a passed Series 1 dimensional there should be atleast a method that converts a Series to a Dataframe by adding a new Index. This is done by reindex() in pandas, but in danfojs this only seems to drop the current index and give it new values.

    opened by Emporea 13
  • Issue Install danfojs-node

    Issue Install danfojs-node

    Hi everyone, I have issue when i install danfojs-node with npm :

    npm WARN deprecated @types/[email protected]: This is a stub types definition. csv-parse provides its own type definitions, so you do not need this installed.
    npm WARN deprecated [email protected]: Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future
    npm WARN deprecated [email protected]: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410
    npm ERR! code 1
    npm ERR! path C:\Users\**\Desktop\NodeJS Developpement\Mysql JS\node_modules\@tensorflow\tfjs-node
    npm ERR! command failed
    npm ERR! command C:\WINDOWS\system32\cmd.exe /d /s /c node scripts/install.js
    npm ERR! CPU-windows-3.2.0.zip
    npm ERR! * Downloading libtensorflow
    npm ERR!
    npm ERR! * Building TensorFlow Node.js bindings
    npm ERR! symlink ./lib/napi-v8 failed:  Error: Command failed: node scripts/deps-stage.js symlink ./lib/napi-v8
    npm ERR!   * Symlink of lib\napi-v8\tensorflow.dll failed, creating a copy on disk.
    npm ERR! node:internal/process/promises:245
    npm ERR!           triggerUncaughtException(err, true /* fromPromise */);
    npm ERR!           ^
    npm ERR!
    npm ERR! [Error: ENOENT: no such file or directory, copyfile 'C:\Users\**\Desktop\NodeJS Developpement\Mysql JS\node_modules\@tensorflow\tfjs-node\deps\lib\tensorflow.dll' -> 'C:\Users\**\Desktop\NodeJS Developpement\Mysql JS\node_modules\@tensorflow\tfjs-node\lib\napi-v8\tensorflow.dll'] {
    npm ERR!   errno: -4058,
    npm ERR!   code: 'ENOENT',
    npm ERR!   syscall: 'copyfile',
    npm ERR!   path: 'C:\\Users\\**\\Desktop\\NodeJS Developpement\\Mysql JS\\node_modules\\@tensorflow\\tfjs-node\\deps\\lib\\tensorflow.dll',
    npm ERR!   dest: 'C:\\Users\\**\\Desktop\\NodeJS Developpement\\Mysql JS\\node_modules\\@tensorflow\\tfjs-node\\lib\\napi-v8\\tensorflow.dll'
    npm ERR! }
    npm ERR!
    npm ERR!     at ChildProcess.exithandler (node:child_process:326:12)
    npm ERR!     at ChildProcess.emit (node:events:369:20)
    npm ERR!     at maybeClose (node:internal/child_process:1067:16)
    npm ERR!     at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5) {
    npm ERR!   killed: false,
    npm ERR!   code: 1,
    npm ERR!   signal: null,
    npm ERR!   cmd: 'node scripts/deps-stage.js symlink ./lib/napi-v8'
    npm ERR! }
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     C:\Users\**\AppData\Local\npm-cache\_logs\2021-03-27T00_12_51_686Z-debug.log
    

    The problem come from tensorflow and i have no idea to solve it. Thank you

    opened by AmauryVa 13
  • Wrong exception thrown for empty dataframe

    Wrong exception thrown for empty dataframe

    Using the get started query example https://danfo.jsdata.org/api-reference/dataframe/danfo.dataframe.query

    let data = {"A": [30, 1, 2, 3],
               "B": [34, 4, 5, 6],
               "C": [20, 20, 30, 40]}
               
    let cols = ["A", "B", "C"]
    let df = new dfd.DataFrame(data, { columns: cols })
    df.print() //before query
    
    let query_df = df.query({ "column": "B", "is": ">", "to": 5 })
    table(query_df)
    

    I modified the condition to

    let data = {"A": [30, 1, 2, 3],
               "B": [34, 4, 5, 6],
               "C": [20, 20, 30, 40]}
               
    let cols = ["A", "B", "C"]
    let df = new dfd.DataFrame(data, { columns: cols })
    df.print() //before query
    
    let query_df = df.query({ "column": "B", "is": ">", "to": 40 })
    table(query_df)
    

    Error message

    File format not supported for now
    

    Expected Output: Return empty result/array

    no-issue-activity 
    opened by code-wizard 12
  • groupby error

    groupby error

    Describe the bug I get a Column names length mismatch error when trying to group by one column. If I try the same thing in Pandas everything works as it should.

    To Reproduce Steps to reproduce the behavior:

    dfd.read_csv('https://raw.githubusercontent.com/homomorfismo/spain-university-cutoffs/main/databases/spain_utf8.csv').then(a => df)
    df.groupby(['University'])
    

    Expected behavior Obtaining a list of dataframes each of which only contains observations with the same University value.

    Screenshots 2021-11-06 (1)

    Desktop:

    • OS: Windows 10
    • Browser: Chrome
    • Version: 95.0.4638.69 (64 bits)
    opened by mserranomartin 11
  • WIP: [Breaking refactor] Converting DanfoJs to typescript

    WIP: [Breaking refactor] Converting DanfoJs to typescript

    This refactor converts the danfojs to use typescript. This is scheduled to be released as Danfo.Js v1.0 (stable), and will include a couple of breaking changes, bug fixes and new features.

    Task and progress

    • [x] Generic core
    • [x] Frame class
    • [x] Series class
    • [x] File Readers /input and output
    • [x] Utility class
    • [x] Configuration class
    • [x] Groupby class
    • [x] Concat
    • [x] Merge class
    • [x] Preprocessing class
    • [x] Str class (String)
    • [x] Dt class (Datetime)
    • [x] Indexing
    • [x] Plotting class
    • [x] Date range

    Bug Fixes

    • [x] Column data not being updated when mutating internal data array
    • [x] Str class issue for non-strings
    • [x] Better error message
    • [x] Fix support for all JS date string
    • [x] Fix loc slicing bug for row index with string labels
    • [x] Fix wrong order of axis used during computation. axis=1 ==> row-wise operations and axis=0 ==> column-wise operation
    • [x] apply function now works only across a specified axis

    New Features

    • [x] Ability to create an empty NDframe
    • [x] Flag for toggling between low/high memory mode
    • [x] Inplace support for all mutating operations
    • [x] Ability to set Configuration values on NDframe creation
    • [x] Support boolean mask for subsetting with iloc. E.g df.iloc({rows: df["count"].gt(5), columns: [0, 1]})
    • [x] Support boolean mask for subsetting with loc. E.g df.loc({rows: df["count"].gt(5), columns: ["Count", "Size"]})
    • [x] Update an existing column value via subsetting. E.g df["count"] = [1,3,4,5]
    • [x] Add loc indexing support for Series
    • [x] Add configuration support for formating table display in console
    • [x] applyMap ==> Element wise apply function for DataFrame
    • [X] and and or logical comparison support. E.g df.loc({rows: df['Salary_in_1000'].gte(100)).and(df['Age'].gt(60)) })
    • [x] Streaming support for CSV and JSON files into NDframes
    • [x] New IO function
      • [x] streamJSON ==> Supports streaming of local or remote JSON files into DataFrame.
      • [x] streamCSV ==> Supports streaming of local or remote CSV files into DataFrame.
      • [x] openCsvInputStream ==> Open a local/remote CSV file as a readable stream
      • [x] writeCsvOutputStream Open a local/remote CSV file as a writable stream
    • [x] readCSV supports config values for headers, separator, etc.
    • [x] toCSV supports config values for output
    • [x] readJSON supports config values for headers, separator, etc.
    • [x] toJSON supports config values for formating output
    • [x] Query/Filter with multiple condition support. E.g df.loc({rows: df['Salary_in_1000'].gte(100)).and(df['Age'].gt(60)) })
    • [x] streamCsvTransforme ==> Pipable stream transformer for incrementally transforming DataFrames
    documentation enhancement 
    opened by risenW 11
  • StandardScaler needs an inverse transform function

    StandardScaler needs an inverse transform function

    Is your feature request related to a problem? Please describe.

    I normalized the data using StandardScaler. I then trained a tensorflowjs model. I now wish to predict. In order to carry this out, I need to first normalize and then use tensorflowjs's model predict() function - and then get the un-normalized prediction.

    I assume to normalize that data that I will use for prediction, I re-use the same scaler to transform() (without running fit() first since we have already used fit() before during training - please let me know if I am wrong). But to get the un-normalized prediction, I need a reverse transform function

    Describe the solution you'd like

    sklearn appears to have an inverse_transform() function that needs to exist in Danfojs too

    Describe alternatives you've considered

    I am still trying to figure out how to get the inverse transform implemented, since I do not have the mean or standard deviation information with me. Going through Danfojs's source code to figure if it can be implemented or if I need to set up my own scaler and reverse transform functions

    opened by callmekatootie 11
  • `Groupby` behaves differently depending on the order of the columns

    `Groupby` behaves differently depending on the order of the columns

    Describe the bug When creating a DataFrame, depending on the order of the columns the groupby() function works properly or returns an error.

    To Reproduce This column order works perfectly:

    let data = {
        worker: ["david", "david", "john", "alice", "john", "david"],
        hours: [5, 6, 2, 8, 4, 3],
        day: ["monday", "tuesday", "wednesday", "thursday", "friday", "friday"],
    };
    let df = new dfd.DataFrame(data);
    
    df.groupby(["day"]).col(["hours"]).sum().print()
    
    // ╔════════════╤═══════════════════╤═══════════════════╗
    // ║            │ day               │ hours_sum         ║
    // ╟────────────┼───────────────────┼───────────────────╢
    // ║ 0          │ monday            │ 5                 ║
    // ╟────────────┼───────────────────┼───────────────────╢
    // ║ 1          │ tuesday           │ 6                 ║
    // ╟────────────┼───────────────────┼───────────────────╢
    // ║ 2          │ wednesday         │ 2                 ║
    // ╟────────────┼───────────────────┼───────────────────╢
    // ║ 3          │ thursday          │ 8                 ║
    // ╟────────────┼───────────────────┼───────────────────╢
    // ║ 4          │ friday            │ 7                 ║
    // ╚════════════╧═══════════════════╧═══════════════════╝
    
    df.groupby(["worker"]).count().print()
    // ╔════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
    // ║            │ worker            │ hours_count       │ day_count         ║
    // ╟────────────┼───────────────────┼───────────────────┼───────────────────╢
    // ║ 0          │ david             │ 3                 │ 3                 ║
    // ╟────────────┼───────────────────┼───────────────────┼───────────────────╢
    // ║ 1          │ john              │ 2                 │ 2                 ║
    // ╟────────────┼───────────────────┼───────────────────┼───────────────────╢
    // ║ 2          │ alice             │ 1                 │ 1                 ║
    // ╚════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
    

    But when I change the column order to the following it doesn't work:

    let data = {
        hours: [5, 6, 2, 8, 4, 3],
        worker: ["david", "david", "john", "alice", "john", "david"],
        day: ["monday", "tuesday", "wednesday", "thursday", "friday", "friday"],
    };
    let df = new dfd.DataFrame(data);
    
    df.groupby(["day"]).col(["hours"]).sum().print()
    // Uncaught Error: Can't perform math operation on column hours
    //    arithemetic groupby.ts:266
    //    operations groupby.ts:417
    //    count groupby.ts:431
    
    df.groupby(["worker"]).count().print()
    // Uncaught Error: Can't perform math operation on column hours
    //    arithemetic groupby.ts:266
    //    operations groupby.ts:417
    //    count groupby.ts:431
    

    Expected behavior I would expect that changing the order of the columns wouldn't make any change on the result.

    Desktop (please complete the following information):

    • OS: Windows 11
    • Browser: Firefox v97.0.1, Chrome v98.0.4758.102, Edge v98.0.1108.56
    • Version: -

    Additional context I'm using the browser version, not the node.js one.

    opened by igonro 10
  • Train test split utility function

    Train test split utility function

    We should be able to pass a dataset to a function called train_test_split and get back splits of training and testing data similar to the sklearn train_test_split function here. .

    enhancement good first issue no-issue-activity 
    opened by risenW 10
  • Groupby with more than two columns isn't possible

    Groupby with more than two columns isn't possible

    Describe the bug I'm a little unsure if this is a bug? Or some sort of un-documented restriction?

    If you try to groupby with 3 columns, it only groups by the first. If you try to groupby with 2 columns, it only groups by both.

    Version

    • Browser version of danfo.
    • danfo - 0.2.5

    To Reproduce

    • Generate a dataframe with 3 text columns and one numeric column.
    • Run a groupby - const dfGroup = df.groupby(["col1", "col2","col3"])
    • Perform an aggregation dfGroup.col(["numeric_col"]).sum()

    Expected behavior I get a dataframe with aggregation by all 3 columns. Instead I'm getting a dataframe with aggregation by a single column.

    Is this currently a restriction or is this a bug?

    opened by dom-devel 10
  • chore(deps): bump json5 from 1.0.1 to 1.0.2 in /src/danfojs-browser

    chore(deps): bump json5 from 1.0.1 to 1.0.2 in /src/danfojs-browser

    Bumps json5 from 1.0.1 to 1.0.2.

    Release notes

    Sourced from json5's releases.

    v1.0.2

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295). This has been backported to v1. (#298)
    Changelog

    Sourced from json5's changelog.

    Unreleased [code, diff]

    v2.2.3 [code, diff]

    v2.2.2 [code, diff]

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).

    v2.2.1 [code, diff]

    • Fix: Removed dependence on minimist to patch CVE-2021-44906. (#266)

    v2.2.0 [code, diff]

    • New: Accurate and documented TypeScript declarations are now included. There is no need to install @types/json5. (#236, #244)

    v2.1.3 [code, diff]

    • Fix: An out of memory bug when parsing numbers has been fixed. (#228, #229)

    v2.1.2 [code, diff]

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • chore(deps): bump json5 from 1.0.1 to 1.0.2 in /src/danfojs-node

    chore(deps): bump json5 from 1.0.1 to 1.0.2 in /src/danfojs-node

    Bumps json5 from 1.0.1 to 1.0.2.

    Release notes

    Sourced from json5's releases.

    v1.0.2

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295). This has been backported to v1. (#298)
    Changelog

    Sourced from json5's changelog.

    Unreleased [code, diff]

    v2.2.3 [code, diff]

    v2.2.2 [code, diff]

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).

    v2.2.1 [code, diff]

    • Fix: Removed dependence on minimist to patch CVE-2021-44906. (#266)

    v2.2.0 [code, diff]

    • New: Accurate and documented TypeScript declarations are now included. There is no need to install @types/json5. (#236, #244)

    v2.1.3 [code, diff]

    • Fix: An out of memory bug when parsing numbers has been fixed. (#228, #229)

    v2.1.2 [code, diff]

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bug: Failed to resolve entry for package

    Bug: Failed to resolve entry for package "danfojs"

    Describe the bug I've installed [email protected]^1.1.2 in my React project using Vite and I'm getting the following error:

    [plugin:vite:import-analysis] Failed to resolve entry for package "danfojs". The package may have incorrect main/module/exports specified in its package.json.
    

    I really don't know what to do, I tried googling the error and found nothing. At first I thought it was a bug involving Vite, but then I tried using CRA and the bug still happens.

    Screenshots image

    opened by devMagno 2
  • Wrong column dtypes int32

    Wrong column dtypes int32

    I'm using [email protected] in the browser, loaded from the official CDN link taken from the documentation. Tested in Chrome and Firefox

    df = new dfd.DataFrame([ { "A" : "10"}, { "A" : "100"}]) df.dtypes >>> [ "int32" ] df["A"].sum() >>> "010100"

    if i do:

    df2 = df.asType("A", "int32") df2.dtypes >>> [ "int32" ] df2["A"].sum() >>> 110

    opened by fcorallini 0
  • Error: DtypeError: Dtype

    Error: DtypeError: Dtype "undefined" not supported

    file.csv

      import { readCSV } from 'danfojs-node';
    
      const ndf = await readCSV('/Users/ellison/Desktop/file.csv');
      ndf.print();
      ndf.loc({ rows: [1], columns: ['Variable 1'] }).print(); // error
    

    image

    opened by coco-super 1
  • chore(deps): bump flat and mocha in /src/danfojs-node

    chore(deps): bump flat and mocha in /src/danfojs-node

    Bumps flat to 5.0.2 and updates ancestor dependency mocha. These dependencies need to be updated together.

    Updates flat from 4.1.1 to 5.0.2

    Commits
    • e5ffd66 Release 5.0.2
    • fdb79d5 Update dependencies, refresh lockfile, format with standard.
    • e52185d Test against node 14 in CI.
    • 0189cb1 Avoid arrow function syntax.
    • f25d3a1 Release 5.0.1
    • 54cc7ad use standard formatting
    • 779816e drop dependencies
    • 2eea6d3 Bump lodash from 4.17.15 to 4.17.19
    • a61a554 Bump acorn from 7.1.0 to 7.4.0
    • 20ef0ef Fix prototype pollution on unflatten
    • Additional commits viewable in compare view

    Updates mocha from 7.2.0 to 10.2.0

    Release notes

    Sourced from mocha's releases.

    v10.2.0

    10.2.0 / 2022-12-11

    :tada: Enhancements

    • #4945: API: add possibility to decorate ESM name before import (@​j0tunn)

    :bug: Fixes

    :book: Documentation

    v10.1.0

    10.1.0 / 2022-10-16

    :tada: Enhancements

    :nut_and_bolt: Other

    v10.0.0

    10.0.0 / 2022-05-01

    :boom: Breaking Changes

    :nut_and_bolt: Other

    ... (truncated)

    Changelog

    Sourced from mocha's changelog.

    10.2.0 / 2022-12-11

    :tada: Enhancements

    • #4945: API: add possibility to decorate ESM name before import (@​j0tunn)

    :bug: Fixes

    :book: Documentation

    10.1.0 / 2022-10-16

    :tada: Enhancements

    :nut_and_bolt: Other

    10.0.0 / 2022-05-01

    :boom: Breaking Changes

    :nut_and_bolt: Other

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(v1.1.2)
  • v1.1.2(Oct 12, 2022)

    What's Changed

    • fix copy/paste error in df.apply documentation by @kgeis in https://github.com/javascriptdata/danfojs/pull/469
    • Makes an ESM bundle using esbuild by @dcrescim in https://github.com/javascriptdata/danfojs/pull/447
    • Fix invalid assert.throws statements by @igonro in https://github.com/javascriptdata/danfojs/pull/419
    • chore(deps): bump shell-quote from 1.7.2 to 1.7.3 in /src/danfojs-browser by @dependabot in https://github.com/javascriptdata/danfojs/pull/477
    • chore(deps): bump terser from 5.11.0 to 5.14.2 in /src/danfojs-browser by @dependabot in https://github.com/javascriptdata/danfojs/pull/474
    • chore(deps): bump terser from 5.10.0 to 5.14.2 in /src/danfojs-base by @dependabot in https://github.com/javascriptdata/danfojs/pull/473
    • Allow Series.append() to use zero, fixes #486 by @BowTiedAztec in https://github.com/javascriptdata/danfojs/pull/487
    • Add error handler for io functions by @risenW in https://github.com/javascriptdata/danfojs/pull/503
    • chore(deps): bump json-schema and jsprim in /src/danfojs-node by @dependabot in https://github.com/javascriptdata/danfojs/pull/504
    • add support for excel parsing options arg by @risenW in https://github.com/javascriptdata/danfojs/pull/505
    • Chore/add default support for datetime by @risenW in https://github.com/javascriptdata/danfojs/pull/511
    • Master merge by @steveoni in https://github.com/javascriptdata/danfojs/pull/478

    New Contributors

    • @kgeis made their first contribution in https://github.com/javascriptdata/danfojs/pull/469
    • @BowTiedAztec made their first contribution in https://github.com/javascriptdata/danfojs/pull/487

    Full Changelog: https://github.com/javascriptdata/danfojs/compare/v1.1.1...v1.1.2

    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(Apr 20, 2022)

    What's Changed

    • fix: fillNa throws an error when values is an empty string by @ankitskvmdam in https://github.com/javascriptdata/danfojs/pull/441
    • Fix for readCSV mismatch between Browser and Node by @dcrescim in https://github.com/javascriptdata/danfojs/pull/443
    • Fix breaking import in client-side library

    New Contributors

    • @ankitskvmdam made their first contribution in https://github.com/javascriptdata/danfojs/pull/441
    • @dcrescim made their first contribution in https://github.com/javascriptdata/danfojs/pull/443

    Full Changelog: https://github.com/javascriptdata/danfojs/compare/v1.1.0...v1.1.1

    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Apr 4, 2022)

    What's Changed

    • Deprecated toJSON, toCSV, and toExcel methods in frame and series by @risenW in https://github.com/javascriptdata/danfojs/pull/440

    Full Changelog: https://github.com/javascriptdata/danfojs/compare/v1.0.5...v1.1.0

    Source code(tar.gz)
    Source code(zip)
  • v1.0.5(Apr 2, 2022)

    What's Changed

    • feat: Added diff() function to DataFrame by @NeonSpork in https://github.com/javascriptdata/danfojs/pull/414
    • Fix empty dataframe not adding columns information by @igonro in https://github.com/javascriptdata/danfojs/pull/417
    • feat: Added pctChange() to DataFrame and divNoNan() to $MathOps in DataFrame by @NeonSpork in https://github.com/javascriptdata/danfojs/pull/418
    • test: Added missing unit tests for diff() and pctChange() by @NeonSpork in https://github.com/javascriptdata/danfojs/pull/422
    • Fix/breaking import by @risenW in https://github.com/javascriptdata/danfojs/pull/438

    Full Changelog: https://github.com/javascriptdata/danfojs/compare/v1.0.3...v1.0.5

    Source code(tar.gz)
    Source code(zip)
  • v1.0.3(Mar 8, 2022)

    What's Changed

    • add max to list of arithmetic operations by @steveoni in https://github.com/javascriptdata/danfojs/pull/367
    • correct lenght -> length by @adamgilman in https://github.com/javascriptdata/danfojs/pull/393
    • Bug fixes by @risenW in https://github.com/javascriptdata/danfojs/pull/395
    • Fix bug in groupby checking wrong colDtype by @igonro in https://github.com/javascriptdata/danfojs/pull/398
    • fix(test): Explicit type in test allows TS to compile by @NeonSpork in https://github.com/javascriptdata/danfojs/pull/411
    • Jan kaul esmodule by @risenW in https://github.com/javascriptdata/danfojs/pull/415

    New Contributors

    • @adamgilman made their first contribution in https://github.com/javascriptdata/danfojs/pull/393
    • @igonro made their first contribution in https://github.com/javascriptdata/danfojs/pull/398
    • @NeonSpork made their first contribution in https://github.com/javascriptdata/danfojs/pull/411

    Full Changelog: https://github.com/javascriptdata/danfojs/compare/v1.0.2...v1.0.3

    Source code(tar.gz)
    Source code(zip)
  • v1.0.2(Jan 19, 2022)

    What's Changed

    • Update TensorFlow version to fix M1 chip incompatibility by @risenW in https://github.com/javascriptdata/danfojs/pull/358
    • Add new feature iat and at by @risenW in https://github.com/javascriptdata/danfojs/pull/359
    • Fixed issue with sort by values by @risenW in https://github.com/javascriptdata/danfojs/pull/360

    Full Changelog: https://github.com/javascriptdata/danfojs/compare/v1.0.1...v1.0.2

    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Jan 16, 2022)

    What's Changed

    • Added type to DataFrame.rename mapper by @Devwulf in https://github.com/javascriptdata/danfojs/pull/347
    • Added the missing groupby.std() by @Devwulf in https://github.com/javascriptdata/danfojs/pull/351
    • Bump follow-redirects from 1.13.1 to 1.14.7 in /src/danfojs-browser by @dependabot in https://github.com/javascriptdata/danfojs/pull/352
    • Bump follow-redirects from 1.14.6 to 1.14.7 in /src/danfojs-base by @dependabot in https://github.com/javascriptdata/danfojs/pull/353

    New Contributors

    • @Devwulf made their first contribution in https://github.com/javascriptdata/danfojs/pull/347

    Full Changelog: https://github.com/javascriptdata/danfojs/compare/v1.0.0...v1.0.1

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Jan 12, 2022)

    Major breaking update. See the migration guide for pre-v1 users.

    New Features

    • Full Typescript support
    • streamCsvTransforme ==> Pipable stream transformer for incrementally transforming DataFrames
    • streamJSON ==> Supports streaming of local or remote JSON files into DataFrame.
    • streamCSV ==> Supports streaming of local or remote CSV files into DataFrame.
    • openCsvInputStream ==> Open a local/remote CSV file as a readable stream
    • writeCsvOutputStream ==> Open a local/remote CSV file as a writable stream
    • https://github.com/javascriptdata/danfojs/issues/325
    • https://github.com/javascriptdata/danfojs/issues/296

    Bug Fixes

    • https://github.com/javascriptdata/danfojs/issues/335
    • https://github.com/javascriptdata/danfojs/issues/338

    Contributors @risenW @steveoni

    Source code(tar.gz)
    Source code(zip)
  • v0.3.4(Dec 5, 2021)

  • v0.3.3(Oct 10, 2021)

  • v0.3.2(Oct 2, 2021)

  • v0.3.1(Oct 1, 2021)

    New Features

    • Ability to create empty frames
    • Flag for toggling between low/high memory mode
    • Inplace support for all mutating operations
    • Ability to set Configuration values on frame creation
    • Support boolean mask for subsetting with iloc and loc. E.g df.iloc({rows: df["count"].gt(5), columns: [0, 1]})
    • Update an existing column value via subsetting. E.g df["count"] = [1,3,4,5]
    • Add loc indexing support for Series
    • Add configuration support for formating DataFrame display in the console
    • New DataFrame applyMap function for element-wise apply function
    • and and or logical comparison support. E.g
    df.loc({
          rows: df['Salary_in_1000'].gte(100)).and(df['Age'].gt(60))
    })
    
    • read_csv now uses Papaparse and supports config values for headers, separator, etc.
    • to_csv , to_json and to_excel functions now support saving to local disk in Node and downloadable in the browser. Also, supports config parameters for output.
    • read_json now supports config values for headers, authentication, separator, etc.
    • read_excel now uses XLSX parser, hence supports all XLSX config options.
    • DataFrame query function now accepts boolean masks with single or multiple conditions. E.g
    df.query({
      rows: df['Salary_in_1000'].gte(100)).and(df['Age'].gt(60)) 
    })
    

    Bug Fixes

    • Column data not being updated when mutating internal data array
    • Str class error for non-string type
    • Better error message
    • Fix support for all JS Date format
    • Fix loc slicing bug for row index with string labels
    • DataFrame apply function now works only across a specified axis

    Contributors

    @risenW

    Source code(tar.gz)
    Source code(zip)
  • v0.2.5(May 30, 2021)

    [Bug Fix]: #206 #203 #200 #198 #198 #188 #181 #175 #183 #168 [Patch] #191 #161 #206

    Thanks to @risenW @steveoni @jpjagt @sponsfreixes @bherbruck @woosuk288 and @adithyaakrishna

    Source code(tar.gz)
    Source code(zip)
  • v0.2.4(Mar 29, 2021)

    [Bug Fix]: #150 #152 [Patch] #159 , #158 [Feature] #154 New Groupby feature: Perform groupby operation on grouped columns directly:

    group = df.groupby(['A"])
    group.min()
    
    
    groupby.apply((x) => x.add(2))
    groupby.col(["C"]).apply((x) => x.min())
    
    

    Contributors: @steveoni @PrawiraGenestonlia @woosuk288 @risenW

    Source code(tar.gz)
    Source code(zip)
  • v0.2.3(Mar 6, 2021)

    We added/updated the following features:

    • Fix error thrown when danfojs CDN is placed in an HTML header
    • Smaller bundle size for browser: From ~1.7mb to about ~550kb
    • Stopped bundling Danfojs with Plotly. This means that as of v0.2.3, we no longer ship with Plotly distribution due to the huge size. Plotly * plots are still supported, but in order to make them, you have to explicitly add the Plotly CDN or package.

    A simple example:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://cdn.plot.ly/plotly-1.2.0.min.js"></script> 
        <script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/bundle.min.js"></script> 
    
        <title>Document</title>
    </head>
    
    <body>
    
        <div id="div1"></div>
        <div id="div2"></div>
        <div id="div3"></div>
    
        <script>
    
            dfd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
                .then(df => {
    
                    df['AAPL.Open'].plot("div1").box() //makes a box plot
    
                    df.plot("div2").table() //display csv as table
    
                    new_df = df.set_index({ key: "Date" }) //resets the index to Date column
                    new_df.plot("div3").line({ columns: ["AAPL.Open", "AAPL.High"] })  //makes a timeseries plot
    
                }).catch(err => {
                    console.log(err);
                })
    
        </script>
        
    </body>
    
    </html>
    
    
    
    Source code(tar.gz)
    Source code(zip)
  • v0.2.2-browser(Feb 14, 2021)

    • Fix browser tag issue and returns back to specific versioning instead of @latest
    • This release fixes some runtime issue regarding @babel/runtime
    • Smaller size in this version. From ~8mb to about ~5mb
    • Release now ships with exported version of tensorflowjs (2.8.5). This fixes the double dependency issue when building ML models, as you no longer need to install/import tensorflowjs separately.

    To use tensoflowjs, you can reference it from danfo as shown below:

    const tf = dfd.tf //contains a reference to the tensorflowjs-node library
    
     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.summary();
    
    Source code(tar.gz)
    Source code(zip)
  • v0.2.2(Feb 14, 2021)

    • This release fixes some runtime issue regarding @babel/runtime
    • Release comes with exported version of tensorflowjs-node (2.8.5). This fixes the double dependency issue when building ML models, as you no longer need to install/import tensorflowjs separately.

    To use tensoflowjs-node, you can reference it from danfo as shown below:

    const dfd = require("danfojs-node")
    const tf = dfd.tf //contains a reference to the tensorflowjs-node library
    
     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.summary();
    
    Source code(tar.gz)
    Source code(zip)
  • v0.1.3-node-beta(Aug 15, 2020)

    This is a patch release for node-based environments. We added/updated the following features:

    • Ability to create DataFrame/Series from Tensors
    • Add iloc function for Series
    • Update addColumns function to accept Series
    • Add inplace option for fillna
    • Fix bug in rename function of DataFrame
    • Add Inplace option for query
    • Fixed upper bound bug in indexing
    Source code(tar.gz)
    Source code(zip)
  • v0.1.0-browser-beta(Aug 15, 2020)

    This is a minor release for browser-based environments. We added/updated the following features:

    • Ability to create DataFrame/Series from Tensors
    • Add iloc function for Series
    • Update addColumns function to accept Series
    • Add inplace option for fillna
    • Fix bug in rename function of DataFrame
    • Add Inplace option for query
    • Fixed upper bound bug in indexing
    Source code(tar.gz)
    Source code(zip)
  • v0.1.2-beta(Aug 12, 2020)

  • v0.0.14-beta(Aug 11, 2020)

Owner
JSdata
Building JavaScript tools for Data Science, Machine Learning and Deep Learning.
JSdata
The lightweight library for manipulating and animating SVG

SVG.js A lightweight library for manipulating and animating SVG, without any dependencies. SVG.js is licensed under the terms of the MIT License. Inst

SVG.js 10k Jan 3, 2023
An open-source visualization library specialized for authoring charts that facilitate data storytelling with a high-level action-driven grammar.

Narrative Chart Introduction Narrative Chart is an open-source visualization library specialized for authoring charts that facilitate data storytellin

Narrative Chart 45 Nov 2, 2022
A cross platform high-performance graphics system.

spritejs.org Spritejs is a cross platform high-performance graphics system, which can render graphics on web, node, desktop applications and mini-prog

null 5.1k Dec 24, 2022
A lightweight JavaScript graphics library with the intuitive API, based on SVG/VML technology.

GraphicsJS GraphicsJS is a lightweight JavaScript graphics library with the intuitive API, based on SVG/VML technology. Overview Quick Start Articles

AnyChart 973 Jan 3, 2023
A lightweight JavaScript graphics library with the intuitive API, based on SVG/VML technology.

GraphicsJS GraphicsJS is a lightweight JavaScript graphics library with the intuitive API, based on SVG/VML technology. Overview Quick Start Articles

AnyChart 937 Feb 5, 2021
A damn-sexy, open source real-time dashboard builder for IOT and other web mashups. A free open-source alternative to Geckoboard.

freeboard free·board (noun) *\ˈfrē-ˌbȯrd* the distance between the waterline and the main deck or weather deck of a ship or between the level of the w

freeboard 6.3k Dec 28, 2022
A port of the Processing visualization language to JavaScript.

⚠️ This project has been archived ⚠️ With the development of p5js and the API advances in Processing itself, as well as Processing.js itself having be

Processing.js 3.1k Jan 4, 2023
Processing Foundation 18.6k Jan 1, 2023
A lightweight graphic library providing 2d draw for Apache ECharts

ZRender A lightweight graphic library which provides 2d draw for Apache ECharts. Documentation https://ecomfe.github.io/zrender-doc/public/ License BS

Baidu EFE team 5.5k Dec 30, 2022
Ember Charts 3.5 2.3 L2 JavaScript A powerful and easy to use charting library for Ember.js

Ember Charts A charting library built with the Ember.js and d3.js frameworks. It includes time series, bar, pie, and scatter charts which are easy to

Addepar 793 Dec 7, 2022
Open-source JavaScript charting library behind Plotly and Dash

Plotly.js is a standalone Javascript data visualization library, and it also powers the Python and R modules named plotly in those respective ecosyste

Plotly 15.3k Jan 4, 2023
Render echarts in obsidian,Apache ECharts,An Open Source JavaScript Visualization Library

obsidian-echarts Render echarts in obsidian,Apache ECharts,An Open Source JavaScript Visualization Library

null 23 Dec 26, 2022
An easy-to-use cross-framework JS charting library

Compact Chart Visualize your data under a minute, in any Javascript framework Table of Contents About How to use it Examples Demo Plain HTML Example w

Mireo 1 Jul 28, 2021
Easy-to-use js library for building graphs using svg.

LineChart Easy-to-use js library for building graphs using svg. Examples How to use Just add linechart.js from 'src' directory to your project. And ad

Korpusov Maxim 8 Nov 21, 2022
Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data.

Redash is designed to enable anyone, regardless of the level of technical sophistication, to harness the power of data big and small. SQL users levera

Redash 22.4k Dec 30, 2022
Open source CSS framework for data visualization.

Charts.css Charts.css is an open source CSS framework for data visualization. Visualization help end-users understand data. Charts.css help frontend d

null 5.7k Jan 4, 2023
Java library for use with Chart.js javascript library

Chart.java Chart.java enables integration with the excellent Chart.js library from within a Java application. Usage example In Java: BarDataset datase

Marceau Dewilde 102 Dec 16, 2022
Open Source Javascript Gantt

Frappe Gantt A simple, interactive, modern gantt chart library for the web View the demo » Install npm install frappe-gantt Usage Include it in your

Frappe 3.5k Dec 30, 2022
:bar_chart: Re-usable, easy interface JavaScript chart library based on D3.js

billboard.js is a re-usable, easy interface JavaScript chart library, based on D3 v4+. The name "billboard" comes from the famous billboard chart whic

NAVER 5.4k Jan 1, 2023