diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..de3dee2 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index 228e604..e69de29 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +0,0 @@ -node_modules -dist -.env -pages -data_json \ No newline at end of file diff --git a/analyzer/LinkedIn Analyzer.ipynb b/analyzer/LinkedIn Analyzer.ipynb new file mode 100644 index 0000000..5d6aac2 --- /dev/null +++ b/analyzer/LinkedIn Analyzer.ipynb @@ -0,0 +1,1694 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "4UJuB0cXl3hm", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "89914008-84ef-4997-c8d1-79e2604eef82" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m15.1/15.1 MB\u001b[0m \u001b[31m77.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.1/3.1 MB\u001b[0m \u001b[31m57.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h" + ] + } + ], + "source": [ + "!pip install -q scikit-learn geopy shap sweetviz rapidfuzz joblib\n", + "import pandas as pd, numpy as np, joblib, json, re, math, shap, sweetviz\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "from sklearn.metrics import (\n", + " classification_report, confusion_matrix, roc_auc_score, RocCurveDisplay,\n", + " precision_recall_curve, PrecisionRecallDisplay\n", + ")\n", + "from geopy.geocoders import Nominatim\n", + "from geopy.distance import geodesic\n", + "from rapidfuzz import process, fuzz\n", + "import matplotlib.pyplot as plt\n" + ] + }, + { + "cell_type": "code", + "source": [ + "#load data\n", + "train = pd.read_csv(\"naf_analyzer_train.csv\")\n", + "val = pd.read_csv(\"naf_analyzer_val.csv\")\n", + "test = pd.read_csv(\"naf_analyzer_test.csv\")\n", + "\n", + "print(train.shape, val.shape, test.shape)\n", + "train.head()\n" + ], + "metadata": { + "id": "1vhK_ld9o_xh", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 327 + }, + "outputId": "fcfbc986-d022-4bcb-d00d-f445134944cd" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(33, 9) (33, 9) (8, 9)\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " id academy track_certified \\\n", + "0 1 CTE Industry Scholars Program NaN \n", + "1 2 NAF Academy of Information Technology NaN \n", + "2 3 Academy of Finance NaN \n", + "3 4 Academy of Finance and Information Technology Yes \n", + "4 5 Academy of Engineering NaN \n", + "\n", + " high_school \\\n", + "0 James Madison High School \n", + "1 James Madison High School \n", + "2 Emmett J Conrad High School \n", + "3 Southwest Miami Senior High School \n", + "4 Hillcrest High School \n", + "\n", + " company_internship \\\n", + "0 NAF \n", + "1 NaN \n", + "2 NaN \n", + "3 Zoo Miami \n", + "4 The Fab Lab at WorkChops, Verizon, Thaddeus Re... \n", + "\n", + " company_job city state \\\n", + "0 Asphalt Green New York City Metropolitan Area New York \n", + "1 NaN Dallas Texas \n", + "2 NaN Dallas Texas \n", + "3 NaN NaN NaN \n", + "4 Thaddeus Resouce Center, Target Dallas Texas \n", + "\n", + " target \n", + "0 1 \n", + "1 1 \n", + "2 1 \n", + "3 1 \n", + "4 1 " + ], + "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", + "
idacademytrack_certifiedhigh_schoolcompany_internshipcompany_jobcitystatetarget
01CTE Industry Scholars ProgramNaNJames Madison High SchoolNAFAsphalt GreenNew York City Metropolitan AreaNew York1
12NAF Academy of Information TechnologyNaNJames Madison High SchoolNaNNaNDallasTexas1
23Academy of FinanceNaNEmmett J Conrad High SchoolNaNNaNDallasTexas1
34Academy of Finance and Information TechnologyYesSouthwest Miami Senior High SchoolZoo MiamiNaNNaNNaN1
45Academy of EngineeringNaNHillcrest High SchoolThe Fab Lab at WorkChops, Verizon, Thaddeus Re...Thaddeus Resouce Center, TargetDallasTexas1
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "train", + "summary": "{\n \"name\": \"train\",\n \"rows\": 33,\n \"fields\": [\n {\n \"column\": \"id\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 10,\n \"min\": 1,\n \"max\": 37,\n \"num_unique_values\": 33,\n \"samples\": [\n 35,\n 17,\n 28\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"academy\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"NAF Academy of Information Technology\",\n \"Academy of Engineering\",\n \"CTE Industry Scholars Program\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"track_certified\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"Yes\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"high_school\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 12,\n \"samples\": [\n \"Hendrick Hudson High School\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"company_internship\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 12,\n \"samples\": [\n \"Cisco, Verizon, Raytheon Technologies\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"company_job\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 25,\n \"samples\": [\n \"ServiceNow\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"city\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 21,\n \"samples\": [\n \"New York City Metropolitan Area\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"state\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"Texas\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"target\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 1,\n \"num_unique_values\": 2,\n \"samples\": [\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 2 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import json\n", + "\n", + "# read JSON\n", + "with open('high_schools.json', 'r') as f:\n", + " HIGH_SCHOOLS_JSON = json.load(f)\n", + "\n", + "with open('partner_companies.json', 'r') as f:\n", + " PARTNERED_COMPANIES_JSON = json.load(f)\n", + "\n", + "with open('academies.json', 'r') as f:\n", + " ACADEMY_LOCATIONS_JSON = json.load(f)\n", + "\n", + "HIGH_SCHOOLS = { entry['name'].lower() for entry in HIGH_SCHOOLS_JSON }\n", + "PARTNER_COMPANIES = { entry['name'].lower() for entry in PARTNERED_COMPANIES_JSON }\n", + "ACADEMIES = pd.DataFrame(ACADEMY_LOCATIONS_JSON)\n", + "\n", + "print(len(HIGH_SCHOOLS), \"high schools loaded\")\n", + "print(len(PARTNER_COMPANIES), \"partner companies loaded\")\n", + "print(ACADEMIES.shape, \"academy locations loaded\")\n" + ], + "metadata": { + "id": "hztDaiqkpBNs", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "737e2c7f-ac00-4117-e4d4-f1f4ef01552b" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "327 high schools loaded\n", + "26 partner companies loaded\n", + "(131, 4) academy locations loaded\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# geocoding\n", + "geocoder = Nominatim(user_agent=\"naf_analyzer\")\n", + "coords_cache = {}\n", + "\n", + "def latlon(city, state):\n", + " key = f\"{city},{state}\".lower()\n", + " if key in coords_cache:\n", + " return coords_cache[key]\n", + " try:\n", + " loc = geocoder.geocode(f\"{city}, {state}\", timeout=10)\n", + " coords_cache[key] = (loc.latitude, loc.longitude) if loc else (np.nan, np.nan)\n", + " except Exception:\n", + " coords_cache[key] = (np.nan, np.nan)\n", + " return coords_cache[key]\n", + "\n" + ], + "metadata": { + "id": "APFvVCaugLex" + }, + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#business rules\n", + "class NAFEngineer(BaseEstimator, TransformerMixin):\n", + " def __init__(self):\n", + " pass\n", + "\n", + " def _fuzzy_in(self, value, space):\n", + " \"\"\"fuzzy 90/100 match to handle typos\"\"\"\n", + " if pd.isna(value): return 0\n", + " match, score, _ = process.extractOne(\n", + " str(value).lower(), space, scorer=fuzz.partial_ratio\n", + " )\n", + " return int(score >= 90)\n", + "\n", + " def _nearest_academy(self, row):\n", + " if pd.isna(row['lat']) or pd.isna(row['lon']):\n", + " return np.nan\n", + " # vectorised haversine by geodesic (must change for larger datasets)\n", + " dists = ACADEMIES.apply(\n", + " lambda r: geodesic((row['lat'],row['lon']), (r.lat,r.lon)).km, axis=1\n", + " )\n", + " return dists.min()\n", + "\n", + " def fit(self, X, y=None):\n", + " return self\n", + "\n", + " def transform(self, X):\n", + " df = X.copy()\n", + "\n", + " #clean\n", + " for col in ['academy','high_school','Company_internship','company_job','city','state']:\n", + " if col in df.columns:\n", + " df[col] = (df[col]\n", + " .astype(str)\n", + " .str.strip()\n", + " .str.replace(r'\\s+', ' ', regex=True)\n", + " .str.lower()\n", + " .replace({'nan':np.nan, '':np.nan}))\n", + "\n", + " #indicators\n", + " df['rule_definite'] = (\n", + " df['academy'].notna() |\n", + " df['track_certified'].isin(['yes','true','1'])\n", + " ).astype(int)\n", + "\n", + " #high-school/company matches\n", + " df['hs_match'] = df['high_school'].apply(lambda v: self._fuzzy_in(v, HIGH_SCHOOLS))\n", + " df['intern_cmp'] = df['Company_internship'].apply(lambda v: self._fuzzy_in(v, PARTNER_COMPANIES))\n", + " df['job_cmp'] = df['company_job'].apply(lambda v: self._fuzzy_in(v, PARTNER_COMPANIES))\n", + "\n", + " #geolocation\n", + " coords = df.apply(lambda r: latlon(r['city'], r['state']), axis=1)\n", + " df[['lat','lon']] = pd.DataFrame(coords.tolist(), index=df.index)\n", + " df['dist_km'] = df.apply(self._nearest_academy, axis=1)\n", + " df['prox_strong'] = (df['dist_km'] < 80).astype(int)\n", + " df['prox_weak'] = ((df['dist_km'] >= 80) & (df['dist_km'] <= 160)).astype(int)\n", + "\n", + " #binary cleanup\n", + " df['track_certified_flag'] = df['track_certified'].isin(['yes','true','1']).astype(int)\n", + " df['has_academy'] = df['academy'].notna().astype(int)\n", + "\n", + " # keep only numeric engineered columns + rule flag\n", + " return df[[\n", + " 'rule_definite','has_academy','track_certified_flag',\n", + " 'hs_match','intern_cmp','job_cmp',\n", + " 'prox_strong','prox_weak'\n", + " ]].fillna(0).astype(int)\n" + ], + "metadata": { + "id": "Li59Kz1wgVwF" + }, + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#ONE-OFF column normaliser\n", + "\n", + "_EXPECTED = [\n", + " \"academy\", \"track_certified\", \"high_school\",\n", + " \"Company_internship\", \"company_job\", \"city\", \"state\"\n", + "]\n", + "\n", + "_RENAME = {\n", + " \"company_internship\": \"Company_internship\",\n", + " \"company internship\": \"Company_internship\",\n", + " \"internship_company\": \"Company_internship\",\n", + " \"companyJob\": \"company_job\",\n", + " \"company job\": \"company_job\",\n", + " \"highschool\": \"high_school\",\n", + " \"hs\": \"high_school\"\n", + "}\n", + "\n", + "def normalise_columns(df: pd.DataFrame) -> pd.DataFrame:\n", + " df = df.copy()\n", + " #clean white-space and lower-case\n", + " df.columns = [c.strip().lower() for c in df.columns]\n", + "\n", + " #renames\n", + " df.rename(columns=_RENAME, inplace=True)\n", + "\n", + " #capitalise final canonical names\n", + " if \"company_internship\" in df.columns:\n", + " df.rename(columns={\"company_internship\": \"Company_internship\"}, inplace=True)\n", + "\n", + " # add columns that are still missing so pipeline never fails\n", + " for col in _EXPECTED:\n", + " if col not in df.columns:\n", + " df[col] = np.nan\n", + "\n", + " return df\n" + ], + "metadata": { + "id": "xUQ7Dytvk8uv" + }, + "execution_count": 6, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#build, fit, evaluate\n", + "pipe = Pipeline([\n", + " ('eng', NAFEngineer()),\n", + " ('clf', LogisticRegression(class_weight='balanced',\n", + " max_iter=300,\n", + " random_state=42))\n", + "])\n", + "\n", + "#train\n", + "train_fixed = normalise_columns(train)\n", + "y_train = train_fixed['target']\n", + "X_train = train_fixed.drop(columns='target')\n", + "pipe.fit(X_train, y_train)\n", + "\n", + "#validation\n", + "val_fixed = normalise_columns(val)\n", + "y_val = val_fixed['target']\n", + "X_val = val_fixed.drop(columns='target')\n", + "\n", + "y_pred = pipe.predict(X_val)\n", + "y_prob = pipe.predict_proba(X_val)[:, 1]\n", + "\n", + "from sklearn.metrics import classification_report, roc_auc_score\n", + "print(classification_report(y_val, y_pred))\n", + "print(\"AUC:\", roc_auc_score(y_val, y_prob))\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hYovdyXGgXYi", + "outputId": "00fdaf11-3c12-4e12-8147-c732f05d1803" + }, + "execution_count": 7, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.78 0.93 0.85 15\n", + " 1 0.93 0.78 0.85 18\n", + "\n", + " accuracy 0.85 33\n", + " macro avg 0.86 0.86 0.85 33\n", + "weighted avg 0.86 0.85 0.85 33\n", + "\n", + "AUC: 0.9\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "#ROC & PR curves\n", + "RocCurveDisplay.from_predictions(y_val, y_prob); plt.show()\n", + "PrecisionRecallDisplay.from_predictions(y_val, y_prob); plt.show()\n", + "\n", + "# choose threshold to maximises F1\n", + "prec, rec, thr = precision_recall_curve(y_val, y_prob)\n", + "f1 = 2*(prec*rec)/(prec+rec+1e-9)\n", + "best_thr = thr[np.argmax(f1)]\n", + "print(\"Best F1 threshold:\", best_thr.round(3))\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 902 + }, + "id": "MEBHrdJQmjvz", + "outputId": "b1f89402-3caa-4873-881d-737e365b8318" + }, + "execution_count": 8, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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AODnn3/W7AGfPXsWmzdvxrPPPqtzvX/99RcAYMWKFbh27Zrm/YNeeeUVODs7a53fKi0txbp16xAaGgrg3gN9u3btij59+uCff/7BunXrcODAAYwZM0bvvtC3fz/88EP06dMHx48fR2hoKPr3749Tp04BAIqLixESEgIHBwckJibi4MGDsLe3R9euXaFSqXRud+XKlZDJZHrXWZF27dohMTHRKOuiauwxn2JBZFRhYWFCLpeL2rVrC6VSKQAIKysrsWHDBiGEEHfv3hV2dnbi0KFDWssNGzZMDBgwQAghRFRUlGjYsKFQqVR6bbO0tFQ4ODiIX375RdMGQGzatEkIIURqaqoAII4dO1buOnx9fcXs2bO12u4/4uX+I2yuXr0qgoKCRP369UVRUZEICgoS4eHhWsu89dZbonv37kIIIb744gvRtGnTcj9HgwYNxJdffqmz5vuio6OFr6+v5v348ePFyy+/rHm/c+dOoVQqNTUOGzZMjBgxQmsdiYmJwsrKShQWFuqs4+FtPKy8/h01apTWfAEBAWL06NFCCCHWrFkjmjVrJtRqtWZ6UVGRsLW1FTt37hRClH3M1MaNG0WzZs3KreNhuvrrvi1btggrKytRWlqq9/rI8nAPkKqd+09P//PPPxEWFoahQ4eiT58+AIBz586hoKAAnTt3hr29vea1evVqzSHO5ORkdOjQAdbW1jrXn5mZifDwcPj4+MDJyQmOjo7Iy8tDWlpapWsuLCyEjY2NzmlPPvkkateuDU9PT+Tn5+Pnn3+GQqHAqVOn0L59e61527dvr9kLeuutt1BYWIhGjRohPDwcmzZt0uzFVlZoaCj27duHq1evAgDWrl2LV199Fc7OzgCA48ePY+XKlVp9GxISArVajdTUVL22oW//Pvz07sDAQM1nP378OM6dOwcHBwdNHXXr1sXdu3c1/88P6927N06fPm1Id5TL1tYWarUaRUVFRlkfVU+1zF0A0cNq166NJk2aAACWL18OX19fLFu2DMOGDUNeXh4AYPv27WXOtymVSgD/O8xYnrCwMNy6dQtfffUVGjRoAKVSicDAwHIPrenDxcUFd+7c0TktMTERjo6OcHNz01whqg8vLy+cOXMGu3fvxq5du/Duu+/is88+w/79+8sN90d57rnn0LhxY8TFxWH06NHYtGkTVq5cqZmel5eHkSNHap1rvO+pp57SaxvG6N+8vDy0bdsWa9euLTPN1dVV7/VU1u3bt1G7du1H/iyRZWMAUrVmZWWFDz74AJGRkRg4cCBatmwJpVKJtLQ0dOrUSecyrVq1wqpVq1BcXKwzKA4ePIhFixahe/fuAO5dbHHz5s3HqtPPzw8pKSk6pzVs2FCzh/WgFi1a4ODBgwgLC9OqrWXLlpr3tra26NGjB3r06IGIiAg0b94cJ06cQJs2bcqsz9raWq+rS0NDQ7F27Vo8+eSTsLKywquvvqqZ1qZNG6SkpGj+AKkMffv3jz/+wODBg7Xe+/n5aepYt24d3Nzc4OjoWOlaKuvkyZOaWqjm4iFQqvbeeustyOVyxMbGwsHBARMnTsSECROwatUqnD9/HkePHsXChQuxatUqAMCYMWOQk5OD/v374++//8bZs2exZs0anDlzBgDg4+ODNWvW4NSpU/jzzz8RGhr62H/ph4SEICkpyaDhDZMmTcLKlSuxePFinD17FvPnz8fGjRsxceJEAPcu6li2bBlOnjyJCxcu4P/+7/9ga2uLBg0a6Fyft7c3EhISkJGRUe7eKHAvAI8ePYq5c+fizTff1Ow5A8CUKVNw6NAhjBkzBsnJyTh79iy2bNli0EUw+vbv+vXrsXz5cvz333+Ijo7G4cOHNdsJDQ2Fi4sLXn/9dSQmJiI1NRX79u3DuHHjcPnyZZ3b3bRpE5o3b15hbXl5eUhOTtbc1CA1NRXJycllDs8mJiaiS5cuen9mslDmPglJ9KCHL2y4LyYmRri6uoq8vDyhVqvFggULRLNmzYS1tbVwdXUVISEhYv/+/Zr5jx8/Lrp06SLs7OyEg4OD6NChgzh//rwQQoijR48Kf39/YWNjI3x8fMT69esrvKBEn4tgiouLhaenp4iPj9e0PXwRjC6LFi0SjRo1EtbW1qJp06Zi9erVmmmbNm0SAQEBwtHRUdSuXVs8//zzYvfu3ZrpD9e8detW0aRJE1GrVi3RoEEDIUT5F6i0a9dOABB79uwpM+3w4cOic+fOwt7eXtSuXVu0atVKzJ07t9zP8PA29O3f2NhY0blzZ6FUKoW3t7dYt26d1nqvXbsmBg8eLFxcXIRSqRSNGjUS4eHhIjs7WwhR9mdlxYoV4lFfaff/Tx5+hYWFaea5fPmysLa2Funp6RWuiyyfTAghzJS9RDVKbGwstm7dip07d5q7FHoMU6ZMwZ07d/Ddd9+ZuxQyMZ4DJDKSkSNHIisrC7m5uQZd7ELVi5ubGyIjI81dBlUB7gESEZEk8SIYIiKSJAYgERFJEgOQiIgkiQFIRESSxAAkIiJJYgASEZEkMQCJiEiSGIBERCRJDEAiIpKk/wfXHq9F0lKz5gAAAABJRU5ErkJggg==\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Best F1 threshold: 0.571\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "#inspect coefficients\n", + "\n", + "# grab one row, pass through the SAME normaliser used everywhere else\n", + "sample = normalise_columns(train.head(1))\n", + "\n", + "# transform to get the post-engineering feature order\n", + "feat_cols = pipe.named_steps['eng'].transform(sample).columns\n", + "\n", + "# model coefficients\n", + "coef = pipe.named_steps['clf'].coef_[0]\n", + "\n", + "coef_df = (\n", + " pd.DataFrame({\"feature\": feat_cols, \"beta\": coef})\n", + " .sort_values(\"beta\", ascending=False)\n", + " .reset_index(drop=True)\n", + ")\n", + "\n", + "coef_df\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + }, + "id": "j1INJ5LTmmlk", + "outputId": "840cdffa-a56d-4113-9a28-4a280113d689" + }, + "execution_count": 9, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " feature beta\n", + "0 hs_match 1.405408\n", + "1 rule_definite 0.798730\n", + "2 has_academy 0.798730\n", + "3 prox_strong 0.788605\n", + "4 prox_weak 0.392709\n", + "5 intern_cmp 0.361628\n", + "6 track_certified_flag 0.000000\n", + "7 job_cmp 0.000000" + ], + "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", + "
featurebeta
0hs_match1.405408
1rule_definite0.798730
2has_academy0.798730
3prox_strong0.788605
4prox_weak0.392709
5intern_cmp0.361628
6track_certified_flag0.000000
7job_cmp0.000000
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "coef_df", + "summary": "{\n \"name\": \"coef_df\",\n \"rows\": 8,\n \"fields\": [\n {\n \"column\": \"feature\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"rule_definite\",\n \"intern_cmp\",\n \"hs_match\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"beta\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.47433493649903935,\n \"min\": 0.0,\n \"max\": 1.4054080799162294,\n \"num_unique_values\": 6,\n \"samples\": [\n 1.4054080799162294,\n 0.7987298697301047,\n 0.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 9 + } + ] + }, + { + "source": [ + "# @title beta\n", + "\n", + "from matplotlib import pyplot as plt\n", + "coef_df['beta'].plot(kind='hist', bins=20, title='beta')\n", + "plt.gca().spines[['top', 'right',]].set_visible(False)" + ], + "cell_type": "code", + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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WKi2bdvqkksu0cyZM/Xtt986P+5h/vz56ty5sy6//HKdOHFCL7/8sjZs2KB3333XkzYAAICBPAo3c+fO1bvvvusMNpLUpk0bPfbYY7rxxhvrHW62bdum4cOHO89Pv9yVmpqqnJwcFRcXq6ioyPn4yZMndd999+nbb79Vy5YtdcUVV+i9995zuQcAADi/eRRuysvLdeTIkTPGjxw5ooqKinrfZ9iwYbIs66yP5+TkuJxPnz5d06dPr/f9AQDA+cejv1B8yy23aOLEiVqxYoUOHTqkQ4cO6e9//7vS0tJ06623ertGAACAevNo5SY7O1vTpk3ThAkTVFNT89ONgoOVlpamp556yqsFAgAAuMOjcNOyZUs9//zzeuqpp/TNN99Ikrp06aJWrVp5tTgAAAB3NeiDM09/cGW3bt3UqlWrc+6fAQAA8AePws2//vUvXX/99erevbtGjRql4uJiSVJaWlq93ykFAADgCx6Fm3vvvVfNmzdXUVGRWrZs6RwfN26c1q1b57XiAAAA3OXRnpt3331X77zzjjp27Ogy3q1bNx04cMArhQEAAHjCo5WbqqoqlxWb077//ns+xwkAAASUR+FmyJAhzo9EkH76DCmHw6Enn3ySvxYMAAACyqOXpZ588kldf/312rZtm06ePKnp06frs88+0/fff68PP/zQ2zUCAADUm0crN71799ZXX32lwYMHa8yYMaqqqtKtt96qgoICdenSxds1AgAA1JvbKzc1NTW66aablJ2drQcffNAXNQEAAHjM7ZWb5s2b69NPP/VFLQAAAA3m0ctSt912m1555RVv1wIAANBgHm0oPnXqlBYtWqT33ntP8fHxZ3ym1Lx587xSHAAAgLvcCjd79+5VbGysdu3apSuvvFKS9NVXX7nMsdls3qsOAADATW6Fm27duqm4uFgbN26U9NPHLfz1r39VVFSUT4oDAABwl1t7bn75qd9vv/22qqqqvFoQAABAQ3i0ofi0X4YdAACAQHMr3NhstjP21LDHBgAANCZu7bmxLEt33HGH88MxT5w4obvuuuuMd0utWLHCexUCAAC4wa1wk5qa6nJ+2223ebUYAACAhnIr3CxevNhXdQAAAHhFgzYUAwAANDaEGwAAYBTCDQAAMArhBgAAGIVwAwAAjEK4AQAARiHcAAAAoxBuAACAUQg3AADAKIQbAABgFMINAAAw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\n" + }, + "metadata": {} + } + ], + "metadata": { + "cellView": "form", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 452 + }, + "id": "9G6bJ6TqnI0z", + "outputId": "d6cd8299-a527-4b7e-d593-232dada7d3c4" + } + }, + { + "cell_type": "code", + "source": [ + "#SHAP check\n", + "import shap\n", + "shap.initjs() # for colab plots\n", + "\n", + "#engineered matrices on same schema\n", + "X_train_eng = pipe.named_steps['eng'].transform(\n", + " normalise_columns(train).drop(columns='target')\n", + " )\n", + "X_val_eng = pipe.named_steps['eng'].transform(\n", + " normalise_columns(val).drop(columns='target')\n", + " )\n", + "\n", + "#build linear explainer with new masker API\n", + "masker = shap.maskers.Independent(X_train_eng)\n", + "explainer = shap.LinearExplainer(pipe.named_steps['clf'], masker)\n", + "\n", + "#generate SHAP values on validation set\n", + "shap_values = explainer(X_val_eng)\n", + "\n", + "#summary\n", + "shap.summary_plot(shap_values, X_val_eng, feature_names=X_val_eng.columns)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 502 + }, + "id": "J0LrutRGm4bA", + "outputId": "1d493c20-d6e6-413a-e594-a428793a2c9e" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "
" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "#final test\n", + "import warnings\n", + "from sklearn.metrics import classification_report, roc_auc_score\n", + "\n", + "warnings.filterwarnings(\"ignore\", category=FutureWarning) # hides the replace() warning\n", + "\n", + "#check: schema matches what NAFEngineer expects\n", + "test_fixed = normalise_columns(test)\n", + "\n", + "#separate features / target\n", + "y_test = test_fixed['target']\n", + "X_test = test_fixed.drop(columns='target')\n", + "\n", + "#evaluate\n", + "print(classification_report(y_test, pipe.predict(X_test)))\n", + "print(\"Final test AUC:\", roc_auc_score(y_test, pipe.predict_proba(X_test)[:, 1]))\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "nrWcBDEmn6JV", + "outputId": "d69973d2-1e8e-4a1f-a835-a5c058c075ed" + }, + "execution_count": 11, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 1.00 0.88 0.93 8\n", + " 1 0.00 0.00 0.00 0\n", + "\n", + " accuracy 0.88 8\n", + " macro avg 0.50 0.44 0.47 8\n", + "weighted avg 1.00 0.88 0.93 8\n", + "\n", + "Final test AUC: nan\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Recall is ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Recall is ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Recall is ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_ranking.py:379: UndefinedMetricWarning: Only one class is present in y_true. ROC AUC score is not defined in that case.\n", + " warnings.warn(\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "#wrap into helper\n", + "def naf_infer(raw_profile: pd.DataFrame, thr=best_thr):\n", + " features = pipe.named_steps['eng'].transform(raw_profile)\n", + " if features['rule_definite'].iloc[0] == 1: # academy OR track certified\n", + " return 1, 1.0 # forced 100 % confidence\n", + " prob = pipe.named_steps['clf'].predict_proba(features)[:,1][0]\n", + " return int(prob >= thr), prob\n" + ], + "metadata": { + "id": "QlL24AfdoVOo" + }, + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#feature weightages\n", + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "features = normalise_columns(train.head(1).copy()) # <-- your helper\n", + "X_eng = pipe.named_steps['eng'].transform(features) # engineered features\n", + "\n", + "coefs = pipe.named_steps['clf'].coef_.flatten()\n", + "\n", + "weights = (\n", + " pd.DataFrame({\"feature\": X_eng.columns, \"weight\": coefs})\n", + " .sort_values(\"weight\", ascending=False)\n", + " .reset_index(drop=True)\n", + ")\n", + "\n", + "print(\"Logistic‑regression weights (β):\")\n", + "display(weights)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 317 + }, + "id": "hMpApTywl7n1", + "outputId": "4d2b653b-40cd-42aa-b08c-da15234de8e6" + }, + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Logistic‑regression weights (β):\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " feature weight\n", + "0 hs_match 1.405408\n", + "1 rule_definite 0.798730\n", + "2 has_academy 0.798730\n", + "3 prox_strong 0.788605\n", + "4 prox_weak 0.392709\n", + "5 intern_cmp 0.361628\n", + "6 track_certified_flag 0.000000\n", + "7 job_cmp 0.000000" + ], + "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", + "
featureweight
0hs_match1.405408
1rule_definite0.798730
2has_academy0.798730
3prox_strong0.788605
4prox_weak0.392709
5intern_cmp0.361628
6track_certified_flag0.000000
7job_cmp0.000000
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "weights", + "summary": "{\n \"name\": \"weights\",\n \"rows\": 8,\n \"fields\": [\n {\n \"column\": \"feature\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"rule_definite\",\n \"intern_cmp\",\n \"hs_match\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"weight\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.47433493649903935,\n \"min\": 0.0,\n \"max\": 1.4054080799162294,\n \"num_unique_values\": 6,\n \"samples\": [\n 1.4054080799162294,\n 0.7987298697301047,\n 0.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/analyzer/src/data/academies.json b/analyzer/src/data/academies.json new file mode 100644 index 0000000..9b61b81 --- /dev/null +++ b/analyzer/src/data/academies.json @@ -0,0 +1,134 @@ +[ + { "city": "Atmore", "state": "AL", "lat": 31.025837, "lon": -87.506462 }, + { "city": "Birmingham", "state": "AL", "lat": 33.518589, "lon": -86.810356 }, + { "city": "Glendale", "state": "AZ", "lat": 33.548264, "lon": -112.191696 }, + { "city": "Phoenix", "state": "AZ", "lat": 33.448376, "lon": -112.074036 }, + { "city": "Azusa", "state": "CA", "lat": 34.133619, "lon": -117.907562 }, + { "city": "Burbank", "state": "CA", "lat": 34.180839, "lon": -118.308968 }, + { "city": "Compton", "state": "CA", "lat": 33.895849, "lon": -118.220071 }, + { "city": "Covina", "state": "CA", "lat": 34.090009, "lon": -117.890339 }, + { "city": "Dinuba", "state": "CA", "lat": 36.543013, "lon": -119.38707 }, + { "city": "Duarte", "state": "CA", "lat": 34.139729, "lon": -117.977285 }, + { "city": "Fresno", "state": "CA", "lat": 36.7378, "lon": -119.787125 }, + { "city": "Long Beach", "state": "CA", "lat": 33.77005, "lon": -118.193741 }, + { "city": "Los Angeles", "state": "CA", "lat": 34.052235,"lon": -118.243683 }, + { "city": "Milpitas", "state": "CA", "lat": 37.432335,"lon": -121.899574 }, + { "city": "Monrovia", "state": "CA", "lat": 34.14806, "lon": -118.001945 }, + { "city": "Orosi", "state": "CA", "lat": 36.543563,"lon": -119.28929 }, + { "city": "Palo Alto", "state": "CA", "lat": 37.441883,"lon": -122.143019 }, + { "city": "Pomona", "state": "CA", "lat": 34.055103,"lon": -117.74999 }, + { "city": "Porterville", "state": "CA", "lat": 36.06523, "lon": -119.01677 }, + { "city": "Tulare", "state": "CA", "lat": 36.207728, "lon": -119.347338 }, + { "city": "Vallejo", "state": "CA", "lat": 38.104087, "lon": -122.256637 }, + { "city": "Greeley", "state": "CO", "lat": 40.423314, "lon": -104.709132 }, + { "city": "East Hartford", "state": "CT","lat": 41.763421,"lon": -72.612831 }, + { "city": "Hartford", "state": "CT", "lat": 41.765804,"lon": -72.673372 }, + { "city": "New Britain","state": "CT", "lat": 41.66121,"lon": -72.779541 }, + { "city": "Stamford", "state": "CT", "lat": 41.05343,"lon": -73.538734 }, + { "city": "Washington","state": "DC", "lat": 38.89511,"lon": -77.03637 }, + { "city": "Felton", "state": "DE", "lat": 39.009001,"lon": -75.577703 }, + { "city": "New Castle","state": "DE", "lat": 39.662057,"lon": -75.566816 }, + { "city": "Newark", "state": "DE", "lat": 39.683723,"lon": -75.749657 }, + { "city": "Smyrna","state": "DE", "lat": 39.299833,"lon": -75.604372 }, + { "city": "Wilmington","state": "DE","lat": 39.739072,"lon": -75.539787 }, + { "city": "Fort Lauderdale","state": "FL", "lat": 26.122439,"lon": -80.137317 }, + { "city": "Largo","state": "FL", "lat": 27.909466,"lon": -82.787324 }, + { "city": "Miami","state": "FL", "lat": 25.761681,"lon": -80.191788 }, + { "city": "Naples","state": "FL", "lat": 26.142036,"lon": -81.794813 }, + { "city": "Orlando","state": "FL", "lat": 28.538336,"lon": -81.379234 }, + { "city": "Riverview","state": "FL", "lat": 27.86614, "lon": -82.32648 }, + { "city": "Sanford","state": "FL", "lat": 28.802491,"lon": -81.269409 }, + { "city": "Tampa","state": "FL", "lat": 27.950575,"lon": -82.457178 }, + { "city": "West Palm Beach","state":"FL","lat": 26.715342,"lon": -80.053374 }, + { "city": "Honolulu","state": "HI", "lat": 21.306944,"lon": -157.858337 }, + { "city": "Idaho Falls","state":"ID", "lat": 43.491651,"lon": -112.033964 }, + { "city": "Pocatello","state":"ID", "lat": 42.871303,"lon": -112.445534 }, + { "city": "Sellersburg","state":"IN", "lat": 38.398681,"lon": -85.754963 }, + { "city": "Kansas City","state":"KS", "lat": 39.114053,"lon": -94.627464 }, + { "city": "Baton Rouge","state":"LA", "lat": 30.451468,"lon": -91.187147 }, + { "city": "Lafayette","state":"LA", "lat": 30.22409, "lon": -92.019842 }, + { "city": "New Orleans","state":"LA", "lat": 29.951066,"lon": -90.071532 }, + { "city": "Baltimore","state":"MD", "lat": 39.290385,"lon": -76.612189 }, + { "city": "Bel Air","state":"MD", "lat": 39.53594, "lon": -76.348293 }, + { "city": "Ellicott City","state":"MD","lat": 39.267328,"lon": -76.798306 }, + { "city": "Rockville","state":"MD", "lat": 39.083997,"lon": -77.152758 }, + { "city": "Upper Marlboro","state":"MD","lat": 38.815112,"lon": -76.749413 }, + { "city": "Westminster","state":"MD","lat": 39.575379,"lon": -76.995814 }, + { "city": "Chicopee","state":"MA", "lat": 42.148704,"lon": -72.607867 }, + { "city": "New Bedford","state":"MA", "lat": 41.636215,"lon": -70.934204 }, + { "city": "Roxbury","state":"MA", "lat": 42.329591,"lon": -71.094215 }, + { "city": "Detroit","state":"MI", "lat": 42.331427,"lon": -83.045754 }, + { "city": "Farmington","state":"MI", "lat": 42.464484,"lon": -83.376322 }, + { "city": "Flint","state":"MI", "lat": 43.012527,"lon": -83.687457 }, + { "city": "Grand Rapids","state":"MI","lat": 42.963359,"lon": -85.668086 }, + { "city": "Hazel Park","state":"MI", "lat": 42.462812,"lon": -83.104372 }, + { "city": "Oak Park","state":"MI", "lat": 42.459477,"lon": -83.182377 }, + { "city": "Pontiac","state":"MI", "lat": 42.638921,"lon": -83.291047 }, + { "city": "Redford","state":"MI", "lat": 42.383372,"lon": -83.296597 }, + { "city": "Rochester","state":"MI", "lat": 42.680588,"lon": -83.133824 }, + { "city": "Southfield","state":"MI", "lat": 42.473368,"lon": -83.221873 }, + { "city": "Saint Paul","state":"MN", "lat": 44.953703,"lon": -93.089958 }, + { "city": "Hazelwood","state":"MO", "lat": 38.771938,"lon": -90.370671 }, + { "city": "Jennings","state":"MO", "lat": 38.728938,"lon": -90.272335 }, + { "city": "University City","state":"MO","lat": 38.655603,"lon": -90.309728 }, + { "city": "Las Vegas","state":"NV", "lat": 36.169941,"lon": -115.139832 }, + { "city": "Merrimack","state":"NH", "lat": 42.86509, "lon": -71.493395 }, + { "city": "Elizabeth","state":"NJ", "lat": 40.663991,"lon": -74.2107 }, + { "city": "Fort Lee","state":"NJ", "lat": 40.850933,"lon": -73.970138 }, + { "city": "Jersey City","state":"NJ", "lat": 40.717754,"lon": -74.043143 }, + { "city": "Passaic","state":"NJ", "lat": 40.856766,"lon": -74.128476 }, + { "city": "Wayne","state":"NJ", "lat": 40.925372,"lon": -74.276544 }, + { "city": "Angola","state":"NY", "lat": 42.638116,"lon": -79.027823 }, + { "city": "Cheektowaga","state":"NY", "lat": 42.903396,"lon": -78.754753 }, + { "city": "Clarence","state":"NY", "lat": 42.980614,"lon": -78.591702 }, + { "city": "Depew","state":"NY", "lat": 42.911724,"lon": -78.692807 }, + { "city": "Elmira","state":"NY", "lat": 42.089796,"lon": -76.807733 }, + { "city": "Floral Park","state":"NY", "lat": 40.723713,"lon": -73.704853 }, + { "city": "Garnerville","state":"NY", "lat": 41.204538,"lon": -73.986527 }, + { "city": "Grand Island","state":"NY","lat": 43.033119,"lon": -78.962812 }, + { "city": "Hamburg","state":"NY", "lat": 42.715892,"lon": -78.829476 }, + { "city": "Lancaster","state":"NY", "lat": 42.900621,"lon": -78.670311 }, + { "city": "Middletown","state":"NY", "lat": 41.445927,"lon": -74.422934 }, + { "city": "Monticello","state":"NY", "lat": 41.653427,"lon": -74.689888 }, + { "city": "New York","state":"NY", "lat": 40.712776,"lon": -74.005974 }, + { "city": "North Tonawanda","state":"NY","lat": 43.03867,"lon": -78.864203 }, + { "city": "Northport","state":"NY", "lat": 40.901488,"lon": -73.343727 }, + { "city": "Salamanca","state":"NY", "lat": 42.157286,"lon": -78.715034 }, + { "city": "West Seneca","state":"NY", "lat": 42.83673,"lon": -78.799757 }, + { "city": "Westbury","state":"NY", "lat": 40.755656,"lon": -73.587067 }, + { "city": "Wilson","state":"NY", "lat": 43.309226,"lon": -78.824479 }, + { "city": "Yonkers","state":"NY", "lat": 40.93121,"lon": -73.898747 }, + { "city": "Youngstown","state":"NY", "lat": 43.248391,"lon": -79.050324 }, + { "city": "Asheboro","state":"NC", "lat": 35.707914,"lon": -79.813644 }, + { "city": "Burlington","state":"NC", "lat": 36.095691,"lon": -79.437799 }, + { "city": "Cary","state":"NC", "lat": 35.79154,"lon": -78.781116 }, + { "city": "Charlotte","state":"NC", "lat": 35.227087,"lon": -80.843127 }, + { "city": "Concord","state":"NC", "lat": 35.408752,"lon": -80.579511 }, + { "city": "Durham","state":"NC", "lat": 35.994033,"lon": -78.898619 }, + { "city": "Fayetteville","state":"NC","lat": 35.052664,"lon": -78.878358 }, + { "city": "Mooresville","state":"NC", "lat": 35.584859,"lon": -80.810072 }, + { "city": "Sanford","state":"NC", "lat": 35.479876,"lon": -79.180299 }, + { "city": "Smithfield","state":"NC", "lat": 35.508488,"lon": -78.339735 }, + { "city": "Wilmington","state":"NC", "lat": 34.225726,"lon": -77.94471 }, + { "city": "Winston-Salem","state":"NC","lat": 36.099861,"lon": -80.244217 }, + { "city": "Columbus","state":"OH", "lat": 39.961176,"lon": -82.998794 }, + { "city": "Scranton","state":"PA", "lat": 41.408969,"lon": -75.662412 }, + { "city": "Uniontown","state":"PA", "lat": 39.900078,"lon": -79.716431 }, + { "city": "Mayaguez","state":"PR", "lat": 18.201349,"lon": -67.139625 }, + { "city": "North Kingstown","state":"RI","lat": 41.551491,"lon": -71.466164 }, + { "city": "Providence","state":"RI", "lat": 41.824, "lon": -71.412834 }, + { "city": "Wood River Junction","state":"RI","lat": 41.437877,"lon": -71.702845 }, + { "city": "Columbia","state":"SC", "lat": 34.00071,"lon": -81.034814 }, + { "city": "Sioux Falls","state":"SD", "lat": 43.544595,"lon": -96.731103 }, + { "city": "Carrollton","state":"TX", "lat": 32.975642,"lon": -96.889963 }, + { "city": "Dallas","state":"TX", "lat": 32.776664,"lon": -96.796988 }, + { "city": "El Paso","state":"TX", "lat": 31.761878,"lon": -106.485022 }, + { "city": "Richardson","state":"TX", "lat": 32.948181,"lon": -96.72972 }, + { "city": "Christiansted","state":"VI","lat": 17.746639,"lon": -64.703197 }, + { "city": "St. Thomas","state":"VI", "lat": 18.338096,"lon": -64.894094 }, + { "city": "Alexandria","state":"VA", "lat": 38.804836,"lon": -77.046921 }, + { "city": "Federal Way","state":"WA","lat": 47.322322,"lon": -122.312622 }, + { "city": "Seattle","state":"WA", "lat": 47.606209,"lon": -122.332071 }, + { "city": "Milwaukee","state":"WI", "lat": 43.038902,"lon": -87.906471 } + ] + \ No newline at end of file diff --git a/analyzer/src/data/high_schools.json b/analyzer/src/data/high_schools.json new file mode 100644 index 0000000..b2635c3 --- /dev/null +++ b/analyzer/src/data/high_schools.json @@ -0,0 +1,330 @@ +[ + { "name": "A. I. duPont High School" }, + { "name": "Academy of Finance and Enterprise" }, + { "name": "Academy of The Americas" }, + { "name": "Advance Math and Science IV High School" }, + { "name": "Albert Einstein High School" }, + { "name": "Alexandria City High School" }, + { "name": "Alonzo and Tracy Mourning Senior High School" }, + { "name": "American Senior High School" }, + { "name": "Anacostia High School" }, + { "name": "Applications & Research Lab" }, + { "name": "Armwood High School" }, + { "name": "Atlantic High School" }, + { "name": "Atlantic Technical College and Technical High School" }, + { "name": "Aubrey Rogers High School" }, + { "name": "Audubon Technology and Communication High School" }, + { "name": "Azusa High School" }, + { "name": "Ballard High School" }, + { "name": "Ballou High School" }, + { "name": "Barbara Goleman Senior High School" }, + { "name": "Barron Collier High School" }, + { "name": "Bay View High School" }, + { "name": "Beecher High School" }, + { "name": "BERKNER H S" }, + { "name": "Bishop Ward High School" }, + { "name": "Blanche Ely High School" }, + { "name": "Booker T. Washington Senior High" }, + { "name": "Boulder Creek High School" }, + { "name": "Boyd Anderson High School" }, + { "name": "Brandon High School" }, + { "name": "Brooklyn Academy of Global Finance High School" }, + { "name": "Brooklyn Lab School" }, + { "name": "Browning High School" }, + { "name": "Bryan Adams High School" }, + { "name": "Burbank High School" }, + { "name": "Bulkeley High School" }, + { "name": "Business of Sports School" }, + { "name": "Butler High School" }, + { "name": "Calvin Coolidge High School" }, + { "name": "Carencro High School" }, + { "name": "Career & Technical Education Academy" }, + { "name": "Career & Technical Education Center" }, + { "name": "Caesar Rodney High School" }, + { "name": "Cass Technical High School" }, + { "name": "Central High School" }, + { "name": "Centennial High" }, + { "name": "Charlotte Amalie High School" }, + { "name": "Charlotte Engineering Early College" }, + { "name": "Charter Oak High School" }, + { "name": "Chariho Regional High School" }, + { "name": "Chicopee High" }, + { "name": "Clark High School" }, + { "name": "Clayton High" }, + { "name": "Columbia Heights Educational Campus" }, + { "name": "Columbia High School" }, + { "name": "Como Park High School" }, + { "name": "Communication Media Arts HS" }, + { "name": "Compton High School" }, + { "name": "Concord High School" }, + { "name": "Coral Gables Senior High School" }, + { "name": "Coral Reef Senior High School" }, + { "name": "Cox Mill High School" }, + { "name": "Crooms Academy of Information Technology" }, + { "name": "Crossland High School" }, + { "name": "Cutler Bay Senior High School" }, + { "name": "Damascus High School" }, + { "name": "David W. Carter High School" }, + { "name": "Davis Aerospace Technical High School" }, + { "name": "Decatur High School" }, + { "name": "Deer Valley High School" }, + { "name": "Deerfield Beach High School" }, + { "name": "Delaware Military Academy" }, + { "name": "Denby High School" }, + { "name": "Dickinson High School" }, + { "name": "Dillard High School" }, + { "name": "Dinuba High School" }, + { "name": "Dover High School" }, + { "name": "Douglas Byrd High School" }, + { "name": "Dr. Henry A. Wise, Jr. High School" }, + { "name": "Dr. Jorge Alvarez HS" }, + { "name": "Dr. Michael M. Krop Senior High School" }, + { "name": "Duarte High School" }, + { "name": "Dunbar High School" }, + { "name": "Duncan High School" }, + { "name": "DSCYF" }, + { "name": "East Boston High School" }, + { "name": "East English Village Preparatory Academy at Finney" }, + { "name": "East Forsyth High School" }, + { "name": "East Hartford High School" }, + { "name": "East Meadow High School" }, + { "name": "Eastwood High School" }, + { "name": "Edison High School" }, + { "name": "Edgewater High School" }, + { "name": "Edgewood High School" }, + { "name": "E.E. Smith High School" }, + { "name": "Elvira M. Colon Negron" }, + { "name": "Elmira High School" }, + { "name": "Emmett J. Conrad High School" }, + { "name": "Enloe High School" }, + { "name": "Escambia Co High Sch" }, + { "name": "Escuela Superior Benito Cerezo Vázquez" }, + { "name": "Federal Way High School" }, + { "name": "Felix Varela Senior High School" }, + { "name": "Ferris High School" }, + { "name": "Florence High School" }, + { "name": "Forest Hill Community High School" }, + { "name": "Foshay Learning Center High School" }, + { "name": "Fort Lee High School" }, + { "name": "Friendship Collegiate Academy" }, + { "name": "Friendship Tech Prep" }, + { "name": "Fresno High School" }, + { "name": "Frederick Douglass Academy at Northern High School" }, + { "name": "Gaithersburg High School" }, + { "name": "George Washington Carver High School" }, + { "name": "Glasgow High School" }, + { "name": "Golden Gate High School" }, + { "name": "Granite Hills High School" }, + { "name": "Gray's Creek High School" }, + { "name": "Grand Island Senior High School" }, + { "name": "G. Holmes Braddock" }, + { "name": "Gulf Coast High School" }, + { "name": "Hamburg High School" }, + { "name": "Harmony Magnet Academy" }, + { "name": "Hartford Public High School (HPHS)" }, + { "name": "Hawthorne Academy of Health Science" }, + { "name": "Hazel Park High School" }, + { "name": "Henry Ford High School" }, + { "name": "Henry M. Gunn High School" }, + { "name": "Hialeah Gardens High School" }, + { "name": "Hialeah High School" }, + { "name": "Hickory Ridge High School" }, + { "name": "Hillcrest High School" }, + { "name": "Homestead Senior High School" }, + { "name": "Hope Academy of West Michigan" }, + { "name": "Huffman High School" }, + { "name": "Ivanna Eudora Kean High School" }, + { "name": "Independence High School" }, + { "name": "Innovation High School" }, + { "name": "Jackson-Olin High School" }, + { "name": "Jackson-Reed High School" }, + { "name": "Jacqueline Kennedy Onassis High School" }, + { "name": "James Madison Academic Campus" }, + { "name": "James Madison High School" }, + { "name": "Jalen Rose Leadership Academy" }, + { "name": "Jay M Robinson High School" }, + { "name": "Jennings Senior High" }, + { "name": "John A. Ferguson Senior High School" }, + { "name": "John Burroughs High School" }, + { "name": "John Dwyer Technology Academy School No. 82" }, + { "name": "John I. Leonard High School" }, + { "name": "John T Hoggard High" }, + { "name": "Juanita Sanchez Educational Complex" }, + { "name": "J Christian Bollwage Finance Academy" }, + { "name": "Justin F. Kimball High School" }, + { "name": "KIPP DC College Preparatory" }, + { "name": "KIPP DC Legacy College Preparatory" }, + { "name": "Kid's Community College Preparatory High School" }, + { "name": "King High School" }, + { "name": "Lake Brantley High School" }, + { "name": "Lake Forest High School" }, + { "name": "Lake Shore Central High School" }, + { "name": "Lancaster High School" }, + { "name": "Largo High School" }, + { "name": "Las Americas ASPIRA Academy" }, + { "name": "Laurel Highlands Senior High School" }, + { "name": "Laurel High School" }, + { "name": "Lee County High School" }, + { "name": "Lee M. Thurston High School" }, + { "name": "Lely High School" }, + { "name": "Lewiston-Porter Central School District - High School" }, + { "name": "Lighthouse Academy" }, + { "name": "Lincoln High School" }, + { "name": "Long Island city high School" }, + { "name": "Los Angeles High School" }, + { "name": "MCCLUER HIGH" }, + { "name": "MCCLUER NORTH HIGH" }, + { "name": "Maya Angelou Public Charter High School" }, + { "name": "Marjory Stoneman Douglas High School" }, + { "name": "Marshall High School" }, + { "name": "Martin Luther King, Jr. High School" }, + { "name": "Maryvale High School" }, + { "name": "Maui High School" }, + { "name": "McKinley Technology High School" }, + { "name": "McLane High School" }, + { "name": "Merrimack High School" }, + { "name": "Miami Beach Senior High School" }, + { "name": "Miami Central Senior High School" }, + { "name": "Miami Edison Senior High School" }, + { "name": "Miami Jackson Senior High School" }, + { "name": "Miami Killian Senior High School" }, + { "name": "Miami Lakes Educational Center and Technical College" }, + { "name": "Miami Norland Senior High School" }, + { "name": "Miami Northwestern Senior High School" }, + { "name": "Miami Southridge Senior High School" }, + { "name": "Miami Springs Senior High School" }, + { "name": "Milford High School" }, + { "name": "Milpitas High School" }, + { "name": "Mission Oak High School" }, + { "name": "Middletown High School" }, + { "name": "Monache High School" }, + { "name": "Monarch High School" }, + { "name": "Monrovia High School" }, + { "name": "Monticello High School" }, + { "name": "Mooresville High School" }, + { "name": "Mount Pleasant Early College & Career Academy" }, + { "name": "Mountain Ridge High School" }, + { "name": "Mumford High School" }, + { "name": "Naples High School" }, + { "name": "National Academy Foundation High School" }, + { "name": "New Bedford High School" }, + { "name": "New Britain High School" }, + { "name": "New Hyde Park Memorial High School" }, + { "name": "New Utrecht High School" }, + { "name": "Newman Smith High School" }, + { "name": "North Dallas High School" }, + { "name": "North Johnston High School" }, + { "name": "North Kingstown High School" }, + { "name": "North Miami Beach Senior High School" }, + { "name": "North Miami Senior High School" }, + { "name": "North Tonawanda High School" }, + { "name": "North Division High School" }, + { "name": "North Forsyth High School" }, + { "name": "North Rockland High School" }, + { "name": "Northwest Cabarrus High School" }, + { "name": "Northwest High School" }, + { "name": "Northport High School" }, + { "name": "Northeast High School" }, + { "name": "Northridge High School" }, + { "name": "Oak Park High School" }, + { "name": "Odyssey Charter High School" }, + { "name": "Olympic Heights Community High School" }, + { "name": "Olympic High School" }, + { "name": "Orchard Park High School" }, + { "name": "Orosi High School" }, + { "name": "Osborn High School" }, + { "name": "Ottawa Hills High School" }, + { "name": "Oxon High School" }, + { "name": "Paint Branch High School" }, + { "name": "Palmetto Ridge High School" }, + { "name": "Palomares High School" }, + { "name": "Palo Alto High School" }, + { "name": "Passaic County Technical Institute" }, + { "name": "Passaic High School" }, + { "name": "Pathways Academy of Technology & Design" }, + { "name": "PEARCE H S" }, + { "name": "Pershing High School" }, + { "name": "Phelps A.C.E. High School" }, + { "name": "Pine Forest High School" }, + { "name": "Pinson Valley High School" }, + { "name": "Piper High School" }, + { "name": "Pontiac High School" }, + { "name": "Porterville High School" }, + { "name": "Porterville Military Academy" }, + { "name": "Portneuf Valley Technical Education and Career Campus" }, + { "name": "Princeton High" }, + { "name": "Ramsay High School" }, + { "name": "Raymond S. Kellis High School" }, + { "name": "Renaissance High School" }, + { "name": "River Terrace Education Campus" }, + { "name": "Robert Morgan Educational Center and Technical Col" }, + { "name": "Rochester High School" }, + { "name": "Roosevelt High School" }, + { "name": "Ronald Reagan High School" }, + { "name": "Salamanca High School" }, + { "name": "Sanderson High School AOF" }, + { "name": "Scranton High School" }, + { "name": "Scotlandville Magnet High School" }, + { "name": "Shades Valley High School" }, + { "name": "Silver Creek High School" }, + { "name": "Silver Lake High School" }, + { "name": "Skyline High School & Career Development Center" }, + { "name": "Smithfield-Selma High School" }, + { "name": "Smyrna High School" }, + { "name": "South Dade Senior High School" }, + { "name": "South Division High School" }, + { "name": "Southeast Raleigh Magnet High School" }, + { "name": "Southeastern High School" }, + { "name": "Southern Lee High School" }, + { "name": "Southfield High School for the Arts & Technology" }, + { "name": "Southwest Miami Senior High School" }, + { "name": "SPOTO HIGH SCHOOL" }, + { "name": "Springbrook High School" }, + { "name": "St. Croix Central High School" }, + { "name": "St. Croix Educational Complex" }, + { "name": "STEAM High School" }, + { "name": "Steinbrenner High School" }, + { "name": "Stranahan High School" }, + { "name": "Strathmore High School" }, + { "name": "Sunset High School" }, + { "name": "Susan E. Wagner High School" }, + { "name": "Sussex Central High School" }, + { "name": "Sunnyside High School" }, + { "name": "Thomas Jefferson High School" }, + { "name": "Thomas S. Wootton High School" }, + { "name": "Todd Beamer High School" }, + { "name": "Tottenville High School" }, + { "name": "Trinity High School" }, + { "name": "Tulare Union High School" }, + { "name": "Tulare Western High School" }, + { "name": "Vallejo High School" }, + { "name": "Valley High School" }, + { "name": "Village Academy High School" }, + { "name": "Waipahu High School" }, + { "name": "Walter M. Williams High School" }, + { "name": "Warren Easton Charter High School" }, + { "name": "Washington High School of Information Technology" }, + { "name": "Weaver High School" }, + { "name": "Wenonah High School" }, + { "name": "West Mecklenberg High School" }, + { "name": "West Scranton High School" }, + { "name": "West Seneca East Senior High School" }, + { "name": "Westhill High School" }, + { "name": "Westminster High School" }, + { "name": "Westover High School" }, + { "name": "Western International High School" }, + { "name": "Wheaton High School" }, + { "name": "William H. Turner Technical Arts High School" }, + { "name": "William Penn High School" }, + { "name": "Wilmer-Hutchins High School" }, + { "name": "Wilson High School" }, + { "name": "Wilmington University" }, + { "name": "W. H. Adamson High School" }, + { "name": "W. T. Clarke High School" }, + { "name": "W. T. White High School" }, + { "name": "Woodbridge High School" }, + { "name": "Woodson High School" }, + { "name": "Woodlawn High School" }, + { "name": "W.W. Samuell High School" } + ] + \ No newline at end of file diff --git a/analyzer/src/data/partner_companies.json b/analyzer/src/data/partner_companies.json new file mode 100644 index 0000000..d532322 --- /dev/null +++ b/analyzer/src/data/partner_companies.json @@ -0,0 +1,29 @@ +[ + { "name": "Canva" }, + { "name": "HOSA" }, + { "name": "AAMC" }, + { "name": "ACTE" }, + { "name": "Advance CTE" }, + { "name": "AICPA" }, + { "name": "AHLA" }, + { "name": "American Accounting Association" }, + { "name": "Code.org" }, + { "name": "CSTA" }, + { "name": "CYBER.ORG" }, + { "name": "Discover Engineering" }, + { "name": "EarSketch" }, + { "name": "EVERFI" }, + { "name": "Federal Reserve Bank of St. Louis" }, + { "name": "GTTP" }, + { "name": "KPMG" }, + { "name": "LabXchange" }, + { "name": "Marriott International" }, + { "name": "NCHSE" }, + { "name": "NGPF" }, + { "name": "NFTE" }, + { "name": "PLTW" }, + { "name": "SAP" }, + { "name": "Verizon" }, + { "name": "Wilmington University" } + ] + \ No newline at end of file diff --git a/analyzer/src/package-lock.json b/analyzer/src/package-lock.json new file mode 100644 index 0000000..7ce4c6b --- /dev/null +++ b/analyzer/src/package-lock.json @@ -0,0 +1,47 @@ +{ + "name": "analyzer", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "analyzer", + "version": "1.0.0", + "devDependencies": { + "@types/node": "^18.0.0", + "typescript": "^5.0.0" + } + }, + "node_modules/@types/node": { + "version": "18.19.86", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", + "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + } + } + } \ No newline at end of file diff --git a/analyzer/src/package.json b/analyzer/src/package.json new file mode 100644 index 0000000..272ba3f --- /dev/null +++ b/analyzer/src/package.json @@ -0,0 +1,13 @@ +{ + "name": "analyzer", + "version": "1.0.0", + "main": "dist/main.js", + "scripts": { + "build": "tsc", + "start": "node dist/main.js" + }, + "devDependencies": { + "typescript": "^5.0.0", + "@types/node": "^18.0.0" + } + } \ No newline at end of file diff --git a/analyzer/src/tsconfig.json b/analyzer/src/tsconfig.json new file mode 100644 index 0000000..c508ee3 --- /dev/null +++ b/analyzer/src/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "CommonJS", + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] + } + \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 1b7c17a..e69de29 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,40 +0,0 @@ -services: - crawler: - build: crawler/. - env_file: - - .env - image: naf_crawler - container_name: naf_crawler - working_dir: /app - volumes: - - ./crawler:/app - ports: [] - command: ["npm", "run", "start"] - pgadmin: - image: dpage/pgadmin4 - container_name: naf_pgadmin - restart: always - ports: - - "8888:80" - environment: - PGADMIN_DEFAULT_EMAIL: epics@epics.com - PGADMIN_DEFAULT_PASSWORD: password - volumes: - - pgadmin-data:/var/lib/pgadmin - # naf_db: - # image: postgres:15 - # container_name: naf_db - # restart: always - # environment: - # POSTGRES_USER: epics - # POSTGRES_PASSWORD: password - # POSTGRES_DB: postgres - # ports: - # - "5432:5432" - # volumes: - # - pgdata:/var/lib/postgresql/data - - -volumes: - pgadmin-data: - #pgdata: \ No newline at end of file diff --git a/init.sql b/init.sql index 7287dd8..e69de29 100644 --- a/init.sql +++ b/init.sql @@ -1,117 +0,0 @@ ---init - --- Crawler Table -CREATE TABLE crawler_data ( - crawler_id SERIAL PRIMARY KEY, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - profile_url TEXT, - json JSONB -); - --- Confirmed Alumni Table -CREATE TABLE confirmed_alumni ( - analyzer_id SERIAL PRIMARY KEY, - profile_url TEXT, - confidence_percentage REAL, - full_name TEXT, - email TEXT, - phone_number TEXT, - high_school TEXT, - hs_graduation_year TEXT, - naf_academy TEXT, - naf_track_certified TEXT, - address TEXT, - city TEXT, - state TEXT, - zip_code TEXT, - birthdate DATE, - gender TEXT, - ethnicity TEXT, - military_branch_served TEXT, - current_job TEXT, - college_major TEXT, - university_grad_year TEXT, - university TEXT, - degree TEXT, - linkedin_link TEXT, - school_district TEXT, - internship_company1 TEXT, - internship_end_date1 DATE, - internship_company2 TEXT, - internship_end_date2 DATE, - university2 TEXT, - college_major2 TEXT, - degree2 TEXT -); - --- Unconfirmed Alumni Table -CREATE TABLE unconfirmed_alumni ( - analyzer_id SERIAL PRIMARY KEY, - profile_url TEXT, - confidence_percentage REAL, - full_name TEXT, - email TEXT, - phone_number TEXT, - high_school TEXT, - hs_graduation_year TEXT, - naf_academy TEXT, - naf_track_certified TEXT, - address TEXT, - city TEXT, - state TEXT, - zip_code TEXT, - birthdate DATE, - gender TEXT, - ethnicity TEXT, - military_branch_served TEXT, - current_job TEXT, - college_major TEXT, - university_grad_year TEXT, - university TEXT, - degree TEXT, - linkedin_link TEXT, - school_district TEXT, - internship_company1 TEXT, - internship_end_date1 DATE, - internship_company2 TEXT, - internship_end_date2 DATE, - university2 TEXT, - college_major2 TEXT, - degree2 TEXT -); - --- Enricher Table -CREATE TABLE enricher_data ( - enricher_id SERIAL PRIMARY KEY, - profile_url TEXT, - timestamp TIMESTAMP, - full_name TEXT, - email TEXT, - phone_number TEXT, - high_school TEXT, - hs_graduation_year TEXT, - naf_academy TEXT, - naf_track_certified TEXT, - address TEXT, - city TEXT, - state TEXT, - zip_code TEXT, - birthdate DATE, - gender TEXT, - ethnicity TEXT, - military_branch_served TEXT, - current_job TEXT, - college_major TEXT, - university_grad_year TEXT, - university TEXT, - degree TEXT, - linkedin_link TEXT, - school_district TEXT, - internship_company1 TEXT, - internship_end_date1 DATE, - internship_company2 TEXT, - internship_end_date2 DATE, - university2 TEXT, - college_major2 TEXT, - degree2 TEXT -);