Средњошколци у Републици Србији¶
У Стратегији развоја образовања у Србији до 2020. године, неки од постављених циљева тичу се повећања ученика у гимназијама, повећања доступности образовања у различитим географским регијама и исто је мотивисано следећим циатаом из Стратегије: "Када се погледа просечна зарада по општинама и окрузима у јуну 2010. године, види се да велики део општина које имају скромну понуду средњих школа спада у категорију оних где су мање просечне зараде (РЗС, 2010).". У наставку ћемо испитати да ли доступност различитих средњошколских профила зависи од општине и округа и проверити да ли и даље важи запажање из стретегије које повезује приходе у општини и доступност образовања.
Као и у претходој радној свесци о средњошколском образовању користимо дотеране податке (радна свеска у којој су подаци сређени такође се налази у локалном фолдеру) преузете са платформе отворених података Министарства за просвету, науку и технолошки развој: http://opendata.mpn.gov.rs/. Додатно, анализу у наставку допунићемо и подацима Републичког завода за статистику о просечним примањима по општинама које је могуће преузети овде: https://data.stat.gov.rs/ У овој радној свесци поновићемо цртање хистограма, а податке о зарадама и доступном образовању анализираћемо тачкастим дијаграмима.
import pandas as pd # библиотека функција за обраду табеларних података
import numpy as np # библиотека функција за манипулацију низовима
import matplotlib.pyplot as plt # библиотека функција за визуелизацију податка
import seaborn as sns # библиотека функција за визуелизацију податка
Као и претходно, истраживање података ћемо почети њиховим учитавањем уз помоћ pandas библиотеке:
ss_okruzi = pd.read_csv('data/srednjoskolci data/MPNTR_podaci_po_okruzima.csv',encoding='UTF-16')
ss_okruzi.head(2)
ss_opstine = pd.read_csv('data/srednjoskolci data/MPNTR_podaci_po_opstinama.csv',encoding='UTF-16')
ss_opstine.head(2)
Кратко подсећање на хистограме којима смо се бавили у претходној радној свесци - погледајмо како изгледа број ученика у различитим општинама:
plt.hist(ss_opstine['Broj učenika'],bins=range(0,18000,1000),color='darkgrey')
plt.xlabel('Broj učenika srednje škole u opštini')
plt.ylabel('Broj opština sa datim brojem učenika srednje škole')
medijalnavrednost=np.median(ss_opstine['Broj učenika'])
prosecnavrednost=np.mean(ss_opstine['Broj učenika'])
plt.axvline(x=medijalnavrednost,color='darkred',linestyle='dashed')
plt.axvline(x=prosecnavrednost,color='black')
plt.show()
medijalnavrednost
prosecnavrednost
len(ss_opstine[ss_opstine['Broj učenika']<1000])
Расподела општина по броју ученика је још један пример у коме су медијална и просечна вредност различите и другачије од најчешће вредности у узорку - средња по броју ученика је општина са 1116 ученика (медијална вредност), аритметична средина броја ученика по општини, односно просечна вредност је 1911 ученика, док далеко највише општина има од 0 до 1000 ученика - скоро 60!
Често мешање ове три величине долази када се о подацима размишља као да су распоређени по нормалној, односно Гаусовој распоредли, где су све ове три вредности једнаке - види пример:
gausrandom=np.random.randn(10000)
plt.hist(gausrandom,bins=50)
plt.axvline(x=np.mean(gausrandom),color='red')
plt.axvline(x=np.median(gausrandom),color='black')
plt.xlabel('Nasumični brojevi')
plt.show()
random.randn(N) је функција numpy библиотеке којом генеришемо N насумичних бројева по нормалној расподели са просечном вредношћу 0 и стандардном девијацијом 1. На слици изнад, представили смо хистограмом N = 10000 таквих бројева и видимо да су средња и просечна вредност идентичне и једнаке 0, као и да је то уједно и најчешћа вредност у овим подацима. Иако се нормална расподела често може приметити и у анализи реалних података, битно је имати на уму да су и асиметричне расподеле честе (попут горе приказане расподеле општина по броју ученика, таква је и расподела зарада и многе друге) и да су у том случају медијална и просечна вредност најчешће различите.
Вратимо се сада општинама и истраживању доступности разноврсних образовних профила ученицима. Једна једноставна провера коју можемо урадити је тачкасти дијаграм у коме свака тачка представља један округ (или општину) док су х и у координата број ученика и број образовних профила у датој просторној јединици, такве графике приказујемо у наставку:
plt.figure(figsize=(12,4))
plt.subplot(1,2,1)
plt.scatter(ss_okruzi['Broj učenika'],ss_okruzi['Obrazovni profil'],label='Različiti obrazovni profili')
plt.xlabel('Broj učenika u okrugu')
plt.ylabel('Broj različitih obrazovnih profila u okrugu')
plt.subplot(1,2,2)
plt.scatter(ss_opstine['Broj učenika'],ss_opstine['Obrazovni profil'])
plt.xlabel('Broj učenika u opštini')
plt.ylabel('Broj različitih obrazovnih profila u opštini')
plt.show()
Као што смо вероватно и очекивали, што је веће место у питању (лево округ, десно општина), то је број различитих смерова доступних у средњим школама већи. Битно је приметити да није у питању линеаран тренд (тачке нису на правој линији - што је посебно видљиво на левом графику) - за мале округе мале промене у величини ученичке популације воде већим променама у броју доступних смерова. Међутим оно што чуди на десном графику су све ове општине које као да су "спале" са главног тренда међу подацима - шта је разлог за чињеницу да различите општине са сличним бројем средњошколаца имају разлику од 30 до 60 доступних образовних профила (нпр. види општине са око 5000 ученика)? То можемо истражити идентификовањем једне од тачака чије х,у координате можемо лако уочити:
ss_opstine[(ss_opstine['Broj učenika']>4000)&(ss_opstine['Obrazovni profil']<20)]
У питању је Београд! Како ученици у оквиру Београда лако могу путовати између општина, Београдске општине не прате исти тренд, то ћемо проверити тиме што ћемо све Београдске општине нацртати посебно на графику:
plt.scatter(ss_opstine[ss_opstine['Okrug']!='Grad Beograd']['Broj učenika'],ss_opstine[ss_opstine['Okrug']!='Grad Beograd']['Obrazovni profil'],label='Opštine u Srbiji')
plt.scatter(ss_opstine[ss_opstine['Okrug']=='Grad Beograd']['Broj učenika'],ss_opstine[ss_opstine['Okrug']=='Grad Beograd']['Obrazovni profil'],label='Beogradske opštine')
plt.legend()
plt.xlabel('Broj učenika u opštini')
plt.ylabel('Broj različitih obrazovnih profila u opštini')
plt.show()
Додатни задатак за знатижељне може бити идентификација општине са највише средњошколаца (тачка у горњем десном углу).
Осим очигледне претпоставке да већа потражња (више средњошколаца) изискује већу понуду средњих школа и профила, поставља се питање да ли и неке друге карактеристике општина утичу на ученицима доступне профле.
У претходној радној свесци видели да су гимназије најпопуларније међу средњошколцима. Хајде да срачунамо проценат средњошколаца који се тренутно школује у гимназијама:
100*np.sum(ss_opstine['Ukupno gimnazijalaca'])/np.sum(ss_opstine['Broj učenika'])
Поређења ради, подаци цитирани у Стратегији образовања до 2020. године, говоре да у Србији 2010. 23.35% ученика уписало гимназију, а поменута стратегије је као један од циљева дефинисала раст броја гимназијалаца.
Хајде да погледамо како се у различитим општинама односе удео ученика у гимназијама и трогодишњим средњим школама. За ово поређење, искористићемо тачкасти дијаграм на коме ће свака тачка одговарати једној општини. Ова два типа образовања су изабрана за поређење због тога што су она често супротстављена у односу на високошколско образовање. Трогодишње средње школе обично не воде високошколском образовању, док су гимназије виђене као школе које је нужно наставити у високошколским институцијама.
Користићемо функцију scatterplot из библиотеке seaborn:
sns.scatterplot(100*ss_opstine['Ukupno u trogodisnjim ss']/ss_opstine['Broj učenika'],100*ss_opstine['Ukupno gimnazijalaca']/ss_opstine['Broj učenika'],hue=ss_opstine['Okrug'],s=0.1*ss_opstine['Broj učenika'],alpha=0.8)
plt.xlabel('Procenat srednjoskolaca u opstini u trogodisnjim srednjim skolama')
plt.ylabel('Procenat srednjoskolaca u opstini u gimnazijama')
plt.legend([])
plt.show()
За разлику од претходних тачкастих дијаграма, сваки кружић поред х и у координате има и боју и променљив пречник. Боје одговарају различитим окрузима, док је величина круга везана за укупан број средњошколаца у посматраној општини. Видимо да је један број општина са великим бројем ученика који се школују на њиховој територији у близини државног просека што се тиче удела гимназијалаца (27.5%), али запажамо и општине различитих округа различитих величина које имају више и мање гимназијалаца. Примећујемо такође и један број општина (доле десно) које имају мање гимназијалаца а велики број ученика средњих стручних школа у трогодишњем трајању.
У наставку ћемо испитати тврдњу из стратегије о повезаности примања у општини са доступним образовањем. За то смо преузели податке о просечним зарадама по општинама:
zarade_opstine = pd.read_excel('data/srednjoskolci data/zarade_RZS.xls')
zarade_opstine.head(2)
Приметимо да библиотека pandas има згодну функцију и за учитавање фајлова .xls формата (read_excel). zarade_opstine садржи податке преузете са сајта Републичког завода за статистику за годишњим просечним зарадама за 2018. годину по општинама пребивалишта запослених. Фајл је мало преуређен у односу на оригинални - општине и окрузи су преименовани да би били у истом формату као и подаци са којима хоћемо да их укрстимо.
Како и табела zarade_opstine и ss_opstine садрже пар (округ, општина), можемо их спојити користећи функцију merge:
ss_opstine_zarade = pd.merge(ss_opstine,zarade_opstine,on=['Okrug','Opština'])
У позивању функције merge, минимални аргументи су две табеле које желимо спојити, у претходном случају zarade_opstine и ss_opstine, док је кроз аргумент on потребно проследити колону по чијим вредностима ће табеле бити спојене. Резултат коришћења ове функције је нова табела у којој ће се налазити све колоне које су постојале у спојене две табеле, тј. за сваки пар 'Okrug' и 'Opština', остатак реда нове табеле биће попуњен вредностима табеле ss_opstine['Okrug','Opština'] и zarade_opstine['Okrug','Opština'], што можемо видети провером прва два реда новонастале табеле:
ss_opstine_zarade.head(2)
ss_opstine_zarade табела сада за сваку општину садржи и информацију о просечним нето и бруто зарадама, које ћемо користити у наставку. Са табелом зараде, додали смо и информације о регионима Србије које ће нам такође згодно доћи да бојимо тачкасте дијаграме пошто региона има далеко мање него округа.
У табелу ss_opstine_zarade додаћемо и 2 колоне о проценту гимназијалаца и ученика трогодишњих средњих школа, да не бисмо исто рачунали при позивању функција за цртање графика као претходно:
ss_opstine_zarade['Procenat u gimnaziji']=100*ss_opstine_zarade['Ukupno gimnazijalaca']/ss_opstine_zarade['Broj učenika']
ss_opstine_zarade['Procenat u trogodisnjoj']=100*ss_opstine_zarade['Ukupno u trogodisnjim ss']/ss_opstine_zarade['Broj učenika']
Тачкасти дијаграм образовних профила и просечних нето зарада за различите општине налази се у наставку. Величина сваког кружића одговара броју средњошколаца у датој општини:
plt.scatter(ss_opstine_zarade['Prosečne neto zarade [RSD]'],ss_opstine_zarade['Obrazovni profil'],s=0.1*ss_opstine_zarade['Broj učenika'],alpha=0.8)
plt.ylabel('Broj različitih obrazovnih profila')
plt.xlabel('Prosečne neto zarade [RSD]')
plt.show()
Видимо да је велики број малих кружића у домену ниских просечних зарада и малог броја доступних профила, док су велики кругови у бољој ситуацији по оба критеријума. Да бисмо боље запазили евентуалне трендове, поделићемо ове податке по регионима, прво бојећи их на истом дијаграму:
sns.scatterplot(ss_opstine_zarade['Prosečne neto zarade [RSD]'],ss_opstine_zarade['Obrazovni profil'],hue=ss_opstine_zarade['Region'],s=0.1*ss_opstine_zarade['Broj učenika'],alpha=0.8)
plt.ylabel('Broj različitih obrazovnih profila')
plt.xlabel('Prosečna neto zarada')
plt.show()
Већ можемо запазити неке регионалне трендове, али зарад лакше интерпретације, овај график ћемо поделити у више графика по регионима којима припада општина.
То ћемо за почетак урадити користећи FacetGrid функцију seaborn библиотеке, којом то урадимо веома једноставно, задајући аргумент col='Region' који значи да ће графици по колонама бити подељени зависно од вредности ss_opstine_zarade['Region']. (Шта мислите да ће се променити ако row='Region'
?)
g = sns.FacetGrid(ss_opstine_zarade, col="Region", hue="Region")
g = (g.map(plt.scatter, "Prosečne neto zarade [RSD]", "Obrazovni profil", edgecolor="w").add_legend())
Најјаснији случај повезаности између просечних примања и доступности образовних профила видимо на примеру региона Војводине - општине са већим примањима готово увек имају већи број доступних образовних профила. Са друге стране, општине у Београду се значајно разликују по просечним примањима (распон плата је далеко већи), али је број образовних профила сличан. Међутим као што смо идскутовали и раније, ученици у Београду ретко у избору школе размишљају у доменима своје општине, већ разматрају опције на територији целог града.
Детаљно можемо погледати сваки од региона на следећи начин:
jugoistok = ss_opstine_zarade[ss_opstine_zarade['Region']=='Region Južne i Istočne Srbije']
sns.scatterplot(data=jugoistok, x="Prosečne neto zarade [RSD]", y="Obrazovni profil",size="Broj učenika",color='blue')
plt.ylabel('Broj obrazovnih profila')
plt.show()
vojvodina = ss_opstine_zarade[ss_opstine_zarade['Region']=='Region Vojvodine']
sns.scatterplot(data=vojvodina, x="Prosečne neto zarade [RSD]", y="Obrazovni profil",size="Broj učenika",color='green')
plt.ylabel('Broj obrazovnih profila')
plt.show()
Као и на умањеном графику насталом уз помоћ FacetGrid функције, видимо да је зависност између броја доступних профила и просечне нето зараде највећа за регион Војводине. Такође примећујемо да са порастом просечне нето зараде расте и величина кружића, тј. просечна примања су већа у општинама у којима има више средњошколаца (тј. и те општине су вероватно веће).
sumadija = ss_opstine_zarade[ss_opstine_zarade['Region']=='Region Šumadije i Zapadne Srbije']
sns.scatterplot(data=sumadija, x="Prosečne neto zarade [RSD]", y="Obrazovni profil",size="Broj učenika",color='red')
plt.ylabel('Broj obrazovnih profila')
plt.show()
У Шумадијском региону делује да је дошло до раслојавања - број доступних образовних профила зависи од броја ученика (што смо приметили раније), али у обе категорије (и међу круговима већег пречника у горњем делу графика и међу круговима мањег пречника доле), нема јаке везе између просечне зараде и броја профила.
На сличан начин, сада можемо погледати колико се често ученици одлучују за учење у гимназијама и да ли је то у вези са величином општине или просечним примањима у општини:
sns.scatterplot(ss_opstine_zarade['Prosečne neto zarade [RSD]'],ss_opstine_zarade['Procenat u gimnaziji'],hue=ss_opstine_zarade['Region'],s=0.1*ss_opstine_zarade['Broj učenika'],alpha=0.8)
plt.ylabel('Procenat srednjoškolaca u opštini u gimnazijama')
plt.xlabel('Prosečna neto zarada')
plt.show()
g = sns.FacetGrid(ss_opstine_zarade, col="Region", hue="Region")
g = (g.map(plt.scatter, "Prosečne neto zarade [RSD]", "Procenat u gimnaziji", edgecolor="w").add_legend())
Међутим у овим подацима има знатно мање јасних веза. Интересантно је да општина са највећим бројем ученика у Војвођанском региону (највећи зелени круг, који смо видели и као општину са највише различитих образовних профила) има испод 20% гимназијалаца. Такође примећујемо да општине са највећом заступљеношћу гимназијалаца су мале општине, па је можда број опција поред гимназија изузетно лимитиран. Идентификујте те општине и истражите заступљеност различитих школа и образовних профила у њима.
Задаци:¶
1. (а) Тачкастим дијаграмом испитати да ли су просечна зарада и проценат ученика у средњим трогодишњим школама повезани:
1. (б) Нацртајте другу верзију претходног графика на коме су тачкице обојене различитим бојама у зависности од региона коме припадају.
1. (в) По угледу на раније графике, нацртајте појединачне графике за сваки регион, тако да се на х оси налази просечна зарада а на у оси број различитих образовних профила у средњим трогодишњим школама.
2. Истражити број ученика по једном наставнику:
(а) Нацртајте хистограм броја ученика по једном наставнику и на том дијаграму обележите усправним линијама просечну вредност и медијалну вредност.
(б) Користећи тачкасти дијаграм, испитајте да ли је број ученика по једном наставнику већи у општинама у којима је просечна нето зарада већа. Овај тачкасти дијаграм такође можете обојити по регионима и подесити да величина круга одговара броју ученика или наставника у датој општини.