From cad456dc7e961a9b2f0e6e8f2d99cd90970658c6 Mon Sep 17 00:00:00 2001 From: Francisco Javier Arceo Date: Wed, 3 Jan 2024 21:55:26 -0500 Subject: [PATCH] updated --- Latino-Americans.ipynb | 81 ++---------------------------------------- 1 file changed, 3 insertions(+), 78 deletions(-) diff --git a/Latino-Americans.ipynb b/Latino-Americans.ipynb index 22cdb8a..ae07d51 100644 --- a/Latino-Americans.ipynb +++ b/Latino-Americans.ipynb @@ -875,81 +875,6 @@ "df['OCC2010'].value_counts()" ] }, - { - "cell_type": "code", - "execution_count": 36, - "id": "89213c19-b1ad-4aee-b36a-fcdf228cd46b", - "metadata": {}, - "outputs": [ - { - "ename": "IndexError", - "evalue": "index 0 is out of bounds for axis 0 with size 0", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[36], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mptbarplot2\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[43mxdf\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdf\u001b[49m\u001b[43m[\u001b[49m\u001b[43mdf\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mClass_of_worker\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m!=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mNIU\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\n\u001b[1;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mcol\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mHispanic or Not\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[43m \u001b[49m\u001b[43mgvar\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mOCC2010\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\n\u001b[1;32m 5\u001b[0m \u001b[43m \u001b[49m\u001b[43mwvar\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mASECWT\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m \u001b[49m\u001b[43mtitle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mClass of Worker by Hispanic Response\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[43m \u001b[49m\u001b[43mddi\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mddi_codebook\u001b[49m\u001b[43m)\u001b[49m\n", - "Cell \u001b[0;32mIn[35], line 15\u001b[0m, in \u001b[0;36mptbarplot2\u001b[0;34m(xdf, col, gvar, wvar, colors, title, sort_var, ascending, labels, ddi, n)\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m:\n\u001b[1;32m 12\u001b[0m ylabel \u001b[38;5;241m=\u001b[39m gvar\n\u001b[0;32m---> 15\u001b[0m g \u001b[38;5;241m=\u001b[39m \u001b[43mtm\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbarh\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 16\u001b[0m \u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgvar\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 17\u001b[0m \u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mPercent_x\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mPercent_y\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 18\u001b[0m \u001b[43m \u001b[49m\u001b[43mcolor\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcolors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 19\u001b[0m \u001b[43m \u001b[49m\u001b[43mlabel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlabels\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 20\u001b[0m \u001b[43m \u001b[49m\u001b[43mtitle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtitle\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 21\u001b[0m \u001b[43m \u001b[49m\u001b[43mfigsize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m12\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m8\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 22\u001b[0m \u001b[43m \u001b[49m\u001b[43mlegend\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mlower right\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 23\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 25\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m container \u001b[38;5;129;01min\u001b[39;00m g\u001b[38;5;241m.\u001b[39mcontainers:\n\u001b[1;32m 26\u001b[0m g\u001b[38;5;241m.\u001b[39mbar_label(container, fmt\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%.1f\u001b[39;00m\u001b[38;5;132;01m%%\u001b[39;00m\u001b[38;5;124m'\u001b[39m, padding\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m)\n", - "File \u001b[0;32m~/.pyenv/versions/3.8.16/lib/python3.8/site-packages/pandas/plotting/_core.py:1217\u001b[0m, in \u001b[0;36mPlotAccessor.barh\u001b[0;34m(self, x, y, **kwargs)\u001b[0m\n\u001b[1;32m 1133\u001b[0m \u001b[38;5;129m@Appender\u001b[39m(\n\u001b[1;32m 1134\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1135\u001b[0m \u001b[38;5;124;03m See Also\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1206\u001b[0m \u001b[38;5;129m@Appender\u001b[39m(_bar_or_line_doc)\n\u001b[1;32m 1207\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mbarh\u001b[39m(\u001b[38;5;28mself\u001b[39m, x\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, y\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 1208\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1209\u001b[0m \u001b[38;5;124;03m Make a horizontal bar plot.\u001b[39;00m\n\u001b[1;32m 1210\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1215\u001b[0m \u001b[38;5;124;03m other axis represents a measured value.\u001b[39;00m\n\u001b[1;32m 1216\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 1217\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkind\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mbarh\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/.pyenv/versions/3.8.16/lib/python3.8/site-packages/pandas/plotting/_core.py:972\u001b[0m, in \u001b[0;36mPlotAccessor.__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 969\u001b[0m label_name \u001b[38;5;241m=\u001b[39m label_kw \u001b[38;5;129;01mor\u001b[39;00m data\u001b[38;5;241m.\u001b[39mcolumns\n\u001b[1;32m 970\u001b[0m data\u001b[38;5;241m.\u001b[39mcolumns \u001b[38;5;241m=\u001b[39m label_name\n\u001b[0;32m--> 972\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mplot_backend\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkind\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkind\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/.pyenv/versions/3.8.16/lib/python3.8/site-packages/pandas/plotting/_matplotlib/__init__.py:71\u001b[0m, in \u001b[0;36mplot\u001b[0;34m(data, kind, **kwargs)\u001b[0m\n\u001b[1;32m 69\u001b[0m kwargs[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124max\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(ax, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mleft_ax\u001b[39m\u001b[38;5;124m\"\u001b[39m, ax)\n\u001b[1;32m 70\u001b[0m plot_obj \u001b[38;5;241m=\u001b[39m PLOT_CLASSES[kind](data, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m---> 71\u001b[0m \u001b[43mplot_obj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 72\u001b[0m plot_obj\u001b[38;5;241m.\u001b[39mdraw()\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m plot_obj\u001b[38;5;241m.\u001b[39mresult\n", - "File \u001b[0;32m~/.pyenv/versions/3.8.16/lib/python3.8/site-packages/pandas/plotting/_matplotlib/core.py:336\u001b[0m, in \u001b[0;36mMPLPlot.generate\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 334\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m ax \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxes:\n\u001b[1;32m 335\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_post_plot_logic_common(ax, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata)\n\u001b[0;32m--> 336\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_post_plot_logic\u001b[49m\u001b[43m(\u001b[49m\u001b[43max\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/.pyenv/versions/3.8.16/lib/python3.8/site-packages/pandas/plotting/_matplotlib/core.py:1577\u001b[0m, in \u001b[0;36mBarPlot._post_plot_logic\u001b[0;34m(self, ax, data)\u001b[0m\n\u001b[1;32m 1574\u001b[0m str_index \u001b[38;5;241m=\u001b[39m [pprint_thing(key) \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(data\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m])]\n\u001b[1;32m 1575\u001b[0m name \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_index_name()\n\u001b[0;32m-> 1577\u001b[0m s_edge \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43max_pos\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m0.25\u001b[39m \u001b[38;5;241m+\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlim_offset\n\u001b[1;32m 1578\u001b[0m e_edge \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39max_pos[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m] \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m0.25\u001b[39m \u001b[38;5;241m+\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbar_width \u001b[38;5;241m+\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlim_offset\n\u001b[1;32m 1580\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_decorate_ticks(ax, name, str_index, s_edge, e_edge)\n", - "\u001b[0;31mIndexError\u001b[0m: index 0 is out of bounds for axis 0 with size 0" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+kAAAKrCAYAAACN2sysAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUMElEQVR4nO3dd5RV9bk//veADE2KhfbVWKIBFKUpIGYURWNyNRo13miiMbErUSxo1EgMKHZsWGIDS2yJPcYakxtLbgQpV703qFcRo1cpEYEoMAPM+f3h4vwcGRRwkC28XmvNAj77s/d+9jkPLN5nl1NRKpVKAQAAAFa7Rqu7AAAAAOBjQjoAAAAUhJAOAAAABSGkAwAAQEEI6QAAAFAQQjoAAAAUhJAOAAAABSGkAwAAQEEI6QAAAFAQQjrAWu7ll1/Oaaedll122SXdu3fP7rvvnl/+8pd5++2368zr0qVLrrrqqtVU5YpZtGhRzjjjjPTq1Su9e/fO888/X2f566+/ni5duuQ3v/nNUusec8wx6dKlS2644Yallh177LHZfffdv3B9X+Zr+c4776RLly65//77G3zbZ5xxRgYOHLjM5QMHDswZZ5yxzD8XSUO8Tvfff3+6dOmy1E/37t0zcODAnHPOOfnwww8bsGoA1kTrrO4CAFh97rjjjpx//vnp169fhgwZkvbt2+ett97K6NGj8+STT+bWW29N165dV3eZK+zZZ5/NAw88kEGDBmXHHXfM1ltvXWf5lltumXbt2mXSpEn58Y9/XB6vqanJuHHj0rZt2zz77LM5+uijy8tqa2szceLE/Nu//duXdhxrmquvvjrrrrvu6i6jXu3bt89vf/vbbLLJJl94W1dffXXatWtX/vOcOXPy7LPP5je/+U1mzZqVK6644gvvA4A1l5AOsJaaMGFCzjvvvBx88ME566yzyuP9+vXL7rvvnn333Te/+MUvVskZ2FVt9uzZSZL9998/X/va1+qds8MOO2T8+PF1xiZMmJB58+bl2GOPzVVXXZWPPvooLVu2TJK89tprmTNnTr75zW+u0trXZJ/+sKRIKisr07NnzwbZ1lZbbZWNN964ztiAAQPy/vvv57HHHqvTVwDwaS53B1hLjR49Oq1atcopp5yy1LL1118/Z5xxRnbbbbfMmzev3vVfeeWVHH/88dlhhx3SrVu37LTTThkxYkQWLFhQnvPXv/41P/jBD9KrV6/06dMnxx13XN54443y8n/84x859thj069fv/To0SMHHnhgnn766c+se/Hixbnjjjuy9957p3v37tlll10ycuTIVFdXJ/n4Euwll1Tvvvvudc6Uf9KOO+6Y9957L++991557Jlnnknnzp2zzz77ZOHChXUukx8/fnwaN26cHXbYYbnqWFLLT37yk/zqV79K7969s+eee2bx4sVL1TJq1KhstdVWeeCBB+rs75BDDkmPHj3St2/fnH766Zk1a1Z5+f3335+tt94699xzT775zW+mb9++ef3115f5uk2fPj3HHHNMunfvngEDBmTUqFHlWi666KJ07949//rXv+qsc+2112a77bbL/Pnzl7ndFfHpy93/8Ic/ZJ999kn37t2zww475NRTT8306dPrzL/88stz/vnnp0+fPunXr19+/vOflz+EWeKee+7J/vvvn549e6Z79+753ve+l8cee6y8fMlr9eKLL+bAAw/Mtttum1133TWjR48uz6nvcvcpU6bk+OOPT9++fdOnT58cc8wxdfp3RbVq1SoVFRWpqKgoj33e+1xbW5vLL788AwcOzDbbbJOBAwfm0ksvzcKFC+vU/cgjj+TYY49Njx49sssuu+Saa65JbW1teTvL268//elPc9999+Xb3/52ttlmm3zve9/LM888s9z1JEl1dXUuvvjiDBgwINtss0323nvvPProoyv9ugGsbZxJB1gLlUqlPPfccxk4cGCaN29e75w999xzmevPmDEjBx98cHr27JkLL7wwlZWVeeaZZ3LzzTenffv2Ofroo/P2229n0KBB+f73v59TTjklc+fOzWWXXZajjz46f/zjH5N8fP93+/btc/HFF2edddbJbbfdluOOOy6PPfZYNt1003r3ffbZZ+ehhx7KUUcdle233z5///vfc80112Ty5Mm56aabMmjQoHTs2DG//vWvc/XVV2fzzTevdzv9+/dPkkycODF77bVXkuS5555LVVVVOnXqlC222CLPPvtsdttttyTJCy+8kG233TatW7derjqWBLHx48enadOmueaaazJv3rw0bty4Th2jR4/OtddemxEjRmS//fYr7+uwww7LDjvskCuuuCJz5szJlVdemUMPPTT33ntvmjVrluTj4DVmzJicd955+eCDD7LFFlss8z276qqrsu++++aaa67JpEmTct111+XDDz/ML37xixxwwAEZM2ZMHn/88fz7v/97eZ2HHnooe+655zJ7ZIlFixZ95vL6TJgwIT//+c8zaNCg9OnTJ9OmTcsll1ySIUOG5Pbbby/Pu/POO7PpppvmggsuyKxZs3LppZfmrbfeyt13352KiorccccdGTFiRE444YRst912mTNnTm688caceuqp6dWrVzp27Jjk43B50kkn5ac//WlOOumk3Hvvvbn44ovTuXPn7LTTTkvVN3369Bx44IHp0KFDhg0blhYtWuSqq67KT37yk/zhD39I27Ztl3lstbW15dekVCpl7ty5+Y//+I888MAD+da3vpUWLVokWb73+cYbb8xdd92V008/PV/72tfy4osv5vLLL0+TJk0yePDg8j6HDRuWAQMG5KqrrsqECRNy9dVXZ968eTnttNOSLH+//vd//3dmzJiRwYMHZ911182VV16ZE044Ic8880zatGnzufWUSqX87Gc/y8SJEzN48OBsscUW+eMf/5iTTz45NTU12XfffVe4VwDWNkI6wFrogw8+SHV19VKX5C6v1157LVtttVWuvPLK8j3GO+64Y/76179m7NixOfroo/PSSy9lwYIFOeaYY9KhQ4ckSceOHfOnP/0p8+bNy/z58zNlypQMGjQoAwYMSJJ07949V199dWpqaurd7+uvv5577703Q4YMKd8v/s1vfjPt27fPz3/+8zzzzDMZMGBA+b7i+i47XqJTp07ZbLPNyiF9+vTpee2118pner/5zW/mP/7jP8rzJ0yYUA6wy1tH8nGAPeecc8ph8ZPuuuuuXHLJJTnnnHNywAEHlMcvvfTSbL755rn++uvLob5Hjx7Za6+9ct999+Xggw8uzz322GOzyy67LPO9WmKnnXbK+eefX/79hx9+mDvvvDODBg3KFltskV69euWhhx4qH+PEiRMzderUXHjhhZ+53f/7v/9Lt27dPnf/nzZhwoQ0a9YsRx99dCorK5Mkbdu2zcsvv5xSqVQOjY0aNcrNN9+cVq1aJfn4Ko+f/exnefbZZ7Pzzjvn7bffzhFHHJFBgwaVt73RRhtl//33z4QJE8ofwJRKpQwaNKh8fNttt13++Mc/5i9/+Uu9If2WW25JTU1Nbr755vL95V27ds0Pf/jDvPjii+X3tz7f+ta3lhrbcMMN86Mf/ahOsF6e93ncuHHZZptt8v3vfz9J0rdv3zRv3rz8eizRrVu3jBw5Mkmy8847Z968ebn11ltz3HHHZdq0acvdr//6179y//33l/8OtWjRIoccckief/75fPvb3/7cev7zP/8zzz77bC6//PLyB3077bRT5s+fn5EjR+a73/1u1lnHfz8BPovL3QHWQksCQX2XXi+Pqqqq3H777WnatGlef/31/OlPf8qvf/3rzJo1qxywe/TokaZNm+aAAw7Ieeedl2effTZdu3bNySefnHXXXTcbbrhhttxyy/zyl7/M6aefnocffji1tbU588wz841vfKPe/Y4bNy5JysFrib322iuNGzfO2LFjV+g4+vfvn4kTJyb5+Cx6s2bNsv3225eP8e23387bb7+dqVOnZubMmeX70VekjrZt29Yb0P/jP/4jw4cPz/bbb58f/OAH5fH58+eXQ2CpVMqiRYuyaNGifO1rX8sWW2yRv/71r3W2s9VWWy3XsX76gXd77LFHFi5cmBdffDFJ8v3vfz/jx4/P//3f/yVJHnjggWy++ebp1avXZ263Xbt2uffee+v9+eTD0z6tT58+mT9/fr773e/m0ksvzfjx41NVVZXjjz++zuXgAwcOrBNIBw4cmHXWWScvvPBCko8v0T711FMzd+7c/Nd//Vceeuih3HHHHUmy1Ic9nzyWysrKrL/++su8nWPChAnp2bNnnWPo2LFj/uM//uMzA3qS/PrXv869996bu+66K//+7/9ePst85plnlu9FX973uV+/fvnrX/+aH/3oR7npppvy+uuv55BDDsn3vve9Ovv89Bnqb3/721m4cGEmTZq0Qv26/vrr13l43pLeXXLLw+fV87e//S0VFRUZMGBA+ZgWLVqUgQMHZubMmfnf//3fz3ztAHAmHWCt1KZNm7Rs2TLvvvvuMufMmzcvCxcuTJs2bZZaVltbm8suuyx33HFH5s2bl06dOqV79+5p2rRpec7GG2+c22+/PTfccEPuvffe3HbbbWndunV+9KMf5aSTTkpFRUXGjBmTX//61/njH/+YBx98ME2aNMnuu++e4cOH17vfOXPmJMlS4W+dddbJeuutt9Q91Z+nf//++d3vfpePPvoozz77bPr06VM+hr59+6ZJkyZ5/vnnU1FRkZYtW5YfLLYidSzrAWH/8z//k1122SV/+ctf8uc//7n8VWZz585NbW1tbrzxxtx4441LrffJ1zhJ+dLpz/PpWtdff/06x7Lnnnvm/PPPz0MPPZQjjjgijz32WJ2n2y9LZWVltt1222UuW5ZevXrlhhtuyC233JKbb745N9xwQzbccMMce+yxdZ4jsOQqjCUaNWqU9dZbr1z3P/7xj5x99tn529/+liZNmuTrX/96+RsJSqVSnXWX3CbwyW19es4Ss2fPXukrTTp37lxet3fv3lm0aFHOPvvsrLvuuuWgvLzv85FHHpmWLVvmvvvuy8iRI3PJJZfkG9/4RoYOHVp+PkKy9Ov0yfd3Rfr107c2LPnAZMn97Z9Xz+zZs1MqldK7d+96X5sZM2Ys9wdLAGsrIR1gLVVVVZWxY8emurp6qeCXJL/73e9y0UUX5d57713qcuYl4Wr48OHZY489ymc6P3nJdlL38vUJEybkt7/9ba677rp07do1//Zv/1a+3/dXv/pVXnnllTz++OO58cYbs9566+VXv/rVUjUtCe4zZ87MRhttVB5fuHBhPvjgg6y33nor9Br069cvpVIpL730Up5//vkce+yx5WXNmzdP7969M2HChJRKpfTt27d8mW5D1HHggQdm+PDh+eEPf5jhw4enb9++WXfdddOyZctUVFTkpz/96VJnPpfUtTKWBLUl/vnPfyZJNthggyQff5jwne98J4899lg6d+6cefPmLXW2tqHttNNO5Uuhn3/++dx2220ZMWJEevToke7duyf5+NaMT1q8eHE++OCDrL/++qmtrc3RRx+dJk2a5N57781WW22VddZZJ6+//noeeuihL1Rbq1at6jzAbYm//e1v2XjjjZf5rQH1GTp0aP76179m2LBh6devXzbccMPlfp8bNWqUgw8+OAcffHDef//9PP3007nuuutywgkn1Lmq4tOv0/vvv5/k4/d37ty5SRrm783n1dOqVau0aNEit912W73rL+tZEwD8/1zuDrCWOvzwwzN79ux6v7N55syZGTNmTLbccst67zeeMGFCttxyy3z/+98vB/Ql93QvOeN2yy23ZNddd01NTU0qKyvTv3//nHvuuUmSd999N5MmTcqOO+6Yl156KRUVFdlqq61y8sknp3Pnzss8w9+3b98kySOPPFJn/JFHHsnixYuz3XbbrdBr0LZt22y11VZ58MEH88EHHyx1b3JVVVUmT56cSZMm1fnqtYaoo127dqmoqMiwYcPyz3/+M5deemmSZN11183WW2+dKVOmZNttty3/fOMb38hVV121wpf0L/GXv/xlqVqbN2+eHj16lMcOOOCAvPbaa7n11luz4447LnV2tiFddNFF+f73v59SqZTmzZtn1113zemnn54kdd7/Z555ps5l63/605+yaNGi9O/fPx988EHefPPNHHDAAdl2223LH6IseRr5J59uvqK23377vPjii3WC+vvvv58jjzzyc7+B4NPWXXfdnHnmmZk7d+4Kv88HHXRQRowYkeTjwL3//vvn4IMPzty5c/Phhx+W9/HUU0/V2ecTTzxRfn8b8u/N59XTt2/fzJs3L6VSqc5xvfbaa7nmmmtW6iGDAGsbZ9IB1lI9e/bMiSeemCuuuCJvvPFG9t1336y33nr53//934wePTrV1dX1Bvjk4zPk1157bW644Yb07Nkzb731Vq6//vrU1NSU713dYYcdMnLkyPzsZz/LIYccksaNG+fuu+9OZWVldt1112y00UZp1qxZfv7zn+eEE07IhhtumP/8z//M5MmTc+ihh9a73y233DL77bdfRo0alfnz56dPnz6ZPHlyrr766vTr16/eB4B9nv79++fWW28tP9H9k775zW/myiuvzKJFi+qE9Iaso2vXrvnJT36SMWPGZO+9907v3r1zyimn5Oijj86QIUOyzz77lJ/i/uKLL9Z5QNqKePLJJ9OhQ4fsuOOOee655/Lb3/42J554YvnBf8nHD1PbfPPNM27cuFx++eUrtZ/ltcMOO+Tmm2/OGWecUf7Ku5tuuilt27atcxn3e++9l+OOOy6HHnpo3nvvvVx22WXZaaed0q9fvyQfPyTujjvuSMeOHdO6des8++yz5bO4X+Sr437605/mwQcfzJFHHpljjjkmTZo0ya9//et07Ngxe++99wpvb88998ydd96ZBx54ID/84Q/TvXv35Xqf+/TpkzFjxmTDDTdMr169Mn369Nx8883p27dvnXvqH3vssWywwQYZMGBAxo0blzvuuCMnn3xyWrRo0aD9+nn1DBgwIH369MmgQYPKDyV86aWXMmrUqOy0007ly/ABWDYhHWAtdtxxx2XrrbfOHXfckfPPPz9z5sxJp06dsssuu+TYY49Np06d6l3vmGOOyQcffJDbbrst11xzTTp16pTvfe97qaioyPXXX5+5c+ema9euue6663LNNdfklFNOyeLFi7PNNttkzJgx+frXv54kGTNmTC699NKcd955mTt3bjbbbLOcc8452X///ZdZ83nnnZdNN9009913X2688ca0b98+hx56aAYNGpRGjVb8ArH+/fvnpptuSlVV1VLLtt5667Ru3TpNmzYt17wq6jjhhBPy+OOPZ+jQoXnwwQdTVVWV0aNH5+qrr87gwYPTpEmTdOvWLTfffHP5vvgVddZZZ+WRRx7JLbfcknbt2uUXv/hFvR+G7LLLLpk1a1Z23333ldrP8howYEBGjhyZMWPGlB8Wt9122+W2226r8/Vme+21V1q3bp2TTjopLVq0yH777ZeTTz65vPzaa6/NeeedlzPOOCOVlZXZcsst8+tf/zrnn39+xo8fX+f+9hXRqVOn3HnnnbnkkkvK2+7Xr18uv/zyep+XsDyGDh2a/fffP+ecc07uueee5XqfTzzxxFRWVua+++7LNddck1atWmXgwIEZMmRInW2feOKJGTduXH7729+mU6dOOfvss/PDH/6wvLyh+vXz6mnUqFFuuOGGXHnllbn++uvz/vvvp0OHDjnssMPys5/9bKVeN4C1TUVpWU9MAQDWKqVSKXvttVeqqqryi1/8YnWXk4EDB6Zv376f+zVwa7N33nknu+22Wy644ILP/HALgK8OZ9IBYC334Ycf5pZbbsnLL7+ct99+e6XPPgMAX5yQDgBruWbNmuXuu+9ObW1tzj///BV6cjkA0LBc7g4AAAAF4SvYAAAAoCCEdAAAACgIIR0AAAAKYq18cNykSZNSKpXSpEmT1V0KAAAAa4GFCxemoqIivXr1+sx5a+WZ9FKpFM/LWzuVSqXU1NR4/yksPUrR6VGKTo9SdHp07bW8OXStPJO+5Az6tttuu5or4cs2b968TJ48OVtuuWVatGixusuBpehRik6PUnR6lKLTo2uvl19+ebnmrZVn0gEAAKCIhHQAAAAoCCEdAAAACkJIBwAAgIJYKx8cBwAAsLwWL16chQsXNsi2qqury782auSc6ZqiSZMmady4cYNsS0gHAACoR6lUyrRp0zJnzpwG+8q02trarLPOOnn33XeF9DVIRUVF2rRpk44dO6aiouILbUtIBwAAqMecOXMye/bstGvXLi1btvzC4Sv5+Kx8dXV1mjZt2mBnXlm9SqVSPvroo8ycOTPNmzdP27Ztv9D2hHQAAIBPKZVKmTFjRlq3bp0NN9ywwba7ePHiJEmzZs2E9DVI8+bNU11dnRkzZqRNmzZf6AMd11cAAAB8yuLFi7N48eK0bt16dZfCV0Tr1q3LffNFCOkAAACfsmjRoiTJOuu4+Jjls6RXlvTOyhLSAQAAlqEh7kNn7dBQvSKkAwAAfIk81Z3PojsAAABWQG3tyn8dW+PGjdO8efOVemjcyu73xz/+cc4444x6l51xxhn58Y9/nCTp0qVL7r///pXax6pw//33p0uXLqu7jC+dGywAAABWQKNGFRl5x4S8M/1fX9o+N+7QKqcevN0q3cdzzz2XVq1ardJ9rIg999wzO+200+ou40snpAMAAKygd6b/K2/835zVXUaDateu3eouoY5mzZqlWbNmq7uML53L3QEAAKhzufv777+fwYMHp1+/funevXsOOuigjBs3rjx34MCBufbaa3PEEUeke/fu+da3vpV77rmnzvbuueee7L333unevXt69uyZH/3oR3n55ZfrbGP06NE54YQT0qtXr/Tr1y8jRowoPx3905e7f/TRRzn33HNTVVWVXr165ZBDDsl///d/r8qXZLUQ0gEAAKhj2LBhqa6uzu23356HH344m2++eQYNGpR58+aV51x77bXp1atXHnzwwRx88ME5++yz8+ijjyZJ/vjHP+acc87JkUcemcceeyy33HJLqqurM3To0Dr7ufLKK9OnT5/8/ve/z89//vPcfvvt+cMf/lBvTSeddFKeeeaZXHDBBXnwwQfzta99LYcffnjmzFmzrmhwuTsAAMAa7uGHH84TTzyx1HhNTU169+691Pg//vGPdO7cOV/72tfSrFmznHXWWdl7773rPPCuqqoqxx9/fJLk61//el588cXceuut2XPPPdO2bducd9552WeffZIkG220UQ444ICcc845dfZTVVWVQw89NEnyta99Lb/5zW8yceLE7LvvvnXmTZkyJc8880xGjx6dqqqqJB9/kNC6det88MEHadOmzcq/OAUjpAMAAKzhBg4cmFNPPXWp8ZEjR2b27NlLjR9//PE57bTT8sQTT2S77bZLVVVVvvvd76Zp06blOf369auzTq9evfKXv/wlSdKnT5+88cYbueaaazJlypS89dZbefXVV1NbW1tnnS222KLOn1u1apWFCxcuVc9rr72WJOnZs2d5rGnTpjnzzDM/87i/ilzuDgAAsIZr2bJlNt1006V+WrZsWe/8b33rW3n22Wdz4YUXZqONNsrNN9+c73znO/nf//3f8px11ql7zre2trb8HfAPP/xw9tlnn7z99tvp3bt3Tj/99Hq/Bq6ysnKpsVJp6a+a+/S+1mRCOgAAAGU1NTW54IIL8vbbb2fPPffMiBEj8tRTT6VRo0blM+VJ6jwELkkmTpyYrbfeOklyww035IADDsiFF16Ygw8+OH369Mnbb7+dpP4Q/nmWnHH/5D4XLVqUgQMH5vHHH1/h7RXZ2vNxBAAAAJ+rsrIyL7/8csaPH59f/vKX2XDDDfPMM89k3rx56dWrV3neI488kh49euSb3/xmnnrqqfzxj3/MddddlyTp1KlTJk6cmP/5n/9Jq1at8uc//zm33357ko8/BPjkZfPLY/PNN88ee+yR4cOHZ9iwYenQoUNuuOGGVFdXp2/fvg138AUgpAMAAKygjTu0WqP3d/nll+eCCy7Icccdl3/961/5+te/npEjR2b77bcvz9lvv/3yxz/+MRdeeGE222yzXHHFFRkwYECS5Je//GXOPvvsHHLIIamsrEzXrl1z8cUX5+STT87LL79cZzvL6/zzz8/FF1+cE088MTU1NenRo0dGjx6d9ddfv8GOuwgqSitzrcFX3JJLJLbddtvVXAlftnnz5mXy5MnZaqut0qJFi9VdDixFj1J0epSi06M0lAULFuTNN9/M5ptvnmbNmtVZVltbSqNGFV96Tatrv/UZOHBg9ttvv5xwwgmru5TC+KyeSZY/h7onHQAAYAV8kaC8ePHizJ8/P4sXL/5S98tXh5AOAADwJfr015DBJ7knHQAAgBXy5z//eXWXsMZyJh0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAvkSNGolhLJvuAAAAWAG1taWVXrdx48Zp3rx5Gjdu/KXtd+DAgRk4cGA+/PDDpZadccYZ+fGPf7zc2yqVSnnggQfy/vvvf+b+rrrqqnqX/fjHP84ZZ5yRJHnnnXfSpUuXjB07drn3v6pdddVVGThw4GqtYZ3VuncAAICvmEaNKjLyjgl5Z/q/vrR9btyhVU49eLuVXv///u//cvHFF+ecc875QnW88MILOeOMM/KnP/3pC20nSTp16pTnnnsubdq0+cLbaiiHH354Dj744NVag5AOAACwgt6Z/q+88X9zVncZy+1rX/tafvvb3+Y73/lOdtxxx5XeTqm08lcRfFrjxo3Trl27BtteQ2jZsmVatmy5WmtwuTsAAMAabp999kn//v1z1lln1XvZ+xKzZ8/O8OHDM2DAgHTv3j0HHXRQ+XL0sWPH5tBDD02S7Lbbbrn//vu/UE2fvtx96tSpOeKII7LddtulV69eOeKII/Lqq6+W53fp0iV33HFHfvCDH2TbbbfN3nvvXeeMfm1tba6//vp8+9vfzjbbbJPevXvnyCOPzD/+8Y8627j33nvz05/+NN27d09VVVWuvvrq8vJPX+7+z3/+Mz//+c/Tr1+/bLfddjnmmGPy1ltvfaHj/jxCOgAAwBquoqIi5513XubMmZOLLrqo3jmLFy/O4YcfnvHjx+eSSy7J/fffn86dO+eII47ISy+9lF69epXvNb/nnnuy5557NmiNp5xySjp06JD77rsv99xzTxo1apTjjz++zpyRI0fme9/7Xh566KEMGDAgxx9/fCZOnJgkue222zJ69OicccYZeeKJJ3LNNddk6tSpufDCC+ts46KLLsp+++2XRx55JIccckiuuuqqvPDCC0vVs2jRohx++OF5/fXXc+211+Z3v/tdamtrc+SRR2bx4sUNeuyf5HJ3AACAtcBGG22U008/PWeffXa+/e1vp6qqqs7y5557Lv/zP/+Thx9+OJ07d06SDB8+PC+//HJGjx6dK6+8snz/+Prrr59mzZotc1/XX399xowZs9T4ggULstFGG9W7zj/+8Y/suOOO2WijjdKkSZOcf/75mTJlSmpra8tPxN9///3L94yfeuqpGTduXG6//fb07t07m2yySS666KLsuuuu5eP9zne+k8cff7zOfvbdd99873vfS5Ice+yxGT16dCZOnJg+ffrUmfe3v/0tr776ah5//PFsvvnmSZIRI0bklltuyZw5c7L++usv8/i/CCEdAABgLXHggQfmiSeeyNChQ/OHP/yhzrLXXnstrVq1Kgf05OMz8Ntvv32ee+65FdrPQQcdVO9T40899dRlrnPyySfn/PPPz5133pm+fftmp512yne/+906X1nXr1+/Ouv06tUrf/3rX5N8/FT5F198MVdeeWXefPPNvPnmm3n99dfToUOHOutsscUWdf7cqlWrLFy4cKl6XnvttbRp06Yc0JOkQ4cOOf300z/jyL84l7sDAACsRUaMGJF//etfueCCC+qML+uhcKVSKeuss2Lnd9u0aZNNN910qZ/POvt+8MEH55lnnsnQoUPTqlWrjBo1KnvttVf++c9/lud8uo7FixeXQ/wNN9yQQw89NB988EH69++f4cOH5/DDD19qP5WVlfUe46et6DE3FCEdAABgLfL//t//yxlnnJF7770348ePL4936dIl//rXv/Laa6+Vx0qlUiZMmJAtt9wyycdn1leF999/P+ecc04WLlyY/fffP5dcckl+//vfZ+bMmRk3blx53ssvv1xnvUmTJqVbt25Jkuuuuy4/+9nPMmzYsBx44IHp2bNnpk6dutJPpN9yyy0zZ86cOg+KmzVrVvr165f/+q//WqltLg+XuwMAAKygjTu0+krv79///d/z+OOP57nnnkunTp2SJFVVVdlqq60yZMiQ/PKXv8wGG2yQ22+/Pa+99lp+9atfJUlatGiRJHnllVey3nrrNdjXlbVp0yZ/+ctf8o9//CNDhgzJuuuum/vvvz9NmjTJNttsU55366235utf/3q22Wab/O53v8urr76a8847L8nH37v+17/+NQMHDkyjRo3y0EMP5cknn8yGG264UjX1798/22yzTU4//fT84he/SPPmzXPxxRdn/fXXL38wsCoI6QAAACugtraUUw/ebrXst1GjhjuTPWLEiOy9997lPzdu3DhjxozJRRddlOOPPz41NTXZZpttcsstt6Rnz55Jks6dO2fAgAE56aSTcsopp9R7OfnKWGeddXLjjTfmoosuyk9/+tPMnz8/W221VW644YZssskm5XkHHXRQbrnllrz22mvp2rVrRo8ena5duyZJLr744pxzzjn5/ve/n5YtW6ZHjx4ZPnx4hg0blnfffTf/7//9vxWqqVGjRrn22mtzwQUX5LDDDktFRUV22GGH3HTTTWnSpEmDHHd9KkoN+W30XxFLLpHYdtttV3MlfNnmzZuXyZMnZ6uttip/CghFokcpOj1K0elRGsqCBQvy5ptvZvPNN//M+6hX1OLFi1NTU5PKyso0bty4wba7NujSpUsuuOCC7L///qu7lHp9Xs8sbw51TzoAAMCXqLa2dnWXQIEJ6QAAAFAQ7kkHAACg8F599dXVXcKXwpl0AAAAKAghHQAAYBnWwudss5IaqleEdAAAgE9Z8hVb8+bNW82V8FWxpFe+6NezuScdAADgUxo3bpy2bdtmxowZSZIWLVqkouKLf0f54sWLU11dXd4HX32lUinz5s3LjBkz0rZt2y/8vgrpAAAA9ejYsWOSlIN6Q6itrc2iRYuyzjrrpFEjFzavSdq2bVvumS9CSAcAAKhHRUVFOnXqlPbt22fhwoUNss358+dnypQp2WSTTdK8efMG2SarX5MmTRrsygghHQAA4DM0bty4wQJYbW1tkqRp06Zp1qxZg2yTNYvrKwAAAKAghHQAAAAoCCEdAAAACkJIBwAAgIIQ0gEAAKAghHQAAAAoCCEdAAAACkJIBwAAgIIQ0gEAAKAghHQAAAAoCCEdAAAACkJIBwAAgIIQ0gEAAKAghHQAAAAoCCEdAAAACkJIBwAAgIIQ0gEAAKAghHQAAAAoCCEdAAAACkJIBwAAgIIQ0gEAAKAgVklIr62tzahRo7LTTjulZ8+eOeqoo/L2228vc/4HH3yQIUOGpE+fPunbt2+GDx+e+fPn1zu3pqYme++9d84444xVUToAAACsNqskpF977bW58847c+655+buu+9ObW1tjjzyyNTU1NQ7f/DgwXnrrbdyyy235Morr8zTTz+dYcOG1Tv34osvzmuvvbYqygYAAIDVqsFDek1NTcaMGZPBgwdnl112SdeuXXP55Zdn2rRpefLJJ5eaP2nSpIwbNy4XXXRRunXrlv79++ecc87JQw89lOnTp9eZ++yzz+axxx7LN77xjYYuGwAAAFa7Bg/pr7zySj766KP079+/PNa6detsvfXWeeGFF5aaP378+LRr1y5bbLFFeaxv376pqKjIhAkTymOzZs3KmWeemXPPPTfrrbdeQ5cNAAAAq906Db3BadOmJUk6depUZ7x9+/blZZ80ffr0peZWVlambdu2ee+998pjZ511VnbdddcMHDgwN9988xeus1QqZd68eV94O3y1LHnWwbKeeQCrmx6l6PQoRadHKTo9uvYqlUqpqKj43HkNHtKXNFtlZWWd8aZNm2bOnDn1zv/03CXzq6urkyR333133njjjVx66aUNVufChQszefLkBtseXy1Tp05d3SXAZ9KjFJ0epej0KEWnR9dO9WXfT2vwkN6sWbMkH9+bvuT3SVJdXZ3mzZvXO7++B8pVV1enRYsWmTJlSi655JKMHj06LVq0aLA6mzRpki233LLBtsdXw/z58zN16tRsttlm9fYjrG56lKLToxSdHqXo9Oja6/XXX1+ueQ0e0pdcuj5jxoxssskm5fEZM2akS5cuS83v2LFjnnrqqTpjNTU1mT17dtq3b59HH300H330UQ477LDy8gULFmTixIl54oknMmnSpJWqs6KiokFDP18tzZs39/5TaHqUotOjFJ0epej06NpneS51T1ZBSO/atWvWXXfdjB07thzS586dm7///e855JBDlprfp0+fjBw5Mm+99VY23XTTJMm4ceOSJNttt1123HHH7L333nXWOfXUU9OxY8eceuqpDV0+AAAArDYNHtIrKytzyCGHZOTIkVl//fWz0UYb5ZJLLknHjh2zxx57ZPHixZk1a1ZatWqVZs2apUePHundu3dOPvnkDBs2LPPmzcvZZ5+dfffdNx06dEiStG3bts4+mjVrlpYtW5ZDPQAAAKwJGvwr2JJk8ODBOeCAAzJ06ND88Ic/TOPGjTN69Og0adIk7733XqqqqvLoo48m+fiU/9VXX52NN944P/nJT3LSSSdl5513zrBhw1ZFaQAAAFBYDX4mPUkaN26c0047LaeddtpSyzbeeOO8+uqrdcY22GCDjBo1arm3/5vf/OYL1wgAAABFs0rOpAMAAAArTkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACiIVRLSa2trM2rUqOy0007p2bNnjjrqqLz99tvLnP/BBx9kyJAh6dOnT/r27Zvhw4dn/vz5dbZ300035dvf/nZ69uyZvfbaK/fcc8+qKB0AAABWm1US0q+99trceeedOffcc3P33XentrY2Rx55ZGpqauqdP3jw4Lz11lu55ZZbcuWVV+bpp5/OsGHDysuvv/76XH/99TnxxBPz+9//PoceemiGDRuWBx98cFWUDwAAAKtFg4f0mpqajBkzJoMHD84uu+ySrl275vLLL8+0adPy5JNPLjV/0qRJGTduXC666KJ069Yt/fv3zznnnJOHHnoo06dPT5LcddddOfzww7Pnnntmk002yYEHHpjvfe97zqYDAACwRmnwkP7KK6/ko48+Sv/+/ctjrVu3ztZbb50XXnhhqfnjx49Pu3btssUWW5TH+vbtm4qKikyYMCG1tbW56KKLst9++9UtvFGjzJ07t6HLBwAAgNVmnYbe4LRp05IknTp1qjPevn378rJPmj59+lJzKysr07Zt27z33ntp1KhRncCfJO+++24eeeSRHHTQQStdZ6lUyrx581Z6fb6aljzr4JPPPIAi0aMUnR6l6PQoRadH116lUikVFRWfO6/BQ/qSZqusrKwz3rRp08yZM6fe+Z+eu2R+dXX1UuP//Oc/c9RRR2WDDTbIcccdt9J1Lly4MJMnT17p9flqmzp16uouAT6THqXo9ChFp0cpOj26dqov+35ag4f0Zs2aJfn43vQlv0+S6urqNG/evN759T1Qrrq6Oi1atKgzNmXKlBx99NFZvHhxbrvttrRu3Xql62zSpEm23HLLlV6fr6b58+dn6tSp2WyzzertR1jd9ChFp0cpOj1K0enRtdfrr7++XPMaPKQvuXR9xowZ2WSTTcrj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adGiRWbMmFFnzowZM9KhQ4eVrrOioiItWrRY6fX5amvevLn3n0LToxSdHqXo9ChFp0fXPstzqXuyCh4c17Vr16y77roZO3ZseWzu3Ln5+9//nj59+iw1v0+fPpk2bVreeuut8ti4ceOSJNttt10qKirSu3fv8tgSY8eOzfbbb9/Q5QMAAMBq0+Bn0isrK3PIIYdk5MiRWX/99bPRRhvlkksuSceOHbPHHntk8eLFmTVrVlq1apVmzZqlR48e6d27d04++eQMGzYs8+bNy9lnn5199923fKb8sMMOy9FHH52tt946O++8c+67775Mnjw55513XkOXDwAAAKtNg59JT5LBgwfngAMOyNChQ/PDH/4wjRs3zujRo9OkSZO89957qaqqyqOPPprk41P+V199dTbeeOP85Cc/yUknnZSdd945w4YNK2+vqqoq559/fu66667st99+ef7553PdddfV+do2AAAA+Kpr8DPpSdK4ceOcdtppOe2005ZatvHGG+fVV1+tM7bBBhtk1KhRn7nNfffdN/vuu29DlgkAAACFskrOpAMAAAArTkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACiIBg/p1dXVGT58ePr3759evXplyJAhmTVr1meu88477+SYY45J7969U1VVlSuuuCKLFy8uL1+wYEEuvfTSDBw4ML169cr++++fP/3pTw1dOgAAAKxWDR7Shw0blueeey5XXXVVbr311kyZMiWDBw9e5vyFCxfmiCOOSJLcfffdGTZsWO66665cc8015TkjRozIww8/nF/96ld58MEHs/vuu+f444/P2LFjG7p8AAAAWG3WaciNTZ8+PQ8++GCuu+66bL/99kmSyy67LN/5zncyadKk9OrVa6l1nnjiibz77rv53e9+lzZt2qRz5855//33c/HFF+fYY4/N4sWL8+CDD+b888/PgAEDkiSDBg3K2LFjc99996Vfv34NeQgAAACw2jTomfQJEyYkSXbYYYfy2Oabb54OHTrkhRdeqHed8ePHp1u3bmnTpk15bIcddsiHH36YyZMnp6KiItddd1123nnnuoU3apS5c+c2ZPkAAACwWjX4mfT11lsvTZs2rTPevn37TJs2rd51pk2blo4dOy41P0nee++99OjRI1VVVXWWv/TSS3n++eczdOjQla61VCpl3rx5K70+X03z58+v8ysUjR6l6PQoRadHKTo9uvYqlUqpqKj43HkrFNLfeeed7LbbbstcfuKJJ6aysnKp8aZNm6a6urredRYsWJDWrVsvNT9JvetMmTIlP/vZz9K9e/f84Ac/WJHy61i4cGEmT5680uvz1TZ16tTVXQJ8Jj1K0elRik6PUnR6dO1UX17+tBUK6R06dMijjz66zOVPP/10ampqlhqvrq5O8+bN612nWbNmS62zJJy3aNGizvjEiRMzaNCgdOzYMdddd12aNGmyIuXX0aRJk2y55ZYrvT5fTfPnz8/UqVOz2WabLbMnYXXSoxSdHqXo9ChFp0fXXq+//vpyzVuhkN6kSZNsscUWy1z+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e+21ddY788wzSz/60Y9W0VGwJlsVPbrEM888U9pxxx1Le+21V+n0009fdQdB4TiTzhphwoQJSZIddtihPLb55punQ4cOeeGFF+pdZ/z48enWrVvatGlTHtthhx3y4YcfZvLkyeWxN998MyNHjswll1ySysrKVXQErOlWRY9WVFTkuuuuy84771xnvUaNGmXu3Lmr4ChY07zyyiv56KOP0r9///JY69ats/XWW9fbl+PHj0+7du2yxRZblMf69u2bioqKTJgwIbW1tZk4cWKd7SVJv379ltnn8FlWRY9edNFF2W+//eqs599NVlZD9+gSs2bNyplnnplzzz0366233qo9CApHSGeNMH369Ky33npp2rRpnfH27dtn2rRp9a4zbdq0dOzYcan5SfLee+8l+fhy4yFDhuSII45It27dVkHlrC1WRY82a9YsVVVVadu2bXn5Sy+9lOeffz477bRTwx4Aa6QlvdepU6c648vqy+nTpy81t7KyMm3bts17772XuXPnZt68efX27bL6HD5LQ/doo0aN0r9//zo9+u677+aRRx5JVVXVKjgC1nQN3aNLnHXWWdl1110zcODAVVA1RbfO6i4Alsc777yT3XbbbZnLTzzxxHrPcjdt2jTV1dX1rrNgwYK0bt16qflJyuuMGjUqTZs2zVFHHbWypbOWWF09+klTpkzJz372s3Tv3j0/+MEPVqR81lJLHlT06d5s2rRp5syZU+/8z+rjBQsWLHN7y+pz+CwN3aOf9s9//jNHHXVUNthggxx33HENVDVrk1XRo3fffXfeeOONXHrppaugYr4KhHS+Ejp06JBHH310mcuffvrpeh/OUV1dnebNm9e7TrNmzZZaZ8k/ji1atMi4ceNy11135YEHHkjjxo2/QPWsDVZHj37SxIkTM2jQoHTs2DHXXXddmjRpsqKHwFqoWbNmST5+evCS3yfL7sv6enLJ/BYtWpQ/RKqvb5fV5/BZGrpHP2nKlCk5+uijs3jx4tx2221LfSgKy6Ohe3TKlCm55JJLMnr06KV6lrWHkM5XQpMmTercu/Npr776ambPnp2ampo6n07OmDEjHTp0qHedjh07LvW0zBkzZiT5OHDdddddmTdvXvbZZ5/y8vnz5+f666/P448/nkceeeSLHBJrmNXRo0s8+eSTOfXUU9OjR49ce+21adWq1Rc5FNYiSy65nDFjRjbZZJPy+IwZM9KlS5el5nfs2DFPPfVUnbGamprMnj077du3T9u2bdOiRYtyn35ye8vqc/gsDd2jS0yYMCHHHXdcOnTokJtuukl/stIaukcfffTRfPTRRznssMPKyxcsWJCJEyfmiSeeyKRJk1bRkVAk7klnjbDddtultra2zgM33nzzzUyfPj19+vSpd50+ffrk73//ez788MPy2PPPP5+WLVuma9euOfXUU/PYY4/lwQcfLP+0b98+Bx10UG644YZVfkysWVZFjybJn//855x88snZZZddMnr0aAGdFdK1a9esu+66db6yb+7cufn73/9eb1/26dMn06ZNy1tvvVUeGzduXJKPe7yioiK9e/cujy0xduzYbL/99qvoKFiTNXSPJh8/u+PII4/MN77xjdxxxx0COl9IQ/foIYcckieeeKLO/z+32WabDBw40NcErkWEdNYIHTp0yF577ZWhQ4dm7Nixeemll3LKKaekb9++6dmzZ5KPP6WcOXNm+RKj3XffPe3atctJJ52UV155JU899VQuu+yyHH744amsrMwGG2yQTTfdtM7POuuskzZt2mSjjTZajUfLV9Gq6NE5c+bk9NNPT7du3XLWWWdlzpw5mTlzZmbOnJnZs2evvoPlK6OysjKHHHJIRo4cmT/96U955ZVXcvLJJ6djx47ZY489snjx4sycObN8r3mPHj3Su3fvnHzyyeWHFJ599tnZd999y0HnsMMOyyOPPJKbb745b7zxRi6++OJMnjw5P/nJT1bnofIV1dA9umjRopx66qnZYIMNcuGFF6a6urr87+asWbNW89HyVdTQPdq2bdul/v/ZrFmztGzZMptuuulqPlq+NKv7O+CgoXz00Uels846q7T99tuXtt9++9Ipp5xSmjVrVnn5888/X+rcuXPp+eefL49NnTq1dNhhh5W23XbbUlVVVemKK64oLV68eJn72HXXXX1POiutoXv097//falz5871/hxyyCFf+vHx1bRo0aLSxRdfXNphhx1KPXv2LB111FGlt99+u1QqlUpvv/12qXPnzqX77ruvPP+f//xn6YQTTij17Nmz1K9fv9KvfvWr0oIFC+ps84EHHih961vfKm277bal/fbbr/Sf//mfX+oxsWZpyB6dMGHCMv/d3HXXXVfL8fHVtyr+Hf2kQw45xPekr2UqSqVSaXV/UAAAAAC43B0AAAAKQ0gHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCCEdAAAACgIIR0AAAAKQkgHAACAghDSAQAAoCD+PyspWmMcnE3dAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ptbarplot2(\n", - " xdf=df[df['Class_of_worker'] !='NIU'], \n", - " col='Hispanic or Not', \n", - " gvar='OCC2010', \n", - " wvar='ASECWT', \n", - " title='Class of Worker by Hispanic Response', \n", - " ddi=ddi_codebook)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "49b95928-53ca-48c6-b516-516e252f7406", - "metadata": {}, - "outputs": [ - { - "ename": "ValueError", - "evalue": "No description found for Hispanic or Not.", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m~/.pyenv/versions/3.8.16/lib/python3.8/site-packages/ipumspy/ddi.py:325\u001b[0m, in \u001b[0;36mCodebook.get_variable_info\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 324\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 325\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m[\u001b[49m\n\u001b[1;32m 326\u001b[0m \u001b[43m \u001b[49m\u001b[43mvardesc\u001b[49m\n\u001b[1;32m 327\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mvardesc\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata_description\u001b[49m\n\u001b[1;32m 328\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mvardesc\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mid\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m==\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupper\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 329\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m:\n", - "\u001b[0;31mIndexError\u001b[0m: list index out of range", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[28], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# ptbarplot(ddi_codebook, df, 'OCC2010', 'ASECWT', color='blue')\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;66;03m# ptbarplot2(df[df['OCC2010'] !='NIU'], \u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m \u001b[43mptbarplot3\u001b[49m\u001b[43m(\u001b[49m\u001b[43mddi_codebook\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdf\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mHispanic or Not\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mOCC2010\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mASECWT\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", - "Cell \u001b[0;32mIn[26], line 28\u001b[0m, in \u001b[0;36mptbarplot3\u001b[0;34m(ddi, df, xvar, wvar, color, out)\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mptbarplot3\u001b[39m(ddi, df, xvar, wvar, color\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mblue\u001b[39m\u001b[38;5;124m\"\u001b[39m, out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[0;32m---> 28\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[43mpt\u001b[49m\u001b[43m(\u001b[49m\u001b[43mddi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mxvar\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mwvar\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 29\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 30\u001b[0m ylabel \u001b[38;5;241m=\u001b[39m ddi\u001b[38;5;241m.\u001b[39mget_variable_info(xvar)\u001b[38;5;241m.\u001b[39mlabel\u001b[38;5;241m.\u001b[39mtitle()\n", - "File \u001b[0;32m~/github/pypums/utils.py:333\u001b[0m, in \u001b[0;36mpt\u001b[0;34m(ddi, df, xvar, wvar)\u001b[0m\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpt\u001b[39m(ddi, df: pd\u001b[38;5;241m.\u001b[39mDataFrame, xvar: \u001b[38;5;28mstr\u001b[39m, wvar: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m pd\u001b[38;5;241m.\u001b[39mDataFrame:\n\u001b[1;32m 331\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ddi:\n\u001b[1;32m 332\u001b[0m codex \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mDataFrame\u001b[38;5;241m.\u001b[39mfrom_dict(\n\u001b[0;32m--> 333\u001b[0m \u001b[43mddi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_variable_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43mxvar\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mcodes, orient\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mindex\u001b[39m\u001b[38;5;124m\"\u001b[39m, columns\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcode\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 334\u001b[0m )\n\u001b[1;32m 335\u001b[0m codex\u001b[38;5;241m.\u001b[39mreset_index(inplace\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 336\u001b[0m codex\u001b[38;5;241m.\u001b[39mrename({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mindex\u001b[39m\u001b[38;5;124m\"\u001b[39m: xvar}, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m, inplace\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n", - "File \u001b[0;32m~/.pyenv/versions/3.8.16/lib/python3.8/site-packages/ipumspy/ddi.py:331\u001b[0m, in \u001b[0;36mCodebook.get_variable_info\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 325\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [\n\u001b[1;32m 326\u001b[0m vardesc\n\u001b[1;32m 327\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m vardesc \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata_description\n\u001b[1;32m 328\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m vardesc\u001b[38;5;241m.\u001b[39mid \u001b[38;5;241m==\u001b[39m name\u001b[38;5;241m.\u001b[39mupper()\n\u001b[1;32m 329\u001b[0m ][\u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m:\n\u001b[0;32m--> 331\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo description found for \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[0;31mValueError\u001b[0m: No description found for Hispanic or Not." - ] - } - ], - "source": [ - "ptbarplot(ddi_codebook, df, 'OCC2010', 'ASECWT', color='blue')\n", - "# ptbarplot2(df[df['OCC2010'] !='NIU'], \n", - "ptbarplot3(ddi_codebook, df,'Hispanic or Not', 'OCC2010', 'ASECWT')" - ] - }, { "cell_type": "code", "execution_count": 17, @@ -1098,7 +1023,7 @@ " legend_ncol=10,\n", " max_percentile=.99, \n", " addvline=True, \n", - " den_title='Estimated Density Function of Wage Income by Age Bucket',\n", + " den_title='Estimated Density Function of Wage Income for Hispanics vs Non-Hispanics',\n", ")" ] }, @@ -1205,7 +1130,7 @@ " legend_ncol=10,\n", " max_percentile=.75,\n", " addvline=True, \n", - " den_title='Estimated Density Function of Investment Income by Age Bucket',\n", + " den_title='Estimated Density Function of Investment Income for Hispanics vs Non-Hispanics',\n", ")" ] }, @@ -1312,7 +1237,7 @@ " legend_ncol=10,\n", " max_percentile=.99, \n", " addvline=True, \n", - " den_title='Estimated Density Function of Government Income by Age Bucket',\n", + " den_title='Estimated Density Function of Government Income for Hispanics vs Non-Hispanics',\n", ")" ] },