Pour ceux à l'aise en SQL, il peut être pertinent d'importer dans un premier temps le jeu de données au sein d'une base de données pour conduire une première phase d'exploration et de manipulation.

Une fois cette première phase réalisée, Python sera utilisé pour une deuxième phase d'analyse, l'exploitation et le rendu de la donnée.
  • Au sein Microsoft Windows
  • Au sein d’un environnement Linux ou Mac OS
    • j’opterai pour une base de données PostgreSQL
    • et pgAdmin 4 pour l’administrer et l’interroger.

Exemple sous Windows

Installation de Microsoft SQL Server et SSMS

Télécharger SQL Server 2017 Express Edition.

Lancez l’exécutable et suivez les instructions d’installation.

Suite à cette installation votre ordinateur aura besoin de redémarrer.

Une fois redémarré, dans la même langue que votre installation SQL Server téléchargez et installez SQL Server Management Studio.

Une fois installé, ouvrez SQL Server Management Studio (menu Démarrer > Microsoft SQL Server Tools 17 > Microsoft SQL Server Management Studio).

Une instance de Microsoft SQL Server Express devrait automatiquement être détectée et proposée à la connexion (dans le cas contraire Nom du serveur > Parcourir… > Moteur de base de données > DESKTOP-XXXXX).

Cliquez sur Connexion.

Importation des données en base de données

Créez une nouvelle base de données depuis l’Explorateur d’objets en faisant un clic droit sur le dossier Base de données.

Donnez lui un nom. et cliquez sur OK.

Faites un clic droit sur votre nouvelle base de données > Tâches > Importer des données…

Sélectionnez pour Source de données : Source du fichier plat.

Suivant

Comme nom de fichier, allez chercher via le bouton Parcourir… le fichier data.csv (sélectionnez le format de Fichiers CSV) préalablement téléchargé et décompressé.

Ouvrir

Assurez-vous que le champ Page de codes ait bien la valeur : 65001 (UTF-8).

Via l’onglet Avancé, modifiez uniquement le DataType de la colonne Statut opérationnel en chaîne Unicode [DT_WSTR].

Suivant

Destination : SQL Server Native Client 11.0

Suivant

Cliquez sur Modifier les mappages….

Modifiez le type de la colonne Statut opérationnel en nvarchar.

OK

Suivant

Terminer

Dans l’Explorateur d’objets, suite un dans l’Explorateur d’objets sur le nom de la base de données > Actualiser vous devriez voir apparaitre votre table : dbo.data.

Vous pouvez y vérifier les données par un clic droit sur le nom de la table > Sélectionner les 1000 première lignes.

Nos données ont bien été chargées mais les types ne sont pas optimaux.

Nous allons donc créer une nouvelle table bénéficiant des typages adaptés.

Faites un clic droit sur votre table > Générer un script de la table en tant que > CREATE To > Nouvelle fenêtre d’éditeur de requête.

Et modifiez ce dernier de la manière suivante (ici un shéma dédié a été créé).

USE [data-challenge]
GO

/****** Object:  Table [dbo].[data]    Script Date: 15/12/2018 10:25:00 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE SCHEMA BSPP
GO

CREATE TABLE [BSPP].[data](
	[Date] [Datetime] NULL,
	[Longitude] float NULL,
	[Latitude] float NULL,
	[Véhicule de secours] int NULL,
	[Famille de véhicule de secours] [varchar](50) NULL,
	[Statut opérationnel] [nvarchar](50) NULL,
	[Numéro Intervention] int NULL,
	[Type d'intervention] [varchar](50) NULL,
	[Disponibilité du moyen de secours] bit NULL,
	[Centre de secours] int NULL
) ON [PRIMARY]
GO

Insérez à votre nouvelle table les données correctement formatées.

SET DATEFORMAT ymd

INSERT INTO [BSPP].[data]
SELECT CONVERT(datetime, [Date], 121)
	,IIF([Longitude] NOT LIKE 'NULL', CAST([Longitude]  As float), NULL)
	,IIF([Latitude] NOT LIKE 'NULL', CAST([Latitude]  As float), NULL)
	,IIF([Véhicule de secours] NOT LIKE 'NULL', CAST([Véhicule de secours] As INT), NULL)
	,IIF([Famille de véhicule de secours] NOT LIKE 'NULL', [Famille de véhicule de secours], NULL)
	,IIF([Statut opérationnel] NOT LIKE 'NULL', [Statut opérationnel], NULL)
	,IIF([Numéro Intervention] NOT LIKE 'NULL', CAST([Numéro Intervention] As INT), NULL)
	,IIF([Type d'intervention] NOT LIKE 'NULL', [Type d'intervention], NULL) As [Type d'intervention]
	,IIF([Disponibilité du moyen de secours] NOT LIKE 'NULL', CAST([Disponibilité du moyen de secours] AS BIT), NULL)
	,IIF([Centre de secours] NOT LIKE 'NULL', CAST([Centre de secours] AS INT), NULL)
FROM [data-challenge].[dbo].[data] 

Vous pouvez désormais manipuler de manière optimale au sein de SQL Server Management Studio.

Interrogation de SQL Server à partir d’un Jupyter Notebook

Une fois votre première phase d’analyse et de manipulation au sein de SQL Server Management Studio réalisée, vous voudrez pouvoir requêter votre base de données Microsoft SQL Server à partir du Jupyter Notebook.

Pour interroger SQL Server en Python vous pouvez utiliser le package pymmsql (ce package distribué sous conda-forge n’est destiné qu’aux plateformes linux-64 et osx-64, optez donc pour celui distribué par anaconda).

conda install -c anaconda pymssql

Pour exécuter très simplement des requêtes SQL au sein d’un Jupyter Notebook vous pouvez utiliser le package ipython-sql.

conda install -c conda-forge ipython-sql
La possibilité de créer un environnement avec Anaconda pour ce package m'a posé des problèmes, j'ai donc utilisé l'environnement Python 3.7 par défaut.

Dorénavant au sein d’un Jupyter Notebook, vous pouvez saisir des requêtes SQL de la manière suivante :

Chaînes de connexion

  • sans identifiants
    %sql mssql+pyodbc://@serveur/base_de_donnees?driver=SQL+Server+Native+Client+11.0
    
  • avec identifiants
    %sql mssql+pyodbc://login_utilisateur:mot_de_passe@serveur/base_de_donnees?driver=SQL+Server+Native+Client+11.0
    

Accéder au challenge fast_forward