Nuevos sistemas de puntuación del Fútbol con python

Hace tiempo que me surge la duda de si el sistema de puntuación actual del fútbol en el que el que si ganas recibes 3 puntos, si empatas 1 y si pierdes 0 es el más adecuado.

Para comprobar como podría afectar un cambio en el sistema de puntuación sobre una liga ya jugada me he puesto manos a la obra y he realizado una pequeña aplicación en python.

Vamos a comparar 5 sistemas de puntuación para ver cómo afectarían a la clasificación final.

Primer sistema (actual): 3 puntos al ganador, 0 puntos al perdedor, en caso de empate 1 para cada uno

Segundo sistema (nuevo): 3 puntos al ganador si gana por más de 1 gol de diferencia, 2 puntos al ganador si solo gana por 1 gol de diferencia, 0 puntos al perdedor, en caso de empate 1 para cada uno

Tercer sistema (antiguo): 2 puntos al ganador, 0 puntos al perdedor, en caso de empate 1 para cada uno

Cuarto sistema (experimental): 4 puntos al ganador si gana por más de 2 goles de diferencia, 3 puntos al ganador si gana por 2 goles de diferencia, 2 puntos al ganador si solo gana por 1 gol de diferencia, 0 puntos al perdedor, en caso de empate 1 para cada uno

Quinto sistema (revolucionario): 2 puntos al ganador, -1 punto al perdedor, en caso de empate 1 para cada uno

Para realizar la tarea, lo primero que necesitamos son los datos en algún formato procesable mediante programación. Después de buscar en internet, he dado con una web que permite la descarga de los resultados en formato json para diferentes temporadas e incluso ligas. Todos ellos respetando el mismo formato, de modo que podemos utilizar la misma aplicación para otras temporadas y ligas. Después he desarrollado la aplicación que además de presentar los resultados en pantalla, genera un fichero csv con ellos para tratar los datos de forma más cómoda.

import json
import operator
import csv

data = {}
modos = ['actual', 'nuevo', 'antiguo', 'experimental', 'revolucionario']

with open('2016_2017.json') as json_file:
    try:
        futbolBD = json.load(json_file)
        jornadas = futbolBD['rounds']
        for jornada in jornadas:
            partidos = jornada['matches']
            for partido in partidos:
                equipo1 = partido['team1']['key']
                equipo2 = partido['team2']['key']
                goles1 = partido['score1']
                goles2 = partido['score2']
                puntos1, puntos2 = 0, 0

                for modo in modos:
                    dif = goles1 - goles2
                    if modo == "actual":
                        if dif > 0:
                            puntos1 = 3
                            puntos2 = 0
                        if dif < 0:
                            puntos1 = 0
                            puntos2 = 3
                        if dif == 0:
                            puntos1 = 1
                            puntos2 = 1
                    elif modo == "nuevo":
                        if dif == 1:
                            puntos1 = 2
                            puntos2 = 0
                        if dif == -1:
                            puntos1 = 0
                            puntos2 = 2
                        if dif >= 2:
                            puntos1 = 3
                            puntos2 = 0
                        if dif <= -2:
                            puntos1 = 0
                            puntos2 = 3
                        if dif == 0:
                            puntos1 = 1
                            puntos2 = 1
                    elif modo == "antiguo":
                        if dif > 0:
                            puntos1 = 2
                            puntos2 = 0
                        if dif < 0:
                            puntos1 = 0
                            puntos2 = 2
                        if dif == 0:
                            puntos1 = 1
                            puntos2 = 1
                    elif modo == "experimental":
                        if dif == 1:
                            puntos1 = 2
                            puntos2 = 0
                        if dif == -1:
                            puntos1 = 0
                            puntos2 = 2
                        if dif == 2:
                            puntos1 = 3
                            puntos2 = 0
                        if dif == -2:
                            puntos1 = 0
                            puntos2 = 3
                        if dif > 2:
                            puntos1 = 4
                            puntos2 = 0
                        if dif < -2:
                            puntos1 = 0
                            puntos2 = 4
                        if dif == 0:
                            puntos1 = 1
                            puntos2 = 1
                    elif modo == "revolucionario":
                        if dif > 0:
                            puntos1 = 2
                            puntos2 = -1
                        if dif < 0:
                            puntos1 = -1
                            puntos2 = 2
                        if dif == 0:
                            puntos1 = 1
                            puntos2 = 1
                    else:
                        print("modo no valido")

                    existeEquipo1 = data.get(equipo1, None)
                    if existeEquipo1 is None:
                        data[equipo1] = {}

                    if modo in data[equipo1].keys():
                        anterior = data[equipo1][modo]
                        data[equipo1][modo] = anterior + puntos1
                    else:
                        data[equipo1][modo] = puntos1

                    existeEquipo2 = data.get(equipo2, None)
                    if existeEquipo2 is None:
                        data[equipo2] = {}

                    if modo in data[equipo2].keys():
                        anterior = data[equipo2][modo]
                        data[equipo2][modo] = anterior + puntos2
                    else:
                        data[equipo2][modo] = puntos2

    except ValueError:
        print("error")

# CSV FILE
csv_file = "futbol.csv"
csv_columns = ['Nombre','Puntos ACT','Puntos NUE','Puntos ANT','Puntos EXP','Puntos REV']
try:
    with open(csv_file, 'w') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
        writer.writeheader()
        for item in data.keys():
            row = {'Nombre': item, 'Puntos ACT': data[item]['actual'], 'Puntos NUE': data[item]['nuevo'],
                   'Puntos ANT': data[item]['antiguo'], 'Puntos EXP': data[item]['experimental'],
                   'Puntos REV': data[item]['revolucionario']}
            writer.writerow(row)
except IOError:
    print("I/O error")

# CLASIFICACION
dataActual, dataNuevo, dataAntiguo, dataExperimental, dataRevolucionario = {}, {}, {}, {}, {}

for item in data:
    equipo = data[item]
    dataActual[item] = equipo['actual']
    dataNuevo[item] = equipo['nuevo']
    dataAntiguo[item] = equipo['antiguo']
    dataExperimental[item] = equipo['experimental']
    dataRevolucionario[item] = equipo['revolucionario']

print("Modo ACT " + str(sorted(dataActual.items(), key=operator.itemgetter(1), reverse=True)))
print("Modo NUE " + str(sorted(dataNuevo.items(), key=operator.itemgetter(1), reverse=True)))
print("Modo ANT " + str(sorted(dataAntiguo.items(), key=operator.itemgetter(1), reverse=True)))
print("Modo EXP " + str(sorted(dataExperimental.items(), key=operator.itemgetter(1), reverse=True)))
print("Modo REV " + str(sorted(dataRevolucionario.items(), key=operator.itemgetter(1), reverse=True)))

Los resultados son curiosos, básicamente, da casi igual el sistema de puntuación utilizado, la clasificación varía muy poco, aunque evidentemente, si los equipos son conscientes del tipo de puntuación utilizado, también cambian sus estrategias para obtener el mayor número de puntos.

Solo el Barcelona estaría interesado en el sistema de puntuación “Experimental” donde se recompensa el marcar muchos goles por partido.

OwnMdm, tu gestor de dispositivo remoto, ahora Open Source

 

Ahora ownmdm, ha pasado a ser completamente open source. Os recuerdo que está dividido en un apartado web y una App para Android y que tiene muchísimas funciones.

 

Mäs datos del proyecto en esta entrada.

 

Ahora en el dominio http://ownmdm.pacosal.com tenéis acceso a toda la información y también al código fuente.

 

Ya no hay excusa para utilizarlo en vuestros dispositivos y estar asegurados contra robos.

ownmdm.com tu propio administrador de dispositivos gratuito

En la entrada anterior os hablaba del proyecto ownmdm con el que os podéis montar vuestro propio gestor de dispositivos utilizando vuestro propio servidor. Ahora hay muchos más comandos disponibles.

Pero ahora además podéis utilizar nuestros servidores con tráfico seguro en lugar de instalar el vuestro.

Recordar que hay 2 tipos de usuarios:

Standard: Gratuito con casi todas las opciones

Premium: Con todas las opciones

* Por un tiempo limitado, todas las altas en el portal serán usuarios Premium para siempre.

En la web https://www.ownmdm.com tenéis toda la información.

Recordaros que debéis utilizar la última versión de la App para que funcione correctamente.

 

ownMdm – Tu propio administrador de dispositivos para Android

Mi último proyecto para usuarios Android es un administrador de dispositivos similar a Cerberus e incluso al de Google, pero con la peculiaridad de que es gratuito y solo tú controlas toda la información. No cedes tus datos a nadie.

 

Necesitarás disponer de un Servidor propio, que bien puede ser una Raspberry PI o cualquier servidor que pueda ejecutar php y mysql, y una vez configurado solo tendrás que descargar la App Gratuita de Google Play y configurarla para que se conecte a tu servidor, repitiendo estos pasos para cada dispositivo que quieras controlar.

 

 

Una vez instalado en el dispositivo y configurado, podrás ponerlo en modo invisible y la App parecerá que no está instalada ya que no aparecerá en el lanzador de aplicaciones.

 

Los comandos que puedes enviar desde la consola son:

Sigue leyendo “ownMdm – Tu propio administrador de dispositivos para Android”

Aplicación Trivia Time para Firefox OS publicada

 

Ya está desarrollada la primera versión de Trivia Time para Firefox OS.

 

Basado en html5 siendo una conjunción de html, css y javascript. Es una versión sencilla desarrollada solo en ingles y con 3 niveles. En el futuro quizás le añada más.

 

El envío al MarketPlace y su publicación ha sido de minutos, ya que la webapp no solicita permisos.

 

La he desarrollado utilizando el emulador de Firefox y el dispositivo Keon que Mozilla me proporcionó.

 

Si la queréis probar aquí tenéis su url en el market https://marketplace.firefox.com/app/trivia-time/

Geeksphone Keon y Mozilla Firefox OS

 

Ya dispongo de mi terminal Geeksphone Keon para comenzar a desarrollar mi primera App para Firefox OS.

 

Este terminal es una developer preview, lo que quiere decir que está dirigido a desarrolladores para que vayan implementando aplicaciones y ayuden en la solución de bugs y rendimiento.

 

El teléfono todavía sufre lags, aunque se puede utilizar perfectamente. La versión de Firefox OS es una pre-release, de modo que se irá mejorando poco a poco.

 

En cuanto a características técnicas el Keon es un dispositivo similar a un HTC Wildfire S, un dispositivo de Gama Baja con 512 MB de memoria Ram.

 

Lo que le hace especial es que lleva el nuevo SO Firefox que está basado en un núcleo Linux muy similar a Android, pero con un interfaz basado completamente en HTML 5 lo que en principio es bueno, ya que muchos desarrolladores saben como trabajar con él.

 

En breve comenzaré a desarrollar mi primera App para él, lo que os haré saber en el momento que esté terminada.

 

A ver si tiene suerte y se convierte en el tercer S.O. para móviles…

Sphero, tu bola robot programable

Hace poco llamó mi atención una bola del tamaño de una bola de billar que rueda mediantes 2 motores internos que es dura y que se puede manejar mediante un móvil.

Después de ver exactamente de que se trataba y de ver todas sus posibilidades, decidí adquirirla como un juguete para mi hijo y como un robot programable para mi.

La bola denominada Sphero dispone de una conexión bluetooth para ser manejada desde el móvil, de 2 motores internos, acelerómetro y giroscopio y de una potente luz RGB.

Lo mejor de todo es que existe un SDK para IOS y Android y también para el motor Unity para desarrollar juegos.

 

Ya dispone de unas 20 Apps gratuitas y algunas de pago. Se configura con su App oficial después de haber enlazado la bola con el móvil (o tablet) mediante bluetooth. Esta App permite hacerla girar, cambiar las luces y configurar algunos ajustes avanzados, pero hay otras muchas.

Me ha gustado una simple que es de Golf, en la que tienes que llevar la bola hacia un objeto o taza que pongas en el suelo, pero cambiando la cola de posición. La cola es una luz azul que indica la parte trasera de la bola de modo que cuando le des para que se mueva hacia delante lo haga hacia el lado contrario al que apunta.

 

Con respecto al desarrollo, existe un SDK para Android con multitud de ejemplos y ahora hay que darle a la creatividad para crear nuevas Apps.

 

Ya he comenzado a desarrollar mi primera idea que publicaré en pocos días para rentabilizar la inversión.

 

Por cierto, se puede comprar en varias tiendas (alrededor de 130€). En mi caso ha sido en amazon.es.

 

Podéis ver un unboxing en esta web amiga.

 

Toda la info en la web oficial de Sphero.