Nors duomenų bazės siūlo labai efektyvius būdus saugoti duomenis ir užklausas vykdyti naudojant užklausų kalbas, lankstiausias būdas apdoroti duomenis yra rašyti savo programą, kuri manipuliuoja duomenimis. Daugeliu atvejų duomenų bazės užklausa būtų efektyvesnis sprendimas. Tačiau kai kuriais atvejais, kai reikia sudėtingesnio duomenų apdorojimo, tai negali būti lengvai atlikta naudojant SQL.
Duomenų apdorojimas gali būti programuojamas bet kuria programavimo kalba, tačiau yra tam tikrų kalbų, kurios yra aukštesnio lygio dirbant su duomenimis. Duomenų mokslininkai paprastai renkasi vieną iš šių kalbų:
Nors duomenų bazės siūlo labai efektyvius būdus duomenims saugoti ir juos užklausinėti naudojant užklausų kalbas, lanksčiausias būdas duomenų apdorojimui yra rašyti savo programą duomenims manipuliuoti. Daugeliu atvejų duomenų bazės užklausa būtų veiksmingesnis būdas. Tačiau kai kuriais atvejais, kai reikia sudėtingesnio duomenų apdorojimo, to negalima lengvai atlikti naudojant SQL.
Duomenų apdorojimas gali būti programuojamas bet kuria programavimo kalba, tačiau yra tam tikros kalbos, kurios yra aukštesnio lygio dirbant su duomenimis. Duomenų mokslininkai paprastai renkasi vieną iš šių kalbų:
* **[Python](https://www.python.org/)**– universali programavimo kalba, kuri dažnai laikoma viena geriausių pasirinkimų pradedantiesiems dėl savo paprastumo. Python turi daugybę papildomų bibliotekų, kurios gali padėti išspręsti daugelį praktinių problemų, pvz., išgauti duomenis iš ZIP archyvo ar konvertuoti paveikslėlį į pilką spalvą. Be duomenų mokslo, Python taip pat dažnai naudojamas interneto svetainių kūrimui.
* **[R](https://www.r-project.org/)** – tradicinė įrankių dėžė, sukurta statistinių duomenų apdorojimui. Ji taip pat turi didelę bibliotekų saugyklą (CRAN), todėl yra geras pasirinkimas duomenų apdorojimui. Tačiau R nėra universali programavimo kalba ir retai naudojama už duomenų mokslo ribų.
* **[Julia](https://julialang.org/)** – kita kalba, sukurta specialiai duomenų mokslui. Ji skirta geresniam našumui nei Python, todėl yra puikus įrankis moksliniams eksperimentams.
* **[Python](https://www.python.org/)**, bendros paskirties programavimo kalba, kuri dažnai laikoma viena geriausių pasirinkčių pradedantiesiems dėl jos paprastumo. Python turi daug papildomų bibliotekų, kurios gali padėti išspręsti daugelį praktinių problemų, pavyzdžiui, išgauti duomenis iš ZIP archyvo arba konvertuoti paveikslėlį į pilką skalę. Be duomenų mokslo, Python taip pat dažnai naudojamas interneto kūrimui.
* **[R](https://www.r-project.org/)** yra tradicinis įrankių rinkinys, sukurtas galvojant apie statistinį duomenų apdorojimą. Jis taip pat turi didelę bibliotekų saugyklą (CRAN), todėl yra gera pasirinktis duomenų apdorojimui. Tačiau R nėra bendros paskirties programavimo kalba ir retai naudojama už duomenų mokslo srities ribų.
* **[Julia](https://julialang.org/)** yra kita kalba, sukurta specialiai duomenų mokslui. Ji skirta suteikti geresnį našumą nei Python, todėl yra puikus įrankis moksliniams eksperimentams.
Šioje pamokoje mes sutelksime dėmesį į Python naudojimą paprastam duomenų apdorojimui. Mes prielaida, kad turite pagrindines žinias apie šią kalbą. Jei norite giliau susipažinti su Python, galite pasinaudoti vienu iš šių šaltinių:
Šiame pamokoje mes sutelksime dėmesį į Python naudojimą paprastam duomenų apdorojimui. Mes prielaidžiai laikome, kad turite pagrindines kalbos žinias. Jei norite išsamesnio Python pažinimo, galite pasinaudoti vienu iš šių šaltinių:
* [Mokykitės Python smagiai su Turtle Graphics ir Fractals](https://github.com/shwars/pycourse) – greitas įvadas į Python programavimą GitHub platformoje
* [Pradėkite savo pirmuosius žingsnius su Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Mokymosi kelias [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Mokykitės Python linksmai su Turtle grafika ir fraktalais](https://github.com/shwars/pycourse) - greita įžanga į Python programavimą GitHub platformoje
* [Pirmieji žingsniai su Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) mokymosi kelias platformoje [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
Duomenys gali būti įvairių formų. Šioje pamokoje mes apsvarstysime tris duomenų formas –**lentelinius duomenis**, **tekstą** ir **vaizdus**.
Duomenys gali būti įvairių formų. Šioje pamokoje mes apsvarstysime tris duomenų formas - **lentelinius duomenis**, **tekstą** ir **paveikslėlius**.
Mes sutelksime dėmesį į keletą duomenų apdorojimo pavyzdžių, o ne pateiksime visą susijusių bibliotekų apžvalgą. Tai leis jums suprasti pagrindinę idėją, kas įmanoma, ir paliks jums supratimą, kur rasti sprendimus savo problemoms, kai jų prireiks.
Mes sutelksime dėmesį į keletą duomenų apdorojimo pavyzdžių vietoje to, kad pateiktume pilną visų susijusių bibliotekų apžvalgą. Tai leis jums suprasti pagrindinę idėją, kas įmanoma, ir suteiks supratimą, kur rasti sprendimų savo problemoms, kai jų reikės.
> **Naudingiausias patarimas**. Kai reikia atlikti tam tikrą operaciją su duomenimis, kurios nežinote, kaip atlikti, pabandykite ieškoti informacijos internete. [Stackoverflow](https://stackoverflow.com/) dažnai turi daug naudingų Python kodo pavyzdžių daugeliui tipinių užduočių.
> **Naudingiausias patarimas**. Kai jums reikia atlikti tam tikrą veiksmą su duomenimis ir nežinote, kaip tai padaryti, pabandykite ieškoti internete. [Stackoverflow](https://stackoverflow.com/) dažnai turi daug naudingų Python kodo pavyzdžių daugeliui tipinių užduočių.
Jūs jau susipažinote su lenteliniais duomenimis, kai kalbėjome apie reliacines duomenų bazes. Kai turite daug duomenų, kurie yra saugomi skirtingose susietose lentelėse, tikrai verta naudoti SQL darbui su jais. Tačiau yra daug atvejų, kai turime duomenų lentelę ir norime gauti tam tikrą **supratimą** ar **įžvalgas** apie šiuos duomenis, pvz., pasiskirstymą, vertybių koreliaciją ir pan. Duomenų moksle dažnai reikia atlikti tam tikras originalių duomenų transformacijas, po kurių seka vizualizacija. Abi šios užduotys gali būti lengvai atliktos naudojant Python.
Jūs jau susipažinote su lenteliniais duomenimis, kai kalbėjome apie reliacines duomenų bazes. Kai turite daug duomenų, ir jie yra daugelyje skirtingų susietų lentelių, tikrai prasminga naudoti SQL darbui su jais. Tačiau yra daug atvejų, kai turime duomenų lentelę ir norime gauti **supratimą** arba **įžvalgas** apie šiuos duomenis, pavyzdžiui, pasiskirstymą, reikšmių koreliaciją ir pan. Duomenų moksle dažnai reikia atlikti tam tikras originalių duomenų transformacijas, kurioms seka vizualizacija. Abu šie žingsniai yra lengvai atlikti naudojant Python.
Yra dvi naudingiausios Python bibliotekos, kurios gali padėti dirbti su lenteliniais duomenimis:
* **[Pandas](https://pandas.pydata.org/)** leidžia manipuliuoti vadinamaisiais **duomenų rėmeliais**, kurie yra analogiški reliacinėms lentelėms. Galite turėti pavadintas stulpelius ir atlikti įvairias operacijas su eilutėmis, stulpeliais ir duomenų rėmeliais apskritai.
* **[Numpy](https://numpy.org/)** yra biblioteka, skirta dirbti su **tensoriais**, t. y. daugiamačiais **masyvais**. Masyvas turi vienodo tipo vertybes ir yra paprastesnis nei duomenų rėmelis, tačiau siūlo daugiau matematinių operacijų ir sukuria mažiau papildomų išteklių.
Python yra dvi naudingiausios bibliotekos, kurios gali padėti dirbti su lenteliniais duomenimis:
* **[Pandas](https://pandas.pydata.org/)** leidžia manipuliuoti vadinamaisiais **Dataframe'ais**, kurie yra analogiški reliacinėms lentelėms. Galima turėti pavadintas stulpelius ir atlikti įvairias operacijas su eilutėmis, stulpeliais ir visais data frame'ais apskritai.
* **[Numpy](https://numpy.org/)** yra biblioteka darbui su **tenzorais**, t. y. daugiamatėmis **matricomis**. Matrica turi vienodos pagrindinės rūšies reikšmes, ir ji yra paprastesnė už dataframe, tačiau siūlo daugiau matematinių operacijų bei sukuria mažiau papildomos naštos.
Taip pat yra keletas kitų bibliotekų, kurias verta žinoti:
* **[Matplotlib](https://matplotlib.org/)** – biblioteka, naudojama duomenų vizualizacijai ir grafų braižymui
* **[SciPy](https://www.scipy.org/)** – biblioteka su papildomomis mokslinėmis funkcijomis. Jau susidūrėme su šia biblioteka, kai kalbėjome apie tikimybes ir statistiką
Taip pat yra keletas kitų žinomų bibliotekų:
* **[Matplotlib](https://matplotlib.org/)** yra biblioteka, skirta duomenų vizualizacijai ir grafikų darymui
* **[SciPy](https://www.scipy.org/)** yra biblioteka su papildomomis mokslinėmis funkcijomis. Jau susidūrėme su šia biblioteka kalbėdami apie tikimybę ir statistiką
Štai kodo fragmentas, kurį paprastai naudotumėte šių bibliotekų importavimui Python programos pradžioje:
Štai kodo fragmentas, kurį paprastai naudotumėte importuoti šias bibliotekas savo Python programos pradžioje:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
from scipy import ... # jums reikia nurodyti tikslinius požeminius paketus, kurių jums reikia
```
Pandas yra pagrįsta keliais pagrindiniais konceptais.
Pandas pagrindiniai konceptai yra keli.
### Serijos
### Serijos (Series)
**Serijos** yra vertybių seka, panaši į sąrašą ar numpy masyvą. Pagrindinis skirtumas yra tas, kad serijos taip pat turi **indeksą**, ir kai atliekame operacijas su serijomis (pvz., jas sudedame), indeksas yra įtraukiamas į skaičiavimus. Indeksas gali būti toks paprastas kaip eilutės numeris (tai yra numatytasis indeksas, kai serija kuriama iš sąrašo ar masyvo), arba jis gali turėti sudėtingą struktūrą, pvz., datos intervalą.
**Series** yra reikšmių seka, panaši į sąrašą arba numpy matricą. Pagrindinis skirtumas yra tas, kad serija taip pat turi **indeksą**, ir kai operuojame su serijomis (pvz., jas sudedame), indeksas yra atsižvelgiamas. Indeksas gali būti toks paprastas kaip sveikasis eilutės numeris (pagal nutylėjimą naudojamas generuojant seriją iš sąrašo ar matricos), arba jis gali turėti sudėtingesnę struktūrą, pvz., datos intervalą.
> **Pastaba**: Įvadinis Pandas kodas pateiktas pridedamame užrašų knygelėje [`notebook.ipynb`](notebook.ipynb). Čia pateikiame tik keletą pavyzdžių, tačiau tikrai kviečiame peržiūrėti visą užrašų knygelę.
> **Pastaba**: Yra šiek tiek įvadinio Pandas kodo pridėtame sąsiuvinyje [`notebook.ipynb`](notebook.ipynb). Čia mes tik apibendriname keletą pavyzdžių, tačiau jūs galite drąsiai peržiūrėti visą sąsiuvinį.
Pavyzdžiui, norime analizuoti mūsų ledų pardavimo vietos pardavimus. Sukurkime seriją pardavimo skaičių (kiek vienetų parduota kiekvieną dieną) tam tikram laikotarpiui:
Pavyzdžiui, norime analizuoti ledų prekybos rezultatus. Sugeneruokime seriją pardavimų skaičių (vienetų, parduotų kiekvieną dieną) tam tikram laiko tarpui:
```python
start_date = "Jan 1, 2020"
@ -68,7 +68,7 @@ items_sold.plot()
```

Dabar tarkime, kad kiekvieną savaitę organizuojame vakarėlį draugams ir pasiimame papildomus 10 ledų pakuočių vakarėliui. Galime sukurti kitą seriją, indeksuotą savaitėmis, kad tai parodytume:
Tarkime, kad kiekvieną savaitę rengiame draugų vakarėlį ir pasiimame papildomus 10 ledų pakelių. Galime sukurti kitą seriją, indeksuotą pagal savaites, kad tai parodytume:

> **Pastaba**: Mes nenaudojame paprastos sintaksės `total_items+additional_items`. Jei tai darytume, gautume daug `NaN` (*Not a Number*) reikšmių rezultato serijoje. Taip yra todėl, kad kai kuriems indeksų taškams serijoje `additional_items` trūksta reikšmių, o sudėjus `NaN` su bet kuo gaunamas `NaN`. Todėl reikia nurodyti `fill_value` parametrą sudėties metu.
> **Pastaba**, kad nesinaudojame paprasta sintakse `total_items+additional_items`. Jei taip padarytume, gautume daug `NaN` (*Not a Number*) reikšmių galutinėje serijoje. Tai todėl, kad kai kuriems indeksų taškams serijoje `additional_items` trūksta reikšmių, o bet kokio skaičiaus sudėjimas su `NaN` duoda `NaN`. Todėl sudedant reikia nurodyti `fill_value` parametrą.
Su laiko serijomis taip pat galime **perdaryti** seriją su skirtingais laiko intervalais. Pavyzdžiui, tarkime, norime apskaičiuoti vidutinį pardavimų kiekį mėnesiui. Galime naudoti šį kodą:
Su laiko serijomis galime taip pat **persampling** seriją su skirtingais laiko intervalais. Pavyzdžiui, norime apskaičiuoti vidutinius mėnesinius pardavimus. Galime naudoti šį kodą:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```


### Duomenų rėmelis
### DataFrame
Duomenų rėmelis iš esmės yra serijų kolekcija su tuo pačiu indeksu. Galime sujungti kelias serijas į duomenų rėmelį:
DataFrame iš esmės yra kelių serijų rinkinys su tuo pačiu indeksu. Galime sujungti kelias serijas į vieną DataFrame:
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
Čia `.T` reiškia duomenų rėmelio transponavimo operaciją, t. y. eilučių ir stulpelių keitimą, o `rename` operacija leidžia pervadinti stulpelius, kad atitiktų ankstesnį pavyzdį.
Čia `.T` reiškia DataFrame transponavimo operaciją, t. y. eilučių ir stulpelių keitimą vietomis, o `rename` operacija leidžia pervadinti stulpelius, kad atitiktų ankstesnio pavyzdžio išdėstymą.
Štai keletas svarbiausių operacijų, kurias galime atlikti su duomenų rėmeliais:
Štai keletas svarbiausių operacijų, kurias galime atlikti su DataFrame:
**Stulpelių pasirinkimas**. Galime pasirinkti atskirus stulpelius rašydami `df['A']`– ši operacija grąžina seriją. Taip pat galime pasirinkti stulpelių pogrupį į kitą duomenų rėmelį rašydami `df[['B','A']]`– tai grąžina kitą duomenų rėmelį.
**Stulpelių parinkimas**. Galime pasirinkti atskirus stulpelius rašydami `df['A']`- ši operacija grąžina Series. Taip pat galime pasirinkti stulpelių pogrupį į kitą DataFrame rašydami `df[['B','A']]` - tai grąžina kitą DataFrame.
**Filtravimas** tik tam tikrų eilučių pagal kriterijus. Pavyzdžiui, norint palikti tik eilutes, kuriose stulpelis `A` yra didesnis nei 5, galime rašyti `df[df['A']>5]`.
**Filtravimas** pagal tam tikras eilutes pagal sąlygas. Pavyzdžiui, norėdami palikti tik eiles, kur stulpelis `A` yra didesnis nei 5, galime rašyti `df[df['A']>5]`.
> **Pastaba**: Filtravimas veikia taip. Išraiška `df['A']<5` grąžina loginę seriją, kuri nurodo, ar išraiška yra `True` ar `False` kiekvienam originalios serijos `df['A']` elementui. Kai loginė serija naudojama kaip indeksas, ji grąžina eilučių pogrupį duomenų rėmelyje. Todėl negalima naudoti bet kokios Python loginės išraiškos, pvz., rašyti `df[df['A']>5 and df['A']<7]` būtų neteisinga. Vietoj to, turėtumėte naudoti specialią `&` operaciją loginėms serijoms, rašydami`df[(df['A']>5) & (df['A']<7)]` (*skliaustai čia yra svarbūs*).
> **Pastaba**: Filtravimo veikimo principas yra toks. Išraiška `df['A']<5` grąžina loginę seriją (boolean), kuri nurodo, ar išraiška yra `True` ar `False` kiekvienam pradinės serijos `df['A']` elementui. Kai loginė serija naudojama kaip indeksas, ji grąžina eilučių poaibį DataFrame. Todėl nėra galima naudoti bet kokios Python loginės išraiškos, pavyzdžiui, rašymas `df[df['A']>5 and df['A']<7]` būtų klaidingas. Vietoje to, reiktų naudoti specialų `&` veiksmą su loginėmis serijomis, rašant`df[(df['A']>5) & (df['A']<7)]` (*skliaustai čia yra svarbūs*).
**Naujų skaičiuojamų stulpelių kūrimas**. Galime lengvai sukurti naujus skaičiuojamus stulpelius savo duomenų rėmelyje naudodami intuityvią išraišką, pvz.:
**Naujų apskaičiuojamų stulpelių kūrimas**. Lengvai galime sukurti naujus apskaičiuojamus stulpelius savo DataFrame naudodami intuityvias išraiškas kaip šią:
```python
df['DivA'] = df['A']-df['A'].mean()
```
Šis pavyzdys apskaičiuoja A nukrypimą nuo jo vidutinės vertės. Kas iš tikrųjų vyksta čia, yra tai, kad mes apskaičiuojame seriją ir tada priskiriame šią seriją kairiajai pusei, sukurdami kitą stulpelį. Todėl negalime naudoti jokių operacijų, kurios nesuderinamos su serijomis, pvz., žemiau pateiktas kodas yra neteisingas:
Šis pavyzdys apskaičiuoja A nukrypimą nuo jo vidutinės reikšmės. Iš esmės čia mes skaičiuojame seriją ir priskiriame šią seriją kairiajai pusei, sukuriant kitą stulpelį. Todėl negalime naudoti jokių operacijų, kurios nėra suderinamos su serijomis, pavyzdžiui, žemiau pateiktas kodas yra klaidingas:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] <5else"Hi"
df['LenB'] = len(df['B']) # <-Wrong result
# Neteisingas kodas -> df['ADescr'] = "Low" jei df['A'] <5kitaip"Hi"
df['LenB'] = len(df['B']) # <-Neteisinga rezultatas
```
Pastarasis pavyzdys, nors sintaksiškai teisingas, duoda neteisingą rezultatą, nes priskiria serijos `B` ilgį visoms stulpelio reikšmėms, o ne atskirų elementų ilgį, kaip buvo numatyta.
Pastarasis pavyzdys, nors ir sintaksiškai teisingas, duoda klaidingą rezultatą, nes priskiria serijos `B` ilgį visoms reikšmėms stulpelyje, o ne atskirų elementų ilgį, kaip norėjome.
Jei reikia apskaičiuoti sudėtingas išraiškas, galime naudoti `apply` funkciją. Paskutinis pavyzdys gali būti parašytas taip:
Jei reikia apskaičiuoti sudėtingas išraiškas, galime naudoti funkciją `apply`. Paskutinį pavyzdį galima užrašyti taip:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# arba
df['LenB'] = df['B'].apply(len)
```
Po aukščiau pateiktų operacijų turėsime tokį duomenų rėmelį:
Po aukščiau nurodytų operacijų gausime tokį DataFrame:
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
@ -166,22 +166,22 @@ Po aukščiau pateiktų operacijų turėsime tokį duomenų rėmelį:
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
**Eilučių pasirinkimas pagal numerius** gali būti atliekamas naudojant `iloc` konstrukciją. Pavyzdžiui, norint pasirinkti pirmas 5 eilutes iš duomenų rėmelio:
**Eilučių pasirinkimas pagal numerius** atliekamas naudojant konstruktą `iloc`. Pavyzdžiui, norėdami pasirinkti pirmas 5 eilutes iš DataFrame:
```python
df.iloc[:5]
```
**Grupavimas** dažnai naudojamas norint gauti rezultatą, panašų į *pivot lenteles* Excel programoje. Tarkime, norime apskaičiuoti vidutinę stulpelio `A` vertę kiekvienam `LenB` skaičiui. Tada galime grupuoti savo duomenų rėmelį pagal `LenB` ir iškviesti `mean`:
**Grupavimas** dažnai naudojamas gauti rezultatą, panašų į *pivot lenteles* Excel programoje. Tarkime, norime apskaičiuoti stulpelio `A` vidurkį kiekvienam konkrečiam `LenB` skaičiui. Tada galime grupuoti DataFrame pagal `LenB` ir kviesti `mean`:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
Jei reikia apskaičiuoti vidurkį ir elementų skaičių grupėje, tada galime naudoti sudėtingesnę `aggregate` funkciją:
Jei reikia apskaičiuoti vidurkį ir grupės elementų skaičių, galime naudoti sudėtingesnę funkciją `aggregate`:
@ -192,69 +192,72 @@ Tai suteikia mums tokią lentelę:
| 6 | 2 | 6.000000 |
### Duomenų gavimas
Mes jau matėme, kaip lengva sukurti Series ir DataFrames iš Python objektų. Tačiau duomenys dažniausiai būna tekstinio failo arba Excel lentelės formatu. Laimei, Pandas siūlo paprastą būdą įkelti duomenis iš disko. Pavyzdžiui, CSV failo skaitymas yra toks paprastas:
Matėme, kaip lengva sukurti Series ir DataFrames iš Python objektų. Tačiau duomenys dažniausiai pateikiami teksto failo arba Excel lentelės forma. Laimei, Pandas siūlo paprastą būdą įkelti duomenis iš disko. Pavyzdžiui, CSV failo skaitymas yra toks paprastas:
```python
df = pd.read_csv('file.csv')
```
Daugiau duomenų įkėlimo pavyzdžių, įskaitant jų gavimą iš išorinių svetainių, aptarsime „Iššūkių“ skyriuje.
Daugiau duomenų įkėlimo pavyzdžių, įskaitant jų gavimą iš išorinių svetainių, pamatysime skyriuje „Iššūkis“
### Spausdinimas ir Vizualizavimas
### Spausdinimas ir braižymas
Duomenų mokslininkas dažnai turi tyrinėti duomenis, todėl svarbu mokėti juos vizualizuoti. Kai DataFrame yra didelis, dažnai norime tiesiog įsitikinti, kad viską darome teisingai, išspausdindami pirmas kelias eilutes. Tai galima padaryti iškviečiant `df.head()`. Jei tai vykdote iš Jupyter Notebook, jis išspausdins DataFrame gražioje lentelės formoje.
Duomenų mokslininkas dažnai turi tirti duomenis, todėl svarbu sugebėti juos vizualizuoti. Kai DataFrame yra didelis, dažnai norime tiesiog įsitikinti, kad viską darome teisingai, išspausdinę kelias pirmąsias eilutes. Tai galima padaryti iškviečiant `df.head()`. Jei vykdote kodą Jupyter Notebook'e, jis atspausdins DataFrame gražia lentelės forma.
Mes taip pat matėme `plot` funkcijos naudojimą kai kurių stulpelių vizualizavimui. Nors `plot` yra labai naudinga daugeliui užduočių ir palaiko daugybę skirtingų grafiko tipų per `kind=` parametrą, visada galite naudoti „matplotlib“ biblioteką sudėtingesniems grafiniams vaizdams kurti. Duomenų vizualizavimą detaliai aptarsime atskirose kurso pamokose.
Taip pat matėme, kaip naudoti `plot` funkciją kažkurių stulpelių vizualizavimui. Nors `plot` yra labai naudingas daugeliu užduočių ir palaiko daug įvairių grafiko tipus per `kind=` parametrą, visuomet galite naudoti žaliąją `matplotlib` biblioteką, jeigu norite nubraižyti kažką sudėtingesnio. Duomenų vizualizaciją išsamiai aptarsime atskiruose kurso pamokose.
Ši apžvalga apima svarbiausias Pandas koncepcijas, tačiau biblioteka yra labai turtinga, ir nėra ribų, ką galite su ja nuveikti! Dabar pritaikykime šias žinias sprendžiant konkrečią problemą.
Šis apžvalginis turinys apima svarbiausias Pandas sąvokas, tačiau biblioteka yra labai turtinga ir nėra ribų tam, ką su ja galite nuveikti! Dabar pritaikykime šias žinias sprendžiant konkrečią problemą.
## 🚀 Iššūkis 1: COVID plitimo analizė
Pirmoji problema, į kurią sutelksime dėmesį, yra COVID-19 epidemijos plitimo modeliavimas. Tam naudosime duomenis apie užsikrėtusių asmenų skaičių skirtingose šalyse, kuriuos pateikė [Sistemų mokslo ir inžinerijos centras](https://systems.jhu.edu/) (CSSE) iš [Johns Hopkins universiteto](https://jhu.edu/). Duomenų rinkinys yra pasiekiamas [šiame GitHub saugykloje](https://github.com/CSSEGISandData/COVID-19).
Pirmoji problema, kuriai skirsime dėmesį, yra COVID-19 epidemijos plitimo modeliavimas. Tam pasitelksime skirtingų šalių užsikrėtusių asmenų skaičiaus duomenis, kuriuos pateikia [Systems Science and Engineering Center](https://systems.jhu.edu/) (CSSE) prie [Johns Hopkins universiteto](https://jhu.edu/). Duomenų rinkinys yra prieinamas [šiame GitHub repozitoriume](https://github.com/CSSEGISandData/COVID-19).
Kadangi norime parodyti, kaip dirbti su duomenimis, kviečiame atidaryti [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) ir perskaityti jį nuo pradžios iki pabaigos. Taip pat galite vykdyti langelius ir atlikti keletą iššūkių, kuriuos palikome jums pabaigoje.
Kadangi norime parodyti, kaip dirbti su duomenimis, kviečiame atidaryti [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) ir perskaityti jį nuo pradžios iki pabaigos. Taip pat galite vykdyti langelius ir atlikti kai kuriuos iššūkius, kuriuos palikome pabaigoje.
> Jei nežinote, kaip vykdyti kodą Jupyter Notebook, peržiūrėkite [šį straipsnį](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
> Jei nežinote, kaip paleisti kodą Jupyter Notebook'e, žiūrėkite [į šį straipsnį](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## Darbas su nestruktūruotais duomenimis
## Darbas su nestruktūrizuotais duomenimis
Nors duomenys dažnai būna lentelės formatu, kai kuriais atvejais turime dirbti su mažiau struktūruotais duomenimis, pavyzdžiui, tekstu ar vaizdais. Tokiu atveju, norėdami taikyti aukščiau aptartas duomenų apdorojimo technikas, turime kažkaip **išgauti** struktūruotus duomenis. Štai keletas pavyzdžių:
Nors duomenys dažnai būna lentelinės formos, kartais reikia dirbti su mažiau struktūrizuotais duomenimis, pavyzdžiui, tekstu ar vaizdais. Tokiu atveju, taikydami aukščiau matytas duomenų apdorojimo technikas, turime kažkaip **išgauti** struktūrizuotą informaciją. Štai keletas pavyzdžių:
* Raktažodžių ištraukimas iš teksto ir jų pasirodymo dažnumo analizė
* Neuroninių tinklų naudojimas informacijai apie objektus paveikslėlyje išgauti
* Informacijos apie žmonių emocijas vaizdo kameros sraute gavimas
* Raktinių žodžių išgavimas iš teksto ir raktinių žodžių pasikartojimų skaičiaus analizė
* Naudojant neuroninius tinklus išgauti informaciją apie objektus paveikslėlyje
* Gauti informaciją apie žmonių emocijas iš video kameros srauto
## 🚀 Iššūkis 2: COVID mokslinių straipsnių analizė
Šiame iššūkyje tęsime COVID pandemijos temą ir sutelksime dėmesį į mokslinių straipsnių apie šią temą apdorojimą. Yra [CORD-19 duomenų rinkinys](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge), kuriame yra daugiau nei 7000 (rašymo metu) straipsnių apie COVID, pateikiamų su metaduomenimis ir santraukomis (apie pusę jų taip pat pateikiamas visas tekstas).
Šiame iššūkyje tęsime COVID pandemijos temą ir fokusuosimės į mokslinių straipsnių apdorojimą šia tema. Yra [CORD-19 duomenų rinkinys](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) su daugiau nei 7000 (rašymo metu) COVID straipsnių, prieinamų su metaduomenimis ir santraukomis (ir apie pusės jų yra pateiktas ir visas tekstas).
Pilnas šio duomenų rinkinio analizės pavyzdys naudojant [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) kognityvinę paslaugą aprašytas [šiame tinklaraščio įraše](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Aptarsime supaprastintą šios analizės versiją.
Pilnas šio duomenų rinkinio analizės pavyzdys naudojant [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) pažintinę paslaugą yra aprašytas [šiame tinklaraščio įraše](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Aptarsime supaprastintą šios analizės versiją.
> **NOTE**: Mes nepateikiame duomenų rinkinio kopijos kaip šios saugyklos dalies. Pirmiausia gali tekti atsisiųsti [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) failą iš [šio Kaggle duomenų rinkinio](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Gali reikėti registracijos Kaggle. Taip pat galite atsisiųsti duomenų rinkinį be registracijos [iš čia](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), tačiau jis apims visus pilnus tekstus be metaduomenų failo.
> **PASTABA**: Šiame repozitoriume nepateikiame duomenų rinkinio kopijos. Pirmiausia jums gali reikėti atsisiųsti [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) failą iš [šio Kaggle duomenų rinkinio](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Gali reikėti registracijos Kaggle. Taip pat galite atsisiųsti duomenų rinkinį neregistruodamiesi [iš čia](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), bet jis apims ne tik metaduomenų failą, bet ir visus pilnus tekstus.
Atidarykite [`notebook-papers.ipynb`](notebook-papers.ipynb) ir perskaitykite jį nuo pradžios iki pabaigos. Taip pat galite vykdyti langelius ir atlikti keletą iššūkių, kuriuos palikome jums pabaigoje.
Atidarykite [`notebook-papers.ipynb`](notebook-papers.ipynb) ir perskaitykite jį nuo pradžios iki pabaigos. Taip pat galite vykdyti langelius ir atlikti kai kuriuos iššūkius, kuriuos palikome pabaigoje.

## Vaizdų duomenų apdorojimas
## Vaizdinių duomenų apdorojimas
Pastaruoju metu buvo sukurti labai galingi AI modeliai, leidžiantys suprasti vaizdus. Yra daug užduočių, kurias galima išspręsti naudojant iš anksto apmokytus neuroninius tinklus arba debesų paslaugas. Keletas pavyzdžių:
Pastaruoju metu sukurti labai galingi AI modeliai, leidžiantys mums suprasti vaizdus. Yra daug užduočių, kurias galima spręsti naudojant iš anksto apmokytus neuroninius tinklus ar debesies paslaugas. Keletas pavyzdžių:
* **Vaizdų klasifikavimas**, kuris gali padėti suskirstyti vaizdą į vieną iš iš anksto apibrėžtų klasių. Galite lengvai apmokyti savo vaizdų klasifikatorius naudodami tokias paslaugas kaip [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Objektų aptikimas**, skirtas aptikti skirtingus objektus vaizde. Tokios paslaugos kaip [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) gali aptikti daugybę bendrų objektų, o jūs galite apmokyti [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) modelį aptikti tam tikrus specifinius objektus.
* **Veidų aptikimas**, įskaitant amžiaus, lyties ir emocijų aptikimą. Tai galima atlikti naudojant [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
* **Vaizdų klasifikavimas**, kuris padeda priskirti paveikslėlį vienai iš iš anksto apibrėžtų klasių. Galite lengvai apmokyti savo vaizdų klasifikatorius naudodami tokias paslaugas kaip [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Objektų aptikimas** vaizde. Toks paslaugos kaip [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) gali aptikti keletą įprastų objektų, o jūs galite apmokyti [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) modelį aptikti konkretų jus dominančių objektų rinkinį.
* **Veido aptikimas**, įskaitant amžiaus, lyties ir emocijų nustatymą. Tai galima atlikti per [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
Visos šios debesų paslaugos gali būti iškviečiamos naudojant [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), todėl jas lengva įtraukti į jūsų duomenų tyrinėjimo darbo eigą.
Visas šias debesies paslaugas galite iškviesti naudodami [Python SDK](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), todėl jas lengva įtraukti į savo duomenų tyrinėjimo darbo eigą.
Štai keletas pavyzdžių, kaip tyrinėti duomenis iš vaizdų šaltinių:
* Tinklaraščio įraše [Kaip mokytis duomenų mokslo be programavimo](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) mes tyrinėjame Instagram nuotraukas, bandydami suprasti, kas skatina žmones daugiau „patinka“ nuotraukai. Pirmiausia iš paveikslėlių išgauname kuo daugiau informacijos naudodami [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), o tada naudojame [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) interpretuojamam modeliui kurti.
* [Veidų tyrimų dirbtuvėse](https://github.com/CloudAdvocacy/FaceStudies) mes naudojame [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum), kad išgautume emocijas žmonių nuotraukose iš renginių, bandydami suprasti, kas daro žmones laimingus.
Štai keletas pavyzdžių, kaip analizuoti duomenis iš vaizdinių duomenų šaltinių:
* Tinklaraščio įraše [Kaip mokytis duomenų mokslo neprogramuojant](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) nagrinėjame Instagram nuotraukas, bandoma suprasti, kas priverčia žmones daugiau „pamėgti“ nuotrauką. Pirmiausia iš paveikslėlių ištraukiame kiek įmanoma daugiau informacijos naudodami [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), o tada naudojame [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) kurti interpretuojamą modelį.
* „Facial Studies Workshop“ projekte [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) naudojame [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum), kad ištrauktume žmonių emocijas fotografijose iš renginių, siekdami suprasti, kas daro žmones laimingus.
## Išvada
## Išvados
Nesvarbu, ar jau turite struktūruotus, ar nestruktūruotus duomenis, naudodami Python galite atlikti visus su duomenų apdorojimu ir supratimu susijusius veiksmus. Tai turbūt lankstiausias duomenų apdorojimo būdas, todėl dauguma duomenų mokslininkų naudoja Python kaip pagrindinį įrankį. Mokytis Python išsamiai yra gera idėja, jei rimtai žiūrite į savo duomenų mokslo kelionę!
Nesvarbu, ar jau turite struktūrizuotų, ar nestruktūrizuotų duomenų, naudodami Python galite atlikti visus su duomenų apdorojimu ir supratimu susijusius veiksmus. Tai tikriausiai lankstčiausias duomenų apdorojimo būdas, todėl dauguma duomenų mokslininkų naudoja Python kaip pagrindinį įrankį. Gilus Python mokymasis tikriausiai yra gera idėja, jei rimtai ketinate savo duomenų mokslo kelionę!
@ -262,22 +265,24 @@ Nesvarbu, ar jau turite struktūruotus, ar nestruktūruotus duomenis, naudodami
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
**Internetiniai ištekliai**
* Oficialus [10 minučių Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) vadovas
* [Dokumentacija apie Pandas vizualizavimą](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
* Oficialus [10 minučių iki Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) vadovas
* [Dokumentacija apie Pandas vizualizaciją](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Python mokymasis**
* [Mokykitės Python smagiai su Turtle Graphics ir Fractals](https://github.com/shwars/pycourse)
* [Pradėkite savo pirmuosius žingsnius su Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) mokymosi kelias [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Mokykitės Python smagiai su Turtle grafika ir fraktalais](https://github.com/shwars/pycourse)
* [Pirmieji žingsniai su Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) mokymosi kelias [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## Užduotis
[Atlikite detalesnį duomenų tyrimą aukščiau pateiktiems iššūkiams](assignment.md)
[Atlikite išsamesnę duomenų studiją aukščiau pateiktiems iššūkiams](assignment.md)
## Kreditas
## Autoriai
Ši pamoka sukurta su ♥️ [Dmitry Soshnikov](http://soshnikov.com)
Šią pamoką su ♥️ parašė [Dmitry Soshnikov](http://soshnikov.com)
---
**Atsakomybės apribojimas**:
Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą [Co-op Translator](https://github.com/Azure/co-op-translator). Nors siekiame tikslumo, atkreipiame dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama naudotis profesionalių vertėjų paslaugomis. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus aiškinimus, atsiradusius naudojantis šiuo vertimu.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Atsakomybės apribojimas**:
Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą [Co-op Translator](https://github.com/Azure/co-op-translator). Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba laikomas autoritetingu šaltiniu. Svarbiai informacijai rekomenduojama naudoti profesionalų žmogiškąjį vertimą. Mes neatsakome už jokius nesusipratimus ar neteisingą interpretaciją, kilusią naudojantis šiuo vertimu.
* [Learn Python in a Fun Way with Turtle Graphics and Fractals](https://github.com/shwars/pycourse) - GitHub ပေါ်တွင်ရှိသော Python programming အရှုံးအစလေးတို့ကို လျင်မြန်စွာ ရှင်းပြတဲ့ သင်ခန်းစာ
* [Take your First Steps with Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) - Microsoft Learn တွင် ရရှိနိုင်သော သင်ခန်းစာလမ်းကြောင်း
Хоча бази даних пропонують дуже ефективні способи зберігання даних і запитів до них за допомогою мов запитів, найгнучкішим способом обробки даних є написання власної програми для їх маніпулювання. У багатьох випадках виконання запиту до бази даних буде більш ефективним. Однак у деяких випадках, коли потрібна більш складна обробка даних, це не можна легко зробити за допомогою SQL.
Обробка даних може бути запрограмована на будь-якій мові програмування, але є певні мови, які є більш високорівневими для роботи з даними. Зазвичай, фахівці з даних віддають перевагу одній із наступних мов:
Хоча бази даних пропонують дуже ефективні способи зберігання даних і запитів до них за допомогою мов запитів, найгнучкішим способом обробки даних є написання власної програми для маніпуляції даними. У багатьох випадках виконання запиту до бази даних було б ефективнішим способом. Однак в деяких випадках, коли потрібна складніша обробка даних, це не завжди можна легко зробити за допомогою SQL.
Обробку даних можна програмувати на будь-якій мові програмування, але існують певні мови, які є вищого рівня щодо роботи з даними. Дані науковці зазвичай віддають перевагу одній із наступних мов:
* **[Python](https://www.python.org/)** — універсальна мова програмування, яка часто вважається одним із найкращих варіантів для початківців через її простоту. Python має багато додаткових бібліотек, які можуть допомогти вирішити багато практичних задач, таких як витяг даних із ZIP-архіву або перетворення зображення в градаціїсірого. Окрім науки про дані, Python також часто використовується для веб-розробки.
* **[R](https://www.r-project.org/)** — традиційний інструментарій, розроблений з урахуванням статистичної обробки даних. Він також містить великий репозиторій бібліотек (CRAN), що робить його хорошим вибором для обробки даних. Однак R не є універсальною мовою програмування і рідко використовується за межами сфери науки про дані.
* **[Julia](https://julialang.org/)** — ще одна мова, розроблена спеціально для науки про дані. Вона призначена для забезпечення кращої продуктивності, ніж Python, що робить її чудовим інструментом для наукових експериментів.
* **[Python](https://www.python.org/)** — мова програмування загального призначення, яку часто вважають одним із найкращих варіантів для початківців через її простоту. Python має багато додаткових бібліотек, які можуть допомогти розв’язати багато практичних задач, таких як вилучення даних із ZIP архіву або конвертація зображення в відтінкисірого. Окрім науки про дані, Python часто використовується для веб-розробки.
* **[R](https://www.r-project.org/)** — традиційний набір інструментів, розроблений з урахуванням статистичної обробки даних. Він також містить велику бібліотеку (CRAN), що робить його гарним вибором для обробки даних. Проте R не є мовою програмування загального призначення і рідко використовується поза сферою науки про дані.
* **[Julia](https://julialang.org/)** — ще одна мова, розроблена спеціально для науки про дані. Вона має на меті забезпечити вищу продуктивність, ніж Python, що робить її чудовим інструментом для наукових експериментів.
У цьому уроці ми зосередимося на використанні Python для простої обробки даних. Ми припускаємо базове знайомство з мовою. Якщо ви хочете глибше ознайомитися з Python, можете звернутися до одного з наступних ресурсів:
У цьому уроці ми зосередимося на використанні Python для простої обробки даних. Ми припускаємо базове знайомство з мовою. Якщо ви хочете глибше ознайомитися з Python, ви можете звернутися до одного з наступних ресурсів:
* [Вивчайте Python весело за допомогою Turtle Graphics та фракталів](https://github.com/shwars/pycourse) — швидкий вступний курс програмування на Python на GitHub
* [Зробіть перші кроки з Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Навчальний шлях на [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Вивчайте Python весело з Turtle Graphics та Фракталами](https://github.com/shwars/pycourse) - швидкий вступний курс програмування на Python на GitHub
* [Зробіть перші кроки з Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) навчальний шлях на [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
Дані можуть бути представлені у багатьох формах. У цьому уроці ми розглянемо три форми даних — **табличні дані**, **текст** та**зображення**.
Дані можуть мати багато форм. У цьому уроці ми розглянемо три форми даних — **табличні дані**, **текст** і**зображення**.
Ми зосередимося на кількох прикладах обробки даних, замість того, щоб давати вам повний огляд усіх пов’язаних бібліотек. Це дозволить вам зрозуміти основну ідею того, що можливо, і залишить вас із розумінням того, де знайти рішення ваших проблем, коли вони виникнуть.
Ми зосередимося на кількох прикладах обробки даних, замість того, щоб давати повний огляд усіх пов’язаних бібліотек. Це дозволить вам отримати основну ідею про те, що можливо зробити, і залишить розуміння, де шукати рішення ваших задач, коли вони знадобляться.
> **Найкорисніша порада**. Коли вам потрібно виконати певну операцію з даними, яку ви не знаєте, як зробити, спробуйте пошукати її в інтернеті. [Stackoverflow](https://stackoverflow.com/) зазвичай містить багато корисних прикладів коду на Python для багатьох типових задач.
> **Найкорисніша порада**. Коли вам потрібно виконати певну операцію з даними, яку ви не знаєте, як зробити, спробуйте пошукати це в інтернеті. [Stackoverflow](https://stackoverflow.com/) зазвичай містить багато корисних прикладів коду на Python для багатьох типових задач.
## [Тест перед лекцією](https://ff-quizzes.netlify.app/en/ds/quiz/12)
Ви вже зустрічалися з табличними даними, коли ми говорили про реляційні бази даних. Коли у вас є багато даних, і вони містяться в багатьох різних пов’язаних таблицях, безумовно, має сенс використовувати SQL для роботи з ними. Однак є багато випадків, коли у нас є таблиця даних, і нам потрібно отримати певне **розуміння** або**інсайти** про ці дані, такі як розподіл, кореляція між значеннями тощо. У науці про дані є багато випадків, коли нам потрібно виконати певні трансформації вихідних даних, а потім візуалізувати їх. Обидва ці кроки можна легко виконати за допомогою Python.
Ви вже стикалися з табличними даними, коли ми говорили про реляційні бази даних. Коли у вас багато даних, і вони розміщені в багатьох різних зв’язаних таблицях, безумовно має сенс використовувати SQL для роботи з ними. Проте існує багато випадків, коли у нас є таблиця з даними, і нам потрібно отримати певне **розуміння** або**інсайти** про ці дані, такі як розподіл, кореляція між значеннями тощо. У науці про дані часто потрібно виконувати деякі трансформації оригінальних даних, а потім візуалізувати їх. Обидва ці кроки легко здійснити за допомогою Python.
Є дві найкорисніші бібліотеки в Python, які можуть допомогти вам працювати з табличними даними:
* **[Pandas](https://pandas.pydata.org/)** дозволяє маніпулювати так званими **DataFrame**, які аналогічні реляційним таблицям. Ви можете мати названі стовпці та виконувати різні операції над рядками, стовпцями та DataFrame загалом.
* **[Numpy](https://numpy.org/)** — це бібліотека для роботи з **тензорами**, тобто багатовимірними **масивами**. Масив має значення одного типу, і він простіший, ніж DataFrame, але пропонує більше математичних операцій і створює менше накладних витрат.
Існує дві найкорисніші бібліотеки в Python, які можуть допомогти вам працювати з табличними даними:
* **[Pandas](https://pandas.pydata.org/)** дозволяє вам маніпулювати так званими **DataFrame**, які є аналогом реляційних таблиць. Ви можете мати іменовані стовпці та виконувати різні операції з рядками, стовпцями і DataFrame загалом.
* **[Numpy](https://numpy.org/)** — це бібліотека для роботи з **тензорами**, тобто багатовимірними **масивами**. Масив має значення одного типу, і він простіший за DataFrame, але пропонує більше математичних операцій і створює менші накладні витрати.
Є також кілька інших бібліотек, про які вам варто знати:
* **[Matplotlib](https://matplotlib.org/)** — бібліотека, яка використовується для візуалізації даних і побудови графіків
* **[SciPy](https://www.scipy.org/)** — бібліотека з деякими додатковими науковими функціями. Ми вже зустрічалися з цією бібліотекою, коли говорили про ймовірність і статистику
Також існує кілька інших бібліотек, про які слід знати:
* **[Matplotlib](https://matplotlib.org/)** — бібліотека для візуалізації даних та побудови графіків
* **[SciPy](https://www.scipy.org/)** — бібліотека з додатковими науковими функціями. Ми вже стикалися з нею, коли говорили про ймовірність та статистику
Ось шматок коду, який ви зазвичай використовуєте для імпорту цих бібліотек на початку вашої програми на Python:
Ось фрагмент коду, який ви зазвичай використовуватимете для імпорту цих бібліотек на початку вашої Python-програми:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
from scipy import ... # вам потрібно вказати точні підпакети, які вам потрібні
```
Pandas зосереджена навколо кількох базових концепцій.
Pandas базується на кількох основних концепціях.
### Series
### Series
**Series** — це послідовність значень, схожа на список або масив numpy. Основна відмінність полягає в тому, що Series також має **індекс**, і коли ми працюємо з Series (наприклад, додаємо їх), індекс враховується. Індекс може бути таким простим, як номер рядка (це індекс, який використовується за замовчуванням при створенні Series зі списку або масиву), або він може мати складну структуру, наприклад, інтервал дат.
**Series** — це послідовність значень, схожа на список або масив numpy. Основна відмінність полягає в тому, що у Series також є **індекс**, і коли ми виконуємо операції над Series (наприклад, додаємо), індекс враховується. Індекс може бути таким простим, як числовий номер рядка (це індекс, який використовується за замовчуванням при створенні Series із списку або масиву), або він може мати складну структуру, таку як інтервал дат.
> **Примітка**: У супровідному ноутбуці [`notebook.ipynb`](notebook.ipynb) є деякий вступний код Pandas. Ми лише окреслюємо деякі приклади тут, і ви, безумовно, можете переглянути повний ноутбук.
> **Примітка**: Існує деякий вступний код Pandas у супровідному ноутбуці [`notebook.ipynb`](notebook.ipynb). Тут ми лише наводимо деякі приклади, і вам обов’язково варто ознайомитися з повним ноутбуком.
Розглянемо приклад: ми хочемо проаналізувати продажі нашого магазину морозива. Давайте створимо Series чисел продажів (кількість проданих одиниць щодня) за певний період часу:
Розглянемо приклад: ми хочемо проаналізувати продажі нашої крамниці морозива. Згенеруємо серію чисел продажу (кількість проданих штук кожного дня) за певний період часу:
Тепер припустимо, що щотижня ми організовуємо вечірку для друзів і беремо додатково 10 упаковок морозива для вечірки. Ми можемо створити ще один Series, індексований за тижнями, щоб продемонструвати це:
Тепер припустимо, що кожного тижня ми організовуємо вечірку для друзів і беремо додатково 10 упаковок морозива для вечірки. Ми можемо створити іншу серію, індексовану за тижнями, щоб це показати:
> **Примітка**: Ми не використовуємо простий синтаксис `total_items+additional_items`. Якби ми це зробили, ми отримали б багато значень `NaN` (*Not a Number*) у результаті. Це тому, що для деяких точок індексу в Series `additional_items` відсутні значення, і додавання `NaN` до чого-небудь призводить до`NaN`. Тому нам потрібно вказати параметр `fill_value` під час додавання.
> **Зауважте**, що ми не просто використовуємо синтаксис `total_items+additional_items`. Якби так було, ми отримали б багато значень `NaN` (*Not a Number*) у результаті. Це тому, що в серії `additional_items` відсутні деякі значення для деяких індексів, і додавання `NaN` до будь-чого дає`NaN`. Тому нам потрібно вказати параметр `fill_value` під час додавання.
З часовими рядами ми також можемо **перевибірковувати** Series з різними інтервалами часу. Наприклад, припустимо, ми хочемо обчислити середній обсяг продажів щомісяця. Ми можемо використати наступний код:
За допомогою часових рядів ми також можемо **перепробовувати** серію з різними часовими інтервалами. Наприклад, припустимо, що ми хочемо порахувати середній обсяг продажів щомісяця. Ми можемо використати такий код:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
@ -88,23 +90,23 @@ ax = monthly.plot(kind='bar')
### DataFrame
DataFrame — це, по суті, колекція Series з однаковим індексом. Ми можемо об’єднати кілька Series разому DataFrame:
DataFrame по суті є колекцією серій з однаковим індексом. Ми можемо поєднати кілька серійу DataFrame:
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
Тут `.T` означає операцію транспонування DataFrame, тобто зміну рядків і стовпців, а операція `rename` дозволяє перейменувати стовпці, щоб відповідати попередньому прикладу.
Тут `.T` означає операцію транспонування DataFrame, тобто заміну рядків і стовпців місцями, а операція `rename` дозволяє перейменувати стовпці, щоб вони відповідали попередньому прикладу.
Ось кілька найважливіших операцій, які ми можемо виконувати над DataFrame:
**Вибір стовпців**. Ми можемо вибрати окремі стовпці, написавши `df['A']` — ця операція повертає Series. Ми також можемо вибрати підмножину стовпців у інший DataFrame, написавши `df[['B','A']]` — це повертає інший DataFrame.
**Вибір стовпців**. Ми можемо вибирати окремі стовпці, написавши `df['A']` — ця операція повертає Series. Також можна вибрати підмножину стовпців у інший DataFrame, написавши `df[['B','A']]` — це поверне інший DataFrame.
**Фільтрування** лише певних рядків за критеріями. Наприклад, щоб залишити лише рядки зі стовпцем `A`, більшим за 5, ми можемо написати `df[df['A']>5]`.
**Фільтрація** лише певних рядків за певними критеріями. Наприклад, щоб залишити лише рядки зі стовпцем `A`, більшим за 5, можна написати `df[df['A']>5]`.
> **Примітка**: Як працює фільтрування. Вираз `df['A']<5` повертає булевий Series, який вказує, чи є вираз `True` чи `False` для кожного елемента вихідного Series `df['A']`. Коли булевий Series використовується як індекс, він повертає підмножину рядків у DataFrame. Таким чином, неможливо використовувати довільний булевий вираз Python, наприклад, написання `df[df['A']>5 and df['A']<7]` буде неправильним. Натомість слід використовувати спеціальну операцію `&` для булевих Series, написавши `df[(df['A']>5) & (df['A']<7)]` (*дужки тут важливі*).
> **Примітка**: Як працює фільтрація, таке: вираз `df['A']<5` повертає булеву серію, яка вказує, чи є вираз `True`або`False` для кожного елемента оригінальної серії `df['A']`. Коли булева серія використовується як індекс, вона повертає підмножину рядків у DataFrame. Тому не можна використовувати довільний булевий вираз Python, наприклад, написати `df[df['A']>5 and df['A']<7]` було б помилкою. Замість цього слід використовувати спеціальну операцію `&` на булевих серіях, написавши `df[(df['A']>5) & (df['A']<7)]` (*дужки тут важливі*).
**Створення нових обчислюваних стовпців**. Ми можемо легко створювати нові обчислювані стовпці для нашого DataFrame, використовуючи інтуїтивний вираз, як цей:
**Створення нових обчислюваних стовпців**. Ми можемо легко створити нові обчислювані стовпці в нашому DataFrame, використовуючи інтуїтивно зрозумілі вирази такого типу:
```python
df['DivA'] = df['A']-df['A'].mean()
```
Цей приклад обчислює відхилення A від його середнього значення. Насправді тут ми обчислюємо Series, а потім призначаємо цей Series лівій стороні, створюючи інший стовпець. Таким чином, ми не можемо використовувати жодні операції, які не сумісні з Series, наприклад, наведений нижче код є неправильним:
Цей приклад обчислює відхилення A від його середнього значення. Насправді тут ми обчислюємо серію, а потім присвоюємо цю серію лівій частині, створюючи інший стовпець. Отже, ми не можемо використовувати операції, несумісні з серіями, наприклад, код нижче є неправильним:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] <5else"Hi"
df['LenB'] = len(df['B']) # <-Wrongresult
# Неправильний код -> df['ADescr'] = "Low" if df['A'] <5else"Hi"
Останній приклад, хоча синтаксично правильний, дає нам неправильний результат, оскільки він призначає довжину Series `B` всім значенням у стовпці, а не довжину окремих елементів, як ми мали намір.
Останній приклад, хоча і синтаксично коректний, дає неправильний результат, оскільки присвоює довжину серії `B` всім значенням у стовпці, а не довжину кожного окремого елемента, як ми хотіли.
Якщо нам потрібно обчислити складні вирази, як цей, ми можемо використовувати функцію `apply`. Останній приклад можна записати так:
Якщо треба обчислити складні вирази такого типу, можна використовувати функцію `apply`. Останній приклад можна записати так:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# або
df['LenB'] = df['B'].apply(len)
```
Після виконання наведених вище операцій ми отримаємо наступний DataFrame:
Після вищезазначених операцій ми отримаємо наступний DataFrame:
**Вибір рядків за номерами** можна виконати за допомогою конструкції `iloc`. Наприклад, щоб вибрати перші 5 рядків із DataFrame:
**Вибір рядків за номером** можна здійснити за допомогою конструкції `iloc`. Наприклад, щоб вибрати перші 5 рядків із DataFrame:
```python
df.iloc[:5]
```
**Групування** часто використовується для отримання результату, схожого на *зведені таблиці* в Excel. Припустимо, ми хочемо обчислити середнє значення стовпця `A` для кожного заданого числа`LenB`. Тоді ми можемо згрупувати наш DataFrame за `LenB`і викликати `mean`:
**Групування** часто використовується для отримання результату, подібного до *зведених таблиць* в Excel. Припустимо, ми хочемо порахувати середнє значення стовпця `A` для кожного значення`LenB`. Тоді ми можемо згрупувати DataFrame за `LenB`і викликати `mean`:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
Якщо нам потрібно обчислити середнє значення та кількість елементів у групі, тоді ми можемо використовувати більш складну функцію `aggregate`:
Якщо потрібно порахувати середнє та кількість елементів у групі, то можна використати більш складну функцію `aggregate`:
Ми бачили, як легко створювати Series та DataFrames з об'єктів Python. Однак, дані зазвичай надходять у вигляді текстового файлу або таблиці Excel. На щастя, Pandas пропонує нам простий спосіб завантаження даних з диска. Наприклад, читання файлу CSV таке ж просте, як це:
Ми побачили, як легко створювати Series та DataFrame з об’єктів Python. Однак дані зазвичай надходять у вигляді текстового файлу або Excel-таблиці. На щастя, Pandas пропонує простий спосіб завантаження даних з диска. Наприклад, читання CSV-файлу таке саме просте:
```python
df = pd.read_csv('file.csv')
```
Ми побачимо більше прикладів завантаження даних, включаючи отримання їх із зовнішніх веб-сайтів, у розділі "Challenge".
Ми побачимо більше прикладів завантаження даних, включаючи отримання їх з зовнішніх вебсайтів, у розділі "Виклик"
### Виведення та Візуалізація
### Виведення на друк і візуалізація
Дослідник даних часто має досліджувати дані, тому важливо мати можливість їх візуалізувати. Коли DataFrame великий, часто ми хочемо просто переконатися, що все робимо правильно, виводячи перші кілька рядків. Це можна зробити, викликавши `df.head()`. Якщо ви запускаєте це з Jupyter Notebook, він виведе DataFrame у гарній табличній формі.
Фахівцю з даних часто доводиться досліджувати дані, тому дуже важливо мати змогу їх візуалізувати. Коли DataFrame великий, часто хочеться просто переконатися, що ми все робимо правильно, вивівши кілька перших рядків. Це можна зробити викликом `df.head()`. Якщо ви запускаєте це в Jupyter Notebook, воно виведе DataFrame у гарному табличному вигляді.
Ми також бачили використання функції `plot` для візуалізації деяких колонок. Хоча `plot` дуже корисний для багатьох завдань і підтримує багато різних типів графіків через параметр `kind=`, ви завжди можете використовувати бібліотеку `matplotlib` для побудови чогось більш складного. Ми детально розглянемо візуалізацію даних у окремих уроках курсу.
Ми також бачили використання функції `plot` для візуалізації деяких стовпців. Хоча `plot` дуже корисний для багатьох завдань і підтримує багато різних типів графіків через параметр `kind=`, ви завжди можете використовувати базову бібліотеку `matplotlib` для побудови чогось складнішого. Ми докладно розглянемо візуалізацію даних у окремих уроках курсу.
Цей огляд охоплює найважливіші концепції Pandas, однак бібліотека дуже багата, і немає меж тому, що ви можете з нею зробити! Тепер застосуємо ці знання для вирішення конкретної проблеми.
Цей огляд охоплює найважливіші концепції Pandas, однак бібліотека дуже багата, і немає меж тому, що ви можете з нею робити! Давайте тепер застосуємо ці знання для розв’язання конкретної задачі.
## 🚀 Challenge 1: Аналіз поширення COVID
## 🚀 Виклик 1: Аналіз розповсюдження COVID
Перша проблема, на якій ми зосередимося, — це моделювання епідемічного поширення COVID-19. Для цього ми використаємо дані про кількість інфікованих осібу різних країнах, надані [Центром системної науки та інженерії](https://systems.jhu.edu/) (CSSE) при [Університеті Джонса Гопкінса](https://jhu.edu/). Набір даних доступний у [цьому репозиторії GitHub](https://github.com/CSSEGISandData/COVID-19).
Першою задачею, на якій ми зосередимось, є моделювання поширення епідемії COVID-19. Для цього ми використаємо дані про кількість інфікованих у різних країнах, надані [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) при [Johns Hopkins University](https://jhu.edu/). Набір даних доступний у [цьому репозиторії GitHub](https://github.com/CSSEGISandData/COVID-19).
Оскільки ми хочемо продемонструвати, як працювати з даними, ми запрошуємо вас відкрити [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) і прочитати його від початку до кінця. Ви також можете виконувати комірки та виконувати завдання, які ми залишили для вас наприкінці.
Оскільки ми хочемо показати, як працювати з даними, запрошуємо вас відкрити [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) і прочитати його від початку до кінця. Ви також можете виконувати комірки та розв’язувати деякі завдання, які ми залишили на кінець.
> Якщо ви не знаєте, як запускати код у Jupyter Notebook, перегляньте [цю статтю](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
> Якщо ви не знаєте, як запускати код у Jupyter Notebook, ознайомтеся з [цією статтею](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## Робота з неструктурованими даними
Хоча дані дуже часто надходять у табличній формі, у деяких випадках нам потрібно працювати з менш структурованими даними, наприклад, текстом або зображеннями. У цьому випадку, щоб застосувати техніки обробки даних, які ми бачили вище, нам потрібно якось **витягти** структуровані дані. Ось кілька прикладів:
Хоча дані дуже часто мають табличну форму, у деяких випадках потрібно працювати з менш структурованими даними, наприклад, текстами або зображеннями. У такому випадку, щоб застосувати техніки обробки даних, які ми бачили вище, нам потрібно якимось чином**витягти** структуровані дані. Ось кілька прикладів:
* Витяг ключових слів із тексту та аналіз частоти їх появи
* Використання нейронних мереж для отримання інформації про об'єкти на зображенні
* Отримання інформації про емоції людей на відеокамері
* Витягування ключових слів з тексту і підрахунок, як часто вони зустрічаються
* Використання нейронних мереж для витягування інформації про об’єкти на зображенні
* Отримання інформації про емоції людей на відеопотоці з камери
## 🚀 Challenge 2: Аналіз наукових статей про COVID
## 🚀 Виклик 2: Аналіз наукових публікацій про COVID
У цьому завданні ми продовжимо тему пандемії COVID і зосередимося на обробці наукових статей на цю тему. Існує [CORD-19 Dataset](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) з понад 7000 (на момент написання) статей про COVID, доступних із метаданими та анотаціями (а для приблизно половини з них також доступний повний текст).
У цьому виклику ми продовжимо тему пандемії COVID і зосередимось на обробці наукових праць з цього питання. Існує [CORD-19 Dataset](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) з понад 7000 (на момент написання) наукових робіт про COVID, доступних разом з метаданими та анотаціями (і приблизно для половини з них також наданий повний текст).
Повний приклад аналізу цього набору даних за допомогою когнітивного сервісу [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) описаний [у цьому блозі](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Ми обговоримо спрощену версію цього аналізу.
Повний приклад аналізу цього набору даних з використанням когнітивної служби [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) описано [у цій публікації в блозі](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Ми обговоримо спрощену версію цього аналізу.
> **NOTE**: Ми не надаємо копію набору даних у цьому репозиторії. Вам може знадобитися спочатку завантажити файл [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) з [цього набору даних на Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Може знадобитися реєстрація на Kaggle. Ви також можете завантажити набір даних без реєстрації [звідси](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), але він включатиме всі повні тексти на додаток до файлу метаданих.
> **ПРИМІТКА**: Ми не надаємо копію набору даних як частину цього репозиторію. Спочатку вам може знадобитись завантажити файл [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) з [цього набору даних на Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Можлива реєстрація на Kaggle. Ви також можете завантажити набір даних без реєстрації [тут](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), але він включатиме всі повні тексти окрім метаданих.
Відкрийте [`notebook-papers.ipynb`](notebook-papers.ipynb) і прочитайте його від початку до кінця. Ви також можете виконувати комірки та виконувати завдання, які ми залишили для вас наприкінці.
Відкрийте [`notebook-papers.ipynb`](notebook-papers.ipynb) і прочитайте його від початку до кінця. Ви також можете виконувати комірки та розв’язувати деякі завдання, які ми залишили на кінець.

## Обробка даних зображень
## Обробка зображень
Останнім часом були розроблені дуже потужні AI-моделі, які дозволяють нам розуміти зображення. Існує багато завдань, які можна вирішити за допомогою попередньо навчених нейронних мереж або хмарних сервісів. Деякі приклади включають:
Нещодавно було розроблено дуже потужні моделі ШІ, які дозволяють нам розуміти зображення. Існує багато завдань, які можна розв’язувати за допомогою попередньо навчених нейронних мереж або хмарних сервісів. Ось кілька прикладів:
* **Класифікація зображень**, яка може допомогти вам категоризувати зображення в одну з попередньо визначених категорій. Ви можете легко навчити власні класифікатори зображень, використовуючи сервіси, такі як [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Виявлення об'єктів** для визначення різних об'єктів на зображенні. Сервіси, такі як [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), можуть виявляти низку поширених об'єктів, а ви можете навчити модель [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) для виявлення конкретних об'єктів, які вас цікавлять.
* **Виявлення обличчя**, включаючи визначення віку, статі та емоцій. Це можна зробити за допомогою [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
* **Класифікація зображень**, яка допомагає класифікувати зображення до однієї з заздалегідь визначених категорій. Ви можете легко навчити власні класифікатори зображень за допомогою сервісів, таких як [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Виявлення об’єктів** для розпізнавання різних об’єктів на зображенні. Сервіси на кшталт [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) можуть розпізнавати низку поширених об’єктів, і ви можете навчити модель [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) для виявлення деяких конкретних цікавих об’єктів.
* **Розпізнавання облич**, включно з визначенням віку, статі та емоцій. Це можна зробити через [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
Усі ці хмарні сервіси можна викликати за допомогою [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), і таким чином їх можна легко інтегрувати у ваш робочий процес дослідження даних.
Всі ці хмарні сервіси можна викликати за допомогою [Python SDK](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), і таким чином вони легко інтегруються у ваш робочий процес аналізу даних.
Ось кілька прикладів дослідження даних із джерел зображень:
* Ублозі [Як вивчати Data Science без програмування](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) ми досліджуємо фотографії з Instagram, намагаючись зрозуміти, що змушує людей ставити більше лайків на фото. Спочатку ми витягуємо якомога більше інформації з фотографій за допомогою [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), а потім використовуємо [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) для створення інтерпретованої моделі.
* У [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) ми використовуємо [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) для витягу емоцій людей на фотографіях з подій, щоб спробувати зрозуміти, що робить людей щасливими.
Ось кілька прикладів вивчення даних із джерел зображень:
* Упублікації блогу [Як вивчати Data Science без кодування](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) ми досліджуємо фотографії з Instagram, намагаючись зрозуміти, що змушує людей ставити більше лайків. Спочатку ми витягуємо якнайбільше інформації із зображень за допомогою [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), а потім використовуємо [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) для побудови інтерпретованої моделі.
* На [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) ми використовуємо [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) для виявлення емоцій людей на фотографіях з подій, щоб спробувати зрозуміти, що робить людей щасливими.
## Висновок
Незалежно від того, чи у вас вже є структуровані або неструктуровані дані, використовуючи Python, ви можете виконувати всі етапи, пов'язані з обробкою та розумінням даних. Це, мабуть, найгнучкіший спосіб обробки даних, і саме тому більшість дослідників даних використовують Python як свій основний інструмент. Вивчення Python на глибокому рівні — це, ймовірно, гарна ідея, якщо ви серйозно ставитеся до своєї подорожі в Data Science!
Чи маєте ви структуровані чи неструктуровані дані, використовуючи Python, ви можете виконати всі етапи, пов’язані з обробкою і розумінням даних. Це, ймовірно, найгнучкіший спосіб обробки даних, і саме тому більшість фахівців з даних використовують Python як основний інструмент. Вивчення Python у глибину — це, мабуть, хороша ідея, якщо ви серйозно налаштовані на вашу подорож у сферу аналізу даних!
## [Тест після лекції](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## Огляд та Самостійне навчання
## Огляд і самостійне вивчення
**Книги**
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
**Онлайнресурси**
* Офіційний [10 хвилин до Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) туторіал
* [Документація про візуалізацію в Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Онлайн-ресурси**
* Офіційний [10-хвилинний підручник Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [Документація з візуалізації Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Вивчення Python**
* [Вивчайте Python весело з Turtle Graphics та фракталами](https://github.com/shwars/pycourse)
* [Зробіть свої перші кроки з Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Навчальний шлях на [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Вивчайте Python весело з Turtle Graphics і фракталами](https://github.com/shwars/pycourse)
* [Зробіть перші кроки з Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) навчальний шлях на [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## Завдання
[Виконайте більш детальне дослідження даних для завдань вище](assignment.md)
[Виконайте більш детальне вивчення даних для наведених викликів](assignment.md)
## Авторство
## Автори
Цей урок створено з ♥️ [Дмитром Сошниковим](http://soshnikov.com)
Цей урок створено з ♥️ Дмитром Сошниковим (http://soshnikov.com)
---
**Відмова від відповідальності**:
Цей документ було перекладено за допомогою сервісу автоматичного перекладу [Co-op Translator](https://github.com/Azure/co-op-translator). Хоча ми прагнемо до точності, зверніть увагу, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ мовою оригіналу слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Відмова від відповідальності**:
Цей документ було перекладено за допомогою сервісу штучного інтелекту для перекладу [Co-op Translator](https://github.com/Azure/co-op-translator). Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ рідною мовою слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.