-
Notifications
You must be signed in to change notification settings - Fork 13
Google Summer of Code 2016
An integrated graphical environment for visual inspection and filtering of time-series for astronomy
This project involves building an integrated graphical environment for visual inspection filtering of time-series for astronomy. With the progress of data science industry, it is very crucial to have advances in data visualization tools. Most of the existing tools for data analysis lack in efficient data exploration due to lack of graphical user interface.Displaying data graphically in form of plots, helps in quickly viewing the most important aspects of the given data and helps in finding the patterns and trends hidden in the Data. Project involves performing series of operations on the data , and produce interactive plots out of it, for analysis.
The project was started as a part of Google Summer of Code (GSoC-16) programme.
Link to source code
Link to commits
The project is done from scratch. There was no initial codebase for the project.The major challenge for starting the project was the choice of technologies that would best suit the required functionality. The initial phases of the project involved prototyping and selection of appropriate technologies. Different prototypes were developed and the final technologies were selected .
Initial prototype included the following functionalities.
- Choosing Time Series file as the input.
- Choosing the type of library for plotting the input like matplotlib or pygal etc.
- Plotting graphs with external features like displaying information on hovering etc.
- Clearing the graph.
This was the initial prototype that was built. Many more features and functionalities are added that are displayed in the Issues Section.
Plotting library selection
One of the major requirement of the project is that it should present good-looking as well as interactive plots that can be manipulated with the mouse (for example sensitive to hovering,zooming).So the choice of plotting library was really important task .Following are the different libraries I compared for plotting :
Pygal : Python charting library
Plotly : Python analytics and data visualization library
Matplotlib : Python plotting library
D3.js : JavaScript library for visualizing data
Highcharts : Charting library in JavaScript
Since the GUI is to be built on the top of the Stingray library and majority of the algorithms have been implemented in python programming language,so a plotting library based on python was most suitable for GUI.Keeping this in mind , plotly was selected as the plotting library.Plotly provides diverse range of features that satisfy most of the requirements of the project .
Framework Selection
Flask : Light weight Python Framework.
The current state of the project is that we have a standalone application that opens in an electron window . It has various features that have been mentioned in the Issues section below .
Architecture
Front-End : HTML, Javascript, Jquery
Back-End : Flask, Python
Plotting : Plotly library
Electron : For building a standalone application
-
Clone the project :
git clone https://github.com/StingraySoftware/dave
-
Install a Python virtual env and a compatible version of node:
source src/main/resources/bash/setup_dev_env.bash
-
Run the application :
src/main/resources/bash/run_gui.bash
Following are the salient features that I implemented during the course of GSoC Programme. Majority of them are already complete and merged, while few of them needs further improvements.
Issue-ID | Brief Description |
---|---|
Completely Solved | |
DAVE-3 | As a user I should be able to install the dependencies of the application |
DAVE-4 | As an astronomer; I want to plot the light curve given as input a table with two columns of numbers: Time, Count Rate; so that I can visualise the count rate level and variability with time. |
DAVE-5 | As an astronomer; I want to plot the light curve given as input a table with three columns of numbers: Time, Count Rate, Error on Count Rate; so that I can visualise the count rate level and variability with time and check if it is significant. |
DAVE-6 | Plot light curve from FITS file |
DAVE-7 | As an astronomer; I want to be able to select in time a region of the light curve and visualize it; so that I can check details and short-time variability in the light curve. |
DAVE-8 | As an astronomer; I want to be able to select and visualize a region of the light curve by selecting a range of count rates; so that I can check details of specific features of the light curve such as spikes, or deselect others like instrumental drops. |
DAVE-9 | Show coordinates in plot on mouse-over outside plot |
DAVE-12 | When hovering over point/marker in graph, show labels outside |
DAVE-13 | Change Flask server to send data in plottable form |
DAVE-14 | Add file chooser dialog when clicking load spectrum |
DAVE-16 | Error bars on x and y |
DAVE-17 | Error handling on server |
DAVE-18 | Allow loading files from outside datasets directory |
DAVE-20 | Deselect data in plot |
DAVE-21 | two plots from ASCII file |
DAVE-22 | Select on one plot resize both plots |
DAVE-23 | Filtering by selecting on plots - usability improvements |
DAVE-25 | Clear filtering ranges |
DAVE-26 | Adjust slider ranges to data |
DAVE-27 | Dynamical Spectrum - 3D plot in 2D |
Partially Solved | |
DAVE-11 | Add packager for application |
DAVE-15 | Automate Python tests |
DAVE-28 | Multi plot visualization |
Taking part in GSoC and working on this project gave me tremendous learning opportunity and helped me to expand my horizon. Thanks to GSoC and Timelab for giving me this amazing opportunity. Working on this project not only helped me to improve software development skills but also helped me in improving my work-management skills. The fact that my work will be used by great astronomers of the world, further motivates me to work harder on this project.
Danish Sodhi [email protected]