Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
603 changes: 603 additions & 0 deletions 2025_Data_Fixer/2025 DCMP - Match Data.csv

Large diffs are not rendered by default.

961 changes: 961 additions & 0 deletions 2025_Data_Fixer/2025 WCMP - Raw WL.csv

Large diffs are not rendered by default.

763 changes: 763 additions & 0 deletions 2025_Data_Fixer/2025 WCMP - Raw match.csv

Large diffs are not rendered by default.

757 changes: 757 additions & 0 deletions 2025_Data_Fixer/2025 WCMP Data accuracy - 1425 dat.csv

Large diffs are not rendered by default.

961 changes: 961 additions & 0 deletions 2025_Data_Fixer/2025 WCMP Data accuracy - 7034 dat.csv

Large diffs are not rendered by default.

9 changes: 9 additions & 0 deletions 2025_Data_Fixer/2025_Data_Fixer.code-workspace
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"folders": [
{
"name": "2025_Data_Fixer",
"path": "."
}
],
"settings": {}
}
960 changes: 960 additions & 0 deletions 2025_Data_Fixer/7034.csv

Large diffs are not rendered by default.

603 changes: 603 additions & 0 deletions 2025_Data_Fixer/Fixed_data.csv

Large diffs are not rendered by default.

579 changes: 579 additions & 0 deletions 2025_Data_Fixer/junk/auto_fixed.csv

Large diffs are not rendered by default.

269 changes: 269 additions & 0 deletions 2025_Data_Fixer/junk/cell_level_coral_merger.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,269 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "0e4ffcbb",
"metadata": {},
"source": [
"# 🧠 Smart Coral Cell-Level Mixer (DCMP + 7034)\n",
"This notebook matches the most accurate per-cell coral values (L1–L4) from DCMP and 7034 for each match and alliance."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "f18489b9",
"metadata": {},
"outputs": [],
"source": [
"\n",
"import pandas as pd\n",
"from itertools import combinations, product\n",
"\n",
"# Load files\n",
"dcmp_df = pd.read_csv(\"2025 DCMP - Match Data.csv\")\n",
"csv7034_df = pd.read_csv(\"7034.csv\")\n",
"\n",
"# Normalize DCMP\n",
"dcmp_df['team_number'] = dcmp_df['team_key'].str.extract(r'(\\d+)$').astype(float)\n",
"dcmp_df['match_key'] = dcmp_df['match_number'].astype(str) + '_' + dcmp_df['comp_level']\n",
"\n",
"# Normalize 7034\n",
"csv7034_df = csv7034_df.dropna(subset=['Match #'])\n",
"csv7034_df['match_number'] = csv7034_df['Match #'].astype(int)\n",
"csv7034_df['team_number'] = csv7034_df['Team #']\n",
"csv7034_df['match_key'] = csv7034_df['match_number'].astype(str) + '_qm'\n",
"csv7034_df['alliance'] = csv7034_df['Robot'].str[0].map({'R': 'red', 'B': 'blue'})\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "c37c8e65",
"metadata": {},
"outputs": [],
"source": [
"\n",
"def extract_alliance_teams(df):\n",
" alliances = {}\n",
" for _, row in df.iterrows():\n",
" key = f\"{row['match_number']}_{row['comp_level']}\"\n",
" if key not in alliances:\n",
" alliances[key] = {\n",
" 'red': [row['r1'], row['r2'], row['r3']],\n",
" 'blue': [row['b1'], row['b2'], row['b3']],\n",
" }\n",
" return alliances\n",
"\n",
"match_alliances = extract_alliance_teams(dcmp_df)\n",
"\n",
"def assign_alliance(row):\n",
" key = row['match_key']\n",
" team_key = row['team_key']\n",
" alliance = match_alliances.get(key, {})\n",
" if 'red' in alliance and team_key in alliance['red']:\n",
" return 'red'\n",
" elif 'blue' in alliance and team_key in alliance['blue']:\n",
" return 'blue'\n",
" return None\n",
"\n",
"dcmp_df['alliance'] = dcmp_df.apply(assign_alliance, axis=1)\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "a0690693",
"metadata": {},
"outputs": [],
"source": [
"\n",
"def find_best_cell_level_combo(dcmp_rows, csv_rows, target, prefix):\n",
" team_data = {}\n",
" for row in dcmp_rows + csv_rows:\n",
" team_number = row['team_number']\n",
" if team_number not in team_data:\n",
" team_data[team_number] = {}\n",
" if f'{prefix}_L1' in row:\n",
" team_data[team_number]['dcmp'] = row\n",
" else:\n",
" team_data[team_number]['7034'] = row\n",
"\n",
" best_diff = float('inf')\n",
" best_combo = None\n",
"\n",
" for team_set in combinations(team_data.keys(), 3):\n",
" robot_mix_options = list(product(['dcmp', '7034'], repeat=4))\n",
" all_mix_combos = product(robot_mix_options, repeat=3)\n",
"\n",
" for robot_cell_choices in all_mix_combos:\n",
" combo_rows = []\n",
" valid = True\n",
" total = 0\n",
"\n",
" for team, mix in zip(team_set, robot_cell_choices):\n",
" sources = team_data[team]\n",
" row = {}\n",
" for i, lvl in enumerate(['L1', 'L2', 'L3', 'L4']):\n",
" dcmp_col = f'{prefix}_L{lvl[-1]}'\n",
" alt_col = f'{prefix}L{lvl[-1]}'\n",
" source = mix[i]\n",
" if source in sources:\n",
" src_row = sources[source]\n",
" val = src_row.get(dcmp_col) if source == 'dcmp' else src_row.get(alt_col, 0)\n",
" row[dcmp_col] = val\n",
" total += val\n",
" else:\n",
" valid = False\n",
" break\n",
" row['team_number'] = team\n",
" if not valid:\n",
" break\n",
" combo_rows.append(row)\n",
"\n",
" if valid and abs(total - target) < best_diff:\n",
" best_diff = abs(total - target)\n",
" best_combo = combo_rows\n",
"\n",
" return best_combo\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "19e9d70e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Done! Saved to smart_cell_level_corals.csv\n"
]
}
],
"source": [
"\n",
"results = []\n",
"\n",
"for match_key in dcmp_df['match_key'].unique():\n",
" for alliance in ['red', 'blue']:\n",
" dcmp_rows = list(dcmp_df[(dcmp_df['match_key'] == match_key) & (dcmp_df['alliance'] == alliance)].to_dict('records'))\n",
" csv_rows = list(csv7034_df[(csv7034_df['match_key'] == match_key) & (csv7034_df['alliance'] == alliance)].to_dict('records'))\n",
" if not dcmp_rows:\n",
" continue\n",
"\n",
" target_auto = next((r['ba_autoCoralCount'] for r in dcmp_rows if pd.notna(r.get('ba_autoCoralCount'))), 0)\n",
" target_tele = next((r['ba_teleopCoralCount'] for r in dcmp_rows if pd.notna(r.get('ba_teleopCoralCount'))), 0)\n",
"\n",
" team_info = {r['team_number']: r for r in dcmp_rows}\n",
" best_auto = find_best_cell_level_combo(dcmp_rows, csv_rows, target_auto, 'a') or []\n",
" best_tele = find_best_cell_level_combo(dcmp_rows, csv_rows, target_tele, 't') or []\n",
"\n",
" merged = {}\n",
" for row in best_auto:\n",
" tn = row['team_number']\n",
" if tn not in merged:\n",
" if tn in team_info:\n",
" merged[tn] = team_info[tn].copy()\n",
" else:\n",
" # fallback to 7034\n",
" fallback_row = next((r for r in csv_rows if r['team_number'] == tn), {})\n",
" merged[tn] = {\n",
" 'match_key': match_key,\n",
" 'alliance': alliance,\n",
" 'team_number': tn,\n",
" 'team_key': f\"frc{int(tn)}\"\n",
" }\n",
" merged[tn].update(fallback_row)\n",
" for k, v in row.items():\n",
" if k.startswith('a_'):\n",
" merged[tn][k] = v\n",
" merged[tn]['selected_for_auto'] = 'auto'\n",
"\n",
" for row in best_tele:\n",
" tn = row['team_number']\n",
" if tn not in merged:\n",
" if tn in team_info:\n",
" merged[tn] = team_info[tn].copy()\n",
" else:\n",
" # fallback: use full 7034 row if available\n",
" fallback_row = next((r for r in csv_rows if r['team_number'] == tn), {})\n",
" merged[tn] = fallback_row.copy()\n",
" # Ensure required metadata is present\n",
" merged[tn]['match_key'] = match_key\n",
" merged[tn]['alliance'] = alliance\n",
" merged[tn]['team_number'] = tn\n",
" merged[tn]['team_key'] = merged[tn].get('team_key', f\"frc{int(tn)}\")\n",
"\n",
" for k, v in row.items():\n",
" if k.startswith('t_'):\n",
" merged[tn][k] = v\n",
" merged[tn]['selected_for_teleop'] = 'teleop'\n",
"\n",
" for row in merged.values():\n",
" row['match_key'] = match_key\n",
" row['alliance'] = alliance\n",
" results.append(row)\n",
"\n",
"df_final = pd.DataFrame(results)\n",
"df_final = df_final.sort_values(by=['match_key', 'alliance', 'team_number'])\n",
"df_final.to_csv(\"smart_cell_level_corals2.csv\", index=False)\n",
"print(\"Done! Saved to smart_cell_level_corals2.csv\")\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "4c105145",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"✅ Sorted and saved to smart_cell_level_corals_full_sorted.csv\n"
]
}
],
"source": [
"import pandas as pd\n",
"\n",
"# Load the merged output\n",
"df = pd.read_csv(\"smart_cell_level_corals.csv\")\n",
"\n",
"# Format and sort\n",
"df['match_number'] = pd.to_numeric(df['match_number'], errors='coerce').fillna(-1).astype(int)\n",
"df['alliance'] = pd.Categorical(df['alliance'], categories=['red', 'blue'], ordered=True)\n",
"\n",
"# Sort by match number, red then blue\n",
"df_sorted = df.sort_values(by=['match_number', 'alliance', 'team_number'])\n",
"\n",
"# Save result\n",
"df_sorted.to_csv(\"smart_cell_level_corals_full_sorted.csv\", index=False)\n",
"print(\"✅ Sorted and saved to smart_cell_level_corals_full_sorted.csv\")\n"
]
}
],
"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.12.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Loading