miércoles, 14 de mayo de 2014

Python

Estoy muy contenta de mi código de python hoy, así que aprovechando la circunstancia de hoy (que es miércoles, que no he aprendido nada en clase, que me he pasado 4 horas programando, y noticia!! he conseguido lo que quería!!!!), voy a compartirlo. Porque soy así. Egoísta, pero menos que el resto.

Y porque soy más chula que un ocho, voy hasta a explicarlo. Lo que no hacen en mi mierda de máster con la programación, lo que he tenido que aprender solita (y creedme, ha sido una puta basura y el casi peor sentimiento de mi vida).

Joder, me tendrían que contratar a mi de profe y no a los superinvestigadoresquenosabenenseñarnilesimportaunamierda que tenemos.


PRIMERO, Y MUY IMPORTANTE
que aunque sea de lo primero que nos enseñaron, no fue de lo primero que aprendí ni mucho menos. De hecho lo he tenido que reaprender 3 veces y todavía no lo tengo claro por lo que parece, porque no lo he hecho ni a la primera ni a la segunda hoy... pero aquí va:

abrir el archivo de texto y leerlo!! y además lo parto en líneas, que es esdrújula.
De hecho abro dos diferentes: uno para Obama y otro para McCain.

obama = (open("obama.txt", 'rU').read().split("\n"))
mccain = (open("mccain.txt", "rU").read().split("\n"))

No he explicado de qué trata mi programa. Tengo un montón de datos de un análisis que hemos hecho de los gestos y las palabras del primer debate presidencial no se qué no se qué entre Obama y McCain. En estos datos están todos los gestos que hacen a lo largo del vídeo, cómo son, cuánto duran, etc. Una patraña. Y queremos sacar estadísticas de esto, en resumen.

El problema de esta mierda de datos es que son una mierda, no están organizados de ninguna manera, así que tengo que extraerlos de forma que se pueda trabajar con ellos. Necesito:

1- que cada palabra sea interpretada como una palabra (joder, es que lo interpretaba por caracteres, nunca he visto cosa igual, puto Anvil...)

def tokenize(text):
    lista = []
    for number in range(len(text)):
        tokens = split[number].split(" ")
        lista.append(tokens)
    return lista

Así que hago una función en la que creo una lista vacía. Que voy a rellenar con: las palabras por ejemplo "anvil", "es", "una", "mierda". 4 palabras, sí. Para conseguir que separe entre palabras y no caracteres lo único que había que hacer era decirle que volviera a partir lo que estaba dentro de cada línea cuando encontrara un espacio en blanco = " ". Y que haga eso en un loop las veces que le he dicho, que son el número de líneas que tiene el texto. Así uno por cada lista, y el programa, que es muy listo, va agregando una por una a mi lista vacía. Y eso es lo que guarda mi función.

Ya me perdonaréis por mi mezcla chunga de inglés y español, pero es más confuso para mí que para vosotros, no os preocupéis.

tokenized_obama = tokenize(obama)
tokenized_mccain = tokenize(mccain)

Este paso no es necesario. Pero es más claro. Simplemente he llamado a mi querida función y le he puesto un nombre a todo eso. Y luego lo mismo para el señor McCain, que no iba a ser menos.

def success(text):
    for frase in text:
        for word in frase:
             if word == "Smile":
                 print frase[1], frase[2], float(frase[2]) - float(frase[1])
                 duracion = (float(frase[2]) - float(frase[1]))
                 todos.append(duracion)
    return todos

Y otra función. Espero haberla copiado bien, porque he cambiado los nombres de las variables y a lo mejor la he liado. Lo siento, no tengo ganas de comprobar que funcione todavía. Pero la explicación es la siguiente: he vuelto a crear otro loop y otro loop que viene a decir, en el texto me coges cada frase, y de cada frase, vas a mirar cada palabra (= "puto", "anvil") y si una de esas palabras es la bella palabra "Smile", lo que vas a hacer es imprimirme la palabra que en la frase está en la posición 1 (que viene a ser la 2, no tiene ningún sentido pero al final uno se aclara, esto son cosas de Python) y después la 2 (que viene a ser ... la 3!), y para más inri, a la izquierda me pones otro número que va a ser la segunda palabra -que es un número- (la 3) menos la primera -que es otro número- (la 2).

Lo que ha pasado es que he restado el segundo en el que acaba el gesto por el segundo en el que empieza para conseguir la duración! Las matemáticas sirven para algo!! Que flipe.

Y además, hago una variable que se llama duración. Y la variable viene a ser esta duración del gesto. Sin más. Lo añadimos de nuevo a la lista "todos", qué creatividad por dios para escribir nombres, que me den un premio o algo.

print success(obama)
print success(mccain)

imprimimos los resultados, para verlos, más que otra cosa. Que es para lo que me he pasao 4 horas haciendo este programa.

Y MIS ESTADISTICAS:

print numpy.mean
print numpy.std
print numpy.var
print sum

<-- hay que ponerle el success(obama) y (mccain) , para que os liéis más

Y esto son tonterías que he aprendido en una asignatura que era muy chunga muy chunga, dónde había unos requisitos muy chungos, pues yo aprendí lo que se aprende en bachillerato o 1º de carrera de informática o algo así: a sacar la media, la deviación estándar, la varianza, y hasta a sumar!!!! (quién sabe sumar hoy en día, eh? Pues PYTHON!!!

GRACIAS

No hay comentarios:

Publicar un comentario