----------------- ## Danfojs: powerful javascript data analysis toolkit ![Node.js CI](https://github.com/opensource9ja/danfojs/workflows/Node.js%20CI/badge.svg?branch=master) [![](https://data.jsdelivr.com/v1/package/npm/danfojs/badge?style=rounded)](https://www.jsdelivr.com/package/npm/danfojs) [![Coverage Status](https://coveralls.io/repos/github/opensource9ja/danfojs/badge.svg)](https://coveralls.io/github/opensource9ja/danfojs) ![Twitter](https://img.shields.io/twitter/url?style=social&url=https%3A%2F%2Ftwitter.com%2FDanfoJs) 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](https://pandas.pydata.org/pandas-docs/stable/) library, and provides a similar API. This means that users familiar with [Pandas](https://pandas.pydata.org/pandas-docs/stable/), 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](https://danfo.jsdata.org/api-reference/dataframe/dataframe.tensor) to Tensors. - Easy handling of [missing-data](https://danfo.jsdata.org/getting-started#missing-data) (represented as `NaN`) in floating point as well as non-floating point data - Size mutability: columns can be [inserted/deleted](https://danfo.jsdata.org/api-reference/dataframe#combining-comparing-joining-merging) from DataFrame - Automatic and explicit [alignment](https://danfo.jsdata.org/api-reference/dataframe#reindexing-selection-label-manipulation): 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](https://danfo.jsdata.org/api-reference/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](https://danfo.jsdata.org/api-reference/dataframe/danfo.dataframe.loc), [fancy indexing](https://danfo.jsdata.org/api-reference/dataframe/danfo.dataframe.iloc), and [querying](https://danfo.jsdata.org/api-reference/dataframe/danfo.dataframe.query) of large data sets - Intuitive [merging](https://danfo.jsdata.org/api-reference/general-functions/danfo.merge) and [joining](https://danfo.jsdata.org/api-reference/general-functions/danfo.concat) data sets - Robust IO tools for loading data from [flat-files](https://danfo.jsdata.org/api-reference/input-output) (CSV, Json, Excel, Data package). - Powerful, flexible and intutive API for [plotting](https://danfo.jsdata.org/api-reference/plotting) DataFrames and Series interactively. - [Timeseries](https://danfo.jsdata.org/api-reference/series#accessors)-specific functionality: date range generation and date and time properties. - Robust data preprocessing functions like [OneHotEncoders](https://danfo.jsdata.org/api-reference/general-functions/danfo.onehotencoder), [LabelEncoders](https://danfo.jsdata.org/api-reference/general-functions/danfo.labelencoder), and scalers like [StandardScaler](https://danfo.jsdata.org/api-reference/general-functions/danfo.standardscaler) and [MinMaxScaler](https://danfo.jsdata.org/api-reference/general-functions/danfo.minmaxscaler) are supported on DataFrame and Series ## Installation There are three ways to install and use Danfo.js in your application * For Nodejs applications, you can install the [__danfojs-node__]() version via package managers like yarn and/or npm: ```bash npm install danfojs-node or yarn add danfojs-node ``` For client-side applications built with frameworks like React, Vue, Next.js, etc, you can install the [__danfojs__]() version: ```bash npm install danfojs or yarn add danfojs ``` For use directly in HTML files, you can add the latest script tag from [JsDelivr](https://www.jsdelivr.com/package/npm/danfojs) to your HTML file: ```html ``` See all available versions [here](https://www.jsdelivr.com/package/npm/danfojs) ### Example Usage in the Browser > Run in [Code Sandbox](https://codepen.io/risingodegua/pen/bGwPGMG) ```html Document
``` Output in Browser: ![](assets/browser-out.gif) ### Example usage in Nodejs ```javascript const dfd = require("danfojs-node") const file_url = "https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv" dfd.readCSV(file_url) .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.columns); // //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.selectDtypes(["string"]) let num_cols = df_drop.selectDtypes(["int32", "float32"]) str_cols.print() num_cols.print() //add new column to Dataframe let new_vals = df['Fare'].round(1) df_drop.addColumn("fare_round", new_vals, { inplace: true }) df_drop.print() df_drop['fare_round'].round(2).print(5) //prints the number of occurence each value in the column df_drop['Survived'].valueCounts().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: ![](assets/node-rec.gif) ## Notebook support * You can use Danfo.js on Dnotebooks playground [here](https://playnotebook.jsdata.org/demo) * VsCode nodejs notebook extension now supports Danfo.js. See guide [here](https://marketplace.visualstudio.com/items?itemName=donjayamanne.typescript-notebook) #### [See the Official Getting Started Guide](https://danfo.jsdata.org/getting-started) ## Documentation The official documentation can be found [here](https://danfo.jsdata.org) ## Danfo.js Official Book ![image](https://user-images.githubusercontent.com/29900845/134811659-25ff6b05-8e0d-415f-a60c-03ab1d33fd71.jpeg) We recently published a book titled "Building Data Driven Applications with Danfo.js". Read more about it [here](https://danfo.jsdata.org/building-data-driven-applications-with-danfo.js-book) ## Discussion and Development Development discussions take place [here](https://github.com/opensource9ja/danfojs/discussions). ## 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](https://danfo.jsdata.org/contributing-guide). #### Licence [MIT](https://github.com/opensource9ja/danfojs/blob/master/LICENCE) #### Created by [Rising Odegua](https://github.com/risenW) and [Stephen Oni](https://github.com/steveoni) Danfo.js - Open Source JavaScript library for manipulating data. | Product Hunt Embed