0

I'm developing some algorithms in Python to analyze scientific data. Since there will be constant improvement to the algorithms, I'd like to roll these out to scientists in a company project team via a web app. I have some experience in Python, but very little in web technologies. I'm hoping for suggestions as to the best approach, web framework, CMS, etc. Here are some requirements.

  • Run within a company intranet
  • Able to upload data files via a file dialog
  • Able to store files in a database with searchable metadata
  • Able to execute algorithms written in Python
  • Able to display results in plots and tables
  • Able to export result data files to users computers
  • Sufficient documentation and learning resources to allow a non-web developer to implement
1

I would suggest that you take a look at Jupyter Notebooks. You can even give them a go in your browser at https://try.jupyter.org.

  • Jupyter server can be run on your local machine or anywhere on your network.
  • JupyterHub can create a multi-user Hub which spawns, manages, and proxies multiple instances of the single-user Jupyter notebook server.
  • You can even download a Docker image of a base JupyterHub as a starting point from here.
  • Extensive scientific libraries including visualisation
  • Can create new notebooks or upload local notebooks to the server
  • Can download existing notebooks for local/offline use
  • Each notebook can embed documentation in markdown & mathjax, code in any of the supported kernels you have installed and the results of executing the code.
  • Supported kernels include iPython and an extensive list of other languages including R, Julia, Haskell, Ruby, JavaScript, C Sharpe, Forth, SCALA, etc.
  • The results of a given run can be downloaded as html or pdf files.
  • Extensive plotting capability
  • Free, Gratis & Open Source
  • Extensive Installation & Configuration Guide
  • To see a working example of a web app running in Jupyter Notebook including a configurable plot and its Python code see this question: Web app for displaying plots in python. A link to download the source code and the input data is provided in a comment below the accepted answer. – karel May 12 '17 at 11:22
  • I've used Jupyter Notebook locally on my computer and like it. However, I'm not sure it hides the complexity of the code from the Chemists that would be using it. Also, I don't know how it would handle the databasing of data files. – Eric Shain May 12 '17 at 14:14
  • @EricShain - If the code you wish to hide is encapsulated as python files or modules and imported then the code that is visible is minimal, possibly just import module;module.run() method. IIRC there is also a possibility of hiding/collapsing cells in progress. Preset data files can be loaded from the server file system, user files can be loaded from their local machine, and you could possibly provide an upload mechanism. – Steve Barnes May 13 '17 at 8:05
  • While I appreciate your suggestion of Jupyter, I'm thinking something like a CMS which handles the data file storage and search would make more sense. Perhaps a CMS which allows embedding of Jupyter notebooks. – Eric Shain May 13 '17 at 18:56
0

Why don't you try a Python web framework? Like Flask?

This would give you the flexibility you need, and you can design it to do whatever you wish.

  • I was hoping for a more specific suggestion. I've looked at Flask, Django and Web2py. As I'm not experienced with web development, the plusses and minuses of each is hard for me to determine. – Eric Shain May 12 '17 at 14:12
  • Flask is very unrestricted in that you can tell it to do anything without the need of complicated database models and whatnot, take a look at an example app. It's very very easy to get a grasp of if you have some python and a small amount of html knowledge. – Slopax May 12 '17 at 15:45
  • While I have no doubt that Flask is able to implement my needs it does, to me, seem lower level than other frameworks. I have just about no web development expertise. I was hoping the framework could provide canned capabilities for at least some of my needs such as the data management. – Eric Shain May 12 '17 at 22:41
  • Do you think perhaps a CMS would be better? – Eric Shain May 12 '17 at 23:34
  • Yes, however, good luck finding a pre-made CMS that will meet all the requirements you need. Been there, done that. You could build your own CMS with Flask, and just have a javascript ajax to run python code, or you can try Django, another framework very similar to Flask. Both would be suitable as everything is python based - What your users will be using. – Slopax May 15 '17 at 7:43
0

If you have the budget for it you could, (as the company that I work for does), host an Enterprise GitHub behind your fire wall, (pricing currently $2,500 per 10 users / year), or in a secure area on GitHubs servers with a suitable tunnel.

  • Familiar user interface for developers
  • Also provides "GitHub Pages" to allow general publishing
  • Releases Mechanism
  • Review Mechanisms
  • Search tools
  • Large File storage
  • GitHub can render Jupyter/iPython Notebooks (.ipynb files) as announced here.

Using Jupyter Notebooks hosted on a GitHub instance can, as you can see here, allow you to mix descriptive text, formulas, code, plots, images and even YouTube videos.

The Gallery of interesting Jupyter Notebooks on GitHub gives a demonstration of the range of content that is available.

N.B. I am a regular GitHub user but do not work for them or have any other financial interest in the corporation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.