https://github.com/subwaymatch/gold-is
Storytelling of datasets with Python, in the browser, without a server!
https://github.com/subwaymatch/gold-is
data-analytics nextjs pandas pyodide python
Last synced: 11 months ago
JSON representation
Storytelling of datasets with Python, in the browser, without a server!
- Host: GitHub
- URL: https://github.com/subwaymatch/gold-is
- Owner: subwaymatch
- License: mit
- Created: 2020-08-06T21:07:53.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2021-10-02T07:04:52.000Z (almost 5 years ago)
- Last Synced: 2023-06-15T16:01:10.776Z (about 3 years ago)
- Topics: data-analytics, nextjs, pandas, pyodide, python
- Language: TypeScript
- Homepage: https://gold.is/
- Size: 1.63 MB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## What is it?
[Gold.is](https://gold.is) aims to tell you what your data looks like in plain human language.
### Note on Pyodide Version
This app runs [Pyodide](https://github.com/pyodide/pyodide) in the main thread which frequently blocks the UI. This design decision was due to a technical issue with using Web Workers in Pyodide version `0.15`. This issue has been fixed in the latest versions of Pyodide (`0.18` or higher). If you choose to build a similar app, you should run Pyodide inside a Web Worker.

## Features
- :crystal_ball: No need to run a backend server to run Jupyter notebooks or Python - [Gold.is](https://gold.is) uses [Pyodide](https://github.com/iodide-project/pyodide) to run Python 3.8 in the browser.
- :sparkles: Efficient data anlysis using `pandas` in the browser.
- :bar_chart: Visualize data with [Victory](https://formidable.com/open-source/victory/), a set of modular charting components for React (and React Native).
- :runner: Parallel computations using `numpy` under the hood - fast!
- :x: Drop any columns you don't need before running the analysis
- :left_right_arrow: Efficient data-sharing between JS and Python. Arrays addresses are shared between JS and Python instead of mem-copying ([https://pyodide.readthedocs.io/en/latest/using_pyodide_from_javascript.html](https://pyodide.readthedocs.io/en/latest/using_pyodide_from_javascript.html)).
## Browsers Support
| [
](http://godban.github.io/browsers-support-badges/)
Firefox | [
](http://godban.github.io/browsers-support-badges/)
Chrome | [
](http://godban.github.io/browsers-support-badges/)
Safari | [
](http://godban.github.io/browsers-support-badges/)
Opera | [
](http://godban.github.io/browsers-support-badges/)
Edge |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| >= 52 (Mar 2017) | >= 57 (Mar 2017) | >= 11 (Sep 2017) | >= 44 (Mar 2017) | Not Supported |
- [WebAssembly](https://webassembly.org/) is used to integrate Python 3.8 runtime to the browser using [Pyodide](https://github.com/iodide-project/pyodide). Please check WebAssembly support in your browser at [https://caniuse.com/#feat=wasm](https://caniuse.com/#feat=wasm).
- ~~[Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers) are used to run Python scripts in non-main threads. You need to use a browser that supports Web Workers. You can check the browser support at [https://caniuse.com/#feat=webworkers](https://caniuse.com/#feat=webworkers).~~
- Due to a [known issue](https://github.com/iodide-project/pyodide/issues/441) with Pyodide, web workers are not being used at the moment. This will cause the browser to freeze when Python code is running.
## Want to do your own thang?
First, clone the repository.
```
$ git clone https://github.com/subwaymatch/gold-is.git
$ cd gold-is
```
Install dependencies. I use `yarn`, but feel free to use `npm`.
```
$ yarn
```
Run the development server. This will launch a development server at port 3000.
```
$ yarn dev
```
To build,
```
$ yarn build
```
## To-do Items
- **Increase URL Import File Size Limit**: Currently, CSV file download via URL is capped at 5MB. This is due to a payload limit on Vercel.
- **Example Datasets**: Add more example datasets.
- **Correlation between Columns**: Add visualizations to display relationships between different columns.
- **Web Workers*: Use web workers to run Python (pyodide). This is dependent on the bug fix of a [known issue](https://github.com/iodide-project/pyodide/issues/441).
## Screenshots
## Acknowledgements
- **Jeongmin Lee**: Project manager / data analyst
- This project is heavily inspired by [Pandas Profiling](https://github.com/pandas-profiling/pandas-profiling).
## Deployment

Gold.is is built with [Next.js](https://nextjs.org/) and is continuously deployed to [Vercel](https://vercel.com/).