Trafic de données avec Python-pandas

1

Trafic de donn?es avec Python-pandas

Trafic de donn?es avec Python-pandas

R?sum?

L'objectif de ce tutoriel est d'introduire Python pour la pr?paration (data munging ou wrangling ou trafic) de donn?es massives, lorsqu'elles sont trop volumineuses pour la m?moire (RAM) d'un ordinateur. Cette ?tape est abord?e par l'initiation aux fonctionnalit?s de la librairie pandas et ? la classe DataFrame ; lire et ?crire des fichiers, g?rer une table de donn?es et les types des variables, ?chantillonner, discr?tiser, regrouper des modalit?s, description ?l?mentaires uni et bi-vari?es ; concat?nation et jointure de tables.

? Python pour Calcul Scientifique ? Trafic de Donn?es avec Python.Pandas ? Apprentissage Statistique avec Python.Scikit-learn ? Programmation ?l?mentaire en Python ? Sciences des donn?es avec Spark-MLlib

1 Introduction

1.1 Objectif

Le data munging ou wrangling (traduit ici par trafic) de donn?es est l'ensemble des op?rations permettant de passer de donn?es brutes ? une table (data frame) correcte et adapt?e aux objectifs ? atteindre par des m?thodes statistiques d'analyse, exploration, mod?lisation ou apprentissage.

En pr?sence de donn?es complexes, peu ou mal organis?es, pr?sentant des trous, trop massives pour tenir en m?moire... la qualit? de cette ?tape est fondamentale (garbage in garbage out) pour la bonne r?alisation d'une ?tude. Compte tenu de la diversit? des situations envisageables, il serait vain de vouloir en exposer tous les outils et techniques qui peuvent s'av?rer n?cessaires. T?chons n?anmoins de r?sumer les probl?mes qui peuvent ?tre rencontr?s.

Croissance du volume

Le volume des donn?es et sa croissance occasionnent sch?matiquement trois situations.

1. Le fichier initial des donn?es brutes peut ?tre charg? int?gralement en m?moire moyennant ?ventuellement de sauter quelques colonnes ou lignes du fichier (cf. section 3.1). C'est la situation courante, tout logiciel statistique peut r?aliser les traitements, R est ? favoriser mais, afin d'aborder la situation suivante de fa?on coh?rente, l'usage de Python peut se justifier.

C'est l'objet des sections 2 ? 6.

2. Le fichier initial est tr?s volumineux mais la table (DataFrame), qui r?sulte de quelques trafics (munging) appropri?s, tient en m?moire. Cette situations n?cessite : lecture, analyse, transformation, r?-?criture, s?quentielles du fichier ligne ? ligne ou par bloc. Il existe des astuces avec R mais il est pr?f?rable d'utiliser des outils plus adapt?s. Tout langage de programmation (java, c, perl, ruby...) peut ?tre utilis? pour ?crire le ou les programmes r?alisant ce travail. N?anmoins Python, et plus pr?cis?ment la librairie pandas, offrent un ensemble d'outils efficaces pour accomplir ces t?ches sans avoir ? r?-inventer la roue et r?-?crire tout un ensemble de fonctionnalit?s relativement basiques. Remarque : les proc?dures univariate et freq et l'?tape data de SAS sont adapt?es car elles ne chargent pas les donn?es en m?moire pour r?aliser des traitements rudimentaires. N?anmoins pour tout un tas de raisons trop longues ? exposer, notamment de co?t annuel de location, SAS perd r?guli?rement des parts de march? sur ce cr?neau.

Cette approche est introduite ci-dessous en section 7 et consiste ? ench?sser dans une m?me structure it?rative et s?quentielle les ?tapes pr?c?dentes des sections 2 ? 6.

3. Lorsque les donn?es, tr?s massives, sont archiv?es sur un syst?me de donn?es distribu?es (HDFS Hadoop), trafic et pr?traitement des donn?es doivent tenir compte de cet environnement. Si, en r?sultat, la table r?sultante est trop volumineuse, ? moins d'?chantillonnage, il ne sera pas possible de mettre en oeuvre des m?thodes statistiques et d'apprentissage avanc?es en utilisant R ou la librairie scikit-learn de Python. Noter n?anmoins que scikit-learn propose quelques m?thodes incr?mentales rudimentaires d'apprentissage. Pour pr?venir des temps d'ex?cu-

2

Trafic de donn?es avec Python-pandas

tions n?cessairement longs, il devient incontournable de mettre en oeuvre les technologies appropri?es de parall?lisation : Python / Spark / Hadoop et la librairie MLlib de Spark (ou plus r?centes !) pour parall?liser l'analyse de donn?es distribu?es.

C'est l'objet du tutoriel introduisant les fonctionnalit?s de Spark.

Quelques probl?mes

Liste non exhaustive des probl?mes pouvant ?tre rencontr?s et dont la r?solution n?cessite simultan?ment des comp?tences en Informatique, Statistique, Math?matiques et aussi "m?tier" du domaine de l'?tude.

? D?termination des "individus" ? "variables" (instances?features en langue informatique) de la table ? mettre en forme ? partir de bases de donn?es vari?es ; i.e. logs d'un site web, listes d'incidents, localisations...

? Donn?s atypiques (outliers) : correction, suppression, transformation des variables ou m?thode statistique robuste ?

? Variable qualitative avec beaucoup de modalit?s dont certaines tr?s peu fr?quentes : suppression, modalit? "autres", recodage al?atoire, regroupement "m?tier" ou m?thode tol?rante ?

? Distributions a-normales (log-normale, Poisson, multimodales...) et probl?mes d'h?t?rosc?dasticit? : transformation, discr?tisation ou m?thodes tol?rantes ?

? Donn?es manquantes : suppressions (ligne ou colonne), imputation ou m?thodes tol?rantes ?

? Repr?sentations (splines, Fourier, ondelettes) et recalage (time warping) de donn?es fonctionnelles.

? Repr?sentation de trajectoires, de chemins sur un graphe ? ? Choix d'une distance (quadratique, absolue, g?od?sique...) entre les objets

?tudi?s. ? ... Bien entendu les "bons" choix d?pendent directement de l'objectif poursuivi et des m?thodes mises en oeuvre par la suite. D'o? l'importance d'int?grer de fa?on pr?coce, d?s la planification du recueil des donn?es, les comp?tences n?cessaires au sein d'une ?quipe.

1.2 Fonctionnalit?s de pandas

La richesse des fonctionnalit?s de la librairie pandas est une des raisons, si ce n'est la principale, d'utiliser Python pour extraire, pr?parer, ?ventuellement analyser, des donn?es. En voici un bref aper?u. Objets : les classes Series et DataFrame ou table de donn?es. Lire, ?crire cr?ation et exportation de tables de donn?es ? partir de fichiers

textes (s?parateurs, .csv, format fixe, compress?s), binaires (HDF5 avec Pytable), HTML, XML, JSON, MongoDB, SQL... Gestion d'une table : s?lection des lignes, colonnes, transformations, r?organisation par niveau d'un facteur, discr?tisation de variables quantitatives, exclusion ou imputation ?l?mentaire de donn?es manquantes, permutation et ?chantillonnage al?atoire, variables indicatrices, cha?nes de caract?res... Statistiques ?l?mentaires uni et bivari?es, tri ? plat (nombre de modalit?s, de valeurs nulles, de valeurs manquantes...), graphiques associ?s, statistiques par groupe, d?tection ?l?mentaire de valeurs atypiques... Manipulation de tables : concat?nations, fusions, jointures, tri, gestion des types et formats...

1.3 R?f?rences

Ce tutoriel ?l?mentaire s'inspire largement du livre de r?f?rence (Mc Kinney, 2013)[1] et de la documentation en ligne ? consulter sans mod?ration. Cette documentation inclut ?galement des tutoriels ? ex?cuter pour compl?ter et approfondir la premi?re ?bauche d'un sujet relativement technique et qui peut prendre des tournures tr?s diverses en fonction de la qualit? et des types de donn?es trait?es.

1.4 Exemple

Les donn?es choisies pour illustrer ce tutoriel sont issues d'une comp?tition du site Kaggle : Titanic:Machine learnic from Disaster. Le concours est termin? mais les donn?es sont toujours disponibles sur le site avec des tutoriels utilisant Excel, Python ou R.

Une des raisons du drame, qui provoqua la mort de 1502 personnes sur les 2224 passagers et membres d'?quipage, fut le manque de ca-

3

Trafic de donn?es avec Python-pandas

nots de sauvetage. Il appara?t que les chances de survie d?pendaient de diff?rents facteurs (sexe, ?ge, classe...). Le but du concours est de construire un mod?le de pr?vision (classification supervis?e) de survie en fonction de ces facteurs. Les donn?es sont compos?es d'un ?chantillon d'apprentissage (891) et d'un ?chantillon test (418) chacun d?crit par 11 variables dont la premi?re indiquant la survie ou non lors du naufrage.

2.2 DataFrame

Cette classe est proche de celle du m?me nom dans le langage R, il s'agit d'associer avec le m?me index de lignes des colonnes ou variables de types diff?rents (entier, r?el, bool?en, caract?re). C'est un tableau bi-dimensionnel avec des index de lignes et de colonnes mais il peut ?galement ?tre vu comme une liste de Series partageant le m?me index. L'index de colonne (noms des variables) est un objet de type dict (dictionnaire). C'est la classe qui sera principalement utilis?e dans ce tutoriel.

VARIABLE DESCRIPTIONS:

survival

Survival

(0 = No; 1 = Yes)

pclass

Passenger Class

(1 = 1st; 2 = 2nd; 3 = 3rd)

name

Name

sex

Sex

age

Age

sibsp

Number of Siblings/Spouses Aboard

parch

Number of Parents/Children Aboard

ticket

Ticket Number

fare

Passenger Fare

cabin

Cabin

embarked

Port of Embarkation

(C = Cherbourg; Q = Queenstown; S = Southampton)

2 Les types Series et DataFrame

De m?me que la librairie Numpy introduit le type array indispensable ? la manipulation de matrices en calcul scientifique, celle pandas introduit les classes Series (s?ries chronologiques) et DataFrame ou table de donn?es indispensables en statistique.

2.1 Series

La classe Series est l'association de deux arrays unidimensionnels. Le premier est un ensemble de valeurs index?es par le 2?me qui est souvent une s?rie temporelle. Ce type est introduit principalement pour des applications en ?conom?trie et Finance o? Python est largement utilis?.

Comme pour le tutoriel pr?c?dent qui est un pr?requis indispensable : Python pour Calcul Scientifique, ex?cuter les lignes de code une ? une ou plut?t r?sultat par r?sultat, dans un calepin IPython ou Jupyter.

# Exemple de data frame import pandas as pd data = {"state": ["Ohio", "Ohio", "Ohio",

"Nevada", "Nevada"], "year": [2000, 2001, 2002, 2001, 2002], "pop": [1.5, 1.7, 3.6, 2.4, 2.9]} frame = pd.DataFrame(data) # ordre des colonnes pd.DataFrame(data, columns=["year", "state", "pop"]) # index des lignes et valeurs manquantes (NaN) frame2=pd.DataFrame(data, columns=["year", "state", "pop", "debt"], index=["one", "two", "three", "four", "five"]) # liste des colonnes frame.columns # valeurs d'une colonnes frame["state"] frame.year # "imputation" frame2["debt"] = 16.5 frame2 # cr?er une variable frame2["eastern"] = frame2.state == "Ohio" frame2

4

Trafic de donn?es avec Python-pandas

# supprimer une variable del frame2[u"eastern"] frame2.columns

2.3 Index

3.1 Syntaxe

L'exemple de base est donn? pour lire un fichier au format .csv dont les valeurs sont s?par?es par des "," et dont la premi?re ligne contient le nom des variables.

Les index peuvent ?tre d?finis par embo?tement et beaucoup d'autres fonctionnalit?s sur la gestion des index sont d?crites par Mac Kinney (2013)[1] (chapitre 5) :

append nouvel index par concat?nation,

diff diff?rence ensembliste,

intersection intersection ensembliste,

# importation import pandas as pd data=pd.read_csv("fichier.csv") # ou encore de fa?on ?quivalente data=pd.read_table("fichier.csv", sep=",") # qui utilise la tabulation comme # s?parateur par d?faut

union union ensembliste isin vrai si la valeur est dans la liste, delete suppression de l'index i, drop suppression d'une valeur d'index, is_monotonic vrai si les valeurs sont croissantes, is_unique vrai si toutes les valeurs sont diff?rentes, unique tableau des valeurs uniques de l'index.

Il est important de conna?tre la liste des possibilit?s et options offertes par cette simple commande. Voici les principales ci-dessous et un lien ? la liste compl?te.

path chemin ou non du fichier ou URL.

sep d?limiteur comme , ; | \t ou \s+ pour un nombre variable d'espaces.

header d?faut 0, la premi?re ligne contient le nom des variables ; si None les noms sont g?n?r?s ou d?finis par ailleurs.

3 Lire, ?crire des tables de donn?es

Pandas offre des outils efficaces pour lire ?crire des fichiers selon diff?rents formats (csv, texte, fixe, compress?, xml, html, hdf5) ou interagir avec des bases de donn?es SQL, MongoDB, des APIs web. Ce document se contente de d?crire les fonctions les plus utiles read_csv et read_table pour lire des fichiers textes et g?n?rer un objet de type DataFrame.

En principe ces fonctions font appel ? un code ?crit en C dont tr?s rapide ? l'ex?cution sauf pour l'emploi de certaines options (skip_footer, sep autre qu'un seul caract?re), ? ?viter, qui provoquent une ex?cution en Python (engine=Python).

index_col noms ou num?ros de colonnes d?finissant les index de lignes, index pouvant ?tre hi?rarchis?s comme les facteurs d'un plan d'exp?rience.

names si header=None, liste des noms des variables.

nrows utile pour tester et limiter le nombre de ligne ? lire.

skiprow liste de lignes ? sauter en lecture.

skip_footer nombre de lignes ? sauter en fin de fichier.

na_values d?finition du ou des codes signalant des valeurs manquantes. Ils peuvent ?tre d?finis dans un dictionnaire pour associer variables et codes de valeurs manquantes sp?cifiques.

La r?ciproque pour l'?criture est obtenue par les commandes usecols s?lectionne une liste des variable ? lire pour ?viter de lire des

data.to_csv ou _table avec des options similaires.

champs ou variables volumineuses et inutiles.

5

Trafic de donn?es avec Python-pandas

skip_blank_lines ? True pour sauter les lignes blanches. converters appliquer une fonction ? une colonne ou variable. day_first par d?faut False, pour des dates fran?aises au format

7/06/2013. chunksize taille des morceaux ? lire it?rativement. verbose imprime des informations comme le nombre de valeurs man-

quantes des variables non num?riques. encoding type d'encodage comme "utf-8" ou "latin-1" thousand s?parateur des miliers : "." ou ",". Remarques :

? De nombreuses options de gestion des dates et s?ries ne sont pas cit?es. ? chunksize provoque la lecture d'un gros fichiers par morceaux de

m?me taille (nombre de lignes). Des fonctions (comptage, d?nombrement...) peuvent ensuite s'appliquer it?rativement sur les morceaux.

3.2 Exemple

Les donn?es du naufrage du Titanic illustrent l'utilisation de pandas. Elles sont directement lues ? partir de leur URL ou sinon les charger ici vers le r?pertoire de travail de Python.

# Importations import pandas as pd import numpy as np # tester la lecture path="" df = pd.read_csv(path+"titanic-train.csv",nrows=5) print(df) df.tail() # tout lire df = pd.read_csv(path+"titanic-train.csv") df.head() type(df) df.dtypes # Des variables sont inexploitables # Choisir les colonnes utiles

df=pd.read_csv(path+"titanic-train.csv", usecols=[1,2,4,5,6,7,9,11],nrows=5)

df.head()

? partir de la version 0.15, pandas, inclut un type category assez proche de celui factor de R. Il devrait normalement ?tre d?clar? dans un dictionnaire au moment par exemple de la lecture (dtype={"Surv":pd.Categorical...}) mais ce n'est pas le cas, c'est donc le type objet qui est d?clar? puis modifi?. Il est vivement recommand? de bien affecter les bons types ? chaque variable ne serait-ce que pour ?viter de faire des op?rations douteuses, par exemple arithm?tiques sur des codes de modalit?s.

df=pd.read_csv(path+"titanic-train.csv",skiprows=1, header=None,usecols=[1,2,4,5,9,11], names=["Surv","Classe","Genre","Age", "Prix","Port"],dtype={"Surv":object, "Classe":object,"Genre":object,"Port":object})

df.head() df.dtypes

Red?finition des bons types.

df["Surv"]=pd.Categorical(df["Surv"],ordered=False) df["Classe"]=pd.Categorical(df["Classe"],

ordered=False) df["Genre"]=pd.Categorical(df["Genre"],

ordered=False) df["Port"]=pd.Categorical(df["Port"],ordered=False) df.dtypes

Remarque : il est ?galement possible de tout lire avant de laisser "tomber" les variable inexploitables. C'est le r?le de la commande

df = df.drop(["Name", "Ticket", "Cabin"], axis=1)

3.3 ?chantillonnage simple

Comme dans R, le type DataFrame de Python est charg? en m?moire. Si, malgr? les options pr?c?dentes permettant de s?lectionner, les colonnes, les

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download

To fulfill the demand for quickly locating and searching documents.

It is intelligent file search solution for home and business.

Literature Lottery

Related searches