Представљање низова података¶
Дескриптивна статистика¶
Дескриптивна статистика је стручни назив за низ различитих мера којима описујемо одређени скуп података. Замислимо скуп у ком су записани бројеви ципела свих ученика у једном одељењу. Ми ћемо, једноставности ради, унети измишљене податке за једно мање одељење. Ви можете лако да унесете праве вредности за ваше одељење.
Мере којима описујемо овакав скуп података углавном се тичу интервала вредности, просека и растура. Број елемената низа, минимум и максимум описују интервал у ком се налазе записане вредности. За описивање просека или типичне вредности најчешће узимамо средњу вредност (аритметичку средину) или медијану. За описивање растура, тј. очекиваног одступања појединачних вредности од просека, користимо максимално апсолутно одступање или стандардну девијацију.
Све ове мере посебно су важне код мерења. У природним наукама се скуп измерених вредности \(\{x_1,x_2,x_3...x_n\}\) најчешће приказује као \(\bar{x}\pm\sigma_x\) при чему је \(\bar{x}\) средња вредност за цео скуп, док је \(\sigma_x\) стандардна девијација овог скупа измерених вредности.
Мере за описивање просека¶
Пајтон у стандардној библиотеци има функције за број елемената, минимум и максимум, али нема функције за рачунање средње вредности или медијане. Ваш први задатак ће бити да напишете функције које то раде. Пошто ћемо све функције које су постављене као задаци у овој лекцији одмах примењивати, решења су дата одмах испод задатака. Ако не морате, немојте гледати у решења. Слободно решите задатак на други начин.
Средња вредност или аритметичка средина рачуна се као збир свих вредности у низу подељен са дужином низа. Аритметичка средина се рачуна по формули
Ова формула је само формални математички начин да запишемо да треба сабрати све вредности у низу и тај збир поделити са бројем елемената низа.
Напишите функцију која враћа средњу вредност низа бројева.
Медијана је вредност средишњег елемента сортираног низа. Ако је број елемената у низу непаран, онда је то баш вредност средишњег елемента. Ако је број елемената паран, онда је медијана средња вредност за пар елемената у средини.
Напишите функцију која враћа медијану низа бројева.
Да видимо сада колико износе средња вредност и медијана низа бројева у
листи bc.
Мере за описивање растура¶
За описивање низа бројева, сем просечне вредности, потребно нам је да знамо и колико појединачне вредности одступају од тог просека. Други назив за одступање од просека је девијација. Постоје различите мере одступања. Најједноставнија је максимална апсолутна девијација. Јасно вам је да девијације могу да буду позитивне и негативне у зависности од тога да ли је вредност већа или мања од просека. За меру растура свеједно је да ли је одступање са доње или горње стране. Зато нас интересује апсолутна вредност одступања.
Напишите функцију која враћа, по апсолутној вредности, највеће одступање од средње вредности.
Употребимо сада ову функцију на нашем низу bc
Статистичари кажу да је стандардна девијација боља мера растура. Зашто је то тако нећемо објашњавати у приручнику за Пајтон, боље погледајте уџбеник статистике или обраде резултата мерења. Нама је овде важније да знамо да је израчунамо. Не дајте да вас обесхрабри рогобатна формула. Она се лако претвара у алгоритам.
Стандардна девијација се рачуна као квадратни корен средњег квадратног одступања, тј. као
Ова формула значи да сабирамо квадрате одступања за све елементе низа, да тај збир онда делимо са \(𝑛−1\) и да, коначно, из тог количника вадимо квадратни корен.
Напишите функцију која враћа стандардну девијацију низа бројева.
Коначно, имамо и средњу вредност и стандардну девијацију па низ бројева ципела можемо да прикажемо онако како би то научници урадили: као средња вредност ± стандардна девијација.
На крају ове приче о дескриптивној статистици треба да знате да ове функције постоје у библиотекама као што су pandas или numpy. Нисмо хтели сад да их користимо као готове јер је било важније да знате како се израчунавају.
Фреквенцијска анализа¶
Препоручујемо да примере из ове лекције покренеш на свом рачунару тако што ћеш у пакету фајлова за вежбу покренути Џупитер свеску 05_predstavljanje_nizova.ipynb, или тако што ћеш отићи на овај линк и тамо радити задатке. За детаљније инструкције погледај поглавље Фајлови за вежбу и коришћење Џупитер окружења.
За било који нумерички или знаковни низ можемо да урадимо статистику појављивања појединачних вредности. Кад бројеви узимају вредности само из мањег скупа тачно одређених вредности, фреквенцијска анализа има више смисла. Бројеви ципела за ученике једног одељења управо је пример таквог (дискретног) скупа вредности.
Овде ћемо показати како распон од најмањег до највећег познатог броја ципела можемо да претворимо у интервал целих бројева за које пребројавамо колико су се пута појавили.
mn=min(bc)
mx=max(bc)
interval=list(range(mn,mx+1)) # prvo pravimo 'range' od mn do mx pa ga pretvaramo u listu
bp=[] # lista sa brojem pojavljivanja je na početku prazna
for i in interval: # za svaki broj iz intervala
broj_pojavljivanja=bc.count(i) # prebrojavamo koliko se puta pojavljuje
bp.append(broj_pojavljivanja) # taj broj dodajemo listi bp
print(i,broj_pojavljivanja)
36 1
37 2
38 3
39 3
40 1
41 1
42 1
43 4
44 2
45 1
46 0
47 1
Одавде видимо који су бројеви ципела чешћи од других. Ципеле број 43 има највећи број ученика. То би могла да буде корисна информација трговцима који набављају ципеле за средњошколце. Мера која нам даје вредност променљиве која се у узорку појављује највећи број пута назива се мод. Пајтон у стандардној библиотеци нема ову функцију, али је библиотеке за анализу података имају. Да ли бисте могли да напишете функцију која враћа мод? Имајте у виду да различите вредности могу да имају исти број појављивања. Тада низ података има више модова.
Из табеларног приказа није сасвим лако видети расподелу фреквенција. Боље би било да их прикажемо графички. Ево како су такав задатак решавали људи пре педесет година кад су рачунске машине штампале само карактере. Једноставно, за сваку вредност приказивали су један исти карактер онолико пута колико колика им је фреквенција. Најлакше је било да за сваку вредност карактере прикажу у посебном реду.
for i in range(len(interval)):
print(interval[i],"#"*bp[i])
36 #
37 ##
38 ###
39 ###
40 #
41 #
42 #
43 ####
44 ##
45 #
46
47 #
Видите ли да овде не постоји једна доминантна вредност око које се остале гомилају? Изгледа као да ова раподела има два „пика“ или мода: један за величине 38-39, а други за 43. Истина, ципеле број 43 се најчешће појављују, али не знамо да ли би тако остало и да имамо већи узорак, тј. да смо прикупили податке од свих ученика једног разреда. На овој раподели видимо два брдашца или брега. Расподеле које изгледају као два одвојена брега називамо бимодалним. Биће да овде имамо преклопљене две расподеле и да један мод одговара женским, а други мушким ципелама. То би, такође, могла да буде корисна информација трговцима који набављају обућу за средњошколце.
Ово је била претеча графичког приказивања фреквенција одређених вредности података. Тако су људи и руком на папиру радили. Ми данас не морамо тако. Имамо на располагању много бољу хардвер. Пајтон има функције које то могу да искористе.