Pandas
Obiective
Să înțelegeți care e diferența dintre Numpy și Pandas.
Să știți cum să utilizați funcțiile din Pandas și metodele claselor pandas.Series, și pandas.DataFrame.
Să înțelegeți conceptele statistice - std, Q1,Q2,Q3.
Să știți cum să utilizați metodele de selectare din Pandas.
Să fiți capabile să curățiți o bază de date.
Să știți cum să modelați datele.
Pandas 🐼
De ce Pandas?
Am văzut mai devreme că librăria Numpy ne oferă libertatea de a lucra mai ușor cu mai multe dimensiuni decât listele de liste. Cu ajutorul oparțiilor vectorizate putem mai rapid și mai ușor să transformăm datele decât folosind loop-ul for
.
Totuși Numpy are câteva limitări:
Numpy nu oferă posibilitatea de a avea denumirile de coloane
Numpy permite de a avea doar un singur tip de date într-un array
Nu conține metode gata facute(pre-built) care să faciliteze procesul de analiză a datelor.
Limitările de mai sus sunt rezolvate de Pandas. Pandas nu este o ”înlocuire” a librăriei Numpy, ci mai degrabă e o extensie a lui Numpy. Codul din spatele funcțiilor și metodelor din Pandas se bazează pe libraria Numpy astfel multe din conceptele anterior învățate le vom regăsi și aici.
Import pandas
Pandas are 2 clase principale: pandas.Series și pandas.DataFrame.
Care este diferența dintre aceste două clase?
Pandas.DataFrame
DataFrame-ul e o structură primară a librăriei Pandas, bi-dimensională și heterogenă.
Putem să construim un DataFrame utilizând o listă de liste sau un array.
0 | 1 | 2 | 3 | |
0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
Putem să utilizăm un dicționar în crearea unui DataFrame.
a | b | c | |
0 | 1 | 5 | 9 |
1 | 2 | 6 | 10 |
2 | 3 | 7 | 11 |
3 | 4 | 8 | 12 |
Clasa DataFrame are și un parametru cu care putem să specificăm numele coloanelor într-o listă. De data asta atribuim DataFrame-ul unei variabile.
a | b | c | d | |
0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
Ce diferență este între primul, al doilea și al treilea tabel?
a | b | c | |
0 | 1 | 3 | 5 |
1 | 2 | 4 | 6 |
Pandas.Series
Obiectul Series este un ndarray cu o singură dimensiune.
Ca să instanțiem un obiect Series putem folosi o listă de valori.
Obiectul Series poate avea și un nume.
Un obiect Series poate fi și sintaxa de mai jos. Ce reprezintă sintaxa de mai jos?
Sintaxa de mai sus reprezintă cea mai simplă modalitate de a selecta o coloană dintr-un DataFrame.
Documentație:
Elementele unui DataFrame
Cum convertim din Pandas in Numpy?
a | b | c | d | |
0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
Metoda to_numpy()
a clasei DataFrame convertește un obiect DataFrame într-un array.
Citirea unui fișier CSV cu Pandas
Pentru a accesa un set de date, putem să folosim funcția read_csv() care primește ca argument path-ul, sau ”calea” spre fișierul CSV.
Această funcție ne returnează un DataFrame.
Documentație: pandas.read_csv()
Metoda head(), aparține clasei DataFrame. Această metodă ne permite să vizualizăm implicit primele 5 rânduri din tabel.
Însă putem să vizualizăm și mai multe rânduri dacă specificăm acest parametru.
Id | Name | Authour | Score | Rating | Rating Count | Review Count | Page Count | Year | Genres | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213p | 1999 | NaN |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371p | 2004 | Fiction |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32p | 2007 | Childrens |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654p | 2003 | Classics |
Metoda tail() este opusul metodei head().
Id | Name | Authour | Score | Rating | Rating Count | Review Count | Page Count | Year | Genres | |
195 | 17899948 | Rebecca | Daphne du Maurier | 328317 | 4.23 | 430751 | 22157 | 449p | 2013 | Classics |
196 | 32261 | Tess of the D'Urbervilles | Thomas Hardy | 88562 | 3.80 | 233821 | 8491 | 518p | 2003 | Classics |
197 | 7126 | The Count of Monte Cristo | Alexandre Dumas | 116688 | 4.25 | 731027 | 20622 | 1276p | 2003 | Classics |
198 | 17245 | Dracula | Bram Stoker | 636610 | 4.00 | 907768 | 24683 | 488p | 1986 | Classics |
199 | 662 | Atlas Shrugged | Ayn Rand | 247445 | 3.69 | 348149 | 17053 | 1168p | 1999 | Classics |
Cum salvăm un DataFrame într-un fișier CSV?
Metoda to_csv()
returnează un fișier CSV. Această metodă primește ca parametri numele fișierului. De asemenea specificăm parametrul index
cu valoarea False
ca să nu anuleze indexul exitent din DataFrame transformându-l într-o coloană și să indexeseze din nou rândurile.
Atribute
Aceste atribute ne ajută să investigăm DataFrame-ului.
Atributul columns
ne returnează o listă cu numele coloanelor din tabel.
Atributul dtypes
ne ajută să investigăm ce tipuri de date avem în tabel.
Atributul index
ne returnează intervalul de indecși conținut de DataFrame-ul books
.
Atributul shape ne returnează un tuplu care conține numărul de rânduri și numărul de coloane.
Metode
Metode de investigare a DataFrame-ului
Metoda describe()
ne oferă informații statistice despre toate coloanele numerice.
Id | Score | Rating | Rating Count | Review Count | Year | |
count | 2.000000e+02 | 2.000000e+02 | 191.000000 | 2.000000e+02 | 200.000000 | 200.000000 |
mean | 4.031287e+06 | 3.704144e+05 | 4.111152 | 1.001351e+06 | 28013.625000 | 2002.105000 |
std | 1.050539e+07 | 4.211493e+05 | 0.234172 | 1.002018e+06 | 25818.271576 | 9.026147 |
min | 1.000000e+00 | 7.125500e+04 | 3.410000 | 8.387000e+03 | 131.000000 | 1963.000000 |
25% | 5.123500e+03 | 1.046262e+05 | 3.970000 | 3.484505e+05 | 10847.000000 | 1999.750000 |
50% | 2.424650e+04 | 2.029340e+05 | 4.120000 | 6.543600e+05 | 19901.000000 | 2003.000000 |
75% | 2.756655e+05 | 4.999625e+05 | 4.270000 | 1.299898e+06 | 36667.500000 | 2006.000000 |
max | 5.289286e+07 | 2.959668e+06 | 4.620000 | 6.808998e+06 | 169961.000000 | 2019.000000 |
Abaterea standarda
Ce este std sau abaterea standardă (standard deviation)?
Deja sunteți familiare cu histograma, știți ce înseamnă distribuția valorilor într-o histogramă. Un aspect interesant al distribuției este variabilitatea (variability) valorilor.
Ca sa ne dăm seama cât de mult variază valorile într-o distribuție trebuie să investigăm distanța valorilor de la media distribuției.
Ulterior însumând aceste distanțe, și împărțind totalul la numărul de valori din distribuție vom obține o medie aritmetică a distanțelor care ne va indica cât de mult variază valorile într-o distribuție.
De ce am obținut suma = 0?
Din câte observăm suma totală a volorilor sub medie este egală cu suma totală a valorilor deasupra mediei.
Ce trebuie să facem ca să nu obținem suma = 0?
Valoarea de mai sus, 2.75, reprezintă distanța medie absolută (mean absolute distance), sau în statistică se mai numește abaterea medie absolută (mean absolute deviation).
O altă soluție de a evita suma = 0, e să ridicăm la puterea a doua toate distanțele.
Care este avantajul de a folosi valori pătratice față de valori absolute?
Valoarea 24.75 reprezintă distanța medie patratică (mean squared distance) sau variația (variance) valorilor într-o distribuție.
Acum această valoare trebuie să fie standardizată sau adusă la "starea normală" și vom face asta prin extragerea rădăcinii pătrate.
Valoarea ~4.97 am obținut-o extragând rădăcina pătrată din distanța medie pătratică, această valoare reprezintă abaterea standardă (standard deviation).
La ce ne ajută abaterea standardă?
Imaginați-vă că vreți să cumpărați o casă. Și prețul acestei case este de 60000 de euro. Vă întrebați dacă această casă este scumpă, sau nu, față de restul caselor de pe stradă. Să presupunem că avem această listă de prețuri ale caselor de pe această stradă.
Unde se plasează 60000 de euro? Între axa verde și roșie, sau între axa roșie și galbenă? Observăm că 60000 de euro este un preț ușor mai mic decât media prețurilor caselor de pe stradă dar totuși nu e un preț foarte mic pentru că nu trece peste limita unei abateri standarde sub medie.
Surse adiționale:
Percentile
Ce sunt percentilele?
Percentila este o mărime care se folosește în statistică și indică câte procente din populația distribuită crescător după o anumită valoare se află până la aceasta.
De exemplu până la a 10 percentilă se află 10 procente din populație. După a 10-a percentilă se află 90% din populație.
A 25-a, 50-a, 75-a percentilă se mai numesc cuartile (quartiles): Q1, Q2, Q3.
Resurse utile: Video varianta, standard deviation
Metode: Series
Metoda value_counts() returnează frecvența valorilor dintr-o coloană.
Documentație: Series.value_counts()
Metode înlănțuite
Conceptul de metode înlănțuite permite aplicarea mai multor metode una peste rezultatul alteia într-o linie de cod.
Pandas are încorporate metode de plotare bazate pe metodele din matplotlib.
Selectarea cu loc[] și iloc[]
loc[]
Loc este o proprietate prezentă și la clasa DataFrame, și la clasa Series. Această proprietate permite selectarea elementelor din DataFrame sau Series prin indexare.
Id | Name | Authour | Score | Rating | Rating Count | Review Count | Page Count | Year | Genres | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213p | 1999 | NaN |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371p | 2004 | Fiction |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32p | 2007 | Childrens |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654p | 2003 | Classics |
Name | Score | |
0 | The Perks of Being a Wallflower | 745557 |
1 | The Kite Runner | 427631 |
2 | A Walk to Remember | 104093 |
3 | Goodnight Moon | 93488 |
4 | Moby-Dick or, the Whale | 200963 |
... | ... | ... |
195 | Rebecca | 328317 |
196 | Tess of the D'Urbervilles | 88562 |
197 | The Count of Monte Cristo | 116688 |
198 | Dracula | 636610 |
199 | Atlas Shrugged | 247445 |
200 rows × 2 columns
Id | Name | Authour | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky |
1 | 77203 | The Kite Runner | Khaled Hosseini |
2 | 35545737 | A Walk to Remember | Nicholas Sparks |
3 | 32929 | Goodnight Moon | Margaret Wise Brown |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville |
... | ... | ... | ... |
195 | 17899948 | Rebecca | Daphne du Maurier |
196 | 32261 | Tess of the D'Urbervilles | Thomas Hardy |
197 | 7126 | The Count of Monte Cristo | Alexandre Dumas |
198 | 17245 | Dracula | Bram Stoker |
199 | 662 | Atlas Shrugged | Ayn Rand |
200 rows × 3 columns
Id | Name | Authour | Score | Rating | Rating Count | Review Count | Page Count | Year | Genres | |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654p | 2003 | Classics |
6 | 35031085 | Frankenstein: The 1818 Text | Mary Wollstonecraft Shelley | 430783 | 3.80 | 1132408 | 31805 | 288p | 2018 | Classics |
Id | Name | Authour | Score | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 |
Name | Authour | Score | |
2 | A Walk to Remember | Nicholas Sparks | 104093 |
3 | Goodnight Moon | Margaret Wise Brown | 93488 |
4 | Moby-Dick or, the Whale | Herman Melville | 200963 |
iloc[]
Iloc este la fel o proprietate a claselor DataFrame și Series. Cu iloc putem să selectăm coloanele sau rândurile doar după indecșii numerici.
Id | Name | Authour | Score | Rating | Rating Count | Review Count | Page Count | Year | Genres | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213p | 1999 | NaN |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371p | 2004 | Fiction |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32p | 2007 | Childrens |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654p | 2003 | Classics |
Id | Name | Authour | Score | Rating | Rating Count | Review Count | Page Count | Year | Genres | |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654p | 2003 | Classics |
6 | 35031085 | Frankenstein: The 1818 Text | Mary Wollstonecraft Shelley | 430783 | 3.80 | 1132408 | 31805 | 288p | 2018 | Classics |
Name | Authour | Score | Rating | |
2 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 |
3 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 |
4 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 |
5 | City of Bones (The Mortal Instruments, #1) | Cassandra Clare | 713154 | 4.10 |
6 | Frankenstein: The 1818 Text | Mary Wollstonecraft Shelley | 430783 | 3.80 |
7 | Oh, the Places You'll Go! | Dr. Seuss | 78563 | 4.36 |
8 | One Hundred Years of Solitude | Gabriel García Márquez | 613129 | 4.08 |
9 | The Complete Stories and Poems | Edgar Allan Poe | 213957 | 4.38 |
Selectearea prin indexarea cu boolean
O metodă pentru a selecta condiționat este folosirea indexării cu valori boolean.
Cu ajutorul Seriei vom indexa în DataFrame doar rândurile cu valoarea True.
Id | Name | Authour | Score | Rating | Rating Count | Review Count | Page Count | Year | Genres | |
20 | 4214 | Life of Pi | Yann Martel | 485940 | 3.91 | 1309184 | 46807 | 460p | 2006 | Fiction |
24 | 12232938 | The Lovely Bones | Alice Sebold | 508104 | 3.81 | 1977504 | 40105 | 372p | 2006 | Fiction |
28 | 41865 | Twilight (Twilight, #1) | Stephenie Meyer | 1452846 | 3.59 | 4839503 | 102492 | 501p | 2006 | Young Adult |
51 | 7763 | The Joy Luck Club | Amy Tan | 81845 | 3.93 | 590245 | 9020 | 288p | 2006 | Fiction |
64 | 28187 | The Lightning Thief (Percy Jackson and the Oly... | Rick Riordan | 573399 | 4.25 | 1922316 | 58816 | 375p | 2006 | Fantasy |
69 | 14891 | A Tree Grows in Brooklyn | Betty Smith | 307886 | 4.27 | 380787 | 20170 | 496p | 2006 | Classics |
77 | 1 | Harry Potter and the Half-Blood Prince (Harry ... | J.K. Rowling | 155771 | 4.57 | 2363861 | 38035 | 652p | 2006 | Fantasy |
86 | 99561 | Looking for Alaska | John Green | 138376 | NaN | 1084064 | 55417 | 221p | 2006 | Young Adult |
87 | 6288 | The Road | Cormac McCarthy | 298802 | 3.97 | 700221 | 45005 | 241p | 2006 | Fiction |
88 | 71728 | Jonathan Livingston Seagull | Richard Bach | 80428 | 3.84 | 196608 | 7693 | 112p | 2006 | NaN |
90 | 1381 | The Odyssey | Homer | 488592 | 3.77 | 844968 | 11868 | 541p | 2006 | Classics |
113 | 12067 | Good Omens: The Nice and Accurate Prophecies o... | Terry Pratchett | 90852 | 4.25 | 520130 | 26583 | 491p | 2006 | Fantasy |
123 | 19063 | The Book Thief | Markus Zusak | 1343484 | 4.37 | 1779061 | 111157 | 552p | 2006 | NaN |
125 | 37415 | Their Eyes Were Watching God | Zora Neale Hurston | 95935 | 3.92 | 253858 | 12964 | 219p | 2006 | Classics |
153 | 28186 | The Sea of Monsters (Percy Jackson and the Oly... | Rick Riordan | 82179 | 4.24 | 717600 | 25902 | 279p | 2006 | Fantasy |
161 | 24583 | The Adventures of Tom Sawyer | Mark Twain | 146031 | 3.91 | 739818 | 9690 | 244p | 2006 | Classics |
175 | 6514 | The Bell Jar | Sylvia Plath | 345502 | 4.01 | 573995 | 22336 | 294p | 2006 | Classics |
177 | 3636 | The Giver (The Giver, #1) | Lois Lowry | 407467 | 4.13 | 1729590 | 64308 | 208p | 2006 | Young Adult |
182 | 968 | The Da Vinci Code (Robert Langdon, #2) | Dan Brown | 867513 | 3.85 | 1887312 | 46482 | 489p | 2006 | Fiction |
190 | 2657 | To Kill a Mockingbird | Harper Lee | 2235010 | 4.28 | 4377280 | 89241 | 324p | 2006 | Classics |
Indexarea boolean de fapt e selectarea unui slice de rânduri.
Variabila bool_2006 e doar o variabilă. Putem să scriem expresia boolean direct în sintaxa de selectare.
bool_2006 = books['Year'] == 2006
expresia boolean: books['Year'] == 2006
Ce alte expresii boolean mai cunoaștem? Putem să le folosim ca și condiții de selectare?
Selectarea cu operatorii boolean
Putem să indexăm și cu o expresii logice. Vom selecta toate cărțile din 2006 care au ratingul mai mare decât 4.
Id | Name | Authour | Score | Rating | Rating Count | Review Count | Page Count | Year | Genres | |
64 | 28187 | The Lightning Thief (Percy Jackson and the Oly... | Rick Riordan | 573399 | 4.25 | 1922316 | 58816 | 375p | 2006 | Fantasy |
69 | 14891 | A Tree Grows in Brooklyn | Betty Smith | 307886 | 4.27 | 380787 | 20170 | 496p | 2006 | Classics |
77 | 1 | Harry Potter and the Half-Blood Prince (Harry ... | J.K. Rowling | 155771 | 4.57 | 2363861 | 38035 | 652p | 2006 | Fantasy |
113 | 12067 | Good Omens: The Nice and Accurate Prophecies o... | Terry Pratchett | 90852 | 4.25 | 520130 | 26583 | 491p | 2006 | Fantasy |
123 | 19063 | The Book Thief | Markus Zusak | 1343484 | 4.37 | 1779061 | 111157 | 552p | 2006 | NaN |
153 | 28186 | The Sea of Monsters (Percy Jackson and the Oly... | Rick Riordan | 82179 | 4.24 | 717600 | 25902 | 279p | 2006 | Fantasy |
175 | 6514 | The Bell Jar | Sylvia Plath | 345502 | 4.01 | 573995 | 22336 | 294p | 2006 | Classics |
177 | 3636 | The Giver (The Giver, #1) | Lois Lowry | 407467 | 4.13 | 1729590 | 64308 | 208p | 2006 | Young Adult |
190 | 2657 | To Kill a Mockingbird | Harper Lee | 2235010 | 4.28 | 4377280 | 89241 | 324p | 2006 | Classics |
Vom selecta cărțile care sunt din anul 2006 sau care au ratingul mai mare decât 4.
Id | Name | Authour | Score | Rating | Rating Count | Review Count | Page Count | Year | Genres | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213p | 1999 | NaN |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371p | 2004 | Fiction |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32p | 2007 | Childrens |
5 | 256683 | City of Bones (The Mortal Instruments, #1) | Cassandra Clare | 713154 | 4.10 | 1577035 | 60639 | 485p | 2007 | Fantasy |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
193 | 1885 | Pride and Prejudice | Jane Austen | 1942736 | 4.26 | 2905431 | 64486 | 279p | 2000 | Classics |
194 | 37435 | The Secret Life of Bees | Sue Monk Kidd | 178535 | 4.05 | 1098795 | 30073 | 302p | 2003 | Fiction |
195 | 17899948 | Rebecca | Daphne du Maurier | 328317 | 4.23 | 430751 | 22157 | 449p | 2013 | Classics |
197 | 7126 | The Count of Monte Cristo | Alexandre Dumas | 116688 | 4.25 | 731027 | 20622 | 1276p | 2003 | Classics |
198 | 17245 | Dracula | Bram Stoker | 636610 | 4.00 | 907768 | 24683 | 488p | 1986 | Classics |
144 rows × 10 columns
Vom selecta toate cărțile care nu au fost editate în anul 2006.
Id | Name | Authour | Score | Rating | Rating Count | Review Count | Page Count | Year | Genres | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213p | 1999 | NaN |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371p | 2004 | Fiction |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32p | 2007 | Childrens |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654p | 2003 | Classics |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
195 | 17899948 | Rebecca | Daphne du Maurier | 328317 | 4.23 | 430751 | 22157 | 449p | 2013 | Classics |
196 | 32261 | Tess of the D'Urbervilles | Thomas Hardy | 88562 | 3.80 | 233821 | 8491 | 518p | 2003 | Classics |
197 | 7126 | The Count of Monte Cristo | Alexandre Dumas | 116688 | 4.25 | 731027 | 20622 | 1276p | 2003 | Classics |
198 | 17245 | Dracula | Bram Stoker | 636610 | 4.00 | 907768 | 24683 | 488p | 1986 | Classics |
199 | 662 | Atlas Shrugged | Ayn Rand | 247445 | 3.69 | 348149 | 17053 | 1168p | 1999 | Classics |
180 rows × 10 columns
Înlocuirea datelor din coloană
Mai jos avem toată lista de genuri de cărți pe care le avem în setul de date books.
Vrem să schimbăm valoarea 'Science Fiction' în 'SciFi'.
Crearea coloanelor noi
Avem DataFrame-ul df.
a | b | c | d | |
0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
Creăm o coloană în DataFrame-ul df care să conțină valori doar de 1.
a | b | c | d | e | |
0 | 1 | 2 | 3 | 4 | 1 |
1 | 5 | 6 | 7 | 8 | 1 |
2 | 9 | 10 | 11 | 12 | 1 |
Operațiuni vectorizate
a | b | c | d | e | de | |
0 | 1 | 2 | 3 | 4 | 1 | 5 |
1 | 5 | 6 | 7 | 8 | 1 | 9 |
2 | 9 | 10 | 11 | 12 | 1 | 13 |
Operații:
series_a + series_b
- Adunareseries_a - series_b
- Scădereseries_a * series_b
- înmulțireseries_a / series_b
- Împărțire
Putem să folosim și alte operațiuni matematice.
a | b | c | d | e | de | f | |
0 | 1 | 2 | 3 | 4 | 1 | 5 | 1024 |
1 | 5 | 6 | 7 | 8 | 1 | 9 | 134217728 |
2 | 9 | 10 | 11 | 12 | 1 | 13 | 106993205379072 |
Concatenare.
A | B | |
0 | a | b |
1 | c | d |
2 | e | f |
A | B | C | |
0 | a | b | ab |
1 | c | d | cd |
2 | e | f | ef |
Curățirea datelor
Modificarea denumirilor de coloane
Convențional numele coloanelor din Pandas trebuie sa fie în formatul snake_case
.
Pentru a modifica numele coloanelor folosim metoda rename()
în care specificăm la parametrul columns
un dicționar în care cheile sunt numele coloanelor existente, iar valorile sunt numele coloanelor propuse.
id | name | authour | score | rating | rating_count | review_count | page_count | year | genres | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213p | 1999 | NaN |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371p | 2004 | Fiction |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32p | 2007 | Childrens |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654p | 2003 | Classics |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
195 | 17899948 | Rebecca | Daphne du Maurier | 328317 | 4.23 | 430751 | 22157 | 449p | 2013 | Classics |
196 | 32261 | Tess of the D'Urbervilles | Thomas Hardy | 88562 | 3.80 | 233821 | 8491 | 518p | 2003 | Classics |
197 | 7126 | The Count of Monte Cristo | Alexandre Dumas | 116688 | 4.25 | 731027 | 20622 | 1276p | 2003 | Classics |
198 | 17245 | Dracula | Bram Stoker | 636610 | 4.00 | 907768 | 24683 | 488p | 1986 | Classics |
199 | 662 | Atlas Shrugged | Ayn Rand | 247445 | 3.69 | 348149 | 17053 | 1168p | 1999 | Classics |
200 rows × 10 columns
Id | Name | Authour | Score | Rating | Rating Count | Review Count | Page Count | Year | Genres | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213p | 1999 | NaN |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371p | 2004 | Fiction |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32p | 2007 | Childrens |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654p | 2003 | Classics |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
195 | 17899948 | Rebecca | Daphne du Maurier | 328317 | 4.23 | 430751 | 22157 | 449p | 2013 | Classics |
196 | 32261 | Tess of the D'Urbervilles | Thomas Hardy | 88562 | 3.80 | 233821 | 8491 | 518p | 2003 | Classics |
197 | 7126 | The Count of Monte Cristo | Alexandre Dumas | 116688 | 4.25 | 731027 | 20622 | 1276p | 2003 | Classics |
198 | 17245 | Dracula | Bram Stoker | 636610 | 4.00 | 907768 | 24683 | 488p | 1986 | Classics |
199 | 662 | Atlas Shrugged | Ayn Rand | 247445 | 3.69 | 348149 | 17053 | 1168p | 1999 | Classics |
200 rows × 10 columns
Dar atunci când avem un tabel cu vreo 80 de coloane cărora trebuie să le modificăm numele. Ar trebui să creăm un dicționar manual prea mare.
Id | Name | Authour | Score | Rating | Rating Count | Review Count | Page Count | Year | Genres | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213p | 1999 | NaN |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371p | 2004 | Fiction |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32p | 2007 | Childrens |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654p | 2003 | Classics |
Sau o alternativă ar putea fi să utilizăm metodele Clasei String
. De exemplu metoda lower()
, transformă toate literele din string în litere mici.
Iar cu ajutorul metodei replace() putem să identificăm un caracter din string pe care vrem să-l înlocuim, îl menționăm ca prim parametru, iar al doilea parametru va fi caracterul cu care vrem să-l înlocuim. În cazul dat vom înlocui spațiul gol dintre 2 caractere cu ”_”
.
Acum să scriem o funcție care utilizează cele 2 metode string de mai sus.
Ca să schimbăm numele coloanelor vom folosi un loop for ca să iterăm prin books.columns
și vom apela funcția *clean_col*
pentru fiecare string books.columns
.
Iar acum atribuim lui books.columns lista creată cu numele noi de coloane.
id | name | authour | score | rating | rating_count | review_count | page_count | year | genres | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213p | 1999 | NaN |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371p | 2004 | Fiction |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32p | 2007 | Childrens |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654p | 2003 | Classics |
Datele lipsă
Metoda isnull()
ne returnează tabelul books
cu valori boolean.
id | name | authour | score | rating | rating_count | review_count | page_count | year | genres | |
0 | False | False | False | False | False | False | False | False | False | True |
1 | False | False | False | False | False | False | False | False | False | False |
2 | False | False | False | False | False | False | False | False | False | False |
3 | False | False | False | False | False | False | False | False | False | False |
4 | False | False | False | False | False | False | False | False | False | False |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
195 | False | False | False | False | False | False | False | False | False | False |
196 | False | False | False | False | False | False | False | False | False | False |
197 | False | False | False | False | False | False | False | False | False | False |
198 | False | False | False | False | False | False | False | False | False | False |
199 | False | False | False | False | False | False | False | False | False | False |
200 rows × 10 columns
Date numerice
Ștergerea datelor
Cea mai ușoară abordare e să ștergem datele lipsă. Putem să ștergem datele lipsă utilizând metoda dropna().
Folosim librăria Seaborn ca să plotăm un grafic de tip heatmap, în care vedem cu culori deschise datele lipsă în dependență de coloane. Astfel putem să observăm anumite pattern-uri, de exemplu dacă datele lipsă din diferite coloane coincid după rânduri.
Atunci când vrem să ștergem coloanele cu date lipsă, trebuie să specificăm în metoda dropna()
parametrul axis
cu valoarea ”columns”
.
id | name | authour | score | rating_count | review_count | page_count | year | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 1219410 | 56409 | 213p | 1999 |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 2365531 | 72036 | 371p | 2004 |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 658664 | 12918 | 215p | 2000 |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 296501 | 5729 | 32p | 2007 |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 470744 | 15149 | 654p | 2003 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
195 | 17899948 | Rebecca | Daphne du Maurier | 328317 | 430751 | 22157 | 449p | 2013 |
196 | 32261 | Tess of the D'Urbervilles | Thomas Hardy | 88562 | 233821 | 8491 | 518p | 2003 |
197 | 7126 | The Count of Monte Cristo | Alexandre Dumas | 116688 | 731027 | 20622 | 1276p | 2003 |
198 | 17245 | Dracula | Bram Stoker | 636610 | 907768 | 24683 | 488p | 1986 |
199 | 662 | Atlas Shrugged | Ayn Rand | 247445 | 348149 | 17053 | 1168p | 1999 |
200 rows × 8 columns
Dacă vrem să ștergem rândurile cu datele lipsă care aparțin doar unei coloane anumite, menționăm în metoda dropna()
parametrul subset
care ia o listă de valori cu numele coloanelor care ne interesează.
id | name | authour | score | rating | rating_count | review_count | page_count | year | genres | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213p | 1999 | NaN |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371p | 2004 | Fiction |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32p | 2007 | Childrens |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654p | 2003 | Classics |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
195 | 17899948 | Rebecca | Daphne du Maurier | 328317 | 4.23 | 430751 | 22157 | 449p | 2013 | Classics |
196 | 32261 | Tess of the D'Urbervilles | Thomas Hardy | 88562 | 3.80 | 233821 | 8491 | 518p | 2003 | Classics |
197 | 7126 | The Count of Monte Cristo | Alexandre Dumas | 116688 | 4.25 | 731027 | 20622 | 1276p | 2003 | Classics |
198 | 17245 | Dracula | Bram Stoker | 636610 | 4.00 | 907768 | 24683 | 488p | 1986 | Classics |
199 | 662 | Atlas Shrugged | Ayn Rand | 247445 | 3.69 | 348149 | 17053 | 1168p | 1999 | Classics |
191 rows × 10 columns
O altă abordare este înlocuirea datelor lipsă cu valori.
Estimarea valorilor lipsă
Puteți să investigați setul de date și să estimați valorile lipsă bazându-vă pe dependențele față de valorile din alte coloane.
Dependența rating-ului față de celelalte valori este foarte mică, respectiv nu putem estima valorile lipsă după acest criteriu.
Înlocuirea cu media valorilor din coloană.
Metoda fillna() înlocuiește toate valorile NaN cu valoarea care ne-o dorim noi. În cazul dat va fi media aritmetică a valorilor din coloana ”rating”
.
Înlocuirea cu mediana valorilor din coloană.
Ce abordare să folosiți?
Depinde de scopul proiectului.
Dacă aveți nevoie de o acuratețe maximă în date pentru a efectua studii statistice, atunci este indicat ca datele să fie șterse.
Dacă aceste date trebuie sa le folosiți pentru a antrena un model în Machine Learning și setul de date este foarte mic, atunci puteți sa înlocuiți aceste date cu media sau mediana.
Înlocuiți cu media aritmetică atunci când distribuția este aproximativ normală, pentru că media și mediana se află la mijloc și aproape coincid, respectiv valorile lor nu se vor schimba foarte mult.
Atunci cand aveți o distribuție asimetrică, cu multe valori extreme, este indicat să folosiți mediana, pentru că în cazul dat mediana se va afla în zona unde se concentrează cele mai multe valori, iar media aritmetică este mai deplasată spre valorile extreme, astfel dacă înlocuim datele lipsa cu media aritmetică, aceasta va influența distribuția.
Dacă datele poti fi estimate pe baza dependențelor față de alți parametri din setul de date, atunci asta ar fi o soluție care ne garantează valori cât de cât apropiate de realitate.
În cazul nostru, vom opta pentru ștergerea datelor.
Date categoriale
Crearea categoriei valorilor lipsă.
Observăm ca avem 14 valori NaN în coloana Genres. Când avem valori lipsă de tip categoriale este indicat ca ele să fie transformate într-o categorie a datelor lipsă. În cazul dat această categorie se va numi ”Unknown”
(Necunoscute).
id | name | authour | score | rating | rating_count | review_count | page_count | year | genres | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213p | 1999 | Unknown |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371p | 2004 | Fiction |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215p | 2000 | Romance |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32p | 2007 | Childrens |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654p | 2003 | Classics |
Modificarea datelor
Librăria Pandas conține o mulțime de metode string vectorizate pe care noi le putem folosi ca să manipulăm datele de tip string
. Multe din ele îs similare cu metodele clasei String din Python.
Majoritatea metodelor string vectorizate sunt disponibile folosind accesorul Series.str
ceea ce înseamnă că noi le putem accesa adaugând str
între numele Seriei și numele metodei, conform sinatxei de mai jos:
Documentație: Metode string vectorizate
În cazul valorilor din coloana 'page_count'
, noi vrem să selectăm caracterul 'p'
și să-l înlocuim cu nimic, astfel încât să ne rămână în această coloană doar valori de tip integer. Acest lucru putem sa-l realizăm folosind metoda string str.replace()
.
Următorul pas e să transformăm aceste valori în valori de tip integer cu ajutorul metodei astype().
Verficarea existenței rândurilor duplicate
În dependeță de metoda de colectare a datelor variază consistența datelor în set. Deseori în set se pot găsi date care se repetă, acestea se numesc duplicate.
O metodă care ne ajută să le identificăm este duplicated()
. Această metodă are parametrul keep
care are valorile 'first'
, 'last'
sau False
.
Folosim valoarea 'first'
atunci cand vrem să selectăm toate duplicatele în afară de primul.
Folosim valoarea 'last'
atunci când vrem să selectăm toate duplicatele în afară de ultimul.
Folosim valoarea False
ca să selectăm toate duplicatele din setul de date.
id | name | authour | score | rating | rating_count | review_count | page_count | year | genres |
Documentaie: drop_duplicates
DataFrame.groupby()
Separarea în grupuri
Aplicarea unei funcții asupra fiecărui grup
Combinarea rezultatelor într-o structură de date
Pandas are o operație built-in pentru aceste 3 procese de mai sus. Operația groupby
aplică procesul de ”separare-aplicare-combinare” asupra unui DataFrame și condensează acest proces în 2 pași: 1. Crează un obiect GroupBy 2. Aplică o funcție asupra obiectului GroupBy.
Obiectul GroupBy ne permite să separăm DataFrame-ul în grupuri, dar într-un mod abstract. Nu se produce nici o operațiune până când asupra obiectului nu se aplică o funcțe.
Înainte de agregare(=unire), o să folosim metoda get_group()
care aparține clasei DataFrameGroupBy. Această metodă ne permite să selectăm datele pentru un grup anumit.
id | name | authour | score | rating | rating_count | review_count | page_count | year | genres | |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654 | 2003 | Classics |
6 | 35031085 | Frankenstein: The 1818 Text | Mary Wollstonecraft Shelley | 430783 | 3.80 | 1132408 | 31805 | 288 | 2018 | Classics |
9 | 23919 | The Complete Stories and Poems | Edgar Allan Poe | 213957 | 4.38 | 213034 | 2166 | 821 | 1984 | Classics |
11 | 1934 | Little Women | Louisa May Alcott | 340652 | 4.08 | 1637926 | 29378 | 449 | 2004 | Classics |
19 | 24213 | Alice's Adventures in Wonderland & Through the... | Lewis Carroll | 825095 | 4.06 | 446019 | 10321 | 239 | 2000 | Classics |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
195 | 17899948 | Rebecca | Daphne du Maurier | 328317 | 4.23 | 430751 | 22157 | 449 | 2013 | Classics |
196 | 32261 | Tess of the D'Urbervilles | Thomas Hardy | 88562 | 3.80 | 233821 | 8491 | 518 | 2003 | Classics |
197 | 7126 | The Count of Monte Cristo | Alexandre Dumas | 116688 | 4.25 | 731027 | 20622 | 1276 | 2003 | Classics |
198 | 17245 | Dracula | Bram Stoker | 636610 | 4.00 | 907768 | 24683 | 488 | 1986 | Classics |
199 | 662 | Atlas Shrugged | Ayn Rand | 247445 | 3.69 | 348149 | 17053 | 1168 | 1999 | Classics |
68 rows × 10 columns
Acum să grupăm aceste grupuri folosind metoda sum()
.
id | score | rating | rating_count | review_count | page_count | year | |
genres | |||||||
Childrens | 1043945 | 3097363 | 47.19 | 5538095 | 97202 | 878 | 21933 |
Classics | 207659489 | 27940853 | 270.39 | 60793160 | 1445289 | 30084 | 136033 |
Cultural | 7144 | 748386 | 4.22 | 604962 | 18302 | 671 | 2002 |
Fantasy | 61867472 | 10901437 | 117.11 | 41654719 | 943451 | 14352 | 54131 |
Fiction | 134737368 | 10567705 | 139.38 | 32195941 | 1096432 | 14056 | 68111 |
Historical | 365729 | 681659 | 12.48 | 1491980 | 59886 | 1608 | 5994 |
Horror | 1035120 | 855307 | 16.81 | 2934501 | 77510 | 3270 | 7961 |
Mystery | 16299 | 157229 | 4.26 | 776718 | 31245 | 264 | 2004 |
Nonfiction | 195043 | 355939 | 11.74 | 2713505 | 94842 | 921 | 6001 |
Plays | 1423 | 107208 | 4.44 | 8387 | 131 | 137 | 1994 |
Poetry | 2547 | 86141 | 4.23 | 226839 | 9199 | 127 | 2010 |
Romance | 69193868 | 330261 | 8.28 | 1960017 | 32645 | 442 | 4000 |
SciFi | 45529435 | 2265723 | 17.11 | 3493204 | 98022 | 2020 | 8032 |
Sequential Art | 472331 | 114982 | 4.36 | 479760 | 13770 | 416 | 2005 |
Unknown | 115383431 | 4698484 | 57.26 | 8797566 | 390736 | 6117 | 28052 |
Young Adult | 142467241 | 7889683 | 65.97 | 25512111 | 881068 | 6718 | 32141 |
Folosim metoda size()
când vrem să aflăm dimensiunea fiecărui grup.
size | |
genres | |
Childrens | 11 |
Classics | 68 |
Cultural | 1 |
Fantasy | 27 |
Fiction | 34 |
Historical | 3 |
Horror | 4 |
Mystery | 1 |
Nonfiction | 3 |
Plays | 1 |
Poetry | 1 |
Romance | 2 |
SciFi | 4 |
Sequential Art | 1 |
Unknown | 14 |
Young Adult | 16 |
size | reviews_max | |
genres | ||
Childrens | 11 | 17375 |
Classics | 68 | 89241 |
Cultural | 1 | 18302 |
Fantasy | 27 | 108606 |
Fiction | 34 | 84112 |
Putem să grupăm datele după mai multe coloane.
id | score | rating | rating_count | review_count | page_count | ||
genres | year | ||||||
Childrens | 1964 | 370493.0 | 1.012345e+06 | 4.380 | 882195.000000 | 17375.0 | 64.000000 |
1985 | 233093.0 | 1.188860e+05 | 4.170 | 411113.000000 | 5702.0 | 61.000000 | |
1988 | 23772.0 | 4.941850e+05 | 4.300 | 595769.000000 | 9208.0 | 62.000000 | |
1990 | 191139.0 | 7.856300e+04 | 4.360 | 318637.000000 | 5158.0 | 44.000000 | |
1994 | 4948.0 | 1.360590e+05 | 4.300 | 384386.000000 | 7754.0 | 26.000000 | |
1998 | 23886.0 | 2.120750e+05 | 4.335 | 445791.000000 | 9979.5 | 156.000000 | |
2000 | 19543.0 | 4.998120e+05 | 4.220 | 794735.000000 | 11579.0 | 37.000000 | |
2004 | 113946.0 | 9.734000e+04 | 4.370 | 320590.000000 | 3146.0 | 64.000000 | |
2005 | 6310.0 | 1.425350e+05 | 4.140 | 642587.000000 | 11592.0 | 176.000000 | |
2007 | 32929.0 | 9.348800e+04 | 4.280 | 296501.000000 | 5729.0 | 32.000000 | |
Classics | 1963 | 332613.0 | 3.467220e+05 | 4.190 | 618823.000000 | 10614.0 | 325.000000 |
1972 | 485894.0 | 1.381860e+05 | 3.820 | 613496.000000 | 16702.0 | 201.000000 | |
1976 | 70401.0 | 1.399490e+05 | 3.620 | 340371.000000 | 14644.0 | 307.000000 | |
1981 | 52036.0 | 2.697250e+05 | 4.030 | 563652.000000 | 16851.0 | 152.000000 | |
1984 | 23919.0 | 2.139570e+05 | 4.380 | 213034.000000 | 2166.0 | 821.000000 | |
1986 | 17245.0 | 6.366100e+05 | 4.000 | 907768.000000 | 24683.0 | 488.000000 | |
1987 | 24280.0 | 8.039670e+05 | 4.170 | 670386.000000 | 17090.0 | 1463.000000 | |
1989 | 49552.0 | 1.540520e+05 | 3.980 | 681177.000000 | 22324.0 | 123.000000 | |
1990 | 338798.0 | 7.695700e+04 | 3.730 | 107514.000000 | 6603.0 | 783.000000 | |
1995 | 83451.0 | 2.219493e+05 | 3.980 | 372193.666667 | 13313.0 | 427.666667 |
GroupBy.agg()
Atunci când vrem să aplicăm mai multe metode asupra grupurilor putem folosi metoda agg()
.
id | score | rating | rating_count | review_count | page_count | year | |
genres | |||||||
Childrens | 1043945 | 3097363 | 47.19 | 5538095 | 97202 | 878 | 21933 |
Classics | 207659489 | 27940853 | 270.39 | 60793160 | 1445289 | 30084 | 136033 |
Cultural | 7144 | 748386 | 4.22 | 604962 | 18302 | 671 | 2002 |
Fantasy | 61867472 | 10901437 | 117.11 | 41654719 | 943451 | 14352 | 54131 |
Fiction | 134737368 | 10567705 | 139.38 | 32195941 | 1096432 | 14056 | 68111 |
Historical | 365729 | 681659 | 12.48 | 1491980 | 59886 | 1608 | 5994 |
Horror | 1035120 | 855307 | 16.81 | 2934501 | 77510 | 3270 | 7961 |
Mystery | 16299 | 157229 | 4.26 | 776718 | 31245 | 264 | 2004 |
Nonfiction | 195043 | 355939 | 11.74 | 2713505 | 94842 | 921 | 6001 |
Plays | 1423 | 107208 | 4.44 | 8387 | 131 | 137 | 1994 |
Poetry | 2547 | 86141 | 4.23 | 226839 | 9199 | 127 | 2010 |
Romance | 69193868 | 330261 | 8.28 | 1960017 | 32645 | 442 | 4000 |
SciFi | 45529435 | 2265723 | 17.11 | 3493204 | 98022 | 2020 | 8032 |
Sequential Art | 472331 | 114982 | 4.36 | 479760 | 13770 | 416 | 2005 |
Unknown | 115383431 | 4698484 | 57.26 | 8797566 | 390736 | 6117 | 28052 |
Young Adult | 142467241 | 7889683 | 65.97 | 25512111 | 881068 | 6718 | 32141 |
sum | mean | amax | |
genres | |||
Childrens | 3097363 | 281578.454545 | 1012345 |
Classics | 27940853 | 410894.897059 | 2235010 |
Cultural | 748386 | 748386.000000 | 748386 |
Fantasy | 10901437 | 403756.925926 | 2603171 |
Fiction | 10567705 | 310814.852941 | 867513 |
Historical | 681659 | 227219.666667 | 388909 |
Horror | 855307 | 213826.750000 | 386882 |
Mystery | 157229 | 157229.000000 | 157229 |
Nonfiction | 355939 | 118646.333333 | 134797 |
Plays | 107208 | 107208.000000 | 107208 |
Poetry | 86141 | 86141.000000 | 86141 |
Romance | 330261 | 165130.500000 | 226168 |
SciFi | 2265723 | 566430.750000 | 1051406 |
Sequential Art | 114982 | 114982.000000 | 114982 |
Unknown | 4698484 | 335606.000000 | 1343484 |
Young Adult | 7889683 | 493105.187500 | 2959668 |
Putem să creăm propria noastră funcție și s-o aplicăm asupra grupurilor.
diff_min_max | |
genres | |
Childrens | 0.24 |
Classics | 0.97 |
Cultural | 0.00 |
Fantasy | 0.72 |
Fiction | 0.68 |
Historical | 0.34 |
Horror | 0.34 |
Mystery | 0.00 |
Nonfiction | 0.55 |
Plays | 0.00 |
Poetry | 0.00 |
Romance | 0.08 |
SciFi | 0.14 |
Sequential Art | 0.00 |
Unknown | 0.53 |
Young Adult | 0.89 |
Documentație: Group by
Series, Dataframe: map(), apply(), applymap()
id | name | authour | score | rating | rating_count | review_count | page_count | year | genres | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213 | 1999 | Unknown |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371 | 2004 | Fiction |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215 | 2000 | Romance |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32 | 2007 | Childrens |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654 | 2003 | Classics |
Vrem să categorizăm cărțile din setul nostru de date în cărți mici, medii și mari în dependență de numărul lor de pagini.
Putem să aplicăm asupra datelor o instrucțiune foarte specifică cu ajutorul metodei map()
, care aparține clasei Series.
id | name | authour | score | rating | rating_count | review_count | page_count | year | genres | book_size | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213 | 1999 | Unknown | Medium |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371 | 2004 | Fiction | Medium |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215 | 2000 | Romance | Medium |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32 | 2007 | Childrens | Small |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654 | 2003 | Classics | Large |
În cazul în care vrem să avem mai mulți parametri în funcția noastră vom utiliza metoda apply()
a clasei Series. Face același lucru ca și metoda map()
, doar că acceptă mai mulți parametri.
id | name | authour | score | rating | rating_count | review_count | page_count | year | genres | book_size | review_number | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213 | 1999 | Unknown | Medium | Large |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371 | 2004 | Fiction | Medium | Large |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215 | 2000 | Romance | Medium | Medium |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32 | 2007 | Childrens | Small | Small |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654 | 2003 | Classics | Large | Medium |
Mai jos avem o funcție care va transforma toate datele din coloană în procentaje față de valoarea maximă din aceeași coloană.
id | name | authour | score | rating | rating_count | review_count | page_count | year | genres | book_size | review_number | score% | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213 | 1999 | Unknown | Medium | Large | 25.190562 |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371 | 2004 | Fiction | Medium | Large | 14.448614 |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215 | 2000 | Romance | Medium | Medium | 3.517050 |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32 | 2007 | Childrens | Small | Small | 3.158733 |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654 | 2003 | Classics | Large | Medium | 6.790052 |
id | name | authour | score | rating | rating_count | review_count | page_count | year | genres | book_size | review_number | score% | rating_count% | |
0 | 22628 | The Perks of Being a Wallflower | Stephen Chbosky | 745557 | 4.20 | 1219410 | 56409 | 213 | 1999 | Unknown | Medium | Large | 25.190562 | 17.908802 |
1 | 77203 | The Kite Runner | Khaled Hosseini | 427631 | 4.30 | 2365531 | 72036 | 371 | 2004 | Fiction | Medium | Large | 14.448614 | 34.741250 |
2 | 35545737 | A Walk to Remember | Nicholas Sparks | 104093 | 4.18 | 658664 | 12918 | 215 | 2000 | Romance | Medium | Medium | 3.517050 | 9.673435 |
3 | 32929 | Goodnight Moon | Margaret Wise Brown | 93488 | 4.28 | 296501 | 5729 | 32 | 2007 | Childrens | Small | Small | 3.158733 | 4.354547 |
4 | 153747 | Moby-Dick or, the Whale | Herman Melville | 200963 | 3.50 | 470744 | 15149 | 654 | 2003 | Classics | Large | Medium | 6.790052 | 6.913558 |
score% | rating_count% | |
count | 191.000000 | 191.000000 |
mean | 12.524109 | 14.546617 |
std | 14.346202 | 14.907528 |
min | 2.407534 | 0.123175 |
25% | 3.556919 | 4.953056 |
50% | 6.923243 | 9.515218 |
75% | 16.792373 | 18.754470 |
max | 100.000000 | 100.000000 |
Pentru a putea aplica o funcție specifică asupra mai multor coloane vom folosi metoda applymap()
care aparține clasei Dataframe.
score% | rating_count% | |
0 | Large | Medium |
1 | Medium | Large |
2 | Small | Medium |
3 | Small | Small |
4 | Medium | Medium |
... | ... | ... |
195 | Medium | Medium |
196 | Small | Small |
197 | Small | Medium |
198 | Large | Medium |
199 | Medium | Medium |
191 rows × 2 columns
Clasa DataFrame la fel are o metodă apply()
care transformă datele pe o axă fie că e Axa 1 sau Axa 0(column-wise, row-wise) a unui DataFrame, spre deosebire de celelalte metode: Series.map()
, Series.apply()
și DataFrame.applymap()
care transformă element cu element(elemnt-wise).
score% | rating_count% | |
Large | 40 | 43 |
Medium | 67 | 99 |
Small | 84 | 49 |
pandas.concat()
Funcția concat() concatenează 2 tabele pe axa 0 sau pe axa 1.
Axis 0 - verticală. (implicit)
id | elev | nota | |
0 | 1 | Marc | 9 |
1 | 2 | Mioara | 10 |
2 | 3 | Maxim | 7 |
id | elev | nota | |
0 | 4 | Monica | 7 |
1 | 5 | Maxim | 9 |
2 | 6 | Maia | 8 |
id | elev | nota | |
0 | 1 | Marc | 9 |
1 | 2 | Mioara | 10 |
2 | 3 | Maxim | 7 |
3 | 4 | Monica | 7 |
4 | 5 | Maxim | 9 |
5 | 6 | Maia | 8 |
Axis 1 - orizontală
materie | clasa | |
0 | Matematica | 5 |
1 | L.Romana | 7 |
2 | Informatica | 6 |
3 | Desen | 9 |
4 | Fizica | 7 |
5 | Istorie | 10 |
id | elev | nota | materie | clasa | |
0 | 1 | Marc | 9 | Matematica | 5 |
1 | 2 | Mioara | 10 | L.Romana | 7 |
2 | 3 | Maxim | 7 | Informatica | 6 |
3 | 4 | Monica | 7 | Desen | 9 |
4 | 5 | Maxim | 9 | Fizica | 7 |
5 | 6 | Maia | 8 | Istorie | 10 |
Ce s-ar fi întâmplat dacă în tabelul materii
ar mai fi existat un rând?
pandas.merge()
id | nume | absente | |
0 | 3 | Maxim | 30 |
1 | 6 | Maia | 0 |
2 | 2 | Mioara | 57 |
3 | 1 | Marc | 124 |
4 | 5 | Maxim | 0 |
5 | 7 | Marica | 21 |
id_x | elev | nota | materie | clasa | id_y | nume | absente | |
0 | 1 | Marc | 9 | Matematica | 5 | 1.0 | Marc | 124.0 |
1 | 2 | Mioara | 10 | L.Romana | 7 | 2.0 | Mioara | 57.0 |
2 | 3 | Maxim | 7 | Informatica | 6 | 3.0 | Maxim | 30.0 |
3 | 3 | Maxim | 7 | Informatica | 6 | 5.0 | Maxim | 0.0 |
4 | 4 | Monica | 7 | Desen | 9 | NaN | NaN | NaN |
5 | 5 | Maxim | 9 | Fizica | 7 | 3.0 | Maxim | 30.0 |
6 | 5 | Maxim | 9 | Fizica | 7 | 5.0 | Maxim | 0.0 |
7 | 6 | Maia | 8 | Istorie | 10 | 6.0 | Maia | 0.0 |
id | elev | nota | materie | clasa | nume | absente | |
0 | 1 | Marc | 9 | Matematica | 5 | Marc | 124.0 |
1 | 2 | Mioara | 10 | L.Romana | 7 | Mioara | 57.0 |
2 | 3 | Maxim | 7 | Informatica | 6 | Maxim | 30.0 |
3 | 4 | Monica | 7 | Desen | 9 | NaN | NaN |
4 | 5 | Maxim | 9 | Fizica | 7 | Maxim | 0.0 |
5 | 6 | Maia | 8 | Istorie | 10 | Maia | 0.0 |
Ce observați?
Seaborn
Seaborn este o librărie a lui Python, de vizualizare bazată pe Matplotlib. Această librărie oferă grafice cu stiluri predefinite.
Accesând acest link puteți găsi galeria de grafice Seaborn și codul lor de implementare: Seaborn
Last updated