WUT_Computer_Science/pbad.ipynb

738 lines
73 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 412,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.tree import DecisionTreeRegressor, plot_tree, export_text\n",
"from sklearn.metrics import mean_squared_error\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.preprocessing import MinMaxScaler\n",
"from sklearn.decomposition import PCA"
]
},
{
"cell_type": "code",
"execution_count": 413,
"metadata": {},
"outputs": [],
"source": [
"feature_names = [\n",
" 'Powierzchnia', # 1\n",
" 'Wynagrodzenie_ogolem', # 2\n",
" 'Wynagrodzenie_w_relacji_do_sredniej', # 3\n",
" 'Dochody_podatek_lesny', # 4\n",
" 'Dochody_podatek_PCC', # 5\n",
" 'Dochody_podatek_od_dzialalnosci_gospodarczej', # 6\n",
" 'Dochody_podatek_od_nieruchomosci', # 7\n",
" 'Dochody_podatek_od_spadkow', # 8\n",
" 'Dochody_podatek_od_srodkow_transportowych', # 9\n",
" 'Dochody_podatek_rolny', # 10\n",
" 'Dochody_podatek_odrebne_ustawy', # 11\n",
" 'Dochody_razem', # 12\n",
" 'Dochody_z_majatku', # 13\n",
" 'Dochody_z_najmu_i_dzierzawy', # 14\n",
" 'Dochody_z_uslug', # 15\n",
" 'Dochody_dofinansowanie_inwestycyjne', # 16\n",
" 'Dochody_dofinansowanie_razem', # 17\n",
" 'Udzialy_w_podatkach_dochodowych_od_osob_fizycznych', # 18\n",
" 'Udzialy_w_podatkach_dochodowych_od_osob_prywatnych', # 19\n",
" 'Udzialy_w_podatkach_dochodowych_razem', # 20\n",
" 'Wplywy_z_innych_lokalnych_oplat', # 21\n",
" 'Wplywy_z_oplaty_eksploatacyjnej', # 22\n",
" 'Wplywy_z_oplaty_skarbowej', # 23\n",
" 'Wplywy_z_oplaty_targowej', # 24\n",
" 'Ludnosc_ogolem', # 25\n",
" 'Ludnosc_w_wieku_poprodukcyjnym', # 26\n",
" 'Ludnosc_w_wieku_produkcyjnym', # 27\n",
" 'Ludnosc_w_wieku_produkcyjnym_mobilnym', # 28\n",
" 'Ludnosc_w_wieku_produkcyjnym_niemobilnym', # 29\n",
" 'Ludnosc_w_wieku_przedprodukcyjnym', # 30\n",
" 'Ludnosc_mezczyzni', # 31\n",
" 'Ludnosc_mezczyzni_w_wieku_poprodukcyjnym', # 32\n",
" 'Ludnosc_mezczyzni_w_wieku_produkcyjnym', # 33\n",
" 'Ludnosc_mezczyzni_w_wieku_produkcyjnym_mobilnym', # 34\n",
" 'Ludnosc_mezczyzni_w_wieku_produkcyjnym_niemobilnym', # 35\n",
" 'Ludnosc_mezczyzni_w_wieku_przedprodukcyjnym', # 36\n",
" 'Ludnosc_kobiety', # 37\n",
" 'Ludnosc_kobiety_w_wieku_poprodukcyjnym', # 38\n",
" 'Ludnosc_kobiety_w_wieku_produkcyjnym', # 39\n",
" 'Ludnosc_kobiety_w_wieku_produkcyjnym_mobilnym', # 40\n",
" 'Ludnosc_kobiety_w_wieku_produkcyjnym_niemobilnym', # 41\n",
" 'Ludnosc_kobiety_w_wieku_przedprodukcyjnym', # 42\n",
" 'Wojewodztwo_Dolnoslaskie', # 43\n",
" 'Wojewodztwo_Kujawsko_Pomorskie', # 44\n",
" 'Wojewodztwo_Lubelskie', # 45\n",
" 'Wojewodztwo_Lubuskie', # 46\n",
" 'Wojewodztwo_Lodzkie', # 47\n",
" 'Wojewodztwo_Malopolskie', # 48\n",
" 'Wojewodztwo_Mazowieckie', # 49\n",
" 'Wojewodztwo_Opolskie', # 50\n",
" 'Wojewodztwo_Podkarpackie', # 51\n",
" 'Wojewodztwo_Podlaskie', # 52\n",
" 'Wojewodztwo_Pomorskie', # 53\n",
" 'Wojewodztwo_Slaskie', # 54\n",
" 'Wojewodztwo_Swietokrzyskie', # 55\n",
" 'Wojewodztwo_Warminsko_Mazurskie', # 56\n",
" 'Wojewodztwo_Wielkopolskie', # 57\n",
" 'Wojewodztwo_Zachodniopomorskie', # 58\n",
" 'Gestosc_zaludnienia', # 59\n",
" 'Ludnosc_na_1_km2', # 60\n",
" 'Ludnosc', # 61\n",
" 'Wskaznik_urbanizacji', # 62\n",
" 'Zmiana_liczby_ludnosci', # 63\n",
" 'Saldo_migracji_na_1000_ludnosci', # 64\n",
" 'Saldo_migracji', # 65\n",
" 'Wymeldowania_do_miast_kobiety', # 66\n",
" 'Wymeldowania_do_miast_mezczyzni', # 67\n",
" 'Wymeldowania_do_miast_ogolem', # 68\n",
" 'Wymeldowania_na_wies_kobiety', # 69\n",
" 'Wymeldowania_na_wies_mezczyzni', # 70\n",
" 'Wymeldowania_na_wies_ogolem', # 71\n",
" 'Wymeldowania_kobiety', # 72\n",
" 'Wymeldowania_mezczyzni', # 73\n",
" 'Wymeldowania_ogolem', # 74\n",
" 'Zameldowania_kobiety', # 75\n",
" 'Zameldowania_mezczyzni', # 76\n",
" 'Zameldowania_ogolem', # 77\n",
" 'Zameldowania_z_miast_kobiety', # 78\n",
" 'Zameldowania_z_miast_mezczyzni', # 79\n",
" 'Zameldowania_z_miast_ogolem', # 80\n",
" 'Zameldowania_ze_wsi_kobiety', # 81\n",
" 'Zameldowania_ze_wsi_mezczyzni', # 82\n",
" 'Zameldowania_ze_wsi_ogolem', # 83\n",
" 'Miejsca_noclegowe_caloroczne', # 84\n",
" 'Miejsca_noclegowe_ogolem', # 85\n",
" 'Obiekty_caloroczne', # 86\n",
" 'Obiekty_ogolem', # 87\n",
" 'Turysci_ogolem', # 88\n",
" 'Turysci_zagraniczni', # 89\n",
" 'Bezrobotni_do_25_roku_zycia', # 90\n",
" 'Dlugotrwale_bezrobotni', # 91\n",
" 'Bezrobotne_kobiety', # 92\n",
" 'Bezrobotni_mezczyzni', # 93\n",
" 'Bezrobotni_ogolem', # 94\n",
" 'Bezrobotni_powyzej_50_roku_zycia', # 95\n",
" 'Gmina_miejska', # 96\n",
" 'Gmina_miejsko_wiejska', # 97\n",
" 'Gmina_wiejska'] # 98\n",
"\n",
"all_columns = ['Kod', 'Rok'] + feature_names"
]
},
{
"cell_type": "code",
"execution_count": 414,
"metadata": {},
"outputs": [],
"source": [
"df_data = pd.read_csv(\n",
" 'dane1.csv',\n",
" encoding='ISO-8859-2',\n",
" converters={'Kod': str})"
]
},
{
"cell_type": "code",
"execution_count": 415,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Program Operacyjny Infrastruktura i ?rodowisko 2014-2020'\n",
" 'Program Operacyjny Inteligentny RozwĂłj'\n",
" 'Program Operacyjny Polska Cyfrowa'\n",
" 'Program Operacyjny Wiedza Edukacja RozwĂłj'\n",
" 'Program Operacyjny Polska Wschodnia']\n"
]
}
],
"source": [
"print(df_data['Program_operacyjny'].drop_duplicates().values)"
]
},
{
"cell_type": "code",
"execution_count": 416,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\micha\\AppData\\Local\\Temp\\ipykernel_30040\\2129245038.py:23: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" df_data = df_data.groupby(all_columns)['Suma'].sum().reset_index()\n"
]
}
],
"source": [
"# Wybór programu operacyjnego...\n",
"df_data = df_data.loc[df_data['Program_operacyjny'] == 'Program Operacyjny Infrastruktura i ?rodowisko 2014-2020'].reset_index(drop=True)\n",
"\n",
"# Uzupełnienie brakujących danych...\n",
"df_data[[\n",
" 'Miejsca_noclegowe_caloroczne',\n",
" 'Miejsca_noclegowe_ogolem',\n",
" 'Obiekty_caloroczne',\n",
" 'Obiekty_ogolem',\n",
" 'Turysci_ogolem',\n",
" 'Turysci_zagraniczni']] = df_data[[\n",
" 'Miejsca_noclegowe_caloroczne',\n",
" 'Miejsca_noclegowe_ogolem',\n",
" 'Obiekty_caloroczne',\n",
" 'Obiekty_ogolem',\n",
" 'Turysci_ogolem',\n",
" 'Turysci_zagraniczni']].fillna(0)\n",
"\n",
"# Usunięcie niepotrzebnych rzędów...\n",
"df_data.dropna(inplace=True)\n",
"df_data = df_data[df_data['Suma'] > 0]\n",
"\n",
"df_data = df_data.groupby(all_columns)['Suma'].sum().reset_index()\n",
"\n",
"# ...\n",
"# df_data['Suma'] = df_data['Suma'] / df_data['Ludnosc']"
]
},
{
"cell_type": "code",
"execution_count": 417,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean Squared Error: 7130437747838160.0\n"
]
}
],
"source": [
"X = df_data[feature_names]\n",
"\n",
"# scaler = MinMaxScaler()\n",
"# X = scaler.fit_transform(X)\n",
"\n",
"y = df_data['Suma']\n",
"\n",
"color_column = (df_data['Gestosc_zaludnienia'] > 1.5).astype(int)\n",
"\n",
"X_train, X_test, y_train, y_test, color_column_train, color_column_test = train_test_split(X, y, color_column, test_size=0.2, random_state=99)\n",
"\n",
"model = DecisionTreeRegressor(random_state=99)\n",
"model.fit(X_train, y_train)\n",
"\n",
"y_pred = model.predict(X_test)\n",
"mse = mean_squared_error(y_test, y_pred)\n",
"print('Mean Squared Error:', mse)"
]
},
{
"cell_type": "code",
"execution_count": 418,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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ICEEZs2ahS1btuDnn39GaGjoLbeJjo5GUlKSVdnOnTsRHR0NAAgNDYWfn59VHa1WiwMHDljq3EylUsHV1dVqISIiorbLpnOAZs6cia+++grbtm2Di4uLZY6Om5sbNBoNAGDy5MkIDAxEQkICAODZZ5/FoEGDsGjRIowePRqJiYk4dOgQPv30UwCAJEmYPXs23njjDYSHhyM0NBSvvvoqAgICEBcXZ5NxEhERUcti0wD0ySefAAAGDx5sVb5y5UpMnToVAJCZmQmZ7H8nqvr164evvvoKr7zyCl5++WWEh4dj69atVhOnX3zxReh0Ojz55JMoKipC//79sWPHDqjV6mYfExEREbV8Leo5QC0FnwNERETU+rTa5wARERER3QkMQERERGR3GICIiIjI7jAAERERkd1hACIiIiK7wwBEREREdocBiIiIiOwOAxARERHZHQYgIiIisjsMQERERGR3GICIiIjI7jAAERERkd1hACIiIiK7wwBEREREdocBiIiIiOwOAxARERHZHQYgIiIisjsMQERERGR3GICIiIjI7jAAERERkd1hACIiIiK7wwBEREREdocBiIiIiOwOAxARERHZHQYgIiIisjsMQERERGR3GICIiIjI7jAAERERkd1hACIiIiK7wwBEREREdocBiIiIiOyOTQPQnj17MGbMGAQEBECSJGzdurXO+lOnToUkSdWW7t27W+rMnz+/2vquXbs280iIiIioNbFpANLpdIiIiMDSpUvrVf+DDz5ATk6OZbl8+TI8PT3xyCOPWNXr3r27Vb29e/c2R/eJiIiolVLYcucjR47EyJEj613fzc0Nbm5uls9bt27F9evXMW3aNKt6CoUCfn5+TdZPIiIialta9Ryg5cuXIyYmBsHBwVbl586dQ0BAAMLCwjBp0iRkZmbW2Y5er4dWq7VaiIiIqO1qtQEoOzsb33//PaZPn25VHhUVhVWrVmHHjh345JNPkJGRgQEDBqCkpKTWthISEixnl9zc3BAUFNTc3SciIiIbkoQQwtadAABJkrBlyxbExcXVq35CQgIWLVqE7OxsKJXKWusVFRUhODgYixcvxhNPPFFjHb1eD71eb/ms1WoRFBSE4uJiuLq6NmgcREREZBtarRZubm71+v626RygxhJCYMWKFXjsscfqDD8A4O7ujs6dOyM9Pb3WOiqVCiqVqqm7SURERC1Uq7wEtnv3bqSnp9d6RuePSktLcf78efj7+9+BnhEREVFrYNMAVFpaitTUVKSmpgIAMjIykJqaapm0PGfOHEyePLnadsuXL0dUVBTuvvvuauuef/557N69GxcvXsS+ffvw0EMPQS6XY+LEic06FiIiImo9bHoJ7NChQxgyZIjlc3x8PABgypQpWLVqFXJycqrdwVVcXIxNmzbhgw8+qLHNK1euYOLEibh69Sq8vb3Rv39/7N+/H97e3s03ECIiImpVWswk6JakIZOoiIiIqGVo85OgiW6XMOUCxpMQ5kIAakgOnQFFOCSJvxJERK2NMOuAylMwl52q9zb8157sihACMOyFKN8BiCJU/QqYIPS7AIeegOM4SDJnG/eSiIjqS1RmQpQlAqbLgN5Q7+0YgMi+VJ6AKN8GQAnIOwOSVFUuygDjYYhyJeA4CdKNciIiarGEuQSibB1gygLkoYCist7btsrb4IkaQwgBod8PwAjI/f4XfgBAcgRkfoDxBGDOsVkfiYioAYzHq878yEOBBk5hYAAi+yG0QOVFQPKseb3kCohSoPLSHe0WERE1jqhMByAHJHmDt2UAIjtiBiBQ6197yxkh8x3qDxER3R4zGhtlGIDIfkiugNwXMF+veb25FJBUVZfHiIioxZPkwQD0gGj4/7gyAJHdkCQ5JGUUABNgLrZeKSoBcxag6FR1LZmIiFo+hx6AzKdqHlADH2vIu8DIvij7VN0tYPgFqCwAJCdAGABUAIqOkDQPQ5L4/wVERK2BJPcCNA9BlH8NmM4CpvrHGgYgsiuSpAA0cYBDVwjD0ao7viRHSA4RgEMEJJmLrbtIREQNICkjALk3hCEVKEut/3Z8FUZ1fBUGERFR69OQ72+e6yciIiK7wwBEREREdocBiIiIiOwOAxARERHZHQYgIiIisjsMQERERGR3GICIiIjI7jAAERERkd1hACIiIiK7wwBEREREdocBiIiIiOwOAxARERHZHQYgIiIisjsMQERERGR3GICIiIjI7jAAERERkd1hACIiIiK7wwBEREREdocBiIiIiOyOTQPQnj17MGbMGAQEBECSJGzdurXO+snJyZAkqdqSm5trVW/p0qUICQmBWq1GVFQUDh482IyjICIiotbGpgFIp9MhIiICS5cubdB2aWlpyMnJsSw+Pj6WdevXr0d8fDzmzZuHI0eOICIiArGxscjPz2/q7hMREVErpbDlzkeOHImRI0c2eDsfHx+4u7vXuG7x4sWYMWMGpk2bBgBYtmwZtm/fjhUrVuCll166ne4SERFRG9Eq5wBFRkbC398fw4YNwy+//GIpNxgMOHz4MGJiYixlMpkMMTExSElJqbU9vV4PrVZrtRAREVHb1aoCkL+/P5YtW4ZNmzZh06ZNCAoKwuDBg3HkyBEAQGFhIUwmE3x9fa228/X1rTZP6I8SEhLg5uZmWYKCgpp1HERERGRbNr0E1lBdunRBly5dLJ/79euH8+fP4/3338cXX3zR6HbnzJmD+Ph4y2etVssQRERE1Ia1qgBUk759+2Lv3r0AAC8vL8jlcuTl5VnVycvLg5+fX61tqFQqqFSqZu0nERERtRyt6hJYTVJTU+Hv7w8AUCqV6N27N5KSkizrzWYzkpKSEB0dbasuEhERUQtj0zNApaWlSE9Pt3zOyMhAamoqPD090aFDB8yZMwdZWVlYs2YNAGDJkiUIDQ1F9+7dUVFRgc8//xw///wzfvzxR0sb8fHxmDJlCvr06YO+fftiyZIl0Ol0lrvCiIiIiGwagA4dOoQhQ4ZYPt+YhzNlyhSsWrUKOTk5yMzMtKw3GAz4+9//jqysLDg6OqJnz5746aefrNoYP348CgoKMHfuXOTm5iIyMhI7duyoNjGaiIiI7JckhBC27kRLo9Vq4ebmhuLiYri6utq6O0RERFQPDfn+bvVzgIiIiIgaigGIiIiI7A4DEBEREdkdBiAiIiKyOwxAREREZHcYgIiIiMjuMAARERGR3WEAIiIiIrvDAERERER2hwGIiIiI7A4DEBEREdkdBiAiIiKyOwxAREREZHcYgIiIiMjuMAARERGR3WEAIiIiIrvDAERERER2hwGIiIiI7A4DEBEREdkdBiAiIiKyOwxAREREZHcYgIiIiMjuMAARERGR3WEAIiIiIrvDAERERER2hwGIiIiI7A4DEBEREdkdRX0rarXaejfq6uraqM4QERER3Qn1DkDu7u6QJKledU0mU6M7RERERNTc6h2Adu3aZfnzxYsX8dJLL2Hq1KmIjo4GAKSkpGD16tVISEho+l4SERERNaF6zwEaNGiQZVmzZg0WL16MhIQE/OlPf8Kf/vQnJCQk4L333sPKlSvrvfM9e/ZgzJgxCAgIgCRJ2Lp1a531N2/ejGHDhsHb2xuurq6Ijo7GDz/8YFVn/vz5kCTJaunatWu9+0RERERtX6MmQaekpKBPnz7Vyvv06YODBw/Wux2dToeIiAgsXbq0XvX37NmDYcOG4bvvvsPhw4cxZMgQjBkzBkePHrWq1717d+Tk5FiWvXv31rtPRERE1PbV+xLYHwUFBeGzzz7DO++8Y1X++eefIygoqN7tjBw5EiNHjqx3/SVLllh9fuutt7Bt2zZ888036NWrl6VcoVDAz8+v3u0SERGRfWlUAHr//ffx5z//Gd9//z2ioqIAAAcPHsS5c+ewadOmJu1gXcxmM0pKSuDp6WlVfu7cOQQEBECtViM6OhoJCQno0KFDre3o9Xro9XrL54bc8UZEREStT6MugY0aNQpnz57FmDFjcO3aNVy7dg1jxozB2bNnMWrUqKbuY63ee+89lJaWYty4cZayqKgorFq1Cjt27MAnn3yCjIwMDBgwACUlJbW2k5CQADc3N8vSkLNYRERE1PpIQghh604AgCRJ2LJlC+Li4upV/6uvvsKMGTOwbds2xMTE1FqvqKgIwcHBWLx4MZ544oka69R0BigoKAjFxcV8phEREVErodVq4ebmVq/v70Y/Cfq///0vHn30UfTr1w9ZWVkAgC+++OKOTDhOTEzE9OnTsWHDhjrDD1D1/KLOnTsjPT291joqlQqurq5WCxEREbVdjQpAmzZtQmxsLDQaDY4cOWI5e1JcXIy33nqrSTt4s3Xr1mHatGlYt24dRo8efcv6paWlOH/+PPz9/Zu1X0RERNR6NCoAvfHGG1i2bBk+++wzODg4WMrvv/9+HDlypN7tlJaWIjU1FampqQCAjIwMpKamIjMzEwAwZ84cTJ482VL/q6++wuTJk7Fo0SJERUUhNzcXubm5KC4uttR5/vnnsXv3bly8eBH79u3DQw89BLlcjokTJzZmqERERNQGNSoApaWlYeDAgdXK3dzcUFRUVO92Dh06hF69elluYY+Pj0evXr0wd+5cAEBOTo4lDAHAp59+isrKSsycORP+/v6W5dlnn7XUuXLlCiZOnIguXbpg3LhxaNeuHfbv3w9vb+/GDJWIiIjaoEbdBu/n54f09HSEhIRYle/duxdhYWH1bmfw4MGoaw72qlWrrD4nJyffss3ExMR675+IiIjsU6POAM2YMQPPPvssDhw4AEmSkJ2djbVr1+L555/H008/3dR9JCIiImpSjToD9NJLL8FsNmPo0KEoKyvDwIEDoVKp8Pzzz+OZZ55p6j4SERERNanbeg6QwWBAeno6SktL0a1bNzg7Ozdl32ymIc8RICIiopah2Z8D9Pjjj6OkpARKpRLdunVD37594ezsDJ1Oh8cff7xRnSYiIiK6UxoVgFavXo3y8vJq5eXl5VizZs1td4qIiIioOTVoDpBWq4UQAkIIlJSUQK1WW9aZTCZ899138PHxafJOEhERETWlBgUgd3d3SJIESZLQuXPnauslScKCBQuarHNEREREzaFBAWjXrl0QQuCBBx7Apk2b4OnpaVmnVCoRHByMgICAJu8kERERUVNqUAAaNGgQgKpXVnTo0AGSJDVLp4iIiIiaU6MmQf/888/4+uuvq5Vv3LgRq1evvu1OERERETWnRgWghIQEeHl5VSv38fFp9rfBExEREd2uRgWgzMxMhIaGVisPDg62enkpERERUUvUqADk4+ODY8eOVSv/7bff0K5du9vuFBEREVFzalQAmjhxIv7v//4Pu3btgslkgslkws8//4xnn30WEyZMaOo+EhERETWpRr0M9fXXX8fFixcxdOhQKBRVTZjNZkyePJlzgIiIiKjFu62XoZ49exa//fYbNBoNevTogeDg4Kbsm83wZahEREStT0O+vxt1BuiGzp071/hEaCIiIqKWrN4BKD4+Hq+//jqcnJwQHx9fZ93FixffdseIiIiImku9A9DRo0dhNBotf64Nnw5NRERELd1tzQFqqzgHiIiIqPVpyPd3o26DJyIiImrN6n0J7OGHH653o5s3b25UZ4iIiIjuhHqfAXJzc7Msrq6uSEpKwqFDhyzrDx8+jKSkJLi5uTVLR4mIiIiaSr3PAK1cudLy53/84x8YN24cli1bBrlcDgAwmUz4f//v/3HODBEREbV4jZoE7e3tjb1796JLly5W5WlpaejXrx+uXr3aZB20BU6CJiIian2afRJ0ZWUlzpw5U638zJkzMJvNjWmSiIiI6I5p1JOgp02bhieeeALnz59H3759AQAHDhzA22+/jWnTpjVpB4mIiIiaWqMC0HvvvQc/Pz8sWrQIOTk5AAB/f3+88MIL+Pvf/96kHSQiIiJqarf9IEStVgsAbWquDOcAERERtT535EGIlZWV+Omnn7Bu3TrL6y+ys7NRWlra2CaJiIiI7ohGBaBL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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(y_test, y_pred, alpha=0.5, c=color_column_test, cmap='viridis')\n",
"plt.xlabel('Actual')\n",
"plt.ylabel('Predicted')\n",
"plt.title('Actual vs Predicted')\n",
"\n",
"plt.xlim(0, max(max(y_test), max(y_pred)))\n",
"plt.ylim(0, max(max(y_test), max(y_pred)))\n",
"\n",
"# plt.xlim(0, 3*10**7)\n",
"# plt.ylim(0, 3*10**7)\n",
"\n",
"# plt.xlim(0, 3*10**6)\n",
"# plt.ylim(0, 3*10**6)\n",
"\n",
"# plt.xlim(0, 3*10**5)\n",
"# plt.ylim(0, 3*10**5)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 419,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Turysci_ogolem 0.678030\n",
"Turysci_zagraniczni 0.622019\n",
"Bezrobotni_powyzej_50_roku_zycia 0.618459\n",
"Bezrobotni_mezczyzni 0.604785\n",
"Bezrobotni_ogolem 0.598537\n",
"Bezrobotne_kobiety 0.589713\n",
"Dlugotrwale_bezrobotni 0.588603\n",
"Dochody_z_majatku 0.572257\n",
"Bezrobotni_do_25_roku_zycia 0.538353\n",
"Dochody_z_uslug 0.530995\n",
"Zameldowania_z_miast_kobiety 0.524689\n",
"Zameldowania_z_miast_ogolem 0.516273\n",
"Zameldowania_z_miast_mezczyzni 0.506130\n",
"Ludnosc_kobiety_w_wieku_produkcyjnym_niemobilnym 0.505972\n",
"Ludnosc_w_wieku_produkcyjnym_niemobilnym 0.505204\n",
"Ludnosc_mezczyzni_w_wieku_produkcyjnym_niemobilnym 0.504409\n",
"Dochody_z_najmu_i_dzierzawy 0.502355\n",
"Ludnosc_kobiety_w_wieku_produkcyjnym 0.498792\n",
"Ludnosc_w_wieku_produkcyjnym 0.497524\n",
"Ludnosc_mezczyzni_w_wieku_produkcyjnym 0.496126\n",
"Ludnosc_kobiety_w_wieku_produkcyjnym_mobilnym 0.494525\n",
"Ludnosc_kobiety 0.494308\n",
"Ludnosc_w_wieku_produkcyjnym_mobilnym 0.492563\n",
"Ludnosc_ogolem 0.491898\n",
"Ludnosc 0.491897\n",
"Ludnosc_kobiety_w_wieku_poprodukcyjnym 0.491139\n",
"Ludnosc_mezczyzni_w_wieku_produkcyjnym_mobilnym 0.490279\n",
"Ludnosc_mezczyzni 0.489025\n",
"Name: Suma, dtype: float64\n"
]
}
],
"source": [
"correlation_matrix = df_data.corr()\n",
"print(correlation_matrix['Suma'].sort_values(ascending=False)[1:29])"
]
},
{
"cell_type": "code",
"execution_count": 420,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"|--- Bezrobotni_do_25_roku_zycia <= 3286.75\n",
"| |--- Bezrobotni_powyzej_50_roku_zycia <= 8333.50\n",
"| | |--- Turysci_zagraniczni <= 11550.00\n",
"| | | |--- Wplywy_z_oplaty_eksploatacyjnej <= -7751.83\n",
"| | | | |--- value: [964190154.28]\n",
"| | | |--- Wplywy_z_oplaty_eksploatacyjnej > -7751.83\n",
"| | | | |--- Bezrobotni_powyzej_50_roku_zycia <= 4109.25\n",
"| | | | | |--- Bezrobotni_do_25_roku_zycia <= 211.25\n",
"| | | | | | |--- Turysci_zagraniczni <= 50.50\n",
"| | | | | | | |--- Dochody_podatek_od_dzialalnosci_gospodarczej <= -177.80\n",
"| | | | | | | | |--- Wojewodztwo_Dolnoslaskie <= 0.50\n",
"| | | | | | | | | |--- Dochody_podatek_rolny <= 769761.22\n",
"| | | | | | | | | | |--- Dochody_podatek_lesny <= 102124.37\n",
"| | | | | | | | | | | |--- value: [12827962.87]\n",
"| | | | | | | | | | |--- Dochody_podatek_lesny > 102124.37\n",
"| | | | | | | | | | | |--- truncated branch of depth 2\n",
"| | | | | | | | | |--- Dochody_podatek_rolny > 769761.22\n",
"| | | | | | | | | | |--- value: [41560244.72]\n",
"| | | | | | | | |--- Wojewodztwo_Dolnoslaskie > 0.50\n",
"| | | | | | | | | |--- value: [342766250.37]\n",
"| | | | | | | |--- Dochody_podatek_od_dzialalnosci_gospodarczej > -177.80\n",
"| | | | | | | | |--- Wojewodztwo_Pomorskie <= 0.50\n",
"| | | | | | | | | |--- Bezrobotne_kobiety <= 137.25\n",
"| | | | | | | | | | |--- Wplywy_z_oplaty_targowej <= 1410250.88\n",
"| | | | | | | | | | | |--- truncated branch of depth 28\n",
"| | | | | | | | | | |--- Wplywy_z_oplaty_targowej > 1410250.88\n",
"| | | | | | | | | | | |--- value: [83037656.42]\n",
"| | | | | | | | | |--- Bezrobotne_kobiety > 137.25\n",
"| | | | | | | | | | |--- Dochody_z_uslug <= 18008.01\n",
"| | | | | | | | | | | |--- truncated branch of depth 15\n",
"| | | | | | | | | | |--- Dochody_z_uslug > 18008.01\n",
"| | | | | | | | | | | |--- truncated branch of depth 40\n",
"| | | | | | | | |--- Wojewodztwo_Pomorskie > 0.50\n",
"| | | | | | | | | |--- Dochody_podatek_PCC <= 135840.14\n",
"| | | | | | | | | | |--- Dochody_dofinansowanie_razem <= 290021.63\n",
"| | | | | | | | | | | |--- truncated branch of depth 2\n",
"| | | | | | | | | | |--- Dochody_dofinansowanie_razem > 290021.63\n",
"| | | | | | | | | | | |--- value: [481929545.58]\n",
"| | | | | | | | | |--- Dochody_podatek_PCC > 135840.14\n",
"| | | | | | | | | | |--- Ludnosc_kobiety_w_wieku_produkcyjnym <= 68627.00\n",
"| | | | | | | | | | | |--- truncated branch of depth 17\n",
"| | | | | | | | | | |--- Ludnosc_kobiety_w_wieku_produkcyjnym > 68627.00\n",
"| | | | | | | | | | | |--- value: [138065623.43]\n",
"| | | | | | |--- Turysci_zagraniczni > 50.50\n",
"| | | | | | | |--- Bezrobotni_mezczyzni <= 55.75\n",
"| | | | | | | | |--- value: [350203527.33]\n",
"| | | | | | | |--- Bezrobotni_mezczyzni > 55.75\n",
"| | | | | | | | |--- Saldo_migracji_na_1000_ludnosci <= 19.15\n",
"| | | | | | | | | |--- Dochody_z_majatku <= 84208.02\n",
"| | | | | | | | | | |--- value: [122764445.52]\n",
"| | | | | | | | | |--- Dochody_z_majatku > 84208.02\n",
"| | | | | | | | | | |--- Turysci_ogolem <= 1304.00\n",
"| | | | | | | | | | | |--- truncated branch of depth 6\n",
"| | | | | | | | | | |--- Turysci_ogolem > 1304.00\n",
"| | | | | | | | | | | |--- truncated branch of depth 25\n",
"| | | | | | | | |--- Saldo_migracji_na_1000_ludnosci > 19.15\n",
"| | | | | | | | | |--- Wymeldowania_na_wies_kobiety <= 15.50\n",
"| | | | | | | | | | |--- value: [819103731.56]\n",
"| | | | | | | | | |--- Wymeldowania_na_wies_kobiety > 15.50\n",
"| | | | | | | | | | |--- Bezrobotni_powyzej_50_roku_zycia <= 171.00\n",
"| | | | | | | | | | | |--- truncated branch of depth 5\n",
"| | | | | | | | | | |--- Bezrobotni_powyzej_50_roku_zycia > 171.00\n",
"| | | | | | | | | | | |--- truncated branch of depth 3\n",
"| | | | | |--- Bezrobotni_do_25_roku_zycia > 211.25\n",
"| | | | | | |--- Zameldowania_z_miast_kobiety <= 462.00\n",
"| | | | | | | |--- Turysci_zagraniczni <= 2200.50\n",
"| | | | | | | | |--- Wojewodztwo_Dolnoslaskie <= 0.50\n",
"| | | | | | | | | |--- Obiekty_ogolem <= 0.50\n",
"| | | | | | | | | | |--- Zmiana_liczby_ludnosci <= -4.65\n",
"| | | | | | | | | | | |--- truncated branch of depth 4\n",
"| | | | | | | | | | |--- Zmiana_liczby_ludnosci > -4.65\n",
"| | | | | | | | | | | |--- truncated branch of depth 6\n",
"| | | | | | | | | |--- Obiekty_ogolem > 0.50\n",
"| | | | | | | | | | |--- Ludnosc_ogolem <= 227202.00\n",
"| | | | | | | | | | | |--- truncated branch of depth 17\n",
"| | | | | | | | | | |--- Ludnosc_ogolem > 227202.00\n",
"| | | | | | | | | | | |--- truncated branch of depth 2\n",
"| | | | | | | | |--- Wojewodztwo_Dolnoslaskie > 0.50\n",
"| | | | | | | | | |--- Dochody_podatek_od_spadkow <= 136407.63\n",
"| | | | | | | | | | |--- value: [374147379.96]\n",
"| | | | | | | | | |--- Dochody_podatek_od_spadkow > 136407.63\n",
"| | | | | | | | | | |--- Dlugotrwale_bezrobotni <= 1104.75\n",
"| | | | | | | | | | | |--- value: [87692501.12]\n",
"| | | | | | | | | | |--- Dlugotrwale_bezrobotni > 1104.75\n",
"| | | | | | | | | | | |--- truncated branch of depth 3\n",
"| | | | | | | |--- Turysci_zagraniczni > 2200.50\n",
"| | | | | | | | |--- Turysci_zagraniczni <= 2255.00\n",
"| | | | | | | | | |--- value: [675624217.52]\n",
"| | | | | | | | |--- Turysci_zagraniczni > 2255.00\n",
"| | | | | | | | | |--- Dochody_podatek_rolny <= 9598.85\n",
"| | | | | | | | | | |--- value: [286243234.59]\n",
"| | | | | | | | | |--- Dochody_podatek_rolny > 9598.85\n",
"| | | | | | | | | | |--- Wojewodztwo_Opolskie <= 0.50\n",
"| | | | | | | | | | | |--- truncated branch of depth 13\n",
"| | | | | | | | | | |--- Wojewodztwo_Opolskie > 0.50\n",
"| | | | | | | | | | | |--- value: [279411324.25]\n",
"| | | | | | |--- Zameldowania_z_miast_kobiety > 462.00\n",
"| | | | | | | |--- Dlugotrwale_bezrobotni <= 1111.50\n",
"| | | | | | | | |--- Udzialy_w_podatkach_dochodowych_od_osob_fizycznych <= 432721984.00\n",
"| | | | | | | | | |--- value: [233314297.12]\n",
"| | | | | | | | |--- Udzialy_w_podatkach_dochodowych_od_osob_fizycznych > 432721984.00\n",
"| | | | | | | | | |--- value: [144736499.65]\n",
"| | | | | | | |--- Dlugotrwale_bezrobotni > 1111.50\n",
"| | | | | | | | |--- Zameldowania_z_miast_kobiety <= 470.50\n",
"| | | | | | | | | |--- Wymeldowania_na_wies_kobiety <= 230.50\n",
"| | | | | | | | | | |--- Wymeldowania_do_miast_ogolem <= 954.00\n",
"| | | | | | | | | | | |--- value: [146505226.88]\n",
"| | | | | | | | | | |--- Wymeldowania_do_miast_ogolem > 954.00\n",
"| | | | | | | | | | | |--- value: [118788666.24]\n",
"| | | | | | | | | |--- Wymeldowania_na_wies_kobiety > 230.50\n",
"| | | | | | | | | | |--- value: [198317025.71]\n",
"| | | | | | | | |--- Zameldowania_z_miast_kobiety > 470.50\n",
"| | | | | | | | | |--- Bezrobotne_kobiety <= 3306.50\n",
"| | | | | | | | | | |--- Wplywy_z_oplaty_targowej <= 10332.60\n",
"| | | | | | | | | | | |--- truncated branch of depth 10\n",
"| | | | | | | | | | |--- Wplywy_z_oplaty_targowej > 10332.60\n",
"| | | | | | | | | | | |--- truncated branch of depth 8\n",
"| | | | | | | | | |--- Bezrobotne_kobiety > 3306.50\n",
"| | | | | | | | | | |--- Saldo_migracji <= -1765.50\n",
"| | | | | | | | | | | |--- value: [245187243.09]\n",
"| | | | | | | | | | |--- Saldo_migracji > -1765.50\n",
"| | | | | | | | | | | |--- truncated branch of depth 10\n",
"| | | | |--- Bezrobotni_powyzej_50_roku_zycia > 4109.25\n",
"| | | | | |--- Dochody_podatek_rolny <= 968207.19\n",
"| | | | | | |--- Dochody_podatek_rolny <= 782857.78\n",
"| | | | | | | |--- Wplywy_z_oplaty_eksploatacyjnej <= 16106.75\n",
"| | | | | | | | |--- Wymeldowania_na_wies_mezczyzni <= 2183.50\n",
"| | | | | | | | | |--- value: [131610033.05]\n",
"| | | | | | | | |--- Wymeldowania_na_wies_mezczyzni > 2183.50\n",
"| | | | | | | | | |--- value: [148481690.68]\n",
"| | | | | | | |--- Wplywy_z_oplaty_eksploatacyjnej > 16106.75\n",
"| | | | | | | | |--- Ludnosc_mezczyzni_w_wieku_produkcyjnym_niemobilnym <= 55425.00\n",
"| | | | | | | | | |--- value: [190652253.27]\n",
"| | | | | | | | |--- Ludnosc_mezczyzni_w_wieku_produkcyjnym_niemobilnym > 55425.00\n",
"| | | | | | | | | |--- value: [185724614.60]\n",
"| | | | | | |--- Dochody_podatek_rolny > 782857.78\n",
"| | | | | | | |--- Wymeldowania_kobiety <= 2571.50\n",
"| | | | | | | | |--- value: [94465810.28]\n",
"| | | | | | | |--- Wymeldowania_kobiety > 2571.50\n",
"| | | | | | | | |--- Dochody_razem <= 15314116608.00\n",
"| | | | | | | | | |--- Zameldowania_kobiety <= 2257.00\n",
"| | | | | | | | | | |--- value: [38662685.50]\n",
"| | | | | | | | | |--- Zameldowania_kobiety > 2257.00\n",
"| | | | | | | | | | |--- Ludnosc_mezczyzni_w_wieku_produkcyjnym <= 376983.00\n",
"| | | | | | | | | | | |--- value: [58846312.68]\n",
"| | | | | | | | | | |--- Ludnosc_mezczyzni_w_wieku_produkcyjnym > 376983.00\n",
"| | | | | | | | | | | |--- value: [51058860.72]\n",
"| | | | | | | | |--- Dochody_razem > 15314116608.00\n",
"| | | | | | | | | |--- value: [8947790.94]\n",
"| | | | | |--- Dochody_podatek_rolny > 968207.19\n",
"| | | | | | |--- Wplywy_z_oplaty_eksploatacyjnej <= 8059.50\n",
"| | | | | | | |--- Zameldowania_mezczyzni <= 11833.00\n",
"| | | | | | | | |--- Dochody_podatek_od_dzialalnosci_gospodarczej <= 2527334.25\n",
"| | | | | | | | | |--- Bezrobotne_kobiety <= 6338.50\n",
"| | | | | | | | | | |--- value: [230571070.75]\n",
"| | | | | | | | | |--- Bezrobotne_kobiety > 6338.50\n",
"| | | | | | | | | | |--- value: [207365170.21]\n",
"| | | | | | | | |--- Dochody_podatek_od_dzialalnosci_gospodarczej > 2527334.25\n",
"| | | | | | | | | |--- Gestosc_zaludnienia <= 2.89\n",
"| | | | | | | | | | |--- value: [192010216.97]\n",
"| | | | | | | | | |--- Gestosc_zaludnienia > 2.89\n",
"| | | | | | | | | | |--- value: [168244617.82]\n",
"| | | | | | | |--- Zameldowania_mezczyzni > 11833.00\n",
"| | | | | | | | |--- value: [290585991.80]\n",
"| | | | | | |--- Wplywy_z_oplaty_eksploatacyjnej > 8059.50\n",
"| | | | | | | |--- Udzialy_w_podatkach_dochodowych_razem <= 1265800896.00\n",
"| | | | | | | | |--- value: [344302462.59]\n",
"| | | | | | | |--- Udzialy_w_podatkach_dochodowych_razem > 1265800896.00\n",
"| | | | | | | | |--- value: [291932458.27]\n",
"| | |--- Turysci_zagraniczni > 11550.00\n",
"| | | |--- Dochody_podatek_od_spadkow <= 3245648.25\n",
"| | | | |--- Ludnosc_w_wieku_poprodukcyjnym <= 24858.50\n",
"| | | | | |--- Turysci_ogolem <= 47085.00\n",
"| | | | | | |--- Dochody_podatek_od_nieruchomosci <= 65272150.00\n",
"| | | | | | | |--- value: [139894594.13]\n",
"| | | | | | |--- Dochody_podatek_od_nieruchomosci > 65272150.00\n",
"| | | | | | | |--- value: [113778267.95]\n",
"| | | | | |--- Turysci_ogolem > 47085.00\n",
"| | | | | | |--- Wymeldowania_ogolem <= 811.00\n",
"| | | | | | | |--- Ludnosc_kobiety_w_wieku_produkcyjnym_mobilnym <= 2687.00\n",
"| | | | | | | | |--- value: [42987964.54]\n",
"| | | | | | | |--- Ludnosc_kobiety_w_wieku_produkcyjnym_mobilnym > 2687.00\n",
"| | | | | | | | |--- Dochody_podatek_odrebne_ustawy <= 34762434.00\n",
"| | | | | | | | | |--- Miejsca_noclegowe_caloroczne <= 3919.00\n",
"| | | | | | | | | | |--- Miejsca_noclegowe_ogolem <= 1072.00\n",
"| | | | | | | | | | | |--- truncated branch of depth 2\n",
"| | | | | | | | | | |--- Miejsca_noclegowe_ogolem > 1072.00\n",
"| | | | | | | | | | | |--- value: [956134.19]\n",
"| | | | | | | | | |--- Miejsca_noclegowe_caloroczne > 3919.00\n",
"| | | | | | | | | | |--- Ludnosc_kobiety_w_wieku_poprodukcyjnym <= 5313.00\n",
"| | | | | | | | | | | |--- value: [11266828.62]\n",
"| | | | | | | | | | |--- Ludnosc_kobiety_w_wieku_poprodukcyjnym > 5313.00\n",
"| | | | | | | | | | | |--- value: [8113147.62]\n",
"| | | | | | | | |--- Dochody_podatek_odrebne_ustawy > 34762434.00\n",
"| | | | | | | | | |--- value: [22292349.80]\n",
"| | | | | | |--- Wymeldowania_ogolem > 811.00\n",
"| | | | | | | |--- Wplywy_z_oplaty_targowej <= 305439.00\n",
"| | | | | | | | |--- value: [45239834.44]\n",
"| | | | | | | |--- Wplywy_z_oplaty_targowej > 305439.00\n",
"| | | | | | | | |--- value: [46421678.52]\n",
"| | | | |--- Ludnosc_w_wieku_poprodukcyjnym > 24858.50\n",
"| | | | | |--- Udzialy_w_podatkach_dochodowych_od_osob_prywatnych <= 16684686.50\n",
"| | | | | | |--- Wymeldowania_mezczyzni <= 771.00\n",
"| | | | | | | |--- Miejsca_noclegowe_caloroczne <= 915.00\n",
"| | | | | | | | |--- value: [292699374.69]\n",
"| | | | | | | |--- Miejsca_noclegowe_caloroczne > 915.00\n",
"| | | | | | | | |--- value: [255623586.25]\n",
"| | | | | | |--- Wymeldowania_mezczyzni > 771.00\n",
"| | | | | | | |--- Dochody_podatek_od_dzialalnosci_gospodarczej <= 358868.77\n",
"| | | | | | | | |--- Miejsca_noclegowe_ogolem <= 2109.00\n",
"| | | | | | | | | |--- Dochody_podatek_od_srodkow_transportowych <= 3711187.25\n",
"| | | | | | | | | | |--- value: [171162684.72]\n",
"| | | | | | | | | |--- Dochody_podatek_od_srodkow_transportowych > 3711187.25\n",
"| | | | | | | | | | |--- value: [158541158.45]\n",
"| | | | | | | | |--- Miejsca_noclegowe_ogolem > 2109.00\n",
"| | | | | | | | | |--- value: [191993961.25]\n",
"| | | | | | | |--- Dochody_podatek_od_dzialalnosci_gospodarczej > 358868.77\n",
"| | | | | | | | |--- Wymeldowania_na_wies_mezczyzni <= 550.00\n",
"| | | | | | | | | |--- value: [70210346.90]\n",
"| | | | | | | | |--- Wymeldowania_na_wies_mezczyzni > 550.00\n",
"| | | | | | | | | |--- Wymeldowania_na_wies_ogolem <= 1271.00\n",
"| | | | | | | | | | |--- value: [110484937.69]\n",
"| | | | | | | | | |--- Wymeldowania_na_wies_ogolem > 1271.00\n",
"| | | | | | | | | | |--- value: [125447204.52]\n",
"| | | | | |--- Udzialy_w_podatkach_dochodowych_od_osob_prywatnych > 16684686.50\n",
"| | | | | | |--- Zameldowania_z_miast_ogolem <= 921.50\n",
"| | | | | | | |--- value: [381077102.66]\n",
"| | | | | | |--- Zameldowania_z_miast_ogolem > 921.50\n",
"| | | | | | | |--- Wymeldowania_kobiety <= 1527.50\n",
"| | | | | | | | |--- value: [257797653.62]\n",
"| | | | | | | |--- Wymeldowania_kobiety > 1527.50\n",
"| | | | | | | | |--- value: [278636941.63]\n",
"| | | |--- Dochody_podatek_od_spadkow > 3245648.25\n",
"| | | | |--- Zameldowania_z_miast_kobiety <= 2581.50\n",
"| | | | | |--- Dochody_podatek_lesny <= 82233.97\n",
"| | | | | | |--- Wymeldowania_ogolem <= 5434.00\n",
"| | | | | | | |--- value: [570198401.95]\n",
"| | | | | | |--- Wymeldowania_ogolem > 5434.00\n",
"| | | | | | | |--- value: [546788438.22]\n",
"| | | | | |--- Dochody_podatek_lesny > 82233.97\n",
"| | | | | | |--- Miejsca_noclegowe_caloroczne <= 2900.00\n",
"| | | | | | | |--- value: [697207249.86]\n",
"| | | | | | |--- Miejsca_noclegowe_caloroczne > 2900.00\n",
"| | | | | | | |--- value: [773787942.19]\n",
"| | | | |--- Zameldowania_z_miast_kobiety > 2581.50\n",
"| | | | | |--- value: [251006633.98]\n",
"| |--- Bezrobotni_powyzej_50_roku_zycia > 8333.50\n",
"| | |--- Wplywy_z_oplaty_skarbowej <= 10137316.50\n",
"| | | |--- Zameldowania_ze_wsi_mezczyzni <= 587.50\n",
"| | | | |--- value: [197763095.20]\n",
"| | | |--- Zameldowania_ze_wsi_mezczyzni > 587.50\n",
"| | | | |--- value: [30633327.11]\n",
"| | |--- Wplywy_z_oplaty_skarbowej > 10137316.50\n",
"| | | |--- Ludnosc_mezczyzni_w_wieku_produkcyjnym_mobilnym <= 126004.00\n",
"| | | | |--- value: [900435479.34]\n",
"| | | |--- Ludnosc_mezczyzni_w_wieku_produkcyjnym_mobilnym > 126004.00\n",
"| | | | |--- Ludnosc_w_wieku_poprodukcyjnym <= 300560.00\n",
"| | | | | |--- value: [1636234649.62]\n",
"| | | | |--- Ludnosc_w_wieku_poprodukcyjnym > 300560.00\n",
"| | | | | |--- value: [1676338809.84]\n",
"|--- Bezrobotni_do_25_roku_zycia > 3286.75\n",
"| |--- value: [4888827044.14]\n",
"\n"
]
}
],
"source": [
"print(export_text(model, feature_names=feature_names))"
]
},
{
"cell_type": "code",
"execution_count": 421,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.64735 — Bezrobotni_do_25_roku_zycia\n",
"0.11190 — Bezrobotni_powyzej_50_roku_zycia\n",
"0.05522 — Wplywy_z_oplaty_skarbowej\n",
"0.03885 — Turysci_zagraniczni\n",
"0.02490 — Wplywy_z_oplaty_eksploatacyjnej\n",
"0.02465 — Dochody_podatek_od_spadkow\n",
"0.01644 — Wymeldowania_na_wies_kobiety\n",
"0.01037 — Ludnosc_mezczyzni_w_wieku_produkcyjnym_mobilnym\n",
"0.00561 — Zameldowania_z_miast_kobiety\n",
"0.00525 — Dochody_podatek_rolny\n",
"0.00436 — Ludnosc_w_wieku_poprodukcyjnym\n",
"0.00420 — Dochody_podatek_PCC\n",
"0.00361 — Bezrobotni_mezczyzni\n",
"0.00321 — Wojewodztwo_Dolnoslaskie\n",
"0.00306 — Dochody_dofinansowanie_razem\n",
"0.00266 — Wymeldowania_mezczyzni\n",
"0.00246 — Saldo_migracji_na_1000_ludnosci\n",
"0.00219 — Dochody_podatek_od_nieruchomosci\n",
"0.00198 — Udzialy_w_podatkach_dochodowych_od_osob_prywatnych\n",
"0.00182 — Wojewodztwo_Opolskie\n",
"0.00179 — Dochody_podatek_od_dzialalnosci_gospodarczej\n",
"0.00167 — Dlugotrwale_bezrobotni\n",
"0.00166 — Saldo_migracji\n",
"0.00155 — Zmiana_liczby_ludnosci\n",
"0.00147 — Dochody_podatek_lesny\n",
"0.00129 — Bezrobotne_kobiety\n",
"0.00127 — Obiekty_caloroczne\n",
"0.00127 — Wojewodztwo_Slaskie\n",
"0.00127 — Dochody_z_majatku\n",
"0.00123 — Dochody_z_uslug\n",
"0.00123 — Zameldowania_kobiety\n",
"0.00108 — Wymeldowania_na_wies_mezczyzni\n",
"0.00108 — Turysci_ogolem\n",
"0.00071 — Dochody_z_najmu_i_dzierzawy\n",
"0.00067 — Wymeldowania_kobiety\n",
"0.00066 — Zameldowania_ze_wsi_ogolem\n",
"0.00066 — Obiekty_ogolem\n",
"0.00061 — Wynagrodzenie_ogolem\n",
"0.00056 — Dochody_podatek_odrebne_ustawy\n",
"0.00053 — Zameldowania_ze_wsi_mezczyzni\n",
"0.00053 — Ludnosc_w_wieku_przedprodukcyjnym\n",
"0.00045 — Ludnosc_kobiety_w_wieku_poprodukcyjnym\n",
"0.00045 — Wplywy_z_oplaty_targowej\n",
"0.00044 — Powierzchnia\n",
"0.00043 — Ludnosc_w_wieku_produkcyjnym_mobilnym\n",
"0.00043 — Wojewodztwo_Pomorskie\n",
"0.00041 — Ludnosc_kobiety_w_wieku_produkcyjnym\n",
"0.00037 — Wymeldowania_ogolem\n",
"0.00034 — Wynagrodzenie_w_relacji_do_sredniej\n",
"0.00034 — Ludnosc_ogolem\n",
"0.00033 — Ludnosc_kobiety_w_wieku_produkcyjnym_mobilnym\n",
"0.00030 — Zameldowania_mezczyzni\n",
"0.00028 — Miejsca_noclegowe_caloroczne\n",
"0.00027 — Ludnosc_na_1_km2\n",
"0.00027 — Zameldowania_z_miast_ogolem\n",
"0.00025 — Dochody_dofinansowanie_inwestycyjne\n",
"0.00024 — Wymeldowania_do_miast_kobiety\n",
"0.00019 — Dochody_razem\n",
"0.00019 — Zameldowania_z_miast_mezczyzni\n",
"0.00015 — Miejsca_noclegowe_ogolem\n",
"0.00011 — Wymeldowania_do_miast_mezczyzni\n",
"0.00011 — Udzialy_w_podatkach_dochodowych_od_osob_fizycznych\n",
"0.00008 — Gestosc_zaludnienia\n",
"0.00008 — Wplywy_z_innych_lokalnych_oplat\n",
"0.00006 — Ludnosc_w_wieku_produkcyjnym\n",
"0.00006 — Dochody_podatek_od_srodkow_transportowych\n",
"0.00006 — Udzialy_w_podatkach_dochodowych_razem\n",
"0.00005 — Ludnosc_mezczyzni_w_wieku_produkcyjnym\n",
"0.00005 — Wskaznik_urbanizacji\n",
"0.00005 — Gmina_miejska\n",
"0.00003 — Wymeldowania_do_miast_ogolem\n",
"0.00003 — Zameldowania_ze_wsi_kobiety\n",
"0.00002 — Wymeldowania_na_wies_ogolem\n",
"0.00002 — Ludnosc_kobiety_w_wieku_produkcyjnym_niemobilnym\n",
"0.00002 — Bezrobotni_ogolem\n",
"0.00002 — Ludnosc_mezczyzni_w_wieku_poprodukcyjnym\n",
"0.00002 — Gmina_wiejska\n",
"0.00002 — Zameldowania_ogolem\n",
"0.00001 — Wojewodztwo_Lubelskie\n",
"0.00001 — Wojewodztwo_Lubuskie\n",
"0.00001 — Wojewodztwo_Warminsko_Mazurskie\n",
"0.00001 — Wojewodztwo_Podkarpackie\n",
"0.00001 — Ludnosc_kobiety_w_wieku_przedprodukcyjnym\n",
"0.00001 — Wojewodztwo_Wielkopolskie\n",
"0.00001 — Wojewodztwo_Swietokrzyskie\n",
"0.00001 — Gmina_miejsko_wiejska\n",
"0.00000 — Ludnosc\n",
"0.00000 — Wojewodztwo_Zachodniopomorskie\n",
"0.00000 — Ludnosc_mezczyzni\n",
"0.00000 — Ludnosc_mezczyzni_w_wieku_przedprodukcyjnym\n",
"0.00000 — Ludnosc_mezczyzni_w_wieku_produkcyjnym_niemobilnym\n",
"0.00000 — Wojewodztwo_Podlaskie\n",
"0.00000 — Ludnosc_w_wieku_produkcyjnym_niemobilnym\n",
"0.00000 — Ludnosc_kobiety\n",
"0.00000 — Wojewodztwo_Malopolskie\n",
"0.00000 — Wojewodztwo_Lodzkie\n",
"0.00000 — Wojewodztwo_Mazowieckie\n",
"0.00000 — Wojewodztwo_Kujawsko_Pomorskie\n"
]
}
],
"source": [
"feature_importance = dict(zip(feature_names, model.feature_importances_))\n",
"for feature, importance in sorted(feature_importance.items(), key=lambda x: x[1], reverse=True):\n",
" print(f'{importance:.5f} \\u2014 {feature}')"
]
}
],
"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.11.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}