Vienība 3 / 11

Datu tīrīšana un pirmapstrāde: trūkst vērtības, izņēmuma un tipa konvertēšanas

Ieguvumi:

  • Spēja atšķirt trūkstošo vērtību cēloni (nejauši, sistemātiski, jēgpilni) un izvēlēties piemērotu stratēģiju un aprēķināt piepildījuma vērtību tikai no apmācības.
  • Spēja pārbaudīt novirzes pirms to dzēšanas un atšķirt datu kļūdu un patiesi retu notikumu
  • Spēja novērst klusuma zudumu, pārraugot katra soļa ietekmi uz rindu/aizpildījumu skaitu, vienlaikus nodrošinot veida un formāta neatbilstības standartam

Aptuveni 60–80 procenti datu zinātnieka laika tiek veltīti tīrīšanai; Nozarē to pa pusei pa jokam sauc par "datu vēršanos" (data wrangling jeb datu tīrīšanu). Tā kā reālie dati gandrīz nekad nav sagatavoti analīzei: datumi ir jauktos formātos, skaitļi tiek saglabāti kā teksts, dažas šūnas ir tukšas, klients trīs reizes parādās vienā tabulā ar diviem dažādiem rakstības veidiem. Šajā nodaļā mēs apskatīsim trīs tīrīšanas pamataspektus: trūkstošās vērtības, novirzes un veida/formāta konvertēšanu. Mākslīgais intelekts ir ārkārtīgi ātrs palīgs šajā darbā; Taču jūs izlemjat, ko un kā tīrīt, jo katra tīrīšanas izvēle maina analīzi.

Tīrīšanas zelta likums: katras izmaiņas ir lēmums

Šūnas dzēšana, trūkstošās vērtības aizpildīšana ar vidējo, izņēmuma apgriešana — neviena no šīm darbībām nav “neitrāla”. Katrs maina datus un ietekmē rezultātu. Tātad tīrīšanas zelta likums: ierakstiet visas izmaiņas kodā, ievērojiet pamatojumu, nekad nepārrakstiet sākotnējos datus. AI sniedz jums ātru tīrīšanas kodu, taču jūsu pienākums ir saprast, ko šis kods dara; Nepalaidiet to, neredzot, cik rindiņas ir pazudušas, kad sakāt "dzēst tukšas rindas".

Uzmanību! Nekad nemodificējiet sākotnējos neapstrādātos datus. Ierakstiet iztīrīto versiju atsevišķā failā/tabulā. Tādā veidā, ja pamanāt kļūdu, varat atgriezties pirmajā vietā un saglabāt reproducējamību.

Trūkstošās vērtības: kāpēc tā ir tukša, ko darīt

Trūkstošā vērtība (parasti pandās parādās kā NaN — "nav skaitlis") ir tad, ja šūna ir tukša. Bet plaisas cēlonis nosaka risinājumu. Ir trīs tipiskas situācijas. Trūkst nejauši: sensors nedarbojās ne mirkli; Var būt saprātīgi to aizpildīt. Sistemātiski trūkst: veidlapas lauks tiek prasīts tikai noteiktiem klientiem; Plaisa šeit faktiski ir informācija. Būtiski trūkst: ja lauks "atgriešanas datums" ir tukšs, klients neatgriezās; Šī vieta nozīmē 0 vai "nav", tā nav aizpildīta.

Galvenās stratēģijas:

stratēģija

Kad tas ir piemērots?

risku

Dzēst rindu

Trūkstošais rādītājs ir ļoti zems (<5%) un nejaušs

Datu un reprezentācijas zudums

Dzēst kolonnu

Lielākā daļa kolonnas ir tukša (>60%)

informācijas zudums

Vidējais/vidējais aizpildījums

Skaitlis, trūkst nejauši

Tas samazina dispersiju un izkropļo sadalījumu

Kategorija "nezināms"

Kategoriski, sistemātiski trūkst

Ģenerē papildu kategorijas

Prognoze ar modeli

Sarežģīta, vērtīga kolonna

Noplūdes risks, sarežģītība

Kritiskais punkts: imputācijas vērtība jāaprēķina tikai no apmācības datiem, un tā pati vērtība jāpiemēro testa datiem. Ja iekļaujat testa datu vidējo vērtību, jūs izveidojat noplūdi (10. vienība). Mediānai (kārtas datu vidējai vērtībai) bieži tiek dota priekšroka, nevis vidējam, jo ​​tā ir noturīgāka pret novirzēm nekā vidējais.

Ārējie rādītāji: kļūda vai reāla?

Ārējais rādītājs var būt viena no divām lietām: datu kļūda (vecuma slejā 999) vai reāls, bet rets notikums (klienta pasūtījums 2 miljonu ASV dolāru vērtībā). Abu sajaukšana ir postoša: izdzēsiet patiesu nobīdi un izmetiet svarīgu informāciju; Ja jūs atlaidīsit kļūdu, cietīs jūsu vidējie rādītāji. Tāpēc vispirms ir jāpārbauda izņēmums, nevis tas automātiski jāizdzēš.

Izplatītākās noteikšanas metodes: IQR metode (starpkvartiļu diapazons; vērtības, kas vairāk nekā 1,5 reizes pārsniedz starpību starp 25% un 75% datu kvintilēm, tiek uzskatītas par izņēmumiem) un z-score (standarta noviržu skaits no vidējās vērtības ir; parasti ir novirze, ja tā ir lielāka par 3). AI ieraksta kodu šiem aprēķiniem sekundēs; Bet pirms sakāt "dzēst", pārbaudiet, kādas ir šīs vērtības.

Tipa un formāta konvertēšana: kluss kļūdu avots

Viena no visvairāk galvassāpēm ir datu tipu neskaidrības. Ja kolonna "summa" ir saglabāta kā teksts, jūs nevarat pievienot; Programma nepareizi nolasa turku valodā formatētu skaitli, piemēram, "1250,50", nevis "tūkstoš divi simti piecdesmit". Datumi ("01/03/2024" diena-mēnesis vai mēnesis-diena?), kategorijas ("Vīrietis"/"vīrietis"/"M" ir viens un tas pats?) un vienības (TL vai kuruş?) klusi rada nepareizus rezultātus. Liela daļa tīrīšanas ir šo neatbilstību iekļaušana standartā: datumi vienā formātā, kategorijas vienā pareizrakstībā, skaitļi vienā vienībā.

trīs mini futrāļi

1. gadījums — vidējais slazds. Komanda ienākumu slejā aizpildīja 320 trūkstošās vērtības ar vidējo (48 500 USD). Taču trūkumi bija sistemātiski: tie bija maznodrošinātie, kas nekad nebija deklarējuši ienākumus. Vidējais aizpildījums padarīja šo grupu mākslīgi bagātu, un kredīta modelis bija nepareizs. Nodarbība: pirms aizpildīšanas jautājiet “kāpēc tas ir tukšs”.

2. gadījums — izņēmums, ko nevajadzētu dzēst. Mazumtirdzniecības analītiķis pārdošanas datos izdzēsa 4 milzīgus pasūtījumus (katrs 1,8 miljoni TL), uzskatot, ka tās ir "kļūdas". Taču tie bija reāli korporatīvie pasūtījumi un veidoja 22% no kopējā apgrozījuma. Prognožu modelis pēc dzēšanas pilnībā palaida garām institucionālo pieprasījumu. Nodarbība: pirms izdzēšanas pārbaudiet novirzi.

3. gadījums — datuma formāta katastrofa. CSV failā datumi tika sajaukti gan “2024-03-01”, gan “01.03.2024”. Kad YZ rakstītais kods tika parsēts saskaņā ar pirmo formātu, 6400 rindiņas kļuva par NaT kā "nederīgu datumu" un tika klusi izslēgtas no analīzes. Analītiķis to pamanīja tikai tad, kad rindu skaits samazinājās. Nodarbība: pēc konvertēšanas vienmēr pārbaudiet rindu un tukšumu skaitu.

Četras kopējamas veidnes

1) Trūkst vērtību kartes:

Man ir pandas df. Uzrakstiet kodu, kas izveido tabulu, kurā norādīts trūkstošo (NaN) skaits un procentuālā daļa katrai kolonnai. Pēc tam atsevišķi uzskaitiet kolonnas, kurās trūkstošais rādītājs pārsniedz 40%, un tās slejas, kurās trūkstošais rādītājs ir mazāks par 5%. Vienkārši ģenerējiet šo diagnostikas kodu, nevis jūsu ieteikto stratēģiju; Es pieņemšu lēmumu.

2) Ārējā pārbaude (nav svītrošana):

Uzrakstiet kodu, kas ATKLĀJ (nevis dzēš!) manas kolonnas "summa" novirzes, izmantojot IQR metodi. Ievietojiet ārējās rindas atsevišķā DF, lai es varētu tās manuāli pārbaudīt. Izdrukājiet arī izņēmumu skaitu un to īpatsvaru kopsummā.

3) Tipa/formāta standartizācija:

Ierakstiet kodu, kas standartizē šādas kolonnas:- "datums": var būt jaukti formāti ("2024-03-01" un "01.03.2024"); konvertējiet tos visus uz datuma laiku, saskaitiet netulkojamos un ziņojiet (klusi izmetiet). - "dzimums": "Vīrietis"/"vīrietis"/"M" -> "M", "sieviete"/"sieviete"/"F" -> "K". - "summa": turku valodā formatēts teksts ("1.250,50") -> decimālskaitlis. Drukājiet, cik rindu tiek ietekmētas pēc katra reklāmguvuma.

4) Pārbaudiet pirms/pēc tīrīšanas:

Uzrakstiet kodu, kas salīdzina atlasīto kolonnu df.shape, trūkstošo skaitu un kopsavilkuma statistiku (vidējo, vidējo, min, max) pirms un pēc tīrīšanas darbības. Mērķis: redzēt, kādas tīrīšanas izmaiņas.

Vāja uzvedne / spēcīga uzvedne

Vāja uzvedne:

Notīrīt šos datus.

"Clear" ir neskaidrs; AI nezina, kuras trūkstošās daļas ir jāizdzēš, ko aizpildīt, kuru kolonnu apstrādāt un kā. Rezultāts: aklas, neatgriezeniskas izmaiņas.

Spēcīga uzvedne:

Jūsu loma: datu tīrīšanas palīgs. df kolonnas: customer_id (int), reģistrācijas_datums (jauktā formāta teksts), ieņēmumu_tl (teksts, "1200,00"), pilsēta (teksts, nekonsekventa pareizrakstība). Noteikumi: - sākotnējā df maiņa; Strādājiet pie kopijas ar nosaukumu df_clean.- Konvertējiet ienākumu_tl par skaitli, saskaitiet to, ko nevar iztulkot.- Mainiet ieraksta_datumu uz datetime, ziņojiet par kļūdu.- Nedzēsiet nevienu rindu bez mana apstiprinājuma; Parādiet kandidātus atsevišķi. Pēc katras darbības izdrukājiet df_temiz.shape un trūkstošo numuru.

Šeit avots ir aizsargāts, katra transformācija tiek skaitīta, dzēšana tiek atstāta cilvēka ziņā.

Biežas kļūdas

  • Aizpildot nepilnības, nejautājot "kāpēc tas ir tukšs?" Sistemātiska/nozīmīga iztrūkuma aizpildīšana ar vidējo izkropļo datus.
  • Izņēmuma dzēšana, to nepārbaudot. Reālu, bet retu notikumu izmešana iznīcina svarīgu informāciju.
  • Polsterējuma vērtības aprēķināšana no visiem datiem. Testa datu iekļaušana rada noplūdi; vienkārši rēķiniet no treniņa.
  • Pēc konvertēšanas netiek pārbaudīts rindu/tukšu vietu skaits. Rindas, kurās ir kluss NaT/NaN, tiek izslēgtas no analīzes.
  • Sākotnējo datu pārrakstīšana. Tiek zaudēta atdeve un reproducējamība.
Padoms. Veiciet tīrīšanu, salīdzinot “pirms pēc”. Drukājiet df.shape, trūkstošo skaitu un kritisko kolonnu statistikas kopsavilkumu pēc katras darbības. Tātad jūs uzreiz redzat, ka viens solis negaidīti iznīcina 6000 rindu.

Rezumējot

Tīrīšana ir laikietilpīgākā un lēmumu pieņemšanas prasība datu zinātnes posmā. Katras izmaiņas maina datus, tāpēc katra no tām ir apzināts lēmums. Ja trūkst vērtību, jautājiet "kāpēc tas ir tukšs?" Pārskatiet visas novirzes pirms to dzēšanas; Standarta veids un formāts. Aprēķiniet aizpildījuma vērtību tikai no apmācības datiem, saglabājiet oriģinālu un izsekojiet katra soļa ietekmei, to saskaitot. AI ir milzīgs paātrinātājs šajā biznesā, taču cilvēki izlemj, ko jūs tīrāt un kāpēc.

Lietojumprogrammas uzdevums

Ņemiet (vai izveidojiet) nelielu tabulu un apzināti ievietojiet tajā trīs problēmas: trūkstošu vērtību korteži, izņēmumu, jauktu datuma formātu. Pieprasīt diagnostikas un standartizācijas kodu no AI, izmantojot iepriekš minētās veidnes; salīdziniet rindu un tukšumu skaitu pirms/pēc katras darbības. Mēģiniet noķert vismaz vienu "kluso zaudējumu" un atzīmējiet, kā jūs to pamanījāt.

kontrolsaraksts

  • [ ] Vai es saglabāju sākotnējos neapstrādātos datus un strādāju pie kopijas?
  • [ ] Vai esmu uzdevis jautājumu "kāpēc tā ir tukša" katrai trūkstošajai kolonnai?
  • [ ] Vai es pārskatīju novirzes pirms to dzēšanas?
  • [ ] Vai es aprēķināju polsterējuma vērtību tikai no treniņu datiem?
  • [ ] Vai es pārbaudu rindu/aizpildījumu skaitu pēc katras darbības un izslēdzu kluso zudumu?