Introducción
Hacer un Sistema de Análisis prospectivo
existente durante la Temporada Agosto -diciembre 2026, donde el Manager y el
Cuerpo Técnico pueda Identificar Cuantitativamente y Cualitativamente, el
desempeño individual, colectivo de Guerreros de Venezuela así desarrollar una o
diferentes Estrategia de Juegos basado en la Métrica de los Juegos realizados.
Aplicación de Fórmula para
Desarrollo base de datos
Opciones para llevar la base de datos de Guerreros de
Venezuela 55+
Para llevar la estadística de toda la
temporada (acumulado juego por juego) de forma cómoda, tenemos dos
alternativas principales:
Opción 1: Aplicación web interactiva en Python
(Streamlit)
Podemos crear una pequeña aplicación web local en Python utilizando Streamlit.
Es la opción más moderna, intuitiva y fácil de usar desde una laptop o
teléfono.
Características:
●
Formulario de Registro por Juego: Seleccionas la fecha, el
rival (ej. vs. Dodgers) e ingresas las estadísticas de cada jugador en
ese juego.
●
Cálculo Automático: El sistema calcula los imparables
totales (H=1B+2B+3B+HR), el promedio de bateo (AVE=VBH), el porcentaje de
embasado (OBP), y el slugging (SLG).
●
Tabla Acumulada de la Temporada: Muestra el ranking de bateadores del
equipo ordenado por promedio, impulsadas, anotadas, etc.
●
Exportación a Excel: Te permite descargar en cualquier
momento la base de datos completa en formato Excel.
nota; Los datos
suministrados son que genera dicha proyección en tiempo real, la actualización
y recopilación de los datos tiene que ser lo más limpio y tangibles para tener
un margen de error mínimo
agrupa
automáticamente los números de cada jugador a lo largo de todos los juegos.
Cálculos
automáticos en tiempo real:
●
(Hits Totales): 
●
(Promedio
de Bateo): 
●
(Porcentaje de Embasado): 
●
(Slugging): 
●
: 
Ordena automáticamente la tabla de líder a colero según el
promedio (
).
Opción 2: Sistema de Hojas de Cálculo en Excel
Avanzado
Si prefieres seguir usando únicamente Microsoft Excel o Google Sheets,
estructuramos el archivo con 3 pestañas principales:
- Jugadores: Lista de la plantilla del equipo (nombre, número
de camiseta, posición principal).
- Registro_Juegos: Una tabla donde agregas una
fila por cada juego y jugador.
- Estadisticas_Acumuladas: Una tabla dinámica
o fórmulas automáticas (SUMAR.SI) que consolida los
totales de la temporada y calcula el AVE acumulado de cada jugador
automáticamente.
1. Fórmulas Clave de Bateo
2. 
3. 
4. 
Estructura
del Libro de Excel
El
archivo cuenta con 3 pestañas interconectadas:
1.
Jugadores (Plantilla del Equipo)
Contiene
la lista oficial del Roster (los 16 jugadores de tu archivo original) con su
número, nombre, posición y estatus.
●
Ventaja: Si agregas un nuevo jugador en esta pestaña, se reflejará
automáticamente en la tabla general de estadísticas.
2.
Registro_Juegos (Entrada de Datos Día a Día)
Esta
es la pestaña donde vas a anotar cada partido disputado. Cada fila representa
la actuación individual de un jugador en un partido específico.
●
Columnas: Fecha | Rival | Jugador | VB | AL | 1B | 2B | 3B | HR | BB |
SF | K | CA | CI | BR
●
Ya viene precargado con los datos del primer juego vs.
DODGERS que tenías registrado.
3.
Estadisticas_Acumuladas (Consolidado Automático)
Esta
pestaña no la debes editar manualmente; trabaja 100% sola utilizando
fórmulas de Excel (SUMAR.SI / SUMIF y SIERROR).
●
Calcula automáticamente el acumulado de cada estadística
sumando todas las filas de la pestaña Registro_Juegos pertenecientes a cada
jugador.
●
Métricas calculadas al instante:
○
(Hits Totales): =E2+F2+G2+H2
○
(Promedio): =SIERROR(D2/B2, 0) (formateado
a 3 decimales, ej. .333 o 1.000)
○
(Embasado): =SIERROR((D2+I2)/(B2+I2+J2), 0)
○
(Slugging): =SIERROR((E2 + 2*F2 +
3*G2 + 4*H2)/B2, 0)
○
: =OBP + SLG
📝 ¿Cómo
registrar un nuevo juego en Excel?
- Abre el libro Guerreros_Venezuela_55_Estadisticas.xlsx
.
- Ve a la pestaña Registro_Juegos.
- Ve a la última fila
disponible e ingresa:
○
La fecha del partido.
○
Nombre del rival (ej. YANKEES).
○
Nombre del jugador (escrito exactamente igual que en la
pestaña Jugadores).
○
Sus numeritos (
, etc.).
- Pasa a la pestaña Estadisticas_Acumuladas
y verás que los promedios y totales de ese jugador se habrán actualizado
automáticamente.
nota; La Gerencia puede hacer la modificaciones correspondientes agregar
comentarios, compartirlos con el Equipo de Guerreros de Venezuela Baseball + 55
Orlando-florida obtener una Matriz Foda( Resultados en su Estrategias)
a continuación de la primera opción planteada se entrega el Código
abierto aplicación web puede ser utilizado Pc,laptop, móvil
Python
import
pandas as pd
import
streamlit as st
import
os
st.set_page_config(page_title="Guerreros
de Venezuela +55", layout="wide")
st.title("⚾ Guerreros de
Venezuela Baseball +55 - Orlando, FL")
st.subheader("Sistema
de Registro y Estadísticas de Bateo")
#
Archivo de almacenamiento local
DATA_FILE
= "estadisticas_guerreros55.csv"
#
Cargar o inicializar la base de datos
if
os.path.exists(DATA_FILE):
df_data = pd.read_csv(DATA_FILE)
else:
df_data = pd.DataFrame(columns=[
"Fecha", "Rival",
"Jugador", "VB", "AL", "1B",
"2B", "3B", "HR", "BB", "SF",
"K", "CA", "CI", "BR"
])
#
Roster del Equipo
ROSTER
= [
"JOHAN OLIVO", "PABLO
MORALES", "RAUL LOZADA", "JORGE MITCHELL",
"OSWALDO GRILLO",
"NESTOR VERA", "PEDRO MORENO", "JUAN PEREZ",
"MARTIN ROJAS",
"PEDRO CHAVEZ", "LUIS SILVA", "LUIS BARRIOS",
"PAUL SEGARRA",
"JULIO MACHADO", "ARQUIMEDES AVANCINES", "RAFAEL
BRICEÑO"
]
tab1,
tab2, tab3 = st.tabs(["📝 Registrar Juego", "📊
Estadísticas Acumuladas", "📋 Histórico de Juegos"])
#
----------------- TAB 1: REGISTRO -----------------
with
tab1:
st.header("Ingresar Datos del
Juego")
with
st.form("form_juego"):
col1,
col2 = st.columns(2)
fecha
= col1.date_input("Fecha del Juego")
rival
= col2.text_input("Rival (ej. DODGERS)")
st.markdown("---")
jugador_sel
= st.selectbox("Seleccionar Jugador", ROSTER)
col_a,
col_b, col_c = st.columns(3)
vb
= col_a.number_input("VB (Veces al Bate)", min_value=0, value=0)
al
= col_b.number_input("AL (Apariciones al Lápiz)", min_value=0,
value=0)
bb
= col_c.number_input("BB (Bases por Bola)", min_value=0, value=0)
col_d,
col_e, col_f, col_g = st.columns(4)
h1
= col_d.number_input("1B (Sencillos)", min_value=0, value=0)
h2
= col_e.number_input("2B (Dobles)", min_value=0, value=0)
h3
= col_f.number_input("3B (Triples)", min_value=0, value=0)
hr
= col_g.number_input("HR (Jonrones)", min_value=0, value=0)
col_h,
col_i, col_j, col_k, col_l = st.columns(5)
sf
= col_h.number_input("SF (Sacrificio)", min_value=0, value=0)
k
= col_i.number_input("K (Ponches)", min_value=0, value=0)
ca
= col_j.number_input("CA (Anotadas)", min_value=0, value=0)
ci
= col_k.number_input("CI (Impulsadas)", min_value=0, value=0)
br
= col_l.number_input("BR (Bases Robadas)", min_value=0, value=0)
submitted
= st.form_submit_button("Guardar Estadísticas")
if
submitted:
nueva_fila
= pd.DataFrame([{
"Fecha": str(fecha),
"Rival": rival, "Jugador": jugador_sel,
"VB": vb,
"AL": al, "1B": h1, "2B": h2, "3B": h3,
"HR": hr,
"BB": bb,
"SF": sf, "K": k, "CA": ca, "CI": ci,
"BR": br
}])
df_data
= pd.concat([df_data, nueva_fila], ignore_index=True)
df_data.to_csv(DATA_FILE,
index=False)
st.success(f"¡Estadísticas
guardadas exitosamente para {jugador_sel}!")
#
----------------- TAB 2: ACUMULADO -----------------
with
tab2:
st.header("Líderes y Totales de la
Temporada")
if not df_data.empty:
stats
= df_data.groupby("Jugador")[["VB", "AL",
"1B", "2B", "3B", "HR", "BB",
"SF", "K", "CA", "CI",
"BR"]].sum().reset_index()
#
Cálculos de Bateo
stats["H"] =
stats["1B"] + stats["2B"] + stats["3B"] +
stats["HR"]
stats["AVE"] =
(stats["H"] / stats["VB"]).fillna(0.0)
obp_denom = stats["VB"] +
stats["BB"] + stats["SF"]
stats["OBP"] =
((stats["H"] + stats["BB"]) / obp_denom).fillna(0.0)
slg_num
= stats["1B"] + (2 * stats["2B"]) + (3 *
stats["3B"]) + (4 * stats["HR"])
stats["SLG"] = (slg_num /
stats["VB"]).fillna(0.0)
stats["OPS"] =
stats["OBP"] + stats["SLG"]
# Ordenar por Ave y VB
stats
= stats.sort_values(by=["AVE", "VB"], ascending=[False,
False])
cols
= ["Jugador", "VB", "AL", "H",
"1B", "2B", "3B", "HR", "BB",
"SF", "K", "CA", "CI", "BR",
"AVE", "OBP", "SLG", "OPS"]
st.dataframe(
stats[cols].style.format({"AVE": "{:.3f}",
"OBP": "{:.3f}", "SLG": "{:.3f}",
"OPS": "{:.3f}"}),
use_container_width=True
)
else:
st.info("Aún no hay datos
cargados.")
#
----------------- TAB 3: HISTÓRICO -----------------
with
tab3:
st.header("Histórico de Todos los
Juegos")
st.dataframe(df_data,
use_container_width=True)