You are on page 1of 95
tsi082022 15:05 Python Morocco Academy Bienvenue chez le leader des formations professionnelles Formez-vous avec des experts Contactez-nous hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ ssi082022 15:05, Python Morocco Academy Data Science avec Python Que vous travailliez déja dans informatique ou que vous soyez att é par ce domaine prome’ ur, ce chap wuvrez les aspects fondamentaux de la d e vous aidera a s'initier votre carriére en tant que enti Tous les Modules avec Python. s oO Pandas Pandas Pandas est une bibliothéque d'analyse de données pour Python qui a explosé en popularité au cours des demiéres années. pandas est une bibliothéque open-source sous licence BSD fournissant des performances élevées et faciles a utiliser des structures de données et des outils d'analyse de données pour le langage de programmation Python. Pandas est un outil d'analyse en mémoire, qui a des propriétés de type SQL et constitue un support statistique et analytique essentiel, ainsi qu'une capacité graphique. Pandas est construit sur Cython et NumPy, il a moins de surcharge de mémoire et s'exécute plus rapidement que Code Python pure. Beaucoup de gens utilisent des pandas pour remplacer Excel, effectuer des transformations de traitement de données tabulaires de types fichiers CSV ou JSON. c'est une bibliothéque de manipulation de données 4 usage * général, hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 2196 tsi082022 15:05 Python Morocco Academy installation pip install pandas L'une des clés pour comprendre les pandas est de comprendre le modéle de données. Au carur des pandas sont deux structures de données. Les structures de données les plus utilisées sont les Series et les DataFrame pour traitant des données de tableau et des données tabulaires. Ce tableau montre leurs analogues dans la feuille de calcul et monde de la base de données. IData Structure | Dinensionality | Spreadsheet Analog | Database Analog [series i » i coluan | column IDataFrane Hl 20 Hl Single | Sheet Table « » ‘Vouci la relation entre les principales structures de données dans les pandas. A savoir qu'un dataframe peut avoir une ou plusieurs séries. Data Structures pa.seriee we se oe [pe ‘ ‘mn pas oo pM ne cies pd.DataFrane es “Ns — — ° a ' tea a : oe Les classes Series et DataFrame De méme que la librairie Nunpy introduit le type array indispensable & la manipulation de matrices en calcul scientifique, celle pandas introduit les classes Series (séries chronologiques) et DataFrane ou table de données indispensables en statistique hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 3195 tsi082022 15:05 Python Morocco Academy wpuenay ol index. ———__, tee] ——_——— rates 38 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 Econométrie et Finance oi Python est largement utilisé. import pandas as pd data = pd.Series({3, 5, 1, 7]) print (data) Une série est utilisée pour modéliser des données unidimensiomnelles. Liobjet Series contient également quelques bits de données supplémentaires, incluant un index et un nom. Une idée commune a travers les pandas est la notion d'axe. Car une série est unidimensionnelle, elle a un seul axe, Tindice. La fonction get définie ci-dessous peut extraire des éléments de cette structure de données en fonction de I'index : Amport pandas as pd serrie_1 = pd.Series([11,33,55,72,93]) # print(serrie 1) print(*Les valeurs de serrie_a = {)".format(serrie_1.values)) print(*Les indices de serrie_1 = {}".format(serrie_1.index)) print(*La valeur de 1'elenent dont "indice est 2 = (}".format(serrie_1[2])) print(*sLicing entre o et 3 \n{)".format(serrie_1[@:3])) # slicing au sens dt < » Amport pandas as pd serie 1 = pé.Series((11,33,55,71,93)) print ( print ( print(*Les clés de serie_1 \n(}".format(serie_t.keys)) print(serie_1) es valeurs de serie_1 = ()”.format(serie_t.values)) es indices de serie_1 = ()".format(serie_1.index)) ‘Nous aceédons & chaque élément en utilisant leur index. Un index commence a partir de 0 et Nous pouvons spécifier une plage d'index en spécifiant le début. Amport pandas as pd data = pd.Series((43, 11, 31, 14) n print(data(2}) # Lelement dont 1'indice est 1 hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 4195 tsi082022 15:05 Python Morocco Academy import pandas as pd data2 = pd.Series((‘a" # construire une st print(data2{'a"]) # L’element dont 1"indice e: print(data2['b"]) 4 L'element dont 1*indice e: Pe , On peut ajouter nos propres indices a une serie import pandas as pd datal = pd.Series({1,2,3,4], index-['a", » 'd"]) # construire une si see eal ane t Gnuuie we» teeny print (data2) P| > Amport pandas as pd data = pd.sertes((1, 3, 5, 7, 9], indexe[*a', * print(data ) print(éata (‘¢"]) print("b! in data ) print (data -keys()) print (List (data .iteas())) ser['e'] = 11 print(data ) Nous accédons 4 un ou plusieurs éléments en utilisant 1a fonction loc et iloc. data = pd.Series({1, 3, 5, 7, 9], inde print(datal (data> 1) & (datac 11)]) print(data [{'a", "e']]) datal = pd.Series({'a", print(dataa[2]) print (datat.loc{1]) print (datat. iloc[1]) stb tet, tats te'y) bi, "e', ‘d,"e'], index-[2, 3, 5, 7, 91) import pandas as pd aserie = pé.Series([1, 3, 5, 7, 9]) a_index = pé.tndex(([1, 3, 5, 7, 91) b= pd.tndex([2, 3, 5, 7, 22]) print(a_serie) print (a_index) print(ind.size,"@" ,ind.shape, pind.ndis, ind.dtype) import pandas as pd a = pd.Index({11, 33, 55, 77, 99]) b= pd.Index([22, 33, 55, 77, 11]) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Morocco Academy print(a |) # union avec suppression de valeurs print(a *b) # 1a difference serie 1 = pé.Index(["Frangais’, ‘Mathéeatiques', “Anglais }) serie 2 = pd.Index(['Frangais’, ‘Sciences’ ]) print(serie 1 & serie_2) print(serie 1 | serie_2) print(serie 1 * serie_2) On peut tirer des informations statistiques sur une serie import pandas as pd Amport suspy as np array 1 = np.arange(®, 2, 0.3) serie 1 = pé.Series(array_1) print (serie_1) print (serie_1.sum()) print(serie_1-sean()) print(serie 1.describe()) import pandas as pd data = pd.Series((11,23,54,54,19,13,35,60,81,0,82)) print(data.ceseribe()) # une description statistique (min max, std, coount ( , import pandas as pd data = pd.Series((11,23,54,54,19,13,35,69,81,0,82)) print(data-agg({'max",'min’,"sun',‘mean','std'])) # une description stati: es , Méme si pandas est fait pour la gestion des données, pandas est capable de traiter méme I'aspect graphique Amport pandas as pd data = pd.Series((1,3,5,8,10,4,16,17,28,19,18)) data.plot() data, plot(kind="Line’) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Moracco Academy ws 15.0 ps wo 15 50 25 Amport pandas as pd data = pd.Series((3,8,10,8,5)) data. plot (kind='pie') None import pandas as pd data = pd.Series((42,14,16,20,21,19,15,14)) data. plot (kind="bar') hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 7196 tsi082022 15:05 Ws 15.0 Rs 10.0 15 50 25 00 Amport pandas as pd data = pd.Series((12,14,16,20,21,19,15,14)) data. plot(kind="barh’ ) oo 25 50 75 10 DS import pandas as pd data = pd.Series((1,6,19,34,23,14,12,36)) data. plot(kind="kde") hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 5.0 Python Moracco Academy ws 20.0 tsi082022 15:05 Python Morocco Academy 0030 0025 2 0020 8 0015 9010 0.005 0.000 import pandas as pd data = pd.Series((1,6,29,34,23,14,12,26)) data.plot(kind=" area’) DataFrame Cette classe est proche de celle du méme nom dans le langage R, il s'agit dassocier 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. Les DataFrame peuvent étre créées de différentes maniéres. Amport pandas as pd notes_math = pd.Series({*ahmed’ :24 ,'sarah’:28 ,’mamadou' :13 , “lovis’:14 }) notes_phy= pd.Series({'ahmed':16 ,"sarah':17 , 'mamadou':18 ,'louis':19 }) hitpsslwwn.pythonmoroccoscademy.comilearnjtracks/data-science-avec-python tsi082022 15:05 Python Moracco Academy print(scores) es > > aoute38 ) 7 ,'mamadou":18 ,'louis':19 }) 2, manadou':13 , ‘louis':14 }) 5 ,"sarah":17 ,‘mamadou' :18 , ‘louis’ :19 }) notes_math = pd.Series({* ahmed" notes_phy= pd.Series({*ahned" : notes Fr = pd.Series({*ahned* notes_ches = pd.Series({*ahmed* scores = pd.DataFrane({'Math’ :notes_nath, ‘Physics’ :notes_phy, ‘French’ :notes_| 4 Pour afficher uniquement les notes d'une satiére , on peut appliquer 1"indi print(scores{‘Chenistry']) # méthode 1 print (scores.chenistry) 4 méthode 2 print (scores.get("chemistry’))# méthode 3 ees , Pour transposer le tableau import pandas as pd notes_math = pd.Series({*ahmed':4 ,"sarah':20 ,"mamadou':13 ,"louis’:14 }) notes_phy= pd.Series({*ahned":16 ,"sarah":27 ,"mamadou":18 , ‘louis":19 }) notes Fr = pd.Serdes({*ahmed":11 ,*sarah*:22 ,"mamadou':13 , ‘louis':14 }) notes chen = pd.Series({*ahmed':16 ,'sarah':17 ,"manadou':18 ,"louis':19 }) scores = pd.DataFrane({'Math’ :notes_nath, ‘Physics’ :notes_phy, ‘French’ :notes_| # Pour transposer Ie tableau print (scores.T) ee , Amport pandas as pd 4, "sarah" :28 ,‘mamadou' :13 , “louis” :14 }) smamadou":18 , ‘lovis":19 }) notes Fr = pd.Series({"ahmed":11 , "sarah" :12 ,'mamadou":13 , ‘louis':14 }) notes ches = pd.Series((*ahmed':26 ,"sarah':17 ,"mamadou':18 , "louis" :19 }) notes_math = pd.Series({* ahmed notes_phy= pd.Series({"ahned" :16 , "sarah": scores = pd.DataFrane({ ‘Math’ :notes_math, ‘Physics’ inotes_phy, ‘French’ :notes_| print(scores.keys()) # pour accéder aux clés print(scores.values) # pour accéder aux valeurs es > aa hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 10195 tsi082022 15:05 Python Moracco Academy import pandas as pd notes_math = pd.Series({‘ahmed':14 ,'sarah':20 ,‘mamadou':13 ,"louis':14 }) notes_phy= pd.Series({*ahmed":16 ,"sarah':27 ,'manadou':18 , ‘louis’ :19 )) 1d. Series({*ahmed':11 ,"sarah':12 ,'manadou':13 ,"louis':14 }) pé.Series({*ahned':i6 ,"sarah':17 ,'mamadou':18 ,"louis':19 }) notes_Fr notes_chen scores = pd.DataFrane({'Math’ :notes_nath, ‘Physics’ :notes_phy, ‘French’ :notes_1 print('Math’ in scores.keys()) True print('math’ in scores.keys()) # False print(12 in scores.values) — True print(Ss in scores.values) False es , import pandas as pd casa = {‘Temperature’ :32, ‘vent! casa_serie = pd.Series(casa) # print(casa_serie) Paris = (‘Temperature':18,"Vent': "45 ka/h’,"Precipitation’:'35 mn’, “pression Paris_serie = pd.Series(Paris) # print (Paris_serie) Situationmeteo = pd.DataFrane({‘Casa': Casa_serie, ‘Paris print(situation_meteo) | » 25 km/h’, Precipitation’ :'@ ma", ‘pression’: Paris_serie)) print (situation_meteo.colunns) print (situation meteo. index) print(Situation_meteol*Casa']) stack ca permet de faire unpacking du DataFrame import pandas as pd notes_math = pd.Series((*ahmed':14 ,"sarah':20 , ‘manadou notes_phy= pd.Series({"ahmed":16 ,"sarah':27 ,'mamadou':18 , ‘louis':19 }) 1d. Series({'ahmed’:11 ,"sarah':32 , ‘mamadou':13 ,"louis':14 }) pd.Series({*ahned':26 , "sarah" :17 ,*mamadou':18 ,"louis":19 }) 3 ,"Louis':14 )) notes Fr notes_chex scores = pd.DataFrane({ ‘Math’ :notes_math, ‘Physics’ :notes_phy, ‘French’ :notes_| print(scores) print(scores.stack()) es , Numpy avec pandas Une autre maniére pour eréer des Datagramme rapidement en utilisant la * notion de matrice hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 11195 tsi082022 15:05 Python Moracco Academy array_1 = np.arange(@, 18, 2) print(array_1 ) serie 1 = pé.Series(array_1 ) print(serie_1) F © pd.DataFrane(array_t.reshape(3, 3),columns=['A', 'B", ‘C']) print (af) print(serie_2) print( > print (np.power(serie_1,2)) import pandas as pd Anport ouspy as np ata = np.array([[12,30,65, 1008, 20], [29,15,78,1025,0], [45, 43,20,1030,0], [18,25,68,1012,16], [29,27,57,1032,01]) # print(data) # creer une natrice 6x6 villes = [‘paris', ‘rabat’, "banako", ‘madrid’, “tunis'} parareteres = ["tenperature', 'vent', ‘hunidite', ‘pression’, 'precipitation'] es En une seule ligne data_1 = pd.DataFrane({(‘wael": 20, ‘Bassin’: 24, ‘Sarah': 14), (CWael': 24, ‘Bassin: 15), {‘wael': 15, ‘Sarah’: 16) 1 vindex=['Python", "Java", *R']) print(data_1) import suspy as np data_2 = pd.DataFrane(np.random.rand(2, 2),colunns=(*xL", *x2"], index=( print(data_2) | , import pandas as pd notes_nath = pd.Series((*ahmed':34 , sarah :20 ,"manadou':13 , “louis':14 )) notes phy= pd.Series({‘ahned':26 ,"sarah':7 , ‘manadou':18 , ‘lovs‘:19 }) 2, *mamadou' 13 , ‘Iovis':14 )) 9) notes_Fr = pd.Series({*ahned" :11 , “sarah pd-Series({*ahmed':16 ,‘sarah':17 , ‘mamadou':18 , “louis notes Cher scores = pd.DataFrane({'Math’ :notes_math, ‘Physics’ :notes_phy, 'French' :notes | * print(scores) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 12105 tsi082022 15:05 Python Moracco Academy es > # Output scores Math Physics French Chesistry ahmed 18 16 on 16 sarah 28 wo vv mamadou 13 wo 18 dovis 18 9 9 # Output scores.iloc[:3, :2] Math Physics ahmed 8 a6 sarah 28 v mamadou 13 18 import pandas as pd import suspy as np data = np-array([[12,38, 65,1008, 28], (29,15,7@,1025,0), [45,43, 10,1030, 0], [18,25,60,1012, 10], [28,27,57,1021,0]]) # print (data) # creer une matrice 6x6 villes = ["pards', ‘rabat’, "bamako", ‘madedd", ‘tunis*] paraneteres = [‘tenperature’, ‘vent", ‘humidite’ , “pression’, ‘precipitation’ ] situation_neteo sd.bataFrame(data, index-villes, colunns=paraneteres) es | Concaténation de deux matrices import pandas as pd Amport cuspy as np array_1 = np.arange(2,20,2).reshape(3,3) areay_2 = array. +2 print (array_1) print" print (array_2) print (*~ ) concati = np.concatenate([array_s,array_2]) # concatenation verticals print (concat2) concat2 = np.concatenate({array_t,array_2],axis=1) # concatenation horizonti print (concat2) ee - serie 1 = pé.Series(np.randon.rand(3), index+[1,2,3]) s serie 2 = pd.Series(np.randon.rand(3), index=[4,5,6]) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 13905 tsi082022 15:05 Python Moracco Academy praneqpuscomeact sense syserae ess ReySeLtser7) (a > areay_l = np.arange(2,20,2).reshape(3,3) areay_2 = array. +2 4F1 = pd.oataFrame(array 1, index=[1,2,3], columns=['A",'8", "C"]) #2 = pd.ataFrame(array 2, index=[4,5,6], colunns=['A*, ‘8°, "C']) print (pd.concat({df1,4F2])) Concatenation V de deux DataFrane print (pd.concat({df1,df2], axis=1)) # Concatenation H de deux Datafrane import pandas as pd Amport suspy as op data = np-array([[12,38, 65,1008, 22], (29,15,7@, 125,01, [45,43, 10,1030, 0], [18,25,60,1012, 10], [28,27,57,1021,0]]) # print(datay # creer une matrice 6x6 villes = [‘paris', ‘rabat’, "bamako’, ‘madrid’, ‘tunis"] parareteres = [‘tenperature’, ‘vent", ‘humidite’ , “pression’, ‘precipitation’ ] situation_neteo 1d.DataFrane(data, index-villes, colunns=paraneteres) print(situationmeteo) SS » import pandas as pd y = pd.Series((‘a 2 = pd.Series({'a' an yb! grades = pd.DataFrane({‘Math’ :w, ‘Physics French’ :y, ‘Chemistry’ print (grades .Loc{*b':"e", ‘Wath':1) import pandas as pd import ouspy as np data = np.array([[42,38, 65,1008, 20], [29,15,70,1025,01, [45,43, 10,1030, 0}, (18, 25,60,1012, 10], [29,27,57,1021,0]]) # print(data) # creer une matrice 6x6 villes = ['paris', ‘rabat', ‘banako" , ‘madrid’, ‘tunis"] paraneteres = [‘tenperature’, "vent", ‘hunidite', "pression’, ‘precipitation’ ] situation meteo = pd.DataFrane(data, index-villes, colunns=paraneteres) print(situation_meteo) print(situation_meteo.loc[situation_neteo. temperature < 20]) # extraire un: x es » hitpssiwwn.pythonmoroccoscademy.comilearnjtracks/data-science-avec-python’ 14105 tsi082022 15:05 Python Morocco Academy import numpy as np data = np-array([[12,38, 65,1008, 20], [29,15,70, 125,01, [45,43, 10,1030, 0], [18,25,60,1012,16], [29, 27, 57,1021, 0))) 4 print (data) # creer une matrice 6x6 villes [‘paris', ‘rabat", "bamako" , madrid’, "tunis" ] paraneteres = [‘tenperature’, ‘vent’, ‘hunidite’ , "pression’, ‘precipitation’ ] situationneteo = pd.DataFrame(data, index-villes, colunns-paraneteres) print (situation_meteo) print(situation_meteo. loc[situation_meteo.temperature < 20]) # extraire un’ print(*- *) print(situation meteo, loc{situationmeteo.tenperature < 28, ['temperature’ , Po , import pandas as pd import suspy as np data = np.areay([[42,38, 65,1008, 26], [29,15,70,1025,01, [45,43,10,1030, 0], [18,25,60,1012, 16], [29, 27, 57,2023, 0]]) # print (data) # creer une matrice 6x6 villes = [‘paris', ‘rabat’, "bamako" , madrid’, ‘tunis’] paraneteres = ['tenperature’, "vent", ‘humidite’ "pression", ‘precipitation’ ] situationmeteo = pd.DataFrame(data, index-villes, colunnseparaneteres) print (situation_meteo.colunns) print (situation meteo. index) + Amport pandas as pd import suspy as np data = np.areay([[12,38, 65,1008, 20], [29,15,70, 125,01, [45,43,10,1030, 0], [18,25,60,1012,16], [29,27,57,1021,0]1) # print (data) # creer une matrice 6x6 villes = [‘paris', ‘rabat", "banako", ‘madrid’, ‘tunis"] parareteres = [‘tenperature’, ‘vent', ‘humidite’ , "pression’, ‘precipitation’ ] situationmeteo = pd.DataFrame(data, indexevilles, colunnseparaneteres) print (situation meteo['temperature’)) # les valeurs de temperatures pour 1's ee , Trier un DataFrame de maniére trés simple Amport pandas as pd n import numpy as np hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 15195 tsi082022 15:05 Python Morocco Academy [aos49,49,4090,0),(40)49,08/4046) 40) [29,27,57,1011,0}]) # print (data) # creer une matrice 6x6 villes = [‘paris', ‘rabat", "banako", ‘madrid’, ‘tunis"] parareteres = ["tenperature’, "vent", ‘*humidite’,, "pression’, ‘precipitation’ ] situationmeteo = pd.DataFrame(data, index-villes, colunns=paraneteres) print (situation meteo.sort_values({'tesperature’],ascending= False)) # Tri « print (situation meteo.sort_values(['vent'],ascending= True)) Tris ee > ‘Nous pouvant toujours effectuer des caleuls statistiques sur les DataFrame import pandas as pd import suspy as np data = np.arnay([[42,38, 65,1008, 20], [29,15,70,1025,01, [45,43,10,1030, 0], [18,25,60,1012, 18], (29, 27,57,1023,0]]) # print (data) # creer une matrice 6x6 villes = [‘paris’, ‘rabat’, "bamako" , 'madrid’, ‘tunis’] parareteres = ["tenperature’, "vent", ‘humidite’ "pression", ‘precipitation’ ] situation neteo = pd.DataFrane(data, indexevilles, colunns-paraneteres) # calcul statistique print (situation_meteo.max()) print (*~ ” print (situation meteo.min()) print(* » print (situation_neteo.mean()) print print(situation_meteo. std()) ee Amport pandas as pd import suspy as np data = np.array([[12,38, 65,1008, 2], [29,15,70,1625,0], [45, 43, 10,1030, 0}, [18,25,60,1012,10], [29, 27, 57,1021, 0])) # print(data) # creer une matrice 6x6 villes = [‘paris', ‘rabat","banako", ‘madrid’, ‘tunis"] parareteres = [‘tenperature’, ‘vent", ‘humidite’ “pression’, ‘precipitation’ ] situationneteo = pd.bataFrame(data, index-villes, colunns-paraneteres) # calcul statistique print (situation_meteo[ ‘temperature’ ).nax()) print (situation meteo[ ‘precipitation’ }.nin()) print (situation meteo[ ‘humidite" ].mean()) print (situation meteo[ 'vent"].std()) es - hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 16195 tsi082022 15:05 Python Morocco Academy df = pd.DataFrame({*x1': np.random.rand(6), "x2": np.random.rand(6)}) print (df) print (df.sum()) print(d*.prod()) print(#f.rean()) Nous pouvant faire des calculs statistiques selon les colonnes sur les DataFrame import pandas as pd import suspy as np AF = pd.DataFrane({*x1': np.randos.rand(6), "x2": np.randow.rand(6))) print(d#) print(af{‘x1"].sum()) print(4#{"x2"].prod()) print(a#{"x1"].mean()) Nous pouvant faire des calculs statistiques selon les colonnes et les lignes sur les DataFrame Amport pandas as pd import suspy as np Gf = pé.bataFrane({*x1": np.randos.rand(6), "x2": np.randon.rand(6))) print (d#.mean(axis="colunns')) Nous pouvant faire des calculs statistiques selon les lignes sur les DataFrame import pandas as pd Amport suspy as np Gf = pa.oataFrane({*x1 print(d#.sean(axis="rows")) print(4#.count()) print(df.min()) print(df.nax()) print(a#.ste()) np-random.rand(6),"x2': np.random.rand (6; Amport pandas as pd GF = pé.DataFrame((*key’:['A','B1,°C', "A", "BY, 'C°], ‘éata’: range(6)},colunnse[ "key", ‘“data")) print dF) print (dF.describe()) * hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 17196 tsi082022 15:05 Python Morocco Academy import pandas as pd GF = pd.DataFrame({*key':['A",'B,°C', "A", "BY, 'C°1, ‘data’: range(6)),colunns=[‘key', ‘data print (a) print(4#.groupby(‘key").sum()) import pandas as pd GF = pa.DataFrame((*key’:['A",'B',°C',"A',"B,'C"], ‘data’: range(6)},columns=["key’, ‘data")) print (a) print (df.groupby(‘key').describe()) Nous pouvons aussi trouver les relations entre les éléments d'un DataFrame en calculant la corrélation, Amport pandas as pd import surpy as np af = pd.bataFrame(np.randon.rand(3, 3), columns 9a", 93"]) print (ae) print af.corn()) Construire un DataFrame en utilisant list comprehension import pandas as pd raw_data = [{*square’: i**2) for 4 in range(s)] print(ran_data) data = pd.bataFrane(data) print (data) import pandas as pd xa, 82,2 8 v3": 188.5} for i im range(5)] ran_data data « pd.dataFrame(ran_data) print (data) Amport pandas as pd data_set = pd.Dataframe([{‘feature 1':1, ‘feature 2':2),{'feature 1:3, featur print(data_set) hitpssiwwn.pythonmoroccoscademy.comilearnjtracks/data-science-avec-python 18995 tsi082022 15:05 Python Moracco Academy amport panaas as po data_set = pd.Oatarrane([{'feature_1':1, 'feature_2:2),{'feature_2':3, 'featui print(data_set) es , Amport pandas as pd import surpy as np data_set = pd.dataFrame(np.randon.rand(3, 2)*100, colunns=["x2", 'x2"],index=["m1", print(data_set) m2", Ajouter des colonnes et faire des calculs sur les DataFrame import pandas as pd notes_math = pd.Series({*ahmed':14 ,"sarah':20 ,*mamadou':13 ,"louis':14 }) notes_phy= pd.Series({"ahmed" :16 , "sarah" :27 ,'mamadou":18 , ‘lovis':19 }) notes Fr = pd.Series({"ahmed" :11 ,‘sarah':12 ,'manadou':13 , ‘louis':14 }) notes_ches = pd.Series({*ahmed':16 ,"sarah':17 ,*mamadou':18 ,"1ouis’:19 }) scores = pd.DataFrane({'Math’ :notes_math, ‘Physics’ :notes_phy, ‘French’ :notes_! print(scores) print(*- ” # ajouter une nouvelle colonne scores[‘Total'] = (scores[‘Math'] + scores[*French'] + scores{*Chemistry"]+ scores{ Physics']) /4 printscores) es , Dans le méme contexte ..plus d'options pour la manipulation des DataFrame import pandas as pd import suspy as np initial_data = pd.bataFrane(np.candom.rand(3, 3), column vecteur_resultant = (initial_data{'x'] + initial_data['x2"]) / (initial_dati print (af) print( > print vecteur_resultant) ee , Dans cette exemple nous allons voir un autre point fort des DataFrame .. il » s'agit des query qu'on peut utiliser pour sortir les informations souhaitées hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 19195 tsi082022 15:05 Python Morocco Academy data_set = pd.datarrame(np.randon.rand(3, 3), colunns=["feature_1', ‘Feature, data_set_filtred = df.query("feature 4 < 0.5 and feature 2 <0.5') # ecrire print (data_set) print(*- print (data_set_filtred) TO , ‘Une autre fagon de faire des requétes import pandas as pd import suspy as np data_set = pd.DataFrane(np.randon.rand(3, 3), columns=['xi", 'x2', ‘x3']) x1_sup_0= 6f.x1 > @.01 x2_sup_05 = df.x2 > 8.5 x A_and_x_2 = x1_sup_6t & x2_sup_es resultat = éF[x1_and_x_2] print(data_set) print(*- print(resultat) Autres exemples import pandas as pd import nuspy as np data_set = pd.dataFrame(np.randon.rand(3, 3)*28, colusns=[*x1", "x2", *x3"]) filtred_data = data_set[ (data_set.x1 ¢ 4) & (data_set.02 < 5)] print(data_set) print(*- print (#iltred_data) es Merge : Mettez & jour le contenu d'un DataFrame avec le contenu d'un autre DataFrame : Amport pandas as pd data_1 = pd.vatafrane({"Nanes": [‘Ahmed’, ‘Sarah’, 'Suha", ‘Louis'], *skills': ['Python", "FastaPr', ‘cpp’, "ML'T3) data_2 = pd.DataFrane({*Names*: [‘Ahmed’, Sarah‘, ‘Suha", ‘“Louis"], "0b Position’: ['Principal eng’, ‘Senior Dev’, ‘SOA’, 't n hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Moracco Academy print(™~ data = pd.merge(data_1, data_2) print(*- ) print (data) ee , data_1 = pd.batafrane({"Names": [‘Ahmed’, ‘Sarah’, ‘Suha’, ‘Louis'], "skil1s': ['Python", "FastaPr', ‘cpp’, "ML'T)) data_2 = pd.DataFrane({*Names*: [‘Ahmed’, ‘Sarah’, ‘Suna’, ‘“Louis’], “Job Position’: ['Principal eng’, ‘Senior Dev’, *SOA’ data_3 = pd.merge(data_1, data_2) dataA = pd.DataFrane({"skills': [‘Python', ‘FastaPr', "ML"], “Department: ["DSI", "CLOUD", ‘SEARCH’ )}) data = pd.merge(data_3, data_4) print (data) print(*- print(data_4) print(*- print(data) ee , Amport pandas as pd data1 = pd.DataFrane({"Nanes*: [‘Ahmed’, "Sarah", ‘Suna’, ‘Louis’], “skills': ['Python", "FastaPr', "cpp", “ML'T}) data_2 = pd.DataFrane({*employee': ['Ahned’, ‘Sarah’, "Suha’, ‘Louis’], "Job Position’: ['Principal eng’, ‘Senior Dev', ‘SOA", print(pd.nerge(data_1, data_2, left_on="Nanes' femployee")) —# m es , Amport pandas as pd data_1 = pd.bataFrane({"Nanes": [‘Ahmed’, "Sarah", 'Suha’, ‘Louis’], *skills': ['Python", "FastaPr, cpp", °ML'T>) data_2 = pd.DataFrane({"employee': [‘Ahmed’, ‘Sarah', ‘Suha', ‘Louis’ ], "Job Position’: ['Principal eng’, ‘Senior Dev', ‘SOA’, 't print (pd, jerge(data_1, data_2, left_on="Names", right_on="employee").crop(‘er (a > hitpssiwwn.pythonmoroccoscademy.comilearnjtracks/data-science-avec-python’ 21795 tsi082022 15:05 Python Moracco Academy 6F2 = pd.oatarrame(('age print (é#2) print(4#2.groupby(‘age').sum()) print (df2.groupby( poids*).describe()) [38, 20, 15, 45, 55, 68], ‘poids’: np.randon.rand: « 6F2 = pd.dataFrame({*age’: [30, 28, 15, 45, 55, 68], "poids: np.random.rand: def fonction Filtre(v): return v[‘age'].median() > 35 print(of2.groupby( poids"). Filter(fonction_filtre)) 4 import pandas as pd data_1 = pd.DataFrane({*Names': [‘Ahmed", "Sarah", 'Suha', ‘Louis'], ‘skills’: ['Python", "FastaPr', cpp, "ML"T)) data_2 = pd.bataFrane({"employee" "Job Position ['Ahmed”, ‘sarah’, *Suha’, “Louis” ], : ['Principal eng’, ‘Senior Dev', "SOA", 't print (pd, lerge(data_1, data_2, left_on="Nanes", right_on-"enployee").crop(‘er PT , On peut changer les indices d'un DataFrame import pandas as pd data_1 = pd.DataFrane({'Villes': ['Paris', ‘Rabat’, ‘Tunis’, 'Tanger'], "Pays': ["France’, "Maroc', ‘Tunisie’, "Maroc" ]}) data_2 = pd.bataFrane({"Villes': ['Paris', ‘Rabat’, ‘Tunis’, ‘Tanger’], “Population': (3800800, 25000, 27200, 17000]}) print(data_1) print ( print(data_2) print(*- aata2 data_1.set_index(‘Villes") print(data_2) import pandas as pd GFL = pd.dataFrame((*Skil1s': ['ML", ‘Python’, "Django'], "experience’: [6 3, 4]), colunns=['Skills*, "Experience ]) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Morocco Academy saunas) vo yy print(a#1) print(*- print (4#2) print ( ) af3 = pd.nerge(aft, 6f2) print (4#3) import pandas as pd GFL = pd.DataFrame({"Skil1s': ['ML", "Python", ‘Django"], ‘Experience’: [6 3, 41), colunns=["Skills', “Experience }) G€2 = pd.Dataframe({*Skil1s': ["Python", “Cpp'], "DB": [‘MangooB", “Oracle']}, columns=["Skills', "D8"]) print (4f2 print ( print (4#2) print ( ) #3 = pd.merge(d#t, #2, how="inner*) print (4#3) skilis Experience on @ Python 3 Mangoos import pandas as pd GFL = pd.Dataframe({*Skil1s': ['ML", "Python", ‘Django J, ‘experience’: [6 3, 4]}, colunns=['Skills*, *Experience’ }) 4€2 = pd.DataFrame((‘skills': [‘Python’, "cpp", "DB": [‘MangooB', ‘Oracie']), colunnse['Skills', *5"]) print (d#2) print print(6#2) print( > dF = pd.nenge(att, €F2, how=‘outer") print (6#3) # output Skills Experience 08 em 6.8 NaN 2 Python 3.8 Mangos 2 django 4.0 tN 3 Gp Nan oracie hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 23105 tsi082022 15:05 Python Morocco Academy FL = pd.DataFrame({*Skills': ['ML", ‘Python", ‘Django'], ‘experience’: [6 3, 4]}s colunns=['Skills', ‘Experience’ ]) 4€2 = pd.DataFrame({'skills': [‘Python", "Cpp'], "pa": [‘MangooB", “Oracle']), columns=["Skills', "D5"]) print (4#2) print ( print (4#2) print(*- =") Gf3 = pd.nerge(afi, 62, how="right") print (4#3) Amport pandas as pd aft = pd.DataFrame({‘Skills': ['ML", "Python", ‘Ojango"], “experience': [6 3, 4]. colunns=["Skills", "Experience'}) 4f2 = pd.DataFrame({ ‘skills’: [‘Python', ‘cpp'], *pa*: [‘mangoo8", “Oracle"]), colums=["Skills', "DB")) print (a#i print(*- “"y print (4#2) print ( ) 4€3 = pd.nerge(dfi, #2, how="left') print (4#3) Nous pouvons changer la structure de notre matrice en utilisant la fonction unstack() import pandas as pd af = pd.DataFrame((*x1":['A',"B", °C", "A", "8", °C'], *x2"1 wange(6)),colunns=["x1", ‘x2"]) print (4) print (4f.groupby('x1") .describe()) print (df.groupby( x4") describe() .unstack()) import pandas as pd import suepy as np af = pa.bataFrame((*x1": (A, "8, °C Bc), tx2"s range(6), ‘y's np-randon.randint(@, 18, 6)}, columns = ["x1', "x2", ‘y']) * hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 24195 tsi082022 15:05 Python Morocco Academy Si la logique nécessite une fonction spécifique, on peut utiliser une fonction filtre Amport pandas as pd Amport suspy as np Gf = pa.bataFrame({*xt": ['A", "8", txa's range(6), y's np-random.randint(@, 18, 6)}, columns = ['xt', "x2", 'y']) print (dF) print(*- def Filter_fune (x return x['y"]-std() > 4 462 = 6f.groupby("x1")falter(Filter_fune) print (4#2) La fonction lambda est trés utile dans ce genre de situation import pandas as pd import suspy as np AF = pd.DataFrame({*xa': ['A", "BY, "Ch, ‘AY, sua": range(s), *y': np.random.randint(@, 18, 6)), yD columns = ["x1", 2) print (4) result = df.groupby(‘x1').transfora(lambda x: x**2) print(result) Multilnde: Le multi-index vous permet de sélectionner plusieurs lignes et colonnes dans votre index. C'est un objet & plusieurs niveaux ou hiérarchique pour Yobjet pandas. Il existe maintenant diverses méthodes de multisindex qui sont utilisées et qui nous aident créer plusieurs index a partir de tableaux, tuples, dataframes, ete. Amport pandas as pd progranming = [(‘Python’, 201@),(*Python’, 2022), ( Java", 2010), (‘Java", 2622), Cepp", 2018), (°Cpp", 2022) rank = [8)1, » 1.6, hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 25105 tsi082022 15:05 Python Morocco Academy programang = pusewecninuens trom supnescprogranmangy @ anuen rank = pd.Series(rank, index=progranming) rank = rank.reindex(progranming) print (rank) ee import pandas as pd programming = [(‘Python’, 2016), (*Python", 2022), Java‘, 2018), ("Java', 2622), (Cpe, 2018), (*Cpp", 2622)] rank = (8,1, 16, 5,2] progranming = pd.Multitndex.fron_tuples progranming) pd.Series(rank, index=progranming) pop.reindex(index) rank rank print(rank[:, 2016]) import pandas as pd programming = [(‘Python’, 2628), (“Python', 2022), (C3ava", 2018), (‘Java", 2022), Copp", 2018), (°Cpp", 2022) rank = [8,1, 1,6, 5,2] progranming = pd.MultiIndex.fron_tuples programming) rank = pd.Series(rank, index=progranming) rank = pop-reindex(index) print(rank.unstack()) import pandas as pd Progranming = [(‘Python’, 2016), (*Python’, 2022), (Java', 2018), ("Java', 2022), (cpp*s 2018), (°Cpp", 2022)] rank = [8,1, 16, 5,2] programming = pd.MultiIndex. from tuples (progranming) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Morocco Academy pop_df = pd.Datafrane({'classenent': rank, “Points’:(4569, 32044,36212, 1235, 32808, 30060]}) print (rank) print(pop_df) import pandas as pd import nuepy as np 4f = pd.DataFrame(np.randon.rand(4, 2)*70, indexe[{‘Lundi', ‘Lundi', ‘mardi', ‘mardi'), [1, 2, 2, 2)],colusns=["temperature’, ‘vent"}) print (df) Amport pandas as pd data = {(‘California’, 2008): 18809, ("california’, 2610):15000, (Texas, 2008): 20800, (‘Texas", 2610): 25000, (New York", 2008): 30000, (‘New York*, 2810): 35000) GF = pa.series(aata) print (af) import pandas as pd import ouspy as np index = pd.Multitndex.fron_product([[213, 214], [1, 21], names=["year", ‘visit']) columns = pé.Multiindex.fron_product({["B0b", "Guido’, ‘sue"], (HR, "Temp" ]1, naness["subject', ‘type']) data = np.round(np.randon.randn(4, 6)) health data = pd.DataFrane(data, index-index, colunns=colunns) print (health data) 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, hdfS) 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 classe DataFrame. hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 27198 tsi082022 15:05 Python Morocco Academy data. to_csv ou _table avec des options simulaires. exemple de base est donné pour lire un fichier au format .esv dont les valeurs sont séparées par des '," et dont la premiere ligne contient le nom des variables. import pandas as pd datazpd.read_csv("Fichier.csv") datazpd.read_table(“Fichier.csv", sep=",") Il est important de connaitre la liste des possibilités et options offertes par cette simple commande. Voici les principales ci-dessous et un lien a la liste complete. path chemin ou non du fichier ou URL. © sep délimiteur comme \verb~ , ;|\t + ou Wwerb# \s* # pour un nombre variable d'espaces. © header défaut 0, la premiere ligne contient le nom des variables; si None les noms sont générés ou définis par ailleurs. © 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 dexpérience, © nanes si {\tt header-None}, liste des noms des variables, © nrous utile pour tester et limiter le nombre de ligne a lire. © skiprow liste de lignes a sauter en lecture. Amport pandas as pd gradesi = pé.read_csv(‘data_t.csv") grades? = pé.read_excel(‘data_2.x1s") print (gradesi) print (grades2) import pandas as pd dF = pd.read_csv(‘data_t.csv') print(d#.head()) Td Sepallengthcm SepalWidthcn Petallengthcm Petalwidthcn Species 1 5.4 35 14 a2 2 49 3 14 a2 3 47 32 13 a2 a 46 3a 5 a2 es , import pandas as pd d.read_csv("iris.csv', index_col='SepalWidthcn' ) print (data) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Moracco Academy notes_math = pd.Series({*ahmed':14 ,'sarah':20 ,‘mamadou':13 ,"louis':14 }) notes_phy= pd.Series({*ahmed":16 ,*sarah*:27 ,*manadou":18 , ‘louis*:19 )) 1d. Series({*ahmed':11 ,"sarah':12 ,'mamadou':13 ,"louis':14 }) notes_chen = pd.Series({*ahmed 19) notes Fr 16, "sarah":17 ,’mamadou' :18 , “louis scores = pd.DataFrane({ ‘math’: scores.to_csv("2.¢sv") Ee > jotes_math, "Physics" :notes_phy, ‘French’ :notes_! from pandas import read_csv filenane = ‘data_1.csv’ names = ['a', "b', *e', *d°] data = read_csv(filename, names=nanes) print (data) from pandas import read_csv from pandas inport set_option filename = “pina-indians-diabetes.csv" data = read_csv(Filename, nanes=nanes) set_option(‘display-width’, 10) set_option( ‘precision’, 3) description = data.describe(), print (description) EEE ['preg’, ‘plas’, ‘pres’, ‘skin’, ‘test’, ‘mass’, pedi", ‘age’, ‘cla: from pandas import read_csv from pandas inport set_option filenane = "pina-indians-diabetes.csv" ames = ["preg’, ‘plas’, ‘pres’, ‘skin’, ‘test’, ‘mass’, ‘pedi’, ‘age’, ‘cla! data = read_csv(filename, namessnanes) set_option(‘display.width’, 120) set_option( ‘precision’, 3) correlations = data.corr(method="pearson') print (correlations) a # Exenple de data frane Amport pandas as pd data = ("state": ["Ohio", “ohio "year": (2000, 2001, 2002, 2001, 2002), "pop": (1.5, 1.7, 3.6, 2.4, 2.9]} “ohio”, "Nevada", "Nevada"], hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Morocco Academy pusvacarvame uaa, CoLumise, year 5 seace 5 pup ay # index des lignes et valeurs manquantes (NaN) frane2=pd.batafrane(data, colunns=["year", "state", "pop", “debt"], index=["one", "two", "three", "four", “Five"]) 4 Liste des colonnes frane columns # valeurs d'une colonnes frane["state"] frane.year # “imputation” frane2["debt"] = 26.5 frame? # créer une variable frame2["eastern”] = frane2.state frane2 ‘Ohio" frane2.colunns # supprimer une variable del frame2[u"eastern*] frane2.colunns oO NumPy et SciPy) NumPy et SciPy sont des bibliothéques logicielles trés utiles dans la résolution de problémes de modélisation a partir de données. Nous allons essayer de vous donner les connaissances de base nécessaires ainsi que toutes les fonctionnalités de ces deux librairies. Numpy NumPy est une bibliothéque de caleul scientifique dédié a la manipulation de matrices et de tableaux en multiple dimensions. L'utilisation de hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 30195 tsi082022 15:05 Python Morocco Academy import numpy as np L’emploi de raccourcis (ici np plut6t que numpy) permet de faciliter Vécriture des appels des fonctions de la librairie, Le type de base dans NumPy est le tableau unidimensionnel ou multidimensionnel composé d’ éléments de méme type. La classe correspondante est ndarray, 4 ne pas confondre avec la classe Python array.array qui gére seulement des tableaux unidimensionnels (et présente des fonctionalités comparativement limitées). Principaux attributs de ndarray © ndarray.ndim : dimension du tableau (nombre d’axes) © ndarray.shape : tuple d’entiers indiquant la taille dans chaque dimension ; ex : une matrice n lignes et m colonnes : (n,m) © ndarray.size : nombre total d°éléments du tableau © ndarray.dtype : type de (tous) les éléments du tableau ; il est possible utiliser les types prédéfinis comme numpy .int64 ou nunpy. floate4 ou définir de nouveaux types © ndarray.data : les données du tableau ; en général, pour aceéder aux données d’un tableau on passe plutat par les indices Création de tableaux De nombreuses méthodes de création de tableaux sont disponibles. D’abord, un tableau peut étre créé a partir dune liste (ou d’un tuple) Python, & condition que tous les éléments soient de méme type (le type des éléments du tableau est déduit du type des éléments de la liste ou tuple). NumPy infére automatiquement le type des éléments de la matrice a partir du types des objets Python. import nuepy as np vecteurt = np.array({1, 2, 3, 41) print vecteur_1) # array((1, 2, 3, 41) print veeteur_1.ctype) # dtype(” antsa") vecteur_2 = np.array((1.5, 2.5, 3.5, 4.51) pe) print(vecteur_2.4 # dtype( floatea") natrice1 = np.array([(1.5, 2, 3]+ [4 5, 611) print(matrice_1) #array([[ 1.5, 2., 3. 1, # [4., 5, 6 1) Dans les sections suivantes , nous allons voir plusieurs méthodes pour créer * facilement des matrices en utilisant numpy. NumPy dispose de fonctions hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 31195 tsi082022 15:05 Python Morocco Academy JOUVeAU ADIEU UE LOFTHE Et UE Lype GOMES, sas pty sisenivore u initialiser les entrées. from nunpy inport * mat_a = empty((3,5)) # 3 Lignes 2 collonnes print(mat_1) matrix : Renvoie une matrice a partir d'un objet de type tableau ou d'une chaine de données. Une matrice est un tableau 2D spécialisé qui conserve sa nature 2D a travers les opérations. ‘from nunpy inport * mata = matrix((} O 5 GQ" Format(11,21,13,14)) mat_2 = matrix((O O 050 0 ('-format(2,2,3,4,5,6)) print(mat_1) print(mat_2) random.uniform : ca permet de générer une séquence de nombres from numpy import * x = randos.uniform(1,12) # generer un nombre entre i et 1@ — :une seul y = randos.uniform(1,1@,28) generer une sequence de 2@ nonbres entre 1 ¢ print(x) print("~ print(y) P| , random.normal ; Dessinez des échantillons aléatoires partir d'une distribution normale (gaussienne). from nunpy inport * ‘nat = randon.normal(®,2,8) print (mat) random.random : génére des matrices dont les valeurs comprises entre 0 et 1 from nunpy inport * at = randon.randon((3,5)) # une matrice de 3x5 print (mat) random.randint :génére nombre entiers ‘from nunpy import * x = randon.randint(1,1@) # génére un nonbre entier entre 1 et 18 zune se. y= randon.randine(7) print(x,"I",y) a > hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Morocco Academy from nunpy inport * mat = randon.randint(1, 5, (3, 5)) # eatrice de nombre entiers entre 1 et 5 petne(ns) ee , from nunpy inport * x= randon.randint (4, size-20) # génére un vecteur de 1@ elenents conpris print(x) es , from nunpy inport * x = randon.randint(S,8, siz print(x) ee , 10) # géndre un vecteur de 10 elenents —conpr from nunpy inport * vect = random.randint(3,12,12) # un vecteur de 12 elenents entre 3 et 12 mat = reshape(vect, (3,4)) # forser une matrice 3x4 print(vect) print(*- print (mat) Pour créer une matrice 3D nous allons utiliser reshape et l'attribut size de la fonction random.randint from nunpy inport * randon.randint(2,5, size(3, 2, §)) # matrice 3D de nombre entiers ent print (mat) es , mat from nunpy inport * snat_1 = arange(12).reshape(3,4) # vecteur 12X1 --> matrice 3x4 mat_2 = arange(27)-reshape(3,3,3) # vecteur 12X1 --> matrice 3x3x3 print(mat_1) print(*- print(mat_2) random.rand ; Créez un vecteur ou matrice et remplissez-le avec des échantillons aléatoires 4 partir d'une distribution uniforme sur [0, 1] random.rand ==> directement des matrices sans passer par reshape from nunpy import * nat = randon.rand(7) ® vecteur de 7 élénents dont les valeurs comprises enti print (mat) # output hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Morocco Academy ee » en cas de 2D il suffit de passer a la fonction random.rand les dimension de la matrice qu'on veut, from nunpy inport * nat = randon.rand(3,4) # 20 3x4 print (mat) en cas de 3D il suffit de passer & la fonction random.rand les dimension de la matrice qu'on veut. from nunpy inport * mat = randon.rand(3,4,2) 3D: 3x4x2 print (mat) random.choice : Génére un échantillon aléatoire a partir d’un vecteur. from nunpy import * vect = [2,2,3,6,9,8,5,4,7,8,9,6,5,9,6] © = random.choice(vect) # choisir un element de vect de facon aleatoire print(c) on peut choisir plus de valeurs from nunpy inport * vect = [1,2,3,6,9,8,5,4,7,8,9,6,5,9,5] © = randon.choice(vect, size = 5) # choisir 5 elements du vect de facon alea’ print(c) Eee random.shuffle: shuffle() est une méthode intégrée du module random, Il est utilisé pour changer la position des éléments de la séquence. aylist = ["apple", "banana", “cherry"] random. shuffle(mylist) print(nyList) from nunpy inport * vect = [1,2,3,6,9,8,5,4,7,8,9,6,5,9,6] print(vect) print(*- random. shuffle(veet) print (vect) i) ones : Renvoie un nouveau tableau de forme et de type donnés, rempli de uns. hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 34105 tsi082022 15:05 Python Morocco Academy En cas de 1D: from nunpy inport * zeroz = zeros(3) # [@. @. .] onez = ones(5) [1.4 2. 1. 4.) print(zeroz) print(onez) En cas de 2D from nunpy inport * nat_1 = zeros((3,2)) # matrice de zeros 3x2 nat_2 = ones((2,5)) # matrice de uns 2x5 print(mat_1) print(mat_2) En cas de 3D from nunpy import * mat_i = zeros((2,2,3)) # 2x3x2 mat_2 = ones((2,2,3)) # 2x3x2 print(mat_1) print(mat_2) numpy.eye: Renvoie une matrice avec des uns sur la diagonale et des zéros ailleurs fron nunpy inport * Ade = eye(3) print (ide) numpy ailleurs Renvoie une matrice avec des uns sur la diagonale et des zéros from nunpy inport * mat = Full((2, 3), 11) # 2x3 [13] print (mat) numpy.linspace: Renvoie des nombres réguliérement espacés sur un intervalle spécifié (diseretisation , distribution ) from nunpy inport * vecti = Linspace(@,18) _# un vecteur de S@ elements entre @ et 18 print(len(vect1)) vect2 = Linspace(@,160,5) # un vecteur de 5 elenents entre 0 et 100 print(vect1) print(vect2) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 35195 tsi082022 15:05 Python Morocco Academy from nunpy inport * nati = Linspace(®,10,12).reshape(3,4) oat nat2 = Linspace(®,10@,27).reshape(3,3,3) # 3x33 print (mat1) print ( print(mat2) numpy.diag : Extraire une diagonale ou construire un tableau diagonal ‘from numpy import * nati = diag(array([15,1,5,21)) axe nat2 = diag(array([15,1,5,1]),k=3) 7x7 print (mata) print(*- print (mat2) output, [tas @ @ a) [e109 [ee 5 9 [eee 3) [re 8 e15 ee 9} [e800 10 9} [@ 90005 09 [@ eee ee 4 [@ ee 8 ee 9 [@ 0 ¢ 8 0 e 9] [ee 0 0 0 @ el] Les operations sur les matrice sur numpy count_nonzero : Compte le nombre de valeurs non nulles dans une matrice from ounpy import * = random.randint(@, 10, (3, 3)) # 3x3 (0,..,10) x = count_nonzero(natt) 4 nonbres des elements non nulls nat: print(mat1) print(x) Nous pouvant exiger des conditions supplémentaires fron unpy import * nati = random.randint(@, 18, (3, 3)) b = count_nonzero(a>5) € = count_nonzera(a5, axise1) 4 Logique selon les Lignes 1D © = count_nonzero(matacB, axise1) #2 [233] print (mata) print(*- print(b) print("~ print(e) output [a 671 13] [e971] from nunpy import * nat = randon.randint(4, 12, (2, 4)) nore_five = any(a>5) # True | False ..test sur l'ensemble des elenents print (mat) print(more_five) Pour les lignes from nunpy import * sat = randon.randint(4, 12, (2, 4)) nore_five = any(a>S,axis-1) # vecteur des True|False ..test sur Lensesble print (nat) print (nore_Five) < » Conditions sur tous les elements from nunpy import * nat = randon.randint(3, 7, (3, 3)) nore_five = all(nat>5) print (mat) print(more_five) # False stocker le resultat du traitement dans des objets python hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 37195 tsi082022 15:05 Python Morocco Academy b= mata € = sates print(mat) print () print (e) numpy.isclose : Renvoie un tableau boolgen selon une comparaison élément par élément dans une tolérance, from nunpy inport * matt = arange(9).reshape(3,3) snat2 = arange(9).reshape(3,3) mat3 = 2¢natz até = Isclose(mati,mat2,rtol = 0.1) # mat: matS = sclose(mati,mat3,rtol = 6.1) # nat: print (mata) print(*- print(mat2) print(*- print (mata) print ( print (*matd= print("- mat2 ? avec une tolerance de @ mat ? avec une tolerance de @ ") ) snat2 ?\n ",matd) ny | numpy.multiply : Multipliez lélément par élément. from nunpy inport * mata = arange(s) mat2 = enpty(5) sultiply(matt, 100, out=nat2) # effectuer 12 multiplication , puis stocker print(mati) # [@ 123 4] print(mat2) # [ @. 18. 20. 38. 48.) es , from nunpy import * matt = arange(3,15,2) mat2 = enpty(6) Power(matt, 2, ov! print (mata) print (mat2) output [35 7 93143] [9 25. 49, 82, 22. 169.) at) from nunpy inport * matt = arange(3,15,2) mat2 = add.reduce(matt) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Morocco Academy [3.5 7 9113] 48 from nunpy inport * mati = arange(3,15,2) nat2 = multiply.reduce(nat1) print (mata) print(mat2) output [35 7 93243] 135235 from nunpy inport * nati = arange(3,15,2) # ox nat2 = multiply.outer(nati,mat) — # 6x6 print (mata) print (mat2) # output [35 7 93143] [If 9 35 22 27 33. 39) [a5 25 35 45 55 65 [21 35 49 63 77 91) [27 45 63 a1 99 117 [33 55 77 99 121 143) [39 65 91 117 143 169)) unpy dnport = arange(1e) nat? = add.accumulate(nati) print (matt) print(mat2) # output [e123456789) [@ 1 3 6 1015 21 28 36 45 fron nunpy inport * nati = arange(2,8) nat2 = multiply.accunulate(mat1) print (mata) print(mat2) # output [234567] [ 2 6 24 126 720 seao) Pour savoir le nombre d’éléments ou la dimension d'une matrice, nous pouvant utiliser les fonctions suivantes: len size ndim from nunpy inport * print(arange(2)) #[@ 12 3 4 5 6 7 8 91041] hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 39195 ssi082022 15:05, Python Morocco Academy pranecaenarangecaeycresiapey any yy a9 ‘from nunpy inport * vecti = arange(12) nat2 = vectt.reshape(3,4) print(arange(22)) print(vectt.size) #32 print (mat2) print(c.size) #12 fron nunpy inport * a = arange(12) © = areshape(3,4) @ = c.shape: print(arange(22)) print(a.shape) # (12,) print(e) print(d) #3, 4) from nunpy inport * a= arange(12) © = a.reshape(3,4) 4 = esndis print(arange(22)) print(a.ndim) # 1 (10) print(c) print(d) #2 (20) Pour savoir le type de données nous utilisons dtype from nunpy inport * a= array(['a","6","e', = arange(12) eed 4 = c.reshape(3,4) = d.ctype print(a) print (a-dtype) print(arange(22)) print(4) print(e) fron nunpy inport * vectt = arange(2,11) = vect1.reshape(3,3) x = trace(natt) print(vect1) print(mat1) print(x) wa hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 40195 Python Morocco Academy Les fonctions d'algébre linéaire sont utilises pour fournir des implémentations efficaces de bas niveau d'algorithmes d'algébre linéaire standard. from nunpy inport * ‘arange(9).reshape(3,3) € = Linalg-cet(mati) # calcul du détersinant 4 = linalg-eig(mati) # calcul des valeurs propres print(mat1) print(c) print(d) Vous pouvez renvoyer une partie de vecteur en utilisant Ile slicing du python. Spécifiez l'index de début et I'index de fin, séparés par deux points, pour renvoyer une partie de l'objet. from nunpy inport * 2 = arange(19) = a[3] 4 = a[3:9] e = a[3:9:2] f= al-1] = al-3] print(a) #(@123456789) print(c) # 3 print(é) # [345.67 8] print(e) # [3.5 7] print(#) # 9 print(g) # 7 slicing suivant les lignes from nunpy import * arange(36) -reshape(6,6) a[3]# [18 19 20 21 22 23] a[3:9] a[3:9:2] al-1) g = al-3) print (2) print 231") print(<) print( a(3:9)") print (é) print(* ats:s:2y") print e) print at-]") print (f) print a-3]") print(e) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 41195 tsi082022 15:05 Python Morocco Academy from nunpy inport * a = arange(36) .reshape(6,6) = a[3,2] # simple indexing 3 ene Ligne 1 ere colonne (pes: = [3,2] #3 Ligne entiere = a2) # 2 ene colonne als. od = aft:2,] en print(a) print print(c) print ( print(4) print print(e) print! print(#) print print(g) es , # output [fe 123 4 5) [6 7 8 91023) [2 13 24 15 16 17] [1s 19 2@ 21 22 23] [24 25 26 27 28 29] [3@ 31 32 33 34 35]) 9 [18 19 20 21 22 23] [2 8 14 20 26 32) (rt 21 [7 8] [13 14) [19 28) [25 26] [32 32) [C6 7 8 91022) from nunpy inport * a = arange(36) .reshape(6, 6) = a[3s4,1:5] 6 = af2:,3:] e = af:2,:3] hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Morocco Academy print(a) print ( print(c) print print(d) print! print(e) print print(#) print print(g) from nunpy inport * -arange(36).reshape(6,6) 4 toutes les lignes avec pas de 2 et toutes les coli print ( print(c) print ( print(d) print! print(e) print print(#) print print(g) ee , le slicing et l'indexing sont trés important parce que nous permet de modifier et manipuler les objets en python et c'est le cas en from nunpy inport * mat = arange(a6).reshape(4,4) print (mat) print ( “y nat(2,3] = mat[2,3] + 108 print (mat) printi mat 3] print (mat) print mat (2,:] = 0 print (mat) print( hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Morocco Academy la matrice mat2 sera lige a la matrice mat; ga va étre affecter par toute modification de mat from nunpy inport * mat = arange(16).reshape (4,4) print (mat) print(*- mat = mat[: print(mat2) print(*- nat) print (mat) print("- print(mat2) es , Pour cette raison , nous utilisons souvent la fonction copy pour remédier & ce probléme " 1:3] # 1a matrice mat2 sera liee 2 1s matrice mat; ca va from nunpy inport * mat = arange(36).reshape (4,4) print (mat) print(*- mat = mat print(mat2) print("- nati print (mat) print ( print(mat2) ee > 3D " :,1:3)-copy() # La matrice mat2 ca va pas etre affecter par li from nunpy import * a = arange(18).reshape(3,3,2) = ata] 4 premier elenent (11 s'agit d'une matrice) d= a[1,2] dans Le prenier element (natrice), extraine 2 ene Ligne en! = a[2,2,1] # dans le deuxieme elesent (matrice), intersection entre det print(a) print(*- print(c) print(*- print(4) print ( print(e) TT > from nunpy inport * » mat = arange(16).reshape(4,4) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 44795 tsi082022 15:05 Python Morocco Academy print(b) vstack : Empilez des matrice en séquence verticalement (par ligne). hstack: Empilez les tableaux en séquence horizontalement (par colonne). from nunpy inport * a = arange(4)-reshape(2,2) arange(4).reshape(2,2)*5 © = vstack((a,b)) # concaténation verticale print(a) print (* print(b) print (™ print(c) | from nunpy inport * 2 =arange(4).reshape(2,2) b = arange(4).reshape(2,2)*5 © = nstack((a,b)) 4 concaténation horizontale print a) print (o) print (c) a > numpy.coneatenate : Joignez des matrice selon les lignes et les colonnes. ‘from numpy import * a = randon.randint (5,20, size=9).reshape(3,3) b = randos.randint(5,28, size=9).reshape(3,3) © = concatenate({a,b] , axis = 8) 4 cette operation est equivalente a vstacl print a) print( > print(b) print(™ print(c) | ‘from numpy import * a = random.randint(5,28, size=9).reshape(3,3) b = randon.randint(5,28, size=9).reshape(3,3) © = concatenate({a,b] , axis = 1) 4 cette operation est equivalente a hstac c= hstack((a,b)) print(a) print(" print(b) print (™ print(e) rs » hitpsslwwn.pythonmoroccoscademy.comilearnjtracks/data-science-avec-pythony ssi082022 15:05, Python Morocco Academy matrice. max: La fonction est utilisée pour trouver le maximum d’éléments de la matrice, argmax: La fonction est utilisée pour trouver la position du maximum. argmin: La fonction est utilisée pour trouver la position du minimum. Snport nuspy as np np.randon.randint(S,20, siz np.max(a) = np.min(a) 4 = np.argnax(a) # 1a position de "element max e = np.argmin(a) sreshape(3,3) print(a) print(*- print () print ¢ print(e) print print (é) print( print (e) from nunpy import * a = randos.randint(5,28, size=9).reshape(3,3) b = var(a) 4 scalaire = valeur : 1a variance mesure 1a disper © = cov(a) 4 nateice de dispersion print(a) print print(round(b,2)) print( print) < » Opérations arithmétiques L’une des caractéristiques importantes de NumPy est de faciliter les opérations arithmétiques des matrices comme addition, Soustraction Multiplication, Division etc. from nunpy import * andint(5,28, size-9).reshape(3,3) random-randint(5,28, size-8).reshape(3,3) ab # operation d'adition asa print(a) print print (o) print( a = randos hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 45995 ssi082022 15:05, Python Morocco Academy ‘from nunpy import * a = random.randint(5,28, size=8).reshape(3,3) b = randos.randint(5,28, size=9) .reshape(3,3) = at 4 multiplication d= afb # division print (a) print( print (o) print print(e) print(*- print) ‘from nunpy import * a =randon.randint(5,20, size-9).reshape(3,3) b ‘andom.randint(5,28, s1ze=9).reshape(3,3) a*3. multiplication par 3 b/S division par 5 print(a) print print (b) print( print (ec) prine¢ print(d) ‘from numpy import * ‘andon.randint(5,28, size=9) .reshape(3,3) b =random.randint(5,20, size-8).reshape(3,3) = sin(a) # appliquer 1a fonction sinus sur l'ensemble des elements de la be*2# lever a 1a puissance 2 tous les elements = log) print (a) print print(o) print print (c) print print (é) print(* print e) < > Pour que le produit de deux matrices soit défini, il faut que le nombre de colonnes de la premiére matrice soit égal au nombre de lignes de la deuxiéme, hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 47195 ssi082022 15:05, Python Morocco Academy (m X n) X (n x k) RA le produit est défini ‘from numpy import + b= randos.randint (1,4, siz randon.randins(1,4, siz ) € = dot(a,b) . print (a) print print () print ¢ print(e) ‘from nunpy import * wie la wie aie b a sone a-sun(axis = sonne print(a) print print(b) print! print(c) print print(4) print ( print(e) from numpy import * b = a.mean() a.std() a.var() 4 print (a) print ¢ print(b) print print(e) print print () ‘from nunpy import * hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ reshape(3,3) reshape(3,3)*4 Je produit matriciel = randos.randint (5,20, size=9).reshape(3,3) sum(a) a.sun() = asum(axis = 1) 8) de tous les elenents de tous les elenents de chaque Ligne de chaque colonne randos.randint(5,28, size=8).reshape(3,3)*5 # 1a moyenne de tous les elenents # L'ecart-type de tous les elenents # 1a variance de tous les elements random.randint(5,20, size=9).reshape(3,3)*2 48995 tsi082022 15:05 Python Morocco Academy print(b) # output [20 30 24) [38 36 28] [16 10 24]) les ~0.07509393 -0.38572714) [-0.07509393 1. -@.89104211] [-@.38572714 -0,89104211 1. ul DO , ‘from numpy import * a = randos.randint (5,20, siz ) -reshape(3,3)79 b = sort(a,axis=0) # tri suivant les colonnes © = sort(a,axis-1) # tri suivant les lignes print(a) print ( print(b) print( print(c) ‘from numpy import * a = randon.randint (1,4, size=9).reshape(3,3)"4 b = Linalg-inv(a) # b= inverse de a = dot(a,b) # produit matriciel théoriquenent 1a matrice b= las print(a) print ( print(b) print ( print(c) es , SciPy SciPy ajoute de trés nombreuses fonctions permettant de faire des calculs scientifiques. Il est possible d’importer SciPy en entier avec import scipy mais il est préférable de se limiter aux fonctionnalités utilisées, par exemple from scipy import linalg. scipy. Linalg contient toutes les fonctions de nunpy.1inalg plus quelques autres. Les calculs peuvent ainsi étre plus rapide si c’est scipy.1inalg qui est utilisée, Exemples : De nombreuses fonctionnalités statistiques sont disponibles dans le module scipy.stats, comme la génération de valeurs aléatoires suivant différentes distributions, des statistiques descriptives et des tests statistiques. hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Morocco Academy interpoter un signat est parrois tres uttie S11 vous manque aes aonnees aans un Dataset. Mais c'est une technique dangereuse, qui peut parfois transformer la réalité des choses ! # Création c'un Dataset import suspy as op import matplotlib.pyplot as pit x = np.linspace(®, 18, 10) y= np. sin(x) plt.seatter(x, y) from scipy.interpolate import interpid 4 engation de 1a fonction interpolation f= Anterpie(x, y, kind=*cubic*) # résultats de 1a fonction interpolation # sur de nouvelles données new_x = np.linspace(@, 18, 50) result = #(new_x) # visualisation avec matplotlib plt.seatter(x, y) plt.plot(newx, result, ry oO Visualisation avec Matplotlib matpI print(‘featurenanes : \n' , iris_data.feature_nanes) print ” print(‘disension * , x.shape) # (150, 4) print > ay Data y = inis_data.target print(‘target : \n’ , y{:68]) print ¢ 2) print(‘disension * , y.shape) print ( > print(‘target_nanes : \n’ , iris data.target_nanes) es load_diabete: Import Libraries from sklearn.datasets import load_diabetes # load diabetes data diabetes _data = load_diabetes() 4X vata X = diabetes_data.data print(‘Features \n’ , x(:4)) ", X.shape) print('feature names : \n' , diabetes _data.feature names) print( ‘Dimension wy Data y = diabetes _data.target print(‘target : \n’ , y{:10]) print('disension * , y.shape) load_digits: simport Libraries from sklearn.datasets import load_digits # load digits data digits data = load_digits() # xX vata X = digits_cate.data print('Features \n’ , x{:3]) print(‘dimension :' , X.shape) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 71195 tsi082022 15:05 Python Morocco Academy y = Gagees weve urge print(‘target \n’ , y[:16]) print(‘dimension : * , y.shape) aoad_wine: Import Libraries from sklearn.datasets import load_wine # load wine data wine_data = load_wine() # xX vate X = wine_data.data print('features \n’ , x(:3]) print('dimension * , x.shape) print('feature names :\n’ , wine data.feature_nanes) #y Data y = wine_data.target print(‘target \n' , y[:10)) print('disension * , y.shape) print(‘target_nanes \n' , wine_data.targ names) oad_breast_cancer: Import Libraries from sklearn.datasets import load_breast_cancer # load breast cancer date breast_data = load_breast_cancer() 4X vata X = breast_éata.data print( ‘features \n‘ , x[:3]) print(‘dimension * print(‘feature names : \n' , breast_data. feature nanes) > X.shape) ty bata y= breast_data.target print("target \n" , yf:10]) print(‘disension © , y.shape) print (‘target_nanes : \n" , breast_data.target_nanes) Cleaning Data Pour diverses raisons, de nombreux ensembles de données du monde réel contiennent des valeurs manquantes, souvent codées sous forme de blanes, de NaN ou d'autres espaces réservés. De tels ensembles de données sont cependant incompatibles avec les estimateurs scikit-learn qui supposent que toutes les valeurs d'un tableau sont numériques et ayant une signification. la meilleure stratégie consiste 4 imputer les valeurs manquantes, c'est-i-dire & les déduire de la partie connue des données. hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 2095 tsi082022 15:05 Python Morocco Academy from sklearn.inpute import Simplermputer data = [[1,2,np.ean], [3,np-nan,2], [5,np-nan,@], {np.nan,4,6 J, [5,8,np.nan], 145,53] print (data) simple_imputer = SimpleInputer(nissing_values-np.nan, strategy="mean’) simple_inputer = simple inputer. Fit(aata) new_data = sinple_imputer.transform(data) print ( *) print (new_da import nuspy as np from sklearn.ispute import Simplenputer gata = [[1,2,np.nan], (3,np.nan,1], [5,np.nan,@], Inp.nan,4,6 1, (5,@,np.nan], (4,5,5]] simple_inputer = SimpleInputer(missing_values=np.nan, strategy="median’ ) simple_inputer = simple_inputer. Fit (data) r-transform(data) newdata = sinple_dmpu print (data) print (new_data) from sklearn.ispute import Simplernputer gata = [[1,2,0], (3,,2), [5.0.0], [2,4,6}, [5,0,2), 145,53] simple_imputer = Simplernputer(missing_value simple_inputer = simple inputer.it(aata) new_data = sinple_imputer.transform(data) print (data) print (new_data) # Import Libraries from sklearn.datasets import load_breast_cancer from sklearn.inpute import Simpletaputer hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 73195 tsi082022 15:05 Python Morocco Academy # X vata breast_cata.data wy Data y = breast_data. target # Cleaning data inputed_nodule = Simpletaputer(missing values = np.nan, strategy Amputed_X = imputed_nodule.#1t(x) X = Amputed_x.transform(X) print('X Data :\n" , x[:5]) print('y Data: \n’ , y(:5]) metrics module Le module sklearn.metrics implémente des fonctions évaluant I'erreur de prédiction 4 des fins spécifiques. Ces métriques sont en cas de classification, régression et en clustering, Le module sklearn.metries implémente plu: performances de régression telles que: urs fonctions pour mesurer les © mean absolute error © mean squared error Le module sklearn. metrics implémente plusieurs fonctions pour mesurer les performances de classification telles que: confusion matrix accuracy score fl score recall score precision score precision recall fscore support precision recall curve classification report roc curve auc roc aue score zero one loss mean absolute error : lyon | a | oi =1i7 Ji hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 74195 tsi082022 15:05 Python Morocco Academy yipred = [2.5, 0.0, 2, 8] nae = mean_absolute_error(y_true, y_prea) print(* mean_absolute error = {} *.fornat(nae)) from sklearn.metrics import mean_absolute_error y.true = ([0.5, 1], [-2, 1], (7, -6)) yipred = [[8 2], [-4, 2], (8. -5]] ‘rae_a = mean_absolute_error(y_true, y_pred) ‘tae_2 © mean_absolute_error(y true, y_pred, multioutpute' iniform_average") mae_3 = mean_absolute_error(y true, y pred, multioutput=| print(*mean_absolute_error_i = {)"-forsat(mae_1)) print(*mean_absolute_error_? = {} *.format(mae_2)) print(*mean_absolute_error_3 = {} *.format(mae_3)) DLE Mean Squared Error ‘aw_values*) 1 Ay get = 1 i Yi) ‘from sklearn.metrics import mean_squared_error y.true = [3, -0.5, 2, 7] yipred = [2.5, 0.8, 2, 8] ‘mean_squared_error(y_true, y_pred) ytrue = ([8.5, 1},[-1, 1],(7, -6]] yipred = ((®, 2),(-1, 2],[8, -5]] ‘tse_i = mean_squared_error(y true, y_pred) ‘tse_2 = mean_squared_error(y true, y_pred, sultioutput="unifors_average’) ‘tse_3 = mean_squared_error(y_teue, y_pred, sulticutput«'raw_values") print(*mean_squared_error_1 = {)*.format(mse_1)) ‘mean_squared_errorr_2 = {) "-format(=se_2)) print("mean_squared_error_3 = {} "-forsat(nse_3)) print! Media Absolute Error from sklearn.metrics import median_absolute_error y.true = (3,-0.5, 2, 7] yipred = [2.5, 0.8, 2, 8] ‘tae = nedian_absolute_error(y_true, y_pred) print(*median_absolute error = {) *.format(sae)) Confusion Matrix : Calculer la matrice de confusion pour évaluer exactitude d'une classification, from sklearn.metrics import confusion matrix y.pred = ['a",'a',"b','b",'a","b',‘a!,"a','a",'a") hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 75995 tsi082022 15:05 Python Morocco Academy ran = qy erurmaegenyy from sklearn.metrics import confusion matrix yopred = ['a","b',"e",'a, "bi, 'e"y "a", "bY, "cs '3"] yotrue = ['a','a",b', "br, '2", "BT," ‘br cm = confusion_aatrix(y true, y_pred) print(*confusion_matrix = {) “.format(cn)) from sklearn.metrics import confusion matrix y_pred = [5,8,9,9,8,5,5,9,8,5,9,8] y.true = [9,9,8,8,5,5,3,5,8,9,8,5] cm = confusion_aatrix(y true, y_pred) print (“confusion matrix = {} *.format(cn)) Accuracy Score from sklearn.netrics Amport accuracy _score y_pred = (8, 2, 1, 3,5,3] y.true = [@, 2, 2, 3.5.3] acs_a = accuracy_score(y_true, y_pred) acs_2 = accuracy_score(y_true, y_pred, nornalizesFalse) print ("aceuracy_score_t = {)".foreat(acs_1)) print ("aceuracy_score_2 = {) *.format(acs_?)) FI Score from sklearn.metrics import f1_score yipred = [®, 2, 1, @ @, 1) y.true = [@, 2, 2, @ 2, 2] fone print ¢ fi_score(y_true, y_pred, average='micro") "Format (#_one)) Reeall Score (Sensitivity) from sklearn.netrics import recall_score y.pred = ['a',"b',"c","a","b',"¢ yotrue = ['atyta' "Bi "bty tat tb tety tet, "bY,"b] recall = recall_score(y_true, y_pred, average-None) print(*recal1_score = {)".fornat(recall)) Precision Score (Specificity) from skleara.metrics import precision scone y.pred = y_true veya) oT Ps = precision score(y true, y_pred, average-None) print(“precision_score = ()".fermat(ps)) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ 76195 tsi082022 15:05 Python Morocco Academy import nunpy as np ‘from sklearn.metrics Amport precision_recali_fscore_support y.pred = np.array({*eat", ‘pig’, “dog’, ‘cat", ‘cat', “dog"]) ytrue = np.array({*eat", ‘dog’, "pig", ‘eat, ‘dog’, “pig') pss print ( precision_recall_fscore_support(y_true, y_pred, average=None) recision_recall_fscore_support :\n (}".format(pss)) Precision Recall Curve import suspy as np from sklearn.metrics import precision_recall_curve y.pred = np.array([®, @ 1, 1]) yutrue = np.array([@.1, 0.4, 8.35, 9.8]) precision, recall, thresholds = precision_recall_curve(y_pred,y_true) print(*precision = {}". format (precision)) print(*recall = {} ".format(recall)) print(*thresholds = {} *.format(thresholés)) Classification Report from sklearn.metrics import classification_report yotrue = [8, 2, 2, 2, 2,5 y.pred = [@, @, 2, 2, 1,8) print (classification report(y true, y_pred )) from sklearn.metrics import classification_report yutrue = ['2',"d','a", "g's 'a","a"] yipred = ['a","a', "g's "g's 'd", 8") report = classification report(y true, y_pred ) print(“classification_report = {} ".format(report)) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ T7195 tsi082022 15:05 Python Morocco Academy Les classes du module sklearn.feature_selection peuvent étre utilisées pour Ja sélection des variables les plus significatives, la réduction de la dimensionnalité sur des ensembles ¢'échantillons, soit pour améliorer les scores de précision des estimateurs, soit pour augmenter leurs performances sur des ensembles de données de trés grande dimension. Le module module sklearn.feature_selection implémente plusieurs fonctions telles que: Select Percentile Selection Generic Univariate Select Select KBest Select From Model Select Percentile from sklearn.datasets import load_digits from sklearn.feature_selection import SelectPercentile, chi2 X, y = load_digits(return_X_y=True) print(*initial dimension = {}".fornat(x.shape)) X.new = SelectPercentile(score func =chi2, percentile-10).fit_transform(X, y print(*new dimension = {)".format(X_new.shape)) ‘Ds from sklearn.datasets import load_breast_cancer from sklearn.feature_selection import SelectPercentile , chi2 data = load_breast_cancen() X = data.date y = data.target print("initial dimension = {)".format(X.shape)) select_percentile = SelectPercentile(score_func = chi2 , percentile = 20).fi print(*new éimension }*-format(select_percentile.shape)) es , from sklearn.datasets import load digits from sklearn.feature_selection import SelectPercentile, chi2 X, y = load_digits(return_X_y=True) print("initial dimension = {)".format(X.shape)) X_new = SelectPercentile(score func =chi2, percentile=10) Knew. Fit(X, y) selected = X_new.transform(x) print(*new dimension = {}".format(selected.shape)) print("get_support :\n (}".format(X_new.get_support())) Generic Univariate Select from sklearn.datasets import load_breast_cancer from sklearn.feature_selection import GenericUnivariateselect, chi2 X, y = load_breast_cancer(retun_X_y=True) hitpsslwwn.pythonmoroccoscademy.comilearntracks/data-science-avec-python’ tsi082022 15:05 Python Morocco Academy pune = Geanarurmer eras eransrermas yy print(new dimension = {}".format(x_new.shape)) print ( jet_support :\n (}".format transformer. get_support())) Select KBest from sklearn.datasets import load_digits from sklearn.feature_selection import Selectksest, chi2 X, y = load_digits(return_x ys print("initial dimension = {}".format(X.shape)) X_new = SelectkBest(chi2, «=38).fit_transform(x, y) print(*new dimension = {)".format(X_new.shape)) rue) Select From Model from sklearn.datasets import load_breast_cancer from sklearn.ensemble import RandoaForestClassi fier from sklearn.feature selection import SelectFronilodel breast_cancer = load_breast_cancer() X = breast_cancer.data y = breast_cancer.target sel = SelectFroatodel RandonForestClassifier(n_estinators = 20)) sel. Fit(%y) selected_features = sel.transform(X) sel.get_support() data scaling Traitements numériques des données Le prétraitement des variables numériques dépend beaucoup de la qualité des données recues. Si le processus de récolte est manuel, il faut s‘attendre a quelques erreurs de saisie. Si le processus de récolte est automatique comme pour un site web, il faut sattendre a quelques artefacts liés a son implémentation. Certains bugs viennent également du fait que les données proviennent de la fusion de plusieurs bases et que les données ont déja été prétraitées mais de fagon différentes. Tl n’existe pas de régles génériques. I faut toutefois garder a esprit que certains des prétraitement ne sont pas nécessaires selon le modéle de machine learning utilisé par la suite. La normalisation est en régle général trés utile si le modéle de machine learning s‘apprend a l'aide de méthode a gradient. Il n’est théoriquement pas nécessaire, il est numériquement préférable. Normalisation. La normalisation est une technique souvent appliquée dans le cadre de la préparation des données pour le Machine Learning. L'objectif de la normalisation est de modifier les valeurs des colonnes numériques du jeu de données pour utiliser une échelle commune, sans que les différences de plages de valeurs ne soient faussées et sans perte d'informations, Certains algorithmes ont également besoin d'une normalisation pour modéliser t correctement les données. itp: pythonmoroccoscademy.comileartracksidata-sclence-avec-python! 79195

You might also like