.. _l-hackathon-2020:
Hackathon ENSAE / Statup / Cap Gemini - 2020/2021
=================================================
.. index:: Cap Gemini, ENSAE, Hackathon, 2020, 2021
Plusieurs fois reporté à cause de l'épidémie,
il aura lieu en distanciel.
Le hackathon est proposé et organisé par :epkg:`Cap Gemini`
(sponsor), :epkg:`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
`_.
.. contents::
:local:
Deux défis
----------
Le cinquième hackathon de l':epkg:`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 :epkg:`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 :
.. image:: 2020/fa1.png
.. image:: 2020/fa2.png
.. image:: 2020/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.
.. image:: 2020/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())