GithubHelp home page GithubHelp logo

lineupjs / lineup_widget Goto Github PK

View Code? Open in Web Editor NEW
11.0 11.0 6.0 1.89 MB

Jupyter Widget wrapper for Lineup.js

Home Page: https://lineup.js.org

License: BSD 3-Clause "New" or "Revised" License

Python 37.53% JavaScript 21.07% TypeScript 40.69% CSS 0.71%
jupyter jupyter-widget jupyterlab-extension lineup ranking

lineup_widget's Introduction

LineUp.js: Visual Analysis of Multi-Attribute Rankings

License NPM version Github Actions

LineUp is an interactive technique designed to create, visualize and explore rankings of items based on a set of heterogeneous attributes.

Key Features

  • scalable (~1M rows)
  • heterogenous attribute types (string, numerical, categorical, boolean, date)
  • composite column types (weighted sum, min, max, mean, median, impose, nested, ...)
  • array (multi value) and map column types (strings, stringMap, numbers, numberMap, ...)
  • filtering capabilities
  • hierarchical sorting (sort by more than one sorting criteria)
  • hierarchical grouping (split rows in multiple separate groups)
  • group aggregations (show a whole group as a single group row)
  • numerous visualizations for summaries, cells, and group aggregations
  • side panel for easy filtering and column management
  • React, Angular, Vue.js, Polymer, RShiny, Juypter, ObservableHQ, and Power BI wrapper
  • Demo Application with CSV import and export capabilities
  • API Documentation based on generated TypeDoc documenation

Usage

Installation

npm install lineupjs
<link href="https://unpkg.com/lineupjs/build/LineUpJS.css" rel="stylesheet" />
<script src="https://unpkg.com/lineupjs/build/LineUpJS.js"></script>

Minimal Usage Example

// generate some data
const arr = [];
const cats = ['c1', 'c2', 'c3'];
for (let i = 0; i < 100; ++i) {
  arr.push({
    a: Math.random() * 10,
    d: 'Row ' + i,
    cat: cats[Math.floor(Math.random() * 3)],
    cat2: cats[Math.floor(Math.random() * 3)],
  });
}
const lineup = LineUpJS.asLineUp(document.body, arr);

CodePen

Minimal Result

Advanced Usage Example

// arr from before
const builder = LineUpJS.builder(arr);

// manually define columns
builder
  .column(LineUpJS.buildStringColumn('d').label('Label').width(100))
  .column(LineUpJS.buildCategoricalColumn('cat', cats).color('green'))
  .column(LineUpJS.buildCategoricalColumn('cat2', cats).color('blue'))
  .column(LineUpJS.buildNumberColumn('a', [0, 10]).color('blue'));

// and two rankings
const ranking = LineUpJS.buildRanking()
  .supportTypes()
  .allColumns() // add all columns
  .impose('a+cat', 'a', 'cat2'); // create composite column
  .groupBy('cat')
  .sortBy('a', 'desc')


builder
  .defaultRanking()
  .ranking(ranking);

const lineup = builder.build(document.body);

CodePen

Advanced Result

Supported Browsers

  • Chrome 64+ (best performance)
  • Firefox 57+
  • Edge 16+

Demo Application

A demo application is located at lineup_app. It support CSV Import, CSV Export, JSON Export, CodePen Export, nad local data management.

The application is deployed at https://lineup.js.org/app

Screenshot

API Documentation

LineUp is implemented in clean TypeScript in an object oriented manner. A fully generated API documentation based on TypeDoc is available at https://lineup.js.org/main/docs

LineUp can be build manually or using via the builder design pattern (see Advanced Usage Example). The builder design pattern in the more common way.

LineUp Builder

The simplest methods to create a new instance are:

  • asLineUp returning a ready to use LineUp instance
    asLineUp(node: HTMLElement, data: any[], ...columns: string[]): LineUp
  • asTaggle returning a ready to use Taggle instance
    asTaggle(node: HTMLElement, data: any[], ...columns: string[]): Taggle
  • builder returning a new DataBuilder
    builder(arr: any[]): DataBuilder`

The DataBuilder allows on the one hand to specify the individual columns more specificly and the creation of custom rankings.

Builder factory functions for creating column descriptions include:

In order to build custom rankings within the DataBuilder the buildRanking returning a new RankingBuilder is used.

buildRanking(): RankingBuilder

LineUp classes and manual creation

The relevant classes for creating a LineUp instance manually are LineUp, Taggle, and LocalDataProvider. A LocalDataProvider is an sub class of ADataProvider implementing the data model management based on a local JavaScript array. LineUp and Taggle are the visual interfaces to the LocalDataProvider.

The classes can be instantiated either using the factory pattern or via their regular class constructors:

createLineUp(container: HTMLElement, data: ADataProvider, config?: Partial<ILineUpOptions>): LineUp

createTaggle(container: HTMLElement, data: ADataProvider, config?: Partial<ITaggleOptions>): Taggle

createLocalDataProvider(data: any[], columns: IColumnDesc[], options?: Partial<ILocalDataProviderOptions>): LocalDataProvider
new LineUp(node: HTMLElement, data: DataProvider, options?: Partial<ILineUpOptions>): LineUp
new Taggle(node: HTMLElement, data: DataProvider, options?: Partial<ITaggleOptions>): Taggle
new LocalDataProvider(data: any[], columns?: IColumnDesc[], options?: Partial<ILocalDataProviderOptions & IDataProviderOptions>): LocalDataProvider

Both LineUp and Taggle are sub classes of ALineUp. The most important functions of this class include:

React Support (LineUp.jsx)

A React wrapper is located at lineupjsx.

Installation

npm install --save lineupjsx
<link href="https://unpkg.com/lineupjsx/build/LineUpJSx.css" rel="stylesheet" />
<script src="https://unpkg.com/lineupjsx/build/LineUpJSx.js"></script>

Minimal Usage Example

// generate some data
const arr = [];
const cats = ['c1', 'c2', 'c3'];
for (let i = 0; i < 100; ++i) {
  arr.push({
    a: Math.random() * 10,
    d: 'Row ' + i,
    cat: cats[Math.floor(Math.random() * 3)],
    cat2: cats[Math.floor(Math.random() * 3)],
  });
}
<LineUp data={arr} />

CodePen

Result is same as the builder minimal example

Advanced Usage Example

// arr from before
<LineUp data={arr} defaultRanking>
  <LineUpStringColumnDesc column="d" label="Label" width={100} />
  <LineUpCategoricalColumnDesc column="cat" categories={cats} color="green" />
  <LineUpCategoricalColumnDesc column="cat2" categories={cats} color="blue" />
  <LineUpNumberColumnDesc column="a" domain={[0, 10]} color="blue" />

  <LineUpRanking groupBy="cat" sortBy="a:desc">
    <LineUpSupportColumn type="*" />
    <LineUpColumn column="*" />
    <LineUpImposeColumn label="a+cat" column="a" categeoricalColumn="cat2" />
  </LineUpRanking>
</LineUp>

CodePen

Result is same as the builder advanced example

Angular 6 Support (nglineup)

An Angular wrapper is located at nglineup.

Installation

npm install --save nglineup

Minimal Usage Example

app.module.ts:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { LineUpModule } from '../lib/lineup.module';

import { AppComponent } from './app.component.1';

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule, LineUpModule],
  providers: [],
  bootstrap: [AppComponent],
})
export class AppModule {}

app.component.ts:

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
})
export class AppComponent {
  readonly data = <any[]>[];

  readonly cats = ['c1', 'c2', 'c3'];

  constructor() {
    const cats = this.cats;
    for (let i = 0; i < 100; ++i) {
      this.data.push({
        a: Math.random() * 10,
        d: 'Row ' + i,
        cat: cats[Math.floor(Math.random() * 3)],
        cat2: cats[Math.floor(Math.random() * 3)],
      });
    }
  }
}

app.component.html:

<lineup-lineup [data]="data"></lineup-lineup>

CodePen

Result is same as the builder minimal example

Advanced Usage Example

app.component.html:

<lineup-lineup [data]="data" [defaultRanking]="true" style="height: 800px;">
  <lineup-string-column-desc column="d" label="Label" [width]="100"></lineup-string-column-desc>
  <lineup-categorical-column-desc column="cat" [categories]="cats" color="green"></lineup-categorical-column-desc>
  <lineup-categorical-column-desc column="cat2" [categories]="cats" color="blue"></lineup-categorical-column-desc>
  <lineup-number-column-desc column="a" [domain]="[0, 10]" color="blue"></lineup-number-column-desc>

  <lineup-ranking groupBy="cat" sortBy="a:desc">
    <lineup-support-column type="*"></lineup-support-column>
    <lineup-column column="*"></lineup-column>
    <lineup-impose-column label="a+cat" column="a" categoricalColumn="cat2"></lineup-impose-column>
  </lineup-ranking>
</lineup-lineup>

CodePen

Result is same as the builder advanced example

Vue.js Support (vue-lineup)

A Vue.js wrapper is located at vue-lineup.

Installation

npm install --save vue-lineup

Minimal Usage Example

const cats = ['c1', 'c2', 'c3'];
const data = [];
for (let i = 0; i < 100; ++i) {
  data.push({
    a: Math.random() * 10,
    d: 'Row ' + i,
    cat: cats[Math.floor(Math.random() * 3)],
    cat2: cats[Math.floor(Math.random() * 3)],
  });
}

// enable plugin to register components
Vue.use(VueLineUp);

const app = new Vue({
  el: '#app',
  template: `<LineUp v-bind:data="data" />`,
  data: {
    cats,
    data,
  },
});

CodePen

Result is same as the builder minimal example

Advanced Usage Example

const app = new Vue({
  el: '#app',
  template: `<LineUp v-bind:data="data" defaultRanking="true" style="height: 800px">
    <LineUpStringColumnDesc column="d" label="Label" v-bind:width="100" />
    <LineUpCategoricalColumnDesc column="cat" v-bind:categories="cats" color="green" />
    <LineUpCategoricalColumnDesc column="cat2" v-bind:categories="cats" color="blue" />
    <LineUpNumberColumnDesc column="a" v-bind:domain="[0, 10]" color="blue" />
    <LineUpRanking groupBy="cat" sortBy="a:desc">
      <LineUpSupportColumn type="*" />
      <LineUpColumn column="*" />
    </LineUpRanking>
  </LineUp>`,
  data: {
    cats,
    data,
  },
});

CodePen

Result is same as the builder advanced example

Polymer Support (LineUp-Element)

A Polymer 2.0 web component wrapper is located at lineup-element.

Installation

bower install https://github.com/lineupjs/lineup-element
<link rel="import" href="bower_components/lineup-element/lineup-element.html" />

Minimal Usage Example

// generate some data
const arr = [];
const cats = ['c1', 'c2', 'c3'];
for (let i = 0; i < 100; ++i) {
  arr.push({
    a: Math.random() * 10,
    d: 'Row ' + i,
    cat: cats[Math.floor(Math.random() * 3)],
    cat2: cats[Math.floor(Math.random() * 3)]
  })
}
conat data = { arr, cats };
<lineup-element data="[[data.arr]]"></lineup-element>

TODO CodePen

Result is same as the builder minimal example

Advanced Usage Example

// arr from before
<lineup-element data="[[data.arr]]" side-panel side-panel-collapsed default-ranking="true">
  <lineup-string-desc column="d" label="Label" width="100"></lineup-string-desc>
  <lineup-categorical-desc column="cat" categories="[[cats]]" color="green"></lineup-categorical-desc>
  <lineup-categorical-desc column="cat2" categories="[[cats]]" color="blue"></lineup-categorical-desc>
  <lineup-number-desc column="a" domain="[0, 10]" color="blue"></lineup-number-desc>
  <lineup-ranking group-by="cat" sort-by="a:desc">
    <lineup-support-column type="*"></lineup-support-column>
    <lineup-column column="*"></lineup-column>
  </lineup-ranking>
</lineup-element>

TODO CodePen

Result is same as the builder advanced example

R, RShiny, and R Markdown Support

A HTMLWidget wrapper for R is located at lineup_htmlwidget. It can be used within standalone R Shiny apps or R Markdown files. Integrated plotting does not work due to an outdated integrated Webkit version in RStudio. Crosstalk is supported for synching selections and filtering among widgets.

Installation

devtools::install_github("rstudio/crosstalk")
devtools::install_github("lineupjs/lineup_htmlwidget")
library(lineupjs)

Examples

lineup(iris)

iris output

Jupyter Widget (to be released)

A Jupyter Widget wrapper for Python is located at lineup_widget.

Installation

pip install -e git+https://github.com/lineupjs/lineup_widget.git#egg=lineup_widget
jupyter nbextension enable --py [--sys-prefix|--user|--system] lineup_widget

Or, if you use jupyterlab:

pip install -e git+https://github.com/lineupjs/lineup_widget.git#egg=lineup_widget
jupyter labextension install @jupyter-widgets/jupyterlab-manager

Examples

Launch Binder

import lineup_widget
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))

w = lineup_widget.LineUpWidget(df)
w.on_selection_changed(lambda selection: print(selection))
w

simple usage

from __future__ import print_function
from ipywidgets import interact, interactive, interact_manual

def selection_changed(selection):
    return df.iloc[selection]

interact(selection_changed, selection=lineup_widget.LineUpWidget(df));

interact example

Observable HQ

A ObservableHQ wrapper is located at lineup-js-observable.

data = {
  const arr = [];
  const cats = ['c1', 'c2', 'c3'];
  for (let i = 0; i < 100; ++i) {
    arr.push({
      a: Math.random() * 10,
      d: 'Row ' + i,
      cat: cats[Math.floor(Math.random() * 3)],
      cat2: cats[Math.floor(Math.random() * 3)]
    })
  }
  return arr;
}
import { asLineUp } from '@sgratzl/lineup-js-observable-library';
viewof selection = asLineUp(arr)

ObservableHQ

Minimal Result

Advanced Usage Example

// arr from before
viewof selection = {
  const b = builder(data);
  b.column(
    LineUpJS.buildStringColumn('d')
      .label('Label')
      .width(100)
  )
    .column(LineUpJS.buildCategoricalColumn('cat', cats).color('green'))
    .column(LineUpJS.buildCategoricalColumn('cat2', cats).color('blue'))
    .column(LineUpJS.buildNumberColumn('a', [0, 10]).color('blue'));

  // and two rankings
  const ranking = LineUpJS.buildRanking()
    .supportTypes()
    .allColumns() // add all columns
    .impose('a+cat', 'a', 'cat2') // create composite column
    .groupBy('cat')
    .sortBy('a', 'desc');

  b.defaultRanking().ranking(ranking);
  return b.build();
}

ObservableHQ

Advanced Result

PowerBI Custom Visual (under development)

A PowerBI Visual wrapper is located at lineup_powerbi.

Installation

TODO

Examples

TODO

API Documentation

See API documentation and Develop API documentation

Demos

See Demos, Develop Demos, and R Demos

Related Publications

LineUp: Visual Analysis of Multi-Attribute Rankings Paper Paper Website

Samuel Gratzl, Alexander Lex, Nils Gehlenborg, Hanspeter Pfister, and Marc Streit
IEEE Transactions on Visualization and Computer Graphics (InfoVis '13), 19(12), pp. 2277โ€“2286, doi:10.1109/TVCG.2013.173, 2013.

๐Ÿ† IEEE VIS InfoVis 2013 Best Paper Award

Taggle: Scalable Visualization of Tabular Data through Aggregation Paper Preprint Paper Website

Katarina Furmanova, Samuel Gratzl, Holger Stitz, Thomas Zichner, Miroslava Jaresova, Martin Ennemoser, Alexander Lex, and Marc Streit
Information Visualization, 19(2): 114-136, doi:10.1177/1473871619878085, 2019.

Dependencies

LineUp.js depends on

Development Dependencies

Webpack is used as build tool. LineUp itself is written in TypeScript and SASS.

Development Environment

Installation

The setup requires Node.js v16 or higher.

git clone https://github.com/lineupjs/lineupjs.git -b develop
cd lineupjs
npm i -g yarn
yarn install
yarn sdks vscode

Common commands

yarn start
yarn run clean
yarn run compile
yarn test
yarn run lint
yarn run fix
yarn run build
yarn run docs

Run E2E Tests

via cypress.io

Variant 1: with prebuilt LineUp

yarn run compile
yarn run build
yarn run cy:compile
yarn run cy:open

Variant 2: with webpack-dev-server

first shell:

yarn start

second shell:

yarn run cy:compile
yarn run cy:start

Authors

  • Samuel Gratzl (@sgratzl)
  • Holger Stitz (@thinkh)
  • The Caleydo Team (@caleydo)
  • datavisyn GmbH (@datavisyn)

This repository was created as part of the The Caleydo Project.

lineup_widget's People

Contributors

dependabot[bot] avatar sgratzl avatar toddrme2178 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

lineup_widget's Issues

Working in Jupyerlab 3 ?

Would be interested to try the widget out but (trying to run the example notebook) I'm not seeing the instantiated widget, just the code call being returned:

LineUpWidget(value=[], layout=Layout(align_self='stretch', height='600px'), options={'rowHeight': 20})

Also seeing an error "Exception opening new comm" in console.

Not sure if this is issue with my local setup or the widget doesn't work with 3.0 ?

Jupyter Binder Application Errors Out

  • Release number or git hash: N/A
  • Web browser version and OS: Chrome Version 68.0.3440.106 (Official Build) (64-bit), Win 10 Standard.

Steps to reproduce

  1. I follow https://mybinder.org/v2/gh/datavisyn/lineup_widget/master?urlpath=%2Fexamples

Observed behavior

  • The container attempts to compile and then throws an error:
Waiting for build to start...
Cloning into '/tmp/repo2dockervd_sukoz'...
HEAD is now at d1d4252 migrate to datavisyn
Building conda environment for python=3.6Using PythonBuildPack builder
Building conda environment for python=3.6Building conda environment for python=3.6Step 1/37 : FROM buildpack-deps:bionic
 ---> ca8bfba0efb4
Step 2/37 : ENV DEBIAN_FRONTEND=noninteractive
 ---> Using cache
 ---> d81c95fb670a
Step 3/37 : RUN apt-get update &&     apt-get install --yes --no-install-recommends locales &&     apt-get purge &&     apt-get clean &&     rm -rf /var/lib/apt/lists/*
 ---> Using cache
 ---> 536ac112a34f
Step 4/37 : RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen &&     locale-gen
 ---> Using cache
 ---> 7b44371e8cea
Step 5/37 : ENV LC_ALL en_US.UTF-8
 ---> Using cache
 ---> 3cd079f235fa
Step 6/37 : ENV LANG en_US.UTF-8
 ---> Using cache
 ---> de5a2979d22d
Step 7/37 : ENV LANGUAGE en_US.UTF-8
 ---> Using cache
 ---> 8d16e6a78227
Step 8/37 : ENV SHELL /bin/bash
 ---> Using cache
 ---> 3510ef819a42
Step 9/37 : ARG NB_USER
 ---> Using cache
 ---> 1122d07af1de
Step 10/37 : ARG NB_UID
 ---> Using cache
 ---> 81ba8d6843f3
Step 11/37 : ENV USER ${NB_USER}
 ---> Using cache
 ---> e59fb9091998
Step 12/37 : ENV HOME /home/${NB_USER}
 ---> Using cache
 ---> 623c83f4e2e3
Step 13/37 : RUN adduser --disabled-password     --gecos "Default user"     --uid ${NB_UID}     ${NB_USER}
 ---> Using cache
 ---> 9b3d882e4db0
Step 14/37 : WORKDIR ${HOME}
 ---> Using cache
 ---> 95bd19a40876
Step 15/37 : RUN wget --quiet -O - https://deb.nodesource.com/gpgkey/nodesource.gpg.key |  apt-key add - &&     DISTRO="bionic" &&     echo "deb https://deb.nodesource.com/node_10.x $DISTRO main" >> /etc/apt/sources.list.d/nodesource.list &&     echo "deb-src https://deb.nodesource.com/node_10.x $DISTRO main" >> /etc/apt/sources.list.d/nodesource.list
 ---> Using cache
 ---> 172bfc4f0209
Step 16/37 : RUN apt-get update &&     apt-get install --yes --no-install-recommends        less        nodejs        unzip        && apt-get purge &&     apt-get clean &&     rm -rf /var/lib/apt/lists/*
 ---> Using cache
 ---> 7c21f4bb6d91
Step 17/37 : EXPOSE 8888
 ---> Using cache
 ---> dccb51d7b778
Step 18/37 : ENV APP_BASE /srv
 ---> Using cache
 ---> 651c67925769
Step 19/37 : ENV CONDA_DIR ${APP_BASE}/conda
 ---> Using cache
 ---> a81b3f9bf0df
Step 20/37 : ENV NB_PYTHON_PREFIX ${CONDA_DIR}
 ---> Using cache
 ---> 9674bb2588f3
Step 21/37 : ENV KERNEL_PYTHON_PREFIX ${NB_PYTHON_PREFIX}
 ---> Using cache
 ---> 95e71f28aeef
Step 22/37 : ENV PATH ${CONDA_DIR}/bin:$HOME/.local/bin:${PATH}
 ---> Using cache
 ---> 39a1aaefef37
Step 23/37 : COPY conda/install-miniconda.bash /tmp/install-miniconda.bash
 ---> Using cache
 ---> fc19bdb1f005
Step 24/37 : COPY conda/environment.py-3.6.frozen.yml /tmp/environment.yml
 ---> Using cache
 ---> ae18fd8774c3
Step 25/37 : RUN bash /tmp/install-miniconda.bash && rm /tmp/install-miniconda.bash /tmp/environment.yml
 ---> Using cache
 ---> ed95967d6bff
Step 26/37 : USER root
 ---> Using cache
 ---> 6eb5d7bfefd5
Step 27/37 : COPY src/ ${HOME}
 ---> 8f3719e8b9bf
Step 28/37 : RUN chown -R ${NB_USER}:${NB_USER} ${HOME}
 ---> Running in baeba54d3d07
Removing intermediate container baeba54d3d07
 ---> ec3c3928e8cf
Step 29/37 : USER ${NB_USER}
 ---> Running in 58ca4a758298
Removing intermediate container 58ca4a758298
 ---> 8f85a0978b1a
Step 30/37 : RUN ${KERNEL_PYTHON_PREFIX}/bin/pip install --no-cache-dir .
 ---> Running in 115451a18d00
Processing /home/jovyan
Requirement already satisfied: ipywidgets>=7.0.0 in /srv/conda/lib/python3.6/site-packages (from lineup-widget==0.1.0b1)
Requirement already satisfied: nbformat>=4.2.0 in /srv/conda/lib/python3.6/site-packages (from ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: ipykernel>=4.5.1 in /srv/conda/lib/python3.6/site-packages (from ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: widgetsnbextension~=3.2.0 in /srv/conda/lib/python3.6/site-packages (from ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: ipython>=4.0.0; python_version >= "3.3" in /srv/conda/lib/python3.6/site-packages (from ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: traitlets>=4.3.1 in /srv/conda/lib/python3.6/site-packages (from ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: jupyter-core in /srv/conda/lib/python3.6/site-packages (from nbformat>=4.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: ipython-genutils in /srv/conda/lib/python3.6/site-packages (from nbformat>=4.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: jsonschema!=2.5.0,>=2.4 in /srv/conda/lib/python3.6/site-packages (from nbformat>=4.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: tornado>=4.0 in /srv/conda/lib/python3.6/site-packages (from ipykernel>=4.5.1->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: jupyter-client in /srv/conda/lib/python3.6/site-packages (from ipykernel>=4.5.1->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: notebook>=4.4.1 in /srv/conda/lib/python3.6/site-packages (from widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: setuptools>=18.5 in /srv/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= "3.3"->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: jedi>=0.10 in /srv/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= "3.3"->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: decorator in /srv/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= "3.3"->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: pickleshare in /srv/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= "3.3"->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: simplegeneric>0.8 in /srv/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= "3.3"->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: prompt_toolkit<2.0.0,>=1.0.15 in /srv/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= "3.3"->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: pygments in /srv/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= "3.3"->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: backcall in /srv/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= "3.3"->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: pexpect in /srv/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= "3.3"->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: six in /srv/conda/lib/python3.6/site-packages (from traitlets>=4.3.1->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: pyzmq>=13 in /srv/conda/lib/python3.6/site-packages (from jupyter-client->ipykernel>=4.5.1->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: python-dateutil>=2.1 in /srv/conda/lib/python3.6/site-packages (from jupyter-client->ipykernel>=4.5.1->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: jinja2 in /srv/conda/lib/python3.6/site-packages(from notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: nbconvert in /srv/conda/lib/python3.6/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: Send2Trash in /srv/conda/lib/python3.6/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: terminado>=0.8.1 in /srv/conda/lib/python3.6/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: prometheus_client in /srv/conda/lib/python3.6/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: parso>=0.3.0 in /srv/conda/lib/python3.6/site-packages (from jedi>=0.10->ipython>=4.0.0; python_version >= "3.3"->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: wcwidth in /srv/conda/lib/python3.6/site-packages (from prompt_toolkit<2.0.0,>=1.0.15->ipython>=4.0.0; python_version >= "3.3"->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: ptyprocess>=0.5 in /srv/conda/lib/python3.6/site-packages (from pexpect->ipython>=4.0.0; python_version >= "3.3"->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: MarkupSafe>=0.23 in /srv/conda/lib/python3.6/site-packages (from jinja2->notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: pandocfilters>=1.4.1 in /srv/conda/lib/python3.6/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: mistune>=0.7.4 in /srv/conda/lib/python3.6/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: testpath in /srv/conda/lib/python3.6/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: entrypoints>=0.2.2 in /srv/conda/lib/python3.6/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: bleach in /srv/conda/lib/python3.6/site-packages(from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: html5lib!=1.0b1,!=1.0b2,!=1.0b3,!=1.0b4,!=1.0b5,!=1.0b6,!=1.0b7,!=1.0b8,>=0.99999999pre in /srv/conda/lib/python3.6/site-packages (from bleach->nbconvert->notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Requirement already satisfied: webencodings in /srv/conda/lib/python3.6/site-packages (from html5lib!=1.0b1,!=1.0b2,!=1.0b3,!=1.0b4,!=1.0b5,!=1.0b6,!=1.0b7,!=1.0b8,>=0.99999999pre->bleach->nbconvert->notebook>=4.4.1->widgetsnbextension~=3.2.0->ipywidgets>=7.0.0->lineup-widget==0.1.0b1)
Installing collected packages: lineup-widget
  Running setup.py install for lineup-widget: started
    Running setup.py install for lineup-widget: finished with status 'error'
    Complete output from command /srv/conda/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-1droaf2p-build/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-p3m1a7fw-record/install-record.txt --single-version-externally-managed --compile:
    /srv/conda/lib/python3.6/site-packages/setuptools/dist.py:398: UserWarning: Normalizing '0.1.0.beta1' to '0.1.0b1'
      normalized_version,
    running install
    running build
    running build_py
    running jsdeps
    Installing build dependencies with npm.  This may take a while...
    > npm install
    npm WARN deprecated [email protected]: All versions below 4.0.1 of Nodemailer are deprecated. See https://nodemailer.com/status/
    npm WARN deprecated [email protected]: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
    npm WARN deprecated [email protected]: stop using this version
    npm WARN deprecated [email protected]: This project is unmaintained
    npm WARN deprecated [email protected]: If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0
    npm WARN deprecated [email protected]: Use uuid module instead
    npm WARN deprecated [email protected]: This project is unmaintained
    npm WARN deprecated [email protected]: The major version is no longer supported. Please update to 4.x or newer
    npm WARN deprecated [email protected]: If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0

    > [email protected] install /tmp/pip-1droaf2p-build/node_modules/uws
    > node-gyp rebuild > build_log.txt 2>&1 || exit 0


    > [email protected] prepare /tmp/pip-1droaf2p-build
    > npm run build:lib


    > [email protected] build:lib /tmp/pip-1droaf2p-build
    > tsc --project src

    npm notice created a lockfile as package-lock.json. You should commit this file.
    npm WARN [email protected] requires a peer of ajv@^6.0.0 but none is installed. You must install peer dependencies yourself.
    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
    npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

    added 981 packages from 1566 contributors and audited 8189 packages in 49.073s
    found 9 vulnerabilities (3 low, 5 moderate, 1 critical)
      run `npm audit fix` to fix them, or `npm audit` for details
    > npm run build:all

    > [email protected] build:all /tmp/pip-1droaf2p-build
    > npm run build:lib && npm run build:labextension && npm run build:nbextension


    > [email protected] build:lib /tmp/pip-1droaf2p-build
    > tsc --project src


    > [email protected] build:labextension /tmp/pip-1droaf2p-build
    > cd lineup_widget && rimraf labextension && mkdirp labextension && cd labextension && npm pack ../..


    > [email protected] prepare /tmp/pip-1droaf2p-build
    > npm run build:lib


    > [email protected] build:lib /tmp/pip-1droaf2p-build
    > tsc --project src

    npm notice
    npm notice ๐Ÿ“ฆ  [email protected]
    npm notice === Tarball Contents ===
    npm notice 2.7kB  package.json
    npm notice 220B   .bash_logout
    npm notice 3.8kB  .bashrc
    npm notice 35B    .coveragerc
    npm notice 415B   .editorconfig
    npm notice 1.8kB  .gitattributes
    npm notice 807B   .profile
    npm notice 1.3kB  .travis.yml
    npm notice 1.5kB  appveyor.yml
    npm notice 132B   build.sh
    npm notice 221B   codecov.yml
    npm notice 158B   docker-compose.yml
    npm notice 1.1kB  LICENSE.txt
    npm notice 67B    lineup_widget.json
    npm notice 616B   MANIFEST.in
    npm notice 185B   pip-delete-this-directory.txt
    npm notice 129B   pytest.ini
    npm notice 2.4kB  README.md
    npm notice 67B    setup.cfg
    npm notice 2.6kB  setup.py
    npm notice 20.2kB setupbase.py
    npm notice 3.5kB  tslint.json
    npm notice 1.2kB  webpack.config.js
    npm notice 20.1kB __pycache__/setupbase.cpython-36.pyc
    npm notice 11B    .conda/environments.txt
    npm notice 0      .conda/pkgs/urls
    npm notice 0      .conda/pkgs/urls.txt
    npm notice 6.4kB  examples/introduction.ipynb
    npm notice 79B    lib/index.d.ts
    npm notice 301B   lib/index.js
    npm notice 144B   lib/index.js.map
    npm notice 229B   lib/plugin.d.ts
    npm notice 1.0kB  lib/plugin.js
    npm notice 586B   lib/plugin.js.map
    npm notice 257B   lib/utils.d.ts
    npm notice 646B   lib/utils.js
    npm notice 818B   lib/utils.js.map
    npm notice 318B   lib/version.d.ts
    npm notice 500B   lib/version.js
    npm notice 181B   lib/version.js.map
    npm notice 2.1kB  lib/widget.d.ts
    npm notice 6.8kB  lib/widget.js
    npm notice 4.2kB  lib/widget.js.map
    npm notice 268B   lineup_widget/__init__.py
    npm notice 202B   lineup_widget/_version.py
    npm notice 3.7kB  lineup_widget/lineup.py
    npm notice 302B   lineup_widget/nbextension/__init__.py
    npm notice 291B   lineup_widget/nbextension/static/extension.js
    npm notice 1B     pip-egg-info/lineup_widget.egg-info/dependency_links.txt
    npm notice 838B   pip-egg-info/lineup_widget.egg-info/PKG-INFO
    npm notice 62B    pip-egg-info/lineup_widget.egg-info/requires.txt
    npm notice 774B   pip-egg-info/lineup_widget.egg-info/SOURCES.txt
    npm notice 20B    pip-egg-info/lineup_widget.egg-info/top_level.txt
    npm notice 79B    src/index.ts
    npm notice 1.0kB  src/plugin.ts
    npm notice 392B   src/tsconfig.json
    npm notice 610B   src/utils.ts
    npm notice 394B   src/version.ts
    npm notice 4.5kB  src/widget.ts
    npm notice === Tarball Details ===
    npm notice name:          lineup_widget
    npm notice version:       0.1.0
    npm notice filename:      lineup_widget-0.1.0.tgz
    npm notice package size:  33.9 kB
    npm notice unpacked size: 103.0 kB
    npm notice shasum:        01fe83dbc3e8f2ab00bba340e0760f698922eaa2
    npm notice integrity:     sha512-ejyDl6m66FE+k[...]eYgf2Ip0oFvxw==
    npm notice total files:   59
    npm notice
    lineup_widget-0.1.0.tgz

    > [email protected] build:nbextension /tmp/pip-1droaf2p-build
    > webpack

    One CLI for webpack must be installed. These are recommended choices, delivered as separate packages:
     - webpack-cli (https://github.com/webpack/webpack-cli)
       The original webpack full-featured CLI.
     - webpack-command (https://github.com/webpack-contrib/webpack-command)
       A lightweight, opinionated webpack CLI.
    We will use "npm" to install the CLI via "npm install -D".
    Which one do you like to install (webpack-cli/webpack-command):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-1droaf2p-build/setup.py", line 101, in <module>
        setup(**setup_args)
      File "/srv/conda/lib/python3.6/site-packages/setuptools/__init__.py", line 131, in setup
        return distutils.core.setup(**attrs)
      File "/srv/conda/lib/python3.6/distutils/core.py", line 148, in setup
        dist.run_commands()
      File "/srv/conda/lib/python3.6/distutils/dist.py", line 955, in run_commands
        self.run_command(cmd)
      File "/srv/conda/lib/python3.6/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/srv/conda/lib/python3.6/site-packages/setuptools/command/install.py", line 61, in run
        return orig.install.run(self)
      File "/srv/conda/lib/python3.6/distutils/command/install.py", line 545, in run
        self.run_command('build')
      File "/srv/conda/lib/python3.6/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/srv/conda/lib/python3.6/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/srv/conda/lib/python3.6/distutils/command/build.py", line 135, in run
        self.run_command(cmd_name)
      File "/srv/conda/lib/python3.6/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/srv/conda/lib/python3.6/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/tmp/pip-1droaf2p-build/setupbase.py", line 469, in run
        [self.run_command(cmd) for cmd in cmds]
      File "/tmp/pip-1droaf2p-build/setupbase.py", line 469, in <listcomp>
        [self.run_command(cmd) for cmd in cmds]
      File "/srv/conda/lib/python3.6/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/srv/conda/lib/python3.6/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/tmp/pip-1droaf2p-build/setupbase.py", line 263, in run
        c.run()
      File "/tmp/pip-1droaf2p-build/setupbase.py", line 389, in run
        raise ValueError(('missing files: %s' % missing))
    ValueError: missing files: ['/tmp/pip-1droaf2p-build/lineup_widget/nbextension/static/index.js']

    ----------------------------------------
Command "/srv/conda/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-1droaf2p-build/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-p3m1a7fw-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-1droaf2p-build/
You are using pip version 9.0.3, however version 18.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Removing intermediate container 115451a18d00
The command '/bin/sh -c ${KERNEL_PYTHON_PREFIX}/bin/pip install --no-cache-dir .' returned a non-zero code: 1

Expected behavior

Note: Hi there, I'm a Data Science Student at UC Berkeley and LineUpJS was featured in our Data Vis class. I'm trying to get it to work on my system, and hope I'm submitting this issue correctly. Sorry, I'm sort of new at all of the Github Issue fucntionality.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.