{ "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", "- Клик на дугме са знаком <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 }