{ "cells": [ { "cell_type": "code", "execution_count": 41, "metadata": { "id": "mkIYsNGPtEfb" }, "outputs": [], "source": [ "import pandas as pd\n", "from sklearn.preprocessing import OneHotEncoder\n", "from sklearn.preprocessing import MinMaxScaler\n", "from sklearn.model_selection import train_test_split\n", "import numpy as np\n", "from sklearn.metrics import mean_squared_error\n", "from sklearn.metrics import mean_absolute_error\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from copy import deepcopy" ] }, { "cell_type": "markdown", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ZazUCR02tMH0", "outputId": "4e3a1d0d-163b-41e2-d6f3-799556908a66" }, "source": [ "!wget -O museumDataset.csv \"https://docs.google.com/spreadsheets/d/1lS9HEz8FreAkCpR_w_ykAHy3oWeQBqiuc_RJyr3dfbE/export?format=csv&gid=1322780754\"" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 930 }, "id": "jxUFPkPs8oTT", "outputId": "1b1b8c1a-4597-4738-a79c-dc7615e4cecc", "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Museum Type \\\n", "0 HISTORY MUSEUM \n", "1 ARBORETUM, BOTANICAL GARDEN, OR NATURE CENTER \n", "2 SCIENCE & TECHNOLOGY MUSEUM OR PLANETARIUM \n", "3 HISTORIC PRESERVATION \n", "4 HISTORY MUSEUM \n", "... ... \n", "33067 HISTORIC PRESERVATION \n", "33068 GENERAL MUSEUM \n", "33069 HISTORIC PRESERVATION \n", "33070 HISTORY MUSEUM \n", "33071 HISTORIC PRESERVATION \n", "\n", " State (Physical Location) Latitude Longitude Locale Code (NCES) \\\n", "0 NaN 61.17925 -149.97254 1.0 \n", "1 NaN 61.16890 -149.76708 4.0 \n", "2 NaN 60.56149 -151.21598 3.0 \n", "3 NaN 60.56280 -151.26597 3.0 \n", "4 NaN 61.17925 -149.97254 1.0 \n", "... ... ... ... ... \n", "33067 WY 44.82345 -106.87592 4.0 \n", "33068 WY 41.13941 -104.81813 1.0 \n", "33069 NaN 41.32276 -105.57686 3.0 \n", "33070 WY 41.13010 -104.81916 1.0 \n", "33071 NaN 44.91303 -110.41584 4.0 \n", "\n", " County Code (FIPS) State Code (FIPS) Region Code (AAM) Tax Period \\\n", "0 20.0 2.0 6 201312.0 \n", "1 20.0 2.0 6 201312.0 \n", "2 122.0 2.0 6 201312.0 \n", "3 122.0 2.0 6 201412.0 \n", "4 20.0 2.0 6 201312.0 \n", "... ... ... ... ... \n", "33067 33.0 56.0 5 NaN \n", "33068 21.0 56.0 5 201404.0 \n", "33069 1.0 56.0 5 201312.0 \n", "33070 21.0 56.0 5 201309.0 \n", "33071 29.0 56.0 5 201312.0 \n", "\n", " Income Revenue \n", "0 602912.0 550236.0 \n", "1 1379576.0 1323742.0 \n", "2 740030.0 729080.0 \n", "3 0.0 0.0 \n", "4 602912.0 550236.0 \n", "... ... ... \n", "33067 NaN NaN \n", "33068 0.0 0.0 \n", "33069 208508.0 83981.0 \n", "33070 0.0 0.0 \n", "33071 127496.0 126762.0 \n", "\n", "[33072 rows x 11 columns]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2545563/3140390142.py:2: DtypeWarning: Columns (9,14,21) have mixed types. Specify dtype option on import or set low_memory=False.\n", " df = pd.read_csv(file_path)\n" ] }, { "data": { "text/plain": [ "Index(['Museum Type', 'State (Physical Location)', 'Latitude', 'Longitude',\n", " 'Locale Code (NCES)', 'County Code (FIPS)', 'State Code (FIPS)',\n", " 'Region Code (AAM)', 'Tax Period', 'Income', 'Revenue'],\n", " dtype='object')" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "file_path = 'museumDataset.csv'\n", "df = pd.read_csv(file_path)\n", "for i in [\"Zip Code (Physical Location)\", \"Museum ID\", \"Museum Name\", \"Legal Name\", \"Alternate Name\", \"Institution Name\", \"Phone Number\", \"Employer ID Number\", \"Street Address (Administrative Location)\", \"Street Address (Physical Location)\", \"State (Administrative Location)\", \"City (Administrative Location)\", \"City (Physical Location)\", \"Zip Code (Administrative Location)\"]:\n", " df=df.drop(i, axis=1)\n", "print(df)\n", "df.columns" ] }, { "cell_type": "markdown", "metadata": { "id": "WEt2Wz708C6a" }, "source": [ "# EDA\n", "\n", "Code up the following concepts with regards to EDA.\n", "\n", "* Correlation\n", "* Mean, median, mode\n", "In addition, write down inferences from the dataset." ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([5, 8, 9, 8, 5])" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# exp1: numpy array multiplication:\n", "a=np.array([1,2,3,4,5])\n", "b=np.array([5,4,3,2,1])\n", "a*b" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "id": "RSrcX_7N8Drv" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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uHABPj4+uHXrlrBsckaMGIHx48cjJiZGs02jV69eCAwMxLhx4yQHc+ivaa/bjOjvw2KSSIeeeOIJPPHEE9i8ebNkfMGCBcjMzMTp06eFZWtLbW0tampqZN+SVorGxkbExsZi06ZNuHbtGgDA2toaCxcuhEqlUuTp0qtXr2L79u0oLCwEADg7O+O1115TTGeyJUtLS+zZs0frSqgvvvgCwcHBuH37trBscszNzZGbmwtHR0dYWloiPT0drq6uyMvLw6RJk1BWViY6IlGHwWVuIh169913MWHCBKSkpEhO8F65cgVffvml6HitMjU1hampqegYbdLX18ebb76JN998U3PtixKXX1vq27cv1q5dKzrGQwkJCcHMmTNRUlKi1fl92E6VLnXp0kWzT9La2holJSVwdXUFAPz222+C0xF1LCwmiXTomWeewcWLF7Ft2zZNN2rKlCmYM2cO3nnnHfj6+grNN2zYsIe+2iMnJ+dvz/Mobt68iQsXLgAABg0ahB49eoiO1KrKykrs2rUL58+fBwC4uroiNDRUkW81x8bG4vHHH0dcXJyk87t06VKoVCrR8TRWr14NlUoFb29vpKenw9nZGf7+/lCpVPjpp59w+PBheHt7i45J1KFwmZtIAZRyyXpMTIzm9/r6emzfvh0uLi6aLuqpU6dw7tw5zJ8/X3F3Id65cwcLFixAcnKy5sCNgYEBgoKCsGXLFsV1VrOzszF27FiYmJhoOn1ZWVmoq6vDN998o+hDIkru/BoYGODatWuoqalBTU0N3N3dcefOHahUKmRkZMDJyQkbNmzQuqWAiB4di0kiBVBKMdnSrFmzYG1tjbffflsyHhUVhStXrmD37t3CssmZO3cuUlJSsHXrVsm1S2FhYXjuueewY8cO0RElfH190b9/f+zcuROdOv3fRaKGhgbMmjULly5dwg8//CA6oiyld3719fVx/fp1Re/vJepoWEwSKYASi0kLCwtkZ2fDyclJMl5UVARPT09UVVUJyyanR48e+PTTT/Hss89Kxr/77jtMnToVN2/eFJZNjomJCX788UcMGjRIMl5QUABPT0/U1tYKyyanvXR+9fX1cePGDfTs2VN0FKJ/DOU8t0FEimJiYoITJ05ojZ84cQKdO3cWkqkttbW1sLKy0hrv1auX4gozNC8RX758WWv8ypUrMDc3F5KpLYsXL0ZaWhqO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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# df=df.fillna(0)\n", "numericColumns = df.select_dtypes(include=[np.number]).columns.tolist() # https://stackoverflow.com/a/29442936\n", "# print(numericColumns)\n", "\n", "def covariance(x, y):\n", " \"\"\"\n", " from https://www.indeed.com/career-advice/career-development/how-to-calculate-covariance\n", " \"\"\"\n", " xBar = x.mean()\n", " yBar = y.mean()\n", " return ((x-xBar)*(y-yBar)).mean()\n", "\n", "def correlation(x, y):\n", " return covariance(x, y) / (x.std() * y.std())\n", "\n", "correlationMat = np.zeros((len(numericColumns), len(numericColumns)))\n", "\n", "for i in range(len(numericColumns)):\n", " correlationMat[i,i]=1.0\n", " for j in range(i+1, len(numericColumns)):\n", " correlationMat[i][j] =correlationMat[j][i]= correlation(df[numericColumns[i]].dropna(), df[numericColumns[j]].dropna())\n", "\n", "# print(correlationMat, correlationMat.shape)\n", "sns.heatmap(correlationMat, xticklabels=numericColumns, yticklabels=numericColumns, center=0, cmap=\"crest\") # https://seaborn.pydata.org/generated/seaborn.heatmap.html" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "id": "yqWZAUjO9kRd" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namemeanmedianmode
0Latitude3.892537e+0139.8316440.79792
1Longitude-9.081676e+01-86.77684-77.86267
2Locale Code (NCES)2.505834e+002.000004.00000
3County Code (FIPS)8.570193e+0161.000001.00000
4State Code (FIPS)2.906583e+0129.000006.00000
5Region Code (AAM)3.670083e+004.000004.00000
6Tax Period2.013475e+05201312.00000201312.00000
7Income1.069682e+088781.000000.00000
8Revenue2.097605e+073307.000000.00000
\n", "
" ], "text/plain": [ " name mean median mode\n", "0 Latitude 3.892537e+01 39.83164 40.79792\n", "1 Longitude -9.081676e+01 -86.77684 -77.86267\n", "2 Locale Code (NCES) 2.505834e+00 2.00000 4.00000\n", "3 County Code (FIPS) 8.570193e+01 61.00000 1.00000\n", "4 State Code (FIPS) 2.906583e+01 29.00000 6.00000\n", "5 Region Code (AAM) 3.670083e+00 4.00000 4.00000\n", "6 Tax Period 2.013475e+05 201312.00000 201312.00000\n", "7 Income 1.069682e+08 8781.00000 0.00000\n", "8 Revenue 2.097605e+07 3307.00000 0.00000" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "featureMap = {\"name\":[], \"mean\":[], \"median\":[], \"mode\":[]}\n", "for i in numericColumns:\n", " # print(f\"{i}: Mean: {df[i].to_numpy().mean()}, Median: {np.median(df[i].to_numpy())}, Mode: {df[i].mode()[0]}\" )\n", " featureMap[\"name\"].append(i)\n", " featureMap[\"mean\"].append(df[i].dropna().to_numpy().mean())\n", " featureMap[\"median\"].append(np.median(df[i].dropna().to_numpy()))\n", " featureMap[\"mode\"].append(df[i].dropna().mode()[0])\n", "\n", "featureMap = pd.DataFrame(featureMap)\n", "featureMap" ] }, { "cell_type": "markdown", "metadata": { "id": "_xRWSeC99oe1" }, "source": [ "### Inferences from the dataset\n", "\n", "* The dataset has a lot of zero and nan values\n", "* Income and Revenue are highly correlated\n", "* Region code and Zip code are also highly correlated\n", "* \n" ] }, { "cell_type": "markdown", "metadata": { "id": "dbtxb55w9xoF" }, "source": [ "# Preprocessing\n", "Code up the following concepts with regards to Preprocessing. Justify the reason for using them for this specific dataset\n", "\n", "* Filling in missing values.\n", "* Encoding\n", "\n", "Any other techniques that you might need, please justify their usage and code them up." ] }, { "cell_type": "markdown", "metadata": { "id": "VZZnnUTU9ss3" }, "source": [ "Conditional Filling:\n", "\n", "- filling certain nan values based on a model fit over that column and some of the other columns\n", "- This will result in linearly dependent features, which can be ignored in the first place.\n", "- example: latitude and longitude based street/area code categorical estimation\n" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [], "source": [ "def countNA(col):\n", " return col.isna().sum()\n", "\n", "def printNAinDF(frame):\n", " print(\"NaNs in df\")\n", " for i in numericColumns:\n", " print(f\"{i}: {countNA(df[i])}\")" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NaNs in df\n", "Latitude: 65\n", "Longitude: 65\n", "Locale Code (NCES): 77\n", "County Code (FIPS): 2536\n", "State Code (FIPS): 1\n", "Region Code (AAM): 0\n", "Tax Period: 9792\n", "Income: 10111\n", "Revenue: 10782\n" ] } ], "source": [ "printNAinDF(df)" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NaNs in df\n", "Latitude: 0\n", "Longitude: 0\n", "Locale Code (NCES): 0\n", "County Code (FIPS): 0\n", "State Code (FIPS): 0\n", "Region Code (AAM): 0\n", "Tax Period: 0\n", "Income: 0\n", "Revenue: 0\n" ] } ], "source": [ "for i in numericColumns:\n", " df[i] = df[i].fillna(df[i].mean())\n", "\n", "printNAinDF(df)" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "id": "B1aC4Lv--eqR" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Unique data points in Museum Type: 9\n", "Unique data points in State (Physical Location): 52\n", "['HISTORY MUSEUM', 'ZOO, AQUARIUM, OR WILDLIFE CONSERVATION', \"CHILDREN'S MUSEUM\", 'HISTORIC PRESERVATION', 'ART MUSEUM', 'SCIENCE & TECHNOLOGY MUSEUM OR PLANETARIUM', 'ARBORETUM, BOTANICAL GARDEN, OR NATURE CENTER', 'GENERAL MUSEUM', 'NATURAL HISTORY MUSEUM']\n", "['HI', 'ND', 'WY', 'NM', 'CA', 'VA', 'IA', 'RI', 'MI', 'SC', 'NE', 'MA', 'AL', 'GA', 'WV', 'MN', 'NH', 'IL', 'PA', 'VT', nan, 'ID', 'SD', 'MD', 'DC', 'WI', 'MT', 'TN', 'DE', 'CT', 'NC', 'ME', 'LA', 'WA', 'AZ', 'AK', 'FL', 'MO', 'UT', 'CO', 'AR', 'KY', 'MS', 'NJ', 'OR', 'TX', 'KS', 'IN', 'NV', 'NY', 'OH', 'OK']\n" ] } ], "source": [ "# Encoding\n", "# Hint: Figure out which columns need to be encoded. Would One-Hot Encoding be enough for handling this type of data? What are the alternatives?\n", "\n", "categoricalColumns= df.select_dtypes(include=[\"object\", \"category\"]).columns\n", "categoricalColumns=categoricalColumns.to_list()\n", "# print(categoricalColumns)\n", "\n", "for i in categoricalColumns:\n", " uniq = set(df[i])\n", " print(f\"Unique data points in {i}:\", len(uniq))\n", "\n", "for i in categoricalColumns:\n", " res=[]\n", " rowUniq = list(set(df[i]))\n", " print(rowUniq)\n", " rowLen = len(rowUniq)\n", " for j in df[i]:\n", " tempRow = deepcopy([0]*rowLen)\n", " tempRow[rowUniq.index(j)]=1\n", " res.append(tempRow)\n", " df=df.drop(i, axis=1)\n", " # print(len(res), len(res[0]))\n", " res = pd.DataFrame(res, columns=rowUniq)\n", " # print(res.head())\n", " df = pd.concat([df, res], axis=1)" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
LatitudeLongitudeLocale Code (NCES)County Code (FIPS)State Code (FIPS)Region Code (AAM)Tax PeriodIncomeRevenueHISTORY MUSEUM...MSNJORTXKSINNVNYOHOK
061.17925-149.972541.020.02.06201312.0000006.029120e+055.502360e+051...0000000000
161.16890-149.767084.020.02.06201312.0000001.379576e+061.323742e+060...0000000000
260.56149-151.215983.0122.02.06201312.0000007.400300e+057.290800e+050...0000000000
360.56280-151.265973.0122.02.06201412.0000000.000000e+000.000000e+000...0000000000
461.17925-149.972541.020.02.06201312.0000006.029120e+055.502360e+051...0000000000
..................................................................
3306744.82345-106.875924.033.056.05201347.4585481.069682e+082.097605e+070...0000000000
3306841.13941-104.818131.021.056.05201404.0000000.000000e+000.000000e+000...0000000000
3306941.32276-105.576863.01.056.05201312.0000002.085080e+058.398100e+040...0000000000
3307041.13010-104.819161.021.056.05201309.0000000.000000e+000.000000e+001...0000000000
3307144.91303-110.415844.029.056.05201312.0000001.274960e+051.267620e+050...0000000000
\n", "

33072 rows × 70 columns

\n", "
" ], "text/plain": [ " Latitude Longitude Locale Code (NCES) County Code (FIPS) \\\n", "0 61.17925 -149.97254 1.0 20.0 \n", "1 61.16890 -149.76708 4.0 20.0 \n", "2 60.56149 -151.21598 3.0 122.0 \n", "3 60.56280 -151.26597 3.0 122.0 \n", "4 61.17925 -149.97254 1.0 20.0 \n", "... ... ... ... ... \n", "33067 44.82345 -106.87592 4.0 33.0 \n", "33068 41.13941 -104.81813 1.0 21.0 \n", "33069 41.32276 -105.57686 3.0 1.0 \n", "33070 41.13010 -104.81916 1.0 21.0 \n", "33071 44.91303 -110.41584 4.0 29.0 \n", "\n", " State Code (FIPS) Region Code (AAM) Tax Period Income \\\n", "0 2.0 6 201312.000000 6.029120e+05 \n", "1 2.0 6 201312.000000 1.379576e+06 \n", "2 2.0 6 201312.000000 7.400300e+05 \n", "3 2.0 6 201412.000000 0.000000e+00 \n", "4 2.0 6 201312.000000 6.029120e+05 \n", "... ... ... ... ... \n", "33067 56.0 5 201347.458548 1.069682e+08 \n", "33068 56.0 5 201404.000000 0.000000e+00 \n", "33069 56.0 5 201312.000000 2.085080e+05 \n", "33070 56.0 5 201309.000000 0.000000e+00 \n", "33071 56.0 5 201312.000000 1.274960e+05 \n", "\n", " Revenue HISTORY MUSEUM ... MS NJ OR TX KS IN NV NY OH \\\n", "0 5.502360e+05 1 ... 0 0 0 0 0 0 0 0 0 \n", "1 1.323742e+06 0 ... 0 0 0 0 0 0 0 0 0 \n", "2 7.290800e+05 0 ... 0 0 0 0 0 0 0 0 0 \n", "3 0.000000e+00 0 ... 0 0 0 0 0 0 0 0 0 \n", "4 5.502360e+05 1 ... 0 0 0 0 0 0 0 0 0 \n", "... ... ... ... .. .. .. .. .. .. .. .. .. \n", "33067 2.097605e+07 0 ... 0 0 0 0 0 0 0 0 0 \n", "33068 0.000000e+00 0 ... 0 0 0 0 0 0 0 0 0 \n", "33069 8.398100e+04 0 ... 0 0 0 0 0 0 0 0 0 \n", "33070 0.000000e+00 1 ... 0 0 0 0 0 0 0 0 0 \n", "33071 1.267620e+05 0 ... 0 0 0 0 0 0 0 0 0 \n", "\n", " OK \n", "0 0 \n", "1 0 \n", "2 0 \n", "3 0 \n", "4 0 \n", "... .. \n", "33067 0 \n", "33068 0 \n", "33069 0 \n", "33070 0 \n", "33071 0 \n", "\n", "[33072 rows x 70 columns]" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 102, "metadata": { "id": "_l2tFo0RBlZ9" }, "outputs": [], "source": [ "# Any other preprocessing...?\n", "\n", "normilizingCols=[\"Income\", \"Tax Period\", \"Revenue\"]\n", "for i in normilizingCols:\n", " df[i] = 5*(df[i] - df[i].min())/(df[i].max() - df[i].min())" ] }, { "cell_type": "code", "execution_count": 103, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 930 }, "id": "CdPfPeMg-gTG", "outputId": "1554caf7-37c2-4135-bbdc-aeea16a7a9d2" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
LatitudeLongitudeLocale Code (NCES)County Code (FIPS)State Code (FIPS)Region Code (AAM)Tax PeriodIncomeRevenueHISTORY MUSEUM...MSNJORTXKSINNVNYOHOK
061.17925-149.972541.020.02.060.6007514.9999644.9977081...0000000000
161.16890-149.767084.020.02.060.6007514.9999174.9970470...0000000000
260.56149-151.215983.0122.02.060.6007514.9999554.9975550...0000000000
360.56280-151.265973.0122.02.060.2878605.0000004.9981790...0000000000
461.17925-149.972541.020.02.060.6007514.9999644.9977081...0000000000
..................................................................
3306744.82345-106.875924.033.056.050.4898044.9935704.9802280...0000000000
3306841.13941-104.818131.021.056.050.3128915.0000004.9981790...0000000000
3306941.32276-105.576863.01.056.050.6007514.9999874.9981080...0000000000
3307041.13010-104.819161.021.056.050.6101385.0000004.9981791...0000000000
3307144.91303-110.415844.029.056.050.6007514.9999924.9980710...0000000000
\n", "

33072 rows × 70 columns

\n", "
" ], "text/plain": [ " Latitude Longitude Locale Code (NCES) County Code (FIPS) \\\n", "0 61.17925 -149.97254 1.0 20.0 \n", "1 61.16890 -149.76708 4.0 20.0 \n", "2 60.56149 -151.21598 3.0 122.0 \n", "3 60.56280 -151.26597 3.0 122.0 \n", "4 61.17925 -149.97254 1.0 20.0 \n", "... ... ... ... ... \n", "33067 44.82345 -106.87592 4.0 33.0 \n", "33068 41.13941 -104.81813 1.0 21.0 \n", "33069 41.32276 -105.57686 3.0 1.0 \n", "33070 41.13010 -104.81916 1.0 21.0 \n", "33071 44.91303 -110.41584 4.0 29.0 \n", "\n", " State Code (FIPS) Region Code (AAM) Tax Period Income Revenue \\\n", "0 2.0 6 0.600751 4.999964 4.997708 \n", "1 2.0 6 0.600751 4.999917 4.997047 \n", "2 2.0 6 0.600751 4.999955 4.997555 \n", "3 2.0 6 0.287860 5.000000 4.998179 \n", "4 2.0 6 0.600751 4.999964 4.997708 \n", "... ... ... ... ... ... \n", "33067 56.0 5 0.489804 4.993570 4.980228 \n", "33068 56.0 5 0.312891 5.000000 4.998179 \n", "33069 56.0 5 0.600751 4.999987 4.998108 \n", "33070 56.0 5 0.610138 5.000000 4.998179 \n", "33071 56.0 5 0.600751 4.999992 4.998071 \n", "\n", " HISTORY MUSEUM ... MS NJ OR TX KS IN NV NY OH OK \n", "0 1 ... 0 0 0 0 0 0 0 0 0 0 \n", "1 0 ... 0 0 0 0 0 0 0 0 0 0 \n", "2 0 ... 0 0 0 0 0 0 0 0 0 0 \n", "3 0 ... 0 0 0 0 0 0 0 0 0 0 \n", "4 1 ... 0 0 0 0 0 0 0 0 0 0 \n", "... ... ... .. .. .. .. .. .. .. .. .. .. \n", "33067 0 ... 0 0 0 0 0 0 0 0 0 0 \n", "33068 0 ... 0 0 0 0 0 0 0 0 0 0 \n", "33069 0 ... 0 0 0 0 0 0 0 0 0 0 \n", "33070 1 ... 0 0 0 0 0 0 0 0 0 0 \n", "33071 0 ... 0 0 0 0 0 0 0 0 0 0 \n", "\n", "[33072 rows x 70 columns]" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Final dataset\n", "df" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "hFzaF_CMBrCd" }, "outputs": [], "source": [] } ], "metadata": { "colab": { "provenance": [], "toc_visible": true }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9" } }, "nbformat": 4, "nbformat_minor": 4 }