diff --git a/census/anaconda-project-lock.yml b/census/anaconda-project-lock.yml index 14e5898e3..eb1641c8d 100644 --- a/census/anaconda-project-lock.yml +++ b/census/anaconda-project-lock.yml @@ -17,7 +17,7 @@ locking_enabled: true env_specs: default: locked: true - env_spec_hash: f77c1de648d7ce09b908696cf30143e68890eaa7 + env_spec_hash: d2bacfc086d03f5c10c94f259210f999d84e1198 platforms: - linux-64 - osx-64 @@ -27,633 +27,825 @@ 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 - - dask-core=2022.11.1=pyhd8ed1ab_0 - - dask=2022.11.1=pyhd8ed1ab_0 + - dask-core=2023.5.0=pyhd8ed1ab_0 + - dask=2023.5.0=pyhd8ed1ab_0 - decorator=5.1.1=pyhd3eb1b0_0 - defusedxml=0.7.1=pyhd3eb1b0_0 - - distributed=2022.11.1=pyhd8ed1ab_0 + - distributed=2023.5.0=pyhd8ed1ab_0 - executing=0.8.3=pyhd3eb1b0_0 - - fonttools=4.25.0=pyhd3eb1b0_0 - heapdict=1.0.1=pyhd3eb1b0_0 + - importlib_metadata=8.5.0=hd3eb1b0_0 - ipython_genutils=0.2.0=pyhd3eb1b0_1 - - jupyterlab_pygments=0.1.2=py_0 - - munkres=1.1.4=py_0 - pandocfilters=1.5.0=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=2023c=h04d1e81_0 + - tzdata=2024b=h04d1e81_0 - wcwidth=0.2.5=pyhd3eb1b0_0 unix: + - blas=1.0=openblas - pexpect=4.8.0=pyhd3eb1b0_3 - ptyprocess=0.7.0=pyhd3eb1b0_2 - osx: - - blas=1.0=openblas linux-64: - _libgcc_mutex=0.1=conda_forge - _openmp_mutex=4.5=2_gnu - - anyio=3.5.0=py310h06a4308_0 + - anyio=4.6.2=py310h06a4308_0 - argon2-cffi-bindings=21.2.0=py310h7f8727e_0 - - attrs=23.1.0=py310h06a4308_0 - - beautifulsoup4=4.12.2=py310h06a4308_0 - - blas=1.0=mkl - - bokeh=2.4.3=py310h06a4308_0 - - bottleneck=1.3.5=py310ha9d4c09_0 - - brotli-bin=1.0.9=h5eee18b_7 - - brotli-python=1.0.9=py310h6a678d5_7 - - brotli=1.0.9=h5eee18b_7 - - bzip2=1.0.8=h7b6447c_0 - - ca-certificates=2023.08.22=h06a4308_0 - - certifi=2023.7.22=py310h06a4308_0 - - cffi=1.15.1=py310h5eee18b_3 + - arrow-cpp=16.1.0=hc1eb8f0_0 + - attrs=24.2.0=py310h06a4308_0 + - aws-c-auth=0.6.19=h5eee18b_0 + - aws-c-cal=0.5.20=hdbd6064_0 + - aws-c-common=0.8.5=h5eee18b_0 + - aws-c-compression=0.2.16=h5eee18b_0 + - aws-c-event-stream=0.2.15=h6a678d5_0 + - aws-c-http=0.6.25=h5eee18b_0 + - aws-c-io=0.13.10=h5eee18b_0 + - aws-c-mqtt=0.7.13=h5eee18b_0 + - aws-c-s3=0.1.51=hdbd6064_0 + - aws-c-sdkutils=0.1.6=h5eee18b_0 + - aws-checksums=0.1.13=h5eee18b_0 + - aws-crt-cpp=0.18.16=h6a678d5_0 + - aws-sdk-cpp=1.10.55=h721c034_0 + - beautifulsoup4=4.12.3=py310h06a4308_0 + - bleach=6.2.0=py310h06a4308_0 + - bokeh=3.2.1=py310h2f386ee_0 + - boost-cpp=1.82.0=hdb19cb5_2 + - brotli-bin=1.0.9=h5eee18b_8 + - brotli-python=1.0.9=py310h6a678d5_8 + - brotli=1.0.9=h5eee18b_8 + - bzip2=1.0.8=h5eee18b_6 + - c-ares=1.19.1=h5eee18b_0 + - ca-certificates=2024.11.26=h06a4308_0 + - certifi=2024.8.30=py310h06a4308_0 + - cffi=1.17.1=py310h1fdaa30_0 - click=8.1.7=py310h06a4308_0 - - cloudpickle=2.2.1=py310h06a4308_0 - - colorcet=3.0.1=py310h06a4308_0 - - comm=0.1.2=py310h06a4308_0 - - contourpy=1.0.5=py310hdb19cb5_0 - - cramjam=2.6.2=py310h52d8a92_0 - - cytoolz=0.12.0=py310h5eee18b_0 - - datashader=0.15.2=py310h06a4308_0 + - cloudpickle=3.0.0=py310h06a4308_0 + - colorcet=3.1.0=py310h06a4308_0 + - comm=0.2.1=py310h06a4308_0 + - contourpy=1.3.1=py310hdb19cb5_0 + - cramjam=2.7.0=py310ha89cbab_0 + - cytoolz=0.12.2=py310h5eee18b_0 + - datashader=0.15.1=py310h06a4308_0 - datashape=0.5.4=py310h06a4308_1 - debugpy=1.6.7=py310h6a678d5_0 - entrypoints=0.4=py310h06a4308_0 - - exceptiongroup=1.0.4=py310h06a4308_0 - - fastparquet=2023.8.0=py310ha9d4c09_0 + - exceptiongroup=1.2.0=py310h06a4308_0 + - fastparquet=2024.11.0=py310hf462985_0 + - fonttools=4.51.0=py310h5eee18b_0 - freetype=2.12.1=h4a9f257_0 - - fsspec=2023.9.2=py310h06a4308_0 - - giflib=5.2.1=h5eee18b_3 - - holoviews=1.17.1=py310h06a4308_0 + - fsspec=2024.6.1=py310h06a4308_0 + - gflags=2.2.2=h6a678d5_1 + - glog=0.5.0=h6a678d5_1 + - holoviews=1.16.0=py310h06a4308_0 - icu=73.1=h6a678d5_0 - - idna=3.4=py310h06a4308_0 - - intel-openmp=2023.1.0=hdb19cb5_46305 - - ipykernel=6.25.0=py310h2f386ee_0 - - ipython=8.15.0=py310h06a4308_0 - - jedi=0.18.1=py310h06a4308_1 - - jinja2=3.1.2=py310h06a4308_0 - - jpeg=9e=h5eee18b_1 - - jsonschema=4.17.3=py310h06a4308_0 - - jupyter_client=7.3.4=py310h06a4308_0 - - jupyter_core=5.3.0=py310h06a4308_0 - - jupyter_server=1.23.4=py310h06a4308_0 + - idna=3.7=py310h06a4308_0 + - importlib-metadata=8.5.0=py310h06a4308_0 + - ipykernel=6.29.5=py310h06a4308_0 + - ipython=8.27.0=py310h06a4308_0 + - jedi=0.19.1=py310h06a4308_0 + - jinja2=3.1.4=py310h06a4308_1 + - jpeg=9e=h5eee18b_3 + - jsonschema-specifications=2023.7.1=py310h06a4308_0 + - jsonschema=4.23.0=py310h06a4308_0 + - jupyter_client=7.4.9=py310h06a4308_0 + - jupyter_core=5.7.2=py310h06a4308_0 + - jupyter_events=0.10.0=py310h06a4308_0 + - jupyter_server=2.14.1=py310h06a4308_0 + - jupyter_server_terminals=0.4.4=py310h06a4308_1 + - jupyterlab_pygments=0.2.2=py310h06a4308_0 - kiwisolver=1.4.4=py310h6a678d5_0 + - krb5=1.20.1=h143b758_1 - lcms2=2.12=h3be6417_0 - - ld_impl_linux-64=2.38=h1181459_1 + - ld_impl_linux-64=2.40=h12ee557_0 - lerc=3.0=h295c915_0 - - libbrotlicommon=1.0.9=h5eee18b_7 - - libbrotlidec=1.0.9=h5eee18b_7 - - libbrotlienc=1.0.9=h5eee18b_7 + - libabseil=20240116.2=cxx17_h6a678d5_0 + - libboost=1.82.0=h109eef0_2 + - libbrotlicommon=1.0.9=h5eee18b_8 + - libbrotlidec=1.0.9=h5eee18b_8 + - libbrotlienc=1.0.9=h5eee18b_8 + - libcurl=8.9.1=h251f7ec_0 - libdeflate=1.17=h5eee18b_1 - - libffi=3.4.4=h6a678d5_0 - - libgcc-ng=13.2.0=h807b86a_2 - - libgfortran-ng=13.2.0=h69a702a_2 - - libgfortran5=13.2.0=ha4646dd_2 - - libgomp=13.2.0=h807b86a_2 - - libllvm11=11.1.0=h9e868ea_6 + - libedit=3.1.20230828=h5eee18b_0 + - libev=4.33=h7f8727e_1 + - libevent=2.1.12=hdbd6064_1 + - libffi=3.4.4=h6a678d5_1 + - libgcc-ng=14.2.0=h69a702a_1 + - libgcc=14.2.0=h77fa898_1 + - libgfortran-ng=11.2.0=h00389a5_1 + - libgfortran5=11.2.0=h1234567_1 + - libgomp=14.2.0=h77fa898_1 + - libgrpc=1.62.2=h2d74bed_0 + - libllvm14=14.0.6=hecde1de_4 + - libnghttp2=1.57.0=h2d74bed_0 + - libopenblas=0.3.21=h043d6bf_0 - libpng=1.6.39=h5eee18b_0 + - libprotobuf=4.25.3=he621ea3_0 - libsodium=1.0.18=h7b6447c_0 - - libstdcxx-ng=13.2.0=h7e041cc_2 + - libssh2=1.11.1=h251f7ec_0 + - libstdcxx-ng=14.2.0=h4852527_1 + - libstdcxx=14.2.0=hc0a3c3a_1 + - libthrift=0.15.0=h1795dd8_2 - libtiff=4.5.1=h6a678d5_0 - libuuid=1.41.5=h5eee18b_0 - - libwebp-base=1.3.2=h5eee18b_0 - - libwebp=1.3.2=h11a3e52_0 - - libxml2=2.10.4=hf1b16e4_1 - - libxslt=1.1.37=h5eee18b_1 - - llvmlite=0.38.0=py310h4ff587b_0 + - libwebp-base=1.3.2=h5eee18b_1 + - linkify-it-py=2.0.0=py310h06a4308_0 + - llvmlite=0.43.0=py310h6a678d5_0 - locket=1.0.0=py310h06a4308_0 - - lxml=4.9.3=py310hdbbb534_0 - - lz4-c=1.9.4=h6a678d5_0 + - lz4-c=1.9.4=h6a678d5_1 - lz4=4.3.2=py310h5eee18b_0 + - markdown-it-py=2.2.0=py310h06a4308_1 - markdown=3.4.1=py310h06a4308_0 - - markupsafe=2.1.1=py310h7f8727e_0 - - matplotlib-base=3.7.2=py310h1128e8f_0 + - markupsafe=2.1.3=py310h5eee18b_0 + - matplotlib-base=3.9.2=py310hbfdbfaf_1 - matplotlib-inline=0.1.6=py310h06a4308_0 - - mistune=0.8.4=py310h7f8727e_1000 - - mkl-service=2.4.0=py310h5eee18b_1 - - mkl=2023.1.0=h213fc3f_46343 - - mkl_fft=1.3.8=py310h5eee18b_0 - - mkl_random=1.2.4=py310hdb19cb5_0 + - mdit-py-plugins=0.3.0=py310h06a4308_0 + - mdurl=0.1.0=py310h06a4308_0 + - mistune=2.0.4=py310h06a4308_0 - msgpack-python=1.0.3=py310hd09550d_0 - multipledispatch=0.6.0=py310h06a4308_0 - - nbclassic=0.5.5=py310h06a4308_0 - - nbclient=0.5.13=py310h06a4308_0 - - nbconvert=6.5.4=py310h06a4308_0 - - nbformat=5.9.2=py310h06a4308_0 + - nbclassic=1.1.0=py310h06a4308_0 + - nbclient=0.8.0=py310h06a4308_0 + - nbconvert-core=7.16.4=py310h06a4308_1 + - nbconvert-pandoc=7.16.4=hd3eb1b0_1 + - nbconvert=7.16.4=hd3eb1b0_1 + - nbformat=5.10.4=py310h06a4308_0 - ncurses=6.4=h6a678d5_0 - - nest-asyncio=1.5.6=py310h06a4308_0 - - notebook-shim=0.2.2=py310h06a4308_0 - - notebook=6.5.4=py310h06a4308_1 - - numba=0.55.1=py310h00e6091_0 - - numexpr=2.8.7=py310h85018f9_0 - - numpy-base=1.21.5=py310hb5e798b_4 - - numpy=1.21.5=py310h5f9d8c6_4 - - openjpeg=2.4.0=h3ad879b_0 - - openssl=3.0.11=h7f8727e_2 - - packaging=23.1=py310h06a4308_0 - - pandas=1.5.3=py310h1128e8f_0 - - panel=0.14.3=py310h06a4308_0 + - nest-asyncio=1.6.0=py310h06a4308_0 + - notebook-shim=0.2.3=py310h06a4308_0 + - notebook=6.5.7=py310h06a4308_0 + - numba=0.60.0=py310h5dc88bb_0 + - numpy-base=1.26.4=py310h8a23956_0 + - numpy=1.26.4=py310heeff2f4_0 + - openjpeg=2.5.2=he7f1fd0_0 + - openssl=3.0.15=h5eee18b_0 + - orc=2.0.1=h2d29ad5_0 + - overrides=7.4.0=py310h06a4308_0 + - packaging=24.1=py310h06a4308_0 + - pandas=2.0.1=py310h7cbd5c2_1 + - pandoc=2.12=h06a4308_3 + - panel=1.2.3=py310h06a4308_0 - param=1.13.0=py310h06a4308_0 - - partd=1.4.0=py310h06a4308_0 - - pillow=10.0.1=py310ha6cbd5a_0 - - pip=23.3=py310h06a4308_0 + - partd=1.4.1=py310h06a4308_0 + - pillow=11.0.0=py310hfdbf927_0 + - pip=24.2=py310h06a4308_0 - platformdirs=3.10.0=py310h06a4308_0 - - prometheus_client=0.14.1=py310h06a4308_0 - - prompt-toolkit=3.0.36=py310h06a4308_0 + - prometheus_client=0.21.0=py310h06a4308_0 + - prompt-toolkit=3.0.43=py310h06a4308_0 - psutil=5.9.0=py310h5eee18b_0 + - pyarrow=16.1.0=py310h1128e8f_0 - pyct=0.5.0=py310h06a4308_0 - pygments=2.15.1=py310h06a4308_1 - - pyparsing=3.0.9=py310h06a4308_0 - - pyrsistent=0.18.0=py310h7f8727e_0 + - pyparsing=3.2.0=py310h06a4308_0 - pysocks=1.7.1=py310h06a4308_0 - - python-fastjsonschema=2.16.2=py310h06a4308_0 + - python-dateutil=2.9.0post0=py310h06a4308_2 + - python-fastjsonschema=2.20.0=py310h06a4308_0 + - python-json-logger=2.0.7=py310h06a4308_0 - python-lmdb=1.4.1=py310h6a678d5_0 - - python-snappy=0.6.1=py310h6a678d5_0 - - python=3.10.13=h955ad1f_0 - - pytz=2023.3.post1=py310h06a4308_0 - - pyviz_comms=2.3.0=py310h06a4308_0 - - pyyaml=6.0.1=py310h5eee18b_0 - - pyzmq=23.2.0=py310h6a678d5_0 + - python=3.10.15=he870216_1 + - python_abi=3.10=2_cp310 + - pytz=2024.1=py310h06a4308_0 + - pyviz_comms=3.0.2=py310h06a4308_0 + - pyyaml=6.0.2=py310h5eee18b_0 + - pyzmq=24.0.1=py310h5eee18b_0 + - re2=2022.04.01=h295c915_0 - readline=8.2=h5eee18b_0 - - requests=2.31.0=pyhd8ed1ab_0 - - scipy=1.11.3=py310h5f9d8c6_0 - - setuptools=68.0.0=py310h06a4308_0 - - snappy=1.1.9=h295c915_0 - - sniffio=1.2.0=py310h06a4308_1 + - referencing=0.30.2=py310h06a4308_0 + - requests=2.32.3=py310h06a4308_1 + - rfc3339-validator=0.1.4=py310h06a4308_0 + - rfc3986-validator=0.1.1=py310h06a4308_0 + - rpds-py=0.10.6=py310h4aa5aa6_1 + - s2n=1.3.27=hdbd6064_0 + - scipy=1.14.1=py310heeff2f4_0 + - send2trash=1.8.2=py310h06a4308_0 + - setuptools=75.1.0=py310h06a4308_0 + - snappy=1.2.1=h6a678d5_0 + - sniffio=1.3.0=py310h06a4308_0 - soupsieve=2.5=py310h06a4308_0 - - sqlite=3.41.2=h5eee18b_0 - - tbb=2021.8.0=hdb19cb5_0 + - sqlite=3.45.3=h5eee18b_0 - terminado=0.17.1=py310h06a4308_0 - tinycss2=1.2.1=py310h06a4308_0 - - tk=8.6.12=h1ccaba5_0 + - tk=8.6.14=h39e8969_0 - toolz=0.12.0=py310h06a4308_0 - - tornado=6.1=py310h7f8727e_0 - - tqdm=4.65.0=py310h2f386ee_0 - - traitlets=5.7.1=py310h06a4308_0 - - typing-extensions=4.7.1=py310h06a4308_0 - - typing_extensions=4.7.1=py310h06a4308_0 - - urllib3=2.0.3=py310h06a4308_0 + - tornado=6.4.1=py310h5eee18b_0 + - tqdm=4.66.5=py310h2f386ee_0 + - traitlets=5.14.3=py310h06a4308_0 + - typing-extensions=4.11.0=py310h06a4308_0 + - typing_extensions=4.11.0=py310h06a4308_0 + - uc-micro-py=1.0.1=py310h06a4308_0 + - unicodedata2=15.1.0=py310h5eee18b_0 + - urllib3=2.2.3=py310h06a4308_0 + - utf8proc=2.6.1=h5eee18b_1 - webencodings=0.5.1=py310h06a4308_1 - - websocket-client=0.58.0=py310h06a4308_4 - - wheel=0.41.2=py310h06a4308_0 + - websocket-client=1.8.0=py310h06a4308_0 + - wheel=0.44.0=py310h06a4308_0 - xarray=2023.6.0=py310h06a4308_0 - - xz=5.4.2=h5eee18b_0 + - xyzservices=2022.9.0=py310h06a4308_1 + - xz=5.4.6=h5eee18b_1 - yaml=0.2.5=h7b6447c_0 - - zeromq=4.3.4=h2531618_0 + - zeromq=4.3.5=h6a678d5_0 - zict=3.0.0=py310h06a4308_0 - - zlib=1.2.13=h5eee18b_0 - - zstd=1.5.5=hc292b87_0 + - zipp=3.21.0=py310h06a4308_0 + - zlib=1.2.13=h5eee18b_1 + - zstd=1.5.6=hc292b87_0 osx-64: - - anyio=3.5.0=py310hecd8cb5_0 + - anyio=4.6.2=py310hecd8cb5_0 - appnope=0.1.2=py310hecd8cb5_1001 - argon2-cffi-bindings=21.2.0=py310hca72f7f_0 - - attrs=23.1.0=py310hecd8cb5_0 - - beautifulsoup4=4.12.2=py310hecd8cb5_0 - - bokeh=2.4.3=py310hecd8cb5_0 - - bottleneck=1.3.5=py310h4e76f89_0 - - brotli-bin=1.0.9=hca72f7f_7 - - brotli-python=1.0.9=py310he9d5cce_7 - - brotli=1.0.9=hca72f7f_7 - - bzip2=1.0.8=h1de35cc_0 - - ca-certificates=2023.08.22=hecd8cb5_0 - - certifi=2023.7.22=py310hecd8cb5_0 - - cffi=1.15.1=py310h6c40b1e_3 + - arrow-cpp=16.1.0=hc0a701b_0 + - attrs=24.2.0=py310hecd8cb5_0 + - aws-c-auth=0.6.19=h6c40b1e_0 + - aws-c-cal=0.5.20=h3333b6a_0 + - aws-c-common=0.8.5=h6c40b1e_0 + - aws-c-compression=0.2.16=h6c40b1e_0 + - aws-c-event-stream=0.2.15=hcec6c5f_0 + - aws-c-http=0.6.25=h6c40b1e_0 + - aws-c-io=0.13.10=h6c40b1e_0 + - aws-c-mqtt=0.7.13=h6c40b1e_0 + - aws-c-s3=0.1.51=h6c40b1e_0 + - aws-c-sdkutils=0.1.6=h6c40b1e_0 + - aws-checksums=0.1.13=h6c40b1e_0 + - aws-crt-cpp=0.18.16=hcec6c5f_0 + - aws-sdk-cpp=1.10.55=h61975a4_0 + - beautifulsoup4=4.12.3=py310hecd8cb5_0 + - bleach=6.2.0=py310hecd8cb5_0 + - bokeh=3.2.1=py310h20db666_0 + - boost-cpp=1.82.0=ha357a0b_2 + - brotli-bin=1.0.9=h6c40b1e_8 + - brotli-python=1.0.9=py310hcec6c5f_8 + - brotli=1.0.9=h6c40b1e_8 + - bzip2=1.0.8=h6c40b1e_6 + - c-ares=1.19.1=h6c40b1e_0 + - ca-certificates=2024.11.26=hecd8cb5_0 + - certifi=2024.8.30=py310hecd8cb5_0 + - cffi=1.17.1=py310h9205ec4_0 - click=8.1.7=py310hecd8cb5_0 - - cloudpickle=2.2.1=py310hecd8cb5_0 - - colorcet=3.0.1=py310hecd8cb5_0 - - comm=0.1.2=py310hecd8cb5_0 - - contourpy=1.0.5=py310haf03e11_0 - - cramjam=2.6.2=py310h7242b5c_0 - - cytoolz=0.12.0=py310hca72f7f_0 - - datashader=0.15.2=py310hecd8cb5_0 + - cloudpickle=3.0.0=py310hecd8cb5_0 + - colorcet=3.1.0=py310hecd8cb5_0 + - comm=0.2.1=py310hecd8cb5_0 + - contourpy=1.3.1=py310h1962661_0 + - cramjam=2.7.0=py310hdacacd6_0 + - cytoolz=0.12.2=py310h6c40b1e_0 + - datashader=0.15.1=py310hecd8cb5_0 - datashape=0.5.4=py310hecd8cb5_1 - debugpy=1.6.7=py310hcec6c5f_0 - entrypoints=0.4=py310hecd8cb5_0 - - exceptiongroup=1.0.4=py310hecd8cb5_0 - - fastparquet=2023.8.0=py310h7b7cdfe_0 + - exceptiongroup=1.2.0=py310hecd8cb5_0 + - fastparquet=2024.11.0=py310h6fa6179_0 + - fonttools=4.51.0=py310h6c40b1e_0 - freetype=2.12.1=hd8bbffd_0 - - fsspec=2023.9.2=py310hecd8cb5_0 - - giflib=5.2.1=h6c40b1e_3 - - holoviews=1.17.1=py310hecd8cb5_0 + - fsspec=2024.6.1=py310hecd8cb5_0 + - gflags=2.2.2=hcec6c5f_1 + - glog=0.5.0=hcec6c5f_1 + - holoviews=1.16.0=py310hecd8cb5_0 - icu=73.1=hcec6c5f_0 - - idna=3.4=py310hecd8cb5_0 - - ipykernel=6.25.0=py310h20db666_0 - - ipython=8.15.0=py310hecd8cb5_0 - - jedi=0.18.1=py310hecd8cb5_1 - - jinja2=3.1.2=py310hecd8cb5_0 - - jpeg=9e=h6c40b1e_1 - - jsonschema=4.17.3=py310hecd8cb5_0 - - jupyter_client=7.3.4=py310hecd8cb5_0 - - jupyter_core=5.3.0=py310hecd8cb5_0 - - jupyter_server=1.23.4=py310hecd8cb5_0 + - idna=3.7=py310hecd8cb5_0 + - importlib-metadata=8.5.0=py310hecd8cb5_0 + - ipykernel=6.29.5=py310hecd8cb5_0 + - ipython=8.27.0=py310hecd8cb5_0 + - jedi=0.19.1=py310hecd8cb5_0 + - jinja2=3.1.4=py310hecd8cb5_1 + - jpeg=9e=h46256e1_3 + - jsonschema-specifications=2023.7.1=py310hecd8cb5_0 + - jsonschema=4.23.0=py310hecd8cb5_0 + - jupyter_client=7.4.9=py310hecd8cb5_0 + - jupyter_core=5.7.2=py310hecd8cb5_0 + - jupyter_events=0.10.0=py310hecd8cb5_0 + - jupyter_server=2.14.1=py310hecd8cb5_0 + - jupyter_server_terminals=0.4.4=py310hecd8cb5_1 + - jupyterlab_pygments=0.2.2=py310hecd8cb5_0 - kiwisolver=1.4.4=py310hcec6c5f_0 + - krb5=1.20.1=h428f121_1 - 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 - - libcxx=14.0.6=h9765a3e_0 + - libabseil=20240116.2=cxx17_h548131f_0 + - libboost=1.82.0=hf53b9f2_2 + - libbrotlicommon=1.0.9=h6c40b1e_8 + - libbrotlidec=1.0.9=h6c40b1e_8 + - libbrotlienc=1.0.9=h6c40b1e_8 + - libcurl=8.9.1=h3a17b82_0 + - libcxx=19.1.4=hf95d169_0 - libdeflate=1.17=hb664fd8_1 - - libffi=3.4.4=hecd8cb5_0 + - libedit=3.1.20230828=h6c40b1e_0 + - libev=4.33=h9ed2024_1 + - libevent=2.1.12=h04015c4_1 + - libffi=3.4.4=hecd8cb5_1 - libgfortran5=11.3.0=h9dfd629_28 - libgfortran=5.0.0=11_3_0_hecd8cb5_28 - - libiconv=1.16=hca72f7f_2 - - libllvm14=14.0.6=h91fad77_3 + - libgrpc=1.62.2=hf2926fd_0 + - libiconv=1.16=h6c40b1e_3 + - libllvm14=14.0.6=h26321d7_4 + - libnghttp2=1.57.0=h9beae6a_0 - libopenblas=0.3.21=h54e7dc3_0 - libpng=1.6.39=h6c40b1e_0 + - libprotobuf=4.25.3=h34eed0b_0 - libsodium=1.0.18=h1de35cc_0 + - libssh2=1.11.1=h3a17b82_0 + - libthrift=0.15.0=h70b4b81_2 - libtiff=4.5.1=hcec6c5f_0 - - libwebp-base=1.3.2=h6c40b1e_0 - - libwebp=1.3.2=hf6ce154_0 - - libxml2=2.10.4=h1bd7e62_1 - - libxslt=1.1.37=h6c40b1e_1 + - libwebp-base=1.3.2=h46256e1_1 + - linkify-it-py=2.0.0=py310hecd8cb5_0 - llvm-openmp=14.0.6=h0dcd299_0 - - llvmlite=0.41.0=py310hfff2838_0 + - llvmlite=0.43.0=py310h6d0c2b6_0 - locket=1.0.0=py310hecd8cb5_0 - - lxml=4.9.3=py310h946e0e5_0 - - lz4-c=1.9.4=hcec6c5f_0 + - lz4-c=1.9.4=hcec6c5f_1 - lz4=4.3.2=py310h6c40b1e_0 + - markdown-it-py=2.2.0=py310hecd8cb5_1 - markdown=3.4.1=py310hecd8cb5_0 - - markupsafe=2.1.1=py310hca72f7f_0 - - matplotlib-base=3.7.2=py310hee32256_0 + - markupsafe=2.1.3=py310h6c40b1e_0 + - matplotlib-base=3.9.2=py310h919b35b_1 - matplotlib-inline=0.1.6=py310hecd8cb5_0 - - mistune=0.8.4=py310hca72f7f_1000 + - mdit-py-plugins=0.3.0=py310hecd8cb5_0 + - mdurl=0.1.0=py310hecd8cb5_0 + - mistune=2.0.4=py310hecd8cb5_0 - msgpack-python=1.0.3=py310haf03e11_0 - multipledispatch=0.6.0=py310hecd8cb5_0 - - nbclassic=0.5.5=py310hecd8cb5_0 - - nbclient=0.5.13=py310hecd8cb5_0 - - nbconvert=6.5.4=py310hecd8cb5_0 - - nbformat=5.9.2=py310hecd8cb5_0 + - nbclassic=1.1.0=py310hecd8cb5_0 + - nbclient=0.8.0=py310hecd8cb5_0 + - nbconvert=7.16.4=py310hecd8cb5_0 + - nbformat=5.10.4=py310hecd8cb5_0 - ncurses=6.4=hcec6c5f_0 - - nest-asyncio=1.5.6=py310hecd8cb5_0 - - notebook-shim=0.2.2=py310hecd8cb5_0 - - notebook=6.5.4=py310hecd8cb5_1 - - numba=0.58.0=py310h3ea8b11_0 - - numexpr=2.8.7=py310hf6dca73_0 - - numpy-base=1.25.2=py310hd8f4981_0 - - numpy=1.25.2=py310hf6dca73_0 - - openjpeg=2.4.0=h66ea3da_0 - - openssl=3.0.11=hca72f7f_2 - - packaging=23.1=py310hecd8cb5_0 - - pandas=1.5.3=py310h3ea8b11_0 - - panel=0.14.3=py310hecd8cb5_0 + - nest-asyncio=1.6.0=py310hecd8cb5_0 + - notebook-shim=0.2.3=py310hecd8cb5_0 + - notebook=6.5.7=py310hecd8cb5_0 + - numba=0.60.0=py310h6d0c2b6_0 + - numpy-base=1.26.4=py310hd8f4981_0 + - numpy=1.26.4=py310hf6dca73_0 + - openjpeg=2.5.2=hbf2204d_0 + - openssl=3.0.15=h46256e1_0 + - orc=2.0.1=h5747287_0 + - overrides=7.4.0=py310hecd8cb5_0 + - packaging=24.1=py310hecd8cb5_0 + - pandas=2.0.1=py310h5e4fcda_1 + - panel=1.2.3=py310hecd8cb5_0 - param=1.13.0=py310hecd8cb5_0 - - partd=1.4.0=py310hecd8cb5_0 - - pillow=10.0.1=py310h7d39338_0 - - pip=23.3=py310hecd8cb5_0 + - partd=1.4.1=py310hecd8cb5_0 + - pillow=11.0.0=py310h9c91434_0 + - pip=24.2=py310hecd8cb5_0 - platformdirs=3.10.0=py310hecd8cb5_0 - - prometheus_client=0.14.1=py310hecd8cb5_0 - - prompt-toolkit=3.0.36=py310hecd8cb5_0 + - prometheus_client=0.21.0=py310hecd8cb5_0 + - prompt-toolkit=3.0.43=py310hecd8cb5_0 - psutil=5.9.0=py310hca72f7f_0 + - pyarrow=16.1.0=py310h207f725_0 - pyct=0.5.0=py310hecd8cb5_0 - pygments=2.15.1=py310hecd8cb5_1 - - pyparsing=3.0.9=py310hecd8cb5_0 - - pyrsistent=0.18.0=py310hca72f7f_0 + - pyparsing=3.2.0=py310hecd8cb5_0 - pysocks=1.7.1=py310hecd8cb5_0 - - python-fastjsonschema=2.16.2=py310hecd8cb5_0 + - python-dateutil=2.9.0post0=py310hecd8cb5_2 + - python-fastjsonschema=2.20.0=py310hecd8cb5_0 + - python-json-logger=2.0.7=py310hecd8cb5_0 - python-lmdb=1.4.1=py310hcec6c5f_0 - - python-snappy=0.6.1=py310hcec6c5f_0 - - python=3.10.13=h5ee71fb_0 - - pytz=2023.3.post1=py310hecd8cb5_0 - - pyviz_comms=2.3.0=py310hecd8cb5_0 - - pyyaml=6.0.1=py310h6c40b1e_0 - - pyzmq=23.2.0=py310he9d5cce_0 + - python=3.10.15=hce00570_1 + - python_abi=3.10=2_cp310 + - pytz=2024.1=py310hecd8cb5_0 + - pyviz_comms=3.0.2=py310hecd8cb5_0 + - pyyaml=6.0.2=py310h46256e1_0 + - pyzmq=24.0.1=py310h6c40b1e_0 + - re2=2022.04.01=he9d5cce_0 - readline=8.2=hca72f7f_0 - - requests=2.31.0=pyhd8ed1ab_0 - - scipy=1.11.3=py310ha516a68_0 - - setuptools=68.0.0=py310hecd8cb5_0 - - snappy=1.1.9=he9d5cce_0 - - sniffio=1.2.0=py310hecd8cb5_1 + - referencing=0.30.2=py310hecd8cb5_0 + - requests=2.32.3=py310hecd8cb5_1 + - rfc3339-validator=0.1.4=py310hecd8cb5_0 + - rfc3986-validator=0.1.1=py310hecd8cb5_0 + - rpds-py=0.10.6=py310h83de92b_1 + - scipy=1.14.1=py310hb060737_0 + - send2trash=1.8.2=py310hecd8cb5_0 + - setuptools=75.1.0=py310hecd8cb5_0 + - snappy=1.2.1=h6d0c2b6_0 + - sniffio=1.3.0=py310hecd8cb5_0 - soupsieve=2.5=py310hecd8cb5_0 - - sqlite=3.41.2=h6c40b1e_0 + - sqlite=3.45.3=h6c40b1e_0 - tbb=2021.8.0=ha357a0b_0 - terminado=0.17.1=py310hecd8cb5_0 - tinycss2=1.2.1=py310hecd8cb5_0 - - tk=8.6.12=h5d9f67b_0 + - tk=8.6.14=h4d00af3_0 - toolz=0.12.0=py310hecd8cb5_0 - - tornado=6.1=py310hca72f7f_0 - - tqdm=4.65.0=py310h20db666_0 - - traitlets=5.7.1=py310hecd8cb5_0 - - typing-extensions=4.7.1=py310hecd8cb5_0 - - typing_extensions=4.7.1=py310hecd8cb5_0 - - urllib3=2.0.3=py310hecd8cb5_0 + - tornado=6.4.1=py310h46256e1_0 + - tqdm=4.66.5=py310h20db666_0 + - traitlets=5.14.3=py310hecd8cb5_0 + - typing-extensions=4.11.0=py310hecd8cb5_0 + - typing_extensions=4.11.0=py310hecd8cb5_0 + - uc-micro-py=1.0.1=py310hecd8cb5_0 + - unicodedata2=15.1.0=py310h6c40b1e_0 + - urllib3=2.2.3=py310hecd8cb5_0 + - utf8proc=2.6.1=h6c40b1e_1 - webencodings=0.5.1=py310hecd8cb5_1 - - websocket-client=0.58.0=py310hecd8cb5_4 - - wheel=0.41.2=py310hecd8cb5_0 + - websocket-client=1.8.0=py310hecd8cb5_0 + - wheel=0.44.0=py310hecd8cb5_0 - xarray=2023.6.0=py310hecd8cb5_0 - - xz=5.4.2=h6c40b1e_0 + - xyzservices=2022.9.0=py310hecd8cb5_1 + - xz=5.4.6=h6c40b1e_1 - yaml=0.2.5=haf1e3a3_0 - - zeromq=4.3.4=h23ab428_0 + - zeromq=4.3.5=hcec6c5f_0 - zict=3.0.0=py310hecd8cb5_0 - - zlib=1.2.13=h4dc903c_0 - - zstd=1.5.5=hc035e20_0 + - zipp=3.21.0=py310hecd8cb5_0 + - zlib=1.2.13=h4b97444_1 + - zstd=1.5.6=h138b38a_0 osx-arm64: - - anyio=3.5.0=py310hca03da5_0 + - anyio=4.6.2=py310hca03da5_0 - appnope=0.1.2=py310hca03da5_1001 - argon2-cffi-bindings=21.2.0=py310h1a28f6b_0 - - attrs=23.1.0=py310hca03da5_0 - - beautifulsoup4=4.12.2=py310hca03da5_0 - - bokeh=2.4.3=py310hca03da5_0 - - bottleneck=1.3.5=py310h96f19d2_0 - - brotli-bin=1.0.9=h1a28f6b_7 - - brotli-python=1.0.9=py310hc377ac9_7 - - brotli=1.0.9=h1a28f6b_7 - - bzip2=1.0.8=h620ffc9_4 - - ca-certificates=2023.08.22=hca03da5_0 - - certifi=2023.7.22=py310hca03da5_0 - - cffi=1.15.1=py310h80987f9_3 + - arrow-cpp=11.0.0=hce30654_60_cpu + - attrs=24.2.0=py310hca03da5_0 + - aws-c-auth=0.7.15=h8117f06_0 + - aws-c-cal=0.6.9=h4fd42c2_3 + - aws-c-common=0.9.12=h93a5062_0 + - aws-c-compression=0.2.17=h4fd42c2_8 + - aws-c-event-stream=0.4.1=hf6cc7c5_5 + - aws-c-http=0.8.0=hf1748bb_5 + - aws-c-io=0.14.3=h8daa835_1 + - aws-c-mqtt=0.10.1=h7f0f801_3 + - aws-c-s3=0.5.0=hbb97ff1_2 + - aws-c-sdkutils=0.1.14=h4fd42c2_0 + - aws-checksums=0.1.17=h4fd42c2_7 + - aws-crt-cpp=0.26.1=h9b04f48_9 + - aws-sdk-cpp=1.11.242=h26e3666_0 + - beautifulsoup4=4.12.3=py310hca03da5_0 + - bleach=6.2.0=py310hca03da5_0 + - bokeh=3.2.1=py310h33ce5c2_0 + - boost-cpp=1.85.0=h103c1d6_4 + - brotli-python=1.0.9=py310h313beb8_8 + - brotli=1.0.7=hc377ac9_0 + - bzip2=1.0.8=h80987f9_6 + - c-ares=1.34.3=h5505292_1 + - ca-certificates=2024.11.26=hca03da5_0 + - certifi=2024.8.30=py310hca03da5_0 + - cffi=1.17.1=py310h3eb5a62_0 - click=8.1.7=py310hca03da5_0 - - cloudpickle=2.2.1=py310hca03da5_0 - - colorcet=3.0.1=py310hca03da5_0 - - comm=0.1.2=py310hca03da5_0 - - contourpy=1.0.5=py310h525c30c_0 - - cramjam=2.6.2=py310ha6e5c4f_0 - - cryptography=41.0.3=py310hd4332d6_0 - - cytoolz=0.12.0=py310h1a28f6b_0 - - datashader=0.15.2=py310hca03da5_0 + - cloudpickle=3.0.0=py310hca03da5_0 + - colorcet=3.1.0=py310hca03da5_0 + - comm=0.2.1=py310hca03da5_0 + - contourpy=1.3.1=py310h48ca7d4_0 + - cramjam=2.7.0=py310h482802a_0 + - cytoolz=0.12.2=py310h80987f9_0 + - datashader=0.15.1=py310hca03da5_0 - datashape=0.5.4=py310hca03da5_1 - debugpy=1.6.7=py310h313beb8_0 - entrypoints=0.4=py310hca03da5_0 - - exceptiongroup=1.0.4=py310hca03da5_0 - - fastparquet=2023.8.0=py310hbda83bc_0 - - freetype=2.12.1=h1192e45_0 - - fsspec=2023.9.2=py310hca03da5_0 - - giflib=5.2.1=h80987f9_3 - - holoviews=1.17.1=py310hca03da5_0 - - icu=73.1=h313beb8_0 - - idna=3.4=py310hca03da5_0 - - ipykernel=6.25.0=py310h33ce5c2_0 - - ipython=8.15.0=py310hca03da5_0 - - jedi=0.18.1=py310hca03da5_1 - - jinja2=3.1.2=py310hca03da5_0 - - jpeg=9e=h80987f9_1 - - jsonschema=4.17.3=py310hca03da5_0 - - jupyter_client=7.3.4=py310hca03da5_0 - - jupyter_core=5.3.0=py310hca03da5_0 - - jupyter_server=1.23.4=py310hca03da5_0 + - exceptiongroup=1.2.0=py310hca03da5_0 + - fastparquet=2024.11.0=py310hc12b6d3_0 + - fonttools=4.51.0=py310h80987f9_0 + - freetype=2.12.1=hadb7bae_2 + - fsspec=2024.6.1=py310hca03da5_0 + - gflags=2.2.2=h313beb8_1 + - glog=0.6.0=h6da1cb0_0 + - holoviews=1.16.0=py310hca03da5_0 + - icu=75.1=hfee45f7_0 + - idna=3.7=py310hca03da5_0 + - importlib-metadata=8.5.0=py310hca03da5_0 + - ipykernel=6.29.5=py310hca03da5_0 + - ipython=8.27.0=py310hca03da5_0 + - jedi=0.19.1=py310hca03da5_0 + - jinja2=3.1.4=py310hca03da5_1 + - jsonschema-specifications=2023.7.1=py310hca03da5_0 + - jsonschema=4.23.0=py310hca03da5_0 + - jupyter_client=7.4.9=py310hca03da5_0 + - jupyter_core=5.7.2=py310hca03da5_0 + - jupyter_events=0.10.0=py310hca03da5_0 + - jupyter_server=2.14.1=py310hca03da5_0 + - jupyter_server_terminals=0.4.4=py310hca03da5_1 + - jupyterlab_pygments=0.2.2=py310hca03da5_0 - kiwisolver=1.4.4=py310h313beb8_0 - - lcms2=2.12=hba8e193_0 - - lerc=3.0=hc377ac9_0 - - libbrotlicommon=1.0.9=h1a28f6b_7 - - libbrotlidec=1.0.9=h1a28f6b_7 - - libbrotlienc=1.0.9=h1a28f6b_7 - - libcxx=14.0.6=h848a8c0_0 - - libdeflate=1.17=h80987f9_1 - - libffi=3.4.4=hca03da5_0 + - krb5=1.21.3=hf3e1bf2_0 + - lcms2=2.16=ha0e7c42_0 + - lerc=4.0.0=h9a09cb3_0 + - libabseil=20230802.1=cxx17_h13dd4ca_0 + - libarrow=11.0.0=h2f53e1b_60_cpu + - libboost-devel=1.85.0=hf450f58_4 + - libboost-headers=1.85.0=hce30654_4 + - libboost=1.85.0=hf763ba5_4 + - libbrotlicommon=1.1.0=hd74edd7_2 + - libbrotlidec=1.1.0=hd74edd7_2 + - libbrotlienc=1.1.0=hd74edd7_2 + - libcrc32c=1.1.2=hc377ac9_0 + - libcurl=8.10.1=h13a7ad3_0 + - libcxx=19.1.4=ha82da77_0 + - libdeflate=1.22=hd74edd7_0 + - libedit=3.1.20230828=h80987f9_0 + - libev=4.33=h1a28f6b_1 + - libevent=2.1.12=h02f6b3c_1 + - libffi=3.4.4=hca03da5_1 - libgfortran5=11.3.0=h009349e_28 - libgfortran=5.0.0=11_3_0_hca03da5_28 - - libiconv=1.16=h1a28f6b_2 - - libllvm14=14.0.6=h7ec7a93_3 + - libgoogle-cloud=2.12.0=h49bbb43_5 + - libgrpc=1.60.1=hfc68871_0 + - libjpeg-turbo=3.0.3=h80987f9_0 + - libllvm14=14.0.6=hd1a9a77_4 + - libnghttp2=1.64.0=h6d7220d_0 - libopenblas=0.3.21=h269037a_0 - - libpng=1.6.39=h80987f9_0 + - libpng=1.6.44=hc14010f_0 + - libprotobuf=4.25.1=h810fc01_2 + - libre2-11=2023.09.01=h741fcf5_1 - 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 - - libxml2=2.10.4=h0dcf63f_1 - - libxslt=1.1.37=h80987f9_1 + - libsqlite=3.47.0=hbaaea75_1 + - libssh2=1.11.1=h9cc3647_0 + - libthrift=0.19.0=h026a170_1 + - libtiff=4.7.0=hfce79cd_1 + - libutf8proc=2.8.0=hc098a78_1 + - libwebp-base=1.4.0=h93a5062_0 + - libxcb=1.17.0=hdb1d25a_0 + - libzlib=1.3.1=h8359307_2 + - linkify-it-py=2.0.0=py310hca03da5_0 - llvm-openmp=14.0.6=hc6e5704_0 - - llvmlite=0.41.0=py310h514c7bf_0 + - llvmlite=0.43.0=py310h313beb8_0 - locket=1.0.0=py310hca03da5_0 - - lxml=4.9.3=py310h50ffb84_0 - - lz4-c=1.9.4=h313beb8_0 + - lz4-c=1.9.4=h313beb8_1 - lz4=4.3.2=py310h80987f9_0 + - markdown-it-py=2.2.0=py310hca03da5_1 - markdown=3.4.1=py310hca03da5_0 - - markupsafe=2.1.1=py310h1a28f6b_0 - - matplotlib-base=3.7.2=py310h46d7db6_0 + - markupsafe=2.1.3=py310h80987f9_0 + - matplotlib-base=3.9.2=py310h7ef442a_1 - matplotlib-inline=0.1.6=py310hca03da5_0 - - mistune=0.8.4=py310h1a28f6b_1000 + - mdit-py-plugins=0.3.0=py310hca03da5_0 + - mdurl=0.1.0=py310hca03da5_0 + - mistune=2.0.4=py310hca03da5_0 - msgpack-python=1.0.3=py310h525c30c_0 - multipledispatch=0.6.0=py310hca03da5_0 - - nbclassic=0.5.5=py310hca03da5_0 - - nbclient=0.5.13=py310hca03da5_0 - - nbconvert=6.5.4=py310hca03da5_0 - - nbformat=5.9.2=py310hca03da5_0 - - ncurses=6.4=h313beb8_0 - - nest-asyncio=1.5.6=py310hca03da5_0 - - notebook-shim=0.2.2=py310hca03da5_0 - - notebook=6.5.4=py310hca03da5_1 - - numba=0.58.0=py310h46d7db6_0 - - numexpr=2.8.7=py310hecc3335_0 - - numpy-base=1.25.2=py310ha9811e2_0 - - numpy=1.25.2=py310h3b2db8e_0 - - openjpeg=2.3.0=h7a6adac_2 - - openssl=3.0.11=h1a28f6b_2 - - packaging=23.1=py310hca03da5_0 - - pandas=1.5.3=py310h46d7db6_0 - - panel=0.14.3=py310hca03da5_0 + - nbclassic=1.1.0=py310hca03da5_0 + - nbclient=0.8.0=py310hca03da5_0 + - nbconvert=7.16.4=py310hca03da5_0 + - nbformat=5.10.4=py310hca03da5_0 + - ncurses=6.5=h7bae524_1 + - nest-asyncio=1.6.0=py310hca03da5_0 + - notebook-shim=0.2.3=py310hca03da5_0 + - notebook=6.5.7=py310hca03da5_0 + - numba=0.60.0=py310h313beb8_0 + - numpy-base=1.26.4=py310ha9811e2_0 + - numpy=1.26.4=py310h3b2db8e_0 + - openjpeg=2.5.2=h54b8e55_0 + - openssl=3.4.0=h39f12f2_0 + - orc=1.9.2=hb41d57e_1 + - overrides=7.4.0=py310hca03da5_0 + - packaging=24.1=py310hca03da5_0 + - pandas=2.0.1=py310h1cdf563_1 + - panel=1.2.3=py310hca03da5_0 - param=1.13.0=py310hca03da5_0 - - partd=1.4.0=py310hca03da5_0 - - pillow=10.0.1=py310h3b245a6_0 - - pip=23.3=py310hca03da5_0 + - partd=1.4.1=py310hca03da5_0 + - pillow=11.0.0=py310h530beaf_0 + - pip=24.2=py310hca03da5_0 - platformdirs=3.10.0=py310hca03da5_0 - - prometheus_client=0.14.1=py310hca03da5_0 - - prompt-toolkit=3.0.36=py310hca03da5_0 + - prometheus_client=0.21.0=py310hca03da5_0 + - prompt-toolkit=3.0.43=py310hca03da5_0 - psutil=5.9.0=py310h1a28f6b_0 + - pthread-stubs=0.3=h1a28f6b_1 + - pyarrow=11.0.0=py310hbfed03b_1 - pyct=0.5.0=py310hca03da5_0 - pygments=2.15.1=py310hca03da5_1 - - pyopenssl=23.2.0=py310hca03da5_0 - - pyparsing=3.0.9=py310hca03da5_0 - - pyrsistent=0.18.0=py310h1a28f6b_0 + - pyparsing=3.2.0=py310hca03da5_0 - pysocks=1.7.1=py310hca03da5_0 - - python-fastjsonschema=2.16.2=py310hca03da5_0 + - python-dateutil=2.9.0post0=py310hca03da5_2 + - python-fastjsonschema=2.20.0=py310hca03da5_0 + - python-json-logger=2.0.7=py310hca03da5_0 - python-lmdb=1.4.1=py310h313beb8_0 - - python-snappy=0.6.1=py310h313beb8_0 - - python=3.10.13=hb885b13_0 - - pytz=2023.3.post1=py310hca03da5_0 - - pyviz_comms=2.3.0=py310hca03da5_0 - - pyyaml=6.0.1=py310h80987f9_0 - - pyzmq=23.2.0=py310hc377ac9_0 + - python=3.10.15=hdce6c4c_2_cpython + - python_abi=3.10=5_cp310 + - pytz=2024.1=py310hca03da5_0 + - pyviz_comms=3.0.2=py310hca03da5_0 + - pyyaml=6.0.2=py310h80987f9_0 + - pyzmq=24.0.1=py310h80987f9_0 + - re2=2023.09.01=h4cba328_1 - readline=8.2=h1a28f6b_0 - - requests=2.31.0=py310hca03da5_0 - - scipy=1.11.3=py310h20cbe94_0 - - setuptools=68.0.0=py310hca03da5_0 - - snappy=1.1.9=hc377ac9_0 - - sniffio=1.2.0=py310hca03da5_1 + - referencing=0.30.2=py310hca03da5_0 + - requests=2.32.3=py310hca03da5_1 + - rfc3339-validator=0.1.4=py310hca03da5_0 + - rfc3986-validator=0.1.1=py310hca03da5_0 + - rpds-py=0.10.6=py310h2aea54e_1 + - scipy=1.14.1=py310hd336fd7_0 + - send2trash=1.8.2=py310hca03da5_0 + - setuptools=75.1.0=py310hca03da5_0 + - snappy=1.1.10=h313beb8_1 + - sniffio=1.3.0=py310hca03da5_0 - soupsieve=2.5=py310hca03da5_0 - - sqlite=3.41.2=h80987f9_0 - tbb=2021.8.0=h48ca7d4_0 - terminado=0.17.1=py310hca03da5_0 - tinycss2=1.2.1=py310hca03da5_0 - - tk=8.6.12=hb8d0fd4_0 + - tk=8.6.13=h5083fa2_1 - toolz=0.12.0=py310hca03da5_0 - - tornado=6.1=py310h1a28f6b_0 - - tqdm=4.65.0=py310h33ce5c2_0 - - traitlets=5.7.1=py310hca03da5_0 - - typing-extensions=4.7.1=py310hca03da5_0 - - typing_extensions=4.7.1=py310hca03da5_0 - - urllib3=1.26.18=py310hca03da5_0 + - tornado=6.4.1=py310h80987f9_0 + - tqdm=4.66.5=py310h33ce5c2_0 + - traitlets=5.14.3=py310hca03da5_0 + - typing-extensions=4.11.0=py310hca03da5_0 + - typing_extensions=4.11.0=py310hca03da5_0 + - uc-micro-py=1.0.1=py310hca03da5_0 + - unicodedata2=15.1.0=py310h80987f9_0 + - urllib3=2.2.3=py310hca03da5_0 - webencodings=0.5.1=py310hca03da5_1 - - websocket-client=0.58.0=py310hca03da5_4 - - wheel=0.41.2=py310hca03da5_0 + - websocket-client=1.8.0=py310hca03da5_0 + - wheel=0.44.0=py310hca03da5_0 - xarray=2023.6.0=py310hca03da5_0 - - xz=5.4.2=h80987f9_0 + - xorg-libxau=1.0.11=hd74edd7_1 + - xorg-libxdmcp=1.1.5=hd74edd7_0 + - xyzservices=2022.9.0=py310hca03da5_1 + - xz=5.4.6=h80987f9_1 - yaml=0.2.5=h1a28f6b_0 - - zeromq=4.3.4=hc377ac9_0 + - zeromq=4.3.5=h313beb8_0 - zict=3.0.0=py310hca03da5_0 - - zlib=1.2.13=h5a0b063_0 - - zstd=1.5.5=hd90d995_0 + - zipp=3.21.0=py310hca03da5_0 + - zstd=1.5.6=hb46c0d2_0 win-64: - - anyio=3.5.0=py310haa95532_0 + - anyio=4.6.2=py310haa95532_0 - argon2-cffi-bindings=21.2.0=py310h2bbff1b_0 - - attrs=23.1.0=py310haa95532_0 - - beautifulsoup4=4.12.2=py310haa95532_0 + - arrow-cpp=16.1.0=h7cd61ee_0 + - attrs=24.2.0=py310haa95532_0 + - aws-c-auth=0.6.19=h2bbff1b_0 + - aws-c-cal=0.5.20=h2bbff1b_0 + - aws-c-common=0.8.5=h2bbff1b_0 + - aws-c-compression=0.2.16=h2bbff1b_0 + - aws-c-event-stream=0.2.15=hd77b12b_0 + - aws-c-http=0.6.25=h2bbff1b_0 + - aws-c-io=0.13.10=h2bbff1b_0 + - aws-c-mqtt=0.7.13=h2bbff1b_0 + - aws-c-s3=0.1.51=h2bbff1b_0 + - aws-c-sdkutils=0.1.6=h2bbff1b_0 + - aws-checksums=0.1.13=h2bbff1b_0 + - aws-crt-cpp=0.18.16=hd77b12b_0 + - aws-sdk-cpp=1.10.55=hd77b12b_0 + - beautifulsoup4=4.12.3=py310haa95532_0 - blas=1.0=mkl - - bokeh=2.4.3=py310haa95532_0 - - bottleneck=1.3.5=py310h9128911_0 - - brotli-bin=1.0.9=h2bbff1b_7 - - brotli-python=1.0.9=py310hd77b12b_7 - - brotli=1.0.9=h2bbff1b_7 - - bzip2=1.0.8=he774522_0 - - ca-certificates=2023.08.22=haa95532_0 - - certifi=2023.7.22=py310haa95532_0 - - cffi=1.15.1=py310h2bbff1b_3 + - bleach=6.2.0=py310haa95532_0 + - bokeh=3.2.1=py310h9909e9c_0 + - boost-cpp=1.82.0=h59b6b97_2 + - brotli-bin=1.0.9=h2bbff1b_8 + - brotli-python=1.0.9=py310hd77b12b_8 + - brotli=1.0.9=h2bbff1b_8 + - bzip2=1.0.8=h2bbff1b_6 + - c-ares=1.19.1=h2bbff1b_0 + - ca-certificates=2024.11.26=haa95532_0 + - certifi=2024.8.30=py310haa95532_0 + - cffi=1.17.1=py310h827c3e9_0 - click=8.1.7=py310haa95532_0 - - cloudpickle=2.2.1=py310haa95532_0 + - cloudpickle=3.0.0=py310haa95532_0 - colorama=0.4.6=py310haa95532_0 - - colorcet=3.0.1=py310haa95532_0 - - comm=0.1.2=py310haa95532_0 - - contourpy=1.0.5=py310h59b6b97_0 - - cramjam=2.6.2=py310h1718810_0 - - cryptography=41.0.3=py310h89fc84f_0 - - cytoolz=0.12.0=py310h2bbff1b_0 - - datashader=0.15.2=py310haa95532_0 + - colorcet=3.1.0=py310haa95532_0 + - comm=0.2.1=py310haa95532_0 + - contourpy=1.3.1=py310h214f63a_0 + - cramjam=2.7.0=py310h9f6a54a_0 + - cytoolz=0.12.2=py310h2bbff1b_0 + - datashader=0.15.1=py310haa95532_0 - datashape=0.5.4=py310haa95532_1 - debugpy=1.6.7=py310hd77b12b_0 - entrypoints=0.4=py310haa95532_0 - - exceptiongroup=1.0.4=py310haa95532_0 - - fastparquet=2023.8.0=py310h9128911_0 + - exceptiongroup=1.2.0=py310haa95532_0 + - fastparquet=2024.11.0=py310hb0944cc_0 + - fonttools=4.51.0=py310h2bbff1b_0 - freetype=2.12.1=ha860e81_0 - - fsspec=2023.9.2=py310haa95532_0 - - giflib=5.2.1=h8cc25b3_3 - - holoviews=1.17.1=py310haa95532_0 + - fsspec=2024.6.1=py310haa95532_0 + - gflags=2.2.2=hd77b12b_1 + - glog=0.5.0=hd77b12b_1 + - holoviews=1.16.0=py310haa95532_0 - icc_rt=2022.1.0=h6049295_2 - - idna=3.4=py310haa95532_0 - - intel-openmp=2023.1.0=h59b6b97_46319 - - ipykernel=6.25.0=py310h9909e9c_0 - - ipython=8.15.0=py310haa95532_0 - - jedi=0.18.1=py310haa95532_1 - - jinja2=3.1.2=py310haa95532_0 - - jpeg=9e=h2bbff1b_1 - - jsonschema=4.17.3=py310haa95532_0 - - jupyter_client=7.3.4=py310haa95532_0 - - jupyter_core=5.3.0=py310haa95532_0 - - jupyter_server=1.23.4=py310haa95532_0 + - idna=3.7=py310haa95532_0 + - importlib-metadata=8.5.0=py310haa95532_0 + - intel-openmp=2023.1.0=h59b6b97_46320 + - ipykernel=6.29.5=py310haa95532_0 + - ipython=8.27.0=py310haa95532_0 + - jedi=0.19.1=py310haa95532_0 + - jinja2=3.1.4=py310haa95532_1 + - jpeg=9e=h827c3e9_3 + - jsonschema-specifications=2023.7.1=py310haa95532_0 + - jsonschema=4.23.0=py310haa95532_0 + - jupyter_client=7.4.9=py310haa95532_0 + - jupyter_core=5.7.2=py310haa95532_0 + - jupyter_events=0.10.0=py310haa95532_0 + - jupyter_server=2.14.1=py310haa95532_0 + - jupyter_server_terminals=0.4.4=py310haa95532_1 + - jupyterlab_pygments=0.2.2=py310haa95532_0 - kiwisolver=1.4.4=py310hd77b12b_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 + - libabseil=20240116.2=cxx17_h5da7b33_0 + - libboost=1.82.0=h3399ecb_2 + - libbrotlicommon=1.0.9=h2bbff1b_8 + - libbrotlidec=1.0.9=h2bbff1b_8 + - libbrotlienc=1.0.9=h2bbff1b_8 + - libcurl=8.9.1=h0416ee5_0 - libdeflate=1.17=h2bbff1b_1 - - libffi=3.4.4=hd77b12b_0 - - libiconv=1.16=h2bbff1b_2 + - libevent=2.1.12=h56d1f94_1 + - libffi=3.4.4=hd77b12b_1 + - libgrpc=1.62.2=hf25190f_0 - libpng=1.6.39=h8cc25b3_0 + - libprotobuf=4.25.3=hf2fb9eb_0 - libsodium=1.0.18=h62dcd97_0 + - libssh2=1.11.1=h2addb87_0 + - libthrift=0.15.0=h4364b78_2 - libtiff=4.5.1=hd77b12b_0 - - libwebp-base=1.3.2=h2bbff1b_0 - - libwebp=1.3.2=hbc33d0d_0 - - libxml2=2.10.4=h0ad7f3c_1 - - libxslt=1.1.37=h2bbff1b_1 - - llvmlite=0.41.0=py310hf2fb9eb_0 + - libwebp-base=1.3.2=h3d04722_1 + - linkify-it-py=2.0.0=py310haa95532_0 + - llvmlite=0.43.0=py310hf2fb9eb_0 - locket=1.0.0=py310haa95532_0 - - lxml=4.9.3=py310h09808a7_0 - - lz4-c=1.9.4=h2bbff1b_0 + - lz4-c=1.9.4=h2bbff1b_1 - lz4=4.3.2=py310h2bbff1b_0 - 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=py310haa95532_1 - markdown=3.4.1=py310haa95532_0 - - markupsafe=2.1.1=py310h2bbff1b_0 - - matplotlib-base=3.7.2=py310h4ed8f06_0 + - markupsafe=2.1.3=py310h2bbff1b_0 + - matplotlib-base=3.9.2=py310he19b0ae_1 - matplotlib-inline=0.1.6=py310haa95532_0 - - mistune=0.8.4=py310h2bbff1b_1000 + - mdit-py-plugins=0.3.0=py310haa95532_0 + - mdurl=0.1.0=py310haa95532_0 + - mistune=2.0.4=py310haa95532_0 - mkl-service=2.4.0=py310h2bbff1b_1 - - mkl=2023.1.0=h6b88ed4_46357 - - mkl_fft=1.3.8=py310h2bbff1b_0 - - mkl_random=1.2.4=py310h59b6b97_0 + - mkl=2023.1.0=h6b88ed4_46358 + - mkl_fft=1.3.11=py310h827c3e9_0 + - mkl_random=1.2.8=py310hc64d2fc_0 - msgpack-python=1.0.3=py310h59b6b97_0 - msys2-conda-epoch=20160418=1 - multipledispatch=0.6.0=py310haa95532_0 - - nbclassic=0.5.5=py310haa95532_0 - - nbclient=0.5.13=py310haa95532_0 - - nbconvert=6.5.4=py310haa95532_0 - - nbformat=5.9.2=py310haa95532_0 - - nest-asyncio=1.5.6=py310haa95532_0 - - notebook-shim=0.2.2=py310haa95532_0 - - notebook=6.5.4=py310haa95532_1 - - numba=0.58.0=py310h4ed8f06_0 - - numexpr=2.8.7=py310h2cd9be0_0 - - numpy-base=1.25.2=py310h65a83cf_0 - - numpy=1.25.2=py310h055cbcc_0 - - openjpeg=2.4.0=h4fc8c34_0 - - openssl=3.0.11=h2bbff1b_2 - - packaging=23.1=py310haa95532_0 - - pandas=1.5.3=py310h4ed8f06_0 - - panel=0.14.3=py310haa95532_0 + - nbclassic=1.1.0=py310haa95532_0 + - nbclient=0.8.0=py310haa95532_0 + - nbconvert=7.16.4=py310haa95532_0 + - nbformat=5.10.4=py310haa95532_0 + - nest-asyncio=1.6.0=py310haa95532_0 + - notebook-shim=0.2.3=py310haa95532_0 + - notebook=6.5.7=py310haa95532_0 + - numba=0.60.0=py310h5da7b33_0 + - numpy-base=1.26.4=py310h65a83cf_0 + - numpy=1.26.4=py310h055cbcc_0 + - openjpeg=2.5.2=hae555c5_0 + - openssl=3.0.15=h827c3e9_0 + - orc=2.0.1=hd8d391b_0 + - overrides=7.4.0=py310haa95532_0 + - packaging=24.1=py310haa95532_0 + - pandas=2.0.1=py310h1c4a608_1 + - panel=1.2.3=py310haa95532_0 - param=1.13.0=py310haa95532_0 - - partd=1.4.0=py310haa95532_0 - - pillow=10.0.1=py310h045eedc_0 - - pip=23.3=py310haa95532_0 + - partd=1.4.1=py310haa95532_0 + - pillow=11.0.0=py310hb5480e2_0 + - pip=24.2=py310haa95532_0 - platformdirs=3.10.0=py310haa95532_0 - - prometheus_client=0.14.1=py310haa95532_0 - - prompt-toolkit=3.0.36=py310haa95532_0 + - prometheus_client=0.21.0=py310haa95532_0 + - prompt-toolkit=3.0.43=py310haa95532_0 - psutil=5.9.0=py310h2bbff1b_0 + - pyarrow=16.1.0=py310hc64d2fc_0 - pyct=0.5.0=py310haa95532_0 - pygments=2.15.1=py310haa95532_1 - - pyopenssl=23.2.0=py310haa95532_0 - - pyparsing=3.0.9=py310haa95532_0 - - pyrsistent=0.18.0=py310h2bbff1b_0 + - pyparsing=3.2.0=py310haa95532_0 - pysocks=1.7.1=py310haa95532_0 - - python-fastjsonschema=2.16.2=py310haa95532_0 + - python-dateutil=2.9.0post0=py310haa95532_2 + - python-fastjsonschema=2.20.0=py310haa95532_0 + - python-json-logger=2.0.7=py310haa95532_0 - python-lmdb=1.4.1=py310hd77b12b_0 - - python-snappy=0.6.1=py310hd77b12b_0 - - python=3.10.13=he1021f5_0 - - pytz=2023.3.post1=py310haa95532_0 - - pyviz_comms=2.3.0=py310haa95532_0 + - python=3.10.15=h4607a30_1 + - python_abi=3.10=2_cp310 + - pytz=2024.1=py310haa95532_0 + - pyviz_comms=3.0.2=py310haa95532_0 - pywin32=305=py310h2bbff1b_0 - pywinpty=2.0.10=py310h5da7b33_0 - - pyyaml=6.0.1=py310h2bbff1b_0 - - pyzmq=23.2.0=py310hd77b12b_0 - - requests=2.31.0=py310haa95532_0 - - scipy=1.11.3=py310h309d312_0 - - setuptools=68.0.0=py310haa95532_0 - - snappy=1.1.9=h6c2663c_0 - - sniffio=1.2.0=py310haa95532_1 + - pyyaml=6.0.2=py310h827c3e9_0 + - pyzmq=24.0.1=py310h2bbff1b_0 + - re2=2022.04.01=hd77b12b_0 + - referencing=0.30.2=py310haa95532_0 + - requests=2.32.3=py310haa95532_1 + - rfc3339-validator=0.1.4=py310haa95532_0 + - rfc3986-validator=0.1.1=py310haa95532_0 + - rpds-py=0.10.6=py310h636fa0f_1 + - scipy=1.14.1=py310h8640f81_0 + - send2trash=1.8.2=py310haa95532_0 + - setuptools=75.1.0=py310haa95532_0 + - snappy=1.2.1=hcdb6601_0 + - sniffio=1.3.0=py310haa95532_0 - soupsieve=2.5=py310haa95532_0 - - sqlite=3.41.2=h2bbff1b_0 + - sqlite=3.45.3=h2bbff1b_0 - tbb=2021.8.0=h59b6b97_0 - terminado=0.17.1=py310haa95532_0 - tinycss2=1.2.1=py310haa95532_0 - - tk=8.6.12=h2bbff1b_0 + - tk=8.6.14=h0416ee5_0 - toolz=0.12.0=py310haa95532_0 - - tornado=6.1=py310h2bbff1b_0 - - tqdm=4.65.0=py310h9909e9c_0 - - traitlets=5.7.1=py310haa95532_0 - - typing-extensions=4.7.1=py310haa95532_0 - - typing_extensions=4.7.1=py310haa95532_0 - - urllib3=1.26.18=py310haa95532_0 - - vc=14.2=h21ff451_1 - - vs2015_runtime=14.27.29016=h5e58377_2 + - tornado=6.4.1=py310h827c3e9_0 + - tqdm=4.66.5=py310h9909e9c_0 + - traitlets=5.14.3=py310haa95532_0 + - typing-extensions=4.11.0=py310haa95532_0 + - typing_extensions=4.11.0=py310haa95532_0 + - uc-micro-py=1.0.1=py310haa95532_0 + - ucrt=10.0.20348.0=haa95532_0 + - unicodedata2=15.1.0=py310h2bbff1b_0 + - urllib3=2.2.3=py310haa95532_0 + - utf8proc=2.6.1=h2bbff1b_1 + - vc14_runtime=14.42.34433=he29a5d6_23 + - vc=14.40=h2eaa2aa_1 + - vs2015_runtime=14.42.34433=hdffcdeb_23 - webencodings=0.5.1=py310haa95532_1 - - websocket-client=0.58.0=py310haa95532_4 - - wheel=0.41.2=py310haa95532_0 + - websocket-client=1.8.0=py310haa95532_0 + - wheel=0.44.0=py310haa95532_0 - win_inet_pton=1.1.0=py310haa95532_0 - winpty=0.4.3=4 - xarray=2023.6.0=py310haa95532_0 - - xz=5.4.2=h8cc25b3_0 + - xyzservices=2022.9.0=py310haa95532_1 + - xz=5.4.6=h8cc25b3_1 - yaml=0.2.5=he774522_0 - - zeromq=4.3.4=hd77b12b_0 + - zeromq=4.3.5=hd77b12b_0 - zict=3.0.0=py310haa95532_0 - - zlib=1.2.13=h8cc25b3_0 - - zstd=1.5.5=hd43e919_0 + - zipp=3.21.0=py310haa95532_0 + - zlib=1.2.13=h8cc25b3_1 + - zstd=1.5.6=h8880b57_0 diff --git a/census/anaconda-project.yml b/census/anaconda-project.yml index 3c1685607..c4cdd081f 100644 --- a/census/anaconda-project.yml +++ b/census/anaconda-project.yml @@ -11,6 +11,8 @@ examples_config: - datashader deployments: - command: notebook + title: "Census 2010" + user_fields: [examples_config] @@ -20,15 +22,14 @@ channels: packages: &pkgs - python=3.10 -- notebook -- colorcet -- dask=2022.11.1 -- datashader -- fastparquet -- holoviews -- python-snappy -- param -- pandas<2 +- notebook<7 +- colorcet>=3.1.0 +- dask=2023.5.0 +- datashader=0.15.1 +- fastparquet=2024.11.0 +- holoviews=1.16.0 +- pandas=2.0.1 +- xyzservices>=2022.9 dependencies: *pkgs @@ -39,7 +40,7 @@ commands: variables: {} downloads: DATA: - url: http://s3.amazonaws.com/datashader-data/census2010.parq.zip + url: https://s3.amazonaws.com/datashader-data/census2010.parq.zip description: | 2010 US Census, with the location and race or ethnicity of every US resident as of that year diff --git a/census/census.ipynb b/census/census.ipynb index f0c2403ce..a17427b57 100644 --- a/census/census.ipynb +++ b/census/census.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Census" + "# Census 2010" ] }, { @@ -13,14 +13,14 @@ "source": [ "## 2010 US Census data\n", "\n", - "The 2010 Census collected a variety of demographic information for all the more than 300 million people in the USA. Here we'll focus on the subset of the data selected by the Cooper Center, who produced a [map of the population density and the racial makeup of the USA](http://www.coopercenter.org/demographics/Racial-Dot-Map). Each dot in this map corresponds to a specific person counted in the census, located approximately at their residence. (To protect privacy, the precise locations have been randomized at the census block level, so that the racial category can only be determined to within a rough geographic precision.) The Cooper Center website delivers pre-rendered tiles, which are fast to view but limited to the specific plotting choices they made. Here we will show how to run novel analyses focusing on whatever aspects of the data that you select yourself, rendered dynamically as requested using the [Datashader](https://datashader.org/) library.\n", + "The 2010 Census collected a variety of demographic information for all the more than 300 million people in the USA. Here we'll focus on the subset of the data selected by the Cooper Center, who produced a [map of the population density and the racial makeup of the USA](https://web.archive.org/web/20160113014240/http://www.coopercenter.org/demographics/Racial-Dot-Map). Each dot in this map corresponds to a specific person counted in the census, located approximately at their residence. (To protect privacy, the precise locations have been randomized at the census block level, so that the racial category can only be determined to within a rough geographic precision.) The Cooper Center website delivers pre-rendered tiles, which are fast to view but limited to the specific plotting choices they made. Here we will show how to run novel analyses focusing on whatever aspects of the data that you select yourself, rendered dynamically as requested using the [Datashader](https://datashader.org/) library.\n", "\n", - "**NOTE:** This dataset is also explorable through the [Datashader example dashboard](https://examples.pyviz.org/datashader_dashboard/dashboard.html). From inside the datashader_dashboard directory, run: `DS_DATASET=census anaconda-project run panel serve --show dashboard.ipynb`\n", + "**NOTE:** This dataset is also explorable through the [Datashader example dashboard](https://examples.holoviz.org/datashader_dashboard/dashboard.html).\n", "\n", "\n", "### Load data and set up\n", "\n", - "The census data has been saved in a [Parquet](https://parquet.apache.org)-format file, which can be loaded into a columnar data structure like a [Pandas](https://pandas.pydata.org) or [Dask](http://dask.pydata.org) dataframe. To load the dataframe, if you're not using `anaconda-project`, you'll need to install `fastparquet` and `python-snappy`." + "The census data has been saved in a [Parquet](https://parquet.apache.org)-format file, which can be loaded into a columnar data structure like a [Pandas](https://pandas.pydata.org) or [Dask](https://dask.pydata.org) dataframe." ] }, { @@ -41,7 +41,7 @@ "source": [ "%%time\n", "df = dd.read_parquet('./data/census2010.parq', engine='fastparquet')\n", - "df = df.categorize('race') # Required for datashader<=0.14.4\n", + "df = df.categorize('race')\n", "df = df.persist()" ] }, @@ -137,7 +137,7 @@ "source": [ "### Population density\n", "\n", - "For our first examples, let's ignore the race data for now, focusing on population density alone (as for the [NYC taxi](https://examples.pyviz.org/nyc_taxi) example). We'll first aggregate all the points from the continental USA into a grid containing the population density per pixel:" + "For our first examples, let's ignore the race data for now, focusing on population density alone (as for the [NYC taxi](https://examples.holoviz.org/nyc_taxi) example). We'll first aggregate all the points from the continental USA into a grid containing the population density per pixel:" ] }, { @@ -235,7 +235,7 @@ "\n", "Given the very different results from the different types of plot, a good practice when visualizing any dataset with datashader is to look at both the linear and the histogram-equalized versions of the data; the linear version preserves the magnitudes, but obscures the distribution, while the histogram-equalized version reveals the distribution while preserving only the order of the magnitudes, not their actual values. If both plots are similar, then the data is distributed nearly uniformly across the interval. But much more commonly, the distribution will be highly nonlinear, and the linear plot will reveal only the envelope of the data, i.e., the lowest and the highest values. In such cases, the histogram-equalized plot will reveal much more of the structure of the data, because it maps the local patterns in the data into perceptible color differences on the screen.\n", "\n", - "Because we are only plotting a single dimension, we can use the colors of the display to effectively reach a higher dynamic range, mapping ranges of data values into different color ranges. When doing so, it is crucial to use a perceptually uniform colormap (see [this paper](https://arxiv.org/pdf/1509.03700v1.pdf) for more details). Here we'll use the \"fire\" colormap from the [colorcet](https://github.com/pyviz/colorcet) package:" + "Because we are only plotting a single dimension, we can use the colors of the display to effectively reach a higher dynamic range, mapping ranges of data values into different color ranges. When doing so, it is crucial to use a perceptually uniform colormap (see [this paper](https://arxiv.org/pdf/1509.03700v1.pdf) for more details). Here we'll use the \"fire\" colormap from the [colorcet](https://github.com/holoviz/colorcet) package:" ] }, { @@ -288,7 +288,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For plotting magnitudes of this type, it should be safe to use any of the \"linear\" colormaps from the [colorcet](https://github.com/pyviz/colorcet) package, depending on your preference.\n", + "For plotting magnitudes of this type, it should be safe to use any of the \"linear\" colormaps from the [colorcet](https://github.com/holoviz/colorcet) package, depending on your preference.\n", "\n", "Colormaps can also be used to address very specific questions about the data itself. For instance, after histogram equalization, data should be uniformly distributed across the visible colormap. Thus if we want to highlight e.g. the top 1% of pixels, by population density, we can use a colormap divided into 100 ranges, and just change the top one to a different color:" ] @@ -336,7 +336,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We'll show a key for those near the end of this notebook if you want to scroll down, but it requires plotting tools not yet introduced. We can now aggregate the counts *per race* into grids, using `ds.count_cat`, instead of just a single grid with the total counts (via the default aggregate reducer `ds.count`), and then generate an image by colorizing each pixel using the aggregate information from each category for that pixel's location:" + "We'll show a key for those near the end of this notebook if you want to scroll down, but it requires plotting tools not yet introduced. We can now aggregate the counts *per race* into grids, using `ds.by`, instead of just a single grid with the total counts (via the default aggregate reducer `ds.count`), and then generate an image by colorizing each pixel using the aggregate information from each category for that pixel's location:" ] }, { @@ -348,7 +348,7 @@ "def create_image(longitude_range, latitude_range, w=plot_width, h=plot_height):\n", " x_range,y_range=webm(longitude_range,latitude_range)\n", " cvs = ds.Canvas(plot_width=w, plot_height=h, x_range=x_range, y_range=y_range)\n", - " agg = cvs.points(df, 'easting', 'northing', ds.count_cat('race'))\n", + " agg = cvs.points(df, 'easting', 'northing', ds.by('race'))\n", " img = tf.shade(agg, color_key=color_key, how='eq_hist')\n", " return img" ] @@ -507,7 +507,7 @@ "outputs": [], "source": [ "cvs = ds.Canvas(plot_width=plot_width, plot_height=plot_height)\n", - "aggc = cvs.points(df, 'easting', 'northing', ds.count_cat('race'))\n", + "aggc = cvs.points(df, 'easting', 'northing', ds.by('race'))\n", "\n", "export(tf.shade(aggc.sel(race='b'), cmap=cm(Greys9,0.25), how='eq_hist'),\"USA blacks\")" ] @@ -555,7 +555,7 @@ "source": [ "Here the colors still show the predominant race in that pixel, which is black for many of these, but in Southern California it looks like there are several large neighborhoods where blacks outnumber whites but both are outnumbered by Hispanics.\n", "\n", - "In any case, the thing to do here is to try out your own hypotheses and questions, whether for the USA or for your own region. The aggregate array is just an ordinary xarray multidimensional array, so you can see the [xarray documentation](http://xarray.pydata.org) for how to select and transform that data. E.g. you can try posing questions that are independent of the number of datapoints in each pixel, since that varies so much geographically, by normalizing the aggregated data in various ways. Now that the data's been aggregated but not yet rendered to the screen, there is an infinite range of queries you can pose!" + "In any case, the thing to do here is to try out your own hypotheses and questions, whether for the USA or for your own region. The aggregate array is just an ordinary xarray multidimensional array, so you can see the [xarray documentation](https://xarray.pydata.org) for how to select and transform that data. E.g. you can try posing questions that are independent of the number of datapoints in each pixel, since that varies so much geographically, by normalizing the aggregated data in various ways. Now that the data's been aggregated but not yet rendered to the screen, there is an infinite range of queries you can pose!" ] }, { @@ -616,11 +616,14 @@ "metadata": {}, "outputs": [], "source": [ + "import xyzservices.providers as xyz\n", + "\n", "points = hv.Points(hv.Dataset(df, kdims=['easting', 'northing'], vdims=['race']))\n", - "shaded = datashade(points, color_key=color_key, min_alpha=100, aggregator=ds.count_cat('race'))\n", + "shaded = datashade(points, color_key=color_key, min_alpha=100, aggregator=ds.by('race'))\n", "race = dynspread(shaded, threshold=0.8).opts(bgcolor='black')\n", + "labels = hv.Tiles(xyz.CartoDB.PositronOnlyLabels())\n", "\n", - "tiles.EsriImagery().opts(alpha=0.5, bgcolor='black') * race * color_points * tiles.StamenLabels()" + "tiles.EsriImagery().opts(alpha=0.5, bgcolor='black') * race * color_points * labels" ] }, { @@ -639,14 +642,14 @@ "outputs": [], "source": [ "population = dynspread(rasterize(points)).opts(cnorm='eq_hist', cmap=\"fire\", colorbar=True, tools=['hover'])\n", - "tiles.EsriImagery().opts(alpha=0.5, bgcolor='black') * population * tiles.StamenLabels()" + "tiles.EsriImagery().opts(alpha=0.5, bgcolor='black') * population * labels" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The [dashboard](https://examples.pyviz.org/datashader_dashboard/dashboard.html) example shows this same census data in the context of an interactive dashboard, including color keys and hover information that help reveal the magnitudes at every location even while the plot faithfully reveals the structure." + "The [dashboard](https://examples.holoviz.org/datashader_dashboard/dashboard.html) example shows this same census data in the context of an interactive dashboard, including color keys and hover information that help reveal the magnitudes at every location even while the plot faithfully reveals the structure." ] } ], @@ -666,7 +669,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.10.15" } }, "nbformat": 4,