{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<style>div.container { width: 100% }</style>\n",
    "<img style=\"float:left;  vertical-align:text-bottom;\" height=\"65\" width=\"172\" src=\"../assets/holoviz-logo-unstacked.svg\" />\n",
    "<div style=\"float:right; vertical-align:text-bottom;\"><h2>Tutorial 1. Overview</h2></div>\n",
    "<br><br>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Welcome to HoloViz!\n",
    "\n",
    "HoloViz is a set of compatible tools to make it easier to see and understand\n",
    "your data at _every_ stage needed by users, research groups, and projects:\n",
    "\n",
    "- importing and cleaning\n",
    "- initial exploration\n",
    "- testing hypotheses\n",
    "- generating accurate and convincing figures\n",
    "- sharing and deploying live apps\n",
    "- improving and adapting each stage over time\n",
    "\n",
    "Why \"Holo\"? \"_holo-_\", from the Greek root \"_hólos_\", means\n",
    "[\"whole, entire, complete\"](https://www.dictionary.com/browse/holo-).\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Doesn't Python _already_ cover all these stages?\n",
    "\n",
    "Sure! That's how it ended up with:\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"clear:left;\">\n",
    "<img src=\"../assets/landscape_hv_nx.png\" width=75% align=\"left\" style=\"margin: 0px 30px\">\n",
    "</div>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Why so many tools?\n",
    "\n",
    "Because each tool is typically limited to one or two of the stages in the data\n",
    "life cycle, supporting some well but not the others:\n",
    "\n",
    "- Simple, quick plots, but limited in capabilities, customization, and\n",
    "  compositionality.\n",
    "- Deep capabilities for print-based plots, but weak or no support for custom\n",
    "  interactivity in web apps.\n",
    "- Good interactivity in Jupyter, but weak or no support for batch processing or\n",
    "  deployed servers.\n",
    "- Good support for deployed servers, but weak or no support for Jupyter or\n",
    "  interactive exploration in general.\n",
    "- Good support for small datasets, but can't handle large datasets until _after_\n",
    "  they have been explored enough to determine how to aggregate or model them\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## How does HoloViz help?\n",
    "\n",
    "To avoid having to abandon all your work on one stage to reach the next, HoloViz\n",
    "tools reduce friction and gaps between the stages:\n",
    "\n",
    "- Focuses from the start on tools that support web browsers fully, because all\n",
    "  tools offer static output, but not vice versa.\n",
    "- Focuses on writing Python, not web tech -- web tech like JS/CSS would be fine\n",
    "  for deployments, but very impractical for exploratory analysis.\n",
    "- Eliminates browser-based data-size restrictions, to avoid having to switch\n",
    "  tools for each dataset.\n",
    "- Makes sure that all interactivity works the same in Jupyter and in a\n",
    "  standalone deployment\n",
    "- Provides high-level (quick and convenient) interfaces that are shortcuts, not\n",
    "  dead ends:\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Shortcuts, not dead ends\n",
    "\n",
    "<img src=\"../assets/shortcuts.png\" width=70% align=\"left\">\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## HoloViz principles\n",
    "\n",
    "Throughout the tutorial, you'll see these principles at work:\n",
    "\n",
    "- We'll usually start out with an easy one-line command to build a dashboard,\n",
    "  app, or plot.\n",
    "- Then we'll show what you can do with it at this level: customize it, compose\n",
    "  it with other things, etc.\n",
    "- Then we'll show you how to drop down a level when you need to make it do what\n",
    "  you want\n",
    "- Repeat as necessary, all the way down to the HTML, CSS, and JS!\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"clear:left;\">\n",
    "<img src=\"../assets/landscape_hv_nx_panel.png\" width=65% \n",
    "align=\"left\" style=\"margin: 0px 30px\">\n",
    "\n",
    "<br><br> <br><br> HoloViz currently covers this subset of viz tools <br><br>\n",
    "\n",
    "</div>\n",
    "<div style=\"clear:left;\"></div>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"clear:left;\">\n",
    "<img src=\"../assets/landscape_hv_nx_pyviz.png\" width=65% \n",
    "align=\"left\" style=\"margin: 0px 30px\">\n",
    "\n",
    "<br><br> <br><br> These tools are the most fully supported and are often\n",
    "entirely sufficient on their own. <br><br>\n",
    "\n",
    "</div>\n",
    "<div style=\"clear:left;\"></div>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## HoloViz libraries\n",
    "\n",
    "<img width=\"800\" src=\"../assets/pn_hp_hv_gv_ds_pa_cs.png\"/>\n",
    "\n",
    "To address the above issues, we have developed a set of open-source Python\n",
    "packages to streamline the process of working with small and large datasets\n",
    "(from a few datapoints to billions or more) in a web browser, whether doing\n",
    "exploratory analysis, making simple widget-based tools, or building\n",
    "full-featured dashboards. The main libraries in this ecosystem include:\n",
    "\n",
    "- [Panel](http://panel.pyviz.org): Assembling objects from many different\n",
    "  libraries into a layout or app, whether in a Jupyter notebook or in a\n",
    "  standalone servable dashboard\n",
    "- [hvPlot](http://hvplot.pyviz.org): Quickly return interactive Bokeh-based\n",
    "  HoloViews or GeoViews objects from Pandas, Xarray, orother data structures\n",
    "- [HoloViews](http://holoviews.org): Declarative objects for instantly\n",
    "  visualizable data, building Bokeh plots from convenient high-level\n",
    "  specifications\n",
    "- [GeoViews](http://geo.holoviews.org): Visualizable geographic data that that\n",
    "  can be mixed and matched with HoloViews objects\n",
    "- [Datashader](http://datashader.org): Rasterizing huge datasets quickly as\n",
    "  fixed-size images\n",
    "- [Param](http://param.pyviz.org): Declaring user-relevant parameters, making it\n",
    "  simple to work with widgets inside and outside of a notebook context\n",
    "- [Colorcet](http://colorcet.pyviz.org): Perceptually accurate continuous and\n",
    "  categorical colormaps for any viz tool\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Built on the Python scientific ecosystem\n",
    "\n",
    "Beyond the specific HoloViz tools, all these approaches work with and often rely\n",
    "upon a wide range of other open-source libraries for their implementation,\n",
    "including:\n",
    "\n",
    "- [Bokeh](https://bokeh.org): HTML/JS plots in a web browser for Python data\n",
    "  structures (used by Panel, hvPlot, HoloViews, GeoViews)\n",
    "- [Matplotlib](https://matplotlib.org): Flexible, publication-quality plots\n",
    "  (used by HoloViews, Geoviews; used with Panel)\n",
    "- [Pandas](http://pandas.pydata.org): Convenient computation on columnar\n",
    "  datasets (used by HoloViews and Datashader)\n",
    "- [Xarray](http://xarray): Convenient computations on multidimensional array\n",
    "  datasets (used by hvPlot HoloViews and Datashader)\n",
    "- [Dask](http://dask.pydata.org): Efficient out-of-core/distributed computation\n",
    "  on massive datasets (used by hvPlot, Datashader)\n",
    "- [Numba](http://numba.pydata.org): Accelerated machine code for inner loops\n",
    "  (used by Datashader)\n",
    "- [Fastparquet](https://fastparquet.readthedocs.io): Efficient storage for\n",
    "  columnar data (used with Datashader)\n",
    "- [Cartopy](http://scitools.org.uk/cartopy): Support for geographical data (used\n",
    "  by GeoViews; uses a wide range of other lower-level libraries)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The HoloViz tutorial\n",
    "\n",
    "In this tutorial, we'll focus on an example set of data using it to illustrate\n",
    "how to:\n",
    "\n",
    "- create simple but powerful apps and dashboards out of anything in a Jupyter\n",
    "  notebook\n",
    "- make simple but powerful plots out of Pandas dataframes and Xarray\n",
    "  multidimensional arrays\n",
    "- handle columnar data, big data, geo data, array data\n",
    "- provide custom interactive links between views of datasets\n",
    "- handle the whole process from getting the data in, cleaning it, exploring it\n",
    "  visually, creating plots for communication, building dashboards for sharing\n",
    "  your analyses, and deploying dashboards.\n",
    "\n",
    "The tutorial is organized around the most general to the most specific, in terms\n",
    "of tool support. We first look at [Panel](https://panel.pyviz.org) package,\n",
    "which works with nearly any plotting library, then\n",
    "[hvPlot](https://hvplot.pyviz.org), which works with nearly any data library and\n",
    "shares an API with many other plotting libraries, and then dive deeper into\n",
    "HoloViz-specific approaches that let you work with large data, provide deep\n",
    "interactivity, and other advanced features.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## To summarize\n",
    "\n",
    "- HoloViz provides a set of very high-level tools for interacting with data\n",
    "- These tools make it simple to work with multidimensional data, flexibly\n",
    "  selecting, visualizing, combining, and comparing it.\n",
    "- The tools focus on information visualization in 2D in web browsers, not 3D\n",
    "  scientific visualization.\n",
    "- Together the tools support a flexible workflow with very little friction\n",
    "  between initial exploratory analysis, making interactive apps, building fully\n",
    "  deployable dashboards, and revisiting the initial analyses as needed, with\n",
    "  changes immediately propagating to the deployed dashboard.\n",
    "- The tools are designed around \"shortcuts\", not \"dead ends\", and so there is\n",
    "  always another level deeper that you can go if you need more power or more\n",
    "  customization.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Getting started\n",
    "\n",
    "Before going further, it's worth exploring some examples of what you can get\n",
    "with HoloViz, to make sure that it covers your needs:\n",
    "\n",
    "- https://panel.pyviz.org/gallery\n",
    "- https://examples.pyviz.org\n",
    "\n",
    "And then you can browse through the already-run versions of the HoloViz\n",
    "[tutorials](https://holoviz.org/tutorial/) to see what they cover and how it all\n",
    "fits together. But everything on this website is a Jupyter Notebook that you can\n",
    "run yourself, once you follow the\n",
    "[installation](https://holoviz.org/installation) instructions, so the next step\n",
    "is then to try it all out and have fun exploring it!\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:root] *",
   "language": "python",
   "name": "conda-root-py"
  },
  "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.9.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}