Machine Learning para todos: Datos para aprender

Paloma Recuero de los Santos    22 enero, 2020
chica estudia con ordenador

Cuando estás empezando en el mundo de la Ciencia de Datos y el aprendizaje automático, uno de las primeras preguntas que te haces es: ¿De dónde saco los datos para aprender?. Porque para entrenar algoritmos, necesito conjuntos de datos que cumplan determinados requisitos de volumen, estructura etc.

Empecemos por los repositorios de datos abiertos en la web. Lo más accesible, aunque, como veremos, pueden resultar demasiado complejos para un principiante.


1 Cargar los datos desde repositorios públicos en internet.

Hay muchos repositorios de datos disponibles en la web. Por ejemplo en Open Science Data Cloud, podemos encontrar petabytes de datos abiertos sobre genética, medio ambiente, imágenes por satélite etc.

También Amazon ofrecen datasets públicos con datos tan variados como trayectos en taxi en la ciudad de Nueva York, transacciones en la bolsa alemana, datos meteorológicos, datos sobre calidad del aire, química del suelo, genoma humano, población de aves, opiniones de clientes sobre productos, etc…

Por su parte, Google, ofrece un directorio de datos públicos en abierto, con interesantes conjuntos de datos publicados por el Banco Mundial, Eurostat, Naciones Unidas, instituciones nacionales de estadística de distintos países etc.

Por supuesto, las principales ciudades e instituciones de todo el mundo también ofrecen interesantes portales de datos en abierto. Por ejemplo, en este post, usamos un dataset sobre las salidas por rescate animal de los bomberos de Londres para experimentar con la herramienta de visualización PowerBI.  

En este otro, usamos datos sobre el uso del servicio público de bicicletas de Madrid, Bicimad para ver cómo se pueden depurar datos con Excel.

Estos repositorios son muy interesantes para llevar a cabo todo tipo de proyectos, pero…. ¿y si lo que quiero es algo mucho más sencillo? Encontrar datos que ya estén de alguna manera filtrados de forma que pueda localizar fácilmente los más adecuados para realizar una prueba determinada. Por ejemplo, un problema de clasificación con el que quiero probar la técnica de regresión logística.

Para ello, tendremos dos opciones: los repositorios de aprendizaje y pruebas, y los conocidos como “toy datasets” que vienen integrados en librerías.


2. Repositorios de datos para aprender.

Algunos de los repositorios más conocidos pertenecen a Universidades. Por ejemplo, el repositorio Machine Learning UCI.del  Center for Machine Learning and Intelligent Systems de la Universidad de California, tiene casi 500 datasets clasificados según el tipo de tarea para el que son más adecuados(clasificación, regresión, clustering u otros), el tipo de atributo (categórico, numérico o mixto), el tipo de dato (texto, una variable, multivariable, series temporales etc), el número de instancias, atributos, tipo de formato, área de conocimiento etc. Por tanto, es muy fácil localizar conjuntos de datos adecuados para una tarea concreta.

En el experimento que hicimos sobre clasificación de flores usando la técnica de análisis de componentes principales (PCA), por ejemplo, nosotros utilizamos este repositorio

Aunque no podamos usar filtros para seleccionarlos, la selección de datasets ofrecida por ¡sorpresa!, Wikipedia, nos ofrece una interesante recopilación de conjuntos de datos citados en revistas científicas (con revisión por pares), y convenientemente clasificados.

La Universidad de Standford también nos ofrece otro repositorio interesante, SNAP, con datos de todo tipo, aunque no podemos filtrarlo como en el caso de la UCI.

Otra de las opciones más interesante, cuando estás aprendiendo es el repositorio de datasets de Kaggle. Kaggle es, definitivamente, uno de los sitios donde todo futuro Data Scientist debe estar. En el experimento que hicimos sobre cómo usar Azure Machine Learning Studio en un problema de clasificación (¿Sobrevivirán?), descargamos el conocidísimo dataset de los pasajeros del Titanic desde Kaggle.

Además de los datos, en Kaggle podemos encontrar muchos ejemplos para aprender, una comunidad con la que compartir tus experimentos, consultar dudas, etc. y estimulantes competiciones.

Una precaución que hay que tener, es que a veces, los datasets son versiones reducidas de otros más amplios, e igual no nos interesa descargarlos de ahí. Por ejemplo, en nuestro experimento sobre regresión logística (que, con la broma de publicarlo por San Valentín, convertimos en un “predictor de infidelidad”), no descargamos el dataset affairs desde Kaggle por tratarse de una versión reducida. En su lugar, lo hicimos a partir de la librería Statsmodel, como veremos en el siguiente punto.


3 “Toy datasets” en las librerías.

Algunas librerías de Phyton como Seaborn, Sklearn o Statsmodels traen “de serie” datasets de prueba. Esto nos facilita mucho la vida, ya que resulta muy sencillo cargar una de ellas en un dataframe de pandas y empezar a trabajar.

3.1 Seaborn

Seaborn, por ejemplo, se usa para hacer gráficos y visualizaciones de datos más atractivas. Pero también incorpora 13 ejemplos de estos “toy datasets” o “datasets para jugar”. Podemos ver cuáles son usando la función get_dataset_names():  

import seaborn as sns
sns.get_dataset_names()

Cargarlos en un dataset pandas es muy sencillo con la función load.dataset()

df_planets = sns.load_dataset('planets')
df_planets.head()

3.2 Scikit-learn

Sin embargo, esta opción no se usa mucho porque esos datasets apenas tienen información adicional a los datos. Los 7 datasets precargados en Sci-kit-learn sí que resultan algo más completos. Podemos encontrar algunos tan conocidos como el del precio de la vivienda en Boston, el de clasificación de lirios, el de vinos, o los datos sobre diagnóstico de cancer de mama en Wiscosin. No obstante, son demasiado pequeños para asemejarse a datos reales. Por esto, es más habitual usar las funciones generadoras de datos que ofrece esta librería (de las que hablaremos en el último punto), que los datasets precargados.

En cualquier caso, la forma de acceder a ellos y cargarlo en un dataset pandas también resulta muy sencilla:

from sklearn.datasets import load_boston
boston = load_boston()
data = boston.data
column_names = boston.feature_names 
import pandas as pd
df = pd.DataFrame(boston.data, boston.feature_names)    

3.3 Statsmodel

Hemos dejado para el final la librería más interesante, en cuanto a datasets precargados se refiere. La librería Statsmodel es la librería de modelado estadístico. Permite a los usuarios explorar datos, hacer estimaciones de modelos estadísticos y realizar test estadísticos.

Esta librería ofrece dos tipos de datasets (para R y para Python) a los que se puede acceder fácilmente deste el módulo statsmodels.api.datasets. Los datasets disponibles para trabajar en Python son los siguientes:

Conjuntos de datos que se pueden cargar desde Staatsmodels.

Cada submódulo tiene un conjunto de metadatos que se puede consultar con los atributos con los atributos DESCRLONG yNOTE y que nos ofrecen información detallada sobre ese conjunto de datos en particular. Si conocemos el nombre del submódulo donde están los datos que nos interesan, resulta muy sencillo cargarlos en un dataframe de pandas:


import statsmodels.api as sm #Cargamos la librería
nile = sm.datasets.nile #Elegimos el dataset sobre las crecidas del Nilo

print(nile.DESCRLONG) #Para ver la descripción y características del dataset
sm.datasets.nile.load_pandas().data #Cargamos el dataset en un dataframe de pandas

En el experimento que mencionamos anteriormente sobre regresión logística, usamos el dataset “fair” para crear un “predictor de infidelidad” 😉

Puedes ver el experimento completo aquí:


4 Crear tu propio dataset

Cierto es que una de las alternativas es crear tu propio dataset, por ejemplo, usando la librería NumPy, el paquete fundamental para computo científico en Python. En Numpy podemos encontrar funciones que permiten simular variables discretas, continuas y categóricas, de manera aleatoria:

  • numpy.randint() -> Docs
  • numpy.uniform() -> Docs
  • numpy.choice() -> Docs

Podemos encontrar un ejemplo de cómo hacerlo aquí.

Como es habitual, tenemos más alternativas. Por ejemplo, en la librería Scikitlearn, que de hecho está construida sobre la librería NumPy, podemos encontrar una gran variedad que de módulos de alto nivel sobre ciencia e ingeniería que nos ofrecen todo tipo de funciones. Por ejemplo, para generar datasets aleatorios, podemos usar las funciones:

  • make_blobs -> Docs, para problemas de clustering
  • make_regression -> Docs, para problemas de regresión
  • make_classification -> Docs, para problemas de clasificación

Por ejemplo, si lo que queremos es generar un conjunto de datos aleatorios para un problema de clasificación binaria (2 clases) con 100 muestras, 5 características (1 de ellas redundante), y un cluster por ejecución, la sintaxis sería la siguiente:

X, y = datasets.make_classification(n_samples=100, n_features=5, n_informative=4, n_redundant=1, n_classes=2, n_clusters_per_class=1)

No obstante, si no encuentras en las librerías de Python el tipo de “generador” de datos que necesitas, puedes crear un propio. Por ejemplo, a partir de la función randint incluida en el módulo random de Numpy.

Como veis, por datos, no será. Os animamos a hacer vuestros propios experimentos siguiendo nuestros ejemplos, o a usarlos como guía trabajando con otros datasets que sean de vuestro interés-. En nuestra sección “Tutoriales IA Big Data” podréis encontrar estos ejemplos y mucho más.

Para mantenerte al día con LUCA visita nuestra página web,  suscríbete a LUCA Data Speaks o síguenos en TwitterLinkedIn YouTube

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *