{ "cells": [ { "cell_type": "markdown", "id": "4bc89ce5", "metadata": {}, "source": [ "# Khisto — optimal binning histograms\n", "\n", "A good histogram should reveal the structure of your data without asking you to\n", "guess the right number of bins first. Khisto chooses the bins for you: it uses\n", "the **Khiops optimal binning algorithm** (the MODL / Minimum Description Length\n", "principle) to pick both the number of bins *and* their — possibly unequal —\n", "widths, so dense regions get fine bins and sparse regions get wide ones.\n", "\n", "This notebook goes **from the simplest case to a richer one**:\n", "\n", "1. **Quick start** — two textbook distributions (a Gaussian and a heavy-tailed\n", " Pareto), each in a single call.\n", "2. **A three-component mixture** — a more realistic example used to tour the\n", " full API.\n", "\n", "Throughout, we plot the **density** rather than raw counts. With variable-width\n", "bins this is almost always the right choice: a tall-but-narrow bin and a\n", "short-but-wide bin can hold the *same* number of points, so only the density\n", "(count divided by bin width) shows the true shape of the distribution.\n", "\n", "> 📚 For a didactic walk-through of optimal histograms — from the simplest to the\n", "> most complex — see the histogram documentation in [Khiops fundations](https://khiops.org/learn/understand/)" ] }, { "cell_type": "markdown", "id": "5c8142b2", "metadata": {}, "source": [ "## 1. Quick start\n", "\n", "The simplest promise: one call, sensible bins, a readable density. We start with\n", "two distributions where the \"right\" binning is well understood, so you can see\n", "that Khisto does the natural thing." ] }, { "cell_type": "code", "execution_count": 13, "id": "d9b9b33b", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from khisto import histogram\n", "from khisto.matplotlib import hist\n", "\n", "SEED = 42" ] }, { "cell_type": "markdown", "id": "1433db45", "metadata": {}, "source": [ "### A standard Gaussian — linear scale\n", "\n", "For a bell curve, a linear axis is the natural view. `khisto.matplotlib.hist`\n", "works like `plt.hist`, but the bins adapt to the data." ] }, { "cell_type": "code", "execution_count": 14, "id": "9e8eff47", "metadata": {}, "outputs": [ { "data": { "image/png": "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dgrD27dvNyQZM2fOdLTVrVvXaNCggZGWlua0/6uvvprpdbjWlfpXrVrl1D506FDD19c3xxr//PNPQ5Lx+eefZzu+YWQ/74yMDKNy5cpGo0aNMm1r3ry5Ub58eSMtLc1IT083KlasaLRr186pT1pamlG9evUsg6wkY+nSpTnWdbXs3tfVq1c79bv99tsNb29v4+uvv3Zqr1+/vtGpU6ccj5Hb+V59/Ny8L3lx7TyvVdD3NC/Hzu0ci/pn99rPyZW/U958802n9h07dhiSrhtkJ0yYYEgy1q1bd92arufKz/uWLVsMw8hbkH3rrbcMScaFCxeyHT83fQzj+kE2u3oN43KQLV26tJGQkOBoS0tLM4KCgoyBAwded0zcGlhagFvWjBkzVKdOHbVv397R9tBDD8nNzc3pywn79+/XiRMn9MADDzjt7+7urvvuuy/TuHa7XS+++KJq164tT09Px6/QTp8+nelXjC4uLuratatTW/fu3WWz2XL1q9zsDB8+XMePH9fatWsdbZ988om8vb3Vv39/SdLhw4e1b98+9erVS66urk77d+zYUcnJyfr5559zPI6bm5vuuecep7Z69erJbrc7LQG4VnBwsMqWLavx48frs88+05kzZ/I0v/379+v48ePq1atXpm29e/dWXFyc9uzZo/379+vkyZPq1q2bUx9XV1fde++9WY5ts9kyvSdS3t5Xd3d3dezY0aktJCREycnJmV6vunXrZrkMJD/zvSK/70te53m1gr6neT12buZYlD+7WX1O1q9fL0mZjte4ceNcXarOMIws248fP+605MFmszn9Cn/v3r3q16+fgoKC5ObmJpvNpubNm0tSrpc1XO2OO+6QJA0aNEgbNmxQSkpKvvpkJy/1tm7dWr6+vo7nrq6uCgkJue7PDG4dBFnckpKSkvTZZ59p//79Tv84+Pr6KjExUTNmzHD0vfIPcvny5TONk1Vbr169NG/ePL3zzjv6559/lJGRIcMwVK1aNV26dMmpb9myZeXm5ubU5unpKV9f3+sGjpx0795dgYGBmjVrlmO+ixYtUv/+/eXj4yNJio2NlSS99tprcnNzk6urq1xdXeXi4uK43uX1wki5cuUyheAr/+jkdJUCLy8vrV27VtWqVdOQIUMUEBCgBg0aaMqUKbn6B/FKXRUqVMi07UpbfHy8o9+Vq1JcW3tWAgMDVaJEiUzteXlfAwMDM70upUqVkr+/v9zd3TO1X++KDrmd79Vzy8/7IuVtnlcr6Hua12PnZo5F+bOb1eckr8e7VtWqVSVJMTExTu2VK1eWcfk3qPr000+dtsXGxqply5aKj4/XqlWrZLfbZRiG4z82Ob1nV1wboDt27KjZs2fr77//Vvv27R1rhb/66qs89clKXusNCgrKNIavry9XQYEDQRa3pC+++EKpqam6ePGi4x+IK4+DBw/q999/108//SRJ8vf3l6QsrzF7bdvJkye1fv16Pf/887rvvvtUpkwZ2Ww2paWlZfoigySdPXtWaWlpTm0pKSmy2+2O4+aHu7u7HnzwQa1cuVLx8fFasmSJ7Ha7hg8f7uhz5VqeU6dOVVpamtLT05Wenu74x9swDA0aNCjH49hstnzX2LhxY61evVrnzp3Tpk2b1KZNG40ePVovvfTSdfctW7aspJzfk4CAAMdreOrUqUz9smqTlCloSnl/X7N7XfL7euV2vgU9Tl7nea2CvKeF9RpfrSh/drP6nOTleFnp0KGDXF1dtWbNmuv2vWLlypU6d+6cpk2bpoYNG8rLy0uS9Pfffzv18/Lykru7u86fP59pjBMnTmRqGzJkiHbv3q1Tp05p4cKFysjI0AMPPKDvvvsuT33yW+8VBfk7BrcGgixuSTNmzFCbNm3k6emZaVvNmjVVs2ZNx6W46tSpo4oVK2Y605CWlqZVq1ZlOb6Hh4fT84ULF2YKrJKUkZGR6VvnX375pQzDUIcOHRxt3t7eefrVnXT5wvOpqamaP3++Zs2apZCQELVo0cKxvU6dOqpdu7aWLFmijIyMPI1dmEqWLKm7775b77//vho3bqwffvjBsS27edepU0eVKlXK8tvny5YtU/ny5RUaGup47659jdPT07V69eo815rb97Ww5Xa+haWg88zPe1pYx75aUf7sZuXKMqVrj/frr7/m6j8CwcHBGjZsmJYsWaKtW7fm6phXXFv3vHnznJ67uLioWrVqmW6mEB0drZMnT2Y7bmBgoHr16qXPPvtMkrR58+Z89clrvUBuEWRxy9m3b5+2bt2qLl26ZNvn3nvv1aJFi5SYmCgXFxdNnjxZGzdu1JgxYxQXF6ejR49q2LBhjnViV1SsWFGNGzfWu+++q+joaNntdi1ZskSzZ89WjRo1Mh0nKChIc+fO1fr163X+/Hl99913evrpp9WiRQundXb16tVTYmKiNmzYoPT09FzNs27durrrrrv0n//8Rz/88IPT2dgrpk+frl27dmnAgAHavXu3kpKSdOzYMS1ZskStW7fO9bHyatOmTRo4cKA2bNig+Ph4JSUlaeXKldq3b5/atWvn6JfdvF1cXDR16lTt2LFDTz75pE6cOKGTJ0/qmWee0datWzV16lS5ubk53rv169dr3LhxOnXqlI4dO6YRI0bkKfjl9X0tbLmdb0EVZJ4FfU+L4jUuyp/drDRu3Fh9+vTRa6+9psWLF8tut+vnn3/Wyy+/rLCwsFyN8e6776pTp07q3LmzpkyZokOHDik1NVX//vuvtm3bpiVLlkj6/2cqO3XqpJIlS+r//u//FBsbq9jYWI0bNy7LsR955BGtWbNGCxYs0Pnz57V161a99tpratCggVO/iRMnauzYsdq1a5cuXLig06dPa9q0aZLkuExXbvpkJS/1Arlyo79dBpjt2WefNSQZf/75Z7Z9Vq1aZUgypk+f7mibN2+eERISYpQoUcIICQkxlixZYkRFRWX65vPRo0eNHj16GKVLlzZKly5t9OvXz4iLizPq1KljdO/e3dEvPDzcqFSpkhEbG2t0797d8PHxMcqWLWsMHz480zepU1JSjAcffNAoW7asYbPZDEnG6dOnDcPI+qoFV8yaNcuQZLi7uxtxcXFZ9tmzZ48xcOBAo0KFCkaJEiWMatWqGf3793f69nBWrtR/rRkzZhiSjIMHDzrasrr81ueff2506NDB8Pf3N3x8fIwGDRoYb731lnHp0qVczdswDOOrr74yWrRoYXh5eRklS5Y07rrrLuPLL7/MVNPcuXMd793tt99uLF++3Hj11VcNSUZSUtJ152QYeX9fr/Xwww8b5cuXz9Sel2/x52a+eXlfCjLPaxXGe1rQ1zi7ORbVz25WkpOTjeeee84oX768UbJkSaN9+/bG/v37jZYtW173qgVXZGRkGJ999plx7733GuXKlTPc3NyMgIAAo0GDBsaQIUOMtWvXOl1p5LvvvjOaNGlilCxZ0qhcubLx6quvGvv37zckGTNmzHD0S01NNZ599lkjICDA8PLyMu6//37j+PHjma5acObMGSMqKspo2LCh4eXlZQQEBBgdOnQwvvnmmzz1MYysr1qQ23r9/PyMRx99NNPr0717d6NOnTq5ei1x87MZRjZfkwRQpAYPHqyNGzfm6leOKHyPPPKIvvjiCyUkJJhdCgAgn1haAOCWk5KSom+++UZt2rQxuxQAQAEQZAHc1I4dO6ZHH33UsQZ4z5496tOnj+Lj4zV27FizywMAFABBFsBNLTg4WE2bNlVERITKly+vli1bKjk5WRs2bFCzZs3MLg8AUACskQUAAIAlcUYWAAAAlkSQBQAAgCUV/AraBfTvv/9qyZIliouLU/369fXAAw/k+pZ0u3fv1uLFi9WiRQvdd999hTaudPmOSydPnlSpUqW4RR4AAMANYhiGzp8/r4oVK8rFJedzrqaukT169Khatmyp6tWrq0mTJlq6dKnCwsK0YsWK6xZ+/vx5NWnSRLGxsRo6dKjeeeedQhn3iuPHjys4OLgg0wMAAEA+xcTEqHLlyjn2MTXI9u/fX8eOHdPmzZvl5uamw4cPKyQkRJ9++qkGDBiQ476DBg1S9erV9c0336ht27ZOQbYg416RkJCg0qVLKyYmRr6+vgWZJgAAAHLJbrcrODhY586dk5+fX459TVtakJaWpq+++kpvvfWW4x7hNWrU0N13361ly5blGDg/+eQTHTx4UHPnztU333xTaONe7cpyAl9fX4IsAADADZabpZ2mBdljx47p4sWLqlmzplN7rVq1tG3btmz3+/PPPzV69Ght2bJF7u7uhTZuSkqKUlJSHM/tdntupwIAAAATmHbVggsXLkhSprOdfn5+jm3XSk5OVv/+/TVp0iTVrl270MaVpKioKPn5+TkerI8FAAAo3kwLsj4+PpIur0W92rlz5xzbrjV//nwdPXpUx44d09ixYzV27FjFxsZq27ZtGjt2rDIyMvI1riRFRkYqISHB8YiJiSnI9AAAAFDETAuyVapUkZeXlw4cOODUfuDAAYWEhGS5T1hYmF544QV5eno6HjabTa6uro4/52dcSfLw8HCsh2VdLAAAQPFn6lULBg0apIMHD2rr1q1yd3fX/v37FRoaqkWLFqlPnz6SpBUrVigmJkajRo3KcoywsLBMVy3IzbjXY7fb5efnp4SEBEItAADADZKXDGbqnb2mTJmi06dPq2XLlnriiSfUrl079ejRQ71793b0+frrr/Xxxx8X+rgAAACwNlPv7BUcHKzff/9dy5cvV1xcnD755BN17tzZ6XILPXv2VLNmzbId48knn1TVqlXzPC4AAACszdSl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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "gaussian = np.random.default_rng(SEED).normal(0, 1, 10000)\n", "\n", "fig, ax = plt.subplots(figsize=(7, 4.5))\n", "hist(gaussian, ax=ax, color=\"steelblue\", edgecolor=\"white\")\n", "ax.set_title(\"Adaptive histogram on a standard Gaussian\")\n", "ax.set_xlabel(\"Value\")\n", "ax.set_ylabel(\"Density\")\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "8740f58a", "metadata": {}, "source": [ "### A heavy-tailed Pareto — log-log scale\n", "\n", "Heavy-tailed data spans several orders of magnitude, so a **log-log** view is\n", "the natural one. Fixed-width bins struggle here — they are either too coarse in\n", "the body or empty in the tail — while adaptive bins stay informative all the way\n", "out." ] }, { "cell_type": "code", "execution_count": 15, "id": "e8a48420", "metadata": {}, "outputs": [ { "data": { "image/png": "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/Oc/lZKSosOHDystLU01atRw6bNu3TolJCQoKChI/v7+cjgcWrRokf785z9Lko4fP67IyEhn/5o1a+r48eNq0KBBRZ4KAKAC5ebmaujQoVq+fLlCQkIUERGhu+++u0C/Z599Vm+99Za6du2q33//XaNGjdJ3332nevXqeaFqoOJwRbYCpKam6u2339YHH3xQ6PacnBz169dPnTt31q5du7Rjxw717NlT9913n7KzsyVJkZGROnr0qPNnjh496hJsAQBXHmOMOnTooN27d6tnz56F9vn55581adIkffHFF1q4cKE2bNigmjVrauTIkRVcLVDxCLIVYMSIEWrXrp3b7atXr9aePXs0duxYZ9vYsWN14MABfffdd5Kkrl276u2331ZaWprmzJmjwMBA/qcNAFe4gIAAPfzwwwoODnbbZ968eWrevLluu+02SVKlSpX06KOPasmSJTp9+rQkKT09Xbt27VJubq727t2rI0eOVEj9QHkjyPqATZs2KSgoSM2aNXO2NWrUSGFhYfr1118lSY8++qhiYmLUvHlzvfrqq5o9e7ZsNpu3SgYA+IitW7cqNjbWpS02NlY5OTn6/fffJUkzZ85U9+7dFRoaqvvvv18vvPCCN0oFyhxjZH1ARkaGqlWrVqC9evXqOnnypKSLa2hPmzZN06ZNq+jyAAA+zOFwqH79+i5tVatWdW6TpNGjR2v06NEVXhtQ3rgi6wMqV65c6B2mZ8+eVeXKlb1QEQDAKoKDg52LHeTLD7AhISHeKAmoMARZH9CgQQNlZGQ4xzJJ0rlz53TixAlmJQAAFKlJkybau3evS1v+40aNGnmjJKDCEGR9QKdOneTv76/PP//c2fbFF1/IGKMuXbp4sTIAgK/r1auX1q1b5xwPK0lz5sxR+/btVb16dS9WBpQ/xshWgB07dmjv3r1av369JGnVqlUKCwvT9ddfr1q1aqlWrVp66qmn9Nhjj+nkyZPy9/fX+PHjNXLkSEVHR3u5egCAN3366adKT0/X5s2blZaWpqlTp0qShg4dqoCAAPXs2VM9e/ZUt27dNGTIEG3evFkrVqxwznoDXMlshnVOy920adO0YMGCAu3jx4/XzTff7Hw8e/Zs55XYHj166KGHHmJmAgC4yr344os6dOhQgfY333xTgYGBki4unDB37lytW7dO1apV0wMPPKCGDRtWdKlAhSPIAgAAwJIYIwsAAABLIsgCAADAkgiyAAAAsCSCLAAAACyJIAsAAABLIsgCAADAkgiyAAAAsCSCLABcgXbu3KmvvvrK22UAQLkiyAKAj0hOTi50FcB8q1ev9njZ0eXLl2vMmDFlVRoA+CSCLAD4CIfDob59+2rt2rUFtmVnZyshIUFr1qzxQmUA4JsCvF0AAOCiG2+8US1atND06dN1ww03uGxbvHixMjIyNGjQIKWkpGj16tWSpNDQUDVr1kxNmjQpct+bNm3SqVOndOuttzrb9uzZo61bt+rOO+906btnzx5t3rxZkZGRat26tYKCgsroDAGgbHFFFgB8yJAhQzRv3jydO3fOpX369Onq3r276tatq0OHDmnx4sVavHix/vvf/6pt27YaNmxYkfudPXu2Jk+e7NK2atUqjRgxwvk4Ly9PjzzyiNq1a6f3339fI0aMUGxsrH777beyO0EAKEMEWQDwIQ8++KDOnz/vMlb2wIED+uabbzR06FBJUrt27TRv3jzNmzdPS5YsUXJysj777DMtX778so795ptvas2aNdq1a5eWLFmi9evXq1+/fho8ePBl7RcAygtDCwDAh1SvXl29e/fW9OnTNXDgQEnShx9+qMjISPXs2dPZLysrS+vXr9fhw4d14cIFRUdHa+3aterWrVupj/3hhx+qZcuWWrlypYwxMsYoIiJC69evl8PhUFhY2GWfHwCUJYIsAPiYoUOHqnv37tq9e7caNmyoGTNm6KGHHlJAwMWP7LVr16p3796KiIhQkyZNFBISouPHj+vYsWOXddx9+/YpJCSkwMwJ/fr107lz5wiyAHwOQRYAfEznzp1Vr149ffjhh+rYsaP27dvn8uf9sWPH6u6771ZiYqKz7eabb5Yxxu0+/fz8lJeX59J2/vx5l8dhYWG64447NGHChDI6EwAoX4yRBQAf4+fnp4cfflgzZszQe++9p1tuuUVNmzZ1bj9y5IjL43379mndunVF7rNu3bravXu3S9i9dE7a7t27a+bMmQVuNDt06NDlnA4AlBuuyAKADxo8eLAmTpyo+fPna+bMmS7bEhISNGnSJBljlJeXpzfffLPYKbL69OmjZ555Rg899JBuvfVW/e9//9OPP/6okJAQZ5+XX35Zt9xyi2644QYNHjxYlStX1k8//aTjx49r2bJl5XKeAHA5CLIA4INiYmL0zDPPaPfu3brnnntctr344otq2LCh1qxZo5CQEE2bNk2//vqrqlWr5uxz7bXXqkePHs7H0dHRSkpK0vTp07V+/Xp169ZNgwYN0uLFi519atWqpY0bN2rWrFlat26dQkND1bNnT917773lfr4AUBo2U9SgKgAAAMBHMUYWAAAAlkSQBQAAgCURZAEAAGBJBFkAAABYEkEWAAAAlkSQBQAAgCURZAEAAGBJBFkAAABYEkEWAAAAlkSQBQAAgCURZAEAAGBJBFkAAABY0v8HHMswNNr3/YEAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pareto = np.random.default_rng(SEED).pareto(3, 10000) + 1.0 # shift to start at 1 for log axes\n", "\n", "fig, ax = plt.subplots(figsize=(7, 4.5))\n", "hist(pareto, ax=ax, color=\"darkorange\", edgecolor=\"white\")\n", "ax.set_xscale(\"log\")\n", "ax.set_yscale(\"log\")\n", "ax.set_title(\"Adaptive histogram on a heavy-tailed Pareto law\")\n", "ax.set_xlabel(\"Value\")\n", "ax.set_ylabel(\"Density\")\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "b4736e89", "metadata": {}, "source": [ "## 2. A richer example — a three-component mixture\n", "\n", "To exercise the rest of the API we use a more realistic distribution that mixes\n", "three components:\n", "\n", "- a **standard Gaussian** (broad central mass),\n", "- a **narrow, peaked Gaussian** (a sharp mode), and\n", "- a **lognormal** (a stretched right tail).\n", "\n", "10,000 samples keep the adaptive refinement visible while staying fast to\n", "compute. This single `data` array is reused for every example below." ] }, { "cell_type": "code", "execution_count": 16, "id": "8b183e7b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Samples: 10000\n", "Range: [-3.65, 56.03]\n", "Shape: a broad bell, a sharp spike near 3, and a long lognormal tail.\n" ] } ], "source": [ "rng = np.random.default_rng(SEED)\n", "data = np.concatenate([\n", " rng.normal(0, 1, 5000), # standard Gaussian\n", " rng.normal(3, 0.25, 2000), # narrow, peaked Gaussian\n", " rng.lognormal(mean=0, sigma=1, size=3000), # lognormal right tail\n", "])\n", "\n", "print(f\"Samples: {data.shape[0]}\")\n", "print(f\"Range: [{data.min():.2f}, {data.max():.2f}]\")\n", "print(\"Shape: a broad bell, a sharp spike near 3, and a long lognormal tail.\")" ] }, { "cell_type": "markdown", "id": "3c14f255", "metadata": {}, "source": [ "### Adaptive vs fixed-width bins — linear scale\n", "\n", "The same data, the same density normalization, the same axes — only the binning\n", "differs. Fixed-width bins blur the sharp mode and waste resolution on the empty\n", "tail; Khisto's adaptive bins keep both readable." ] }, { "cell_type": "code", "execution_count": 17, "id": "c8ed6f75", "metadata": {}, "outputs": [ { "data": { "image/png": "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z58vHx8fde3aVbdu3dLff/+tsWPH6tVXX83QuAoUKKD169era9euKleunJo0aaIcOXLo3LlzOnr0qCZNmpTkmmFly5bVzJkz9frrr+vkyZPy9vbW/v371a9fP61YscKibmr61KVLF82bN0+xsbHKmTOnqlatqrZt26aqjRUrVmjx4sV65ZVXknzAwO7du9WzZ0/VrFlTnp6eunnzppYvX6727durRYsWqY47vTLrWqTnOElJyblMSlLXO94LL7ygqlWr6tixY6pataqee+65BG2k5HrH6969u0aOHKlZs2apWrVqqlatmsX2jDw/KYn9v1JzLTNCRvR34MCBCg4OVq9evTRnzhxVrVpVkZGR+vvvv3X37l2tXbs21XH5+voqb9686t+/v1q0aCEHBwf16tVLJUqUSHVby5cvV+fOnVWmTBm1adNGhQsXVmBgoPbv36/mzZvL19dXFStWVP/+/fXOO+/oyJEjcnNzk5+fnz799FNt2bLF3JaNjY2WLFmiZs2aqVq1anrxxRcVHBwse3t7NW/eXDt27DDXTWmb8apXr65z586pbdu2KlGihDZv3qygoCCtW7fO4uEv6dG1a1d16tRJ3bt3V6lSpZQjRw6NHDnSvN3R0VH9+vXTlClTZGtrq969e2fIcQEAyCwm47+LgQAA8AQ7fPiw/v77b125ckXZs2dXhQoV5OPjk+CPwOjoaK1atUoBAQEqWrSo2rRpo8uXL+unn34y3yIYERGhzz77TM2bN1etWrXM+0ZGRurTTz9V06ZNLdYGi4qK0uTJk9W4cWPVrVvX4nj379/X1q1bdfLkSdnY2Kh06dJq1KhRouvT/dfZs2e1YcMGxcbGqkmTJqpUqZI+/fRTlStXTi+99FKq+iQ9XKds/fr1OnnypKKjoy0SRyltw9vbW3Z2dok+VfTfQkJC5OfnpwsXLihnzpyqVauWKleu/NRfi5QcJ6k+SdLMmTOVO3dudenSJcXnMiYmRh999JF8fX1Vv359i/Kkrne8Tz75RO+9955mzJhh8VTYeCm93vF++OEHXbhwQfXr15evr2+iddJzflITe1JSci2TOqffffedHBwc1KdPH3NZcp+5jOpvcHCwObmVJ08eVa5c2eK2/T179mjz5s165513LD7PV65c0XfffadOnTpZPOjk6tWrWrt2ra5evarY2NhkE4VJtf1vBw8e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4/PPP7dGqFmWj4+P8d577yVbp23btkb16tXNf3hNmjTJyJ49e4I/eoGMMmjQIKN06dLmP3oWLFhg2NraGidPnrRyZFnbokWLjJ9//tkICgpKMlHIeCH9tm/fbixdutT8//6tW7cMb29vo3Xr1uY6jBcyxqpVq4z9+/eb3wcGBhp58uQxxo0bZy5jvJCx+vbta7z11luGra1tgkRhq1atjJo1axqRkZGGYRjGxIkTDRcXF+PatWvWCDVLik8UBgYGJlnnn3/+MRwdHY2vvvrKMAzDCA8PNypWrGh07do1s8J8ZpAofIYNHDjQqFq1qkXZ2LFjLf74R/oklSj88MMPjbx581oMiGbPnm04OjoaERERmRniU+X27duGJOPXX381lxUtWtR49913LepVr17dPEBF2vzwww+Gra2tOXm4efNmQ5Jx7tw5c51jx44Zkozff//dWmFmSbdu3TI8PT0NPz8/Y8iQIQkShe3btzcaN25sUTZo0CDDy8srM8PM8nx8fIyhQ4caBw4cSHRQeuPGDcPGxsZYsmSJuezevXtGjhw5jGnTpmVipHhW3L9/33BxcTGmT59uUV60aFFj1KhRVorq6XLjxo0kE4WMFx6Pzz77zMiZM6f5PeOFx+eFF14wBgwYYH7PeCHj/PTTT0aVKlWMqKioBInCq1evGiaTyVi+fLm5LDIy0nB2djZmzJhhjXCzpPhE4a5du4wjR44Y4eHhCep88sknhoeHh8Ws2Llz5xr29vZGWFhYZob71GMxiGfY0aNH5e3tbVFWo0YNXbt2TcHBwVaK6tlw9OhRVatWzWI9lho1aig6OlonT560YmRZ28GDByXJvFZFaGioLl26lOjn/OjRo5keX1Z35swZ/f777/rxxx81YcIEffDBB+b1V44ePSo3NzeLtTarVKkiBwcHznUqDRgwQB06dFDDhg0T3Z7U725/f39FR0dnRohPjTlz5uiVV15RxYoVVblyZR05csS87a+//lJcXJzFuc6WLZsqVarEZxqPxdmzZxUREZHg33f16tX5zD1mjBcen4MHD1qsIcZ4IePExcVp9+7d2rp1q8aMGaOLFy9q2LBh5u2MFzLG+fPnNXz4cC1evDjRdQf//PNPGYZhca6dnJzk5eXFZzoNunbtqh49esjDw0ODBg2y+KwePXpUVatWla2trbmsRo0aevDggU6cOGGN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9NNPMplM6tatmwzD0KpVq7Rq1Sr9/PPP6tKli7y9vRUcHJxku6dOnVLXrl0t7hQJDw9X165dFRAQYC77+eefVbx4cU2ZMkVffPGFypQpozlz5mR4PwEgNUgUAkAmGjBggNasWWMxS3Dx4sWytbVVly5dJElDhgwxf3O9a9cuzZ07V4MHD9a9e/fSdewePXqobt268vf315o1a3TmzBlduXJFU6dOTVe7AAAAWVGJEiXUsGHDBF/izps3Tx07dpSrq6tsbGzM47Jff/1VZ86cUdGiRfXhhx+m69inT5/WK6+8og0bNmj79u3auHGjNmzYoDfeeEMXLlxIV9sAkB4kCgEgE3Xo0EFOTk5atGiRuWzevHnq3LmzXFxczGXXr1/Xtm3btHTpUkVHRys0NFTnzp1L83EvXLigXbt2qWTJkvr111+1bNkyrV27ViVLltT27dvT1ScAAICsqn///lq7dq1u3LghSfrrr790+PBh9e/f36Le8ePHtXbtWi1btkz58uXTgQMH0nXcxYsXK3/+/AoKCtKyZcv0yy+/6PLly8qRI4f++OOPdLUNAOlhZ+0AAOBZ4uTkpG7dumn+/PkaPny4jh49qmPHjunrr7821/n88881btw4ValSRfnz5zcvop2edWvib3P5/fffLRbltrW11XPPPZfmdgEAALKy9u3b6/XXX9ePP/6oESNGaN68eSpTpozq1asnSbp7965efPFFnTx5UtWrV5erq6sCAgLSvZ5gQECAoqKitHz5cotyX19f5cyZM11tA0B6kCgEgEzWv39/ffPNNzp06JAWLlyoChUqqHbt2pKk27dv6+2339amTZvUpEkTSQ8XxF66dKkMw0iyTRsbmwRPU46KijL/7OrqKkkaN26cKleunNFdAgAAyJKyZcum7t27a/78+RoyZIgWLVqkUaNGmbfPmzdPQUFBunTpkpycnCRJn332maZPn55kmzY2D2/c+/fY7N/jMunh2Cxv3rxasmRJBvYGANKPW48BIJN5e3urWrVqmjVrln766SeLW1uuX78uwzBUtmxZc9l/v2lOTKFChSxuTQ4LC7N44nH87MTZs2cn2PfKlStp7QoAAECWN2DAAJ04cUKjR49WeHi4evfubd529epVFS1a1JwkNAxDK1asSLa9QoUKSZLF2Oy/S700b95cx44d0759+yzKw8LCdPfu3XT1BwDSgxmFAGAF/fv31+uvvy4HBwf16tXLXF6yZElVrFhR3bt3V9++fXXq1CmLJxcnpVevXnr99dfl4eGhXLlyacGCBRbb7e3tNW/ePL388su6ceOGmjZtqps3b2rt2rXq1q2bXn/99QzvIwAAQFZQpUoVVa9eXdOmTVO7du2UL18+87bWrVvr008/1ciRI1W2bFktX75c/v7+cnZ2TrK9YsWKqX79+urdu7dee+01BQYGavHixRZ1WrVqpV69eqlZs2YaOnSoPD095e/vr9WrV2vHjh3Jtg8AjxMzCgHACrp3764uXbrogw8+UO7cuc3ltra22r59uxo1aqSdO3fK3t5e+/btU+fOnZU/f35zvYYNG6pKlSrm93379tWiRYsUGBioixcvasaMGRo1apTF+oMvvviijh8/Li8vL+3evVsRERGaPn06SUIAAPDMGzt2rDp37qwRI0ZYlNeuXVs7duxQVFSU9u7dq/bt2+uXX35RmzZtzHWyZ8+uzp07m5d6kaR169apU6dO2rdvn5ydnbV9+3Z17tzZYv3BhQsX6qefflJYWJj27NmjQoUKaf/+/eYZiQBgDSYjuUWvAAAAAAAAADwTmFEIAAAAAAAAgEQhAAAAAAAAABKFAAAAAAAAAESiEAAAAAAAAIBIFAIAAAAAAAAQiUIAAAAAAAAAIlEIAAAAAAAAQCQKAQAAAAAAAIhEIQAAAAAAAACRKAQAAAAAAAAgEoUAAAAAAAAARKIQAAAAAAAAgKT/A8UJStoHDUj8AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, (matplotlib_ax, khisto_ax) = plt.subplots(1, 2, figsize=(13, 4.5), sharey=True)\n", "\n", "# Matplotlib / NumPy: fixed-width bins (density)\n", "matplotlib_ax.hist(data, bins=60, density=True, color=\"silver\", edgecolor=\"white\")\n", "matplotlib_ax.set_title(\"Fixed-width bins (60)\")\n", "matplotlib_ax.set_xlabel(\"Value\")\n", "matplotlib_ax.set_ylabel(\"Density\")\n", "\n", "# Khisto: adaptive bins (density by default)\n", "khisto_density, _, _ = hist(data, ax=khisto_ax, color=\"steelblue\")\n", "khisto_ax.set_title(f\"Khisto: {len(khisto_density)} adaptive bins\")\n", "khisto_ax.set_xlabel(\"Value\")\n", "\n", "fig.suptitle(\"Same data, same density, very different readability\", y=1.03)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "1f297ee8", "metadata": {}, "source": [ "### The same comparison — log-log scale\n", "\n", "On log-log axes the tail behaviour comes to the foreground. Empty fixed-width\n", "bins simply vanish (a zero has no place on a log axis), whereas adaptive bins\n", "widen to keep the tail populated and visible." ] }, { "cell_type": "code", "execution_count": 18, "id": "48c3b0aa", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABQoAAAHUCAYAAAByJhUUAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAAYqxJREFUeJzt3Xd4FFX//vF7UwgJgQQIICVAqCEQFGnSkRqkSBERhAekPrigWMEOgqCIj421AoKCgCJVBYwUAUWJdEiCBimhE1oIgdT5/eEv+3VN27TdhLxf15XrcmfOnPOZzSYe7sycMRmGYQgAAAAAAABAsebi7AIAAAAAAAAAOB9BIQAAAAAAAACCQgAAAAAAAAAEhQAAAAAAAABEUAgAAAAAAABABIUAAAAAAAAARFAIAAAAAAAAQASFAAAAAAAAAERQCAAAClBqaqqmTp2qrVu3ZrktI/Hx8Zo6dap++eWXfKunIPq0l73nfbty9vk7e3wAAICiwM3ZBQAAgMJnzpw5iouLy7ZdixYtdN9992W6PzU1VdOmTZMkdezYMdNtGYmPj9e0adPk7e2t1q1b2198FgqiT3vZe963K2efv7PHBwAAKAq4ohAAAGRr8+bNmjZtmi5cuJCj41xcXPTKK68QzIj3AgAAAIUfVxQCAIB0nn76aZvXycnJ2r59ux599FE1atTI7n5cXFw0derUfK6uaOK9AAAAQGFHUAgAAHJl9uzZio+PlyS5u7urSpUq6t69u6pUqWJtk5qaqldffVUdO3bM05V0iYmJWr16tf766y/VqVNH999/v9zd3dO1u3nzptavX68///xTHh4e6tixo+66664M+0xOTtbatWv1xx9/KCAgQP369VOJEiVydI5JSUmaNWuW7r77bvXq1SvdGPPmzVNSUpLGjx+f5Xtx8eJFff/99zp9+rT8/PzUvXt31ahRw7r/3Llz+uijj/TAAw+kC2pnz56twMBA9enTR9Lft1fPnj1b3bp1U4sWLbRu3TpFRESoV69eaty4cabvcXY1/Lvf7N67nMhu7DRRUVH6/vvvlZycrK5duyo4OFhz5sxRnTp11Ldv30I9vj0/L6tWrdKBAwdkNpvl5+dnM+7ixYvVoUMH3Xvvvdbthw4d0k8//aTY2FjVqlVLvXv3lpeXl824kZGR2r59u65cuaJatWqpa9eu8vHxyc3bBAAAigFuPQYAAHl29epVLViwQLVq1dLKlSut29PWhcvLAyRu3LihkJAQrV+/XsePH9f48ePVokULxcTE2LT7+eefVbt2bT3//PM6ffq09u3bp1atWmnChAnp+rx165buv/9+rVu3TidPntTYsWPVoUMHpaSk5Ogc3d3d9dNPP2nChAkyDMOm/fnz5zV+/HidOHEiy/fi66+/VkBAgCwWi2JiYvTVV1+pTp06+t///mdtc+7cOU2bNk2HDh1KV9fs2bO1du1a6+u0dRhDQ0MVEhKi1atX68CBAzp48GCm52ZPDWn9bt68OcfvXVbsGVuS5s+frwYNGuibb77R6dOnNWHCBM2bN09z5szR6tWrczW2s8bP7Oflrrvu0rvvvqshQ4YoNTVV0t/ve//+/fX555+rSZMmkv4OqIcPH667775b27ZtU0xMjF5//XXVr1/f5vs8bdo0NWnSRJs3b9bly5e1YsUKNWvWTDt27MjluwUAAG57BgAAQDZeeOEFQ5Jx8ODBLNtNmDDBKFu2rJGQkGAYhmEkJSUZkoxXXnnF2iajbRm5ePGiIcmoVKmSsXv3buv2o0ePGt7e3saQIUOs2y5cuGCULVvW6NGjh3VswzCM7du3GyaTyVi0aJFNn1WrVjX2799vbbdx40ZDkrFkyZJs34t/n+OXX35pSDJCQ0Nt2s2ePduQZBw5ciTT8z569Kjh4eFhDBw40EhJSbFunzx5siHJ2LJli2EYhrF3715DkrF06dJ09ZQvX94YNWpUtu9bTExMhudjbw15fe/ycv5//vmn4e7ubowZM8baJjU11TCbzYaXl5cxfPjwLMcuDONn5N+fJcMwjHXr1hkmk8l46aWXDMMwjGHDhhkeHh4238vJkycbrq6uxvbt223Or2vXrkZgYKCRkpJiXL9+3XBxcTFmz55tM+alS5eMyMjIXNULAABuf1xRCAAAcm3Xrl2yWCyaPn26pk6dqkuXLunKlSv6448/8m2M1q1b6+6777a+rlWrlkaMGKHly5fr+vXrkqSFCxfqypUrev31121ugW3btq3atm2rzz77zKbPtm3b2tyG261bN/n6+urnn3/O8Tn2799f5cqV0/z5822OW7Bggdq1a6d69eplem6LFy9WQkKCpk2bJheX/5uWvfjii/Ly8tKnn35qz1uUoXvuucfmfStfvny+1JCT9y479o69ZMkS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p59+qrVr1youLk5Dhw61/o++c+fO8vT01PLly7Psp3379nJ1dbUu8Jzm1KlT2rNnj931BAcH64477tCSJUu0f/9+ayDYtWtX3bhxQ9OmTZOLi4s6deqUr/WUKlVKCQkJdteZU+Hh4eluOVqzZo1MJlOGTxrOK19fX913331auXKlPDw8sn1YSNu2bXXs2LEM/1o9cOBA/fXXXzp9+rTN9m3btsnFxUUtWrSQJLm5ual3794KDQ21ebpxYmKivvvuO3Xv3j3drUh79+5VUlKS2rVrl9tTBQDAYdq2bavQ0FBdv35dHTp0UGRkZL6P4eLioqCgID3xxBOaNGmS/vrrL+tD1kqVKiVJGc5ZOnfurL179+rEiRM227/55hvr/tzYsWOH+vTpo/r16+vHH3/M8O4Ab2/vdMvfGIahN998U5K0c+dOux7G8e+nJJ8/f9669EyaTp06KSwsLF0otmbNmlz3mebf88bLly9rx44dNu9dVt+DzLRr107169fX/Pnz9cUXXygxMVEjR460adO7d2+FhYVlebVqduypP79k9TkFYB+CQgCFzvbt2/X8889rwoQJGjx4sGrVqqWFCxfqhx9+0IwZMyT9/dfNt99+W/Pnz9ezzz6ro0eP6ubNm/rzzz/16aefWte9qVq1qiZOnKgPP/xQn376qa5evarDhw9r7NixatWqVY7q6tKlizZu3ChPT0+1adNGklSlShU1bNhQGzduVNOmTTOcpP5TTutp1KiRDh06pKioKOuVcvmpRYsWmjhxovbv369r165p0aJFevvttzV27Ngs11rMiY8//liPP/64wsLCdP36dV29elUWi0UJCQnZhpFpt75ktF7iCy+8oIoVK2rIkCGKjIzUtWvX9OGHH2rx4sV6/PHHVb16dWvbV199VdLfV6meO3dOMTExGjdunK5evapZs2al63vz5s3y8PCwXjkKAEBh17JlS23atEm3bt1Shw4ddOjQoXzpt1OnTvryyy91/PhxJSQk6PDhw1q1apXq1q2rqlWrSpICAwPl5uamDRs26NatWzbHP/fcc/L19dWAAQO0b98+xcbG6ssvv9T06dPVv39/tW3b1tq2Zs2aqlmzZrY1/f777+rZs6fq1KmjTZs25fnKuqz06dNH27Zt0+LFi3Xjxg3t3btXDzzwgLp06WLTbvLkySpZsqQefPBBRURE6MqVK/rwww8zvL3W3j7TXL9+Xe+8844uX76sP/74Q4MGDZLJZNKLL75obZPV9yArI0eO1LZt2/S///1Pbdq0SbcW4fPPP6/atWurZ8+eWr9+va5cuaJLly5px44dGjlyZLoQMLf155U9n1MA9iEoBFConD9/XoMGDVLTpk311ltvWbfff//9evrppzVt2jT9+OOPkqRx48YpNDRUhw4dUosWLVSuXDn17t1be/fu1WuvvWY99q233tILL7yg6dOn64477tCoUaM0bdq0DNfLyUraVYQdOnSwWf8mbXtmk7t/y0k9L774olq2bKkmTZrIxcUl3Xp8eVWuXDnNnDlTZrNZd9xxh1544QU988wzslgs+TbG0KFDVbduXU2cOFFVq1ZVrVq1tGzZMi1ZskTDhg3L8thGjRqpbdu2+uKLL9Ltq1ixon7++WdVrVpVbdq0UYUKFTR37ly9/fbbNp8dSapXr562bdumGzduqG7duqpZs6aio6O1detWBQcHp+t7yZIlGjhwYIH+wwMAgPx29913a8uWLTIMQ/fee6/27duX5z7ffPNNbdy4Uffee698fX3Vs2dPtWjRQlu2bJGrq6ukv9eQe++99/TNN9/I29vb+mAO6e8Htv3666+qU6eOunTpIj8/P73yyit65plntGzZslzVNHfuXMXGxmr//v3y8/Ozua3YZDJpx44deT7vNJMnT9bkyZP13HPPqUKFCho/frxmzJiRbtmSmjVratu2bSpRooSaNm2q+vXr6/jx43rllVdy3WeaZ599VpcvX1ZQUJDuvPNOJScna+vWrapbt661TVbfg6wMHz5cbm5u6R5iksbX11c7d+5U37599cQTT+iOO+5QgwYN9OKLL6pDhw7q3r17tmPYU39e2fM5BWAfk1EQl6gAAJBPNmzYoN69eysyMjLfrnLMyk8//WS9TSqjEBEAAMARVqxYoYEDByosLEzNmjVzdjkAigmuKAQAFGohISHq3Lmzpk2b5pDxXnrpJY0ePZqQEAAAAECxk/UjngAAKAQ2bNjgsLGye8AKAAAAANyuuKIQAAAAAAAAAGsUAgAAAAAAAOCKQgAAAAAAAAAiKAQAAAAAAAAgHmaSrdTUVJ05c0alS5eWyWRydjkAAABFgmEYun79uqpUqSIXl7z/bZo5GQAAQO7kZF5GUJiNM2fOyN/f39llAAAAFEnR0dGq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jNtezZo1JSnDeVnaPqAoqlu3ri5evGizFvS5c+d08+ZNfo+jSCAohCSpT58++u2333T06FHrtiVLlqh9+/aZPmETKIpCQkL07bffKjk5WdLfD4FYtWoVDyxBkebu7q6QkBAtW7ZMhmFIks6cOaMtW7aoT58+Tq4OQE6ULFlS3bp109KlS63boqOjtW3bNn6ecVu5++67VaFCBa1evdq6bffu3Tpx4gTzMhRp3bt3l8lk0tdff23dtnjxYnl7e+vee+91YmWAfVijsJhYvny5rly5osOHD+vChQv66KOPJEljxoyRq6ur+vbtq+7du6tbt2565JFHtH//fm3ZskU//fSTkysH7JeamqoffvhB0t/r3kRHR2vDhg3y9vZW27ZtJUnPPPOMvvzySz3wwAMaNGiQ1qxZo+joaBZ5R6F28eJFffPNN5KkxMRE7dixQ25ubqpdu7a6du0qSXrjjTfUunVr3X///brnnnv0+eefq2XLlho6dKgzSwfwLxcuXNDKlSslScnJyda1Q+vUqaMuXbpIkmbPnq02bdqob9++at68uT7//HO1adNGgwcPdlrdQE5FR0fr8OHDOnv2rCTp119/1dWrV1W/fn0FBATIzc1Nb7zxhsaNGyd3d3dVrlxZr732mvr06aN27do5uXogczt27NChQ4esD92ZP3++PDw8dN9996l69eq644479Oqrr2rChAmKjIxUUlKS5s6dq3fffVelS5d2cvVA9kxG2qUHuK1NnTpV586dS7d97ty5cnP7Oy9OSUnRkiVLtHv3bpUvX17Dhg1TQECAo0sFci0pKUm9e/dOt93f31+ffvqp9XV0dLTefvttHT16VDVq1NDjjz+u2rVrO7JUIEdOnjypmTNnptt+9913a+zYsdbXp06d0ueff67z588rODhY//nPf1jnCShkjh07pjfeeCPd9ubNm2vUqFHW19HR0fr888914cIF3XnnnRo2bBhLZKBI+f777/Xee++l2z5y5Eg9+OCD1tfr16/XkiVLFB8fr/bt2+vRRx/l/10o1JYvX64tW7ak2242mxUcHGx9vXnzZq1fv14uLi66//771bp1a0eWCeQaQSEAAAAAAAAA1igEAAAAAAAAQFAIAAAAAAAAQASFAAAAAAAAAERQCAAAAAAAAEAEhQAAAAAAAABEUAgAAAAAAABABIUAAAAAAAAARFAIAEVWTEyMli1bptTUVGeXAgAAUKyFhYVp586dzi4DAPKMoBAAHOjs2bNatmyZ4uLiMtx/6NAhrVy50q6+IiMjNXjwYCUmJuZniQAAAMXCL7/8ok2bNmW6f926ddq3b59dfX388cd6991386kyAHAegkIAcCBPT0898sgj+vLLLzPcP378eC1dutTBVQEAABQ/Bw4cUO/evXXt2rV0+6KionT//ffr9OnTTqgMAJyHoBAAHMjX11f9+/fX/Pnz0+37448/tGPHDo0aNUpxcXFatmyZli1bppUrV2r//v0yDCPLvk+cOKE1a9bYbLty5YqWLVumpKQkm+0XLlzQt99+q82bN+vq1at5Pi8AAICiZvDgwTKZTBn+AXfBggWqUqWKQkJCdPDgQeu8bMOGDTpz5ky2fW/dulUHDhyw2bZnzx7t2LEjXdv9+/dr9erV2rNnD0vKAHA6gkIAcLDRo0dr165dOnz4sM32+fPnq3r16urWrZtu3Lih1atXa/Xq1friiy9033336d5771V8fHym/W7fvl3jxo2z2Xb06FENHjxYN27csG576623VK9ePb3//vuaPn26ateurXXr1uXvSQIAABRyPj4+euCBB7RgwQKb7SkpKVq0aJFGjBghV1dXRUREWOdlb731lurWrat33nkny75nzJiRLoBcsGCB5syZY3197do1denSRX369NGCBQs0aNAgtWnTRjExMfl2jgCQU27OLgAAipuOHTuqdu3aWrBggd566y1JUnJysj7//HONGzdOLi4uqlSpkpYtW2Y95tatW2rdurXef/99TZ48Oddjb968Wa+99prCwsJUt25dSdLy5cs1YsQIHTt2TGXKlMnbyQEAABQho0ePVvv27XXw4EEFBwdLktavX6+zZ89q5MiRkqQHH3xQDz74oPWY3377Te3bt9cDDzygatWq5Xrsxx57TKVLl1ZUVJTc3d2VkpKi+++/X1OmTNG8efPydmIAkEsEhQDgYCaTSSNHjtQ777yj119/Xe7u7vruu+904cIFPfLII9Z2hmFo7969OnnypG7duiV/f3/t2rUrT2MvXLhQgYGB2r9/v/bt2yfDMJSamqqrV69q//79ateuXV5PDwAAoMho166d6tWrp/nz51uvEpw/f77uvfde1apVy9ouba50/vx5paamytPTU3v37s11UHjr1i0tW7ZMTz31lNasWSPDMGQYhqpXr66NGzfmx6kBQK4QFAKAE4wYMUIvv/yy1q1bp/79+2vBggXq0qWLatSoIUk6d+6cunTpomvXrik4OFhlypTR0aNHVbZs2TyNe/z4cV26dEkrVqyw2T5w4ECVKFEiT30DAAAURaNGjdKbb76p2bNn6+rVq/ruu++0aNEi6/6lS5fqv//9r+rVq6dq1arJw8NDSUlJunDhQq7HPHPmjBITE7Vnzx799ddfNvv4wy0AZyIoBAAnqFKlinr06KEFCxaodevW+v7777VkyRLr/tmzZ6ts2bI6cOCAXFz+Xk52woQJ2rdvX6Z9uri4pFsA+9atWzavy5QpIz8/P5vbmgEAAIqz4cOH64UXXtDatWt1/PhxeXt7q1+/ftb9EyZM0Jw5czRmzBjrttKlS2f5oLns5mVpy708+uij6tOnT36dCgDkGQ8zAQAnGT16tDZs2KBZs2bJ19dXffv2te47d+6c6tataw0Jb926pe+++y7L/qpWrapLly7pypUr1m1btmyxaRMSEqINGzbo+PHjNtvPnTvHU/YAAECxVKlSJfXq1Uvz58/XggULNHToUJUsWVKSlJCQoCtXrqh+/frW9hs2bFBcXFyWfVatWlVRUVHW18nJyTZPPPbz81PTpk310UcfpTv29OnTeT0lAMg1rigEACfp2bOnKlSooPfee09PPPGEza2/ffv21X/+8x/VrFlTFStW1IIFC3T16lVVrVo10/5atWqlWrVq6YEHHtCQIUN0+PBhffXVVzZtxo4dqzVr1qhVq1aaOHGiKlSooH379ik0NFSHDx+2BpMAAADFyejRo9WrVy9JsrnzwsPDQyEhITKbzXrsscd09uxZzZ07V56enln2N2zYMHXv3l1TpkxR7dq1tWzZMl26dMmmzccff6yuXbuqa9eu6t+/v+Lj4xUaGqrg4GC9+eab+X+SAGAHgkIAcBI3NzdNnz5dP/74o8aNG2ez78EHH5Snp6e+/fZbRUdHa9KkSXJ3d9fhw4etbSpUqKBBgwbJ1dVVklSiRAnt2LFDc+fO1a+//qrg4GD98MMPevXVV60hZIkSJbRhwwZ9/fXX2rp1q06cOKEmTZrozTfflLu7u+NOHgAAoBAJCQnR8OHD5evrq8aNG9vs++qrr/TBBx9ox44dqlChgn788Ud9+umnql27trVNixYtbG4t7tSpk3744Qd98803Cg8P1+TJk3X69GldvnzZ2qZp06YKDw/XwoUL9dtvv6lixYp6+umn1aVLl4I/YQDIhMnIamEFAAAAAAAAAMUC95gBAAAAAAAAICgEAAAAAAAAQFAIAAAAAAAAQASFAAAAAAAAAERQCAAAAAAAAEAEhQAAAAAAAABEUAgAAAAAAABABIUAAAAAAAAARFAIAAAAAAAAQASFAAAAAAAAAERQCAAAAAAAAEAEhQAAAAAAAAAk/T9dz+FOOjUzuwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, (matplotlib_ax, khisto_ax) = plt.subplots(\n", " 1, 2, figsize=(13, 4.5), sharex=True, sharey=True\n", ")\n", "\n", "matplotlib_ax.hist(data, bins=60, density=True, color=\"silver\", edgecolor=\"white\")\n", "matplotlib_ax.set_title(\"Fixed-width bins (60)\")\n", "matplotlib_ax.set_xlabel(\"Value\")\n", "matplotlib_ax.set_ylabel(\"Density\")\n", "matplotlib_ax.set_xscale(\"log\")\n", "matplotlib_ax.set_yscale(\"log\")\n", "\n", "khisto_density, _, _ = hist(data, ax=khisto_ax, color=\"steelblue\", edgecolor=\"white\")\n", "khisto_ax.set_title(f\"Khisto: {len(khisto_density)} adaptive bins\")\n", "khisto_ax.set_xlabel(\"Value\")\n", "khisto_ax.set_xscale(\"log\")\n", "khisto_ax.set_yscale(\"log\")\n", "\n", "fig.suptitle(\"Tail behaviour on log-log axes\", y=1.03)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "2ff5576b", "metadata": {}, "source": [ "## 3. NumPy-like API: `khisto.histogram`\n", "\n", "`khisto.histogram` is a drop-in replacement for `numpy.histogram`: same return\n", "value `(hist, bin_edges)`, but the bins adapt to the data instead of being\n", "fixed-width." ] }, { "cell_type": "code", "execution_count": 19, "id": "d0e40b1c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of bins: 24\n", "Bin edges: [-3.6484375 -3.125 -2.4375 -1.9375 -1.625 -1.125\n", " -0.5 0.0625 0.1875 0.625 0.875 1.25\n", " 1.625 1.9375 2.5 2.6875 2.8125 3.125\n", " 3.3125 3.5 3.8125 5.1875 8.9375 16.875\n", " 56.03125 ]\n", "Frequencies: [ 2. 36. 99. 137. 386. 890. 1101. 386. 1668. 788. 818. 515.\n", " 316. 340. 228. 261. 1006. 435. 234. 94. 124. 100. 28. 8.]\n" ] } ], "source": [ "hist_counts, bin_edges = histogram(data)\n", "\n", "print(f\"Number of bins: {len(hist_counts)}\")\n", "print(f\"Bin edges: {bin_edges}\")\n", "print(f\"Frequencies: {hist_counts}\")" ] }, { "cell_type": "code", "execution_count": 20, "id": "55ee75b7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Integral of density: 1.000000\n" ] } ], "source": [ "# With density normalization the integral over the range is ~1\n", "density, bin_edges = histogram(data, density=True)\n", "\n", "widths = np.diff(bin_edges)\n", "integral = np.sum(density * widths)\n", "print(f\"Integral of density: {integral:.6f}\")" ] }, { "cell_type": "code", "execution_count": 21, "id": "33828aaa", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Limited to max 5 bins: got 5 bins\n", "Bin edges: [-3.6484375 0. 4. 8. 16. 56.03125 ]\n" ] } ], "source": [ "# Cap the number of bins\n", "hist_limited, edges_limited = histogram(data, max_bins=5)\n", "print(f\"Limited to max 5 bins: got {len(hist_limited)} bins\")\n", "print(f\"Bin edges: {edges_limited}\")" ] }, { "cell_type": "markdown", "id": "3cfba7b7", "metadata": {}, "source": [ "## 4. Matplotlib API: `khisto.matplotlib.hist`\n", "\n", "`khisto.matplotlib.hist` keeps the familiar matplotlib workflow. With\n", "variable-width bins, **density** is the view to reach for first." ] }, { "cell_type": "markdown", "id": "1720a012", "metadata": {}, "source": [ "### Cumulative plots\n", "\n", "`khisto.matplotlib.hist` follows matplotlib's `cumulative` semantics, including\n", "the cumulative density (CDF), raw cumulative counts, and reverse accumulation." ] }, { "cell_type": "code", "execution_count": 22, "id": "247c1571", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Cumulative probability')" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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M5U/f/5U15swYYLy5ctn+QkICLC7bgAAkLU5Ldx4e3tLkm7cuGHVfu3aNeXLl++x/detW6dXXnlFkyZN0uuvv57musHBwYqOjrb8REZG2l03AADI2pwWbgICApQvXz4dOnTIqv3gwYOqWrVqmn3Xr1+vjh076uOPP9Y//vGPx+7L3d1d3t7eVj8AAMCcnBZucuTIoe7du2vevHm6efOmJGnHjh3asWOHevbsaVlv/vz5Gjt2rOX3DRs26KWXXlJISIhGjhz5xOsGAABZm1PvczNhwgTlzp1b1apV00svvaQ2bdro3XffVdu2bS3r/P7771qxYoUkKTY2Vh06dFDevHl16NAh9e3b1/KzefNmJ70LAACQlTj1PjcFCxbUzp07tXnzZl28eFHjx49PdkrqzTfftNyBOFeuXJo5c2aK2/L398/0egEAQNbn9Mcv5MyZUy1btkx1eePGjS2v3d3d1bdv3ydQFQAAyK54cCYAADAVwg0AADAVwg0AADAVwg0AADAVwg0AADAVwg0AADAVwg0AADAVwg0AADAVwg0AADAVp9+hGKlruibI2SUAAJDtMHIDAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMJaezC8D/NF0T5OwSAADI9hi5AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApsJTwbMAngYOAIDjMHIDAABMhXADAABMhXADAABMJUuEm8jISIWHhysmJiZT+wAAAPNz6oTi+Ph49erVS7/88otKliyp06dPa9KkSXr33Xcd2ierYQIxAACZx6nhJiQkRDt37tTJkyfl7++vFStWqHPnzqpfv74aNGjgsD4AAODp4dTTUvPnz1f//v3l7+8vSerUqZOqVq2q+fPnO7QPAAB4ejht5ObcuXO6ePGi6tSpY9Vev3597d2712F9JCkhIUEJ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lJQkic/WAxs2bNDChQvVo0cPbd26VVu3blVMTIwuXryorVu3KjExkc/WI9566y3lyHH/67h48eL64IMP9PPPPysmJkZSyp8t6f7xexqPly24FDybKVmypKKioqzaoqKi5OLiooCAACdVlX2ULFky2em7B8fzabyk/sqVK2rZsqV8fX21atUq5c6d27LswemEqKgo1apVy9IeFRX1VB6rh3l4eOidd95R69atdebMGZUqVUolS5bUrl27rNZ7Gj9bCQkJqlmzpiZMmGBpO336tC5duqTRo0crLCxMfn5+cnd3T/HfsqfpWKXG19dXknTu3Dl5e3urZMmSunjxohITEy23a7h27Zri4uI4Xqlg5CabadOmjTZs2KBbt25Z2lauXKmGDRs+1fcfsVWbNm30xx9/6MqVK5a2lStXqnLlyipWrJgTK3vyHgSbwoULa82aNVZzRSTJz89PVatW1apVqyxtV69e1e+//642bdo86XKd6uG/bw+cOHHCcmpAuv/ZOnnypP766y/LOitXrlTBggWtHv5rdi+88IJlxObBT7Vq1dS+fXvLQ45dXV3VokULq89WQkKCwsLC+GxJWrt2rTw9PVWqVClJUuvWrXXr1i399ttvlnVWrlwpNzc3NWvW7EmVmq0wcpPN9O/fXzNnzlTHjh317rvvaseOHVq+fLnWrl3r7NKyhAc3w7px44YMw9DWrVvl7u6uevXqSZJ69OihqVOnqmPHjho5cqQOHDiguXPnatmyZU6u/Mm6ffu22rRpoxs3bmjy5Mnas2ePZVnlypUt5/cnTJigTp06qXjx4qpevbomT56sihUrqnfv3s4q3SmmTp2qkydPqm3btipYsKDCw8M1adIkDRs2zBJuWrVqpeeee07dunVTSEiIzp07p08//VRTp061nIbB/3z88cdq2rSphg8frpYtW2r27Nlyd3fXkCFDnF3aE7V06VL99NNP6tKliwoXLqz169frX//6lz7//HPLSGqlSpX0xhtvqF+/fpo4caLi4+M1YsQIjRw5UoUKFXLyO8iaeCp4NnTp0iVNnDhRf/75p4oUKaLBgweradOmzi4rS2jevLnu3btn1VakSBEtX77c8vv169c1adIkhYeHq2DBgnrrrbeeuv8tRkVFqXv37ikuGzdunJo3b275/bffftPs2bN19epV1alTR6NHj1bBggWfUKVZx7Jly/TTTz/p8uXLKlGihF555ZVkn5vbt29rypQp2rx5szw8PNSrVy9169bNSRVnHYMHD1bJkiU1atQoq/Zdu3bpX//6l86dO6fKlStr9OjRVlcEPS3Wr1+vhQsX6vz58ypdurT69u2rBg0aWK1z7949ffnllwoLC1POnDnVqVMn9evXj7sUp4JwAwAATIU5NwAAwFQINwAAwFQINwAAwFQINwAAwFQINwAAwFQINwAAwFQINwAAwFQINwBMIy4uTqGhoYqNjXV2KQCciHADwKliYmIUGhqqixcvprj877//1g8//KC7d+8+dltXr15Vjx49kj2QEcDThXADwKk8PT31j3/8Q9OnT09x+YcffqjJkyfzfCYANiPcAHAqV1dX9e3bV99++60SExOtlkVHR2vZsmXq16+fDMNQaGioQkNDtXTpUu3atSvZc8QedeXKFYWGhiopKcnSdufOHYWGhurGjRvJ9hUWFqa1a9fq0qVLDnt/AJ48wg0Ap+vXr5/Onz+vsLAwq/ZFixbJxcVFPXv2lGEYWrFihVasWKHFixfr1VdfVZ06dXT+/PlUt3vkyBH16NFDd+7csbTFxMSoR48eioiIsLQtXrxYpUqV0qRJkzRlyhRVqFBBc+bMcfj7BPBk5HR2AQBQpkwZtWjRQvPmzdOLL75oaZ87d666desmb29vSVJoaKhlWWJiojp16qSPP/5YX3/9td37Pnr0qN566y2tW7dOjRo1kiT98ccfatWqlVq1aqUyZcrYvW0AzkG4AZAl9OvXT3379tXly5dVuHBh7d+/X7t379bUqVOt1jt48KD+/vtv3bp1S76+vtq5c2eG9rtw4UL5+fkpKipKP/74owzDkCTlzZtXv//+O+EGyIYINwCyhJdffllDhgzRd999p6CgIM2dO1cVKlRQ06ZNJUm3bt1Su3bt9Ndff6lu3bry9vZWREREhufHREREKD4+XkuXLrVqb9mypQoUKJChbQNwDsINgCwhd+7c6tWrl+bNm6d33nlH33//vUaNGmVZPnfuXEVFRenMmTPKkyePJGny5MmaNm1aqtvMkeP+tMKHJxTHx8dbrePt7a0iRYpYnfICkL0xoRhAltG/f38dOnRIwcHBiomJUZ8+fSzLLly4oBIlSliCjWEYWr58eZrbK1asmCTpxIkTlraNGzdarfP8889r37592r59u1V7dHS0bt26laH3A8A5GLkBkGXUqFFDdevW1dSpU9W5c2f5+vpalnXo0EGfffaZRowYoYoVK2rp0qU6fPiwPD09U91eyZIl9eyzz6pPnz4aPHiwIiMjtXDhQqt12rdvr9dff11t27bVu+++q9KlS+vw4cNauXKlNm3alOb2AWRNjNwAyFLGjh2r7t27KygoyKq9UaNG2rRpk+Lj47Vt2za9/PLLWrJkiTp27GhZx8PDQ927d7dcXSVJa9as0SuvvKLt27fL09NTGzduVPfu3a3m0/znP//RokWLFB0drT/++EPFihXTjh07LCM/ALIXF+PBpQEAAAAmwMgNAAAwFcINAAAwFcINAAAwFcINAAAwFcINAAAwFcINAAAwFcINAAAwFcINAAAwFcINAAAwFcINAAAwFcINAAAwFcINAAAwlf8P1/CFSE8bzW8AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Cumulative density (CDF) first — the most interpretable cumulative view\n", "cdf_n, cdf_bins, _ = hist(\n", " data, cumulative=True, color=\"mediumseagreen\"\n", ")\n", "plt.title(\"Cumulative density (CDF)\")\n", "plt.xlabel(\"Value\")\n", "plt.ylabel(\"Cumulative probability\")" ] }, { "cell_type": "markdown", "id": "52023e06", "metadata": {}, "source": [ "## 5. Core API: `compute_histograms` and `HistogramResult`\n", "\n", "When a single histogram is not enough, the core API exposes the full sequence of\n", "granularities and tells you exactly where Khiops chooses to stop." ] }, { "cell_type": "code", "execution_count": 23, "id": "03285190", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of granularity levels: 12\n", "\n", "Granularity levels:\n", " Granularity 0: 1 bins\n", " Granularity 1: 2 bins\n", " Granularity 2: 3 bins\n", " Granularity 3: 3 bins\n", " Granularity 4: 4 bins\n", " Granularity 5: 5 bins\n", " Granularity 6: 8 bins\n", " Granularity 7: 11 bins\n", " Granularity 8: 18 bins\n", " Granularity 9: 25 bins\n", " Granularity 10: 26 bins\n", " Granularity 11: 24 bins <- BEST\n" ] } ], "source": [ "from khisto.core import compute_histograms\n", "\n", "results = compute_histograms(data)\n", "\n", "print(f\"Number of granularity levels: {len(results)}\\n\")\n", "print(\"Granularity levels:\")\n", "for result in results:\n", " marker = \" <- BEST\" if result.is_best else \"\"\n", " print(f\" Granularity {result.granularity}: {len(result.frequencies)} bins{marker}\")" ] }, { "cell_type": "code", "execution_count": 24, "id": "b93b2015", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABdIAAAMWCAYAAAD1X3Q/AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAA8rpJREFUeJzs3Xd0VNX39/HPpFJTCJ2EIlUgSO8dRaQXBRQUlKqg8kURUKQpgqIIokgVpSNVpKN0kF4EKYKUFCBAgIQQCCS5zx88mR9DkmGSTDJJeL/WmrWcc885s88ksnP33DnXZBiGIQAAAAAAAAAAkCAnRwcAAAAAAAAAAEB6RiEdAAAAAAAAAAArKKQDAAAAAAAAAGAFhXQAAAAAAAAAAKygkA4AAAAAAAAAgBUU0gEAAAAAAAAAsIJCOgAAAAAAAAAAVlBIBwAAAAAAAADACgrpAAAAAAAAAABYQSEdyAT69+8vLy+vDDNvaho8eLAqVqwowzDsNmfXrl3l6+trU9+0eM/effdd1apVK1VfAwBgH9evX5fJZNLEiRMzxLyp6erVq/Lw8NCKFSsc8vpnz56VyWTSzJkzn9g3Ld7f4OBgZc2aVevXr0+11wAAJB25+/+Quy2Ru0EhHU+1w4cP66233lKJEiWULVs2eXl5qXz58urSpYvWr1+vmJgYR4eY7vTs2VO5c+dOtfk3bNig559/Xl5eXsqdO7c6duyoU6dO2TT2/PnzmjRpkkaPHi2TyWRxbN26dWrSpIny5s2r7Nmzq0yZMhoxYoRu376dGstIVZ988omOHj2qhQsXOjoUAEg1d+/e1eTJk9WgQQP5+PjI3d1dhQsXVt26dTVu3DgFBwc7OsR0JygoSCaTSd9//71d5129erVMJlOij1dffdWmeYYNG6aSJUuqbdu28eL+9ttvVatWLTk5Oal8+fKJzpGUvuldoUKF1LdvX33wwQeKjo52dDgAkGLk7qRLrdwtSaGhoRo8eLBKlSqlbNmyKX/+/HrppZe0bds2m+ewR+62RxzpBbkbFNLx1JowYYKqVaumBw8eaP78+bp27ZqCg4M1bdo0SdJLL72kLVu2ODhKx/r+++9169atNHu9iRMnql27durQoYPOnj2rwMBAvfbaa/ruu+9sGv/NN98of/78atWqlUX7smXL1Lx5c/n6+urQoUO6evWqxo4dq6+//lqtW7e26xrS4j3Lnz+/2rdvry+++CJVXwcAHCUoKEg1atTQV199pTfeeEN///23bt++rd27d6tr1676/vvv1alTJ0eH6VC5c+eWYRgaMGBAqr9Wy5YtZRhGvMegQYMkyaZcevnyZc2ePVv9+/eP92H322+/rYCAAE2YMEElS5a0Ok9S+qZEWr2//fr104kTJ/Tbb7+l6usAQGojdz9ZWubu2NhYNWnSRDNnztTkyZN1/fp1/fXXX8qSJYsaN25sU63DHrnbHnHYityNtODi6AAAR1i9erU++OADffzxxxozZozFsTp16qhOnTrq0KGDsmbN6qAInz5Hjx7Vhx9+qOnTp+utt94yt7dt2zbep98JiYyM1Ny5c/Xuu+/GS/K//PKLXFxcNG3aNGXJkkWS1K5dO3Xv3l1TpkxRQECAChcubNf1pLauXbtq/vz52rVrl+rUqePocADAbgzDUPv27RUSEqJDhw6pUKFC5mO+vr7q27evXnvtNU2YMMGBUSI6Olpz586Vj4+P2rdv/8T+s2bNkouLi15++eV4x37//Xfzfz+ew1PSNyMoUaKEatSooalTp6pDhw6ODgcAkoXcnf4cOXJER48e1SeffKIXX3xRklSsWDFNnz5dK1eu1Ny5c9WoUSOrc9gjd9sjjvSG3P1044p0PJVGjBghHx8fDR8+PNE+7du3tyhQxu2Tff36db322mvy9vZWtWrVJEmff/65xVecPT091aRJE23evNlizrg5bt26pS5dusjT01O5cuVSz549FRkZadG3YcOGqlmzZry44l4rIiLC6hqTGlNC63p8v+/nn39es2bNUmhoqMXc169f15gxY+Tk5KQzZ87Ei2X8+PEymUw6ceJEovF+9913ypkzp9544w2r60rMtm3bFB4ersaNG8c75unpmeg4Jycn5cyZ06bXuHr1qjp06CAPDw/lzp1bvXv3Vnh4uEWfhPZIT8rP/fTp03rllVdUoEABZc+eXRUqVND48eN17949i37169eXi4uLVq1aZVPsAJBRrF69Wvv379dHH31kcSL+KA8PD40cOdL8/NH9MxcuXKhy5crJ1dVVq1evliS5uLiYc5abm5ueeeYZDRo0SHfu3ElwjmXLlunZZ5+Vu7u7KlSooA0bNli8/tatW2UymRLcH9PFxUUffvjhE9eZ1JgeX9fj+4Du3LlTfn5+kmT+UNlk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yEj9888/qlevnt1fGwAcqWXLlqpSpYrGjx9vPklJKTc3N4sTqJiYGC1YsCDZ8xUrVkxOTk46fvy4Rfvq1asdFpP0MEdLSjRPOzs7q3fv3lq3bp1GjhypyMjIJN9kdNasWZKk3r172zwma9asqlKlSrwc7SiP/5wMw9Dvv/+uChUqKHfu3HZ/vaJFi+rNN9/U119/rTt37sS7sm3fvn1ycXF54t86AJBekbuTL7Vyd9w57uPrvX//vv79998nngPbK3enNI445G6kFxTS8VRq3bq1vvrqK40ZM0bdu3fX/v37FRkZqcjISJ0+fVrfffedJNs+tSxYsKCqVKmiSZMm6fDhwwoPD9fSpUs1e/ZsFS9ePNkx9ujRQ3fv3tWHH36o0NBQnT9/Xj169FClSpUcFpP08CruiIgIbdmyJcE9w7Jnz65u3bpp3rx5CgkJsfkE/Y033lCtWrXUr18/7d69WxEREVq1apVGjx6txo0bq3nz5lbH169fXx4eHgnuVz548GCdPXtWffv2VWBgoCIiIrRy5UqNHDlS/v7+8fZLS0iBAgX0yy+/6M8//9Tt27e1adMmvf/++6pdu7Zd9r+TpG3btunVV1/Vli1bdP36dUVGRmrVqlU6efKkGjVqZNF3+/btio6OtttrA0B6YTKZtHz5cvn4+KhGjRqaPXu2Ll26pAcPHujq1atat26d+cNFW/J069atdfPmTX366acKCwvT2bNn9eqrr+q5555LdoxeXl56+eWXNWXKFO3YsUO3b9/W8uXLtX///njffkqrmKSHXy8uWLCgNm/erLCwsAT79OrVSy4uLpo4caJy5cqldu3a2Tx/RESElixZojp16qhs2bJJiq1Vq1bav39/gt+2S2t+fn569913FRwcrODgYL399ts6efKkxo4da7fX6NatmyZPnqzTp08rKipKFy9e1M8//6wcOXKoatWqFn03b96shg0bpps95AEgqcjdyZdaubtjx44qWrSohgwZovXr1+vOnTs6f/68unfvrkuXLmnIkCFPnMMeudsecUjkbqQfFNLx1Bo0aJD27dsnk8mkTp06ycfHR/nz51fr1q21d+9ezZ49W1999ZVNcy1fvlzPPfecGjdurCJFimjJkiVavHhxvD21k6JcuXKaN2+eNm/erIIFC6pdu3Z6/fXXbSqkp1ZM0sPk8vrrr+vll1+Wq6ur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QjoAAAAAAAAAAFZQSAcAAAAAAAAAwAoK6QAAAAAAAAAAWEEhHQAAAAAAAAAAKyikAwAAAAAAAABgBYV0AAAAAAAAAACsoJAOAAAAAAAAAIAVFNIBAAAAAAAAALCCQjoAAAAAAAAAAFZQSAcAAAAAAAAAwAoK6QAAAAAAAAAAWEEhHQAAAAAAAAAAKyikAwAAAAAAAABgBYV0AAAAAAAAAACsoJAOAAAAAAAAAIAVLo4OAAAAZCxnzpzRzJkzFRISIn9/f/Xt21fZs2dPtP+DBw/066+/avfu3XJxcVHdunX18ssvy2QymfvMmjVLmzZtshjn5+en8ePHp9o6AAAAAACwFVekAwAAmx05ckSVKlXSpUuXVK1aNc2fP1/169fX/fv3E+wfGxursmXLav369SpXrpz8/Pz0/vvv65VXXpFhGOZ++/fv14ULF9S2bVvzo0mTJmm1LAAAAAAArOKKdAAAYLMhQ4aoXr16mjt3riSpU6dOKly4sGbPnq0+ffrE628ymbR582b5+fmZ22rVqqW6devq0KFDqlKlirnd19dXnTt3Tv1FAAAAAACQRFyRDgAAbBIVFaU///xTr7zyirktd+7caty4sdasWZPgGJPJZFFEl6QiRYpIkm7cuGHR/s8//+itt97S//73Py1fvtzO0QMAAAAAkHwU0gEAgE0CAgIUHR2twoULW7QXKVJE586ds3me77//Xp6enqpevbq5zdnZWZUrV1bNmjXl4eGhnj17WhTsExIVFaXw8HCLBwAAAAAAqYGtXQAAgE3u3bsnScqRI4dFe44cOczHnmTZsmUaP3685s2bJ09PT3P76NGj5ePjY37eunVrVatWTb///rtatWqV4Fxjx47VqFGjkroMAAAAAACSjCvSAQCATeIK349vyRIaGiovL68njl+zZo26dOmiSZMm6dVXX7U49mgRXZKqVKmiIkWKaN++fYnON3ToUIWFhZkfgYGBNq4EAAAAAICkoZAOAABs4ufnJy8vLx0/ftyi/dixY/L397c6du3aterQoYPGjx+v/v372/R6t2/flslkSvS4u7u7PDw8LB4AAAAAAKQGCukAAMAmJpNJr732mmbNmmXej3znzp3at2+funbtau43ffp0DRo0yPx8/fr15iL6u+++G2/eBw8eaPHixRZtEydOVGhoaKLbugAAAAAAkJbYIx0AANhs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UqUsypPPX7n70w1psRazMxLPJcvfp3nz5mnr1q3q3r27wsPD9dxzz6lChQr6888/U7S/dOkS8RwAz7Q2zis9MvJM+7Bk1vPv4sWLValSJf3000/m7838+fMlSb/88osmTJhgrn63hudf2z377LOS7nwSPjO4u7urRYsWWrJkierWratZs2bpxo0bmdI3bMeKdORoPXr00FtvvaWvvvoqxQEW6XHgwAGVKFEixTuhYWFh6e4z+aHvvw95th6W8SDGJOme71L7+PioXbt2+uqrr/T4449rz549evPNN+/5Ua5kZcuW1ZAhQ8zXu3fvVlRUlKZNm2a1XYkSJVSyZEkdPHgwzTr/+9//9OGHH2r48OH68MMPbRpPsuSDPEqXLm1T/f3796da5u7ubj7AZ4ZChQqpT58+6tOnjyRp3LhxevvttzVo0CA1b97crJe8as7awX0AkBU4OzurZ8+emjVrlvbs2aMaNWpkqL9Tp04pNjZWrVq1sig/evSorly5ku5+S5UqpUOHDqUot2WV8oMak3TvOP3SSy/p66+/1rfffqslS5bIzc1NPXv2zND3/K/HHntMy5cv182bNy0OHN2yZYscHR3VpEkTq+1r1KihpKQkHTlyJNXt1I4fP64WLVrIMAytX7/e4mP8d3v88ce1b98+nT592mLFYmRkpCTbYnpcXJwiIyMtYvexY8d048aNNL9vejVs2NBMep0+fVq1a9fWuHHjUhy4/s8//1jEeAC5E8+06fegn2kfhsx6/h0+fHi6V2TfLbs+/2ZkO5v0Sn5j4e6DWO/H0aNHU11A4ODgoEqVKunvv//W+fPnU3yiDg8WK9KRo5UpU0bTpk3TkiVL9M4776T6bvitW7ds7s/X11fnz5/Xv//+a5Zt27ZN69atS/cYy5YtK29vby1atMgsS0xM1KeffmrTO7oPYkzSnf24nJycrL4r/dJLLykqKkovvPCCJKW6fUpq/vsH0bVr1zRs2DDVr1/ffNfWmubNm6d5GvvkyZM1ZcoUvfzyy/roo4/S7OPQoUM6ffq0Rdn169cVFBRkJnds8fvvv+vIkSPm6wMHDuinn37SCy+8IBcXF5v6uJeNGzem+D1Na//2rVu3ysvLS4888kimfG8AeJDefvttVahQQd27d7f4tzTZ/cRob29vubq6WsSYhIQEjR071vxYfHo0bdpUp06dsog727Zts+nh/kGNSbqzbUhMTEyqW6tIUs2aNdWoUSNNnTpVa9euVefOnTNtBV+yl156SdeuXdOnn35qlkVHR2vevHnq3r27SpQoYbX9448/LkmpxvRTp06pZcuWun37ttatW2c1rr344otycXGxSB4kJiZqxowZyps3r7p06XLPueTLl0/Tp083XxuGoUmTJmXqGxCRkZEpEiElSpRI9b/LsWPHdO7cOXPfXgC5F8+06fcgn2kfpsx4/h0+fLi5Ej35Sp5z+/btNWHCBJtWdfP8a7sffvhB0p09/dNj3rx56tmzZ4o3QE6dOqW1a9eqfPnymfrmBWyTdd5mAx6QV199VYUKFdKoUaM0e/ZstWrVSsWKFdPly5e1Y8cO7dq1S+3bt091b8r/evnll/Xtt9+qcePG6t69u86fP69Dhw5pzJgxevnll9M1PicnJ02bNk09e/ZUq1atVKNGDW3dulVvvfWW5s2bZ5cxSZKLi4u6dOmiTz/9VHFxcfL09FT9+vUtDpQJDAxUpUqVdOTIETVt2tSmwzklac6cORo+fLgaN26smzdvatmyZapcubKWLl1qfgzamt69eyskJEQ7d+602Ot1yZIleuutt1S8eHEVLlw4xZ5jbdu2Vf369SVJly9f1lNPPaVKlSqpcuXKunbtmlavXq3Y2FiFhITYvPps2LBh6tu3r6pVqybDMLRo0SLVrFnTPAgkM6xdu1Z9+vRRw4YNVa5cOZ09e1aLFi1Sr169FBAQYNa7deuWVq5cqUGDBmXa9waAB6lIkSLavHmzhgwZourVq6tVq1bm3puRkZH69ddfVa5cOYt/69Li5uamqVOnauTIkTp//rwqVqyoDRs2qH///qluH2OrPn366LPPPlP79u313HPPmQdbDhw48J5naTyoMUlS165dFRwcrA4dOqhBgwZycnLSm2++afGR6RdffFHPP/+8JNm8rcv169fNj4SHh4dLuvOR5OSvR48eba4+b9KkiaZPn66goCDt2LFDpUuX1o8//qjy5ctbJNfTUqVKFTVo0ECLFy9W7969Le61a9dOJ0+eVPfu3VN8JNrd3d3iYM8qVapo3rx5GjBggPbt26dHH31UGzdu1MGDB/XDDz9YrFJPS8GCBfXII48oICBAdevW1bZt27R9+3bNnj1bZcuWvWd7W9y8eVPdunVT4cKF5e/vL3d3d61fv14XL17UnDlzLOouXrxYefPmTbGnKoDciWfa9HmQz7SrVq3S9u3bJd3Zw93R0dF8/mzYsKHatGmTrrqpyYzn38zC82/qwsPDzZ//rVu3FB4erlWrVqlHjx565ZVXrNa/m7Ozs8aOHStJql+/vr7//nuVK1dOHTp0kI+Pj6KiorR06VIVLlxYP/74I2ep2AGJdOQKvXv31rPPPqtNmzZp//79unr1qsqWLat27dqpYcOG5knP0p3TsMePH5/qYVxFihRReHi4li5dqoiICDVq1EhPPfWUjh49qvHjx5uHTFnrY8SIESn2DH3uuefk7++vNWvWyNnZWcOGDVP58uU1btw4i/3u3N3dNX78eIuyzBhTav1K0rfffqsVK1bo0KFDqa5ycHBwMB/k72ff1VmzZmnnzp3666+/JEmLFi1Kc1+/1LRu3VpVqlTR3LlzLebj5eWl8ePH29RHw4YNdeDAAa1bt0779+9XfHy8PvzwwzQP/Pqv5J9nq1atNGzYMC1evFinTp3S3Llz1aFDB4s3BFL7+d7P78jbb7+tl19+WevXr9fJkydVoUIFvfHGGykOalm2bJni4uIstswBgKyuZMmSWrp0qU6cOKG//vpLZ86ckYuLi2rVqqURI0aobt26Fg8JnTt3TvPAzNdee02PP/64Nm7cKOlOHPPz85NhGCpatOg9+6hdu7bGjx+vwoULm2Wurq4KDQ3Vzz//rH///VctW7ZUhw4dtHnzZjk4OMjV1dWs27Zt2xRJ24yOKa1+H330UYWHh+u3337T5cuXU91nvHPnzurTp4+8vb3TtbK5evXqqR7sdbeRI0eqY8eOWrNmja5evapPP/1Ubdq0sflj8cOHD1fv3r119uxZi8M6n3vuOXXq1Mnmsfbo0UPNmzfXypUrdf78eb300ktq3769xc84Lck/+6FDh6phw4Zat26dnnnmGX377bcqX768Rd3U/lvY+vtUqVIl7du3T5s2bdLu3bsVHx+vMWPG6Mknn7TYGkeS5s+frx49emT6pwgAZF8802atZ9q7DRs27IHUTZYZz7+pqVChgsaPH6+6devesy7Pv6lzdHRM8d8gX7586tKli959990UC/RSq5+Wp556Sh06dFBYWJjCw8N15swZ1alTR71799Zjjz2W5icAqlevrvHjx9/zbzikj4Nhy9G/AJCGpk2bau/evTpz5kyap8g/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5bJjxw5t2bLF4hNlCxYs0Ntvvy3pztklf/zxh0U/hw8f1o4dO1SvXj1JUkJCgtasWWNRZ+7cuTp37pxFwh4AgJyERDoAAAAAADlUcHCwDMNQrVq11L17d7Vq1UoDBw5Uu3btzDobNmzQwoULJd3Zcm3GjBmqW7euXnjhBT311FOqVauWOnfurCFDhph1Pv30U9WuXVvPP/+8AgICNGzYME2fPl1Nmza1yzwBAHjQ7L61S/K73dHR0fL391edOnXu2ebSpUvavHmzrl69Kj8/Pz366KMW9//66y/t37/foqxw4cLq3r17po4dAAAAAICsrFixYtq5c6fWrl2r6OhojRo1KsVz9/PPP68nnnhC0p1DwFesWKEDBw5o165dypcvnz766COVL1/erO/k5KTly5ebdQoVKqQ6deqwRRsAIEezayL9/PnzatGihW7duqVHH31Ur732mp555hl9/vnnabb56KOPNHPmTNWsWVPOzs4aOnSoWrRooYULF8rFxUWS9N133+n3339XYGCg2e6/B6EAAAAAAJAbuLq6qm3btmneDwgISFFWrVo1VatWzWq/ttQBACCnsGsiPSgoSJK0a9cuubu7m3uudejQweJjZnd75JFH9M8//8jV1VWSdOTIEVWuXFkrVqxQ586dzXq1atWympAHAAAAAAAAAMAWdtsjPSkpST/++KP69u0rd3d3SVKdOnXUuHFjhYSEpNnuiSeeMJPoklS8eHE5OTmlOBn83Llzmj9/vpYtW6bTp08/mEkAAAAAAAAAAHI8u61Ij4yMVFxcXIqPgVWrVk1///33PduuXLlSsbGx+umnn9SzZ0916tTJos6///6r1atXKyoqStu3b9e0adM0fPjwNPuMj49XfHy8+To2NjYdswIAAAAAAAAA5DR2W5GenKguWLCgRXmhQoXumcSOi4vT7t27tX37dkVFRalYsWIW9/v27atjx47p+++/18aNG/XZZ5/ptdde044dO9LsMzg4WJ6enubl7e2dvokBAAA8JONCwjQuJMzewwAAAACAHM9uifS8efNKupMUv1tsbKy51UtaqlWrps8//1yLFi3Sli1b9NVXX1nsh96gQQM5O//fYvu+ffuqaNGi+u2339LsMygoSDExMeYVGRmZnmkBAAAAAAAAAHIYuyXSy5YtK1dXV504ccKi/MSJE/L19bW5n3LlyqlW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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Each level carries densities, so we visualize the series as densities\n", "n_levels = min(6, len(results))\n", "fig, axes = plt.subplots(2, 3, figsize=(15, 8))\n", "axes = axes.flatten()\n", "\n", "for i, result in enumerate(results[n_levels:]):\n", " ax = axes[i]\n", " ax.stairs(result.densities, result.bin_edges, fill=True, alpha=0.7,\n", " color=\"steelblue\")\n", " title = f\"Granularity {result.granularity} ({len(result.frequencies)} bins)\"\n", " if result.is_best:\n", " title += \" — BEST\"\n", " ax.set_facecolor(\"aliceblue\")\n", " ax.set_title(title)\n", " ax.set_xlabel(\"Value\")\n", " ax.set_ylabel(\"Density\")\n", "\n", "# Hide any unused axes\n", "for ax in axes[n_levels:]:\n", " ax.set_visible(False)\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "11981a03", "metadata": {}, "source": [ "## Summary\n", "\n", "Khisto gives you a better histogram without making you tune bins by hand:\n", "\n", "1. **`khisto.histogram`** — a NumPy-like API with adaptive bins.\n", "2. **`khisto.matplotlib.hist`** — readable density plots by default, with the usual\n", " matplotlib workflow.\n", "3. **`khisto.core.compute_histograms`** — full control over the granularity\n", " series, with `HistogramResult` exposing counts, probabilities and densities.\n", "\n", "To go further, the\n", "[Khiops histograms guide](https://github.com/KhiopsML/khiops-doc/blob/dev/docs/learn/histograms.md)\n", "builds the intuition from the simplest histogram to the most complex." ] } ], "metadata": { "kernelspec": { "display_name": "khisto-python (3.12.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.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }