informatika

///////////////////////////////////////////////////////////////////////////////////////

1.Pravilna-trostrana-prizma-Pavle-Bozic-VIII1

 

Računanje površine i zapremine prizme Pavle Božić

Izračunati površinu i zapreminu pravilne trostrane prizme ako je dato:

  • dužina stranice jednakostraničnog trougla(baze prizme)a , koja iznosi 25cm i
  • visine prizme H koja iznosi 75cm

Stranicu i visinu unosimo kao tekst a zatim pretvaramo u decimalni broj:

 

A = 25

H = 75

a = float(A)

h = float(H)

a

25.0

 

h

75.0

Računamo površinu a zatim zaokružujemo rezultat na dve decimale:

p = 2*(a**2)*(3**0.5) /4 + 4*a*h

p

8041.265877365274

P = round(p,2)

P

8041.27

 

Prikazujemo rezultat, vrednost površine pretvaramo u tekst:

print(“Površina prizme je: ” + str(P))

Površina prizme je: 8041.27

 

Računamo zapreminu a zatim zaokružujemo rezultat na dve decimale:

v = (a*a*(3**0.5)/4)*h

v

20297.47040119778

 

Prikazujemo rezultat, vrednost zapremine pretvaramo u tekst:

V = round(v,2)

V

20297.47

print(“Zapremina prizme je: ” + str(V))

Zapremina prizme je: 20297.47

 

 

 

 

///////////////////////////////////////////////////////////////////////////////////////

2. Analiza broja stanovnika Srbije. Podaci preuzeti sa sajta: https://www.stat.gov.rs/sr-Latn/oblasti/stanovnistvo/procene-stanovnistva

Kreiramo listu u kojoj unosimo godine:

godine = [‘2012′,’2013′,’2014′,’2015′,’2016′,’2017′,’2018′,’2019′,’2020’]

Kreiramo listu u kojoj unosimo broj stanovnika Srbije po godinama:

broj_stanovnika = [7219069,7183925,7149180,7114393,7076372,7040272,7001444,6963764,6926705]

 

len(godine)

9

len(broj_stanovnika)

9

Uključujemo modul matplotlib:

import matplotlib.pyplot as plt

Prikazujemo linijski grafikon:

plt.plot(godine,broj_stanovnika)

plt.title(“Broj stanovnika Srbije od 2012 do 2020 god.”)

plt.xlabel(“Godine”)

plt.ylabel(“Broj stanovnika”)

Zaključak: Broj stanovnika Srbije se smanjuje svake godine što znači da u Srbiji svake godine radja sve manje dece.

 

 

 

///////////////////////////////////////////////////////////////////////////////////////

3. artimet-sredina-medijanaPavle Boizc , 8-1

ocene = [4,5,3,4,2,5,5,3,4]

len(ocene)

9

prosek = sum(ocene) / len(ocene)

prosek

3.888888888888889

ocene.sort()

ocene

[2, 3, 3, 4, 4, 4, 5, 5, 5]

medijana = ocene[len(ocene)//2]

medijana

4

import matplotlib.pyplot as plt

plt.plot(ocene)

prosek_gr = (3.88, 3.88, 3.88, 3.88, 3.88, 3.88, 3.88, 3.88, 3.88)

medijana = (4, 4, 4, 4, 4, 4, 4, 4, 4)

len(prosek_gr)

9

plt.plot(ocene)

plt.plot(prosek_gr)

plt.plot(medijana)

 

 

///////////////////////////////////////////////////////////////////////////////////////

Pripema za test – Pavle Bozić  VIII

 

meseci = [“jan”,”feb”,”mar”,”apr”,”maj”,”jun”]

troskovi= [2400,2580,3254,3124,2354,2789]

kreirane su dve liste koje predstavljaju troškove u poslednjih godinu dana.

import matplotlib.pyplot as plt

plt.plot(meseci,troskovi)

plt.title(“Troškovi”)

plt.xlabel(“Meseci”)

plt.ylabel(“Računi”)

len(troskovi)

6

sum(troskovi) / len(troskovi)

2750.1666666666665

prosek = sum(troskovi) / len(troskovi)

prosecni_troskovi = round(prosek,2)

prosecni_troskovi

2750.17

 

troskovi.sort()

troskovi

[2354, 2400, 2580, 2789, 3124, 3254]

troskovi[2]

2580

index = len(troskovi) //2 -1

troskovi[index]

2580

 

for i in range(len(troskovi)):

print(troskovi[i])

2354

2400

2580

2789

3124

3254

 

for i in range(len(troskovi)):

if troskovi[i]<3000:

print(troskovi[i])

2354

2400

2580

2789

 

for x in troskovi:

print(x)

2354

2400

2580

2789

3124

3254

 

manji_troskovi = [x for x in troskovi if x< 3000]

manji_troskovi

[2354, 2400, 2580, 2789]

 

def prosecni_troskovi(lista):

return sum(lista) / len(lista)

 

prosecni_troskovi(troskovi)

2750.1666666666665

 

Zaključak: ….

///////////////////////////////////////////////////////////////////////////////////////

Boje i prikazivanje podataka

 

Boje i prikazivanje podataka

https://notebooks.gesis.org/binder/jupyter/user/ipython-ipython-in-depth-0v6rv9xh/notebooks/binder/Index.ipynb#

meseci=[“Јан”,”Феб”,”Мар”,”Апр”,”Мај”,”Јун”,”Јул”,”Авг”,”Сеп”,”Окт”,”Нов”,”Дец”]

SjenicaMaxPoMesecima=[ 14.0,19.4,21.9,24.3,28.8,31.5,33.5,32.8,29.7,26.5,20.2,18.0]

SjenicaMinPoMesecima=[-35.6,-31.0,-25.0,-8.3,-6.4,-3.7,-0.4,-1.3,-9.3,-10.7,-26.2,-29.6]

import matplotlib.pyplot as plt

свака plot наредба је додала по један низ података на графикон додали смо наслов графикона (функција title) ознаку на y-оси (функција ylabel) приказали графикон (функција show) Функција close завршава рад на графикону

plt.plot(meseci, SjenicaMaxPoMesecima)

plt.plot(meseci, SjenicaMinPoMesecima)

plt.title(“Минималне и максималне температуре у Сјеници по месецима\n(у пеироду 1981-2010)”)

plt.ylabel(“Температура (у Целзијусима)”)

plt.show()

plt.close()

 

Уколико желимо да графикон који приказује максималне температуре буде приказан црвеном бојом, а графикон који приказује минималне температуре плавом, можемо у функцији plot да додамо информацију о боји, овако:

 

plt.plot(meseci, SjenicaMaxPoMesecima, color = “r”)

plt.plot(meseci, SjenicaMinPoMesecima, color = “b”)

plt.title(“Минималне и максималне температуре у Сјеници по месецима\n(у пеироду 1981-2010)”)

plt.ylabel(“Температура (у Целзијусима)”)

plt.show()

plt.close()

 

 

Слово Боја (енг) Боја (српски) “b” blue плава “g” green зелена “r” red црвена “c” cyan светло плава “m” magenta роза “y” yellow жута “k” black црна “w” white бела

 

///////////////////////////////////////////////////////////////////////////////////////

 

Histogrami

Histogrami

https://notebooks.gesis.org/binder/jupyter/user/ipython-ipython-in-depth-0v6rv9xh/notebooks/binder/Index.ipynb#

У ситуацијама када података нема много, згодно их је приказати низом стубића. Такви дијаграми се зову хистограми или стубичасти дијаграми

 

predmeti=[“мат”,”срп”,”лик”,”ист”,”физ”,”муз”,”тио”]

ocene=[2,4,5,3,5,4,5]

Потом смо увезли целу библиотеку за цртање графикона и дали јој скраћено име plt:

 

import matplotlib.pyplot as plt

Ове податке можемо представити хистограмом позивом функције bar (зато што се ова врста дијаграма на енглеском зове bar chart):

plt.bar(predmeti, ocene)

plt.title(“Оцене на полугодишту”)

plt.show()

plt.close()

 

Уколико желиш да повећаш димензије графикона можеш користити функцију figure са параметром figuresize (енглеска реч figure значи “илустрација, приказ”, док енглеска реч size значи “величина”):

 

plt.figure(figsize=(10,5))

plt.bar(predmeti, ocene)

plt.title(“Оцене на полугодишту”)

plt.show()

plt.close()

 

////////////////////////////////////////////////////////////////////////////////////

Linijski dijagram i histogram

 

Histogrami

https://notebooks.gesis.org/binder/jupyter/user/ipython-ipython-in-depth-0v6rv9xh/notebooks/binder/Index.ipynb#

У ситуацијама када података нема много, згодно их је приказати низом стубића. Такви дијаграми се зову хистограми или стубичасти дијаграми

 

predmeti=[“мат”,”срп”,”лик”,”ист”,”физ”,”муз”,”тио”]

ocene=[2,4,5,3,5,4,5]

Потом смо увезли целу библиотеку за цртање графикона и дали јој скраћено име plt

 

import matplotlib.pyplot as plt

Ове податке можемо представити хистограмом позивом функције bar (зато што се ова врста дијаграма на енглеском зове bar chart):

 

plt.bar(predmeti, ocene)

plt.title(“Оцене на полугодишту”)

plt.show()

plt.close()

 

 

Уколико желиш да повећаш димензије графикона можеш користити функцију figure са параметром figuresize (енглеска реч figure значи “илустрација, приказ”, док енглеска реч size значи “величина”):

 

plt.figure(figsize=(10,5))

plt.bar(predmeti, ocene)

plt.title(“Оцене на полугодишту”)

plt.show()

plt.close()

 

 

////////////////////////////////////////////////////////////////////////////////

Vizuelizacija podataka Histogram Linijski grafikon Kruzni krafikon

 

Vizuelizacija podataka Histogram Linijski grafikon Kruzni krafikon

https://mojaskola.rtsplaneta.rs/show/1949649/615/os8-informatika-i-racunarstvo-21-cas-vizualizacija-podataka-u-dzupajter-okruzenju-obrada-i-vezbanje

Linijski grafikon

 

godine=[1000,1500,1650,1750]

ljudi=[0.275,0.45,0.5,0.7]

 

import matplotlib.pyplot as plt

plt.plot(godine, ljudi)

plt.show()

plt.close()

 

 

Histogram – stubičasti grafikon

predmeti=[“mat”,”srp”,”lik”,”fiz”]

ocene=[2,3,5,4]

 

plt.bar(predmeti,ocene)

plt.title(“Ocene na polugodištu”)

plt.show()

plt.close()

 

Uvećavanje grafikona

plt.figure(figsize=(10,5))

plt.bar(predmeti,ocene)

plt.title(“Ocene na polugodištu”)

plt.show()

plt.close()

 

Promena boje: r, g ili b. Isprobaj.

 

plt.figure(figsize=(10,5))

plt.bar(predmeti,ocene, color=”g”)

plt.title(“Ocene na polugodištu”)

plt.show()

plt.close()

 

 

starosneGrupe=[‘0-2′,’3-10′,’11-65′,’65+’]

normalnaT_donja=[34.7,35.9,35.2,35.6]

normalnaT_gornja=[37.3,36.7,36.9,36.2]

 

Tri niza na jednom grafikonu

 

plt.bar(starosneGrupe, normalnaT_gornja)

plt.bar(starosneGrupe, normalnaT_donja)

plt.title(“Normalna telesna temperatura po starosnim grupama”)

plt.xlabel(“Starosne grupe(godine)”)

plt.ylabel(“Temperatura (C)”)

plt.show()

plt.close()

 

 

Bitan je redosled navodjena naredbi

 

plt.bar(starosneGrupe, normalnaT_donja)

plt.bar(starosneGrupe, normalnaT_gornja)

plt.title(“Normalna telesna temperatura po starosnim grupama”)

plt.xlabel(“Starosne grupe(godine)”)

plt.ylabel(“Temperatura (C)”)

plt.show()

plt.close()

 

 

Prikazujemo deo grafikona

plt.bar(starosneGrupe, normalnaT_gornja)

plt.bar(starosneGrupe, normalnaT_donja)

plt.ylim(34,39)

plt.title(“Normalna telesna temperatura po starosnim grupama”)

plt.xlabel(“Starosne grupe(godine)”)

plt.ylabel(“Temperatura (C)”)

plt.show()

plt.close()

 

 

Legenda

plt.bar(starosneGrupe, normalnaT_gornja, label=’gornja granica’)

plt.bar(starosneGrupe, normalnaT_donja, label=’donja granica’)

plt.ylim(34,39)

plt.title(“Normalna telesna temperatura po starosnim grupama”)

plt.xlabel(“Starosne grupe(godine)”)

plt.ylabel(“Temperatura (C)”)

plt.legend()

plt.show()

plt.close()

 

 

Kružni grafikon – sektorski dijagram

 

frekvencije =[9,11,6,3,1]

ocene =[“5″,”4″,”3″,”2″,”1”]

 

plt.figure(figsize=(6,6))

plt.pie(frekvencije,labels=ocene)

plt.title(“Ocene iz informatike”)

plt.show()

plt.close()

 

 

Izmeštanje

 

frekvencije =[9,11,6,3,1]

ocene =[“5″,”4″,”3″,”2″,”1”]

izmestanje= [0.1,0,0,0,0]

plt.figure(figsize=(6,6))

plt.pie(frekvencije,labels=ocene, explode=izmestanje )

plt.title(“Ocene iz informatike”)

plt.show()

plt.close()

 

 

 

procenti =[78,20.94,0.91,0.05]

oznake= [“Azot”,”Kiseonik”,”Argon”,”Ugljen dioksid”]

plt.figure(figsize=(7,7))

plt.pie(procenti,labels=oznake )

plt.title(“Sastav naše atmosfere”)

plt.show()

plt.close()

 

 

Povećanje čitljivosti

 

procenti =[78,20.94,0.91,0.05]

oznake= [“Azot”,”Kiseonik”,”Argon”,”Ugljen dioksid”]

izmestanje= [0,0,0.75,0.75]

plt.figure(figsize=(7,7))

plt.pie(procenti,labels=oznake, explode=izmestanje)

plt.title(“Sastav naše atmosfere”)

plt.show()

plt.close()

 

 

 

 

 

///////////////////////////////////////////////////////////////////////////////////////

PETLJA : 1

 

Uvod u jupyter petlja 1

BrLjudiNaSvetu_2019 = 7714576923

BrLjudiNaSvetu_2019 * 27.8 / 100

2144652384.5939999

 

cena = 6799.99

popust1 = cena * 25 / 100

niza_cena = cena – popust1

popust2 = niza_cena * 3 / 100

print(“Pantalone su na kraju kostale”, niza_cena – popust2, “din”)

 

Pantalone su na kraju kostale 4946.992725 din

 

Библиотеке функција

 

from math import pi

r = 12

obim = 2 * r * pi

print(“Obim kruga je:”, obim)

 

Obim kruga je: 75.39822368615503

 

from math import sqrt

a = 10

b = 15

c = sqrt(a**2 + b**2)

print(“Hipotenuza c je:”, c)

Hipotenuza c je: 18.027756377319946

 

///////////////////////////////////////////////////////////////////////////////////////

PETLJA : 2

nizovi podataka i linijski dijagrami petlja 2

https://petlja.org/kurs/479/3/1654

ocene = [2, 4, 5, 3, 5]

ocene

[2, 4, 5, 3, 5]

 

predmeti = [“matematika”, “srpski”, “likovno”, “istorija”, “fizicko”]

predmeti

[‘matematika’, ‘srpski’, ‘likovno’, ‘istorija’, ‘fizicko’]

 

len(predmeti)

5

Приказивање низова података

 

godine = [1000,  1500, 1650, 1750, 1804, 1850, 1900, 1930, 1950, 1960, 1974, 1980, 1987, 1999, 2011, 2020, 2023, 2030, 2037, 2045, 2055, 2100]

ljudi  = [0.275, 0.45, 0.5,  0.7,  1,    1.2,  1.6,  2,    2.55, 3,    4,    4.5,  5,    6,    7,    7.8,  8,    8.5,  9,    9.5,  10,   11.2]

import matplotlib.pyplot as plt

 

plt.plot(godine, ljudi)

plt.show()

 

 

plt.plot(godine, ljudi)

plt.title(“Broj stanovnika na Zemlji”)

plt.ylabel(“(milijarde)”)

plt.show()

 

 

///////////////////////////////////////////////////////////////////////////////////////

PETLJA : 3

 

 

///////////////////////////////////////////////////////////////////////////////////////

PETLJA : 4

Presek i medijana niza brojeva Pelja 4

https://petlja.org/kurs/479/

https://petlja.org/kurs/479/1/

Просек и медијана низа бројева

L = [1, 3, 5, 7, 9, 10]

print(len(L))

6

print(sum(L))

35

print(“Prosek niza brojeva”, L, “je”, sum(L) / len(L))

Prosek niza brojeva [1, 3, 5, 7, 9, 10] je 5.833333333333333

 

def prosek(L):

return sum(L) / len(L)

 

print(“Prosek niza brojeva”, L, “je”, prosek(L))

Prosek niza brojeva [1, 3, 5, 7, 9, 10] je 5.833333333333333

ocene = [5, 3, 5, 4, 4, 5]

print(“Prosek ocena iz informatike je”, prosek(ocene))

Prosek ocena iz informatike je 4.333333333333333

 

round(1.666666666, 2)

1.67

 

print(“Prosek ocena iz informatike je”, round(prosek(ocene), 2))

Prosek ocena iz informatike je 4.3

 

Сортирање низа и медијана

L = [3, 1, 2, 5, 0, -1, 4]

L.sort()

L

[-1, 0, 1, 2, 3, 4, 5]

 

L.sort(reverse=True)

[5, 4, 3, 2, 1, 0, -1]

 

Медијана низа је елемент „на средини сортираног низа” и одређује се овако:

ако је дужина низа непарна медијана низа је елемент који је тачно на средини низа;

ако је дужина низа парна медијана низа је аритметичка средина два елемента на средини низа.

Доња медијана низа се веома лако рачуна:

 

def donja_medijana(L):

n = len(L)

L.sort()

return L[n//2]

 

zarade = [647, 570, 587, 576, 646, 519, 585, 686, 644, 604, 95611, 609, 603, 536, 532, 535, 423180, 619, 600, 624, 545, 582, 890234, 672, 699, 549, 571, 688, 542, 691, 533, 670, 603, 583, 670, 550, 544, 579, 505, 673, 631, 695, 577, 653, 514, 556, 651, 530, 664, 559, 630, 699, 506, 696, 653, 674, 636, 618]

 

prosek(zarade)

 

24867.896551724138

 

Филтрирање података

[x for x in Lista if Uslov(x)]

prosecna_zarada = prosek(zarade)

prosecna_zarada

24867.896551724138

 

natprosecne_zarade = [x for x in zarade if x >= prosecna_zarada]

natprosecne_zarade

[95611, 423180, 890234]

 

len(natprosecne_zarade)

3

 

Приказивање података, њиховог просека и њихове медијане

predmeti = [“mat”, “srp”, “lik”, “ist”, “fiz”, “muz”, “tio”]

ocene    = [2,     4,     5,     3,     5,     4,     5    ]

Желимо да прикажемо његове оцене хистограмом и да просечна оцена буде означена црвеном линијом како бисмо могли да видимо које оцене су изнад просека, а које испод

 

import matplotlib.pyplot as plt

plt.figure(figsize=(10,5))

plt.bar(predmeti, ocene)

plt.title(“Ocene na polugodistu”)

plt.show()

 

 

Сада желимо да преко хистограма нацртамо црвену линију која представља просечну оцену. Прво ћемо израчунати просечну оцену po:

po = prosek(ocene)

plt.figure(figsize=(10,5))

plt.bar(predmeti, ocene)

plt.plot(predmeti, [po, po, po, po, po, po, po], color=”r”)

plt.title(“Ocene na polugodistu”)

plt.show()

 

 

Ознаком [s]*n смо Пајтону рекли да желимо да направимо нови низ који се добија тако што се низ [s] „умножи” n пута. На пример, [5]*7 = [5, 5, 5, 5, 5, 5, 5].

 

plt.figure(figsize=(10,5))

plt.bar(predmeti, ocene)

plt.plot(predmeti, [po] * len(ocene), color=”r”)

plt.title(“Ocene na polugodistu”)

plt.show()

 

 

За крај ћемо дијаграму додати легенду:

plt.figure(figsize=(10,5))

plt.bar(predmeti, ocene, label=”ocene”)

plt.plot(predmeti, [po] * len(ocene), color=”r”, label=”prosek”)

plt.title(“Ocene na polugodistu”)

plt.legend()

plt.show()

 

 

Сада ћемо да визуелизујемо зараде у компанији о којој смо говорили у претходним одељцима.

 

n = len(zarade)

plt.bar(range(n), zarade)

plt.show()

 

Oграничићемо вредности које се приказују на

y

-оси. Одмах ћемо приказати и просек црвеном линијом.

 

n = len(zarade)

plt.figure(figsize=(15,5))

plt.bar(range(n), zarade, color=”b”)

plt.plot([0, n-1], [prosecna_zarada, prosecna_zarada], color=”r”)

plt.ylim(0,30000)

plt.show()

 

Погледајмо сада где је доња медијана. Њу ћемо представити као дијаграм са само једним црвеним стубићем на средини низа.

 

n = len(zarade)

plt.figure(figsize=(15,5))

plt.bar(range(n), zarade, color=”b”)

plt.bar([n//2], [zarade[n//2]], color=”r”)

plt.ylim(0,30000)

plt.show()

 

 

///////////////////////////////////////////////////////////////////////////////////////

 

Tabelarno predstavljanje zadatih podataka

https://petlja.org/kurs/479/7/1666

Ime , Pol , Starost , Masa ,Visina

Да бисмо могли машински да обрађујемо и анализирамо податке прво их морамо представити у облику неке структуре података. Један једноставан начин да се то уради је да сваки ред табеле представимо једном листом, и да потом све те листе запакујемо у једну велику листу, рецимо овако:

 

podaci = [[“Ana”,     “ž”, 13, 46, 160],

[“Bojan”,   “m”, 14, 52, 165],

[“Vlada”,   “m”, 13, 47, 157],

[“Gordana”, “ž”, 15, 54, 165],

[“Dejan”,   “m”, 15, 56, 163],

[“Đorđe”,   “m”, 13, 45, 159],

[“Elena”,   “ž”, 14, 49, 161],

[“Žaklina”, “ž”, 15, 52, 164],

[“Zoran”,   “m”, 15, 57, 167],

[“Ivana”,   “ž”, 13, 45, 158],

[“Jasna”,   “ž”, 14, 51, 162]]

 

Из овако представљених података лако можемо добити податке о сваком појединачном детету у групи. Рецимо, податке о Дејану добијамо тако што испишемо елемент листе са индексом 4 (Пажња! Први елемент листе има индекс 0, зато подаци о Дејану који су наведени у 5. реду табеле имају индекс 4)

 

podaci[4]

[‘Dejan’, ‘m’, 15, 56, 163]

 

Овај начин представљања података, међутим, није погодан за обраде по колонама. Рецимо, ако желимо да израчунамо просечну висину деце у групи морамо да пишемо програм. То није немогуће, чак није ни тешко, али је непрактично. Ево програма: Програм ради на следећи начин:

прво помоћну променљиву sum поставимо на нулу (у њој ће се полако акумулирати збир висина све деце у групи);

 

након тога циклус for dete in podaci: прође кроз свако дете у групи (јер сваки елемент листе podaci представља податке о једном детету) и на суму дода његову висину (висина детета се налази на петом месту у групи података за то дете, а то је елемент листе са индексом 4);

 

коначно, добијени збир поделимо бројем података да бисмо израчунали просек.

Као што смо већ рекли, ово није јако тешко, али је непрактично. Треба нам флексибилнија структура података

 

sum = 0

for dete in podaci:

sum += dete[4]

float(sum) / len(podaci)

 

161.9090909090909

 

Библиотека pandas, структура података DataFrame и рад са колонама табеле За ефикасно манипулисање табеларно представљеним подацима у Пајтону развијена је библиотека pandas. Њу можемо увести као што смо увозили и остале библиотеке (и уз пут ћемо јој дати надимак да бисмо мање морали да куцамо):

import pandas as pd

Из ове библиотеке ћемо користити структуру података која се зове DataFrame (енгл. data значи „подаци”, frame значи „оквир”, тако да DataFrame значи „оквир са подацима”, односно „табела”).

Податке о деци сада лако можемо да препакујемо у DataFrame позивом функције са истим именом:

 

tabela = pd.DataFrame(podaci)

 

Претходна команда није дала никакав излаз. Она је просто препаковала податке наведене у листи podaci у нову структуру података. Да бисмо се уверили да се ради само о препакивању, исписаћемо садржај променљиве tabela

tabela

 

 

Да би табела била прегледнија, даћемо колонама име. Колонама се име даје овако:

tabela = pd.DataFrame(podaci)

tabela.columns=[“Ime”, “Pol”, “Starost”, “Masa”, “Visina”]

tabela

 

 

Када свака колона има своје име, можемо да приступимо појединачним колонама:

tabela[“Ime”]

0         Ana

1       Bojan

2       Vlada

3     Gordana

4       Dejan

5       Đorđe

6       Elena

7     Žaklina

8       Zoran

9       Ivana

10      Jasna

Name: Ime, dtype: object

 

tabela[“Visina”]

0     160

1     165

2     157

3     165

4     163

5     159

6     161

7     164

8     167

9     158

10    162

Name: Visina, dtype: int64

 

 

Имена свих колона су увек доступна у облику листе овако:

tabela.columns

Index([‘Ime’, ‘Pol’, ‘Starost’, ‘Masa’, ‘Visina’], dtype=’object’)

 

Позивом једне од следећих функција лако можемо да вршимо елементарну анализу података који су представљени табелом:

 

sum – рачуна збир елемената у колони (сума);

 

mean – рачуна просек елемената у колони (аритметичка средина се на енглеском каже arithmetic mean);

 

median – рачуна медијану елемената у колони;

 

min – рачуна вредност најмањег елемента у колони (минимум);

 

max – рачуна вредност највећег елемента у колони (максимум).

 

На пример, висина најнижег детета у групи је:

 

tabela[“Visina”].min()

157

 

Најстарије дете у групи има оволико година:

tabela[“Starost”].max()

15

 

Просечна висина деце у групи је:

tabela[“Visina”].mean()

161.9090909090909

 

Медијална висина:

tabela[“Visina”].median()

162.0

 

 

Да ли цела група може да стане у лифт чија носивост је 600 кг?

if tabela[“Masa”].sum() <= 600:

print(“Mogu svi da stanu u lift.”)

else:

print(“Ne. Zajedno su preteški.”)

 

Mogu svi da stanu u lift.

 

Визуелизација табеларно представљених података

Визуелизација података из табеле се своди на то да се одаберу интересантне колоне табеле и прикажу неком од техника које смо раније видели. Прво ћемо учитати одговарајућу библиотеку:

import matplotlib.pyplot as plt

 

Ако желимо хистограмом да представимо висину деце у групи, одабраћемо колоне „Име” и „Висина” и приказати их, рецимо овако:

 

 

plt.figure(figsize=(10,5))

plt.bar(tabela[“Ime”], tabela[“Visina”])

plt.title(“Visina dece u grupi”)

plt.show()

 

 

 

Као други пример представићемо тежину и старост деце у групи тако да тежина буде представљена црвеним стубићима, а старост зеленом. Приказаћемо и легенду да би било јасно шта која боја представља.

 

plt.figure(figsize=(10,5))

plt.bar(tabela[“Ime”], tabela[“Masa”], color=”r”, label=”Masa”)

plt.bar(tabela[“Ime”], tabela[“Starost”], color=”g”, label=”Starost”)

plt.title(“Starost i masa dece u grupi”)

plt.legend()

plt.show()

 

 

 

 

 

Учитавање података из локалних датотека и удаљених ресурса

 

Видели смо у претходним примерима да се најмукотрпнији посао обраде података састоји у томе да се подаци унесу у табелу. То је досадан посао који се често састоји у томе да се подаци просто прекуцају. Табеле са којима смо се сретали су зато биле веома мале. Модерна обрада података се, међутим, све више усмерава на анализу огромних количина података (енгл. big data) и ту прекуцавање података не долази у обзир.

 

Подаци се данас углавном прикупљају аутоматски, и програми за прикупљање података генеришу велике табеле података које после треба обрађивати. Постоје разни формати за табеларно представљање података, а најједноставнији од њих се зове CSV, (од енгл. comma separated values што значи „вредности раздвојене зарезима”).

 

CSV датотека је текстуална датотека у којој редови одговарају редовима табеле, а подаци унутар истог реда су раздвојени зарезима. На пример, датотека Top25YouTubers.csv садржи податке о о 25 најпопуларнијих Јутјубера према броју претплатника на дан 1.7.2019. Она изгледа овако:

RANK,GRADE,NAME,VIDEOS,SUBSCRIBERS,VIEWES

 

1,A++,T-Series,13629,105783888,76945588449

2,A,PewDiePie,3898,97853589,22298927681

3,A+,5-Minute Crafts,3341,58629572,14860695079

4,A++,Cocomelon – Nursery Rhymes,441,53163816,33519273951

25,A,TheEllenShow,10542,33362512,16519572219

 

Први ред табеле представља заглавље табеле које нам каже да табела има шест колона (RANK, GRADE, NAME, VIDEOS, SUBSCRIBERS, VIEWES). Врста

 

4,A++,Cocomelon – Nursery Rhymes,441,53163816,33519273951

 

значи да је на дан 1.7.2019. четврти по реду био Јутјуб канал са Јутјуб рангом А++ који се зове „Cocomelon – Nursery Rhymes” који је објавио укупно 441 видео на Јутјубу, који има 53.163.816 претплатника и 33.519.273.951 прегледа.

 

Библиотека pandas има функцију read_csv која учитава CSV датотеку и од ње прави табелу типа DataFrame. Уколико се датотека налази на локалној машини, у фолдеру у коме се налази и Џупитер радна свеска из које јој приступамо, онда се датотека учитава на следећи начин:

 

 

 

import pandas as pd

Top25 = pd.read_csv(“Top25YouTubers.csv”)

С друге стране, иста та датотека се налази и на следећем линку:

 

https://petljamediastorage.blob.core.windows.net/root/Media/Default/Kursevi/informatika_VIII/podaci/Top25YouTubers.csv

 

Библиотека pandas омогућује да се подаци преузму и са удаљених ресурса без потребе да се они прво пребаце на локалну машину. Да бисмо приступили податку који се налази на некој другој машини потребно је да обе машине имају приступ Интернету и да знамо тачну локацију податка на удаљеној машини. Тачна локација било ког ресурса на Интернету је описана његовим URL-ом (од енгл. Universal Resource Locator, што значи „Универзални локатор ресурса”).

 

Ево примера:

 

 

import pandas as pd

Top_25 = pd.read_csv(“https://petljamediastorage.blob.core.windows.net/root/Media/Default/Kursevi/informatika_VIII/podaci/Top25YouTubers.csv”)

Прикажимо првих неколико редова ове табеле. Функција head(N) приказује првих N редова табеле (енгл. head значи „глава”). Ако функцију позовемо без броја она ће приказати првих пет редова:

Top25.head()

 

 

Прикажимо првих неколико редова ове табеле. Функција head(N) приказује првих N редова табеле (енгл. head значи „глава”). Ако функцију позовемо без броја она ће приказати првих пет редова:

 

Top25.head()

 

Top25.head(10)

 

Функција tail(N) приказује последњих N редова табеле, односно, последњих пет редова ако је позвемо без аргумента (енгл. tail значи „реп”):

 

Top25.tail()

 

Прикажимо податке о броју претплатника стубичастим дијаграмом:

plt.figure(figsize=(15,10))

plt.bar(Top25[“NAME”], Top25[“SUBSCRIBERS”])

plt.title(“Top 25 YouTube kanala prema broju pretplatnika”)

plt.show()

 

 

Пошто су имена канала веома дугачка на хоризонталној оси се ништа не види. Зато ћемо уместо функције bar позвати функцију barh која ради исти посао, али стубиће исцртава хоризонтално:

 

plt.figure(figsize=(10,10))

plt.barh(Top25[“NAME”], Top25[“SUBSCRIBERS”])

plt.title(“Top 25 YouTube kanala prema broju pretplatnika”)

plt.show()

 

 

Пример.

На адреси

https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv

се налази јавно доступан списак свих држава на свету. Ову табелу можемо лако учитати наредбом read_csv

drzave = pd.read_csv(“https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv”)

drzave.head(10)

 

 

////////////////////////////////////////////////////////////////////////////////////////////////

Ivan tabele

Ime , Pol , Starost , Masa ,Visina

podaci = [[“Ana”,     “ž”, 13, 46, 160],

[“Bojan”,   “m”, 14, 52, 165],

[“Vlada”,   “m”, 13, 47, 157],

[“Gordana”, “ž”, 15, 54, 165],

[“Dejan”,   “m”, 15, 56, 163],

[“Đorđe”,   “m”, 13, 45, 159],

[“Elena”,   “ž”, 14, 49, 161],

[“Žaklina”, “ž”, 15, 52, 164],

[“Zoran”,   “m”, 15, 57, 167],

[“Ivana”,   “ž”, 13, 45, 158],

[“Jasna”,   “ž”, 14, 51, 162]]

 

podaci[5]

[‘Đorđe’, ‘m’, 13, 45, 159]

 

Pretvaramo listu u data frame ili tabelu

import pandas as pd

 

tabela1 = pd.DataFrame(podaci)

 

tabela1

 

 

 

prikazujemo kolonu sa imenima. Redovi i kolone imaju svoje indekse.

tabela1[0]

 

0         Ana

1       Bojan

2       Vlada

3     Gordana

4       Dejan

5       Đorđe

6       Elena

7     Žaklina

8       Zoran

9       Ivana

10      Jasna

Name: 0, dtype: object

 

ako želimo telesne mase:

 

tabela1[3]

 

0     46

1     52

2     47

3     54

4     56

5     45

6     49

7     52

8     57

9     45

10    51

Name: 3, dtype: int64

 

Dohvatamo red:

tabela1.loc[5]

 

0    Đorđe

1        m

2       13

3       45

4      159

Name: 5, dtype: object

 

tabela1.columns

RangeIndex(start=0, stop=5, step=1)

 

zadajemo imena kolona:

 

tabela1.columns = [“ime”, “pol”, “godine”, “masa”, “visina”]

tabela1

 

 

 

tabela1[“godine”]

 

0     13

1     14

2     13

3     15

4     15

5     13

6     14

7     15

8     15

9     13

10    14

Name: godine, dtype: int64

 

Indekse redova imenujemo:

 

tabela1.index

 

RangeIndex(start=0, stop=11, step=1)

 

Napravimo indekse od imena u koloni

tabela1.set_index(“ime”)

 

Dobijamo staru tabelu

 

tabela1

 

tabela2 = tabela1.set_index(“ime”)

 

tabela2

 

 

Prikaz podataka u redu:

tabela2.loc[“Đorđe”]

 

pol         m

godine     13

masa       45

visina    159

Name: Đorđe, dtype: object

 

tabela2[“masa”].sum()

554

 

masa_grupe=tabela2[“masa”].sum()

masa_grupe

554

 

tabela2[“visina”].max()

167

 

tabela2[“visina”].min()

157

 

aritmetička sredina

 

tabela2[“visina”].mean()

161.9090909090909

 

 

 

import matplotlib.pyplot as plt

 

tabela1[“ime”]

 

0         Ana

1       Bojan

2       Vlada

3     Gordana

4       Dejan

5       Đorđe

6       Elena

7     Žaklina

8       Zoran

9       Ivana

10      Jasna

Name: ime, dtype: object

 

 

tabela2.index

 

Index([‘Ana’, ‘Bojan’, ‘Vlada’, ‘Gordana’, ‘Dejan’, ‘Đorđe’, ‘Elena’,

‘Žaklina’, ‘Zoran’, ‘Ivana’, ‘Jasna’],

dtype=’object’, name=’ime’)

 

 

plt.plot(tabela1[“ime”], tabela1[“masa”])

 

Histogram

plt.bar(tabela1[“ime”], tabela1[“masa”])

plt.show()

 

plt.bar(tabela1[“ime”], tabela1[“masa”])

plt.plot(tabela1[“ime”], tabela1[“godine”])

plt.show()

 

 

 

plt.bar(tabela1[“ime”], tabela1[“masa”])

plt.plot(tabela1[“ime”], tabela1[“godine”], color=”r”)

plt.show()

 

 

plt.bar(tabela1[“ime”], tabela1[“masa”])

plt.bar(tabela1[“ime”], tabela1[“godine”], color=”r”)

plt.show()

 

 

///////////////////////////////////////////////////////////////////////////

Ivan: Jupyter Notebook – vežbanje pre ocenjivanja 2

https://www.youtube.com/watch?v=TMPzVOwROJY

 

https://petlja.org/

kartica: Biblioteka

opcija:Za učenike

zelena kartica: Informatika I računarstvo VIII razred

Табеларно представљени подаци:

https://petlja.org/biblioteka/r/lekcije/jupyter-prirucnik/tabelarno-predstavljeni-podaci

 

 

ucenici = [[“Ана”,     “ж”, 13, 46, 160],

[“Бојан”,   “м”, 14, 52, 165],

[“Влада”,   “м”, 13, 47, 157],

[“Гордана”, “ж”, 15, 54, 165],

[“Дејан”,   “м”, 15, 56, 163],

[“Ђорђе”,   “м”, 13, 45, 159],

[“Елена”,   “ж”, 14, 49, 161],

[“Жаклина”, “ж”, 15, 52, 164],

[“Зоран”,   “м”, 15, 57, 167],

[“Ивана”,   “ж”, 13, 45, 158],

[“Јасна”,   “ж”, 14, 51, 162]]

 

 

Ucenici

 

[[‘Ана’, ‘ж’, 13, 46, 160],

[‘Бојан’, ‘м’, 14, 52, 165],

[‘Влада’, ‘м’, 13, 47, 157],

[‘Гордана’, ‘ж’, 15, 54, 165],

[‘Дејан’, ‘м’, 15, 56, 163],

[‘Ђорђе’, ‘м’, 13, 45, 159],

[‘Елена’, ‘ж’, 14, 49, 161],

[‘Жаклина’, ‘ж’, 15, 52, 164],

[‘Зоран’, ‘м’, 15, 57, 167],

[‘Ивана’, ‘ж’, 13, 45, 158],

[‘Јасна’, ‘ж’, 14, 51, 162]]

 

import pandas as pd

 

tabela = pd.DataFrame(ucenici)

 

 

 

 

tabela.columns=[“Име”, “Пол”, “Старост”, “Тежина”, “Висина”]

tabela

 

 

tabela.head()

tabela.tail()

 

tabela[“Старост”]

tabela[“Старост”].head()

tabela.loc[3]

tabela[[“Старост”,”Висина”]]

tabela.loc[5]

 

tabela.loc[5, “Висина”]

159

 

tabela.loc[3:8]

 

tabela.loc[3:8, “Висина”]

 

tabela.loc[3:8, “Тежина”:”Висина”]

 

tabela[“Старост”].max()

15

 

tabela[“Старост”].min()

13

 

tabela[“Старост”].mean()

14.0

 

tabela[“Старост”].count()

11

 

tabela[“Старост”].median()

14.0

 

tabela1 = tabela.set_index(“Име”)

tabela

import matplotlib.pyplot as plt

 

plt.figure(figsize=(10,5))

plt.bar(tabela[“Име”], tabela[“Висина”])

plt.title(“Висина деце у групи”)

plt.show()

plt.close()

 

 

plt.figure(figsize=(10,5))

plt.bar(tabela[“Име”], tabela[“Тежина”], label=”Težine”)

plt.plot(tabela[“Име”], tabela[“Старост”], color=”r”, label=”Starost”)

plt.title(“Висина деце у групи”)

plt.ylabel(“Тежине деце у групи”)

plt.xlabel(“Имена деце”)

plt.legend()

plt.show()

plt.close()

 

 

tabela1

 

plt.figure(figsize=(10,5))

plt.bar(tabela1.index, tabela1[“Тежина”], label=”Težine”)

plt.plot(tabela1.index, tabela1[“Старост”], color=”r”, label=”Starost”)

plt.title(“Висина деце у групи”)

plt.ylabel(“Тежине деце у групи”)

plt.xlabel(“Имена деце”)

plt.legend()

plt.show()

plt.close()

 

 

t2 = pd.read_csv(“https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv”)

 

t2

 

 

tabela1[“nova_kolona”]=0

tabela1

 

tabela1.loc[“novi_red”]=1

tabela1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

///////////////////////////////////////////////////////////////////////////