Home » Articole » Articole » Calculatoare » Programare » Python » Recodificare și transformare în știința datelor cu Python – Recodificarea cu operații simple

Recodificare și transformare în știința datelor cu Python – Recodificarea cu operații simple

Este adesea cazul că, deși un DataFrame conține informațiile brute de care aveți nevoie, nu este exact în forma de care aveți nevoie pentru analiza dvs. Poate că datele sunt în unități diferite decât aveți nevoie – metri în loc de picioare; dolari în loc de yeni. Sau poate aveți nevoie de o combinație de cantități disponibile – mile pe galon în loc de doar mile și galoane separat. Sau poate că trebuie să reîncadrați o variabilă prin împărțirea ei în subdiviziuni semnificative – categorizând o coloană brută de salarii în salariați „mari”, „medii” și „scăzuți”, de exemplu.

În știința datelor, aceste activități sunt cunoscute sub numele de recodificare și/sau transformare. Nu există o divizare puternică între cele două; de obicei, mă gândesc la recodificare ca la conversia unei singure variabile într-una cu unități diferite (ca în exemplele de dolari în yen și cu venituri mari/medii/scăzute) și transformarea ca la crearea unei variabile noi în întregime dintr-o combinație de coloane (cum ar fi mile pe galon). În ambele cazuri, totuși, vom crea și vom adăuga coloane noi la un DataFrame. Aceste coloane sunt uneori numite coloane derivate, deoarece se bazează pe (derivate din) coloane existente, mai degrabă decât să conțină informații independente.

24.1 Recodificarea cu operații simple

Luați în considerare următorul set de date despre fotbal numit worldcup2019.csv. Fiecare rând din acest set de date reprezintă performanța unui jucător într-un anumit meci de Cupa Mondială din 2019. Observați că avem câțiva jucători cu mai mult de un rând (Megan Rapinoe și Rose Lavelle) și mai multe rânduri pentru același joc (primele patru rânduri sunt toate din jocul din 28 iunie, de exemplu):

last,first,date,inmins,insecs,outmins,outsecs,gls,asst,tkls,shots

Morgan,Alex,28-Jun-2019,0.0,0.0,90.0,0,0,0,0,2,1
Rapinoe,Megan,28-Jun-2019,0.0,0.0,74.0,27.0,2,0,2,3
Press,Christen,28-Jun-2019,74.0,27.0,90.0,0.0,0,0,1,0
Lavelle,Rose,28-Jun-2019,0.0,0.0,90.0,0.0,0,1,3,0
Lavelle,Rose,7-Jul-2019,0.0,0.0,90.0,0.0,1,0,4,1
Rapinoe,Megan,7-Jul-2019,0.0,0.0,83.0,16.0,1,1,3,2
Lloyd,Carli,7-Jul-2019,83.0,16.0,90.0,0.0,0,0,1,0
Dunn,Crystal,23-Jun-2019,42.0,37.0,81.0,5.0,0,1,1,2

 

Setul de date nu are cu adevărat o coloană de index semnificativă, deoarece niciuna dintre coloane nu este de așteptat să fie unică. Deci, vom părăsi apelul la metoda „set_index()” când îl citim în Python:

wc = pd.read_csv('worldcup2019.csv')
print(wc)

 

▌  last first    date inmins insecs outmins outsecs gls asst tkls shots
▌Morgan Alex   28-Jun      0      0      90       0   0    0    2     1
▌Rapinoe Megan 28-Jun      0      0      74      27   2    0    2     3
▌Press Chris   28-Jun     74     27      90       0   0    0    1     0
▌Lavelle Rose  28-Jun      0      0      90       0   0    1    3     0
▌Lavelle Rose   7-Jul      0      0      90       0   1    0    4     1
▌Rapinoe Megan  7-Jul      0      0      83      16   1    1    3     2
▌Lloyd Carli    7-Jul     83     16      90       0   0    0    1     0
▌Dunn Cryst    23-Jun     42     37      81       5   0    1    1     2

 

Să ne concentrăm pe coloanele cu minute și secunde în nume. Aceste coloane ne arată minutul și secunda în care jucătorul a intrat în joc și minutul și secunda în care a ieșit. De exemplu, Alex Morgan a jucat întregul meci de 90 de minute pe 28 iunie. Rapinoe a început acel joc, dar a ieșit pentru un înlocuitor la 74:27. Cine a înlocuit-o? Se pare că Christen Press a făcut-o, deoarece a intrat în joc exact în același timp în care a ieșit Rapinoe. În majoritatea rândurilor, jucătorul fie a început jocul, fie a încheiat jocul sau ambele, dar ultimul rând (performanța lui Crystal Dunn din 23 iunie) o face să intre la 42:37 și să iasă la 81:05.

Acum, motivul pentru care aduc în discuție acest lucru este că un aspect al analizei noastre ar putea fi calculul statisticilor pe minut pe care le-a jucat fiecare sportiv. Dacă un jucător a marcat 3 goluri în 200 de minute, de exemplu, iar altul a marcat 3 goluri în doar 150 de minute, am putea spune în mod rezonabil că al doilea jucător a fost un marcator mai prolific la acea Cupă Mondială.

Acest lucru este greu de făcut cu datele în forma în care se află. Deci vom recoda câteva dintre coloane. Să restrângem minutele și secundele pentru fiecare dintre cele două ore ale ceasului într-o singură valoare, în minute. Pentru lizibilitate, vom rotunji și acest număr la două zecimale folosind funcția round() pe care am întâlnit-o anterior:

wc['intime'] = np.round(wc['inmins'] + (wc['insecs']/60),2)
wc['outtime'] = np.round(wc['outmins'] + (wc['outsecs']/60),2)

 

Profităm de operațiunile vectorizate aici. Pentru fiecare rând, trebuie să împărțim valoarea insecs la 60 (pentru a o converti în minute) și să o adăugăm la valoarea inmins. Pandas face acest lucru foarte ușor aici, deoarece putem scrie acele operațiuni o singură dată și le va calcula pentru fiecare rând!

Să ștergem acum coloanele vechi, superflue și să ne uităm:

del wc['inmins']
del wc['insecs']
del wc['outmins']
del wc['outsecs']
print(wc)

 

▌  last first    date gls asst tkls shots intime outtime
▌Morgan Alex   28-Jun   0    0    2     1   0.00   90.00
▌Rapinoe Megan 28-Jun   2    0    2     3   0.00   74.45
▌Press Chris   28-Jun   0    0    1     0  74.45   90.00
▌Lavelle Rose  28-Jun   0    1    3     0   0.00   90.00
▌Lavelle Rose   7-Jul   1    0    4     1   0.00   90.00
▌Rapinoe Megan  7-Jul   1    1    3     2   0.00   83.27
▌Lloyd Carli    7-Jul   0    0    1     0  83.27   90.00
▌Dunn Cryst    23-Jun   0    1    1     2  42.62   81.08

 

Acest lucru este mult mai puțin greoi (mai manevrabil?) decât a trata minutele și secundele separat.

(De altfel, observați că tehnica prezentată aici creează coloane noi (cu nume noi) și apoi șterge coloanele vechi. Vă recomand cu tărie să faceți acest lucru. Dacă încercați să modificați valorile unei coloane DataFrame existente, Pandas vă va trimite adesea un mesaj ciudat care vă informează despre un „SettingWithCopyWarning”. Sensul este puțin ezoteric, dar în termeni profani înseamnă „operația ta poate să nu fi funcționat cu adevărat”. Evitați această problemă creând în schimb coloane noi.)

Sursa: Stephen Davies, The Crystal Ball – Instruction Manual, Vol. 1: Introduction to Data Science, v. 1.1. Copyright © 2021 Stephen Davies. Licența CC BY-SA 4.0. Traducere și adaptare: Nicolae Sfetcu. © 2024 MultiMedia Publishing, Introducere în Știința Datelor, Volumul 1

Statistica pentru afaceri
Statistica pentru afaceri

Instrumentul esențial pentru decizii inteligente în mediul de afaceri!

Nu a fost votat $3.99$8.55 Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Inteligența competitivă - Concept - Studii
Inteligența competitivă – Concept – Studii

Inteligența competitivă: instrumentul esențial pentru succesul în afaceri

Nu a fost votat $1.99$3.15 Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Introducere în Business Intelligence
Introducere în Business Intelligence

O resursă esențială pentru toți cei interesați de analiza datelor și de optimizarea proceselor de afaceri.

Nu a fost votat $2.99$5.37 Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *