Фреквенцијска анализа и секторски дијаграми¶
У овој лекцији ћеш научити:
како да извршиш фреквенцијску анализу низа података (што је једно компликовано име за једну веома једноставну и корисну ствар); и
како да прикажеш заступљеност неких величина на секторском дијаграму.
Фреквенцијска анализа низа података¶
Фреквенцијска анализа низа података се своди на то да се преброје подаци у низу и да се на основу тако добијених фреквенција података покуша доћи до неког закључка (реч фреквенција значи „учесталост”). На пример, у једном разреду има 30 ученика и њихове оцене из информатике су дате у следећем низу:
In [1]: oceneInf = [3, 4, 5, 4, 5, 3, 4, 5, 2, 4, 5, 4, 5, 4, 2, 3, 1, 4, 5, 4, 3, 2, 3, 4, 5, 4, 5, 5, 4, 3]
Фреквенцијска анализа овог низа се своди на то да се утврди колико има петица, четворки, тројки, двојки и јединица у том разреду. Уместо да то урадимо ручно (рецимо, да направимо табелицу па да „лупамо рецке”), пустићемо Пајтон да то уради за нас. Пајтон има уграђену функцију count
која може да преброји колико пута се у некој листи јавља неки елемент:
In [2]: ocena5 = oceneInf.count(5)
...: ocena4 = oceneInf.count(4)
...: ocena3 = oceneInf.count(3)
...: ocena2 = oceneInf.count(2)
...: ocena1 = oceneInf.count(1)
...: print("Ocene u razredu su raspodeljene kako sledi:")
...: print("Ocenu 5 ima", ocena5, "ucenika")
...: print("Ocenu 4 ima", ocena4, "ucenika")
...: print("Ocenu 3 ima", ocena3, "ucenika")
...: print("Ocenu 2 ima", ocena2, "ucenika")
...: print("Ocenu 1 ima", ocena1, "ucenika")
...:
Ocene u razredu su raspodeljene kako sledi:
Ocenu 5 ima 9 ucenika
Ocenu 4 ima 11 ucenika
Ocenu 3 ima 6 ucenika
Ocenu 2 ima 3 ucenika
Ocenu 1 ima 1 ucenika
За сваку оцену смо одредили колико се пута појавила у листи и добили смо податке у апсолутним износима.
Ако желимо да одредимо релативне односе бројева оцена, добијене бројеве ћемо исказати у процентима:
In [3]: ukupno = len(oceneInf)
...: procenat5 = 100.0 * ocena5 / ukupno
...: procenat4 = 100.0 * ocena4 / ukupno
...: procenat3 = 100.0 * ocena3 / ukupno
...: procenat2 = 100.0 * ocena2 / ukupno
...: procenat1 = 100.0 * ocena1 / ukupno
...: print("Ocene u razredu su raspodeljene kako sledi:")
...: print("Ocenu 5 ima ", round(procenat5, 2), "% ucenika", sep="")
...: print("Ocenu 4 ima ", round(procenat4, 2), "% ucenika", sep="")
...: print("Ocenu 3 ima ", round(procenat3, 2), "% ucenika", sep="")
...: print("Ocenu 2 ima ", round(procenat2, 2), "% ucenika", sep="")
...: print("Ocenu 1 ima ", round(procenat1, 2), "% ucenika", sep="")
...:
Ocene u razredu su raspodeljene kako sledi:
Ocenu 5 ima 30.0% ucenika
Ocenu 4 ima 36.67% ucenika
Ocenu 3 ima 20.0% ucenika
Ocenu 2 ima 10.0% ucenika
Ocenu 1 ima 3.33% ucenika
Дакле, фреквенцијска анализа нам даје вредности у конкретном износу (рецимо, у разреду има 9 петица, 11 четворки и тако даље). Ако ове податке представимо процентима добијамо податке који нам говоре о заступљености оцена у релативним односима.
Тако, у овом разреду има 30% петица (9 / 30 = 30%), 36,67% четворки (11 / 30 = 36,67%), 20% тројки (6 / 30 = 20%), 10% двојки (3 / 30 = 10%) и 3,33% јединица (1 / 30 = 3,33%).
Секторски дијаграми¶
У ситуацијама када се приказује колико процената које компоненте учествује у саставу неке целине погодно је податке приказати секторским дијаграмом који представља круг исечен на исечке попут пице. Круг тада представља целину (100%), док исечци представљају компоненте које учествују у целини исказане у процентима.
На пример, оцене из информатике су у једном разреду са 30 ученика расподељене овако:
Оцена |
Заступљеност оцене |
---|---|
5 |
9 |
4 |
11 |
3 |
6 |
2 |
3 |
1 |
1 |
Податке из ове табеле ћемо илустровати секторским дијаграмом. Прво ћемо увести библиотеку:
In [4]: import matplotlib.pyplot as plt
Онда ћемо податке записати помоћу два низа овако:
In [5]: frekvencije = [9, 11, 6, 3, 1]
...: ocene = ["5", "4", "3", "2", "1"]
...:
И сада можемо да пређемо на представљање података дијаграмом. Функција која податке представља секторским дијаграмом се зове pie
зато што се у америчком сленгу секторски дијаграми зову pie charts = „тортасти дијаграми”. Први аргумент представља низ вредности, док се другим задају ознаке (енгл. label = ознака:):
In [6]: plt.figure(figsize=(6,6))
...: plt.pie(frekvencije, labels=ocene)
...: plt.title("Оцене из информатике")
...: plt.show()
...:

Ако желимо да нагласимо број петица у разреду можемо одговарајући сектор да „измакнемо” мало из средишта. То се постиже аргументом explode
функције pie
који за сваки податак у низу каже колико треба да га измакнемо из средишта (0 = не треба изместити сектор из средишта дијаграма; што је већи број, то је и измештање веће).
In [7]: 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("Оцене из информатике")
...: plt.show()
...:

Као други пример посматрајмо структуру наше атмосфере. Наша атмосфера је смеша разних гасова, а сув ваздух има следећи састав:
Гас |
Заступљеност (%) |
---|---|
Азот |
78,08 |
Кисеоник |
20,94 |
Аргон |
0,93 |
Угљен диоксид |
0,05 |
Важно је напоменути да ово није тачан састав наше атмосфере: у њој има и других гасова, али у траговима (како то хемичари воле да кажу) па они нису приказани у табели.
Структуру атмосфере ћемо представити секторским дијаграмом овако:
In [8]: procenti = [78.08, 20.94, 0.93, 0.05]
...: oznake = ["Азот", "Кисеоник", "Аргон", "Угљен диоксид"]
...: plt.figure(figsize=(8,7))
...: plt.pie(procenti, labels=oznake)
...: plt.title("Састав наше атмосфере")
...: plt.show()
...:

Опет наилазимо на проблем: ознаке за последња два податка су се преклопиле јер се ради о веома уском секторима. Да бисмо решили проблем можемо још више да повећамо дијаграм, а можемо пробати и да последња два „мала” сектора „измакнемо” из средишта, овако:
In [9]: procenti = [78.08, 20.94, 0.93, 0.05]
...: oznake = ["Азот", "Кисеоник", "Аргон", "Угљен диоксид"]
...: izmestanje = [0, 0, 0.75, 0.75]
...: plt.figure(figsize=(12,7))
...: plt.pie(procenti, labels=oznake, explode=izmestanje)
...: plt.title("Састав наше атмосфере")
...: plt.show()
...:

Ево и кратког видеа који илуструје оно што смо до сада видели:
Задаци¶
За вежбу покрени Џупитер окружење и реши задатке из радне свеске J05.ipynb