Created
January 13, 2021 17:58
-
-
Save kathoef/2fbdfd19f29a03aed561e0f5f56d445a to your computer and use it in GitHub Desktop.
low xarray.corr() performance on big datasets
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import xarray, dask, numpy\n", | |
"import dask.distributed" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Open Dask cluster," | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/miniconda3/lib/python3.8/site-packages/distributed/node.py:151: UserWarning: Port 8787 is already in use.\n", | |
"Perhaps you already have a cluster running?\n", | |
"Hosting the HTTP server on port 43455 instead\n", | |
" warnings.warn(\n" | |
] | |
} | |
], | |
"source": [ | |
"cluster = dask.distributed.LocalCluster(\n", | |
" n_workers=1,\n", | |
" threads_per_worker=4,\n", | |
" memory_limit='8GB',\n", | |
" ip='0.0.0.0'\n", | |
")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"client = dask.distributed.Client(cluster)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table style=\"border: 2px solid white;\">\n", | |
"<tr>\n", | |
"<td style=\"vertical-align: top; border: 0px solid white\">\n", | |
"<h3 style=\"text-align: left;\">Client</h3>\n", | |
"<ul style=\"text-align: left; list-style: none; margin: 0; padding: 0;\">\n", | |
" <li><b>Scheduler: </b>tcp://10.199.124.111:39555</li>\n", | |
" <li><b>Dashboard: </b><a href='http://10.199.124.111:43455/status' target='_blank'>http://10.199.124.111:43455/status</a></li>\n", | |
"</ul>\n", | |
"</td>\n", | |
"<td style=\"vertical-align: top; border: 0px solid white\">\n", | |
"<h3 style=\"text-align: left;\">Cluster</h3>\n", | |
"<ul style=\"text-align: left; list-style:none; margin: 0; padding: 0;\">\n", | |
" <li><b>Workers: </b>1</li>\n", | |
" <li><b>Cores: </b>4</li>\n", | |
" <li><b>Memory: </b>8.00 GB</li>\n", | |
"</ul>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<Client: 'tcp://10.199.124.111:39555' processes=1 threads=4, memory=8.00 GB>" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"client" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Define a correlation coefficient suitable for big data application," | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def calc_big_data_corr(a, b, dim):\n", | |
" a, b = xarray.align(a, b)\n", | |
" valid_values = a.notnull() & b.notnull()\n", | |
" a = a.where(valid_values)\n", | |
" b = b.where(valid_values)\n", | |
" c = (a * b).mean(dim) - ( a.mean(dim) * b.mean(dim) )\n", | |
" c /= a.std(dim)\n", | |
" c /= b.std(dim)\n", | |
" return c" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Check equivalence with xarray.corr() for unaligned data with nan-values," | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"length = 250; time = numpy.linspace(0, 2*numpy.pi, length)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"da_a = xarray.DataArray(\n", | |
" numpy.sin(time) + numpy.random.normal(0, 0.25, length),\n", | |
" coords=[time], dims=\"time\"\n", | |
")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"da_b = xarray.DataArray(\n", | |
" numpy.sin(time) + numpy.random.normal(0, 0.25, length),\n", | |
" coords=[time], dims=\"time\"\n", | |
")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def random_choice(fraction):\n", | |
" return numpy.sort(numpy.random.choice(length, size=int(length*fraction), replace=False))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# make sure data arrays are not aligned\n", | |
"da_a = da_a.isel(time=random_choice(0.8)) " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# make sure nan-values are present\n", | |
"#mask = ~numpy.isin(numpy.arange(length), random_choice(0.2))\n", | |
"#da_b = da_b.where(mask) " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# make sure there are nan-values present\n", | |
"da_b = da_b.where(da_b > 0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 14.5 ms, sys: 2.26 ms, total: 16.7 ms\n", | |
"Wall time: 15.6 ms\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"corr_orig = xarray.corr(da_a, da_b, \"time\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 56 µs, sys: 26 µs, total: 82 µs\n", | |
"Wall time: 83.9 µs\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"array(0.61706519)" | |
] | |
}, | |
"execution_count": 14, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"corr_orig.compute().values" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 3.16 ms, sys: 627 µs, total: 3.79 ms\n", | |
"Wall time: 3.67 ms\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"corr_big_data = calc_big_data_corr(da_a, da_b, \"time\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 55 µs, sys: 25 µs, total: 80 µs\n", | |
"Wall time: 82.3 µs\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"array(0.61706519)" | |
] | |
}, | |
"execution_count": 16, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"corr_big_data.compute().values" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Now with bigger data," | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"da_a = xarray.DataArray(\n", | |
" dask.array.random.normal(size=(100_000, ), chunks=(200, ))\n", | |
")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"da_b = xarray.DataArray(\n", | |
" dask.array.random.normal(size=(100_000, ), chunks=(200, ))\n", | |
")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# make sure there are nan-values present\n", | |
"da_b = da_b.where(da_b > 0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 5.23 s, sys: 248 ms, total: 5.47 s\n", | |
"Wall time: 9.88 s\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"corr_orig = xarray.corr(da_a, da_b, dim=\"dim_0\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 3.92 s, sys: 197 ms, total: 4.12 s\n", | |
"Wall time: 8.5 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"array(-0.00190346)" | |
] | |
}, | |
"execution_count": 21, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"corr_orig.compute().values" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 32.6 ms, sys: 8 µs, total: 32.6 ms\n", | |
"Wall time: 32 ms\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"corr_big_data = calc_big_data_corr(da_a, da_b, dim=\"dim_0\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 3.66 s, sys: 166 ms, total: 3.83 s\n", | |
"Wall time: 7.91 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"array(-0.00190346)" | |
] | |
}, | |
"execution_count": 23, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"corr_big_data.compute().values" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Python environment," | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"# packages in environment at /miniconda3:\n", | |
"#\n", | |
"# Name Version Build Channel\n", | |
"_libgcc_mutex 0.1 conda_forge conda-forge\n", | |
"_openmp_mutex 4.5 1_gnu conda-forge\n", | |
"aiohttp 3.7.3 py38h497a2fe_1 conda-forge\n", | |
"argon2-cffi 20.1.0 py38h497a2fe_2 conda-forge\n", | |
"asciitree 0.3.3 py_2 conda-forge\n", | |
"async-timeout 3.0.1 py_1000 conda-forge\n", | |
"async_generator 1.10 py_0 conda-forge\n", | |
"attrs 20.3.0 pyhd3deb0d_0 conda-forge\n", | |
"backcall 0.2.0 pyh9f0ad1d_0 conda-forge\n", | |
"backports 1.0 py_2 conda-forge\n", | |
"backports.functools_lru_cache 1.6.1 py_0 conda-forge\n", | |
"bleach 3.2.1 pyh9f0ad1d_0 conda-forge\n", | |
"bokeh 2.2.3 py38h578d9bd_0 conda-forge\n", | |
"brotlipy 0.7.0 py38h27cfd23_1003 \n", | |
"bzip2 1.0.8 h7f98852_4 conda-forge\n", | |
"c-ares 1.17.1 h36c2ea0_0 conda-forge\n", | |
"ca-certificates 2020.12.8 h06a4308_0 \n", | |
"cairo 1.16.0 h7979940_1007 conda-forge\n", | |
"cartopy 0.18.0 py38h9b98833_8 conda-forge\n", | |
"cartopy_offlinedata 0.2.3 pyh9f0ad1d_0 conda-forge\n", | |
"certifi 2020.12.5 py38h578d9bd_1 conda-forge\n", | |
"cffi 1.14.3 py38h261ae71_2 \n", | |
"cftime 1.3.0 py38h0b5ebd8_0 conda-forge\n", | |
"chardet 3.0.4 py38h06a4308_1003 \n", | |
"click 7.1.2 pyh9f0ad1d_0 conda-forge\n", | |
"cloudpickle 1.6.0 py_0 conda-forge\n", | |
"colorcet 2.0.2 py_0 \n", | |
"conda 4.9.2 py38h578d9bd_0 conda-forge\n", | |
"conda-package-handling 1.7.2 py38h03888b9_0 \n", | |
"cryptography 3.2.1 py38h3c74f83_1 \n", | |
"curl 7.71.1 he644dc0_8 conda-forge\n", | |
"cycler 0.10.0 py_2 conda-forge\n", | |
"cytoolz 0.11.0 py38h25fe258_1 conda-forge\n", | |
"dask 2020.12.0 pyhd8ed1ab_0 conda-forge\n", | |
"dask-core 2020.12.0 pyhd8ed1ab_0 conda-forge\n", | |
"dask-jobqueue 0.7.2 pyhd8ed1ab_0 conda-forge\n", | |
"dask-labextension 4.0.1 pyhd8ed1ab_0 conda-forge\n", | |
"dbus 1.13.18 hb2f20db_0 \n", | |
"decorator 4.4.2 py_0 conda-forge\n", | |
"defusedxml 0.6.0 py_0 conda-forge\n", | |
"distributed 2020.12.0 py38h578d9bd_0 conda-forge\n", | |
"entrypoints 0.3 py38h32f6830_1002 conda-forge\n", | |
"expat 2.2.10 he6710b0_2 \n", | |
"fasteners 0.16 pyhd3eb1b0_0 \n", | |
"fontconfig 2.13.1 h736d332_1003 conda-forge\n", | |
"freetype 2.10.4 he06d7ca_0 conda-forge\n", | |
"fribidi 1.0.10 h516909a_0 conda-forge\n", | |
"fsspec 0.8.5 pyhd8ed1ab_0 conda-forge\n", | |
"geos 3.8.1 he1b5a44_0 conda-forge\n", | |
"geoviews 1.5.0 py_0 conda-forge\n", | |
"gettext 0.19.8.1 h0b5b191_1005 conda-forge\n", | |
"git 2.30.0 pl5320h014a29a_0 conda-forge\n", | |
"glib 2.66.4 h709712a_1 conda-forge\n", | |
"graphite2 1.3.14 h23475e2_0 \n", | |
"graphviz 2.42.3 h0511662_0 conda-forge\n", | |
"gst-plugins-base 1.14.5 h0935bb2_2 conda-forge\n", | |
"gstreamer 1.18.2 h3560a44_1 conda-forge\n", | |
"harfbuzz 2.7.4 h5cf4720_0 conda-forge\n", | |
"hdf4 4.2.13 h10796ff_1004 conda-forge\n", | |
"hdf5 1.10.6 nompi_h6a2412b_1114 conda-forge\n", | |
"heapdict 1.0.1 py_0 conda-forge\n", | |
"holoviews 1.14.1 pyhd3deb0d_0 conda-forge\n", | |
"hvplot 0.7.0 pyhd3deb0d_0 conda-forge\n", | |
"icu 68.1 h58526e2_0 conda-forge\n", | |
"idna 2.10 py_0 \n", | |
"importlib-metadata 3.4.0 py38h578d9bd_0 conda-forge\n", | |
"importlib_metadata 3.4.0 hd8ed1ab_0 conda-forge\n", | |
"ipykernel 5.4.2 py38h81c977d_0 conda-forge\n", | |
"ipython 7.19.0 py38h81c977d_1 conda-forge\n", | |
"ipython_genutils 0.2.0 py_1 conda-forge\n", | |
"ipywidgets 7.6.3 pyhd3deb0d_0 conda-forge\n", | |
"jedi 0.17.2 py38h578d9bd_1 conda-forge\n", | |
"jinja2 2.11.2 pyh9f0ad1d_0 conda-forge\n", | |
"joblib 1.0.0 pyhd8ed1ab_0 conda-forge\n", | |
"jpeg 9d h516909a_0 conda-forge\n", | |
"json5 0.9.5 pyh9f0ad1d_0 conda-forge\n", | |
"jsonschema 3.2.0 py38h32f6830_1 conda-forge\n", | |
"jupyter 1.0.0 py_2 conda-forge\n", | |
"jupyter-server-proxy 1.5.3 pyhd8ed1ab_0 conda-forge\n", | |
"jupyter_client 6.1.11 pyhd8ed1ab_1 conda-forge\n", | |
"jupyter_console 6.2.0 py_0 conda-forge\n", | |
"jupyter_core 4.7.0 py38h578d9bd_0 conda-forge\n", | |
"jupyterlab 2.2.9 py_0 conda-forge\n", | |
"jupyterlab_pygments 0.1.2 pyh9f0ad1d_0 conda-forge\n", | |
"jupyterlab_server 1.2.0 py_0 conda-forge\n", | |
"jupyterlab_widgets 1.0.0 pyhd8ed1ab_1 conda-forge\n", | |
"kiwisolver 1.3.1 py38h1fd1430_1 conda-forge\n", | |
"krb5 1.17.2 h926e7f8_0 conda-forge\n", | |
"lcms2 2.11 hcbb858e_1 conda-forge\n", | |
"ld_impl_linux-64 2.33.1 h53a641e_7 \n", | |
"libarchive 3.5.1 h3f442fb_1 conda-forge\n", | |
"libblas 3.9.0 7_openblas conda-forge\n", | |
"libcblas 3.9.0 7_openblas conda-forge\n", | |
"libclang 11.0.0 default_ha5c780c_2 conda-forge\n", | |
"libcurl 7.71.1 hcdd3856_8 conda-forge\n", | |
"libedit 3.1.20191231 h14c3975_1 \n", | |
"libev 4.33 h516909a_1 conda-forge\n", | |
"libevent 2.1.10 hcdb4288_3 conda-forge\n", | |
"libffi 3.3 he6710b0_2 \n", | |
"libgcc-ng 9.3.0 h5dbcf3e_17 conda-forge\n", | |
"libgfortran-ng 9.3.0 he4bcb1c_17 conda-forge\n", | |
"libgfortran5 9.3.0 he4bcb1c_17 conda-forge\n", | |
"libglib 2.66.4 hf9edacf_1 conda-forge\n", | |
"libgomp 9.3.0 h5dbcf3e_17 conda-forge\n", | |
"libiconv 1.16 h516909a_0 conda-forge\n", | |
"liblapack 3.9.0 7_openblas conda-forge\n", | |
"libllvm11 11.0.1 hf817b99_0 conda-forge\n", | |
"libnetcdf 4.7.4 nompi_h56d31a8_107 conda-forge\n", | |
"libnghttp2 1.41.0 h8cfc5f6_2 conda-forge\n", | |
"libopenblas 0.3.12 pthreads_h4812303_1 conda-forge\n", | |
"libpng 1.6.37 hed695b0_2 conda-forge\n", | |
"libpq 12.3 hfd2b0eb_3 conda-forge\n", | |
"libsodium 1.0.18 h516909a_1 conda-forge\n", | |
"libsolv 0.7.16 h8b12597_0 conda-forge\n", | |
"libssh2 1.9.0 hab1572f_5 conda-forge\n", | |
"libstdcxx-ng 9.3.0 h2ae2ef3_17 conda-forge\n", | |
"libtiff 4.2.0 hdc55705_0 conda-forge\n", | |
"libtool 2.4.6 h58526e2_1007 conda-forge\n", | |
"libuuid 2.32.1 h14c3975_1000 conda-forge\n", | |
"libuv 1.40.0 hd18ef5c_0 conda-forge\n", | |
"libwebp-base 1.1.0 h516909a_3 conda-forge\n", | |
"libxcb 1.14 h7b6447c_0 \n", | |
"libxkbcommon 1.0.3 he3ba5ed_0 conda-forge\n", | |
"libxml2 2.9.10 h72842e0_3 conda-forge\n", | |
"locket 0.2.0 py_2 conda-forge\n", | |
"lz4-c 1.9.3 h9c3ff4c_0 conda-forge\n", | |
"lzo 2.10 h516909a_1000 conda-forge\n", | |
"mamba 0.7.6 py38h4c9354d_0 conda-forge\n", | |
"markdown 3.3.3 pyh9f0ad1d_0 conda-forge\n", | |
"markupsafe 1.1.1 py38h497a2fe_3 conda-forge\n", | |
"matplotlib 3.3.3 py38h578d9bd_0 conda-forge\n", | |
"matplotlib-base 3.3.3 py38h5c7f4ab_0 conda-forge\n", | |
"mistune 0.8.4 py38h497a2fe_1003 conda-forge\n", | |
"monotonic 1.5 py_0 conda-forge\n", | |
"msgpack-python 1.0.2 py38h1fd1430_1 conda-forge\n", | |
"multidict 5.1.0 py38h497a2fe_1 conda-forge\n", | |
"mysql-common 8.0.22 ha770c72_1 conda-forge\n", | |
"mysql-libs 8.0.22 h1fd7589_1 conda-forge\n", | |
"nbclient 0.5.1 py_0 conda-forge\n", | |
"nbconvert 6.0.7 py38h578d9bd_3 conda-forge\n", | |
"nbformat 5.0.8 py_0 conda-forge\n", | |
"ncurses 6.2 he6710b0_1 \n", | |
"nest-asyncio 1.4.3 pyhd8ed1ab_0 conda-forge\n", | |
"netcdf4 1.5.5.1 nompi_py38h1cdf482_100 conda-forge\n", | |
"nodejs 15.3.0 h25f6087_0 conda-forge\n", | |
"notebook 6.1.6 py38h578d9bd_0 conda-forge\n", | |
"nspr 4.29 he1b5a44_1 conda-forge\n", | |
"nss 3.60 hb5efdd6_0 conda-forge\n", | |
"numcodecs 0.7.2 py38h709712a_1 conda-forge\n", | |
"numpy 1.19.5 py38h18fd61f_1 conda-forge\n", | |
"olefile 0.46 pyh9f0ad1d_1 conda-forge\n", | |
"openssl 1.1.1i h7f98852_0 conda-forge\n", | |
"packaging 20.8 pyhd3deb0d_0 conda-forge\n", | |
"pandas 1.2.0 py38h51da96c_0 conda-forge\n", | |
"pandoc 2.11.3.2 h7f98852_0 conda-forge\n", | |
"pandocfilters 1.4.3 py38h06a4308_1 \n", | |
"panel 0.10.2 pyhd8ed1ab_0 conda-forge\n", | |
"pango 1.42.4 h80147aa_5 conda-forge\n", | |
"param 1.10.1 pyhd3deb0d_0 conda-forge\n", | |
"parso 0.7.1 pyh9f0ad1d_0 conda-forge\n", | |
"partd 1.1.0 py_0 conda-forge\n", | |
"pcre 8.44 he1b5a44_0 conda-forge\n", | |
"perl 5.32.0 h36c2ea0_0 conda-forge\n", | |
"pexpect 4.8.0 py38h32f6830_1 conda-forge\n", | |
"pickleshare 0.7.5 py38h32f6830_1002 conda-forge\n", | |
"pillow 8.1.0 py38h357d4e7_1 conda-forge\n", | |
"pip 20.2.4 py38h06a4308_0 \n", | |
"pixman 0.40.0 h36c2ea0_0 conda-forge\n", | |
"proj 7.2.0 he47e99f_1 conda-forge\n", | |
"prometheus_client 0.9.0 pyhd3deb0d_0 conda-forge\n", | |
"prompt-toolkit 3.0.10 pyha770c72_0 conda-forge\n", | |
"prompt_toolkit 3.0.10 hd8ed1ab_0 conda-forge\n", | |
"psutil 5.8.0 py38h497a2fe_1 conda-forge\n", | |
"ptyprocess 0.7.0 pyhd3deb0d_0 conda-forge\n", | |
"pycosat 0.6.3 py38h7b6447c_1 \n", | |
"pycparser 2.20 py_2 \n", | |
"pyct 0.4.8 py38_0 \n", | |
"pygments 2.7.3 pyhd8ed1ab_0 conda-forge\n", | |
"pyopenssl 19.1.0 pyhd3eb1b0_1 \n", | |
"pyparsing 2.4.7 pyh9f0ad1d_0 conda-forge\n", | |
"pyqt 5.12.3 py38h578d9bd_7 conda-forge\n", | |
"pyqt-impl 5.12.3 py38h7400c14_7 conda-forge\n", | |
"pyqt5-sip 4.19.18 py38h709712a_7 conda-forge\n", | |
"pyqtchart 5.12 py38h7400c14_7 conda-forge\n", | |
"pyqtwebengine 5.12.1 py38h7400c14_7 conda-forge\n", | |
"pyrsistent 0.17.3 py38h497a2fe_2 conda-forge\n", | |
"pyshp 2.1.2 pyh9f0ad1d_0 conda-forge\n", | |
"pysocks 1.7.1 py38h06a4308_0 \n", | |
"python 3.8.5 h7579374_1 \n", | |
"python-dateutil 2.8.1 py_0 conda-forge\n", | |
"python-graphviz 0.16 pyhd3deb0d_1 conda-forge\n", | |
"python_abi 3.8 1_cp38 conda-forge\n", | |
"pytz 2020.5 pyhd8ed1ab_0 conda-forge\n", | |
"pyviz_comms 2.0.1 pyhd3deb0d_0 conda-forge\n", | |
"pyyaml 5.3.1 py38h497a2fe_2 conda-forge\n", | |
"pyzmq 20.0.0 py38h3d7ac18_1 conda-forge\n", | |
"qt 5.12.9 h9d6b050_2 conda-forge\n", | |
"qtconsole 5.0.1 pyhd8ed1ab_0 conda-forge\n", | |
"qtpy 1.9.0 py_0 conda-forge\n", | |
"readline 8.0 h7b6447c_0 \n", | |
"rechunker 0.3.2 pypi_0 pypi\n", | |
"reproc 14.2.1 h36c2ea0_0 conda-forge\n", | |
"reproc-cpp 14.2.1 h58526e2_0 conda-forge\n", | |
"requests 2.24.0 py_0 \n", | |
"ruamel_yaml 0.15.87 py38h7b6447c_1 \n", | |
"scikit-learn 0.24.0 py38h658cfdd_0 conda-forge\n", | |
"scipy 1.6.0 py38hb2138dd_0 conda-forge\n", | |
"send2trash 1.5.0 py_0 conda-forge\n", | |
"setuptools 50.3.1 py38h06a4308_1 \n", | |
"shapely 1.7.1 py38hc7361b7_1 conda-forge\n", | |
"simpervisor 0.4 pyhd8ed1ab_0 conda-forge\n", | |
"six 1.15.0 py38h06a4308_0 \n", | |
"sortedcontainers 2.3.0 pyhd8ed1ab_0 conda-forge\n", | |
"sqlite 3.34.0 h74cdb3f_0 conda-forge\n", | |
"tblib 1.7.0 py_0 \n", | |
"terminado 0.9.2 py38h578d9bd_0 conda-forge\n", | |
"testpath 0.4.4 py_0 conda-forge\n", | |
"threadpoolctl 2.1.0 pyh5ca1d4c_0 conda-forge\n", | |
"tk 8.6.10 hbc83047_0 \n", | |
"toolz 0.11.1 py_0 conda-forge\n", | |
"tornado 6.1 py38h497a2fe_1 conda-forge\n", | |
"tqdm 4.51.0 pyhd3eb1b0_0 \n", | |
"traitlets 5.0.5 py_0 conda-forge\n", | |
"typing-extensions 3.7.4.3 0 conda-forge\n", | |
"typing_extensions 3.7.4.3 py_0 conda-forge\n", | |
"urllib3 1.25.11 py_0 \n", | |
"wcwidth 0.2.5 pyh9f0ad1d_2 conda-forge\n", | |
"webencodings 0.5.1 py_1 conda-forge\n", | |
"wheel 0.35.1 pyhd3eb1b0_0 \n", | |
"widgetsnbextension 3.5.1 py38h578d9bd_4 conda-forge\n", | |
"xarray 0.16.2 pyhd8ed1ab_0 conda-forge\n", | |
"xoak 0.1.0 pyhd8ed1ab_0 conda-forge\n", | |
"xorg-kbproto 1.0.7 h14c3975_1002 conda-forge\n", | |
"xorg-libice 1.0.10 h516909a_0 conda-forge\n", | |
"xorg-libsm 1.2.3 h84519dc_1000 conda-forge\n", | |
"xorg-libx11 1.6.12 h516909a_0 conda-forge\n", | |
"xorg-libxext 1.3.4 h516909a_0 conda-forge\n", | |
"xorg-libxpm 3.5.13 h516909a_0 conda-forge\n", | |
"xorg-libxrender 0.9.10 h516909a_1002 conda-forge\n", | |
"xorg-libxt 1.1.5 h516909a_1003 conda-forge\n", | |
"xorg-renderproto 0.11.1 h14c3975_1002 conda-forge\n", | |
"xorg-xextproto 7.3.0 h14c3975_1002 conda-forge\n", | |
"xorg-xproto 7.0.31 h14c3975_1007 conda-forge\n", | |
"xz 5.2.5 h7b6447c_0 \n", | |
"yaml 0.2.5 h7b6447c_0 \n", | |
"yarl 1.6.3 py38h497a2fe_1 conda-forge\n", | |
"zarr 2.6.1 pyhd8ed1ab_0 conda-forge\n", | |
"zeromq 4.3.3 h58526e2_3 conda-forge\n", | |
"zict 2.0.0 py_0 conda-forge\n", | |
"zipp 3.4.0 py_0 conda-forge\n", | |
"zlib 1.2.11 h7b6447c_3 \n", | |
"zstd 1.4.8 ha95c52a_1 conda-forge\n" | |
] | |
} | |
], | |
"source": [ | |
"!conda list" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.8.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment