Nathaly Alarcón
WiDSLaPaz
Published in
4 min readFeb 3, 2019

--

Resolviendo un reto de Kaggle desde Colab

La Datathon de Women in Data Science este año es un reto de clasificación, donde se busca aprender a identificar en imágenes satelitales de áreas tropicales la existencia ó no plantaciones de palma.

has_oilpalm =1 (Si en la imagen satelital existe plantaciones de palma aceitera)
has_oilpalm = 0 (Si en la imagen satelital no existe plantaciones de palma aceitera)

Empezaremos a analizar el dataset de la competencia desde Google Colab. La primera tarea es: Cargar el dataset en el entorno de Colab. Para ello existen varias opciones, en este caso haremos uso del API de Kaggle.

Comando de Kaggle para descargar el dataset a través del API.

Para hacer uso del API de Kaggle desde otro entorno, es necesario que descarguemos el API Key file de nuestra cuenta de usuario.

Ve a “My Account” y en la sección de “API” selecciona la opción “Create New API Token”.

Cuando selecciones la opción “Create New API Token” se descargará de manera automática el archivo: kaggle.json; Es requisito para el uso del API que este archivo vaya en la ruta: ~/.kaggle/kaggle.json .

Contenido del archivo kaggle.json

Empecemos con nuestro notebook en Colab. Inicialmente llamemos a las librerías básicas necesarias.

# Required libraries
import json
import zipfile
import os
import pandas as pd
from PIL import Image
import random

Definamos la ruta de la carpeta en la que trabajaremos. Para Colab la ruta es:

root_path = ‘/content’

Ahora crearemos el archivo kaggle.json. Es importante que en la siguiente celda, reemplaces tu username y token obtenido en los pasos previos.

!pip install kaggle
!mkdir ~/.kaggle
!touch ‘/root/.kaggle/kaggle.json’
###############################################
# IMPORTANTE
# Copia en la siguiente línea el contenido de tu archivo kaggle.json
api_token = {“username”:”username”,”key”:”TOKEN_HERE”}
###############################################
with open(‘/root/.kaggle/kaggle.json’, ‘w’) as file:
json.dump(api_token, file)
!chmod 600 /root/.kaggle/kaggle.json

Ya estamos listos para descargar el dataset en Colab.

!kaggle competitions download -c widsdatathon2019

Actualiza la sección de archivos de Colab y observa que el contenido del dataset ya se encuentra disponible en nuestro entorno.

Contenido del dataset de Kaggle en Colab

Ahora procedamos a descomprimir las carpetas que contienen las imágenes satelitales.

for file in os.listdir():
if file.endswith(‘.zip’):
zip_ref = zipfile.ZipFile(file, ‘r’)
zip_ref.extractall()
zip_ref.close()

¡Ya estamos listos para empezar con el análisis de los datos! :)

Empecemos analizando el archivo de traininglabels.csv :

df_training = pd.read_csv(root_path+’/traininglabels.csv’)
tr_nsamples = len(df_training)
print(“Nro de registros en el dataset de training: “, tr_nsamples)
df_training.head()
Contenido del archivo: traininglabels.csv

Ahora vamos a visualizar imágenes aleatorias del dataset en el notebook:

# Visualize random samples
n_sample = random.randint(0,(tr_nsamples — 1))
print(“Sample id:”, n_sample)print(df_training.iloc[n_sample])
Image.open(root_path+’/train_images/’+df_training.iloc[n_sample][‘image_id’])
Imágenes aleatorias del dataset. A la derecha la imagen contiene plantaciones de palma (has_oilpalm = 1). A la izquierda la imagen no contiene plantaciones de palma (has_oilpam = 0)

Dependiendo de la librería que usemos para entrenar nuestros modelos, en muchos casos será necesario separar las imágenes en función a las clases a las que pertenecen. Para ello crearemos una carpeta con el nombre de “training_ready” y en su interior vamos a crear una carpeta para cada clase (Recordemos que las clases son 0 y 1, dependiendo si contienen o no plantaciones de palma aceitera).

tr_path = root_path+’/training_ready’
tr_path_train_im = root_path+’/train_images’
os.makedirs(tr_path, exist_ok=True)for index, row in df_training.iterrows():
tr_class = row[‘has_oilpalm’]
tr_image = row[‘image_id’]
# Create the class folder if it doesn’t exists yet.
os.makedirs(tr_path+’/’+str(tr_class), exist_ok=True)
# Copy files
os.system(‘cp ‘+tr_path_train_im+’/’+tr_image+’ ‘+tr_path+’/’+str(tr_class)+’/’+tr_image)
Imágenes de training separadas en sus respectivos folders.

Y listo! tenemos todo lo necesario para empezar a entrenar nuestros modelos.

Te dejo el link al notebook en GitHub: https://github.com/nathalyAlarconT/WiDS_Datathon_2019/blob/master/WiDS_Datathon2019_BasicDataAnalysis.ipynb
Y el link del notebook en Colab:
https://colab.research.google.com/github/nathalyAlarconT/WiDS_Datathon_2019/blob/master/WiDS_Datathon2019_BasicDataAnalysis.ipynb
(Para que puedas ejecutar el notebook de Colab, guarda una nueva copia en tu Google Drive).

Lo bonito de ser parte de una comunidad, es que tienes la oportunidad de compartir conocimiento y aprender de una manera interactiva y divertida. Síguenos en nuestras redes sociales para que estés al tanto de nuestras actividades.

--

--

Nathaly Alarcón
WiDSLaPaz

I code in my sleep - ♡ I love Coffee ♡ - Data Scientist — Google Developer Expert in Machine Learning - Google Cloud Champion Innovator