Tietojen puhdistamisen taidon hallitseminen Pythonissa - KDnuggets

Tietojen puhdistamisen taidon hallitseminen Pythonissa – KDnuggets

Lähdesolmu: 2939047

Tietojen puhdistamisen taidon hallitseminen Pythonissa
Kuva tekijältä
 

Tietojen puhdistus on kriittinen osa mitä tahansa data-analyysiprosessia. Se on vaihe, jossa poistat virheet, käsittelet puuttuvia tietoja ja varmistat, että tietosi ovat sellaisessa muodossa, että voit käsitellä niitä. Ilman hyvin puhdistettua tietojoukkoa kaikki myöhemmät analyysit voivat olla vääristyneitä tai virheellisiä.

Tässä artikkelissa esitellään useita keskeisiä tekniikoita tietojen puhdistamiseen Pythonissa käyttämällä tehokkaita kirjastoja, kuten pandas, numpy, seaborn ja matplotlib.

Ennen kuin sukeltaa tietojen puhdistamisen mekaniikkaan, ymmärretään sen merkitys. Reaalimaailman tiedot ovat usein sotkuisia. Se voi sisältää päällekkäisiä merkintöjä, virheellisiä tai epäjohdonmukaisia ​​tietotyyppejä, puuttuvia arvoja, merkityksettömiä ominaisuuksia ja poikkeavuuksia. Kaikki nämä tekijät voivat johtaa harhaanjohtaviin johtopäätöksiin dataa analysoitaessa. Tämä tekee tietojen puhdistamisesta korvaamattoman osan datatieteen elinkaarta.

Käsittelemme seuraavat tietojen puhdistustehtävät.
 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
Kuva tekijältä

Ennen kuin aloitat, tuodaan tarvittavat kirjastot. Käytämme pandaa tietojen käsittelyyn ja seabornia ja matplotlibiä visualisointeihin.

Tuomme myös päivämäärä-ajan Python-moduulin päivämäärien käsittelyä varten.

import pandas as pd
import seaborn as sns
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

Ensin meidän on ladattava tietomme. Tässä esimerkissä aiomme ladata CSV-tiedoston pandoilla. Lisäämme myös erottimen argumentin.

df = pd.read_csv('F:KDNuggetsKDN Mastering the Art of Data Cleaning in Pythonproperty.csv', delimiter= ';')

Seuraavaksi on tärkeää tarkastaa data, jotta ymmärrät sen rakenteen, minkälaisten muuttujien kanssa työskentelemme ja puuttuuko arvoja. Koska tuomamme tiedot eivät ole valtavia, katsotaanpa koko tietojoukkoa.

# Look at all the rows of the dataframe
display(df)

Tältä tietojoukko näyttää.

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Näet heti, että joitakin arvoja puuttuu. Myös päivämäärämuodot ovat epäjohdonmukaisia.

Katsotaanpa nyt DataFrame-yhteenvetoa info()-menetelmällä.

# Get a concise summary of the dataframe
print(df.info())

Tässä koodin ulostulo.

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Näemme, että vain sarakkeessa square_feet ei ole NULL-arvoja, joten meidän on jotenkin käsiteltävä tämä. Myös sarakkeet ilmoitus_päivämäärä ja myyntipäivä ovat kohteen tietotyyppejä, vaikka tämän pitäisi olla päivämäärä.

Sarakkeen sijainti on täysin tyhjä. Tarvitsemmeko sitä?

Näytämme sinulle, kuinka voit käsitellä näitä ongelmia. Aloitamme oppimalla poistamaan tarpeettomia sarakkeita.

Tietojoukossa on kaksi saraketta, joita emme tarvitse data-analyysissämme, joten poistamme ne.

Ensimmäinen sarake on ostaja. Emme tarvitse sitä, koska ostajan nimi ei vaikuta analyysiin.

Käytämme drop()-menetelmää määritetyllä sarakkeen nimellä. Asetamme akseliksi 1 määrittääksemme, että haluamme poistaa sarakkeen. Myös inplace-argumentti on asetettu arvoon True, jotta muokkaamme olemassa olevaa DataFrame-kehystä emmekä luo uutta DataFrame-kehystä ilman poistettua saraketta.

df.drop('buyer', axis = 1, inplace = True)

Toinen sarake, jonka haluamme poistaa, on sijainti. Vaikka näiden tietojen saaminen voi olla hyödyllistä, tämä on täysin tyhjä sarake, joten poistetaan se.

Käytämme samaa lähestymistapaa kuin ensimmäisessä sarakkeessa.

df.drop('location', axis = 1, inplace = True)

Voit tietysti poistaa nämä kaksi saraketta samanaikaisesti.

df = df.drop(['buyer', 'location'], axis=1)

Molemmat lähestymistavat palauttavat seuraavan datakehyksen.

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa

Tietojoukossasi voi esiintyä päällekkäisiä tietoja useista syistä ja se voi vääristää analyysiäsi.

Tunnistataan kaksoiskappaleet tietojoukostamme. Näin voit tehdä sen.

Alla oleva koodi käyttää menetelmää monistettu () ottaa huomioon kaksoiskappaleet koko tietojoukossa. Sen oletusasetus on pitää arvon ensimmäinen esiintyminen ainutlaatuisena ja seuraavat esiintymät kaksoiskappaleina. Voit muokata tätä toimintaa käyttämällä pitää parametri. Esimerkiksi df.duplicated(keep=False) merkitsee kaikki kaksoiskappaleet todeksi, mukaan lukien ensimmäinen esiintymä.

# Detecting duplicates
duplicates = df[df.duplicated()]
duplicates

Tässä on tulos.

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Rivi, jolla on indeksi 3, on merkitty kaksoiskappaleeksi, koska rivi 2, jolla on samat arvot, on sen ensimmäinen esiintyminen.

Nyt meidän on poistettava kaksoiskappaleet, minkä teemme seuraavalla koodilla.

# Detecting duplicates
duplicates = df[df.duplicated()]
duplicates

- drop_duplicates() toiminto ottaa huomioon kaikki sarakkeet ja tunnistaa kaksoiskappaleet. Jos haluat ottaa huomioon vain tietyt sarakkeet, voit välittää ne luettelona tälle funktiolle seuraavasti: df.drop_duplicates(subset=[’sarake1’, ‘sarake2’]).

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Kuten näet, kaksoisrivi on pudotettu. Indeksointi pysyi kuitenkin samana, indeksi 3 puuttui. Korjaamme tämän nollaamalla indeksit.

df = df.reset_index(drop=True)

Tämä tehtävä suoritetaan käyttämällä reset_index() toiminto. Argumenttia drop=True käytetään alkuperäisen indeksin hylkäämiseen. Jos et sisällytä tätä argumenttia, vanha indeksi lisätään uutena sarakkeena DataFrame-kehykseen. Asettamalla drop=True käsket pandat unohtamaan vanhan indeksin ja palauttamaan sen oletusarvoiseen kokonaislukuindeksiin.

Kokeile harjoittelua varten poista kaksoiskappaleet tästä Microsoft-tietojoukosta.

Joskus tietotyypit voivat olla asetettu väärin. Esimerkiksi päivämääräsarake voidaan tulkita merkkijonoiksi. Sinun on muunnettava ne sopiviin tyyppeihin.

Tietojoukossamme teemme sen sarakkeille ilmoitus_päivämäärä ja myyntipäivämäärä, koska ne näytetään objektitietotyyppinä. Lisäksi päivämäärät on muotoiltu eri riveillä eri tavalla. Meidän on tehtävä siitä johdonmukainen ja muutettava se nykyiseksi.

Helpoin tapa on käyttää to_datetime() menetelmä. Jälleen voit tehdä tämän sarake sarakkeelta alla olevan kuvan mukaisesti.

Kun teemme niin, asetamme dayfirst-argumentin arvoon True, koska jotkin päivämäärät alkavat päivä ensin.

# Converting advertisement_date column to datetime
df['advertisement_date'] = pd.to_datetime(df['advertisement_date'], dayfirst = True) # Converting sale_date column to datetime
df['sale_date'] = pd.to_datetime(df['sale_date'], dayfirst = True)

Voit myös muuntaa molemmat sarakkeet samanaikaisesti käyttämällä Käytä() menetelmän kanssa to_datetime().

# Converting advertisement_date and sale_date columns to datetime
df[['advertisement_date', 'sale_date']] = df[['advertisement_date', 'sale_date']].apply(pd.to_datetime, dayfirst = True)

Molemmat lähestymistavat antavat sinulle saman tuloksen.

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Nyt päivämäärät ovat yhtenäisessä muodossa. Näemme, että kaikkia tietoja ei ole muunnettu. Ilmoituspäivämäärässä on yksi NaT-arvo ja myyntipäivämäärässä kaksi. Tämä tarkoittaa, että päivämäärä puuttuu.

Tarkistetaan, onko sarakkeet muunnettu päivämääriksi käyttämällä tiedot() menetelmällä.

# Get a concise summary of the dataframe
print(df.info())

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Kuten näet, molemmat sarakkeet eivät ole datetime64[ns]-muodossa.

Yritä nyt muuntaa tiedot TEKSTistä NUMEROKSIIN tässä Airbnb-tietojoukko.

Reaalimaailman tietojoukoista puuttuu usein arvoja. Puuttuvien tietojen käsittely on elintärkeää, koska tietyt algoritmit eivät voi käsitellä tällaisia ​​arvoja.

Esimerkissämme on myös joitain puuttuvia arvoja, joten tarkastellaan kahta tavallisinta tapaa käsitellä puuttuvia tietoja.

Poistetaan rivejä, joista puuttuu arvoja

Jos puuttuvien tietojen rivien määrä on merkityksetön verrattuna havaintojen kokonaismäärään, sinun kannattaa harkita näiden rivien poistamista.

Esimerkissämme viimeisellä rivillä ei ole muita arvoja paitsi neliöjalka ja ilmoituspäivämäärä. Emme voi käyttää tällaisia ​​tietoja, joten poistetaan tämä rivi.

Tässä on koodi, jossa osoitamme rivin indeksin.

df = df.drop(8)

DataFrame näyttää nyt tältä.

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Viimeinen rivi on poistettu, ja DataFrame näyttää nyt paremmalta. Kuitenkin vielä puuttuu tietoja, jotka käsittelemme toisella tavalla.

Puuttuvien arvojen laskeminen

Jos sinulla on merkittäviä puuttuvia tietoja, imputointi voisi olla parempi strategia kuin poistaminen. Tämä prosessi sisältää puuttuvien arvojen täyttämisen muiden tietojen perusteella. Numeerisille tiedoille yleiset imputointimenetelmät sisältävät keskeisen taipumuksen (keskiarvo, mediaani, moodi) käyttämisen.

Jo muuttuneessa DataFrame-kehyksessämme on NaT (Not a Time) -arvot sarakkeissa ilmoitus_päivämäärä ja myyntipäivämäärä. Laskemme nämä puuttuvat arvot käyttämällä tarkoittaa() menetelmällä.

Koodi käyttää fillna() menetelmä löytää ja täyttää nolla-arvot keskiarvolla.

# Imputing values for numerical columns
df['advertisement_date'] = df['advertisement_date'].fillna(df['advertisement_date'].mean())
df['sale_date'] = df['sale_date'].fillna(df['sale_date'].mean())

Voit myös tehdä saman asian yhdellä koodirivillä. Käytämme Käytä() käyttääksesi funktiota, joka on määritetty käyttämällä lambda. Kuten edellä, tämä toiminto käyttää fillna() ja tarkoittaa() menetelmiä puuttuvien arvojen täyttämiseksi.

# Imputing values for multiple numerical columns
df[['advertisement_date', 'sale_date']] = df[['advertisement_date', 'sale_date']].apply(lambda x: x.fillna(x.mean()))

Molemmissa tapauksissa tulos näyttää tältä.

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Sale_date-sarakkeessamme on nyt aikoja, joita emme tarvitse. Poistetaan ne.

Käytämme strftime() menetelmä, joka muuntaa päivämäärät niiden merkkijonoesitykseen ja tiettyyn muotoon.

df['sale_date'] = df['sale_date'].dt.strftime('%Y-%m-%d')

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Päivämäärät näyttävät nyt siisteiltä.

Jos haluat käyttää strftime() useissa sarakkeissa, voit käyttää uudelleen lambda seuraavalla tavalla.

df[['date1_formatted', 'date2_formatted']] = df[['date1', 'date2']].apply(lambda x: x.dt.strftime('%Y-%m-%d'))

Katsotaanpa nyt, kuinka voimme laskea puuttuvat kategorialliset arvot.

Kategorinen data on tietotyyppi, jota käytetään ryhmittelemään tietoja, joilla on samanlaiset ominaisuudet. Jokainen näistä ryhmistä on luokka. Kategorisilla tiedoilla voi olla numeerisia arvoja (kuten "1" tarkoittaa "miestä" ja "2" tarkoittaa "naista"), mutta näillä numeroilla ei ole matemaattista merkitystä. Et voi esimerkiksi lisätä niitä yhteen.

Kategoriset tiedot jaetaan yleensä kahteen luokkaan:

  1. Nimelliset tiedot: Tällöin luokat on vain merkitty, eikä niitä voida järjestää mihinkään tiettyyn järjestykseen. Esimerkkejä ovat sukupuoli (mies, nainen), veriryhmä (A, B, AB, O) tai väri (punainen, vihreä, sininen).
  1. Järjestystiedot: Tällöin luokat voidaan järjestää tai luokitella. Vaikka kategorioiden väliset välit eivät ole tasaisin välein, kategorioiden järjestyksellä on merkitys. Esimerkkejä ovat luokitusasteikot (elokuvan arvosana 1–5), koulutustaso (lukio, perustutkinto, ylioppilas) tai syövän vaiheet (vaihe I, vaihe II, vaihe III).

Puuttuvien kategoristen tietojen imputointiin käytetään tyypillisesti tilaa. Esimerkissämme sarake property_category on kategorista (nimellistä) dataa, ja kahdelta riviltä puuttuu tietoja.

Korvataan puuttuvat arvot tilalla.

# For categorical columns
df['property_category'] = df['property_category'].fillna(df['property_category'].mode()[0])

Tämä koodi käyttää fillna() funktio korvaa kaikki NaN-arvot property_category sarakkeessa. Se korvaa sen tilalla.

Lisäksi [0]-osaa käytetään poimimaan ensimmäinen arvo tästä sarjasta. Jos tiloja on useita, tämä valitsee ensimmäisen. Jos on vain yksi tila, se toimii silti hyvin.

Tässä on tulos.

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Data näyttää nyt aika hyvältä. Ainoa jäljellä oleva asia on nähdä, onko poikkeavuuksia.

Tässä voit harjoitella nollakohtien käsittelyä Meta haastattelu kysymys, jossa sinun on korvattava NULL-arvot nollilla.

Outliers ovat tietojoukon tietopisteitä, jotka eroavat selvästi muista havainnoista. Ne voivat olla poikkeuksellisen kaukana muista tietojoukon arvoista ja olla yleisen mallin ulkopuolella. Niitä pidetään epätavallisina, koska niiden arvot ovat joko merkittävästi korkeammat tai pienemmät muihin tietoihin verrattuna.

Poikkeamat voivat syntyä useista syistä, kuten:

  • Mittaus- tai syöttövirheet
  • Tietojen korruptio
  • Todellisia tilastollisia poikkeavuuksia

Poikkeamat voivat vaikuttaa merkittävästi data-analyysin ja tilastollisen mallinnuksen tuloksiin. Ne voivat johtaa vääristymään jakaumaan, harhaan tai mitätöidä taustalla olevat tilastolliset oletukset, vääristää arvioitua mallin sopivuutta, heikentää ennustemallien ennustetarkkuutta ja johtaa vääriin johtopäätöksiin.

Joitakin yleisesti käytettyjä menetelmiä poikkeamien havaitsemiseen ovat Z-pisteet, IQR (Interquartile Range), laatikkokaaviot, sirontakuvaajat ja datan visualisointitekniikat. Joissakin edistyneissä tapauksissa käytetään myös koneoppimismenetelmiä.

Tietojen visualisointi voi auttaa tunnistamaan poikkeamat. Seabornin boxplot on kätevä tähän.

plt.figure(figsize=(10, 6))
sns.boxplot(data=df[['advertised_price', 'sale_price']])

Käytämme plt.figure() määrittääksesi kuvan leveyden ja korkeuden tuumina.

Sitten luodaan boxplot sarakkeille mainostettu_hinta ja myyntihinta, joka näyttää tältä.

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Juomaa voidaan parantaa käytön helpottamiseksi lisäämällä tämä yllä olevaan koodiin.

plt.xlabel('Prices')
plt.ylabel('USD')
plt.ticklabel_format(style='plain', axis='y')
formatter = ticker.FuncFormatter(lambda x, p: format(x, ',.2f'))
plt.gca().yaxis.set_major_formatter(formatter)

Käytämme yllä olevaa koodia asettaaksemme molempien akselien tarrat. Huomaamme myös, että y-akselin arvot ovat tieteellisessä merkinnässä, emmekä voi käyttää sitä hinta-arvoissa. Joten muutamme tämän tavalliseksi tyyliksi plt.ticklabel_format()-funktiolla.

Sitten luomme muotoilijan, joka näyttää arvot y-akselilla pilkuilla tuhansina erottimina ja desimaalipisteinä. Viimeinen koodirivi soveltaa tätä akseliin.

Tulos näyttää nyt tältä.

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Miten tunnistamme ja poistamme poikkeaman?

Yksi tapa on käyttää IQR-menetelmää.

IQR tai Interquartile Range on tilastollinen menetelmä, jota käytetään vaihtelevuuden mittaamiseen jakamalla tietojoukko kvartiileihin. Kvartiilit jakavat arvojärjestyksessä järjestetyn tietojoukon neljään yhtä suureen osaan, ja ensimmäisen kvartiilin (25. prosenttipiste) ja kolmannen kvartiilin (75. prosenttipiste) alueella olevat arvot muodostavat kvartiilien välisen alueen.

Interkvartiilialuetta käytetään tietojen poikkeamien tunnistamiseen. Näin se toimii:

  1. Laske ensin ensimmäinen kvartiili (Q1), kolmas kvartiili (Q3) ja määritä sitten IQR. IQR lasketaan Q3 – Q1.
  2. Kaikki arvot, jotka ovat alle Q1 – 1.5 IQR tai yli Q3 + 1.5 IQR, katsotaan poikkeavaksi arvoksi.

Laatikkokaaviossamme laatikko itse asiassa edustaa IQR:ää. Laatikon sisällä oleva viiva on mediaani (tai toinen kvartiili). Boksidiagrammin 'viikset' edustavat 1.5*IQR:n sisällä Q1:stä ja Q3:sta.

Kaikkia näiden viiksien ulkopuolella olevia datapisteitä voidaan pitää poikkeavina. Meidän tapauksessamme sen arvo on 12,000,000 XNUMX XNUMX dollaria. Jos katsot boxplotia, näet, kuinka selkeästi tämä on esitetty, mikä osoittaa, miksi datan visualisointi on tärkeää poikkeamien havaitsemisessa.

Poistetaan nyt poikkeamat käyttämällä Python-koodin IQR-menetelmää. Ensin poistamme ilmoitetut hintapoikkeamat.

Q1 = df['advertised_price'].quantile(0.25)
Q3 = df['advertised_price'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['advertised_price'] (Q1 - 1.5 * IQR)) |(df['advertised_price'] > (Q3 + 1.5 * IQR)))]

Laskemme ensin ensimmäisen kvartiilin (tai 25. prosenttipisteen) käyttämällä kvantili() toiminto. Teemme samoin kolmannelle kvartiilille tai 75. prosenttipisteelle.

Ne osoittavat arvot, joiden alapuolelle jää 25 % ja 75 % tiedoista.

Sitten lasketaan kvartiilien välinen ero. Kaikki tähän mennessä on vain IQR-vaiheiden kääntämistä Python-koodiksi.

Viimeisenä vaiheena poistamme poikkeamat. Toisin sanoen kaikki tiedot alle Q1 – 1.5 * IQR tai enemmän kuin Q3 + 1.5 * IQR.

'~'-operaattori kumoaa ehdon, joten meille jää vain tiedot, jotka eivät ole poikkeavia.

Sitten voimme tehdä samoin myyntihinnan kanssa.

Q1 = df['sale_price'].quantile(0.25)
Q3 = df['sale_price'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['sale_price'] (Q1 - 1.5 * IQR)) |(df['sale_price'] > (Q3 + 1.5 * IQR)))]

Tietysti voit tehdä sen ytimekkäämmin käyttämällä silmukalle.

for column in ['advertised_price', 'sale_price']: Q1 = df[column].quantile(0.25) Q3 = df[column].quantile(0.75) IQR = Q3 - Q1 df = df[~((df[column] (Q1 - 1.5 * IQR)) |(df[column] > (Q3 + 1.5 * IQR)))]

Kahden sarakkeen silmukka iteroi. Se laskee jokaiselle sarakkeelle IQR:n ja poistaa sitten rivit DataFramesta.

Huomaa, että tämä toiminto suoritetaan peräkkäin, ensin mainostettu_hinta ja sitten myyntihinta. Tämän seurauksena DataFrame-kehystä muokataan paikan päällä jokaisessa sarakkeessa, ja rivit voidaan poistaa, koska ne ovat poikkeavia kummassakin sarakkeessa. Tästä syystä tämä toiminto saattaa johtaa vähemmän riveihin kuin jos mainostettu_hinta- ja myyntihinta-arvot poistettaisiin erikseen ja tulokset yhdistettäisiin myöhemmin.

Esimerkissämme tulos on sama molemmissa tapauksissa. Nähdäksemme kuinka laatikkokuvaaja muuttui, meidän on piirrettävä se uudelleen käyttämällä samaa koodia kuin aiemmin.

plt.figure(figsize=(10, 6))
sns.boxplot(data=df[['advertised_price', 'sale_price']])
plt.xlabel('Prices')
plt.ylabel('USD')
plt.ticklabel_format(style='plain', axis='y')
formatter = ticker.FuncFormatter(lambda x, p: format(x, ',.2f'))
plt.gca().yaxis.set_major_formatter(formatter)

Tässä on tulos.

 

Tietojen puhdistamisen taidon hallitseminen Pythonissa
 

Voit harjoitella prosenttipisteiden laskemista Pythonissa ratkaisemalla Yleiskokouksen haastattelukysymys.

Tietojen puhdistaminen on tärkeä vaihe tietojen analysointiprosessissa. Vaikka se voi viedä aikaa, on tärkeää varmistaa havaintosi oikeellisuus.

Onneksi Pythonin rikas kirjastoekosysteemi tekee tästä prosessista helpommin hallittavissa. Opimme poistamaan tarpeettomia rivejä ja sarakkeita, alustamaan tiedot uudelleen ja käsittelemään puuttuvia arvoja ja poikkeavia arvoja. Nämä ovat tavallisia vaiheita, jotka on suoritettava useimmille tiedoille. Sinun on kuitenkin myös joskus tarpeen yhdistä kaksi saraketta yhdeksi, tarkista olemassa olevat tiedot, määrittää sille tunnisteitatai päästä eroon valkoisista välilyönneistä.

Kaikki tämä on tietojen puhdistamista, koska sen avulla voit muuttaa sotkuiset, todelliset tiedot hyvin jäsennellyksi tietojoukoksi, jota voit analysoida luottavaisin mielin. Vertaa vain tietojoukkoa, josta aloitimme, siihen, johon päädyimme.

Jos et näe tyytyväisyyttä tästä tuloksesta ja puhdas data ei innosta sinua oudosti, mitä ihmettä sinä teet datatieteessä!?
 

Nate Rosidi on datatieteilijä ja tuotestrategiassa. Hän on myös analytiikkaa opettava dosentti ja perustaja StrataScratch, alusta, joka auttaa datatieteilijöitä valmistautumaan haastatteluihin huippuyritysten todellisilla haastattelukysymyksillä. Ota yhteyttä häneen Twitter: StrataScratch or LinkedIn.

Aikaleima:

Lisää aiheesta KDnuggets