Code Monkey home page Code Monkey logo

fexum-frontend's People

Contributors

danthe96 avatar juliuskunze avatar lichtso avatar louiskirsch avatar nikriek avatar xasetl avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

fexum-frontend's Issues

Filtering panel

Filter by

  • wildcards
  • slider for k-most-relevant features #78
  • manual selecting / hiding #81

Reverting to bubbles?

Arvind wondered why we switched from bubbles to dots because it is hard to hit the tiny dots. Any reasoning for this?

Add User tracking

As Bachelor Project Student I want to see want to track the engineers' behavior with our prototype in order to analyze and improve interactions and UX.

In the backend we will have an endpoint POST /api/users/events with the payload {"type": "an_event_name", "options": {...}}. The options dict and the event type are dynamically definied by the Client.

Highlight interesting histogram buckets

Highlight interesting histogram buckets depending on the relevancies of the slices in them.
This should give the user an impression on where to look first.

Build login and logout

I added the following endpoints:

  • Send {"username": <USERNAME>, "password": <PASSWORD>} to POST /api/auth/login in order to obtain a token: {"token": <TOKEN>}
  • Use the token from above to send authenticated requests by adding the Authorization header with the following value Token <TOKEN>
  • Send DELETE /api/auth/logout to logout and delete token from DB
  • Each token is associated with a user. It also never expires! Save it somewhere in local storage

Do you think we need a register feature? We can create users pretty easily in the admin panel.

Change payload parsing for rar_results

Django now has built-in support for websocket and model changes which I want to make use of. The websocket url changed to /bindings. The payload now looks like this.

{  
   "stream":"rar_result",
   "payload":{  
      "action":"update",
      "pk":"69b0bab5-8f32-4ff5-a6ae-1cd278c75d93",
      "data":{  
         "relevancy":0.2,
         "rank":1,
         "feature":"502cd3b2-b426-4d68-8f60-58d7f93959f9"
      },
      "model":"features.rarresult"
   }
}

Also make sure, that you check for the stream value of rar_result before parsing the payload.

Now, we don't even need to re-pull the results. Note that the model change signals are not triggered, when objects get created from the shell. For testing I added a admin page for rar_results

Remove sails

Write grunt and npm tasks to

  • Remove sails
  • compile (less, coffeescript, pug / jade)
  • serve locally
  • hot recompile

Apply new architecture and endpoints

What changed in the backend

  • Basic user support and auth built in but not enabled
  • New Dataset object
  • New Session object which is unique per user, dataset (fixed after creation) and target feature
  • Results from Rar in special results object and not feature itself anymore
  • From now on resources need to be fetched by their ID and not their name (e.g. for feature)
  • PUT /api/datasets/upload: to upload and create new datasets, also starts tasks for feature initalization. 'file': as header
  • GET /api/datasets: Fetch all existing datasets
  • GET /api/datasets/<dataset_id>/features Fetch all features from dataset
  • GET /api/features/<feature_id>/samples Fetch samples of feature
  • GET /api/features/<feature_id>/histogram Fetch histogram buckets of feature
  • GET /api/sessions: Get all running session
  • POST /api/sessions: Add new session with dataset
  • GET /api/sessions/<session_id>: Get specific session including target
  • PUT /api/sessions/<session_id>/target: Change target and start rar by sending {"target": <feature_id>}, caches existing rar calculations per target and dataset
  • GET /api/sessions/<session_id>/features/<feature_id>/slices: Get slices of a feature with respect to session (dataset, target)
  • GET /api/sessions/<session_id>/rar_results: Get rar_results for each feature with respect to session (dataset, target)

I propose to split up the work somehow.

Use samples from backend for feature ranges

Instead of filtering our samples in the frontend, we should get a new sample from the backend after selecting a feature range. That way, we can avoid "not enough data" when plotting the graph.

Add frontend functionality for task managment

  • GET /api/tasks to get a list of currently running tasks:
{
  "scheduled": {
    "celery@616cf6a06dc3": []
  },
  "active": {
    "celery@616cf6a06dc3": [
      {
        "id": "0758841f-c92b-49bf-a39e-19add218ed09",
        "name": "features.tasks.calculate_rar",
        "args": "()",
        "kwargs": "{'target_id': UUID('a33a0d38-3f0b-44ea-8083-5ccda9df7480')}",
        "type": "features.tasks.calculate_rar",
        "hostname": "celery@616cf6a06dc3",
        "time_start": 60600.905955012,
        "acknowledged": true,
        "delivery_info": {
          "exchange": "",
          "routing_key": "celery",
          "priority": 0,
          "redelivered": false
        },
        "worker_pid": 20
      }
    ]
  },
  "reserved": {
    "celery@616cf6a06dc3": []
  }
}
  • DELETE /api/tasks/<ID> to terminate a task

Consider showing a better name than features.tasks.calculate_rar to the user. You can also think about showing a progress bar after initialization. Don't query too often as the request takes more than 3s.

The circular structure of the feature importance (only information)

I want to confirm a point.
Imagine I have feature A, B and a target class Y.
If A is redundant to B and both are relevant to Y, then A and B will be placed on two different hemispheres of the circular structure right?

Abstractly my question is: If I divide the circle vertically in to two hemispheres. On what basis do you decide, where to put the features (in left hand side or right hand side of the hemisphere)?

Change endpoints

  • Neue Websocket streams relevancy_result und redundancy_result
  • is_categorical Attribut für Feature
  • Neue/andere Endpoints
 +    url(r'targets/(?P<target_id>[a-zA-Z0-9-]+)/features/(?P<feature_id>[a-zA-Z0-9-]+)/slices$',
          FeatureSlicesView.as_view(),
 -        name='session-feature-slices'),
 -    url(r'sessions/(?P<session_id>[a-zA-Z0-9-]+)/rar_results$',
 -        FeatureRarResultsView.as_view(),
 -        name='session-feature-rar_results'),
 +        name='target-feature-slices'),
 +    url(r'targets/(?P<target_id>[a-zA-Z0-9-]+)/relevancy_results$',
 +        FeatureRelevancyResultsView.as_view(),
 +        name='target-feature-relevancy_results'),
 +    url(r'datasets/(?P<dataset_id>[a-zA-Z0-9-]+)/redundancy_results$',
 +        DatasetRedundancyResults.as_view(),
 +        name='feature-redundancy_results'),
 +     url('targets/(?P<target_id>[a-zA-Z0-9-]+)/slices$', FilteredSlicesView.as_view(),
 +        name='target-filtered-slices'),```

Select feature textbox irresponsive

Search for feature textbox at the top left corner not responsive. When I type a feature name in the textbox and it gives me 2 options in the drop down.

  1. Set the feature as target
  2. locate the feature.

I click on locate the feature, but it is not responding.
Its just doing nothing. I thought it should ideally add it into the list of selected features.

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.