[sr,hr,sl] chore(i18n): sync translations

Sync translations with latest source changes.
Languages: Serbian (Cyrillic) [sr], Croatian [hr], Slovenian [sl]
pull/798/head
localizeflow[bot] 2 months ago
parent 85c0918e80
commit be003a7068

@ -96,8 +96,8 @@
"language_code": "hr"
},
"2-Working-With-Data/07-python/README.md": {
"original_hash": "7bfec050f4717dcc2dfd028aca9d21f3",
"translation_date": "2025-09-06T16:01:59+00:00",
"original_hash": "fb29e3e0be486fe8f15d50bdade79eb1",
"translation_date": "2026-07-17T18:37:51+00:00",
"source_file": "2-Working-With-Data/07-python/README.md",
"language_code": "hr"
},

@ -1,60 +1,62 @@
# Rad s Podacima: Python i Pandas Biblioteka
# Rad s podacima: Python i knjižnica Pandas
| ![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| :-------------------------------------------------------------------------------------------------------: |
| Rad s Pythonom - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
| Rad s Pythonom - _Sketchnote od [@nitya](https://twitter.com/nitya)_ |
[![Intro Video](../../../../translated_images/hr/video-ds-python.245247dc811db8e4.webp)](https://youtu.be/dZjWOGbsN4Y)
[![Uvodni video](../../../../translated_images/hr/video-ds-python.245247dc811db8e4.webp)](https://youtu.be/dZjWOGbsN4Y)
Iako baze podataka nude vrlo učinkovite načine za pohranu podataka i njihovo pretraživanje pomoću jezika upita, najfleksibilniji način obrade podataka je pisanje vlastitog programa za manipulaciju podacima. U mnogim slučajevima, upit u bazi podataka bio bi učinkovitiji način. Međutim, u nekim slučajevima kada je potrebna složenija obrada podataka, to se ne može lako postići pomoću SQL-a.
Obrada podataka može se programirati u bilo kojem programskom jeziku, ali postoje određeni jezici koji su na višoj razini u radu s podacima. Data znanstvenici obično preferiraju jedan od sljedećih jezika:
Iako baze podataka nude vrlo učinkovite načine za pohranu podataka i njihovo upitavanje pomoću jezika za upite, najfleksibilniji način obrade podataka je pisanje vlastitog programa za manipulaciju podacima. U mnogim slučajevima, izvršavanje upita u bazi podataka bilo bi učinkovitije. Međutim, u nekim slučajevima kada je potrebna složenija obrada podataka, to se ne može lako napraviti pomoću SQL-a.
Obrada podataka može se programirati u bilo kojem programskom jeziku, ali postoje određeni jezici koji su viša razina u pogledu rada s podacima. Znanstvenici podataka obično preferiraju jedan od sljedećih jezika:
* **[Python](https://www.python.org/)**, opći programski jezik, često se smatra jednim od najboljih izbora za početnike zbog svoje jednostavnosti. Python ima mnogo dodatnih biblioteka koje vam mogu pomoći u rješavanju mnogih praktičnih problema, poput izdvajanja podataka iz ZIP arhive ili pretvaranja slike u sivu skalu. Osim u data znanosti, Python se često koristi i za razvoj weba.
* **[R](https://www.r-project.org/)** je tradicionalni alat razvijen s ciljem statističke obrade podataka. Također sadrži veliku zbirku biblioteka (CRAN), što ga čini dobrim izborom za obradu podataka. Međutim, R nije opći programski jezik i rijetko se koristi izvan područja data znanosti.
* **[Julia](https://julialang.org/)** je još jedan jezik razvijen posebno za data znanost. Namijenjen je pružanju bolje performanse od Pythona, što ga čini odličnim alatom za znanstvene eksperimente.
* **[Python](https://www.python.org/)**, opći programski jezik koji se često smatra jednom od najboljih opcija za početnike zbog svoje jednostavnosti. Python ima mnoge dodatne knjižnice koje vam mogu pomoći riješiti mnoge praktične probleme, kao što su izvlačenje podataka iz ZIP arhive ili pretvaranje slike u nijanse sive. Osim u znanosti o podacima, Python se također često koristi za web razvoj.
* **[R](https://www.r-project.org/)** je tradicionalni alat razvijen s fokusom na statističku obradu podataka. Također sadrži veliki repozitorij knjižnica (CRAN), što ga čini dobrim izborom za obradu podataka. Međutim, R nije opći programski jezik i rijetko se koristi izvan domene znanosti o podacima.
* **[Julia](https://julialang.org/)** je još jedan jezik razvijen posebno za znanost o podacima. Namijenjen je pružanju bolje performanse od Pythona, čineći ga izvrsnim alatom za znanstvene eksperimente.
U ovoj lekciji fokusirat ćemo se na korištenje Pythona za jednostavnu obradu podataka. Pretpostavit ćemo osnovno poznavanje jezika. Ako želite dublje istražiti Python, možete se obratiti jednom od sljedećih izvora:
U ovoj lekciji fokusirat ćemo se na korištenje Pythona za jednostavnu obradu podataka. Pretpostavit ćemo osnovno poznavanje jezika. Ako želite dublji uvod u Python, možete pogledati jedan od sljedećih izvora:
* [Naučite Python na zabavan način uz Turtle Graphics i Fraktale](https://github.com/shwars/pycourse) - GitHub tečaj za brzi uvod u Python programiranje
* [Napravite svoje prve korake s Pythonom](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Put učenja na [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Naučite Python na zabavan način uz Turtle Graphics i Fraktale](https://github.com/shwars/pycourse) - GitHub tijekom brzog uvoda u Python programiranje
* [Uzmite svoje prve korake s Pythonom](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Put učenja na [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
Podaci mogu dolaziti u mnogim oblicima. U ovoj lekciji razmotrit ćemo tri oblika podataka - **tablični podaci**, **tekst** i **slike**.
Podaci mogu doći u mnogim oblicima. U ovoj lekciji ćemo razmotriti tri oblika podataka - **tablični podaci**, **tekst** i **slike**.
Fokusirat ćemo se na nekoliko primjera obrade podataka, umjesto da vam damo potpuni pregled svih povezanih biblioteka. To će vam omogućiti da steknete osnovnu ideju o tome što je moguće, i ostaviti vas s razumijevanjem gdje pronaći rješenja za svoje probleme kada vam zatrebaju.
Usredotočit ćemo se na nekoliko primjera obrade podataka, umjesto da vam damo potpuni pregled svih povezanih knjižnica. To će vam omogućiti da steknete glavnu ideju o tome što je moguće i ostavit će vam razumijevanje gdje pronaći rješenja za vaše probleme kad ih zatrebate.
> **Najkorisniji savjet**. Kada trebate izvršiti određenu operaciju na podacima, a ne znate kako to učiniti, pokušajte to potražiti na internetu. [Stackoverflow](https://stackoverflow.com/) obično sadrži mnogo korisnih uzoraka koda u Pythonu za mnoge tipične zadatke.
> **Najkorisniji savjet**. Kad trebate izvršiti neku operaciju na podacima za koju ne znate kako, pokušajte je potražiti na internetu. [Stackoverflow](https://stackoverflow.com/) obično sadrži mnogo korisnih primjera koda u Pythonu za mnoge tipične zadatke.
## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## Tablični Podaci i Dataframeovi
Već ste se susreli s tabličnim podacima kada smo govorili o relacijskim bazama podataka. Kada imate puno podataka, i oni su sadržani u mnogim različitim povezanim tablicama, definitivno ima smisla koristiti SQL za rad s njima. Međutim, postoje mnogi slučajevi kada imamo tablicu podataka i trebamo steći neko **razumijevanje** ili **uvid** u te podatke, poput distribucije, korelacije između vrijednosti itd. U data znanosti, postoji mnogo slučajeva kada trebamo izvršiti neke transformacije originalnih podataka, praćene vizualizacijom. Oba ta koraka mogu se lako izvršiti pomoću Pythona.
## [Kviz prije lekcije](https://ff-quizzes.netlify.app/en/ds/quiz/12)
Postoje dvije najkorisnije biblioteke u Pythonu koje vam mogu pomoći u radu s tabličnim podacima:
* **[Pandas](https://pandas.pydata.org/)** omogućuje manipulaciju tzv. **Dataframeovima**, koji su analogni relacijskim tablicama. Možete imati imenovane stupce i izvršavati različite operacije na redovima, stupcima i dataframeovima općenito.
* **[Numpy](https://numpy.org/)** je biblioteka za rad s **tensori**, tj. višedimenzionalnim **nizovima**. Niz ima vrijednosti istog osnovnog tipa i jednostavniji je od dataframea, ali nudi više matematičkih operacija i stvara manje opterećenje.
## Tablični podaci i DataFrameovi
Postoji i nekoliko drugih biblioteka koje biste trebali znati:
* **[Matplotlib](https://matplotlib.org/)** je biblioteka koja se koristi za vizualizaciju podataka i crtanje grafova
* **[SciPy](https://www.scipy.org/)** je biblioteka s nekim dodatnim znanstvenim funkcijama. Već smo se susreli s ovom bibliotekom kada smo govorili o vjerojatnosti i statistici
Već ste upoznali tablične podatke kada smo razgovarali o relacijskim bazama podataka. Kada imate puno podataka koji su sadržani u mnogim različitim povezanim tablicama, definitivno ima smisla koristiti SQL za rad s njima. Međutim, postoji mnogo slučajeva kada imamo tablicu podataka i trebamo dobiti neko **razumijevanje** ili **uvid** u te podatke, poput raspodjele, korelacije između vrijednosti i sl. U znanosti o podacima, često trebamo izvršiti neke transformacije izvornog podatka, praćene vizualizacijom. Oba ta koraka lako se mogu napraviti pomoću Pythona.
Evo dijela koda koji biste obično koristili za uvoz tih biblioteka na početku svog Python programa:
Postoje dvije najkorisnije knjižnice u Pythonu koje vam mogu pomoći u radu s tabličnim podacima:
* **[Pandas](https://pandas.pydata.org/)** omogućuje manipulaciju tzv. **DataFrameovima**, koji su analogni relacijskim tablicama. Možete imati imenovane stupce i izvoditi različite operacije na redcima, stupcima i DataFrameovima općenito.
* **[Numpy](https://numpy.org/)** je knjižnica za rad s **tenzorima**, tj. višedimenzionalnim **nizovima** (array). Niz sadrži vrijednosti istog temeljnog tipa, i jednostavniji je od DataFramea, ali nudi više matematičkih operacija i stvara manji režijski trošak.
Postoje i druge knjižnice koje biste trebali poznavati:
* **[Matplotlib](https://matplotlib.org/)** je knjižnica koja se koristi za vizualizaciju podataka i crtanje grafova
* **[SciPy](https://www.scipy.org/)** je knjižnica s dodatnim znanstvenim funkcijama. Već smo naišli na ovu knjižnicu kada smo govorili o vjerojatnosti i statistici
Evo komadić koda koji biste obično koristili za uvoz tih knjižnica na početku vašeg Python programa:
```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 ... # morate navesti točne podpakete koje trebate
```
Pandas se temelji na nekoliko osnovnih koncepata.
Pandas je usmjeren oko nekoliko osnovnih pojmova.
### Series
### Series
**Series** je niz vrijednosti, sličan listi ili numpy nizu. Glavna razlika je što series također ima **indeks**, i kada radimo s series (npr., zbrajamo ih), indeks se uzima u obzir. Indeks može biti jednostavan kao broj retka (to je indeks koji se koristi prema zadanim postavkama pri stvaranju series iz liste ili niza), ili može imati složenu strukturu, poput vremenskog intervala.
**Series** je niz vrijednosti, sličan listi ili numpy nizu. Glavna razlika je da serija također ima **indeks**, i kada na seriji izvodimo operacije (npr., zbrajamo ih), indeks se uzima u obzir. Indeks može biti jednostavan kao redni broj cijelog broja (to je indeks koji se koristi prema zadanim postavkama pri stvaranju serije iz liste ili niza), ili može imati složenu strukturu, kao što je vremenski interval.
> **Napomena**: U pratećem notebooku [`notebook.ipynb`](notebook.ipynb) nalazi se uvodni kod za Pandas. Ovdje ćemo samo navesti neke primjere, a vi ste svakako dobrodošli provjeriti cijeli notebook.
> **Napomena**: U pratećem bilježniku [`notebook.ipynb`](notebook.ipynb) nalazi se uvodni Pandas kod. Ovdje samo izlažemo neke primjere, a svakako ste pozvani da proučite cijeli bilježnik.
Razmotrimo primjer: želimo analizirati prodaju našeg kioska za sladoled. Generirat ćemo niz brojeva prodaje (broj prodanih artikala svaki dan) za određeni vremenski period:
Razmotrimo primjer: želimo analizirati prodaju našeg mjesta za sladoled. Generirat ćemo niz brojeva prodaje (broj prodanih stavki svaki dan) za neki vremenski period:
```python
start_date = "Jan 1, 2020"
@ -64,31 +66,31 @@ 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()
```
![Time Series Plot](../../../../translated_images/hr/timeseries-1.80de678ab1cf727e.webp)
![Graf vremenske serije](../../../../translated_images/hr/timeseries-1.80de678ab1cf727e.webp)
Sada pretpostavimo da svaki tjedan organiziramo zabavu za prijatelje i uzimamo dodatnih 10 paketa sladoleda za zabavu. Možemo stvoriti drugi niz, indeksiran po tjednu, kako bismo to prikazali:
Sad pretpostavimo da svake sedmice organiziramo zabavu za prijatelje i donosimo dodatnih 10 paketa sladoleda za zabavu. Možemo stvoriti drugu seriju, indeksiranu prema tjednu, da to pokažemo:
```python
additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))
```
Kada zbrojimo dva niza, dobijemo ukupni broj:
Kada zbrojimo dvije serije, dobijemo ukupan broj:
```python
total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()
```
![Time Series Plot](../../../../translated_images/hr/timeseries-2.aae51d575c55181c.webp)
![Graf vremenske serije](../../../../translated_images/hr/timeseries-2.aae51d575c55181c.webp)
> **Napomena** da ne koristimo jednostavnu sintaksu `total_items+additional_items`. Da jesmo, dobili bismo puno `NaN` (*Not a Number*) vrijednosti u rezultirajućem nizu. To je zato što nedostaju vrijednosti za neke točke indeksa u nizu `additional_items`, a zbrajanje `NaN` s bilo čim rezultira `NaN`. Stoga trebamo specificirati parametar `fill_value` tijekom zbrajanja.
> **Napomena** da ne koristimo jednostavnu sintaksu `total_items+additional_items`. Da jesmo, dobili bismo puno `NaN` (*Not a Number*) vrijednosti u rezultirajućoj seriji. To je zato što nedostaju vrijednosti za neke točke indeksa u seriji `additional_items`, a dodavanje `NaN` na bilo što daje `NaN`. Stoga je potrebno koristiti parametar `fill_value` tijekom zbrajanja.
S vremenskim nizovima također možemo **ponovno uzorkovati** nizove s različitim vremenskim intervalima. Na primjer, pretpostavimo da želimo izračunati prosječni obujam prodaje mjesečno. Možemo koristiti sljedeći kod:
Kod vremenskih serija također možemo **ponovno uzorkovati** seriju s različitim vremenskim intervalima. Na primjer, pretpostavimo da želimo izračunati prosječnu prodaju mjesečno. Možemo koristiti sljedeći kod:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```
![Monthly Time Series Averages](../../../../translated_images/hr/timeseries-3.f3147cbc8c624881.webp)
![Mjesečni prosjeci vremenskih serija](../../../../translated_images/hr/timeseries-3.f3147cbc8c624881.webp)
### DataFrame
DataFrame je u suštini zbirka series s istim indeksom. Možemo kombinirati nekoliko series zajedno u DataFrame:
DataFrame je u biti kolekcija serija s istim indeksom. Možemo kombinirati nekoliko serija u jedan DataFrame:
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
@ -98,78 +100,78 @@ To će stvoriti horizontalnu tablicu poput ove:
| | 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 |
| 1 | Ja | volim | koristiti | Python | i | Pandas | jako | puno |
Također možemo koristiti Series kao stupce i specificirati nazive stupaca pomoću rječnika:
Također možemo koristiti Series kao stupce i navesti imena stupaca pomoću rječnika:
```python
df = pd.DataFrame({ 'A' : a, 'B' : b })
```
To će nam dati tablicu poput ove:
| | 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 |
**Napomena** da ovu tablicu možemo dobiti i transponiranjem prethodne tablice, npr. pisanjem
To će nam dati tablicu ovakvog izgleda:
| | A | B |
| --- | --- | ------- |
| 0 | 1 | Ja |
| 1 | 2 | volim |
| 2 | 3 | koristiti |
| 3 | 4 | Python |
| 4 | 5 | i |
| 5 | 6 | Pandas |
| 6 | 7 | jako |
| 7 | 8 | puno |
| 8 | 9 | |
**Napomena** da ovu strukturu tablice možemo dobiti i transponiranjem prethodne tablice, npr. pisanjem
```python
df = pd.DataFrame([a,b]).T..rename(columns={ 0 : 'A', 1 : 'B' })
df = pd.DataFrame([a,b]).T.rename(columns={ 0 : 'A', 1 : 'B' })
```
Ovdje `.T` označava operaciju transponiranja DataFramea, tj. zamjenu redova i stupaca, a operacija `rename` omogućuje nam preimenovanje stupaca kako bi odgovarali prethodnom primjeru.
Ovdje `.T` označava operaciju transponiranja DataFramea, tj. promjenu redaka i stupaca, a `rename` operacija nam omogućava preimenovanje stupaca da odgovaraju prethodnom primjeru.
Evo nekoliko najvažnijih operacija koje možemo izvršiti na DataFrameovima:
Evo nekoliko najvažnijih operacija koje možemo izvesti nad DataFrameovima:
**Odabir stupaca**. Možemo odabrati pojedinačne stupce pisanjem `df['A']` - ova operacija vraća Series. Također možemo odabrati podskup stupaca u drugi DataFrame pisanjem `df[['B','A']]` - ovo vraća drugi DataFrame.
**Izbor stupca**. Možemo odabrati pojedinačne stupce pisanjem `df['A']` - ova operacija vraća Series. Također možemo odabrati podskup stupaca u drugi DataFrame pisanjem `df[['B','A']]` - ovo vraća drugi DataFrame.
**Filtriranje** samo određenih redova prema kriterijima. Na primjer, da ostavimo samo redove sa stupcem `A` većim od 5, možemo napisati `df[df['A']>5]`.
**Filtriranje** samo određenih redaka prema kriterijima. Na primjer, da ostavimo samo one retke kod kojih je stupac `A` veći od 5, možemo napisati `df[df['A']>5]`.
> **Napomena**: Način na koji filtriranje funkcionira je sljedeći. Izraz `df['A']<5` vraća boolean series, koji označava je li izraz `True` ili `False` za svaki element originalnog niza `df['A']`. Kada se boolean series koristi kao indeks, vraća podskup redova u DataFrameu. Stoga nije moguće koristiti proizvoljan Python boolean izraz, na primjer, pisanje `df[df['A']>5 and df['A']<7]` bilo bi pogrešno. Umjesto toga, trebali biste koristiti posebnu `&` operaciju na boolean series, pisanjem `df[(df['A']>5) & (df['A']<7)]` (*zagrade su ovdje važne*).
> **Napomena**: Način na koji filtriranje radi je sljedeći. Izraz `df['A']<5` vraća boolean seriju, koja označava je li izraz `True` ili `False` za svaki element u izvornom nizu `df['A']`. Kad se boolean serija koristi kao indeks, ona vraća podskup redaka u DataFrameu. Stoga nije moguće koristiti proizvoljni Python boolean izraz, na primjer `df[df['A']>5 and df['A']<7]` bilo bi pogrešno. Umjesto toga trebate koristiti posebnu operaciju `&` na boolean serijama, pišući `df[(df['A']>5) & (df['A']<7)]` (*zagrade su važne ovdje*).
**Stvaranje novih izračunljivih stupaca**. Lako možemo stvoriti nove izračunljive stupce za naš DataFrame koristeći intuitivan izraz poput ovog:
**Kreiranje novih izračunljivih stupaca**. Možemo lako stvoriti nove izračunljive stupce za naš DataFrame koristeći intuitivan izraz poput ovog:
```python
df['DivA'] = df['A']-df['A'].mean()
```
Ovaj primjer izračunava odstupanje A od njegove srednje vrijednosti. Ono što se zapravo događa ovdje je da izračunavamo series, a zatim dodjeljujemo ovaj series lijevoj strani, stvarajući novi stupac. Stoga ne možemo koristiti operacije koje nisu kompatibilne sa series, na primjer, sljedeći kod je pogrešan:
Ovaj primjer izračunava odstupanje A od njegove srednje vrijednosti. Ono što se zapravo događa jest da računamo seriju, te zatim dodjeljujemo tu seriju lijevoj strani, stvarajući novi stupac. Stoga ne možemo koristiti operacije koje nisu kompatibilne sa serijama, na primjer, sljedeći kod je pogrešan:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi"
df['LenB'] = len(df['B']) # <- Wrong result
# Pogrešan kod -> df['ADescr'] = "Low" ako je df['A'] < 5, inače "Hi"
df['LenB'] = len(df['B']) # <- Pogrešan rezultat
```
Posljednji primjer, iako sintaktički ispravan, daje nam pogrešan rezultat jer dodjeljuje duljinu series `B` svim vrijednostima u stupcu, a ne duljinu pojedinačnih elemenata kako smo namjeravali.
Posljednji primjer, iako je sintaktički ispravan, daje nam pogrešan rezultat jer dodjeljuje duljinu serije `B` svim vrijednostima stupca, a ne duljinu pojedinih elemenata kao što smo zamišljali.
Ako trebamo izračunati složene izraze poput ovog, možemo koristiti funkciju `apply`. Posljednji primjer može se napisati na sljedeći način:
Ako trebamo izračunati složene izraze poput ovog, možemo koristiti funkciju `apply`. Zadnji primjer možemo napisati na sljedeći način:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# ili
df['LenB'] = df['B'].apply(len)
```
Nakon gore navedenih operacija, završit ćemo s sljedećim DataFrameom:
| | 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 |
**Odabir redova prema brojevima** može se izvršiti pomoću konstrukta `iloc`. Na primjer, za odabir prvih 5 redova iz DataFramea:
Nakon gore navedenih operacija, dobit ćemo sljedeći DataFrame:
| | A | B | DivA | LenB |
| --- | --- | ------- | ---- | ---- |
| 0 | 1 | Ja | -4.0 | 1 |
| 1 | 2 | volim | -3.0 | 4 |
| 2 | 3 | koristiti | -2.0 | 2 |
| 3 | 4 | Python | -1.0 | 3 |
| 4 | 5 | i | 0.0 | 1 |
| 5 | 6 | Pandas | 1.0 | 3 |
| 6 | 7 | jako | 2.0 | 6 |
| 7 | 8 | puno | 3.0 | 4 |
| 8 | 9 | | 4.0 | 4 |
**Odabir redaka prema brojevima** može se napraviti korištenjem konstrukta `iloc`. Na primjer, za odabir prvih 5 redaka iz DataFramea:
```python
df.iloc[:5]
```
**Grupiranje** se često koristi za dobivanje rezultata sličnih *pivot tablicama* u Excelu. Pretpostavimo da želimo izračunati srednju vrijednost stupca `A` za svaki dani broj `LenB`. Tada možemo grupirati naš DataFrame prema `LenB` i pozvati `mean`:
**Grupiranje** se često koristi za dobivanje rezultata sličnog *pivot tablicama* u Excelu. Pretpostavimo da želimo izračunati srednju vrijednost stupca `A` za svaki dani broj `LenB`. Zatim možemo grupirati naš DataFrame po `LenB` i pozvati `mean`:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
@ -179,7 +181,7 @@ df.groupby(by='LenB') \
.aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
.rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'})
```
To nam daje sljedeću tablicu:
Ovo nam daje sljedeću tablicu:
| LenB | Count | Mean |
| ---- | ----- | -------- |
@ -189,68 +191,71 @@ To nam daje sljedeću tablicu:
| 4 | 3 | 6.333333 |
| 6 | 2 | 6.000000 |
### Dobivanje Podataka
Vidjeli smo koliko je jednostavno konstruirati Series i DataFrames iz Python objekata. Međutim, podaci obično dolaze u obliku tekstualne datoteke ili Excel tablice. Srećom, Pandas nam nudi jednostavan način za učitavanje podataka s diska. Na primjer, čitanje CSV datoteke je jednostavno kao ovo:
### Dobivanje podataka
Vidjeli smo koliko je lako konstruirati Series i DataFrame iz Python objekata. Međutim, podaci obično dolaze u obliku tekstualne datoteke ili Excel tablice. Srećom, Pandas nam nudi jednostavan način za učitavanje podataka s diska. Na primjer, čitanje CSV datoteke je ovako jednostavno:
```python
df = pd.read_csv('file.csv')
```
Vidjet ćemo više primjera učitavanja podataka, uključujući njihovo preuzimanje s vanjskih web stranica, u odjeljku "Izazov".
Vidjet ćemo još primjera učitavanja podataka, uključujući dohvaćanje s vanjskih web stranica, u odjeljku "Izazov"
### Ispisivanje i Vizualizacija
### Ispisivanje i crtanje
Data Scientist često mora istraživati podatke, stoga je važno moći ih vizualizirati. Kada je DataFrame velik, često želimo samo provjeriti radimo li sve ispravno ispisivanjem prvih nekoliko redaka. To se može učiniti pozivanjem `df.head()`. Ako ga pokrećete iz Jupyter Notebooka, ispisat će DataFrame u lijepom tabličnom obliku.
Data Scientist često mora istraživati podatke, stoga je važno moći ih vizualizirati. Kada je DataFrame velik, često želimo samo provjeriti da radimo sve ispravno ispisivanjem prvih nekoliko redaka. To se može napraviti pozivom `df.head()`. Ako to pokrećete iz Jupyter Notebooka, ispisat će DataFrame u lijepom tabličnom obliku.
Također smo vidjeli korištenje funkcije `plot` za vizualizaciju nekih stupaca. Iako je `plot` vrlo koristan za mnoge zadatke i podržava mnoge različite vrste grafova putem parametra `kind=`, uvijek možete koristiti osnovnu biblioteku `matplotlib` za crtanje nečeg složenijeg. Detaljno ćemo obraditi vizualizaciju podataka u zasebnim lekcijama tečaja.
Također smo vidjeli upotrebu funkcije `plot` za vizualizaciju nekih stupaca. Iako je `plot` vrlo koristan za mnoge zadatke i podržava mnoge različite vrste grafikona preko parametra `kind=`, uvijek možete koristiti sirovu biblioteku `matplotlib` za crtanje nečeg složenijeg. Detaljno ćemo obraditi vizualizaciju podataka u posebnim lekcijama.
Ovaj pregled pokriva najvažnije koncepte Pandasa, no biblioteka je vrlo bogata i nema ograničenja za ono što možete učiniti s njom! Sada primijenimo ovo znanje na rješavanje specifičnog problema.
Ovaj pregled pokriva najvažnije koncepte Pandas biblioteke, no biblioteka je vrlo bogata i nema ograničenja što sve možete s njom napraviti! Sada primijenimo ovo znanje za rješavanje konkretnog problema.
## 🚀 Izazov 1: Analiza širenja COVID-a
Prvi problem na kojem ćemo se fokusirati je modeliranje širenja epidemije COVID-19. Kako bismo to učinili, koristit ćemo podatke o broju zaraženih osoba u različitim zemljama, koje pruža [Centar za sustavnu znanost i inženjering](https://systems.jhu.edu/) (CSSE) na [Sveučilištu Johns Hopkins](https://jhu.edu/). Skup podataka dostupan je u [ovom GitHub repozitoriju](https://github.com/CSSEGISandData/COVID-19).
Prvi problem na koji ćemo se fokusirati je modeliranje širenja epidemije COVID-19. Za to ćemo koristiti podatke o broju zaraženih osoba u različitim zemljama, koje pruža [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) na [Sveučilištu Johns Hopkins](https://jhu.edu/). Skup podataka dostupan je u [ovom GitHub spremištu](https://github.com/CSSEGISandData/COVID-19).
Budući da želimo demonstrirati kako raditi s podacima, pozivamo vas da otvorite [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) i pročitate ga od početka do kraja. Također možete izvršavati ćelije i riješiti neke izazove koje smo ostavili na kraju.
Budući da želimo pokazati kako raditi s podacima, pozivamo vas da otvorite [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) i pročitate ga od početka do kraja. Također možete izvršavati ćelije i riješiti neke izazove koje smo ostavili za vas na kraju.
![Širenje COVID-a](../../../../translated_images/hr/covidspread.f3d131c4f1d260ab.webp)
![COVID Spread](../../../../translated_images/hr/covidspread.f3d131c4f1d260ab.webp)
> Ako ne znate kako pokrenuti kod u Jupyter Notebooku, pogledajte [ovaj članak](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## Rad s nestrukturiranim podacima
Iako podaci vrlo često dolaze u tabličnom obliku, u nekim slučajevima moramo raditi s manje strukturiranim podacima, na primjer, tekstom ili slikama. U tom slučaju, kako bismo primijenili tehnike obrade podataka koje smo vidjeli gore, moramo nekako **izvući** strukturirane podatke. Evo nekoliko primjera:
Dok podaci vrlo često dolaze u tabličnom obliku, u nekim slučajevima potrebni su nam manje strukturirani podaci, na primjer tekst ili slike. U tom slučaju, da bismo primijenili tehnike obrade podataka koje smo vidjeli gore, trebamo nekako **izvući** strukturirane podatke. Evo nekoliko primjera:
* Izvlačenje ključnih riječi iz teksta i analiza učestalosti pojavljivanja tih ključnih riječi
* Izvlačenje ključnih riječi iz teksta i praćenje koliko često se te ključne riječi pojavljuju
* Korištenje neuronskih mreža za izvlačenje informacija o objektima na slici
* Dobivanje informacija o emocijama ljudi na video snimci
* Dobivanje informacija o emocijama ljudi s video snimke
## 🚀 Izazov 2: Analiza COVID radova
U ovom izazovu nastavljamo s temom pandemije COVID-a i fokusiramo se na obradu znanstvenih radova o toj temi. Postoji [CORD-19 skup podataka](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) s više od 7000 (u vrijeme pisanja) radova o COVID-u, dostupnih s metapodacima i sažecima (a za otprilike polovicu njih dostupni su i puni tekstovi).
U ovom izazovu nastavljamo s temom COVID pandemije i fokusiramo se na obradu znanstvenih radova iz tog područja. Postoji [CORD-19 Dataset](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) s više od 7000 (u trenutku pisanja) radova o COVID-u, dostupnih s metapodacima i sažetcima (za otprilike polovicu od njih postoji i potpuni tekst).
Potpuni primjer analize ovog skupa podataka koristeći [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) kognitivnu uslugu opisan je [u ovom blog postu](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Raspravljat ćemo o pojednostavljenoj verziji ove analize.
Cjelovit primjer analize ovog skupa podataka koristeći [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) kognitivnu uslugu opisan je [u ovom blog postu](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Raspravit ćemo pojednostavljenu verziju te analize.
> **NOTE**: Ne pružamo kopiju skupa podataka kao dio ovog repozitorija. Možda ćete prvo morati preuzeti datoteku [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) iz [ovog skupa podataka na Kaggleu](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Može biti potrebna registracija na Kaggle. Skup podataka možete preuzeti i bez registracije [ovdje](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), ali uključivat će sve pune tekstove uz datoteku metapodataka.
> **NAPOMENA**: Ne pružamo kopiju skupa podataka kao dio ovog spremišta. Prvo ćete možda morati preuzeti datoteku [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) s [ovog skupa podataka na Kaggleu](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Možda je potrebna registracija na Kaggle. Skup podataka možete preuzeti i bez registracije [ovdje](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), no bit će uključen sav puni tekst uz datoteku metapodataka.
Otvorite [`notebook-papers.ipynb`](notebook-papers.ipynb) i pročitajte ga od početka do kraja. Također možete izvršavati ćelije i riješiti neke izazove koje smo ostavili na kraju.
Otvorite [`notebook-papers.ipynb`](notebook-papers.ipynb) i pročitajte ga od početka do kraja. Također možete izvršavati ćelije i riješiti neke izazove koje smo ostavili za vas na kraju.
![Covid Medicinski Tretman](../../../../translated_images/hr/covidtreat.b2ba59f57ca45fbc.webp)
![Covid Medical Treatment](../../../../translated_images/hr/covidtreat.b2ba59f57ca45fbc.webp)
## Obrada slikovnih podataka
## Obrada slika
Nedavno su razvijeni vrlo moćni AI modeli koji nam omogućuju razumijevanje slika. Postoji mnogo zadataka koji se mogu riješiti koristeći unaprijed trenirane neuronske mreže ili cloud usluge. Neki primjeri uključuju:
Nedavno su razvijeni vrlo moćni AI modeli koji nam omogućuju razumijevanje slika. Postoji mnogo zadataka koji se mogu riješiti korištenjem unaprijed naučenih neuronskih mreža ili cloud servisa. Neki primjeri uključuju:
* **Klasifikacija slika**, koja vam može pomoći kategorizirati sliku u jednu od unaprijed definiranih klasa. Svoj vlastiti klasifikator slika možete lako trenirati koristeći usluge poput [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Detekcija objekata** za otkrivanje različitih objekata na slici. Usluge poput [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) mogu otkriti brojne uobičajene objekte, a možete trenirati [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) model za otkrivanje specifičnih objekata od interesa.
* **Detekcija lica**, uključujući dob, spol i emocije. To se može učiniti putem [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
* **Klasifikacija slika**, koja vam može pomoći da kategorizirate sliku u jednu od unaprijed definiranih klasa. Lako možete trenirati vlastite klasifikatore slika koristeći servise poput [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Detekcija objekata** za detekciju različitih objekata na slici. Servisi poput [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) mogu detektirati niz uobičajenih objekata, a možete trenirati model [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) za otkrivanje specifičnih objekata od interesa.
* **Detekcija lica**, uključujući procjenu dobi, spola i emocija. To se može napraviti putem [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
Sve te cloud usluge mogu se pozivati koristeći [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), i stoga se lako mogu uključiti u vaš tijek istraživanja podataka.
Sve te cloud usluge moguće je pozivati pomoću [Python SDK-ova](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), te ih lako uključiti u svoj proces istraživanja podataka.
Evo nekoliko primjera istraživanja podataka iz slikovnih izvora:
* U blog postu [Kako učiti Data Science bez kodiranja](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) istražujemo Instagram fotografije, pokušavajući razumjeti što ljude potiče da daju više lajkova na fotografiju. Prvo izvlačimo što je više moguće informacija iz slika koristeći [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), a zatim koristimo [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) za izradu interpretabilnog modela.
* U [Radionici o studijama lica](https://github.com/CloudAdvocacy/FaceStudies) koristimo [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) za izvlačenje emocija ljudi na fotografijama s događaja, kako bismo pokušali razumjeti što ljude čini sretnima.
Evo nekoliko primjera istraživanja podataka iz izvora slika:
* U blog postu [Kako naučiti Data Science bez kodiranja](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) istražujemo Instagram fotografije, pokušavajući razumjeti što ljude potiče da daju više lajkova. Prvo izvlačimo što više informacija iz slika korištenjem [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), zatim pomoću [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) gradimo tumačivi model.
* U [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) koristimo [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) za izvlačenje emocija ljudi na fotografijama s događaja, kako bismo pokušali razumjeti što ljude čini sretnima.
## Zaključak
Bez obzira imate li već strukturirane ili nestrukturirane podatke, koristeći Python možete obaviti sve korake vezane uz obradu i razumijevanje podataka. To je vjerojatno najfleksibilniji način obrade podataka, i upravo zato većina data scientista koristi Python kao svoj primarni alat. Učenje Pythona u dubinu vjerojatno je dobra ideja ako ste ozbiljni u svom putovanju kroz data science!
Bez obzira imate li već strukturirane ili nestrukturirane podatke, koristeći Python možete izvršiti sve korake vezane uz obradu i razumijevanje podataka. To je vjerojatno najfleksibilniji način obrade podataka, i zato većina data scientista koristi Python kao svoj glavni alat. Dubinsko učenje Pythona dobra je ideja ako ozbiljno pristupate svom Data Science putovanju!
## [Kviz nakon predavanja](https://ff-quizzes.netlify.app/en/ds/quiz/13)
@ -260,22 +265,24 @@ Bez obzira imate li već strukturirane ili nestrukturirane podatke, koristeći P
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
**Online resursi**
* Službeni [10 minuta s Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) tutorial
* [Dokumentacija o Pandas vizualizaciji](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
* Službeni [10 minutes to Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) tutorial
* [Dokumentacija za Pandas vizualizaciju](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Učenje Pythona**
* [Naučite Python na zabavan način s Turtle Graphics i fraktalima](https://github.com/shwars/pycourse)
* [Napravite svoje prve korake s Pythonom](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Learning Path na [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Nauči Python na zabavan način s Turtle Grafikom i Fraktalima](https://github.com/shwars/pycourse)
* [Prvi koraci s Pythonom](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Learning Path na [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## Zadatak
[Provedite detaljniju studiju podataka za gore navedene izazove](assignment.md)
[Izvedite detaljniju analizu podataka za gornje izazove](assignment.md)
## Zasluge
Ovu lekciju napisao je s ♥️ [Dmitry Soshnikov](http://soshnikov.com)
Ovu lekciju je s ljubavlju napisao [Dmitry Soshnikov](http://soshnikov.com)
---
**Odricanje od odgovornosti**:
Ovaj dokument je preveden pomoću AI usluge za prevođenje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati mjerodavnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogrešne interpretacije proizašle iz korištenja ovog prijevoda.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Napomena**:
Ovaj dokument je preveden korištenjem AI prevoditeljskog servisa [Co-op Translator](https://github.com/Azure/co-op-translator). Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati greške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za važne informacije preporuča se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nesporazumevanja ili pogrešne interpretacije koje proizlaze iz korištenja ovog prijevoda.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -96,8 +96,8 @@
"language_code": "sl"
},
"2-Working-With-Data/07-python/README.md": {
"original_hash": "7bfec050f4717dcc2dfd028aca9d21f3",
"translation_date": "2025-09-06T16:02:54+00:00",
"original_hash": "fb29e3e0be486fe8f15d50bdade79eb1",
"translation_date": "2026-07-17T18:39:25+00:00",
"source_file": "2-Working-With-Data/07-python/README.md",
"language_code": "sl"
},

@ -1,60 +1,62 @@
# Delo z podatki: Python in knjižnica Pandas
| ![ Sketchnote avtorja [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| :-----------------------------------------------------------------------------------------------------------: |
| Delo s Pythonom - _Sketchnote avtorja [@nitya](https://twitter.com/nitya)_ |
| :-------------------------------------------------------------------------------------------------------: |
| Delo s Pythonom - _Sketchnote avtorja [@nitya](https://twitter.com/nitya)_ |
[![Uvodni video](../../../../translated_images/sl/video-ds-python.245247dc811db8e4.webp)](https://youtu.be/dZjWOGbsN4Y)
Medtem ko baze podatkov ponujajo zelo učinkovite načine za shranjevanje podatkov in njihovo poizvedovanje z uporabo jezikov za poizvedbe, je najbolj prilagodljiv način obdelave podatkov pisanje lastnega programa za manipulacijo podatkov. V mnogih primerih bi bila poizvedba v bazi podatkov bolj učinkovita. Vendar pa v nekaterih primerih, ko je potrebna bolj zapletena obdelava podatkov, tega ni mogoče enostavno doseči z uporabo SQL.
Obdelavo podatkov je mogoče programirati v katerem koli programskem jeziku, vendar obstajajo določeni jeziki, ki so na višji ravni glede dela s podatki. Podatkovni znanstveniki običajno uporabljajo enega od naslednjih jezikov:
Medtem ko baze podatkov ponujajo zelo učinkovite načine shranjevanja podatkov in poizvedovanja z uporabo poizvedovalnih jezikov, je najbolj prilagodljiv način obdelave podatkov pisanje lastnega programa za manipulacijo s podatki. V mnogih primerih je izvedba poizvedbe v bazi podatkov učinkovitejši način. Vendar pa v nekaterih primerih, ko je potrebna bolj kompleksna obdelava podatkov, tega ni mogoče enostavno narediti z uporabo SQL.
Obdelavo podatkov je mogoče programirati v kateremkoli programskem jeziku, vendar obstajajo določeni jeziki, ki so na višji ravni glede dela s podatki. Podatkovni znanstveniki običajno dajejo prednost enemu od naslednjih jezikov:
* **[Python](https://www.python.org/)**, splošno namenski programski jezik, ki se pogosto šteje za eno najboljših možnosti za začetnike zaradi svoje preprostosti. Python ima veliko dodatnih knjižnic, ki vam lahko pomagajo rešiti številne praktične težave, kot so pridobivanje podatkov iz ZIP arhiva ali pretvorba slike v sivinsko lestvico. Poleg podatkovne znanosti se Python pogosto uporablja tudi za razvoj spletnih aplikacij.
* **[R](https://www.r-project.org/)** je tradicionalno orodje, razvito z mislijo na statistično obdelavo podatkov. Vsebuje tudi veliko skladišče knjižnic (CRAN), kar ga naredi dobro izbiro za obdelavo podatkov. Vendar pa R ni splošno namenski programski jezik in se redko uporablja zunaj področja podatkovne znanosti.
* **[Julia](https://julialang.org/)** je še en jezik, razvit posebej za podatkovno znanost. Namenjen je zagotavljanju boljše zmogljivosti kot Python, kar ga naredi odlično orodje za znanstvene eksperimente.
* **[Python](https://www.python.org/)**, splošni programski jezik, ki ga pogosto štejemo za eno najboljših možnosti za začetnike zaradi njegove enostavnosti. Python ima veliko dodatnih knjižnic, ki vam lahko pomagajo rešiti številne praktične probleme, kot so izvleka podatkov iz ZIP arhiva ali pretvorba slike v sivinsko lestvico. Poleg podatkovne znanosti se Python pogosto uporablja tudi za razvoj spletnih aplikacij.
* **[R](https://www.r-project.org/)** je tradicionalno orodje razvito z mislijo na statistično obdelavo podatkov. Vsebuje tudi veliko zbirko knjižnic (CRAN), kar ga naredi dobro izbiro za obdelavo podatkov. Vendar pa R ni splošni programski jezik in se redko uporablja zunaj področja podatkovne znanosti.
* **[Julia](https://julialang.org/)** je še en jezik, razvit posebej za podatkovno znanost. Namenjen je zagotavljanju boljše zmogljivosti kot Python, zaradi česar je odlično orodje za znanstvene eksperimente.
V tej lekciji se bomo osredotočili na uporabo Pythona za preprosto obdelavo podatkov. Predpostavljamo osnovno poznavanje jezika. Če želite podrobnejši pregled Pythona, se lahko obrnete na enega od naslednjih virov:
V tej lekciji se bomo osredotočili na uporabo Pythona za preprosto obdelavo podatkov. Predpostavljamo osnovno seznanjenost z jezikom. Če želite bolj poglobljen pregled Pythona, se lahko obrnete na enega od naslednjih virov:
* [Naučite se Pythona na zabaven način z grafiko Turtle in fraktali](https://github.com/shwars/pycourse) - GitHub tečaj za hiter uvod v programiranje v Pythonu
* [Naredite prve korake s Pythonom](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Učni načrt na [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Nauči se Python na zabaven način z želkasto grafiko in fraktali](https://github.com/shwars/pycourse) - hitri uvodni tečaj programiranja v Pythonu na GitHubu
* [Naredi prve korake s Pythonom](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) - učna pot na [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
Podatki lahko pridejo v različnih oblikah. V tej lekciji bomo obravnavali tri oblike podatkov - **tabelarične podatke**, **besedilo** in **slike**.
Podatki so lahko v različnih oblikah. V tej lekciji bomo obravnavali tri oblike podatkov - **tabelarične podatke**, **besedilo** in **slike**.
Osredotočili se bomo na nekaj primerov obdelave podatkov, namesto da bi vam dali celoten pregled vseh povezanih knjižnic. To vam bo omogočilo, da dobite glavno idejo o tem, kaj je mogoče, in vas pustilo z razumevanjem, kje najti rešitve za vaše težave, ko jih potrebujete.
Osredotočili se bomo na nekaj primerov obdelave podatkov, namesto da bi vam dali celovit pregled vseh povezanih knjižnic. To vam bo omogočilo, da dobite osnovno predstavo o tem, kaj je mogoče, in vam dalo razumevanje, kje najti rešitve za vaše težave, ko jih boste potrebovali.
> **Najbolj uporaben nasvet**. Ko morate izvesti določeno operacijo na podatkih, za katero ne veste, kako jo narediti, poskusite iskati po internetu. [Stackoverflow](https://stackoverflow.com/) običajno vsebuje veliko uporabnih vzorcev kode v Pythonu za številne tipične naloge.
> **Najbolj uporaben nasvet**. Ko morate izvesti določeno operacijo na podatkih, ki ne veste, kako jo narediti, poskusite to poiskati na internetu. [Stackoverflow](https://stackoverflow.com/) običajno vsebuje veliko koristnih primerov kode v Pythonu za številne tipične naloge.
## [Predlekcijski kviz](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## Tabelarični podatki in DataFrame
Tabelarične podatke ste že srečali, ko smo govorili o relacijskih bazah podatkov. Ko imate veliko podatkov, ki so shranjeni v številnih povezanih tabelah, se vsekakor splača uporabiti SQL za delo z njimi. Vendar pa obstaja veliko primerov, ko imamo tabelo podatkov in želimo pridobiti nekaj **razumevanja** ali **vpogledov** v te podatke, kot so porazdelitev, korelacija med vrednostmi itd. V podatkovni znanosti je veliko primerov, ko moramo izvesti nekatere transformacije izvornih podatkov, ki jim sledi vizualizacija. Obe ti koraki je mogoče enostavno izvesti z uporabo Pythona.
## [Predpredavanje kviz](https://ff-quizzes.netlify.app/en/ds/quiz/12)
Obstajata dve najbolj uporabni knjižnici v Pythonu, ki vam lahko pomagata pri delu s tabelaričnimi podatki:
* **[Pandas](https://pandas.pydata.org/)** omogoča manipulacijo tako imenovanih **DataFrame**, ki so analogni relacijskim tabelam. Lahko imate poimenovane stolpce in izvajate različne operacije na vrsticah, stolpcih in DataFrame na splošno.
* **[Numpy](https://numpy.org/)** je knjižnica za delo s **tenzorji**, tj. večdimenzionalnimi **polji**. Polje ima vrednosti iste osnovne vrste in je preprostejše od DataFrame, vendar ponuja več matematičnih operacij in ustvarja manj režijskih stroškov.
## Tabelarni podatki in podatkovni okviri (Dataframes)
Obstaja tudi nekaj drugih knjižnic, ki jih morate poznati:
* **[Matplotlib](https://matplotlib.org/)** je knjižnica, ki se uporablja za vizualizacijo podatkov in risanje grafov
* **[SciPy](https://www.scipy.org/)** je knjižnica z nekaterimi dodatnimi znanstvenimi funkcijami. S to knjižnico smo se že srečali, ko smo govorili o verjetnosti in statistiki
Tabelarne podatke ste že srečali, ko smo govorili o relacijskih bazah podatkov. Ko imate veliko podatkov, ki so vsebovani v mnogih različnih povezanih tabelah, ima zagotovo smisel uporabljati SQL za delo z njimi. Vendar pa je veliko primerov, ko imamo tabelo podatkov in želimo pridobiti nekaj **razumevanja** ali **vpogledov** v te podatke, kot so porazdelitev, korelacija med vrednostmi itd. V podatkovni znanosti je veliko primerov, ko moramo izvesti nekatere transformacije izvornih podatkov, ki ji sledita vizualizacija. Obe koraki lahko enostavno izvedemo z uporabo Pythona.
Tukaj je kos kode, ki bi ga običajno uporabili za uvoz teh knjižnic na začetku vašega programa v Pythonu:
Obstajata dve najbolj uporabni knjižnici v Pythonu, ki vam lahko pomagata pri delu s tabelarnimi podatki:
* **[Pandas](https://pandas.pydata.org/)** omogoča manipulacijo s t.i. **Dataframes** (podatkovnimi okviri), ki so analogni relacijskim tabelam. Lahko imate imenovane stolpce in izvajate različne operacije na vrsticah, stolpcih in podatkovnih okvirih na splošno.
* **[Numpy](https://numpy.org/)** je knjižnica za delo s **tenzorji**, tj. večdimenzionalnimi **tabelami** (array). Tabela ima vrednosti istega osnovnega tipa in je preprostejša od podatkovnega okvira, vendar ponuja več matematičnih operacij in ustvarja manj režijskih stroškov.
Obstaja tudi še nekaj drugih knjižnic, ki jih je dobro poznati:
* **[Matplotlib](https://matplotlib.org/)** je knjižnica za vizualizacijo podatkov in risanje grafov
* **[SciPy](https://www.scipy.org/)** je knjižnica z dodatnimi znanstvenimi funkcijami. S to knjižnico smo se že srečali pri obravnavi verjetnosti in statistike
Tukaj je kos kode, ki ga običajno uporabljate za uvoz teh knjižnic na začetku vašega Python programa:
```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 ... # morate navesti natančne podpakete, ki jih potrebujete
```
Pandas temelji na nekaj osnovnih konceptih.
### Series
### Serija (Series)
**Series** je zaporedje vrednosti, podobno seznamu ali numpy polju. Glavna razlika je, da ima Series tudi **indeks**, in ko izvajamo operacije na Series (npr. jih seštevamo), se upošteva indeks. Indeks je lahko tako preprost kot številka vrstice (to je privzeti indeks, ko ustvarjamo Series iz seznama ali polja), ali pa ima lahko kompleksno strukturo, kot je časovni interval.
**Series** je zaporedje vrednosti, podobno kot seznam ali numpy tabela. Glavna razlika je, da ima serija tudi **indeks** in ko izvajamo operacije na serijah (npr. seštevanje), se indeks upošteva. Indeks je lahko preprosto število vrstice (to je indeks, ki se privzeto uporablja pri ustvarjanju serije iz seznama ali tabele), ali pa ima kompleksno strukturo, kot je časovni interval.
> **Opomba**: Uvodno kodo Pandas najdete v priloženem zvezku [`notebook.ipynb`](notebook.ipynb). Tukaj podajamo le nekaj primerov, vsekakor pa ste vabljeni, da si ogledate celoten zvezek.
> **Opomba**: Nekaj uvodne Pandas kode najdete v pripadajoči beležnici [`notebook.ipynb`](notebook.ipynb). Tukaj navedemo le nekaj primerov in zagotovo ste vabljeni, da si ogledate celotno beležnico.
Razmislimo o primeru: želimo analizirati prodajo našega sladolednega lokala. Ustvarimo Series številk prodaje (število prodanih artiklov vsak dan) za določeno časovno obdobje:
Vzemimo primer: želimo analizirati prodajo naše sladoledne trgovine. Ustvarimo serijo prodajnih številk (število prodanih enot na dan) za določeno časovno obdobje:
```python
start_date = "Jan 1, 2020"
@ -66,29 +68,29 @@ items_sold.plot()
```
![Graf časovne serije](../../../../translated_images/sl/timeseries-1.80de678ab1cf727e.webp)
Recimo, da vsak teden organiziramo zabavo za prijatelje in vzamemo dodatnih 10 paketov sladoleda za zabavo. Ustvarimo lahko drugo Series, indeksirano po tednih, da to prikažemo:
Recimo, da vsako soboto priredimo zabavo za prijatelje in vzamemo dodatnih 10 paketov sladoleda za zabavo. Lahko ustvarimo drugo serijo, indeksirano po tednih, da to pokažemo:
```python
additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))
```
Ko seštejemo dve Series, dobimo skupno število:
Ko seštejemo dve seriji, dobimo skupno število:
```python
total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()
```
![Graf časovne serije](../../../../translated_images/sl/timeseries-2.aae51d575c55181c.webp)
> **Opomba**: Ne uporabljamo preproste sintakse `total_items+additional_items`. Če bi jo, bi dobili veliko vrednosti `NaN` (*Not a Number*) v rezultatni Series. To je zato, ker manjkajo vrednosti za nekatere točke indeksa v Series `additional_items`, in seštevanje `NaN` z nečim rezultira v `NaN`. Zato moramo med seštevanjem določiti parameter `fill_value`.
> **Opomba**, da ne uporabljamo preproste sintakse `total_items+additional_items`. Če bi jo, bi dobili veliko vrednosti `NaN` (*Not a Number*) v nastali seriji. To je zato, ker manjkajo vrednosti za nekatere indeksne položaje v seriji `additional_items` in seštevanje `NaN` z čimkoli vrne `NaN`. Zato moramo med seštevanjem navesti parameter `fill_value`.
Pri časovnih serijah lahko tudi **ponovno vzorčimo** serijo z različnimi časovnimi intervali. Na primer, če želimo izračunati povprečno prodajo mesečno, lahko uporabimo naslednjo kodo:
Pri časovnih serijah lahko tudi **ponovno vzorčimo** serijo z različnimi časovnimi intervali. Na primer, če želimo izračunati povprečni prodajni volumen mesečno, lahko uporabimo naslednjo kodo:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```
![Mesečna povprečja časovne serije](../../../../translated_images/sl/timeseries-3.f3147cbc8c624881.webp)
### DataFrame
### Podatkovni okvir (DataFrame)
DataFrame je v bistvu zbirka Series z istim indeksom. Več Series lahko združimo v DataFrame:
Podatkovni okvir je v bistvu zbirka serij s istim indeksom. Lahko združimo več serij v en podatkovni okvir:
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
@ -100,7 +102,7 @@ To bo ustvarilo horizontalno tabelo, kot je ta:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 1 | I | like | to | use | Python | and | Pandas | very | much |
Series lahko uporabimo tudi kot stolpce in določimo imena stolpcev z uporabo slovarja:
Lahko uporabimo tudi Series kot stolpce in določimo imena stolpcev z uporabo slovarja:
```python
df = pd.DataFrame({ 'A' : a, 'B' : b })
```
@ -118,39 +120,39 @@ To nam bo dalo tabelo, kot je ta:
| 7 | 8 | very |
| 8 | 9 | much |
**Opomba**: To postavitev tabele lahko dobimo tudi z transponiranjem prejšnje tabele, npr. z zapisom
**Opomba**, da lahko to postavitev tabele dobimo tudi z transponiranjem prejšnje tabele, npr. s pisanjem
```python
df = pd.DataFrame([a,b]).T..rename(columns={ 0 : 'A', 1 : 'B' })
df = pd.DataFrame([a,b]).T.rename(columns={ 0 : 'A', 1 : 'B' })
```
Tukaj `.T` pomeni operacijo transponiranja DataFrame, tj. zamenjavo vrstic in stolpcev, operacija `rename` pa nam omogoča preimenovanje stolpcev, da ustrezajo prejšnjemu primeru.
Tu `.T` pomeni operacijo transponiranja podatkovnega okvira, tj. menjavo vrstic in stolpcev, in operacija `rename` nam omogoča preimenovanje stolpcev, da se ujame prejšnji primer.
Tukaj je nekaj najpomembnejših operacij, ki jih lahko izvedemo na DataFrame:
Tukaj je nekaj najpomembnejših operacij, ki jih lahko izvajamo na podatkovnih okvirih:
**Izbor stolpcev**. Posamezne stolpce lahko izberemo z zapisom `df['A']` - ta operacija vrne Series. Podmnožico stolpcev lahko izberemo v drug DataFrame z zapisom `df[['B','A']]` - to vrne drug DataFrame.
**Izbira stolpcev**. Posamezne stolpce lahko izberemo z zapisom `df['A']` - ta operacija vrne Series. Lahko tudi izberemo podmnožico stolpcev v drug DataFrame z zapisom `df[['B','A']]` - to vrne drugi DataFrame.
**Filtriranje** določenih vrstic po kriterijih. Na primer, da pustimo le vrstice, kjer je stolpec `A` večji od 5, lahko zapišemo `df[df['A']>5]`.
**Filtriranje** samo določenih vrstic glede na kriterije. Na primer, da pustimo le vrstice, kjer je stolpec `A` večji od 5, napišemo `df[df['A']>5]`.
> **Opomba**: Način delovanja filtriranja je naslednji. Izraz `df['A']<5` vrne logično Series, ki označuje, ali je izraz `True` ali `False` za vsak element izvorne Series `df['A']`. Ko se logična Series uporabi kot indeks, vrne podmnožico vrstic v DataFrame. Zato ni mogoče uporabiti poljubnega Python logičnega izraza, na primer zapis `df[df['A']>5 and df['A']<7]` bi bil napačen. Namesto tega morate uporabiti posebno operacijo `&` na logični Series, z zapisom `df[(df['A']>5) & (df['A']<7)]` (*oklepaji so tukaj pomembni*).
> **Opomba**: Filtriranje deluje tako. Izraz `df['A']<5` vrne logično serijo, ki kaže, ali je izraz `True` ali `False` za vsak element izvorne serije `df['A']`. Ko se logična serija uporabi kot indeks, vrne podmnožico vrstic v podatkovnem okviru. Zato ni mogoče uporabiti poljubnih Python logičnih izrazov, na primer `df[df['A']>5 and df['A']<7]` bi bilo napačno. Namesto tega morate uporabiti poseben operator `&` za logične serije, npr. `df[(df['A']>5) & (df['A']<7)]` (*oklepaji so tukaj pomembni*).
**Ustvarjanje novih izračunljivih stolpcev**. Z lahkoto lahko ustvarimo nove izračunljive stolpce za naš DataFrame z uporabo intuitivnega izraza, kot je ta:
**Ustvarjanje novih izračunljivih stolpcev**. Zlahka ustvarimo nove izračunljive stolpce za naš DataFrame z uporabo intuitivnih izrazov, kot je ta:
```python
df['DivA'] = df['A']-df['A'].mean()
```
Ta primer izračuna odstopanje A od njegove povprečne vrednosti. Kaj se tukaj dejansko zgodi, je, da izračunamo Series in nato to Series dodelimo levi strani, s čimer ustvarimo nov stolpec. Zato ne moremo uporabiti nobenih operacij, ki niso združljive s Series, na primer spodnja koda je napačna:
Ta primer izračuna odklon A od njegove povprečne vrednosti. Dejstvo je, da izračunamo serijo in jo nato dodelimo na levo stran, s čimer ustvarimo nov stolpec. Zato ne moremo uporabljati operacij, ki niso združljive s serijami, na primer spodnja koda je napačna:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi"
df['LenB'] = len(df['B']) # <- Wrong result
# Napačna koda -> df['ADescr'] = "Nizka" če je df['A'] < 5 sicer "Visoka"
df['LenB'] = len(df['B']) # <- Napačen rezultat
```
Zadnji primer, čeprav je sintaktično pravilen, daje napačen rezultat, ker dodeli dolžino Series `B` vsem vrednostim v stolpcu, in ne dolžine posameznih elementov, kot smo nameravali.
Zadnji primer, čeprav sintaktično pravilen, da napačen rezultat, ker dodeli dolžino serije `B` vsem vrednostim stolpca in ne dolžine posameznih elementov, kot smo želeli.
Če moramo izračunati kompleksne izraze, kot je ta, lahko uporabimo funkcijo `apply`. Zadnji primer lahko napišemo takole:
Če moramo izračunati kompleksne izraze, lahko uporabimo funkcijo `apply`. Zadnji primer lahko napišemo takole:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# ali
df['LenB'] = df['B'].apply(len)
```
Po zgornjih operacijah bomo dobili naslednji DataFrame:
Po zgornjih operacijah bomo dobili naslednji podatkovni okvir:
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
@ -164,22 +166,22 @@ Po zgornjih operacijah bomo dobili naslednji DataFrame:
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
**Izbor vrstic glede na številke** lahko izvedemo z uporabo konstrukta `iloc`. Na primer, da izberemo prvih 5 vrstic iz DataFrame:
**Izbira vrstic glede na številke** lahko poteka z uporabo konstrukta `iloc`. Na primer, da izberemo prvih 5 vrstic iz podatkovnega okvira:
```python
df.iloc[:5]
```
**Skupinjenje** se pogosto uporablja za pridobitev rezultata, podobnega *pivot tabelam* v Excelu. Recimo, da želimo izračunati povprečno vrednost stolpca `A` za vsako dano število `LenB`. Nato lahko skupinimo naš DataFrame po `LenB` in pokličemo `mean`:
**Grupiranje** se pogosto uporablja za dosego rezultata, podobnega *vrtiljam* (pivot tables) v Excelu. Recimo, da želimo izračunati povprečno vrednost stolpca `A` za vsako dano število `LenB`. Potem lahko združimo naš DataFrame po `LenB` in pokličemo `mean`:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
Če moramo izračunati povprečje in število elementov v skupini, lahko uporabimo bolj kompleksno funkcijo `aggregate`:
Če moramo izračunati tako povprečje kot število elementov v skupini, lahko uporabimo kompleksnejšo funkcijo `aggregate`:
```python
df.groupby(by='LenB') \
.aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
.rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'})
```
To nam da naslednjo tabelo:
To nam daje naslednjo tabelo:
| LenB | Count | Mean |
| ---- | ----- | -------- |
@ -190,92 +192,97 @@ To nam da naslednjo tabelo:
| 6 | 2 | 6.000000 |
### Pridobivanje podatkov
Videli smo, kako enostavno je ustvariti Series in DataFrames iz Pythonovih objektov. Vendar pa podatki običajno prihajajo v obliki besedilne datoteke ali Excelove tabele. Na srečo nam Pandas ponuja preprost način za nalaganje podatkov z diska. Na primer, branje CSV datoteke je tako preprosto kot tole:
Videli smo, kako enostavno je sestaviti Series in DataFrames iz Python objektov. Vendar pa podatki običajno prihajajo v obliki besedilne datoteke ali Excelove tabele. Na srečo nam Pandas ponuja enostaven način za nalaganje podatkov z diska. Na primer, branje CSV datoteke je tako preprosto:
```python
df = pd.read_csv('file.csv')
```
V razdelku "Izziv" bomo videli več primerov nalaganja podatkov, vključno s pridobivanjem podatkov z zunanjih spletnih mest.
Videli bomo še več primerov nalaganja podatkov, vključno s pridobivanjem s spletnih strani, v razdelku "Izziv"
### Tiskanje in risanje grafov
### Izpisovanje in Risanje grafov
Podatkovni znanstvenik mora pogosto raziskovati podatke, zato je pomembno, da jih zna vizualizirati. Ko je DataFrame velik, si pogosto želimo le zagotoviti, da delamo vse pravilno, tako da natisnemo prvih nekaj vrstic. To lahko storimo z uporabo `df.head()`. Če to izvajate v Jupyter Notebooku, bo DataFrame prikazan v lepi tabelarični obliki.
Data Scientist pogosto mora raziskovati podatke, zato je pomembno, da jih lahko vizualizira. Ko je DataFrame velik, si pogosto želimo samo preveriti, ali delamo pravilno, tako da izpišemo prvih nekaj vrstic. To lahko storimo z klicem `df.head()`. Če to izvajate v Jupyter Notebook, bo izpisal DataFrame v lepi tabelarični obliki.
Prav tako smo videli uporabo funkcije `plot` za vizualizacijo nekaterih stolpcev. Čeprav je `plot` zelo uporaben za številne naloge in podpira različne vrste grafov prek parametra `kind=`, lahko vedno uporabite knjižnico `matplotlib` za risanje bolj zapletenih grafov. Podrobneje bomo obravnavali vizualizacijo podatkov v ločenih lekcijah tečaja.
Videli smo tudi uporabo funkcije `plot` za vizualizacijo nekaterih stolpcev. Medtem ko je `plot` zelo uporaben za mnoge naloge in podpira različne tipe grafov preko parametra `kind=`, lahko vedno uporabite surovo knjižnico `matplotlib` za risanje nekaj bolj zapletenega. Vizualizacijo podatkov bomo podrobno obravnavali v ločenih lekcijah.
Ta pregled zajema najpomembnejše koncepte Pandas, vendar je knjižnica zelo bogata in ni omejitev, kaj lahko z njo naredite! Zdaj pa uporabimo to znanje za reševanje specifičnega problema.
Ta pregled pokriva najpomembnejše koncepte PANDAS-a, vendar je knjižnica zelo bogata in ni omejitev, kaj vse lahko z njo naredite! Zdaj pa uporabimo to znanje za reševanje specifične težave.
## 🚀 Izziv 1: Analiza širjenja COVID-a
Prvi problem, na katerega se bomo osredotočili, je modeliranje širjenja epidemije COVID-19. Za to bomo uporabili podatke o številu okuženih posameznikov v različnih državah, ki jih zagotavlja [Center za sisteme znanosti in inženiringa](https://systems.jhu.edu/) (CSSE) na [Univerzi Johns Hopkins](https://jhu.edu/). Podatkovni niz je na voljo v [tem GitHub repozitoriju](https://github.com/CSSEGISandData/COVID-19).
Prva težava, na kateri se bomo osredotočili, je modeliranje širjenja epidemije COVID-19. Za to bomo uporabili podatke o številu okuženih oseb v različnih državah, ki jih zagotavlja [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) na [Johns Hopkins University](https://jhu.edu/). Podatkovni niz je na voljo v [tem GitHub repozitoriju](https://github.com/CSSEGISandData/COVID-19).
Ker želimo pokazati, kako ravnati s podatki, vas vabimo, da odprete [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) in ga preberete od začetka do konca. Prav tako lahko zaženete celice in rešite nekaj izzivov, ki smo jih pripravili za vas na koncu.
Ker želimo prikazati, kako ravnati s podatki, vas vabimo, da odprete [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) in ga preberete od začetka do konca. Lahko tudi izvedete celice in naredite nekaj izzivov, ki smo jih za vas pripravili na koncu.
![Širjenje COVID-a](../../../../translated_images/sl/covidspread.f3d131c4f1d260ab.webp)
![COVID Spread](../../../../translated_images/sl/covidspread.f3d131c4f1d260ab.webp)
> Če ne veste, kako zagnati kodo v Jupyter Notebooku, si oglejte [ta članek](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
> Če ne veste, kako zagnati kodo v Jupyter Notebook, si oglejte [ta članek](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## Delo z nestrukturiranimi podatki
Čeprav podatki pogosto prihajajo v tabelarični obliki, se v nekaterih primerih srečamo z manj strukturiranimi podatki, na primer besedilom ali slikami. V tem primeru moramo za uporabo tehnik obdelave podatkov, ki smo jih videli zgoraj, nekako **izluščiti** strukturirane podatke. Tukaj je nekaj primerov:
Čeprav podatki zelo pogosto prihajajo v tabelarični obliki, v nekaterih primerih moramo delati z manj strukturiranimi podatki, na primer z besedilom ali slikami. V tem primeru, da bi uporabili tehnike obdelave podatkov, ki smo jih videli zgoraj, moramo nekako **izluščiti** strukturirane podatke. Tukaj je nekaj primerov:
* Izluščitev ključnih besed iz besedila in analiza njihove pogostosti
* Uporaba nevronskih mrež za pridobivanje informacij o objektih na sliki
* Pridobivanje informacij o čustvih ljudi na video posnetkih
* Izluščevanje ključnih besed iz besedila in pregled, kako pogosto se te ključne besede pojavljajo
* Uporaba nevronskih mrež za izluščevanje informacij o objektih na sliki
* Pridobivanje podatkov o čustvih ljudi na video posnetku
## 🚀 Izziv 2: Analiza COVID člankov
## 🚀 Izziv 2: Analiza COVID publikacij
V tem izzivu bomo nadaljevali s temo pandemije COVID in se osredotočili na obdelavo znanstvenih člankov na to temo. Obstaja [CORD-19 podatkovni niz](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) z več kot 7000 (v času pisanja) članki o COVID-u, ki so na voljo z metapodatki in povzetki (za približno polovico člankov je na voljo tudi celotno besedilo).
V tem izzivu bomo nadaljevali s temo pandemije COVID in se osredotočili na obdelavo znanstvenih člankov o tej temi. Obstaja [CORD-19 Dataset](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) z več kot 7000 (ob času pisanja) članki o COVID-u, na voljo z metapodatki in povzetki (za približno polovico izmed njih je na voljo tudi celotno besedilo).
Celoten primer analize tega podatkovnega niza z uporabo kognitivne storitve [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) je opisan [v tem blogu](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Obravnavali bomo poenostavljeno različico te analize.
Celovit primer analize tega podatkovnega nabora z uporabo kognitivne storitve [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) je opisan [v tem blog zapisu](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Obravnavali bomo poenostavljeno različico te analize.
> **NOTE**: Kopija podatkovnega niza ni vključena v ta repozitorij. Najprej boste morda morali prenesti datoteko [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) iz [tega podatkovnega niza na Kagglu](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Registracija na Kagglu je morda potrebna. Podatkovni niz lahko prenesete tudi brez registracije [tukaj](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), vendar bo vključeval vsa celotna besedila poleg datoteke z metapodatki.
> **OPOMBA**: Kopije podatkovnega nabora ne zagotavljamo v tem repozitoriju. Najprej boste morali prenesti datoteko [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) iz [tega nabora podatkov na Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Morda bo potrebna registracija pri Kaggle. Podatkovni niz lahko prenesete tudi brez registracije [tukaj](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), vendar bo vseboval celotna besedila poleg datoteke z metapodatki.
Odprite [`notebook-papers.ipynb`](notebook-papers.ipynb) in ga preberite od začetka do konca. Prav tako lahko zaženete celice in rešite nekaj izzivov, ki smo jih pripravili za vas na koncu.
Odprite [`notebook-papers.ipynb`](notebook-papers.ipynb) in ga preberite od začetka do konca. Prav tako lahko izvedete celice in naredite nekaj izzivov, ki smo jih za vas pripravili na koncu.
![Zdravljenje COVID-a](../../../../translated_images/sl/covidtreat.b2ba59f57ca45fbc.webp)
![Covid Medical Treatment](../../../../translated_images/sl/covidtreat.b2ba59f57ca45fbc.webp)
## Obdelava slikovnih podatkov
V zadnjem času so bili razviti zelo zmogljivi AI modeli, ki omogočajo razumevanje slik. Obstaja veliko nalog, ki jih je mogoče rešiti z uporabo vnaprej naučenih nevronskih mrež ali oblačnih storitev. Nekaj primerov vključuje:
Nedavno so bili razviti zelo zmogljivi modeli umetne inteligence, ki nam omogočajo razumevanje slik. Obstaja veliko nalog, ki jih lahko rešimo z uporabo predtreniranih nevronskih mrež ali oblačnih storitev. Nekaj primerov vključuje:
* **Razvrščanje slik**, ki vam lahko pomaga kategorizirati sliko v eno od vnaprej določenih kategorij. Svoje klasifikatorje slik lahko enostavno naučite z uporabo storitev, kot je [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Zaznavanje objektov** za prepoznavanje različnih objektov na sliki. Storitve, kot je [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), lahko zaznajo številne pogoste objekte, vi pa lahko naučite model [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) za zaznavanje specifičnih objektov.
* **Zaznavanje obrazov**, vključno z zaznavanjem starosti, spola in čustev. To je mogoče storiti prek [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
* **Klasifikacija slik**, ki vam pomaga kategorizirati sliko v eno od vnaprej določenih kategorij. S storitvami, kot je [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum), lahko enostavno trenirate svoje lastne klasifikatorje slik
* **Detekcija objektov** za zaznavanje različnih objektov na sliki. Storitev, kot je [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), lahko zazna nekaj pogostih objektov, prav tako pa lahko s [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) modelom trenirate zaznavanje specifičnih zanimivih objektov.
* **Zaznavanje obraza**, vključno z zaznavanjem starosti, spola in čustev. To je mogoče storiti preko [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
Vse te oblačne storitve je mogoče klicati z uporabo [Python SDK-jev](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), zato jih je mogoče enostavno vključiti v vaš potek raziskovanja podatkov.
Vse te oblačne storitve je mogoče klicati s pomočjo [Python SDK-jev](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), zato jih lahko enostavno vključite v vaš delovni tok raziskovanja podatkov.
Tukaj je nekaj primerov raziskovanja podatkov iz slikovnih virov:
* V blogu [Kako se naučiti podatkovne znanosti brez programiranja](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) raziskujemo fotografije na Instagramu in poskušamo razumeti, kaj ljudi spodbudi, da všečkajo določeno fotografijo. Najprej iz slik pridobimo čim več informacij z uporabo [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), nato pa uporabimo [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) za izdelavo razložljivega modela.
* V [delavnici o študijah obrazov](https://github.com/CloudAdvocacy/FaceStudies) uporabljamo [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) za pridobivanje čustev ljudi na fotografijah z dogodkov, da bi poskušali razumeti, kaj ljudi osrečuje.
* V blog zapisu [Kako se naučiti data science brez kodiranja](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) raziskujemo fotografije z Instagrama in poskušamo razumeti, kaj ljudem povzroči, da dajo več like-ov na fotografijo. Najprej izluščimo čim več informacij iz slik s pomočjo [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), nato pa z uporabo [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) sestavimo interpretabilni model.
* V [Delavnici za študije obraza](https://github.com/CloudAdvocacy/FaceStudies) uporabljamo [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) za izluščenje čustev ljudi na fotografijah z dogodkov, da bi poskušali razumeti, kaj ljudi osrečuje.
## Zaključek
Ne glede na to, ali že imate strukturirane ali nestrukturirane podatke, lahko s Pythonom izvedete vse korake, povezane z obdelavo in razumevanjem podatkov. To je verjetno najbolj prilagodljiv način obdelave podatkov, zato večina podatkovnih znanstvenikov uporablja Python kot svoje glavno orodje. Če ste resni glede svoje poti v podatkovni znanosti, je poglobljeno učenje Pythona verjetno dobra ideja!
Ne glede na to, ali že imate strukturirane ali nestrukturirane podatke, lahko z uporabo Pythona izvedete vse korake, povezane z obdelavo in razumevanjem podatkov. Verjetno je to najbolj prilagodljiv način obdelave podatkov in zato večina data scientistov uporablja Python kot svoje glavno orodje. Poglobljeno učenje Pythona je verjetno dobra ideja, če torej mislite resno o svoji poti v data science!
## [Kvizi po predavanju](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## [Kvizz po predavanju](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## Pregled in samostojno učenje
## Pregled & Samostojno učenje
**Knjige**
* [Wes McKinney. Python za analizo podatkov: Obdelava podatkov s Pandas, NumPy in IPython](https://www.amazon.com/gp/product/1491957662)
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
**Spletni viri**
* Uradni [10 minut za Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) vodič
* Uradni [10-minutni vodič za Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [Dokumentacija o Pandas vizualizaciji](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Učenje Pythona**
* [Naučite se Pythona na zabaven način z grafiko Turtle in fraktali](https://github.com/shwars/pycourse)
* [Naredite prve korake s Pythonom](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) učna pot na [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Nauči se Python na zabaven način z nepremošljanjem želve in fraktali](https://github.com/shwars/pycourse)
* [Naredi prve korake s Pythonom](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) učno pot na [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## Naloga
[Izvedite podrobnejšo študijo podatkov za zgornje izzive](assignment.md)
[Izvedi podrobnejšo analizo podatkov za zgoraj navedene izzive](assignment.md)
## Zahvale
To lekcijo je z ljubeznijo napisal [Dmitry Soshnikov](http://soshnikov.com)
To lekcijo je z ljubeznijo avtoriral [Dmitry Soshnikov](http://soshnikov.com)
---
**Omejitev odgovornosti**:
Ta dokument je bil preveden z uporabo storitve za strojno prevajanje [Co-op Translator](https://github.com/Azure/co-op-translator). Čeprav si prizadevamo za natančnost, vas prosimo, da se zavedate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo strokovno človeško prevajanje. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki izhajajo iz uporabe tega prevoda.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Omejitev odgovornosti**:
Ta dokument je bil preveden z uporabo AI prevajalske storitve [Co-op Translator](https://github.com/Azure/co-op-translator). Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da avtomatizirani prevodi lahko vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku je treba obravnavati kot avtoritativni vir. Za kritične informacije je priporočljiv strokovni človeški prevod. Ne odgovarjamo za morebitna nesporazume ali napačne interpretacije, ki izhajajo iz uporabe tega prevoda.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -96,8 +96,8 @@
"language_code": "sr"
},
"2-Working-With-Data/07-python/README.md": {
"original_hash": "7bfec050f4717dcc2dfd028aca9d21f3",
"translation_date": "2025-09-06T16:00:52+00:00",
"original_hash": "fb29e3e0be486fe8f15d50bdade79eb1",
"translation_date": "2026-07-17T18:36:33+00:00",
"source_file": "2-Working-With-Data/07-python/README.md",
"language_code": "sr"
},

@ -1,62 +1,62 @@
# Рад са подацима: Python и библиотека Pandas
# Рад са подацима: Python и Pandas библиотека
| ![ Скетч од [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| ![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| :-------------------------------------------------------------------------------------------------------: |
| Рад са Python-ом - _Скетч од [@nitya](https://twitter.com/nitya)_ |
| Рад са Python-ом - _Sketchnote од [@nitya](https://twitter.com/nitya)_ |
[![Уводни видео](../../../../translated_images/sr/video-ds-python.245247dc811db8e4.webp)](https://youtu.be/dZjWOGbsN4Y)
[![Intro Video](../../../../translated_images/sr/video-ds-python.245247dc811db8e4.webp)](https://youtu.be/dZjWOGbsN4Y)
Иако базе података нуде веома ефикасне начине за складиштење података и њихово претраживање помоћу језика за упите, најфлексибилнији начин обраде података је писање сопственог програма за манипулацију подацима. У многим случајевима, коришћење упита у бази података би било ефикасније. Међутим, у неким случајевима када је потребна сложенија обрада података, то се не може лако урадити помоћу SQL-а.
Обрада података може се програмирати у било ком програмском језику, али постоје одређени језици који су на вишем нивоу када је у питању рад са подацима. Научници који се баве подацима обично преферирају један од следећих језика:
Док базе података нуде веома ефикасне начине за чување података и њихово испитивање помоћу језика за упитe, најфлексибилнији начин обраде података је писање сопственог програма за манипулацију подацима. У многим случајевима, извршавање упита у бази података било би ефикасније. Међутим, у неким случајевима када је потребна сложенија обрада података, то се не може лако урадити помоћу 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-a за једноставну обраду података. Претпоставићемо основно познавање језика. Ако желите дубљу туру по Python-у, можете погледати један од следећих извора:
* [Научите Python на забаван начин уз Turtle Graphics и фрактале](https://github.com/shwars/pycourse) - GitHub курс за брзи увод у Python програмирање
* [Направите прве кораке са 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)
* [Learn Python in a Fun Way with Turtle Graphics and Fractals](https://github.com/shwars/pycourse) - GitHub базирани брзи увод у програмски језик Python
* [Take your First Steps with Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Learning Path на [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)
## [Прелиминарни квиз](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## Табеларни подаци и Dataframes
Већ сте се сусрели са табеларним подацима када смо говорили о релационим базама података. Када имате много података, и они су садржани у многим различитим повезаним табелама, дефинитивно има смисла користити SQL за рад са њима. Међутим, постоје многи случајеви када имамо табелу података и треба да стекнемо неко **разумевање** или **увиде** о тим подацима, као што су расподела, корелација између вредности, итд. У науци о подацима, постоји много случајева када треба да извршимо неке трансформације оригиналних података, праћене визуализацијом. Оба ова корака могу се лако урадити помоћу Python-а.
Већ сте упознали табеларне податке када смо говорили о реловационим базама података. Када имате пуно података који су садржани у многим различитим повезаним табелама, дефинитивно има смисла користити SQL за рад са њима. Међутим, постоји много случајева када имамо табеларне податке и потребно нам је да добијемо неко **разумевање** или **инсајт** о тим подацима, као што су расподела, корелација између вредности итд. У науци о подацима, често је потребно извршити неке трансформације изворних података, праћене визуализацијом. Оба ова корака се могу лако урадити коришћењем Python-a.
Постоје две најкорисније библиотеке у Python-у које вам могу помоћи да радите са табеларним подацима:
* **[Pandas](https://pandas.pydata.org/)** вам омогућава да манипулишете такозваним **Dataframes**, који су аналогни релационим табелама. Можете имати именоване колоне и извршавати различите операције на редовима, колонама и Dataframes-има уопште.
* **[Numpy](https://numpy.org/)** је библиотека за рад са **тензорима**, тј. вишедимензионалним **низовима**. Низ има вредности истог основног типа и једноставнији је од Dataframe-а, али нуди више математичких операција и ствара мање оптерећења.
* **[Pandas](https://pandas.pydata.org/)** вам омогућава да манипулишете такозваним **Dataframes**, који су аналогни реловационим табелама. Можете имати именоване колоне и извршавати различите операције над редовима, колонама и целом DataFrame-ом.
* **[Numpy](https://numpy.org/)** је библиотека за рад са **тензорима**, тј. вишедимензионалним **низовима**. Низ има вредности истог примарног типа и једноставнији је од DataFrame-а, али нуди више математичких операција и ствара мање допунског оптерећења.
Постоје и неке друге библиотеке које би требало да знате:
Постоји и неколико других библиотека које би требало да знате:
* **[Matplotlib](https://matplotlib.org/)** је библиотека која се користи за визуализацију података и цртање графикона
* **[SciPy](https://www.scipy.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 је заснован на неколико основних концепата.
### Series
### Series
**Series** је низ вредности, сличан листи или numpy низу. Главна разлика је у томе што Series такође има **индекс**, и када радимо са Series (нпр. додајемо их), индекс се узима у обзир. Индекс може бити једноставан као број реда (то је индекс који се користи подразумевано када се креира Series из листе или низа), или може имати сложену структуру, као што је интервал датума.
**Series** је низ вредности, сличан листи или numpy низу. Главна разлика је што series има и **индеx**, и када извршавамо операције над series (нпр. сабирање), индеx се узима у обзир. Индекс може бити једноставан, као нпр. број реда (који је подразумевани индекс при креирању series од листе или низа), или може имати комплексну структуру, као што је временски интервал.
> **Напомена**: У пратећем notebook-у [`notebook.ipynb`](notebook.ipynb) налази се уводни код за Pandas. Овде ћемо само навести неке примере, а свакако сте добродошли да проверите комплетан notebook.
> **Напомена**: Постоји неки уводни Pandas код у приложеном notebook-у [`notebook.ipynb`](notebook.ipynb). Овде само наводимо неке примере, а свакако сте добродошли да погледате цео notebook.
Размотримо пример: желимо да анализирамо продају у нашој продавници сладоледа. Генеришимо низ бројева продаје (број продатих артикала сваког дана) за одређени временски период:
Размотримо пример: желимо да анализирамо продају у нашем киоску за сладолед. Хајде да генеришемо series бројева продаје (број продатих јединица сваког дана) за одређени период:
```python
start_date = "Jan 1, 2020"
@ -66,47 +66,47 @@ 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()
```
![График временског низа](../../../../translated_images/sr/timeseries-1.80de678ab1cf727e.webp)
![Time Series Plot](../../../../translated_images/sr/timeseries-1.80de678ab1cf727e.webp)
Сада претпоставимо да сваке недеље организујемо журку за пријатеље и узимамо додатних 10 пакета сладоледа за журку. Можемо креирати други низ, индексиран по недељама, да то покажемо:
Сада претпоставимо да сваке недеље организујемо журку за пријатеље и додатно донесемо 10 пакетића сладоледа за журку. Можемо направити другу series, индексирану по недељама, да то прикажемо:
```python
additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))
```
Када додамо два низа заједно, добијамо укупан број:
Када саберемо две series, добијамо укупни број:
```python
total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()
```
![График временског низа](../../../../translated_images/sr/timeseries-2.aae51d575c55181c.webp)
![Time Series Plot](../../../../translated_images/sr/timeseries-2.aae51d575c55181c.webp)
> **Напомена** да не користимо једноставну синтаксу `total_items+additional_items`. Да јесмо, добили бисмо много `NaN` (*Not a Number*) вредности у резултујућем низу. То је зато што недостају вредности за неке тачке индекса у низу `additional_items`, а додавање `NaN` било чему резултира у `NaN`. Због тога морамо да наведемо параметар `fill_value` током сабирања.
> **Напомена** да не користимо једноставну синтаксу `total_items+additional_items`. Кад бисмо је користили, добили бисмо много `NaN` (*Not a Number*) вредности у резултујућој series. То је зато што недостају вредности за неке индексе у series `additional_items`, а сабирање `NaN` са било чим даје `NaN`. Због тога морамо да наведемо параметар `fill_value` приликом сабирања.
Са временским низовима, можемо такође **пресемплирати** низ са различитим временским интервалима. На пример, ако желимо да израчунамо просечан обим продаје месечно, можемо користити следећи код:
Код серија са временом можемо такође **промјенити узорак** (resample) са другим временским интервалима. На пример, претпоставимо да желимо да израчунамо просечан промет продаје месечно. Можемо користити следећи код:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```
![Месечни просеци временског низа](../../../../translated_images/sr/timeseries-3.f3147cbc8c624881.webp)
![Monthly Time Series Averages](../../../../translated_images/sr/timeseries-3.f3147cbc8c624881.webp)
### DataFrame
DataFrame је у суштини колекција Series-а са истим индексом. Можемо комбиновати неколико Series-а у DataFrame:
DataFrame је у основи скуп series са истим индексом. Можемо спојити неколико series у један DataFrame:
```python
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])
```
Ово ће креирати хоризонталну табелу попут ове:
Ово ће направити хоризонталну табелу као што је ова:
| | 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 |
Можемо такође користити Series као колоне и одредити имена колона користећи речник:
Такође можемо користити Series као колоне и одредити имена колона користећи речник:
```python
df = pd.DataFrame({ 'A' : a, 'B' : b })
```
Ово ће нам дати табелу попут ове:
Ово ће нам дати табелу као што је ова:
| | A | B |
| --- | --- | ------ |
@ -120,39 +120,39 @@ df = pd.DataFrame({ 'A' : a, 'B' : b })
| 7 | 8 | very |
| 8 | 9 | much |
**Напомена** да ову табелу можемо добити и транспоновањем претходне табеле, нпр. писањем
**Напомена** да ову структуру табеле можемо добити и транспоновањем претходне табеле, нпр. писањем
```python
df = pd.DataFrame([a,b]).T..rename(columns={ 0 : 'A', 1 : 'B' })
df = pd.DataFrame([a,b]).T.rename(columns={ 0 : 'A', 1 : 'B' })
```
Овде `.T` означава операцију транспоновања DataFrame-а, тј. промену редова и колона, а операција `rename` нам омогућава да преименујемо колоне како би одговарале претходном примеру.
Овде `.T` значи операцију транспоновања DataFrame-а, тј. мењање редова и колона, а операција `rename` нам омогућава да преименујемо колоне како би одговарале претходном примеру.
Ево неколико најважнијих операција које можемо извршити на DataFrame-овима:
Ево неколико најважнијих операција које можемо извршити над 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` враћа буловски низ, који указује да ли је израз `True` или `False` за сваки елемент оригиналног низа `df['A']`. Када се буловски низ користи као индекс, он враћа подскуп редова у DataFrame-у. Због тога није могуће користити произвољни Python буловски израз, на пример, писање `df[df['A']>5 and df['A']<7]` било би погрешно. Уместо тога, требало би да користите специјалну `&` операцију на буловским низовима, писањем `df[(df['A']>5) & (df['A']<7)]` (*заграде су овде важне*).
> **Напомена**: Начин на који филтрирање функционише је следећи. Израз `df['A']<5` враћа буловску серију која показује да ли је услов `True` или `False` за сваки елемент оригиналне Series `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 од њене просечне вредности. У ствари, овде рачунамо series, која се онда додељује левој страни, стварајући тако још једну колону. Због тога не можемо користити операције које нису компатибилне са series; пример из кода испод је погрешан:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi"
df['LenB'] = len(df['B']) # <- Wrong result
# Погрешан код -> df['ADescr'] = "Low" ако је df['A'] < 5 иначе "Hi"
df['LenB'] = len(df['B']) # <- Погрешан резултат
```
Последњи пример, иако је синтаксно исправан, даје нам погрешан резултат, јер додељује дужину Series-а `B` свим вредностима у колони, а не дужину појединачних елемената како смо намеравали.
Овај други пример, иако је синтаксно исправан, даје погрешан резултат, јер додељује дужину Series `B` свим вредностима у колони, уместо дужине појединачних елемената, како смо намеравали.
Ако треба да израчунамо сложене изразе попут овог, можемо користити функцију `apply`. Последњи пример може се написати на следећи начин:
Ако морамо да рачунамо сложене изразе овако, можемо користити функцију `apply`. Последњи пример може бити написан овако:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# или
df['LenB'] = df['B'].apply(len)
```
Након горе наведених операција, добићемо следећи DataFrame:
Након ових операција, добићемо следећи DataFrame:
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
@ -166,16 +166,16 @@ df['LenB'] = df['B'].apply(len)
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
**Избор редова на основу бројева** може се урадити коришћењем конструкта `iloc`. На пример, да изаберемо првих 5 редова из DataFrame-а:
**Селекција редова по броју** може се урадити користећи `iloc` конструкцију. На пример, да изаберемо првих 5 редова из DataFrame-а:
```python
df.iloc[:5]
```
**Груписање** се често користи за добијање резултата сличних *пивот табелама* у Excel-у. Претпоставимо да желимо да израчунамо просечну вредност колоне `A` за сваки дати број `LenB`. Тада можемо груписати наш DataFrame по `LenB` и позвати `mean`:
**Груписање** се често користи за добијање резултата сличног *pivot таблицама* у Excel-у. Претпоставимо да желимо да израчунамо просечну вредност колоне `A` за сваки дати број `LenB`. Тада можемо груписати наш DataFrame по `LenB` и позвати `mean`:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
Ако треба да израчунамо просек и број елемената у групи, онда можемо користити сложенију функцију `aggregate`:
Ако желимо да израчунамо просек и број елемената у групи, онда можемо користити сложенију функцију `aggregate`:
```python
df.groupby(by='LenB') \
.aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
@ -192,92 +192,97 @@ df.groupby(by='LenB') \
| 6 | 2 | 6.000000 |
### Добијање података
Видели смо колико је лако конструисати Series и DataFrame објекте из Python објеката. Међутим, подаци обично долазе у облику текстуалних фајлова или Excel табела. Срећом, Pandas нам нуди једноставан начин за учитавање података са диска. На пример, читање CSV фајла је једноставно као ово:
Видели смо колико је лако конструисати Series и DataFrames из Python објеката. Међутим, подаци обично долазе у облику текстуалних фајлова или Excel табела. Срећом, Pandas нам нуди једноставан начин да учитамо податке са диска. На пример, читање CSV фајла је једноставно као ово:
```python
df = pd.read_csv('file.csv')
```
Видећемо још примера учитавања података, укључујући и преузимање са спољних веб сајтова, у одељку "Изазов".
Видећемо више примера учитавања података, укључујући преузимање са спољних веб сајтова, у одељку "Изазов"
### Штампање и Визуелизација
### Штампање и графички приказ
Data Scientist често мора да истражује податке, па је важно да их може визуализовати. Када је DataFrame велики, често желимо само да проверимо да ли све радимо исправно тако што ћемо исписати првих неколико редова. Ово се може урадити позивом `df.head()`. Ако га покрећете из Jupyter Notebook-а, он ће исписати DataFrame у лепом табеларном облику.
Data Scientist често мора да истражи податке, па је зато важно бити у могућности да их визуализује. Када је DataFrame велики, често желимо само да се уверимо да све радимо исправно тако што ћемо одштампати првих неколико редова. Ово се може урадити позивом `df.head()`. Ако покрећете код у Jupyter Notebook-у, он ће приказати DataFrame у лепом табеларном формату.
Такође смо видели употребу функције `plot` за визуализацију неких колона. Иако је `plot` веома користан за многе задатке и подржава различите типове графикона преко параметра `kind=`, увек можете користити библиотеку `matplotlib` за цртање нечег сложенијег. Детаљно ћемо обрадити визуализацију података у посебним лекцијама курса.
Такође смо видели коришћење функције `plot` за визуализацију одређених колона. Док је `plot` веома користан за многе задатке и подржава различите типове графикона преко параметра `kind=`, увек можете користити сирову библиотеку `matplotlib` за цртање нечег сложенијег. Визуелизацију података ћемо детаљно обрадити у посебним лекцијама курса.
Овај преглед покрива најважније концепте Pandas-а, али библиотека је веома богата и нема ограничења у томе шта можете да урадите са њом! Сада ћемо применити ово знање за решавање конкретног проблема.
Овај преглед покрива најважније концепте Pandas-а, али библиотека је веома богата и нема граница шта све можете са њом урадити! Хајде сада да применимо ово знање на решавање конкретног проблема.
## 🚀 Изазов 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) и прочитате га од почетка до краја. Такође можете извршавати ћелије и решавати неке изазове које смо оставили за вас на крају.
![Ширење COVID-а](../../../../translated_images/sr/covidspread.f3d131c4f1d260ab.webp)
![COVID Spread](../../../../translated_images/sr/covidspread.f3d131c4f1d260ab.webp)
> Ако не знате како да покренете код у Jupyter Notebook-у, погледајте [овај чланак](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
> Ако не знате како покренути код у Jupyter Notebook-у, погледајте [овaj чланак](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## Рад са неструктурираним подацима
Иако подаци често долазе у табеларном облику, у неким случајевима морамо радити са мање структурираном врстом података, као што су текст или слике. У том случају, да бисмо применили технике обраде података које смо видели, морамо некако **извући** структуиране податке. Ево неколико примера:
Иако подаци често долазе у табеларном облику, у неким случајевима треба да радимо са мање структуираним подацима, на пример текстом или сликама. У том случају, да бисмо применили технике обраде података које смо горе видели, морамо на неки начин **извући** структуиране податке. Ево неколико примера:
* Извлачење кључних речи из текста и праћење њихове учесталости
* Коришћење неуронских мрежа за извлачење информација о објектима на слици
* Добијање информација о емоцијама људи са видео снимка
* Издвајање кључних речи из текста и преглед учесталости појављивања тих речи
* Коришћење неуронских мрежа за издвајање информација о објектима на слици
* Добијање информација о емоцијама људи на видео снимку
## 🚀 Изазов 2: Анализа COVID радова
## 🚀 Изазов 2: Анализа COVID научних радова
У овом изазову настављамо са темом COVID пандемије и фокусирамо се на обраду научних радова на ту тему. Постоји [CORD-19 скуп података](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) са више од 7000 (у време писања) радова о COVID-у, доступних са метаподацима и апстрактима (а за око половину њих доступан је и цео текст).
У овом изазову ћемо наставити са темом COVID пандемије и фокусирати се на обраду научних радова о овој теми. Постоји [CORD-19 скуп података](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) и прочитајте га од почетка до краја. Такође можете извршавати ћелије и решавати неке изазове које смо оставили за вас на крају.
![Лечење COVID-а](../../../../translated_images/sr/covidtreat.b2ba59f57ca45fbc.webp)
![Covid Medical Treatment](../../../../translated_images/sr/covidtreat.b2ba59f57ca45fbc.webp)
## Обрада сликовних података
## Обрада слика
У последње време развијени су веома моћни AI модели који нам омогућавају да разумемо слике. Постоји много задатака који се могу решити коришћењем претходно обучених неуронских мрежа или услуга у облаку. Неки примери укључују:
Недавно су развијени веома моћни 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 SDK-ова](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) за изградњу интерпретабилног модела.
* У [Радионици за проучавање лица](https://github.com/CloudAdvocacy/FaceStudies) користимо [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) за извлачење емоција људи на фотографијама са догађаја, како бисмо покушали да разумемо шта људе чини срећним.
Ево неколико примера истраживања података из извора слика:
* У блогу [How to Learn Data Science without Coding](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 је вероватно најфлексибилнији алат за обраду података, и то је разлог зашто већина Data Scientist-а користи Python као свој примарни алат. Учити Python детаљно је вероватно добра идеја ако сте озбиљни у својој Data Science авантури!
Без обзира да ли већ имате структуриране или неструктуриране податке, коришћењем Pythona можете извршити све кораке везане за обраду и разумевање података. То је вероватно најфлексибилнији начин обраде података и због тога већина Data Scientist-а користи Python као свој примарни алат. Учити Python детаљно је добра идеја ако озбиљно приступате својем Data Science путу!
## [Квиз након предавања](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## [Квиз после предавања](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) туторијал
* Званични [10 minutes to 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)
**Учење Pythona**
* [Учите 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)
Ова лекција је ауторска уз ♥️ од [Dmitry Soshnikov](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). Иако тежимо тачности, имајте у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални људски превод. Нисмо одговорни за било каква неспоразума или погрешна тумачења која произилазе из коришћења овог превода.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
Loading…
Cancel
Save