You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Data-Science-For-Beginners/translations/et/2-Working-With-Data/07-python
localizeflow[bot] 544734ff2c
[ta,et,pcm] chore(i18n): sync translations
4 weeks ago
..
R 🌐 Update translations via Co-op Translator 10 months ago
README.md [ta,et,pcm] chore(i18n): sync translations 4 weeks ago
assignment.md chore(i18n): sync translations with latest source changes (chunk 1/1, 213 changes) 6 months ago
notebook-covidspread.ipynb chore(i18n): sync translations with latest source changes (chunk 1/1, 65 changes) 6 months ago
notebook-papers.ipynb 🌐 Update translations via Co-op Translator 10 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 10 months ago

README.md

Andmetega töötamine: Python ja Pandase teek

 Sketchnote by (@sketchthedocs)
Töötamine Pythoniga - Sketchnote autoriks @nitya

Sissejuhatav video

Kuigi andmebaasid pakuvad väga tõhusaid võimalusi andmete salvestamiseks ja päringute tegemiseks päringukeeles, on andmetöötluse kõige paindlikum viis oma programmi kirjutamine andmete manipuleerimiseks. Paljudel juhtudel on andmebaasi päring tõhusam meetod. Kuid mõnel juhul, kui on vaja keerulisemat andmetöötlust, ei ole see SQL-iga kerge. Andmetöötlust saab programmeerida mis tahes programmeerimiskeeles, kuid mõned keeled on kõrgema tasemega andmetöötluse osas. Andmeteadlased eelistavad tavaliselt ühte järgmistest keeltest:

  • Python, üldotstarbeline programmeerimiskeel, mida peetakse sageli üheks parimaks võimaluseks algajatele tänu selle lihtsusele. Pythonil on palju lisaraamatukogusid, mis aitavad lahendada mitmeid praktilisi probleeme, näiteks andmete väljavõtmist ZIP-arhiivist või pildi muundamist halltooniks. Lisaks andmeteadusele kasutatakse Pythoni sageli ka veebiarenduses.
  • R on traditsiooniline tööriistakomplekt, mis on loodud statistilise andmetöötluse jaoks. Sellel on suur raamatukogude hoidla (CRAN), mis teeb sellest hea valiku andmetöötluseks. Kuid R ei ole üldotstarbeline programmeerimiskeel ja seda kasutatakse harva väljaspool andmeteaduse valdkonda.
  • Julia on veel üks keel, mis on spetsiaalselt arendatud andmeteadusele. Selle eesmärk on pakkuda paremat jõudlust kui Python, muutes selle suurepäraseks tööriistaks teaduslikeks katseteks.

Selles õppetükis keskendume Pythonile lihtsate andmetöötlusülesannete lahendamiseks. Eeldame keele põhiteadmisi. Kui soovite Pythoniga põhjalikumat tutvust teha, võite vaadata üht järgmistest ressurssidest:

Andmed võivad esineda mitmel kujul. Selles õppetükis käsitleme kolme andmetüüpi - tabelandmed, tekst ja pildid.

Keskendume mõnedel näidete andmetöötlusest, mitte kõigi seotud raamatukogude täielikule ülevaatele. See võimaldab teil saada põhimõtte selgeks, mis on võimalik, ning annab arusaama, kust leida lahendusi probleemidele, kui teil neid vaja on.

Kõige kasulikum nõuanne. Kui peate andmetel sooritama mõne toimingu, mida te ei oska, proovige otsida internetist. Stackoverflow sisaldab tavaliselt palju kasulikke näidiskoodide lahendusi Pythonis paljude tüüpiliste ülesannete jaoks.

Eel-loengukomisjon

Tabelandmed ja DataFrame'id

Olete juba kohtunud tabelandmetega, kui rääkisime relatsiooniandmebaasidest. Kui teil on palju andmeid, mis paiknevad paljudes erinevates seotud tabelites, on kindlasti mõistlik kasutada SQL-i nende töötlemiseks. Kuid paljudel juhtudel on meil olemas andmetabel, mille põhjal soovime saada mingit arusaamist või teadmisi, näiteks jaotust, väärtuste korrelatsiooni jne. Andmeteaduses on palju olukordi, kus on vaja teha originaalandmete transformatsioone, millele järgneb visualiseerimine. Mõlemad sammud saab hõlpsasti teha Pythoniga.

Pythoni kõige kasulikumad teegid tabelandmetega töötamiseks on:

  • Pandas võimaldab teil manipuleerida nn DataFrame'idega, mis on analoogsed relatsioonitabelitele. Saate nimega veerge ning teha erinevaid operatsioone ridade, veergude ja andmeraamidega üldiselt.
  • Numpy on teek, mis on mõeldud tensooridega töötamiseks, st mitmemõõtmeliste massiividega. Massiiv sisaldab sama andmetüübiga väärtusi ning on lihtsam kui DataFrame, kuid pakub rohkem matemaatilisi operatsioone ning tekitab vähem lisakulu.

On ka paar muud teeki, mida tasub teada:

  • Matplotlib on teek andmete visualiseerimiseks ja graafikute joonistamiseks
  • SciPy on teek mõnede lisateaduslike funktsioonidega. Oleme sellele juba varem tähelepanu pööranud tõenäosuse ja statistika teemas.

Järgmine koodilõik on tüüpiline viis nende teekide importimiseks Pythoni programmi alguses:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # peate täpsustama täpsed alam-paketid, mida vajate

Pandas põhineb mõnel põhimõttel.

Seeria (Series)

Series on väärtuste jada, sarnane listile või numpy massiivile. Peamine erinevus on see, et series'il on ka indeks, ning kui me töötleme series (nt liitmisel), võetakse indeks arvesse. Indeks võib olla niisama lihtne kui täisarvuline rea number (see on vaikimisi indeks, mis lisatakse listist või massiivist series'i loomisel), või keerukam struktuur, näiteks kuupaeva intervall.

** Märkus**: Saate tutvuda mõningate Pandas'i algkoodinäidetega kaasnevas märkmikus notebook.ipynb. Me toome siin vaid mõned näited ning kindlasti on soovitatav vaadata kogu märkmikku.

Vaatame näidet: soovime analüüsida oma jäätisekohviku müüki. Genereerime müüginumbrite seeria (iga päev müüdud kaupade arv) mingiks ajavahemikuks:

start_date = "Jan 1, 2020"
end_date = "Mar 31, 2020"
idx = pd.date_range(start_date,end_date)
print(f"Length of index is {len(idx)}")
items_sold = pd.Series(np.random.randint(25,50,size=len(idx)),index=idx)
items_sold.plot()

Ajaseeria graafik

Oletame nüüd, et iga nädal korraldame sõpradele peo ning võtame lisaks veel 10 pakki jäätist kaasa. Selleks loome teise seeria, mille indeksiks on nädal, et seda näidata:

additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))

Kui liidame kaks seeriat, saame koguarvu:

total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()

Ajaseeria graafik

Tähelepanu: me ei kasuta lihtsat süntaksit total_items+additional_items. Kui oleksime, oleks tulemuseks palju NaN (Not a Number) väärtusi seerias. Põhjus on selles, et some indeksikohtades additional_items seerias väärtusi puudub, ning NaN lisamine millelegi annab tulemuseks NaN. Seetõttu tuleb liitmisel kasutada fill_value parameetrit.

Ajaseeria puhul saame ka ümberproovida ehk resample'ida seeriat erinevate ajavahemikega. Näiteks soovime arvutada keskmist müügitulemust kuude kaupa. Selleks kasutame järgmist koodi:

monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')

Kuu keskmised ajaseerias

DataFrame

DataFrame on sisuliselt kooslus samade indeksitega seeriatest. Võime mitme serie ühendada DataFrame-ks:

a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
df = pd.DataFrame([a,b])

See loob horisontaalse tabeli kujul:

0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 9
1 I like to use Python and Pandas very much

Võime kasutada ka Series veergudena ning määrata veergude nimetused sõnastiku abil:

df = pd.DataFrame({ 'A' : a, 'B' : b })

See annab meile sellise tabeli:

A B
0 1 I
1 2 like
2 3 to
3 4 use
4 5 Python
5 6 and
6 7 Pandas
7 8 very
8 9 much

Märkus: Saame ka eelmist tabelit ümber pöörata (transpose), et saada sama tabelipaigutus, nt selliselt:

df = pd.DataFrame([a,b]).T.rename(columns={ 0 : 'A', 1 : 'B' })

Siin .T tähendab DataFrame'i transposeerimist ehk ridade ja veergude vahetust ning rename meetod lubab veerge nimetada vastavalt eelnevale näitele.

Järgnevalt mõned tähtsamad operatsioonid, mida saame DataFrame'idel sooritada:

Veergude valik. Saame valida üksikuid veerge kirjutades df['A'] - see tagastab Series'i. Võime valida veergude alamkomplekti teise DataFrame'i saamiseks kirjutades df[['B','A']] - see annab teise DataFrame'i.

Ridade filtreerimine vastavalt tingimustele. Näiteks, et jätta alles ainult read, kus veeru A väärtus on suurem kui 5, kirjutame df[df['A']>5].

Märkus: Filtreerimine töötab järgmiselt. Avaldis df['A']<5 tagastab tõeväärtusteseeria (boolean series), mis näitab iga algse df['A'] elemendi kohta, kas avaldis on True või False. Kui tõeväärtusteseeria on indeksina, tagastab see DataFrame'i ridade alamkogumi. Seetõttu ei saa kasutada suvalist Python'i tõeväärtuslikku avaldist - näiteks df[df['A']>5 and df['A']<7] oleks vale. Selle asemel tuleks kasutada spetsiaalset & operaatorit tõeväärtusteseeriate vahel, kirjutades df[(df['A']>5) & (df['A']<7)] (hoolitsege sulgude eest).

Uute arvutatavate veergude loomine. Saame hõlpsasti luua DataFrame'i uusi arvutatavaid veerge intuitiivsete avaldiste abil:

df['DivA'] = df['A']-df['A'].mean() 

See näide arvutab A hälbe selle keskmisest väärtusest. Tegelikult arvutame series'i ja määrame selle vasakpoolsesse ossa, luues uue veeru. Seetõttu ei saa kasutada operatsioone, mis ei sobi series'iga - näiteks järgmine kood on vale:

# Vale kood -> df['ADescr'] = "Madal" kui df['A'] < 5 muidu "Kõrge"
df['LenB'] = len(df['B']) # <- Vale tulemus

Viimane näide, kuigi süntaktiliselt korrektne, annab vale tulemuse, sest see määrab veeru kõigile väärtustele B pikkuse asemel iga üksiku elemendi pikkuse.

Kui vaja arvutada keerukamaid avaldisi, võime kasutada apply funktsiooni. Viimane näide on kirjutatav nii:

df['LenB'] = df['B'].apply(lambda x : len(x))
# või
df['LenB'] = df['B'].apply(len)

Ülaltoodud operatsioonide tulemusena saame järgmise DataFrame'i:

A B DivA LenB
0 1 I -4.0 1
1 2 like -3.0 4
2 3 to -2.0 2
3 4 use -1.0 3
4 5 Python 0.0 6
5 6 and 1.0 3
6 7 Pandas 2.0 6
7 8 very 3.0 4
8 9 much 4.0 4

Rea valik numbrite järgi on tehtav iloc konstruktsiooni abil. Näiteks esimese 5 rea valimiseks DataFrame'ist:

df.iloc[:5]

Rühmitamine kasutatakse sageli tulemuste saamiseks, mis sarnanevad Exceli pöörd- või ristsummatabelitega. Oletame, et soovime arvutada veeru A keskmise väärtuse iga LenB väärtuse jaoks. Sel juhul rühmitame DataFrame'i LenB kaupa ja kutsume mean funktsiooni:

df.groupby(by='LenB')[['A','DivA']].mean()

Kui soovime arvutada nii keskmist kui ka grupi elementide arvu, saame kasutada keerulisemat aggregate funktsiooni:

df.groupby(by='LenB') \
 .aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
 .rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'})

See annab järgmise tabeli:

LenB Count Mean
1 1 1.000000
2 1 3.000000
3 2 5.000000
4 3 6.333333
6 2 6.000000

Andmete hankimine

Oleme näinud, kui lihtne on luua Series ja DataFrameid Python objektidest. Andmed tulevad aga tavaliselt tekstifaili või Exceli tabeli kujul. Õnneks pakub Pandas lihtsat moodust andmete laadimiseks kettalt. Näiteks CSV faili lugemine on sedavõrd lihtne:

df = pd.read_csv('file.csv')

Veel näiteid andmete laadimisest, sealhulgas nende allalaadimisest väljastpoolt veebisaidilt, näeme jaotises "Challenge"

Trükkimine ja joonistamine

Andmeteadlane peab tihti andmeid uurima, seega on oluline neid visualiseerida. Kui DataFrame on suur, tahame tihti lihtsalt veenduda, et kõik on tehtud õigesti, trükkides välja esimesed read. Selleks kutsutakse df.head(). Kui kasutate Jupyter Notebooki, trükitakse DataFrame kena tabelina.

Oleme näinud ka plot funktsiooni kasutamist veergude visualiseerimiseks. Kuigi plot on paljuülesannetes väga kasulik ning toetab paljusid graafikutüüpe läbi kind= parameetri, saate alati kasutada ka puhtalt matplotlib teeki keerukamate jooniste tegemiseks. Andmete visualiseerimist käsitleme põhjalikumalt eraldi kursuse õppetundides.

See ülevaade katab Pandase olulisemad mõisted, kuid teek on väga mahukas ja võimalused peaaegu piiramatud! Rakendame nüüd seda teadmist konkreetse probleemi lahendamiseks.

🚀 Väljakutse 1: COVID leviku analüüs

Esimene probleem on COVID-19 epideemia leviku modelleerimine. Selleks kasutame nakkusjuhtumite arvu andmeid erinevates riikides, mida pakub Center for Systems Science and Engineering (CSSE) Johns Hopkinsi Ülikoolis. Andmestik on kättesaadav selles GitHubi hoidlas.

Kuna tahame demonstreerida, kuidas andmetega töötada, kutsume teid avama notebook-covidspread.ipynb ja lugema seda põhjalikult. Samuti saate teostada lahtrite käivitamist ja proovida paar väljakutset, mille oleme teile lõppu jätnud.

COVID Spread

Kui te ei tea, kuidas Jupyter Notebookis koodi käivitada, vaadake seda artiklit.

Töötamine struktureerimata andmetega

Kuigi andmed tulevad väga sageli tabelina, peame mõnikord tegelema vähem struktureeritud andmetega, näiteks tekstide või piltidega. Sellisel juhul, et kasutada andmetöötlusmeetodeid, mida oleme ülal näinud, peame kuidagi ekstraheerima struktureeritud andmed. Siin on mõned näited:

  • Märksõnade ekstraheerimine tekstist ja nende esinemissageduse analüüs
  • Neuraalvõrkude kasutamine objektide info ekstraheerimiseks piltidelt
  • Emotsioonide tuvastamine inimeste kohta videosalvestusel

🚀 Väljakutse 2: COVID teadusartiklite analüüs

Selles väljakutses jätkame COVID pandeemia teemaga ja keskendume teadusartiklite töötlemisele sellel teemal. Olemas on CORD-19 andmestik, mis sisaldab rohkem kui 7000 (kirjutamise hetkel) COVIDi kohta artiklit koos metaandmete ja kokkuvõtetega (ja umbes poole artiklite puhul ka täisteksti).

Näide selle andmekogumi analüüsimisest kasutades Text Analytics for Health kognitiivset teenust on kirjeldatud selles blogipostituses. Me käsitleme selle analüüsi lihtsustatud versiooni.

MÄRKUS: Me ei paku selle hoidla osana andmestiku koopiat. Võite esmalt alla laadida metadata.csv faili selle andmestiku lehelt Kaggleis. Võib-olla peate registreeruma Kaggleis. Andmestikku saab registreerumiseta alla laadida ka siit, kuid seal on lisaks metaandmetele ka kõik täistekstid.

Avage notebook-papers.ipynb ja lugege see põhjalikult läbi. Samuti saate käivitada lahtrid ja katsetada mõningaid teile jäetud väljakutseid lõpus.

Covid Medical Treatment

Pildiadmete töötlemine

Hiljuti on arendatud väga võimsaid tehisintellekti mudeleid, mis aitavad meil pilte mõista. Paljud ülesanded lahendatakse eelnevalt treenitud neuraalvõrkude või pilveteenuste abil. Mõned näited:

  • Pildiklassifikatsioon, mis aitab kategooriseerida pilti üheks etteantud klassist. Oma pildiklassifikaatoreid saab hõlpsasti treenida teenuste abil, nagu Custom Vision
  • Objektituvastus, mis tuvastab pildil erinevaid objekte. Teenused nagu computer vision tuvastavad hulga levinud objekte, ning Custom Vision mudelit saab treenida teatud huvipakkuvate objektide leidmiseks.
  • Nähtuvus vanuse, soo ja emotsiooni tuvastamine näolt. Seda saab teha Face API abil.

Kõiki neid pilveteenuseid saab kasutada Python SDK-de kaudu ning neid on kerge kaasata oma andmeuurimise töövoogu.

Siin on mõned näited pildiallikatest andmete uurimisest:

Kokkuvõte

Olenemata sellest, kas sul on struktureeritud või struktureerimata andmed, saad Pythoniga teha kõik andmete töötlemise ja mõistmise sammud. See on tõenäoliselt kõige paindlikum viis andmetöötluseks ja seetõttu kasutab enamus andmeteadlasi just Pythonit esmatööriistana. Pythoni süvitsi õppimine on hea mõte, kui oled tõsiselt oma andmeteaduse teekonnaga!

Lektuuri järgne test

Kordamine ja iseseisev õppimine

Raamatud

Veebiallikaid

Python õppimine

Ülesanne

Tee põhjalikumat andmeanalüüsi ülaltoodud väljakutsetele

Tunnustused

Selle õppetunni autor on ♥️ Dmitry Soshnikov


Lahtiütlus: See dokument on tõlgitud kasutades AI tõlketeenust Co-op Translator. Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest.