Hackathon ENSAE / Statup / Cap Gemini - 2020/2021

Plusieurs fois reporté à cause de l’épidémie, il aura lieu en distanciel. Le hackathon est proposé et organisé par Cap Gemini (sponsor), ENSAE, Statup. Les données seront fournies au début de l’événement et doivent être détruites à la fin de l’événement. Site : Hackathon solidaire Capgemini - ENSAE.

Deux défis

Le cinquième hackathon de l’ENSAE se prépare à ouvrir ses portes du vendredi 9 au samedi 10 avril 2021. Toujours centré sur le machine Learning, il proposera deux challenges récoltés proposés par Cap Gemini.

Challenge machine learning

Proposé par Too Good To Go.

Challenge Deep Learning

Proposé par Sea Cleaner.

Soumettre

Via l’interface graphique. Suivre les instructions :

../_images/fa1.png ../_images/fa2.png ../_images/fa3.png

Le texte à soumettre inclut les champs suivant :

  • nom : ce que vous voulez

  • format : “df” (pour dataframe)

  • team : nom de l’équipe

  • project : “tgtg” ou “sea”

  • password : celui donné dans Discord

  • content : le contenu du DataFrame

import json
from io import StringIO

st = StringIO()
df.to_csv(st, index=False, line_terminator="\n")

data = {
    "name": "xavier",
    "format": "df",
    "team": "prof",
    "project": "test",
    "password": "password",
    "content": st.getvalue(),
}
print(json.dumps(data))

Il suffit de recopier le résultat. L’url et le mot de passe vous seront fournis. Ensuite, on vérifie que la soumission a été enregistrée.

../_images/fa4.png

Quelques scripts utiles

Quelques bouts de scripts utiles pour regarder les premiers éléments sans charger l’intégralité du fichier qui est conséquent (1M de ligne, > 30 colonnes).

# coding: utf-8
from pandas_streaming.df import StreamingDataFrame

sdf = StreamingDataFrame.read_csv("train.csv", dtype={'Département': str})
for df in sdf:
    print(df.head())
    print(df.head().T)
    break

print(sdf.shape)  # prend du temps car il faut parcourir tout le fichier

Pour stocker la base dans un fichier :epkg:`sqlite`.

import sqlite3
from pandas_streaming.df import StreamingDataFrame

sdf = StreamingDataFrame.read_csv("df_target.csv", dtype={'Département': str})
con = sqlite3.connect("tdtd2.db3")
for i, df in enumerate(sdf):
    print(i)
    df.to_sql(con=con, if_exists="append", name="tgtd")

con.close()

Script utilisés pour séparer train/test :

import pandas
from pandas_streaming.df import StreamingDataFrame

def train_test_iterator(train=True):
    sdf = StreamingDataFrame.read_csv("df_target.csv", dtype={'Département': str})

    for df in sdf:
        col = df['date'].apply(lambda s: s[:7])
        sel = col < "2020-05"
        if train:
            yield df[sel]
        else:
            yield df[~sel]

print("test")
sdf_test = StreamingDataFrame(lambda: train_test_iterator(False))
sdf_test.to_csv("test.csv", index=False, encoding='utf-8', line_terminator='\n')

dft = pandas.read_csv("test.csv").reset_index(drop=False)
dft.drop("target", axis=1).to_csv("test_features.csv", encoding='utf-8', line_terminator='\n')
dft[["index", "target"]].to_csv("test_target.csv", encoding='utf-8', line_terminator='\n')

print("train")
sdf_train = StreamingDataFrame(train_test_iterator)
sdf_train.to_csv("train.csv", index=False, encoding='utf-8', line_terminator='\n')

Example de soumission :

from io import StringIO
import json
import pprint
import requests
from ensae_projects.hackathon.random_answers import random_answers_2020_images

def submit_random(url, password, version):
    df = random_answers_2020_images()[:5]
    st = StringIO()
    df.to_csv(st, index=False, line_terminator="\n")

    data = {
      "name": "xavier",
      "format": "df",
      "team": "prof",
      "project": "test",
      "version": version,
      "content": st.getvalue(),
      "password": password
    }

    response = requests.post(url, json=data, verify=False)
    return response

url = "https://quelquechose:8798/"
password = "???"

response = submit_random(url + "submit/", password, "8")
pprint.pprint(response.json())

Vérifie que la soumission est bien passée :

from io import StringIO
import json
import pprint
import requests
from ensae_projects.hackathon.random_answers import random_answers_2020_images

def query(url, password, name):
    data = {
      "name": name,
      "password": password
    }

    response = requests.post(url, json=data, verify=False)
    return response

url = "https://quelquechose:8798/"
password = "???"

response = query(url + "query/", password, "xavier")
pprint.pprint(response.json())

Après la compétition

Quelques photos…

Agenda

Lieu : Cap Gemini

Vendredi 9 Avril

  • 14h00

Samedi 10 Avril

  • 15h30 - Présentation des résultats