У овој лекцији упознаћемо се са програмским језиком Пајтон и Џупитер окружењем које ћемо на даље користити за аутоматску обраду података.¶
Овај приручник се заснива на радној претпоставци да сте већ усвојили основе програмског језика Пајтон. Разумна претпоставка је, међутим, да нисте и да се са њим тек сада сусрећете. Ми ћемо се држати неразумне радне претпоставке и брзо кренути са коришћењем Пајтона рачунајући на то да ћете ствари учити у лету. Спремни?
Нама је заправо најбитније да у Пајтону обрађујемо податке. Много података може да се обради ручно, тј. тако што кроз поступак пролазимо кликћући мишем по екрану, али кад број таквих кликова постане стварно велики, посао морамо да аутоматизујемо и поверимо програму. Од вас нико не очекује да програмирате већ да програмски код написан у Џупитер свескама користите. Уколико касније напишете неку програмску линију самостално, то ће бити успех само по себи.
У овом уводу ћемо само представити основне појмове који су нам потребни за рад. Како то све функционише, видећете кроз примере. Из примера се свакако неће видети које су вам све опције на располагању. За то је потребан додатни рад. Ако дотле стигнете, то ће значити да сте већ на напредном нивоу.
О Џупитеру¶
У Џупитар окружењу ваше анализе података организујете у радне свеске. Радна свеска је документ који у себи садржи текст, формуле и графиконе. При томе су формуле заправо изрази и команде у програмском језику Пајтон. У оквиру радне свеске можете да интерактивно извршавате команде и на тај начин спроводите анализу, а на крају радна свеска уједно може да представља и документ о анализи коју сте направили.
Пример како изгледа једна радна свеска је управо лекција коју читате. Ниже у тексту можете видети и поља са формулама, тј. Пајтон командама. При томе ви тренутно гледате веб страну која представља "замрзнут" садржај радне свеске и не можете директно у овој веб страни да мењате поља и извршавате их. Да бисте то могли, потребно је да уђете у Џупитер окружење и користите примере радних свески које смо вам припремили. Уколико сте државни службеник можете добити приступ Data Science платформи државне управе и онда не морате ништа да инсталирате на свом рачунару, а чак ће и примери радних свезака већ бити доступни када се улогујете на Data Science платформу. Детаљније инструкције о коришћењу Џупитер окружења и примера радних свезака налазе се у додатку овог приручника Коришћење Џупитер (Jupyter) окружења.
Отворите у Џупитер окружењу пример радне свеске 1 Ekspresni uvod u obradu podataka u Pajtonu.ipynb. У њој се налазе примери из ове лекције. Ако прелетите погледом преко те свеске видећете да се она састоји из текста и низа нумерисаних поља у којима или ми уносимо инструкције или рачунар даје одговор на то што смо тражили. У поља испред којих пише "In" уносимо кôд у Пајтону. У зависности од подешавања окружења, реч "In" може бити изостављена, али ћете приметити редни број у угластим заградама и уоквирено поље. Када дамо сигнал рачунару да изврши тај кôд, што обично чинимо притискајући истовремено CTRL и Enter на тастатури, у пољу испод се појави резултат. Испред тог поља ће стајати "Out" са истим бројем у угластим заградама као input поље. Сваки следећи пут када извршимо инструкцију дату у неком "In" пољу, број у угластим заградама оба поља ће се повећати за један.
Поље са текстом и са кодом¶
У отвореној свесци у Џупитер окружењу пробајте да дупло кликнете на неки пасус са текстом. Поље са текстом ће прећи у режим уређивања текста и текст можете да мењате. Након што сте изменили текст притисните истовремено CTRL и Enter на тастатури и поље са текстом ће се вратити у приказ за читање.
За поље са кодом је довољно да једном кликнете унутар поља и одмах можете да је едитујете. У случају поља са кодом CTRL+Enter извршава код.
Ново поље испод тренутно селектованог додајете кликом да дугме са знаком + у линији са алатима која се налази непосредно изнад приказа садржаја радне свеске. На тај начин додајете поље са кодом. Након додавања тип поља можете да промените користећи падајућу листу у линији са алатима. Опција Code у падајућој листи означава поље са кодом, а опција Markdown означава поље са текстом.
У радној свестци која вам је отворена у Џупитер окружењу пробајте да додате поље са кодом, затим у то поље унесете израз 2+2 и извршите унесен кôд помоћу CTRL+Enter. Резултат би требало да буде:
2 + 2
Ако тип поља промените из Code у Markdown (поље са текстом) добићете:
2 + 2
Ако желите да избришете поље које сте додали, селектујте га (довољно је да кликнете било где у оквиру поља) и затим кликните на дугме са сличицом маказа у линији са алатима.
У отвореној свесци у Џупитер окружењу пробајте неколико пута да додајете и бришете поља, мењате тип, уносите текст и формуле извршавате и слично.
Вероватно ће вам се десити да омашком поље остане типа Code а ви уносите текст и онда добијете поруку о грешци попут:
Ово је текст унет у пољу за кôд
Ако вам се то деси само промените тип поља у падајућој листи у линији са алатима.
Типови података¶
Основни типови података у Пајтону су цео број (int), децимални број (float), текст (str) и вредност логичког исказа (boolean). Комбинацијом основних типова променљивих можемо да добијемо сложеније типове. Функција type() нам приказује тип променљиве.
type(5)
type(5.1)
type("Пајтон")
type(True)
Имајте у виду да рачунске операције и функције за рад са подацима не раде исто за све типове променљивих. Неке операције чак раде и са различитим типовима. Погледајте примере.
2+2
"рачунске"+"операције"
Структуре података¶
Структура података је начин на који податке организујемо и чувамо у меморији рачунара како бисмо тим подацима по потреби приступали. То могу да буду појединачни подаци, њихови низови, табеле или нешто још сложеније. Базе података податке чувају у табелама. Програмски језици имају мноштво различитих структура. Најједноставније структуре су, наравно, саме променљиве. Променљивама увек дамо неко име и доделимо јој бројчану, текстуалну или логичку вредност. Неки програмски језици инсистирају да напишемо ког је типа променљива. Пајтон није такав, он покушава да погоди тип променљиве на основу онога што смо унели као вредност. Број 5 је број, а текст "5" је текст.
Листе¶
Када података под истим именом има више, онда нам је потребна сложенија структура. Једнодимензионалне структуре података које најчешће користимо у Пајтону су листе. То су најопштији низови података који не морају да буду истог типа.
lista=[2, "други елемент", 2==2, 19.4]
lista
type(lista)
Елементима листе се приступа преко индекса елемента. Пошто Пајтон елементе нумерише почевши од нултог, први елемент листе има индекс 0, други има индекс 1 итд.
lista[0]
Ако хоћете да додате елемент листи, то можете да урадите помоћу функције append() или једноставно да додате елемент са + [нови елемент]. За уметање елемента на одређено место у листи можете да користите insert() мада је и ово једноставније помоћу индекса.
lista.append("пети елемент")
# или
# lista=lista+["пети елемент"]
Обратите пажњу на нетипичан начин на који се у Пајтону позива функција -- иза имена променљиве ставимо тачку и име функције.
lista
lista[2]=False
lista
DataFrame¶
За дводимензионалне податке (табеле) најчешће користимо DataFrame. Основно окружење Пајтона нема тип DataFrame и функције за рад са овом структуром. Неопходно је да учитамо библиотеку pandas која садржи све што нам је неопходно.
import pandas as pd
Приметите да смо учитали pandas библиотеку и назвали је pd. Ово смо учинили да бисмо касније мање куцали при позивању функција ове библиотеке. Свака функција из библиотеке Pandas се позива са pd.+назив функције. Видећете касније на примерима како то функционише.
Сада ћемо направити једну једноставну табелу. DataFrame можемо да формирамо тако што направимо листу листа па онда резултат претворимо у DataFrame уз помоћ истоимене функције.
lista2=[["Београд", "BG", 11000],
["Нови Сад", "NS", 21000],
["Ниш", "NI", 18000]]
lista2
df=pd.DataFrame(lista2)
df
Поља у различитим колонама ове табеле могу садржати различите типове променљивих. У нашем примеру две колоне садрже текстове, а једна бројеве.
Видимо да Пајтон ставља ознаке за колоне и редове иако то нисмо тражили. Ако нам се не свиђају, боље је да наведемо називе колона при креирању структуре df.
Назив колоне у табели може да буде било који текст, али то није препоручљиво. Из практичних разлога добро је да називи колона буду кратки, по могућству да то буде само једна реч. Има функција које чак не раде како треба ако назив колоне није једна реч. Зато је некад добро преименовати колоне пре обраде података.
df=pd.DataFrame(lista2,columns=['Grad',"Auto_oznaka","Poštanski_broj"])
df
Да бисмо издвојили неку колону, довољно је да уз име табеле ставимо тачку и наведемо њен назив.
df.Auto_oznaka
Алтернативно, можемо да наведемо назив колоне као индекс у угластим заградама.
df['Auto_oznaka']
Колоне и редови увек имају своје ознаке, макар биле и бројеви 0, 1, 2... То нам олакшава да приступимо подацима у табели.
Постоји неколико начина како да приступимо елементима табеле. Наводимо овде два примера која би требало да буду разумљиви и без посебног објашњења.
df.Grad[2]
df['Grad'][2]
iloc[] је посебна врста функције (accessor) која нам омогућава да елементима табеле приступимо на још један начин. Њени аргументи су индекси редова и колона.
df.iloc[2,0]
Подаци о подацима¶
За рад са подацима нам је увек згодно да знамо још нешто о томе шта представљају, како су спаковани, одакле долазе итд. Податке о подацима зовемо метаподаци. Конкретно, у Пајтону постоје подаци за све структуре у којима чувамо податке. Када учитамо нове податке важно нам је да видимо колико имају редова и колона, ког су типа, колико меморије заузимају итд.
За разне метаподатке о табели постоји низ функција садржаних у библиотеци pandas. Ево неколико примера:
- columns називи колона
- index називи редова
- ndim број димензија табеле
- shape број редова и колона табеле
- info() преглед основних информација
- memory_usage() потрошња меморије
df.shape
Ово је био врло кратак преглед основних типова и структура података. У примерима које будемо обрађивали током овог курса вероватно ћемо користити само њих.
Пробајте сами¶
Уколико нисте до сада, отворите у Џупитер окружењу пример радне свеске 1 Ekspresni uvod u obradu podataka u Pajtonu.ipynb у коме се налазе сви примери поља са кодом из ове лекције. Пробајте сами да их извршавате или модификујете па поново извршите. На тај начин ћете најбоље упознати како раде одређене операције које сте у овој лекцији упознали.
Обратите пажњу да је редослед извршавања поља важан. Ако добијете грешку да нешто није дефинисано, проверите да ли сте можда прескочили да извршите поље у коме се то дефинише.