{
 "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",
    "![Četiri dugmeta](slike/JupyterMenu4Buttons.jpg)\n",
    "\n",
    "- Клик на дугме које личи на дискету (прва слева) ће снимити радну свеску.\n",
    "- Клик на дугме са знаком <b>+</b> ће додати нову ћелију испод активне ћелије. (Ћелију активираш тако што кликнеш на њу; активна ћелија има <font color=green>***зелени***</font> или <font color=blue>***плави***</font> оквир.)\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
}