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.

¿Y si pierdes el móvil o tienes un accidente con el móvil bloqueado?

Hace tiempo hubo una campaña en Televisión donde nos decían que creáramos un contacto con el nombre A.A y el número de teléfono del contacto al que llamar en caso de accidente, pero ¿y si el móvil está bloqueado por aquello de la privacidad?

Otro caso es que perdamos el móvil y que alguien nos lo quiera devolver, ¿como sabrían a donde llamar para su devolución?

Aquí viene la utilidad de la pantalla de bloqueo y la información del propietario. Debemos hacer que se muestre la información del propietario en la pantalla de bloqueo, pero no con nuestro número de teléfono, sino con el número de teléfono a donde queremos que llamen en caso de que se produzca alguna de las circunstancias anteriores.

A.A. 6xxxxxxxx

Por ejemplo el teléfono de tu mujer o marido sería lo adecuado.

En un Samsung Android estos son los pasos:

Compártelo con tus amistades, les podría venir bien en un futuro.

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.

Análisis breve Sony Smartwatch 2

En otro de nuestros análisis breves, en esta ocasión le toca al nuevo Sony Smartwatch 2.

 

El haber tenido los 2 modelos anteriores, es un gran punto de referencia para ver la evolución de Sony con los dispositivos wearables como ahora se les llama.

 

LiveView

El primer modelo era el LiveView, un primer concepto que no terminó de funcionar debido a muchas desconexiones bluetooth y a la poca compatibilidad con móviles que no fueran de Sony.

 

SmartWatch

El segundo modelo era el SmartWatch original con grandes mejoras sobre el anterior pero con grandes pegas a la hora de su utilización.

El primer fallo de éste (al igual que el anterior) era que no se veía a la luz del Sol, de modo que tenías un reloj que no funcionaba como tal.

Otro fallo grande era que no funcionaba si no estaba vinculado con un móvil, incluso para dar la hora.

Uno que desquiciaba era su cargador propietario basado en una especie de pinza que funcionaba muy mal y que si viajabas sin el cable te quedabas sin reloj.

La batería tampoco duraba más de 1 día.

 

SmartWatch 2

La versión 2 del Smartwatch ha solventado todos los problemas anteriores.

La batería dura perfectamente 2 días.

Se ve a la luz del sol gracias a su pantalla transflectiva.

El cable de carga es micro-usb.

Por defecto el reloj funciona solo y dispone de 3 aplicaciones adicionales que son un Timer, una Alarma por vibración y una linterna.

 

Ahora puedes llevar este reloj en la mano y presumir de él, ya que la estética ha mejorado mucho.

 

Estas son las características técnicas:

– Bluetooth 3.0

– Pantalla transflectiva de 220 x 176 pixels

– Botones atrás, home y menú

– NFC para emparejarlo

 

Está construido en aluminio y requiere Android 4.0 +

Viene bien con correa de silicona o de metal, variando el precio según ella. La medida de la correa es estandar, de modo que le podéis poner la que queráis.

Por supuesto, lo mejor es llenarlo de Apps desde el Android Market. Esta es una imprescindible para recibir las notificaciones en tu reloj, incluyendo el contenido.

 

Precio desde 156€ en mobilefun.es.

 

Análisis breve Wiko StairWay

Ha pasado por nuestras manos la joya de Wiko, que no es otra que su Wiko StairWay. Un teléfono con las siguientes características hardware:

– Pantalla IPS de 5 pulgadas

– Resolución de 1.280 x 720

– Protección de pantalla Gorilla Glass

– CPU de 4 nucleos a 1,2 GHz.

– 1 GB de Ram

– Cámara trasera de 13 Mpx

– Cámara frontal de 5 Mpx

– Capacidad para manejar 2 tarjetas sim de tamaño normal

– Capacidad para tarjetas de memoria micro-sd

– Batería de 2000 mAh

– 16 GB de almacenamiento interno

– Bluetooth 4.0

 

Además viene con Android 4.2.1 instalado y poco personalizado.

 

En cuanto a su uso, sufre de cierto lag en diferentes ocasiones, especialmente utilizando la cámara, que, por otra parte, dispone de buena calidad.

Destacar también que tiene una gran pantalla, pero con solo 2000 mAh, va a ser duro llegar al final del día con una sola carga.

Tampoco destaca especialmente por su cantidad de Ram de 1 GB cuando los más modernos móviles estan comenzando a aparecer ya con 3 GB.

 

Por otra parte, es un móvil grande y muy completo que puede satisfacer a numerosos usuarios, especialmente por su precio desde 269€.

 

Unas fotos a continuación:

Sigue leyendo “Análisis breve Wiko StairWay”

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”