{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Средњошколци у Републици Србији"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"У овом темату позабавићемо се подацима о средњошколском образовању у Републици Србији који су нам доступни кроз отворене податке Министарства за просвету, науку и технолошки развој: http://opendata.mpn.gov.rs. Фајлови о средњошколцима и средњим школама у .csv формату (преузети 01.12.2019.) налазе се у локалном фолдеру и у редовима који следе, бавићемо се кратком прерадом тих података за лакшу обраду у наредним радним свескама. Специјално, користећи библиотеку pandas за учитавање и анализу табеларних података ћемо: \n",
"* брисати непотребне колоне\n",
"* додавати нове колоне на основу рачунских операцијама над постојећим подадацма\n",
"* уз помоћ библиотеке *cyrtranslit* ћемо мењати текстуалне вредности из латиничног у ћирилично писмо и обратно\n",
"* груписати податке и спајати их у нове табеле\n",
"* сачувати припремљен фајл за даљу обраду"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import cyrtranslit"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Учитавање и обрада табеларних података је изузетно једноставна и практична у библиотеци [**pandas**](https://pandas.pydata.org/) због чега је она изузетно популарна. \n",
"Податке о средњошколцима и средњим школама преузели смо у .csv формату (вредности раздвојене зарезом, енг. coma separated values), па ћемо их учитати функцијом [**read_csv**](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html):"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"data = pd.read_csv('data/srednjoskolci data/raw data/MPNTRopendata_ss.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"У учитане податке брзо можемо завирити на пар следећих начина:\n",
"\n",
"Функција [**head()**](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.head.html) излистава првих 5 редова табеле, док **head(n)** излистава n првих редова:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" # | \n",
" ИД установе | \n",
" Власништво | \n",
" Округ | \n",
" Општина | \n",
" Назив установе | \n",
" Подручје рада | \n",
" Образовни профил | \n",
" Трајање образовања | \n",
" Језик наставе | \n",
" ... | \n",
" Број ИОП-а 2 - трећи разред | \n",
" Број ИОП-а 3 - трећи разред | \n",
" Број одељења - четврти разред | \n",
" Број комбинованих одељења - четврти разред | \n",
" Број специјалних одељења - четврти разред | \n",
" Број ученика - четврти разред | \n",
" Број девојчица - четврти разред | \n",
" Број ИОП-а 1 - четврти разред | \n",
" Број ИОП-а 2 - четврти разред | \n",
" Број ИОП-а 3 - четврти разред | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1.0 | \n",
" 1322 | \n",
" Државно | \n",
" Севернобачки управни округ | \n",
" Бачка Топола | \n",
" Пољопривредна школа | \n",
" Пољопривреда, производња и прерада хране | \n",
" Пољопривредни техничар | \n",
" 4 | \n",
" Мађарски језик | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 18 | \n",
" 6 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
1 rows × 42 columns
\n",
"
"
],
"text/plain": [
" # ИД установе Власништво Округ Општина \\\n",
"0 1.0 1322 Државно Севернобачки управни округ Бачка Топола \n",
"\n",
" Назив установе Подручје рада \\\n",
"0 Пољопривредна школа Пољопривреда, производња и прерада хране \n",
"\n",
" Образовни профил Трајање образовања Језик наставе ... \\\n",
"0 Пољопривредни техничар 4 Мађарски језик ... \n",
"\n",
" Број ИОП-а 2 - трећи разред Број ИОП-а 3 - трећи разред \\\n",
"0 0 0 \n",
"\n",
" Број одељења - четврти разред Број комбинованих одељења - четврти разред \\\n",
"0 1 0 \n",
"\n",
" Број специјалних одељења - четврти разред Број ученика - четврти разред \\\n",
"0 0 18 \n",
"\n",
" Број девојчица - четврти разред Број ИОП-а 1 - четврти разред \\\n",
"0 6 0 \n",
"\n",
" Број ИОП-а 2 - четврти разред Број ИОП-а 3 - четврти разред \n",
"0 0 0 \n",
"\n",
"[1 rows x 42 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Како учитана табела има чак 42 колоне, не можемо их видети све. Међутим, функцијом [**info()**](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.info.html) можемо сазнати које све колоне табела има, колико има уноса, као и које типове података је препознао пајтон у учитавању:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"RangeIndex: 3180 entries, 0 to 3179\n",
"Data columns (total 42 columns):\n",
"# 3180 non-null float64\n",
"ИД установе 3180 non-null int64\n",
"Власништво 3180 non-null object\n",
"Округ 3180 non-null object\n",
"Општина 3180 non-null object\n",
"Назив установе 3180 non-null object\n",
"Подручје рада 3180 non-null object\n",
"Образовни профил 3180 non-null object\n",
"Трајање образовања 3180 non-null int64\n",
"Језик наставе 3180 non-null object\n",
"Број одељења - први разред 3180 non-null int64\n",
"Број комбинованих одељења - први разред 3180 non-null int64\n",
"Број специјалних одељења - први разред 3180 non-null int64\n",
"Број ученика - први разред 3180 non-null int64\n",
"Број девојчица - први разред 3180 non-null int64\n",
"Број ИОП-а 1 - први разред 3180 non-null int64\n",
"Број ИОП-а 2 - први разред 3180 non-null int64\n",
"Број ИОП-а 3 - први разред 3180 non-null int64\n",
"Број одељења - други разред 3180 non-null int64\n",
"Број комбинованих одељења - други разред 3180 non-null int64\n",
"Број специјалних одељења - други разред 3180 non-null int64\n",
"Број ученика - други разред 3180 non-null int64\n",
"Број девојчица - други разред 3180 non-null int64\n",
"Број ИОП-а 1 - други разред 3180 non-null int64\n",
"Број ИОП-а 2 - други разред 3180 non-null int64\n",
"Број ИОП-а 3 - други разред 3180 non-null int64\n",
"Број одељења - трећи разред 3180 non-null int64\n",
"Број комбинованих одељења - трећи разред 3180 non-null int64\n",
"Број специјалних одељења - трећи разред 3180 non-null int64\n",
"Број ученика - трећи разред 3180 non-null int64\n",
"Број девојчица - трећи разред 3180 non-null int64\n",
"Број ИОП-а 1 - трећи разред 3180 non-null int64\n",
"Број ИОП-а 2 - трећи разред 3180 non-null int64\n",
"Број ИОП-а 3 - трећи разред 3180 non-null int64\n",
"Број одељења - четврти разред 3180 non-null int64\n",
"Број комбинованих одељења - четврти разред 3180 non-null int64\n",
"Број специјалних одељења - четврти разред 3180 non-null int64\n",
"Број ученика - четврти разред 3180 non-null int64\n",
"Број девојчица - четврти разред 3180 non-null int64\n",
"Број ИОП-а 1 - четврти разред 3180 non-null int64\n",
"Број ИОП-а 2 - четврти разред 3180 non-null int64\n",
"Број ИОП-а 3 - четврти разред 3180 non-null int64\n",
"dtypes: float64(1), int64(34), object(7)\n",
"memory usage: 1.0+ MB\n"
]
}
],
"source": [
"data.info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Овај сет података садржи информације о срењим школама и образовним профилима у њима. Поред географских одредница школе (општина, округ), за сваки образовни профил имамо информације о броју ученика по разредима, броју одељења и слично што можете видети из назива колона. Овај интересантан сет података у наредним радним свескама користићемо да сазнамо који су то популарни смерови, да ли се то разликује по окрузима и слично."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Функцијом [**describe()**](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html) још детаљније можемо завирити у колоне које садрже нумеричке податке. Она нам даје преглед основне статистике - број уноса, просечну вредност (mean), стандардну девијацију (std), најмању (min), највећу (max), медијалну вредност (50%), кaо и вредности које су веће од 25% других и 75% других у одређеној нумеричкој колони."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" # | \n",
" ИД установе | \n",
" Трајање образовања | \n",
" Број одељења - први разред | \n",
" Број комбинованих одељења - први разред | \n",
" Број специјалних одељења - први разред | \n",
" Број ученика - први разред | \n",
" Број девојчица - први разред | \n",
" Број ИОП-а 1 - први разред | \n",
" Број ИОП-а 2 - први разред | \n",
" ... | \n",
" Број ИОП-а 2 - трећи разред | \n",
" Број ИОП-а 3 - трећи разред | \n",
" Број одељења - четврти разред | \n",
" Број комбинованих одељења - четврти разред | \n",
" Број специјалних одељења - четврти разред | \n",
" Број ученика - четврти разред | \n",
" Број девојчица - четврти разред | \n",
" Број ИОП-а 1 - четврти разред | \n",
" Број ИОП-а 2 - четврти разред | \n",
" Број ИОП-а 3 - четврти разред | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" ... | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
" 3180.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 1590.500000 | \n",
" 1555.244340 | \n",
" 3.687421 | \n",
" 0.877044 | \n",
" 0.142453 | \n",
" 0.009434 | \n",
" 21.407233 | \n",
" 10.210377 | \n",
" 0.033333 | \n",
" 0.175157 | \n",
" ... | \n",
" 0.068553 | \n",
" 0.011321 | \n",
" 0.681132 | \n",
" 0.011635 | \n",
" 0.000943 | \n",
" 16.887736 | \n",
" 8.858491 | \n",
" 0.029245 | \n",
" 0.016667 | \n",
" 0.008805 | \n",
"
\n",
" \n",
" std | \n",
" 918.131254 | \n",
" 149.038699 | \n",
" 0.482893 | \n",
" 0.858854 | \n",
" 0.362816 | \n",
" 0.108924 | \n",
" 25.280818 | \n",
" 16.482580 | \n",
" 0.221853 | \n",
" 0.581631 | \n",
" ... | \n",
" 0.330411 | \n",
" 0.402724 | \n",
" 0.926467 | \n",
" 0.126124 | \n",
" 0.039648 | \n",
" 25.981561 | \n",
" 16.208440 | \n",
" 0.227325 | \n",
" 0.158751 | \n",
" 0.315158 | \n",
"
\n",
" \n",
" min | \n",
" 1.000000 | \n",
" 1322.000000 | \n",
" 1.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" ... | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" 25% | \n",
" 795.750000 | \n",
" 1424.000000 | \n",
" 3.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" ... | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" 50% | \n",
" 1590.500000 | \n",
" 1557.000000 | \n",
" 4.000000 | \n",
" 1.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 19.000000 | \n",
" 4.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" ... | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 1.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 5.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" 75% | \n",
" 2385.250000 | \n",
" 1661.250000 | \n",
" 4.000000 | \n",
" 1.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 30.000000 | \n",
" 15.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" ... | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 1.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 27.000000 | \n",
" 14.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" max | \n",
" 3180.000000 | \n",
" 1976.000000 | \n",
" 4.000000 | \n",
" 9.000000 | \n",
" 4.000000 | \n",
" 3.000000 | \n",
" 287.000000 | \n",
" 197.000000 | \n",
" 3.000000 | \n",
" 9.000000 | \n",
" ... | \n",
" 5.000000 | \n",
" 22.000000 | \n",
" 9.000000 | \n",
" 4.000000 | \n",
" 2.000000 | \n",
" 268.000000 | \n",
" 154.000000 | \n",
" 4.000000 | \n",
" 3.000000 | \n",
" 17.000000 | \n",
"
\n",
" \n",
"
\n",
"
8 rows × 35 columns
\n",
"
"
],
"text/plain": [
" # ИД установе Трајање образовања \\\n",
"count 3180.000000 3180.000000 3180.000000 \n",
"mean 1590.500000 1555.244340 3.687421 \n",
"std 918.131254 149.038699 0.482893 \n",
"min 1.000000 1322.000000 1.000000 \n",
"25% 795.750000 1424.000000 3.000000 \n",
"50% 1590.500000 1557.000000 4.000000 \n",
"75% 2385.250000 1661.250000 4.000000 \n",
"max 3180.000000 1976.000000 4.000000 \n",
"\n",
" Број одељења - први разред Број комбинованих одељења - први разред \\\n",
"count 3180.000000 3180.000000 \n",
"mean 0.877044 0.142453 \n",
"std 0.858854 0.362816 \n",
"min 0.000000 0.000000 \n",
"25% 0.000000 0.000000 \n",
"50% 1.000000 0.000000 \n",
"75% 1.000000 0.000000 \n",
"max 9.000000 4.000000 \n",
"\n",
" Број специјалних одељења - први разред Број ученика - први разред \\\n",
"count 3180.000000 3180.000000 \n",
"mean 0.009434 21.407233 \n",
"std 0.108924 25.280818 \n",
"min 0.000000 0.000000 \n",
"25% 0.000000 0.000000 \n",
"50% 0.000000 19.000000 \n",
"75% 0.000000 30.000000 \n",
"max 3.000000 287.000000 \n",
"\n",
" Број девојчица - први разред Број ИОП-а 1 - први разред \\\n",
"count 3180.000000 3180.000000 \n",
"mean 10.210377 0.033333 \n",
"std 16.482580 0.221853 \n",
"min 0.000000 0.000000 \n",
"25% 0.000000 0.000000 \n",
"50% 4.000000 0.000000 \n",
"75% 15.000000 0.000000 \n",
"max 197.000000 3.000000 \n",
"\n",
" Број ИОП-а 2 - први разред ... Број ИОП-а 2 - трећи разред \\\n",
"count 3180.000000 ... 3180.000000 \n",
"mean 0.175157 ... 0.068553 \n",
"std 0.581631 ... 0.330411 \n",
"min 0.000000 ... 0.000000 \n",
"25% 0.000000 ... 0.000000 \n",
"50% 0.000000 ... 0.000000 \n",
"75% 0.000000 ... 0.000000 \n",
"max 9.000000 ... 5.000000 \n",
"\n",
" Број ИОП-а 3 - трећи разред Број одељења - четврти разред \\\n",
"count 3180.000000 3180.000000 \n",
"mean 0.011321 0.681132 \n",
"std 0.402724 0.926467 \n",
"min 0.000000 0.000000 \n",
"25% 0.000000 0.000000 \n",
"50% 0.000000 1.000000 \n",
"75% 0.000000 1.000000 \n",
"max 22.000000 9.000000 \n",
"\n",
" Број комбинованих одељења - четврти разред \\\n",
"count 3180.000000 \n",
"mean 0.011635 \n",
"std 0.126124 \n",
"min 0.000000 \n",
"25% 0.000000 \n",
"50% 0.000000 \n",
"75% 0.000000 \n",
"max 4.000000 \n",
"\n",
" Број специјалних одељења - четврти разред \\\n",
"count 3180.000000 \n",
"mean 0.000943 \n",
"std 0.039648 \n",
"min 0.000000 \n",
"25% 0.000000 \n",
"50% 0.000000 \n",
"75% 0.000000 \n",
"max 2.000000 \n",
"\n",
" Број ученика - четврти разред Број девојчица - четврти разред \\\n",
"count 3180.000000 3180.000000 \n",
"mean 16.887736 8.858491 \n",
"std 25.981561 16.208440 \n",
"min 0.000000 0.000000 \n",
"25% 0.000000 0.000000 \n",
"50% 5.000000 0.000000 \n",
"75% 27.000000 14.000000 \n",
"max 268.000000 154.000000 \n",
"\n",
" Број ИОП-а 1 - четврти разред Број ИОП-а 2 - четврти разред \\\n",
"count 3180.000000 3180.000000 \n",
"mean 0.029245 0.016667 \n",
"std 0.227325 0.158751 \n",
"min 0.000000 0.000000 \n",
"25% 0.000000 0.000000 \n",
"50% 0.000000 0.000000 \n",
"75% 0.000000 0.000000 \n",
"max 4.000000 3.000000 \n",
"\n",
" Број ИОП-а 3 - четврти разред \n",
"count 3180.000000 \n",
"mean 0.008805 \n",
"std 0.315158 \n",
"min 0.000000 \n",
"25% 0.000000 \n",
"50% 0.000000 \n",
"75% 0.000000 \n",
"max 17.000000 \n",
"\n",
"[8 rows x 35 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Како је табела написана ћирилицом, користићемо библиотеку [*cyrtranslit*](https://pythonhosted.org/cyrtranslit/) да све текстуалне податке у табели преиначимо у латиничо писмо (то нам је посебно битно за називе колона како бисмо лакше баратали подацима). За почетак ћемо то урадити са називима колона које добијамо позивајући [**data.columns**](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.columns.html)."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" # | \n",
" ID ustanove | \n",
" Vlasništvo | \n",
" Okrug | \n",
" Opština | \n",
" Naziv ustanove | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
" Trajanje obrazovanja | \n",
" Jezik nastave | \n",
" ... | \n",
" Broj IOP-a 2 - treći razred | \n",
" Broj IOP-a 3 - treći razred | \n",
" Broj odeljenja - četvrti razred | \n",
" Broj kombinovanih odeljenja - četvrti razred | \n",
" Broj specijalnih odeljenja - četvrti razred | \n",
" Broj učenika - četvrti razred | \n",
" Broj devojčica - četvrti razred | \n",
" Broj IOP-a 1 - četvrti razred | \n",
" Broj IOP-a 2 - četvrti razred | \n",
" Broj IOP-a 3 - četvrti razred | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1.0 | \n",
" 1322 | \n",
" Државно | \n",
" Севернобачки управни округ | \n",
" Бачка Топола | \n",
" Пољопривредна школа | \n",
" Пољопривреда, производња и прерада хране | \n",
" Пољопривредни техничар | \n",
" 4 | \n",
" Мађарски језик | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 18 | \n",
" 6 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
1 rows × 42 columns
\n",
"
"
],
"text/plain": [
" # ID ustanove Vlasništvo Okrug Opština \\\n",
"0 1.0 1322 Државно Севернобачки управни округ Бачка Топола \n",
"\n",
" Naziv ustanove Područje rada \\\n",
"0 Пољопривредна школа Пољопривреда, производња и прерада хране \n",
"\n",
" Obrazovni profil Trajanje obrazovanja Jezik nastave ... \\\n",
"0 Пољопривредни техничар 4 Мађарски језик ... \n",
"\n",
" Broj IOP-a 2 - treći razred Broj IOP-a 3 - treći razred \\\n",
"0 0 0 \n",
"\n",
" Broj odeljenja - četvrti razred \\\n",
"0 1 \n",
"\n",
" Broj kombinovanih odeljenja - četvrti razred \\\n",
"0 0 \n",
"\n",
" Broj specijalnih odeljenja - četvrti razred Broj učenika - četvrti razred \\\n",
"0 0 18 \n",
"\n",
" Broj devojčica - četvrti razred Broj IOP-a 1 - četvrti razred \\\n",
"0 6 0 \n",
"\n",
" Broj IOP-a 2 - četvrti razred Broj IOP-a 3 - četvrti razred \n",
"0 0 0 \n",
"\n",
"[1 rows x 42 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.columns = [cyrtranslit.to_latin(text,'sr') for text in list(data.columns)]\n",
"data.head(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"А у наредних пар редова пролазимо кроз целокупан садржај појединачних колона које смо препознали да су текстуалне и да су нам од користи у наставку, а затим њихов садржај мењамо у латинично писмо. Урадићемо за почетак то за колону 'Власништво'."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" # | \n",
" ID ustanove | \n",
" Vlasništvo | \n",
" Okrug | \n",
" Opština | \n",
" Naziv ustanove | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
" Trajanje obrazovanja | \n",
" Jezik nastave | \n",
" ... | \n",
" Broj IOP-a 2 - treći razred | \n",
" Broj IOP-a 3 - treći razred | \n",
" Broj odeljenja - četvrti razred | \n",
" Broj kombinovanih odeljenja - četvrti razred | \n",
" Broj specijalnih odeljenja - četvrti razred | \n",
" Broj učenika - četvrti razred | \n",
" Broj devojčica - četvrti razred | \n",
" Broj IOP-a 1 - četvrti razred | \n",
" Broj IOP-a 2 - četvrti razred | \n",
" Broj IOP-a 3 - četvrti razred | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1.0 | \n",
" 1322 | \n",
" Državno | \n",
" Севернобачки управни округ | \n",
" Бачка Топола | \n",
" Пољопривредна школа | \n",
" Пољопривреда, производња и прерада хране | \n",
" Пољопривредни техничар | \n",
" 4 | \n",
" Мађарски језик | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 18 | \n",
" 6 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
1 rows × 42 columns
\n",
"
"
],
"text/plain": [
" # ID ustanove Vlasništvo Okrug Opština \\\n",
"0 1.0 1322 Državno Севернобачки управни округ Бачка Топола \n",
"\n",
" Naziv ustanove Područje rada \\\n",
"0 Пољопривредна школа Пољопривреда, производња и прерада хране \n",
"\n",
" Obrazovni profil Trajanje obrazovanja Jezik nastave ... \\\n",
"0 Пољопривредни техничар 4 Мађарски језик ... \n",
"\n",
" Broj IOP-a 2 - treći razred Broj IOP-a 3 - treći razred \\\n",
"0 0 0 \n",
"\n",
" Broj odeljenja - četvrti razred \\\n",
"0 1 \n",
"\n",
" Broj kombinovanih odeljenja - četvrti razred \\\n",
"0 0 \n",
"\n",
" Broj specijalnih odeljenja - četvrti razred Broj učenika - četvrti razred \\\n",
"0 0 18 \n",
"\n",
" Broj devojčica - četvrti razred Broj IOP-a 1 - četvrti razred \\\n",
"0 6 0 \n",
"\n",
" Broj IOP-a 2 - četvrti razred Broj IOP-a 3 - četvrti razred \n",
"0 0 0 \n",
"\n",
"[1 rows x 42 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['Vlasništvo'] = [cyrtranslit.to_latin(text,'sr') for text in list(data['Vlasništvo'])]\n",
"data.head(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Наредне колоне можемо обрадити тако што ћемо претходни ред написати више пута, за све различите колоне које желимо да преименујемо у латинично писмо, или тако што ћемо овај ред написати у одговарајућој петљи којом ћемо проћи кроз све колоне које желимо да обрадимо:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" # | \n",
" ID ustanove | \n",
" Vlasništvo | \n",
" Okrug | \n",
" Opština | \n",
" Naziv ustanove | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
" Trajanje obrazovanja | \n",
" Jezik nastave | \n",
" ... | \n",
" Broj IOP-a 2 - treći razred | \n",
" Broj IOP-a 3 - treći razred | \n",
" Broj odeljenja - četvrti razred | \n",
" Broj kombinovanih odeljenja - četvrti razred | \n",
" Broj specijalnih odeljenja - četvrti razred | \n",
" Broj učenika - četvrti razred | \n",
" Broj devojčica - četvrti razred | \n",
" Broj IOP-a 1 - četvrti razred | \n",
" Broj IOP-a 2 - četvrti razred | \n",
" Broj IOP-a 3 - četvrti razred | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1.0 | \n",
" 1322 | \n",
" Državno | \n",
" Severnobački upravni okrug | \n",
" Bačka Topola | \n",
" Poljoprivredna škola | \n",
" Poljoprivreda, proizvodnja i prerada hrane | \n",
" Poljoprivredni tehničar | \n",
" 4 | \n",
" Mađarski jezik | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 18 | \n",
" 6 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
1 rows × 42 columns
\n",
"
"
],
"text/plain": [
" # ID ustanove Vlasništvo Okrug Opština \\\n",
"0 1.0 1322 Državno Severnobački upravni okrug Bačka Topola \n",
"\n",
" Naziv ustanove Područje rada \\\n",
"0 Poljoprivredna škola Poljoprivreda, proizvodnja i prerada hrane \n",
"\n",
" Obrazovni profil Trajanje obrazovanja Jezik nastave ... \\\n",
"0 Poljoprivredni tehničar 4 Mađarski jezik ... \n",
"\n",
" Broj IOP-a 2 - treći razred Broj IOP-a 3 - treći razred \\\n",
"0 0 0 \n",
"\n",
" Broj odeljenja - četvrti razred \\\n",
"0 1 \n",
"\n",
" Broj kombinovanih odeljenja - četvrti razred \\\n",
"0 0 \n",
"\n",
" Broj specijalnih odeljenja - četvrti razred Broj učenika - četvrti razred \\\n",
"0 0 18 \n",
"\n",
" Broj devojčica - četvrti razred Broj IOP-a 1 - četvrti razred \\\n",
"0 6 0 \n",
"\n",
" Broj IOP-a 2 - četvrti razred Broj IOP-a 3 - četvrti razred \n",
"0 0 0 \n",
"\n",
"[1 rows x 42 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tekstualne_kolone = ['Vlasništvo', 'Okrug','Opština','Naziv ustanove', 'Područje rada', 'Obrazovni profil', 'Jezik nastave']\n",
"\n",
"for kolona in tekstualne_kolone:\n",
" data[kolona] = [cyrtranslit.to_latin(text,'sr') for text in list(data[kolona])]\n",
"data.head(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Колоне које нам нису неопходне за предстојећу анализу избацићемо из табеле користећи функцију [**drop**](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html) на следећи начин:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" ID ustanove | \n",
" Vlasništvo | \n",
" Okrug | \n",
" Opština | \n",
" Naziv ustanove | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
" Trajanje obrazovanja | \n",
" Jezik nastave | \n",
" Broj odeljenja - prvi razred | \n",
" ... | \n",
" Broj devojčica - prvi razred | \n",
" Broj odeljenja - drugi razred | \n",
" Broj učenika - drugi razred | \n",
" Broj devojčica - drugi razred | \n",
" Broj odeljenja - treći razred | \n",
" Broj učenika - treći razred | \n",
" Broj devojčica - treći razred | \n",
" Broj odeljenja - četvrti razred | \n",
" Broj učenika - četvrti razred | \n",
" Broj devojčica - četvrti razred | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1322 | \n",
" Državno | \n",
" Severnobački upravni okrug | \n",
" Bačka Topola | \n",
" Poljoprivredna škola | \n",
" Poljoprivreda, proizvodnja i prerada hrane | \n",
" Poljoprivredni tehničar | \n",
" 4 | \n",
" Mađarski jezik | \n",
" 1 | \n",
" ... | \n",
" 8 | \n",
" 1 | \n",
" 21 | \n",
" 8 | \n",
" 1 | \n",
" 11 | \n",
" 3 | \n",
" 1 | \n",
" 18 | \n",
" 6 | \n",
"
\n",
" \n",
" 1 | \n",
" 1322 | \n",
" Državno | \n",
" Severnobački upravni okrug | \n",
" Bačka Topola | \n",
" Poljoprivredna škola | \n",
" Poljoprivreda, proizvodnja i prerada hrane | \n",
" Veterinarski tehničar | \n",
" 4 | \n",
" Mađarski jezik | \n",
" 1 | \n",
" ... | \n",
" 7 | \n",
" 1 | \n",
" 21 | \n",
" 12 | \n",
" 1 | \n",
" 27 | \n",
" 13 | \n",
" 1 | \n",
" 17 | \n",
" 11 | \n",
"
\n",
" \n",
" 2 | \n",
" 1322 | \n",
" Državno | \n",
" Severnobački upravni okrug | \n",
" Bačka Topola | \n",
" Poljoprivredna škola | \n",
" Poljoprivreda, proizvodnja i prerada hrane | \n",
" Prehrambeni tehničar | \n",
" 4 | \n",
" Mađarski jezik | \n",
" 1 | \n",
" ... | \n",
" 9 | \n",
" 1 | \n",
" 13 | \n",
" 11 | \n",
" 1 | \n",
" 17 | \n",
" 13 | \n",
" 1 | \n",
" 16 | \n",
" 13 | \n",
"
\n",
" \n",
" 3 | \n",
" 1322 | \n",
" Državno | \n",
" Severnobački upravni okrug | \n",
" Bačka Topola | \n",
" Poljoprivredna škola | \n",
" Poljoprivreda, proizvodnja i prerada hrane | \n",
" Rukovalac - mehaničar poljoprivredne tehnike | \n",
" 3 | \n",
" Mađarski jezik | \n",
" 1 | \n",
" ... | \n",
" 0 | \n",
" 1 | \n",
" 14 | \n",
" 0 | \n",
" 1 | \n",
" 17 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 1322 | \n",
" Državno | \n",
" Severnobački upravni okrug | \n",
" Bačka Topola | \n",
" Poljoprivredna škola | \n",
" Poljoprivreda, proizvodnja i prerada hrane | \n",
" Mesar | \n",
" 3 | \n",
" Mađarski jezik | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 1 | \n",
" 13 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
5 rows × 21 columns
\n",
"
"
],
"text/plain": [
" ID ustanove Vlasništvo Okrug Opština \\\n",
"0 1322 Državno Severnobački upravni okrug Bačka Topola \n",
"1 1322 Državno Severnobački upravni okrug Bačka Topola \n",
"2 1322 Državno Severnobački upravni okrug Bačka Topola \n",
"3 1322 Državno Severnobački upravni okrug Bačka Topola \n",
"4 1322 Državno Severnobački upravni okrug Bačka Topola \n",
"\n",
" Naziv ustanove Područje rada \\\n",
"0 Poljoprivredna škola Poljoprivreda, proizvodnja i prerada hrane \n",
"1 Poljoprivredna škola Poljoprivreda, proizvodnja i prerada hrane \n",
"2 Poljoprivredna škola Poljoprivreda, proizvodnja i prerada hrane \n",
"3 Poljoprivredna škola Poljoprivreda, proizvodnja i prerada hrane \n",
"4 Poljoprivredna škola Poljoprivreda, proizvodnja i prerada hrane \n",
"\n",
" Obrazovni profil Trajanje obrazovanja \\\n",
"0 Poljoprivredni tehničar 4 \n",
"1 Veterinarski tehničar 4 \n",
"2 Prehrambeni tehničar 4 \n",
"3 Rukovalac - mehaničar poljoprivredne tehnike 3 \n",
"4 Mesar 3 \n",
"\n",
" Jezik nastave Broj odeljenja - prvi razred ... \\\n",
"0 Mađarski jezik 1 ... \n",
"1 Mađarski jezik 1 ... \n",
"2 Mađarski jezik 1 ... \n",
"3 Mađarski jezik 1 ... \n",
"4 Mađarski jezik 0 ... \n",
"\n",
" Broj devojčica - prvi razred Broj odeljenja - drugi razred \\\n",
"0 8 1 \n",
"1 7 1 \n",
"2 9 1 \n",
"3 0 1 \n",
"4 0 1 \n",
"\n",
" Broj učenika - drugi razred Broj devojčica - drugi razred \\\n",
"0 21 8 \n",
"1 21 12 \n",
"2 13 11 \n",
"3 14 0 \n",
"4 13 1 \n",
"\n",
" Broj odeljenja - treći razred Broj učenika - treći razred \\\n",
"0 1 11 \n",
"1 1 27 \n",
"2 1 17 \n",
"3 1 17 \n",
"4 0 0 \n",
"\n",
" Broj devojčica - treći razred Broj odeljenja - četvrti razred \\\n",
"0 3 1 \n",
"1 13 1 \n",
"2 13 1 \n",
"3 0 0 \n",
"4 0 0 \n",
"\n",
" Broj učenika - četvrti razred Broj devojčica - četvrti razred \n",
"0 18 6 \n",
"1 17 11 \n",
"2 16 13 \n",
"3 0 0 \n",
"4 0 0 \n",
"\n",
"[5 rows x 21 columns]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data=data.drop(columns=['#','Broj IOP-a 1 - prvi razred', 'Broj IOP-a 2 - prvi razred',\n",
" 'Broj IOP-a 3 - prvi razred','Broj IOP-a 1 - drugi razred', 'Broj IOP-a 2 - drugi razred',\n",
" 'Broj IOP-a 3 - drugi razred','Broj IOP-a 1 - treći razred', 'Broj IOP-a 2 - treći razred',\n",
" 'Broj IOP-a 3 - treći razred','Broj IOP-a 1 - četvrti razred', 'Broj IOP-a 2 - četvrti razred',\n",
" 'Broj IOP-a 3 - četvrti razred','Broj kombinovanih odeljenja - prvi razred',\n",
" 'Broj kombinovanih odeljenja - drugi razred', \n",
" 'Broj kombinovanih odeljenja - treći razred',\n",
" 'Broj kombinovanih odeljenja - četvrti razred',\n",
" 'Broj specijalnih odeljenja - prvi razred',\n",
" 'Broj specijalnih odeljenja - drugi razred',\n",
" 'Broj specijalnih odeljenja - treći razred',\n",
" 'Broj specijalnih odeljenja - četvrti razred'])\n",
"data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Како имамо на располагању колону о власништву школе, можемо проверити уносе за које је у овој колони означено приватно власништво. То радимо уз помоћ селектовања одређеног дела табеле, односно оног дела табеле за који важи да је data.Vlasništvo=='Privatno':"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" ID ustanove | \n",
" Vlasništvo | \n",
" Okrug | \n",
" Opština | \n",
" Naziv ustanove | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
" Trajanje obrazovanja | \n",
" Jezik nastave | \n",
" Broj odeljenja - prvi razred | \n",
" ... | \n",
" Broj devojčica - prvi razred | \n",
" Broj odeljenja - drugi razred | \n",
" Broj učenika - drugi razred | \n",
" Broj devojčica - drugi razred | \n",
" Broj odeljenja - treći razred | \n",
" Broj učenika - treći razred | \n",
" Broj devojčica - treći razred | \n",
" Broj odeljenja - četvrti razred | \n",
" Broj učenika - četvrti razred | \n",
" Broj devojčica - četvrti razred | \n",
"
\n",
" \n",
" \n",
" \n",
" 3112 | \n",
" 1898 | \n",
" Privatno | \n",
" Grad Beograd | \n",
" Beograd - Novi Beograd | \n",
" Srednjoškolski obrazovni centar \"SMARTANAC\" | \n",
" Zdravstvo i socijalna zaštita | \n",
" Medicinska sestra - tehničar | \n",
" 4 | \n",
" Srpski jezik | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 2 | \n",
" 1 | \n",
" 5 | \n",
" 3 | \n",
"
\n",
" \n",
" 3113 | \n",
" 1898 | \n",
" Privatno | \n",
" Grad Beograd | \n",
" Beograd - Novi Beograd | \n",
" Srednjoškolski obrazovni centar \"SMARTANAC\" | \n",
" Ostala delatnost ličnih usluga | \n",
" Frizer | \n",
" 3 | \n",
" Srpski jezik | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 3114 | \n",
" 1898 | \n",
" Privatno | \n",
" Grad Beograd | \n",
" Beograd - Novi Beograd | \n",
" Srednjoškolski obrazovni centar \"SMARTANAC\" | \n",
" Zdravstvo i socijalna zaštita | \n",
" Fizioterapeutski tehničar - novi nastavni program | \n",
" 4 | \n",
" Srpski jezik | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 3 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
3 rows × 21 columns
\n",
"
"
],
"text/plain": [
" ID ustanove Vlasništvo Okrug Opština \\\n",
"3112 1898 Privatno Grad Beograd Beograd - Novi Beograd \n",
"3113 1898 Privatno Grad Beograd Beograd - Novi Beograd \n",
"3114 1898 Privatno Grad Beograd Beograd - Novi Beograd \n",
"\n",
" Naziv ustanove \\\n",
"3112 Srednjoškolski obrazovni centar \"SMARTANAC\" \n",
"3113 Srednjoškolski obrazovni centar \"SMARTANAC\" \n",
"3114 Srednjoškolski obrazovni centar \"SMARTANAC\" \n",
"\n",
" Područje rada \\\n",
"3112 Zdravstvo i socijalna zaštita \n",
"3113 Ostala delatnost ličnih usluga \n",
"3114 Zdravstvo i socijalna zaštita \n",
"\n",
" Obrazovni profil Trajanje obrazovanja \\\n",
"3112 Medicinska sestra - tehničar 4 \n",
"3113 Frizer 3 \n",
"3114 Fizioterapeutski tehničar - novi nastavni program 4 \n",
"\n",
" Jezik nastave Broj odeljenja - prvi razred ... \\\n",
"3112 Srpski jezik 0 ... \n",
"3113 Srpski jezik 0 ... \n",
"3114 Srpski jezik 0 ... \n",
"\n",
" Broj devojčica - prvi razred Broj odeljenja - drugi razred \\\n",
"3112 0 0 \n",
"3113 0 0 \n",
"3114 0 0 \n",
"\n",
" Broj učenika - drugi razred Broj devojčica - drugi razred \\\n",
"3112 0 0 \n",
"3113 0 0 \n",
"3114 0 0 \n",
"\n",
" Broj odeljenja - treći razred Broj učenika - treći razred \\\n",
"3112 1 2 \n",
"3113 1 1 \n",
"3114 1 3 \n",
"\n",
" Broj devojčica - treći razred Broj odeljenja - četvrti razred \\\n",
"3112 2 1 \n",
"3113 1 0 \n",
"3114 1 0 \n",
"\n",
" Broj učenika - četvrti razred Broj devojčica - četvrti razred \n",
"3112 5 3 \n",
"3113 0 0 \n",
"3114 0 0 \n",
"\n",
"[3 rows x 21 columns]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data[data.Vlasništvo=='Privatno']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Како су у питању само три уноса, за једну исту приватну школу, то значи да немамо репрезентативне информације о школама у приватном власништву. Стога ћемо се у наставку фокусирати само на школе које су у државном власништву и избацићемо из табеле ова три реда а затим и колону власништво:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" ID ustanove | \n",
" Okrug | \n",
" Opština | \n",
" Naziv ustanove | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
" Trajanje obrazovanja | \n",
" Jezik nastave | \n",
" Broj odeljenja - prvi razred | \n",
" Broj učenika - prvi razred | \n",
" Broj devojčica - prvi razred | \n",
" Broj odeljenja - drugi razred | \n",
" Broj učenika - drugi razred | \n",
" Broj devojčica - drugi razred | \n",
" Broj odeljenja - treći razred | \n",
" Broj učenika - treći razred | \n",
" Broj devojčica - treći razred | \n",
" Broj odeljenja - četvrti razred | \n",
" Broj učenika - četvrti razred | \n",
" Broj devojčica - četvrti razred | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1322 | \n",
" Severnobački upravni okrug | \n",
" Bačka Topola | \n",
" Poljoprivredna škola | \n",
" Poljoprivreda, proizvodnja i prerada hrane | \n",
" Poljoprivredni tehničar | \n",
" 4 | \n",
" Mađarski jezik | \n",
" 1 | \n",
" 24 | \n",
" 8 | \n",
" 1 | \n",
" 21 | \n",
" 8 | \n",
" 1 | \n",
" 11 | \n",
" 3 | \n",
" 1 | \n",
" 18 | \n",
" 6 | \n",
"
\n",
" \n",
" 1 | \n",
" 1322 | \n",
" Severnobački upravni okrug | \n",
" Bačka Topola | \n",
" Poljoprivredna škola | \n",
" Poljoprivreda, proizvodnja i prerada hrane | \n",
" Veterinarski tehničar | \n",
" 4 | \n",
" Mađarski jezik | \n",
" 1 | \n",
" 18 | \n",
" 7 | \n",
" 1 | \n",
" 21 | \n",
" 12 | \n",
" 1 | \n",
" 27 | \n",
" 13 | \n",
" 1 | \n",
" 17 | \n",
" 11 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" ID ustanove Okrug Opština \\\n",
"0 1322 Severnobački upravni okrug Bačka Topola \n",
"1 1322 Severnobački upravni okrug Bačka Topola \n",
"\n",
" Naziv ustanove Područje rada \\\n",
"0 Poljoprivredna škola Poljoprivreda, proizvodnja i prerada hrane \n",
"1 Poljoprivredna škola Poljoprivreda, proizvodnja i prerada hrane \n",
"\n",
" Obrazovni profil Trajanje obrazovanja Jezik nastave \\\n",
"0 Poljoprivredni tehničar 4 Mađarski jezik \n",
"1 Veterinarski tehničar 4 Mađarski jezik \n",
"\n",
" Broj odeljenja - prvi razred Broj učenika - prvi razred \\\n",
"0 1 24 \n",
"1 1 18 \n",
"\n",
" Broj devojčica - prvi razred Broj odeljenja - drugi razred \\\n",
"0 8 1 \n",
"1 7 1 \n",
"\n",
" Broj učenika - drugi razred Broj devojčica - drugi razred \\\n",
"0 21 8 \n",
"1 21 12 \n",
"\n",
" Broj odeljenja - treći razred Broj učenika - treći razred \\\n",
"0 1 11 \n",
"1 1 27 \n",
"\n",
" Broj devojčica - treći razred Broj odeljenja - četvrti razred \\\n",
"0 3 1 \n",
"1 13 1 \n",
"\n",
" Broj učenika - četvrti razred Broj devojčica - četvrti razred \n",
"0 18 6 \n",
"1 17 11 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = data[data.Vlasništvo!='Privatno']\n",
"data = data.drop(columns=['Vlasništvo'])\n",
"data.head(2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Како имамо податке о броју одељења по разреду и слично број ученика о разреду, у наставку ћемо додати још пар колона у којима ће се налазити подаци о укупном броју ученика, одељења сумирајући одговарајуће постојеће колоне."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"data['Ukupno odeljenja'] = data['Broj odeljenja - prvi razred']+data['Broj odeljenja - drugi razred']+data['Broj odeljenja - treći razred']+data['Broj odeljenja - četvrti razred']"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"data['Ukupno učenika'] = data['Broj učenika - prvi razred']+data['Broj učenika - drugi razred']+data['Broj učenika - treći razred']+data['Broj učenika - četvrti razred']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Из колона са укупним бројем ученика и одељења по образовним профилима и смеровима, можемо израчунати и просечан број ученика у одељењу на сваком од профила:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"data['Prosečan broj učenika u odeljenju'] = data['Ukupno učenika']/data['Ukupno odeljenja']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Међу подацима које обрађујемо имамо информације и о полу ученика, те ћемо из укупног броја ученика и укупног броја девојчица срачунати и број дечака. Поред укупног броја ученика по полу, израчунажемо и њихове процентуалне заступљености. За процентуалну заступљеност искористили смо и функцију **round** како бисмо ограничили број децимала на 2."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"data['Ukupno devojcica'] = data['Broj devojčica - prvi razred']+data['Broj devojčica - drugi razred']+data['Broj devojčica - treći razred']+data['Broj devojčica - četvrti razred']\n",
"data['Ukupno decaka'] = data['Ukupno učenika']-data['Ukupno devojcica']\n",
"data['Procenat devojcica'] = round(100*data['Ukupno devojcica']/data['Ukupno učenika'],2)\n",
"data['Procenat decaka'] = 100-data['Procenat devojcica']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"За анализу коју имамо у плану, неће нам бити потребни подаци о ученицима по разреду, стога ћемо и те колоне избрисати. (Ако имате на уму и неку анализу за коју је потребно да сачувате податке по разредима, прекочите наредну команду!)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" ID ustanove | \n",
" Okrug | \n",
" Opština | \n",
" Naziv ustanove | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
" Trajanje obrazovanja | \n",
" Jezik nastave | \n",
" Ukupno odeljenja | \n",
" Ukupno učenika | \n",
" Prosečan broj učenika u odeljenju | \n",
" Ukupno devojcica | \n",
" Ukupno decaka | \n",
" Procenat devojcica | \n",
" Procenat decaka | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1322 | \n",
" Severnobački upravni okrug | \n",
" Bačka Topola | \n",
" Poljoprivredna škola | \n",
" Poljoprivreda, proizvodnja i prerada hrane | \n",
" Poljoprivredni tehničar | \n",
" 4 | \n",
" Mađarski jezik | \n",
" 4 | \n",
" 74 | \n",
" 18.5 | \n",
" 25 | \n",
" 49 | \n",
" 33.78 | \n",
" 66.22 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" ID ustanove Okrug Opština \\\n",
"0 1322 Severnobački upravni okrug Bačka Topola \n",
"\n",
" Naziv ustanove Područje rada \\\n",
"0 Poljoprivredna škola Poljoprivreda, proizvodnja i prerada hrane \n",
"\n",
" Obrazovni profil Trajanje obrazovanja Jezik nastave \\\n",
"0 Poljoprivredni tehničar 4 Mađarski jezik \n",
"\n",
" Ukupno odeljenja Ukupno učenika Prosečan broj učenika u odeljenju \\\n",
"0 4 74 18.5 \n",
"\n",
" Ukupno devojcica Ukupno decaka Procenat devojcica Procenat decaka \n",
"0 25 49 33.78 66.22 "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = data.drop(columns=['Broj odeljenja - prvi razred',\n",
" 'Broj učenika - prvi razred', 'Broj devojčica - prvi razred',\n",
" 'Broj odeljenja - drugi razred', 'Broj učenika - drugi razred',\n",
" 'Broj devojčica - drugi razred', 'Broj odeljenja - treći razred',\n",
" 'Broj učenika - treći razred', 'Broj devojčica - treći razred',\n",
" 'Broj odeljenja - četvrti razred', 'Broj učenika - četvrti razred',\n",
" 'Broj devojčica - četvrti razred'])\n",
"data.head(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ову нову табелу можемо сачувати у .csv формату користећи функцију [**to_csv**](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_csv.html):"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"data.to_csv('MPNTRopendata_ss_pripremljeni.csv',index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Искористили смо и аргумент index да проследимо информацију функцији да не желимо да сачувамо колону индекс обзиром да се у њој налазе само редни бројеви и не носе додатно интересантне податке о средњошколцима."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Табела са подацима о средњим школама"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Поред информација о заступљености одређених средњошколских профила и њиховој заузетости која је описана у претходној табели, имамо на располагању и неке опште податке о средњим школама, учитаћемо и припремити и те податке:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" # | \n",
" ИД установе | \n",
" Школска управа | \n",
" Округ | \n",
" Општина | \n",
" Насеље | \n",
" Назив установе | \n",
" Адреса | \n",
" Поштански број | \n",
" Адреса електронске поште | \n",
" ... | \n",
" Број специјалних одељења | \n",
" Број ученика | \n",
" Број девојчица | \n",
" Број ученика - ИОП 1 | \n",
" Број ученика - ИОП 2 | \n",
" Број ученика - ИОП 3 | \n",
" Број наставника - без замена | \n",
" Укупна норма наставникаа - без замена | \n",
" Број запослених - без замена | \n",
" Укупна норма запослених- без замена | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1.0 | \n",
" 1322 | \n",
" Сомбор | \n",
" Севернобачки управни округ | \n",
" Бачка Топола | \n",
" Бачка Топола | \n",
" Пољопривредна школа | \n",
" Маршала Тита 167 | \n",
" 24300 | \n",
" psdirektor@gmail.com | \n",
" ... | \n",
" 0 | \n",
" 524 | \n",
" 222 | \n",
" 3 | \n",
" 6 | \n",
" 0 | \n",
" 74 | \n",
" 65.9749 | \n",
" 109 | \n",
" 103.4649 | \n",
"
\n",
" \n",
" 1 | \n",
" 2.0 | \n",
" 1323 | \n",
" Сомбор | \n",
" Севернобачки управни округ | \n",
" Бачка Топола | \n",
" Бачка Топола | \n",
" Средња техничка школа Шинковић Јожеф | \n",
" Tрг Зорана Ђинђића 10 | \n",
" 24300 | \n",
" sinjo@stcable.net | \n",
" ... | \n",
" 0 | \n",
" 318 | \n",
" 61 | \n",
" 0 | \n",
" 4 | \n",
" 0 | \n",
" 46 | \n",
" 32.8130 | \n",
" 60 | \n",
" 46.0330 | \n",
"
\n",
" \n",
"
\n",
"
2 rows × 29 columns
\n",
"
"
],
"text/plain": [
" # ИД установе Школска управа Округ Општина \\\n",
"0 1.0 1322 Сомбор Севернобачки управни округ Бачка Топола \n",
"1 2.0 1323 Сомбор Севернобачки управни округ Бачка Топола \n",
"\n",
" Насеље Назив установе Адреса \\\n",
"0 Бачка Топола Пољопривредна школа Маршала Тита 167 \n",
"1 Бачка Топола Средња техничка школа Шинковић Јожеф Tрг Зорана Ђинђића 10 \n",
"\n",
" Поштански број Адреса електронске поште ... Број специјалних одељења \\\n",
"0 24300 psdirektor@gmail.com ... 0 \n",
"1 24300 sinjo@stcable.net ... 0 \n",
"\n",
" Број ученика Број девојчица Број ученика - ИОП 1 Број ученика - ИОП 2 \\\n",
"0 524 222 3 6 \n",
"1 318 61 0 4 \n",
"\n",
" Број ученика - ИОП 3 Број наставника - без замена \\\n",
"0 0 74 \n",
"1 0 46 \n",
"\n",
" Укупна норма наставникаа - без замена Број запослених - без замена \\\n",
"0 65.9749 109 \n",
"1 32.8130 60 \n",
"\n",
" Укупна норма запослених- без замена \n",
"0 103.4649 \n",
"1 46.0330 \n",
"\n",
"[2 rows x 29 columns]"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"srednjeskole = pd.read_csv('data/srednjoskolci data/raw data/MPNTRopendata_ss_opsti.csv')\n",
"srednjeskole.head(2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Да бисмо видели све доступне колоне, искористићемо функцију **columns**:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['#', 'ИД установе', 'Школска управа', 'Округ', 'Општина', 'Насеље',\n",
" 'Назив установе', 'Адреса', 'Поштански број',\n",
" 'Адреса електронске поште', 'Телефон', 'Сајт', 'Матични број', 'ПИБ',\n",
" 'Датум оснивања', 'Примарна делатност', 'Власништво', 'Број одељења',\n",
" 'Број комбинованих одељења', 'Број специјалних одељења', 'Број ученика',\n",
" 'Број девојчица', 'Број ученика - ИОП 1', 'Број ученика - ИОП 2',\n",
" 'Број ученика - ИОП 3', 'Број наставника - без замена',\n",
" 'Укупна норма наставникаа - без замена', 'Број запослених - без замена',\n",
" 'Укупна норма запослених- без замена'],\n",
" dtype='object')"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"srednjeskole.columns"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Као и претходно, обрисаћемо неке од колона за које нам се чини да их нећемо даље анализирати:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" ИД установе | \n",
" Округ | \n",
" Општина | \n",
" Назив установе | \n",
" Власништво | \n",
" Број одељења | \n",
" Број комбинованих одељења | \n",
" Број специјалних одељења | \n",
" Број ученика | \n",
" Број девојчица | \n",
" Број наставника - без замена | \n",
" Укупна норма наставникаа - без замена | \n",
" Број запослених - без замена | \n",
" Укупна норма запослених- без замена | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1322 | \n",
" Севернобачки управни округ | \n",
" Бачка Топола | \n",
" Пољопривредна школа | \n",
" Државно | \n",
" 26 | \n",
" 5 | \n",
" 0 | \n",
" 524 | \n",
" 222 | \n",
" 74 | \n",
" 65.9749 | \n",
" 109 | \n",
" 103.4649 | \n",
"
\n",
" \n",
" 1 | \n",
" 1323 | \n",
" Севернобачки управни округ | \n",
" Бачка Топола | \n",
" Средња техничка школа Шинковић Јожеф | \n",
" Државно | \n",
" 15 | \n",
" 3 | \n",
" 0 | \n",
" 318 | \n",
" 61 | \n",
" 46 | \n",
" 32.8130 | \n",
" 60 | \n",
" 46.0330 | \n",
"
\n",
" \n",
" 2 | \n",
" 1324 | \n",
" Севернобачки управни округ | \n",
" Суботица - град | \n",
" Гимназија Светозар Марковић | \n",
" Државно | \n",
" 36 | \n",
" 0 | \n",
" 0 | \n",
" 855 | \n",
" 535 | \n",
" 76 | \n",
" 66.1000 | \n",
" 96 | \n",
" 87.3000 | \n",
"
\n",
" \n",
" 3 | \n",
" 1325 | \n",
" Севернобачки управни округ | \n",
" Суботица - град | \n",
" Економска средња школа Боса Милићевић | \n",
" Државно | \n",
" 28 | \n",
" 6 | \n",
" 0 | \n",
" 762 | \n",
" 483 | \n",
" 72 | \n",
" 59.8600 | \n",
" 87 | \n",
" 75.5500 | \n",
"
\n",
" \n",
" 4 | \n",
" 1326 | \n",
" Севернобачки управни округ | \n",
" Суботица - град | \n",
" Средња медицинска школа | \n",
" Државно | \n",
" 24 | \n",
" 0 | \n",
" 0 | \n",
" 684 | \n",
" 566 | \n",
" 125 | \n",
" 61.5051 | \n",
" 140 | \n",
" 78.0051 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" ИД установе Округ Општина \\\n",
"0 1322 Севернобачки управни округ Бачка Топола \n",
"1 1323 Севернобачки управни округ Бачка Топола \n",
"2 1324 Севернобачки управни округ Суботица - град \n",
"3 1325 Севернобачки управни округ Суботица - град \n",
"4 1326 Севернобачки управни округ Суботица - град \n",
"\n",
" Назив установе Власништво Број одељења \\\n",
"0 Пољопривредна школа Државно 26 \n",
"1 Средња техничка школа Шинковић Јожеф Државно 15 \n",
"2 Гимназија Светозар Марковић Државно 36 \n",
"3 Економска средња школа Боса Милићевић Државно 28 \n",
"4 Средња медицинска школа Државно 24 \n",
"\n",
" Број комбинованих одељења Број специјалних одељења Број ученика \\\n",
"0 5 0 524 \n",
"1 3 0 318 \n",
"2 0 0 855 \n",
"3 6 0 762 \n",
"4 0 0 684 \n",
"\n",
" Број девојчица Број наставника - без замена \\\n",
"0 222 74 \n",
"1 61 46 \n",
"2 535 76 \n",
"3 483 72 \n",
"4 566 125 \n",
"\n",
" Укупна норма наставникаа - без замена Број запослених - без замена \\\n",
"0 65.9749 109 \n",
"1 32.8130 60 \n",
"2 66.1000 96 \n",
"3 59.8600 87 \n",
"4 61.5051 140 \n",
"\n",
" Укупна норма запослених- без замена \n",
"0 103.4649 \n",
"1 46.0330 \n",
"2 87.3000 \n",
"3 75.5500 \n",
"4 78.0051 "
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"srednjeskole = srednjeskole.drop(columns=['#','Школска управа', 'Насеље','Адреса', 'Поштански број',\n",
" 'Адреса електронске поште', 'Телефон', 'Сајт', 'Матични број', 'ПИБ',\n",
" 'Датум оснивања', 'Примарна делатност', 'Број ученика - ИОП 1', 'Број ученика - ИОП 2',\n",
" 'Број ученика - ИОП 3'])\n",
"srednjeskole.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Промена писма у називима и садржају колона:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"srednjeskole.columns=[cyrtranslit.to_latin(text,'sr') for text in list(srednjeskole.columns)]\n",
"srednjeskole['Okrug']=[cyrtranslit.to_latin(text,'sr') for text in list(srednjeskole['Okrug'])]\n",
"srednjeskole['Opština']=[cyrtranslit.to_latin(text,'sr') for text in list(srednjeskole['Opština'])]\n",
"srednjeskole['Naziv ustanove']=[cyrtranslit.to_latin(text,'sr') for text in list(srednjeskole['Naziv ustanove'])]\n",
"srednjeskole['Vlasništvo']=[cyrtranslit.to_latin(text,'sr') for text in list(srednjeskole['Vlasništvo'])]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"И као што смо претходно закључили, како немамо довољно података о школама у приватном власништву фокусираћемо се само на школе које су у државном власништву:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" ID ustanove | \n",
" Okrug | \n",
" Opština | \n",
" Naziv ustanove | \n",
" Broj odeljenja | \n",
" Broj kombinovanih odeljenja | \n",
" Broj specijalnih odeljenja | \n",
" Broj učenika | \n",
" Broj devojčica | \n",
" Broj nastavnika - bez zamena | \n",
" Ukupna norma nastavnikaa - bez zamena | \n",
" Broj zaposlenih - bez zamena | \n",
" Ukupna norma zaposlenih- bez zamena | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1322 | \n",
" Severnobački upravni okrug | \n",
" Bačka Topola | \n",
" Poljoprivredna škola | \n",
" 26 | \n",
" 5 | \n",
" 0 | \n",
" 524 | \n",
" 222 | \n",
" 74 | \n",
" 65.9749 | \n",
" 109 | \n",
" 103.4649 | \n",
"
\n",
" \n",
" 1 | \n",
" 1323 | \n",
" Severnobački upravni okrug | \n",
" Bačka Topola | \n",
" Srednja tehnička škola Šinković Jožef | \n",
" 15 | \n",
" 3 | \n",
" 0 | \n",
" 318 | \n",
" 61 | \n",
" 46 | \n",
" 32.8130 | \n",
" 60 | \n",
" 46.0330 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" ID ustanove Okrug Opština \\\n",
"0 1322 Severnobački upravni okrug Bačka Topola \n",
"1 1323 Severnobački upravni okrug Bačka Topola \n",
"\n",
" Naziv ustanove Broj odeljenja \\\n",
"0 Poljoprivredna škola 26 \n",
"1 Srednja tehnička škola Šinković Jožef 15 \n",
"\n",
" Broj kombinovanih odeljenja Broj specijalnih odeljenja Broj učenika \\\n",
"0 5 0 524 \n",
"1 3 0 318 \n",
"\n",
" Broj devojčica Broj nastavnika - bez zamena \\\n",
"0 222 74 \n",
"1 61 46 \n",
"\n",
" Ukupna norma nastavnikaa - bez zamena Broj zaposlenih - bez zamena \\\n",
"0 65.9749 109 \n",
"1 32.8130 60 \n",
"\n",
" Ukupna norma zaposlenih- bez zamena \n",
"0 103.4649 \n",
"1 46.0330 "
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"srednjeskole = srednjeskole[srednjeskole['Vlasništvo']=='Državno']\n",
"srednjeskole = srednjeskole.drop(columns=['Vlasništvo'])\n",
"srednjeskole.head(2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"И ову табелу ћемо сачувати у csv формату:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"srednjeskole.to_csv('MPNTRopendata_sskole_pripremljeni.csv',index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Припрема података за анализу и визуализацију по окрузима:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Претхнодна табела о средњим школама садржи информације о округу и општини на којој се школа налази што се може искористити да се подаци агрегирају на нивоу ових просторних јединица и на тај начин можемо припремити податке за даљу анализу. За груписање по округу, користићемо фукцију [**groupby**](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html). Ова функција креира подтабеле редова који имају исту вредност по колони коју користимо као аргумент функције (на пример, ако групишемо по Округу, ишод су подтабеле за сваки округ). Ако не желимо целе подтабеле, често сумирамо по одређеним колонама (на пример када желимо да знамо укупан број ђака у сваком округу) или бројимо колико има вредности (на пример када желимо да знамо број школа или образовних профила). Хајде да видимо како то ради:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Broj učenika | \n",
" Broj devojčica | \n",
" Broj odeljenja | \n",
" Broj nastavnika - bez zamena | \n",
" Ukupna norma nastavnikaa - bez zamena | \n",
"
\n",
" \n",
" Okrug | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Borski upravni okrug | \n",
" 3281 | \n",
" 1542 | \n",
" 140 | \n",
" 432 | \n",
" 290.9780 | \n",
"
\n",
" \n",
" Braničevski upravni okrug | \n",
" 4953 | \n",
" 2452 | \n",
" 196 | \n",
" 525 | \n",
" 393.9538 | \n",
"
\n",
" \n",
" Grad Beograd | \n",
" 57359 | \n",
" 28604 | \n",
" 2096 | \n",
" 5236 | \n",
" 4534.7198 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Broj učenika Broj devojčica Broj odeljenja \\\n",
"Okrug \n",
"Borski upravni okrug 3281 1542 140 \n",
"Braničevski upravni okrug 4953 2452 196 \n",
"Grad Beograd 57359 28604 2096 \n",
"\n",
" Broj nastavnika - bez zamena \\\n",
"Okrug \n",
"Borski upravni okrug 432 \n",
"Braničevski upravni okrug 525 \n",
"Grad Beograd 5236 \n",
"\n",
" Ukupna norma nastavnikaa - bez zamena \n",
"Okrug \n",
"Borski upravni okrug 290.9780 \n",
"Braničevski upravni okrug 393.9538 \n",
"Grad Beograd 4534.7198 "
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"skolepookruzima = srednjeskole.groupby(['Okrug'])[['Broj učenika','Broj devojčica','Broj odeljenja','Broj nastavnika - bez zamena','Ukupna norma nastavnikaa - bez zamena']].sum()\n",
"skolepookruzima.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Проверите да ли су бројеви које смо на овај начин добили тачни.*\n",
"(Сугестија: селектујте делове табеле, нпр. ```skolepookruzima[skolepookruzima['Okrug']=='Borski upravni okrug']``` ће излистати све редове у којима је округ Борски, користећи функцију **sum** можете проверити горње вредности.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Како је овој новој табели индекс колона округ по коме смо груписали претходну табелу, ресетоваћемо индекс (користећи функцију [**reset_index**](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reset_index.html)), тј. индекс ће постати број:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Broj učenika | \n",
" Broj devojčica | \n",
" Broj odeljenja | \n",
" Broj nastavnika - bez zamena | \n",
" Ukupna norma nastavnikaa - bez zamena | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" 3281 | \n",
" 1542 | \n",
" 140 | \n",
" 432 | \n",
" 290.9780 | \n",
"
\n",
" \n",
" 1 | \n",
" Braničevski upravni okrug | \n",
" 4953 | \n",
" 2452 | \n",
" 196 | \n",
" 525 | \n",
" 393.9538 | \n",
"
\n",
" \n",
" 2 | \n",
" Grad Beograd | \n",
" 57359 | \n",
" 28604 | \n",
" 2096 | \n",
" 5236 | \n",
" 4534.7198 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Broj učenika Broj devojčica Broj odeljenja \\\n",
"0 Borski upravni okrug 3281 1542 140 \n",
"1 Braničevski upravni okrug 4953 2452 196 \n",
"2 Grad Beograd 57359 28604 2096 \n",
"\n",
" Broj nastavnika - bez zamena Ukupna norma nastavnikaa - bez zamena \n",
"0 432 290.9780 \n",
"1 525 393.9538 \n",
"2 5236 4534.7198 "
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"skolepookruzima = skolepookruzima.reset_index()\n",
"skolepookruzima.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Слично користећи функцију **groupby** и **size** за величину сваке од група, можемо у новој табели сачивати вредности о броју средњих школа по округу:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Broj skola | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" 10 | \n",
"
\n",
" \n",
" 1 | \n",
" Braničevski upravni okrug | \n",
" 10 | \n",
"
\n",
" \n",
" 2 | \n",
" Grad Beograd | \n",
" 72 | \n",
"
\n",
" \n",
" 3 | \n",
" Jablanički upravni okrug | \n",
" 17 | \n",
"
\n",
" \n",
" 4 | \n",
" Južnobanatski upravni okrug | \n",
" 17 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Broj skola\n",
"0 Borski upravni okrug 10\n",
"1 Braničevski upravni okrug 10\n",
"2 Grad Beograd 72\n",
"3 Jablanički upravni okrug 17\n",
"4 Južnobanatski upravni okrug 17"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"brsskolapookrugu = srednjeskole.groupby(['Okrug']).size().reset_index(name='Broj skola')\n",
"brsskolapookrugu.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Претходно креиране две табеле *skolepookruzima* и *brsskolapookrugu* имају заједничку колону округ, па њу можемо искористи да на основу ње спојимо податке у једну табелу. То радимо уз помоћ функције [**merge**](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html) којој је поред две табеле које спајамо потребно проследити и аргумент *on* којим дефинишемо по којој колони спајамо табеле:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Broj učenika | \n",
" Broj devojčica | \n",
" Broj odeljenja | \n",
" Broj nastavnika - bez zamena | \n",
" Ukupna norma nastavnikaa - bez zamena | \n",
" Broj skola | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" 3281 | \n",
" 1542 | \n",
" 140 | \n",
" 432 | \n",
" 290.9780 | \n",
" 10 | \n",
"
\n",
" \n",
" 1 | \n",
" Braničevski upravni okrug | \n",
" 4953 | \n",
" 2452 | \n",
" 196 | \n",
" 525 | \n",
" 393.9538 | \n",
" 10 | \n",
"
\n",
" \n",
" 2 | \n",
" Grad Beograd | \n",
" 57359 | \n",
" 28604 | \n",
" 2096 | \n",
" 5236 | \n",
" 4534.7198 | \n",
" 72 | \n",
"
\n",
" \n",
" 3 | \n",
" Jablanički upravni okrug | \n",
" 7677 | \n",
" 3749 | \n",
" 311 | \n",
" 994 | \n",
" 667.1526 | \n",
" 17 | \n",
"
\n",
" \n",
" 4 | \n",
" Južnobanatski upravni okrug | \n",
" 8848 | \n",
" 4281 | \n",
" 341 | \n",
" 970 | \n",
" 748.8520 | \n",
" 17 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Broj učenika Broj devojčica Broj odeljenja \\\n",
"0 Borski upravni okrug 3281 1542 140 \n",
"1 Braničevski upravni okrug 4953 2452 196 \n",
"2 Grad Beograd 57359 28604 2096 \n",
"3 Jablanički upravni okrug 7677 3749 311 \n",
"4 Južnobanatski upravni okrug 8848 4281 341 \n",
"\n",
" Broj nastavnika - bez zamena Ukupna norma nastavnikaa - bez zamena \\\n",
"0 432 290.9780 \n",
"1 525 393.9538 \n",
"2 5236 4534.7198 \n",
"3 994 667.1526 \n",
"4 970 748.8520 \n",
"\n",
" Broj skola \n",
"0 10 \n",
"1 10 \n",
"2 72 \n",
"3 17 \n",
"4 17 "
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"infopookruzima = pd.merge(skolepookruzima,brsskolapookrugu,on='Okrug')\n",
"infopookruzima.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Направићемо још једну табелу која ће по окрузима пребројати број различитих опција за средњошколско образовање. Ове различите опције - број различитих подручја рада и број различитих образовних профила добићемо функцијом **nunique**:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" 9 | \n",
" 52 | \n",
"
\n",
" \n",
" 1 | \n",
" Braničevski upravni okrug | \n",
" 9 | \n",
" 52 | \n",
"
\n",
" \n",
" 2 | \n",
" Grad Beograd | \n",
" 16 | \n",
" 206 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Područje rada Obrazovni profil\n",
"0 Borski upravni okrug 9 52\n",
"1 Braničevski upravni okrug 9 52\n",
"2 Grad Beograd 16 206"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"opcijepookruzima = data.groupby(['Okrug'])[['Područje rada','Obrazovni profil']].nunique()\n",
"opcijepookruzima = opcijepookruzima.reset_index()\n",
"opcijepookruzima.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"И ове податке ћемо спојити са претходном табелом у којој су до сада сачувани прикупљени подаци по окрузима:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Broj učenika | \n",
" Broj devojčica | \n",
" Broj odeljenja | \n",
" Broj nastavnika - bez zamena | \n",
" Ukupna norma nastavnikaa - bez zamena | \n",
" Broj skola | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" 3281 | \n",
" 1542 | \n",
" 140 | \n",
" 432 | \n",
" 290.9780 | \n",
" 10 | \n",
" 9 | \n",
" 52 | \n",
"
\n",
" \n",
" 1 | \n",
" Braničevski upravni okrug | \n",
" 4953 | \n",
" 2452 | \n",
" 196 | \n",
" 525 | \n",
" 393.9538 | \n",
" 10 | \n",
" 9 | \n",
" 52 | \n",
"
\n",
" \n",
" 2 | \n",
" Grad Beograd | \n",
" 57359 | \n",
" 28604 | \n",
" 2096 | \n",
" 5236 | \n",
" 4534.7198 | \n",
" 72 | \n",
" 16 | \n",
" 206 | \n",
"
\n",
" \n",
" 3 | \n",
" Jablanički upravni okrug | \n",
" 7677 | \n",
" 3749 | \n",
" 311 | \n",
" 994 | \n",
" 667.1526 | \n",
" 17 | \n",
" 15 | \n",
" 77 | \n",
"
\n",
" \n",
" 4 | \n",
" Južnobanatski upravni okrug | \n",
" 8848 | \n",
" 4281 | \n",
" 341 | \n",
" 970 | \n",
" 748.8520 | \n",
" 17 | \n",
" 12 | \n",
" 76 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Broj učenika Broj devojčica Broj odeljenja \\\n",
"0 Borski upravni okrug 3281 1542 140 \n",
"1 Braničevski upravni okrug 4953 2452 196 \n",
"2 Grad Beograd 57359 28604 2096 \n",
"3 Jablanički upravni okrug 7677 3749 311 \n",
"4 Južnobanatski upravni okrug 8848 4281 341 \n",
"\n",
" Broj nastavnika - bez zamena Ukupna norma nastavnikaa - bez zamena \\\n",
"0 432 290.9780 \n",
"1 525 393.9538 \n",
"2 5236 4534.7198 \n",
"3 994 667.1526 \n",
"4 970 748.8520 \n",
"\n",
" Broj skola Područje rada Obrazovni profil \n",
"0 10 9 52 \n",
"1 10 9 52 \n",
"2 72 16 206 \n",
"3 17 15 77 \n",
"4 17 12 76 "
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"infopookruzima = pd.merge(infopookruzima,opcijepookruzima,on='Okrug')\n",
"infopookruzima.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Коначно, један тип средњих школа има често специјалан статус - гимназије - па ћемо прикупити и податке колико се ученика школује у гимназијама на територији различитих округа:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Ukupno gimnazijalaca | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" 770 | \n",
"
\n",
" \n",
" 1 | \n",
" Braničevski upravni okrug | \n",
" 1137 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Ukupno gimnazijalaca\n",
"0 Borski upravni okrug 770\n",
"1 Braničevski upravni okrug 1137"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gimnazijalci = data[data['Područje rada']=='Gimnazija'].groupby('Okrug')['Ukupno učenika'].sum()\n",
"gimnazijalci = gimnazijalci.reset_index()\n",
"gimnazijalci = gimnazijalci.rename(columns={'Ukupno učenika':'Ukupno gimnazijalaca'})\n",
"gimnazijalci.head(2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"И њих ћемо додати у табелу *infopookruzima*:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Broj učenika | \n",
" Broj devojčica | \n",
" Broj odeljenja | \n",
" Broj nastavnika - bez zamena | \n",
" Ukupna norma nastavnikaa - bez zamena | \n",
" Broj skola | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
" Ukupno gimnazijalaca | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" 3281 | \n",
" 1542 | \n",
" 140 | \n",
" 432 | \n",
" 290.9780 | \n",
" 10 | \n",
" 9 | \n",
" 52 | \n",
" 770 | \n",
"
\n",
" \n",
" 1 | \n",
" Braničevski upravni okrug | \n",
" 4953 | \n",
" 2452 | \n",
" 196 | \n",
" 525 | \n",
" 393.9538 | \n",
" 10 | \n",
" 9 | \n",
" 52 | \n",
" 1137 | \n",
"
\n",
" \n",
" 2 | \n",
" Grad Beograd | \n",
" 57359 | \n",
" 28604 | \n",
" 2096 | \n",
" 5236 | \n",
" 4534.7198 | \n",
" 72 | \n",
" 16 | \n",
" 206 | \n",
" 18862 | \n",
"
\n",
" \n",
" 3 | \n",
" Jablanički upravni okrug | \n",
" 7677 | \n",
" 3749 | \n",
" 311 | \n",
" 994 | \n",
" 667.1526 | \n",
" 17 | \n",
" 15 | \n",
" 77 | \n",
" 1389 | \n",
"
\n",
" \n",
" 4 | \n",
" Južnobanatski upravni okrug | \n",
" 8848 | \n",
" 4281 | \n",
" 341 | \n",
" 970 | \n",
" 748.8520 | \n",
" 17 | \n",
" 12 | \n",
" 76 | \n",
" 1828 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Broj učenika Broj devojčica Broj odeljenja \\\n",
"0 Borski upravni okrug 3281 1542 140 \n",
"1 Braničevski upravni okrug 4953 2452 196 \n",
"2 Grad Beograd 57359 28604 2096 \n",
"3 Jablanički upravni okrug 7677 3749 311 \n",
"4 Južnobanatski upravni okrug 8848 4281 341 \n",
"\n",
" Broj nastavnika - bez zamena Ukupna norma nastavnikaa - bez zamena \\\n",
"0 432 290.9780 \n",
"1 525 393.9538 \n",
"2 5236 4534.7198 \n",
"3 994 667.1526 \n",
"4 970 748.8520 \n",
"\n",
" Broj skola Područje rada Obrazovni profil Ukupno gimnazijalaca \n",
"0 10 9 52 770 \n",
"1 10 9 52 1137 \n",
"2 72 16 206 18862 \n",
"3 17 15 77 1389 \n",
"4 17 12 76 1828 "
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"infopookruzima = pd.merge(infopookruzima,gimnazijalci,on='Okrug')\n",
"infopookruzima.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Табелу *infopookruzima* која сада садржи прегршт агрегираних података на нивоу округа ћемо сачувати у .csv за даљу анализу: "
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"infopookruzima.to_csv('MPNTR_podaci_po_okruzima.csv',encoding='UTF-16',index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Припрема података за анализу и визуализацију по општинама:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Слично ћемо поновити и са општинама. Како постоје примери оштина истог назива (нпр. Палилула), груписање ћемо сада вршити по пару колона - округ и општина:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Opština | \n",
" Broj učenika | \n",
" Broj devojčica | \n",
" Broj odeljenja | \n",
" Broj nastavnika - bez zamena | \n",
" Ukupna norma nastavnikaa - bez zamena | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" Bor | \n",
" 1544 | \n",
" 751 | \n",
" 64 | \n",
" 184 | \n",
" 130.8821 | \n",
"
\n",
" \n",
" 1 | \n",
" Borski upravni okrug | \n",
" Kladovo | \n",
" 465 | \n",
" 210 | \n",
" 19 | \n",
" 51 | \n",
" 38.8610 | \n",
"
\n",
" \n",
" 2 | \n",
" Borski upravni okrug | \n",
" Majdanpek | \n",
" 380 | \n",
" 165 | \n",
" 18 | \n",
" 69 | \n",
" 38.2098 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Opština Broj učenika Broj devojčica \\\n",
"0 Borski upravni okrug Bor 1544 751 \n",
"1 Borski upravni okrug Kladovo 465 210 \n",
"2 Borski upravni okrug Majdanpek 380 165 \n",
"\n",
" Broj odeljenja Broj nastavnika - bez zamena \\\n",
"0 64 184 \n",
"1 19 51 \n",
"2 18 69 \n",
"\n",
" Ukupna norma nastavnikaa - bez zamena \n",
"0 130.8821 \n",
"1 38.8610 \n",
"2 38.2098 "
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"skolepoopstinama = srednjeskole.groupby(['Okrug','Opština'])[['Broj učenika','Broj devojčica','Broj odeljenja','Broj nastavnika - bez zamena','Ukupna norma nastavnikaa - bez zamena']].sum()\n",
"skolepoopstinama = skolepoopstinama.reset_index()\n",
"skolepoopstinama.head(3)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Opština | \n",
" Broj skola | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" Bor | \n",
" 4 | \n",
"
\n",
" \n",
" 1 | \n",
" Borski upravni okrug | \n",
" Kladovo | \n",
" 1 | \n",
"
\n",
" \n",
" 2 | \n",
" Borski upravni okrug | \n",
" Majdanpek | \n",
" 2 | \n",
"
\n",
" \n",
" 3 | \n",
" Borski upravni okrug | \n",
" Negotin | \n",
" 3 | \n",
"
\n",
" \n",
" 4 | \n",
" Braničevski upravni okrug | \n",
" Kostolac | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Opština Broj skola\n",
"0 Borski upravni okrug Bor 4\n",
"1 Borski upravni okrug Kladovo 1\n",
"2 Borski upravni okrug Majdanpek 2\n",
"3 Borski upravni okrug Negotin 3\n",
"4 Braničevski upravni okrug Kostolac 1"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"brsskolapoopstini = srednjeskole.groupby(['Okrug','Opština']).size()\n",
"brsskolapoopstini = brsskolapoopstini.reset_index()\n",
"brsskolapoopstini = brsskolapoopstini.rename(columns={0:'Broj skola'})\n",
"brsskolapoopstini.head()"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Opština | \n",
" Broj učenika | \n",
" Broj devojčica | \n",
" Broj odeljenja | \n",
" Broj nastavnika - bez zamena | \n",
" Ukupna norma nastavnikaa - bez zamena | \n",
" Broj skola | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" Bor | \n",
" 1544 | \n",
" 751 | \n",
" 64 | \n",
" 184 | \n",
" 130.8821 | \n",
" 4 | \n",
"
\n",
" \n",
" 1 | \n",
" Borski upravni okrug | \n",
" Kladovo | \n",
" 465 | \n",
" 210 | \n",
" 19 | \n",
" 51 | \n",
" 38.8610 | \n",
" 1 | \n",
"
\n",
" \n",
" 2 | \n",
" Borski upravni okrug | \n",
" Majdanpek | \n",
" 380 | \n",
" 165 | \n",
" 18 | \n",
" 69 | \n",
" 38.2098 | \n",
" 2 | \n",
"
\n",
" \n",
" 3 | \n",
" Borski upravni okrug | \n",
" Negotin | \n",
" 892 | \n",
" 416 | \n",
" 39 | \n",
" 128 | \n",
" 83.0251 | \n",
" 3 | \n",
"
\n",
" \n",
" 4 | \n",
" Braničevski upravni okrug | \n",
" Kostolac | \n",
" 763 | \n",
" 137 | \n",
" 32 | \n",
" 78 | \n",
" 65.5550 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Opština Broj učenika Broj devojčica \\\n",
"0 Borski upravni okrug Bor 1544 751 \n",
"1 Borski upravni okrug Kladovo 465 210 \n",
"2 Borski upravni okrug Majdanpek 380 165 \n",
"3 Borski upravni okrug Negotin 892 416 \n",
"4 Braničevski upravni okrug Kostolac 763 137 \n",
"\n",
" Broj odeljenja Broj nastavnika - bez zamena \\\n",
"0 64 184 \n",
"1 19 51 \n",
"2 18 69 \n",
"3 39 128 \n",
"4 32 78 \n",
"\n",
" Ukupna norma nastavnikaa - bez zamena Broj skola \n",
"0 130.8821 4 \n",
"1 38.8610 1 \n",
"2 38.2098 2 \n",
"3 83.0251 3 \n",
"4 65.5550 1 "
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"infopoopstinama = pd.merge(skolepoopstinama,brsskolapoopstini,on=['Okrug','Opština'])\n",
"infopoopstinama.head()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Opština | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" Bor | \n",
" 9 | \n",
" 30 | \n",
"
\n",
" \n",
" 1 | \n",
" Borski upravni okrug | \n",
" Kladovo | \n",
" 5 | \n",
" 15 | \n",
"
\n",
" \n",
" 2 | \n",
" Borski upravni okrug | \n",
" Majdanpek | \n",
" 4 | \n",
" 9 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Opština Područje rada Obrazovni profil\n",
"0 Borski upravni okrug Bor 9 30\n",
"1 Borski upravni okrug Kladovo 5 15\n",
"2 Borski upravni okrug Majdanpek 4 9"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"opcijepoopstinama = data.groupby(['Okrug','Opština'])[['Područje rada','Obrazovni profil']].nunique()\n",
"opcijepoopstinama = opcijepoopstinama.reset_index()\n",
"opcijepoopstinama.head(3)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Opština | \n",
" Broj učenika | \n",
" Broj devojčica | \n",
" Broj odeljenja | \n",
" Broj nastavnika - bez zamena | \n",
" Ukupna norma nastavnikaa - bez zamena | \n",
" Broj skola | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" Bor | \n",
" 1544 | \n",
" 751 | \n",
" 64 | \n",
" 184 | \n",
" 130.8821 | \n",
" 4 | \n",
" 9 | \n",
" 30 | \n",
"
\n",
" \n",
" 1 | \n",
" Borski upravni okrug | \n",
" Kladovo | \n",
" 465 | \n",
" 210 | \n",
" 19 | \n",
" 51 | \n",
" 38.8610 | \n",
" 1 | \n",
" 5 | \n",
" 15 | \n",
"
\n",
" \n",
" 2 | \n",
" Borski upravni okrug | \n",
" Majdanpek | \n",
" 380 | \n",
" 165 | \n",
" 18 | \n",
" 69 | \n",
" 38.2098 | \n",
" 2 | \n",
" 4 | \n",
" 9 | \n",
"
\n",
" \n",
" 3 | \n",
" Borski upravni okrug | \n",
" Negotin | \n",
" 892 | \n",
" 416 | \n",
" 39 | \n",
" 128 | \n",
" 83.0251 | \n",
" 3 | \n",
" 5 | \n",
" 20 | \n",
"
\n",
" \n",
" 4 | \n",
" Braničevski upravni okrug | \n",
" Kostolac | \n",
" 763 | \n",
" 137 | \n",
" 32 | \n",
" 78 | \n",
" 65.5550 | \n",
" 1 | \n",
" 3 | \n",
" 13 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Opština Broj učenika Broj devojčica \\\n",
"0 Borski upravni okrug Bor 1544 751 \n",
"1 Borski upravni okrug Kladovo 465 210 \n",
"2 Borski upravni okrug Majdanpek 380 165 \n",
"3 Borski upravni okrug Negotin 892 416 \n",
"4 Braničevski upravni okrug Kostolac 763 137 \n",
"\n",
" Broj odeljenja Broj nastavnika - bez zamena \\\n",
"0 64 184 \n",
"1 19 51 \n",
"2 18 69 \n",
"3 39 128 \n",
"4 32 78 \n",
"\n",
" Ukupna norma nastavnikaa - bez zamena Broj skola Područje rada \\\n",
"0 130.8821 4 9 \n",
"1 38.8610 1 5 \n",
"2 38.2098 2 4 \n",
"3 83.0251 3 5 \n",
"4 65.5550 1 3 \n",
"\n",
" Obrazovni profil \n",
"0 30 \n",
"1 15 \n",
"2 9 \n",
"3 20 \n",
"4 13 "
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"infopoopstinama = pd.merge(infopoopstinama,opcijepoopstinama,on=['Okrug','Opština'])\n",
"infopoopstinama.head()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Opština | \n",
" Ukupno gimnazijalaca | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" Bor | \n",
" 303 | \n",
"
\n",
" \n",
" 1 | \n",
" Borski upravni okrug | \n",
" Kladovo | \n",
" 93 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Opština Ukupno gimnazijalaca\n",
"0 Borski upravni okrug Bor 303\n",
"1 Borski upravni okrug Kladovo 93"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gimnazijalci = data[data['Područje rada']=='Gimnazija'].groupby(['Okrug','Opština'])['Ukupno učenika'].sum()\n",
"gimnazijalci = gimnazijalci.reset_index()\n",
"gimnazijalci = gimnazijalci.rename(columns={'Ukupno učenika':'Ukupno gimnazijalaca'})\n",
"gimnazijalci.head(2)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Opština | \n",
" Broj učenika | \n",
" Broj devojčica | \n",
" Broj odeljenja | \n",
" Broj nastavnika - bez zamena | \n",
" Ukupna norma nastavnikaa - bez zamena | \n",
" Broj skola | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
" Ukupno gimnazijalaca | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" Bor | \n",
" 1544 | \n",
" 751 | \n",
" 64 | \n",
" 184 | \n",
" 130.8821 | \n",
" 4 | \n",
" 9 | \n",
" 30 | \n",
" 303 | \n",
"
\n",
" \n",
" 1 | \n",
" Borski upravni okrug | \n",
" Kladovo | \n",
" 465 | \n",
" 210 | \n",
" 19 | \n",
" 51 | \n",
" 38.8610 | \n",
" 1 | \n",
" 5 | \n",
" 15 | \n",
" 93 | \n",
"
\n",
" \n",
" 2 | \n",
" Borski upravni okrug | \n",
" Majdanpek | \n",
" 380 | \n",
" 165 | \n",
" 18 | \n",
" 69 | \n",
" 38.2098 | \n",
" 2 | \n",
" 4 | \n",
" 9 | \n",
" 82 | \n",
"
\n",
" \n",
" 3 | \n",
" Borski upravni okrug | \n",
" Negotin | \n",
" 892 | \n",
" 416 | \n",
" 39 | \n",
" 128 | \n",
" 83.0251 | \n",
" 3 | \n",
" 5 | \n",
" 20 | \n",
" 292 | \n",
"
\n",
" \n",
" 4 | \n",
" Braničevski upravni okrug | \n",
" Petrovac na Mlavi | \n",
" 468 | \n",
" 266 | \n",
" 19 | \n",
" 44 | \n",
" 35.0179 | \n",
" 1 | \n",
" 3 | \n",
" 5 | \n",
" 210 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Opština Broj učenika Broj devojčica \\\n",
"0 Borski upravni okrug Bor 1544 751 \n",
"1 Borski upravni okrug Kladovo 465 210 \n",
"2 Borski upravni okrug Majdanpek 380 165 \n",
"3 Borski upravni okrug Negotin 892 416 \n",
"4 Braničevski upravni okrug Petrovac na Mlavi 468 266 \n",
"\n",
" Broj odeljenja Broj nastavnika - bez zamena \\\n",
"0 64 184 \n",
"1 19 51 \n",
"2 18 69 \n",
"3 39 128 \n",
"4 19 44 \n",
"\n",
" Ukupna norma nastavnikaa - bez zamena Broj skola Područje rada \\\n",
"0 130.8821 4 9 \n",
"1 38.8610 1 5 \n",
"2 38.2098 2 4 \n",
"3 83.0251 3 5 \n",
"4 35.0179 1 3 \n",
"\n",
" Obrazovni profil Ukupno gimnazijalaca \n",
"0 30 303 \n",
"1 15 93 \n",
"2 9 82 \n",
"3 20 292 \n",
"4 5 210 "
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"infopoopstinama = pd.merge(infopoopstinama,gimnazijalci,on=['Okrug','Opština'])\n",
"infopoopstinama.head()"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Opština | \n",
" Ukupno u trogodisnjim ss | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" Bor | \n",
" 163 | \n",
"
\n",
" \n",
" 1 | \n",
" Borski upravni okrug | \n",
" Kladovo | \n",
" 70 | \n",
"
\n",
" \n",
" 2 | \n",
" Borski upravni okrug | \n",
" Majdanpek | \n",
" 53 | \n",
"
\n",
" \n",
" 3 | \n",
" Borski upravni okrug | \n",
" Negotin | \n",
" 140 | \n",
"
\n",
" \n",
" 4 | \n",
" Braničevski upravni okrug | \n",
" Kostolac | \n",
" 78 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Opština Ukupno u trogodisnjim ss\n",
"0 Borski upravni okrug Bor 163\n",
"1 Borski upravni okrug Kladovo 70\n",
"2 Borski upravni okrug Majdanpek 53\n",
"3 Borski upravni okrug Negotin 140\n",
"4 Braničevski upravni okrug Kostolac 78"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trogodisnjepoopstini = data[data['Trajanje obrazovanja']==3].groupby(['Okrug','Opština'])['Ukupno učenika'].sum()\n",
"trogodisnjepoopstini = trogodisnjepoopstini.reset_index()\n",
"trogodisnjepoopstini = trogodisnjepoopstini.rename(columns={'Ukupno učenika':'Ukupno u trogodisnjim ss'})\n",
"trogodisnjepoopstini.head()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Okrug | \n",
" Opština | \n",
" Broj učenika | \n",
" Broj devojčica | \n",
" Broj odeljenja | \n",
" Broj nastavnika - bez zamena | \n",
" Ukupna norma nastavnikaa - bez zamena | \n",
" Broj skola | \n",
" Područje rada | \n",
" Obrazovni profil | \n",
" Ukupno gimnazijalaca | \n",
" Ukupno u trogodisnjim ss | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Borski upravni okrug | \n",
" Bor | \n",
" 1544 | \n",
" 751 | \n",
" 64 | \n",
" 184 | \n",
" 130.8821 | \n",
" 4 | \n",
" 9 | \n",
" 30 | \n",
" 303 | \n",
" 163 | \n",
"
\n",
" \n",
" 1 | \n",
" Borski upravni okrug | \n",
" Kladovo | \n",
" 465 | \n",
" 210 | \n",
" 19 | \n",
" 51 | \n",
" 38.8610 | \n",
" 1 | \n",
" 5 | \n",
" 15 | \n",
" 93 | \n",
" 70 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Okrug Opština Broj učenika Broj devojčica \\\n",
"0 Borski upravni okrug Bor 1544 751 \n",
"1 Borski upravni okrug Kladovo 465 210 \n",
"\n",
" Broj odeljenja Broj nastavnika - bez zamena \\\n",
"0 64 184 \n",
"1 19 51 \n",
"\n",
" Ukupna norma nastavnikaa - bez zamena Broj skola Područje rada \\\n",
"0 130.8821 4 9 \n",
"1 38.8610 1 5 \n",
"\n",
" Obrazovni profil Ukupno gimnazijalaca Ukupno u trogodisnjim ss \n",
"0 30 303 163 \n",
"1 15 93 70 "
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"infopoopstinama = pd.merge(infopoopstinama,trogodisnjepoopstini,on=['Okrug','Opština'])\n",
"infopoopstinama.head(2)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
"infopoopstinama.to_csv('MPNTR_podaci_po_opstinama.csv',encoding='UTF-16',index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"У овој радној свесци испробали смо различите функције у оквиру *pandas* библиотеке, неке једноставне (као read_csv, head, info, drop, rename) али и неке захтевније (нпр. groupby, merge) све са циљем припреме података за даљу анализу и визуализације. А сада, хајде да видимо детљније шта нам говоре ови подаци!"
]
},
{
"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.9.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}