├── .binder ├── environment.yml ├── postBuild └── workspace.json ├── .github └── workflows │ ├── binder_on_pr.yml │ └── main.yml ├── .gitignore ├── LICENSE ├── README.md ├── build.py ├── data ├── 1024px-Hubble_Interacting_Galaxy_AM_0500-620_(2008-04-24).jpg ├── Dockerfile ├── Museums_in_DC.geojson ├── README.md ├── bar.vl.json ├── iris.csv ├── japan_meterological_agency_201707211555.json └── zika_assembled_genomes.fasta ├── jupyter_notebook_config.py ├── narrative ├── QConAI.md ├── jupyterlab.md ├── markdown_python.md └── scipy2017.md ├── notebooks ├── Cpp.ipynb ├── Data.ipynb ├── Fasta.ipynb ├── Julia.ipynb ├── Lorenz.ipynb ├── R.ipynb ├── audio │ └── audio.wav ├── images │ ├── marie.png │ ├── xeus-cling.png │ ├── xtensor.png │ └── xwidgets.png └── lorenz.py ├── slides ├── jupyterlab-slides.key ├── jupyterlab-slides.pdf └── jupyterlab-slides_scipy19.pdf └── talks.yml /.binder/environment.yml: -------------------------------------------------------------------------------- 1 | channels: 2 | - conda-forge 3 | - nodefaults 4 | dependencies: 5 | - ruamel.yaml 6 | # applications 7 | - jupyterlab 8 | - jupyter-collaboration 9 | - nbconvert 10 | - notebook 11 | # extensions 12 | - jupyter-offlinenotebook 13 | - jupyterlab-fasta 14 | - jupyterlab-geojson 15 | # R kernel 16 | - r-irkernel 17 | - r-ggplot2 18 | # Python Kernel 19 | - ipykernel 20 | - xeus-python 21 | - ipywidgets 22 | - ipyleaflet 23 | - altair 24 | - bqplot 25 | - dask 26 | - matplotlib-base 27 | - pandas 28 | - python=3.12 29 | - scikit-image 30 | - scikit-learn 31 | - seaborn-base 32 | - tensorflow 33 | - sympy 34 | - traittypes 35 | # C++ Kernel 36 | # - xeus-cling 37 | # - xtensor 38 | # - xtensor-blas 39 | # - xwidgets 40 | # - xleaflet 41 | # CLI tools 42 | - pip 43 | - vim 44 | -------------------------------------------------------------------------------- /.binder/postBuild: -------------------------------------------------------------------------------- 1 | set -ex 2 | 3 | python build.py 4 | 5 | rm -rf demofiles 6 | rm -rf notebooks 7 | rm -rf narrative 8 | rm -rf slides 9 | rm demo/notebooks/Julia.ipynb 10 | 11 | # Setup a workspace 12 | # - activate the environment otherwise the workspace is imported 13 | # in the user home folder rather than in the prefix path (new default) 14 | conda run -n notebook jupyter lab workspaces import .binder/workspace.json 15 | -------------------------------------------------------------------------------- /.binder/workspace.json: -------------------------------------------------------------------------------- 1 | {"data":{"layout-restorer:data":{"main":{"dock":{"type":"split-area","orientation":"horizontal","sizes":[0.5,0.5],"children":[{"type":"tab-area","currentIndex":0,"widgets":["notebook:demo/Lorenz.ipynb"]},{"type":"tab-area","currentIndex":0,"widgets":["help-doc:https://jupyterlab.readthedocs.io/en/stable/"]}]},"current":"help-doc:https://jupyterlab.readthedocs.io/en/stable/"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"]},"right":{"collapsed":true,"widgets":["jp-property-inspector","debugger-sidebar"]},"relativeSizes":[0.15193704600484262,0.8480629539951574,0]},"file-browser-filebrowser:cwd":{"path":"demo"},"notebook:demo/Lorenz.ipynb":{"data":{"path":"demo/Lorenz.ipynb","factory":"Notebook"}},"help-doc:https://jupyterlab.readthedocs.io/en/stable/":{"data":{"url":"https://jupyterlab.readthedocs.io/en/stable/","text":"JupyterLab Reference"}}},"metadata":{"id":"default"}} 2 | -------------------------------------------------------------------------------- /.github/workflows/binder_on_pr.yml: -------------------------------------------------------------------------------- 1 | name: Binder Badge 2 | on: 3 | pull_request_target: 4 | types: [opened] 5 | 6 | jobs: 7 | binder: 8 | runs-on: ubuntu-latest 9 | permissions: 10 | pull-requests: write 11 | steps: 12 | - uses: jupyterlab/maintainer-tools/.github/actions/binder-link@v1 13 | with: 14 | github_token: ${{ secrets.github_token }} 15 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: '*' 8 | 9 | defaults: 10 | run: 11 | shell: bash -el {0} 12 | 13 | jobs: 14 | build: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@v3 18 | - name: Install mamba 19 | uses: mamba-org/setup-micromamba@v1 20 | with: 21 | micromamba-version: '1.5.1-0' 22 | environment-file: .binder/environment.yml 23 | environment-name: jupyterlab-demo 24 | cache-environment: true 25 | - run: | 26 | micromamba info 27 | micromamba list 28 | micromamba config sources 29 | micromamba config list 30 | printenv | sort 31 | - run: | 32 | jupyter nbconvert --to notebook --execute --ExecutePreprocessor.timeout=60 --stdout notebooks/Data.ipynb > /dev/null; 33 | jupyter nbconvert --to notebook --execute --ExecutePreprocessor.timeout=60 --stdout notebooks/Fasta.ipynb > /dev/null; 34 | jupyter nbconvert --to notebook --execute --ExecutePreprocessor.timeout=60 --stdout notebooks/R.ipynb > /dev/null; 35 | python build.py -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | .DS_Store 6 | 7 | # C extensions 8 | *.so 9 | 10 | # Distribution / packaging 11 | .Python 12 | env/ 13 | build/ 14 | develop-eggs/ 15 | dist/ 16 | downloads/ 17 | eggs/ 18 | .eggs/ 19 | lib/ 20 | lib64/ 21 | parts/ 22 | sdist/ 23 | var/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *,cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # IPython Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # dotenv 80 | .env 81 | 82 | # virtualenv 83 | venv/ 84 | ENV/ 85 | 86 | # Spyder project settings 87 | .spyderproject 88 | 89 | # Rope project settings 90 | .ropeproject 91 | 92 | # Demo files 93 | demofiles/ 94 | 95 | # Talk folders 96 | test_talk/ 97 | scipy2017/ 98 | demo/ 99 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2016, Project Jupyter Contributors 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | 31 | =================== 32 | 33 | Museums in DC GeoJSON License 34 | /data/Muesums_in_DC.geojson 35 | 36 | Chief Technology Office (OCTO) of the 37 | Government of the District of Columbia 38 | 39 | http://opendata.dc.gov/datasets/2e65fc16edc3481989d2cc17e6f8c533_54 40 | 41 | CC BY 4.0 42 | https://creativecommons.org/licenses/by/4.0/ 43 | =================== 44 | 45 | Fisher's Irish Dataset 46 | /data/iris.csv 47 | 48 | R. A. Fisher 49 | 50 | http://archive.ics.uci.edu/ml/datasets/Iris 51 | 52 | CC0 1.0 53 | Public Domain 54 | https://creativecommons.org/publicdomain/zero/1.0/ 55 | ==================== 56 | 57 | Hubble Interacting Galaxy AM 0500-620 58 | /data/1024px-Hubble_Interacting_Galaxy_AM_0500-620_(2008-04-24).jpg 59 | 60 | NASA, ESA, the Hubble Heritage (STScI/AURA)-ESA/Hubble Collaboration, and W. Keel (University of Alabama, Tuscaloosa) 61 | 62 | http://hubblesite.org/image/2326/news_release/2008-16 63 | 64 | http://hubblesite.org/about_us/copyright.php 65 | ==================== 66 | 67 | Japan Meteroligcal Agency High-resolution Precipitation Nowcasts 68 | /data/japan_meterological_agency_201707211555.json 69 | 70 | Japan Meteroligcal Agency 71 | 72 | http://www.jma.go.jp/en/highresorad/ 73 | 74 | CC BY 4.0 75 | https://creativecommons.org/licenses/by/4.0/ 76 | http://www.jma.go.jp/jma/en/copyright.html 77 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JupyterLab Demonstration 2 | 3 | [![Build Status](https://github.com/jupyterlab/jupyterlab-demo/actions/workflows/main.yml/badge.svg)](https://github.com/jupyterlab/jupyterlab-demo/actions/workflows/main.yml) 4 | 5 | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jupyterlab/jupyterlab-demo/master?urlpath=lab) 6 | 7 | This repository contains some demonstrations of 8 | [JupyterLab](https://github.com/jupyter/jupyterlab), the next 9 | generation user interface of Project Jupyter. 10 | 11 | ## Installation 12 | 13 | The demo requires `mamba`, available as part of [Mambaforge](https://github.com/conda-forge/miniforge) and the package 14 | requirements are described in `environment.yml` 15 | 16 | TODO: More installation instructions 17 | 18 | # Demo guide 19 | 20 | The basic outline of the JupyterLab demo is described in the file `jupyterlab.md`. 21 | 22 | # External Repositories 23 | 24 | Our `build.py` clones repos from other authors. The details of these repos are as follows: 25 | 26 | | Name | Author |License | 27 | |---|---|---| 28 | | PythonDataScienceHandbook/LICENSE-CODE | Jake Vanderplas | [MIT](https://github.com/jakevdp/PythonDataScienceHandbook/blob/master/LICENSE-CODE)| 29 | | PythonDataScienceHandbook/LICENSE-TEXT | Jake Vanderplas | [CC-BY-NC-ND-3.0](https://github.com/jakevdp/PythonDataScienceHandbook/blob/master/LICENSE-TEXT) | 30 | | altair | Jake Vanderplas | [BSD 3-clause](https://github.com/altair-viz/altair/blob/master/LICENSE) | 31 | | Urban-Data-Challenge | [Data Canvas](http://datacanvas.org/) | [CC-BY-NC-3.0](http://datacanvas.org/public-transportation/) | 32 | | QuantEcon.notebooks | QuantEcon | [BSD 3-clause "New" or "Revised" License](https://github.com/QuantEcon/QuantEcon.notebooks/blob/master/LICENSE) | 33 | | TCGA | Gross et. al. | None Listed | None Listed | 34 | | TensorFlow-Examples | Aymeric Damien | [MIT](https://github.com/aymericdamien/TensorFlow-Examples/blob/master/LICENSE) | 35 | -------------------------------------------------------------------------------- /build.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | from pathlib import Path 3 | import subprocess 4 | from ruamel.yaml import YAML 5 | import shutil 6 | import os 7 | 8 | yaml = YAML() 9 | 10 | DEMO_FOLDER = "demofiles" 11 | 12 | def setup_talks(): 13 | """ 14 | Reads yaml file talks.yml and moves files and folders specified in yaml 15 | file to the a folder matching the name of the talk Args: talk_name: name 16 | of talk in talks.yml Note: yaml file is assumed to be a dict of dicts of 17 | lists and dict with the following python format: 18 | {'talk_name': 19 | {'folders': 20 | {'src0': 'dest0', 'src1': 'dest1'] 21 | 'files': 22 | ['file0', file1'] 23 | 'rename': 24 | {'oldname': 'newname'} 25 | } 26 | } 27 | or in yaml format: 28 | talk_name: 29 | folders: 30 | src0: dest0 31 | src1: dest1 32 | files: 33 | - file0 34 | - file1 35 | rename: 36 | oldname: newname 37 | """ 38 | with open("talks.yml", "r") as stream: 39 | talks = yaml.load(stream) 40 | for talk_name in talks: 41 | Path(talk_name).mkdir(parents=True, exist_ok=True) 42 | 43 | if "files" in talks[talk_name]: 44 | for f in talks[talk_name]["files"]: 45 | copied_path = os.path.join(talk_name, os.path.basename(f)) 46 | shutil.copy(f, copied_path) 47 | assert os.path.isfile(copied_path), f"{f} failed to copy into {talk_name}" 48 | 49 | if "folders" in talks[talk_name]: 50 | for src, dst in talks[talk_name]["folders"].items(): 51 | dst = os.path.join(talk_name, dst) 52 | if not os.path.exists(dst): 53 | shutil.copytree(src, dst) 54 | 55 | if "rename" in talks[talk_name]: 56 | for old_file, new_file in talks[talk_name]["rename"].items(): 57 | moved_file = os.path.join(talk_name, os.path.basename(old_file)) 58 | if os.path.isfile(moved_file): 59 | os.rename(moved_file, os.path.join(talk_name, new_file)) 60 | elif os.path.isfile(old_file): 61 | shutil.copy(old_file, os.path.join(talk_name, new_file)) 62 | 63 | def setup_demofiles(): 64 | print("creating demofolder") 65 | demo_folder = Path("demofiles") 66 | demo_folder.mkdir(parents=True, exist_ok=True) 67 | 68 | # list of repos used in demo 69 | print(f"cloning repos into demo folder {demo_folder}") 70 | reponames = [ 71 | "jakevdp/PythonDataScienceHandbook", 72 | "swissnexSF/Urban-Data-Challenge", 73 | "altair-viz/altair", 74 | "QuantEcon/QuantEcon.notebooks", 75 | "theandygross/TCGA", 76 | "aymericdamien/TensorFlow-Examples", 77 | "bloomberg/bqplot", 78 | ] 79 | for repo in reponames: 80 | target_path = demo_folder / Path(repo.split("/")[1]) 81 | if not target_path.is_dir(): 82 | subprocess.check_call([ 83 | "git", "clone", "--depth", "1", 84 | f"https://github.com/{repo}.git" 85 | ], cwd=demo_folder) 86 | # This empty file and empty folder are for showing drag and drop in jupyterlab 87 | Path("move_this_file.txt").touch() 88 | Path("move_it_here").mkdir(exist_ok=True) 89 | 90 | def main(): 91 | setup_demofiles() 92 | setup_talks() 93 | 94 | 95 | if __name__ == "__main__": 96 | main() -------------------------------------------------------------------------------- /data/1024px-Hubble_Interacting_Galaxy_AM_0500-620_(2008-04-24).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jupyterlab/jupyterlab-demo/c058aead3b24d96133b55721faf2d28b4823b9fa/data/1024px-Hubble_Interacting_Galaxy_AM_0500-620_(2008-04-24).jpg -------------------------------------------------------------------------------- /data/Dockerfile: -------------------------------------------------------------------------------- 1 | # Copyright (c) Jupyter Development Team. 2 | # Distributed under the terms of the Modified BSD License. 3 | FROM jupyter/minimal-notebook 4 | 5 | MAINTAINER Jupyter Project 6 | 7 | USER root 8 | 9 | # libav-tools for matplotlib anim 10 | RUN apt-get update && \ 11 | apt-get install -y --no-install-recommends libav-tools && \ 12 | apt-get clean && \ 13 | rm -rf /var/lib/apt/lists/* 14 | 15 | USER $NB_USER 16 | 17 | # Install Python 3 packages 18 | # Remove pyqt and qt pulled in for matplotlib since we're only ever going to 19 | # use notebook-friendly backends in these images 20 | RUN conda install --quiet --yes \ 21 | 'nomkl' \ 22 | 'ipywidgets=6.0*' \ 23 | 'pandas=0.19*' \ 24 | 'numexpr=2.6*' \ 25 | 'matplotlib=2.0*' \ 26 | 'scipy=0.19*' \ 27 | 'seaborn=0.7*' \ 28 | 'scikit-learn=0.18*' \ 29 | 'scikit-image=0.12*' \ 30 | 'sympy=1.0*' \ 31 | 'cython=0.25*' \ 32 | 'patsy=0.4*' \ 33 | 'statsmodels=0.8*' \ 34 | 'cloudpickle=0.2*' \ 35 | 'dill=0.2*' \ 36 | 'numba=0.31*' \ 37 | 'bokeh=0.12*' \ 38 | 'sqlalchemy=1.1*' \ 39 | 'hdf5=1.8.17' \ 40 | 'h5py=2.6*' \ 41 | 'vincent=0.4.*' \ 42 | 'beautifulsoup4=4.5.*' \ 43 | 'xlrd' && \ 44 | conda remove --quiet --yes --force qt pyqt && \ 45 | conda clean -tipsy 46 | 47 | # Activate ipywidgets extension in the environment that runs the notebook server 48 | RUN jupyter nbextension enable --py widgetsnbextension --sys-prefix 49 | 50 | # Install Python 2 packages 51 | # Remove pyqt and qt pulled in for matplotlib since we're only ever going to 52 | # use notebook-friendly backends in these images 53 | RUN conda create --quiet --yes -p $CONDA_DIR/envs/python2 python=2.7 \ 54 | 'nomkl' \ 55 | 'ipython=5.3*' \ 56 | 'ipywidgets=6.0*' \ 57 | 'pandas=0.19*' \ 58 | 'numexpr=2.6*' \ 59 | 'matplotlib=2.0*' \ 60 | 'scipy=0.19*' \ 61 | 'seaborn=0.7*' \ 62 | 'scikit-learn=0.18*' \ 63 | 'scikit-image=0.12*' \ 64 | 'sympy=1.0*' \ 65 | 'cython=0.25*' \ 66 | 'patsy=0.4*' \ 67 | 'statsmodels=0.8*' \ 68 | 'cloudpickle=0.2*' \ 69 | 'dill=0.2*' \ 70 | 'numba=0.31*' \ 71 | 'bokeh=0.12*' \ 72 | 'hdf5=1.8.17' \ 73 | 'h5py=2.6*' \ 74 | 'sqlalchemy=1.1*' \ 75 | 'pyzmq' \ 76 | 'vincent=0.4.*' \ 77 | 'beautifulsoup4=4.5.*' \ 78 | 'xlrd' && \ 79 | conda remove -n python2 --quiet --yes --force qt pyqt && \ 80 | conda clean -tipsy 81 | # Add shortcuts to distinguish pip for python2 and python3 envs 82 | RUN ln -s $CONDA_DIR/envs/python2/bin/pip $CONDA_DIR/bin/pip2 && \ 83 | ln -s $CONDA_DIR/bin/pip $CONDA_DIR/bin/pip3 84 | 85 | # Import matplotlib the first time to build the font cache. 86 | ENV XDG_CACHE_HOME /home/$NB_USER/.cache/ 87 | RUN MPLBACKEND=Agg $CONDA_DIR/envs/python2/bin/python -c "import matplotlib.pyplot" 88 | 89 | USER root 90 | 91 | # Install Python 2 kernel spec globally to avoid permission problems when NB_UID 92 | # switching at runtime and to allow the notebook server running out of the root 93 | # environment to find it. Also, activate the python2 environment upon kernel 94 | # launch. 95 | RUN pip install kernda --no-cache && \ 96 | $CONDA_DIR/envs/python2/bin/python -m ipykernel install && \ 97 | kernda -o -y /usr/local/share/jupyter/kernels/python2/kernel.json && \ 98 | pip uninstall kernda -y 99 | 100 | USER $NB_USER 101 | -------------------------------------------------------------------------------- /data/Museums_in_DC.geojson: -------------------------------------------------------------------------------- 1 | {"type":"FeatureCollection","features":[{"type":"Feature","properties":{"OBJECTID":1,"ADDRESS":"716 MONROE STREET NE","NAME":"AMERICAN POETRY MUSEUM","ADDRESS_ID":309744,"LEGALNAME":"HERITAGE US","ALTNAME":"AMERICAN POETRY MUSEUM","WEBURL":" http://americanpoetrymuseum.org/"},"geometry":{"type":"Point","coordinates":[-76.995003703568,38.9328428790235]}},{"type":"Feature","properties":{"OBJECTID":2,"ADDRESS":"719 6TH STREET NW","NAME":"GERMAN-AMERICAN HERITAGE MUSEUM","ADDRESS_ID":238949,"LEGALNAME":"CORCORAN GALLERY OF ART","ALTNAME":" ","WEBURL":"http://gahmusa.org/"},"geometry":{"type":"Point","coordinates":[-77.01958878310639,38.89911061096782]}},{"type":"Feature","properties":{"OBJECTID":3,"ADDRESS":"1307 NEW HAMPSHIRE AVENUE NW","NAME":"HEURICH HOUSE FOUNDATION","ADDRESS_ID":241060,"LEGALNAME":"U.S. DEPARTMENT OF THE INTERIOR MUSEUM","ALTNAME":"HEURICH HOUSE FOUNDATION","WEBURL":"HTTP://HEURICHHOUSE.ORG"},"geometry":{"type":"Point","coordinates":[-77.04460619923155,38.908030206509885]}},{"type":"Feature","properties":{"OBJECTID":4,"ADDRESS":"950 INDEPENDENCE AVENUE SW","NAME":"NATIONAL MUSEUM OF AFRICAN ART","ADDRESS_ID":293262,"LEGALNAME":"BUILDING PRESERVATION FOUNDATION","ALTNAME":"NATIONAL MUSEUM OF AFRICAN ART","WEBURL":"HTTP://AFRICA.SI.EDU/"},"geometry":{"type":"Point","coordinates":[-77.02550917725944,38.88796214949963]}},{"type":"Feature","properties":{"OBJECTID":5,"ADDRESS":"740 JACKSON PLACE NW","NAME":"THE WHITE HOUSE ENDOWMENT TRUST","ADDRESS_ID":218748,"LEGALNAME":"NATIONAL BUILDING MUSEUM","ALTNAME":"THE WHITE HOUSE ENDOWMENT TRUST","WEBURL":"HTTP://WWW.WHITEHOUSEHISTORY.ORG"},"geometry":{"type":"Point","coordinates":[-77.03820629325264,38.899842529027275]}},{"type":"Feature","properties":{"OBJECTID":6,"ADDRESS":"921 PENNSYLVANIA AVENUE SE","NAME":"OLD NAVAL HOSPITAL FOUNDATION","ADDRESS_ID":82564,"LEGALNAME":"JEWISH WAR VETERANS NATIONAL MEMORIAL MUSEUM ARCHIVES AND LI","ALTNAME":"OLD NAVAL HOSPITAL FOUNDATION","WEBURL":"http://hillcenterdc.org/home/"},"geometry":{"type":"Point","coordinates":[-76.99314290714912,38.8829885933721]}},{"type":"Feature","properties":{"OBJECTID":7,"ADDRESS":"2201 C STREET NW","NAME":"DIPLOMATIC ROOMS FOUNDATION","ADDRESS_ID":243360,"LEGALNAME":"NATIONAL PLASTICS MUSEUM INC","ALTNAME":"DIPLOMATIC ROOMS FOUNDATION","WEBURL":"https://diplomaticrooms.state.gov/home.aspx"},"geometry":{"type":"Point","coordinates":[-77.04831079505838,38.894135140073566]}},{"type":"Feature","properties":{"OBJECTID":8,"ADDRESS":"4400 MASSACHUSETTS AVENUE NW","NAME":"AMERICAN UNIVERSITY MUSEUM AT THE KATZEN ARTS CENTER","ADDRESS_ID":223994,"LEGALNAME":"VERNISSAGE FOUNDATION","ALTNAME":"AMERICAN UNIVERSITY MUSEUM AT THE KATZEN ARTS CENTER","WEBURL":"HTTP://WWW.AMERICAN.EDU/CAS/MUSEUM/"},"geometry":{"type":"Point","coordinates":[-77.08841712551974,38.9390892139132]}},{"type":"Feature","properties":{"OBJECTID":9,"ADDRESS":"2320 S STREET NW","NAME":"TEXTILE MUSEUM","ADDRESS_ID":243164,"LEGALNAME":"SMITHSONIAN INSTITUTION, S. DILLON RIPLEY CENTER","ALTNAME":"TEXTILE MUSEUM","WEBURL":"HTTP://WWW.TEXTILEMUSEUM.ORG"},"geometry":{"type":"Point","coordinates":[-77.0464284034822,38.89880233850966]}},{"type":"Feature","properties":{"OBJECTID":10,"ADDRESS":"1145 17TH STREET NW","NAME":"NATIONAL GEOGRAPHIC MUSEUM","ADDRESS_ID":290192,"LEGALNAME":"CAPITOL HILL RESTORATION SOCIETY INC","ALTNAME":" ","WEBURL":"HTTP://WWW.NATIONALGEOGRAPHIC.COM"},"geometry":{"type":"Point","coordinates":[-77.03815544194862,38.90519711304962]}},{"type":"Feature","properties":{"OBJECTID":11,"ADDRESS":"3501 NEW YORK AVENUE NE","NAME":"THE NATIONAL BONSAI & PENJING MUSEUM","ADDRESS_ID":293238,"LEGALNAME":"NATIONAL BONSAI FOUNDATION","ALTNAME":" ","WEBURL":"https://www.bonsai-nbf.org/contact-us/"},"geometry":{"type":"Point","coordinates":[-76.96989266812075,38.91241055669072]}},{"type":"Feature","properties":{"OBJECTID":12,"ADDRESS":"2020 O STREET NW","NAME":"O STREET MUSEUM","ADDRESS_ID":243057,"LEGALNAME":"LEPIDOPTERISTS SOCIETY","ALTNAME":" ","WEBURL":"http://www.omuseum.org/museum/"},"geometry":{"type":"Point","coordinates":[-77.04592748104784,38.90839101941751]}},{"type":"Feature","properties":{"OBJECTID":13,"ADDRESS":"2101 CONSTITUTION AVENUE NW","NAME":"NATIONAL ACADEMY OF SCIENCES","ADDRESS_ID":242716,"LEGALNAME":"SMITHSONIAN INSTITUTION, NATURAL HISTORY MUSEUM","ALTNAME":"NATIONAL ACADEMY OF SCIENCES","WEBURL":"WWW.NATIONALACADEMIES.ORG/NAS/ARTS"},"geometry":{"type":"Point","coordinates":[-77.0476448925699,38.89296693766957]}},{"type":"Feature","properties":{"OBJECTID":14,"ADDRESS":"2401 FOXHALL ROAD NW","NAME":"KREEGER MUSEUM","ADDRESS_ID":271251,"LEGALNAME":"CONGRESSIONAL CEMETERY","ALTNAME":"KREEGER MUSEUM","WEBURL":"HTTP://WWW.KREEGERMUSEUM.ORG/"},"geometry":{"type":"Point","coordinates":[-77.08878098790044,38.92191197499568]}},{"type":"Feature","properties":{"OBJECTID":15,"ADDRESS":"1250 NEW YORK AVENUE NW","NAME":"THE NATIONAL MUSEUM OF WOMEN IN THE ART","ADDRESS_ID":279010,"LEGALNAME":"NATIONAL MUSEUM OF HEALTH AND MEDICINE","ALTNAME":"THE NATIONAL MUSEUM OF WOMEN IN THE ART","WEBURL":"HTTP://WWW.NMWA.ORG"},"geometry":{"type":"Point","coordinates":[-77.029163689541,38.90005647268176]}},{"type":"Feature","properties":{"OBJECTID":16,"ADDRESS":"900 JEFFERSON DRIVE SW","NAME":"ARTS AND INDUSTRIES BUILDING","ADDRESS_ID":293260,"LEGALNAME":"ANACOSTIA COMMUNITY MUSEUM","ALTNAME":" ","WEBURL":"http://www.si.edu/Museums/arts-and-industries-building"},"geometry":{"type":"Point","coordinates":[-77.02446647929001,38.888201004559114]}},{"type":"Feature","properties":{"OBJECTID":17,"ADDRESS":"736 SICARD STREET SE","NAME":"NATIONAL MUSEUM OF UNITED STATES NAVY","ADDRESS_ID":311896,"LEGALNAME":"BLACK SPORTS LEGENDS FOUNDATION","ALTNAME":"NATIONAL MUSEUM OF UNITED STATES NAVY","WEBURL":"http://www.history.navy.mil/museums/NationalMuseum/org8-1.htm"},"geometry":{"type":"Point","coordinates":[-76.99526950368147,38.87303084860059]}},{"type":"Feature","properties":{"OBJECTID":18,"ADDRESS":"500 17TH STREET NW","NAME":"CORCORAN GALLERY OF ART","ADDRESS_ID":279802,"LEGALNAME":"SMITHSONIAN INSTITUTION, NATIONAL ZOOLOGICAL PARK","ALTNAME":"CORCORAN GALLERY OF ART","WEBURL":"http://www.corcoran.org/"},"geometry":{"type":"Point","coordinates":[-77.0397427304576,38.895854463821884]}},{"type":"Feature","properties":{"OBJECTID":19,"ADDRESS":"2017 I STREET NW","NAME":"THE ARTS CLUB OF WASHINGTON","ADDRESS_ID":285527,"LEGALNAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE","ALTNAME":"THE ARTS CLUB OF WASHINGTON","WEBURL":"HTTP://WWW.ARTSCLUBOFWASHINGTON.ORG"},"geometry":{"type":"Point","coordinates":[-77.04573426864144,38.90157618582308]}},{"type":"Feature","properties":{"OBJECTID":20,"ADDRESS":"701 3RD STREET NW","NAME":"LILLIAN AND ALBERT SMALL JEWISH MUSEUM","ADDRESS_ID":293253,"LEGALNAME":"LILLIAN AND ALBERT SMALL JEWISH MUSEUM","ALTNAME":" ","WEBURL":"http://www.jhsgw.org/"},"geometry":{"type":"Point","coordinates":[-77.01493675564363,38.89857205791096]}},{"type":"Feature","properties":{"OBJECTID":21,"ADDRESS":"320 A STREET NE","NAME":"FREDERICK DOUGLASS MUSEUM","ADDRESS_ID":38979,"LEGALNAME":"COSMOS CLUB HISTORIC PRESERVATION FOUNDATION","ALTNAME":" ","WEBURL":"http://www3.nahc.org/fd/"},"geometry":{"type":"Point","coordinates":[-77.00110470253333,38.891131915241964]}},{"type":"Feature","properties":{"OBJECTID":22,"ADDRESS":"1334 G STREET NW","NAME":"ARMENIAN GENOCIDE MUSEUM AND MEMORIAL","ADDRESS_ID":240658,"LEGALNAME":"GERMAN-AMERICAN HERITAGE MUSEUM","ALTNAME":"ARMENIAN GENOCIDE MUSEUM AND MEMORIAL","WEBURL":"http://www.armeniangenocidemuseum.org/"},"geometry":{"type":"Point","coordinates":[-77.03108432435003,38.89804891426683]}},{"type":"Feature","properties":{"OBJECTID":23,"ADDRESS":"1799 NEW YORK AVENUE NW","NAME":"OCTAGON MUSEUM","ADDRESS_ID":218490,"LEGALNAME":"AMERICAN RED CROSS MUSEUM","ALTNAME":" ","WEBURL":"HTTP://WWW.THEOCTAGON.ORG"},"geometry":{"type":"Point","coordinates":[-77.04141820048949,38.89635375607101]}},{"type":"Feature","properties":{"OBJECTID":24,"ADDRESS":"1901 FORT PLACE SE","NAME":"ANACOSTIA COMMUNITY MUSEUM","ADDRESS_ID":286524,"LEGALNAME":"FAUNA & FLORA INTERNATIONAL INC","ALTNAME":"ANACOSTIA COMMUNITY MUSEUM","WEBURL":"HTTP://ANACOSTIA.SI.EDU"},"geometry":{"type":"Point","coordinates":[-76.97678467186984,38.8565826636904]}},{"type":"Feature","properties":{"OBJECTID":25,"ADDRESS":"2312 CALIFORNIA STREET NW","NAME":"NATIONAL MUSEUM OF THE JEWISH PEOPLE","ADDRESS_ID":234961,"LEGALNAME":"GREENSEED COMMUNITY GARDEN LAND TRUST","ALTNAME":" ","WEBURL":"http://www.nsideas.com/archive/nmjh/"},"geometry":{"type":"Point","coordinates":[-77.05118108814123,38.91537084189858]}},{"type":"Feature","properties":{"OBJECTID":26,"ADDRESS":"430 17TH STREET NW","NAME":"AMERICAN RED CROSS MUSEUM","ADDRESS_ID":300987,"LEGALNAME":"DOUBLE M MANAGEMENT","ALTNAME":"AMERICAN RED CROSS MUSEUM","WEBURL":"http://www.redcross.org/"},"geometry":{"type":"Point","coordinates":[-77.04020705622152,38.89482654014118]}},{"type":"Feature","properties":{"OBJECTID":27,"ADDRESS":"1600 21ST STREET NW","NAME":"THE PHILLIPS COLLECTION","ADDRESS_ID":243333,"LEGALNAME":"SMITHSONIAN INSTITUTION, RENWICK GALLERY","ALTNAME":"THE PHILLIPS COLLECTION","WEBURL":"HTTP://WWW.PHILLIPSCOLLECTION.ORG"},"geometry":{"type":"Point","coordinates":[-77.04685454590388,38.91150979086159]}},{"type":"Feature","properties":{"OBJECTID":28,"ADDRESS":"800 F STREET NW","NAME":"INTERNATIONAL SPY MUSEUM","ADDRESS_ID":238378,"LEGALNAME":"CONFEDERATE MEMORIAL HALL ASSOCIATION","ALTNAME":"INTERNATIONAL SPY MUSEUM","WEBURL":"HTTP://WWW.SPYMUSEUM.ORG/"},"geometry":{"type":"Point","coordinates":[-77.02328618491306,38.896986480912865]}},{"type":"Feature","properties":{"OBJECTID":29,"ADDRESS":"100 RAOUL WALLENBERG PLACE SW","NAME":"UNITED STATES HOLOCAUST MEMORIAL MUSEUM","ADDRESS_ID":293186,"LEGALNAME":"NATIONAL MUSIC CENTER AND MUSEUM FOUNDATION","ALTNAME":"UNITED STATES HOLOCAUST MEMORIAL MUSEUM","WEBURL":"HTTP://WWW.USHMM.ORG"},"geometry":{"type":"Point","coordinates":[-77.03268853739414,38.88668873773371]}},{"type":"Feature","properties":{"OBJECTID":30,"ADDRESS":"801 K STREET NW","NAME":"HISTORICAL SOCIETY OF WASHINGTON DC","ADDRESS_ID":238956,"LEGALNAME":"Historical Society of Washington, D.C","ALTNAME":" ","WEBURL":"http://www.dchistory.org/"},"geometry":{"type":"Point","coordinates":[-77.02294505078932,38.90262956584554]}},{"type":"Feature","properties":{"OBJECTID":31,"ADDRESS":"1849 C STREET NW","NAME":"INTERIOR MUSEUM","ADDRESS_ID":293214,"LEGALNAME":"VICE PRESIDENTS RESIDENCE FOUNDATION","ALTNAME":"INTERIOR MUSEUM","WEBURL":"HTTP://WWW.DOI.GOV/INTERIORMUSEUM"},"geometry":{"type":"Point","coordinates":[-77.04260256434321,38.89445283458921]}},{"type":"Feature","properties":{"OBJECTID":32,"ADDRESS":"4155 LINNEAN AVENUE NW","NAME":"HILLWOOD MUSEUM & GARDENS","ADDRESS_ID":284839,"LEGALNAME":"SMITHSONIAN INSTITUTION, NATIONAL GALLERY OF ART","ALTNAME":"HILLWOOD MUSEUM & GARDENS","WEBURL":"WWW.HILLWOODMUSEUM.ORG"},"geometry":{"type":"Point","coordinates":[-77.0526196505072,38.94364171194315]}},{"type":"Feature","properties":{"OBJECTID":33,"ADDRESS":"1318 VERMONT AVENUE NW","NAME":"BETHUNE MEMORIAL MUSEUM","ADDRESS_ID":225385,"LEGALNAME":"NATIONAL MUSEUM OF WOMEN IN THE ARTS INC","ALTNAME":" ","WEBURL":"http://www.nps.gov/mamc/index.htm"},"geometry":{"type":"Point","coordinates":[-77.03086564182146,38.90817580546652]}},{"type":"Feature","properties":{"OBJECTID":34,"ADDRESS":"1500 MASSACHUSETTS AVENUE NW","NAME":"NATIONAL MUSEUM OF CATHOLIC ART AND LIBRARY","ADDRESS_ID":242324,"LEGALNAME":"KREEGER MUSEUM","ALTNAME":" ","WEBURL":"http://nmcal.org/nmcah_exhibition_in_washington.html"},"geometry":{"type":"Point","coordinates":[-77.03551120800971,38.90651019329394]}},{"type":"Feature","properties":{"OBJECTID":35,"ADDRESS":"1 MASSACHUSETTS AVENUE NW","NAME":"NATIONAL GUARD MEMORIAL MUSEUM","ADDRESS_ID":238009,"LEGALNAME":"CARL SCHMITT FOUNDATION INC","ALTNAME":" ","WEBURL":"HTTP://WWW.NGEF.ORG"},"geometry":{"type":"Point","coordinates":[-77.00956143652462,38.89812580681995]}},{"type":"Feature","properties":{"OBJECTID":36,"ADDRESS":"1811 R STREET NW","NAME":"NATIONAL MUSEUM OF AMERICAN JEWISH MILITARY HISTORY","ADDRESS_ID":243292,"LEGALNAME":"CITY TAVERN PRESERVATION FOUNDATION","ALTNAME":"JEWISH WAR VETERANS NATIONAL MEMORIAL MUSEUM ARCHIVES AND LIBRARY","WEBURL":"http://www.nmajmh.org/"},"geometry":{"type":"Point","coordinates":[-77.04211577477285,38.91282059721026]}},{"type":"Feature","properties":{"OBJECTID":37,"ADDRESS":"3900 HAREWOOD ROAD NE","NAME":"POPE JOHN PAUL II CULTURAL CENTER","ADDRESS_ID":288031,"LEGALNAME":"AMERICAN POETRY MUSEUM","ALTNAME":" ","WEBURL":"HTTP://WWW.JP2CC.ORG"},"geometry":{"type":"Point","coordinates":[-77.00466710351098,38.93776654366721]}},{"type":"Feature","properties":{"OBJECTID":38,"ADDRESS":"700 PENNSYLVANIA AVENUE NW","NAME":"NATIONAL ARCHIVES MUSEUM","ADDRESS_ID":293251,"LEGALNAME":"PHILLIPS COLLECTION","ALTNAME":"NATIONAL ARCHIVES MUSEUM","WEBURL":"https://www.archives.gov/dc-metro/washington/"},"geometry":{"type":"Point","coordinates":[-77.0228592459719,38.89285370583677]}},{"type":"Feature","properties":{"OBJECTID":39,"ADDRESS":"201 18TH STREET NW","NAME":"ART MUSEUM OF THE AMERICAS","ADDRESS_ID":294191,"LEGALNAME":"Art Museum of the Americas","ALTNAME":" ","WEBURL":"http://www.museum.oas.org/"},"geometry":{"type":"Point","coordinates":[-77.04147388756545,38.892799844291474]}},{"type":"Feature","properties":{"OBJECTID":40,"ADDRESS":"9 HILLYER COURT NW","NAME":"INTERNATIONAL ARTS & ARTISTS","ADDRESS_ID":279975,"LEGALNAME":"THE INTERNATIONAL SPY MUSEUM","ALTNAME":"INTERNATIONAL ARTS & ARTISTS","WEBURL":"WWW.ARTSANDARTISTS.ORG"},"geometry":{"type":"Point","coordinates":[-77.04730884101534,38.91222144699389]}},{"type":"Feature","properties":{"OBJECTID":41,"ADDRESS":"2 MASSACHUSETTS AVENUE NE","NAME":"NATIONAL POSTAL MUSEUM","ADDRESS_ID":293217,"LEGALNAME":"BEAD SOCIETY OF GREATER WASHINGTON","ALTNAME":"NATIONAL POSTAL MUSEUM","WEBURL":"HTTP://POSTALMUSEUM.SI.EDU"},"geometry":{"type":"Point","coordinates":[-77.00819124512859,38.8981463599396]}},{"type":"Feature","properties":{"OBJECTID":42,"ADDRESS":"1519 MONROE STREET NW","NAME":"POWHATAN MUSEUM","ADDRESS_ID":234557,"LEGALNAME":"AMERICAN UNIVERSITY MUSEUM","ALTNAME":" ","WEBURL":"http://www.powhatanmuseum.com/"},"geometry":{"type":"Point","coordinates":[-77.03550660261739,38.93243814726252]}},{"type":"Feature","properties":{"OBJECTID":43,"ADDRESS":"144 CONSTITUTION AVENUE NE","NAME":"SEWALL-BELMONT HOUSE AND MUSEUM","ADDRESS_ID":286201,"LEGALNAME":"AMERICAN MUSEUM OF PEACE INC","ALTNAME":" ","WEBURL":"HTTP://WWW.SEWALLBELMONT.ORG"},"geometry":{"type":"Point","coordinates":[-77.00375845550963,38.89219466787653]}},{"type":"Feature","properties":{"OBJECTID":44,"ADDRESS":"802 MASSACHUSETTS AVENUE NE","NAME":"SHOOK MUSEUM FOUNDATION","ADDRESS_ID":79669,"LEGALNAME":"GREENPEACE FUND","ALTNAME":" ","WEBURL":"SHOOKMUSEUM.ORG"},"geometry":{"type":"Point","coordinates":[-76.9944246526475,38.891834530779185]}},{"type":"Feature","properties":{"OBJECTID":45,"ADDRESS":"1400 CONSTITUTION AVENUE NW","NAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF NATURAL HISTORY","ADDRESS_ID":310702,"LEGALNAME":"B'NAI B'RITH KLUTZNICK MUSEUM","ALTNAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF NATURAL HISTORY","WEBURL":"http://www.mnh.si.edu/"},"geometry":{"type":"Point","coordinates":[-77.02591603234607,38.89121850995097]}},{"type":"Feature","properties":{"OBJECTID":46,"ADDRESS":"500 HOWARD PLACE NW","NAME":"HOWARD UNIVERSITY MUSEUM","ADDRESS_ID":243398,"LEGALNAME":"COLLECTONS STRIES AMRCN MSLIMS","ALTNAME":" ","WEBURL":"http://www.coas.howard.edu/msrc/museum.html"},"geometry":{"type":"Point","coordinates":[-77.0196991986925,38.922360224748935]}},{"type":"Feature","properties":{"OBJECTID":47,"ADDRESS":"8TH STREET NW AND F ST NW","NAME":"NATIONAL PORTRAIT GALLERY","ADDRESS_ID":294248,"LEGALNAME":"BOHEMIA ARTS","ALTNAME":"NATIONAL PORTRAIT GALLERY","WEBURL":"HTTP://WWW.NPG.SI.EDU"},"geometry":{"type":"Point","coordinates":[-77.02295571583119,38.89815890118559]}},{"type":"Feature","properties":{"OBJECTID":48,"ADDRESS":"14TH STREET NW AND CONSTITUTION AVENUE NW","NAME":"NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE","ADDRESS_ID":903110,"LEGALNAME":"AMERICANS FOR BATTLEFIELD PRESERVATION","ALTNAME":"NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE","WEBURL":"HTTP://WWW.NMAAHC.SI.EDU/"},"geometry":{"type":"Point","coordinates":[-77.03271597832732,38.89119983415094]}},{"type":"Feature","properties":{"OBJECTID":49,"ADDRESS":"4TH STREET SW AND INDEPENDENCE AVENUE SW","NAME":"NATIONAL MUSEUM OF AMERICAN INDIAN","ADDRESS_ID":294429,"LEGALNAME":"BLAIR HOUSE RESTORATION FUND","ALTNAME":" ","WEBURL":"WWW.NMAI.SI.EDU"},"geometry":{"type":"Point","coordinates":[-77.01672595283219,38.88826561652]}},{"type":"Feature","properties":{"OBJECTID":50,"ADDRESS":"6TH STREET SW AND INDEPENDENCE AVENUE SW","NAME":"NATIONAL AIR AND SPACE MUSEUM","ADDRESS_ID":301565,"LEGALNAME":"BETHUNE MEMORIAL MUSEUM","ALTNAME":"NATIONAL AIR AND SPACE MUSEUM","WEBURL":"HTTP://WWW.NASM.SI.EDU/"},"geometry":{"type":"Point","coordinates":[-77.01979999825605,38.888161175521944]}},{"type":"Feature","properties":{"OBJECTID":51,"ADDRESS":"7THB STREET AND INDEPENDENCE AVENUE SW","NAME":"HIRSHHORN MUSEUM AND SCULPTURE GARDEN","ADDRESS_ID":294428,"LEGALNAME":"D.C. OFFICE OF PUBLIC RECORDS AND ARCHIVES","ALTNAME":"HIRSHHORN MUSEUM AND SCULPTURE GARDEN","WEBURL":"HTTP://HIRSHHORN.SI.EDU/"},"geometry":{"type":"Point","coordinates":[-77.02294902891254,38.88843565656003]}},{"type":"Feature","properties":{"OBJECTID":52,"ADDRESS":"MADISON DRIVE NW AND 12TH STREET NW","NAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AMERICAN HISTORY","ADDRESS_ID":293200,"LEGALNAME":null,"ALTNAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AMERICAN HISTORY","WEBURL":"HTTP://AMERICANHISTORY.SI.EDU"},"geometry":{"type":"Point","coordinates":[-77.03005156534492,38.89123181993075]}},{"type":"Feature","properties":{"OBJECTID":53,"ADDRESS":"4TH STREET NW AND MADISON DRIVE NW","NAME":"NATIONAL GALLERY OF ART - EAST BUILDING","ADDRESS_ID":293209,"LEGALNAME":null,"ALTNAME":null,"WEBURL":"http://www.nga.gov/content/ngaweb/visit/maps-and-information/east-building.html"},"geometry":{"type":"Point","coordinates":[-77.01668919569053,38.89125721273486]}},{"type":"Feature","properties":{"OBJECTID":54,"ADDRESS":"4TH STREET NW AND MADISON DRIVE NW","NAME":"NATIONAL GALLERY OF ART - WEST BUILDING","ADDRESS_ID":293249,"LEGALNAME":null,"ALTNAME":null,"WEBURL":"http://www.nga.gov/content/ngaweb/visit/maps-and-information/west-building.html"},"geometry":{"type":"Point","coordinates":[-77.01989150273015,38.891313914429645]}},{"type":"Feature","properties":{"OBJECTID":55,"ADDRESS":"1000 JEFFERSON DRIVE SW","NAME":"SMITHSONIAN INSTITUTION - CASTLE","ADDRESS_ID":293187,"LEGALNAME":null,"ALTNAME":null,"WEBURL":"http://www.si.edu/Museums/smithsonian-institution-building"},"geometry":{"type":"Point","coordinates":[-77.02597189316775,38.88879577572046]}},{"type":"Feature","properties":{"OBJECTID":56,"ADDRESS":"1050 INDEPENDENCE AVENUE SW","NAME":"SACKLER GALLERY","ADDRESS_ID":293191,"LEGALNAME":"ARTHUR M. SACKLER GALLERY","ALTNAME":null,"WEBURL":"http://www.asia.si.edu/"},"geometry":{"type":"Point","coordinates":[-77.02645343758842,38.88796502751886]}},{"type":"Feature","properties":{"OBJECTID":57,"ADDRESS":"JEFFERSON DRIVE SW AND 12TH STREET SW","NAME":"FREER GALLERY","ADDRESS_ID":294417,"LEGALNAME":"FREER GALLERY OF ART","ALTNAME":null,"WEBURL":"http://www.asia.si.edu/"},"geometry":{"type":"Point","coordinates":[-77.02736845485786,38.8882746680144]}}]} -------------------------------------------------------------------------------- /data/README.md: -------------------------------------------------------------------------------- 1 | # Data used in demonstrations 2 | 3 | 4 | ## `zika_assembled_genomes.fasta` 5 | 6 | **Description** 7 | 8 | * [Fasta](https://en.wikipedia.org/wiki/FASTA_format) file. 9 | * 110 Zika virus genomes 10 | * Assembled from clinical and mosquito samples across 10 countries and territories. 11 | * Followed by phylogenetic analysis to infer evolution of virus through Americas. 12 | 13 | For more information, see the paper [here](https://www.nature.com/nature/journal/v546/n7658/full/nature22402.html). 14 | 15 | 16 | **Citation** 17 | 18 | ``` 19 | @article{metsky2017zika, 20 | title={Zika virus evolution and spread in the Americas}, 21 | author={Metsky, Hayden C and Matranga, Christian B and Wohl, Shirlee and Schaffner, Stephen F and Freije, Catherine A and Winnicki, Sarah M and West, Kendra and Qu, James and Baniecki, Mary Lynn and Gladden-Young, Adrianne and others}, 22 | journal={Nature}, 23 | year={2017}, 24 | publisher={Nature Research} 25 | } 26 | ``` 27 | -------------------------------------------------------------------------------- /data/bar.vl.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "values": [ 4 | { 5 | "a": "A", 6 | "b": 28 7 | }, 8 | { 9 | "a": "B", 10 | "b": 55 11 | }, 12 | { 13 | "a": "C", 14 | "b": 43 15 | }, 16 | { 17 | "a": "D", 18 | "b": 91 19 | }, 20 | { 21 | "a": "E", 22 | "b": 81 23 | }, 24 | { 25 | "a": "F", 26 | "b": 53 27 | }, 28 | { 29 | "a": "G", 30 | "b": 19 31 | }, 32 | { 33 | "a": "H", 34 | "b": 87 35 | }, 36 | { 37 | "a": "I", 38 | "b": 52 39 | } 40 | ] 41 | }, 42 | "description": "A simple bar chart with embedded data.", 43 | "encoding": { 44 | "x": { 45 | "field": "a", 46 | "type": "ordinal" 47 | }, 48 | "y": { 49 | "field": "b", 50 | "type": "quantitative" 51 | } 52 | }, 53 | "mark": "bar" 54 | } 55 | -------------------------------------------------------------------------------- /data/iris.csv: -------------------------------------------------------------------------------- 1 | sepal_length,sepal_width,petal_length,petal_width,species 2 | 5.1,3.5,1.4,0.2,se 3 | 4.9,3,1.4,0.2,setosa 4 | 4.7,3.2,1.3,0.2,setosa 5 | 4.6,3.1,1.5,0.2,setosa 6 | 5,3.6,1.4,0.2,setosa 7 | 5.4,3.9,1.7,0.4,setosa 8 | 4.6,3.4,1.4,0.3,setosa 9 | 5,3.4,1.5,0.2,setosa 10 | 4.4,2.9,1.4,0.2,setosa 11 | 4.9,3.1,1.5,0.1,setosa 12 | 5.4,3.7,1.5,0.2,setosa 13 | 4.8,3.4,1.6,0.2,setosa 14 | 4.8,3,1.4,0.1,setosa 15 | 4.3,3,1.1,0.1,setosa 16 | 5.8,4,1.2,0.2,setosa 17 | 5.7,4.4,1.5,0.4,setosa 18 | 5.4,3.9,1.3,0.4,setosa 19 | 5.1,3.5,1.4,0.3,setosa 20 | 5.7,3.8,1.7,0.3,setosa 21 | 5.1,3.8,1.5,0.3,setosa 22 | 5.4,3.4,1.7,0.2,setosa 23 | 5.1,3.7,1.5,0.4,setosa 24 | 4.6,3.6,1,0.2,setosa 25 | 5.1,3.3,1.7,0.5,setosa 26 | 4.8,3.4,1.9,0.2,setosa 27 | 5,3,1.6,0.2,setosa 28 | 5,3.4,1.6,0.4,setosa 29 | 5.2,3.5,1.5,0.2,setosa 30 | 5.2,3.4,1.4,0.2,setosa 31 | 4.7,3.2,1.6,0.2,setosa 32 | 4.8,3.1,1.6,0.2,setosa 33 | 5.4,3.4,1.5,0.4,setosa 34 | 5.2,4.1,1.5,0.1,setosa 35 | 5.5,4.2,1.4,0.2,setosa 36 | 4.9,3.1,1.5,0.1,setosa 37 | 5,3.2,1.2,0.2,setosa 38 | 5.5,3.5,1.3,0.2,setosa 39 | 4.9,3.1,1.5,0.1,setosa 40 | 4.4,3,1.3,0.2,setosa 41 | 5.1,3.4,1.5,0.2,setosa 42 | 5,3.5,1.3,0.3,setosa 43 | 4.5,2.3,1.3,0.3,setosa 44 | 4.4,3.2,1.3,0.2,setosa 45 | 5,3.5,1.6,0.6,setosa 46 | 5.1,3.8,1.9,0.4,setosa 47 | 4.8,3,1.4,0.3,setosa 48 | 5.1,3.8,1.6,0.2,setosa 49 | 4.6,3.2,1.4,0.2,setosa 50 | 5.3,3.7,1.5,0.2,setosa 51 | 5,3.3,1.4,0.2,setosa 52 | 7,3.2,4.7,1.4,versicolor 53 | 6.4,3.2,4.5,1.5,versicolor 54 | 6.9,3.1,4.9,1.5,versicolor 55 | 5.5,2.3,4,1.3,versicolor 56 | 6.5,2.8,4.6,1.5,versicolor 57 | 5.7,2.8,4.5,1.3,versicolor 58 | 6.3,3.3,4.7,1.6,versicolor 59 | 4.9,2.4,3.3,1,versicolor 60 | 6.6,2.9,4.6,1.3,versicolor 61 | 5.2,2.7,3.9,1.4,versicolor 62 | 5,2,3.5,1,versicolor 63 | 5.9,3,4.2,1.5,versicolor 64 | 6,2.2,4,1,versicolor 65 | 6.1,2.9,4.7,1.4,versicolor 66 | 5.6,2.9,3.6,1.3,versicolor 67 | 6.7,3.1,4.4,1.4,versicolor 68 | 5.6,3,4.5,1.5,versicolor 69 | 5.8,2.7,4.1,1,versicolor 70 | 6.2,2.2,4.5,1.5,versicolor 71 | 5.6,2.5,3.9,1.1,versicolor 72 | 5.9,3.2,4.8,1.8,versicolor 73 | 6.1,2.8,4,1.3,versicolor 74 | 6.3,2.5,4.9,1.5,versicolor 75 | 6.1,2.8,4.7,1.2,versicolor 76 | 6.4,2.9,4.3,1.3,versicolor 77 | 6.6,3,4.4,1.4,versicolor 78 | 6.8,2.8,4.8,1.4,versicolor 79 | 6.7,3,5,1.7,versicolor 80 | 6,2.9,4.5,1.5,versicolor 81 | 5.7,2.6,3.5,1,versicolor 82 | 5.5,2.4,3.8,1.1,versicolor 83 | 5.5,2.4,3.7,1,versicolor 84 | 5.8,2.7,3.9,1.2,versicolor 85 | 6,2.7,5.1,1.6,versicolor 86 | 5.4,3,4.5,1.5,versicolor 87 | 6,3.4,4.5,1.6,versicolor 88 | 6.7,3.1,4.7,1.5,versicolor 89 | 6.3,2.3,4.4,1.3,versicolor 90 | 5.6,3,4.1,1.3,versicolor 91 | 5.5,2.5,4,1.3,versicolor 92 | 5.5,2.6,4.4,1.2,versicolor 93 | 6.1,3,4.6,1.4,versicolor 94 | 5.8,2.6,4,1.2,versicolor 95 | 5,2.3,3.3,1,versicolor 96 | 5.6,2.7,4.2,1.3,versicolor 97 | 5.7,3,4.2,1.2,versicolor 98 | 5.7,2.9,4.2,1.3,versicolor 99 | 6.2,2.9,4.3,1.3,versicolor 100 | 5.1,2.5,3,1.1,versicolor 101 | 5.7,2.8,4.1,1.3,versicolor 102 | 6.3,3.3,6,2.5,virginica 103 | 5.8,2.7,5.1,1.9,virginica 104 | 7.1,3,5.9,2.1,virginica 105 | 6.3,2.9,5.6,1.8,virginica 106 | 6.5,3,5.8,2.2,virginica 107 | 7.6,3,6.6,2.1,virginica 108 | 4.9,2.5,4.5,1.7,virginica 109 | 7.3,2.9,6.3,1.8,virginica 110 | 6.7,2.5,5.8,1.8,virginica 111 | 7.2,3.6,6.1,2.5,virginica 112 | 6.5,3.2,5.1,2,virginica 113 | 6.4,2.7,5.3,1.9,virginica 114 | 6.8,3,5.5,2.1,virginica 115 | 5.7,2.5,5,2,virginica 116 | 5.8,2.8,5.1,2.4,virginica 117 | 6.4,3.2,5.3,2.3,virginica 118 | 6.5,3,5.5,1.8,virginica 119 | 7.7,3.8,6.7,2.2,virginica 120 | 7.7,2.6,6.9,2.3,virginica 121 | 6,2.2,5,1.5,virginica 122 | 6.9,3.2,5.7,2.3,virginica 123 | 5.6,2.8,4.9,2,virginica 124 | 7.7,2.8,6.7,2,virginica 125 | 6.3,2.7,4.9,1.8,virginica 126 | 6.7,3.3,5.7,2.1,virginica 127 | 7.2,3.2,6,1.8,virginica 128 | 6.2,2.8,4.8,1.8,virginica 129 | 6.1,3,4.9,1.8,virginica 130 | 6.4,2.8,5.6,2.1,virginica 131 | 7.2,3,5.8,1.6,virginica 132 | 7.4,2.8,6.1,1.9,virginica 133 | 7.9,3.8,6.4,2,virginica 134 | 6.4,2.8,5.6,2.2,virginica 135 | 6.3,2.8,5.1,1.5,virginica 136 | 6.1,2.6,5.6,1.4,virginica 137 | 7.7,3,6.1,2.3,virginica 138 | 6.3,3.4,5.6,2.4,virginica 139 | 6.4,3.1,5.5,1.8,virginica 140 | 6,3,4.8,1.8,virginica 141 | 6.9,3.1,5.4,2.1,virginica 142 | 6.7,3.1,5.6,2.4,virginica 143 | 6.9,3.1,5.1,2.3,virginica 144 | 5.8,2.7,5.1,1.9,virginica 145 | 6.8,3.2,5.9,2.3,virginica 146 | 6.7,3.3,5.7,2.5,virginica 147 | 6.7,3,5.2,2.3,virginica 148 | 6.3,2.5,5,1.9,virginica 149 | 6.5,3,5.2,2,virginica 150 | 6.2,3.4,5.4,2.3,virginica 151 | 5.9,3,5.1,1.8,virginica 152 | -------------------------------------------------------------------------------- /data/japan_meterological_agency_201707211555.json: -------------------------------------------------------------------------------- 1 | {"type": "FeatureCollection", "features": [{"geometry": {"type": "Point", "coordinates": [130.119, 34.967]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.446, 42.368]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.115, 34.838]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.064, 34.727]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.829, 42.568]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.777, 42.508]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.677, 42.437]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [129.987, 35.013]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.103, 35.144]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [129.958, 35.36]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.126, 34.962]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.202, 42.152]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.539, 42.373]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.589, 42.441]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.093, 34.883]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.504, 42.38]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.143, 34.834]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.064, 34.873]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.605, 42.478]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.481, 42.39]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.753, 42.543]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.117, 35.206]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.128, 34.917]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.148, 34.921]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.418, 42.319]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [129.993, 34.949]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.022, 34.952]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.637, 42.499]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.203, 42.15]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.375, 42.344]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.749, 42.615]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [129.976, 35.214]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.031, 34.87]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.524, 42.402]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.15, 34.865]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [124.928, 22.035]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [124.829, 22.113]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [124.877, 22.303]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.87, 42.587]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.868, 42.579]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [129.981, 34.943]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.052, 34.91]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.036, 34.957]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.135, 34.891]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.0, 34.962]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.618, 42.414]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.088, 34.896]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.626, 42.492]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.649, 42.417]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.533, 42.304]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.036, 34.814]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.041, 34.966]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.149, 34.853]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.586, 42.234]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.571, 42.239]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [129.947, 34.931]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.695, 42.514]}, "type": "Feature", "properties": {"type": 1}}]} -------------------------------------------------------------------------------- /jupyter_notebook_config.py: -------------------------------------------------------------------------------- 1 | c.LabApp.collaborative = True 2 | c.ContentsManager.allow_hidden = True 3 | -------------------------------------------------------------------------------- /narrative/QConAI.md: -------------------------------------------------------------------------------- 1 | # Slides 2 | 3 | # JupyterLab update 4 | 5 | JupyterLab is a new web-based frontend that brings together many tools in an extensible, performant, open-source environment. We announced it to be ready for users about a month ago. We are calling it "beta" since the extension developer APIs for making extensions are still evolving. 6 | 7 | ## JupyterLab 8 | 9 | This is JupyterLab. Create a new tab by clicking the + button or using the File | New menu. We can then start a notebook with a specific kernel, a console, terminal, or text editor. 10 | 11 | ## Notebook 12 | 13 | The notebook is a completely new implementation of the same Jupyter notebook interface that we know and love. Here is an example notebook from Jake's data science book. You still have markdown including math, code, rich output, interactive jupyter widgets, etc. 14 | 15 | Since this is a complete rewrite, we've taken the opportunity to add a few things, like collapsible and draggable cells and a vastly better extension mechanism. 16 | 17 | Another workflow supported by JupyterLab is creating a new view of a file by right-clicking on the tab, so it is easy to look at different parts at the same time. Of course, you can still drag and drop between these views. 18 | 19 | One of the design goals for JupyterLab is to make it easy for components to interact with each other. For example, we can right-click to open a console talking to the same kernel as this notebook. We can drag these so that they are side-by-side. As we execute cells in the notebook, we see the log of executions in the console. In the console, we can investigate the computation environment without messing up the notebook. Two tools, talking to the same kernel, in an integrated environment. 20 | 21 | Here is another notebook demonstrating Jupyter widgets. Just as it is easy to get components to talk to each other, we've also made it easy to pull out components. Right-click to create a new view of this output, which then is like your prototypical dashboard. 22 | 23 | TODO: bqplot example. 24 | 25 | So that's the notebook. The same interface that you know and love, more powerful and integrated into the extensible JupyterLab environment. 26 | 27 | ## Editor 28 | 29 | Let's see the editor. Here is an example markdown file. For any file, we may have multiple viewers open. For example, we can also preview this file by right-clicking on it. We can again arrange these side-by-side. These views are live, talking to the same underlying in-memory model of the file, which means live preview happens automatically *type some text*. 30 | 31 | We have some code in this markdown file. We can right-click and open a console associated with any editor file. This time, pressing shift-enter inside of a markdown code block will send the text to the console to execute. We can easily check our examples. 32 | 33 | This enables a fluent workflow executing code from a script or code file: open the file, open an associated console with any kernel, and step through the lines of code with shift-enter, or highlight several lines and press shift-enter. 34 | 35 | ## Single document mode 36 | 37 | You can see that our workspace can have many things on it. Sometimes we want to focus on a single tab, for example this console here in the corner. With any tab active, we can toggle the new "Single document mode" command with the View menu option. Once in single-document mode, we can navigate the documents with the Tabs side panel or the Tabs menu. It's easy to jump back to our full layout again. 38 | 39 | ## Terminal 40 | 41 | The terminal is a full-blown terminal. We can run emacs or vi. We can even quit vi. 42 | 43 | ## Customization 44 | 45 | We have a number of settings to customize your JupyterLab environment. Some settings are accessible from the menu, such as theme (change theme), the text editor keyboard handling, etc. Other settings such as the keyboard shortcuts for the system are accessible in the advanced settings. 46 | 47 | # File types 48 | 49 | Many of us deal with many types of files. JupyterLab comes with many different viewers for files. For example: 50 | * images 51 | * pdf 52 | * geojson 53 | * vega/vegalite 54 | 55 | As with the markdown file, these models are live. We can open a single file like this Vega file with the JSON viewer, and with the text editor, and changes in one will reflect in the others. *Change the mark type* 56 | 57 | # Data grid 58 | 59 | Another file that many of us deal with is CSV files, or other files that can be represented as a grid. 60 | 61 | **open smaller.csv** 62 | 63 | This viewer uses an alpha version of a new fast datagrid component written by Chris Colbert as part of the JupyterLab collaboration. It's in the PhosphorJS javascript library, on which jlab is built, and can be used outside of JupyterLab. 64 | 65 | It also handles larger data files. Here is a 200MB csv file with 1.2 million rows. 66 | 67 | **open big.csv** 68 | 69 | Excel and LibreOffice can't load this file - it's too big. Let's see how our data grid component works. It takes a few seconds to transfer 200MB through to the web browser, but it *does* open. And scrolling is as smooth as butter. 70 | 71 | **close big.csv** 72 | 73 | Chris has another example with one TRILLION rows and one TRILLION columns, still smooth as butter. 74 | 75 | *open datagrid example* 76 | 77 | Thanks Chris. We look forward to the many more planned features. 78 | 79 | # Extensibility 80 | 81 | ## Extending JLab 82 | 83 | ### File viewers 84 | 85 | It is also straightforward to add your own file viewer. For example, last year at Scipy someone said it would be great to have a FASTA sequence file viewer for their biology work. We found a javascript library for rendering FASTA information, and wrapped it in a couple of dozen lines of code in a few hours. The result is a small JupyterLab extension that both lets us open Fasta files 86 | 87 | *open Fasta file* 88 | 89 | and the same extension also automatically enables the notebook to render Fasta information inline. 90 | 91 | *open Fasta notebook* 92 | 93 | As another example, in January Wolf Vollprecht at QuantStack wanted to embed the excellent draw.io diagram editor in JupyterLab. A few days later, we had a working plugin for creating and editing diagrams. 94 | 95 | *create new draw.io file* 96 | 97 | ### New activities 98 | 99 | The GitHub file browser allows you to browse any GitHub organization. For example, we can open the bloomberg organization and run the bqplot examples straight from GitHub, no need to download anything. We can also launch the binder if the repo has a binder associated with it. 100 | 101 | 102 | ### Wrapup 103 | 104 | So that's some of the new exciting things in JupyterLab, an extensible, performant, comprehensive environment. 105 | 106 | Did I mention that JupyterLab is extensible? 107 | 108 | *open package.json* 109 | 110 | Everything you see is a plugin, and your plugins are on equal footing to extend or replace any of ours. 111 | 112 | That's the genius of open-source - you can customize your own tools and help the community. I'm most excited about what *you* will do with this tool and the extensions that *you* write. 113 | 114 | If you want to learn more about Jupyter, please come to [JupyterCon](https://conferences.oreilly.com/jupyter/jup-ny), August 21-25, in New York City. And come to the free Jupyter Community sprint day of JupyterCon, Saturday Aug 25, following the conference. 115 | 116 | Thank you 117 | 118 | For more information, see the Jupyter Blog post, and the JupyterLab documentation, and try it out today! -------------------------------------------------------------------------------- /narrative/jupyterlab.md: -------------------------------------------------------------------------------- 1 | # JupyterLab Demo 2 | 3 | JupyterLab: The next generation user interface for Project Jupyter 4 | 5 | https://github.com/jupyter/jupyterlab 6 | 7 | It started as a collaboration between: 8 | 9 | * Project Jupyter 10 | * Bloomberg 11 | * (then) Continuum 12 | 13 | and now involves many other people from many other places (not purely academic or business) 14 | 15 | ## 1) Building blocks of interactive computing 16 | 17 | ### Start with the launcher 18 | 19 | 20 | Use it to open different activities: 21 | 22 | * Notebook 23 | * Console 24 | * Editor 25 | * Terminal 26 | 27 | ### Notebooks 28 | 29 | * Open example notebooks to show that notebooks still work 30 | * Collapse input/output 31 | * Drag and drop cells 32 | 33 | ### Demonstrate left panel plugins: 34 | 35 | * File Browser (file operations, context menu, including drag and drop) 36 | * Running 37 | * Command Palette (fuzzy searching for 'new') 38 | 39 | ### Markdown example 40 | 41 | * Open `markdown_python.md` in the File Editor 42 | * View the rendered markdown, arrange side by side 43 | * Attach a Kernel/Console and run the code by selecting blocks and pressing 44 | `Shift+Enter` 45 | 46 | ### Arrange the building blocks in the main area 47 | 48 | The dock panel allows you to arrange the activites into an 49 | arbitrary layout. 50 | 51 | Tabs and single document mode allow you to focus. 52 | 53 | ## 4) File handlers 54 | 55 | JupyterLab has a powerful and extensible architecture for handling a wide range of file formats: 56 | 57 | * CSV 58 | - `./data/iris.csv` (small) 59 | - `TCGA_Data` (small to medium) 60 | - Urban_Data_Challenge: `data/big.csv` 61 | * Images 62 | - `data/hubble.png` 63 | * Vega-Lite 64 | - `data/vega.vl.json` 65 | * Open DC museum GeoJSON file from [OpenData DC](http://opendata.dc.gov/datasets/2e65fc16edc3481989d2cc17e6f8c533_54): `data/Museums_in_DC.geojson` 66 | * Notebook demonstrating bqplot widgets: `notebooks/bqplot.ipynb` 67 | 68 | ## 5) Find and Replace 69 | first class support for find and replace across JupyterLab, currently supported in 70 | notebooks and text files and is extensible for other widgets who wish to support it. 71 | 72 | ## 6) Status Bar 73 | We have integrated the JupyterLab Status Bar package package into the core distribution. Extensions can add their own status to it as well 74 | 75 | ## 7) Printing 76 | 77 | A printing system allows extensions to customize how documents and activities are printed. 78 | 79 | ## 8) JupyterHub 80 | 81 | We now include the JupyterHub extension as a core JupyterLab extension, so you no longer need to install @jupyterlab/hub-extension (supporting multi-user + authentication workflows) 82 | 83 | ## 9) Plugin architecture 84 | 85 | The genius of open-source is being able to shape your tools to your heart's content. 86 | 87 | Just like Jupyter is built on top of building blocks of the protocol and message spec, *you* can build on this platform for your workflow. 88 | 89 | * Everything in JupyterLab is an extension, including everything we have demoed 90 | * Extensions are just `npm` packages with metadata 91 | * Anyone can create, package, ship plugins 92 | * Extension can, for example: 93 | - Add things to command palette, menu 94 | - Add viewers for documents 95 | - Expose other controls (e.g., manage a spark cluster?) 96 | - Provide more capabilities to the system 97 | 98 | ## What will you build? 99 | 100 | -------------------------------------------------------------------------------- /narrative/markdown_python.md: -------------------------------------------------------------------------------- 1 | # Markdown+Python Example 2 | 3 | This is a regular markdown file. In JupyterLab you can open and edit 4 | the file in the file editor, or in the markdown viewer. As you edit the 5 | file the rendered markdown will automatically update. 6 | 7 | # Including Python code 8 | 9 | Here is a block of Python code in the markdown file: 10 | 11 | ```python 12 | a = 10 13 | ``` 14 | 15 | Let's attach a Python 3 Kernel and Console to this markdown file. Then 16 | we can select lines of code in the markdown file and run them in the 17 | console by pressing `Shift+Enter`. Let's do something more complicated: 18 | 19 | First import `matplotlib`, `numpy` and `pandas`, and create a data frame: 20 | 21 | ```python 22 | %matplotlib inline 23 | from matplotlib import pyplot as plt 24 | from matplotlib import style 25 | import numpy as np 26 | import pandas as pd 27 | data = { 28 | 'x': np.random.rand(100), 29 | 'y': np.random.rand(100), 30 | 'color': np.random.rand(100), 31 | 'size': 100.0*np.random.rand(100) 32 | } 33 | df = pd.DataFrame(data) 34 | df.head() 35 | ``` 36 | 37 | And make a scatter plot: 38 | 39 | ```python 40 | style.use('seaborn-whitegrid') 41 | 42 | plt.scatter('x', 'y', c='color', s='size', data=df, cmap=plt.cm.Blues) 43 | plt.xlabel('x') 44 | plt.ylabel('y') 45 | 46 | plt.title("The data that we collected") 47 | ``` 48 | 49 | All of the Python objects are live in the console and can be explored 50 | further. -------------------------------------------------------------------------------- /narrative/scipy2017.md: -------------------------------------------------------------------------------- 1 | # JupyterLab update 2 | 3 | JupyterLab is a new web-based frontend that brings together many tools in an extensible, performant, open-source environment. We plan to release the beta in a few weeks, which should be usable for day-to-day work. 4 | 5 | ## JupyterLab 6 | 7 | This is JupyterLab. Create a new tab by clicking the + button or using the File | New menu. We can then start a notebook with a specific kernel, a console, terminal, or text editor. 8 | 9 | ## Notebook 10 | 11 | The notebook is a completely new implementation of the same Jupyter notebook interface that we know and love. Here is an example notebook from Jake's data science book. You still have markdown including math, code, rich output, interactive jupyter widgets, etc. 12 | 13 | Since this is a complete rewrite, we've taken the opportunity to add a few things, like collapsible and draggable cells and a vastly better extension mechanism. 14 | 15 | One of the design goals for JupyterLab is to make it easy for components to interact with each other. For example, we can right-click to open a console talking to the same kernel as this notebook. We can drag these so that they are side-by-side. As we execute cells in the notebook, we see the log of executions in the console. In the console, we can investigate the computation environment without messing up the notebook. Two tools, talking to the same kernel, in an integrated environment. 16 | 17 | So that's the notebook. The same interface that you know and love, more powerful and integrated into the extensible JupyterLab environment. 18 | 19 | ## Editor 20 | 21 | Let's see the editor. Here is an example markdown file. We can also preview it. We can again arrange these side-by-side. 22 | 23 | We have some code in this markdown file. We can right-click and open a console associated with any editor file. This time, pressing shift-enter inside of a markdown code block will send the text to the console to execute. We can easily check our examples, or if we were in a code file, could check our scripts. 24 | 25 | ## Single document mode 26 | 27 | You can see that our workspace can have many things on it. Sometimes we want to focus on a single tab, for example this console. With any tab active, we can toggle the new "Single document mode" command with shift-cmd-enter. And we can toggle back. 28 | 29 | # File types 30 | 31 | We can also write our own file viewer plugins. Some others include images, geojson maps, vega and vegalite. 32 | 33 | These are easy to create. For example, last night we thought it would be great to have a Fasta sequence viewer in JupyterLab. We built a prototype in with a couple dozen lines of code in half an hour wrapping the msa viewer. 34 | 35 | *open fasta file* 36 | 37 | I see that it looks like the top sequence is not aligned properly. Since all viewers use the same underlying file, it's easy to open the file and align it, and the view automatically updates. 38 | 39 | *update the fasta file* 40 | 41 | # Data grid 42 | 43 | Another file that many of us deal with is CSV files, or other files that can be represented as a grid. 44 | 45 | **open smaller.csv** 46 | 47 | This viewer uses an alpha version of a new fast datagrid component written by Chris Colbert as part of the JupyterLab collaboration. It's in the PhosphorJS javascript library, on which jlab is built, and can be used outside of JupyterLab. 48 | 49 | It also handles larger data files. Here is a 200MB csv file with 1.2 million rows. Excel and LibreOffice can't load it - it's too big, and it is very slow to scroll around what it can load. Let's see how our data grid component works. It takes a few seconds to transfer 200MB through to the web browser, but it *does* open. And scrolling is as smooth as butter. Chris has another example with one TRILLION rows and one TRILLION columns, still smooth as butter. 50 | 51 | Thanks Chris. We look forward to the many more planned features. 52 | 53 | # Extensibility 54 | 55 | So that's some of the new exciting things in JupyterLab, an extensible, performant, comprehensive environment. 56 | 57 | Did I mention that JupyterLab is extensible? Everything you see is a plugin, and your plugins are on equal footing to extend or replace any of ours. 58 | 59 | That's the genius of open-source - you can customize your own tools and help the community. I'm most excited about what *you* will do with this tool and the extensions that *you* write. 60 | 61 | If you want to learn more about Jupyter, please come to [JupyterCon! August 23-25](https://conferences.oreilly.com/jupyter/jup-ny), August 23-25, in New York City. See the NumFOCUS booth for discount codes for tickets. And come to the sprint day of JupyterCon, Saturday Aug 26, following the conference. 62 | 63 | Thank you 64 | 65 | For more information, see the [PyData Seattle JupyterLab talk](https://channel9.msdn.com/Events/PyData/Seattle2017/BRK11) 66 | -------------------------------------------------------------------------------- /notebooks/Cpp.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "[![xeus-cling](images/xeus-cling.png)](https://github.com/QuantStack/xeus-cling/)\n", 8 | "\n", 9 | "A Jupyter kernel for C++ based on the `cling` C++ interpreter and the `xeus` native implementation of the Jupyter protocol, xeus.\n", 10 | "\n", 11 | "- GitHub repository: https://github.com/QuantStack/xeus-cling/\n", 12 | "- Online documentation: https://xeus-cling.readthedocs.io/" 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "metadata": {}, 18 | "source": [ 19 | "## Output and error streams\n", 20 | "\n", 21 | "`std::cout` and `std::cerr` are redirected to the notebook frontend." 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": null, 27 | "metadata": {}, 28 | "outputs": [], 29 | "source": [ 30 | "#include \n", 31 | "\n", 32 | "std::cout << \"some output\" << std::endl;" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": null, 38 | "metadata": {}, 39 | "outputs": [], 40 | "source": [ 41 | "std::cerr << \"some error\" << std::endl;" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": null, 47 | "metadata": {}, 48 | "outputs": [], 49 | "source": [ 50 | "#include " 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": null, 56 | "metadata": {}, 57 | "outputs": [], 58 | "source": [ 59 | "try {\n", 60 | " throw std::runtime_error(\"Unknown exception\");\n", 61 | "} catch (const std::runtime_error& e) {\n", 62 | " std::cerr << \"caught error: \" << e.what() << std::endl;\n", 63 | "}" 64 | ] 65 | }, 66 | { 67 | "cell_type": "markdown", 68 | "metadata": {}, 69 | "source": [ 70 | "Omitting the `;` in the last statement of a cell results in an output being printed" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": null, 76 | "metadata": {}, 77 | "outputs": [], 78 | "source": [ 79 | "int j = 5;" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": null, 85 | "metadata": {}, 86 | "outputs": [], 87 | "source": [ 88 | "j" 89 | ] 90 | }, 91 | { 92 | "cell_type": "markdown", 93 | "metadata": {}, 94 | "source": [ 95 | "# Interpreting the C++ programming language\n", 96 | "\n", 97 | "`cling` has a broad support of the features of C++. You can define functions, classes, templates, etc ..." 98 | ] 99 | }, 100 | { 101 | "cell_type": "markdown", 102 | "metadata": {}, 103 | "source": [ 104 | "## Functions" 105 | ] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "execution_count": null, 110 | "metadata": {}, 111 | "outputs": [], 112 | "source": [ 113 | "double sqr(double a)\n", 114 | "{\n", 115 | " return a * a;\n", 116 | "}" 117 | ] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "execution_count": null, 122 | "metadata": {}, 123 | "outputs": [], 124 | "source": [ 125 | "double a = 2.5;\n", 126 | "double asqr = sqr(a);\n", 127 | "asqr" 128 | ] 129 | }, 130 | { 131 | "cell_type": "markdown", 132 | "metadata": {}, 133 | "source": [ 134 | "## Classes" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": null, 140 | "metadata": {}, 141 | "outputs": [], 142 | "source": [ 143 | "class Foo\n", 144 | "{\n", 145 | "public:\n", 146 | "\n", 147 | " virtual ~Foo() {}\n", 148 | " \n", 149 | " virtual void print(double value) const\n", 150 | " {\n", 151 | " std::cout << \"Foo value = \" << value << std::endl;\n", 152 | " }\n", 153 | "};" 154 | ] 155 | }, 156 | { 157 | "cell_type": "code", 158 | "execution_count": null, 159 | "metadata": {}, 160 | "outputs": [], 161 | "source": [ 162 | "Foo bar;\n", 163 | "bar.print(1.2);" 164 | ] 165 | }, 166 | { 167 | "cell_type": "markdown", 168 | "metadata": {}, 169 | "source": [ 170 | "## Polymorphism" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": null, 176 | "metadata": {}, 177 | "outputs": [], 178 | "source": [ 179 | "class Bar : public Foo\n", 180 | "{\n", 181 | "public:\n", 182 | "\n", 183 | " virtual ~Bar() {}\n", 184 | " \n", 185 | " virtual void print(double value) const\n", 186 | " {\n", 187 | " std::cout << \"Bar value = \" << 2 * value << std::endl;\n", 188 | " }\n", 189 | "};" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": null, 195 | "metadata": {}, 196 | "outputs": [], 197 | "source": [ 198 | "Foo* bar2 = new Bar;\n", 199 | "bar2->print(1.2);\n", 200 | "delete bar2;" 201 | ] 202 | }, 203 | { 204 | "cell_type": "markdown", 205 | "metadata": {}, 206 | "source": [ 207 | "## Templates" 208 | ] 209 | }, 210 | { 211 | "cell_type": "code", 212 | "execution_count": null, 213 | "metadata": {}, 214 | "outputs": [], 215 | "source": [ 216 | "#include \n", 217 | "\n", 218 | "template \n", 219 | "class FooT\n", 220 | "{\n", 221 | "public:\n", 222 | " \n", 223 | " explicit FooT(const T& t) : m_t(t) {}\n", 224 | " \n", 225 | " void print() const\n", 226 | " {\n", 227 | " std::cout << typeid(T).name() << \" m_t = \" << m_t << std::endl;\n", 228 | " }\n", 229 | " \n", 230 | "private:\n", 231 | " \n", 232 | " T m_t;\n", 233 | "};\n", 234 | "\n", 235 | "template <>\n", 236 | "class FooT\n", 237 | "{\n", 238 | "public:\n", 239 | " \n", 240 | " explicit FooT(const int& t) : m_t(t) {}\n", 241 | " \n", 242 | " void print() const\n", 243 | " {\n", 244 | " std::cout << \"m_t = \" << m_t << std::endl;\n", 245 | " }\n", 246 | " \n", 247 | "private:\n", 248 | " \n", 249 | " int m_t;\n", 250 | "};" 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": null, 256 | "metadata": {}, 257 | "outputs": [], 258 | "source": [ 259 | "FooT foot1(1.2);\n", 260 | "foot1.print();" 261 | ] 262 | }, 263 | { 264 | "cell_type": "code", 265 | "execution_count": null, 266 | "metadata": {}, 267 | "outputs": [], 268 | "source": [ 269 | "FooT foot2(4);\n", 270 | "foot2.print();" 271 | ] 272 | }, 273 | { 274 | "cell_type": "markdown", 275 | "metadata": {}, 276 | "source": [ 277 | "## C++11 / C++14 support" 278 | ] 279 | }, 280 | { 281 | "cell_type": "code", 282 | "execution_count": null, 283 | "metadata": {}, 284 | "outputs": [], 285 | "source": [ 286 | "class Foo11\n", 287 | "{\n", 288 | "public:\n", 289 | " \n", 290 | " Foo11() { std::cout << \"Foo11 default constructor\" << std::endl; }\n", 291 | " Foo11(const Foo11&) { std::cout << \"Foo11 copy constructor\" << std::endl; }\n", 292 | " Foo11(Foo11&&) { std::cout << \"Foo11 move constructor\" << std::endl; }\n", 293 | "};" 294 | ] 295 | }, 296 | { 297 | "cell_type": "code", 298 | "execution_count": null, 299 | "metadata": {}, 300 | "outputs": [], 301 | "source": [ 302 | "Foo11 f1;\n", 303 | "Foo11 f2(f1);\n", 304 | "Foo11 f3(std::move(f1));" 305 | ] 306 | }, 307 | { 308 | "cell_type": "code", 309 | "execution_count": null, 310 | "metadata": {}, 311 | "outputs": [], 312 | "source": [ 313 | "#include \n", 314 | "\n", 315 | "std::vector v = { 1, 2, 3};\n", 316 | "auto iter = ++v.begin();\n", 317 | "v" 318 | ] 319 | }, 320 | { 321 | "cell_type": "code", 322 | "execution_count": null, 323 | "metadata": {}, 324 | "outputs": [], 325 | "source": [ 326 | "*iter" 327 | ] 328 | }, 329 | { 330 | "cell_type": "markdown", 331 | "metadata": {}, 332 | "source": [ 333 | "... and also lambda, universal references, `decltype`, etc ..." 334 | ] 335 | }, 336 | { 337 | "cell_type": "markdown", 338 | "metadata": {}, 339 | "source": [ 340 | "## Documentation and completion\n", 341 | "\n", 342 | " - Documentation for types of the standard library is retrieved on cppreference.com.\n", 343 | " - The quick-help feature can also be enabled for user-defined types and third-party libraries. More documentation on this feature is available at https://xeus-cling.readthedocs.io/en/latest/inline_help.html.\n" 344 | ] 345 | }, 346 | { 347 | "cell_type": "code", 348 | "execution_count": null, 349 | "metadata": {}, 350 | "outputs": [], 351 | "source": [ 352 | "?std::vector" 353 | ] 354 | }, 355 | { 356 | "cell_type": "markdown", 357 | "metadata": {}, 358 | "source": [ 359 | "## Using the `display_data` mechanism" 360 | ] 361 | }, 362 | { 363 | "cell_type": "markdown", 364 | "metadata": {}, 365 | "source": [ 366 | "For a user-defined type `T`, the rich rendering in the notebook and JupyterLab can be enabled by by implementing the function `xeus::xjson mime_bundle_repr(const T& im)`, which returns the JSON mime bundle for that type.\n", 367 | "\n", 368 | "More documentation on the rich display system of Jupyter and Xeus-cling is available at https://xeus-cling.readthedocs.io/en/latest/rich_display.html" 369 | ] 370 | }, 371 | { 372 | "cell_type": "markdown", 373 | "metadata": {}, 374 | "source": [ 375 | "### Image example" 376 | ] 377 | }, 378 | { 379 | "cell_type": "code", 380 | "execution_count": null, 381 | "metadata": {}, 382 | "outputs": [], 383 | "source": [ 384 | "#include \n", 385 | "#include \n", 386 | "\n", 387 | "#include \"xtl/xbase64.hpp\"\n", 388 | "#include \"xeus/xjson.hpp\"\n", 389 | "\n", 390 | "namespace im\n", 391 | "{\n", 392 | " struct image\n", 393 | " { \n", 394 | " inline image(const std::string& filename)\n", 395 | " {\n", 396 | " std::ifstream fin(filename, std::ios::binary); \n", 397 | " m_buffer << fin.rdbuf();\n", 398 | " }\n", 399 | " \n", 400 | " std::stringstream m_buffer;\n", 401 | " };\n", 402 | " \n", 403 | " xeus::xjson mime_bundle_repr(const image& i)\n", 404 | " {\n", 405 | " auto bundle = xeus::xjson::object();\n", 406 | " bundle[\"image/png\"] = xtl::base64encode(i.m_buffer.str());\n", 407 | " return bundle;\n", 408 | " }\n", 409 | "}" 410 | ] 411 | }, 412 | { 413 | "cell_type": "code", 414 | "execution_count": null, 415 | "metadata": {}, 416 | "outputs": [], 417 | "source": [ 418 | "im::image marie(\"images/marie.png\");\n", 419 | "marie" 420 | ] 421 | }, 422 | { 423 | "cell_type": "markdown", 424 | "metadata": {}, 425 | "source": [ 426 | "### Audio example" 427 | ] 428 | }, 429 | { 430 | "cell_type": "code", 431 | "execution_count": null, 432 | "metadata": {}, 433 | "outputs": [], 434 | "source": [ 435 | "#include \n", 436 | "#include \n", 437 | "\n", 438 | "#include \"xtl/xbase64.hpp\"\n", 439 | "#include \"xeus/xjson.hpp\"\n", 440 | "\n", 441 | "namespace au\n", 442 | "{\n", 443 | " struct audio\n", 444 | " { \n", 445 | " inline audio(const std::string& filename)\n", 446 | " {\n", 447 | " std::ifstream fin(filename, std::ios::binary); \n", 448 | " m_buffer << fin.rdbuf();\n", 449 | " }\n", 450 | " \n", 451 | " std::stringstream m_buffer;\n", 452 | " };\n", 453 | " \n", 454 | " xeus::xjson mime_bundle_repr(const audio& a)\n", 455 | " {\n", 456 | " auto bundle = xeus::xjson::object();\n", 457 | " bundle[\"text/html\"] =\n", 458 | " std::string(\"\";\n", 461 | " return bundle;\n", 462 | " }\n", 463 | "}" 464 | ] 465 | }, 466 | { 467 | "cell_type": "code", 468 | "execution_count": null, 469 | "metadata": {}, 470 | "outputs": [], 471 | "source": [ 472 | "au::audio drums(\"audio/audio.wav\");\n", 473 | "drums" 474 | ] 475 | }, 476 | { 477 | "cell_type": "markdown", 478 | "metadata": {}, 479 | "source": [ 480 | "### Display" 481 | ] 482 | }, 483 | { 484 | "cell_type": "code", 485 | "execution_count": null, 486 | "metadata": {}, 487 | "outputs": [], 488 | "source": [ 489 | "#include \"xcpp/xdisplay.hpp\"" 490 | ] 491 | }, 492 | { 493 | "cell_type": "code", 494 | "execution_count": null, 495 | "metadata": {}, 496 | "outputs": [], 497 | "source": [ 498 | "xcpp::display(drums);" 499 | ] 500 | }, 501 | { 502 | "cell_type": "markdown", 503 | "metadata": {}, 504 | "source": [ 505 | "### Update-display" 506 | ] 507 | }, 508 | { 509 | "cell_type": "code", 510 | "execution_count": null, 511 | "metadata": {}, 512 | "outputs": [], 513 | "source": [ 514 | "#include \n", 515 | "#include \"xcpp/xdisplay.hpp\"\n", 516 | "\n", 517 | "namespace ht\n", 518 | "{\n", 519 | " struct html\n", 520 | " { \n", 521 | " inline html(const std::string& content)\n", 522 | " {\n", 523 | " m_content = content;\n", 524 | " }\n", 525 | " std::string m_content;\n", 526 | " };\n", 527 | "\n", 528 | " xeus::xjson mime_bundle_repr(const html& a)\n", 529 | " {\n", 530 | " auto bundle = xeus::xjson::object();\n", 531 | " bundle[\"text/html\"] = a.m_content;\n", 532 | " return bundle;\n", 533 | " }\n", 534 | "}\n", 535 | "\n", 536 | "// A red rectangle\n", 537 | "ht::html rect(R\"(\n", 538 | "
\n", 545 | "Original\n", 546 | "
)\");" 547 | ] 548 | }, 549 | { 550 | "cell_type": "code", 551 | "execution_count": null, 552 | "metadata": {}, 553 | "outputs": [], 554 | "source": [ 555 | "xcpp::display(rect, \"some_display_id\");" 556 | ] 557 | }, 558 | { 559 | "cell_type": "code", 560 | "execution_count": null, 561 | "metadata": {}, 562 | "outputs": [], 563 | "source": [ 564 | "// Update the rectangle to be blue\n", 565 | "rect.m_content = R\"(\n", 566 | "
\n", 573 | "Updated\n", 574 | "
)\";\n", 575 | "\n", 576 | "xcpp::display(rect, \"some_display_id\", true);" 577 | ] 578 | }, 579 | { 580 | "cell_type": "markdown", 581 | "metadata": {}, 582 | "source": [ 583 | "## Magics\n", 584 | "\n", 585 | "Magics are special commands for the kernel that are not part of the C++ language.\n", 586 | "\n", 587 | "They are defined with the symbol `%` for a line magic and `%%` for a cell magic.\n", 588 | "\n", 589 | "More documentation for magics is available at https://xeus-cling.readthedocs.io/en/latest/magics.html." 590 | ] 591 | }, 592 | { 593 | "cell_type": "code", 594 | "execution_count": null, 595 | "metadata": {}, 596 | "outputs": [], 597 | "source": [ 598 | "#include \n", 599 | "#include " 600 | ] 601 | }, 602 | { 603 | "cell_type": "code", 604 | "execution_count": null, 605 | "metadata": {}, 606 | "outputs": [], 607 | "source": [ 608 | "std::vector to_shuffle = {1, 2, 3, 4};" 609 | ] 610 | }, 611 | { 612 | "cell_type": "code", 613 | "execution_count": null, 614 | "metadata": {}, 615 | "outputs": [], 616 | "source": [ 617 | "%timeit std::random_shuffle(to_shuffle.begin(), to_shuffle.end());" 618 | ] 619 | }, 620 | { 621 | "cell_type": "markdown", 622 | "metadata": {}, 623 | "source": [ 624 | "## Interactive Widgets\n", 625 | "\n", 626 | "[![xwidgets](images/xwidgets.png)](https://github.com/QuantStack/xwidgets/)\n", 627 | "\n", 628 | "Jupyter interactive widgets are supported in the xeus-based C++ kernel.\n", 629 | "\n", 630 | "- GitHub repository: https://github.com/QuantStack/xwidgets/\n", 631 | "- Online documentation: https://xwidgets.readthedocs.io/" 632 | ] 633 | }, 634 | { 635 | "cell_type": "code", 636 | "execution_count": null, 637 | "metadata": {}, 638 | "outputs": [], 639 | "source": [ 640 | "#include \"xwidgets/xslider.hpp\"\n", 641 | "\n", 642 | "xw::slider slider;\n", 643 | "\n", 644 | "slider" 645 | ] 646 | }, 647 | { 648 | "cell_type": "code", 649 | "execution_count": null, 650 | "metadata": {}, 651 | "outputs": [], 652 | "source": [ 653 | "// changing widget attribute will be reflected by the widget appearance\n", 654 | "\n", 655 | "slider.max = 40;\n", 656 | "slider.style().handle_color = \"blue\";\n", 657 | "slider.orientation = \"vertical\";\n", 658 | "slider.description = \"A slider\";" 659 | ] 660 | }, 661 | { 662 | "cell_type": "markdown", 663 | "metadata": {}, 664 | "source": [ 665 | "A method-chaining syntax allows to initialize widget attributes\n", 666 | "out of order, effictively mimicking keyword arguments." 667 | ] 668 | }, 669 | { 670 | "cell_type": "code", 671 | "execution_count": null, 672 | "metadata": {}, 673 | "outputs": [], 674 | "source": [ 675 | "#include \"xcpp/xdisplay.hpp\"\n", 676 | "\n", 677 | "auto other_slider = xw::slider_generator()\n", 678 | " .min(-1.0)\n", 679 | " .max(1.0)\n", 680 | " .description(\"Another slider\")\n", 681 | " .finalize();\n", 682 | "\n", 683 | "xcpp::display(other_slider);" 684 | ] 685 | }, 686 | { 687 | "cell_type": "markdown", 688 | "metadata": {}, 689 | "source": [ 690 | "Backends for popular Jupyter widgets libraries have been writen for the C++ kernel. For example, the `xleaflet` package is a C++ backend to the `ipyleaflet` Jupyter interactive widget, offering the same functioalities." 691 | ] 692 | }, 693 | { 694 | "cell_type": "code", 695 | "execution_count": null, 696 | "metadata": {}, 697 | "outputs": [], 698 | "source": [ 699 | "#include \"xleaflet/xmap.hpp\"\n", 700 | "#include \"xleaflet/xbasemaps.hpp\"\n", 701 | "#include \"xleaflet/xtile_layer.hpp\"\n", 702 | "#include \"xleaflet/xwms_layer.hpp\"\n", 703 | "#include \"xleaflet/xlayers_control.hpp\"" 704 | ] 705 | }, 706 | { 707 | "cell_type": "code", 708 | "execution_count": null, 709 | "metadata": {}, 710 | "outputs": [], 711 | "source": [ 712 | "// The method chaining syntax applies to all C++ Jupyter interactive widgets.\n", 713 | "\n", 714 | "auto map = xlf::map_generator()\n", 715 | " .center({50, 354})\n", 716 | " .zoom(4)\n", 717 | " .finalize();\n", 718 | "\n", 719 | "map" 720 | ] 721 | }, 722 | { 723 | "cell_type": "markdown", 724 | "metadata": {}, 725 | "source": [ 726 | "Adding a layers control to the map, allowing to toggle layers interactively." 727 | ] 728 | }, 729 | { 730 | "cell_type": "code", 731 | "execution_count": null, 732 | "metadata": {}, 733 | "outputs": [], 734 | "source": [ 735 | "auto nasa_layer = xlf::basemap({\"NASAGIBS\", \"ModisTerraTrueColorCR\"}, \"2018-03-30\");\n", 736 | "map.add_layer(nasa_layer);\n", 737 | "\n", 738 | "auto wms = xlf::wms_layer_generator()\n", 739 | " .url(\"https://demo.boundlessgeo.com/geoserver/ows?\")\n", 740 | " .layers(\"nasa:bluemarble\")\n", 741 | " .name(\"nasa:bluemarble\")\n", 742 | " .finalize();" 743 | ] 744 | }, 745 | { 746 | "cell_type": "code", 747 | "execution_count": null, 748 | "metadata": {}, 749 | "outputs": [], 750 | "source": [ 751 | "map.add_control(xlf::layers_control());" 752 | ] 753 | }, 754 | { 755 | "cell_type": "markdown", 756 | "metadata": {}, 757 | "source": [ 758 | "[![xtensor](images/xtensor.png)](https://github.com/QuantStack/xtensor/)\n", 759 | "\n", 760 | "- GitHub repository: https://github.com/QuantStack/xtensor/\n", 761 | "- Online documentation: https://xtensor.readthedocs.io/\n", 762 | "- NumPy to xtensor cheat sheet: http://xtensor.readthedocs.io/en/latest/numpy.html\n", 763 | "\n", 764 | "`xtensor` is a C++ library for manipulating N-D arrays with an API very similar to that of numpy." 765 | ] 766 | }, 767 | { 768 | "cell_type": "code", 769 | "execution_count": null, 770 | "metadata": {}, 771 | "outputs": [], 772 | "source": [ 773 | "#include \n", 774 | "\n", 775 | "#include \"xtensor/xarray.hpp\"\n", 776 | "#include \"xtensor/xio.hpp\"\n", 777 | "#include \"xtensor/xview.hpp\"\n", 778 | "\n", 779 | "xt::xarray arr1\n", 780 | " {{1.0, 2.0, 3.0},\n", 781 | " {2.0, 5.0, 7.0},\n", 782 | " {2.0, 5.0, 7.0}};\n", 783 | "\n", 784 | "xt::xarray arr2\n", 785 | " {5.0, 6.0, 7.0};\n", 786 | "\n", 787 | "xt::view(arr1, 1) + arr2" 788 | ] 789 | }, 790 | { 791 | "cell_type": "markdown", 792 | "metadata": {}, 793 | "source": [ 794 | "Together with the C++ Jupyter kernel, `xtensor` offers a similar experience as `NumPy` in the Python Jupyter kernel, including broadcasting and universal functions." 795 | ] 796 | }, 797 | { 798 | "cell_type": "code", 799 | "execution_count": null, 800 | "metadata": {}, 801 | "outputs": [], 802 | "source": [ 803 | "#include \n", 804 | "#include \"xtensor/xarray.hpp\"\n", 805 | "#include \"xtensor/xio.hpp\"" 806 | ] 807 | }, 808 | { 809 | "cell_type": "code", 810 | "execution_count": null, 811 | "metadata": {}, 812 | "outputs": [], 813 | "source": [ 814 | "xt::xarray arr\n", 815 | " {1, 2, 3, 4, 5, 6, 7, 8, 9};\n", 816 | "\n", 817 | "arr.reshape({3, 3});\n", 818 | "\n", 819 | "std::cout << arr;" 820 | ] 821 | }, 822 | { 823 | "cell_type": "code", 824 | "execution_count": null, 825 | "metadata": {}, 826 | "outputs": [], 827 | "source": [ 828 | "#include \"xtensor-blas/xlinalg.hpp\"" 829 | ] 830 | }, 831 | { 832 | "cell_type": "code", 833 | "execution_count": null, 834 | "metadata": {}, 835 | "outputs": [], 836 | "source": [ 837 | "xt::xtensor m = {{1.5, 0.5}, {0.7, 1.0}};\n", 838 | "std::cout << \"Matrix rank: \" << std::endl << xt::linalg::matrix_rank(m) << std::endl;\n", 839 | "std::cout << \"Matrix inverse: \" << std::endl << xt::linalg::inv(m) << std::endl;\n", 840 | "std::cout << \"Eigen values: \" << std::endl << xt::linalg::eigvals(m) << std::endl;" 841 | ] 842 | }, 843 | { 844 | "cell_type": "code", 845 | "execution_count": null, 846 | "metadata": {}, 847 | "outputs": [], 848 | "source": [ 849 | "xt::xarray arg1 = xt::arange(9);\n", 850 | "xt::xarray arg2 = xt::arange(18);\n", 851 | "\n", 852 | "arg1.reshape({3, 3});\n", 853 | "arg2.reshape({2, 3, 3});\n", 854 | "\n", 855 | "std::cout << xt::linalg::dot(arg1, arg2) << std::endl;" 856 | ] 857 | }, 858 | { 859 | "cell_type": "code", 860 | "execution_count": null, 861 | "metadata": {}, 862 | "outputs": [], 863 | "source": [] 864 | } 865 | ], 866 | "metadata": { 867 | "kernelspec": { 868 | "display_name": "C++14", 869 | "language": "C++14", 870 | "name": "xeus-cling-cpp14" 871 | }, 872 | "language_info": { 873 | "codemirror_mode": "text/x-c++src", 874 | "file_extension": ".cpp", 875 | "mimetype": "text/x-c++src", 876 | "name": "c++", 877 | "version": "-std=c++14" 878 | } 879 | }, 880 | "nbformat": 4, 881 | "nbformat_minor": 2 882 | } 883 | -------------------------------------------------------------------------------- /notebooks/Data.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Open a CSV file using Pandas" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 4, 13 | "metadata": {}, 14 | "outputs": [ 15 | { 16 | "data": { 17 | "text/html": [ 18 | "
\n", 19 | "\n", 32 | "\n", 33 | " \n", 34 | " \n", 35 | " \n", 36 | " \n", 37 | " \n", 38 | " \n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2se
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa
55.43.91.70.4setosa
64.63.41.40.3setosa
75.03.41.50.2setosa
84.42.91.40.2setosa
94.93.11.50.1setosa
105.43.71.50.2setosa
114.83.41.60.2setosa
124.83.01.40.1setosa
134.33.01.10.1setosa
145.84.01.20.2setosa
155.74.41.50.4setosa
165.43.91.30.4setosa
175.13.51.40.3setosa
185.73.81.70.3setosa
195.13.81.50.3setosa
\n", 206 | "
" 207 | ], 208 | "text/plain": [ 209 | " sepal_length sepal_width petal_length petal_width species\n", 210 | "0 5.1 3.5 1.4 0.2 se\n", 211 | "1 4.9 3.0 1.4 0.2 setosa\n", 212 | "2 4.7 3.2 1.3 0.2 setosa\n", 213 | "3 4.6 3.1 1.5 0.2 setosa\n", 214 | "4 5.0 3.6 1.4 0.2 setosa\n", 215 | "5 5.4 3.9 1.7 0.4 setosa\n", 216 | "6 4.6 3.4 1.4 0.3 setosa\n", 217 | "7 5.0 3.4 1.5 0.2 setosa\n", 218 | "8 4.4 2.9 1.4 0.2 setosa\n", 219 | "9 4.9 3.1 1.5 0.1 setosa\n", 220 | "10 5.4 3.7 1.5 0.2 setosa\n", 221 | "11 4.8 3.4 1.6 0.2 setosa\n", 222 | "12 4.8 3.0 1.4 0.1 setosa\n", 223 | "13 4.3 3.0 1.1 0.1 setosa\n", 224 | "14 5.8 4.0 1.2 0.2 setosa\n", 225 | "15 5.7 4.4 1.5 0.4 setosa\n", 226 | "16 5.4 3.9 1.3 0.4 setosa\n", 227 | "17 5.1 3.5 1.4 0.3 setosa\n", 228 | "18 5.7 3.8 1.7 0.3 setosa\n", 229 | "19 5.1 3.8 1.5 0.3 setosa" 230 | ] 231 | }, 232 | "execution_count": 4, 233 | "metadata": {}, 234 | "output_type": "execute_result" 235 | } 236 | ], 237 | "source": [ 238 | "import pandas\n", 239 | "df = pandas.read_csv('../data/iris.csv')\n", 240 | "df.head(20)" 241 | ] 242 | }, 243 | { 244 | "cell_type": "markdown", 245 | "metadata": {}, 246 | "source": [ 247 | "## Read a GeoJSON file" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": 2, 253 | "metadata": {}, 254 | "outputs": [], 255 | "source": [ 256 | "import json\n", 257 | "\n", 258 | "with open('../data/Museums_in_DC.geojson') as f:\n", 259 | " s = json.loads(f.read())" 260 | ] 261 | }, 262 | { 263 | "cell_type": "code", 264 | "execution_count": 3, 265 | "metadata": {}, 266 | "outputs": [ 267 | { 268 | "data": { 269 | "text/plain": [ 270 | "{'type': 'FeatureCollection',\n", 271 | " 'features': [{'type': 'Feature',\n", 272 | " 'properties': {'OBJECTID': 1,\n", 273 | " 'ADDRESS': '716 MONROE STREET NE',\n", 274 | " 'NAME': 'AMERICAN POETRY MUSEUM',\n", 275 | " 'ADDRESS_ID': 309744,\n", 276 | " 'LEGALNAME': 'HERITAGE US',\n", 277 | " 'ALTNAME': 'AMERICAN POETRY MUSEUM',\n", 278 | " 'WEBURL': ' http://americanpoetrymuseum.org/'},\n", 279 | " 'geometry': {'type': 'Point',\n", 280 | " 'coordinates': [-76.995003703568, 38.9328428790235]}},\n", 281 | " {'type': 'Feature',\n", 282 | " 'properties': {'OBJECTID': 2,\n", 283 | " 'ADDRESS': '719 6TH STREET NW',\n", 284 | " 'NAME': 'GERMAN-AMERICAN HERITAGE MUSEUM',\n", 285 | " 'ADDRESS_ID': 238949,\n", 286 | " 'LEGALNAME': 'CORCORAN GALLERY OF ART',\n", 287 | " 'ALTNAME': ' ',\n", 288 | " 'WEBURL': 'http://gahmusa.org/'},\n", 289 | " 'geometry': {'type': 'Point',\n", 290 | " 'coordinates': [-77.01958878310639, 38.89911061096782]}},\n", 291 | " {'type': 'Feature',\n", 292 | " 'properties': {'OBJECTID': 3,\n", 293 | " 'ADDRESS': '1307 NEW HAMPSHIRE AVENUE NW',\n", 294 | " 'NAME': 'HEURICH HOUSE FOUNDATION',\n", 295 | " 'ADDRESS_ID': 241060,\n", 296 | " 'LEGALNAME': 'U.S. DEPARTMENT OF THE INTERIOR MUSEUM',\n", 297 | " 'ALTNAME': 'HEURICH HOUSE FOUNDATION',\n", 298 | " 'WEBURL': 'HTTP://HEURICHHOUSE.ORG'},\n", 299 | " 'geometry': {'type': 'Point',\n", 300 | " 'coordinates': [-77.04460619923155, 38.908030206509885]}},\n", 301 | " {'type': 'Feature',\n", 302 | " 'properties': {'OBJECTID': 4,\n", 303 | " 'ADDRESS': '950 INDEPENDENCE AVENUE SW',\n", 304 | " 'NAME': 'NATIONAL MUSEUM OF AFRICAN ART',\n", 305 | " 'ADDRESS_ID': 293262,\n", 306 | " 'LEGALNAME': 'BUILDING PRESERVATION FOUNDATION',\n", 307 | " 'ALTNAME': 'NATIONAL MUSEUM OF AFRICAN ART',\n", 308 | " 'WEBURL': 'HTTP://AFRICA.SI.EDU/'},\n", 309 | " 'geometry': {'type': 'Point',\n", 310 | " 'coordinates': [-77.02550917725944, 38.88796214949963]}},\n", 311 | " {'type': 'Feature',\n", 312 | " 'properties': {'OBJECTID': 5,\n", 313 | " 'ADDRESS': '740 JACKSON PLACE NW',\n", 314 | " 'NAME': 'THE WHITE HOUSE ENDOWMENT TRUST',\n", 315 | " 'ADDRESS_ID': 218748,\n", 316 | " 'LEGALNAME': 'NATIONAL BUILDING MUSEUM',\n", 317 | " 'ALTNAME': 'THE WHITE HOUSE ENDOWMENT TRUST',\n", 318 | " 'WEBURL': 'HTTP://WWW.WHITEHOUSEHISTORY.ORG'},\n", 319 | " 'geometry': {'type': 'Point',\n", 320 | " 'coordinates': [-77.03820629325264, 38.899842529027275]}},\n", 321 | " {'type': 'Feature',\n", 322 | " 'properties': {'OBJECTID': 6,\n", 323 | " 'ADDRESS': '921 PENNSYLVANIA AVENUE SE',\n", 324 | " 'NAME': 'OLD NAVAL HOSPITAL FOUNDATION',\n", 325 | " 'ADDRESS_ID': 82564,\n", 326 | " 'LEGALNAME': 'JEWISH WAR VETERANS NATIONAL MEMORIAL MUSEUM ARCHIVES AND LI',\n", 327 | " 'ALTNAME': 'OLD NAVAL HOSPITAL FOUNDATION',\n", 328 | " 'WEBURL': 'http://hillcenterdc.org/home/'},\n", 329 | " 'geometry': {'type': 'Point',\n", 330 | " 'coordinates': [-76.99314290714912, 38.8829885933721]}},\n", 331 | " {'type': 'Feature',\n", 332 | " 'properties': {'OBJECTID': 7,\n", 333 | " 'ADDRESS': '2201 C STREET NW',\n", 334 | " 'NAME': 'DIPLOMATIC ROOMS FOUNDATION',\n", 335 | " 'ADDRESS_ID': 243360,\n", 336 | " 'LEGALNAME': 'NATIONAL PLASTICS MUSEUM INC',\n", 337 | " 'ALTNAME': 'DIPLOMATIC ROOMS FOUNDATION',\n", 338 | " 'WEBURL': 'https://diplomaticrooms.state.gov/home.aspx'},\n", 339 | " 'geometry': {'type': 'Point',\n", 340 | " 'coordinates': [-77.04831079505838, 38.894135140073566]}},\n", 341 | " {'type': 'Feature',\n", 342 | " 'properties': {'OBJECTID': 8,\n", 343 | " 'ADDRESS': '4400 MASSACHUSETTS AVENUE NW',\n", 344 | " 'NAME': 'AMERICAN UNIVERSITY MUSEUM AT THE KATZEN ARTS CENTER',\n", 345 | " 'ADDRESS_ID': 223994,\n", 346 | " 'LEGALNAME': 'VERNISSAGE FOUNDATION',\n", 347 | " 'ALTNAME': 'AMERICAN UNIVERSITY MUSEUM AT THE KATZEN ARTS CENTER',\n", 348 | " 'WEBURL': 'HTTP://WWW.AMERICAN.EDU/CAS/MUSEUM/'},\n", 349 | " 'geometry': {'type': 'Point',\n", 350 | " 'coordinates': [-77.08841712551974, 38.9390892139132]}},\n", 351 | " {'type': 'Feature',\n", 352 | " 'properties': {'OBJECTID': 9,\n", 353 | " 'ADDRESS': '2320 S STREET NW',\n", 354 | " 'NAME': 'TEXTILE MUSEUM',\n", 355 | " 'ADDRESS_ID': 243164,\n", 356 | " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, S. DILLON RIPLEY CENTER',\n", 357 | " 'ALTNAME': 'TEXTILE MUSEUM',\n", 358 | " 'WEBURL': 'HTTP://WWW.TEXTILEMUSEUM.ORG'},\n", 359 | " 'geometry': {'type': 'Point',\n", 360 | " 'coordinates': [-77.0464284034822, 38.89880233850966]}},\n", 361 | " {'type': 'Feature',\n", 362 | " 'properties': {'OBJECTID': 10,\n", 363 | " 'ADDRESS': '1145 17TH STREET NW',\n", 364 | " 'NAME': 'NATIONAL GEOGRAPHIC MUSEUM',\n", 365 | " 'ADDRESS_ID': 290192,\n", 366 | " 'LEGALNAME': 'CAPITOL HILL RESTORATION SOCIETY INC',\n", 367 | " 'ALTNAME': ' ',\n", 368 | " 'WEBURL': 'HTTP://WWW.NATIONALGEOGRAPHIC.COM'},\n", 369 | " 'geometry': {'type': 'Point',\n", 370 | " 'coordinates': [-77.03815544194862, 38.90519711304962]}},\n", 371 | " {'type': 'Feature',\n", 372 | " 'properties': {'OBJECTID': 11,\n", 373 | " 'ADDRESS': '3501 NEW YORK AVENUE NE',\n", 374 | " 'NAME': 'THE NATIONAL BONSAI & PENJING MUSEUM',\n", 375 | " 'ADDRESS_ID': 293238,\n", 376 | " 'LEGALNAME': 'NATIONAL BONSAI FOUNDATION',\n", 377 | " 'ALTNAME': ' ',\n", 378 | " 'WEBURL': 'https://www.bonsai-nbf.org/contact-us/'},\n", 379 | " 'geometry': {'type': 'Point',\n", 380 | " 'coordinates': [-76.96989266812075, 38.91241055669072]}},\n", 381 | " {'type': 'Feature',\n", 382 | " 'properties': {'OBJECTID': 12,\n", 383 | " 'ADDRESS': '2020 O STREET NW',\n", 384 | " 'NAME': 'O STREET MUSEUM',\n", 385 | " 'ADDRESS_ID': 243057,\n", 386 | " 'LEGALNAME': 'LEPIDOPTERISTS SOCIETY',\n", 387 | " 'ALTNAME': ' ',\n", 388 | " 'WEBURL': 'http://www.omuseum.org/museum/'},\n", 389 | " 'geometry': {'type': 'Point',\n", 390 | " 'coordinates': [-77.04592748104784, 38.90839101941751]}},\n", 391 | " {'type': 'Feature',\n", 392 | " 'properties': {'OBJECTID': 13,\n", 393 | " 'ADDRESS': '2101 CONSTITUTION AVENUE NW',\n", 394 | " 'NAME': 'NATIONAL ACADEMY OF SCIENCES',\n", 395 | " 'ADDRESS_ID': 242716,\n", 396 | " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, NATURAL HISTORY MUSEUM',\n", 397 | " 'ALTNAME': 'NATIONAL ACADEMY OF SCIENCES',\n", 398 | " 'WEBURL': 'WWW.NATIONALACADEMIES.ORG/NAS/ARTS'},\n", 399 | " 'geometry': {'type': 'Point',\n", 400 | " 'coordinates': [-77.0476448925699, 38.89296693766957]}},\n", 401 | " {'type': 'Feature',\n", 402 | " 'properties': {'OBJECTID': 14,\n", 403 | " 'ADDRESS': '2401 FOXHALL ROAD NW',\n", 404 | " 'NAME': 'KREEGER MUSEUM',\n", 405 | " 'ADDRESS_ID': 271251,\n", 406 | " 'LEGALNAME': 'CONGRESSIONAL CEMETERY',\n", 407 | " 'ALTNAME': 'KREEGER MUSEUM',\n", 408 | " 'WEBURL': 'HTTP://WWW.KREEGERMUSEUM.ORG/'},\n", 409 | " 'geometry': {'type': 'Point',\n", 410 | " 'coordinates': [-77.08878098790044, 38.92191197499568]}},\n", 411 | " {'type': 'Feature',\n", 412 | " 'properties': {'OBJECTID': 15,\n", 413 | " 'ADDRESS': '1250 NEW YORK AVENUE NW',\n", 414 | " 'NAME': 'THE NATIONAL MUSEUM OF WOMEN IN THE ART',\n", 415 | " 'ADDRESS_ID': 279010,\n", 416 | " 'LEGALNAME': 'NATIONAL MUSEUM OF HEALTH AND MEDICINE',\n", 417 | " 'ALTNAME': 'THE NATIONAL MUSEUM OF WOMEN IN THE ART',\n", 418 | " 'WEBURL': 'HTTP://WWW.NMWA.ORG'},\n", 419 | " 'geometry': {'type': 'Point',\n", 420 | " 'coordinates': [-77.029163689541, 38.90005647268176]}},\n", 421 | " {'type': 'Feature',\n", 422 | " 'properties': {'OBJECTID': 16,\n", 423 | " 'ADDRESS': '900 JEFFERSON DRIVE SW',\n", 424 | " 'NAME': 'ARTS AND INDUSTRIES BUILDING',\n", 425 | " 'ADDRESS_ID': 293260,\n", 426 | " 'LEGALNAME': 'ANACOSTIA COMMUNITY MUSEUM',\n", 427 | " 'ALTNAME': ' ',\n", 428 | " 'WEBURL': 'http://www.si.edu/Museums/arts-and-industries-building'},\n", 429 | " 'geometry': {'type': 'Point',\n", 430 | " 'coordinates': [-77.02446647929001, 38.888201004559114]}},\n", 431 | " {'type': 'Feature',\n", 432 | " 'properties': {'OBJECTID': 17,\n", 433 | " 'ADDRESS': '736 SICARD STREET SE',\n", 434 | " 'NAME': 'NATIONAL MUSEUM OF UNITED STATES NAVY',\n", 435 | " 'ADDRESS_ID': 311896,\n", 436 | " 'LEGALNAME': 'BLACK SPORTS LEGENDS FOUNDATION',\n", 437 | " 'ALTNAME': 'NATIONAL MUSEUM OF UNITED STATES NAVY',\n", 438 | " 'WEBURL': 'http://www.history.navy.mil/museums/NationalMuseum/org8-1.htm'},\n", 439 | " 'geometry': {'type': 'Point',\n", 440 | " 'coordinates': [-76.99526950368147, 38.87303084860059]}},\n", 441 | " {'type': 'Feature',\n", 442 | " 'properties': {'OBJECTID': 18,\n", 443 | " 'ADDRESS': '500 17TH STREET NW',\n", 444 | " 'NAME': 'CORCORAN GALLERY OF ART',\n", 445 | " 'ADDRESS_ID': 279802,\n", 446 | " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, NATIONAL ZOOLOGICAL PARK',\n", 447 | " 'ALTNAME': 'CORCORAN GALLERY OF ART',\n", 448 | " 'WEBURL': 'http://www.corcoran.org/'},\n", 449 | " 'geometry': {'type': 'Point',\n", 450 | " 'coordinates': [-77.0397427304576, 38.895854463821884]}},\n", 451 | " {'type': 'Feature',\n", 452 | " 'properties': {'OBJECTID': 19,\n", 453 | " 'ADDRESS': '2017 I STREET NW',\n", 454 | " 'NAME': 'THE ARTS CLUB OF WASHINGTON',\n", 455 | " 'ADDRESS_ID': 285527,\n", 456 | " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE',\n", 457 | " 'ALTNAME': 'THE ARTS CLUB OF WASHINGTON',\n", 458 | " 'WEBURL': 'HTTP://WWW.ARTSCLUBOFWASHINGTON.ORG'},\n", 459 | " 'geometry': {'type': 'Point',\n", 460 | " 'coordinates': [-77.04573426864144, 38.90157618582308]}},\n", 461 | " {'type': 'Feature',\n", 462 | " 'properties': {'OBJECTID': 20,\n", 463 | " 'ADDRESS': '701 3RD STREET NW',\n", 464 | " 'NAME': 'LILLIAN AND ALBERT SMALL JEWISH MUSEUM',\n", 465 | " 'ADDRESS_ID': 293253,\n", 466 | " 'LEGALNAME': 'LILLIAN AND ALBERT SMALL JEWISH MUSEUM',\n", 467 | " 'ALTNAME': ' ',\n", 468 | " 'WEBURL': 'http://www.jhsgw.org/'},\n", 469 | " 'geometry': {'type': 'Point',\n", 470 | " 'coordinates': [-77.01493675564363, 38.89857205791096]}},\n", 471 | " {'type': 'Feature',\n", 472 | " 'properties': {'OBJECTID': 21,\n", 473 | " 'ADDRESS': '320 A STREET NE',\n", 474 | " 'NAME': 'FREDERICK DOUGLASS MUSEUM',\n", 475 | " 'ADDRESS_ID': 38979,\n", 476 | " 'LEGALNAME': 'COSMOS CLUB HISTORIC PRESERVATION FOUNDATION',\n", 477 | " 'ALTNAME': ' ',\n", 478 | " 'WEBURL': 'http://www3.nahc.org/fd/'},\n", 479 | " 'geometry': {'type': 'Point',\n", 480 | " 'coordinates': [-77.00110470253333, 38.891131915241964]}},\n", 481 | " {'type': 'Feature',\n", 482 | " 'properties': {'OBJECTID': 22,\n", 483 | " 'ADDRESS': '1334 G STREET NW',\n", 484 | " 'NAME': 'ARMENIAN GENOCIDE MUSEUM AND MEMORIAL',\n", 485 | " 'ADDRESS_ID': 240658,\n", 486 | " 'LEGALNAME': 'GERMAN-AMERICAN HERITAGE MUSEUM',\n", 487 | " 'ALTNAME': 'ARMENIAN GENOCIDE MUSEUM AND MEMORIAL',\n", 488 | " 'WEBURL': 'http://www.armeniangenocidemuseum.org/'},\n", 489 | " 'geometry': {'type': 'Point',\n", 490 | " 'coordinates': [-77.03108432435003, 38.89804891426683]}},\n", 491 | " {'type': 'Feature',\n", 492 | " 'properties': {'OBJECTID': 23,\n", 493 | " 'ADDRESS': '1799 NEW YORK AVENUE NW',\n", 494 | " 'NAME': 'OCTAGON MUSEUM',\n", 495 | " 'ADDRESS_ID': 218490,\n", 496 | " 'LEGALNAME': 'AMERICAN RED CROSS MUSEUM',\n", 497 | " 'ALTNAME': ' ',\n", 498 | " 'WEBURL': 'HTTP://WWW.THEOCTAGON.ORG'},\n", 499 | " 'geometry': {'type': 'Point',\n", 500 | " 'coordinates': [-77.04141820048949, 38.89635375607101]}},\n", 501 | " {'type': 'Feature',\n", 502 | " 'properties': {'OBJECTID': 24,\n", 503 | " 'ADDRESS': '1901 FORT PLACE SE',\n", 504 | " 'NAME': 'ANACOSTIA COMMUNITY MUSEUM',\n", 505 | " 'ADDRESS_ID': 286524,\n", 506 | " 'LEGALNAME': 'FAUNA & FLORA INTERNATIONAL INC',\n", 507 | " 'ALTNAME': 'ANACOSTIA COMMUNITY MUSEUM',\n", 508 | " 'WEBURL': 'HTTP://ANACOSTIA.SI.EDU'},\n", 509 | " 'geometry': {'type': 'Point',\n", 510 | " 'coordinates': [-76.97678467186984, 38.8565826636904]}},\n", 511 | " {'type': 'Feature',\n", 512 | " 'properties': {'OBJECTID': 25,\n", 513 | " 'ADDRESS': '2312 CALIFORNIA STREET NW',\n", 514 | " 'NAME': 'NATIONAL MUSEUM OF THE JEWISH PEOPLE',\n", 515 | " 'ADDRESS_ID': 234961,\n", 516 | " 'LEGALNAME': 'GREENSEED COMMUNITY GARDEN LAND TRUST',\n", 517 | " 'ALTNAME': ' ',\n", 518 | " 'WEBURL': 'http://www.nsideas.com/archive/nmjh/'},\n", 519 | " 'geometry': {'type': 'Point',\n", 520 | " 'coordinates': [-77.05118108814123, 38.91537084189858]}},\n", 521 | " {'type': 'Feature',\n", 522 | " 'properties': {'OBJECTID': 26,\n", 523 | " 'ADDRESS': '430 17TH STREET NW',\n", 524 | " 'NAME': 'AMERICAN RED CROSS MUSEUM',\n", 525 | " 'ADDRESS_ID': 300987,\n", 526 | " 'LEGALNAME': 'DOUBLE M MANAGEMENT',\n", 527 | " 'ALTNAME': 'AMERICAN RED CROSS MUSEUM',\n", 528 | " 'WEBURL': 'http://www.redcross.org/'},\n", 529 | " 'geometry': {'type': 'Point',\n", 530 | " 'coordinates': [-77.04020705622152, 38.89482654014118]}},\n", 531 | " {'type': 'Feature',\n", 532 | " 'properties': {'OBJECTID': 27,\n", 533 | " 'ADDRESS': '1600 21ST STREET NW',\n", 534 | " 'NAME': 'THE PHILLIPS COLLECTION',\n", 535 | " 'ADDRESS_ID': 243333,\n", 536 | " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, RENWICK GALLERY',\n", 537 | " 'ALTNAME': 'THE PHILLIPS COLLECTION',\n", 538 | " 'WEBURL': 'HTTP://WWW.PHILLIPSCOLLECTION.ORG'},\n", 539 | " 'geometry': {'type': 'Point',\n", 540 | " 'coordinates': [-77.04685454590388, 38.91150979086159]}},\n", 541 | " {'type': 'Feature',\n", 542 | " 'properties': {'OBJECTID': 28,\n", 543 | " 'ADDRESS': '800 F STREET NW',\n", 544 | " 'NAME': 'INTERNATIONAL SPY MUSEUM',\n", 545 | " 'ADDRESS_ID': 238378,\n", 546 | " 'LEGALNAME': 'CONFEDERATE MEMORIAL HALL ASSOCIATION',\n", 547 | " 'ALTNAME': 'INTERNATIONAL SPY MUSEUM',\n", 548 | " 'WEBURL': 'HTTP://WWW.SPYMUSEUM.ORG/'},\n", 549 | " 'geometry': {'type': 'Point',\n", 550 | " 'coordinates': [-77.02328618491306, 38.896986480912865]}},\n", 551 | " {'type': 'Feature',\n", 552 | " 'properties': {'OBJECTID': 29,\n", 553 | " 'ADDRESS': '100 RAOUL WALLENBERG PLACE SW',\n", 554 | " 'NAME': 'UNITED STATES HOLOCAUST MEMORIAL MUSEUM',\n", 555 | " 'ADDRESS_ID': 293186,\n", 556 | " 'LEGALNAME': 'NATIONAL MUSIC CENTER AND MUSEUM FOUNDATION',\n", 557 | " 'ALTNAME': 'UNITED STATES HOLOCAUST MEMORIAL MUSEUM',\n", 558 | " 'WEBURL': 'HTTP://WWW.USHMM.ORG'},\n", 559 | " 'geometry': {'type': 'Point',\n", 560 | " 'coordinates': [-77.03268853739414, 38.88668873773371]}},\n", 561 | " {'type': 'Feature',\n", 562 | " 'properties': {'OBJECTID': 30,\n", 563 | " 'ADDRESS': '801 K STREET NW',\n", 564 | " 'NAME': 'HISTORICAL SOCIETY OF WASHINGTON DC',\n", 565 | " 'ADDRESS_ID': 238956,\n", 566 | " 'LEGALNAME': 'Historical Society of Washington, D.C',\n", 567 | " 'ALTNAME': ' ',\n", 568 | " 'WEBURL': 'http://www.dchistory.org/'},\n", 569 | " 'geometry': {'type': 'Point',\n", 570 | " 'coordinates': [-77.02294505078932, 38.90262956584554]}},\n", 571 | " {'type': 'Feature',\n", 572 | " 'properties': {'OBJECTID': 31,\n", 573 | " 'ADDRESS': '1849 C STREET NW',\n", 574 | " 'NAME': 'INTERIOR MUSEUM',\n", 575 | " 'ADDRESS_ID': 293214,\n", 576 | " 'LEGALNAME': 'VICE PRESIDENTS RESIDENCE FOUNDATION',\n", 577 | " 'ALTNAME': 'INTERIOR MUSEUM',\n", 578 | " 'WEBURL': 'HTTP://WWW.DOI.GOV/INTERIORMUSEUM'},\n", 579 | " 'geometry': {'type': 'Point',\n", 580 | " 'coordinates': [-77.04260256434321, 38.89445283458921]}},\n", 581 | " {'type': 'Feature',\n", 582 | " 'properties': {'OBJECTID': 32,\n", 583 | " 'ADDRESS': '4155 LINNEAN AVENUE NW',\n", 584 | " 'NAME': 'HILLWOOD MUSEUM & GARDENS',\n", 585 | " 'ADDRESS_ID': 284839,\n", 586 | " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, NATIONAL GALLERY OF ART',\n", 587 | " 'ALTNAME': 'HILLWOOD MUSEUM & GARDENS',\n", 588 | " 'WEBURL': 'WWW.HILLWOODMUSEUM.ORG'},\n", 589 | " 'geometry': {'type': 'Point',\n", 590 | " 'coordinates': [-77.0526196505072, 38.94364171194315]}},\n", 591 | " {'type': 'Feature',\n", 592 | " 'properties': {'OBJECTID': 33,\n", 593 | " 'ADDRESS': '1318 VERMONT AVENUE NW',\n", 594 | " 'NAME': 'BETHUNE MEMORIAL MUSEUM',\n", 595 | " 'ADDRESS_ID': 225385,\n", 596 | " 'LEGALNAME': 'NATIONAL MUSEUM OF WOMEN IN THE ARTS INC',\n", 597 | " 'ALTNAME': ' ',\n", 598 | " 'WEBURL': 'http://www.nps.gov/mamc/index.htm'},\n", 599 | " 'geometry': {'type': 'Point',\n", 600 | " 'coordinates': [-77.03086564182146, 38.90817580546652]}},\n", 601 | " {'type': 'Feature',\n", 602 | " 'properties': {'OBJECTID': 34,\n", 603 | " 'ADDRESS': '1500 MASSACHUSETTS AVENUE NW',\n", 604 | " 'NAME': 'NATIONAL MUSEUM OF CATHOLIC ART AND LIBRARY',\n", 605 | " 'ADDRESS_ID': 242324,\n", 606 | " 'LEGALNAME': 'KREEGER MUSEUM',\n", 607 | " 'ALTNAME': ' ',\n", 608 | " 'WEBURL': 'http://nmcal.org/nmcah_exhibition_in_washington.html'},\n", 609 | " 'geometry': {'type': 'Point',\n", 610 | " 'coordinates': [-77.03551120800971, 38.90651019329394]}},\n", 611 | " {'type': 'Feature',\n", 612 | " 'properties': {'OBJECTID': 35,\n", 613 | " 'ADDRESS': '1 MASSACHUSETTS AVENUE NW',\n", 614 | " 'NAME': 'NATIONAL GUARD MEMORIAL MUSEUM',\n", 615 | " 'ADDRESS_ID': 238009,\n", 616 | " 'LEGALNAME': 'CARL SCHMITT FOUNDATION INC',\n", 617 | " 'ALTNAME': ' ',\n", 618 | " 'WEBURL': 'HTTP://WWW.NGEF.ORG'},\n", 619 | " 'geometry': {'type': 'Point',\n", 620 | " 'coordinates': [-77.00956143652462, 38.89812580681995]}},\n", 621 | " {'type': 'Feature',\n", 622 | " 'properties': {'OBJECTID': 36,\n", 623 | " 'ADDRESS': '1811 R STREET NW',\n", 624 | " 'NAME': 'NATIONAL MUSEUM OF AMERICAN JEWISH MILITARY HISTORY',\n", 625 | " 'ADDRESS_ID': 243292,\n", 626 | " 'LEGALNAME': 'CITY TAVERN PRESERVATION FOUNDATION',\n", 627 | " 'ALTNAME': 'JEWISH WAR VETERANS NATIONAL MEMORIAL MUSEUM ARCHIVES AND LIBRARY',\n", 628 | " 'WEBURL': 'http://www.nmajmh.org/'},\n", 629 | " 'geometry': {'type': 'Point',\n", 630 | " 'coordinates': [-77.04211577477285, 38.91282059721026]}},\n", 631 | " {'type': 'Feature',\n", 632 | " 'properties': {'OBJECTID': 37,\n", 633 | " 'ADDRESS': '3900 HAREWOOD ROAD NE',\n", 634 | " 'NAME': 'POPE JOHN PAUL II CULTURAL CENTER',\n", 635 | " 'ADDRESS_ID': 288031,\n", 636 | " 'LEGALNAME': 'AMERICAN POETRY MUSEUM',\n", 637 | " 'ALTNAME': ' ',\n", 638 | " 'WEBURL': 'HTTP://WWW.JP2CC.ORG'},\n", 639 | " 'geometry': {'type': 'Point',\n", 640 | " 'coordinates': [-77.00466710351098, 38.93776654366721]}},\n", 641 | " {'type': 'Feature',\n", 642 | " 'properties': {'OBJECTID': 38,\n", 643 | " 'ADDRESS': '700 PENNSYLVANIA AVENUE NW',\n", 644 | " 'NAME': 'NATIONAL ARCHIVES MUSEUM',\n", 645 | " 'ADDRESS_ID': 293251,\n", 646 | " 'LEGALNAME': 'PHILLIPS COLLECTION',\n", 647 | " 'ALTNAME': 'NATIONAL ARCHIVES MUSEUM',\n", 648 | " 'WEBURL': 'https://www.archives.gov/dc-metro/washington/'},\n", 649 | " 'geometry': {'type': 'Point',\n", 650 | " 'coordinates': [-77.0228592459719, 38.89285370583677]}},\n", 651 | " {'type': 'Feature',\n", 652 | " 'properties': {'OBJECTID': 39,\n", 653 | " 'ADDRESS': '201 18TH STREET NW',\n", 654 | " 'NAME': 'ART MUSEUM OF THE AMERICAS',\n", 655 | " 'ADDRESS_ID': 294191,\n", 656 | " 'LEGALNAME': 'Art Museum of the Americas',\n", 657 | " 'ALTNAME': ' ',\n", 658 | " 'WEBURL': 'http://www.museum.oas.org/'},\n", 659 | " 'geometry': {'type': 'Point',\n", 660 | " 'coordinates': [-77.04147388756545, 38.892799844291474]}},\n", 661 | " {'type': 'Feature',\n", 662 | " 'properties': {'OBJECTID': 40,\n", 663 | " 'ADDRESS': '9 HILLYER COURT NW',\n", 664 | " 'NAME': 'INTERNATIONAL ARTS & ARTISTS',\n", 665 | " 'ADDRESS_ID': 279975,\n", 666 | " 'LEGALNAME': 'THE INTERNATIONAL SPY MUSEUM',\n", 667 | " 'ALTNAME': 'INTERNATIONAL ARTS & ARTISTS',\n", 668 | " 'WEBURL': 'WWW.ARTSANDARTISTS.ORG'},\n", 669 | " 'geometry': {'type': 'Point',\n", 670 | " 'coordinates': [-77.04730884101534, 38.91222144699389]}},\n", 671 | " {'type': 'Feature',\n", 672 | " 'properties': {'OBJECTID': 41,\n", 673 | " 'ADDRESS': '2 MASSACHUSETTS AVENUE NE',\n", 674 | " 'NAME': 'NATIONAL POSTAL MUSEUM',\n", 675 | " 'ADDRESS_ID': 293217,\n", 676 | " 'LEGALNAME': 'BEAD SOCIETY OF GREATER WASHINGTON',\n", 677 | " 'ALTNAME': 'NATIONAL POSTAL MUSEUM',\n", 678 | " 'WEBURL': 'HTTP://POSTALMUSEUM.SI.EDU'},\n", 679 | " 'geometry': {'type': 'Point',\n", 680 | " 'coordinates': [-77.00819124512859, 38.8981463599396]}},\n", 681 | " {'type': 'Feature',\n", 682 | " 'properties': {'OBJECTID': 42,\n", 683 | " 'ADDRESS': '1519 MONROE STREET NW',\n", 684 | " 'NAME': 'POWHATAN MUSEUM',\n", 685 | " 'ADDRESS_ID': 234557,\n", 686 | " 'LEGALNAME': 'AMERICAN UNIVERSITY MUSEUM',\n", 687 | " 'ALTNAME': ' ',\n", 688 | " 'WEBURL': 'http://www.powhatanmuseum.com/'},\n", 689 | " 'geometry': {'type': 'Point',\n", 690 | " 'coordinates': [-77.03550660261739, 38.93243814726252]}},\n", 691 | " {'type': 'Feature',\n", 692 | " 'properties': {'OBJECTID': 43,\n", 693 | " 'ADDRESS': '144 CONSTITUTION AVENUE NE',\n", 694 | " 'NAME': 'SEWALL-BELMONT HOUSE AND MUSEUM',\n", 695 | " 'ADDRESS_ID': 286201,\n", 696 | " 'LEGALNAME': 'AMERICAN MUSEUM OF PEACE INC',\n", 697 | " 'ALTNAME': ' ',\n", 698 | " 'WEBURL': 'HTTP://WWW.SEWALLBELMONT.ORG'},\n", 699 | " 'geometry': {'type': 'Point',\n", 700 | " 'coordinates': [-77.00375845550963, 38.89219466787653]}},\n", 701 | " {'type': 'Feature',\n", 702 | " 'properties': {'OBJECTID': 44,\n", 703 | " 'ADDRESS': '802 MASSACHUSETTS AVENUE NE',\n", 704 | " 'NAME': 'SHOOK MUSEUM FOUNDATION',\n", 705 | " 'ADDRESS_ID': 79669,\n", 706 | " 'LEGALNAME': 'GREENPEACE FUND',\n", 707 | " 'ALTNAME': ' ',\n", 708 | " 'WEBURL': 'SHOOKMUSEUM.ORG'},\n", 709 | " 'geometry': {'type': 'Point',\n", 710 | " 'coordinates': [-76.9944246526475, 38.891834530779185]}},\n", 711 | " {'type': 'Feature',\n", 712 | " 'properties': {'OBJECTID': 45,\n", 713 | " 'ADDRESS': '1400 CONSTITUTION AVENUE NW',\n", 714 | " 'NAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF NATURAL HISTORY',\n", 715 | " 'ADDRESS_ID': 310702,\n", 716 | " 'LEGALNAME': \"B'NAI B'RITH KLUTZNICK MUSEUM\",\n", 717 | " 'ALTNAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF NATURAL HISTORY',\n", 718 | " 'WEBURL': 'http://www.mnh.si.edu/'},\n", 719 | " 'geometry': {'type': 'Point',\n", 720 | " 'coordinates': [-77.02591603234607, 38.89121850995097]}},\n", 721 | " {'type': 'Feature',\n", 722 | " 'properties': {'OBJECTID': 46,\n", 723 | " 'ADDRESS': '500 HOWARD PLACE NW',\n", 724 | " 'NAME': 'HOWARD UNIVERSITY MUSEUM',\n", 725 | " 'ADDRESS_ID': 243398,\n", 726 | " 'LEGALNAME': 'COLLECTONS STRIES AMRCN MSLIMS',\n", 727 | " 'ALTNAME': ' ',\n", 728 | " 'WEBURL': 'http://www.coas.howard.edu/msrc/museum.html'},\n", 729 | " 'geometry': {'type': 'Point',\n", 730 | " 'coordinates': [-77.0196991986925, 38.922360224748935]}},\n", 731 | " {'type': 'Feature',\n", 732 | " 'properties': {'OBJECTID': 47,\n", 733 | " 'ADDRESS': '8TH STREET NW AND F ST NW',\n", 734 | " 'NAME': 'NATIONAL PORTRAIT GALLERY',\n", 735 | " 'ADDRESS_ID': 294248,\n", 736 | " 'LEGALNAME': 'BOHEMIA ARTS',\n", 737 | " 'ALTNAME': 'NATIONAL PORTRAIT GALLERY',\n", 738 | " 'WEBURL': 'HTTP://WWW.NPG.SI.EDU'},\n", 739 | " 'geometry': {'type': 'Point',\n", 740 | " 'coordinates': [-77.02295571583119, 38.89815890118559]}},\n", 741 | " {'type': 'Feature',\n", 742 | " 'properties': {'OBJECTID': 48,\n", 743 | " 'ADDRESS': '14TH STREET NW AND CONSTITUTION AVENUE NW',\n", 744 | " 'NAME': 'NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE',\n", 745 | " 'ADDRESS_ID': 903110,\n", 746 | " 'LEGALNAME': 'AMERICANS FOR BATTLEFIELD PRESERVATION',\n", 747 | " 'ALTNAME': 'NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE',\n", 748 | " 'WEBURL': 'HTTP://WWW.NMAAHC.SI.EDU/'},\n", 749 | " 'geometry': {'type': 'Point',\n", 750 | " 'coordinates': [-77.03271597832732, 38.89119983415094]}},\n", 751 | " {'type': 'Feature',\n", 752 | " 'properties': {'OBJECTID': 49,\n", 753 | " 'ADDRESS': '4TH STREET SW AND INDEPENDENCE AVENUE SW',\n", 754 | " 'NAME': 'NATIONAL MUSEUM OF AMERICAN INDIAN',\n", 755 | " 'ADDRESS_ID': 294429,\n", 756 | " 'LEGALNAME': 'BLAIR HOUSE RESTORATION FUND',\n", 757 | " 'ALTNAME': ' ',\n", 758 | " 'WEBURL': 'WWW.NMAI.SI.EDU'},\n", 759 | " 'geometry': {'type': 'Point',\n", 760 | " 'coordinates': [-77.01672595283219, 38.88826561652]}},\n", 761 | " {'type': 'Feature',\n", 762 | " 'properties': {'OBJECTID': 50,\n", 763 | " 'ADDRESS': '6TH STREET SW AND INDEPENDENCE AVENUE SW',\n", 764 | " 'NAME': 'NATIONAL AIR AND SPACE MUSEUM',\n", 765 | " 'ADDRESS_ID': 301565,\n", 766 | " 'LEGALNAME': 'BETHUNE MEMORIAL MUSEUM',\n", 767 | " 'ALTNAME': 'NATIONAL AIR AND SPACE MUSEUM',\n", 768 | " 'WEBURL': 'HTTP://WWW.NASM.SI.EDU/'},\n", 769 | " 'geometry': {'type': 'Point',\n", 770 | " 'coordinates': [-77.01979999825605, 38.888161175521944]}},\n", 771 | " {'type': 'Feature',\n", 772 | " 'properties': {'OBJECTID': 51,\n", 773 | " 'ADDRESS': '7THB STREET AND INDEPENDENCE AVENUE SW',\n", 774 | " 'NAME': 'HIRSHHORN MUSEUM AND SCULPTURE GARDEN',\n", 775 | " 'ADDRESS_ID': 294428,\n", 776 | " 'LEGALNAME': 'D.C. OFFICE OF PUBLIC RECORDS AND ARCHIVES',\n", 777 | " 'ALTNAME': 'HIRSHHORN MUSEUM AND SCULPTURE GARDEN',\n", 778 | " 'WEBURL': 'HTTP://HIRSHHORN.SI.EDU/'},\n", 779 | " 'geometry': {'type': 'Point',\n", 780 | " 'coordinates': [-77.02294902891254, 38.88843565656003]}},\n", 781 | " {'type': 'Feature',\n", 782 | " 'properties': {'OBJECTID': 52,\n", 783 | " 'ADDRESS': 'MADISON DRIVE NW AND 12TH STREET NW',\n", 784 | " 'NAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AMERICAN HISTORY',\n", 785 | " 'ADDRESS_ID': 293200,\n", 786 | " 'LEGALNAME': None,\n", 787 | " 'ALTNAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AMERICAN HISTORY',\n", 788 | " 'WEBURL': 'HTTP://AMERICANHISTORY.SI.EDU'},\n", 789 | " 'geometry': {'type': 'Point',\n", 790 | " 'coordinates': [-77.03005156534492, 38.89123181993075]}},\n", 791 | " {'type': 'Feature',\n", 792 | " 'properties': {'OBJECTID': 53,\n", 793 | " 'ADDRESS': '4TH STREET NW AND MADISON DRIVE NW',\n", 794 | " 'NAME': 'NATIONAL GALLERY OF ART - EAST BUILDING',\n", 795 | " 'ADDRESS_ID': 293209,\n", 796 | " 'LEGALNAME': None,\n", 797 | " 'ALTNAME': None,\n", 798 | " 'WEBURL': 'http://www.nga.gov/content/ngaweb/visit/maps-and-information/east-building.html'},\n", 799 | " 'geometry': {'type': 'Point',\n", 800 | " 'coordinates': [-77.01668919569053, 38.89125721273486]}},\n", 801 | " {'type': 'Feature',\n", 802 | " 'properties': {'OBJECTID': 54,\n", 803 | " 'ADDRESS': '4TH STREET NW AND MADISON DRIVE NW',\n", 804 | " 'NAME': 'NATIONAL GALLERY OF ART - WEST BUILDING',\n", 805 | " 'ADDRESS_ID': 293249,\n", 806 | " 'LEGALNAME': None,\n", 807 | " 'ALTNAME': None,\n", 808 | " 'WEBURL': 'http://www.nga.gov/content/ngaweb/visit/maps-and-information/west-building.html'},\n", 809 | " 'geometry': {'type': 'Point',\n", 810 | " 'coordinates': [-77.01989150273015, 38.891313914429645]}},\n", 811 | " {'type': 'Feature',\n", 812 | " 'properties': {'OBJECTID': 55,\n", 813 | " 'ADDRESS': '1000 JEFFERSON DRIVE SW',\n", 814 | " 'NAME': 'SMITHSONIAN INSTITUTION - CASTLE',\n", 815 | " 'ADDRESS_ID': 293187,\n", 816 | " 'LEGALNAME': None,\n", 817 | " 'ALTNAME': None,\n", 818 | " 'WEBURL': 'http://www.si.edu/Museums/smithsonian-institution-building'},\n", 819 | " 'geometry': {'type': 'Point',\n", 820 | " 'coordinates': [-77.02597189316775, 38.88879577572046]}},\n", 821 | " {'type': 'Feature',\n", 822 | " 'properties': {'OBJECTID': 56,\n", 823 | " 'ADDRESS': '1050 INDEPENDENCE AVENUE SW',\n", 824 | " 'NAME': 'SACKLER GALLERY',\n", 825 | " 'ADDRESS_ID': 293191,\n", 826 | " 'LEGALNAME': 'ARTHUR M. SACKLER GALLERY',\n", 827 | " 'ALTNAME': None,\n", 828 | " 'WEBURL': 'http://www.asia.si.edu/'},\n", 829 | " 'geometry': {'type': 'Point',\n", 830 | " 'coordinates': [-77.02645343758842, 38.88796502751886]}},\n", 831 | " {'type': 'Feature',\n", 832 | " 'properties': {'OBJECTID': 57,\n", 833 | " 'ADDRESS': 'JEFFERSON DRIVE SW AND 12TH STREET SW',\n", 834 | " 'NAME': 'FREER GALLERY',\n", 835 | " 'ADDRESS_ID': 294417,\n", 836 | " 'LEGALNAME': 'FREER GALLERY OF ART',\n", 837 | " 'ALTNAME': None,\n", 838 | " 'WEBURL': 'http://www.asia.si.edu/'},\n", 839 | " 'geometry': {'type': 'Point',\n", 840 | " 'coordinates': [-77.02736845485786, 38.8882746680144]}}]}" 841 | ] 842 | }, 843 | "execution_count": 3, 844 | "metadata": {}, 845 | "output_type": "execute_result" 846 | } 847 | ], 848 | "source": [ 849 | "s" 850 | ] 851 | }, 852 | { 853 | "cell_type": "code", 854 | "execution_count": null, 855 | "metadata": {}, 856 | "outputs": [], 857 | "source": [] 858 | } 859 | ], 860 | "metadata": { 861 | "kernelspec": { 862 | "display_name": "Python 3", 863 | "language": "python", 864 | "name": "python3" 865 | }, 866 | "language_info": { 867 | "codemirror_mode": { 868 | "name": "ipython", 869 | "version": 3 870 | }, 871 | "file_extension": ".py", 872 | "mimetype": "text/x-python", 873 | "name": "python", 874 | "nbconvert_exporter": "python", 875 | "pygments_lexer": "ipython3", 876 | "version": "3.7.3" 877 | } 878 | }, 879 | "nbformat": 4, 880 | "nbformat_minor": 4 881 | } 882 | -------------------------------------------------------------------------------- /notebooks/Fasta.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from IPython.display import display\n", 12 | "class Fasta:\n", 13 | " def __init__(self, data):\n", 14 | " self.data = data\n", 15 | " def _ipython_display_(self):\n", 16 | " bundle = {\n", 17 | " 'application/vnd.fasta.fasta': self.data,\n", 18 | " 'text/plain': self.data\n", 19 | " }\n", 20 | " display(bundle, raw=True)\n" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": null, 26 | "metadata": {}, 27 | "outputs": [], 28 | "source": [ 29 | "with open('../data/zika_assembled_genomes.fasta') as f:\n", 30 | " data = f.read()\n", 31 | "Fasta(data)" 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": null, 37 | "metadata": { 38 | "collapsed": true 39 | }, 40 | "outputs": [], 41 | "source": [] 42 | } 43 | ], 44 | "metadata": { 45 | "kernelspec": { 46 | "display_name": "Python 3", 47 | "language": "python", 48 | "name": "python3" 49 | }, 50 | "language_info": { 51 | "codemirror_mode": { 52 | "name": "ipython", 53 | "version": 3 54 | }, 55 | "file_extension": ".py", 56 | "mimetype": "text/x-python", 57 | "name": "python", 58 | "nbconvert_exporter": "python", 59 | "pygments_lexer": "ipython3", 60 | "version": "3.6.1" 61 | } 62 | }, 63 | "nbformat": 4, 64 | "nbformat_minor": 2 65 | } 66 | -------------------------------------------------------------------------------- /notebooks/Lorenz.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# The Lorenz Differential Equations" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Before we start, we import some preliminary libraries. We will also import (below) the accompanying `lorenz.py` file, which contains the actual solver and plotting routine." 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": null, 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "%matplotlib inline\n", 24 | "from ipywidgets import interactive, fixed" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": {}, 30 | "source": [ 31 | "We explore the Lorenz system of differential equations:\n", 32 | "\n", 33 | "$$\n", 34 | "\\begin{aligned}\n", 35 | "\\dot{x} & = \\sigma(y-x) \\\\\n", 36 | "\\dot{y} & = \\rho x - y - xz \\\\\n", 37 | "\\dot{z} & = -\\beta z + xy\n", 38 | "\\end{aligned}\n", 39 | "$$\n", 40 | "\n", 41 | "Let's change (\\\\(\\sigma\\\\), \\\\(\\beta\\\\), \\\\(\\rho\\\\)) with ipywidgets and examine the trajectories." 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": null, 47 | "metadata": {}, 48 | "outputs": [], 49 | "source": [ 50 | "from lorenz import solve_lorenz\n", 51 | "w=interactive(solve_lorenz,sigma=(0.0,50.0),rho=(0.0,50.0))\n", 52 | "w" 53 | ] 54 | }, 55 | { 56 | "cell_type": "markdown", 57 | "metadata": {}, 58 | "source": [ 59 | "For the default set of parameters, we see the trajectories swirling around two points, called attractors. " 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": {}, 65 | "source": [ 66 | "The object returned by `interactive` is a `Widget` object and it has attributes that contain the current result and arguments:" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": null, 72 | "metadata": {}, 73 | "outputs": [], 74 | "source": [ 75 | "t, x_t = w.result" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": null, 81 | "metadata": {}, 82 | "outputs": [], 83 | "source": [ 84 | "w.kwargs" 85 | ] 86 | }, 87 | { 88 | "cell_type": "markdown", 89 | "metadata": {}, 90 | "source": [ 91 | "After interacting with the system, we can take the result and perform further computations. In this case, we compute the average positions in \\\\(x\\\\), \\\\(y\\\\) and \\\\(z\\\\)." 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": null, 97 | "metadata": {}, 98 | "outputs": [], 99 | "source": [ 100 | "xyz_avg = x_t.mean(axis=1)" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": null, 106 | "metadata": {}, 107 | "outputs": [], 108 | "source": [ 109 | "xyz_avg.shape" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "Creating histograms of the average positions (across different trajectories) show that, on average, the trajectories swirl about the attractors." 117 | ] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "execution_count": null, 122 | "metadata": {}, 123 | "outputs": [], 124 | "source": [ 125 | "from matplotlib import pyplot as plt" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": null, 131 | "metadata": {}, 132 | "outputs": [], 133 | "source": [ 134 | "plt.hist(xyz_avg[:,0])\n", 135 | "plt.title('Average $x(t)$');" 136 | ] 137 | }, 138 | { 139 | "cell_type": "code", 140 | "execution_count": null, 141 | "metadata": {}, 142 | "outputs": [], 143 | "source": [ 144 | "plt.hist(xyz_avg[:,1])\n", 145 | "plt.title('Average $y(t)$');" 146 | ] 147 | } 148 | ], 149 | "metadata": { 150 | "kernelspec": { 151 | "display_name": "Python 3", 152 | "language": "python", 153 | "name": "python3" 154 | }, 155 | "language_info": { 156 | "codemirror_mode": { 157 | "name": "ipython", 158 | "version": 3 159 | }, 160 | "file_extension": ".py", 161 | "mimetype": "text/x-python", 162 | "name": "python", 163 | "nbconvert_exporter": "python", 164 | "pygments_lexer": "ipython3", 165 | "version": "3.7.3" 166 | } 167 | }, 168 | "nbformat": 4, 169 | "nbformat_minor": 4 170 | } 171 | -------------------------------------------------------------------------------- /notebooks/audio/audio.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jupyterlab/jupyterlab-demo/c058aead3b24d96133b55721faf2d28b4823b9fa/notebooks/audio/audio.wav -------------------------------------------------------------------------------- /notebooks/images/marie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jupyterlab/jupyterlab-demo/c058aead3b24d96133b55721faf2d28b4823b9fa/notebooks/images/marie.png -------------------------------------------------------------------------------- /notebooks/images/xeus-cling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jupyterlab/jupyterlab-demo/c058aead3b24d96133b55721faf2d28b4823b9fa/notebooks/images/xeus-cling.png -------------------------------------------------------------------------------- /notebooks/images/xtensor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jupyterlab/jupyterlab-demo/c058aead3b24d96133b55721faf2d28b4823b9fa/notebooks/images/xtensor.png -------------------------------------------------------------------------------- /notebooks/images/xwidgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jupyterlab/jupyterlab-demo/c058aead3b24d96133b55721faf2d28b4823b9fa/notebooks/images/xwidgets.png -------------------------------------------------------------------------------- /notebooks/lorenz.py: -------------------------------------------------------------------------------- 1 | from matplotlib import pyplot as plt 2 | from mpl_toolkits.mplot3d import Axes3D 3 | import numpy as np 4 | from scipy import integrate 5 | 6 | def solve_lorenz(sigma=10.0, beta=8./3, rho=28.0): 7 | """Plot a solution to the Lorenz differential equations.""" 8 | 9 | max_time = 4.0 10 | N = 30 11 | 12 | fig = plt.figure() 13 | ax = fig.add_axes([0, 0, 1, 1], projection='3d') 14 | ax.axis('off') 15 | 16 | # prepare the axes limits 17 | ax.set_xlim((-25, 25)) 18 | ax.set_ylim((-35, 35)) 19 | ax.set_zlim((5, 55)) 20 | 21 | def lorenz_deriv(x_y_z, t0, sigma=sigma, beta=beta, rho=rho): 22 | """Compute the time-derivative of a Lorenz system.""" 23 | x, y, z = x_y_z 24 | return [sigma * (y - x), x * (rho - z) - y, x * y - beta * z] 25 | 26 | # Choose random starting points, uniformly distributed from -15 to 15 27 | np.random.seed(1) 28 | x0 = -15 + 30 * np.random.random((N, 3)) 29 | 30 | # Solve for the trajectories 31 | t = np.linspace(0, max_time, int(250*max_time)) 32 | x_t = np.asarray([integrate.odeint(lorenz_deriv, x0i, t) 33 | for x0i in x0]) 34 | 35 | # choose a different color for each trajectory 36 | colors = plt.cm.viridis(np.linspace(0, 1, N)) 37 | 38 | for i in range(N): 39 | x, y, z = x_t[i,:,:].T 40 | lines = ax.plot(x, y, z, '-', c=colors[i]) 41 | plt.setp(lines, linewidth=2) 42 | angle = 104 43 | ax.view_init(30, angle) 44 | plt.show() 45 | 46 | return t, x_t -------------------------------------------------------------------------------- /slides/jupyterlab-slides.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jupyterlab/jupyterlab-demo/c058aead3b24d96133b55721faf2d28b4823b9fa/slides/jupyterlab-slides.key -------------------------------------------------------------------------------- /slides/jupyterlab-slides.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jupyterlab/jupyterlab-demo/c058aead3b24d96133b55721faf2d28b4823b9fa/slides/jupyterlab-slides.pdf -------------------------------------------------------------------------------- /slides/jupyterlab-slides_scipy19.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jupyterlab/jupyterlab-demo/c058aead3b24d96133b55721faf2d28b4823b9fa/slides/jupyterlab-slides_scipy19.pdf -------------------------------------------------------------------------------- /talks.yml: -------------------------------------------------------------------------------- 1 | test_talk: 2 | folders: 3 | demofiles/TCGA: TCGA 4 | files: 5 | - data/iris.csv 6 | rename: 7 | iris.csv : iris_renamed.csv 8 | 9 | scipy2017: 10 | files: 11 | - data/iris.csv 12 | - data/1024px-Hubble_Interacting_Galaxy_AM_0500-620_(2008-04-24).jpg 13 | - data/Museums_in_DC.geojson 14 | - narrative/scipy2017.md 15 | rename: 16 | demofiles/urban-data-challenge/public-transportation/geneva/schedule-real-time.csv: big.csv 17 | demofiles/tcga/extra_data/c2.cp.v3.0.symbols_edit.csv: smaller.csv 18 | demofiles/altair/altair/examples/json/field_spaces.vl.json: vega.vl.json 19 | demofiles/pythondatasciencehandbook/notebooks/03.08-aggregation-and-grouping.ipynb: notebook.ipynb 20 | 21 | jupytercon2017: 22 | files: 23 | - data/iris.csv 24 | - data/1024px-Hubble_Interacting_Galaxy_AM_0500-620_(2008-04-24).jpg 25 | - data/Museums_in_DC.geojson 26 | - narrative/markdown_python.md 27 | rename: 28 | demofiles/urban-data-challenge/public-transportation/geneva/schedule-real-time.csv: big.csv 29 | demofiles/tcga/extra_data/c2.cp.v3.0.symbols_edit.csv: smaller.csv 30 | demofiles/altair/altair/examples/json/field_spaces.vl.json: vega.vl.json 31 | demofiles/pythondatasciencehandbook/notebooks/03.08-aggregation-and-grouping.ipynb: notebook.ipynb 32 | 33 | demo: 34 | files: 35 | - slides/jupyterlab-slides.pdf 36 | - narrative/jupyterlab.md 37 | - narrative/markdown_python.md 38 | folders: 39 | demofiles/TCGA/Extra_Data: TCGA_Data 40 | notebooks: notebooks 41 | data: data 42 | rename: 43 | demofiles/Urban-Data-Challenge/public-transportation/geneva/schedule-real-time.csv: big.csv 44 | demofiles/tcga/extra_data/c2.cp.v3.0.symbols_edit.csv: smaller.csv 45 | demofiles/altair/altair/v1/examples/json/bar.vl.json: vega.vl.json 46 | demofiles/PythonDataScienceHandbook/notebooks/03.08-Aggregation-and-Grouping.ipynb: notebooks/pandas.ipynb 47 | "demofiles/bqplot/examples/Basic Plotting/Basic Plotting.ipynb": notebooks/bqplot.ipynb 48 | "1024px-Hubble_Interacting_Galaxy_AM_0500-620_(2008-04-24).jpg": hubble.jpg 49 | notebooks/Lorenz.ipynb: Lorenz.ipynb 50 | notebooks/lorenz.py: lorenz.py 51 | --------------------------------------------------------------------------------