Sunteți pe pagina 1din 15

Librarii (packages)

Funcțiile și metodele Python sunt extrem de utile: putem utiliza, practic, codul altor
persoane pentru a ne rezolva propriile probleme. Cu toate acestea, adăugarea tuturor
funcțiilor și metodelor care au fost scrise până acum la aceeași distribuție Python ar fi
imposibilă.

Ar fi foarte mult cod pe care nu-l vom folosi niciodată. De asemenea, mentenanta
întregului cod ar fi extrem de dificilă. Aici intră în joc librăriile. Ne putem gândi la librării
ca la un director de scripturi Python.

Fiecare astfel de script este un așa-numit modul. Aceste module specifică funcții,
metode și noi tipuri de date Python care vizează rezolvarea unor probleme specifice.
Există mii de librării Python disponibile pe internet. Printre acestea se numără: NumPy
(potrivit pentru a lucra eficient cu array-uri), Matplotlib (pentru vizualizarea datelor) și
Scikit-learn (pentru machine learning). Nu toate aceste librării sunt disponibile în Python
în mod implicit.

Instalarea Librariilor

Pentru a utiliza librăriile Python, va trebui mai întâi să le instalam și apoi să apelăm
module din librării în script pentru a-i spune lui Python că dorim să utilizăm librăriile
date.
Importarea librariilor

Înainte de a putea face acest lucru, ar trebui să importăm librăria sau un anumit modul
al librăriei. Pentru a importa întregul pachet NumPy, putem face import NumPy, astfel:

O funcție folosită în mod obișnuit în NumPy este array. Este nevoie de o listă ca input.
Simpla apelare a funcției array în acest fel va genera o eroare. Funcția array este foarte
utilă pentru data science. Putem, de asemenea, să importăm întreaga librărie.

Acum, în loc de numpy.array([ ]), va trebui să scriem np.array([ ]) pentru a utiliza funcția
de array NumPy. Există cazuri în care avem nevoie doar de o funcție specifică a unei
librării.

Python ne permite să facem acest lucru explicit în codul scriptului.


Să presupunem că vrem să folosim doar funcția array din librăria NumPy. În loc să
importăm NumPy, putem să sa importam array din NumPy, așa:

De data aceasta, putem apela pur și simplu funcția array în acest fel, nu este nevoie să
utilizăm punctul NumPy aici. Versiunea de import pentru a utilizarea anumitor părți ale
unei librării poate fi utilă pentru a limita cantitatea de cod, dar pierdem și o parte din
context.
Să presupunem că lucrăm într-un script Python lung. Importam funcția array() din
NumPy în partea de sus, iar mai târziu, utilizăm această funcție array(). Altcineva care
ne citește codul ar fi uitat că această funcție array() este o funcție specifică NumPy - nu
este clar din apelarea funcției.

În acest sens, este de preferat apelarea cu NumPy standard: în acest caz, funcția
apelată este numpy.array([ ]), devine foarte clar că lucrăm cu NumPy.

Recapitulare liste

Listele Python sunt importante. O listă poate conține orice tip de date și poate conține
diferite tipuri în același timp. De asemenea, putem modifica, adăuga și elimina
elemente. Acest lucru este util, dar lipsește o caracteristică, o caracteristică foarte
importantă.
Când analizam datele, vom dori adesea să efectuam operațiuni pe întregi colecții de
date in mod rapid. Pentru liste, aceasta este o problemă.

Să reluăm exemplul referitor la lista height. Să presupunem că avem și valorile greutatii.


Astfel avem două liste, height și weight. Prima persoană are 1.73 metri înălțime și
cântărește 65.4 kilograme.

Dacă vrem să calculați indicele de masă corporală BMI pentru fiecare membru, vom
întâmpina o eroare, deoarece Python nu știe cum să facă calcule pe liste întregi.
Am putea rezolva acest lucru trecând prin fiecare element al listei unul după altul și
calculând BMI-ul pentru fiecare persoană separat, dar acest lucru este ineficient.

O soluție mult mai elegantă este utilizarea NumPy sau Numeric Python. Este o librărie
Python care, printre altele, oferă o alternativă la lista obișnuită Python: array-ul NumPy.
Array-ul NumPy este destul de similar cu lista, dar are o caracteristică suplimentară:
putem efectua calcule pe întregul array. Este foarte ușor și, de asemenea, foarte rapid.

Pentru a utiliza NumPy, importam librăria NumPy, astfel:


Să începem cu crearea unui array NumPy. Facem acest lucru cu funcția array() a
NumPy: input-ul este o listă Python obișnuită. Apelăm array() de două ori, pentru a crea
versiuni NumPy ale listelor de înălțime și greutate: np_height și np_weight:

Să încercăm să calculăm BMI-ul tuturor elementelor cu o singura apelare. De data


aceasta a funcționat bine: calculele au fost efectuate în funcție de poziția fiecărui
element în parte.

BMI-ul primei persoane a fost calculat împărțind primul element în np_weight la pătratul
primului element în np_height, BMI-ul celei de-a doua persoane a fost calculat cu al
doilea element înălțime și greutate și așa mai departe.

Operatorii logici comparatori

Să facem o comparație rapidă. Mai întâi, am încercat să facem calcule cu liste


obișnuite, weight / height ** 2, dar ne-a dat eroare, deoarece Python nu știe cum să
facă calcule cu liste așa cum ne dorim.
Apoi, aceste liste obișnuite au fost convertite în array-uri NumPy. Aceleași operații
funcționează acum fără nicio problemă: NumPy știe să lucreze cu array-uri ca și cum ar
fi valori singulare.

Totuși, ar trebui să fim atenți. În primul rând, NumPy poate face toate acestea atât de
ușor, deoarece presupune că array-ul dvs. NumPy poate conține doar valori de un
singur tip. Este fie un array de numere float, fie de valori booleene și așa mai departe.

Dacă încercăm să creăm un array cu diferite tipuri de date, ca acesta de exemplu,


array-ul NumPy rezultat va conține un singur tip de date, string în acest caz.
Datele booleene și numerele float au fost ambele convertite în string-uri. În al doilea
rând, ar trebui să știm că un array NumPy este pur și simplu un nou tip de tip de date
Python, cum ar fi numerele float, string-urile și listele. Aceasta înseamnă că vine cu
propriile sale metode, care se pot comporta diferit.

Luăm această listă Python și aceast array NumPy, de exemplu:

Dacă efectuam operatia python_list + python_list, elementele listei sunt lipite împreună,
generând o listă cu 6 elemente.

Dacă faceți acest lucru cu array-urile NumPy, pe de altă parte, Python va face o sumă
în funcție de elementele din array.

Ne asigurăm ca acordăm atenție atunci când jonglam cu diferite tipuri de date Python,
deoarece rezultatele pot diferi foarte mult.
Extragerea datelor NumPy

Putem lucra cu array NumPy aproape la fel ca și cu listele Python obișnuite. Când
dorim să extragem elemente din array, de exemplu, putem utiliza paranteze patrate.

Să presupunem că dorim să obținem BMI-ul pentru a doua persoană, deci la indexul 1.


Acest cod va rezolva cerința. În special pentru NumPy, există și o altă modalitate de a
face extragerea: utilizarea unui array de valori boolean.

Să presupunem că dorim să obținem toate valorile BMI din array care sunt peste 23. Un
prim pas este utilizarea semnului mai mare, astfel:

Rezultatul este un array NumPy care conține valori booleene: True dacă BMI-ul
corespunzător este peste 23, False dacă este mai mic. În continuare, putem utiliza
acest array boolean între paranteze pătrate pentru a face extragerea.
Sunt selectate numai elementele din BMI care sunt peste 23, deci pentru care valoarea
booleană corespunzătoare este True. Există un singur BMI care este peste 23, așa că
obținem un array NumPy cu o singură valoare, acel BMI specific.

Utilizarea rezultatului unei comparații pentru a face o selecție a datelor este o


modalitate foarte comună.

Tipuri de array NumPy

Dacă dorim să stabilim tipul acestor array-uri, Python le prezintă ca fiind numpy.ndarray.
Numpy ne spune că este un tip de date care a fost definit în librăria NumPy. ndarray
reprezintă un array cu n dimensiuni.
Array-urile np_height și np_weight sunt array-uri unidimensionale, dar este posibil să se
creeze array-uri bidimensionale, tridimensionale, chiar și cu șapte dimensiuni.

Putem crea un array NumPy 2D dintr-o listă obișnuită de liste Python. Să încercăm să
creăm un singur array NumPy pentru toate datele de înălțime și greutate din listele
weight si height astfel:

Dacă printam în consolă np_2d acum, vom observa că este o structură de date
dreptunghiulară: Fiecare sublistă din listă corespunde unui rând din tabloul Numpy
bidimensional.

Cu np_2d.shape, putem vedea că avem într-adevăr 2 rânduri și 5 coloane.

Shape este un așa-numit atribut al matricei np_2d, care ne oferă mai multe informații
despre cum arată structura de date. De asemenea, pentru array-urile 2D se aplică
regula NumPy: un array poate conține doar un singur tip de date.
Dacă schimbăm un număr float în string, toate elementele array-ului vor fi forțate în
string-uri, pentru a ajunge la un array omogen.

Extragerea elementelor din array 2D

Ne putem gândi la array-ul NumPy 2D ca la o listă îmbunătățită de liste: Putem efectua


calcule pe array, așa cum am văzut anterior, și putem utiliza moduri mai avansate de
extragere.

Să presupunem că dorim sa extragem primul rând și apoi al treilea element din acel
rând. Pentru a selecta rândul, apelăm indexul 0 între paranteze drepte. Nu uităm că
indexarea începe de la zero. Pentru a selecta apoi al treilea element, putem extinde
aceeași apelare cu o altă pereche de paranteze, de data aceasta cu indexul 2.
Practic, selectam rândul, apoi din acel rând faceți o altă selecție. Există, de asemenea,
o modalitate alternativă de extragere, folosind paranteze pătrate simple și virgulă.
Apelarea returnează exact aceeași valoare ca înainte.

Valoarea de dinaintea virgulei specifică rândul, valoarea de după virgulă specifică


coloana. Sunt returnate intersecția rândurilor și coloanelor pe care le-ați specificat.
Această variantă este mai intuitivă și deschide mai multe posibilități.

Să presupunem că dorim să selectăm înălțimea și greutatea celui de-al doilea și al


treilea membru al listei fam. Selectam ambele rânduri, așa că utilizăm două puncte
înainte de virgulă.
Ne interesează doar a doua și a treia coloană, așa că folosim indexul de la 1 la 3 după
virgulă. Reținem că al treilea indice nu este inclus.
Intersecția ne oferă un array 2D cu 2 rânduri și 2 coloane: În mod similar, putem selecta
greutatea tuturor membrilor listei fam astfel:

Selectam doar al doilea rând, cu 1 înainte de virgulă. Vrem toate coloanele, așa că
folosim două puncte după virgulă. Intersecția ne oferă întregul rând doi. În cele din
urmă, array-urile NumPy 2D ne permit să facem calcule în funcție de elemente, în
același mod în care am făcut-o cu array-urile NumPy liniare (unidimensionale).

S-ar putea să vă placă și