From c167fc039f1239a46e6f6ea22d29ce61c13de0bb Mon Sep 17 00:00:00 2001 From: Azaya <99359668+Azaya89@users.noreply.github.com> Date: Thu, 21 Nov 2024 14:18:42 +0100 Subject: [PATCH] Modernize notebook: opensky (#396) Co-authored-by: Maxime Liquet <35924738+maximlt@users.noreply.github.com> --- opensky/anaconda-project-lock.yml | 1180 +++++++++++++++-------------- opensky/anaconda-project.yml | 26 +- opensky/opensky.ipynb | 145 ++-- 3 files changed, 699 insertions(+), 652 deletions(-) diff --git a/opensky/anaconda-project-lock.yml b/opensky/anaconda-project-lock.yml index 9f90e4faf..b8d0e0ef7 100644 --- a/opensky/anaconda-project-lock.yml +++ b/opensky/anaconda-project-lock.yml @@ -17,7 +17,7 @@ locking_enabled: true env_specs: default: locked: true - env_spec_hash: 7f6129aaa3f5c6ac6a0a9c702abfef58241b2184 + env_spec_hash: c26a0100b0381a5115901cfc2e132024d773f74d platforms: - linux-64 - osx-64 @@ -27,636 +27,698 @@ env_specs: all: - argon2-cffi=21.3.0=pyhd3eb1b0_0 - asttokens=2.0.5=pyhd3eb1b0_0 - - backcall=0.2.0=pyhd3eb1b0_0 - bleach=4.1.0=pyhd3eb1b0_0 - - charset-normalizer=2.0.4=pyhd3eb1b0_0 + - charset-normalizer=3.3.2=pyhd3eb1b0_0 - cycler=0.11.0=pyhd3eb1b0_0 - - datashader=0.13.0=pyhd3eb1b0_1 - decorator=5.1.1=pyhd3eb1b0_0 - defusedxml=0.7.1=pyhd3eb1b0_0 - executing=0.8.3=pyhd3eb1b0_0 - - heapdict=1.0.1=pyhd3eb1b0_0 - - holoviews=1.14.5=pyhd3eb1b0_1 - ipython_genutils=0.2.0=pyhd3eb1b0_1 - - jinja2=2.11.3=pyhd3eb1b0_0 - - jupyterlab_pygments=0.1.2=py_0 - pandocfilters=1.5.0=pyhd3eb1b0_0 - - panel=0.12.1=pyhd3eb1b0_0 - parso=0.8.3=pyhd3eb1b0_0 - - pickleshare=0.7.5=pyhd3eb1b0_1003 + - prompt_toolkit=3.0.43=hd3eb1b0_0 - pure_eval=0.2.2=pyhd3eb1b0_0 - pycparser=2.21=pyhd3eb1b0_0 - - python-dateutil=2.8.2=pyhd3eb1b0_0 - - send2trash=1.8.0=pyhd3eb1b0_1 + - python-tzdata=2023.3=pyhd3eb1b0_0 - six=1.16.0=pyhd3eb1b0_1 - - sortedcontainers=2.4.0=pyhd3eb1b0_0 - stack_data=0.2.0=pyhd3eb1b0_0 - - tblib=1.7.0=pyhd3eb1b0_0 + - tzdata=2024b=h04d1e81_0 - wcwidth=0.2.5=pyhd3eb1b0_0 unix: - pexpect=4.8.0=pyhd3eb1b0_3 - ptyprocess=0.7.0=pyhd3eb1b0_2 + osx: + - blas=1.0=openblas linux-64: - _libgcc_mutex=0.1=main - _openmp_mutex=5.1=1_gnu - - anyio=3.5.0=py38h06a4308_0 - - argon2-cffi-bindings=21.2.0=py38h7f8727e_0 - - attrs=23.1.0=py38h06a4308_0 - - beautifulsoup4=4.12.2=py38h06a4308_0 + - anyio=4.6.2=py311h06a4308_0 + - argon2-cffi-bindings=21.2.0=py311h5eee18b_0 + - attrs=24.2.0=py311h06a4308_0 + - beautifulsoup4=4.12.3=py311h06a4308_0 - blas=1.0=mkl - - bokeh=2.3.3=py38h06a4308_0 - - bottleneck=1.3.4=py38hce1f21e_0 - - brotli-python=1.0.9=py38heb0550a_2 - - brotli=1.0.9=he6710b0_2 - - ca-certificates=2023.08.22=h06a4308_0 - - certifi=2023.7.22=py38h06a4308_0 - - cffi=1.15.0=py38hd667e15_1 - - click=8.1.7=py38h06a4308_0 - - cloudpickle=2.2.1=py38h06a4308_0 - - colorcet=3.0.1=py38h06a4308_0 - - comm=0.1.2=py38h06a4308_0 - - cryptography=41.0.3=py38h130f0dd_0 - - cytoolz=0.11.0=py38h7b6447c_0 - - dask-core=2022.2.1=pyhd3eb1b0_0 - - dask=2022.2.1=pyhd3eb1b0_0 - - datashape=0.5.4=py38h06a4308_1 + - bokeh=3.6.0=py311h06a4308_0 + - bottleneck=1.4.2=py311hf4808d0_0 + - brotli-bin=1.0.9=h5eee18b_8 + - brotli-python=1.0.9=py311h6a678d5_8 + - brotli=1.0.9=h5eee18b_8 + - bzip2=1.0.8=h5eee18b_6 + - c-ares=1.19.1=h5eee18b_0 + - ca-certificates=2024.9.24=h06a4308_0 + - certifi=2024.8.30=py311h06a4308_0 + - cffi=1.17.1=py311h1fdaa30_0 + - click=8.1.7=py311h06a4308_0 + - cloudpickle=3.0.0=py311h06a4308_0 + - colorcet=3.1.0=py311h06a4308_0 + - comm=0.2.1=py311h06a4308_0 + - contourpy=1.2.0=py311hdb19cb5_0 + - cramjam=2.7.0=py311h24d97f6_0 + - cyrus-sasl=2.1.28=h52b45da_1 + - dask-core=2024.8.2=py311h06a4308_0 + - datashader=0.16.3=py311h06a4308_0 - dbus=1.13.18=hb2f20db_0 - - debugpy=1.5.1=py38h295c915_0 - - distributed=2022.2.1=pyhd3eb1b0_0 - - entrypoints=0.4=py38h06a4308_0 - - expat=2.4.4=h295c915_0 - - fastparquet=0.5.0=py38hce1f21e_1 - - fontconfig=2.13.1=h6c09931_0 - - fonttools=4.25.0=pyhd3eb1b0_0 - - freetype=2.11.0=h70c0345_0 - - fsspec=2023.9.2=py38h06a4308_0 - - giflib=5.2.1=h7b6447c_0 - - glib=2.69.1=h4ff587b_1 - - gst-plugins-base=1.14.0=h8213a91_2 - - gstreamer=1.14.0=h28cd5cc_2 - - icu=58.2=he6710b0_3 - - idna=3.4=py38h06a4308_0 - - importlib-metadata=6.0.0=py38h06a4308_0 - - importlib_resources=6.1.0=py38h06a4308_0 - - intel-openmp=2021.4.0=h06a4308_3561 - - ipykernel=6.19.2=py38hb070fc8_0 - - ipython=8.12.2=py38h06a4308_0 - - jedi=0.18.1=py38h06a4308_1 - - jpeg=9e=h7f8727e_0 - - jsonschema=4.17.3=py38h06a4308_0 - - jupyter_client=7.2.2=py38h06a4308_0 - - jupyter_core=5.3.0=py38h06a4308_0 - - jupyter_server=1.23.4=py38h06a4308_0 - - kiwisolver=1.4.2=py38h295c915_0 + - debugpy=1.6.7=py311h6a678d5_0 + - entrypoints=0.4=py311h06a4308_0 + - expat=2.6.3=h6a678d5_0 + - fastparquet=2024.2.0=py311hf4808d0_0 + - fontconfig=2.14.1=h55d465d_3 + - fonttools=4.51.0=py311h5eee18b_0 + - freetype=2.12.1=h4a9f257_0 + - fsspec=2024.6.1=py311h06a4308_0 + - glib-tools=2.78.4=h6a678d5_0 + - glib=2.78.4=h6a678d5_0 + - gst-plugins-base=1.14.1=h6a678d5_1 + - gstreamer=1.14.1=h5eee18b_1 + - holoviews=1.20.0=py311h06a4308_0 + - hvplot=0.11.1=py311h06a4308_0 + - icu=73.1=h6a678d5_0 + - idna=3.7=py311h06a4308_0 + - importlib-metadata=7.0.1=py311h06a4308_0 + - intel-openmp=2023.1.0=hdb19cb5_46306 + - ipykernel=6.29.5=py311h06a4308_0 + - ipython=8.27.0=py311h06a4308_0 + - jedi=0.19.1=py311h06a4308_0 + - jinja2=3.1.4=py311h06a4308_1 + - jpeg=9e=h5eee18b_3 + - jsonschema-specifications=2023.7.1=py311h06a4308_0 + - jsonschema=4.23.0=py311h06a4308_0 + - jupyter_client=7.4.9=py311h06a4308_0 + - jupyter_core=5.7.2=py311h06a4308_0 + - jupyter_events=0.10.0=py311h06a4308_0 + - jupyter_server=2.14.1=py311h06a4308_0 + - jupyter_server_terminals=0.4.4=py311h06a4308_1 + - jupyterlab_pygments=0.2.2=py311h06a4308_0 + - kiwisolver=1.4.4=py311h6a678d5_0 + - krb5=1.20.1=h143b758_1 - lcms2=2.12=h3be6417_0 - - ld_impl_linux-64=2.38=h1181459_1 - - libffi=3.3=he6710b0_2 - - libgcc-ng=9.1.0=hdf63c60_0 - - libgfortran-ng=7.3.0=hdf63c60_0 + - ld_impl_linux-64=2.40=h12ee557_0 + - lerc=3.0=h295c915_0 + - libabseil=20240116.2=cxx17_h6a678d5_0 + - libbrotlicommon=1.0.9=h5eee18b_8 + - libbrotlidec=1.0.9=h5eee18b_8 + - libbrotlienc=1.0.9=h5eee18b_8 + - libclang13=14.0.6=default_he11475f_1 + - libclang=14.0.6=default_hc6dbbc7_1 + - libcups=2.4.2=h2d74bed_1 + - libcurl=8.9.1=h251f7ec_0 + - libdeflate=1.17=h5eee18b_1 + - libedit=3.1.20230828=h5eee18b_0 + - libev=4.33=h7f8727e_1 + - libffi=3.4.4=h6a678d5_1 + - libgcc-ng=11.2.0=h1234567_1 + - libgfortran-ng=11.2.0=h00389a5_1 + - libgfortran5=11.2.0=h1234567_1 + - libglib=2.78.4=hdc74915_0 - libgomp=11.2.0=h1234567_1 - - libllvm11=11.0.0=h3826bc1_1 - - libpng=1.6.37=hbc83047_0 + - libiconv=1.16=h5eee18b_3 + - libllvm14=14.0.6=hecde1de_4 + - libnghttp2=1.57.0=h2d74bed_0 + - libpng=1.6.39=h5eee18b_0 + - libpq=17.0=hdbd6064_0 + - libprotobuf=4.25.3=he621ea3_0 - libsodium=1.0.18=h7b6447c_0 - - libstdcxx-ng=9.1.0=hdf63c60_0 - - libtiff=4.2.0=h2818925_1 - - libuuid=1.0.3=h7f8727e_2 - - libwebp-base=1.2.2=h7f8727e_0 - - libwebp=1.2.2=h55f646e_0 + - libssh2=1.11.0=h251f7ec_0 + - libstdcxx-ng=11.2.0=h1234567_1 + - libtiff=4.5.1=h6a678d5_0 + - libuuid=1.41.5=h5eee18b_0 + - libwebp-base=1.3.2=h5eee18b_1 - libxcb=1.15=h7f8727e_0 - - libxml2=2.9.14=h74e7548_0 - - llvmlite=0.37.0=py38h295c915_2 - - locket=1.0.0=py38h06a4308_0 - - lz4-c=1.9.3=h295c915_1 - - markdown=3.4.1=py38h06a4308_0 - - markupsafe=2.0.1=py38h27cfd23_0 - - matplotlib-base=3.4.3=py38hbbc1b5f_0 - - matplotlib-inline=0.1.6=py38h06a4308_0 - - matplotlib=3.4.3=py38h06a4308_0 - - mistune=0.8.4=py38h7b6447c_1000 - - mkl-service=2.4.0=py38h7f8727e_0 - - mkl=2021.4.0=h06a4308_640 - - mkl_fft=1.3.1=py38hd3c417c_0 - - mkl_random=1.2.2=py38h51133e4_0 - - msgpack-python=1.0.3=py38hd09550d_0 - - multipledispatch=0.6.0=py38_0 - - munkres=1.1.4=py_0 - - nbclassic=0.5.5=py38h06a4308_0 - - nbclient=0.5.13=py38h06a4308_0 - - nbconvert=6.4.4=py38h06a4308_0 - - nbformat=5.9.2=py38h06a4308_0 - - ncurses=6.3=h7f8727e_2 - - nest-asyncio=1.5.6=py38h06a4308_0 - - notebook-shim=0.2.2=py38h06a4308_0 - - notebook=6.5.4=py38h06a4308_1 - - numba=0.54.1=py38h51133e4_0 - - numexpr=2.8.1=py38h6abb31d_0 - - numpy-base=1.20.3=py38h74d4b33_0 - - numpy=1.20.3=py38hf144106_0 - - openssl=1.1.1w=h7f8727e_0 - - packaging=23.1=py38h06a4308_0 - - pandas=1.3.5=py38h8c16a72_0 - - param=1.13.0=py38h06a4308_0 - - partd=1.4.1=py38h06a4308_0 - - pcre=8.45=h295c915_0 - - pillow=9.0.1=py38h22f2fdc_0 - - pip=23.3=py38h06a4308_0 - - pkgutil-resolve-name=1.3.10=py38h06a4308_0 - - platformdirs=3.10.0=py38h06a4308_0 - - prometheus_client=0.14.1=py38h06a4308_0 - - prompt-toolkit=3.0.36=py38h06a4308_0 - - psutil=5.8.0=py38h27cfd23_1 - - pyct=0.5.0=py38h06a4308_0 - - pygments=2.15.1=py38h06a4308_1 - - pyopenssl=23.2.0=py38h06a4308_0 - - pyparsing=3.0.9=py38h06a4308_0 - - pyqt=5.9.2=py38h05f1152_4 - - pyrsistent=0.18.0=py38heee7806_0 - - pysocks=1.7.1=py38h06a4308_0 - - python-fastjsonschema=2.16.2=py38h06a4308_0 - - python-lmdb=1.2.1=py38h2531618_1 - - python-snappy=0.6.0=py38h2531618_3 - - python=3.8.13=h12debd9_0 - - pytz=2023.3.post1=py38h06a4308_0 - - pyviz_comms=2.3.0=py38h06a4308_0 - - pyyaml=6.0=py38h7f8727e_1 - - pyzmq=22.3.0=py38h295c915_2 - - qt=5.9.7=h5867ecd_1 - - readline=8.1.2=h7f8727e_1 - - requests=2.31.0=py38h06a4308_0 - - scipy=1.6.2=py38had2a1c9_1 - - setuptools=68.0.0=py38h06a4308_0 - - sip=4.19.13=py38h295c915_0 - - snappy=1.1.9=h295c915_0 - - sniffio=1.2.0=py38h06a4308_1 - - soupsieve=2.5=py38h06a4308_0 - - sqlite=3.38.5=hc218d9a_0 - - tbb=2021.5.0=hd09550d_0 - - terminado=0.17.1=py38h06a4308_0 - - testpath=0.6.0=py38h06a4308_0 - - thrift=0.11.0=py38h295c915_0 - - tk=8.6.12=h1ccaba5_0 - - toolz=0.12.0=py38h06a4308_0 - - tornado=6.1=py38h27cfd23_0 - - tqdm=4.65.0=py38hb070fc8_0 - - traitlets=5.7.1=py38h06a4308_0 - - typing-extensions=4.7.1=py38h06a4308_0 - - typing_extensions=4.7.1=py38h06a4308_0 - - urllib3=1.26.18=py38h06a4308_0 - - webencodings=0.5.1=py38_1 - - websocket-client=0.58.0=py38h06a4308_4 - - wheel=0.41.2=py38h06a4308_0 - - xarray=2022.11.0=py38h06a4308_0 - - xz=5.2.5=h7f8727e_1 + - libxkbcommon=1.0.1=h097e994_2 + - libxml2=2.13.1=hfdd30dd_2 + - linkify-it-py=2.0.0=py311h06a4308_0 + - llvmlite=0.43.0=py311h6a678d5_0 + - locket=1.0.0=py311h06a4308_0 + - lz4-c=1.9.4=h6a678d5_1 + - markdown-it-py=2.2.0=py311h06a4308_1 + - markdown=3.4.1=py311h06a4308_0 + - markupsafe=2.1.3=py311h5eee18b_0 + - matplotlib-base=3.9.2=py311h6fb44e5_0 + - matplotlib-inline=0.1.6=py311h06a4308_0 + - matplotlib=3.9.2=py311h06a4308_0 + - mdit-py-plugins=0.3.0=py311h06a4308_0 + - mdurl=0.1.0=py311h06a4308_0 + - mistune=2.0.4=py311h06a4308_0 + - mkl-service=2.4.0=py311h5eee18b_1 + - mkl=2023.1.0=h213fc3f_46344 + - mkl_fft=1.3.11=py311h5eee18b_0 + - mkl_random=1.2.8=py311ha02d727_0 + - multipledispatch=0.6.0=py311h06a4308_0 + - mysql=8.4.0=h29a9f33_1 + - nbclassic=1.1.0=py311h06a4308_0 + - nbclient=0.8.0=py311h06a4308_0 + - nbconvert=7.16.4=py311h06a4308_0 + - nbformat=5.10.4=py311h06a4308_0 + - ncurses=6.4=h6a678d5_0 + - nest-asyncio=1.6.0=py311h06a4308_0 + - notebook-shim=0.2.3=py311h06a4308_0 + - notebook=6.5.7=py311h06a4308_0 + - numba=0.60.0=py311ha02d727_0 + - numexpr=2.10.1=py311h3c60e43_0 + - numpy-base=1.26.4=py311hf175353_0 + - numpy=1.26.4=py311h08b1b3b_0 + - openjpeg=2.5.2=he7f1fd0_0 + - openldap=2.6.4=h42fbc30_0 + - openssl=3.0.15=h5eee18b_0 + - overrides=7.4.0=py311h06a4308_0 + - packaging=24.1=py311h06a4308_0 + - pandas=2.2.2=py311ha02d727_0 + - panel=1.5.3=py311h06a4308_0 + - param=2.1.1=py311h06a4308_0 + - partd=1.4.1=py311h06a4308_0 + - pcre2=10.42=hebb0a14_1 + - pillow=11.0.0=py311hfdbf927_0 + - pip=24.2=py311h06a4308_0 + - platformdirs=3.10.0=py311h06a4308_0 + - ply=3.11=py311h06a4308_0 + - prometheus_client=0.14.1=py311h06a4308_0 + - prompt-toolkit=3.0.43=py311h06a4308_0 + - psutil=5.9.0=py311h5eee18b_0 + - pyct=0.5.0=py311h06a4308_0 + - pygments=2.15.1=py311h06a4308_1 + - pyparsing=3.2.0=py311h06a4308_0 + - pyqt5-sip=12.13.0=py311h5eee18b_0 + - pyqt=5.15.10=py311h6a678d5_0 + - pysocks=1.7.1=py311h06a4308_0 + - python-dateutil=2.9.0post0=py311h06a4308_2 + - python-fastjsonschema=2.16.2=py311h06a4308_0 + - python-json-logger=2.0.7=py311h06a4308_0 + - python=3.11.10=he870216_0 + - pytz=2024.1=py311h06a4308_0 + - pyviz_comms=3.0.2=py311h06a4308_0 + - pyyaml=6.0.2=py311h5eee18b_0 + - pyzmq=24.0.1=py311h5eee18b_0 + - qt-main=5.15.2=hb6262e9_11 + - readline=8.2=h5eee18b_0 + - referencing=0.30.2=py311h06a4308_0 + - requests=2.32.3=py311h06a4308_1 + - rfc3339-validator=0.1.4=py311h06a4308_0 + - rfc3986-validator=0.1.1=py311h06a4308_0 + - rpds-py=0.10.6=py311hb02cf49_0 + - scipy=1.14.1=py311h08b1b3b_0 + - send2trash=1.8.2=py311h06a4308_0 + - setuptools=75.1.0=py311h06a4308_0 + - sip=6.7.12=py311h6a678d5_0 + - sniffio=1.3.0=py311h06a4308_0 + - soupsieve=2.5=py311h06a4308_0 + - sqlite=3.45.3=h5eee18b_0 + - tbb=2021.8.0=hdb19cb5_0 + - terminado=0.17.1=py311h06a4308_0 + - tinycss2=1.2.1=py311h06a4308_0 + - tk=8.6.14=h39e8969_0 + - toolz=0.12.0=py311h06a4308_0 + - tornado=6.4.1=py311h5eee18b_0 + - tqdm=4.66.5=py311h92b7b1e_0 + - traitlets=5.14.3=py311h06a4308_0 + - typing-extensions=4.11.0=py311h06a4308_0 + - typing_extensions=4.11.0=py311h06a4308_0 + - uc-micro-py=1.0.1=py311h06a4308_0 + - unicodedata2=15.1.0=py311h5eee18b_0 + - urllib3=2.2.3=py311h06a4308_0 + - webencodings=0.5.1=py311h06a4308_1 + - websocket-client=1.8.0=py311h06a4308_0 + - wheel=0.44.0=py311h06a4308_0 + - xarray=2023.6.0=py311h06a4308_0 + - xyzservices=2022.9.0=py311h06a4308_1 + - xz=5.4.6=h5eee18b_1 - yaml=0.2.5=h7b6447c_0 - - zeromq=4.3.4=h2531618_0 - - zict=3.0.0=py38h06a4308_0 - - zipp=3.11.0=py38h06a4308_0 - - zlib=1.2.12=h7f8727e_2 - - zstd=1.5.2=ha4553b6_0 + - zeromq=4.3.5=h6a678d5_0 + - zipp=3.20.2=py311h06a4308_0 + - zlib=1.2.13=h5eee18b_1 + - zstd=1.5.6=hc292b87_0 osx-64: - - anyio=3.5.0=py38hecd8cb5_0 - - appnope=0.1.2=py38hecd8cb5_1001 - - argon2-cffi-bindings=21.2.0=py38hca72f7f_0 - - attrs=23.1.0=py38hecd8cb5_0 - - beautifulsoup4=4.12.2=py38hecd8cb5_0 - - blas=1.0=mkl - - bokeh=2.3.3=py38hecd8cb5_0 - - bottleneck=1.3.5=py38h67323c0_0 - - brotli-bin=1.0.9=hca72f7f_7 - - brotli-python=1.0.9=py38he9d5cce_7 - - brotli=1.0.9=hca72f7f_7 - - ca-certificates=2023.08.22=hecd8cb5_0 - - certifi=2023.7.22=py38hecd8cb5_0 - - cffi=1.15.1=py38h6c40b1e_3 - - click=8.1.7=py38hecd8cb5_0 - - cloudpickle=2.2.1=py38hecd8cb5_0 - - colorcet=3.0.1=py38hecd8cb5_0 - - comm=0.1.2=py38hecd8cb5_0 - - cryptography=41.0.3=py38h30e54ef_0 - - cytoolz=0.12.0=py38hca72f7f_0 - - dask-core=2.12.0=py_0 - - dask=2.12.0=py_0 - - datashape=0.5.4=py38hecd8cb5_1 - - debugpy=1.6.7=py38hcec6c5f_0 - - distributed=2.12.0=py38_0 - - entrypoints=0.4=py38hecd8cb5_0 - - fastparquet=0.5.0=py38h67323c0_2 - - fonttools=4.25.0=pyhd3eb1b0_0 + - anyio=4.6.2=py311hecd8cb5_0 + - appnope=0.1.2=py311hecd8cb5_1001 + - argon2-cffi-bindings=21.2.0=py311h6c40b1e_0 + - attrs=24.2.0=py311hecd8cb5_0 + - beautifulsoup4=4.12.3=py311hecd8cb5_0 + - bokeh=3.6.0=py311hecd8cb5_0 + - bottleneck=1.4.2=py311h9b7fc35_0 + - brotli-bin=1.0.9=h6c40b1e_8 + - brotli-python=1.0.9=py311hcec6c5f_8 + - brotli=1.0.9=h6c40b1e_8 + - bzip2=1.0.8=h6c40b1e_6 + - ca-certificates=2024.9.24=hecd8cb5_0 + - certifi=2024.8.30=py311hecd8cb5_0 + - cffi=1.17.1=py311h9205ec4_0 + - click=8.1.7=py311hecd8cb5_0 + - cloudpickle=3.0.0=py311hecd8cb5_0 + - colorcet=3.1.0=py311hecd8cb5_0 + - comm=0.2.1=py311hecd8cb5_0 + - contourpy=1.2.0=py311ha357a0b_0 + - cramjam=2.7.0=py311h9c86198_0 + - dask-core=2024.8.2=py311hecd8cb5_0 + - datashader=0.16.3=py311hecd8cb5_0 + - debugpy=1.6.7=py311hcec6c5f_0 + - entrypoints=0.4=py311hecd8cb5_0 + - fastparquet=2024.2.0=py311hb3a5e46_0 + - fonttools=4.51.0=py311h6c40b1e_0 - freetype=2.12.1=hd8bbffd_0 - - fsspec=2023.9.2=py38hecd8cb5_0 - - giflib=5.2.1=h6c40b1e_3 - - idna=3.4=py38hecd8cb5_0 - - importlib-metadata=6.0.0=py38hecd8cb5_0 - - importlib_resources=6.1.0=py38hecd8cb5_0 - - intel-openmp=2023.1.0=ha357a0b_43547 - - ipykernel=6.25.0=py38h20db666_0 - - ipython=8.12.2=py38hecd8cb5_0 - - jedi=0.18.1=py38hecd8cb5_1 - - jpeg=9e=h6c40b1e_1 - - jsonschema=4.17.3=py38hecd8cb5_0 - - jupyter_client=7.4.9=py38hecd8cb5_0 - - jupyter_core=5.3.0=py38hecd8cb5_0 - - jupyter_server=1.23.4=py38hecd8cb5_0 - - kiwisolver=1.4.4=py38hcec6c5f_0 + - fsspec=2024.6.1=py311hecd8cb5_0 + - holoviews=1.20.0=py311hecd8cb5_0 + - hvplot=0.11.1=py311hecd8cb5_0 + - idna=3.7=py311hecd8cb5_0 + - importlib-metadata=7.0.1=py311hecd8cb5_0 + - ipykernel=6.29.5=py311hecd8cb5_0 + - ipython=8.27.0=py311hecd8cb5_0 + - jedi=0.19.1=py311hecd8cb5_0 + - jinja2=3.1.4=py311hecd8cb5_1 + - jpeg=9e=h46256e1_3 + - jsonschema-specifications=2023.7.1=py311hecd8cb5_0 + - jsonschema=4.23.0=py311hecd8cb5_0 + - jupyter_client=7.4.9=py311hecd8cb5_0 + - jupyter_core=5.7.2=py311hecd8cb5_0 + - jupyter_events=0.10.0=py311hecd8cb5_0 + - jupyter_server=2.14.1=py311hecd8cb5_0 + - jupyter_server_terminals=0.4.4=py311hecd8cb5_1 + - jupyterlab_pygments=0.2.2=py311hecd8cb5_0 + - kiwisolver=1.4.4=py311hcec6c5f_0 - lcms2=2.12=hf1fd2bf_0 - lerc=3.0=he9d5cce_0 - - libbrotlicommon=1.0.9=hca72f7f_7 - - libbrotlidec=1.0.9=hca72f7f_7 - - libbrotlienc=1.0.9=hca72f7f_7 + - libbrotlicommon=1.0.9=h6c40b1e_8 + - libbrotlidec=1.0.9=h6c40b1e_8 + - libbrotlienc=1.0.9=h6c40b1e_8 - libcxx=14.0.6=h9765a3e_0 - libdeflate=1.17=hb664fd8_1 - - libffi=3.4.4=hecd8cb5_0 + - libffi=3.4.4=hecd8cb5_1 - libgfortran5=11.3.0=h9dfd629_28 - libgfortran=5.0.0=11_3_0_hecd8cb5_28 - - libllvm11=11.0.0=h46f1229_1 + - libllvm14=14.0.6=h26321d7_4 + - libopenblas=0.3.21=h54e7dc3_0 - libpng=1.6.39=h6c40b1e_0 - libsodium=1.0.18=h1de35cc_0 - libtiff=4.5.1=hcec6c5f_0 - - libwebp-base=1.3.2=h6c40b1e_0 - - libwebp=1.3.2=hf6ce154_0 + - libwebp-base=1.3.2=h46256e1_1 + - linkify-it-py=2.0.0=py311hecd8cb5_0 - llvm-openmp=14.0.6=h0dcd299_0 - - llvmlite=0.37.0=py38hc9110bb_2 - - locket=1.0.0=py38hecd8cb5_0 - - lz4-c=1.9.4=hcec6c5f_0 - - markdown=3.4.1=py38hecd8cb5_0 - - markupsafe=2.0.1=py38h9ed2024_0 - - matplotlib-base=3.4.3=py38h0a11d32_0 - - matplotlib-inline=0.1.6=py38hecd8cb5_0 - - matplotlib=3.4.3=py38hecd8cb5_0 - - mistune=0.8.4=py38h1de35cc_1001 - - mkl-service=2.4.0=py38h6c40b1e_1 - - mkl=2023.1.0=h8e150cf_43559 - - mkl_fft=1.3.8=py38h6c40b1e_0 - - mkl_random=1.2.4=py38ha357a0b_0 - - msgpack-python=1.0.3=py38haf03e11_0 - - multipledispatch=0.6.0=py38_0 - - munkres=1.1.4=py_0 - - nbclassic=0.5.5=py38hecd8cb5_0 - - nbclient=0.5.13=py38hecd8cb5_0 - - nbconvert=6.4.4=py38hecd8cb5_0 - - nbformat=5.9.2=py38hecd8cb5_0 + - llvmlite=0.43.0=py311h6d0c2b6_0 + - locket=1.0.0=py311hecd8cb5_0 + - lz4-c=1.9.4=hcec6c5f_1 + - markdown-it-py=2.2.0=py311hecd8cb5_1 + - markdown=3.4.1=py311hecd8cb5_0 + - markupsafe=2.1.3=py311h6c40b1e_0 + - matplotlib-base=3.9.2=py311hc25a08b_0 + - matplotlib-inline=0.1.6=py311hecd8cb5_0 + - matplotlib=3.9.2=py311hecd8cb5_0 + - mdit-py-plugins=0.3.0=py311hecd8cb5_0 + - mdurl=0.1.0=py311hecd8cb5_0 + - mistune=2.0.4=py311hecd8cb5_0 + - multipledispatch=0.6.0=py311hecd8cb5_0 + - nbclassic=1.1.0=py311hecd8cb5_0 + - nbclient=0.8.0=py311hecd8cb5_0 + - nbconvert=7.16.4=py311hecd8cb5_0 + - nbformat=5.10.4=py311hecd8cb5_0 - ncurses=6.4=hcec6c5f_0 - - nest-asyncio=1.5.6=py38hecd8cb5_0 - - notebook-shim=0.2.2=py38hecd8cb5_0 - - notebook=6.5.4=py38hecd8cb5_1 - - numba=0.54.1=py38hae1ba45_0 - - numexpr=2.8.4=py38h47b59a4_1 - - numpy-base=1.20.3=py38h34da072_1 - - numpy=1.20.3=py38h57dabd6_1 - - openjpeg=2.4.0=h66ea3da_0 - - openssl=3.0.11=hca72f7f_2 - - packaging=23.1=py38hecd8cb5_0 - - pandas=1.3.5=py38h743cdd8_0 - - param=1.13.0=py38hecd8cb5_0 - - partd=1.4.1=py38hecd8cb5_0 - - pillow=10.0.1=py38h7d39338_0 - - pip=23.3=py38hecd8cb5_0 - - pkgutil-resolve-name=1.3.10=py38hecd8cb5_0 - - platformdirs=3.10.0=py38hecd8cb5_0 - - pooch=1.7.0=py38hecd8cb5_0 - - prometheus_client=0.14.1=py38hecd8cb5_0 - - prompt-toolkit=3.0.36=py38hecd8cb5_0 - - psutil=5.9.0=py38hca72f7f_0 - - pyct=0.5.0=py38hecd8cb5_0 - - pygments=2.15.1=py38hecd8cb5_1 - - pyopenssl=23.2.0=py38hecd8cb5_0 - - pyparsing=3.0.9=py38hecd8cb5_0 - - pyrsistent=0.18.0=py38hca72f7f_0 - - pysocks=1.7.1=py38_1 - - python-fastjsonschema=2.16.2=py38hecd8cb5_0 - - python-lmdb=1.4.1=py38hcec6c5f_0 - - python-snappy=0.6.0=py38h23ab428_3 - - python=3.8.18=h5ee71fb_0 - - pytz=2023.3.post1=py38hecd8cb5_0 - - pyviz_comms=2.3.0=py38hecd8cb5_0 - - pyyaml=6.0.1=py38h6c40b1e_0 - - pyzmq=23.2.0=py38he9d5cce_0 + - nest-asyncio=1.6.0=py311hecd8cb5_0 + - notebook-shim=0.2.3=py311hecd8cb5_0 + - notebook=6.5.7=py311hecd8cb5_0 + - numba=0.60.0=py311he327ffe_0 + - numexpr=2.10.1=py311hc59c7be_0 + - numpy-base=1.26.4=py311hb3ec012_0 + - numpy=1.26.4=py311h91b6869_0 + - openjpeg=2.5.2=hbf2204d_0 + - openssl=3.0.15=h46256e1_0 + - overrides=7.4.0=py311hecd8cb5_0 + - packaging=24.1=py311hecd8cb5_0 + - pandas=2.2.2=py311he327ffe_0 + - panel=1.5.3=py311hecd8cb5_0 + - param=2.1.1=py311hecd8cb5_0 + - partd=1.4.1=py311hecd8cb5_0 + - pillow=11.0.0=py311h9c91434_0 + - pip=24.2=py311hecd8cb5_0 + - platformdirs=3.10.0=py311hecd8cb5_0 + - prometheus_client=0.14.1=py311hecd8cb5_0 + - prompt-toolkit=3.0.43=py311hecd8cb5_0 + - psutil=5.9.0=py311h6c40b1e_0 + - pyct=0.5.0=py311hecd8cb5_0 + - pygments=2.15.1=py311hecd8cb5_1 + - pyparsing=3.2.0=py311hecd8cb5_0 + - pysocks=1.7.1=py311hecd8cb5_0 + - python-dateutil=2.9.0post0=py311hecd8cb5_2 + - python-fastjsonschema=2.16.2=py311hecd8cb5_0 + - python-json-logger=2.0.7=py311hecd8cb5_0 + - python=3.11.10=h4d6d9e5_0 + - pytz=2024.1=py311hecd8cb5_0 + - pyviz_comms=3.0.2=py311hecd8cb5_0 + - pyyaml=6.0.2=py311h46256e1_0 + - pyzmq=24.0.1=py311h6c40b1e_0 - readline=8.2=hca72f7f_0 - - requests=2.31.0=py38hecd8cb5_0 - - scipy=1.10.1=py38hf241641_1 - - setuptools=68.0.0=py38hecd8cb5_0 - - snappy=1.1.9=he9d5cce_0 - - sniffio=1.2.0=py38hecd8cb5_1 - - soupsieve=2.5=py38hecd8cb5_0 - - sqlite=3.41.2=h6c40b1e_0 + - referencing=0.30.2=py311hecd8cb5_0 + - requests=2.32.3=py311hecd8cb5_1 + - rfc3339-validator=0.1.4=py311hecd8cb5_0 + - rfc3986-validator=0.1.1=py311hecd8cb5_0 + - rpds-py=0.10.6=py311hf2ad997_0 + - scipy=1.14.1=py311hedc7b93_0 + - send2trash=1.8.2=py311hecd8cb5_0 + - setuptools=75.1.0=py311hecd8cb5_0 + - sniffio=1.3.0=py311hecd8cb5_0 + - soupsieve=2.5=py311hecd8cb5_0 + - sqlite=3.45.3=h6c40b1e_0 - tbb=2021.8.0=ha357a0b_0 - - terminado=0.17.1=py38hecd8cb5_0 - - testpath=0.6.0=py38hecd8cb5_0 - - thrift=0.17.0=py38he9d5cce_0 - - tk=8.6.12=h5d9f67b_0 - - toolz=0.12.0=py38hecd8cb5_0 - - tornado=6.3.3=py38h6c40b1e_0 - - tqdm=4.65.0=py38h01d92e1_0 - - traitlets=5.7.1=py38hecd8cb5_0 - - typing-extensions=4.7.1=py38hecd8cb5_0 - - typing_extensions=4.7.1=py38hecd8cb5_0 - - urllib3=1.26.18=py38hecd8cb5_0 - - webencodings=0.5.1=py38_1 - - websocket-client=0.58.0=py38hecd8cb5_4 - - wheel=0.41.2=py38hecd8cb5_0 - - xarray=2022.11.0=py38hecd8cb5_0 - - xz=5.4.2=h6c40b1e_0 + - terminado=0.17.1=py311hecd8cb5_0 + - tinycss2=1.2.1=py311hecd8cb5_0 + - tk=8.6.14=h4d00af3_0 + - toolz=0.12.0=py311hecd8cb5_0 + - tornado=6.4.1=py311h46256e1_0 + - tqdm=4.66.5=py311h85bffb1_0 + - traitlets=5.14.3=py311hecd8cb5_0 + - typing-extensions=4.11.0=py311hecd8cb5_0 + - typing_extensions=4.11.0=py311hecd8cb5_0 + - uc-micro-py=1.0.1=py311hecd8cb5_0 + - unicodedata2=15.1.0=py311h6c40b1e_0 + - urllib3=2.2.3=py311hecd8cb5_0 + - webencodings=0.5.1=py311hecd8cb5_1 + - websocket-client=1.8.0=py311hecd8cb5_0 + - wheel=0.44.0=py311hecd8cb5_0 + - xarray=2023.6.0=py311hecd8cb5_0 + - xyzservices=2022.9.0=py311hecd8cb5_1 + - xz=5.4.6=h6c40b1e_1 - yaml=0.2.5=haf1e3a3_0 - - zeromq=4.3.4=h23ab428_0 - - zict=3.0.0=py38hecd8cb5_0 - - zipp=3.11.0=py38hecd8cb5_0 - - zlib=1.2.13=h4dc903c_0 - - zstd=1.5.5=hc035e20_0 + - zeromq=4.3.5=hcec6c5f_0 + - zipp=3.20.2=py311hecd8cb5_0 + - zlib=1.2.13=h4b97444_1 + - zstd=1.5.6=h138b38a_0 osx-arm64: - - anyio=3.5.0=py38hca03da5_0 - - appnope=0.1.2=py38hca03da5_1001 - - argon2-cffi-bindings=21.2.0=py38h1a28f6b_0 - - attrs=23.1.0=py38hca03da5_0 - - beautifulsoup4=4.12.2=py38hca03da5_0 - - blas=1.0=openblas - - bokeh=2.3.3=py38hca03da5_0 - - bottleneck=1.3.5=py38heec5a64_0 - - brotli-python=1.0.9=py38hc377ac9_7 - - ca-certificates=2023.08.22=hca03da5_0 - - certifi=2023.7.22=py38hca03da5_0 - - cffi=1.15.1=py38h80987f9_3 - - click=8.1.7=py38hca03da5_0 - - cloudpickle=2.2.1=py38hca03da5_0 - - colorcet=3.0.1=py38hca03da5_0 - - comm=0.1.2=py38hca03da5_0 - - cryptography=41.0.3=py38hd4332d6_0 - - cytoolz=0.12.0=py38h1a28f6b_0 - - dask-core=2.10.1=py_0 - - dask=2.10.1=py_0 - - datashape=0.5.4=py38hca03da5_1 - - debugpy=1.6.7=py38h313beb8_0 - - distributed=2.10.0=py_0 - - entrypoints=0.4=py38hca03da5_0 - - fastparquet=0.5.0=py38heec5a64_2 - - fftw=3.3.9=h1a28f6b_1 + - anyio=4.6.2=py311hca03da5_0 + - appnope=0.1.2=py311hca03da5_1001 + - argon2-cffi-bindings=21.2.0=py311h80987f9_0 + - attrs=24.2.0=py311hca03da5_0 + - beautifulsoup4=4.12.3=py311hca03da5_0 + - bokeh=3.6.0=py311hca03da5_0 + - bottleneck=1.4.2=py311hb9f6ed7_0 + - brotli-bin=1.0.9=h80987f9_8 + - brotli-python=1.0.9=py311h313beb8_8 + - brotli=1.0.9=h80987f9_8 + - bzip2=1.0.8=h80987f9_6 + - ca-certificates=2024.9.24=hca03da5_0 + - certifi=2024.8.30=py311hca03da5_0 + - cffi=1.17.1=py311h3eb5a62_0 + - click=8.1.7=py311hca03da5_0 + - cloudpickle=3.0.0=py311hca03da5_0 + - colorcet=3.1.0=py311hca03da5_0 + - comm=0.2.1=py311hca03da5_0 + - contourpy=1.2.0=py311h48ca7d4_0 + - cramjam=2.7.0=py311h62f922a_0 + - dask-core=2024.8.2=py311hca03da5_0 + - datashader=0.16.3=py311hca03da5_0 + - debugpy=1.6.7=py311h313beb8_0 + - entrypoints=0.4=py311hca03da5_0 + - fastparquet=2024.2.0=py311hb9f6ed7_0 + - fonttools=4.51.0=py311h80987f9_0 - freetype=2.12.1=h1192e45_0 - - fsspec=2023.9.2=py38hca03da5_0 - - giflib=5.2.1=h80987f9_3 - - idna=3.4=py38hca03da5_0 - - importlib-metadata=6.0.0=py38hca03da5_0 - - importlib_resources=6.1.0=py38hca03da5_0 - - ipykernel=6.25.0=py38h33ce5c2_0 - - ipython=8.12.2=py38hca03da5_0 - - jedi=0.18.1=py38hca03da5_1 - - jpeg=9e=h80987f9_1 - - jsonschema=4.17.3=py38hca03da5_0 - - jupyter_client=7.4.9=py38hca03da5_0 - - jupyter_core=5.3.0=py38hca03da5_0 - - jupyter_server=1.23.4=py38hca03da5_0 - - kiwisolver=1.4.4=py38h313beb8_0 + - fsspec=2024.6.1=py311hca03da5_0 + - holoviews=1.20.0=py311hca03da5_0 + - hvplot=0.11.1=py311hca03da5_0 + - idna=3.7=py311hca03da5_0 + - importlib-metadata=7.0.1=py311hca03da5_0 + - ipykernel=6.29.5=py311hca03da5_0 + - ipython=8.27.0=py311hca03da5_0 + - jedi=0.19.1=py311hca03da5_0 + - jinja2=3.1.4=py311hca03da5_1 + - jpeg=9e=h80987f9_3 + - jsonschema-specifications=2023.7.1=py311hca03da5_0 + - jsonschema=4.23.0=py311hca03da5_0 + - jupyter_client=7.4.9=py311hca03da5_0 + - jupyter_core=5.7.2=py311hca03da5_0 + - jupyter_events=0.10.0=py311hca03da5_0 + - jupyter_server=2.14.1=py311hca03da5_0 + - jupyter_server_terminals=0.4.4=py311hca03da5_1 + - jupyterlab_pygments=0.2.2=py311hca03da5_0 + - kiwisolver=1.4.4=py311h313beb8_0 - lcms2=2.12=hba8e193_0 - lerc=3.0=hc377ac9_0 + - libbrotlicommon=1.0.9=h80987f9_8 + - libbrotlidec=1.0.9=h80987f9_8 + - libbrotlienc=1.0.9=h80987f9_8 - libcxx=14.0.6=h848a8c0_0 - libdeflate=1.17=h80987f9_1 - - libffi=3.4.4=hca03da5_0 + - libffi=3.4.4=hca03da5_1 - libgfortran5=11.3.0=h009349e_28 - libgfortran=5.0.0=11_3_0_hca03da5_28 - - libllvm11=11.1.0=h12f7ac0_6 + - libllvm14=14.0.6=h19fdd8a_4 - libopenblas=0.3.21=h269037a_0 - libpng=1.6.39=h80987f9_0 - libsodium=1.0.18=h1a28f6b_0 - libtiff=4.5.1=h313beb8_0 - - libwebp-base=1.3.2=h80987f9_0 - - libwebp=1.3.2=ha3663a8_0 + - libwebp-base=1.3.2=h80987f9_1 + - linkify-it-py=2.0.0=py311hca03da5_0 - llvm-openmp=14.0.6=hc6e5704_0 - - llvmlite=0.37.0=py38h8b39d70_0 - - locket=1.0.0=py38hca03da5_0 - - lz4-c=1.9.4=h313beb8_0 - - markdown=3.4.1=py38hca03da5_0 - - markupsafe=2.0.1=py38h1a28f6b_0 - - matplotlib-base=3.4.2=py38hda4e04e_0 - - matplotlib-inline=0.1.6=py38hca03da5_0 - - matplotlib=3.4.2=py38hca03da5_0 - - mistune=0.8.4=py38h1a28f6b_1000 - - msgpack-python=1.0.3=py38h525c30c_0 - - multipledispatch=0.6.0=py38hca03da5_0 - - nbclassic=0.5.5=py38hca03da5_0 - - nbclient=0.5.13=py38hca03da5_0 - - nbconvert=6.4.4=py38hca03da5_0 - - nbformat=5.9.2=py38hca03da5_0 + - llvmlite=0.43.0=py311h313beb8_0 + - locket=1.0.0=py311hca03da5_0 + - lz4-c=1.9.4=h313beb8_1 + - markdown-it-py=2.2.0=py311hca03da5_1 + - markdown=3.4.1=py311hca03da5_0 + - markupsafe=2.1.3=py311h80987f9_0 + - matplotlib-base=3.9.2=py311hecf7826_0 + - matplotlib-inline=0.1.6=py311hca03da5_0 + - matplotlib=3.9.2=py311hca03da5_0 + - mdit-py-plugins=0.3.0=py311hca03da5_0 + - mdurl=0.1.0=py311hca03da5_0 + - mistune=2.0.4=py311hca03da5_0 + - multipledispatch=0.6.0=py311hca03da5_0 + - nbclassic=1.1.0=py311hca03da5_0 + - nbclient=0.8.0=py311hca03da5_0 + - nbconvert=7.16.4=py311hca03da5_0 + - nbformat=5.10.4=py311hca03da5_0 - ncurses=6.4=h313beb8_0 - - nest-asyncio=1.5.6=py38hca03da5_0 - - notebook-shim=0.2.2=py38hca03da5_0 - - notebook=6.5.4=py38hca03da5_1 - - numba=0.54.0=py38hc377ac9_0 - - numexpr=2.8.4=py38h79ee842_1 - - numpy-base=1.19.5=py38hdc56644_4 - - numpy=1.19.5=py38h831b0dc_4 - - openjpeg=2.3.0=h7a6adac_2 - - openssl=3.0.11=h1a28f6b_2 - - packaging=23.1=py38hca03da5_0 - - pandas=1.3.5=py38h9197a36_0 - - param=1.13.0=py38hca03da5_0 - - partd=1.4.1=py38hca03da5_0 - - pillow=10.0.1=py38h3b245a6_0 - - pip=23.3=py38hca03da5_0 - - pkgutil-resolve-name=1.3.10=py38hca03da5_0 - - platformdirs=3.10.0=py38hca03da5_0 - - pooch=1.7.0=py38hca03da5_0 - - prometheus_client=0.14.1=py38hca03da5_0 - - prompt-toolkit=3.0.36=py38hca03da5_0 - - psutil=5.9.0=py38h1a28f6b_0 - - pyct=0.5.0=py38hca03da5_0 - - pygments=2.15.1=py38hca03da5_1 - - pyopenssl=23.2.0=py38hca03da5_0 - - pyparsing=3.0.9=py38hca03da5_0 - - pyrsistent=0.18.0=py38h1a28f6b_0 - - pysocks=1.7.1=py38hca03da5_0 - - python-fastjsonschema=2.16.2=py38hca03da5_0 - - python-lmdb=1.4.1=py38h313beb8_0 - - python-snappy=0.6.0=py38hc377ac9_0 - - python=3.8.18=hb885b13_0 - - pytz=2023.3.post1=py38hca03da5_0 - - pyviz_comms=2.3.0=py38hca03da5_0 - - pyyaml=6.0.1=py38h80987f9_0 - - pyzmq=23.2.0=py38hc377ac9_0 + - nest-asyncio=1.6.0=py311hca03da5_0 + - notebook-shim=0.2.3=py311hca03da5_0 + - notebook=6.5.7=py311hca03da5_0 + - numba=0.60.0=py311h7aedaa7_0 + - numexpr=2.10.1=py311h5d9532f_0 + - numpy-base=1.26.4=py311hfbfe69c_0 + - numpy=1.26.4=py311he598dae_0 + - openjpeg=2.5.2=h54b8e55_0 + - openssl=3.0.15=h80987f9_0 + - overrides=7.4.0=py311hca03da5_0 + - packaging=24.1=py311hca03da5_0 + - pandas=2.2.2=py311h7aedaa7_0 + - panel=1.5.3=py311hca03da5_0 + - param=2.1.1=py311hca03da5_0 + - partd=1.4.1=py311hca03da5_0 + - pillow=11.0.0=py311hfaf4e14_0 + - pip=24.2=py311hca03da5_0 + - platformdirs=3.10.0=py311hca03da5_0 + - prometheus_client=0.14.1=py311hca03da5_0 + - prompt-toolkit=3.0.43=py311hca03da5_0 + - psutil=5.9.0=py311h80987f9_0 + - pyct=0.5.0=py311hca03da5_0 + - pygments=2.15.1=py311hca03da5_1 + - pyparsing=3.2.0=py311hca03da5_0 + - pysocks=1.7.1=py311hca03da5_0 + - python-dateutil=2.9.0post0=py311hca03da5_2 + - python-fastjsonschema=2.16.2=py311hca03da5_0 + - python-json-logger=2.0.7=py311hca03da5_0 + - python=3.11.10=hb885b13_0 + - pytz=2024.1=py311hca03da5_0 + - pyviz_comms=3.0.2=py311hca03da5_0 + - pyyaml=6.0.2=py311h80987f9_0 + - pyzmq=24.0.1=py311h80987f9_0 - readline=8.2=h1a28f6b_0 - - requests=2.31.0=py38hca03da5_0 - - scipy=1.10.0=py38h9d039d2_0 - - setuptools=68.0.0=py38hca03da5_0 - - snappy=1.1.9=hc377ac9_0 - - sniffio=1.2.0=py38hca03da5_1 - - soupsieve=2.5=py38hca03da5_0 - - sqlite=3.41.2=h80987f9_0 + - referencing=0.30.2=py311hca03da5_0 + - requests=2.32.3=py311hca03da5_1 + - rfc3339-validator=0.1.4=py311hca03da5_0 + - rfc3986-validator=0.1.1=py311hca03da5_0 + - rpds-py=0.10.6=py311hf0e4da2_0 + - scipy=1.14.1=py311hac8794a_0 + - send2trash=1.8.2=py311hca03da5_0 + - setuptools=75.1.0=py311hca03da5_0 + - sniffio=1.3.0=py311hca03da5_0 + - soupsieve=2.5=py311hca03da5_0 + - sqlite=3.45.3=h80987f9_0 - tbb=2021.8.0=h48ca7d4_0 - - terminado=0.17.1=py38hca03da5_0 - - testpath=0.6.0=py38hca03da5_0 - - thrift=0.17.0=py38hc377ac9_0 - - tk=8.6.12=hb8d0fd4_0 - - toolz=0.12.0=py38hca03da5_0 - - tornado=6.3.3=py38h80987f9_0 - - tqdm=4.65.0=py38h86d0a89_0 - - traitlets=5.7.1=py38hca03da5_0 - - typing-extensions=4.7.1=py38hca03da5_0 - - typing_extensions=4.7.1=py38hca03da5_0 - - urllib3=1.26.18=py38hca03da5_0 - - webencodings=0.5.1=py38hca03da5_1 - - websocket-client=0.58.0=py38hca03da5_4 - - wheel=0.41.2=py38hca03da5_0 - - xarray=0.20.1=pyhd3eb1b0_1 - - xz=5.4.2=h80987f9_0 + - terminado=0.17.1=py311hca03da5_0 + - tinycss2=1.2.1=py311hca03da5_0 + - tk=8.6.14=h6ba3021_0 + - toolz=0.12.0=py311hca03da5_0 + - tornado=6.4.1=py311h80987f9_0 + - tqdm=4.66.5=py311hb6e6a13_0 + - traitlets=5.14.3=py311hca03da5_0 + - typing-extensions=4.11.0=py311hca03da5_0 + - typing_extensions=4.11.0=py311hca03da5_0 + - uc-micro-py=1.0.1=py311hca03da5_0 + - unicodedata2=15.1.0=py311h80987f9_0 + - urllib3=2.2.3=py311hca03da5_0 + - webencodings=0.5.1=py311hca03da5_1 + - websocket-client=1.8.0=py311hca03da5_0 + - wheel=0.44.0=py311hca03da5_0 + - xarray=2023.6.0=py311hca03da5_0 + - xyzservices=2022.9.0=py311hca03da5_1 + - xz=5.4.6=h80987f9_1 - yaml=0.2.5=h1a28f6b_0 - - zeromq=4.3.4=hc377ac9_0 - - zict=3.0.0=py38hca03da5_0 - - zipp=3.11.0=py38hca03da5_0 - - zlib=1.2.13=h5a0b063_0 - - zstd=1.5.5=hd90d995_0 + - zeromq=4.3.5=h313beb8_0 + - zipp=3.20.2=py311hca03da5_0 + - zlib=1.2.13=h18a0788_1 + - zstd=1.5.6=hfb09047_0 win-64: - - anyio=3.5.0=py38haa95532_0 - - argon2-cffi-bindings=21.2.0=py38h2bbff1b_0 - - attrs=23.1.0=py38haa95532_0 - - beautifulsoup4=4.12.2=py38haa95532_0 + - anyio=4.6.2=py311haa95532_0 + - argon2-cffi-bindings=21.2.0=py311h2bbff1b_0 + - attrs=24.2.0=py311haa95532_0 + - beautifulsoup4=4.12.3=py311haa95532_0 - blas=1.0=mkl - - bokeh=2.3.3=py38haa95532_0 - - bottleneck=1.3.5=py38h080aedc_0 - - brotli-bin=1.0.9=h2bbff1b_7 - - brotli-python=1.0.9=py38hd77b12b_7 - - brotli=1.0.9=h2bbff1b_7 - - ca-certificates=2023.08.22=haa95532_0 - - certifi=2023.7.22=py38haa95532_0 - - cffi=1.15.1=py38h2bbff1b_3 - - click=8.1.7=py38haa95532_0 - - cloudpickle=2.2.1=py38haa95532_0 - - colorama=0.4.6=py38haa95532_0 - - colorcet=3.0.1=py38haa95532_0 - - comm=0.1.2=py38haa95532_0 - - cryptography=41.0.3=py38h89fc84f_0 - - cytoolz=0.12.0=py38h2bbff1b_0 - - dask-core=2.12.0=py_0 - - dask=2.12.0=py_0 - - datashape=0.5.4=py38haa95532_1 - - debugpy=1.6.7=py38hd77b12b_0 - - distributed=2.12.0=py38_0 - - entrypoints=0.4=py38haa95532_0 - - fastparquet=0.5.0=py38h080aedc_2 - - fonttools=4.25.0=pyhd3eb1b0_0 + - bokeh=3.6.0=py311haa95532_0 + - bottleneck=1.4.2=py311h57dcf0c_0 + - brotli-bin=1.0.9=h2bbff1b_8 + - brotli-python=1.0.9=py311hd77b12b_8 + - brotli=1.0.9=h2bbff1b_8 + - bzip2=1.0.8=h2bbff1b_6 + - ca-certificates=2024.9.24=haa95532_0 + - certifi=2024.8.30=py311haa95532_0 + - cffi=1.17.1=py311h827c3e9_0 + - click=8.1.7=py311haa95532_0 + - cloudpickle=3.0.0=py311haa95532_0 + - colorama=0.4.6=py311haa95532_0 + - colorcet=3.1.0=py311haa95532_0 + - comm=0.2.1=py311haa95532_0 + - contourpy=1.2.0=py311h59b6b97_0 + - cramjam=2.7.0=py311h005caf5_0 + - dask-core=2024.8.2=py311haa95532_0 + - datashader=0.16.3=py311haa95532_0 + - debugpy=1.6.7=py311hd77b12b_0 + - entrypoints=0.4=py311haa95532_0 + - fastparquet=2024.2.0=py311hd7041d2_0 + - fonttools=4.51.0=py311h2bbff1b_0 - freetype=2.12.1=ha860e81_0 - - fsspec=2023.9.2=py38haa95532_0 - - giflib=5.2.1=h8cc25b3_3 + - fsspec=2024.6.1=py311haa95532_0 + - holoviews=1.20.0=py311haa95532_0 + - hvplot=0.11.1=py311haa95532_0 - icc_rt=2022.1.0=h6049295_2 - icu=73.1=h6c2663c_0 - - idna=3.4=py38haa95532_0 - - importlib-metadata=6.0.0=py38haa95532_0 - - importlib_resources=6.1.0=py38haa95532_0 - - intel-openmp=2023.1.0=h59b6b97_46319 - - ipykernel=6.25.0=py38h9909e9c_0 - - ipython=8.12.2=py38haa95532_0 - - jedi=0.18.1=py38haa95532_1 - - jpeg=9e=h2bbff1b_1 - - jsonschema=4.17.3=py38haa95532_0 - - jupyter_client=7.4.9=py38haa95532_0 - - jupyter_core=5.3.0=py38haa95532_0 - - jupyter_server=1.23.4=py38haa95532_0 - - kiwisolver=1.4.4=py38hd77b12b_0 + - idna=3.7=py311haa95532_0 + - importlib-metadata=7.0.1=py311haa95532_0 + - intel-openmp=2023.1.0=h59b6b97_46320 + - ipykernel=6.29.5=py311haa95532_0 + - ipython=8.27.0=py311haa95532_0 + - jedi=0.19.1=py311haa95532_0 + - jinja2=3.1.4=py311haa95532_1 + - jpeg=9e=h827c3e9_3 + - jsonschema-specifications=2023.7.1=py311haa95532_0 + - jsonschema=4.23.0=py311haa95532_0 + - jupyter_client=7.4.9=py311haa95532_0 + - jupyter_core=5.7.2=py311haa95532_0 + - jupyter_events=0.10.0=py311haa95532_0 + - jupyter_server=2.14.1=py311haa95532_0 + - jupyter_server_terminals=0.4.4=py311haa95532_1 + - jupyterlab_pygments=0.2.2=py311haa95532_0 + - kiwisolver=1.4.4=py311hd77b12b_0 - krb5=1.20.1=h5b6d351_0 + - lcms2=2.12=h83e58a3_0 - lerc=3.0=hd77b12b_0 - - libbrotlicommon=1.0.9=h2bbff1b_7 - - libbrotlidec=1.0.9=h2bbff1b_7 - - libbrotlienc=1.0.9=h2bbff1b_7 + - libbrotlicommon=1.0.9=h2bbff1b_8 + - libbrotlidec=1.0.9=h2bbff1b_8 + - libbrotlienc=1.0.9=h2bbff1b_8 - libclang13=14.0.6=default_h8e68704_1 - libclang=14.0.6=default_hb5a9fac_1 - libdeflate=1.17=h2bbff1b_1 - - libffi=3.4.4=hd77b12b_0 + - libffi=3.4.4=hd77b12b_1 - libpng=1.6.39=h8cc25b3_0 - - libpq=12.15=h906ac69_1 + - libpq=17.0=h70ee33d_0 - libsodium=1.0.18=h62dcd97_0 - libtiff=4.5.1=hd77b12b_0 - - libwebp-base=1.3.2=h2bbff1b_0 - - libwebp=1.3.2=hbc33d0d_0 - - llvmlite=0.37.0=py38h23ce68f_2 - - locket=1.0.0=py38haa95532_0 - - lz4-c=1.9.4=h2bbff1b_0 - - markdown=3.4.1=py38haa95532_0 - - markupsafe=2.0.1=py38h2bbff1b_0 - - matplotlib-base=3.4.3=py38h49ac443_0 - - matplotlib-inline=0.1.6=py38haa95532_0 - - matplotlib=3.4.3=py38haa95532_0 - - mistune=0.8.4=py38he774522_1000 - - mkl-service=2.4.0=py38h2bbff1b_1 - - mkl=2023.1.0=h6b88ed4_46357 - - mkl_fft=1.3.8=py38h2bbff1b_0 - - mkl_random=1.2.4=py38h59b6b97_0 - - msgpack-python=1.0.3=py38h59b6b97_0 - - multipledispatch=0.6.0=py38_0 - - munkres=1.1.4=py_0 - - nbclassic=0.5.5=py38haa95532_0 - - nbclient=0.5.13=py38haa95532_0 - - nbconvert=6.4.4=py38haa95532_0 - - nbformat=5.9.2=py38haa95532_0 - - nest-asyncio=1.5.6=py38haa95532_0 - - notebook-shim=0.2.2=py38haa95532_0 - - notebook=6.5.4=py38haa95532_1 - - numba=0.54.1=py38hf11a4ad_0 - - numexpr=2.8.4=py38h7b80656_1 - - numpy-base=1.20.3=py38h5bfbeaa_1 - - numpy=1.20.3=py38h749eb61_1 - - openjpeg=2.4.0=h4fc8c34_0 - - openssl=3.0.11=h2bbff1b_2 - - packaging=23.1=py38haa95532_0 - - pandas=1.3.5=py38h6214cd6_0 - - param=1.13.0=py38haa95532_0 - - partd=1.4.1=py38haa95532_0 - - pillow=10.0.1=py38h045eedc_0 - - pip=23.3=py38haa95532_0 - - pkgutil-resolve-name=1.3.10=py38haa95532_0 - - platformdirs=3.10.0=py38haa95532_0 - - ply=3.11=py38_0 - - pooch=1.7.0=py38haa95532_0 - - prometheus_client=0.14.1=py38haa95532_0 - - prompt-toolkit=3.0.36=py38haa95532_0 - - psutil=5.9.0=py38h2bbff1b_0 - - pyct=0.5.0=py38haa95532_0 - - pygments=2.15.1=py38haa95532_1 - - pyopenssl=23.2.0=py38haa95532_0 - - pyparsing=3.0.9=py38haa95532_0 - - pyqt5-sip=12.13.0=py38h2bbff1b_0 - - pyqt=5.15.10=py38hd77b12b_0 - - pyrsistent=0.18.0=py38h196d8e1_0 - - pysocks=1.7.1=py38haa95532_0 - - python-fastjsonschema=2.16.2=py38haa95532_0 - - python-lmdb=1.4.1=py38hd77b12b_0 - - python-snappy=0.6.0=py38hd77b12b_3 - - python=3.8.18=h1aa4202_0 - - pytz=2023.3.post1=py38haa95532_0 - - pyviz_comms=2.3.0=py38haa95532_0 - - pywin32=305=py38h2bbff1b_0 - - pywinpty=2.0.10=py38h5da7b33_0 - - pyyaml=6.0.1=py38h2bbff1b_0 - - pyzmq=23.2.0=py38hd77b12b_0 - - qt-main=5.15.2=h19c9488_10 - - requests=2.31.0=py38haa95532_0 - - scipy=1.10.1=py38hdcfc7df_1 - - setuptools=68.0.0=py38haa95532_0 - - sip=6.7.12=py38hd77b12b_0 - - snappy=1.1.9=h6c2663c_0 - - sniffio=1.2.0=py38haa95532_1 - - soupsieve=2.5=py38haa95532_0 - - sqlite=3.41.2=h2bbff1b_0 + - libwebp-base=1.3.2=h3d04722_1 + - linkify-it-py=2.0.0=py311haa95532_0 + - llvmlite=0.43.0=py311hf2fb9eb_0 + - locket=1.0.0=py311haa95532_0 + - lz4-c=1.9.4=h2bbff1b_1 + - m2w64-gcc-libgfortran=5.3.0=6 + - m2w64-gcc-libs-core=5.3.0=7 + - m2w64-gcc-libs=5.3.0=7 + - m2w64-gmp=6.1.0=2 + - m2w64-libwinpthread-git=5.0.0.4634.697f757=2 + - markdown-it-py=2.2.0=py311haa95532_1 + - markdown=3.4.1=py311haa95532_0 + - markupsafe=2.1.3=py311h2bbff1b_0 + - matplotlib-base=3.9.2=py311h472561b_0 + - matplotlib-inline=0.1.6=py311haa95532_0 + - matplotlib=3.9.2=py311haa95532_0 + - mdit-py-plugins=0.3.0=py311haa95532_0 + - mdurl=0.1.0=py311haa95532_0 + - mistune=2.0.4=py311haa95532_0 + - mkl-service=2.4.0=py311h2bbff1b_1 + - mkl=2023.1.0=h6b88ed4_46358 + - mkl_fft=1.3.11=py311h827c3e9_0 + - mkl_random=1.2.8=py311hea22821_0 + - msys2-conda-epoch=20160418=1 + - multipledispatch=0.6.0=py311haa95532_0 + - nbclassic=1.1.0=py311haa95532_0 + - nbclient=0.8.0=py311haa95532_0 + - nbconvert=7.16.4=py311haa95532_0 + - nbformat=5.10.4=py311haa95532_0 + - nest-asyncio=1.6.0=py311haa95532_0 + - notebook-shim=0.2.3=py311haa95532_0 + - notebook=6.5.7=py311haa95532_0 + - numba=0.60.0=py311hea22821_0 + - numexpr=2.10.1=py311h4cd664f_0 + - numpy-base=1.26.4=py311hd01c5d8_0 + - numpy=1.26.4=py311hdab7c0b_0 + - openjpeg=2.5.2=hae555c5_0 + - openssl=3.0.15=h827c3e9_0 + - overrides=7.4.0=py311haa95532_0 + - packaging=24.1=py311haa95532_0 + - pandas=2.2.2=py311hea22821_0 + - panel=1.5.3=py311haa95532_0 + - param=2.1.1=py311haa95532_0 + - partd=1.4.1=py311haa95532_0 + - pillow=11.0.0=py311hb5480e2_0 + - pip=24.2=py311haa95532_0 + - platformdirs=3.10.0=py311haa95532_0 + - ply=3.11=py311haa95532_0 + - prometheus_client=0.14.1=py311haa95532_0 + - prompt-toolkit=3.0.43=py311haa95532_0 + - psutil=5.9.0=py311h2bbff1b_0 + - pyct=0.5.0=py311haa95532_0 + - pygments=2.15.1=py311haa95532_1 + - pyparsing=3.2.0=py311haa95532_0 + - pyqt5-sip=12.13.0=py311h2bbff1b_0 + - pyqt=5.15.10=py311hd77b12b_0 + - pysocks=1.7.1=py311haa95532_0 + - python-dateutil=2.9.0post0=py311haa95532_2 + - python-fastjsonschema=2.16.2=py311haa95532_0 + - python-json-logger=2.0.7=py311haa95532_0 + - python=3.11.10=h4607a30_0 + - pytz=2024.1=py311haa95532_0 + - pyviz_comms=3.0.2=py311haa95532_0 + - pywin32=305=py311h2bbff1b_0 + - pywinpty=2.0.10=py311h5da7b33_0 + - pyyaml=6.0.2=py311h827c3e9_0 + - pyzmq=24.0.1=py311h2bbff1b_0 + - qt-main=5.15.2=h19c9488_11 + - referencing=0.30.2=py311haa95532_0 + - requests=2.32.3=py311haa95532_1 + - rfc3339-validator=0.1.4=py311haa95532_0 + - rfc3986-validator=0.1.1=py311haa95532_0 + - rpds-py=0.10.6=py311h062c2fa_0 + - scipy=1.14.1=py311h9f229c6_0 + - send2trash=1.8.2=py311haa95532_0 + - setuptools=75.1.0=py311haa95532_0 + - sip=6.7.12=py311hd77b12b_0 + - sniffio=1.3.0=py311haa95532_0 + - soupsieve=2.5=py311haa95532_0 + - sqlite=3.45.3=h2bbff1b_0 - tbb=2021.8.0=h59b6b97_0 - - terminado=0.17.1=py38haa95532_0 - - testpath=0.6.0=py38haa95532_0 - - thrift=0.17.0=py38hd77b12b_0 - - tk=8.6.12=h2bbff1b_0 - - tomli=2.0.1=py38haa95532_0 - - toolz=0.12.0=py38haa95532_0 - - tornado=6.3.3=py38h2bbff1b_0 - - tqdm=4.65.0=py38hd4e2768_0 - - traitlets=5.7.1=py38haa95532_0 - - typing-extensions=4.7.1=py38haa95532_0 - - typing_extensions=4.7.1=py38haa95532_0 - - urllib3=1.26.18=py38haa95532_0 - - vc=14.2=h21ff451_1 - - vs2015_runtime=14.27.29016=h5e58377_2 - - webencodings=0.5.1=py38_1 - - websocket-client=0.58.0=py38haa95532_4 - - wheel=0.41.2=py38haa95532_0 - - win_inet_pton=1.1.0=py38haa95532_0 + - terminado=0.17.1=py311haa95532_0 + - tinycss2=1.2.1=py311haa95532_0 + - tk=8.6.14=h0416ee5_0 + - toolz=0.12.0=py311haa95532_0 + - tornado=6.4.1=py311h827c3e9_0 + - tqdm=4.66.5=py311h746a85d_0 + - traitlets=5.14.3=py311haa95532_0 + - typing-extensions=4.11.0=py311haa95532_0 + - typing_extensions=4.11.0=py311haa95532_0 + - uc-micro-py=1.0.1=py311haa95532_0 + - unicodedata2=15.1.0=py311h2bbff1b_0 + - urllib3=2.2.3=py311haa95532_0 + - vc=14.40=h2eaa2aa_1 + - vs2015_runtime=14.40.33807=h98bb1dd_1 + - webencodings=0.5.1=py311haa95532_1 + - websocket-client=1.8.0=py311haa95532_0 + - wheel=0.44.0=py311haa95532_0 + - win_inet_pton=1.1.0=py311haa95532_0 - winpty=0.4.3=4 - - xarray=2022.11.0=py38haa95532_0 - - xz=5.4.2=h8cc25b3_0 + - xarray=2023.6.0=py311haa95532_0 + - xyzservices=2022.9.0=py311haa95532_1 + - xz=5.4.6=h8cc25b3_1 - yaml=0.2.5=he774522_0 - - zeromq=4.3.4=hd77b12b_0 - - zict=3.0.0=py38haa95532_0 - - zipp=3.11.0=py38haa95532_0 - - zlib=1.2.13=h8cc25b3_0 - - zstd=1.5.5=hd43e919_0 + - zeromq=4.3.5=hd77b12b_0 + - zipp=3.20.2=py311haa95532_0 + - zlib=1.2.13=h8cc25b3_1 + - zstd=1.5.6=h8880b57_0 diff --git a/opensky/anaconda-project.yml b/opensky/anaconda-project.yml index e3389b9de..52e889d6c 100644 --- a/opensky/anaconda-project.yml +++ b/opensky/anaconda-project.yml @@ -18,22 +18,16 @@ channels: [defaults] user_fields: [examples_config] packages: &pkgs -- python=3.8 -- notebook <7 -- bokeh <2.4 -- colorcet -- datashader =0.13.0 -- fastparquet =0.5.0 -- holoviews =1.14.5 -- matplotlib <3.5 -- pandas <1.4 -- python-snappy =0.6.0 -# Not direct deps but needed for the projects to run -- numba <0.55 -- numpy <1.21 -- jinja2 <3 -- markupSafe =2.0.1 - +- python=3.11 +- notebook<7 +- bokeh>=3.5.0 +- colorcet>=3.1.0 +- datashader>=0.16.0 +- fastparquet>=2024.2.0 +- holoviews>=1.20.0 +- hvplot>=0.11.1 +- matplotlib>=3.8.4 +- pandas>=2.2.2 dependencies: *pkgs diff --git a/opensky/opensky.ipynb b/opensky/opensky.ipynb index 6555d0e61..392e735fb 100644 --- a/opensky/opensky.ipynb +++ b/opensky/opensky.ipynb @@ -4,18 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# OpenSky" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## OpenSky flight trajectories\n", - "\n", - "Flight path information for commercial flights is available for some regions of the USA and Europe from the crowd-sourced [OpenSky Network](https://opensky-network.org/). OpenSky collects data from a large number of users monitoring public air-traffic control information. Here we will use a subset of the data that was polled from their REST API at an interval of 1 minute over 4 days (September 5-13, 2016), using the collect_data.py and prepare_data.py. In general the terms of use for OpenSky data do not allow redistribution, but we have obtained specific permission for distributing the subset of the data used in this project, which is a 200MB Parquet file (1.1GB as the original database). If you want more or different data, you can run the scripts yourself, or else you can contact OpenSky asking for a copy of the dataset.\n", + "# OpenSky flight trajectories\n", "\n", - "**NOTE:** This dataset is also explorable through the Datashader example dashboard. From inside the examples directory, run: `DS_DATASET=opensky panel serve --show opensky.ipynb`\n", + "Flight path information for commercial flights is available for some regions of the USA and Europe from the crowd-sourced [OpenSky Network](https://opensky-network.org/). OpenSky collects data from a large number of users monitoring public air-traffic control information. Here we will use a subset of the data that was polled from their REST API at an interval of 1 minute over 4 days (September 5-13, 2016), using the `collect_data.py` and `prepare_data.py` scripts. In general the terms of use for OpenSky data do not allow redistribution, but we have obtained specific permission for distributing the subset of the data used in this project, which is a 200MB Parquet file (1.1GB as the original database). If you want more or different data, you can run the scripts yourself, or else you can contact OpenSky asking for a copy of the dataset.\n", "\n", "We'll only use some of the fields provided by OpenSky, out of: *icao24, callsign, origin, time_position, time_velocity, longitude, latitude, altitude, on_ground, velocity, heading, vertical_rate, sensors, timestamp*\n", "\n", @@ -49,15 +40,14 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [], "source": [ "import datashader as ds\n", - "import datashader.transfer_functions as tf\n", "from colorcet import fire\n", "\n", - "import numpy as np\n", - "\n", "plot_width = 850\n", "plot_height = 600\n", "x_range = (-2.0e6, 2.5e6)\n", @@ -96,14 +86,14 @@ "metadata": {}, "outputs": [], "source": [ - "tf.set_background(tf.shade(agg, cmap=fire), 'black')" + "ds.tf.set_background(ds.tf.shade(agg, cmap=fire), 'black')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This plot shows all of the trajectories in this database, overlaid in a way that avoids [overplotting](https://anaconda.org/jbednar/plotting_pitfalls/notebook). With this \"fire\" color map, a single trajectory shows up as black, while increasing levels of overlap show up as brighter colors. \n", + "This plot shows all of the trajectories in this database, overlaid in a way that avoids [overplotting](https://datashader.org/user_guide/Plotting_Pitfalls.html). With this \"fire\" color map, a single trajectory shows up as black, while increasing levels of overlap show up as brighter colors. \n", "\n", "A static image on its own like this is difficult to interpret, but if we overlay it on a map we can see where these flights originate, and can zoom in to see detail in specific regions:" ] @@ -114,20 +104,12 @@ "metadata": {}, "outputs": [], "source": [ - "import holoviews as hv\n", + "import hvplot.pandas # noqa\n", "from holoviews import opts\n", - "from holoviews.operation import datashader as hd\n", - "hv.extension('bokeh', 'matplotlib')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ + "\n", "opts.defaults(\n", - " opts.RGB(width=850, height=600, xaxis=None, yaxis=None))" + " opts.Path(width=plot_width, height=plot_height, xaxis=None, yaxis=None,\n", + " xlim=x_range, ylim=y_range))" ] }, { @@ -136,17 +118,17 @@ "metadata": {}, "outputs": [], "source": [ - "tile_url ='http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{Z}/{Y}/{X}.png'\n", - "datashaded = hd.datashade(hv.Path(flightpaths, ['longitude', 'latitude']), \n", - " x_range=x_range, y_range=y_range, aggregator=ds.count())\n", - "hv.Tiles(tile_url) * datashaded" + "flightpaths.hvplot.paths(\n", + " 'longitude', 'latitude', tiles='EsriStreet',\n", + " aggregator=ds.count(), datashade=True,\n", + ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "E.g. try zooming in on London in the above figure, which has a lot of structure not visible in the initial rendering but visible on a zoom. Note that zooming in will only reveal more detail in the datashader plot if you are working with a live server; a static HTML view (e.g. on Anaconda Cloud) will dynamically update the underlying map plot, but not the data. \n", + "E.g. try zooming in on London in the above figure, which has a lot of structure not visible in the initial rendering but visible on a zoom. Note that zooming in will only reveal more detail in the datashader plot if you are working with a live server; a static HTML view will dynamically update the underlying map plot, but not the data. \n", "\n", "We can use the metadata associated with each trajectory to show additional information. For instance, we can color each flight by its country of origin, using the key:\n", "\n", @@ -167,12 +149,17 @@ "metadata": {}, "outputs": [], "source": [ + "import numpy as np\n", + "from matplotlib.colors import rgb2hex\n", + "from matplotlib import colormaps\n", + "\n", "def categorical_color_key(aggregator, cmap):\n", - " \"\"\"Generate a color key from the given colormap with the appropriate number of colors for flightpaths\"\"\"\n", - " from matplotlib.colors import rgb2hex\n", - " from matplotlib.cm import get_cmap\n", + " \"\"\"\n", + " Generate a color key from the given colormap with the appropriate number\n", + " of colors for flightpaths.\n", + " \"\"\"\n", " ncats = len(flightpaths[aggregator.column].unique())\n", - " return [str(rgb2hex(get_cmap(cmap)(i))) for i in np.linspace(0, 1, ncats)]" + " return [str(rgb2hex(colormaps.get_cmap(cmap)(i))) for i in np.linspace(0, 1, ncats)]" ] }, { @@ -181,11 +168,12 @@ "metadata": {}, "outputs": [], "source": [ - "aggregator = ds.count_cat('origin')\n", - "datashaded = hd.datashade(hv.Path(flightpaths, ['longitude', 'latitude']), \n", - " x_range=x_range, y_range=y_range, aggregator=aggregator, \n", - " color_key=categorical_color_key(aggregator, 'hsv_r'))\n", - "hv.Tiles(tile_url) * datashaded" + "aggregator = ds.by('origin')\n", + "flightpaths.hvplot.paths(\n", + " 'longitude', 'latitude', tiles='EsriStreet',\n", + " datashade=True, aggregator=aggregator,\n", + " color_key=categorical_color_key(aggregator, 'hsv_r'), legend=False,\n", + ")" ] }, { @@ -201,9 +189,11 @@ "metadata": {}, "outputs": [], "source": [ - "datashaded = hd.datashade(hv.Path(flightpaths, ['longitude', 'latitude']), \n", - " x_range=x_range, y_range=y_range, aggregator=ds.count_cat('ascending'))\n", - "hv.Tiles(tile_url) * datashaded" + "flightpaths.hvplot.paths(\n", + " 'longitude', 'latitude', tiles='EsriStreet',\n", + " datashade=True, aggregator=ds.by('ascending'),\n", + " color_key=['red', 'blue'], legend=False,\n", + ")" ] }, { @@ -219,9 +209,10 @@ "metadata": {}, "outputs": [], "source": [ - "datashaded = hd.datashade(hv.Path(flightpaths, ['longitude', 'latitude']), \n", - " x_range=x_range, y_range=y_range, aggregator=ds.mean('velocity'), cmap=fire[::-1])\n", - "hv.Tiles(tile_url) * datashaded" + "flightpaths.hvplot.paths(\n", + " 'longitude', 'latitude', tiles='EsriStreet',\n", + " datashade=True, aggregator=ds.mean('velocity'), cmap=fire[::-1],\n", + ")" ] }, { @@ -237,15 +228,8 @@ "metadata": {}, "outputs": [], "source": [ - "hv.output(backend='matplotlib')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ + "hvplot.extension('matplotlib')\n", + "\n", "opts.defaults(\n", " opts.RGB(xaxis=None, yaxis=None, bgcolor='black', axiswise=True),\n", " opts.Layout(hspace=0.1, vspace=0, sublabel_format=None, framewise=True))" @@ -257,7 +241,8 @@ "metadata": {}, "outputs": [], "source": [ - "from datashader.utils import lnglat_to_meters\n", + "import holoviews as hv\n", + "from holoviews.util.transform import lon_lat_to_easting_northing as ll_en\n", "\n", "cities = {'Frankfurt' : (8.6821, 50.1109),\n", " 'London' : (-0.1278, 51.5074), \n", @@ -267,10 +252,9 @@ " 'Munich' : (11.5820, 48.1351)}\n", "\n", "radius = 150000\n", - "mercator_cities = {city: lnglat_to_meters(lon, lat) for city, (lon, lat) in cities.items()}\n", - "city_ranges = {city: dict(x_range=(lon-radius, lon+radius), y_range=(lat-radius, lat+radius))\n", - " for city, (lon, lat) in mercator_cities.items()}\n", - "\n" + "mercator_cities = {city: ll_en(lon, lat) for city, (lon, lat) in cities.items()}\n", + "city_ranges = {city: dict(xlim=(lon-radius, lon+radius), ylim=(lat-radius, lat+radius))\n", + " for city, (lon, lat) in mercator_cities.items()}" ] }, { @@ -279,12 +263,16 @@ "metadata": {}, "outputs": [], "source": [ - "aggregator = ds.count_cat('origin')\n", - "hv.Layout([hd.datashade(hv.Path(flightpaths, ['longitude', 'latitude']), \n", - " aggregator=aggregator, \n", - " color_key=categorical_color_key(aggregator, 'hsv_r'),\n", - " dynamic=False, **ranges).relabel(city)\n", - " for city, ranges in sorted(city_ranges.items())]).cols(3)" + "paths_plot = [\n", + " flightpaths.hvplot.paths(\n", + " 'longitude', 'latitude', dynamic=False,\n", + " datashade=True, aggregator=aggregator,\n", + " color_key=categorical_color_key(aggregator, 'hsv_r'),\n", + " legend=False, title=city, data_aspect=1, **ranges\n", + " )\n", + " for city, ranges in sorted(city_ranges.items())\n", + "]\n", + "hv.Layout(paths_plot).cols(3)" ] }, { @@ -300,19 +288,22 @@ "metadata": {}, "outputs": [], "source": [ - "hd.datashade(hv.Path(flightpaths, ['longitude', 'latitude']), \n", - " aggregator=aggregator, \n", - " color_key=categorical_color_key(aggregator, 'hsv_r'),\n", - " dynamic=False, **city_ranges[\"Zurich\"]).opts(fig_size=400, bgcolor=None)" + "flightpaths.hvplot.paths(\n", + " 'longitude', 'latitude',\n", + " datashade=True, aggregator=aggregator,\n", + " color_key=categorical_color_key(aggregator, 'hsv_r'),\n", + " bgcolor=None, width=400, data_aspect=1, legend=False,\n", + " **city_ranges[\"Zurich\"]\n", + ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "As you can see, datashader makes it quite easy to explore even large databases of trajectory information, without trial and error parameter setting and experimentation. These examples have millions of datapoints, but it could work with [billions](http://anaconda.org/jbednar/osm/notebook) just as easily, covering long time ranges or large geographic areas. Check out the other [datashader notebooks](http://anaconda.org/jbednar/notebooks) for other examples!\n", + "As you can see, datashader makes it quite easy to explore even large databases of trajectory information, without trial and error parameter setting and experimentation. These examples have millions of datapoints, but it could work with billions just as easily, covering long time ranges or large geographic areas.\n", "\n", - "This data was obtained by running a cron job with the collect_data.py script running at one-minute intervals over a four-day period. Then the data was transformed into the Parquet format using the prepare_data.py script. " + "This data was obtained by running a cron job with the `collect_data.py` script running at one-minute intervals over a four-day period. Then the data was transformed into the Parquet format using the `prepare_data.py` script. " ] } ], @@ -332,9 +323,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.18" + "version": "3.11.10" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 }