kdd-opensource / fexum-frontend Goto Github PK
View Code? Open in Web Editor NEWFramework for Exploring and Understanding Multivariate Correlations
License: MIT License
Framework for Exploring and Understanding Multivariate Correlations
License: MIT License
jump to feature on map
Arvind wondered why we switched from bubbles to dots because it is hard to hit the tiny dots. Any reasoning for this?
We could add a small question mark button besides the title that shows some description about the information we are dispalying and why
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 depending on the relevancies of the slices in them.
This should give the user an impression on where to look first.
@KDD-OpenSource/ba-project-2017 Render client side or server side?
Server side we could just run sth like this http://scikit-learn.org/stable/modules/density.html
I added the following endpoints:
{"username": <USERNAME>, "password": <PASSWORD>}
to POST /api/auth/login
in order to obtain a token: {"token": <TOKEN>}
Authorization
header with the following value Token <TOKEN>
DELETE /api/auth/logout
to logout and delete token from DBDo you think we need a register feature? We can create users pretty easily in the admin panel.
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
Write grunt and npm tasks to
because those are not of interest (e.g. not causal)
PUT /api/datasets/upload
: to upload and create new datasets, also starts tasks for feature initalization. 'file': as headerGET /api/datasets
: Fetch all existing datasetsGET /api/datasets/<dataset_id>/features
Fetch all features from datasetGET /api/features/<feature_id>/samples
Fetch samples of featureGET /api/features/<feature_id>/histogram
Fetch histogram buckets of featureGET /api/sessions
: Get all running sessionPOST /api/sessions
: Add new session with datasetGET /api/sessions/<session_id>
: Get specific session including targetPUT /api/sessions/<session_id>/target
: Change target and start rar by sending {"target": <feature_id>}
, caches existing rar calculations per target and datasetGET /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.
Keep this constraint when the target changes!
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.
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 taskConsider 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.
Additionally to the "Set target" option in the hamburger menu I would add a button "Set as target" to each individual feature overview
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)?
+ 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'),```
Use checkboxes instead of sliders in this screen.
http://plottablejs.org/ from Palantir, useful?
The scatterplot should have the currently sliced out points highlighted (linking & brushing)
Fix or create popup that says pls use chrome
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.
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.
Send token with initial websocket request to be authenticated
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.