0% ont trouvé ce document utile (0 vote)
10 vues17 pages

Introduction à la librairie Pandas

La librairie Pandas est essentielle pour l'importation et l'analyse des données en Data Science avec Python. Elle permet de créer des DataFrames pour représenter des données de manière structurée, facilitant ainsi l'accès et la manipulation des informations. Le document présente des exemples pratiques d'utilisation de Pandas, y compris la lecture de fichiers CSV, la filtration de données et la visualisation graphique.

Transféré par

oohyerin12
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
10 vues17 pages

Introduction à la librairie Pandas

La librairie Pandas est essentielle pour l'importation et l'analyse des données en Data Science avec Python. Elle permet de créer des DataFrames pour représenter des données de manière structurée, facilitant ainsi l'accès et la manipulation des informations. Le document présente des exemples pratiques d'utilisation de Pandas, y compris la lecture de fichiers CSV, la filtration de données et la visualisation graphique.

Transféré par

oohyerin12
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

LIBRAIRIE PANDAS

Introduction
Pandas est la librairie la plus utilisée en Data Science avec Python. A travers ce cours,
vous apprendrez les fondamentaux de Pandas pour l'importation et l'analyse des
données.

Imaginons que nous souhaitions représenter des animaux. Disons... des pandas par
exemple ! Nous pouvons caractériser un panda par sa taille ; ou plutôt, par ses tailles :
disons par exemple, la longueur du corps, la hauteur de la hanche, la hauteur de
l'épaule, et le périmètre thoracique. On peut représenter ce pandas par une liste :

In [2]: un_panda = [100, 40, 42, 61]


un_panda

Out[2]: [100, 40, 42, 61]

Ici, notre panda a une longueur du corps de 180 cm, une hauteur de la hanche de 77cm,
une hauteur de l'épaule de 81 cm et un périmètre thoracique de 106 cm de diamètre. Si
on veut représenter plusieurs pandas, on crée une liste de listes :

In [3]: # Famille panda


famille_panda = [
[149, 64, 67, 86], #maman
[51, 21, 25, 45], #bébé
[180, 77, 81, 106] #papa
]

famille_panda

Out[3]: [[149, 64, 67, 86], [51, 21, 25, 45], [180, 77, 81, 106]]

Par exemple, supposons qu'on veuille obtenir la longueur du corps (situé en position 0
dans chaque liste qui décrit un panda) du panda situé en position 2 dans ma liste (c'est-
à-dire papa panda).

In [5]: #longueur du corps de papa panda


famille_panda[2][0]

Out[5]: 180
In [6]: #Pour connaître la longueur du corps de toute la famille panda
for i in range(3):
print(famille_panda[i][0])

149
51
180

C'est assez pratique certes, mais ce n'est pas très explicite. On aimerait pouvoir
spécifier les noms des variables caractéristiques d'un panda. Cela nous amène à la
librairie pandas.

In [7]: #importation de la librairie


import pandas

# Création d'une dataframe à partir d'un tableau


famille_panda_df = [Link](famille_panda)
famille_panda_df

Out[7]:
0 1 2 3

0 149 64 67 86

1 51 21 25 45

2 180 77 81 106

On peut faire mieux :

In [8]: famille_panda_df = [Link](famille_panda,


columns = ['corps', 'hanche', 'épaules',
index = ['maman', 'bébé', 'papa'])

famille_panda_df

Out[8]:
corps hanche épaules thorax

maman 149 64 67 86

bébé 51 21 25 45

papa 180 77 81 106

Le nom des lignes est appelé index. Un index peut être une chaîne de caractères ou un
nombre entier. Quand aucun index n'est spécifié à la création du dataframe, il est
initialisé par défaut avec une suite continue d'entiers commençant par 0.
L'objet DataFrame est très similaire à certains concepts que l'on trouve en dehors du
cadre du langage 𝑃 𝑦𝑡ℎ𝑜𝑛 . Il est similaire :

aux tables des bases de données relationnelles que l'on manipule grâce à 𝑆𝑄𝐿
à l'objet dataframe sur lequel se base tout le langage 𝑅 , langage destiné aux
statisticiens et aux Data Analysts
aux tableaux 𝐸𝑥𝑐𝑒𝑙

Voici quelques petites fonctionnalités des Dataframes.

Tout d'abord, accédons à la colonne thorax de notre table :

In [9]: famille_panda_df['thorax']

Out[9]: maman 86
bébé 45
papa 106
Name: thorax, dtype: int64

Accédons maintenant au 𝑝𝑎𝑝𝑎 panda : d'abord par sa position (position 2), puis par son
nom " 𝑝𝑎𝑝𝑎 " . Le résultat retourné est exactement le même dans les 2 cas.

In [10]: # indexation positionnelle


famille_panda_df.iloc[2]

Out[10]: corps 180


hanche 77
épaules 81
thorax 106
Name: papa, dtype: int64

In [11]: # indexation par label


famille_panda_df.loc['papa']

Out[11]: corps 180


hanche 77
épaules 81
thorax 106
Name: papa, dtype: int64

Déterminons les pandas dont le diamètre du thorax est supérieur à 100 (Filtration de
données) :

In [12]: filtre = famille_panda_df['thorax'] > 100


famille_panda_df[filtre]

Out[12]:
corps hanche épaules thorax

papa 180 77 81 106


Pour inverser le masque, il suffit d'utiliser l'opérateur ~, et nous sélectionnons les pandas
qui n'ont pas un thorax supérieur à 100 :

In [13]: famille_panda_df[~filtre]

Out[13]:
corps hanche épaules thorax

maman 149 64 67 86

bébé 51 21 25 45
Lecture d'un fichier CSV (Comma Separated Values)
avec PANDAS
In [1]: import pandas

#Importation des données sous format CSV


data_activity = pandas.read_csv('[Link]')

In [2]: # La première chose à faire est de jeter un rapide coup d'oeil à notre
data_activity.info()

<class '[Link]'>
RangeIndex: 169 entries, 0 to 168
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Duration 169 non-null int64
1 Pulse 169 non-null int64
2 Maxpulse 169 non-null int64
3 Calories 164 non-null float64
dtypes: float64(1), int64(3)
memory usage: 5.4 KB

Le résultat ci-dessus nous renseigne sur les noms des colonnes, le nombre de valeurs
non manquantes par colonne (implicitement le nombre de valeurs manquantes par
colonne), le type des valeurs dans chaque colonne, la mémoire utilisée par ces données,
le nombre de lignes et de colonnes, etc.

In [3]: #Affichage des premières lignes


#5 par défaut
data_activity.head()

Out[3]:
Duration Pulse Maxpulse Calories

0 60 110 130 409.1

1 60 117 145 479.0

2 60 103 135 340.0

3 45 109 175 282.4

4 45 117 148 406.0


In [4]: data_activity.head(3)

Out[4]:
Duration Pulse Maxpulse Calories

0 60 110 130 409.1

1 60 117 145 479.0

2 60 103 135 340.0

In [5]: #De même pour les dernières lignes


data_activity.tail()

Out[5]:
Duration Pulse Maxpulse Calories

164 60 105 140 290.8

165 60 110 145 300.0

166 60 115 145 310.2

167 75 120 150 320.4

168 75 125 150 330.4

In [7]: data_activity.tail(10)

Out[7]:
Duration Pulse Maxpulse Calories

159 30 80 120 240.9

160 30 85 120 250.4

161 45 90 130 260.4

162 45 95 130 270.0

163 45 100 140 280.9

164 60 105 140 290.8

165 60 110 145 300.0

166 60 115 145 310.2

167 75 120 150 320.4

168 75 125 150 330.4

On peut aussi regarder un mélange de lignes d'un tableau de données :


In [8]: # Échantillon aléatoire de la dataframe
data_activity.sample(7)

Out[8]:
Duration Pulse Maxpulse Calories

93 15 80 100 50.5

119 60 103 124 332.7

0 60 110 130 409.1

158 60 114 150 382.8

65 180 90 130 800.4

50 60 107 136 380.2

13 60 104 132 379.3

In [9]: #sélection d'une colonne


data_activity['Pulse']

Out[9]: 0 110
1 117
2 103
3 109
4 117
...
164 105
165 110
166 115
167 120
168 125
Name: Pulse, Length: 169, dtype: int64

In [10]: #sélection avec une condition


condition1 = data_activity['Pulse'] > 150
data_activity[condition1]

Out[10]:
Duration Pulse Maxpulse Calories

58 20 153 172 226.4

80 30 159 182 319.2

85 30 151 170 300.0

95 20 151 168 229.4

97 25 152 168 244.2


In [13]: condition2 = (data_activity['Pulse'] > 130) & (data_activity['Duration'
data_activity[condition2]

Out[13]:
Duration Pulse Maxpulse Calories

54 30 136 175 238.0

58 20 153 172 226.4

80 30 159 182 319.2

81 45 149 169 344.0

85 30 151 170 300.0

94 20 150 171 127.4

95 20 151 168 229.4

97 25 152 168 244.2

135 20 136 156 189.0

139 20 141 162 222.4

153 30 150 167 275.8

In [14]: #On peut également obtenir un classement par ordre croissant des valeur
data_activity.sort_values('Maxpulse')
#ordre décroissant
#data_activity.sort_values('Maxpulse', ascending=False)

Out[14]:
Duration Pulse Maxpulse Calories

103 90 90 100 500.4

93 15 80 100 50.5

102 90 90 100 500.0

22 60 130 101 300.0

88 45 129 103 242.0

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

58 20 153 172 226.4

54 30 136 175 238.0

3 45 109 175 282.4

80 30 159 182 319.2

109 210 137 184 1860.4

169 rows × 4 columns


Indicateurs statistiques
Pour chaque colonne :

count() renvoie le nombre de valeurs


median() renvoie la liste des médianes
mean() renvoie la liste des moyennes
std() renvoie la liste des écarts-types
min(), max(), sum(), ...

Mentionnons aussi l'excellente fonction describe() . Elle donne des statistiques diverses
(moyenne, minimum, maximum, etc.) sur les données contenues dans chaque colonne.

In [15]: data_activity.describe()

Out[15]:
Duration Pulse Maxpulse Calories

count 169.000000 169.000000 169.000000 164.000000

mean 63.846154 107.461538 134.047337 375.790244

std 42.299949 14.510259 16.450434 266.379919

min 15.000000 80.000000 100.000000 50.300000

25% 45.000000 100.000000 124.000000 250.925000

50% 60.000000 105.000000 131.000000 318.600000

75% 60.000000 111.000000 141.000000 387.600000

max 300.000000 159.000000 184.000000 1860.400000

On obtient dans l’ordre le nombre de lignes, la moyenne, l’écart-type, la valeur minimale,


le premier, deuxième et troisième quartiles et la valeur maximale par colonne.

In [16]: #Il est possible de ne visualiser qu’une colonne. Par exemple, pour n’a
data_activity['Pulse'].describe()

Out[16]: count 169.000000


mean 107.461538
std 14.510259
min 80.000000
25% 100.000000
50% 105.000000
75% 111.000000
max 159.000000
Name: Pulse, dtype: float64
Représentation graphique
In [1]: import pandas
import [Link] as mpl

#importation des données


data_countries=pandas.read_csv('data_countries.csv')

#Un extrait de la table


data_countries.sample(7)

Out[1]:
Country Continent Year LifeExp Population GDPPerCap

1551 Tunisia Africa 2007.0 73.923 10276158.0 7092.923025

397 Denmark Europe 1997.0 76.110 5283663.0 29804.345670

1446 Sweden Europe 1962.0 73.370 7561588.0 12329.441920

819 Korea, Dem. Rep. Asia 2007.0 67.297 23301725.0 1593.065480

536 Gambia Africa 1972.0 38.308 517101.0 756.086836

114 Belgium Europe 1982.0 73.930 9856303.0 20979.845890

645 Hong Kong, China Asia 1977.0 73.600 4583700.0 11186.141250

In [2]: #affichage des lignes concernant le maroc


country1='Morocco'
df1=data_countries[data_countries['Country']==country1]
df1

Out[2]:
Country Continent Year LifeExp Population GDPPerCap

988 Morocco Africa 1952.0 42.873 9939217.0 1688.203570

989 Morocco Africa 1957.0 45.423 11406350.0 1642.002314

990 Morocco Africa 1962.0 47.924 13056604.0 1566.353493

991 Morocco Africa 1967.0 50.335 14770296.0 1711.044770

992 Morocco Africa 1972.0 52.862 16660670.0 1930.194975

993 Morocco Africa 1977.0 55.730 18396941.0 2370.619976

994 Morocco Africa 1982.0 59.650 20198730.0 2702.620356

995 Morocco Africa 1987.0 62.677 22987397.0 2755.046991

996 Morocco Africa 1992.0 65.393 25798239.0 2948.047252

997 Morocco Africa 1997.0 67.660 28529501.0 2982.101858

998 Morocco Africa 2002.0 69.615 31167783.0 3258.495584

999 Morocco Africa 2007.0 71.164 33757175.0 3820.175230


In [3]: #Exprimer graphiquement le PIB en fonction des années

[Link](df1['Year'], df1['GDPPerCap'], 'go--')


[Link]('Year')
[Link]('GDPPerCap')

Out[3]: Text(0, 0.5, 'GDPPerCap')


In [4]: #Affichage des payés concernés
data_countries['Country'].unique()

Out[4]: array(['Afghanistan', 'Albania', 'Algeria', 'Angola', 'Argentina',


'Australia', 'Austria', 'Bahrain', 'Bangladesh', 'Belgium',
'Benin', 'Bolivia', 'Bosnia and Herzegovina', 'Botswana', '
Brazil',
'Bulgaria', 'Burkina Faso', 'Burundi', 'Cambodia', 'Cameroo
n',
'Canada', 'Central African Republic', 'Chad', 'Chile', 'Chi
na',
'Colombia', 'Comoros', 'Congo', 'Costa Rica', 'Croatia', 'C
uba',
'Czech Republic', 'Denmark', 'Djibouti', 'Dominican Republi
c',
'Ecuador', 'Egypt', 'El Salvador', 'Equatorial Guinea', 'Er
itrea',
'Ethiopia', 'Finland', 'France', 'Gabon', 'Gambia', 'German
y',
'Ghana', 'Greece', 'Guatemala', 'Guinea', 'Guinea-Bissau',
'Haiti',
'Honduras', 'Hong Kong, China', 'Hungary', 'Iceland', 'Indi
a',
'Indonesia', 'Iran', 'Iraq', 'Ireland', 'Italy', 'Ivory Coa
st',
'Jamaica', 'Japan', 'Jordan', 'Kenya', 'Korea, Dem. Rep.',
'Korea, Rep.', 'Kuwait', 'Lebanon', 'Liberia', 'Libya',
'Madagascar', 'Malawi', 'Malaysia', 'Mali', 'Mauritania',
'Mauritius', 'Mexico', 'Mongolia', 'Montenegro', 'Morocco',
'Mozambique', 'Myanmar', 'Namibia', 'Nepal', 'Netherlands',
'New Zealand', 'Nicaragua', 'Niger', 'Nigeria', 'Norway', '
Oman',
'Pakistan', 'Palestine', 'Panama', 'Paraguay', 'Peru',
'Philippines', 'Poland', 'Portugal', 'Puerto Rico', 'Reunio
n',
'Romania', 'Rwanda', 'Sao Tome and Principe', 'Saudi Arabi
a',
'Senegal', 'Serbia', 'Sierra Leone', 'Singapore',
'Slovak Republic', 'Slovenia', 'Somalia', 'South Africa', '
Spain',
'Sri Lanka', 'Sudan', 'Swaziland', 'Sweden', 'Switzerland',
'Syria', 'Taiwan', 'Tanzania', 'Thailand', 'Togo',
'Trinidad and Tobago', 'Tunisia', 'Turkey', 'Uganda',
'United Kingdom', 'United States', 'Uruguay', 'Venezuela',
'Vietnam', 'Yemen, Rep.', 'Zambia', 'Zimbabwe'], dtype=obje
ct)
In [5]: country2='Palestine'
df2=data_countries[data_countries['Country']==country2]

#Tracer plusieurs courbes en même temps


[Link](df1['Year'], df1['GDPPerCap'], 'ro--', label=country1)
[Link](df2['Year'], df2['GDPPerCap'], 'go--', label=country2)
[Link]('Year')
[Link]('GDPPerCap')
[Link]() #pour distinguer les courbes

Out[5]: <[Link] at 0x12af0fcd0>


In [6]: #affichage des statistiques de l'année 2007
df_2007 = data_countries[data_countries['Year']==2007]
df_2007

Out[6]:
Country Continent Year LifeExp Population GDPPerCap

11 Afghanistan Asia 2007.0 43.828 31889923.0 974.580338

23 Albania Europe 2007.0 76.423 3600523.0 5937.029526

35 Algeria Africa 2007.0 72.301 33333216.0 6223.367465

47 Angola Africa 2007.0 42.731 12420476.0 4797.231267

59 Argentina Americas 2007.0 75.320 40301927.0 12779.379640

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

1623 Venezuela Americas 2007.0 73.747 26084662.0 11415.805690

1635 Vietnam Asia 2007.0 74.249 85262356.0 2441.576404

1647 Yemen, Rep. Asia 2007.0 62.698 22211743.0 2280.769906

1659 Zambia Africa 2007.0 42.384 11746035.0 1271.211593

1671 Zimbabwe Africa 2007.0 43.487 12311143.0 469.709298

139 rows × 6 columns


In [7]: #Expression des statistiques en ce qui concerne le PIB en 2007 sous for

[Link](df_2007['GDPPerCap'], edgecolor='black', bins=6) #bins pour sp


[Link]()
[Link]('GDPPerCap')

#Calcul de la moyenne et de l'écart-type

print("La moyenne en 2007 était ", df_2007['GDPPerCap'].mean(), "et l''

#Calcul de la médiane

print("La médiane en 2007 était ", df_2007['GDPPerCap'].median())

La moyenne en 2007 était 11711.115338724461 et l''écart-type 128


98.583933569626
La médiane en 2007 était 6223.367465
In [8]: #représentation en utilisant les quartiles avec la boîte à moustaches

df_2007.boxplot(column=['GDPPerCap'], grid=True)

Out[8]: <Axes: >


In [9]: #représentation par continent
df_2007.boxplot(by='Continent', column=['GDPPerCap'], grid=True);

Vous aimerez peut-être aussi