Nuevos proyectos y Python Toolbox 1

Hace ya unas semanas que no escribo nada y no me gusta. Este blog me permite poner en orden mis ideas y nuevos conocimientos y, la verdad, creo que me resultaba super útil, así que voy a intentar volver a escribir con regularidad. La razón por la que he dejado de escribir estas últimas semanas ha sido que en el trabajo me han asignado un nuevo proyecto y estaba a tope.

Nuevo proyecto: creación de datasets

En este nuevo proyecto que me han asignado estoy creando automáticamente datasets para lueg entrenar un sistema de extracción de intenciones. El objetivo es saber qué está pidiendo el usuario. En concreto, me centro en intenciones en el dominio de soporte informático (IT). Por ejemplo: ¿Quiere que le cambien el portátil? ¿No puede conectarse a internet? ¿Tiene un problema con su teclado?

Pero, antes de entrenar, lo que estamos haciendo es crear un dataset de posibles preguntas que puede hacer el usuario para pedir/preguntar todas esas cosas. Para crearlo estoy usando Chatito, una herramienta de código abierto, que genera conjuntos de datos (datasets) que luego podremos usar para entrenar el sistema.

El input de Chatito son nuestros posibles patrones, es decir, las posibles frases que el usuario puede usar para plantear esos problemas/peticiones al servicio técnico. El output son una serie de documentos JSON que pueden estar en formato RASA NLU, Flair, LUIS o snips NLU. En nuestro caso, vamos a trabajar con RASA NLU, así que cacharrear con este framework está ya entre mis deberes.

Python toolbox 1

Aparte del proyecto que comento, hoy continúo mi proceso de aprendizaje con DataCamp, con el curso de Python toolbox 1. Mi objetivo es completar los 4 cursos de Python que eran requisito del curso Natural Language Processing Fundamentals with Python, también de esta misma plataforma.

Este curso está compuesto de 3 módulos. El primero está dedicado a escribir tus propias funciones. Como antes, en algunos de los módulos de los cursos anteriores, ya sé cómo se hace, pero siempre aprendo algo nuevo y más dirigido a la ciencia de datos, no en general como en otros cursos que hice en el pasado.

Qué he aprendido hoy
  • Definir una función propia con un parámetro y devolver (return) un valor (vídeo 1)
def square(value) # function header with a parameter "value". Signature of the function
    new_value = value ** 2    
    return(new_value)

valor = square(4)  ## así llamamos a la función, usando un argumento concreto, en este caso 4.
print(valor)
  • Definir una función propia con más de un parámetro (vídeo 2)
def square(value1, value2)
    new_value = value1 ** value2
    return(new_value)

valor = square(4, 2)
print(valor)
  • Primeras nociones de tuplas: Son similares a las listas ya que pueden contener distintos valores, pero son inmutables, es decir, una vez creadas no podremos cambiar sus valores. Las tuplas se construyen con los paréntesis. (Recuerdo: los diccionarios los creábamos con {} y las listas con [] )
numeros_pares = (2, 4, 6) ## creamos una tupla

a, b, c = numeros_pares ## empaquetamos cada elemento en una variable

numeros_pares[1]  ## accede al segundo elemento de la tupla
print(numeros_pares) ## los imprimirá todos en pantalla

Y, hasta aquí llegamos por hoy (50% del primer módulo hecho), que tengo que volver al proyecto!

Acabando Python intermedio

Pues, tal y como digo en el título, hoy voy a intentar acabar por fin el curso intermedio de Python para Ciencia de Datos de DataCamp. Sólo me queda el último módulo: Hacker Statistics! 😀

Random Generators

Podemos generar números aleatorios con un submódulo del módulo Numpy (por eso lo llamamos con la notación del punto. Dentro de este subpaquete también habrá otras funciones como

  • seed()
  • rand(): por defecto, genera un número decimal aleatorio entre 0 y 1.
  • randint(): general números enteros aleatorios.
import numpy as np

np.random.rand()   # esto genera un número pseudo-aleatorio

coin = np.random.radint(0,2) # esto genera un número entero aleatorio (0 o 1). El dos no está incluido.

# simulación de un dado
dice = np.random.randint(1,7)

Concepto de Random Walk

max(): nos devuelve el mayor de dos argumentos.

np.transpose()

¡Acabado el curso!

El siguiente paso es el Python Data Science Toolbox (1). Este, junto con su segunda parte, completarán los prerequisitos exigidos para el curso de Procesamiento de Lenguaje Natural Básico con Python. ¡Qué ganas de seguir progresando, la verdad! 🙂

Día 9: Pandas

Continúo con el curso de Python intermedio para Ciencia de Datos.

DataFrame es uno de las estrucutras de datos más populares dentro de Pandas. Se trata, básicamente, de una tabla donde podemos indicar el nombre de las columnas y las filas y, si queremos, podemos importarla desde un documento CSV (comma separated values). Para importar los datos desde un CSV:

pd.read_csv('path to the file')

Al igual que las arrays de Numpy, los datos de una estructura de datos de Pandas, pueden contener elementos de distintos tipos (string, bool, etc.). Para acceder a los distintos elementos usaremos también los corchetes [].

iloc() accederá a las filas o las columnas del documento especificando el índice de esa fila o columna.

loc() accederá a las filas o las columnas del documento especificando la etiqueta de esa fila o columna.

¡Hoy he acabado este módulo! Sólo me quedan 3 más y acabo el curso!! 😀

Día 8: MatPlotLib

Ayer empecé un poquito con el curso intermedio de Python para Ciencia de Datos de DataCamp y hoy he continuado.

He acabado el primer módulo, que habla de la librería MatPlotLib. Con ella podemos crear diferentes tipos de gráficos: histogramas, scatterplot, etc. También nos enseñan cómo ponerlo bonito, cambiando los colores, los tamaños, poniendo rótulos, etc.

Continúo con el módulo dos, dedicado a los diccionarios y la librería Pandas (otra de las que están pidiendo actualmente en casi todos los puestos a los que aplico!). Básicamente, lo que hace Pandas es crear documentos tabulares con datos. Incluso podemos importarlos de un documento CSV. Creo que esto funcionará bien para hacer algunas pruebas con word2vec (creo que probaré este tutorial)

Día 5: vuelta a los básicos

Hoy tenía muchas ganas de continuar con el siguiente módulo de «NLP fundamentals with Python«. Sin embargo, he visto que en la descripción de este curso dicen que deberías haber hecho los siguientes cursos como prerequisitos:

  • Introducción a Python
  • Python intermedio para Data Science
  • Python Data Science Toolbox 1
  • Python Data Science Toolbox 2

Vamos, que te empapes de Python y luego hagas cosas más específicas. Es cierto, que ya conozco Python (de hecho, he podido seguir bien el primer módulo), pero he decidido que esta vez voy a hacerlo bien y en orden, así que esta tarde me he puesto a hacer los cursos que son prerequisitos de este otro.

He empezado con Introduction to Python, que tiene 4 módulos:

  • Python Basics: completado. Muy muy básico, lo he hecho en unos 20 minutos. Generalidades, variables, print, tipos de datos.
  • Python Lists: completado. colecciones de valores de distintos tipos.
    • lista = [dato, dato, dato…].
    • Listas de listas.
    • Las listas en sí mismas son un tipo de dato (podemos acceder a él con type(list’s name), en concreto un compound data type.
    • Cómo acceder a los elementos de una lista: index (lista[index]) o slicing (list[start index:end index]). Ojo, el start index está incluido, pero el end index no. Si no añadimos un index de inicio, se sobreentiende que empieza desde cero. Si no añadimos el index de final, se sobreentiende que llega hasta el final (incluido).
    • Manipulación de listas (añadir, cambiar o eliminar elementos)
  • Functions and Packages
  • NumPy

La verdad es que, aunque muchas cosas ya las conocía (al menos del curso básico), está bien porque está muy orientado a Data Science, en concreto. He tardado 1 hora aprox. en completar los dos primeros módulos de Introduction to Python.

Finalmente, cotilleando un poco la web de Data Camp, he visto que en el área de community tienen también un montón de tutoriales. Además, aparte de los cursos hay también una serie de proyectos

Deberes

Acabar los módulos que me quedan de Introduction to Python para poder continuar con los otros tres también. ¡Me lo estoy pasando pipa, la verdad! 😀