{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 2. Низови података и линијски дијаграми\n",
"\n",
"У овој лекцији ћеш научити:\n",
"1. како да се крећеш кроз Џупитер радну свеску;\n",
"2. како се записују низови података; и\n",
"3. како се приказују низови података линијским дијаграмима."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2.1. Још мало о Џупитер радној свесци\n",
"\n",
"Џупитер радна свеска се састоји из низа ћелија, а свака ћелија може да садржи текст, математички израз или низ Пајтон наредби. Низ икона при врху стране ти омогућује да бараташ ћелијама Џупитер радне свеске на разне начине.\n",
"\n",
"Дугме **Run** смо већ користили. Погледајмо сада чему служе још четири дугмета:\n",
"\n",
"\n",
"\n",
"- Клик на дугме које личи на дискету (прва слева) ће снимити радну свеску.\n",
"- Клик на дугме са знаком + ће додати нову ћелију испод активне ћелије. (Ћелију активираш тако што кликнеш на њу; активна ћелија има ***зелени*** или ***плави*** оквир.)\n",
"- Стрелице на горе и на доле померају радну ћелију за једно место горе или доле."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"На пример, читаш овај текст и одједном осетиш снажну жељу да израчунаш вредност израза $1 + \\frac 12 + \\frac 13 + \\frac 14 + \\frac 15 + \\frac 16 + \\frac 17$. Тада треба да кликнеш на ову ћелију (коју управо читаш) и онда на дугме са знаком **+**. У новој ћелији која ће се појавити испод можеш да унесеш израз, а Пајтон ће га израчунати:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"У осам ћелија које следе наведени су стихови познате енглеске дечије бројалице. Стихови су испретурани. Користећи дугмиће са стрелицама преуреди ћелије тако да добијеш текст бројалице."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Once I caught a fish alive,*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Then I let it go again.*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Which finger did it bite?*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Why did you let it go?*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Because it bit my finger so.*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*This little finger on my right.*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*One, two, three, four, five,*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Six, seven, eight, nine, ten,*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2.2. Записивање низова података"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Низови података се у Пајтону записују унутар угластих заграда, у облику *листе*. На пример, оцене неког ученика из једног предмета могу да се запишу као низ овако:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ocene = [2, 4, 5, 3, 5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Систем није вратио никакав излаз, наравно. Он је само констатовао да променљива `ocene` сада садржи низ који се састоји од пет бројева. Да бисмо се уверили да је то тако, затражићемо од система да израчуна следећи израз:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ocene"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Могуће је радити и са низовима стрингова:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"predmeti = [\"matematika\", \"srpski\", \"likovno\", \"istorija\", \"fizičko\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Систем ни овај пут није вратио никакав излаз, већ је само запамтио да променљива `predmeti` сада садржи низ од пет стрингова (имена предмета). Ево садржаја променљиве `predmeti`:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"predmeti"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Дужину низа можемо добити позивом уграђене функције `len` (што је скраћеница енглеске речи *length* која значи \"дужина\"):"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"len(predmeti)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2.3. Приказивање низова података"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"У наредној ћелији приказан је процењени број становника наше планете у разним историјским периодима, при чему је број људи исказан у милијардама:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"godine = [1000, 1500, 1650, 1750, 1804, 1850, 1900, 1930, 1950, 1960, 1974, 1980, 1987, 1999, 2011, 2020, 2023, 2030, 2037, 2045, 2055, 2100]\n",
"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]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Желели бисмо да прикажемо ове податке у виду графикона. Пајтон има разне библиотеке за визуелизацију података, а ми ћемо користити библиотеку која се зове `matplotlib.pyplot`. Пошто је ово име веома дугачко и компликовано и пошто ће нам требати много функција из те библиотеке нећемо увозити функције једну по једну већ ћемо увести целу библиотеку и при томе јој дати краће име (такорећи, надимак) `plt`. (Енглеска реч *plot* значи \"исцртати\", а `plt` је скраћено од `plot`.)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Сада су нам све функције из ове библиотеке доступне. Важно је напоменути да *један* `import` *важи за целу радну свеску!* Дакле, довољно је библиотеку увести једном у радној свесци. Такође је важно рећи да ћемо у новој радној свесци морати поново да \"импортујемо\" библиотеке које нам требају за рад.\n",
"\n",
"**Један импорт по радној свесци!**\n",
"\n",
"Ако се забуниш па покушаш библиотеку да импортујеш два пута -- нема бриге. Пајтон се неће бунити, али неће губити време на то да два пута учитава исту библиотеку.\n",
"\n",
"Натраг на цртање графикона. Најједноставнији графикон се може добити овако:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.plot(godine, ljudi)\n",
"plt.show()\n",
"plt.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Функција `plot(godine, ljudi)` каже систему да треба нацртати графикон коме су на хоризонталну осу ($x$-оса) нанети подаци из низа `godine`, а на вертикалну осу ($y$-оса) подаци из низа `ljudi`. Функција `show` потом приказује графикон. (Енглеска реч *plot* значи \"исцртати\", а енглеска реч *show* значи \"приказати\".) Коначно, функција `close` завршава рад на графикону (енглеска реч *close* значи \"затвори\").\n",
"\n",
"Видимо да су подаци представљени линијом. Зато се ова врста графикона зове *линијски графикон*.\n",
"\n",
"Пошто нисмо увозили појединачне функције већ смо целу библиотеку увезли под надимком `plt`, функције `plot`, `show` и `close` морамо да позовемо \"пуним презименом и именом\": `plt.plot`, `plt.show` и `plt.close`.\n",
"\n",
"У наредном кораку ћемо графикону додати наслов користећи функцију `title` (енглеска реч *title* значи \"наслов\"):"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.plot(godine, ljudi)\n",
"plt.title(\"Broj stanovnika na Zemlji\")\n",
"plt.show()\n",
"plt.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Можемо ставити ознаку и на вертикалну осу да бисмо нагласили да се ради о бројевима који су исказани у милијардама. За то користимо функцију `ylabel` (\"ознака на $y$-оси\"; енглеска реч *label* значи \"ознака\"):"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.plot(godine, ljudi)\n",
"plt.title(\"Broj stanovnika na Zemlji\")\n",
"plt.ylabel(\"(milijarde)\")\n",
"plt.show()\n",
"plt.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Да закључимо: функцијама `plot`, `title` и `ylabel` додајемо податке на графикон, и тек када смо унели све податке које желимо да имамо на графикону цртамо графикон позивом функције `show`. На крају позивамо функцију `close` да почисти за нама."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2.4. Задаци"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Задатак 1.** Следећи програм црта графикон који представља процењени број људи на Земљи у разним периодима:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"plt.plot(godine, ljudi)\n",
"plt.title(\"Broj stanovnika na Zemlji\")\n",
"plt.ylabel(\"(milijarde)\")\n",
"plt.show()\n",
"plt.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1. Чему служи наредба `import ... as ..`?\n",
"2. Зашто пишемо `plt.plot`, а не просто `plot`?\n",
"3. Чему служи функција `plot`?\n",
"4. Чему служе функције `title` и `ylabel`?\n",
"5. Чему служе функције `show` и `close`?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Следеће задатке реши у Џупитеру."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Задатак 2.** У наредној ћелији дати су подаци о маси (у килограмима) и дужини/висини (у центиметрима) једног дечака од његовог шестог месеца па до његових 6,5 година."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"merenja = [\"6 mes\", \"1,5 god\", \"2,5 god\", \"3,5 god\", \"4,5 god\", \"5,5 god\", \"6,5 god\"]\n",
"masaKG = [5.9, 11.5, 14.8, 20.5, 22.0, 24.2, 29.0 ]\n",
"visinaCM = [62.0, 84.0, 97.0, 115.0, 122.5, 131.5, 135.0 ]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Прикажи једним графиконом како се мењала његова маса, а другим како се мењала његова висина."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Задатак 3.** *Индекс телесне тежине* (енгл. *body mass index*, BMI) представља количник телесне масе изражене у килограмима и квадрата телесне висине у изражене у метрима:\n",
"\n",
"$$\\hbox{BMI} = \\frac{\\hbox{маса у килограмима}}{(\\hbox{висина у метрима})^2}$$\n",
"\n",
"За дечака из Задатка 2 прикажи графиконом промену његовог индекса телесне тежине. Може ти помоћи следећи мали Пајтон програм који рачуна његове индексе телесне тежине за свако мерење."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"BMI = [0, 0, 0, 0, 0, 0, 0]\n",
"for i in range(0, 7):\n",
" BMI[i] = masaKG[i] / (visinaCM[i] / 100.0)**2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Задатак 4.** Процењује се да је Кина на дан 1.7.2019. имала 1.420.062.022 становника. Број становника у Кини се сваке године повећа за 0,35%. Под претпоставком да се годишњи раст броја становника у Кини неће мењати, приказати графиконом очекивани број становника Кине у наредних десет година."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Задатак 5.** Свака држава има организовану службу која пажљиво бележи податке о временским приликама зато што је то важно за саобраћај, пољопривреду, али и све остале привредне гране.\n",
"\n",
"На сајту Републичког хидрометеоролошког завода Србије (http://www.hidmet.gov.rs/) у менију са леве стране кликни на \"Метеорологија\", па \"Климатологија\", па на \"Нормале\". Потом у списку станица за осматрање који се појавио одабери станицу најближу твојој школи, преузми најниже и највише температуре у периоду 1981-2010 (редови \"Апсолутни максимум\" и \"Апсолутни минимум\") и прикажи те податке."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}