From 3ec12bbfd45287310ba8bc8f2f72d2a52891eb06 Mon Sep 17 00:00:00 2001
From: marcopolo88 <14142694+marcopolo88@users.noreply.github.com>
Date: Fri, 26 Feb 2021 14:48:07 +0100
Subject: [PATCH 1/4] corrected commission distribution
was supposed to be like this:
""" Return the commission rate based on the table:
0-90% = 2%
91-99% = 3%
>= 100 = 4%
"""
---
Monte_Carlo_Simulationv2.ipynb | 468 +++++++++++++++++++++++++++++++++
1 file changed, 468 insertions(+)
create mode 100644 Monte_Carlo_Simulationv2.ipynb
diff --git a/Monte_Carlo_Simulationv2.ipynb b/Monte_Carlo_Simulationv2.ipynb
new file mode 100644
index 0000000..6499910
--- /dev/null
+++ b/Monte_Carlo_Simulationv2.ipynb
@@ -0,0 +1,468 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Monte Carlo Simulation with Python\n",
+ "\n",
+ "Notebook to accompany article on [Practical Business Python](https://pbpython.com/monte-carlo.html)\n",
+ "\n",
+ "Update to use numpy for faster loops based on comments [here](https://www.reddit.com/r/Python/comments/arxwkm/monte_carlo_simulation_with_python/)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import seaborn as sns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sns.set_style('whitegrid')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Define the variables for the Percent to target based on historical results\n",
+ "avg = 1\n",
+ "std_dev = .1\n",
+ "num_reps = 500\n",
+ "num_simulations = 100000"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Show an example of calculating the percent to target\n",
+ "pct_to_target = np.random.normal(\n",
+ " avg,\n",
+ " std_dev,\n",
+ " size=(num_reps, num_simulations)\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[0.79328531, 0.99211018, 1.14343423, ..., 0.83737887, 0.93507967,\n",
+ " 0.86079851],\n",
+ " [1.03126742, 1.04414961, 1.08119495, ..., 0.98607625, 1.01161899,\n",
+ " 0.96872644],\n",
+ " [1.08616345, 0.93970666, 1.07594111, ..., 0.94057821, 1.00399945,\n",
+ " 1.05325946],\n",
+ " ...,\n",
+ " [1.10388204, 0.90397305, 0.96005999, ..., 0.88810244, 1.18064642,\n",
+ " 0.94066897],\n",
+ " [1.07581302, 0.92552317, 1.08256074, ..., 0.91934988, 1.06668758,\n",
+ " 1.05969099],\n",
+ " [1.12755095, 0.95080038, 0.978849 , ..., 1.0094155 , 0.94359533,\n",
+ " 1.06332923]])"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pct_to_target[0:10]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Another example for the sales target distribution\n",
+ "sales_target_values = [75_000, 100_000, 200_000, 300_000, 400_000, 500_000]\n",
+ "sales_target_prob = [.3, .3, .2, .1, .05, .05]\n",
+ "sales_target = np.random.choice(sales_target_values, p=sales_target_prob, \n",
+ " size=(num_reps, num_simulations))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[ 75000, 200000, 75000, ..., 75000, 100000, 200000],\n",
+ " [200000, 75000, 100000, ..., 200000, 100000, 100000],\n",
+ " [400000, 75000, 100000, ..., 500000, 200000, 75000],\n",
+ " ...,\n",
+ " [500000, 75000, 500000, ..., 75000, 75000, 75000],\n",
+ " [ 75000, 100000, 75000, ..., 75000, 500000, 100000],\n",
+ " [100000, 75000, 75000, ..., 100000, 100000, 75000]])"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "sales_target[0:10]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "commission_percentages = np.take(\n",
+ " np.array([0.04, 0.03, 0.02]),\n",
+ " np.digitize(pct_to_target, bins=[.9, .99, 10])\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 65,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2 26992625\n",
+ "1 15075317\n",
+ "0 7932058\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 65,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.DataFrame(np.digitize(pct_to_target, bins=[.9, .99, 10]).flatten()).value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 66,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.02 26992625\n",
+ "0.03 15075317\n",
+ "0.04 7932058\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 66,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# frequencies\n",
+ "pd.DataFrame(commission_percentages.flatten()).value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 67,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[0.04, 0.02, 0.02, ..., 0.04, 0.03, 0.04],\n",
+ " [0.02, 0.02, 0.02, ..., 0.03, 0.02, 0.03],\n",
+ " [0.02, 0.03, 0.02, ..., 0.03, 0.02, 0.02],\n",
+ " ...,\n",
+ " [0.02, 0.03, 0.03, ..., 0.04, 0.02, 0.03],\n",
+ " [0.02, 0.03, 0.02, ..., 0.03, 0.02, 0.02],\n",
+ " [0.02, 0.03, 0.03, ..., 0.02, 0.03, 0.02]])"
+ ]
+ },
+ "execution_count": 67,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "commission_percentages[0:10]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "total_commissions = (commission_percentages * sales_target).sum(axis=0)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "96546.42131435724"
+ ]
+ },
+ "execution_count": 51,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "total_commissions.std()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 52,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Total_Commissions | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 2838250.0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2786750.0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 2795500.0 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 3054750.0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 2831750.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Total_Commissions\n",
+ "0 2838250.0\n",
+ "1 2786750.0\n",
+ "2 2795500.0\n",
+ "3 3054750.0\n",
+ "4 2831750.0"
+ ]
+ },
+ "execution_count": 52,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Show how to create the dataframe\n",
+ "df = pd.DataFrame(data={'Total_Commissions': total_commissions})\n",
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 53,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAERCAYAAACHA/vpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAueElEQVR4nO3de1hU9aLG8e8wDEjMkJFlTyneMdONN7adEq9pWGreUUhKLdvaUbemblDxlve87LO1sDTr9GiCpGbu7OZtaxZ5klKLUIssRU3xspNBmUFY548OcyQVlikw6vt5np6HWfObtd65NK/rNstiGIaBiIiICT4VHUBERG4cKg0RETFNpSEiIqapNERExDSVhoiImKbSEBER01QaUq4KCgp488036dmzJ926dePxxx9n7ty5uN3ucs/SrVs3zp49e9WP27x5M9OnTy+DRMXVr1+frl270q1bN5544gl69uzJ22+/7bk/KSmJJUuWlDiPd955p9hjLnbx49u3b88333xzVfkOHz7M8OHDATh+/Dj9+vW7qsfLjcm3ogPIrWXKlCn8+uuvvPXWWzgcDs6dO8eYMWOYMGECc+fOLdcs77333h963COPPMIjjzxyndNc3ltvvUVwcDAAp0+fZsiQIbhcLgYNGkR0dHSpj09LS6NevXqXvc/M40ty9OhRDh48CEDVqlVJTk6+pvnJjcGik/ukvGRlZdGlSxd27NiB3W73TM/Ozuarr74iMjKSnJwcpk6dyr59+7BYLLRq1YoXXngBX19f/vSnPzFw4EA+//xzzp07x7Bhw/joo484cOAAd999N6+++iq33Xab6XH169cnNTWVgoIC4uLiOHPmDABt2rRh5MiRZGdnX3b62rVr+fjjj3nttdf45ZdfmDJlCkeOHMEwDLp3786zzz5LVlYWAwYMoE2bNuzZs4ezZ88yduxYOnbsSGZmJhMmTMDtdmMYBr179+bJJ5+85PUqyldUGgBfffUVI0aM4NNPP+Xll1/mzJkzTJo0iZUrV5KcnIzNZsPf358XX3yRgwcPMmHCBPz9/RkyZAinT59m9+7dnDhxgvr161OjRg3P49u3b8+DDz7Ivn37cLvdDBw4kN69e7Nz506mTZvG+++/D+C5/d5779GpUyeOHz/On//8Z6ZOnUrXrl35+uuvyc/PZ/bs2aSmpmK1WgkLC2PcuHHY7Xbat29Pjx49SE1N5dixY3Tr1o2RI0eW4adOrjdtnpJyk56eTt26dYsVBsBdd91FZGQkANOnT6dy5cr885//ZM2aNezfv5833ngDALfbTZUqVVi9ejXdu3cnISGBCRMm8MEHH+B0Otm8efNVjSuSkpJCtWrVePfdd3n77bf5+eefycnJueL0i40ZM4YHH3yQf/7znyQlJbF+/Xo2bNgA/Lb5JiIigtWrVzN69GhmzpwJwLJly2jfvj1r165lyZIl7Nq1i8LCQlOv4f333092dranyOC3TX4zZ87k9ddfZ82aNURFRZGWlkbHjh1p3749AwYM8JTSkSNHePfdd5k3b94l8/b39+fdd9/ljTfeYMGCBXz//fdXzGG1Wpk+fTohISEsW7as2H2LFy/mxIkTvPfee7z33nsUFhby0ksvee4/d+6cp+TeeOMNDh8+bOq5i3dQaUi58fHxKfXLcfv27fTv3x+LxYKfnx/9+vVj+/btnvuLyiUkJITQ0FCqVq2Kj48P1apV49dff73qcQCtWrXik08+YfDgwaxatYrRo0fjcDiuOL3IuXPn+OqrrzxfyA6Hg549e3ry2mw22rRpA8ADDzzAv//9bwA6duzI66+/zrBhw/jkk09ISEjAx8fc/4oWiwX47Qu+iNVqpVOnTvTr148XX3yRoKAgevfufdnHN2nSBF/fy2+VLtonUbVqVVq2bElqaqqpTL+3fft2+vXrh81mw8fHh9jYWD799FPP/UWb9qpWrcqdd955yfsh3k2lIeUmLCyMH3/8EafTWWz68ePHee6558jLy6OwsNDzxQhQWFjIhQsXPLdtNttl//49s+OKcm3evJm+ffty5MgR+vTpw7fffnvF6Rdn+/3W3YvzFn1pAsWeU7t27fj444957LHHyMjIoGvXrvzyyy8lZizyzTffUK1aNQIDA4tNnzdvHq+++iohISEsWbKEF1544bKPv+22264474uLq7CwEF9fXywWS7HnmJ+fX2rGy72HFz/u4sL7/fzF+6k0pNxUrVqVrl27Mn78eE9xOJ1OpkyZQuXKlalUqRIRERGsWLECwzBwu92kpKTw8MMPl2muefPmkZiYSIcOHZgwYQJ169bl+++/v+L0Ina7ncaNG3uOTsrJyWHdunWl5h09ejQffPABnTt3ZvLkydjtdg4dOlRqzuPHjzNv3jwGDRpUbPrp06dp06YNlStXZsCAAYwcOdJzJJTVai1WuiV59913gd92cKempvLQQw8RHBzM0aNHOXXqFIZheDa9Fc37ciXSqlUrkpKSyM/Pp7CwkLfffpuWLVuayiDeT0dPSbmaPHkyiYmJ9OvXD6vVitvtpkOHDp5DNxMSEpg+fTpdu3YlPz+fVq1aMWTIkDLN9PTTTxMfH0+XLl3w8/Ojfv36dO7cmV9//fWy04t2CsNvhfPiiy+ydu1a3G43Xbt2pWfPnhw5cuSKy3v++eeZMGECq1atwmq10qFDB/785z9fMZuPjw9WqxWAXr16XbLTPDg4mKFDhzJgwAAqVark2d8A0Lp1a2bPnm3qdXC5XPTo0YP8/HwSEhKoVasW8Ntmq169enHXXXfRtm1bTyHVrVsXf39/evfuzd///nfPfIYOHcqcOXPo3r07Fy5cICwsjIkTJ5rKIN5PR0+JiIhp2jwlIiKmqTRERMQ0lYaIiJim0hAREdNu6qOndu/eXeyY8LLicrnKZTlXyxtzeWMmUK6r5Y25vDET3Ji5XC4XTZo0uex9N3Vp+Pv706BBgzJfTkZGRrks52p5Yy5vzATKdbW8MZc3ZoIbM1dGRsYVH6fNUyIiYppKQ0RETFNpiIiIaTf1Pg0R+WPy8/PJysoiLy/viveXtN27InhjJvDuXAcPHqRatWql/qjnxVQaInKJrKwsHA4HNWvWLPaLtUXOnz9PQEBABSS7Mm/MBN6b69y5c5w7d46srCzP74yZoc1TInKJvLw87rzzzssWhtwcLBYLd9555xXXJq9EpSEil6XCuPn9kfdYpSEipcrLLyh2+1o3t/x+fnLj0D4NESlVJZuVmvEbSh9o0k+zO1+3eUn5UmnILS0vv4BKNmuFnLFbtGy51OzZs0lPTyc7O5u8vDyqV6/OHXfcwcKFC4uN279/P2fPnr3iRax27txJcnJysYtE/d7333/P3LlzOX/+POfOnaNNmzYMHz68TDfPjRo1ijlz5uDn52dq/Pbt2zl27Bh9+/Yts0xmqTTklna9/wV9NfSv7SuLj48HYO3atfz444+MGTPmsuM++eQTqlSpcsXSKM3Zs2d54YUXWLRoETVr1qSgoIC//vWvJCcnEx0d/Yfzl6akEruc1q1bl1GSq6fSEBGvl5+fz/jx4zl8+DAFBQUMHDiQ5s2b8+6772Kz2WjYsCE//fQT77zzjucx//jHP0qd7+bNm3nwwQepWbMm8Nt1z+fMmeM5b2H27NmkpaUB0KVLF8+lgX19fTl69Chut5vHH3+crVu3cuzYMRITEzl27BhLlizBZrPxyy+/0KtXL9LS0ti3bx9PPfUUMTExtG/fng8//JBt27axdOlSfH19ue+++3jppZf4+uuvmTNnDr6+vgQFBTFv3jw++eQTT3m+8cYbbNiwAV9fX8LDwxk7diyLFi0iKyuLU6dOcfToUcaNG0erVq34+9//zhdffEFhYSGdO3dmwIAB1/xeqDRExOutWrWKO+64g7lz5+J0OunZsyfJycn06NGDKlWqEBYWxrZt21iyZAkBAQFMmjSJHTt2ULVq1RLne+LECapXr15sWmBgIABbt24lKyuLlJQULly4QExMDP/xH/8BwH333cf06dOZNGkSWVlZLF26lIULF7JlyxYaNGjAL7/8wrp160hPT2fEiBFs2rSJ48ePM2zYMGJiYjzLev/99xkwYACdO3dm3bp1OJ1ONm3aRMeOHXnmmWfYsmULZ8+e9Yzfv38/H374IcnJyfj6+jJ8+HC2bt0KgJ+fH6+//jqfffYZb7zxBq1atWLdunWsWLGCqlWrsnbt2uvyXujoKRHxepmZmZ5NUHa7nTp16nD48OFiY4KDg4mLi2PcuHHs37+fCxculDrfe++9l19++aXYtMOHD/Pll1+SmZlJeHg4FosFm81G48aNyczMBOCBBx4AICgoiLp163r+drvdANSrVw+bzYbD4aBatWr4+flx++2343K5ii1r3LhxfPnll/Tv35+vvvoKHx8fhgwZwunTp3n66af56KOP8PX9/3/b//jjjzRu3BibzYbFYiE8PJzvv/8ewLNf7p577vHkWLBgAQsWLOCZZ54pVj7XQmsaIlKqvPyC67oP5moPAqhTpw67du2iY8eOOJ1ODhw4QLVq1bBYLBQWFpKTk8PixYvZtm0bAAMHDsQwjFLn265dO1577TWio6MJCQkhPz+f2bNn8/DDD1OnTh3Wrl3LgAEDyM/P5+uvv6ZHjx5A6ec3mN2JvmrVKoYPH86dd97JpEmT2LhxI7m5ufTo0YO4uDhee+01UlJSuPfeewGoXbs2b775JhcuXMBqtfLll1/SvXt39u3bd8ky3W43H330EQsWLMAwDDp37kznzp257777TGW7EpWGiJTq91/w1/rTGFd71FhUVBQTJ04kOjoal8vFsGHDuPPOO2nUqBEvvfQSderUoUmTJvTo0YPbbruNoKAgTpw4QbVq1Uqcr91uZ/bs2SQkJGAYBrm5ubRr146YmBgsFgv/8z//Q9++fcnPz6dTp040bNjwDz/nywkLC2PgwIFUrlyZwMBA2rZty6FDh4iPj+e2227DZrPx4osv8uWXXwJQv359HnvsMaKjoyksLKR58+Z06NCBffv2XTLvorWbbt26cfvtt9OyZUtP+VwLi2Gmjm9Q5XXxkxvxIisVxRszefPRUxX1epW2XG/8PSVvzATen+ty73VJ77/WNETkpjdlyhTP/oiLLV26lEqVKlVAohuXSkNELsswjJvm96emTJlS0RG80h/Z0KSjp0TkEpUqVeLUqVN/6EtFbgyGYXDq1KmrXtPSmoaIXKJatWpkZWWRnZ192fvz8/Ov6sI95cEbM4F35yo6JPhqlElpFBQUkJCQwMGDB7FarcyaNQvDMIiPj8disVCvXj0mT56Mj48PKSkpnhNVhg4dSrt27cjLy2Ps2LGcOnWKwMBA5syZQ3BwMLt372bGjBlYrVYiIiIYNmxYWcQXueXZbLYSL8zjjQc0eGMm8O5cV3PxpSJlsnmq6AzF5ORkRowYwaxZs5g1axYjR45k5cqVGIbB5s2byc7OZvny5SQnJ7Ns2TIWLFiA2+0mKSmJ0NBQVq5cSffu3UlMTARg8uTJzJ8/n6SkJPbs2UN6enpZxBcRkSsokzWNDh060LZtWwCOHj1KlSpV+Ne//kWLFi2A335867PPPsPHx4emTZvi5+eHn58fISEh7Nu3j7S0NJ599lnP2MTERJxOJ263m5CQEAAiIiJITU0t8bhpl8tVLtfmzcvL88prAHtjLm/LVNH/AizttfC216uIN+byxkxw8+Uqs30avr6+xMXFsXHjRhYuXMjWrVs9R2IEBgaSk5OD0+nE4XB4HhMYGIjT6Sw2/eKxdru92Njf/4zA7/n7++s8DS/L5Y2ZKlJpr4W3vl7emMsbM8GNmaukMinTo6fmzJnDxx9/zMSJE4v95kpubi5BQUHY7XZyc3OLTXc4HMWmlzQ2KCioLOOLiMjvlElprFu3jtdeew347bKQFouFRo0asXPnTuC3C4qEh4cTFhZGWloaLpeLnJwcMjMzCQ0NpVmzZp7fkNm+fTvNmzfHbrdjs9k4dOgQhmGwY8cOwsPDyyK+iIhcQZlsnnr00UcZN24cTz75JBcuXGD8+PHUqVOHiRMnsmDBAmrXrk1kZCRWq5XY2FhiYmIwDINRo0bh7+9PdHQ0cXFxREdHY7PZmD9/PgBTp05lzJgxFBQUEBERQePGjcsivoiIXEGZlMZtt9122QugrFix4pJpUVFRREVFFZsWEBBwyWUdAZo0aUJKSsr1CyoiIldFZ4SLiIhpKg0RETFNpSEiIqapNERExDSVhoiImKbSEBER01QaIiJimkpDRERMU2mIiIhpKg0RETFNpSEiIqapNERExDSVhoiImKbSEBER01QaIiJimkpDRERMU2mIiIhpKg0RETFNpSEiIqapNERExDSVhoiImKbSEBER01QaIiJimkpDRERM873eM8zPz2f8+PEcOXIEt9vN0KFDueeeexgyZAg1a9YEIDo6mscff5yUlBSSk5Px9fVl6NChtGvXjry8PMaOHcupU6cIDAxkzpw5BAcHs3v3bmbMmIHVaiUiIoJhw4Zd7+giIlKK614a69evp3LlysydO5czZ87Qo0cP/vM//5OBAwcyaNAgz7js7GyWL1/OmjVrcLlcxMTE0LJlS5KSkggNDWX48OFs2LCBxMREEhISmDx5MosWLaJ69eo899xzpKen07Bhw+sdX0RESnDdS6NTp05ERkZ6blutVr799lsOHjzI5s2bqVGjBuPHj2fv3r00bdoUPz8//Pz8CAkJYd++faSlpfHss88C0Lp1axITE3E6nbjdbkJCQgCIiIggNTW11NJwuVxkZGRc76d4iby8vHJZztXyxlzelqlBgwYVuvzSXgtve72KeGMub8wEN1+u614agYGBADidTkaMGMHIkSNxu9306dOHRo0asXjxYl555RXuv/9+HA5Hscc5nU6cTqdnemBgIDk5OTidTux2e7Gxhw8fLjWLv79/uXwpZGRkVPiXz+V4Yy5vzFSRSnstvPX18sZc3pgJbsxcJZVJmewIP3bsGE899RTdunWja9eudOzYkUaNGgHQsWNHvvvuO+x2O7m5uZ7H5Obm4nA4ik3Pzc0lKCjosmODgoLKIrqIiJTgupfGyZMnGTRoEGPHjqV3794APPPMM+zduxfAs1kpLCyMtLQ0XC4XOTk5ZGZmEhoaSrNmzdi2bRsA27dvp3nz5tjtdmw2G4cOHcIwDHbs2EF4ePj1ji4iIqW47punXn31Vc6ePUtiYiKJiYkAxMfHM3PmTGw2G1WqVGHatGnY7XZiY2OJiYnBMAxGjRqFv78/0dHRxMXFER0djc1mY/78+QBMnTqVMWPGUFBQQEREBI0bN77e0aUC5eUXUMlmregYIlKK614aCQkJJCQkXDI9OTn5kmlRUVFERUUVmxYQEMDChQsvGdukSRNSUlKuX1DxKpVsVmrGbyj35f40u3O5L1PkRqaT+0RExDSVhoiImKbSEBER01QaIiJimkpDRERMU2mIiIhpKg0RETFNpSEiIqapNERExDSVhoiImKbSEBER01QaIiJimkpDRERMU2mIiIhpKg2RCpKXX1DqmLK4TKiZ5YpcyXW/noaImKNriMiNSGsaIiJimkpDRERMU2mIiIhpKg0RETFNpSEiIqapNERExDSVhoiImKbSEBER0677yX35+fmMHz+eI0eO4Ha7GTp0KHXr1iU+Ph6LxUK9evWYPHkyPj4+pKSkkJycjK+vL0OHDqVdu3bk5eUxduxYTp06RWBgIHPmzCE4OJjdu3czY8YMrFYrERERDBs27HpHFxGRUpha0zh58qTpGa5fv57KlSuzcuVKli5dyrRp05g1axYjR45k5cqVGIbB5s2byc7OZvny5SQnJ7Ns2TIWLFiA2+0mKSmJ0NBQVq5cSffu3UlMTARg8uTJzJ8/n6SkJPbs2UN6evofe8YiIvKHmVrTGD58OMHBwfTu3Zs2bdrg43PlrunUqRORkZGe21arlfT0dFq0aAFA69at+eyzz/Dx8aFp06b4+fnh5+dHSEgI+/btIy0tjWeffdYzNjExEafTidvtJiQkBICIiAhSU1Np2LBhibldLhcZGRlmnuI1ycvLK5flXC1vzHWlTGXxG0tyZdf6ubiRPlsV7WbLZao0kpKSyMzMZPXq1SxevJiHHnqI3r17U7169UvGBgYGAuB0OhkxYgQjR45kzpw5WCwWz/05OTk4nU4cDkexxzmdzmLTLx5rt9uLjT18+HCpuf39/cvlyygjI8Mrv/S8MZc3ZroVXet74I3vozdmghszV0llYnpH+N1330316tWpVKkSBw4cYMaMGfzjH/+47Nhjx47x1FNP0a1bN7p27VpszSQ3N5egoCDsdju5ubnFpjscjmLTSxobFBRkNrqIiFwnpkrjr3/9K3379uXs2bPMnTuXxYsX8+qrr7Jt27ZLxp48eZJBgwYxduxYevfuDcADDzzAzp07Adi+fTvh4eGEhYWRlpaGy+UiJyeHzMxMQkNDadasmWe+27dvp3nz5tjtdmw2G4cOHcIwDHbs2EF4ePj1eg1ERMQkU5unoqKiaNKkCYGBgZw4ccIzPSkp6ZKxr776KmfPniUxMdGzE3vChAlMnz6dBQsWULt2bSIjI7FarcTGxhITE4NhGIwaNQp/f3+io6OJi4sjOjoam83G/PnzAZg6dSpjxoyhoKCAiIgIGjdufD2ev4iIXAVTpfH111/z6aefEh8fz/Tp02nUqBHPPfcc/v7+l4xNSEggISHhkukrVqy4ZFpUVBRRUVHFpgUEBLBw4cJLxjZp0oSUlBQzcUVEpIyY2jy1ZcsW4uPjAVi4cCFbtmwp01AiIuKdTJWGxWLB7XYDv528ZxhGmYYSERHvZGrzVL9+/ejatSuhoaH8+OOPnvMoRETk1mKqNPr06cMjjzzC4cOHqV69OsHBwWWdS0REvJCp0sjIyGDVqlW4XC7PtFmzZpVZKBER8U6mSiM+Pp7+/ftzzz33lHUeERHxYqZKo0qVKvTp06ess4iIiJczVRr33XcfS5YsoUGDBp7fkIqIiCjTYCIi4n1MlUZ+fj4HDx7k4MGDnmkqDRGRW4+p0pg1axYHDx7k0KFD1K9fn7vvvrusc4mIiBcyVRorVqxg48aN/Prrr/To0YOff/6ZSZMmlXU2ERHxMqbOCN+wYQP//d//jcPh4Omnn2bPnj1lnUtERLyQqdIo+tmQop3gfn5+ZZdIRES8lqnNU126dOHJJ5/k6NGjDB48mA4dOpR1LhER8UKmSqN///489NBDHDhwgFq1anH//feXdS4REfFCpkrj5Zdf9vydmZnJpk2bGDZsWJmFEhER72T6jHD4bd/Gd999R2FhYZmGEhER72T6p9Evpp9GFxG5NZkqjYvPBM/OzubYsWNlFkhERLyXqdK4+EQ+f39//va3v5VZIBER8V6mSmP58uVlnUNERG4ApkrjiSeeIDc3F39/f8+FmAzDwGKxsHnz5jINKCIi3sNUaTRt2pTu3bvTtGlT9u/fz7Jly5g+fXpZZxMRES9jqjQyMzNp2rQpAPXr1+fYsWP6KRERkVuQqd+ecjgc/Nd//Rdbtmxh7ty53HvvvaU+Zs+ePcTGxgKQnp5Oq1atiI2NJTY2lg8++ACAlJQUevbsSVRUFFu3bgUgLy+P4cOHExMTw+DBgzl9+jQAu3fvpk+fPvTr16/YyYYiIlJ+TK1pzJ8/n5UrV/Lpp59Sv359Ro0aVeL4pUuXsn79egICAgD47rvvGDhwIIMGDfKMyc7OZvny5axZswaXy0VMTAwtW7YkKSmJ0NBQhg8fzoYNG0hMTCQhIYHJkyezaNEiqlevznPPPUd6ejoNGza8hqcuIiJXy9Sahr+/P7fffjt33HEHtWrV4uzZsyWODwkJYdGiRZ7b3377Lf/617948sknGT9+PE6nk71799K0aVP8/PxwOByEhISwb98+0tLSaNWqFQCtW7cmNTUVp9OJ2+0mJCQEi8VCREQEqamp1/C0RUTkjzB9nsbdd9/N559/TqNGjYiLi2Pp0qVXHB8ZGUlWVpbndlhYGH369KFRo0YsXryYV155hfvvvx+Hw+EZExgYiNPpxOl0eqYHBgaSk5OD0+nEbrcXG3v48OFSc7tcLjIyMsw8xWuSl5dXLsu5Wt6Y60qZGjRoUAFpbl3X+rm4kT5bFe1my2WqNA4dOsSMGTPYtWsX7du3Z8mSJVe1kI4dOxIUFOT5e9q0aYSHh5Obm+sZk5ubi8PhwG63e6bn5uYSFBRUbNrF00vj7+9fLl9GGRkZXvml5425vDHTreha3wNvfB+9MRPcmLlKKhNTm6cKCgo4ffo0FosFp9OJj4+ph3k888wz7N27F4DU1FQaNmxIWFgYaWlpuFwucnJyyMzMJDQ0lGbNmrFt2zYAtm/fTvPmzbHb7dhsNg4dOoRhGOzYsYPw8PCryiAiItfO1JrGqFGjiI6OJjs7m759+zJhwoSrWsiUKVOYNm0aNpuNKlWqMG3aNOx2O7GxscTExGAYBqNGjcLf35/o6Gji4uKIjo7GZrMxf/58AKZOncqYMWMoKCggIiKCxo0bX/2zFRGRa2KqNI4dO8bHH3/M6dOnueOOOzyXfS1JtWrVSElJAaBhw4YkJydfMiYqKoqoqKhi0wICAli4cOElY5s0aeKZn4iIVAxT25mKvqyDg4NNFYaIiNycTK1puN1uunfvTq1atTz7M4o2G4mIyK2jxNJITEzk+eefZ8yYMRw/fpyqVauWVy4REfFCJW6e+uKLLwBo0aIF77zzDi1atPD8JyIit54SS8MwjMv+LSIit6YSS+Pind7aAS4iIiXu00hPT6dfv34YhsEPP/zg+dtisVz2EFoREbm5lVga69evL68cIiJyAyixNO67777yyiEiIjeAq/sRKRERuaWpNERExDSVhoiImKbSEBER01QaIiJimkpDRERMU2mIiIhpKg0RETFNpSEiIqapNERExDSVhoiImKbSEBER01QaIiJimkpDRERMU2mIiIhpZVYae/bsITY2FoCff/6Z6OhoYmJimDx5MoWFhQCkpKTQs2dPoqKi2Lp1KwB5eXkMHz6cmJgYBg8ezOnTpwHYvXs3ffr0oV+/frz88stlFVtEREpQJqWxdOlSEhIScLlcAMyaNYuRI0eycuVKDMNg8+bNZGdns3z5cpKTk1m2bBkLFizA7XaTlJREaGgoK1eupHv37iQmJgIwefJk5s+fT1JSEnv27CE9Pb0soouISAnKpDRCQkJYtGiR53Z6ejotWrQAoHXr1nz++efs3buXpk2b4ufnh8PhICQkhH379pGWlkarVq08Y1NTU3E6nbjdbkJCQrBYLERERJCamloW0UVEpAQlXu71j4qMjCQrK8tz2zAMLBYLAIGBgeTk5OB0OnE4HJ4xgYGBOJ3OYtMvHmu324uNPXz4cKk5XC4XGRkZ1+tpXVFeXl65LOdqeWOuK2Vq0KBBBaS5dV3r5+JG+mxVtJstV5mUxu/5+Pz/Ck1ubi5BQUHY7XZyc3OLTXc4HMWmlzQ2KCio1OX6+/uXy5dRRkaGV37peWMub8x0K7rW98Ab30dvzAQ3Zq6SyqRcjp564IEH2LlzJwDbt28nPDycsLAw0tLScLlc5OTkkJmZSWhoKM2aNWPbtm2esc2bN8dut2Oz2Th06BCGYbBjxw7Cw8PLI7qIiFykXNY04uLimDhxIgsWLKB27dpERkZitVqJjY0lJiYGwzAYNWoU/v7+REdHExcXR3R0NDabjfnz5wMwdepUxowZQ0FBARERETRu3Lg8oouIyEXKrDSqVatGSkoKALVq1WLFihWXjImKiiIqKqrYtICAABYuXHjJ2CZNmnjmJ2UjL7+ASjZrmS7DG1fTRcS8clnTkBtDJZuVmvEbKmTZP83uXCHLFZGrozPCRUTENJWGiIiYptIQERHTVBoiImKaSkNERExTaYjcYvLyC655Hn/00OnrsWypWDrkVuQWo0Or5VpoTUNERExTaYiIiGkqDRERMU2lISIipqk0RETENJWGiIiYptIQERHTVBoiImKaSkNERExTaYiIiGkqDRERMU2lISIipqk0RETENJWGiIiYptIQERHTVBoiImJauV6EqXv37jgcDgCqVavGkCFDiI+Px2KxUK9ePSZPnoyPjw8pKSkkJyfj6+vL0KFDadeuHXl5eYwdO5ZTp04RGBjInDlzCA4OLs/4IiK3vHIrDZfLBcDy5cs904YMGcLIkSN58MEHmTRpEps3b6ZJkyYsX76cNWvW4HK5iImJoWXLliQlJREaGsrw4cPZsGEDiYmJJCQklFd8ERGhHDdP7du3j/PnzzNo0CCeeuopdu/eTXp6Oi1atACgdevWfP755+zdu5emTZvi5+eHw+EgJCSEffv2kZaWRqtWrTxjU1NTyyu6iIj8n3Jb06hUqRLPPPMMffr04aeffmLw4MEYhoHFYgEgMDCQnJwcnE6nZxNW0XSn01lsetHY0rhcLjIyMsrmCV0kLy+vXJZzta42V4MGDcowjchvyur/lZvl/8Py8kdzlVtp1KpVixo1amCxWKhVqxaVK1cmPT3dc39ubi5BQUHY7XZyc3OLTXc4HMWmF40tjb+/f7l8EWZkZHjlF6635pJbW1l9Jr31834j5iqpTMpt89Tq1auZPXs2AMePH8fpdNKyZUt27twJwPbt2wkPDycsLIy0tDRcLhc5OTlkZmYSGhpKs2bN2LZtm2ds8+bNyyu6iIj8n3Jb0+jduzfjxo0jOjoai8XCzJkzueOOO5g4cSILFiygdu3aREZGYrVaiY2NJSYmBsMwGDVqFP7+/kRHRxMXF0d0dDQ2m4358+eXV3QREfk/5VYafn5+l/2iX7FixSXToqKiiIqKKjYtICCAhQsXllk+EREpnU7uExER01QaIiJimkpDRERMU2mIiIhpKg0RETFNpSEiIqapNERExDSVhoiImKbSEBER01QaIiJimkpDRERMU2mIiIhpKg0RETFNpSEiIqapNERExDSVhoiImKbS8EJ5+QXXZT7eeF1iubVdr8/25ZT0eS/L5d5qyu3KfWJeJZuVmvEbyn25P83uXO7LlFuLPts3Pq1piIiIaSoNERExTaUhIiKmqTRERMQ0lYaIiJim0hAREdNuqENuCwsLmTJlCvv378fPz4/p06dTo0aNio4lInLLuKHWNDZt2oTb7WbVqlWMHj2a2bNnV3QkEZFbyg1VGmlpabRq1QqAJk2a8O2335bp8syeRaozr0W8W0WdEX4znoluMQzDqOgQZk2YMIFHH32UNm3aANC2bVs2bdqEr+/lt7Lt3r0bf3//8owoInLDc7lcNGnS5LL33VD7NOx2O7m5uZ7bhYWFVywM4IpPWkRE/pgbavNUs2bN2L59O/DbWkRoaGgFJxIRubXcUJunio6eOnDgAIZhMHPmTOrUqVPRsUREbhk3VGmIiEjFuqE2T4mISMVSaYiIiGkqDRERMe2GOuS2IuXn5zN+/HiOHDmC2+1m6NChPPLII57733zzTVavXk1wcDAAU6dOpXbt2hWea+/evcyePRvDMLjrrruYO3duuZy7UlKu7OxsXnjhBc/YjIwMRo8eTXR0dIVlAli/fj1vvvkmPj4+9OrVi5iYmDLNYzbXunXrWLZsGQ6Hgx49etCnT59yyVVQUEBCQgIHDx7EarUya9YsQkJCPPdv2bKFV155BV9fX3r16kVUVJRX5AI4f/48AwcOZMaMGeV2sExpud5//33eeustrFYroaGhTJkyBR+fsv13e2mZPv74Y5YsWYLFYqFv377mPluGmLJ69Wpj+vTphmEYxunTp402bdoUu3/06NHGN99841W5CgsLjSeeeML46aefDMMwjJSUFCMzM7PCc13sq6++MmJjY40LFy5UeKaWLVsaZ86cMVwul9GhQwfj3//+d5lnKi3XqVOnjLZt2xpnzpwxCgoKjNjYWOPw4cPlkmvjxo1GfHy8YRiG8cUXXxhDhgzx3Od2uz2vkcvlMnr27GmcOHGiwnMZhmHs3bvX6NGjh/Hwww8bP/zwQ7lkKi3X+fPnjUceecQ4d+6cYRiGMWrUKGPTpk0VmunChQtGx44djbNnzxoXLlwwHn30UePUqVOlzlNrGiZ16tSJyMhIz22r1Vrs/vT0dJYsWUJ2djZt27blL3/5S4XnOnjwIJUrV+att97iwIEDtGnTplzWfkrLVcQwDKZNm8a8efMue395Z6pfvz45OTn4+vpiGAYWi6XMM5WWKysri/vvv5/KlSsD8Kc//Yk9e/ZQrVq1Ms/VoUMH2rZtC8DRo0epUqWK577MzExCQkK4/fbbAWjevDm7du3iscceq9BcAG63m1deeYW//e1vZZ7FbC4/Pz+Sk5MJCAgA4MKFC+Wyxl9SJqvVygcffICvry+nTp0CIDAwsNR5qjRMKnoxnU4nI0aMYOTIkcXu79y5MzExMdjtdoYNG8bWrVtp165dheY6c+YMX3/9NRMnTqRGjRoMGTKERo0a8dBDD1VoriJbtmyhXr165VZkpWWqV68evXr1IiAggI4dOxIUFFThuWrUqMEPP/zAyZMnCQwMJDU1lZo1a5ZLLgBfX1/i4uLYuHEjCxcu9Ex3Op04HA7P7cDAQJxOZ4Xngt8KrKJcKZePj4/nC3v58uWcO3eOli1bVmimovs++eQTXnzxRdq0aVPiL2x4lNFa0U3p6NGjRo8ePYx33nmn2PTCwkLj7NmzntsrVqwwXn755QrP9cMPPxhdunTx3H7zzTeNJUuWVHiuIiNGjDB27dpVbnlKypSRkWFERkZ6VtVHjRplfPDBBxWeyzAMY/PmzUa/fv2MkSNHGgkJCcbGjRvLLVeREydOGG3btjVyc3MNw/jt9Xr22Wc998+YMcP48MMPKzzXxfr371+um6cudrlcBQUFxuzZs42//OUvns1UFZ3p4mxjx441Vq9eXep8dPSUSSdPnmTQoEGMHTuW3r17F7vP6XTSpUsXcnNzMQyDnTt30qhRowrPVb16dXJzc/n5558B2LVrF/Xq1avwXEXS09Np1qxZueQpLZPD4aBSpUr4+/tjtVoJDg7m7NmzFZ7rwoUL7Nmzh7fffps5c+bw448/lttrtm7dOl577TUAAgICsFgsnk1nderU4eeff+bf//43brebXbt20bRp0wrPVZFKyzVp0iRcLheJiYmezVQVmcnpdNK/f3/cbjc+Pj4EBASY2jGvM8JNmj59Oh9++GGxTSl9+vTh/Pnz9O3bl3Xr1rF8+XL8/Px46KGHGDFihFfkSk1NZf78+RiGQdOmTUlISPCKXKdPn2bgwIG899575ZLHTKakpCTWrFmDzWYjJCSEadOm4efnV+G5Xn75ZTZt2oS/vz8DBw6kU6dOZZ4J4Ny5c4wbN46TJ09y4cIFBg8ezPnz5zl37hx9+/b1HD1lGAa9evXiySef9IpcRWJjY5kyZUq5HT1VUq5GjRrRq1cvwsPDPfvKnnrqKTp27Fhhmfr27cuqVatYvXo1vr6+1K9fn4kTJ5ZawCoNERExTZunRETENJWGiIiYptIQERHTVBoiImKaSkNE5Ca0Z88eYmNjSxyzdu1a+vTpQ8+ePXnllVdMzVdnhIuI3GSWLl3K+vXrSzwf5NChQyQlJXlOFVi4cCH5+fnYbLYS5601DRGRm0xISAiLFi3y3N6/fz+xsbHExsYyfPhwcnJy+Pzzz2nUqBFxcXH079+fZs2alVoYoDUNEZGbTmRkJFlZWZ7bEydOZObMmdStW5d33nmH119/nUqVKrFr1y6SkpJwuVxER0ezevXqUn9zTaUhInKTy8zMZOrUqcBv12+pVasWYWFhtGjRArvdjt1up06dOvz000+EhYWVOC+VhojITa5WrVrMmTOHe++9l7S0NLKzs6lVqxYrV67E5XJRUFDg+bn70qg0RERuclOmTCEuLo6CggIAZsyYQa1atejVqxfR0dEYhsHzzz/vuW5LSfTbUyIiYpqOnhIREdNUGiIiYppKQ0RETFNpiIiIaSoNERExTaUhIiKmqTRERMS0/wVf3ZYTm53/1wAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "df.plot(kind='hist', title='Commissions Distribution')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Total_Commissions | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | count | \n",
+ " 1.000000e+05 | \n",
+ "
\n",
+ " \n",
+ " | mean | \n",
+ " 2.831683e+06 | \n",
+ "
\n",
+ " \n",
+ " | std | \n",
+ " 9.654690e+04 | \n",
+ "
\n",
+ " \n",
+ " | min | \n",
+ " 2.472750e+06 | \n",
+ "
\n",
+ " \n",
+ " | 25% | \n",
+ " 2.765750e+06 | \n",
+ "
\n",
+ " \n",
+ " | 50% | \n",
+ " 2.830250e+06 | \n",
+ "
\n",
+ " \n",
+ " | 75% | \n",
+ " 2.896500e+06 | \n",
+ "
\n",
+ " \n",
+ " | max | \n",
+ " 3.278500e+06 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Total_Commissions\n",
+ "count 1.000000e+05\n",
+ "mean 2.831683e+06\n",
+ "std 9.654690e+04\n",
+ "min 2.472750e+06\n",
+ "25% 2.765750e+06\n",
+ "50% 2.830250e+06\n",
+ "75% 2.896500e+06\n",
+ "max 3.278500e+06"
+ ]
+ },
+ "execution_count": 54,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.describe()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "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.6.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
From 3bce001c92bd184636f45f4a00538cb063831586 Mon Sep 17 00:00:00 2001
From: Chris Moffitt
Date: Sun, 27 Jun 2021 11:40:34 -0500
Subject: [PATCH 2/4] Create FUNDING.yml
Add a sponsorship link
---
.github/FUNDING.yml | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 .github/FUNDING.yml
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..89e4415
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,3 @@
+# These are supported funding model platforms
+
+github: chris1610
From 0e7af2c36da8d5d518b8c1f0ce84458e38c5d345 Mon Sep 17 00:00:00 2001
From: Chris Moffitt
Date: Sat, 14 Aug 2021 14:35:58 -0500
Subject: [PATCH 3/4] Adding missing file
---
data/Example4.xlsx | Bin 0 -> 13509 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 data/Example4.xlsx
diff --git a/data/Example4.xlsx b/data/Example4.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..307ffc300095a447ea6343084885347c18014fa4
GIT binary patch
literal 13509
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
R0FWUcA4tJwV)^~+{{h-3vWfrz
literal 0
HcmV?d00001
From 8a3206ccb06a058deda1fc27b207937e16e443de Mon Sep 17 00:00:00 2001
From: Chris Moffitt
Date: Sun, 25 Sep 2022 12:29:16 -0500
Subject: [PATCH 4/4] Adding new data file for groupby warning article
---
data/sales_9_2022.xlsx | Bin 0 -> 10186 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 data/sales_9_2022.xlsx
diff --git a/data/sales_9_2022.xlsx b/data/sales_9_2022.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..9b6845c47baa4dc2bfeeae85ff26451a144d1deb
GIT binary patch
literal 10186
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
Z1yMm7=4EvO0K}J@Pqyr2g&G{{cC!