Derrotado a La Inflacion en Venezuela

Primero que nada siempre han habido tiempos malos en nuestra sociedad, quizá nunca hayamos tenido ningún tiempo como el presente pero eso es otra historia, en la biblia dice que aprovechemos el tiempo por que los días son malos… En conclusión Dios siempre esta al control de todo, y es por esto que debemos encomendar nuestros planes según su Buena Voluntad…

Bueno quizá estas pensando  que hacer con ese dinero que tienes de las utilidades o algún dinero extra que tengas y pensándolo bien con el Dolar subiendo mas y mas cada día si lo metes en el Banco es posible que lo absorba la inflación y por ejemplo 200BsF hoy mañana sean solo 190 y así cada día no estoy exagerando en 2 idas el dolar a pasado de 2100 a 2479 BsF según Dolar Today es terrible la situación que vivimos en Venezuela..

No me gusta suponer ni mucho menos decirte que hacer con tu dinero pero a mi me gusta arriesgar(confiando en que Dios ponga en mi corazón discernimiento, en realidad de arriesgar quizá tenga muy poco jejeje) y es por eso que voy a hablar de finanza en este Blog debido a la Gran Crisis de Venezuela, Recuerda que Dios tiene un plan para todos… y bueno imagina comprar 100 dolares hace 3 meses cuando el dolar valía cerca de 1200BsF habrías Gastado 120.000BsF y ahora mismo tendrías cerca de 240.000BsF en realidad no habrías ganado mucho ya que los precios de los productos van en aumento a medida que el dolar se va estabilizando… Dios lo puede todo, te invito a leer 2 Reyes 7 del 1 al 3, claro que nosotros debemos buscar la manera de no malgastar nuestro dinero y meterlo al banco es malgastarlo ahora mismo

Y bueno comprar dolares solo sirve para mantener tus activos pero que tal si te digo que podríamos agregar una variable mas aunque es ligeramente arriesgado, El Bitcoin, si el Bitcoin es una moneda Digital mas cara que el ORO por algo sera, mucha gente teme usar la moneda pero es una moneda mas peor son los billetes de Venezuela que tienen ídolos de la Santería y aun así debemos usarlos pero no adorarlos ojo…

Y bueno si hacemos la misma cuenta, pero ahora incluimos comprar Bitcoins con los dolares que teníamos hace 3 meses, hace 3 meses 1 Bitcoin costaba entre 500 y 600 dolares, es decir que por encima podriamos comprar 1/6 de Bitcoins o lo que es lo mismo 16.666.667 Satoshis y ahora mismo el Bitcoin cuesta 750 Dolares, es decir habríamos ganado con 1 Bitcoin 1/4 de lo invertido es decir 25 Dolares ahora si  te tome la atención 😀

Tu dirás el Hubiera es pasado ahora es que quiero invertir :S, hace poco empresas como BBVA, Movistar, Grupo Santander, hasta Google y Facebook segun rumores estan invirtiendo en esta tecnología y la buena noticia es que mientras vaya aumentando el comercio Digital el valor del Bitcoin sera mas alto, Claro si no Viene Nuestro Señor Jesucristo Antes, pero imagina que te pregunte que hiciste con el Dinero que te Dio? no lo donaste, no ofrendaste, ni nada, dejaste que se lo comiera la inflación…

Bueno yo espero que a finales del año que viene el Bitcoin se coloque en 1500 Dolares, y el Dolar Baje por lo menos en Venezuela a 1500BsF… y entonces Diras por que invertir en Dolares o Bitcoin entonces, simple no pienso en comprar y vender como hace la mayoría de la gente eso mas bien destruye el Pais, ya que las Divisas salen del País y no hay retorno… Lo que quiero hacer es invertir por ejemplo  en Minería en la nube para comenzar con planes de 1 año y asi como esta el retorno seria en 5 a 7 meses y lo demas es ganancia es decir ganarías si inviertes 100 Dolares como mínimo 70 dolares mas lo que pueda subir el Bitcoin… en la proxima entrada espero tener mi Cloud ya funcionando para mostrarle como invertir en las mejores y ams fiables Cloud como mover su dinero de Bitcoins a Dolares o Bolivares y un par de calculadoras de suposiciones que pienso hacer para ver la trazabilidad de LA INVERSION, dicen que lleva riesgos epro en el peor de los casos en 4 meses tendras casi toda tu inversion…

Hace 1 año exactamente le dije a un tío que dice el tiene mucho Dinero, pero para mi es realmente Pobre por que no sabe de números y lo mas importante no tiene a Dios en su Corazón, le dije que invirtiera 360$ en 1 Bitcoin con lo que podía comprar un AntMiner S5 y de 5 a 7 meses tendría el retorno y luego ganaría Dividendos hasta que el Antminer muera es decir de 3 a 5 años como mínimo, y estaba un poco dispuesto y todo el mundo no hubo uno solo le dijo que si estaba loco, bueno con el dolar a 700BsF mas o menos y el Bitcoin a 360$ imagínate cuanto no tendría ahora mismo de Retorno… Bueno cosas asi me han pasado por no tener Dinero jeje, pero ahora mismo Dios esta Bendiciendo mi vida y quiero invertir no para mi si no para ayudar a tanta gente que no tiene la visión que Dios me ha dado, no económicamente si no mas bien usar el dinero para cursos seminarios Teológicos y de Tecnología, para las misiones y otras cosas… Bueno es lo que quiero esperemos que Dios me lo permita según su Buena y perfecta Voluntad…

Saludos Dios les Bendiga

 

 

El juego “Generala” en Python

No me gusta hacerle la tarea a la gente… pero estoy suscrito a Google Alert y me llegan las cosas de Python y hoy me puse a revisar y vi este interesante programa que le mandaron a hacer a un flojo… de verdad que yo pienso que soy flojo para lo que no me gusta hacer… pero si usted estudia programación y tiene pereza de hacer un programa tan simple de verdad déjeme decirle que se equivoco de carrera…

Hoy por ejemplo tuve que implementar 2 módulos en ODOO y extraer datos de unos archivos KIU y de verdad no me seria nada agradable si no me gustara la programación… ademas de instalar un FTP seguro :D… es dura la vida del programador y te tiene que gustar pasar horas intentando solucionar tus problemas de código o el de otros programadores… Si te gusta aprender e investigar y ademas intentas correr tus programas bienvenido al Club… no hay nada malo en equivocarse yo por ejemplo estudie Ing. Química y ahora soy programador, me gusta lo que hago y pagan bien 😀

Manos a la obra, el enunciado dice así:

El juego “Generala” consiste en tirar cinco dados y establecer el puntaje de la jugada. De las posibles, la escalera se da cuando suceden algunas de las tres progresiones: 1-2-3-4-5, 2-3-4-5-6 y 3-4-5-6-1. Realice un programa que tire los 5 dados al azar y determine si se produjo una escalera.

Es un poco sencillo si conoces las estructuras de python, quizá se pueda hacer mejor que lo que hice pero esto lo hice en 10 minutos aproximadamente junto con el otro código 😀

Primer código resolviendo la tarea :S

# -*- coding: utf-8 -*-
import random
###   El juego "Generala" consiste en tirar cinco dados y establecer el puntaje de la
###   jugada. De las posibles, la escalera se da cuando suceden algunas de las tres progresiones: 1-2-3-4-
###   5, 2-3-4-5-6 y 3-4-5-6-1. Realice un programa que tire los 5 dados al azar y determine si se produjo
###   una escalera. 



Iteraciones = 0 
Ganaste = 0
while Ganaste != 1000:
    Lista_dados=[]
    dado_1= random.randrange(1,7)
    Lista_dados.append(dado_1)
  
    dado_2= random.randrange(1,7)
    Lista_dados.append(dado_2)
  
    dado_3= random.randrange(1,7)
    Lista_dados.append(dado_3)
  
    dado_4= random.randrange(1,7)
    Lista_dados.append(dado_4)
  
    dado_5= random.randrange(1,7)
    Lista_dados.append(dado_5)
    
    Lista_dados.sort()
    
    
    if ( Lista_dados == [1, 2, 3, 4, 5] ) or ( Lista_dados == [ 2, 3, 4, 5,6] ) or ( Lista_dados == [1, 3, 4, 5, 6] ):
          Iteraciones +=1
          print "Ganaste en: ", Iteraciones, "Lanzadas"
          print Lista_dados

          Ganaste += 1000
          
          
    else:
          Iteraciones +=1
          print "Sigue intentando solo son: ", Iteraciones, "Lanzadas"

      

Prueba el código y veras la salida, explico este brevemente el otro no :S

Importamos Random para agregar azar al código :D, creamos un bucle while que se ejecutara hasta que Ganaste sea diferente  a 1 o haya 1 ganador, lanzamos los dados desde 1 a 6, recuerda que range no toma el ultimo numero, al final de los dados los sorteamos por defecto de menor a mayor, y creamos 1 if, si los dados aparecen como en alguna de las listas ganadoras, agregamos a ganaste y se rompe el bucle, ademas agregamos 1 a iteraciones y escribimos ganaste en X iteraciones e imprimimos la lista ganadora, esto se hace hasta que Ganaste sea 1 o haya 1 ganador si no se agrega 1 a iteraciones, se muestra un mensaje de consolación y se reanuda el Bucle.. fácil verdad

Ahora como soy ocioso y me gusta pensar y tratar de plasmar mis ideas en código, quería saber cual es la mas alta probabilidad de ganar es decir si lanzo los dados x veces cuantas veces ganare en X lanzadas, pero como mi pensamiento estaba algo no explicito cree una lista con las 10 iteraciones mas comunes en ganar este es el resultado:

# -*- coding: utf-8 -*-
from collections import Counter, OrderedDict
from prettytable import PrettyTable

import random
###   El juego "Generala" consiste en tirar cinco dados y establecer el puntaje de la
###   jugada. De las posibles, la escalera se da cuando suceden algunas de las tres progresiones: 1-2-3-4-
###   5, 2-3-4-5-6 y 3-4-5-6-1. Realice un programa que tire los 5 dados al azar y determine si se produjo
###   una escalera. 


Lista_ganadas=[]
iteraciones_total = 5000
for lanzada in range(1,iteraciones_total):
  Ganaste = 0
  Iteraciones = 0
  while Ganaste != 1:
    Lista_dados=[]
    dado_1= random.randrange(1,7)
    Lista_dados.append(dado_1)
  
    dado_2= random.randrange(1,7)
    Lista_dados.append(dado_2)
  
    dado_3= random.randrange(1,7)
    Lista_dados.append(dado_3)
  
    dado_4= random.randrange(1,7)
    Lista_dados.append(dado_4)
  
    dado_5= random.randrange(1,7)
    Lista_dados.append(dado_5)
    
    Lista_dados.sort()
    
    
    if ( Lista_dados == [1, 2, 3, 4, 5] ) or ( Lista_dados == [ 2, 3, 4, 5,6] ) or ( Lista_dados == [1, 3, 4, 5, 6] ):
          print "Ganaste en: ", lanzada, "Lanzadas"
          print Lista_dados
          Ganaste += 1
          Iteraciones += 1
          Lista_ganadas.append(Iteraciones)

          
    else:
          print "Sigue intentando solo son: ", lanzada, "Lanzadas"
          Iteraciones += 1
    
      
c = Counter(Lista_ganadas)
mas_comunes=  c.most_common()[:10]  

print "mas_comunes",mas_comunes
primer = mas_comunes[0][1]

numero_de_repeticiones = len(mas_comunes)

porcentajes = []
iteracion_ganada = []
for repeticion in range(0,numero_de_repeticiones):
    x = mas_comunes[repeticion][1]
    porentaje_de_iteraciones_total = float(x * 100.0000/ iteraciones_total)
    porcentajes.append(porentaje_de_iteraciones_total)
    iteracion_win = mas_comunes[repeticion][0]
    iteracion_ganada.append(iteracion_win)

    


table = PrettyTable(["iteracion_ganada", "porcentaje"])
i = 0
for repeticion in iteracion_ganada:
    
    table.add_row([iteracion_ganada[i], porcentajes[i]] )
    i += 1

print table


El resultado es algo como esto 😀

+------------------+-------------+
| iteracion_ganada | porcentajes |
+------------------+-------------+
|        1         |     4.88    |
|        2         |     4.54    |
|        4         |     4.1     |
|        3         |     3.98    |
|        7         |     3.74    |
|        5         |     3.72    |
|        9         |     3.56    |
|        6         |     3.26    |
|        11        |     2.96    |
|        10        |     2.88    |
+------------------+-------------+

Dios les Bendiga y recuerden si nos gusta lo que trabajamos no podemos llamarle trabajo 😀

Python Scraping NFL [Parte 1]

Al final decidí hacer la parte 1 de esta interesante serie, estamos bastante desfasados :S, pero esta semana creo que podre terminar esta serie hasta la parte del scraping… ya la parte del análisis espero tenerla este año, y sera para la próxima temporada que podremos usarla a tope… Hoy vamos a ver el codigo de como extraer los datos para cada juego, solo vamos a extraer los score de cada equipo por separado, ya luego podemos hacer un for para que nos los agrupe de 2 en 2 y asi saber a quien se enfrento cada equipo….

Aqui el codigo, aunque pienso cambiarlo un poco en como aplicar el get.TEXT, luego algun comentario del codigo:

import requests, urllib2
from bs4 import BeautifulSoup
import re

import math

lista_regular_season = [range(1, 6)]

### Pagina primaria para buscar los datos

url_1er = 'http://www.nfl.com/scores/2016/REG'
for semana in lista_regular_season[0]:
  
    print "      " 
    print "      " 

    print "      " 
    print "Que semana esta: ", semana 
    print "      " 
    print "      " 
    print "      " 

    url_1er = 'http://www.nfl.com/scores/2016/REG'+str(semana)
    
    print url_1er

    url_1er = 'http://www.nfl.com/scores/2016/REG'

            
    page_1era = urllib2.urlopen(url_1er)
            
    soup_1er = BeautifulSoup(page_1era, 'lxml')

    divicion_Diviciones = soup_1er.find_all('div',class_="new-score-box-wrapper" )
    
    quarters_total = soup_1er.find_all('p',class_="total-score" )
    if "--" in quarters_total:
      print "Este juego No se ha jugado"
      pass
    else:
      
      
        results_total = []
        results_first = []
        results_second = []
        results_third = []
        results_fourth = []
        nombres_equipos = []

        ### Total
        quarters_total = soup_1er.find_all('p',class_="total-score" )
        results_total.append([headers.get_text() for headers in quarters_total])
        results_total = results_total[0]


        ### nombre Equipo
        nombre_equipo= soup_1er.find_all('p',class_="team-name" )
        nombres_equipos.append([headers.get_text() for headers in nombre_equipo])
        nombres_equipos = nombres_equipos[0][2:]
        
        ### Primer cuarto
        first_qt = soup_1er.find_all('span',class_="first-qt" )
        results_first.append([data.get_text() for data in first_qt])
        results_first = results_first[0][2:]

        ### segundo cuarto

        second_qt = soup_1er.find_all('span',class_="second-qt" )
        results_second.append([data.get_text() for data in second_qt])
        results_second = results_second[0][2:]

        ### tercer cuarto

        third_qt = soup_1er.find_all('span',class_="third-qt" )
        results_third.append([data.get_text() for data in third_qt])
        results_third = results_third[0][2:]

        ### cuarto cuarto

        fourth_qt = soup_1er.find_all('span',class_="fourth-qt" )
        results_fourth.append([data.get_text() for data in fourth_qt])
        
        ## Debo cambiar la linea anterior para obtener 1 sola lista 😀
        results_fourth = results_fourth[0][2:]





        i = 0
        for datos in nombres_equipos:
                print "Nombre Equipo", datos
                primer_cuarto =  results_first[i]
                primer_cuarto =  int(primer_cuarto)
        

                segundo_cuarto = results_second[i]
                segundo_cuarto =  int(segundo_cuarto)

        
                tercer_cuarto =  results_third[i]
                tercer_cuarto =  int(tercer_cuarto)

        
                cuarto_cuarto =  results_fourth[i]
                cuarto_cuarto =  int(cuarto_cuarto)
                print "1er Cuarto:  ", primer_cuarto,"2do Cuarto:  " ,segundo_cuarto,"3er Cuarto:  ", tercer_cuarto,"4to Cuarto:  ", cuarto_cuarto
        

                total_total = primer_cuarto + segundo_cuarto +tercer_cuarto + cuarto_cuarto
                total = results_total[i]
                
                print "Total", total_total
        
        
        

                i += 1

No hay mucho que comentar solo que la pagina usada para extraer los datos es http://www.nfl.com/scores/2016/REG y se le agrega un numero que corresponde a la semana o jornada de la temporada…

También la linea data.get_text() debo modificarla para hacer el código mas viable 😀

Las otras partes son faciles de entender si has seguido mis entradas 😀

Hasta luego Feliz Dia y que Dios te Bendiga

Pensando en la Proxima entrada y cosas que nos quedan por hacer en Python

Les cuento que esta semana he estado trabajando Full Time programando en Openerp v7, aunque me gustaría subir por lo menos el vídeo de lo que hice debo preguntar si puedo :S… mas o menos los tiros van así, he estado rehaciendo una API de una Aerolinea para extraer los datos de unos archivos llamados PNR, vaya que ni me imaginaba ese mundillo :S, al final todo salio bien gracias a Dios con muchos momentos de frustración al estar en terreno desconocido, pero al final corrió el código y aunque le faltan bastantes detalles(esto es bueno por que tengo trabajo :D) ya esta consumiendo los archivos en cuestión 😀

Debo comunicarles que me he decidido implementar la Base de Datos directamente a ODOO, les hablo del scrapping de la NFL que estaba haciendo, les cuento que tengo mas de 1 semana con una Otitis terrible y ya Gracias a Dios se me esta pasando, Voy a implementarla directamente en ODOO por que asi tendremos un mapeo de la base de datos y vistas interesantes en ODOO ojo que pronto subo un Vídeo 😀

Voy a ir subiendo Vídeos de entradas anteriores para los que no les gusta leer(aunque háganlo un habito :D), voy a comenzar con un Cursito de Python para Dummies en vídeo, así como también un vídeo de buenas practicas debugueando código en python si Dios nos lo permite claro 😀

Hay varias series que hay que retomar si o si, pero ahora trabajo 8 horas al día, y otras 3 copadas, mas 2 en otros proyectos me quedan como 3 libres :S bueno algo haré :D, por ejemplo Criptografia, APIS le tengo el ojo a Google :D, entre otras……. hay bastante que elegir en este blog :S

Bueno hasta aquí esta micro entrada informativa, me despido que Dios les bendiga les ilumine sus pasos y les de discernimiento…

Scraping con Python la Liga BBVA de ESPN [Parte 4]

Bueno esta semana estuve un poco de aquí para alla, por lo que no había tenido tiempo de postear el Código para extraer los datos de ESPN de las tablas De posiciones así como las estadísticas de cada equipo, les cuento que se nos viene la NFL y la LVBP(Liga Venezolana de Béisbol Profesional), por lo que me voy a ver obligado a dar otro rumbo a las tablas de jugadores en ESPN y los voy a cambiar a NFL y LVBP, ojo si vamos a crear la tabla de jugadores para cada semana, pero no vamos a hacer mucho esfuerzo, por lo que les prometo una entrada mas de esta Serie donde tendremos los jugadores y sus estadísticas en las diferentes ligas de fútbol, y mas adelante seguiremos aprendiendo con python y ESPN pero en otros deportes…

También les quería comentar que como actualmente tengo bastante trabajo en ODOO v9 voy a tener redireccionar un poco y nos vamos a olvidar un rato de SQLITE3 y los siguientes scraping que voy a hacer van a ser para ODOO… sin mas nada que decir por ahora, manos a la obra….

Aquí tenemos el código que he venido preparando el cual voy a comentar brevemente dentro del mismo y luego voy a ir comentando las salidas, no voy ahondar mucho por que es muy largo mas de 200 lineas funcionales que bien se pueden rebajar a 110 mas o menos pero prefiero dejarlo así :D, este es el código:

### Autor Cesar Chirinos 
### Autor WordPress Orfeo
### Licencia GPL
### Publicado en stickybitshell.Wordpress

import sqlite3

import urllib2, re
from bs4 import BeautifulSoup
import re
from prettytable import PrettyTable

### Creamos la base de datos Ligas_varias_futbol

conn = sqlite3.connect('Final_Ligas_varias_futbol.sqlite3')

cur = conn.cursor()

### Agregue esto por que la pagina no me dice en que jornada o semana estamos
### Lo bueno de los otros deportes es que tienen mucha mas informacion de los jugadores
### y al hacerlo por partido vamos agregando los datos si existen a diferentes tablas 😀
liga_fecha_1 = int(input("Escriba El numero de la fecha a ingresar: "))

### Podemos comentar estas lineas cuando ya la tengamos en produccion
#cur.execute('''DROP TABLE IF EXISTS Ligas''')
#cur.execute('''DROP TABLE IF EXISTS Equipos_Ligas''')
#cur.execute('''DROP TABLE IF EXISTS Posiciones_por_Fechas''')

## Tabla para las ligas
cur.execute('''CREATE TABLE IF NOT EXISTS Ligas (id_liga INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, nombre_liga TEXT UNIQUE,  pais_liga TEXT UNIQUE)''')

### Tabla para todos los equipos involucrados
cur.execute('''CREATE TABLE IF NOT EXISTS Equipos_Ligas (id_equipo INTEGER PRIMARY KEY, nombre_equipo TEXT UNIQUE,  id_equipo_ESPN INTEGER UNIQUE, id_liga INTEGER)''')


### Creamos la tabla para guardar losd atos de cada jornada o semana 
cur.execute('''
 CREATE TABLE IF NOT EXISTS Posiciones_por_Fechas (id_posiciones INTEGER PRIMARY KEY, id_equipo INTEGER NOT NULL,id_liga INTEGER NOT NULL , posicion INTEGER NOT NULL,
                                                    part_jugado  INTEGER NOT NULL, p_gan INTEGER NOT NULL ,p_emp INTEGER NOT NULL, p_per INTEGER NOT NULL, 
                                                    gol_favor INTEGER NOT NULL, gol_contra INTEGER NOT NULL, Dif_Gol INTEGER NOT NULL,
                                                    p_gan_casa INTEGER NOT NULL, p_emp_casa INTEGER NOT NULL, p_per_casa INTEGER NOT NULL, gol_favor_casa INTEGER NOT NULL ,
                                                    gol_contra_casa INTEGER NOT NULL, p_gan_vis INTEGER NOT NULL, p_emp_vis INTEGER NOT NULL, p_per_vis INTEGER NOT NULL,
                                                    gol_contra_vis  INTEGER NOT NULL, gol_favor_vis INTEGER NOT NULL, Puntos_tot INTEGER NOT NULL ,
                                                    liga_fecha INTEGER NOT NULL UNIQUE)''')
### HAY q arreglar la tabla asi como se colocan los datos, se imprimen 😀

        ### podemos agragar otras ligas
urls_ligas = [ "spanish-primera-division/15/table" , "english-premier-league/23/table" ,  "italian-serie-a/12/table", "german-bundesliga/10/table" ]

tabla_formateada =[]
contador = 0
liga_para_id = 1

### creamos un bucle for para recorrer las ligas que queremos
for liga in urls_ligas:
  url =  "http://www.espnfc.us/" +  liga 
  
  ### Sacamos los nombres haciendo uso de expresiones regulares
  sacar_nombre =  re.findall('^(\S+?)/', liga)
  nombre_liga = sacar_nombre[0]
  ### Sacamos el pais haciendo uso de expresiones regulares
  sacar_pais =  re.findall('^(\S+?)-', liga)
  pais_liga = sacar_pais[0]
    
    
  ### Ahora agregamos los datos extraidos a la tabla Ligas
  cur.execute('''INSERT OR IGNORE INTO Ligas (nombre_liga, pais_liga) VALUES ( ?,? )''',(nombre_liga,pais_liga )) # Agregamos los datos a las ligas que queremos estudiar
    
    
  ### Antes habiamos hecho uso de expresiones regulares, ahora vamos a usar beautiful soup para dar un mejor formato que nos permita hacer scrap sobre la pagina
  page = urllib2.urlopen(url)
  
  
  ### Formateamos las pagina a lxml con beautifulsoup
  soup = BeautifulSoup(page, "lxml")

  ### Buscamosla primera table y las agregamos a table
  table = soup.find('table')
  
  ### buscamos todas las tr o table row, y las agregamso a row
  rows = table.find_all('tr')

  results = []
  

  Equipos = []
  ids_ESPN = []
  
  ### Creamos un bucle para buscar en cada row
  for row in rows:
        ### los 2 condiciones se van a ejecutar para buscar las headers y luego las rows
        table_headers = row.find_all('th')
        if table_headers:
            results.append([headers.get_text() for headers in table_headers])
           
        table_data = row.find_all('td')
        if table_data:
	    results.append([data.get_text() for data in table_data])
            a_ver = [data for data in table_data]
            


  ### Ahora eliminamos los 2 primeros elementos de la lista, en realidad eliminamos las  2  primeras listas que  hay en results con el este bucle y el if
  i = 0
  for datos  in results:
  
    if i >= 2:
        ### Ahora vamos a eliminar el ruido o las columnas que no nos dicen nada
        while ( u'\xa0'  or u'\n' or u'' )  in datos:
            if (u'')  in datos :
                datos.remove(u'')
            elif  u'\n'  in datos:
	       datos.remove(u'\n')
	    elif  u'\xa0'  in datos:
	       datos.remove(u'\xa0')
	       
        
        
        ### Agregamos la salida a una nueva lista
        tabla_formateada.append(datos)

    i += 1        

  
  
  ### Ahora llega la parte divertida
  ### Buscamos los nombres de los equipos y sus ids, esto para crear la relacion entre la tabla 2 y 3
  ### Asi como tambien para en un futuro cuando necesitemos buscar los jugadores de cada equipo usar el id para ingresar a ESPN
  ###Buscamos todas las td que contienen la class team
  elementos_equipos = soup.find_all("td", class_="team")

  ids_espn =  []
  for element in elementos_equipos:
    
    ### Ahi equipos mal formateados que nos daran error, normalmente son los mas nuevos, si necesitara explicar mas a fondo este codigo, haria uso de print para que vayamos 
    ### viendo las salidas de cada linea importante y asi ir moviendonos por python y html e ir tomando lo que necesitamos
    if "\n\t\t\t\t\t\t\t\t\t\t\t\t\tLeganes\n\t\t\t\t\t\t\t\t\t\t\t\t" in element:
        equipo = "Leganes"
        id_espn = "17534"
      
        Equipos.append(equipo)
        ids_espn.append(id_espn)
    elif "\n\t\t\t\t\t\t\t\t\t\t\t\t\tRB Leipzig\n\t\t\t\t\t\t\t\t\t\t\t\t" in element:
        equipo = "RB Leipzig "
        id_espn = "11420"
      
        Equipos.append(equipo)
        ids_espn.append(id_espn)
        
    ### Este else se ejecutara siempre que no sean ninguno de los 2 equipos raros de arriba es decir el 99% de las veces 😀
    else:
      
        ### Busca las href en las etiquetas a
        id_espn_sin_formato= element.a["href"]
        ### hacemos uso de RE para extraer el id de la url
        id_espn_sin = re.findall('http://www.espnfc.us/club/\S+?/([0-9]+?)/', id_espn_sin_formato)
        
        ### sacamos el id de la lista
        id_espn = id_espn_sin[0]
        
        ### Extraemos el nombre del equipo
        equipo = element.get_text()
        Equipos.append(equipo)
        
        ids_espn.append(id_espn)
        
  #print  Equipos
  
  #print ids_espn
  
  
  #print len(ids_espn)
  #print len(Equipos)
  
  ### Este bucle es innecesario pero decidi hacerlo asi
  count_eq = 0              
  for equipo in Equipos:
        nombre_equipo= equipo.strip()
        id_equipo_ESPN = ids_espn[count_eq]
        id_liga = liga_para_id
        cur = conn.cursor()
        cur.execute('''INSERT OR IGNORE INTO Equipos_Ligas (nombre_equipo, id_equipo_ESPN, id_liga) VALUES ( ?,?,? )''',(nombre_equipo,id_equipo_ESPN ,id_liga)) # Agregamos los datos a las ligas que queremos estudiar
        
        
        count_eq +=1

  liga_para_id += 1  
  contador += 1

### Imprimimos las ligas que tenemos

SQLSTR = "SELECT  *  FROM Ligas"


Equipos_Liga =  "SELECT  *  FROM Equipos_Ligas"
print
print
for word in cur.execute(SQLSTR):
    print str(word[0]),"La liga:", word[1] ,"Es de :",  word[2]
  
print
print
print

###Generamos los equipos de la liga con su id liga para saber a cual corresponden en un futuro

print "Equipos de la liga"
join_liga =  "SELECT * FROM Equipos_Ligas"


formato_equipos = []
for word in cur.execute(join_liga):
    print word
    formato_equipos.append(word)


count = 0
for word in formato_equipos:  ### AQui debo modificar el cur.execute por otra cosa ya que tengo cur.execute abajo y rompe el for
    id_equipo = word[0]
    nombre_equipo = word[1]
    id_equipo_ESPN =  word[2]
    id_liga = word[3]
    if nombre_equipo in tabla_formateada[count][1]:
        posicion = tabla_formateada[count][0]
        #print posicion
        ###Totales
        part_jugado = tabla_formateada[count][2]
        #print part_jugado
        p_gan = tabla_formateada[count][3]
        #print p_gan
        p_emp = tabla_formateada[count][4]
        #print p_emp
        p_per = tabla_formateada[count][5]
        #print p_per
        
        gol_favor = tabla_formateada[count][6]
        #print p_per
        gol_contra = tabla_formateada[count][7]
        #print gol_contra
        ###casa

        p_gan_casa = tabla_formateada[count][8]
        #print p_gan_casa
        
        p_emp_casa = tabla_formateada[count][9]
        #print p_emp_casa
        
        p_per_casa = tabla_formateada[count][10]
        #print p_per_casa
        
        gol_favor_casa = tabla_formateada[count][11]
        #print gol_favor_casa
        
        gol_contra_casa = tabla_formateada[count][12]
        #print gol_contra_casa
        
        ###visita

        
        p_gan_vis = tabla_formateada[count][13]
        #print p_gan_vis
        p_emp_vis = tabla_formateada[count][14]
        #print p_emp_vis
        p_per_vis = tabla_formateada[count][15]
        #print p_per_vis
        gol_favor_vis = tabla_formateada[count][16]
        #print gol_favor_vis
        gol_contra_vis = tabla_formateada[count][17]
        #print gol_contra_vis
        
        
        
        Dif_Gol = tabla_formateada[count][18]
        #print Dif_Gol
        
        Puntos_tot = tabla_formateada[count][19]
        #print Puntos_tot
        liga_fecha = str(liga_fecha_1) + str(id_equipo)
	#print liga_fecha
	#print id_equipo, id_liga, id_equipo_ESPN, nombre_equipo, posicion, Dif_Gol, Puntos_tot, liga_fecha
	
        
        cur.execute('''INSERT OR IGNORE INTO Posiciones_por_Fechas (id_equipo,id_liga, posicion, part_jugado, p_gan, p_emp, p_per, gol_favor, gol_contra,  p_gan_casa, p_emp_casa, p_per_casa, gol_favor_casa, gol_contra_casa,  p_gan_vis, p_emp_vis, p_per_vis, gol_favor_vis, gol_contra_vis, Dif_Gol, Puntos_tot, liga_fecha ) VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? )''',(id_equipo,id_liga, posicion, part_jugado, p_gan, p_emp, p_per, gol_favor, gol_contra,  p_gan_casa, p_emp_casa, p_per_casa, gol_favor_casa, gol_contra_casa,  p_gan_vis, p_emp_vis, p_per_vis, gol_favor_vis, gol_contra_vis, Dif_Gol, Puntos_tot, liga_fecha )) # Agregamos los datos a las ligas que queremos estudiar
        
    count += 1

posiciones =  "SELECT * FROM Posiciones_por_Fechas"
print "Lo que nos interesa es esta salida"
for word in cur.execute(posiciones):
    print word

print "Salida combinada de 2 tablas"

formato_combinado = []

relacion_tablas = "select * from Equipos_Ligas A, Posiciones_por_Fechas B where A.id_equipo = B.id_equipo" 
for word in cur.execute(relacion_tablas):
    print word
    formato_combinado.append(word)
print "aqui la cosa se complica pero lo ue no podemos hacer con sql yo lo hago con python"
print "Salida combinada de 2 tablas con 1 sola liga :D"


formato_combinado_2 = []

relacion_tablas_con_liga = "select * from Equipos_Ligas AS C  JOIN Posiciones_por_Fechas  AS R ON C.id_equipo = R.id_equipo  AND R.id_liga = 2   " 
for word in cur.execute(relacion_tablas_con_liga):      

        print word


conn.commit()
cur.close()

Y esta es la Salida por partes:

Escriba El numero de la fecha a ingresar: 2


1 La liga: spanish-primera-division Es de : spanish
2 La liga: english-premier-league Es de : english
3 La liga: italian-serie-a Es de : italian
4 La liga: german-bundesliga Es de : german

La primera parte, debemos agregar manualmente la semana en la estamos, si lo hacemos mal y no tenemos guardada la base de datos, podemos tener una catástrofe, naaa solo con el mismo uso de sqlite y python podríamos arreglarlo al final 😀 quizá diga como en otra entrada algún día :D….

Ok agregamos la semana en este caso 2, pero luego también agregue 3 :S solo para hacer la prueba, debería colocar un guardián que si agrego 15 como semana y no se han jugado 15 juegos por equipo no me haga caso y me diga que deje de tomar(no tomo :D) o algo así, ok la primera data que recibimos es sobre la liga y el pais.

Equipos de la liga
(1, u'Las Palmas', 98, 1)
(2, u'Barcelona', 83, 1)
(3, u'Real Madrid', 86, 1)
(4, u'Sevilla FC', 243, 1)
(5, u'Sporting Gij\xf3n', 3788, 1)
(6, u'Deportivo La Coru\xf1a', 90, 1)
(7, u'Leganes', 17534, 1)
(8, u'Eibar', 3752, 1)
(9, u'Real Sociedad', 89, 1)
(10, u'M\xe1laga', 99, 1)
(11, u'Atletico Madrid', 1068, 1)
(12, u'Villarreal', 102, 1)
(13, u'Alav\xe9s', 96, 1)
(14, u'Espanyol', 88, 1)
(15, u'Osasuna', 97, 1)
(16, u'Granada', 3747, 1)
(17, u'Real Betis', 244, 1)
(18, u'Celta Vigo', 85, 1)
(19, u'Athletic Bilbao', 93, 1)
(20, u'Valencia', 94, 1)
(21, u'Manchester City', 382, 2)
(22, u'Chelsea', 363, 2)
(23, u'Manchester United', 360, 2)
(24, u'Everton', 368, 2)
(25, u'Hull City', 306, 2)
(26, u'Middlesbrough', 369, 2)
(27, u'Tottenham Hotspur', 367, 2)
(28, u'Arsenal', 359, 2)
(29, u'Leicester City', 375, 2)
(30, u'West Bromwich Albion', 383, 2)
(31, u'Liverpool', 364, 2)
(32, u'West Ham United', 371, 2)
(33, u'Burnley', 379, 2)
(34, u'Swansea City', 318, 2)
(35, u'Southampton', 376, 2)
(36, u'Sunderland', 366, 2)
(37, u'Crystal Palace', 384, 2)
(38, u'Watford', 395, 2)
(39, u'AFC Bournemouth', 349, 2)
(40, u'Stoke City', 336, 2)
(41, u'Genoa', 3263, 3)
(42, u'Juventus', 111, 3)
(43, u'Sampdoria', 2734, 3)
(44, u'AS Roma', 104, 3)
(45, u'US Pescara', 3290, 3)
(46, u'Napoli', 114, 3)
(47, u'Torino', 239, 3)
(48, u'Chievo Verona', 238, 3)
(49, u'Lazio', 112, 3)
(50, u'Fiorentina', 109, 3)
(51, u'AC Milan', 103, 3)
(52, u'Udinese', 118, 3)
(53, u'Sassuolo', 3997, 3)
(54, u'Bologna', 107, 3)
(55, u'Palermo', 2923, 3)
(56, u'Cagliari', 2925, 3)
(57, u'Internazionale', 110, 3)
(58, u'Atalanta', 105, 3)
(59, u'Crotone', 3173, 3)
(60, u'Empoli', 2574, 3)
(61, u'Bayern Munich', 132, 4)
(62, u'FC Cologne', 122, 4)
(63, u'VfL Wolfsburg', 138, 4)
(64, u'Borussia Dortmund', 124, 4)
(65, u'Hertha Berlin', 129, 4)
(66, u'Borussia Monchengladbach', 268, 4)
(67, u'Eintracht Frankfurt', 125, 4)
(68, u'TSG Hoffenheim', 7911, 4)
(69, u'RB Leipzig', 11420, 4)
(70, u'Hamburg SV', 127, 4)
(71, u'FC Ingolstadt 04', 6367, 4)
(72, u'SC Freiburg', 126, 4)
(73, u'Bayer Leverkusen', 131, 4)
(74, u'Mainz', 2950, 4)
(75, u'Schalke 04', 133, 4)
(76, u'SV Darmstadt 98', 3812, 4)
(77, u'FC Augsburg', 3841, 4)
(78, u'Werder Bremen', 137, 4)

Luego agregamos todos los equipo según las urls de cada liga, ojo al ejecutar el bucle generamos un contador en 1 que nos va agregando +1 y así generamos el id_liga para la tabla 1,2 y la tabla 3, podemos notar 78 equipos para las 4 ligas el ultimo numero es la id_liga a la que pertenece

Luego tenemos:

Lo que nos interesa es esta salida
(1, 1, 1, 1, 2, 2, 0, 0, 9, 3, 6, 1, 0, 0, 5, 1, 1, 0, 0, 2, 4, 6, 10003)
(2, 2, 1, 2, 2, 2, 0, 0, 7, 2, 5, 1, 0, 0, 6, 2, 1, 0, 0, 0, 1, 6, 20003)
(3, 3, 1, 3, 2, 2, 0, 0, 5, 1, 4, 1, 0, 0, 2, 1, 1, 0, 0, 0, 3, 6, 30003)
(4, 4, 1, 4, 2, 1, 1, 0, 6, 4, 2, 1, 0, 0, 6, 4, 0, 1, 0, 0, 0, 4, 40003)
(5, 5, 1, 5, 2, 1, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 1, 0, 0, 0, 4, 50003)
(6, 6, 1, 6, 2, 1, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 1, 0, 0, 0, 4, 60003)
(7, 7, 1, 7, 2, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 70003)
(8, 8, 1, 8, 2, 1, 0, 1, 2, 2, 0, 1, 0, 0, 1, 0, 0, 0, 1, 2, 1, 3, 80003)
(9, 9, 1, 9, 2, 1, 0, 1, 2, 3, -1, 0, 0, 1, 0, 3, 1, 0, 0, 0, 2, 3, 90003)
(10, 10, 1, 10, 2, 0, 2, 0, 3, 3, 0, 0, 1, 0, 1, 1, 0, 1, 0, 2, 2, 2, 100003)
(11, 11, 1, 11, 2, 0, 2, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 2, 110003)
(12, 12, 1, 12, 2, 0, 2, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 2, 120003)
(13, 13, 1, 13, 2, 0, 2, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 2, 130003)
(14, 14, 1, 14, 2, 0, 1, 1, 6, 8, -2, 0, 1, 0, 2, 2, 0, 0, 1, 6, 4, 1, 140003)
(15, 15, 1, 15, 2, 0, 1, 1, 1, 3, -2, 0, 0, 1, 0, 2, 0, 1, 0, 1, 1, 1, 150003)
(16, 16, 1, 16, 2, 0, 1, 1, 2, 6, -4, 0, 1, 0, 1, 1, 0, 0, 1, 5, 1, 1, 160003)
(17, 17, 1, 17, 2, 0, 1, 1, 2, 6, -4, 0, 1, 0, 0, 0, 0, 0, 1, 6, 2, 1, 170003)
(18, 18, 1, 18, 2, 0, 0, 2, 1, 3, -2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 0, 180003)
(19, 19, 1, 19, 2, 0, 0, 2, 1, 3, -2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 0, 190003)
(20, 20, 1, 20, 2, 0, 0, 2, 2, 5, -3, 0, 0, 1, 2, 4, 0, 0, 1, 1, 0, 0, 200003)
(21, 21, 2, 1, 3, 3, 0, 0, 9, 3, 6, 2, 0, 0, 5, 2, 1, 0, 0, 1, 4, 9, 210003)
(22, 22, 2, 2, 3, 3, 0, 0, 7, 2, 5, 2, 0, 0, 5, 1, 1, 0, 0, 1, 2, 9, 220003)
(23, 23, 2, 3, 3, 3, 0, 0, 6, 1, 5, 1, 0, 0, 2, 0, 2, 0, 0, 1, 4, 9, 230003)
(24, 24, 2, 4, 3, 2, 1, 0, 4, 2, 2, 1, 1, 0, 2, 1, 1, 0, 0, 1, 2, 7, 240003)
(25, 25, 2, 5, 3, 2, 0, 1, 4, 2, 2, 1, 0, 1, 2, 2, 1, 0, 0, 0, 2, 6, 250003)
(26, 26, 2, 6, 3, 1, 2, 0, 3, 2, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 2, 5, 260003)
(27, 27, 2, 7, 3, 1, 2, 0, 3, 2, 1, 1, 1, 0, 2, 1, 0, 1, 0, 1, 1, 5, 270003)
(28, 28, 2, 8, 3, 1, 1, 1, 6, 5, 1, 0, 0, 1, 3, 4, 1, 1, 0, 1, 3, 4, 280003)
(29, 29, 2, 9, 3, 1, 1, 1, 3, 3, 0, 1, 1, 0, 2, 1, 0, 0, 1, 2, 1, 4, 290003)
(30, 30, 2, 10, 3, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 1, 4, 300003)
(31, 31, 2, 11, 3, 1, 1, 1, 5, 6, -1, 0, 0, 0, 0, 0, 1, 1, 1, 6, 5, 4, 310003)
(32, 32, 2, 12, 3, 1, 0, 2, 3, 5, -2, 1, 0, 0, 1, 0, 0, 0, 2, 5, 2, 3, 320003)
(33, 33, 2, 13, 3, 1, 0, 2, 2, 4, -2, 1, 0, 1, 2, 1, 0, 0, 1, 3, 0, 3, 330003)
(34, 34, 2, 14, 3, 1, 0, 2, 2, 4, -2, 0, 0, 1, 0, 2, 1, 0, 1, 2, 2, 3, 340003)
(35, 35, 2, 15, 3, 0, 2, 1, 2, 4, -2, 0, 2, 0, 2, 2, 0, 0, 1, 2, 0, 2, 350003)
(36, 36, 2, 16, 3, 0, 1, 2, 3, 5, -2, 0, 0, 1, 1, 2, 0, 1, 1, 3, 2, 1, 360003)
(37, 37, 2, 17, 3, 0, 1, 2, 1, 3, -2, 0, 1, 1, 1, 2, 0, 0, 1, 1, 0, 1, 370003)
(38, 38, 2, 18, 3, 0, 1, 2, 3, 6, -3, 0, 0, 2, 2, 5, 0, 1, 0, 1, 1, 1, 380003)
(39, 39, 2, 19, 3, 0, 1, 2, 2, 5, -3, 0, 0, 1, 1, 3, 0, 1, 1, 2, 1, 1, 390003)
(40, 40, 2, 20, 3, 0, 1, 2, 2, 6, -4, 0, 0, 1, 1, 4, 0, 1, 1, 2, 1, 1, 400003)
(41, 41, 3, 1, 2, 2, 0, 0, 6, 2, 4, 1, 0, 0, 3, 1, 1, 0, 0, 1, 3, 6, 410003)
(42, 42, 3, 2, 2, 2, 0, 0, 3, 1, 2, 1, 0, 0, 2, 1, 1, 0, 0, 0, 1, 6, 420003)
(43, 43, 3, 3, 2, 2, 0, 0, 3, 1, 2, 1, 0, 0, 2, 1, 1, 0, 0, 0, 1, 6, 430003)
(44, 44, 3, 4, 2, 1, 1, 0, 6, 2, 4, 1, 0, 0, 4, 0, 0, 1, 0, 2, 2, 4, 440003)
(45, 45, 3, 5, 2, 1, 1, 0, 5, 2, 3, 0, 1, 0, 2, 2, 1, 0, 0, 0, 3, 4, 450003)
(46, 46, 3, 6, 2, 1, 1, 0, 6, 4, 2, 1, 0, 0, 4, 2, 0, 1, 0, 2, 2, 4, 460003)
(47, 47, 3, 7, 2, 1, 0, 1, 7, 4, 3, 1, 0, 0, 5, 1, 0, 0, 1, 3, 2, 3, 470003)
(48, 48, 3, 8, 2, 1, 0, 1, 2, 1, 1, 1, 0, 0, 2, 0, 0, 0, 1, 1, 0, 3, 480003)
(49, 49, 3, 9, 2, 1, 0, 1, 4, 4, 0, 0, 0, 1, 0, 1, 1, 0, 0, 3, 4, 3, 490003)
(50, 50, 3, 10, 2, 1, 0, 1, 2, 2, 0, 1, 0, 0, 1, 0, 0, 0, 1, 2, 1, 3, 500003)
(51, 51, 3, 11, 2, 1, 0, 1, 5, 6, -1, 1, 0, 0, 3, 2, 0, 0, 1, 4, 2, 3, 510003)
(52, 52, 3, 12, 2, 1, 0, 1, 2, 4, -2, 1, 0, 0, 2, 0, 0, 0, 1, 4, 0, 3, 520003)
(53, 53, 3, 13, 2, 1, 0, 1, 1, 3, -2, 0, 0, 1, 0, 3, 1, 0, 0, 0, 1, 3, 530003)
(54, 54, 3, 14, 2, 1, 0, 1, 2, 5, -3, 1, 0, 0, 1, 0, 0, 0, 1, 5, 1, 3, 540003)
(55, 55, 3, 15, 2, 0, 1, 1, 1, 2, -1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 550003)
(56, 56, 3, 16, 2, 0, 1, 1, 3, 5, -2, 0, 1, 0, 2, 2, 0, 0, 1, 3, 1, 1, 560003)
(57, 57, 3, 17, 2, 0, 1, 1, 1, 3, -2, 0, 1, 0, 1, 1, 0, 0, 1, 2, 0, 1, 570003)
(58, 58, 3, 18, 2, 0, 0, 2, 4, 6, -2, 0, 0, 1, 3, 4, 0, 0, 1, 2, 1, 0, 580003)
(59, 59, 3, 19, 2, 0, 0, 2, 1, 4, -3, 0, 0, 1, 1, 3, 0, 0, 1, 1, 0, 0, 590003)
(60, 60, 3, 20, 2, 0, 0, 2, 0, 3, -3, 0, 0, 1, 0, 1, 0, 0, 1, 2, 0, 0, 600003)
(61, 61, 4, 1, 1, 1, 0, 0, 6, 0, 6, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 3, 610003)
(62, 62, 4, 2, 1, 1, 0, 0, 2, 0, 2, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 620003)
(63, 63, 4, 2, 1, 1, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 630003)
(64, 64, 4, 4, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 3, 640003)
(65, 65, 4, 4, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 3, 650003)
(66, 66, 4, 4, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 3, 660003)
(67, 67, 4, 7, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 670003)
(68, 68, 4, 8, 1, 0, 1, 0, 2, 2, 0, 0, 1, 0, 2, 2, 0, 0, 0, 0, 0, 1, 680003)
(69, 69, 4, 8, 1, 0, 1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 1, 690003)
(70, 70, 4, 10, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 700003)
(71, 71, 4, 10, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 710003)
(72, 72, 4, 12, 1, 0, 0, 1, 1, 2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 720003)
(73, 73, 4, 12, 1, 0, 0, 1, 1, 2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 730003)
(74, 74, 4, 12, 1, 0, 0, 1, 1, 2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 740003)
(75, 75, 4, 15, 1, 0, 0, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 750003)
(76, 76, 4, 16, 1, 0, 0, 1, 0, 2, -2, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 760003)
(77, 77, 4, 16, 1, 0, 0, 1, 0, 2, -2, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 770003)
(78, 78, 4, 18, 1, 0, 0, 1, 0, 6, -6, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 780003)

Aquí necesitamos observar que tenemos los campos tal como los agregamos al crear la tabla:

cur.execute('''
 CREATE TABLE IF NOT EXISTS Posiciones_por_Fechas (id_posiciones INTEGER PRIMARY KEY, id_equipo INTEGER NOT NULL,id_liga INTEGER NOT NULL , posicion INTEGER NOT NULL,
 part_jugado INTEGER NOT NULL, p_gan INTEGER NOT NULL ,p_emp INTEGER NOT NULL, p_per INTEGER NOT NULL, 
 gol_favor INTEGER NOT NULL, gol_contra INTEGER NOT NULL, Dif_Gol INTEGER NOT NULL,
 p_gan_casa INTEGER NOT NULL, p_emp_casa INTEGER NOT NULL, p_per_casa INTEGER NOT NULL, gol_favor_casa INTEGER NOT NULL ,
 gol_contra_casa INTEGER NOT NULL, p_gan_vis INTEGER NOT NULL, p_emp_vis INTEGER NOT NULL, p_per_vis INTEGER NOT NULL,
 gol_contra_vis INTEGER NOT NULL, gol_favor_vis INTEGER NOT NULL, Puntos_tot INTEGER NOT NULL ,
 liga_fecha INTEGER NOT NULL UNIQUE)''')

Debemos fijarnos que liga_fecha tiene una restricción de ser UNIQUE o única, pero para poder hacer esto, he tenido que hacer esta linea= “liga_fecha = str(id_equipo)+ ‘000’ + str(liga_fecha_1)” ya que no me entendí nunca por que el sqlite no me permite colocar varias columnas como PRIMARY  KEY y tampoco me permitia colocarle UNIQUE a varias columnas juntas por lo que decidí hacerlo con python así como un correlativo….

Luego tenemos esta ultima salida:

Salida combinada de 2 tablas
(1, u'Las Palmas', 98, 1, 1, 1, 1, 1, 2, 2, 0, 0, 9, 3, 6, 1, 0, 0, 5, 1, 1, 0, 0, 2, 4, 6, 10002)
(2, u'Barcelona', 83, 1, 2, 2, 1, 2, 2, 2, 0, 0, 7, 2, 5, 1, 0, 0, 6, 2, 1, 0, 0, 0, 1, 6, 20002)
(3, u'Real Madrid', 86, 1, 3, 3, 1, 3, 2, 2, 0, 0, 5, 1, 4, 1, 0, 0, 2, 1, 1, 0, 0, 0, 3, 6, 30002)
(4, u'Sevilla FC', 243, 1, 4, 4, 1, 4, 2, 1, 1, 0, 6, 4, 2, 1, 0, 0, 6, 4, 0, 1, 0, 0, 0, 4, 40002)
(5, u'Sporting Gij\xf3n', 3788, 1, 5, 5, 1, 5, 2, 1, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 1, 0, 0, 0, 4, 50002)
(6, u'Deportivo La Coru\xf1a', 90, 1, 6, 6, 1, 6, 2, 1, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 1, 0, 0, 0, 4, 60002)
(7, u'Leganes', 17534, 1, 7, 7, 1, 7, 2, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 70002)
(8, u'Eibar', 3752, 1, 8, 8, 1, 8, 2, 1, 0, 1, 2, 2, 0, 1, 0, 0, 1, 0, 0, 0, 1, 2, 1, 3, 80002)
(9, u'Real Sociedad', 89, 1, 9, 9, 1, 9, 2, 1, 0, 1, 2, 3, -1, 0, 0, 1, 0, 3, 1, 0, 0, 0, 2, 3, 90002)
(10, u'M\xe1laga', 99, 1, 10, 10, 1, 10, 2, 0, 2, 0, 3, 3, 0, 0, 1, 0, 1, 1, 0, 1, 0, 2, 2, 2, 100002)
(11, u'Atletico Madrid', 1068, 1, 11, 11, 1, 11, 2, 0, 2, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 2, 110002)
(12, u'Villarreal', 102, 1, 12, 12, 1, 12, 2, 0, 2, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 2, 120002)
(13, u'Alav\xe9s', 96, 1, 13, 13, 1, 13, 2, 0, 2, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 2, 130002)
(14, u'Espanyol', 88, 1, 14, 14, 1, 14, 2, 0, 1, 1, 6, 8, -2, 0, 1, 0, 2, 2, 0, 0, 1, 6, 4, 1, 140002)
(15, u'Osasuna', 97, 1, 15, 15, 1, 15, 2, 0, 1, 1, 1, 3, -2, 0, 0, 1, 0, 2, 0, 1, 0, 1, 1, 1, 150002)
(16, u'Granada', 3747, 1, 16, 16, 1, 16, 2, 0, 1, 1, 2, 6, -4, 0, 1, 0, 1, 1, 0, 0, 1, 5, 1, 1, 160002)
(17, u'Real Betis', 244, 1, 17, 17, 1, 17, 2, 0, 1, 1, 2, 6, -4, 0, 1, 0, 0, 0, 0, 0, 1, 6, 2, 1, 170002)
(18, u'Celta Vigo', 85, 1, 18, 18, 1, 18, 2, 0, 0, 2, 1, 3, -2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 0, 180002)
(19, u'Athletic Bilbao', 93, 1, 19, 19, 1, 19, 2, 0, 0, 2, 1, 3, -2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 0, 190002)
(20, u'Valencia', 94, 1, 20, 20, 1, 20, 2, 0, 0, 2, 2, 5, -3, 0, 0, 1, 2, 4, 0, 0, 1, 1, 0, 0, 200002)
(21, u'Manchester City', 382, 2, 21, 21, 2, 1, 3, 3, 0, 0, 9, 3, 6, 2, 0, 0, 5, 2, 1, 0, 0, 1, 4, 9, 210002)
(22, u'Chelsea', 363, 2, 22, 22, 2, 2, 3, 3, 0, 0, 7, 2, 5, 2, 0, 0, 5, 1, 1, 0, 0, 1, 2, 9, 220002)
(23, u'Manchester United', 360, 2, 23, 23, 2, 3, 3, 3, 0, 0, 6, 1, 5, 1, 0, 0, 2, 0, 2, 0, 0, 1, 4, 9, 230002)
(24, u'Everton', 368, 2, 24, 24, 2, 4, 3, 2, 1, 0, 4, 2, 2, 1, 1, 0, 2, 1, 1, 0, 0, 1, 2, 7, 240002)
(25, u'Hull City', 306, 2, 25, 25, 2, 5, 3, 2, 0, 1, 4, 2, 2, 1, 0, 1, 2, 2, 1, 0, 0, 0, 2, 6, 250002)
(26, u'Middlesbrough', 369, 2, 26, 26, 2, 6, 3, 1, 2, 0, 3, 2, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 2, 5, 260002)
(27, u'Tottenham Hotspur', 367, 2, 27, 27, 2, 7, 3, 1, 2, 0, 3, 2, 1, 1, 1, 0, 2, 1, 0, 1, 0, 1, 1, 5, 270002)
(28, u'Arsenal', 359, 2, 28, 28, 2, 8, 3, 1, 1, 1, 6, 5, 1, 0, 0, 1, 3, 4, 1, 1, 0, 1, 3, 4, 280002)
(29, u'Leicester City', 375, 2, 29, 29, 2, 9, 3, 1, 1, 1, 3, 3, 0, 1, 1, 0, 2, 1, 0, 0, 1, 2, 1, 4, 290002)
(30, u'West Bromwich Albion', 383, 2, 30, 30, 2, 10, 3, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 1, 4, 300002)
(31, u'Liverpool', 364, 2, 31, 31, 2, 11, 3, 1, 1, 1, 5, 6, -1, 0, 0, 0, 0, 0, 1, 1, 1, 6, 5, 4, 310002)
(32, u'West Ham United', 371, 2, 32, 32, 2, 12, 3, 1, 0, 2, 3, 5, -2, 1, 0, 0, 1, 0, 0, 0, 2, 5, 2, 3, 320002)
(33, u'Burnley', 379, 2, 33, 33, 2, 13, 3, 1, 0, 2, 2, 4, -2, 1, 0, 1, 2, 1, 0, 0, 1, 3, 0, 3, 330002)
(34, u'Swansea City', 318, 2, 34, 34, 2, 14, 3, 1, 0, 2, 2, 4, -2, 0, 0, 1, 0, 2, 1, 0, 1, 2, 2, 3, 340002)
(35, u'Southampton', 376, 2, 35, 35, 2, 15, 3, 0, 2, 1, 2, 4, -2, 0, 2, 0, 2, 2, 0, 0, 1, 2, 0, 2, 350002)
(36, u'Sunderland', 366, 2, 36, 36, 2, 16, 3, 0, 1, 2, 3, 5, -2, 0, 0, 1, 1, 2, 0, 1, 1, 3, 2, 1, 360002)
(37, u'Crystal Palace', 384, 2, 37, 37, 2, 17, 3, 0, 1, 2, 1, 3, -2, 0, 1, 1, 1, 2, 0, 0, 1, 1, 0, 1, 370002)
(38, u'Watford', 395, 2, 38, 38, 2, 18, 3, 0, 1, 2, 3, 6, -3, 0, 0, 2, 2, 5, 0, 1, 0, 1, 1, 1, 380002)
(39, u'AFC Bournemouth', 349, 2, 39, 39, 2, 19, 3, 0, 1, 2, 2, 5, -3, 0, 0, 1, 1, 3, 0, 1, 1, 2, 1, 1, 390002)
(40, u'Stoke City', 336, 2, 40, 40, 2, 20, 3, 0, 1, 2, 2, 6, -4, 0, 0, 1, 1, 4, 0, 1, 1, 2, 1, 1, 400002)
(41, u'Genoa', 3263, 3, 41, 41, 3, 1, 2, 2, 0, 0, 6, 2, 4, 1, 0, 0, 3, 1, 1, 0, 0, 1, 3, 6, 410002)
(42, u'Juventus', 111, 3, 42, 42, 3, 2, 2, 2, 0, 0, 3, 1, 2, 1, 0, 0, 2, 1, 1, 0, 0, 0, 1, 6, 420002)
(43, u'Sampdoria', 2734, 3, 43, 43, 3, 3, 2, 2, 0, 0, 3, 1, 2, 1, 0, 0, 2, 1, 1, 0, 0, 0, 1, 6, 430002)
(44, u'AS Roma', 104, 3, 44, 44, 3, 4, 2, 1, 1, 0, 6, 2, 4, 1, 0, 0, 4, 0, 0, 1, 0, 2, 2, 4, 440002)
(45, u'US Pescara', 3290, 3, 45, 45, 3, 5, 2, 1, 1, 0, 5, 2, 3, 0, 1, 0, 2, 2, 1, 0, 0, 0, 3, 4, 450002)
(46, u'Napoli', 114, 3, 46, 46, 3, 6, 2, 1, 1, 0, 6, 4, 2, 1, 0, 0, 4, 2, 0, 1, 0, 2, 2, 4, 460002)
(47, u'Torino', 239, 3, 47, 47, 3, 7, 2, 1, 0, 1, 7, 4, 3, 1, 0, 0, 5, 1, 0, 0, 1, 3, 2, 3, 470002)
(48, u'Chievo Verona', 238, 3, 48, 48, 3, 8, 2, 1, 0, 1, 2, 1, 1, 1, 0, 0, 2, 0, 0, 0, 1, 1, 0, 3, 480002)
(49, u'Lazio', 112, 3, 49, 49, 3, 9, 2, 1, 0, 1, 4, 4, 0, 0, 0, 1, 0, 1, 1, 0, 0, 3, 4, 3, 490002)
(50, u'Fiorentina', 109, 3, 50, 50, 3, 10, 2, 1, 0, 1, 2, 2, 0, 1, 0, 0, 1, 0, 0, 0, 1, 2, 1, 3, 500002)
(51, u'AC Milan', 103, 3, 51, 51, 3, 11, 2, 1, 0, 1, 5, 6, -1, 1, 0, 0, 3, 2, 0, 0, 1, 4, 2, 3, 510002)
(52, u'Udinese', 118, 3, 52, 52, 3, 12, 2, 1, 0, 1, 2, 4, -2, 1, 0, 0, 2, 0, 0, 0, 1, 4, 0, 3, 520002)
(53, u'Sassuolo', 3997, 3, 53, 53, 3, 13, 2, 1, 0, 1, 1, 3, -2, 0, 0, 1, 0, 3, 1, 0, 0, 0, 1, 3, 530002)
(54, u'Bologna', 107, 3, 54, 54, 3, 14, 2, 1, 0, 1, 2, 5, -3, 1, 0, 0, 1, 0, 0, 0, 1, 5, 1, 3, 540002)
(55, u'Palermo', 2923, 3, 55, 55, 3, 15, 2, 0, 1, 1, 1, 2, -1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 550002)
(56, u'Cagliari', 2925, 3, 56, 56, 3, 16, 2, 0, 1, 1, 3, 5, -2, 0, 1, 0, 2, 2, 0, 0, 1, 3, 1, 1, 560002)
(57, u'Internazionale', 110, 3, 57, 57, 3, 17, 2, 0, 1, 1, 1, 3, -2, 0, 1, 0, 1, 1, 0, 0, 1, 2, 0, 1, 570002)
(58, u'Atalanta', 105, 3, 58, 58, 3, 18, 2, 0, 0, 2, 4, 6, -2, 0, 0, 1, 3, 4, 0, 0, 1, 2, 1, 0, 580002)
(59, u'Crotone', 3173, 3, 59, 59, 3, 19, 2, 0, 0, 2, 1, 4, -3, 0, 0, 1, 1, 3, 0, 0, 1, 1, 0, 0, 590002)
(60, u'Empoli', 2574, 3, 60, 60, 3, 20, 2, 0, 0, 2, 0, 3, -3, 0, 0, 1, 0, 1, 0, 0, 1, 2, 0, 0, 600002)
(61, u'Bayern Munich', 132, 4, 61, 61, 4, 1, 1, 1, 0, 0, 6, 0, 6, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 3, 610002)
(62, u'FC Cologne', 122, 4, 62, 62, 4, 2, 1, 1, 0, 0, 2, 0, 2, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 620002)
(63, u'VfL Wolfsburg', 138, 4, 63, 63, 4, 2, 1, 1, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 630002)
(64, u'Borussia Dortmund', 124, 4, 64, 64, 4, 4, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 3, 640002)
(65, u'Hertha Berlin', 129, 4, 65, 65, 4, 4, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 3, 650002)
(66, u'Borussia Monchengladbach', 268, 4, 66, 66, 4, 4, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 3, 660002)
(67, u'Eintracht Frankfurt', 125, 4, 67, 67, 4, 7, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 670002)
(68, u'TSG Hoffenheim', 7911, 4, 68, 68, 4, 8, 1, 0, 1, 0, 2, 2, 0, 0, 1, 0, 2, 2, 0, 0, 0, 0, 0, 1, 680002)
(69, u'RB Leipzig', 11420, 4, 69, 69, 4, 8, 1, 0, 1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 1, 690002)
(70, u'Hamburg SV', 127, 4, 70, 70, 4, 10, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 700002)
(71, u'FC Ingolstadt 04', 6367, 4, 71, 71, 4, 10, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 710002)
(72, u'SC Freiburg', 126, 4, 72, 72, 4, 12, 1, 0, 0, 1, 1, 2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 720002)
(73, u'Bayer Leverkusen', 131, 4, 73, 73, 4, 12, 1, 0, 0, 1, 1, 2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 730002)
(74, u'Mainz', 2950, 4, 74, 74, 4, 12, 1, 0, 0, 1, 1, 2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 740002)
(75, u'Schalke 04', 133, 4, 75, 75, 4, 15, 1, 0, 0, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 750002)
(76, u'SV Darmstadt 98', 3812, 4, 76, 76, 4, 16, 1, 0, 0, 1, 0, 2, -2, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 760002)
(77, u'FC Augsburg', 3841, 4, 77, 77, 4, 16, 1, 0, 0, 1, 0, 2, -2, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 770002)
(78, u'Werder Bremen', 137, 4, 78, 78, 4, 18, 1, 0, 0, 1, 0, 6, -6, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 780002)

Esta salida no es mas que la combinacion de 2 tablas que sabemos que tienen relación y es esta que le hemos dado ” relacion_tablas = “select * from Equipos_Ligas A, Posiciones_por_Fechas B where A.id_equipo = B.id_equipo” “, para poder ver lo que hemos visto arriba, luego si queremos ver 1 sola liga tenemos esta salida:

 

aqui la cosa se complica pero lo ue no podemos hacer con sql yo lo hago con python
Salida combinada de 2 tablas con 1 sola liga 😀
(21, u'Manchester City', 382, 2, 21, 21, 2, 1, 3, 3, 0, 0, 9, 3, 6, 2, 0, 0, 5, 2, 1, 0, 0, 1, 4, 9, 210002)
(22, u'Chelsea', 363, 2, 22, 22, 2, 2, 3, 3, 0, 0, 7, 2, 5, 2, 0, 0, 5, 1, 1, 0, 0, 1, 2, 9, 220002)
(23, u'Manchester United', 360, 2, 23, 23, 2, 3, 3, 3, 0, 0, 6, 1, 5, 1, 0, 0, 2, 0, 2, 0, 0, 1, 4, 9, 230002)
(24, u'Everton', 368, 2, 24, 24, 2, 4, 3, 2, 1, 0, 4, 2, 2, 1, 1, 0, 2, 1, 1, 0, 0, 1, 2, 7, 240002)
(25, u'Hull City', 306, 2, 25, 25, 2, 5, 3, 2, 0, 1, 4, 2, 2, 1, 0, 1, 2, 2, 1, 0, 0, 0, 2, 6, 250002)
(26, u'Middlesbrough', 369, 2, 26, 26, 2, 6, 3, 1, 2, 0, 3, 2, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 2, 5, 260002)
(27, u'Tottenham Hotspur', 367, 2, 27, 27, 2, 7, 3, 1, 2, 0, 3, 2, 1, 1, 1, 0, 2, 1, 0, 1, 0, 1, 1, 5, 270002)
(28, u'Arsenal', 359, 2, 28, 28, 2, 8, 3, 1, 1, 1, 6, 5, 1, 0, 0, 1, 3, 4, 1, 1, 0, 1, 3, 4, 280002)
(29, u'Leicester City', 375, 2, 29, 29, 2, 9, 3, 1, 1, 1, 3, 3, 0, 1, 1, 0, 2, 1, 0, 0, 1, 2, 1, 4, 290002)
(30, u'West Bromwich Albion', 383, 2, 30, 30, 2, 10, 3, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 1, 4, 300002)
(31, u'Liverpool', 364, 2, 31, 31, 2, 11, 3, 1, 1, 1, 5, 6, -1, 0, 0, 0, 0, 0, 1, 1, 1, 6, 5, 4, 310002)
(32, u'West Ham United', 371, 2, 32, 32, 2, 12, 3, 1, 0, 2, 3, 5, -2, 1, 0, 0, 1, 0, 0, 0, 2, 5, 2, 3, 320002)
(33, u'Burnley', 379, 2, 33, 33, 2, 13, 3, 1, 0, 2, 2, 4, -2, 1, 0, 1, 2, 1, 0, 0, 1, 3, 0, 3, 330002)
(34, u'Swansea City', 318, 2, 34, 34, 2, 14, 3, 1, 0, 2, 2, 4, -2, 0, 0, 1, 0, 2, 1, 0, 1, 2, 2, 3, 340002)
(35, u'Southampton', 376, 2, 35, 35, 2, 15, 3, 0, 2, 1, 2, 4, -2, 0, 2, 0, 2, 2, 0, 0, 1, 2, 0, 2, 350002)
(36, u'Sunderland', 366, 2, 36, 36, 2, 16, 3, 0, 1, 2, 3, 5, -2, 0, 0, 1, 1, 2, 0, 1, 1, 3, 2, 1, 360002)
(37, u'Crystal Palace', 384, 2, 37, 37, 2, 17, 3, 0, 1, 2, 1, 3, -2, 0, 1, 1, 1, 2, 0, 0, 1, 1, 0, 1, 370002)
(38, u'Watford', 395, 2, 38, 38, 2, 18, 3, 0, 1, 2, 3, 6, -3, 0, 0, 2, 2, 5, 0, 1, 0, 1, 1, 1, 380002)
(39, u'AFC Bournemouth', 349, 2, 39, 39, 2, 19, 3, 0, 1, 2, 2, 5, -3, 0, 0, 1, 1, 3, 0, 1, 1, 2, 1, 1, 390002)
(40, u'Stoke City', 336, 2, 40, 40, 2, 20, 3, 0, 1, 2, 2, 6, -4, 0, 0, 1, 1, 4, 0, 1, 1, 2, 1, 1, 400002)

Esta salida es un poco mas complicada y se logra con el siguiente comando “relacion_tablas_con_liga = “select * from Equipos_Ligas AS C  JOIN Posiciones_por_Fechas  AS R ON C.id_equipo = R.id_equipo  AND R.id_liga = 2   ”  “ es necesario acotar que si quitamos la clausula WHERE obtenemos la salida anterior 😀

Hasta aquí esta entrada espero que se hayan divertido, ya que seguiré trabajando en una ultima entrada para entrar con ODOO y scraping mas otras cosas si Dios lo permite, por lo pronto que Dios siga bendiciendo sus vidas y nos de fuerzas par resistir al mal así el huirá de nosotros…

 

Scraping con Python la Liga BBVA de ESPN [Parte 2]

Hoy vamos a tener 1 solo código para las 4 ligas principales del mundo como lo son: Liga BBVA, La Bundesliga, La Premier y La serie A… mi meta es crear una Base de Datos interesante con lo mejor de estas 4 ligas, y el código de hoy nos acerca mas a nuestra meta.

Con el siguiente código vamos a ir dando forma a los campos que vamos a utilizar en una de las tablas de nuestra interesante Base de Datos:

 
import urllib2, re
from bs4 import BeautifulSoup
import re
from prettytable import PrettyTable

# url that we are scraping
urls = ["http://www.espnfc.us/english-premier-league/23/table" , "http://www.espnfc.us/spanish-primera-division/15/table" , "http://www.espnfc.us/german-bundesliga/10/table" , "http://www.espnfc.us/italian-serie-a/12/table"]
hh = 0
for url in urls:
  page = urllib2.urlopen(url)

  soup = BeautifulSoup(page, "lxml")


  table = soup.find('table')

  rows = table.find_all('tr')

  results = []

  for row in rows:
        table_headers = row.find_all('th')
        if table_headers:
            results.append([headers.get_text() for headers in table_headers])

        table_data = row.find_all('td')
        if table_data:
	    results.append([data.get_text() for data in table_data])


  tabla_formateada = []

  nueva_form = []
  
  equipo_nombre = []
  posicion_eq = []
  #Listas para totales
  PJ_totales = []
  PG_totales = []
  PE_totales = []
  PP_totales = []
  Goles_Favor_totales = []
  Goles_contra_totales = []
  Goles_Diferencia = []
  Puntos_tot = []
#Listas para casa
  PJ_totales = []
  PG_totales = []
  PE_totales = []
  PP_totales = []
  Goles_Favor_totales = []
  Goles_contra_totales = []
#Listas para visita
  PJ_totales = []
  PG_totales = []
  PE_totales = []
  PP_totales = []
  Goles_Favor_totales = []
  Goles_contra_totales = []

  i = 0
  for datos  in results:
  
    if i >= 2:
        while ( u'\xa0'  or u'\n' or u'' )  in datos:
            if (u'')  in datos :
                datos.remove(u'')
            elif  u'\n'  in datos:
	       datos.remove(u'\n')
	    elif  u'\xa0'  in datos:
	       datos.remove(u'\xa0')
	       
        
        
        
        tabla_formateada.append(datos)

    i += 1        


  
  for h in tabla_formateada:
   
      posicion = h[0]
      posicion_eq.append(posicion)
        
    
      equipo_nom = h[1]
      equipo_nom = equipo_nom.strip()
      equipo_nombre.append(equipo_nom)
        
      #Listas para totales
      PJ_totales = []
      PG_totales = []
      PE_totales = []
      PP_totales = []
      Goles_Favor_totales = []
      Goles_contra_totales = []
        
      Goles_Dif = h[-2]
      Goles_Diferencia.append(Goles_Dif)
        
      Puntos = h[-1]
      Puntos_tot.append(Puntos)

        
      #Listas para casa
      PJ_totales = []
      PG_totales = []
      PE_totales = []
      PP_totales = []
      Goles_Favor_totales = []
      Goles_contra_totales = []
      #Listas para visita
      PJ_totales = []
      PG_totales = []
      PE_totales = []
      PP_totales = []
      Goles_Favor_totales = []
      Goles_contra_totales = []
      
  numero_items = len(posicion_eq)
   


  table = PrettyTable(["Posicion", "Equipo", "Puntos", "Dif_Gol"])
  i = 0
  
  for i in range(0,numero_items):
    
    table.add_row([posicion_eq[i], equipo_nombre[i], Goles_Diferencia[i] , Puntos_tot[i]])
    
    i += 1
  if hh == 0:
    print " "
    print " "

    print "                     Liga Premier"
  elif hh == 1:
    print "                     Liga BBVA"

  elif hh == 2:
    print "                     Bundesliga"

    
  elif hh == 3:
    print "                     Seie A"
    
  print table
  hh += 1
  print " "
  print " "

Hay listas que se pueden llenar pero no las he llenado por que lo pienso hacer cuando comencemos con nuestra Base de Datos, la salida del programa es la siguiente:

 
 
 
                     Liga Premier
+----------+----------------------+--------+---------+
| Posicion |        Equipo        | Puntos | Dif_Gol |
+----------+----------------------+--------+---------+
|    1     |   Manchester City    |   6    |    9    |
|    2     |       Chelsea        |   5    |    9    |
|    3     |  Manchester United   |   5    |    9    |
|    4     |       Everton        |   2    |    7    |
|    5     |      Hull City       |   2    |    6    |
|    6     |    Middlesbrough     |   1    |    5    |
|    7     |  Tottenham Hotspur   |   1    |    5    |
|    8     |       Arsenal        |   1    |    4    |
|    9     |    Leicester City    |   0    |    4    |
|    10    | West Bromwich Albion |   0    |    4    |
|    11    |      Liverpool       |   -1   |    4    |
|    12    |   West Ham United    |   -2   |    3    |
|    13    |       Burnley        |   -2   |    3    |
|    14    |     Swansea City     |   -2   |    3    |
|    15    |     Southampton      |   -2   |    2    |
|    16    |      Sunderland      |   -2   |    1    |
|    17    |    Crystal Palace    |   -2   |    1    |
|    18    |       Watford        |   -3   |    1    |
|    19    |   AFC Bournemouth    |   -3   |    1    |
|    20    |      Stoke City      |   -4   |    1    |
+----------+----------------------+--------+---------+
 
 
                     Liga BBVA
+----------+---------------------+--------+---------+
| Posicion |        Equipo       | Puntos | Dif_Gol |
+----------+---------------------+--------+---------+
|    1     |      Las Palmas     |   6    |    6    |
|    2     |      Barcelona      |   5    |    6    |
|    3     |     Real Madrid     |   4    |    6    |
|    4     |      Sevilla FC     |   2    |    4    |
|    5     |    Sporting Gijón   |   1    |    4    |
|    6     | Deportivo La Coruña |   1    |    4    |
|    7     |       Leganes       |   1    |    4    |
|    8     |        Eibar        |   0    |    3    |
|    9     |    Real Sociedad    |   -1   |    3    |
|    10    |        Málaga       |   0    |    2    |
|    11    |   Atletico Madrid   |   0    |    2    |
|    12    |      Villarreal     |   0    |    2    |
|    13    |        Alavés       |   0    |    2    |
|    14    |       Espanyol      |   -2   |    1    |
|    15    |       Osasuna       |   -2   |    1    |
|    16    |       Granada       |   -4   |    1    |
|    17    |      Real Betis     |   -4   |    1    |
|    18    |      Celta Vigo     |   -2   |    0    |
|    19    |   Athletic Bilbao   |   -2   |    0    |
|    20    |       Valencia      |   -3   |    0    |
+----------+---------------------+--------+---------+
 
 
                     Bundesliga
+----------+--------------------------+--------+---------+
| Posicion |          Equipo          | Puntos | Dif_Gol |
+----------+--------------------------+--------+---------+
|    1     |      Bayern Munich       |   6    |    3    |
|    2     |        FC Cologne        |   2    |    3    |
|    2     |      VfL Wolfsburg       |   2    |    3    |
|    4     |    Borussia Dortmund     |   1    |    3    |
|    4     |      Hertha Berlin       |   1    |    3    |
|    4     | Borussia Monchengladbach |   1    |    3    |
|    7     |   Eintracht Frankfurt    |   1    |    3    |
|    8     |      TSG Hoffenheim      |   0    |    1    |
|    8     |        RB Leipzig        |   0    |    1    |
|    10    |        Hamburg SV        |   0    |    1    |
|    10    |     FC Ingolstadt 04     |   0    |    1    |
|    12    |       SC Freiburg        |   -1   |    0    |
|    12    |     Bayer Leverkusen     |   -1   |    0    |
|    12    |          Mainz           |   -1   |    0    |
|    15    |        Schalke 04        |   -1   |    0    |
|    16    |     SV Darmstadt 98      |   -2   |    0    |
|    16    |       FC Augsburg        |   -2   |    0    |
|    18    |      Werder Bremen       |   -6   |    0    |
+----------+--------------------------+--------+---------+
 
 
                     Seie A
+----------+----------------+--------+---------+
| Posicion |     Equipo     | Puntos | Dif_Gol |
+----------+----------------+--------+---------+
|    1     |     Genoa      |   4    |    6    |
|    2     |    Juventus    |   2    |    6    |
|    3     |   Sampdoria    |   2    |    6    |
|    4     |    AS Roma     |   4    |    4    |
|    5     |   US Pescara   |   3    |    4    |
|    6     |     Napoli     |   2    |    4    |
|    7     |     Torino     |   3    |    3    |
|    8     | Chievo Verona  |   1    |    3    |
|    9     |     Lazio      |   0    |    3    |
|    10    |   Fiorentina   |   0    |    3    |
|    11    |    AC Milan    |   -1   |    3    |
|    12    |    Udinese     |   -2   |    3    |
|    13    |    Sassuolo    |   -2   |    3    |
|    14    |    Bologna     |   -3   |    3    |
|    15    |    Palermo     |   -1   |    1    |
|    16    |    Cagliari    |   -2   |    1    |
|    17    | Internazionale |   -2   |    1    |
|    18    |    Atalanta    |   -2   |    0    |
|    19    |    Crotone     |   -3   |    0    |
|    20    |     Empoli     |   -3   |    0    |
+----------+----------------+--------+---------+
 

Voy a hacer realemente corta estas entradas por que esoty un poco cansado creando el codigo, voy a recalcar algunas cosas del mismo:

Por ejemplo la linea urls = [“http://www.espnfc.us/english-premier-league/23/table” , “http://www.espnfc.us/spanish-primera-division/15/table” , “http://www.espnfc.us/german-bundesliga/10/table” , “http://www.espnfc.us/italian-serie-a/12/table”%5D que es importante si queremos agregar otras ligas, y la linea  equipo_nom = equipo_nom.strip() que es importante para formatear una cadena, Hasta aquí lo vamos a dejar por esta entrada en un rato subo  la otra…

Dios les Bendiga

 

Scraping con Python la Liga BBVA de ESPN [Parte 1]

Les cuento que ya termine de dar los últimos retoques a nuestro primer scraping en python sobre la Pagina de ESPN, les quiero aclarar que hay muchas formas de hacer las cosas y yo quiero hacerlas a mi manera tal vez no sea la mejor pero es la que creo mas sencilla de explicar….

Como introdución a esta entrada les diré como pienso hacer las entradas de Scraping en este Blog, primero voy a hacer la recolección de datos vamos a ver como salen los datos, vamos a hablar un poco del código que usamos algunas veces vamos a hablar de mejoras del código, luego vamos a generar la salida lo mas parecida a la pagina(todo esto en la 1era entrada de cada Scrap), En segundo lugar vamos a diseñar y generar la base de datos en primera instancia con SQLITE pero luego vamos con Postgres(aun no), Tercero vamos a hacer estudios comparativos de la Base de Datos vamos a generar Gráficas y Búsquedas, ya con lo que hayamos hecho vamos a pensar en los siguientes pasos….

A cuales paginas les voy a hacer Scraping?????’ Yo creo que para empezar a la tabla de posiciones de Futbol Soccer(pensé en Béisbol o NFL pero por lo pronto Soccer), luego con la tabla de jugadores de cada equipo, ya con esto podemos generar otras tablas por filtración de las 2 primeras, Gráficos que no salen en otros sitios aquí los haremos ;D

Al grano vamos a hacerle SCRAPING a esta pagina: ttp://www.espn.com.ve/futbol/posicionesenvivo/_/liga/esp.1/primera-division-de-espana

Para generar Gráficos interesantes les vamos a hacer Scraping todos los martes a esta Pagina y vamos a ir viendo unas gráficas interesantes…. Así se ve la tabla:

tabla

Esta es la tabla de donde vamos a sacar la información, y este nuestro primer código:


import urllib2
from bs4 import BeautifulSoup
import re

# url that we are scraping
url = "http://www.espn.com.ve/futbol/posicionesenvivo/_/liga/esp.1/primera-division-de-espana"

page = urllib2.urlopen(url)

soup = BeautifulSoup(page, "lxml")


table = soup.find('table')

rows = table.find_all('tr')
results = []
for row in rows:
        table_headers = row.find_all('th')
        if table_headers:
            results.append([headers.get_text() for headers in table_headers])

        table_data = row.find_all('td')
        if table_data:
	    results.append([data.get_text() for data in table_data])


print results

El código es un poco enredado, primero nos conectamos con urllib2 con BeautifulSoup hacemos una sopa  “soup = BeautifulSoup(page, “lxml”)” luego buscamos la etiqueta table “table = soup.find(‘table’)” luego buscamos todas las filas “rows=table.find_all(‘tr’)” y creamos la lista en blanco “results = []” creamos un  bucle para recorrer las filas guardadas en rows, ya en  el bucle buscamos las Cabeceras de las tablas o “th” y si existen les extraemos el texto, hacemos lo mismo con la data de las tablas o “td” y la extraemos con “get_text” al final imprimimos el resultado que es este:


[[u'30 de agosto de 2016Primera Divisi\xf3n de Espa\xf1a 2016/2017 Tabla de posiciones'], [u'\xa0', u'\xa0', u'\xa0', u'General', u'', u'Local', u'', u'Visitante'], [u'Pos.', u'', u'EQUIPO', u'Pts.', u'', u'PJ', u'G', u'E', u'P', u'GF', u'GC', u'Dif.', u'', u'G', u'E', u'P', u'GF', u'GC', u'', u'G', u'E', u'P', u'GF', u'GC'], [u'1', u'\n', u'Las Palmas', u'6', u'', u'2', u'2', u'0', u'0', u'9', u'3', u'6', u'', u'1', u'0', u'0', u'5', u'1', u'', u'1', u'0', u'0', u'4', u'2'], [u'2', u'\n', u'Barcelona', u'6', u'', u'2', u'2', u'0', u'0', u'7', u'2', u'5', u'', u'1', u'0', u'0', u'6', u'2', u'', u'1', u'0', u'0', u'1', u'0'], [u'3', u'\n', u'Real Madrid', u'6', u'', u'2', u'2', u'0', u'0', u'5', u'1', u'4', u'', u'1', u'0', u'0', u'2', u'1', u'', u'1', u'0', u'0', u'3', u'0'], [u'4', u'\n', u'Sevilla FC', u'4', u'', u'2', u'1', u'1', u'0', u'6', u'4', u'2', u'', u'1', u'0', u'0', u'6', u'4', u'', u'0', u'1', u'0', u'0', u'0'], [u'5', u'\n', u'Sporting Gij\xf3n', u'4', u'', u'2', u'1', u'1', u'0', u'2', u'1', u'1', u'', u'1', u'0', u'0', u'2', u'1', u'', u'0', u'1', u'0', u'0', u'0'], [u'6', u'\n', u'Deportivo La Coru\xf1a', u'4', u'', u'2', u'1', u'1', u'0', u'2', u'1', u'1', u'', u'1', u'0', u'0', u'2', u'1', u'', u'0', u'1', u'0', u'0', u'0'], [u'7', u'\n', u'Leganes', u'4', u'', u'2', u'1', u'1', u'0', u'1', u'0', u'1', u'', u'0', u'1', u'0', u'0', u'0', u'', u'1', u'0', u'0', u'1', u'0'], [u'8', u'\n', u'Eibar', u'3', u'', u'2', u'1', u'0', u'1', u'2', u'2', u'0', u'', u'1', u'0', u'0', u'1', u'0', u'', u'0', u'0', u'1', u'1', u'2'], [u'9', u'\n', u'Real Sociedad', u'3', u'', u'2', u'1', u'0', u'1', u'2', u'3', u'-1', u'', u'0', u'0', u'1', u'0', u'3', u'', u'1', u'0', u'0', u'2', u'0'], [u'10', u'\n', u'M\xe1laga', u'2', u'', u'2', u'0', u'2', u'0', u'3', u'3', u'0', u'', u'0', u'1', u'0', u'1', u'1', u'', u'0', u'1', u'0', u'2', u'2'], [u'11', u'\n', u'Atletico Madrid', u'2', u'', u'2', u'0', u'2', u'0', u'1', u'1', u'0', u'', u'0', u'1', u'0', u'1', u'1', u'', u'0', u'1', u'0', u'0', u'0'], [u'12', u'\n', u'Villarreal', u'2', u'', u'2', u'0', u'2', u'0', u'1', u'1', u'0', u'', u'0', u'1', u'0', u'0', u'0', u'', u'0', u'1', u'0', u'1', u'1'], [u'13', u'\n', u'Alav\xe9s', u'2', u'', u'2', u'0', u'2', u'0', u'1', u'1', u'0', u'', u'0', u'1', u'0', u'0', u'0', u'', u'0', u'1', u'0', u'1', u'1'], [u'14', u'\n', u'Espanyol', u'1', u'', u'2', u'0', u'1', u'1', u'6', u'8', u'-2', u'', u'0', u'1', u'0', u'2', u'2', u'', u'0', u'0', u'1', u'4', u'6'], [u'15', u'\n', u'Osasuna', u'1', u'', u'2', u'0', u'1', u'1', u'1', u'3', u'-2', u'', u'0', u'0', u'1', u'0', u'2', u'', u'0', u'1', u'0', u'1', u'1'], [u'16', u'\n', u'Granada', u'1', u'', u'2', u'0', u'1', u'1', u'2', u'6', u'-4', u'', u'0', u'1', u'0', u'1', u'1', u'', u'0', u'0', u'1', u'1', u'5'], [u'17', u'\n', u'Real Betis', u'1', u'', u'2', u'0', u'1', u'1', u'2', u'6', u'-4', u'', u'0', u'1', u'0', u'0', u'0', u'', u'0', u'0', u'1', u'2', u'6'], [u'18', u'\n', u'Celta Vigo', u'0', u'', u'2', u'0', u'0', u'2', u'1', u'3', u'-2', u'', u'0', u'0', u'1', u'0', u'1', u'', u'0', u'0', u'1', u'1', u'2'], [u'19', u'\n', u'Athletic Bilbao', u'0', u'', u'2', u'0', u'0', u'2', u'1', u'3', u'-2', u'', u'0', u'0', u'1', u'0', u'1', u'', u'0', u'0', u'1', u'1', u'2'], [u'20', u'\n', u'Valencia', u'0', u'', u'2', u'0', u'0', u'2', u'2', u'5', u'-3', u'', u'0', u'0', u'1', u'2', u'4', u'', u'0', u'0', u'1', u'0', u'1']]

Ahora si somos un poco curiosos( tenemos que!!! ), nos damos cuenta que hay campos que no queremos en nuestra nueva lista de listas y hay unos caracteres extraños como la “u” y la “u”” esto es especialmente importante la “u” creo que es unicode y las ” u” ” con las comillas sin nada son campos que no contienen nada, por lo que no las necesitamos, ahora vamos a eliminar lo que no necesitamos con este código 😀 :

from prettytable import PrettyTable

tabla_pos = [[u'29 de agosto de 2016Primera Divisi\xf3n de Espa\xf1a 2016/2017 Tabla de posiciones'], [u'\xa0', u'\xa0', u'\xa0', u'General', u'', u'Local', u'', u'Visitante'], [u'Pos.', u'', u'EQUIPO', u'Pts.', u'', u'PJ', u'G', u'E', u'P', u'GF', u'GC', u'Dif.', u'', u'G', u'E', u'P', u'GF', u'GC', u'', u'G', u'E', u'P', u'GF', u'GC'], [u'1', u'\n', u'Las Palmas', u'6', u'', u'2', u'2', u'0', u'0', u'9', u'3', u'6', u'', u'1', u'0', u'0', u'5', u'1', u'', u'1', u'0', u'0', u'4', u'2'], [u'2', u'\n', u'Barcelona', u'6', u'', u'2', u'2', u'0', u'0', u'7', u'2', u'5', u'', u'1', u'0', u'0', u'6', u'2', u'', u'1', u'0', u'0', u'1', u'0'], [u'3', u'\n', u'Real Madrid', u'6', u'', u'2', u'2', u'0', u'0', u'5', u'1', u'4', u'', u'1', u'0', u'0', u'2', u'1', u'', u'1', u'0', u'0', u'3', u'0'], [u'4', u'\n', u'Sevilla FC', u'4', u'', u'2', u'1', u'1', u'0', u'6', u'4', u'2', u'', u'1', u'0', u'0', u'6', u'4', u'', u'0', u'1', u'0', u'0', u'0'], [u'5', u'\n', u'Sporting Gij\xf3n', u'4', u'', u'2', u'1', u'1', u'0', u'2', u'1', u'1', u'', u'1', u'0', u'0', u'2', u'1', u'', u'0', u'1', u'0', u'0', u'0'], [u'6', u'\n', u'Deportivo La Coru\xf1a', u'4', u'', u'2', u'1', u'1', u'0', u'2', u'1', u'1', u'', u'1', u'0', u'0', u'2', u'1', u'', u'0', u'1', u'0', u'0', u'0'], [u'7', u'\n', u'Leganes', u'4', u'', u'2', u'1', u'1', u'0', u'1', u'0', u'1', u'', u'0', u'1', u'0', u'0', u'0', u'', u'1', u'0', u'0', u'1', u'0'], [u'8', u'\n', u'Eibar', u'3', u'', u'2', u'1', u'0', u'1', u'2', u'2', u'0', u'', u'1', u'0', u'0', u'1', u'0', u'', u'0', u'0', u'1', u'1', u'2'], [u'9', u'\n', u'Real Sociedad', u'3', u'', u'2', u'1', u'0', u'1', u'2', u'3', u'-1', u'', u'0', u'0', u'1', u'0', u'3', u'', u'1', u'0', u'0', u'2', u'0'], [u'10', u'\n', u'M\xe1laga', u'2', u'', u'2', u'0', u'2', u'0', u'3', u'3', u'0', u'', u'0', u'1', u'0', u'1', u'1', u'', u'0', u'1', u'0', u'2', u'2'], [u'11', u'\n', u'Atletico Madrid', u'2', u'', u'2', u'0', u'2', u'0', u'1', u'1', u'0', u'', u'0', u'1', u'0', u'1', u'1', u'', u'0', u'1', u'0', u'0', u'0'], [u'12', u'\n', u'Villarreal', u'2', u'', u'2', u'0', u'2', u'0', u'1', u'1', u'0', u'', u'0', u'1', u'0', u'0', u'0', u'', u'0', u'1', u'0', u'1', u'1'], [u'13', u'\n', u'Alav\xe9s', u'2', u'', u'2', u'0', u'2', u'0', u'1', u'1', u'0', u'', u'0', u'1', u'0', u'0', u'0', u'', u'0', u'1', u'0', u'1', u'1'], [u'14', u'\n', u'Espanyol', u'1', u'', u'2', u'0', u'1', u'1', u'6', u'8', u'-2', u'', u'0', u'1', u'0', u'2', u'2', u'', u'0', u'0', u'1', u'4', u'6'], [u'15', u'\n', u'Osasuna', u'1', u'', u'2', u'0', u'1', u'1', u'1', u'3', u'-2', u'', u'0', u'0', u'1', u'0', u'2', u'', u'0', u'1', u'0', u'1', u'1'], [u'16', u'\n', u'Granada', u'1', u'', u'2', u'0', u'1', u'1', u'2', u'6', u'-4', u'', u'0', u'1', u'0', u'1', u'1', u'', u'0', u'0', u'1', u'1', u'5'], [u'17', u'\n', u'Real Betis', u'1', u'', u'2', u'0', u'1', u'1', u'2', u'6', u'-4', u'', u'0', u'1', u'0', u'0', u'0', u'', u'0', u'0', u'1', u'2', u'6'], [u'18', u'\n', u'Celta Vigo', u'0', u'', u'2', u'0', u'0', u'2', u'1', u'3', u'-2', u'', u'0', u'0', u'1', u'0', u'1', u'', u'0', u'0', u'1', u'1', u'2'], [u'19', u'\n', u'Athletic Bilbao', u'0', u'', u'2', u'0', u'0', u'2', u'1', u'3', u'-2', u'', u'0', u'0', u'1', u'0', u'1', u'', u'0', u'0', u'1', u'1', u'2'], [u'20', u'\n', u'Valencia', u'0', u'', u'2', u'0', u'0', u'2', u'2', u'5', u'-3', u'', u'0', u'0', u'1', u'2', u'4', u'', u'0', u'0', u'1', u'0', u'1']]
 
i = 0

tabla_formateada = []

nueva_form = []

for datos  in tabla_pos:
  
    if i >= 3:
        while (u'' or u'\n')  in datos:
            if (u'')  in datos :
                datos.remove(u'')
            elif  u'\n'  in datos:
	       datos.remove(u'\n')
        
        tabla_formateada.append(datos)
        
        nueva_form = tabla_formateada

    i += 1        

print nueva_form

Si nos fijamos en el código no estaos haciendo scraping aun, simplemente traslade la salida del programa anterior a texto plano para visualizarlo rápido, y como mi Internet es limitado no quiero estar bajando 200 veces lo mismo, esta salida que teníamos ahora la vamos a filtrar, lo primero que hacemos es inicial izar la variable i =0, creamos 2 listas para trabajar en ellas, y creamos un bucle FOR con 3 propósitos, el primero para eliminar las 3 listas iniciales ya que contienen información irrelevante lo hacemos con “if i >=3:”,  el segundo para eliminar los campos en blanco o con caracteres medio raros como “u’\n'” , y el tercer propósito crear una nueva lista formateada con los datos que si queremos :D, esta es la salida:

[[u'1', u'Las Palmas', u'6', u'2', u'2', u'0', u'0', u'9', u'3', u'6', u'1', u'0', u'0', u'5', u'1', u'1', u'0', u'0', u'4', u'2'], [u'2', u'Barcelona', u'6', u'2', u'2', u'0', u'0', u'7', u'2', u'5', u'1', u'0', u'0', u'6', u'2', u'1', u'0', u'0', u'1', u'0'], [u'3', u'Real Madrid', u'6', u'2', u'2', u'0', u'0', u'5', u'1', u'4', u'1', u'0', u'0', u'2', u'1', u'1', u'0', u'0', u'3', u'0'], [u'4', u'Sevilla FC', u'4', u'2', u'1', u'1', u'0', u'6', u'4', u'2', u'1', u'0', u'0', u'6', u'4', u'0', u'1', u'0', u'0', u'0'], [u'5', u'Sporting Gij\xf3n', u'4', u'2', u'1', u'1', u'0', u'2', u'1', u'1', u'1', u'0', u'0', u'2', u'1', u'0', u'1', u'0', u'0', u'0'], [u'6', u'Deportivo La Coru\xf1a', u'4', u'2', u'1', u'1', u'0', u'2', u'1', u'1', u'1', u'0', u'0', u'2', u'1', u'0', u'1', u'0', u'0', u'0'], [u'7', u'Leganes', u'4', u'2', u'1', u'1', u'0', u'1', u'0', u'1', u'0', u'1', u'0', u'0', u'0', u'1', u'0', u'0', u'1', u'0'], [u'8', u'Eibar', u'3', u'2', u'1', u'0', u'1', u'2', u'2', u'0', u'1', u'0', u'0', u'1', u'0', u'0', u'0', u'1', u'1', u'2'], [u'9', u'Real Sociedad', u'3', u'2', u'1', u'0', u'1', u'2', u'3', u'-1', u'0', u'0', u'1', u'0', u'3', u'1', u'0', u'0', u'2', u'0'], [u'10', u'M\xe1laga', u'2', u'2', u'0', u'2', u'0', u'3', u'3', u'0', u'0', u'1', u'0', u'1', u'1', u'0', u'1', u'0', u'2', u'2'], [u'11', u'Atletico Madrid', u'2', u'2', u'0', u'2', u'0', u'1', u'1', u'0', u'0', u'1', u'0', u'1', u'1', u'0', u'1', u'0', u'0', u'0'], [u'12', u'Villarreal', u'2', u'2', u'0', u'2', u'0', u'1', u'1', u'0', u'0', u'1', u'0', u'0', u'0', u'0', u'1', u'0', u'1', u'1'], [u'13', u'Alav\xe9s', u'2', u'2', u'0', u'2', u'0', u'1', u'1', u'0', u'0', u'1', u'0', u'0', u'0', u'0', u'1', u'0', u'1', u'1'], [u'14', u'Espanyol', u'1', u'2', u'0', u'1', u'1', u'6', u'8', u'-2', u'0', u'1', u'0', u'2', u'2', u'0', u'0', u'1', u'4', u'6'], [u'15', u'Osasuna', u'1', u'2', u'0', u'1', u'1', u'1', u'3', u'-2', u'0', u'0', u'1', u'0', u'2', u'0', u'1', u'0', u'1', u'1'], [u'16', u'Granada', u'1', u'2', u'0', u'1', u'1', u'2', u'6', u'-4', u'0', u'1', u'0', u'1', u'1', u'0', u'0', u'1', u'1', u'5'], [u'17', u'Real Betis', u'1', u'2', u'0', u'1', u'1', u'2', u'6', u'-4', u'0', u'1', u'0', u'0', u'0', u'0', u'0', u'1', u'2', u'6'], [u'18', u'Celta Vigo', u'0', u'2', u'0', u'0', u'2', u'1', u'3', u'-2', u'0', u'0', u'1', u'0', u'1', u'0', u'0', u'1', u'1', u'2'], [u'19', u'Athletic Bilbao', u'0', u'2', u'0', u'0', u'2', u'1', u'3', u'-2', u'0', u'0', u'1', u'0', u'1', u'0', u'0', u'1', u'1', u'2'], [u'20', u'Valencia', u'0', u'2', u'0', u'0', u'2', u'2', u'5', u'-3', u'0', u'0', u'1', u'2', u'4', u'0', u'0', u'1', u'0', u'1']]

Ahora para terminar esta entrada, en la siguiente vamos a retomar cosas interesantes de este mismo proyecto, vamos a mostrar los datos en una tabla, pero no todos los datos solo 4, este es el código

numero_items = len(nueva_form[0])
print numero_items



table = PrettyTable(["Posicion", "Equipo", "Puntos", "Dif_Gol"])
i = 0
for i in range(0,numero_items):
    if i >= 0:
        table.add_row([nueva_form[i][0], nueva_form[i][1], nueva_form[i][2] , nueva_form[i][9]])

    i += 0
    
print table

Recuerda enlazar este código a el anterior, La salida de este Trozo de Código es esta:

20
+----------+---------------------+--------+---------+
| Posicion |        Equipo       | Puntos | Dif_Gol |
+----------+---------------------+--------+---------+
|    1     |      Las Palmas     |   6    |    6    |
|    2     |      Barcelona      |   6    |    5    |
|    3     |     Real Madrid     |   6    |    4    |
|    4     |      Sevilla FC     |   4    |    2    |
|    5     |    Sporting Gijón   |   4    |    1    |
|    6     | Deportivo La Coruña |   4    |    1    |
|    7     |       Leganes       |   4    |    1    |
|    8     |        Eibar        |   3    |    0    |
|    9     |    Real Sociedad    |   3    |    -1   |
|    10    |        Málaga       |   2    |    0    |
|    11    |   Atletico Madrid   |   2    |    0    |
|    12    |      Villarreal     |   2    |    0    |
|    13    |        Alavés       |   2    |    0    |
|    14    |       Espanyol      |   1    |    -2   |
|    15    |       Osasuna       |   1    |    -2   |
|    16    |       Granada       |   1    |    -4   |
|    17    |      Real Betis     |   1    |    -4   |
|    18    |      Celta Vigo     |   0    |    -2   |
|    19    |   Athletic Bilbao   |   0    |    -2   |
|    20    |       Valencia      |   0    |    -3   |
+----------+---------------------+--------+---------+


El código completo y funcionando del programa que hemos hecho es este:

import urllib2
from bs4 import BeautifulSoup
import re
from prettytable import PrettyTable

# url that we are scraping
url = "http://www.espn.com.ve/futbol/posicionesenvivo/_/liga/esp.1/primera-division-de-espana"

page = urllib2.urlopen(url)

soup = BeautifulSoup(page, "lxml")


table = soup.find('table')

rows = table.find_all('tr')
results = []

for row in rows:
        table_headers = row.find_all('th')
        if table_headers:
            results.append([headers.get_text() for headers in table_headers])

        table_data = row.find_all('td')
        if table_data:
	    results.append([data.get_text() for data in table_data])






tabla_pos = results

i = 0

tabla_formateada = []

nueva_form = []

for datos  in tabla_pos:
  
    if i >= 3:
        while (u'' or u'\n')  in datos:
            if (u'')  in datos :
                datos.remove(u'')
            elif  u'\n'  in datos:
	       datos.remove(u'\n')
        
        tabla_formateada.append(datos)
        
        nueva_form = tabla_formateada

    i += 1        



numero_items = len(nueva_form[0])



table = PrettyTable(["Posicion", "Equipo", "Puntos", "Dif_Gol"])
i = 0
for i in range(0,numero_items):
    if i >= 0:
        table.add_row([nueva_form[i][0], nueva_form[i][1], nueva_form[i][2] , nueva_form[i][9]])

    i += 0
    
print table

Y la salida es esta:

+----------+---------------------+--------+---------+
| Posicion |        Equipo       | Puntos | Dif_Gol |
+----------+---------------------+--------+---------+
|    1     |      Las Palmas     |   6    |    6    |
|    2     |      Barcelona      |   6    |    5    |
|    3     |     Real Madrid     |   6    |    4    |
|    4     |      Sevilla FC     |   4    |    2    |
|    5     |    Sporting Gijón   |   4    |    1    |
|    6     | Deportivo La Coruña |   4    |    1    |
|    7     |       Leganes       |   4    |    1    |
|    8     |        Eibar        |   3    |    0    |
|    9     |    Real Sociedad    |   3    |    -1   |
|    10    |        Málaga       |   2    |    0    |
|    11    |   Atletico Madrid   |   2    |    0    |
|    12    |      Villarreal     |   2    |    0    |
|    13    |        Alavés       |   2    |    0    |
|    14    |       Espanyol      |   1    |    -2   |
|    15    |       Osasuna       |   1    |    -2   |
|    16    |       Granada       |   1    |    -4   |
|    17    |      Real Betis     |   1    |    -4   |
|    18    |      Celta Vigo     |   0    |    -2   |
|    19    |   Athletic Bilbao   |   0    |    -2   |
|    20    |       Valencia      |   0    |    -3   |
+----------+---------------------+--------+---------+


Gracias hasta la próxima que Dios les Bendiga

 

Scraping con Python la Liga BBVA de ESPN [Parte 0]

Bueno anoche me desperté como a las 3am y no podía dormir, es raro por que normalmente duermo como un roble, como no podía dormir le estaba pidiendo a Dios dirección en mi vida, como todos sabemos la situación de Venezuela no esta muy bien y el trabajo menos :S, y comencé a pedir por un proyecto para aprender SQL ansi con Python pero no solo aprender quiero ser un experto en esto y en Django, asi que comencé a pensar en las cosas que a la mayoría de las personas les gusta como por ejemplo el Futbol, si el Béisbol también pero a todos les gusta el Futbol pero el béisbol no :D, y comencé a diseñar tablas  de equipos, tablas de jugadores, a hacer búsquedas por los jugadores que no son delanteros que mas patean entre los 3 palos de estos los mejores pagados, si están sobre-valuados o si no, cuantas faltas hacen, tarjetas y mucho mas :S

Y comencé a crear una serie de Sql en mi mente de todo lo que iba a hacer en SQL pero me dije vaya todo muy bueno, pero si le agregamos mucho Javascript y lo hacemos todo en Django 😀 comencé a pensar en algo que involucrara todo esto y gustara, y pensé en un Fantasy de Futbol(si se que ya existe :D) pero con esto de Pokemon Go dije al fantasy le falta mucho mas, y dije no seré piedra de tropiezo para nadie(creo que no), asi que ahora me encuentro pensando en Scraping de las empresas mas grandes de información deportiva en este caso ESPN, si se que tienen su propia API pero yo no tengo para pagar así que les voy a hacer Scraping 😀

Y dije ahora donde debo comenzar, y entendí que por donde debía comenzar es por la tabla de posiciones, así voy haciendo scraping y meto un poco de SQL, ojo voy a seguir con las otras series de APIS y manejo de los datos, por lo minimo 1 entrada semanal de cada una de las ultimas series 😀 hasta que terminen claro….

Aquí voy a dejar el indice de esta serie :D:

Indice Scraping con Python la Liga BBVA de ESPN

Scraping con Python la Liga BBVA de ESPN [Parte 0]

Scraping con Python la Liga BBVA de ESPN [Parte 1]

Scraping con Python la Liga BBVA de ESPN [Parte 1.1]

Scraping con Python la Liga BBVA de ESPN [Parte 2]

Pronto la primera entrada de esta serie 😀

 

De Json a Histogramas con Matplotlib[Parte 1]

Al pensar en crear gráficas con los datos de la API de Twitter, estaba meditando en que serie de este Blog colocar esta tan interesante entrada y me dije por que no crear una serie nueva para que las personas que no estén interesadas en la API de Twitter puedan disfrutar del código que aquí voy a exponer:

 
### Autor Cesar Chirinos
### Fecha 22 Agosto 2016
### publicado en https://stickybitshell.wordpress.com/2016/08/22/de-json-a-histogramas-con-matplotlibparte-1-2/


### http://pybonacci.org/tag/tutorial-matplotlib-pyplot/

### http://python-para-impacientes.blogspot.com/2014/08/graficos-en-ipython.html
from collections import Counter

from prettytable import PrettyTable

import matplotlib.pyplot as plt

import numpy as np 


hashtags = [u'Deportes', u'Rio2016', u'YoRio', u'YoRio', u'Soyfandelupita', u'Paralimpicos', u'YoRio', u'fb', u'olimpiadas', u'yorio', u'vacaciones', u'tirolesas', u'YoRio', u'Tokio2020', u'YoRio', u'YoRio', u'YoRio', u'YoRio', u'Oro', u'YoRio', u'yorio', u'YoRio', u'YoRio', u'YoRio', u'yoRio', u'olympics', u'YoRio', u'YoRioxESPN', u'yoRio', u'GraciasRioPor', u'Rio2016', u'YoRio', u'YoRioxESPN', u'yorio', u'JuegosOlimpicos', u'GraciasRioPor', u'YoRio', u'YoRioxESPN', u'Rio2016', u'GraciasRio', u'Tokio2020', u'YoRio', u'GraciasRioPor', u'YoRio', u'Rio2016', u'JuegosOlimpicosRio2016', u'YoR\xedo', u'YoRio', u'paraolimpiadas', u'YoRio', u'YoRio', u'AndresBustamante', u'Tokio2020', u'YoRio', u'TodosSomosSuiza', u'TodosSomosTercerSet', u'YoRio', u'YoRio', u'GraciasRioPor', u'YoRioxESPN', u'YoRio', u'yorio', u'GraciasRioPor', u'YoRioxESPN', u'YoRio', u'YoRio', u'Japon2020', u'YoRio', u'GraciasRioPor', u'YoRioxESPN', u'YoRio', u'YoRioxESPN', u'YoR\xedo', u'GraciasRioPor', u'YoRioxESPN', u'YoRio', u'GraciasRioPor', u'YoRioxESPN', u'YoRio', u'GraciasRioPor', u'YoRio', u'YoRioxESPN', u'YoRio', u'rioxespn', u'YoRio', u'YoRio', u'YoRioxESPN', u'olimpicosrio2016', u'ESPN', u'YoRio', u'balondividido', u'YoRioxESPN', u'YoRio', u'rio2016', u'olympics', u'olympics2016', u'paralimpico', u'paralimpic', u'goo', u'yorioxespn', u'yorio', u'YoRio', u'YoRio', u'Rio2016', u'CeremoniaDeClausura', u'Tokio2020', u'RiotoTokyo', u'oro', u'Plata', u'Bronce', u'Olympics', u'YoRioxESPN', u'YoRio', u'YoRio', u'YoRio', u'Leyendas', u'IAmTheMan', u'YoRio', u'Rio2016', u'Olympics', u'R\xedo', u'RiodeJaneiro', u'Brasil', u'YoRio', u'Ol\xedmpicos', u'ESPN', u'YoRio', u'YoRioxESPN', u'YoRioxESPN', u'ESPN', u'GraciasRioPorESPN', u'YoRio', u'yorio', u'YoRioxESPN', u'condicional', u'yorio', u'YoRio', u'CeremoniaDeClausura', u'YoRio', u'GraciasRio', u'Tokio2020', u'YoRio', u'YoRio', u'yo', u'GraciasRio', u'Tokio2020', u'YoRio', u'YoRio', u'tokio2020', u'yorio', u'juegosolimpicos', u'Brasil', u'Brasil', u'YoRio', u'YoRio', u'yorio', u'YoRio', u'Fail', u'yorio', u'YoRioxESPN', u'yorio', u'YoRio', u'CeremoniaDeClausura', u'YoRio', u'YORIO', u'YoRio', u'YoR\xedo', u'YoRio', u'MX', u'yorio', u'Rio2016', u'YoRio', u'YoRioxESP', u'COL', u'Rio2016', u'YoRio', u'OlimpiadeRio2016', u'YoRio', u'YoRio', u'YoRio', u'YoRei', u'YoReire', u'Rio2016', u'CeremoniaDeClausura', u'YoRio', u'Rio2016', u'freethenipples', u'yoRio', u'YoRio', u'CeremoniaDeClausura', u'YoRio', u'Olimp\xedadas', u'YoRio', u'YoRio', u'Yo_corro', u'nikeplus', u'YoRio', u'YoRio', u'YoRio', u'R\xedo', u'RiodeJaneiro', u'Brasil', u'YoRio', u'Ol\xedmpicos', u'YoRio', u'YoRio', u'YoRio', u'Tokio2020', u'JuegosOlimpicos', u'yorio', u'YoRioxESPN', u'YoR\xedo', u'TuR\xedes', u'ElR\xede', u'EllaR\xede', u'EllosR\xeden', u'NosotrosRe\xedmos', u'UstedesR\xeden', u'Rio2016', u'Tokio2020', u'Tokio2020', u'CeremoniadeClausura', u'Rio2016xFOX', u'YoRio', u'Rio2016', u'JuegosOlimpicos', u'YoRioxESPN', u'YoLloro', u'YoRio', u'YoRio', u'YoRio']

screen_names = [u'ESPNmx', u'ESPNmx', u'ClaroSports', u'ClaroSports', u'ESPNmx', u'Faitelson_ESPN', u'Palomo_ESPN', u'espn', u'Rio2016', u'9GAG', u'joserra_espn', u'ESPNmx', u'werevertumorro', u'Faitelson_ESPN', u'ESPNmx', u'espn', u'ESPNmx', u'joserra_espn', u'chockoleiro', u'espn', u'EddyRios_', u'AnaGGuevara', u'Faitelson_ESPN', u'joapeca', u'TheMorrisMx', u'EPN', u'mexico', u'ESPNmx', u'ESPNmx', u'SoyUnStrapp', u'joserra_espn', u'MichaelPhelps', u'usainbolt', u'Deb_Estrella', u'AstroTerry', u'ESPNArgentina', u'espn', u'PresidenciaMX', u'CONADE', u'chockoleiro', u'joserra_espn', u'Faitelson_ESPN', u'joapeca', u'TheMorrisMx', u'EPN', u'mexico', u'ESPNmx', u'TheMorrisMx', u'EPN', u'mexico', u'YodaFath', u'EPN', u'mexico', u'CanalOnce11', u'joserra_espn', u'DavidFailtelson', u'ESPNmx', u'Lemocarv', u'PachoBenitezGol', u'ESPNmx', u'joserra_espn', u'CarolinaPadron', u'mauriciopedroza', u'Palomo_ESPN', u'cprocuna', u'paugr', u'puig_ricardo', u'Faitelson_ESPN', u'joserra_espn', u'Faitelson_ESPN', u'NTelevisa_com', u'CarlosLoret', u'espn', u'ElPrincipeDice', u'EPN', u'Wmichell', u'pelud0wn', u'EPN', u'giss1209', u'Deb_Estrella', u'AstroTerry', u'Javo__O', u'EPN', u'mexico', u'moriuper', u'giss1209']

words = [u'Si', u'estamos', u'hablando', u'de', u'#Deportes', u'tenemos', u'que', u'decir', u'#Rio2016', u'Los', u'Mejores', u'momentos', u'de', u'#YoRio', u'https://t.co/U9svEFTjfS', u'@ESPNmx', u'#YoRio', u'mi', u'momento:', u'la', u'plata', u'de', u'Lupita!', u'#Soyfandelupita', u'Terminaron', u'Ios', u'JJOO,', u'espero', u'que', u'@ESPNmx', u'y', u'@ClaroSports', u'transmitan', u'los', u'#Paralimpicos', u'de', u'la', u'misma', u'manera', u'#YoRio', u'#fb', u'https://t.co/OcJTLCUZIb', u'#olimpiadas', u'#yorio', u'#vacaciones', u'#tirolesas', u'https://t.co/g1TMTsUMzd', u'Gracias', u'@ClaroSports', u'por', u'mantenernos', u'tan', u'cerca', u'de', u'R\xedo,', u'lo', u'que', u'no', u'vi', u'por', u'TV', u'lo', u'vi', u'desde', u'su', u'gran', u'App.', u'#YoRio', u'nos', u'vemos', u'en', u'#Tokio2020', u'\U0001f3c5', u'Gracias', u'Rio!', u'#YoRio', u'@ESPNmx', u'#YoRio', u'emotivo', u'mensaje', u'del', u'final', u'de', u'R\xedo', u'2016', u'narrando', u'por', u'@Faitelson_ESPN.', u'Como', u'siempre', u'haciendo', u'un', u'excelente', u'trabajo,', u'gracias', u'ESPN!', u'viendo', u'la', u'clausura', u'de', u'los', u'juegos', u'Ol\xedmpicos', u'con', u'alitas!', u'(no', u'puedo', u'escuchar', u'porque', u'tienen', u'a', u'todo', u'volumen', u'la', u'musica', u'en', u'el', u'restaurante)', u'#YoRio', u'Misi\xf3n', u'cumplida', u'@Palomo_ESPN', u'#YoRio', u'@espn', u'@Rio2016', u'\U0001f44f', u'\U0001f1e7\U0001f1f7', u'#Oro', u'\U0001f44f', u'Juegos', u'Paral\xedmpicos', u'de', u'Rio', u'2016,', u'un', u'encanto', u'de', u'video', u'<3', u'#YoRio', u"We're", u'The', u'Superhumans', u'|', u'Rio', u'Paralympics', u'2016', u'https://t.co/fmqPZMlQbK', u'C\xf3mo', u'busco', u'al', u'tr\xedo?', u'quiero', u'esa', u'rola', u'#yorio', u'#YoRio', u'-', u'Best', u'celebration', u'ever', u'https://t.co/6x2Jd6soPk', u'v\xeda', u'@9GAG', u'@joserra_espn', u'@ESPNmx', u'incluido', u'el', u'@werevertumorro', u'o', u'a', u'ese', u'hijo', u'lo', u'sigues', u'desconociendo???', u'Ah,', u'solo', u'@Faitelson_ESPN', u'lo', u'chikiteas!', u'#YoRio', u'Excelente', u'cobertura', u'#YoRio', u'ESPN,', u'la', u'mejor', u'que', u'haya', u'visto', u'en', u'ol\xedmpicos', u'Pocas', u'cosas', u'como', u'los', u'deportes', u'generan', u'tantas', u'y', u'tantas', u'emociones', u'que', u'actualmente', u'necesitamos', u'para', u'no', u'olvidar', u'quienes', u'somos.', u'#yoRio', u'#olympics', u'hace', u'tanto', u'que', u'no', u've\xeda', u'una', u'cobertura', u'tan', u'buena', u'de', u'unos', u'Juegos', u'Ol\xedmpicos.', u'Felicidades', u'@ESPNmx', u'Maravilloso', u'programa', u'#YoRio', u'#YoRioxESPN', u'\U0001f44f\U0001f3fc\U0001f44f\U0001f3fc\U0001f44f\U0001f3fc', u'Vi', u'lo', u'mejor', u'en', u'#yoRio', u'21', u'd\xedas', u'Juegos', u'Ol\xedmpicos', u'cerca', u'del', u'mar', u'nadie', u'me', u'lo', u'va', u'borrar', u'#GraciasRioPor', u'esas', u'panor\xe1micas', u'extraordinarias', u'de', u'#Rio2016', u'trabajo', u'de', u'@espn.Belleza', u'total.Arrobo.Excelente', u'transmisi\xf3n.', u'#YoRio', u'#YoRioxESPN', u'#yorio', u'voy', u'a', u'extra\xf1ar', u'no', u'volver', u'a', u'ver', u'nunca', u'm\xe1s', u'el', u'monopolio', u'televisivo', u'gracias', u'@ESPNmx', u'magn\xedfica', u'transmisi\xf3n', u'mis', u'8vos', u'#JuegosOlimpicos', u'tnks', u'#GraciasRioPor', u'palabras', u'hermosas', u'de', u'@joserra_espn', u'"Unos', u'Juegos', u'profundamente', u'hermosos,de', u'cara', u'al', u'mar."', u'Gracias', u'#YoRio', u'#YoRioxESPN', u'#Rio2016', u'RT', u'@chockoleiro:', u'#GraciasRio', u'ahora', u'a', u'esperar', u'a', u'#Tokio2020', u'suena', u'bien,', u'no?', u'#YoRio', u'https://t.co/xxJQJlIze4', u'#GraciasRioPor', u'que', u'lloro', u'de', u'emoci\xf3n', u'con', u'#YoRio', u'de', u'despedida.', u'Excelente', u'@espn', u'\xa1Nunca', u'me', u'olvidar\xe9', u'de', u'#Rio2016', u'#JuegosOlimpicosRio2016!', u'Nada', u'malos', u'esos', u'cantores', u'en', u'#YoR\xedo,', u'no', u'los', u'conoc\xeda.', u'#YoRio', u'waoo', u'que', u'momentos', u'vivieron', u'estos', u'atletas,', u'me', u'siento', u'triste', u'porque', u'ay', u'que', u'esperar', u'4', u'a\xf1os'
, u'mas', u'para', u'ver', u'estos', u'atletlas', u'hacer', u'historia', u'Nunca', u'he', u'estado', u'de', u'acuerdo', u'en', u'q', u'apaguen', u'la', u'llama', u'olimpica', u'si', u'siguen', u'las', u'#paraolimpiadas', u'#YoRio', u'Ya', u'falto', u'el', u'g\xfciri', u'g\xfciri', u'en', u'los', u'#YoRio', u'y', u'si', u'hace', u'un', u'canal', u'de', u'YouTube', u'#AndresBustamante', u'para', u'#Tokio2020', u'#YoRio', u'lo', u'que', u'm\xe1s', u'me', u'gust\xf3', u'fue', u'#TodosSomosSuiza', u'y', u'#TodosSomosTercerSet', u'haaaaaaaaa....', u'que', u'maravilla....', u'RT', u'@EddyRios_:', u'Tuve', u'la', u'oportunidad', u'de', u'comenzar', u'con', u'#YoRio', u'desde', u'enero', u'y', u'tristemente', u'no', u'pude', u'concluir.', u'A\xfan', u'as\xed', u'fue', u'una', u'gran', u'experiencia', u'que\u2026', u'Tuve', u'la', u'oportunidad', u'de', u'comenzar', u'con', u'#YoRio', u'desde', u'enero', u'y', u'tristemente', u'no', u'pude', u'concluir.', u'A\xfan', u'as\xed', u'fue', u'una', u'gran', u'experiencia', u'que', u'me', u'dej\xf3', u'mucho.', u'#GraciasRioPor', u'hacerme', u'parte', u'de', u'la', u'historia', u'\xa1Los', u'viv\xed,los', u'viv\xed!', u'La', u'emocion', u'de', u'ver', u'grandes', u'leyendas', u'del', u'deporte', u'despedirse', u'#YoRioxESPN', u'#YoRio', u'@AnaGGuevara', u'@Faitelson_ESPN', u'excelente', u'transmisi\xf3n', u'en', u'#yorio', u'esperemos', u'puedas', u'ayudar', u'al', u'deporte', u'de', u'mx,', u'eres', u'la', u'ideal', u'para', u'dirigir', u'el', u'rumbo!', u'#GraciasRioPor', u'Ver', u'tanta', u'belleza', u'interna', u'y', u'externa', u'de', u'hombres', u'y', u'mujeres', u'\xa1Y', u'esos', u'tacos', u'de', u'ojo', u'con', u'tanto', u'guapo!', u'Por', u'qu\xe9', u'no', u'#YoRioxESPN', u'#YoRio', u'Pues', u'se', u'nos', u'termino', u'#YoRio', u'nos', u'vemos', u'en', u'#Japon2020', u'\U0001f44d', u'RT', u'@joapeca:', u'@TheMorrisMx', u'A', u'las', u'diez', u'mis', u'@EPN', u'Boots,a', u'las', u'diez,@mexico', u'no', u'debe', u'saber', u'que', u'yo', u'soy', u'uno', u'de', u'ustedes', u'#YoRio', u'https://t.co/26YdPZVk\u2026', u'#GraciasRioPor', u'\xa1Hacerme', u'VIVIR', u'Y', u'VIBRAAARRR!', u'\xa1Esas', u'finales', u'de', u'nerrrrvios!', u'Gracias', u'hermanos', u'de', u'Brasil', u'po', u'su', u'gran', u'esfuerzo', u'#YoRioxESPN', u'#YoRio', u'@ESPNmx', u'gracias', u'por', u'llevarnos', u'una', u'transmisi\xf3n', u'de', u'primer', u'nivel', u'de', u'los', u'juegos', u'ol\xedmpicos', u'esperemos', u'que', u'en', u'4', u'a\xf1os', u'vuelvan', u'#YoRioxESPN', u'#YoR\xedo', u'#GraciasRioPor', u'motivarme,', u'ense\xf1arme,', u'por', u'el', u'paseo', u'hermoso', u'por', u'R\xedo,', u'sentir', u'que', u'ah\xed', u'estaba', u'apoyando', u'a', u'los', u'j\xf3venes', u'atletas.', u'#YoRioxESPN', u'#YoRio', u'#GraciasRioPor', u'hacerme', u'emocionarme', u'hasta', u'las', u'l\xe1grimas', u'al', u'ver', u'a', u'nuestros', u'j\xf3venes', u'atletas', u'triunfando', u'\xa1Me', u'motiva', u'tanto!', u'#YoRioxESPN', u'#YoRio', u'#GraciasRioPor', u'hacerme', u'saber', u'que', u'nunca', u'es', u'tarde', u'para', u'superarme', u'a', u'm\xed', u'misma', u'y', u'motivarme', u'a', u'trabajar', u'y', u'luchar.#YoRio', u'#YoRioxESPN', u'Thanks', u'ESPN', u'FOR', u'#YoRio', u'2016...muchas', u'gracias', u'@ESPNmx', u'tip', u'para', u'el', u'futuro:', u'no', u'metan', u'comerciales', u'en', u'las', u'ceremonias,', u'cualquiera', u'que', u'sea...los', u'himnos', u'tambi\xe9n', u'son', u'importantes', u'#rioxespn', u'#YoRio', u'@SoyUnStrapp', u'Dicen', u'que', u'las', u'imagenes', u'dicen', u'mas', u'que', u'un', u'mill\xf3n', u'de', u'Twitters,', u'\xbfO', u'no?', u'Por', u'eso', u'#YoRio', u'https://t.co/xGBDzyhiAF', u'Gracias', u'#YoRioxESPN', u'Por', u'llevarme', u'a', u'Los', u'#olimpicosrio2016', u'a', u'travez', u'de', u'la', u'pantalla', u'de', u'mi', u'TV!', u'\u26bd\U0001f6b4\U0001f3c7\U0001f3c0\u26be\U0001f3ca\U0001f3be\U0001f46f', u'#ESPN', u'#YoRio', u'#balondividido', u'#YoRioxESPN', u'#YoRio', u'https://t.co/TpkZOA37IU', u'#rio2016', u'#olympics', u'#olympics2016', u'#paralimpico', u'#paralimpic', u'\
u263a\U0001f64c\U0001f64b\u2764\U0001f44d\u270c\U0001f44b', u'#goo', u'#yorioxespn', u'#yorio\u2026', u'https://t.co/Dei7iL0Ukk', u'RT', u'mauriciopedroza:', u'Por', u'entrar', u'con', u'joserra_espn', u'y', u'Faitelson_ESPN', u'a', u'hablar', u'de', u'lo', u'que', u'nos', u'dej\xf3', u'la', u'nataci\xf3n', u'en', u'#YoRio\u2026', u'https://t.co/RnDcBAS4hJ', u'#YoRio', u'#Rio2016', u'#CeremoniaDeClausura', u'#Tokio2020', u'#RiotoTokyo', u'#oro', u'#Plata', u'#Bronce', u'#Olympics', u'#YoRioxESPN', u'https://t.co/Ai6g6U80rQ', u'Esta', u'semana', u'muchos', u'tendremos', u'sindrome', u'de', u'abstinencia', u'olimpica', u'#YoRio', u'RT', u'mauriciopedroza:', u'Por', u'entrar', u'con', u'joserra_espn', u'y', u'Faitelson_ESPN', u'a', u'hablar', u'de', u'lo', u'que', u'nos', u'dej\xf3', u'la', u'nataci\xf3n', u'en', u'#YoRio\u2026', u'https://t.co/dHr01K1ted', u'@joserra_espn', u'#YoRio', u'gran', u'video', u'de', u'@MichaelPhelps', u'@usainbolt', u'subanlo', u'a', u'youtube', u'#Leyendas', u'#IAmTheMan', u'#YoRio', u'\U0001f64f\U0001f3fc\U0001f622', u'#Rio2016', u'#Olympics', u'RT', u'@Deb_Estrella:', u'#R\xedo', u'#RiodeJaneiro', u'#Brasil', u'desde', u'el', u'espacio.', u'Soberbia', u'foto', u'del', u'astronauta', u'@AstroTerry', u'#YoRio', u'#Ol\xedmpicos', u'https://t.co/YyAC\u2026', u'Siempre', u'los', u'programas', u'y', u'las', u'cadenas', u'donde', u'este', u'joserra', u'ser\xe1n', u'los', u'mejores', u'#ESPN', u'#YoRio', u'#YoRioxESPN', u'\U0001f44b\U0001f3fd\U0001f63f', u'#YoRioxESPN', u'Gracias', u'Totales!', u'Cobertura', u'de', u'clase', u'mundial,', u'ORO', u'para', u'#ESPN', u'#GraciasRioPorESPN', u'#YoRio', u'@ESPNArgentina', u'#yorio', u'#YoRioxESPN', u'una', u'verg\xfcenza', u'la', u'conductora', u'ri\xe9ndose', u'de', u'la', u'ca\xedda', u'del', u'corredor,', u'una', u'falta', u'de', u'respeto', u'incre\xedble', u'\U0001f621\U0001f621\U0001f621', u'Me', u'gustar\xeda', u'que', u'@ESPN', u'se', u'exprese,', u'como', u'se', u'expresa', u'y', u'habla', u'de', u'Phelps,', u'de', u'los', u'paral\xedmpicos', u'en', u'especial', u'de', u'Gustavo', u'S\xe1nchez', u'#condicional', u'#yorio', u'@PresidenciaMX', u'Han', u'promovido', u'tanto', u'al', u'SNA', u'que', u'aparte', u'del', u'departamento', u'de', u'la', u'Gaviota', u'el', u'fracaso', u'de', u'@CONADE', u',Si', u'no', u'impera', u'la', u'impunidad', u'#YoRio', u'Ya', u'las', u'vi', u'criticando', u'la', u'clausura,', u'como', u'si', u'hubieran', u'uds.', u'Tenido', u'una', u'mejor', u'idea,', u'que', u'esperaban!?', u'Es', u'Rio.', u'#CeremoniaDeClausura', u'#YoRio', u'RT', u'@chockoleiro:', u'#GraciasRio', u'ahora', u'a', u'esperar', u'a', u'#Tokio2020', u'suena', u'bien,', u'no?', u'#YoRio', u'https://t.co/xxJQJlIze4', u'@joserra_espn', u'eres', u'grande', u'y', u'que', u'bueno', u'q', u'callas', u'a', u'@Faitelson_ESPN', u'#YoRio', u'#yo', u'#GraciasRio', u'ahora', u'a', u'esperar', u'a', u'#Tokio2020', u'suena', u'bien,', u'no?', u'#YoRio', u'https://t.co/xxJQJlIze4', u'RT', u'@joapeca:', u'@TheMorrisMx', u'A', u'las', u'diez', u'mis', u'@EPN', u'Boots,a', u'las', u'diez,@mexico', u'no', u'debe', u'saber', u'que', u'yo', u'soy', u'uno', u'de', u'ustedes', u'#YoRio', u'https://t.co/26YdPZVk\u2026', u'"Ah\xed', u'podemos', u'ver', u'la', u'bandera', u'de', u'Chihuahua"', u'Gracias', u'a', u'todos', u'los', u'cronistas', u'de', u'@espnmx', u'#tokio2020', u'#yorio', u'Se', u'acabaron', u'los', u'#juegosolimpicos', u'#Brasil', u'd', u'retos,', u'nostalgia,', u'admiraci\xf3n,', u'esfuerzo,', u'oportunidades,', u'talentos,', u'festejos.', u'Gracias', u'#Brasil', u'#YoRio', u'@TheMorrisMx', u'A', u'las', u'diez', u'mis', u'@EPN', u'Boots,a', u'las', u'diez,@mexico', u'no', u'debe', u'saber', u'que', u'yo', u'soy', u'uno', u'de', u'ustedes', u'#YoRio', u'https://t.co/26YdPZVkbj', u'#yorio', u'gracias', u'x', u'esos', u'juegos', u'tan', u'maravillosos', u'e', u'inolvidables', u'\U0001f1e7\U0001f1f7\U0001f1e7\U0001f1f7\U0001f1e7\U0001f1f7', u'@YodaFath', u'Pobres', u'@EPN', u'Boots', u'el', u'felicita', u'a', u'los', u'atletas', u'y', u'ustedes', u'a', u'el,\
xa1que', u'veo', u'si', u'si', u'compiti\xf3', u'por', u'@mexico', u'!', u'#YoRio', u'https://t.co/jznPQI8PfD', u'Quien', u'es', u'el', u'comunicador', u'de', u'@CanalOnce11', u'que', u'esta', u'en', u'contra', u'de', u'la', u'clausura', u'de', u'los', u'JO?', u'Osea', u'es', u'una', u'fiesta', u'mundial', u'#Fail', u'canal', u'11', u'Bien', u'#yorio', u'#YoRioxESPN', u'#yorio', u'porque', u'siempre', u'estan', u'de', u'pleito', u'@joserra_espn', u'y', u'@DavidFailtelson', u'https://t.co/NxaCn7jB8T', u'#YoRio', u'Se', u'acabaron', u'los', u'juegos', u'#CeremoniaDeClausura', u'#YoRio', u'volvamos', u'a', u'la', u'lucha', u'diaria,', u'esperemos', u'4', u'a\xf1os.', u'https://t.co/JXhJF8LnKJ', u'@ESPNmx', u'LA', u'NETA,', u'LA', u'NETA...', u'EXCELENTE', u'COBERTURA', u'LA', u'QUE', u'GENER\xd3', u'ESPN;', u'ENHORABUENA.', u'#YORIO', u'RT', u'@Lemocarv:', u'@PachoBenitezGol', u'gran', u'trabajo', u'en', u'#YoRio', u'comentarios', u'claros', u'profesionales', u'excelente', u'cobertura', u'y', u'sobre', u'todo', u'la', u'emoci\xf3n', u'@ESPNmx', u'#YoR\xedo', u'@joserra_espn', u'@CarolinaPadron', u'@mauriciopedroza', u'@Palomo_ESPN', u'@cprocuna', u'@paugr', u'@puig_ricardo', u'@Faitelson_ESPN', u'GRACIAS!!!', u'#YoRio', u'@joserra_espn', u'@Faitelson_ESPN', u'excelentes', u'programas.', u'Los', u'esperamos', u'para', u're\xedr', u'en', u'Jap\xf3n.', u'@NTelevisa_com', u'@CarlosLoret', u'califiquen', u'con', u'datos,', u'desde', u'84', u'es', u'el', u'3er', u'mejor', u'resultado', u'de', u'#MX', u'y', u'el', u'5\xba', u'mejor', u'en', u'su', u'historia', u'#yorio', u'#Rio2016', u'Un', u'GRACIAS', u'Gigante', u'a', u'@ESPN', u'#YoRio', u'#YoRioxESP', u'porque', u'apoyaron', u'a', u'los', u'colombianos', u'#COL', u'con', u'el', u'coraz\xf3n', u'\u2764', u'en', u'todas', u'sus', u'transmisiones', u'#Rio2016', u'Y', u'ahora??', u'De', u'que', u'van', u'hablar???', u'#YoRio', u'Me', u'encant\xf3', u'la', u'apertura', u'pero', u'le', u'faltaba', u'carnaval...', u'Ahora', u'si!!!!', u'Hermoso', u'cierre!!!', u'#OlimpiadeRio2016', u'Felicidades', u'a', u'los', u'5', u'campeones,', u'por', u'sus', u'medallas', u'y', u'a', u'todos', u'los', u'que', u'nos', u'representaron,', u'por', u'su', u'gran', u'esfuerzo!', u'#YoRio', u'https://t.co/mPP7NWgZmS', u'@ElPrincipeDice', u'Jovenes', u'creativos', u'los', u'@EPN', u'Boots,en', u'el', u'mar', u'de', u'oportunidades', u'recibieron', u'la', u'suya', u'por', u'eso', u'#YoRio', u'https://t.co/9QCbKeWRix', u'#YoRio', u'#YoRei', u'y', u'#YoReire', u'con', u'#Rio2016', u'RT', u'@Wmichell:', u'Detallazo', u'homenajear', u'a', u'los', u'voluntarios!!.Los', u'casi', u'anonimos', u'que', u'hacen', u'funcionar', u'las', u'cosas', u'por', u'puro', u'coraz\xf3n!!', u'#CeremoniaDeClaus\u2026', u'\xbfEs', u'idea', u'm\xeda', u'o', u'el', u'cierre', u'de', u'#Rio2016', u'fue', u'una', u'dosis', u'de', u'#freethenipples?', u'#yoRio', u'Se', u'acabo', u'\U0001f622', u'#YoRio', u'Que', u'lujo', u'de', u'olimpiadas', u',', u'que', u'buena', u'#CeremoniaDeClausura', u'.', u'Felicidad!', u'#YoRio', u'A', u'esperar', u'otros', u'cuatro', u'a\xf1os', u'para', u'ver', u'las', u'#Olimp\xedadas...', u'#YoRio', u'Mientras', u'#YoRio', u'llega', u'a', u'su', u'fin', u'#Yo_corro....!!!', u'Acabo', u'de', u'correr', u'6.07', u'km', u'a', u'un', u'ritmo', u'de', u"5'13''", u'con', u'Nike+', u'https://t.co/Q2zB6vsQsd', u'#nikeplus', u'Los', u'veo', u'en', u'Tokio', u'#YoRio', u'@pelud0wn', u'Es', u'hermoso', u'ver', u'que', u'a', u'los', u'@EPN', u'Boots', u'les', u'gusta', u'lo', u'grande', u'lo', u'm\xe1s', u'grande,\xa1', u'lo', u'grandototote!', u'Por', u'eso', u'#YoRio', u'https://t.co/De5yikxL7E', u'RT', u'@giss1209:', u'Ser\xe1', u'que', u'el', u'de', u'ESPN', u'puede', u'dejar', u'de', u'hablar', u'de', u'M\xe9xico?', u'Es', u'Brazil', u'#YoRio', u'RT', u'@Deb_Estrella:', u'#R\xedo', u'#RiodeJaneiro', u'#Brasil', u'desde', u'el', u'espacio.', u'Soberbia', u'foto', u'del', u'astronauta', u'@AstroTerry', u'#YoRio', u'#Ol\xedmpicos', u'https://t.co/YyAC\u2026', u'El', u'pa\xeds', u'm\xe1s', u'alegre', u'y', u'
maravilloso', u'del', u'mundo', u',', u'despide', u'su', u'mega', u'evento', u'#YoRio', u'#YoRio', u'muy', u'buena', u'transmisi\xf3n,', u'esperemos', u'que', u'as\xed', u'sea', u'la', u'de', u'los', u'juegos', u'paralimpicos', u'@Javo__O', u'@EPN', u'\xa1Silencio', u'!', u'@mexico', u'los', u'ni\xf1os', u'est\xe1n', u'haciendo', u'su', u'tarea,mientras', u'les', u'tendr\xedamos', u'su', u'frutsi', u'#YoRio', u'https://t.co/SqT3PAH9wl', u'RT', u'@moriuper:', u'La', u'presentaci\xf3n', u'de', u'#Tokio2020', u'estuvo', u'demasiado', u'cool', u'#JuegosOlimpicos', u'#yorio', u'#YoRioxESPN', u'#YoR\xedo', u'#TuR\xedes', u'#ElR\xede', u'#EllaR\xede', u'#EllosR\xeden', u'#NosotrosRe\xedmos', u'#UstedesR\xeden', u'#Rio2016', u'#Tokio2020', u'https://t.co/LkE4azl1ZF', u'Si', u'la', u'presentaci\xf3n', u'de', u'#Tokio2020', u'fue', u'as\xed...', u'Ya', u'quiero', u'ver', u'la', u'inauguraci\xf3n.', u'#CeremoniadeClausura', u'#Rio2016xFOX', u'#YoRio', u'Pues', u'ya', u'se', u'acabo', u'#Rio2016', u'#JuegosOlimpicos', u'#YoRioxESPN', u'ahora', u'ser\xe1', u'#YoLloro', u'ya', u'no', u'es', u'#YoRio', u'#YoRio', u'el', u'cierre', u'de', u'los', u'juegosolimpicos', u'fue', u'mejor', u'que', u'el', u'opening...', u'RT', u'@giss1209:', u'Ser\xe1', u'que', u'el', u'de', u'ESPN', u'puede', u'dejar', u'de', u'hablar', u'de', u'M\xe9xico?', u'Es', u'Brazil', u'#YoRio']




coleccion_hashtags = Counter(hashtags).most_common()[:15]  ### de la lista hashtags importamos una lista de tuplas con las 15 palabras mas comunes

coleccion_screen_names = Counter(screen_names).most_common()[:15]  ### de la lista screen_names importamos una lista de tuplas con las 15 palabras mas comunes

coleccion_words = Counter(words).most_common()[:15]  ### de la lista words importamos una lista de tuplas con las 15 palabras mas comunes



count_coleccion_hashtags = len(coleccion_hashtags) ### Solo vamos a ver el grafico de los hashtags, por lo q contamos cuanttos elementos hay
diccionario = dict() # creamos el diccionario
i = 0 # inicializamos la variable
lista_nueva1 =[]   # creamos la lsita1
lista_nueva2 = []  # creamos la lsita2

for i in  range(0,count_coleccion_hashtags): # creamos el bucle for para pasar por cada uno de los elementos de hashtags
        
        llave = coleccion_hashtags[i][0]  ### Llamamos llave el primer elemento de la tupla para cada elemento de la lista, creo q esta es la parte dificil de programar saber que es que cosa en el codigo
        valor = coleccion_hashtags[i][1]  ### llamamos clave a el segundo elemento de la tupla para cada i
        
        ### Necesitamos 2 lsitas para graficar X y Y
        lista_nueva1.append(llave)     # Esta es la palabra
        lista_nueva2.append(valor)     # este es el numero de veces que aparece en la lista hashtags
        

posicion_y = np.arange(len(lista_nueva1))
plt.barh(posicion_y, lista_nueva2, align = "center")
plt.yticks(posicion_y, lista_nueva1)
plt.xlabel('Palabras')
plt.title("Numero de Repeticiones")
plt.show()


explode = [0.1, 0, 0, 0, 0, 0, 0, 0.1, 0.1, 0, 0, 0, 0, 0, 0.] # Para mi esto es lo mas importante de explicar por ejemplo ay 0 y 0,1
                                           ###  Los que son mayores que 0 se veran un poco mas separados y es una funcion para hacer notar algo
plt.pie(lista_nueva2, explode=explode, labels=lista_nueva1, autopct='%1.1f%%', shadow=True) # Aqui se construyte como queremos ver el Grafico
plt.title("Histograma de una clase Twitter", bbox={"facecolor":"0.8", "pad":5}) ### Este es el titulo
plt.legend()
plt.show()


En esta entrada decidí comentar lo mas interesante e importante del código…. En resumen, se crean 2 Gráficos de los Hashtags de la etiqueta #YoRio, aunque decidí colocar la lista que habíamos obtenidos de imprimir hashtags “print hashtags” del código de la entrada anterior, el primero es de barras y  el segundo es de Torta ademas se saca la fracción de cada elemento involucrado en el 100% o total de las palabras estudiadas que fueron 15 y no el total real….

Con esta entrada comenzamos esta serie en la que vamos solo a analizar las salidas de cada cuenta con el programa que vamos a ir construyendo en las otras series….

La salida de este programa es la siguiente:

grafico1

Al cerrar la ventana nos aparece este:

grafico2

De verdad es que me parece muy interesante ver los datos en gráficas par aprender mas 😀

Que Dios les Bendiga, hasta pronto, recuerda ahora puedes darle me gusta y ratear las entradas de este blog, ademas deja tus dudas en estos temas, podrían convertirse en algo interesante para otros…

Información de interés que a mi me pareció de mucha ayuda:

Pybonacci como siempre un sitio donde aprender y deleitarse con buenas practicas de Python: http://pybonacci.org/tag/tutorial-matplotlib-pyplot/

Python para impacientes, de aqui saque la forma de imprimir el grafico, no soy un experto en eso :S

http://python-para-impacientes.blogspot.com/2014/08/graficos-en-ipython.html

 

 

Jugando con la API de Twitter [Parte 4]

En esta entrada vamos a ver nuestras primeras tablas, no te emociones aun, vamos a ver como python le da formato a datos sencillos, aunque en la siguiente entrada si vamos a ver gráficos de lo que hemos ido haciendo hasta ahora con la otra serie que te recuerdo va paralela a esta Manejando los datos de la API Twitter en Python [Parte 1]  ademas aquí te tengo mi nuevo repositorio de GitHub que hasta ahora solo tiene 2 de las series del Blog pero las voy a ir subiendo poco a poco y para este año espero tener de 10 a 15 series en el repo, solo voy a subir repositorios míos no voy a hacer fork de ningún repo de otra persona, así que aquí esta mi nuevo repo: https://github.com/Seth-Root No me entusiasma mucho los 2 repos que he subido pero son los mas completos y el código esta interesante.

Bueno a lo que nos interesa, “PrettyTable es una biblioteca de Python sencilla para visualizar fácilmente los datos tabulares en un formato de tabla ASCII visualmente atractivo.

PrettyTable es una biblioteca de Python simple diseñada para que sea fácil y rápido para representar datos tabulares en las tablas ASCII visualmente atractivos. Se inspira en las tablas ASCII utilizados en la cáscara de psql de PostgreSQL. PrettyTable permite la selección de las columnas que se van a imprimir, la alineación independiente de columnas (izquierda o derecha o centrado) y la impresión de “sub-tablas” especificando un rango fila.”

Información de aquí

Como aun estamos con nuestros programas en linea de comandos, tenemos que buscar la manera de ver la salida lo mas interesante, fácil y educativa posible y es por esto que me he permitido colocar este formato aquí, ademas en el libro que venimos siguiendo de minando las web sociales tienen un ejemplo de esto y lo coloque aquí 😀

Vamos a visualizar los datos que podemos ver con el siguiente código:


import twitter, json

from collections import Counter

from prettytable import PrettyTable


# Datos de autenticacion
CONSUMER_KEY = 'Datos de A'

CONSUMER_SECRET = 'Datos de B'

OAUTH_TOKEN = 'Datos de C'

OAUTH_SECRET = 'Datos de D'



auth = twitter.oauth.OAuth( OAUTH_TOKEN , OAUTH_SECRET, CONSUMER_KEY , CONSUMER_SECRET )

api = twitter.Twitter(auth=auth)

q =  '#yorio' # Coloca aqui la cuenta a estudiar


count = 100

search_results = api.search.tweets(q=q, count =count)

statuses = search_results['statuses']


  
retweet_counts = [status['retweet_count']
	 for status in statuses ]

status_texts = [status['text']
	 for status in statuses ]


screen_names = [user_mention['screen_name']
	 for status in statuses 
	     for user_mention in status ['entities']['user_mentions'] ]


hashtags = [hashtag['text']
	 for status in statuses 
	     for hashtag in status ['entities']['hashtags'] ]

words = [ w
	 for t in status_texts
	    for w in t.split()
  ]

for item in [words, screen_names, hashtags]:
    c = Counter(item)
    print c.most_common()[:20]
    print



for label, data in (('Word', words), ('Screen Name', screen_names), ('Hashtag', hashtags)):
    pt = PrettyTable(field_names=[label, 'Count'])
    c = Counter(data)
    [ pt.add_row(kv) for kv in c.most_common()[:20] ]
    pt.align[label], pt.align['Count'] = 'l', 'r' # Set column alignment
    print pt


    

La salida de este programa es sumamente importante, y consta de 2 partes interesantes para nosotros y debemos estudiarlas a fondo aunque aquí solo diré que las vamos a estudiar a fondo en la otra serie, lo que si me interesa tocar es los bloques de código del bucle for que generan esta salida


[(u'en', 103), (u'de', 76), (u'#YoRio', 73), (u'del', 62), (u'a', 61), (u'RT', 53), (u'Diego', 52), (u'Tendremos', 40), (u'a\xf1os', 40), (u'4to', 40), (u'lugar', 40), (u'NOCHE', 40), (u'22', 40), (u'fue', 40), (u'Con', 40), (u'lanzamiento', 40), (u'ESTA', 40), (u'Real.', 40), (u'#YoRioxESPN', 39), (u'martillo.', 34)]

[(u'Leonlec', 33), (u'ACC_Castillo', 8), (u'EPN', 6), (u'CONADE', 4), (u'joserra_espn', 4), (u'ESPNmx', 4), (u'PaolaEspinosaOf', 2), (u'Faitelson_ESPN', 2), (u'gobmx', 1), (u'mexico', 1), (u'yllenhot1', 1), (u'aristeguicnn', 1), (u'AnaGGuevara', 1), (u'INEMexico', 1), (u'PresidenciaMX', 1), (u'merizemborain', 1), (u'apmakeup', 1), (u'matsinfronteras', 1), (u'Pajaropolitico', 1), (u'Valencia_Guzman', 1)]

[(u'YoRio', 80), (u'YoRioxESPN', 40), (u'YoR\xedo', 15), (u'Rio2016', 3), (u'HondurasLlora', 2), (u'NoTeMuerasNunca', 2), (u'MePongoDePie', 2), (u'YoLloro', 2), (u'Idolo', 2), (u'Grandisima', 2), (u'lupitadeoro', 2), (u'YoRIO', 2), (u'EllaRie', 1), (u'TodosReimos', 1), (u'yorio', 1), (u'COL', 1), (u'Olimpiadas2016', 1), (u'Plata', 1), (u'LupitaMentality', 1), (u'yoRio', 1)]

+-------------+-------+
| Word        | Count |
+-------------+-------+
| en          |   103 |
| de          |    76 |
| #YoRio      |    73 |
| del         |    62 |
| a           |    61 |
| RT          |    53 |
| Diego       |    52 |
| Tendremos   |    40 |
| años        |    40 |
| 4to         |    40 |
| lugar       |    40 |
| NOCHE       |    40 |
| 22          |    40 |
| fue         |    40 |
| Con         |    40 |
| lanzamiento |    40 |
| ESTA        |    40 |
| Real.       |    40 |
| #YoRioxESPN |    39 |
| martillo.   |    34 |
+-------------+-------+
+-----------------+-------+
| Screen Name     | Count |
+-----------------+-------+
| Leonlec         |    33 |
| ACC_Castillo    |     8 |
| EPN             |     6 |
| CONADE          |     4 |
| joserra_espn    |     4 |
| ESPNmx          |     4 |
| PaolaEspinosaOf |     2 |
| Faitelson_ESPN  |     2 |
| gobmx           |     1 |
| mexico          |     1 |
| yllenhot1       |     1 |
| aristeguicnn    |     1 |
| AnaGGuevara     |     1 |
| INEMexico       |     1 |
| PresidenciaMX   |     1 |
| merizemborain   |     1 |
| apmakeup        |     1 |
| matsinfronteras |     1 |
| Pajaropolitico  |     1 |
| Valencia_Guzman |     1 |
+-----------------+-------+
+-----------------+-------+
| Hashtag         | Count |
+-----------------+-------+
| YoRio           |    80 |
| YoRioxESPN      |    40 |
| YoRío           |    15 |
| Rio2016         |     3 |
| HondurasLlora   |     2 |
| NoTeMuerasNunca |     2 |
| MePongoDePie    |     2 |
| YoLloro         |     2 |
| Idolo           |     2 |
| Grandisima      |     2 |
| lupitadeoro     |     2 |
| YoRIO           |     2 |
| EllaRie         |     1 |
| TodosReimos     |     1 |
| yorio           |     1 |
| COL             |     1 |
| Olimpiadas2016  |     1 |
| Plata           |     1 |
| LupitaMentality |     1 |
| yoRio           |     1 |
+-----------------+-------+

Los 2 bucles son estos:


### Bloque 1

for item in [words, screen_names, hashtags]:
    c = Counter(item)
    print c.most_common()[:20]
    print


### Bloque 2
for label, data in (('Word', words), ('Screen Name', screen_names), ('Hashtag', hashtags)):
    pt = PrettyTable(field_names=[label, 'Count'])
    c = Counter(data)
    [ pt.add_row(kv) for kv in c.most_common()[:20] ]
    pt.align[label], pt.align['Count'] = 'l', 'r' # Set column alignment
    print pt


    

Si analizamos bien el código anterior lo que estamos imprimiendo para el primer bloque es una lista con 1 diccionario adentro, esto debido a que la API nos proporciona una lista de muchos diccionarios y como estamos sobre esta, es decir no hemos creado diccionarios nuevos esto lo hacemos en la otra serie :D, la salida es lógica una lista de 1 diccionario con los items mas comunes que estamos evaluando.

Se me olvidaba también tenemos importada una librería llamada Counter que nos facilita el tener que contar los items mas comunes de una clase o método python como es nuestro caso tenemos 3 diccionario y el bloque 1 nos permite encontrar los mas comunes de cada diccionario, yo le coloque 20, aquí la linea en cuestión:


    print c.most_common()[:20]

El siguiente Bloque es mas interesante, nos permite visualizar los datos en una tabla para tener mejor percepción ademas los ordena 😀 de mayor a menor, podemos visualizar como para cada etiqueta tenemos 1 dato que vayamos agregando no sin antes contar con la librería Counter, Y a ti que se te ocurre hacer con estos datos 😀

Bueno a mi se me ocurrió que no me interesaban los datos con menos de 4 caracteres  y le coloque un condicional sencillo así:


for item in [words, screen_names, hashtags]:

    for palabra in item:
        if len(palabra) >= 4 :
            frecuencia[palabra] = frecuencia.get(palabra,0)+1 #esto nos cuenta todas las palabras
            
            
    print frecuencia
    print "  ############  "
    print "  ############  "
    print "  ############  "
    print "  ############  "



    

Que es lo que hice, simple crear un nuevo diccionario para imprimir en un diccionario las palabras que tengan mas de 4 caracteres y los agregue a un diccionario, con este mismo diccionario voy a imprimir lo que necesito, ojo pude usar el otro bloque que ya tenia pero me parece mas fácil de explicar así, puedes correr el siguiente programa y ver la salida(en la otra entrada):


for item in [words, screen_names, hashtags]:
    frecuencia = {}
    coleccion = {}
    lista_nueva=[]
    for palabra in item:
        if len(palabra) >= 4 :
	  frecuencia[palabra] = frecuencia.get(palabra,0)+1 #esto nos cuenta todas las palabras
	  lista_nueva.append(palabra)
    c = Counter(lista_nueva)
    print c.most_common()[:10]    
    print "  ############  "
    print "  ############  "    
    

    coleccion = c.most_common()[:10] 
    frecuencia_10 = len(coleccion)
    i = 0
    diccionario = dict()
    for i in range(0, frecuencia_10):
        key = coleccion[i][0]
        value = coleccion[i][1]
        diccionario[key] = value
     
    print diccionario


    t = PrettyTable(['key', 'value'])
    for key, val in diccionario.items():
        t.add_row([key, val])
    print t
            
            
    print "  ############  "
    print "  ############  "
    print "  ############  "
    print "  ############  "



    

Estaba tratando de hacer lo mas sencillo posible el código pasando por la librería operator hasta prettytables, pero me di cuenta que era mejor crear todo de nuevo o mejor dicho hacerlo lo mas sencillo pero largo posible, hoy no voy a comentar el código incluso falta colocarle las etiquetas al prettytable pero lo haré el lunes, ya a partir de ahora a descansar 😀

Fíjate que hay un solo ciclo FOR y para la siguiente entrada de la serie voy a dividirlos, incluso no se si la parte del prettytable quedara así, ya que a pesar de tener las 10 palabras mas usadas en cada Diccionario no están ordenados :S

Hasta la Próxima Feliz fin de Semana. Que Dios les Bendiga y le deje ver su Gloria en cada momento de Sus Vidas…