Initiation à la programmation ENSAE 1A

seance7_numpy.tex

obtenir les données


import pyensae
file = pyensae.download_data("velib_vanves.zip", website = "xd")
print (file)   # affiche ['velib_vanves.txt']

aperçu des données


address	available_bike_stands	available_bikes	banking	bike_stands	bonus	contract_name	last_update	lat	lng	name	number	status	idr
112 RUE VERCINGETORIX - 75014 PARIS	65	2	0	67	0	Paris	15/07/2013 15:00	48,83425925	2,313391647	14029 - GERGOVIE VERCINGETORIX	14029	OPEN	669
112 RUE VERCINGETORIX - 75014 PARIS	65	2	0	67	0	Paris	15/07/2013 15:05	48,83425925	2,313391647	14029 - GERGOVIE VERCINGETORIX	14029	OPEN	1898
112 RUE VERCINGETORIX - 75014 PARIS	66	1	0	67	0	Paris	15/07/2013 15:10	48,83425925	2,313391647	14029 - GERGOVIE VERCINGETORIX	14029	OPEN	3127
112 RUE VERCINGETORIX - 75014 PARIS	66	1	0	67	0	Paris	15/07/2013 15:15	48,83425925	2,313391647	,.,

lecture des données avec pandas


import pandas
df = pandas.read_table(file, header = False, sep = "\t", decimal = ",")

accéder ou modifier une place de données


une_colonne = df.ix[:,"available_bikes"])

accéder ou modifier une place de données


mx_col = df["available_bikes"].max()      # maximum d'une colonne
mx_col = df.ix[:,"available_bikes"].max() # même maximum, autre écriture
mx = df.max()                             # maximum sur toutes les colonnes

décrire un dataframe


df.describe()

nombre de ligne d'un dataframe


len(df)

sous-ensemble d'un dataframe vérifiant une condition


zero =  df [ df["available_bikes"]==0 ]

ajouter deux colonnes


add = df["available_bikes"] + df["available_bike_stands"]

visualisation des données avec pandas


df = df.set_index("last_update")  # on identifie chaque ligne avec une date
import matplotlib.pyplot as plt   # module matplotblig
ts = df.ix[:,"available_bikes"]   # on extrait la série à dessiner
ts.plot()                         # on dessine
plt.show()                        # on affiche le dessin

sélection de deux colonnes


df2 = df.ix[:, ["last_update","available_bikes"]]

opérations avec les objets datetime


import datetime    
d = datetime.datetime.now()
print (d.weekday())
print (d.strftime("%H:%M"))
print (d.isocalendar())

exercice 1 : matrix de numpy


mat = numpy.matrix ( [ 0.0, 0.1, 0.3, 0.4 ] ).transpose()  # crée une matrice 4x1
print (mat [ 1:-1,:] )    # enlève la première et la dernière ligne
mat = mat + mat * 2.4     # fait des additions avec cette matrice

exercice 2 : conversion d'un DataFrame sous Excel


piv.to_excel("pivot.xlsx")  # cela nécessite le module openpyxl
# si celui n'est pas installé, il faut enregistré le fichier au format texte
piv.to_csv("pivot.txt", sep="\t")

exercice 2 : ajout de valeur NaN


piv.ix['4-16:00':,31] = numpy.NaN
# vous pouvez vérifier que sous Excel (en utilisant les lignes précédentes), 
# les cellules sont vides.

exercice 2 : autres fonctionnalités utiles


# on crée une matrice de type numpy.array
mx = numpy.array ( [ [ 10.0, 1.0], [2.0, 3.] ] )

# on calcule la moyenne de la première colonne
print ( numpy.average( mx[:,0] ))

# on remplace la première valeur par NaN
mx[0,0] = numpy.NaN

# on calcule la moyenne de la première colonne sans les valeurs NaN
print ( numpy.average( mx[~numpy.isnan(mx[:,0]),0]) )

# on utilise la fonction isnan car numpy.NaN != numpy.NaN est vrai
print ( numpy.NaN != numpy.NaN )  # aussi surprenant que cela soit

# on parcourt toutes les dates de la matrice obtenue après pivot :
for i,k in enumerate(piv.index) :
    print (i,k)