Professional Documents
Culture Documents
27. час_8. разред_Рад са индексираним табелама
27. час_8. разред_Рад са индексираним табелама
27. час_8. разред_Рад са индексираним табелама
Подсетник:
Најједноставнији начин да отвориш Џупитер интерактивне радне свеске које прате овај курс је
да ПРЕКОПИРАШ следећи линк у адресно поље твог интернет претраживача:
https://mybinder.org/v2/gh/Petlja/Informatika_VIII-files/master
На овом часу ћемо се подсетити преуређивања редова табеле али и проширити знања о:
1. преуређивању редова табеле како би се поређали по величини по неком критеријуму
(сортирање);
2. издвајању редова табеле који задовољавају неке услове (филтрирање); и
3. бројању редова табеле који имају неке особине (фреквенцијска анализа).
Индексирање
Да бисмо могли да радимо са редовима табеле треба прво да нађемо једну колону чија вредност
једнозначно одређује цео ред табеле.
-колона "Висина" није погодна јер имамо двоје деце са висином 165, па када кажемо "дете са
висином 165" није јасно о коме се ради (није једнозначно одређено);
Она колона која јесте погодна се зове „кључ“ јер је она кључна за приступање редовима табеле.
Ако желимо да приступамо елементима табеле по редовима, морамо систему да пријавимо коју
колону ћемо користити као кључ.
То се постиже позивом функције set_index којој проследимо име колоне, а она врати нову табелу
"индексирану по датом кључу":
import pandas as pd
podaci = [["Ана", "ж", 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]]
tabela = pd.DataFrame(podaci)
tabela.columns=["Име", "Пол", "Старост", "Тежина", "Висина"]
tabela1=tabela.set_index("Име")
Нова табела (tabela1) се од старе (tabela)
разликује само по томе што редови више нису индексирани бројевима (0, 1, 2, ...)
Ево старе (неиндексиране табеле) која има колону "Име" и чији редови су индексирани бројевима:
tabela1
Колона "Име" је и даље присутна у табели tabela1, али има посебан статус.
Ако унесемо:
tabela1.index
Ако желимо да прикажемо висину деце у групи графиконом тако да имена деце буду на
хоризонталној оси, то сада можемо урадити овако:
Ако унесемо
Ознаке на хоризонталној оси узимамо из индексне колоне tabela1.index, док податке о висини
стубића узимамо из колоне tabela1["Висина"].
Пошто су вредности на графикону блиске не уочавају се најјасније вредности па ћемо их у
горњем делу „развући“ уводећи лимитирану вредност за приказ функцијом „ ylim“ ( лимит
по y оси).
plt.ylim(150,170)
Ако унесемо:
tabela1.loc["Дејан"]
Као аргумент функције loc можемо да наведемо и распон, и тако ћемо добити одговарајући
део табеле:
Ако унесемо:
tabela1.loc["Дејан":"Зоран"]
Ако као други аргумент функције loc наведемо име колоне, рецимо овако:
tabela1.loc["Дејан", "Висина"]
tabela1.loc["Дејан", "Висина"]
tabela1.loc["Дејан":"Зоран", "Тежина":"Висина"]
Рачунање по врстама и колонама табеле
Кренимо од једног примера. У ћелији испод дате су оцене неких ученика из српског, енглеског,
математике, физике, хемије и ликовног:
Ако унесемо:
па ћемо унети
ocene = pd.DataFrame(razred)
ocene.columns=["Име", "Српски", "Енглески", "Математика", "Физика", "Хемија",
"Ликовно"]
ocene1 = ocene.set_index("Име")
ocene1
Ако желимо да израчунамо просек по предметима, треба на сваку колону ове табеле да применимо
функцију mean. ( просечна вредност mean( ) )
ocene1.columns,
па сада само треба да прођемо кроз ову листу и за сваку колону да израчунамо просек:
Да бисмо израчунали просечне оцене сваког ученика функцију mean ћемо применити на врсте
табеле које добијамо позивом функције loc.
Списак свих ученика се налази у индексној колони, па просеке по свим ученицима можемо да
израчунамо овако:
Задатак 1. Ученици осмог разреда једне школе су анкетирани о томе коју врсту филмова најрадије
гледају. Подаци анкете су дати у следећој табели (у коју нису унети неважећи и бесмислени
одговори):
(а) Формирај одговарајућу табелу позивом функције DataFrame. Индексирај табелу колоном "Жанр".
(б) Израчунај и испиши колико гласова је добио сваки од наведених жанрова.
(в) За свако одељење израчунај и испиши колико је било валидних гласова.
(г) Колико је укупно ученика осмих разреда учествовало у анкетирању? (Рачунамо само ученике
који су дали валидне одговоре на анкету.)
(а) Милош је за доручак појео два парчета белог хлеба и попио шољу млека.
Свако парче хлеба је било намазано павлаком и имало је један шнит пршуте.
Колика је енергетска вредност Милошевог доручка (у kcal), ако претпоставимо:
- да једно парче хлеба има 100 г,
- да је за мазање једног парчета хлеба довољно 10 г премаза,
- да један шнит пршуте има 20г. ,и
- да шоља млека има 2 дл (што је приближно 200 г)?
(в) Прикажи линијским дијаграмом количину угљених хидрата у намирницама наведеним у табели.