Manipuler de gros fichiers en ayant peu de mémoire vive

SAS a une gestion très poussée de la mémoire, cet outil propriétaire permet de manipuler des bases de données de très grande taille et utilise la mémoire vive ainsi que le disque dur comme espace de travail, or cet outil n'est pas toujours disponible dans les petites structures et présente un coût non négligeable en licence.

R est un outil puissant de modélisation, mais dans le domaine du datamanagement il a un certain nombre de faiblesses : la taille des tables est limitée par la taille de la mémoire vive, les modules complémentaires de R qui facilitent le chargement de grosses tables ne permettent pas d'accéder à l'ensemble des librairies de modélisation.

Pour la partie modélisation, il semble difficile de s'astreindre des contraintes en mémoire vive, on utilisera volontiers des technologies cloud telles qu' Amazon EC2. Pour le datamanagement, il est possible de réaliser la plupart des manipulations de fichier avec des ressources très faibles avec PostgreSQL ou le langage de programmation PYTHON.

1.PostgreSQL

PostgreSQL est un système de gestion de base de données gratuit et très puissant, l'installation est très simple et permet de charger et manipuler des tables de grandes tailles.

Par le passé ayant déjà utilisé des bases de données sur des outils limités tels que Access je constate que la mise en place de PostgreSQL aurait permis à de nombreuses structures de gagner en rapidité et en optimisation des traitements.

Lors d'installation, il faut créer un utilisateur

Lancement de postgres : sudo -i -u postgres puis psql.

Commande base

Lister les tables : \d

Lister les colonnes d'une table : \d nom_de_la_table

Effacer table : drop table nom_de_la_table;

Création de la table et de ces variables

CREATE TABLE TRAIN (ID BIGINT PRIMARY KEY,TITLE TEXT,BODY TEXT,TAGS TEXT);

Importer un fichier csv dans la table TRAIN

COPY TRAIN FROM '/home/alfard/Documents/Kaggle/Facebook2/Train.csv' csv header;

Une fois la table importée on peut réaliser les traitements en utilisant le langage SQL.

Exporter une table en fichier csv

COPY matable TO '/root/pg/extraction.csv' WITH CSV;

2.Python

Python est un langage de plus en plus en vogue dans le monde de la data, il est simple à apprendre, dispose de plus en plus de librairies spécialisées et a reçu récemment un soutient financier de près de 3 millions de dollars de la DARPA.

Il est possible avec Python de charger un fichier ligne et par ligne, d'y appliquer des traitements et de l'enregistrer ligne par ligne, la consommation en mémoire vive est alors très faible.

#A noter sur python, on compte à partir de 0 et non de 1

import pandas as pd
import numpy as np
import csv


f = open('/home/alfard/Documents/Kaggle/Facebook2/Train.csv',"rb")
fw= open('/home/alfard/Documents/Kaggle/Facebook2/TrainClean.csv',"w")

 
fileopen = csv.reader(f,delimiter=',', quotechar='"')
filewrite = csv.writer(fw,delimiter=',', quotechar='"')

#Mise en place d'un compteur pour connaître le nombre de ligne traitées 
p=0
for row in fileopen:
    #Exemple de traitement de caractère
    for i in range(len(stopwords)):
        
        row[1] = row[1].lower()
        row[1] = row[1].replace(stopwords[i],' ')
        row[1] = " ".join(row[1].split())
        

        #Ecriture du résultat du traitement dans le fichier TrainClean.csv       
    filewrite.writerow([row[1],row[3]])
    p=p+1
    print p
        # row[1],row[3] signifie que je copie la 2e et le 4e élement de la ligne traitée,
        # à la fin de traitement, l'ensemble des éléments de la ligne constituera une colonne 
        # CAD la 2e colonne et la 4e colonne 
        

#Obligatoire pour réaliser l'écriture du csv
f.close()
fw.close()