{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Ok Ok, lets start with the reference-data\n" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:37:27.990889Z", "start_time": "2018-06-07T10:37:27.973219Z" } }, "outputs": [ { "data": { "text/plain": [ "{2009: ['pre-school-data-0910-3.xlsx',\n", " 'post-primary-schools-data-0910-supp-2.xlsx',\n", " 'primary-schools-data-0910-supp-r.xlsx',\n", " 'special-school-data-0910-supp-3.xlsx',\n", " 'nursery-schools-data-0910-supp-3.xlsx'],\n", " 2010: ['special-school-data-1011-supp-2.xlsx',\n", " 'primary-schools-data-1011-supp-inc-unfilled-r.xlsx',\n", " 'post-primary-schools-data-10-11-supp-inc-unfilled.xlsx',\n", " 'pre-school-data-1011-3.xlsx',\n", " 'nursery-schools-data-2010-11-supp-inc-unfilled.xlsx'],\n", " 2011: ['post-primary-schools-data-11-12-supp-inc-unfilled-2.xlsx',\n", " 'nursery-schools-data-2011-12-supp-inc-unfilled-2.xlsx',\n", " 'primary-schools-data-11-12-supp-inc-unfilled-places-r.xlsx',\n", " 'special-school-data-11-12-supp.xlsx',\n", " 'pre-school-data-2011-12.xlsx'],\n", " 2012: ['nursery-schools-data-2012-13-supp-inc-unfilled-places.xlsx',\n", " 'post-primary-schools-data-2012-13-supp-inc-unfilled-places.xlsx',\n", " 'primary-schools-data-2012-13-supp-inc-unfilled-places-2.xlsx',\n", " 'pre-school-data-2012-13.xlsx',\n", " 'special-school-data-2012-13-supp.xlsx'],\n", " 2013: ['nursery-schools-data-13-14-supp-incl-unfilled-places.xlsx',\n", " 'post-primary-schools-data-13-14-supp-inc-unfilled-places.xlsx',\n", " 'special-school-data-2013-14-supp.xlsx',\n", " 'primary-schools-data-2013-14-supp-inc-unfilled-places.xlsx',\n", " 'pre-school-data-2013-14.xlsx'],\n", " 2014: ['School%20level%20-%20nursery%20schools%20data%201415%20supp%20-%20unfilled%20places.XLS',\n", " 'post-primary-schools-data-1415-supp-with-unfilled-places.xlsx',\n", " 'School%20level%20-%20pre%20school%20data%201415.XLS',\n", " 'special-school-data-1415-supp.xlsx',\n", " 'primary-schools-data-1415-supp-with-unfilled-places.xlsx'],\n", " 2015: ['School%20level%20-%20nursery%20schools%20data%201516%20supp.XLS',\n", " 'School%20level%20-%20pre%20school%20data%201516%20supp.XLSX',\n", " 'School%20level%20-%20primary%20schools%20data%201516%20supp_0.XLSX',\n", " 'School%20level%20-%20special_school_data%201516%20supp.XLSX',\n", " 'School-level-post-primary-schools-data-1516_1.XLS'],\n", " 2016: ['School%20level%20-%20special_school_data%201617%20supp_0.XLSX',\n", " 'School%20level%20-%20post%20primary%20schools%20data%201617%20supp_0.XLS',\n", " 'School%20level%20-%20nursery%20schools%20data%201617%20supp.XLS',\n", " 'available%20places%20-%20post-primary%201617%20supp.XLSX',\n", " 'available%20places%20-%20primary%201617%20supp.XLSX',\n", " 'available%20places%20-%20nursery%201617%20supp%20final.XLSX',\n", " 'School%20level%20-%20pre%20school%20data%201617%20supp.XLSX',\n", " 'School%20level%20-%20primary%20schools%20data%201617%20supp.XLSX'],\n", " 2017: ['School%20level%20-%20pre%20school%20data%201718%20supp.xlsx',\n", " 'available%20places%20-%20primary%201718%20supp.xlsx',\n", " 'available%20places%20-%20post-primary%201718%20supp.xlsx',\n", " 'School%20level%20-%20post%20primary%20schools%20data%20supp%201718.xls',\n", " 'School%20level%20-%20nursery%20schools%20data%201718%20supp.xlsx',\n", " 'available%20places%20-%20nursery%201718%20supp.xlsx',\n", " 'School%20level%20-%20special%20school%20data%202017-18_0.xlsx',\n", " 'School%20level%20-%20primary%20schools%20data%20supp%201718.xlsx']}" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pathlib import Path\n", "from collections import defaultdict\n", "import pandas as pd\n", "\n", "year_files = defaultdict(list)\n", "dest = Path('./data/education-ni/')\n", "for year_p in dest.iterdir():\n", " try:\n", " year=int(year_p.parts[-1])\n", " for file in year_p.iterdir():\n", " year_files[year].append(file.parts[-1])\n", " except ValueError:\n", " pass\n", " \n", "import warnings\n", "warnings.filterwarnings(\"ignore\", category=DeprecationWarning) \n", "\n", "year_files = dict(sorted(year_files.items()))\n", "year_files" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:37:46.434793Z", "start_time": "2018-06-07T10:37:46.430904Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2009\n", "2010\n", "2011\n", "2012\n", "2013\n", "2014\n", "2015\n", "2016\n", "2017\n" ] } ], "source": [ "for year, files in year_files.items():\n", " print(year)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.343390Z", "start_time": "2018-06-07T10:36:11.338041Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "post-primary-schools-data-13-14-supp-inc-unfilled-places.xlsx\n", "post-primary-schools-data-1415-supp-with-unfilled-places.xlsx\n", "School-level-post-primary-schools-data-1516_1.XLS\n", "post-primary-schools-data-2012-13-supp-inc-unfilled-places.xlsx\n", "post-primary-schools-data-0910-supp-2.xlsx\n", "available%20places%20-%20post-primary%201718%20supp.xlsx\n", "School%20level%20-%20post%20primary%20schools%20data%20supp%201718.xls\n", "post-primary-schools-data-10-11-supp-inc-unfilled.xlsx\n", "post-primary-schools-data-11-12-supp-inc-unfilled-2.xlsx\n", "School%20level%20-%20post%20primary%20schools%20data%201617%20supp_0.XLS\n", "available%20places%20-%20post-primary%201617%20supp.XLSX\n" ] } ], "source": [ "sheets = defaultdict(list)\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " print(file)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.409905Z", "start_time": "2018-06-07T10:36:11.345299Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789
0Data on Pupils attending post primary schools ...NaNNaNNaNNaNNaNNaNNaNNaNNaN
1NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2NaNNaNNaNNaNNaNNaNschoolparliamentarydistricturban/
3De refschool nameaddress 1townpostcodeschool typemanagement typeconstituencycouncilrural
41210014Ashfield Girls' High School397 HOLYWOOD ROADBELFASTBT42LYNon-grammarControlledBELFAST EASTBELFASTUrban
\n", "
" ], "text/plain": [ " 0 \\\n", "0 Data on Pupils attending post primary schools ... \n", "1 NaN \n", "2 NaN \n", "3 De ref \n", "4 1210014 \n", "\n", " 1 2 3 4 \\\n", "0 NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN \n", "3 school name address 1 town postcode \n", "4 Ashfield Girls' High School 397 HOLYWOOD ROAD BELFAST BT42LY \n", "\n", " 5 6 7 8 9 \n", "0 NaN NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN NaN \n", "2 NaN school parliamentary district urban/ \n", "3 school type management type constituency council rural \n", "4 Non-grammar Controlled BELFAST EAST BELFAST Urban " ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xls = pd.ExcelFile(f'data/education-ni/2017/School%20level%20-%20post%20primary%20schools%20data%20supp%201718.xls')\n", "df = pd.read_excel(xls, 'reference data', header=None)\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.421145Z", "start_time": "2018-06-07T10:36:11.411773Z" } }, "outputs": [ { "data": { "text/plain": [ "0 De ref\n", "1 school name\n", "2 address 1\n", "3 town\n", "4 postcode\n", "5 school type\n", "6 school management type\n", "7 parliamentary constituency\n", "8 district council\n", "9 urban/ rural\n", "dtype: object" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "join_n_strip = lambda l: ' '.join(l).strip()\n", "\n", "df.ix[1:3].fillna('').apply(join_n_strip, axis=0)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.464415Z", "start_time": "2018-06-07T10:36:11.423291Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
De refschool nameaddress 1townpostcodeschool typeschool management typeparliamentary constituencydistrict councilurban/ rural
0Data on Pupils attending post primary schools ...NaNNaNNaNNaNNaNNaNNaNNaNNaN
1NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2NaNNaNNaNNaNNaNNaNschoolparliamentarydistricturban/
3De refschool nameaddress 1townpostcodeschool typemanagement typeconstituencycouncilrural
41210014Ashfield Girls' High School397 HOLYWOOD ROADBELFASTBT42LYNon-grammarControlledBELFAST EASTBELFASTUrban
51210015Ashfield Boys' High School395 HOLYWOOD ROADBELFASTBT42LYNon-grammarControlledBELFAST EASTBELFASTUrban
61210021Belfast Model School For Girls35 DUNOWEN GARDENSBELFASTBT146NQNon-grammarControlledBELFAST NORTHBELFASTUrban
71210022Belfast Boys' Model SchoolBALLYSILLAN ROADBELFASTBT146RBNon-grammarControlledBELFAST NORTHBELFASTUrban
81230053St Louise's Comprehensive College468 FALLS ROADBELFASTBT126ENNon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
91230104Mercy College BelfastBALLYSILLAN ROADBELFASTBT147QRNon-grammarCatholic MaintainedBELFAST NORTHBELFASTUrban
101230130St Rose’s Dominican College65 BEECHMOUNT AVENUEBELFASTBT127NANon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
111230146Christian Brothers School, BelfastGLEN ROADBELFASTBT118BWNon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
121230155St Genevieve's High SchoolTRENCH HOUSEBELFASTBT119JPNon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
131230182De La Salle College36 EDENMORE DRIVEBELFASTBT118LTNon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
141230262Corpus Christi CollegeARD NA VA ROADBELFASTBT126FFNon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
151230275St Joseph's College, Belfast518-572 RAVENHILL ROADBELFASTBT60BYNon-grammarCatholic MaintainedBELFAST SOUTHBELFASTUrban
161230321Blessed Trinity College619 ANTRIM ROADBELFASTBT154DZNon-grammarCatholic MaintainedBELFAST NORTHBELFASTUrban
171240291Colaiste Feirste7 BEECHVIEW PARKBELFASTBT127PYNon-grammarOther MaintainedBELFAST WESTBELFASTUrban
181260269Hazelwood College70 WHITEWELL ROADNEWTOWNABBEYBT367ESNon-grammarGMIBELFAST NORTHBELFASTUrban
191260294Malone Integrated College45 FINAGHY ROAD NORTHBELFASTBT100JBNon-grammarGMIBELFAST SOUTHBELFASTUrban
201410079Grosvenor Grammar School50 MARINA PARKBELFASTBT56BAGrammarControlledBELFAST EASTBELFASTUrban
211410270Wellington College18 CAROLAN ROADBELFASTBT73HEGrammarControlledBELFAST SOUTHBELFASTUrban
221410315Bloomfield Collegiate8 ASTORIA GARDENSBELFASTBT56HWGrammarControlledBELFAST EASTBELFASTUrban
231420020Campbell CollegeBELMONT ROADBELFASTBT42NDGrammarVoluntaryBELFAST EASTBELFASTUrban
241420021St Mary's Christian Brothers' Grammar, Belfast147A GLEN ROADBELFASTBT118NRGrammarVoluntaryBELFAST WESTBELFASTUrban
251420022Methodist College1 MALONE ROADBELFASTBT96BYGrammarVoluntaryBELFAST SOUTHBELFASTUrban
261420027The Royal Belfast Academical InstitutionCOLLEGE SQUARE EASTBELFASTBT16DLGrammarVoluntaryBELFAST SOUTHBELFASTUrban
271420028Belfast Royal Academy5-17 CLIFTONVILLE ROADBELFASTBT146JLGrammarVoluntaryBELFAST NORTHBELFASTUrban
281420029St Dominic's High School, Belfast135-137 FALLS ROADBELFASTBT126AEGrammarVoluntaryBELFAST WESTBELFASTUrban
291420030St Malachy's College, Belfast36 ANTRIM ROADBELFASTBT152AEGrammarVoluntaryBELFAST NORTHBELFASTUrban
.................................
1735230076St Patrick's College, Banbridge38 SCARVA ROADBANBRIDGEBT323ASNon-grammarCatholic MaintainedUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1745230108St Mary's High School, NewryUPPER CHAPEL STREETNEWRYBT342DTNon-grammarCatholic MaintainedNEWRY AND ARMAGHNEWRY MOURNE AND DOWNUrban
1755230135St Mark's High SchoolUPPER DROMORE ROADNEWRYBT343PNNon-grammarCatholic MaintainedSOUTH DOWNNEWRY MOURNE AND DOWNUrban
1765230152St Ciaran's High School15 TULLYBRYAN ROADDUNGANNONBT702LYNon-grammarCatholic MaintainedFERMANAGH AND SOUTH TYRONEMID ULSTERRural
1775230157St Paul's High School, Bessbrook108 CAMLOUGH ROADNEWRYBT357EENon-grammarCatholic MaintainedNEWRY AND ARMAGHNEWRY MOURNE AND DOWNRural
1785230167St Joseph's High School, Crossmaglen77 DUNDALK ROADNEWRYBT359HLNon-grammarCatholic MaintainedNEWRY AND ARMAGHNEWRY MOURNE AND DOWNRural
1795230187St Patrick's High School, KeadyMIDDLETOWN ROADKEADYBT603THNon-grammarCatholic MaintainedNEWRY AND ARMAGHARMAGH CITY, BANBRIDGE AND CRAIGAVONRural
1805230192St Joseph's College, Coalisland29 SCHOOL LANEDUNGANNONBT714NWNon-grammarCatholic MaintainedMID ULSTERMID ULSTERUrban
1815230213Lismore Comprehensive SchoolDRUMGASKCRAIGAVONBT655DUNon-grammarCatholic MaintainedUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1825230218St Catherine's College2A CONVENT ROADARMAGHBT604BGNon-grammarCatholic MaintainedNEWRY AND ARMAGHARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1835230278Holy Trinity CollegeCHAPEL STREETCOOKSTOWNBT808QBNon-grammarCatholic MaintainedMID ULSTERMID ULSTERUrban
1845230293St Patrick's College, Dungannon41 KILLYMEAL ROADDUNGANNONBT716LJNon-grammarCatholic MaintainedFERMANAGH AND SOUTH TYRONEMID ULSTERUrban
1855230321St John The Baptist College4 MOY ROADPORTADOWNBT621QQSecondaryCatholic MaintainedUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1865250216Brownlow Int CollegeTULLYGALLY ROADCRAIGAVONBT655BSNon-grammarControlled IntegratedUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1875260285New-Bridge Integrated College25 DONARD VIEW ROADBANBRIDGEBT323LNNon-grammarGMIUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONRural
1885260286Integrated College Dungannon21 GORTMERRON LINK ROADDUNGANNONBT716LSNon-grammarGMIFERMANAGH AND SOUTH TYRONEMID ULSTERUrban
1895410013Banbridge AcademyLURGAN ROADBANBRIDGEBT324AQGrammarControlledUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1905410057Lurgan College9 COLLEGE WALKCRAIGAVONBT666JWGrammarControlledUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1915410067Portadown College4 KILLYCOMAINE ROADCRAIGAVONBT635BUGrammarControlledUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1925420045St Louis Grammar School, Kilkeel151 NEWRY ROADKILKEELBT344EUGrammarVoluntarySOUTH DOWNNEWRY MOURNE AND DOWNUrban
1935420059Abbey Christian Brothers Grammar School77A ASHGROVE ROADNEWRYBT342QNGrammarVoluntarySOUTH DOWNNEWRY MOURNE AND DOWNUrban
1945420060Our Lady's Grammar SchoolCHEQUER HILLNEWRYBT356DYGrammarVoluntaryNEWRY AND ARMAGHNEWRY MOURNE AND DOWNUrban
1955420062St Colman's College, Newry46 ARMAGH ROADNEWRYBT356PPGrammarVoluntaryNEWRY AND ARMAGHNEWRY MOURNE AND DOWNUrban
1965420073St Joseph's Convent Grammar School, Donaghmore58 CASTLECAULFIELD ROADDUNGANNONBT703HEGrammarVoluntaryMID ULSTERMID ULSTERRural
1975420076Sacred Heart Grammar School, Newry10 ASHGROVE AVENUENEWRYBT341PRGrammarVoluntarySOUTH DOWNNEWRY MOURNE AND DOWNUrban
1985420260The Royal School, Dungannon2 RANFURLEY ROADDUNGANNONBT716APGrammarVoluntaryFERMANAGH AND SOUTH TYRONEMID ULSTERUrban
1995420263The Royal School, ArmaghCOLLEGE HILLARMAGHBT619DHGrammarVoluntaryNEWRY AND ARMAGHARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
2005420268St Patrick's Grammar School, ArmaghCATHEDRAL ROADARMAGHBT617QZGrammarVoluntaryNEWRY AND ARMAGHARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
2015420304St Patrick's Academy, Dungannon37 KILLYMEAL ROADDUNGANNONBT716DSGrammarVoluntaryFERMANAGH AND SOUTH TYRONEMID ULSTERUrban
2025420314St Ronan’s College12 CORNAKINEGAR ROADLURGANBT679JWGrammarVoluntaryUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
\n", "

203 rows × 10 columns

\n", "
" ], "text/plain": [ " De ref \\\n", "0 Data on Pupils attending post primary schools ... \n", "1 NaN \n", "2 NaN \n", "3 De ref \n", "4 1210014 \n", "5 1210015 \n", "6 1210021 \n", "7 1210022 \n", "8 1230053 \n", "9 1230104 \n", "10 1230130 \n", "11 1230146 \n", "12 1230155 \n", "13 1230182 \n", "14 1230262 \n", "15 1230275 \n", "16 1230321 \n", "17 1240291 \n", "18 1260269 \n", "19 1260294 \n", "20 1410079 \n", "21 1410270 \n", "22 1410315 \n", "23 1420020 \n", "24 1420021 \n", "25 1420022 \n", "26 1420027 \n", "27 1420028 \n", "28 1420029 \n", "29 1420030 \n", ".. ... \n", "173 5230076 \n", "174 5230108 \n", "175 5230135 \n", "176 5230152 \n", "177 5230157 \n", "178 5230167 \n", "179 5230187 \n", "180 5230192 \n", "181 5230213 \n", "182 5230218 \n", "183 5230278 \n", "184 5230293 \n", "185 5230321 \n", "186 5250216 \n", "187 5260285 \n", "188 5260286 \n", "189 5410013 \n", "190 5410057 \n", "191 5410067 \n", "192 5420045 \n", "193 5420059 \n", "194 5420060 \n", "195 5420062 \n", "196 5420073 \n", "197 5420076 \n", "198 5420260 \n", "199 5420263 \n", "200 5420268 \n", "201 5420304 \n", "202 5420314 \n", "\n", " school name address 1 \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "3 school name address 1 \n", "4 Ashfield Girls' High School 397 HOLYWOOD ROAD \n", "5 Ashfield Boys' High School 395 HOLYWOOD ROAD \n", "6 Belfast Model School For Girls 35 DUNOWEN GARDENS \n", "7 Belfast Boys' Model School BALLYSILLAN ROAD \n", "8 St Louise's Comprehensive College 468 FALLS ROAD \n", "9 Mercy College Belfast BALLYSILLAN ROAD \n", "10 St Rose’s Dominican College 65 BEECHMOUNT AVENUE \n", "11 Christian Brothers School, Belfast GLEN ROAD \n", "12 St Genevieve's High School TRENCH HOUSE \n", "13 De La Salle College 36 EDENMORE DRIVE \n", "14 Corpus Christi College ARD NA VA ROAD \n", "15 St Joseph's College, Belfast 518-572 RAVENHILL ROAD \n", "16 Blessed Trinity College 619 ANTRIM ROAD \n", "17 Colaiste Feirste 7 BEECHVIEW PARK \n", "18 Hazelwood College 70 WHITEWELL ROAD \n", "19 Malone Integrated College 45 FINAGHY ROAD NORTH \n", "20 Grosvenor Grammar School 50 MARINA PARK \n", "21 Wellington College 18 CAROLAN ROAD \n", "22 Bloomfield Collegiate 8 ASTORIA GARDENS \n", "23 Campbell College BELMONT ROAD \n", "24 St Mary's Christian Brothers' Grammar, Belfast 147A GLEN ROAD \n", "25 Methodist College 1 MALONE ROAD \n", "26 The Royal Belfast Academical Institution COLLEGE SQUARE EAST \n", "27 Belfast Royal Academy 5-17 CLIFTONVILLE ROAD \n", "28 St Dominic's High School, Belfast 135-137 FALLS ROAD \n", "29 St Malachy's College, Belfast 36 ANTRIM ROAD \n", ".. ... ... \n", "173 St Patrick's College, Banbridge 38 SCARVA ROAD \n", "174 St Mary's High School, Newry UPPER CHAPEL STREET \n", "175 St Mark's High School UPPER DROMORE ROAD \n", "176 St Ciaran's High School 15 TULLYBRYAN ROAD \n", "177 St Paul's High School, Bessbrook 108 CAMLOUGH ROAD \n", "178 St Joseph's High School, Crossmaglen 77 DUNDALK ROAD \n", "179 St Patrick's High School, Keady MIDDLETOWN ROAD \n", "180 St Joseph's College, Coalisland 29 SCHOOL LANE \n", "181 Lismore Comprehensive School DRUMGASK \n", "182 St Catherine's College 2A CONVENT ROAD \n", "183 Holy Trinity College CHAPEL STREET \n", "184 St Patrick's College, Dungannon 41 KILLYMEAL ROAD \n", "185 St John The Baptist College 4 MOY ROAD \n", "186 Brownlow Int College TULLYGALLY ROAD \n", "187 New-Bridge Integrated College 25 DONARD VIEW ROAD \n", "188 Integrated College Dungannon 21 GORTMERRON LINK ROAD \n", "189 Banbridge Academy LURGAN ROAD \n", "190 Lurgan College 9 COLLEGE WALK \n", "191 Portadown College 4 KILLYCOMAINE ROAD \n", "192 St Louis Grammar School, Kilkeel 151 NEWRY ROAD \n", "193 Abbey Christian Brothers Grammar School 77A ASHGROVE ROAD \n", "194 Our Lady's Grammar School CHEQUER HILL \n", "195 St Colman's College, Newry 46 ARMAGH ROAD \n", "196 St Joseph's Convent Grammar School, Donaghmore 58 CASTLECAULFIELD ROAD \n", "197 Sacred Heart Grammar School, Newry 10 ASHGROVE AVENUE \n", "198 The Royal School, Dungannon 2 RANFURLEY ROAD \n", "199 The Royal School, Armagh COLLEGE HILL \n", "200 St Patrick's Grammar School, Armagh CATHEDRAL ROAD \n", "201 St Patrick's Academy, Dungannon 37 KILLYMEAL ROAD \n", "202 St Ronan’s College 12 CORNAKINEGAR ROAD \n", "\n", " town postcode school type school management type \\\n", "0 NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN \n", "2 NaN NaN NaN school \n", "3 town postcode school type management type \n", "4 BELFAST BT42LY Non-grammar Controlled \n", "5 BELFAST BT42LY Non-grammar Controlled \n", "6 BELFAST BT146NQ Non-grammar Controlled \n", "7 BELFAST BT146RB Non-grammar Controlled \n", "8 BELFAST BT126EN Non-grammar Catholic Maintained \n", "9 BELFAST BT147QR Non-grammar Catholic Maintained \n", "10 BELFAST BT127NA Non-grammar Catholic Maintained \n", "11 BELFAST BT118BW Non-grammar Catholic Maintained \n", "12 BELFAST BT119JP Non-grammar Catholic Maintained \n", "13 BELFAST BT118LT Non-grammar Catholic Maintained \n", "14 BELFAST BT126FF Non-grammar Catholic Maintained \n", "15 BELFAST BT60BY Non-grammar Catholic Maintained \n", "16 BELFAST BT154DZ Non-grammar Catholic Maintained \n", "17 BELFAST BT127PY Non-grammar Other Maintained \n", "18 NEWTOWNABBEY BT367ES Non-grammar GMI \n", "19 BELFAST BT100JB Non-grammar GMI \n", "20 BELFAST BT56BA Grammar Controlled \n", "21 BELFAST BT73HE Grammar Controlled \n", "22 BELFAST BT56HW Grammar Controlled \n", "23 BELFAST BT42ND Grammar Voluntary \n", "24 BELFAST BT118NR Grammar Voluntary \n", "25 BELFAST BT96BY Grammar Voluntary \n", "26 BELFAST BT16DL Grammar Voluntary \n", "27 BELFAST BT146JL Grammar Voluntary \n", "28 BELFAST BT126AE Grammar Voluntary \n", "29 BELFAST BT152AE Grammar Voluntary \n", ".. ... ... ... ... \n", "173 BANBRIDGE BT323AS Non-grammar Catholic Maintained \n", "174 NEWRY BT342DT Non-grammar Catholic Maintained \n", "175 NEWRY BT343PN Non-grammar Catholic Maintained \n", "176 DUNGANNON BT702LY Non-grammar Catholic Maintained \n", "177 NEWRY BT357EE Non-grammar Catholic Maintained \n", "178 NEWRY BT359HL Non-grammar Catholic Maintained \n", "179 KEADY BT603TH Non-grammar Catholic Maintained \n", "180 DUNGANNON BT714NW Non-grammar Catholic Maintained \n", "181 CRAIGAVON BT655DU Non-grammar Catholic Maintained \n", "182 ARMAGH BT604BG Non-grammar Catholic Maintained \n", "183 COOKSTOWN BT808QB Non-grammar Catholic Maintained \n", "184 DUNGANNON BT716LJ Non-grammar Catholic Maintained \n", "185 PORTADOWN BT621QQ Secondary Catholic Maintained \n", "186 CRAIGAVON BT655BS Non-grammar Controlled Integrated \n", "187 BANBRIDGE BT323LN Non-grammar GMI \n", "188 DUNGANNON BT716LS Non-grammar GMI \n", "189 BANBRIDGE BT324AQ Grammar Controlled \n", "190 CRAIGAVON BT666JW Grammar Controlled \n", "191 CRAIGAVON BT635BU Grammar Controlled \n", "192 KILKEEL BT344EU Grammar Voluntary \n", "193 NEWRY BT342QN Grammar Voluntary \n", "194 NEWRY BT356DY Grammar Voluntary \n", "195 NEWRY BT356PP Grammar Voluntary \n", "196 DUNGANNON BT703HE Grammar Voluntary \n", "197 NEWRY BT341PR Grammar Voluntary \n", "198 DUNGANNON BT716AP Grammar Voluntary \n", "199 ARMAGH BT619DH Grammar Voluntary \n", "200 ARMAGH BT617QZ Grammar Voluntary \n", "201 DUNGANNON BT716DS Grammar Voluntary \n", "202 LURGAN BT679JW Grammar Voluntary \n", "\n", " parliamentary constituency district council \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 parliamentary district \n", "3 constituency council \n", "4 BELFAST EAST BELFAST \n", "5 BELFAST EAST BELFAST \n", "6 BELFAST NORTH BELFAST \n", "7 BELFAST NORTH BELFAST \n", "8 BELFAST WEST BELFAST \n", "9 BELFAST NORTH BELFAST \n", "10 BELFAST WEST BELFAST \n", "11 BELFAST WEST BELFAST \n", "12 BELFAST WEST BELFAST \n", "13 BELFAST WEST BELFAST \n", "14 BELFAST WEST BELFAST \n", "15 BELFAST SOUTH BELFAST \n", "16 BELFAST NORTH BELFAST \n", "17 BELFAST WEST BELFAST \n", "18 BELFAST NORTH BELFAST \n", "19 BELFAST SOUTH BELFAST \n", "20 BELFAST EAST BELFAST \n", "21 BELFAST SOUTH BELFAST \n", "22 BELFAST EAST BELFAST \n", "23 BELFAST EAST BELFAST \n", "24 BELFAST WEST BELFAST \n", "25 BELFAST SOUTH BELFAST \n", "26 BELFAST SOUTH BELFAST \n", "27 BELFAST NORTH BELFAST \n", "28 BELFAST WEST BELFAST \n", "29 BELFAST NORTH BELFAST \n", ".. ... ... \n", "173 UPPER BANN ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "174 NEWRY AND ARMAGH NEWRY MOURNE AND DOWN \n", "175 SOUTH DOWN NEWRY MOURNE AND DOWN \n", "176 FERMANAGH AND SOUTH TYRONE MID ULSTER \n", "177 NEWRY AND ARMAGH NEWRY MOURNE AND DOWN \n", "178 NEWRY AND ARMAGH NEWRY MOURNE AND DOWN \n", "179 NEWRY AND ARMAGH ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "180 MID ULSTER MID ULSTER \n", "181 UPPER BANN ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "182 NEWRY AND ARMAGH ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "183 MID ULSTER MID ULSTER \n", "184 FERMANAGH AND SOUTH TYRONE MID ULSTER \n", "185 UPPER BANN ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "186 UPPER BANN ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "187 UPPER BANN ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "188 FERMANAGH AND SOUTH TYRONE MID ULSTER \n", "189 UPPER BANN ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "190 UPPER BANN ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "191 UPPER BANN ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "192 SOUTH DOWN NEWRY MOURNE AND DOWN \n", "193 SOUTH DOWN NEWRY MOURNE AND DOWN \n", "194 NEWRY AND ARMAGH NEWRY MOURNE AND DOWN \n", "195 NEWRY AND ARMAGH NEWRY MOURNE AND DOWN \n", "196 MID ULSTER MID ULSTER \n", "197 SOUTH DOWN NEWRY MOURNE AND DOWN \n", "198 FERMANAGH AND SOUTH TYRONE MID ULSTER \n", "199 NEWRY AND ARMAGH ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "200 NEWRY AND ARMAGH ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "201 FERMANAGH AND SOUTH TYRONE MID ULSTER \n", "202 UPPER BANN ARMAGH CITY, BANBRIDGE AND CRAIGAVON \n", "\n", " urban/ rural \n", "0 NaN \n", "1 NaN \n", "2 urban/ \n", "3 rural \n", "4 Urban \n", "5 Urban \n", "6 Urban \n", "7 Urban \n", "8 Urban \n", "9 Urban \n", "10 Urban \n", "11 Urban \n", "12 Urban \n", "13 Urban \n", "14 Urban \n", "15 Urban \n", "16 Urban \n", "17 Urban \n", "18 Urban \n", "19 Urban \n", "20 Urban \n", "21 Urban \n", "22 Urban \n", "23 Urban \n", "24 Urban \n", "25 Urban \n", "26 Urban \n", "27 Urban \n", "28 Urban \n", "29 Urban \n", ".. ... \n", "173 Urban \n", "174 Urban \n", "175 Urban \n", "176 Rural \n", "177 Rural \n", "178 Rural \n", "179 Rural \n", "180 Urban \n", "181 Urban \n", "182 Urban \n", "183 Urban \n", "184 Urban \n", "185 Urban \n", "186 Urban \n", "187 Rural \n", "188 Urban \n", "189 Urban \n", "190 Urban \n", "191 Urban \n", "192 Urban \n", "193 Urban \n", "194 Urban \n", "195 Urban \n", "196 Rural \n", "197 Urban \n", "198 Urban \n", "199 Urban \n", "200 Urban \n", "201 Urban \n", "202 Urban \n", "\n", "[203 rows x 10 columns]" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.columns=df.ix[1:3].fillna('').apply(join_n_strip, axis=0).values\n", "df" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.517739Z", "start_time": "2018-06-07T10:36:11.466841Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
De refschool nameaddress 1townpostcodeschool typeschool management typeparliamentary constituencydistrict councilurban/ rural
01210014Ashfield Girls' High School397 HOLYWOOD ROADBELFASTBT42LYNon-grammarControlledBELFAST EASTBELFASTUrban
11210015Ashfield Boys' High School395 HOLYWOOD ROADBELFASTBT42LYNon-grammarControlledBELFAST EASTBELFASTUrban
21210021Belfast Model School For Girls35 DUNOWEN GARDENSBELFASTBT146NQNon-grammarControlledBELFAST NORTHBELFASTUrban
31210022Belfast Boys' Model SchoolBALLYSILLAN ROADBELFASTBT146RBNon-grammarControlledBELFAST NORTHBELFASTUrban
41230053St Louise's Comprehensive College468 FALLS ROADBELFASTBT126ENNon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
51230104Mercy College BelfastBALLYSILLAN ROADBELFASTBT147QRNon-grammarCatholic MaintainedBELFAST NORTHBELFASTUrban
61230130St Rose’s Dominican College65 BEECHMOUNT AVENUEBELFASTBT127NANon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
71230146Christian Brothers School, BelfastGLEN ROADBELFASTBT118BWNon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
81230155St Genevieve's High SchoolTRENCH HOUSEBELFASTBT119JPNon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
91230182De La Salle College36 EDENMORE DRIVEBELFASTBT118LTNon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
101230262Corpus Christi CollegeARD NA VA ROADBELFASTBT126FFNon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
111230275St Joseph's College, Belfast518-572 RAVENHILL ROADBELFASTBT60BYNon-grammarCatholic MaintainedBELFAST SOUTHBELFASTUrban
121230321Blessed Trinity College619 ANTRIM ROADBELFASTBT154DZNon-grammarCatholic MaintainedBELFAST NORTHBELFASTUrban
131240291Colaiste Feirste7 BEECHVIEW PARKBELFASTBT127PYNon-grammarOther MaintainedBELFAST WESTBELFASTUrban
141260269Hazelwood College70 WHITEWELL ROADNEWTOWNABBEYBT367ESNon-grammarGMIBELFAST NORTHBELFASTUrban
151260294Malone Integrated College45 FINAGHY ROAD NORTHBELFASTBT100JBNon-grammarGMIBELFAST SOUTHBELFASTUrban
161410079Grosvenor Grammar School50 MARINA PARKBELFASTBT56BAGrammarControlledBELFAST EASTBELFASTUrban
171410270Wellington College18 CAROLAN ROADBELFASTBT73HEGrammarControlledBELFAST SOUTHBELFASTUrban
181410315Bloomfield Collegiate8 ASTORIA GARDENSBELFASTBT56HWGrammarControlledBELFAST EASTBELFASTUrban
191420020Campbell CollegeBELMONT ROADBELFASTBT42NDGrammarVoluntaryBELFAST EASTBELFASTUrban
201420021St Mary's Christian Brothers' Grammar, Belfast147A GLEN ROADBELFASTBT118NRGrammarVoluntaryBELFAST WESTBELFASTUrban
211420022Methodist College1 MALONE ROADBELFASTBT96BYGrammarVoluntaryBELFAST SOUTHBELFASTUrban
221420027The Royal Belfast Academical InstitutionCOLLEGE SQUARE EASTBELFASTBT16DLGrammarVoluntaryBELFAST SOUTHBELFASTUrban
231420028Belfast Royal Academy5-17 CLIFTONVILLE ROADBELFASTBT146JLGrammarVoluntaryBELFAST NORTHBELFASTUrban
241420029St Dominic's High School, Belfast135-137 FALLS ROADBELFASTBT126AEGrammarVoluntaryBELFAST WESTBELFASTUrban
251420030St Malachy's College, Belfast36 ANTRIM ROADBELFASTBT152AEGrammarVoluntaryBELFAST NORTHBELFASTUrban
261420082Dominican College, Belfast38 FORTWILLIAM PARKBELFASTBT154AQGrammarVoluntaryBELFAST NORTHBELFASTUrban
271420089Strathearn School, Belfast188 BELMONT ROADBELFASTBT42AUGrammarVoluntaryBELFAST EASTBELFASTUrban
281420095Rathmore Grammar SchoolKINGSWAYBELFASTBT100LFGrammarVoluntaryBELFAST SOUTHBELFASTUrban
291420264Victoria CollegeCRANMORE PARKBELFASTBT96JAGrammarVoluntaryBELFAST SOUTHBELFASTUrban
.................................
1695230076St Patrick's College, Banbridge38 SCARVA ROADBANBRIDGEBT323ASNon-grammarCatholic MaintainedUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1705230108St Mary's High School, NewryUPPER CHAPEL STREETNEWRYBT342DTNon-grammarCatholic MaintainedNEWRY AND ARMAGHNEWRY MOURNE AND DOWNUrban
1715230135St Mark's High SchoolUPPER DROMORE ROADNEWRYBT343PNNon-grammarCatholic MaintainedSOUTH DOWNNEWRY MOURNE AND DOWNUrban
1725230152St Ciaran's High School15 TULLYBRYAN ROADDUNGANNONBT702LYNon-grammarCatholic MaintainedFERMANAGH AND SOUTH TYRONEMID ULSTERRural
1735230157St Paul's High School, Bessbrook108 CAMLOUGH ROADNEWRYBT357EENon-grammarCatholic MaintainedNEWRY AND ARMAGHNEWRY MOURNE AND DOWNRural
1745230167St Joseph's High School, Crossmaglen77 DUNDALK ROADNEWRYBT359HLNon-grammarCatholic MaintainedNEWRY AND ARMAGHNEWRY MOURNE AND DOWNRural
1755230187St Patrick's High School, KeadyMIDDLETOWN ROADKEADYBT603THNon-grammarCatholic MaintainedNEWRY AND ARMAGHARMAGH CITY, BANBRIDGE AND CRAIGAVONRural
1765230192St Joseph's College, Coalisland29 SCHOOL LANEDUNGANNONBT714NWNon-grammarCatholic MaintainedMID ULSTERMID ULSTERUrban
1775230213Lismore Comprehensive SchoolDRUMGASKCRAIGAVONBT655DUNon-grammarCatholic MaintainedUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1785230218St Catherine's College2A CONVENT ROADARMAGHBT604BGNon-grammarCatholic MaintainedNEWRY AND ARMAGHARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1795230278Holy Trinity CollegeCHAPEL STREETCOOKSTOWNBT808QBNon-grammarCatholic MaintainedMID ULSTERMID ULSTERUrban
1805230293St Patrick's College, Dungannon41 KILLYMEAL ROADDUNGANNONBT716LJNon-grammarCatholic MaintainedFERMANAGH AND SOUTH TYRONEMID ULSTERUrban
1815230321St John The Baptist College4 MOY ROADPORTADOWNBT621QQSecondaryCatholic MaintainedUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1825250216Brownlow Int CollegeTULLYGALLY ROADCRAIGAVONBT655BSNon-grammarControlled IntegratedUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1835260285New-Bridge Integrated College25 DONARD VIEW ROADBANBRIDGEBT323LNNon-grammarGMIUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONRural
1845260286Integrated College Dungannon21 GORTMERRON LINK ROADDUNGANNONBT716LSNon-grammarGMIFERMANAGH AND SOUTH TYRONEMID ULSTERUrban
1855410013Banbridge AcademyLURGAN ROADBANBRIDGEBT324AQGrammarControlledUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1865410057Lurgan College9 COLLEGE WALKCRAIGAVONBT666JWGrammarControlledUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1875410067Portadown College4 KILLYCOMAINE ROADCRAIGAVONBT635BUGrammarControlledUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1885420045St Louis Grammar School, Kilkeel151 NEWRY ROADKILKEELBT344EUGrammarVoluntarySOUTH DOWNNEWRY MOURNE AND DOWNUrban
1895420059Abbey Christian Brothers Grammar School77A ASHGROVE ROADNEWRYBT342QNGrammarVoluntarySOUTH DOWNNEWRY MOURNE AND DOWNUrban
1905420060Our Lady's Grammar SchoolCHEQUER HILLNEWRYBT356DYGrammarVoluntaryNEWRY AND ARMAGHNEWRY MOURNE AND DOWNUrban
1915420062St Colman's College, Newry46 ARMAGH ROADNEWRYBT356PPGrammarVoluntaryNEWRY AND ARMAGHNEWRY MOURNE AND DOWNUrban
1925420073St Joseph's Convent Grammar School, Donaghmore58 CASTLECAULFIELD ROADDUNGANNONBT703HEGrammarVoluntaryMID ULSTERMID ULSTERRural
1935420076Sacred Heart Grammar School, Newry10 ASHGROVE AVENUENEWRYBT341PRGrammarVoluntarySOUTH DOWNNEWRY MOURNE AND DOWNUrban
1945420260The Royal School, Dungannon2 RANFURLEY ROADDUNGANNONBT716APGrammarVoluntaryFERMANAGH AND SOUTH TYRONEMID ULSTERUrban
1955420263The Royal School, ArmaghCOLLEGE HILLARMAGHBT619DHGrammarVoluntaryNEWRY AND ARMAGHARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1965420268St Patrick's Grammar School, ArmaghCATHEDRAL ROADARMAGHBT617QZGrammarVoluntaryNEWRY AND ARMAGHARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
1975420304St Patrick's Academy, Dungannon37 KILLYMEAL ROADDUNGANNONBT716DSGrammarVoluntaryFERMANAGH AND SOUTH TYRONEMID ULSTERUrban
1985420314St Ronan’s College12 CORNAKINEGAR ROADLURGANBT679JWGrammarVoluntaryUPPER BANNARMAGH CITY, BANBRIDGE AND CRAIGAVONUrban
\n", "

199 rows × 10 columns

\n", "
" ], "text/plain": [ " De ref school name \\\n", "0 1210014 Ashfield Girls' High School \n", "1 1210015 Ashfield Boys' High School \n", "2 1210021 Belfast Model School For Girls \n", "3 1210022 Belfast Boys' Model School \n", "4 1230053 St Louise's Comprehensive College \n", "5 1230104 Mercy College Belfast \n", "6 1230130 St Rose’s Dominican College \n", "7 1230146 Christian Brothers School, Belfast \n", "8 1230155 St Genevieve's High School \n", "9 1230182 De La Salle College \n", "10 1230262 Corpus Christi College \n", "11 1230275 St Joseph's College, Belfast \n", "12 1230321 Blessed Trinity College \n", "13 1240291 Colaiste Feirste \n", "14 1260269 Hazelwood College \n", "15 1260294 Malone Integrated College \n", "16 1410079 Grosvenor Grammar School \n", "17 1410270 Wellington College \n", "18 1410315 Bloomfield Collegiate \n", "19 1420020 Campbell College \n", "20 1420021 St Mary's Christian Brothers' Grammar, Belfast \n", "21 1420022 Methodist College \n", "22 1420027 The Royal Belfast Academical Institution \n", "23 1420028 Belfast Royal Academy \n", "24 1420029 St Dominic's High School, Belfast \n", "25 1420030 St Malachy's College, Belfast \n", "26 1420082 Dominican College, Belfast \n", "27 1420089 Strathearn School, Belfast \n", "28 1420095 Rathmore Grammar School \n", "29 1420264 Victoria College \n", ".. ... ... \n", "169 5230076 St Patrick's College, Banbridge \n", "170 5230108 St Mary's High School, Newry \n", "171 5230135 St Mark's High School \n", "172 5230152 St Ciaran's High School \n", "173 5230157 St Paul's High School, Bessbrook \n", "174 5230167 St Joseph's High School, Crossmaglen \n", "175 5230187 St Patrick's High School, Keady \n", "176 5230192 St Joseph's College, Coalisland \n", "177 5230213 Lismore Comprehensive School \n", "178 5230218 St Catherine's College \n", "179 5230278 Holy Trinity College \n", "180 5230293 St Patrick's College, Dungannon \n", "181 5230321 St John The Baptist College \n", "182 5250216 Brownlow Int College \n", "183 5260285 New-Bridge Integrated College \n", "184 5260286 Integrated College Dungannon \n", "185 5410013 Banbridge Academy \n", "186 5410057 Lurgan College \n", "187 5410067 Portadown College \n", "188 5420045 St Louis Grammar School, Kilkeel \n", "189 5420059 Abbey Christian Brothers Grammar School \n", "190 5420060 Our Lady's Grammar School \n", "191 5420062 St Colman's College, Newry \n", "192 5420073 St Joseph's Convent Grammar School, Donaghmore \n", "193 5420076 Sacred Heart Grammar School, Newry \n", "194 5420260 The Royal School, Dungannon \n", "195 5420263 The Royal School, Armagh \n", "196 5420268 St Patrick's Grammar School, Armagh \n", "197 5420304 St Patrick's Academy, Dungannon \n", "198 5420314 St Ronan’s College \n", "\n", " address 1 town postcode school type \\\n", "0 397 HOLYWOOD ROAD BELFAST BT42LY Non-grammar \n", "1 395 HOLYWOOD ROAD BELFAST BT42LY Non-grammar \n", "2 35 DUNOWEN GARDENS BELFAST BT146NQ Non-grammar \n", "3 BALLYSILLAN ROAD BELFAST BT146RB Non-grammar \n", "4 468 FALLS ROAD BELFAST BT126EN Non-grammar \n", "5 BALLYSILLAN ROAD BELFAST BT147QR Non-grammar \n", "6 65 BEECHMOUNT AVENUE BELFAST BT127NA Non-grammar \n", "7 GLEN ROAD BELFAST BT118BW Non-grammar \n", "8 TRENCH HOUSE BELFAST BT119JP Non-grammar \n", "9 36 EDENMORE DRIVE BELFAST BT118LT Non-grammar \n", "10 ARD NA VA ROAD BELFAST BT126FF Non-grammar \n", "11 518-572 RAVENHILL ROAD BELFAST BT60BY Non-grammar \n", "12 619 ANTRIM ROAD BELFAST BT154DZ Non-grammar \n", "13 7 BEECHVIEW PARK BELFAST BT127PY Non-grammar \n", "14 70 WHITEWELL ROAD NEWTOWNABBEY BT367ES Non-grammar \n", "15 45 FINAGHY ROAD NORTH BELFAST BT100JB Non-grammar \n", "16 50 MARINA PARK BELFAST BT56BA Grammar \n", "17 18 CAROLAN ROAD BELFAST BT73HE Grammar \n", "18 8 ASTORIA GARDENS BELFAST BT56HW Grammar \n", "19 BELMONT ROAD BELFAST BT42ND Grammar \n", "20 147A GLEN ROAD BELFAST BT118NR Grammar \n", "21 1 MALONE ROAD BELFAST BT96BY Grammar \n", "22 COLLEGE SQUARE EAST BELFAST BT16DL Grammar \n", "23 5-17 CLIFTONVILLE ROAD BELFAST BT146JL Grammar \n", "24 135-137 FALLS ROAD BELFAST BT126AE Grammar \n", "25 36 ANTRIM ROAD BELFAST BT152AE Grammar \n", "26 38 FORTWILLIAM PARK BELFAST BT154AQ Grammar \n", "27 188 BELMONT ROAD BELFAST BT42AU Grammar \n", "28 KINGSWAY BELFAST BT100LF Grammar \n", "29 CRANMORE PARK BELFAST BT96JA Grammar \n", ".. ... ... ... ... \n", "169 38 SCARVA ROAD BANBRIDGE BT323AS Non-grammar \n", "170 UPPER CHAPEL STREET NEWRY BT342DT Non-grammar \n", "171 UPPER DROMORE ROAD NEWRY BT343PN Non-grammar \n", "172 15 TULLYBRYAN ROAD DUNGANNON BT702LY Non-grammar \n", "173 108 CAMLOUGH ROAD NEWRY BT357EE Non-grammar \n", "174 77 DUNDALK ROAD NEWRY BT359HL Non-grammar \n", "175 MIDDLETOWN ROAD KEADY BT603TH Non-grammar \n", "176 29 SCHOOL LANE DUNGANNON BT714NW Non-grammar \n", "177 DRUMGASK CRAIGAVON BT655DU Non-grammar \n", "178 2A CONVENT ROAD ARMAGH BT604BG Non-grammar \n", "179 CHAPEL STREET COOKSTOWN BT808QB Non-grammar \n", "180 41 KILLYMEAL ROAD DUNGANNON BT716LJ Non-grammar \n", "181 4 MOY ROAD PORTADOWN BT621QQ Secondary \n", "182 TULLYGALLY ROAD CRAIGAVON BT655BS Non-grammar \n", "183 25 DONARD VIEW ROAD BANBRIDGE BT323LN Non-grammar \n", "184 21 GORTMERRON LINK ROAD DUNGANNON BT716LS Non-grammar \n", "185 LURGAN ROAD BANBRIDGE BT324AQ Grammar \n", "186 9 COLLEGE WALK CRAIGAVON BT666JW Grammar \n", "187 4 KILLYCOMAINE ROAD CRAIGAVON BT635BU Grammar \n", "188 151 NEWRY ROAD KILKEEL BT344EU Grammar \n", "189 77A ASHGROVE ROAD NEWRY BT342QN Grammar \n", "190 CHEQUER HILL NEWRY BT356DY Grammar \n", "191 46 ARMAGH ROAD NEWRY BT356PP Grammar \n", "192 58 CASTLECAULFIELD ROAD DUNGANNON BT703HE Grammar \n", "193 10 ASHGROVE AVENUE NEWRY BT341PR Grammar \n", "194 2 RANFURLEY ROAD DUNGANNON BT716AP Grammar \n", "195 COLLEGE HILL ARMAGH BT619DH Grammar \n", "196 CATHEDRAL ROAD ARMAGH BT617QZ Grammar \n", "197 37 KILLYMEAL ROAD DUNGANNON BT716DS Grammar \n", "198 12 CORNAKINEGAR ROAD LURGAN BT679JW Grammar \n", "\n", " school management type parliamentary constituency \\\n", "0 Controlled BELFAST EAST \n", "1 Controlled BELFAST EAST \n", "2 Controlled BELFAST NORTH \n", "3 Controlled BELFAST NORTH \n", "4 Catholic Maintained BELFAST WEST \n", "5 Catholic Maintained BELFAST NORTH \n", "6 Catholic Maintained BELFAST WEST \n", "7 Catholic Maintained BELFAST WEST \n", "8 Catholic Maintained BELFAST WEST \n", "9 Catholic Maintained BELFAST WEST \n", "10 Catholic Maintained BELFAST WEST \n", "11 Catholic Maintained BELFAST SOUTH \n", "12 Catholic Maintained BELFAST NORTH \n", "13 Other Maintained BELFAST WEST \n", "14 GMI BELFAST NORTH \n", "15 GMI BELFAST SOUTH \n", "16 Controlled BELFAST EAST \n", "17 Controlled BELFAST SOUTH \n", "18 Controlled BELFAST EAST \n", "19 Voluntary BELFAST EAST \n", "20 Voluntary BELFAST WEST \n", "21 Voluntary BELFAST SOUTH \n", "22 Voluntary BELFAST SOUTH \n", "23 Voluntary BELFAST NORTH \n", "24 Voluntary BELFAST WEST \n", "25 Voluntary BELFAST NORTH \n", "26 Voluntary BELFAST NORTH \n", "27 Voluntary BELFAST EAST \n", "28 Voluntary BELFAST SOUTH \n", "29 Voluntary BELFAST SOUTH \n", ".. ... ... \n", "169 Catholic Maintained UPPER BANN \n", "170 Catholic Maintained NEWRY AND ARMAGH \n", "171 Catholic Maintained SOUTH DOWN \n", "172 Catholic Maintained FERMANAGH AND SOUTH TYRONE \n", "173 Catholic Maintained NEWRY AND ARMAGH \n", "174 Catholic Maintained NEWRY AND ARMAGH \n", "175 Catholic Maintained NEWRY AND ARMAGH \n", "176 Catholic Maintained MID ULSTER \n", "177 Catholic Maintained UPPER BANN \n", "178 Catholic Maintained NEWRY AND ARMAGH \n", "179 Catholic Maintained MID ULSTER \n", "180 Catholic Maintained FERMANAGH AND SOUTH TYRONE \n", "181 Catholic Maintained UPPER BANN \n", "182 Controlled Integrated UPPER BANN \n", "183 GMI UPPER BANN \n", "184 GMI FERMANAGH AND SOUTH TYRONE \n", "185 Controlled UPPER BANN \n", "186 Controlled UPPER BANN \n", "187 Controlled UPPER BANN \n", "188 Voluntary SOUTH DOWN \n", "189 Voluntary SOUTH DOWN \n", "190 Voluntary NEWRY AND ARMAGH \n", "191 Voluntary NEWRY AND ARMAGH \n", "192 Voluntary MID ULSTER \n", "193 Voluntary SOUTH DOWN \n", "194 Voluntary FERMANAGH AND SOUTH TYRONE \n", "195 Voluntary NEWRY AND ARMAGH \n", "196 Voluntary NEWRY AND ARMAGH \n", "197 Voluntary FERMANAGH AND SOUTH TYRONE \n", "198 Voluntary UPPER BANN \n", "\n", " district council urban/ rural \n", "0 BELFAST Urban \n", "1 BELFAST Urban \n", "2 BELFAST Urban \n", "3 BELFAST Urban \n", "4 BELFAST Urban \n", "5 BELFAST Urban \n", "6 BELFAST Urban \n", "7 BELFAST Urban \n", "8 BELFAST Urban \n", "9 BELFAST Urban \n", "10 BELFAST Urban \n", "11 BELFAST Urban \n", "12 BELFAST Urban \n", "13 BELFAST Urban \n", "14 BELFAST Urban \n", "15 BELFAST Urban \n", "16 BELFAST Urban \n", "17 BELFAST Urban \n", "18 BELFAST Urban \n", "19 BELFAST Urban \n", "20 BELFAST Urban \n", "21 BELFAST Urban \n", "22 BELFAST Urban \n", "23 BELFAST Urban \n", "24 BELFAST Urban \n", "25 BELFAST Urban \n", "26 BELFAST Urban \n", "27 BELFAST Urban \n", "28 BELFAST Urban \n", "29 BELFAST Urban \n", ".. ... ... \n", "169 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Urban \n", "170 NEWRY MOURNE AND DOWN Urban \n", "171 NEWRY MOURNE AND DOWN Urban \n", "172 MID ULSTER Rural \n", "173 NEWRY MOURNE AND DOWN Rural \n", "174 NEWRY MOURNE AND DOWN Rural \n", "175 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Rural \n", "176 MID ULSTER Urban \n", "177 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Urban \n", "178 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Urban \n", "179 MID ULSTER Urban \n", "180 MID ULSTER Urban \n", "181 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Urban \n", "182 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Urban \n", "183 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Rural \n", "184 MID ULSTER Urban \n", "185 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Urban \n", "186 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Urban \n", "187 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Urban \n", "188 NEWRY MOURNE AND DOWN Urban \n", "189 NEWRY MOURNE AND DOWN Urban \n", "190 NEWRY MOURNE AND DOWN Urban \n", "191 NEWRY MOURNE AND DOWN Urban \n", "192 MID ULSTER Rural \n", "193 NEWRY MOURNE AND DOWN Urban \n", "194 MID ULSTER Urban \n", "195 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Urban \n", "196 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Urban \n", "197 MID ULSTER Urban \n", "198 ARMAGH CITY, BANBRIDGE AND CRAIGAVON Urban \n", "\n", "[199 rows x 10 columns]" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = df.drop(df.index[0:4]).reset_index(drop=True)\n", "df" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.803125Z", "start_time": "2018-06-07T10:36:11.520592Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df['district council'].value_counts().plot.pie(autopct='%1.0f%%')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](img/itshappening.webp)" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:37:57.306292Z", "start_time": "2018-06-07T10:37:57.083205Z" } }, "outputs": [ { "ename": "TypeError", "evalue": "('sequence item 2: expected str instance, int found', 'occurred at index 0')", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m'post'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mfile\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0mxls\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mExcelFile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'data/education-ni/{year}/{file}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparse_reference_table\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxls\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'Got reference data for {year}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mparse_reference_table\u001b[0;34m(xls)\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_excel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxls\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'reference data'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheader\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mjoin_n_strip\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0ml\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m' '\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ml\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstrip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mix\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfillna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m''\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjoin_n_strip\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36mapply\u001b[0;34m(self, func, axis, broadcast, raw, reduce, args, **kwds)\u001b[0m\n\u001b[1;32m 4875\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4876\u001b[0m \u001b[0mreduce\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mreduce\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4877\u001b[0;31m ignore_failures=ignore_failures)\n\u001b[0m\u001b[1;32m 4878\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4879\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_broadcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_apply_standard\u001b[0;34m(self, func, axis, ignore_failures, reduce)\u001b[0m\n\u001b[1;32m 4971\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4972\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseries_gen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4973\u001b[0;31m \u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4974\u001b[0m \u001b[0mkeys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4975\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m(l)\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m'reference data'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mxls\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msheet_names\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_excel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxls\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'reference data'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheader\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mjoin_n_strip\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0ml\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m' '\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ml\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstrip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mix\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfillna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m''\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjoin_n_strip\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: ('sequence item 2: expected str instance, int found', 'occurred at index 0')" ] } ], "source": [ "def parse_reference_table(xls):\n", " if 'reference data' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'reference data', header=None)\n", " join_n_strip = lambda l: ' '.join(l).strip()\n", " df.columns=df.ix[1:3].fillna('').apply(join_n_strip, axis=0).values\n", " df = df.drop(df.index[0:4]).reset_index(drop=True)\n", " else:\n", " df=None\n", " return df\n", "\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " df = parse_reference_table(xls)\n", " if df is not None:\n", " print(f'Got reference data for {year}')\n" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:01.143690Z", "start_time": "2018-06-07T10:38:00.550724Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "('sequence item 2: expected str instance, int found', 'occurred at index 0')\n", "Got reference data for 2009\n", "('sequence item 2: expected str instance, int found', 'occurred at index 0')\n", "Got reference data for 2010\n", "('sequence item 2: expected str instance, int found', 'occurred at index 0')\n", "Got reference data for 2011\n", "('sequence item 2: expected str instance, int found', 'occurred at index 0')\n", "Got reference data for 2012\n", "('sequence item 2: expected str instance, int found', 'occurred at index 0')\n", "Got reference data for 2013\n", "Got reference data for 2014\n", "Got reference data for 2015\n", "Got reference data for 2016\n", "Got reference data for 2017\n" ] } ], "source": [ "def parse_reference_table(xls):\n", " if 'reference data' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'reference data', header=None)\n", " join_n_strip = lambda l: ' '.join(l).strip()\n", " try:\n", " df.columns=df.ix[1:3].fillna('').apply(join_n_strip, axis=0).values\n", " df = df.drop(df.index[0:4]).reset_index(drop=True)\n", " except TypeError as e:\n", " print(e)\n", " else:\n", " df=None\n", " return df\n", "\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " df = parse_reference_table(xls)\n", " if df is not None:\n", " print(f'Got reference data for {year}')\n" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:05.217935Z", "start_time": "2018-06-07T10:38:05.203057Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
De refschool nameaddress 1townpostcodeschool typeschool management typeparliamentary constituencydistrict councilurban/ rural
01210014Ashfield Girls' High School397 HOLYWOOD ROADBELFASTBT42LYNon-grammarControlledBELFAST EASTBELFASTUrban
11210015Ashfield Boys' High School395 HOLYWOOD ROADBELFASTBT42LYNon-grammarControlledBELFAST EASTBELFASTUrban
21210021Belfast Model School For Girls35 DUNOWEN GARDENSBELFASTBT146NQNon-grammarControlledBELFAST NORTHBELFASTUrban
31210022Belfast Boys' Model SchoolBALLYSILLAN ROADBELFASTBT146RBNon-grammarControlledBELFAST NORTHBELFASTUrban
41230053St Louise's Comprehensive College468 FALLS ROADBELFASTBT126ENNon-grammarCatholic MaintainedBELFAST WESTBELFASTUrban
\n", "
" ], "text/plain": [ " De ref school name address 1 town \\\n", "0 1210014 Ashfield Girls' High School 397 HOLYWOOD ROAD BELFAST \n", "1 1210015 Ashfield Boys' High School 395 HOLYWOOD ROAD BELFAST \n", "2 1210021 Belfast Model School For Girls 35 DUNOWEN GARDENS BELFAST \n", "3 1210022 Belfast Boys' Model School BALLYSILLAN ROAD BELFAST \n", "4 1230053 St Louise's Comprehensive College 468 FALLS ROAD BELFAST \n", "\n", " postcode school type school management type parliamentary constituency \\\n", "0 BT42LY Non-grammar Controlled BELFAST EAST \n", "1 BT42LY Non-grammar Controlled BELFAST EAST \n", "2 BT146NQ Non-grammar Controlled BELFAST NORTH \n", "3 BT146RB Non-grammar Controlled BELFAST NORTH \n", "4 BT126EN Non-grammar Catholic Maintained BELFAST WEST \n", "\n", " district council urban/ rural \n", "0 BELFAST Urban \n", "1 BELFAST Urban \n", "2 BELFAST Urban \n", "3 BELFAST Urban \n", "4 BELFAST Urban " ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:08.482150Z", "start_time": "2018-06-07T10:38:07.824536Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Got reference data for 2009\n", "Got reference data for 2010\n", "Got reference data for 2011\n", "Got reference data for 2012\n", "Got reference data for 2013\n", "Got reference data for 2014\n", "Got reference data for 2015\n", "Got reference data for 2016\n", "Got reference data for 2017\n" ] } ], "source": [ "join_n_strip_n_lower = lambda l: ' '.join(l).strip().lower()\n", "\n", "def parse_reference_table(xls):\n", " if 'reference data' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'reference data', header=None)\n", " h_range = 2 if isinstance(df.ix[3,0], int) else 3\n", " try:\n", " df.columns=df.ix[1:h_range].fillna('').apply(join_n_strip_n_lower, axis=0).values\n", " df = df.drop(df.index[0:h_range+1]).reset_index(drop=True)\n", " except TypeError as e:\n", " print(e)\n", " else:\n", " df=None\n", " return df\n", "\n", "dfs = {}\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " df = parse_reference_table(xls)\n", " if df is not None:\n", " print(f'Got reference data for {year}')\n", " dfs[year]=df\n" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:10.816632Z", "start_time": "2018-06-07T10:38:10.520347Z" }, "code_folding": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import seaborn as sns \n", "\n", "all_keys = set([k for df in dfs.values() for k in df.keys() ])\n", "df = pd.DataFrame.from_dict({\n", " year: [k in df.keys() for k in all_keys]\n", " for year, df in dfs.items()\n", "}, orient='index')\n", "df.columns=all_keys\n", "sns.heatmap(df.T)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:19.595005Z", "start_time": "2018-06-07T10:38:19.579726Z" } }, "outputs": [], "source": [ "ref_key_map={\n", " 'denino':'de ref',\n", " 'urban/ rural': 'urban_rural',\n", " 'schoolname': 'school name'\n", "}\n", "join_n_strip_n_lower = lambda l: ' '.join(l).strip().lower()\n", "\n", "def parse_reference_table(xls):\n", " if 'reference data' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'reference data', header=None)\n", " h_range = 2 if isinstance(df.ix[3,0], int) else 3\n", " try:\n", " df.columns=df.ix[1:h_range].fillna('').apply(join_n_strip_n_lower, axis=0).values\n", " df.rename(columns=ref_key_map, inplace=True)\n", " df = df.drop(df.index[0:h_range+1]).reset_index(drop=True)\n", " except TypeError as e:\n", " print(e)\n", " else:\n", " df=None\n", " return df" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:21.667359Z", "start_time": "2018-06-07T10:38:20.761431Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Got reference data for 2009\n", "Got reference data for 2010\n", "Got reference data for 2011\n", "Got reference data for 2012\n", "Got reference data for 2013\n", "Got reference data for 2014\n", "Got reference data for 2015\n", "Got reference data for 2016\n", "Got reference data for 2017\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dfs = {}\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " df = parse_reference_table(xls)\n", " if df is not None:\n", " print(f'Got reference data for {year}')\n", " dfs[year]=df\n", " \n", "all_keys = set([k for df in dfs.values() for k in df.keys() ])\n", "df = pd.DataFrame.from_dict({\n", " year: [k in df.keys() for k in all_keys]\n", " for year, df in dfs.items()\n", "}, orient='index')\n", "df.columns=all_keys\n", "sns.heatmap(df.T)" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:24.375280Z", "start_time": "2018-06-07T10:38:24.369998Z" } }, "outputs": [ { "data": { "text/plain": [ "['parliamentary constituency',\n", " 'urban_rural',\n", " 'school name',\n", " 'school type',\n", " 'address 1',\n", " 'town',\n", " 'postcode',\n", " 'school management type',\n", " 'de ref',\n", " 'district council']" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cols = [k for k,v in zip(df.columns, df.all()) if v]\n", "cols" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:26.047670Z", "start_time": "2018-06-07T10:38:25.115912Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Got reference data for 2009\n", "Got reference data for 2010\n", "Got reference data for 2011\n", "Got reference data for 2012\n", "Got reference data for 2013\n", "Got reference data for 2014\n", "Got reference data for 2015\n", "Got reference data for 2016\n", "Got reference data for 2017\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "\n", "def parse_reference_table(xls):\n", " cols = [\n", " 'de ref',\n", " 'school name',\n", " 'school type',\n", " 'address 1',\n", " 'postcode',\n", " 'urban_rural',\n", " 'school management type',\n", " 'district council',\n", " 'parliamentary constituency',\n", " 'town'\n", " ]\n", "\n", " ref_key_map={\n", " 'denino':'de ref',\n", " 'urban/ rural': 'urban_rural',\n", " 'schoolname': 'school name'\n", " }\n", " join_n_strip_n_lower = lambda l: ' '.join(l).strip().lower()\n", " \n", " if 'reference data' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'reference data', header=None)\n", " h_range = 2 if isinstance(df.ix[3,0], int) else 3\n", " try:\n", " df.columns=df.ix[1:h_range].fillna('').apply(join_n_strip_n_lower, axis=0).values\n", " df.rename(columns=ref_key_map, inplace=True)\n", " df = df.drop(df.index[0:h_range+1]).reset_index(drop=True)\n", " df = df[cols]\n", " except TypeError as e:\n", " print(e)\n", " else:\n", " df=None\n", " return df\n", "\n", "dfs = {}\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " df = parse_reference_table(xls)\n", " if df is not None:\n", " print(f'Got reference data for {year}')\n", " dfs[year]=df\n", " \n", "all_keys = set([k for df in dfs.values() for k in df.keys() ])\n", "df = pd.DataFrame.from_dict({\n", " year: [k in df.keys() for k in all_keys]\n", " for year, df in dfs.items()\n", "}, orient='index')\n", "df.columns=all_keys\n", "sns.heatmap(df.T)" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:30.420856Z", "start_time": "2018-06-07T10:38:29.605434Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sheets = defaultdict(list)\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " sheets[year].extend(xls.sheet_names)\n", "\n", "all_sheet_names = set([_ for d in sheets.values() for _ in d])\n", "df = pd.DataFrame.from_dict({\n", " year: [sn in sheet_names for sn in all_sheet_names] \n", " for year, sheet_names in sheets.items()\n", "}, orient='index')\n", "df.columns=all_sheet_names\n", "sns.heatmap(df.T)" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:35.401268Z", "start_time": "2018-06-07T10:38:35.395496Z" } }, "outputs": [ { "data": { "text/plain": [ "Index(['meta data', 'gender', 'unfilled places', 'SEN', 'enrolments',\n", " 'School level data', 'Overall', 'newcomers', 'religion',\n", " 'free school meals', 'reference data'],\n", " dtype='object')" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.keys()" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2018-06-06T15:33:48.284478Z", "start_time": "2018-06-06T15:33:48.155990Z" } }, "source": [ "![](img/enrolements_2017.png)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:37.961073Z", "start_time": "2018-06-07T10:38:37.910934Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789
0Data on Pupils attending post primary schools ...NaNNaNNaNNaNNaNNaNNaNNaNNaN
1NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2NaNNaNyear of enrolmentNaNNaNNaNNaNNaNNaNNaN
3DE refSchoolnameyear 8year 9year 10year 11year 12year 13year 14total pupils
41210014Ashfield Girls' High School1241141191111136050691
\n", "
" ], "text/plain": [ " 0 \\\n", "0 Data on Pupils attending post primary schools ... \n", "1 NaN \n", "2 NaN \n", "3 DE ref \n", "4 1210014 \n", "\n", " 1 2 3 4 5 \\\n", "0 NaN NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN NaN \n", "2 NaN year of enrolment NaN NaN NaN \n", "3 Schoolname year 8 year 9 year 10 year 11 \n", "4 Ashfield Girls' High School 124 114 119 111 \n", "\n", " 6 7 8 9 \n", "0 NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN \n", "3 year 12 year 13 year 14 total pupils \n", "4 113 60 50 691 " ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xls = pd.ExcelFile(f'data/education-ni/2017/School%20level%20-%20post%20primary%20schools%20data%20supp%201718.xls')\n", "df = pd.read_excel(xls, 'enrolments', header=None)\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:41.099926Z", "start_time": "2018-06-07T10:38:41.051310Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
de refschoolnameyear of enrolment year 8year 9year 10year 11year 12year 13year 14total pupils
01210014Ashfield Girls' High School1241141191111136050691
11210015Ashfield Boys' High School1261211171211118460740
21210021Belfast Model School For Girls16716016213912112770946
31210022Belfast Boys' Model School1741791651541608976997
41230053St Louise's Comprehensive College2361941892062641601861435
51230104Mercy College Belfast76667176737117450
61230130St Rose’s Dominican College16253237377224243
71230146Christian Brothers School, Belfast107709547408779525
81230155St Genevieve's High School164161152152165138901022
91230182De La Salle College10916516416117311967958
101230262Corpus Christi College24234540383726233
111230275St Joseph's College, Belfast1231121251111044736658
121230321Blessed Trinity College204204216178191189891271
131240291Colaiste Feirste102119102112977148651
141260269Hazelwood College1701711531471449475954
151260294Malone Integrated College69698863857437485
161410079Grosvenor Grammar School1601581621631541501331080
171410270Wellington College1121191141171228573742
181410315Bloomfield Collegiate1011101011101079378700
191420020Campbell College13414314714814796107922
201420021St Mary's Christian Brothers' Grammar, Belfast1781851821741651571241165
211420022Methodist College2412472562552532662581776
221420027The Royal Belfast Academical Institution1521601601641461141161012
231420028Belfast Royal Academy2072112092162092211881461
241420029St Dominic's High School, Belfast1411471451441561491301012
251420030St Malachy's College, Belfast1591611651711661511211094
261420082Dominican College, Belfast152148151153147152981001
271420089Strathearn School, Belfast111116121110111103106778
281420095Rathmore Grammar School1841861861861841831611270
291420264Victoria College132138141136127120103897
.................................
1785230218St Catherine's College1731731591571891251281104
1795230278Holy Trinity College159163171169160112871021
1805230293St Patrick's College, Dungannon10610998921014935590
1815230321St John The Baptist College7750375100170
1825250216Brownlow Int College626243526600285
1835260285New-Bridge Integrated College1091071011061045236615
1845260286Integrated College Dungannon119999794934149592
1855410013Banbridge Academy1851871931961961841601301
1865410057Lurgan College000122116115102455
1875410067Portadown College000205207171161744
1885420045St Louis Grammar School, Kilkeel82838481848169564
1895420059Abbey Christian Brothers Grammar School128130129132136115115885
1905420060Our Lady's Grammar School126124124126125117111853
1915420062St Colman's College, Newry127126131130125118128885
1925420073St Joseph's Convent Grammar School, Donaghmore991021059210210680686
1935420076Sacred Heart Grammar School, Newry123123120120119122116843
1945420260The Royal School, Dungannon9396107931057470638
1955420263The Royal School, Armagh10310399108106103113735
1965420268St Patrick's Grammar School, Armagh126164132155156126108967
1975420304St Patrick's Academy, Dungannon1971981981892001761821340
1985420314St Ronan’s College2852432071822491571461469
199NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
200NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
201NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
202NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
203Source: NI school censusNaNNaNNaNNaNNaNNaNNaNNaNNaN
204NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
205Notes:NaNNaNNaNNaNNaNNaNNaNNaNNaN
2061. Year groups refer to the level of study of ...NaNNaNNaNNaNNaNNaNNaNNaNNaN
2072. Pupils aged 16+ that are not studying level...NaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

208 rows × 10 columns

\n", "
" ], "text/plain": [ " de ref \\\n", "0 1210014 \n", "1 1210015 \n", "2 1210021 \n", "3 1210022 \n", "4 1230053 \n", "5 1230104 \n", "6 1230130 \n", "7 1230146 \n", "8 1230155 \n", "9 1230182 \n", "10 1230262 \n", "11 1230275 \n", "12 1230321 \n", "13 1240291 \n", "14 1260269 \n", "15 1260294 \n", "16 1410079 \n", "17 1410270 \n", "18 1410315 \n", "19 1420020 \n", "20 1420021 \n", "21 1420022 \n", "22 1420027 \n", "23 1420028 \n", "24 1420029 \n", "25 1420030 \n", "26 1420082 \n", "27 1420089 \n", "28 1420095 \n", "29 1420264 \n", ".. ... \n", "178 5230218 \n", "179 5230278 \n", "180 5230293 \n", "181 5230321 \n", "182 5250216 \n", "183 5260285 \n", "184 5260286 \n", "185 5410013 \n", "186 5410057 \n", "187 5410067 \n", "188 5420045 \n", "189 5420059 \n", "190 5420060 \n", "191 5420062 \n", "192 5420073 \n", "193 5420076 \n", "194 5420260 \n", "195 5420263 \n", "196 5420268 \n", "197 5420304 \n", "198 5420314 \n", "199 NaN \n", "200 NaN \n", "201 NaN \n", "202 NaN \n", "203 Source: NI school census \n", "204 NaN \n", "205 Notes: \n", "206 1. Year groups refer to the level of study of ... \n", "207 2. Pupils aged 16+ that are not studying level... \n", "\n", " schoolname year of enrolment year 8 \\\n", "0 Ashfield Girls' High School 124 \n", "1 Ashfield Boys' High School 126 \n", "2 Belfast Model School For Girls 167 \n", "3 Belfast Boys' Model School 174 \n", "4 St Louise's Comprehensive College 236 \n", "5 Mercy College Belfast 76 \n", "6 St Rose’s Dominican College 16 \n", "7 Christian Brothers School, Belfast 107 \n", "8 St Genevieve's High School 164 \n", "9 De La Salle College 109 \n", "10 Corpus Christi College 24 \n", "11 St Joseph's College, Belfast 123 \n", "12 Blessed Trinity College 204 \n", "13 Colaiste Feirste 102 \n", "14 Hazelwood College 170 \n", "15 Malone Integrated College 69 \n", "16 Grosvenor Grammar School 160 \n", "17 Wellington College 112 \n", "18 Bloomfield Collegiate 101 \n", "19 Campbell College 134 \n", "20 St Mary's Christian Brothers' Grammar, Belfast 178 \n", "21 Methodist College 241 \n", "22 The Royal Belfast Academical Institution 152 \n", "23 Belfast Royal Academy 207 \n", "24 St Dominic's High School, Belfast 141 \n", "25 St Malachy's College, Belfast 159 \n", "26 Dominican College, Belfast 152 \n", "27 Strathearn School, Belfast 111 \n", "28 Rathmore Grammar School 184 \n", "29 Victoria College 132 \n", ".. ... ... \n", "178 St Catherine's College 173 \n", "179 Holy Trinity College 159 \n", "180 St Patrick's College, Dungannon 106 \n", "181 St John The Baptist College 77 \n", "182 Brownlow Int College 62 \n", "183 New-Bridge Integrated College 109 \n", "184 Integrated College Dungannon 119 \n", "185 Banbridge Academy 185 \n", "186 Lurgan College 0 \n", "187 Portadown College 0 \n", "188 St Louis Grammar School, Kilkeel 82 \n", "189 Abbey Christian Brothers Grammar School 128 \n", "190 Our Lady's Grammar School 126 \n", "191 St Colman's College, Newry 127 \n", "192 St Joseph's Convent Grammar School, Donaghmore 99 \n", "193 Sacred Heart Grammar School, Newry 123 \n", "194 The Royal School, Dungannon 93 \n", "195 The Royal School, Armagh 103 \n", "196 St Patrick's Grammar School, Armagh 126 \n", "197 St Patrick's Academy, Dungannon 197 \n", "198 St Ronan’s College 285 \n", "199 NaN NaN \n", "200 NaN NaN \n", "201 NaN NaN \n", "202 NaN NaN \n", "203 NaN NaN \n", "204 NaN NaN \n", "205 NaN NaN \n", "206 NaN NaN \n", "207 NaN NaN \n", "\n", " year 9 year 10 year 11 year 12 year 13 year 14 total pupils \n", "0 114 119 111 113 60 50 691 \n", "1 121 117 121 111 84 60 740 \n", "2 160 162 139 121 127 70 946 \n", "3 179 165 154 160 89 76 997 \n", "4 194 189 206 264 160 186 1435 \n", "5 66 71 76 73 71 17 450 \n", "6 25 32 37 37 72 24 243 \n", "7 70 95 47 40 87 79 525 \n", "8 161 152 152 165 138 90 1022 \n", "9 165 164 161 173 119 67 958 \n", "10 23 45 40 38 37 26 233 \n", "11 112 125 111 104 47 36 658 \n", "12 204 216 178 191 189 89 1271 \n", "13 119 102 112 97 71 48 651 \n", "14 171 153 147 144 94 75 954 \n", "15 69 88 63 85 74 37 485 \n", "16 158 162 163 154 150 133 1080 \n", "17 119 114 117 122 85 73 742 \n", "18 110 101 110 107 93 78 700 \n", "19 143 147 148 147 96 107 922 \n", "20 185 182 174 165 157 124 1165 \n", "21 247 256 255 253 266 258 1776 \n", "22 160 160 164 146 114 116 1012 \n", "23 211 209 216 209 221 188 1461 \n", "24 147 145 144 156 149 130 1012 \n", "25 161 165 171 166 151 121 1094 \n", "26 148 151 153 147 152 98 1001 \n", "27 116 121 110 111 103 106 778 \n", "28 186 186 186 184 183 161 1270 \n", "29 138 141 136 127 120 103 897 \n", ".. ... ... ... ... ... ... ... \n", "178 173 159 157 189 125 128 1104 \n", "179 163 171 169 160 112 87 1021 \n", "180 109 98 92 101 49 35 590 \n", "181 50 37 5 1 0 0 170 \n", "182 62 43 52 66 0 0 285 \n", "183 107 101 106 104 52 36 615 \n", "184 99 97 94 93 41 49 592 \n", "185 187 193 196 196 184 160 1301 \n", "186 0 0 122 116 115 102 455 \n", "187 0 0 205 207 171 161 744 \n", "188 83 84 81 84 81 69 564 \n", "189 130 129 132 136 115 115 885 \n", "190 124 124 126 125 117 111 853 \n", "191 126 131 130 125 118 128 885 \n", "192 102 105 92 102 106 80 686 \n", "193 123 120 120 119 122 116 843 \n", "194 96 107 93 105 74 70 638 \n", "195 103 99 108 106 103 113 735 \n", "196 164 132 155 156 126 108 967 \n", "197 198 198 189 200 176 182 1340 \n", "198 243 207 182 249 157 146 1469 \n", "199 NaN NaN NaN NaN NaN NaN NaN \n", "200 NaN NaN NaN NaN NaN NaN NaN \n", "201 NaN NaN NaN NaN NaN NaN NaN \n", "202 NaN NaN NaN NaN NaN NaN NaN \n", "203 NaN NaN NaN NaN NaN NaN NaN \n", "204 NaN NaN NaN NaN NaN NaN NaN \n", "205 NaN NaN NaN NaN NaN NaN NaN \n", "206 NaN NaN NaN NaN NaN NaN NaN \n", "207 NaN NaN NaN NaN NaN NaN NaN \n", "\n", "[208 rows x 10 columns]" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def parse_enrolments_table(xls):\n", " join_n_strip_n_lower = lambda l: ' '.join(l).strip().lower()\n", " \n", " if 'enrolments' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'enrolments', header=None)\n", " h_range = 2 if isinstance(df.ix[3,0], int) else 3\n", " try:\n", " df.columns=df.ix[1:h_range].fillna('').apply(join_n_strip_n_lower, axis=0).values\n", " df = df.drop(df.index[0:h_range+1]).reset_index(drop=True)\n", " except TypeError as e:\n", " print(e)\n", " else:\n", " df=None\n", " return df\n", "df= parse_enrolments_table(xls)\n", "df" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:41.870545Z", "start_time": "2018-06-07T10:38:41.833695Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
schoolnameyear of enrolment year 8year 9year 10year 11year 12year 13year 14total pupils
de ref
1210014Ashfield Girls' High School1241141191111136050691
1210015Ashfield Boys' High School1261211171211118460740
1210021Belfast Model School For Girls16716016213912112770946
1210022Belfast Boys' Model School1741791651541608976997
1230053St Louise's Comprehensive College2361941892062641601861435
1230104Mercy College Belfast76667176737117450
1230130St Rose’s Dominican College16253237377224243
1230146Christian Brothers School, Belfast107709547408779525
1230155St Genevieve's High School164161152152165138901022
1230182De La Salle College10916516416117311967958
1230262Corpus Christi College24234540383726233
1230275St Joseph's College, Belfast1231121251111044736658
1230321Blessed Trinity College204204216178191189891271
1240291Colaiste Feirste102119102112977148651
1260269Hazelwood College1701711531471449475954
1260294Malone Integrated College69698863857437485
1410079Grosvenor Grammar School1601581621631541501331080
1410270Wellington College1121191141171228573742
1410315Bloomfield Collegiate1011101011101079378700
1420020Campbell College13414314714814796107922
1420021St Mary's Christian Brothers' Grammar, Belfast1781851821741651571241165
1420022Methodist College2412472562552532662581776
1420027The Royal Belfast Academical Institution1521601601641461141161012
1420028Belfast Royal Academy2072112092162092211881461
1420029St Dominic's High School, Belfast1411471451441561491301012
1420030St Malachy's College, Belfast1591611651711661511211094
1420082Dominican College, Belfast152148151153147152981001
1420089Strathearn School, Belfast111116121110111103106778
1420095Rathmore Grammar School1841861861861841831611270
1420264Victoria College132138141136127120103897
..............................
5230218St Catherine's College1731731591571891251281104
5230278Holy Trinity College159163171169160112871021
5230293St Patrick's College, Dungannon10610998921014935590
5230321St John The Baptist College7750375100170
5250216Brownlow Int College626243526600285
5260285New-Bridge Integrated College1091071011061045236615
5260286Integrated College Dungannon119999794934149592
5410013Banbridge Academy1851871931961961841601301
5410057Lurgan College000122116115102455
5410067Portadown College000205207171161744
5420045St Louis Grammar School, Kilkeel82838481848169564
5420059Abbey Christian Brothers Grammar School128130129132136115115885
5420060Our Lady's Grammar School126124124126125117111853
5420062St Colman's College, Newry127126131130125118128885
5420073St Joseph's Convent Grammar School, Donaghmore991021059210210680686
5420076Sacred Heart Grammar School, Newry123123120120119122116843
5420260The Royal School, Dungannon9396107931057470638
5420263The Royal School, Armagh10310399108106103113735
5420268St Patrick's Grammar School, Armagh126164132155156126108967
5420304St Patrick's Academy, Dungannon1971981981892001761821340
5420314St Ronan’s College2852432071822491571461469
NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
Source: NI school censusNaNNaNNaNNaNNaNNaNNaNNaNNaN
NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
Notes:NaNNaNNaNNaNNaNNaNNaNNaNNaN
1. Year groups refer to the level of study of pupils i.e. Pupils in their final year of GCSEs (including those repeating are in year 12)NaNNaNNaNNaNNaNNaNNaNNaNNaN
2. Pupils aged 16+ that are not studying level 2 or 3 qualifications have been recorded as year 12 pupilsNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

208 rows × 9 columns

\n", "
" ], "text/plain": [ " schoolname \\\n", "de ref \n", "1210014 Ashfield Girls' High School \n", "1210015 Ashfield Boys' High School \n", "1210021 Belfast Model School For Girls \n", "1210022 Belfast Boys' Model School \n", "1230053 St Louise's Comprehensive College \n", "1230104 Mercy College Belfast \n", "1230130 St Rose’s Dominican College \n", "1230146 Christian Brothers School, Belfast \n", "1230155 St Genevieve's High School \n", "1230182 De La Salle College \n", "1230262 Corpus Christi College \n", "1230275 St Joseph's College, Belfast \n", "1230321 Blessed Trinity College \n", "1240291 Colaiste Feirste \n", "1260269 Hazelwood College \n", "1260294 Malone Integrated College \n", "1410079 Grosvenor Grammar School \n", "1410270 Wellington College \n", "1410315 Bloomfield Collegiate \n", "1420020 Campbell College \n", "1420021 St Mary's Christian Brothers' Grammar, Belfast \n", "1420022 Methodist College \n", "1420027 The Royal Belfast Academical Institution \n", "1420028 Belfast Royal Academy \n", "1420029 St Dominic's High School, Belfast \n", "1420030 St Malachy's College, Belfast \n", "1420082 Dominican College, Belfast \n", "1420089 Strathearn School, Belfast \n", "1420095 Rathmore Grammar School \n", "1420264 Victoria College \n", "... ... \n", "5230218 St Catherine's College \n", "5230278 Holy Trinity College \n", "5230293 St Patrick's College, Dungannon \n", "5230321 St John The Baptist College \n", "5250216 Brownlow Int College \n", "5260285 New-Bridge Integrated College \n", "5260286 Integrated College Dungannon \n", "5410013 Banbridge Academy \n", "5410057 Lurgan College \n", "5410067 Portadown College \n", "5420045 St Louis Grammar School, Kilkeel \n", "5420059 Abbey Christian Brothers Grammar School \n", "5420060 Our Lady's Grammar School \n", "5420062 St Colman's College, Newry \n", "5420073 St Joseph's Convent Grammar School, Donaghmore \n", "5420076 Sacred Heart Grammar School, Newry \n", "5420260 The Royal School, Dungannon \n", "5420263 The Royal School, Armagh \n", "5420268 St Patrick's Grammar School, Armagh \n", "5420304 St Patrick's Academy, Dungannon \n", "5420314 St Ronan’s College \n", "NaN NaN \n", "NaN NaN \n", "NaN NaN \n", "NaN NaN \n", "Source: NI school census NaN \n", "NaN NaN \n", "Notes: NaN \n", "1. Year groups refer to the level of study of p... NaN \n", "2. Pupils aged 16+ that are not studying level ... NaN \n", "\n", " year of enrolment year 8 \\\n", "de ref \n", "1210014 124 \n", "1210015 126 \n", "1210021 167 \n", "1210022 174 \n", "1230053 236 \n", "1230104 76 \n", "1230130 16 \n", "1230146 107 \n", "1230155 164 \n", "1230182 109 \n", "1230262 24 \n", "1230275 123 \n", "1230321 204 \n", "1240291 102 \n", "1260269 170 \n", "1260294 69 \n", "1410079 160 \n", "1410270 112 \n", "1410315 101 \n", "1420020 134 \n", "1420021 178 \n", "1420022 241 \n", "1420027 152 \n", "1420028 207 \n", "1420029 141 \n", "1420030 159 \n", "1420082 152 \n", "1420089 111 \n", "1420095 184 \n", "1420264 132 \n", "... ... \n", "5230218 173 \n", "5230278 159 \n", "5230293 106 \n", "5230321 77 \n", "5250216 62 \n", "5260285 109 \n", "5260286 119 \n", "5410013 185 \n", "5410057 0 \n", "5410067 0 \n", "5420045 82 \n", "5420059 128 \n", "5420060 126 \n", "5420062 127 \n", "5420073 99 \n", "5420076 123 \n", "5420260 93 \n", "5420263 103 \n", "5420268 126 \n", "5420304 197 \n", "5420314 285 \n", "NaN NaN \n", "NaN NaN \n", "NaN NaN \n", "NaN NaN \n", "Source: NI school census NaN \n", "NaN NaN \n", "Notes: NaN \n", "1. Year groups refer to the level of study of p... NaN \n", "2. Pupils aged 16+ that are not studying level ... NaN \n", "\n", " year 9 year 10 year 11 \\\n", "de ref \n", "1210014 114 119 111 \n", "1210015 121 117 121 \n", "1210021 160 162 139 \n", "1210022 179 165 154 \n", "1230053 194 189 206 \n", "1230104 66 71 76 \n", "1230130 25 32 37 \n", "1230146 70 95 47 \n", "1230155 161 152 152 \n", "1230182 165 164 161 \n", "1230262 23 45 40 \n", "1230275 112 125 111 \n", "1230321 204 216 178 \n", "1240291 119 102 112 \n", "1260269 171 153 147 \n", "1260294 69 88 63 \n", "1410079 158 162 163 \n", "1410270 119 114 117 \n", "1410315 110 101 110 \n", "1420020 143 147 148 \n", "1420021 185 182 174 \n", "1420022 247 256 255 \n", "1420027 160 160 164 \n", "1420028 211 209 216 \n", "1420029 147 145 144 \n", "1420030 161 165 171 \n", "1420082 148 151 153 \n", "1420089 116 121 110 \n", "1420095 186 186 186 \n", "1420264 138 141 136 \n", "... ... ... ... \n", "5230218 173 159 157 \n", "5230278 163 171 169 \n", "5230293 109 98 92 \n", "5230321 50 37 5 \n", "5250216 62 43 52 \n", "5260285 107 101 106 \n", "5260286 99 97 94 \n", "5410013 187 193 196 \n", "5410057 0 0 122 \n", "5410067 0 0 205 \n", "5420045 83 84 81 \n", "5420059 130 129 132 \n", "5420060 124 124 126 \n", "5420062 126 131 130 \n", "5420073 102 105 92 \n", "5420076 123 120 120 \n", "5420260 96 107 93 \n", "5420263 103 99 108 \n", "5420268 164 132 155 \n", "5420304 198 198 189 \n", "5420314 243 207 182 \n", "NaN NaN NaN NaN \n", "NaN NaN NaN NaN \n", "NaN NaN NaN NaN \n", "NaN NaN NaN NaN \n", "Source: NI school census NaN NaN NaN \n", "NaN NaN NaN NaN \n", "Notes: NaN NaN NaN \n", "1. Year groups refer to the level of study of p... NaN NaN NaN \n", "2. Pupils aged 16+ that are not studying level ... NaN NaN NaN \n", "\n", " year 12 year 13 year 14 \\\n", "de ref \n", "1210014 113 60 50 \n", "1210015 111 84 60 \n", "1210021 121 127 70 \n", "1210022 160 89 76 \n", "1230053 264 160 186 \n", "1230104 73 71 17 \n", "1230130 37 72 24 \n", "1230146 40 87 79 \n", "1230155 165 138 90 \n", "1230182 173 119 67 \n", "1230262 38 37 26 \n", "1230275 104 47 36 \n", "1230321 191 189 89 \n", "1240291 97 71 48 \n", "1260269 144 94 75 \n", "1260294 85 74 37 \n", "1410079 154 150 133 \n", "1410270 122 85 73 \n", "1410315 107 93 78 \n", "1420020 147 96 107 \n", "1420021 165 157 124 \n", "1420022 253 266 258 \n", "1420027 146 114 116 \n", "1420028 209 221 188 \n", "1420029 156 149 130 \n", "1420030 166 151 121 \n", "1420082 147 152 98 \n", "1420089 111 103 106 \n", "1420095 184 183 161 \n", "1420264 127 120 103 \n", "... ... ... ... \n", "5230218 189 125 128 \n", "5230278 160 112 87 \n", "5230293 101 49 35 \n", "5230321 1 0 0 \n", "5250216 66 0 0 \n", "5260285 104 52 36 \n", "5260286 93 41 49 \n", "5410013 196 184 160 \n", "5410057 116 115 102 \n", "5410067 207 171 161 \n", "5420045 84 81 69 \n", "5420059 136 115 115 \n", "5420060 125 117 111 \n", "5420062 125 118 128 \n", "5420073 102 106 80 \n", "5420076 119 122 116 \n", "5420260 105 74 70 \n", "5420263 106 103 113 \n", "5420268 156 126 108 \n", "5420304 200 176 182 \n", "5420314 249 157 146 \n", "NaN NaN NaN NaN \n", "NaN NaN NaN NaN \n", "NaN NaN NaN NaN \n", "NaN NaN NaN NaN \n", "Source: NI school census NaN NaN NaN \n", "NaN NaN NaN NaN \n", "Notes: NaN NaN NaN \n", "1. Year groups refer to the level of study of p... NaN NaN NaN \n", "2. Pupils aged 16+ that are not studying level ... NaN NaN NaN \n", "\n", " total pupils \n", "de ref \n", "1210014 691 \n", "1210015 740 \n", "1210021 946 \n", "1210022 997 \n", "1230053 1435 \n", "1230104 450 \n", "1230130 243 \n", "1230146 525 \n", "1230155 1022 \n", "1230182 958 \n", "1230262 233 \n", "1230275 658 \n", "1230321 1271 \n", "1240291 651 \n", "1260269 954 \n", "1260294 485 \n", "1410079 1080 \n", "1410270 742 \n", "1410315 700 \n", "1420020 922 \n", "1420021 1165 \n", "1420022 1776 \n", "1420027 1012 \n", "1420028 1461 \n", "1420029 1012 \n", "1420030 1094 \n", "1420082 1001 \n", "1420089 778 \n", "1420095 1270 \n", "1420264 897 \n", "... ... \n", "5230218 1104 \n", "5230278 1021 \n", "5230293 590 \n", "5230321 170 \n", "5250216 285 \n", "5260285 615 \n", "5260286 592 \n", "5410013 1301 \n", "5410057 455 \n", "5410067 744 \n", "5420045 564 \n", "5420059 885 \n", "5420060 853 \n", "5420062 885 \n", "5420073 686 \n", "5420076 843 \n", "5420260 638 \n", "5420263 735 \n", "5420268 967 \n", "5420304 1340 \n", "5420314 1469 \n", "NaN NaN \n", "NaN NaN \n", "NaN NaN \n", "NaN NaN \n", "Source: NI school census NaN \n", "NaN NaN \n", "Notes: NaN \n", "1. Year groups refer to the level of study of p... NaN \n", "2. Pupils aged 16+ that are not studying level ... NaN \n", "\n", "[208 rows x 9 columns]" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.set_index('de ref')" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:42.352573Z", "start_time": "2018-06-07T10:38:42.315910Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
de refschoolnameyear 8year 9year 10year 11year 12year 13year 14total pupils
1945420260The Royal School, Dungannon9396107931057470638
1955420263The Royal School, Armagh10310399108106103113735
1965420268St Patrick's Grammar School, Armagh126164132155156126108967
1975420304St Patrick's Academy, Dungannon1971981981892001761821340
1985420314St Ronan’s College2852432071822491571461469
\n", "
" ], "text/plain": [ " de ref schoolname year 8 year 9 year 10 \\\n", "194 5420260 The Royal School, Dungannon 93 96 107 \n", "195 5420263 The Royal School, Armagh 103 103 99 \n", "196 5420268 St Patrick's Grammar School, Armagh 126 164 132 \n", "197 5420304 St Patrick's Academy, Dungannon 197 198 198 \n", "198 5420314 St Ronan’s College 285 243 207 \n", "\n", " year 11 year 12 year 13 year 14 total pupils \n", "194 93 105 74 70 638 \n", "195 108 106 103 113 735 \n", "196 155 156 126 108 967 \n", "197 189 200 176 182 1340 \n", "198 182 249 157 146 1469 " ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def parse_enrolments_table(xls):\n", " join_n_strip_n_lower = lambda l: ' '.join(l).strip().lower()\n", " strip_n_lower = lambda s: s.strip().lower()\n", " \n", " if 'enrolments' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'enrolments', header=None, skip_footer=5)\n", " h_range = 2 if isinstance(df.ix[3,0], int) else 3\n", " try:\n", " df.columns=df.ix[3].fillna('').apply(strip_n_lower).values\n", " df = df.drop(df.index[0:h_range+1]).reset_index(drop=True)\n", " df.dropna(how='all', inplace=True, axis=0)\n", " \n", " except TypeError as e:\n", " print(e)\n", " else:\n", " df=None\n", " return df\n", "parse_enrolments_table(xls).tail()" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:42.926747Z", "start_time": "2018-06-07T10:38:42.889118Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
year 8year 9year 10year 11year 12year 13year 14total pupils
de ref
12100141241141191111136050691
12100151261211171211118460740
121002116716016213912112770946
12100221741791651541608976997
12300532361941892062641601861435
123010476667176737117450
123013016253237377224243
1230146107709547408779525
1230155164161152152165138901022
123018210916516416117311967958
123026224234540383726233
12302751231121251111044736658
1230321204204216178191189891271
1240291102119102112977148651
12602691701711531471449475954
126029469698863857437485
14100791601581621631541501331080
14102701121191141171228573742
14103151011101011101079378700
142002013414314714814796107922
14200211781851821741651571241165
14200222412472562552532662581776
14200271521601601641461141161012
14200282072112092162092211881461
14200291411471451441561491301012
14200301591611651711661511211094
1420082152148151153147152981001
1420089111116121110111103106778
14200951841861861861841831611270
1420264132138141136127120103897
...........................
523007610574775648918387
5230108981029993874552576
52301351431231391381426169815
52301521281311191141347396795
52301572442382862542481531371560
5230167114117105931084038615
52301871611611501701721181001032
5230192829079595200362
523021318219318722119696671142
52302181731731591571891251281104
5230278159163171169160112871021
523029310610998921014935590
52303217750375100170
5250216626243526600285
52602851091071011061045236615
5260286119999794934149592
54100131851871931961961841601301
5410057000122116115102455
5410067000205207171161744
542004582838481848169564
5420059128130129132136115115885
5420060126124124126125117111853
5420062127126131130125118128885
5420073991021059210210680686
5420076123123120120119122116843
54202609396107931057470638
542026310310399108106103113735
5420268126164132155156126108967
54203041971981981892001761821340
54203142852432071822491571461469
\n", "

199 rows × 8 columns

\n", "
" ], "text/plain": [ " year 8 year 9 year 10 year 11 year 12 year 13 year 14 total pupils\n", "de ref \n", "1210014 124 114 119 111 113 60 50 691\n", "1210015 126 121 117 121 111 84 60 740\n", "1210021 167 160 162 139 121 127 70 946\n", "1210022 174 179 165 154 160 89 76 997\n", "1230053 236 194 189 206 264 160 186 1435\n", "1230104 76 66 71 76 73 71 17 450\n", "1230130 16 25 32 37 37 72 24 243\n", "1230146 107 70 95 47 40 87 79 525\n", "1230155 164 161 152 152 165 138 90 1022\n", "1230182 109 165 164 161 173 119 67 958\n", "1230262 24 23 45 40 38 37 26 233\n", "1230275 123 112 125 111 104 47 36 658\n", "1230321 204 204 216 178 191 189 89 1271\n", "1240291 102 119 102 112 97 71 48 651\n", "1260269 170 171 153 147 144 94 75 954\n", "1260294 69 69 88 63 85 74 37 485\n", "1410079 160 158 162 163 154 150 133 1080\n", "1410270 112 119 114 117 122 85 73 742\n", "1410315 101 110 101 110 107 93 78 700\n", "1420020 134 143 147 148 147 96 107 922\n", "1420021 178 185 182 174 165 157 124 1165\n", "1420022 241 247 256 255 253 266 258 1776\n", "1420027 152 160 160 164 146 114 116 1012\n", "1420028 207 211 209 216 209 221 188 1461\n", "1420029 141 147 145 144 156 149 130 1012\n", "1420030 159 161 165 171 166 151 121 1094\n", "1420082 152 148 151 153 147 152 98 1001\n", "1420089 111 116 121 110 111 103 106 778\n", "1420095 184 186 186 186 184 183 161 1270\n", "1420264 132 138 141 136 127 120 103 897\n", "... ... ... ... ... ... ... ... ...\n", "5230076 105 74 77 56 48 9 18 387\n", "5230108 98 102 99 93 87 45 52 576\n", "5230135 143 123 139 138 142 61 69 815\n", "5230152 128 131 119 114 134 73 96 795\n", "5230157 244 238 286 254 248 153 137 1560\n", "5230167 114 117 105 93 108 40 38 615\n", "5230187 161 161 150 170 172 118 100 1032\n", "5230192 82 90 79 59 52 0 0 362\n", "5230213 182 193 187 221 196 96 67 1142\n", "5230218 173 173 159 157 189 125 128 1104\n", "5230278 159 163 171 169 160 112 87 1021\n", "5230293 106 109 98 92 101 49 35 590\n", "5230321 77 50 37 5 1 0 0 170\n", "5250216 62 62 43 52 66 0 0 285\n", "5260285 109 107 101 106 104 52 36 615\n", "5260286 119 99 97 94 93 41 49 592\n", "5410013 185 187 193 196 196 184 160 1301\n", "5410057 0 0 0 122 116 115 102 455\n", "5410067 0 0 0 205 207 171 161 744\n", "5420045 82 83 84 81 84 81 69 564\n", "5420059 128 130 129 132 136 115 115 885\n", "5420060 126 124 124 126 125 117 111 853\n", "5420062 127 126 131 130 125 118 128 885\n", "5420073 99 102 105 92 102 106 80 686\n", "5420076 123 123 120 120 119 122 116 843\n", "5420260 93 96 107 93 105 74 70 638\n", "5420263 103 103 99 108 106 103 113 735\n", "5420268 126 164 132 155 156 126 108 967\n", "5420304 197 198 198 189 200 176 182 1340\n", "5420314 285 243 207 182 249 157 146 1469\n", "\n", "[199 rows x 8 columns]" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = parse_enrolments_table(xls).set_index('de ref').drop('schoolname', axis=1)\n", "df" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:43.497926Z", "start_time": "2018-06-07T10:38:43.467190Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
year 8year 9year 10year 11year 12year 13year 14
de ref
12100141241141191111136050
12100151261211171211118460
121002116716016213912112770
12100221741791651541608976
1230053236194189206264160186
123010476667176737117
123013016253237377224
1230146107709547408779
123015516416115215216513890
123018210916516416117311967
123026224234540383726
12302751231121251111044736
123032120420421617819118989
1240291102119102112977148
12602691701711531471449475
126029469698863857437
1410079160158162163154150133
14102701121191141171228573
14103151011101011101079378
142002013414314714814796107
1420021178185182174165157124
1420022241247256255253266258
1420027152160160164146114116
1420028207211209216209221188
1420029141147145144156149130
1420030159161165171166151121
142008215214815115314715298
1420089111116121110111103106
1420095184186186186184183161
1420264132138141136127120103
........................
523007610574775648918
5230108981029993874552
52301351431231391381426169
52301521281311191141347396
5230157244238286254248153137
5230167114117105931084038
5230187161161150170172118100
5230192829079595200
52302131821931872211969667
5230218173173159157189125128
523027815916317116916011287
523029310610998921014935
52303217750375100
5250216626243526600
52602851091071011061045236
5260286119999794934149
5410013185187193196196184160
5410057000122116115102
5410067000205207171161
542004582838481848169
5420059128130129132136115115
5420060126124124126125117111
5420062127126131130125118128
5420073991021059210210680
5420076123123120120119122116
54202609396107931057470
542026310310399108106103113
5420268126164132155156126108
5420304197198198189200176182
5420314285243207182249157146
\n", "

199 rows × 7 columns

\n", "
" ], "text/plain": [ " year 8 year 9 year 10 year 11 year 12 year 13 year 14\n", "de ref \n", "1210014 124 114 119 111 113 60 50\n", "1210015 126 121 117 121 111 84 60\n", "1210021 167 160 162 139 121 127 70\n", "1210022 174 179 165 154 160 89 76\n", "1230053 236 194 189 206 264 160 186\n", "1230104 76 66 71 76 73 71 17\n", "1230130 16 25 32 37 37 72 24\n", "1230146 107 70 95 47 40 87 79\n", "1230155 164 161 152 152 165 138 90\n", "1230182 109 165 164 161 173 119 67\n", "1230262 24 23 45 40 38 37 26\n", "1230275 123 112 125 111 104 47 36\n", "1230321 204 204 216 178 191 189 89\n", "1240291 102 119 102 112 97 71 48\n", "1260269 170 171 153 147 144 94 75\n", "1260294 69 69 88 63 85 74 37\n", "1410079 160 158 162 163 154 150 133\n", "1410270 112 119 114 117 122 85 73\n", "1410315 101 110 101 110 107 93 78\n", "1420020 134 143 147 148 147 96 107\n", "1420021 178 185 182 174 165 157 124\n", "1420022 241 247 256 255 253 266 258\n", "1420027 152 160 160 164 146 114 116\n", "1420028 207 211 209 216 209 221 188\n", "1420029 141 147 145 144 156 149 130\n", "1420030 159 161 165 171 166 151 121\n", "1420082 152 148 151 153 147 152 98\n", "1420089 111 116 121 110 111 103 106\n", "1420095 184 186 186 186 184 183 161\n", "1420264 132 138 141 136 127 120 103\n", "... ... ... ... ... ... ... ...\n", "5230076 105 74 77 56 48 9 18\n", "5230108 98 102 99 93 87 45 52\n", "5230135 143 123 139 138 142 61 69\n", "5230152 128 131 119 114 134 73 96\n", "5230157 244 238 286 254 248 153 137\n", "5230167 114 117 105 93 108 40 38\n", "5230187 161 161 150 170 172 118 100\n", "5230192 82 90 79 59 52 0 0\n", "5230213 182 193 187 221 196 96 67\n", "5230218 173 173 159 157 189 125 128\n", "5230278 159 163 171 169 160 112 87\n", "5230293 106 109 98 92 101 49 35\n", "5230321 77 50 37 5 1 0 0\n", "5250216 62 62 43 52 66 0 0\n", "5260285 109 107 101 106 104 52 36\n", "5260286 119 99 97 94 93 41 49\n", "5410013 185 187 193 196 196 184 160\n", "5410057 0 0 0 122 116 115 102\n", "5410067 0 0 0 205 207 171 161\n", "5420045 82 83 84 81 84 81 69\n", "5420059 128 130 129 132 136 115 115\n", "5420060 126 124 124 126 125 117 111\n", "5420062 127 126 131 130 125 118 128\n", "5420073 99 102 105 92 102 106 80\n", "5420076 123 123 120 120 119 122 116\n", "5420260 93 96 107 93 105 74 70\n", "5420263 103 103 99 108 106 103 113\n", "5420268 126 164 132 155 156 126 108\n", "5420304 197 198 198 189 200 176 182\n", "5420314 285 243 207 182 249 157 146\n", "\n", "[199 rows x 7 columns]" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[[c for c in df if c.startswith('year')]]" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:44.183563Z", "start_time": "2018-06-07T10:38:44.034416Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df[[c for c in df if c.startswith('year')]].sum().plot.bar()" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:44.903497Z", "start_time": "2018-06-07T10:38:44.896726Z" } }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_totals = df[[c for c in df if c.startswith('year')]].sum(axis=1)\n", "their_totals = df['total pupils']\n", "any(my_totals!=their_totals)" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:46.271140Z", "start_time": "2018-06-07T10:38:45.493049Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Got enrolement data for 2009\n", "Got enrolement data for 2010\n", "Got enrolement data for 2011\n", "Got enrolement data for 2012\n", "Got enrolement data for 2013\n", "Got enrolement data for 2014\n", "Got enrolement data for 2015\n", "Got enrolement data for 2016\n", "Got enrolement data for 2017\n" ] } ], "source": [ "dfs = {}\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " df = parse_enrolments_table(xls)\n", " if df is not None:\n", " print(f'Got enrolement data for {year}')\n", " dfs[year]=df" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:46.791083Z", "start_time": "2018-06-07T10:38:46.782093Z" } }, "outputs": [ { "data": { "text/plain": [ "{1210014,\n", " 1210015,\n", " 1210021,\n", " 1210022,\n", " 1210266,\n", " 1230026,\n", " 1230053,\n", " 1230089,\n", " 1230104,\n", " 1230130,\n", " 1230146,\n", " '1230155',\n", " 1230155,\n", " '1230155 ',\n", " 1230173,\n", " '1230173',\n", " '1230173 ',\n", " 1230182,\n", " '1230182',\n", " '1230182 ',\n", " 1230262,\n", " '1230275',\n", " 1230275,\n", " '1230275 ',\n", " 1230321,\n", " 1240291,\n", " 1260269,\n", " 1260294,\n", " 1410079,\n", " 1410270,\n", " 1410315,\n", " 1420018,\n", " 1420020,\n", " 1420021,\n", " 1420022,\n", " 1420027,\n", " 1420028,\n", " 1420029,\n", " 1420030,\n", " 1420082,\n", " 1420089,\n", " 1420095,\n", " 1420264,\n", " 1420265,\n", " 1420277,\n", " 2210065,\n", " 2210080,\n", " 2210125,\n", " 2210164,\n", " 2210302,\n", " 2210305,\n", " 2210306,\n", " 2210312,\n", " 2230077,\n", " 2230081,\n", " 2230085,\n", " 2230099,\n", " 2230100,\n", " 2230109,\n", " 2230111,\n", " 2230122,\n", " 2230131,\n", " 2230138,\n", " 2230144,\n", " 2230148,\n", " 2230166,\n", " 2230180,\n", " 2230181,\n", " 2230188,\n", " 2230190,\n", " 2230225,\n", " 2230254,\n", " 2230298,\n", " 2230301,\n", " 2230322,\n", " 2240319,\n", " 2260276,\n", " 2260280,\n", " 2260283,\n", " 2410040,\n", " 2410048,\n", " 2410066,\n", " 2410096,\n", " 2410311,\n", " 2420041,\n", " 2420042,\n", " 2420043,\n", " 2420052,\n", " 2420054,\n", " 2420064,\n", " 2420065,\n", " 2420229,\n", " 2420287,\n", " 2420320,\n", " 3210013,\n", " 3210035,\n", " 3210038,\n", " 3210091,\n", " 3210124,\n", " 3210133,\n", " 3210134,\n", " 3210172,\n", " 3210200,\n", " 3210202,\n", " 3210208,\n", " 3210222,\n", " 3210232,\n", " 3210233,\n", " 3210279,\n", " 3210300,\n", " 3210313,\n", " 3230019,\n", " 3230066,\n", " 3230075,\n", " 3230084,\n", " 3230110,\n", " 3230132,\n", " 3230142,\n", " 3230151,\n", " 3230168,\n", " 3230203,\n", " 3230227,\n", " 3230234,\n", " 3230308,\n", " 3230310,\n", " 3250149,\n", " 3250207,\n", " 3260289,\n", " 3260290,\n", " 3260299,\n", " 3260303,\n", " 3410008,\n", " 3410033,\n", " 3410098,\n", " 3410209,\n", " 3410297,\n", " 3420010,\n", " 3420011,\n", " 3420012,\n", " 3420032,\n", " 3420034,\n", " 3420046,\n", " 3420058,\n", " 3420068,\n", " 3420077,\n", " 3420080,\n", " 3420094,\n", " 3420317,\n", " 4210012,\n", " 4210029,\n", " 4210045,\n", " 4210046,\n", " 4210051,\n", " 4210063,\n", " 4210086,\n", " 4210183,\n", " 4210194,\n", " 4210201,\n", " 4210262,\n", " 4210296,\n", " 4210316,\n", " 4230023,\n", " 4230067,\n", " 4230102,\n", " 4230107,\n", " 4230161,\n", " 4230165,\n", " 4230211,\n", " 4230223,\n", " 4230224,\n", " 4250024,\n", " 4250072,\n", " 4260255,\n", " 4260281,\n", " 4260295,\n", " 4260309,\n", " 4410063,\n", " 4410085,\n", " 4410097,\n", " 4420015,\n", " 4420044,\n", " 4420050,\n", " 4420051,\n", " 4420086,\n", " 4420088,\n", " 4420259,\n", " 5210016,\n", " 5210025,\n", " 5210043,\n", " 5210047,\n", " 5210054,\n", " 5210064,\n", " 5210083,\n", " 5210097,\n", " 5210121,\n", " 5210127,\n", " 5210143,\n", " 5210153,\n", " 5210186,\n", " 5210230,\n", " 5210231,\n", " 5210271,\n", " 5210282,\n", " 5230056,\n", " 5230059,\n", " 5230070,\n", " 5230076,\n", " 5230088,\n", " 5230108,\n", " 5230135,\n", " 5230152,\n", " 5230157,\n", " 5230160,\n", " 5230167,\n", " 5230187,\n", " 5230192,\n", " 5230213,\n", " 5230218,\n", " 5230256,\n", " 5230278,\n", " 5230293,\n", " 5230321,\n", " 5250216,\n", " 5260285,\n", " 5260286,\n", " 5410013,\n", " 5410057,\n", " 5410067,\n", " 5420045,\n", " 5420056,\n", " 5420059,\n", " 5420060,\n", " 5420062,\n", " 5420073,\n", " 5420076,\n", " 5420260,\n", " 5420263,\n", " 5420268,\n", " 5420304,\n", " 5420314}" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_de_refs = set([_ for d in dfs.values() for _ in d['de ref'].values])\n", "all_de_refs" ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:47.755895Z", "start_time": "2018-06-07T10:38:47.748919Z" } }, "outputs": [ { "data": { "text/plain": [ "{1210014,\n", " 1210015,\n", " 1210021,\n", " 1210022,\n", " 1210266,\n", " 1230026,\n", " 1230053,\n", " 1230089,\n", " 1230104,\n", " 1230130,\n", " 1230146,\n", " 1230155,\n", " 1230173,\n", " 1230182,\n", " 1230262,\n", " 1230275,\n", " 1230321,\n", " 1240291,\n", " 1260269,\n", " 1260294,\n", " 1410079,\n", " 1410270,\n", " 1410315,\n", " 1420018,\n", " 1420020,\n", " 1420021,\n", " 1420022,\n", " 1420027,\n", " 1420028,\n", " 1420029,\n", " 1420030,\n", " 1420082,\n", " 1420089,\n", " 1420095,\n", " 1420264,\n", " 1420265,\n", " 1420277,\n", " 2210065,\n", " 2210080,\n", " 2210125,\n", " 2210164,\n", " 2210302,\n", " 2210305,\n", " 2210306,\n", " 2210312,\n", " 2230077,\n", " 2230081,\n", " 2230085,\n", " 2230099,\n", " 2230100,\n", " 2230109,\n", " 2230111,\n", " 2230122,\n", " 2230131,\n", " 2230138,\n", " 2230144,\n", " 2230148,\n", " 2230166,\n", " 2230180,\n", " 2230181,\n", " 2230188,\n", " 2230190,\n", " 2230225,\n", " 2230254,\n", " 2230298,\n", " 2230301,\n", " 2230322,\n", " 2240319,\n", " 2260276,\n", " 2260280,\n", " 2260283,\n", " 2410040,\n", " 2410048,\n", " 2410066,\n", " 2410096,\n", " 2410311,\n", " 2420041,\n", " 2420042,\n", " 2420043,\n", " 2420052,\n", " 2420054,\n", " 2420064,\n", " 2420065,\n", " 2420229,\n", " 2420287,\n", " 2420320,\n", " 3210013,\n", " 3210035,\n", " 3210038,\n", " 3210091,\n", " 3210124,\n", " 3210133,\n", " 3210134,\n", " 3210172,\n", " 3210200,\n", " 3210202,\n", " 3210208,\n", " 3210222,\n", " 3210232,\n", " 3210233,\n", " 3210279,\n", " 3210300,\n", " 3210313,\n", " 3230019,\n", " 3230066,\n", " 3230075,\n", " 3230084,\n", " 3230110,\n", " 3230132,\n", " 3230142,\n", " 3230151,\n", " 3230168,\n", " 3230203,\n", " 3230227,\n", " 3230234,\n", " 3230308,\n", " 3230310,\n", " 3250149,\n", " 3250207,\n", " 3260289,\n", " 3260290,\n", " 3260299,\n", " 3260303,\n", " 3410008,\n", " 3410033,\n", " 3410098,\n", " 3410209,\n", " 3410297,\n", " 3420010,\n", " 3420011,\n", " 3420012,\n", " 3420032,\n", " 3420034,\n", " 3420046,\n", " 3420058,\n", " 3420068,\n", " 3420077,\n", " 3420080,\n", " 3420094,\n", " 3420317,\n", " 4210012,\n", " 4210029,\n", " 4210045,\n", " 4210046,\n", " 4210051,\n", " 4210063,\n", " 4210086,\n", " 4210183,\n", " 4210194,\n", " 4210201,\n", " 4210262,\n", " 4210296,\n", " 4210316,\n", " 4230023,\n", " 4230067,\n", " 4230102,\n", " 4230107,\n", " 4230161,\n", " 4230165,\n", " 4230211,\n", " 4230223,\n", " 4230224,\n", " 4250024,\n", " 4250072,\n", " 4260255,\n", " 4260281,\n", " 4260295,\n", " 4260309,\n", " 4410063,\n", " 4410085,\n", " 4410097,\n", " 4420015,\n", " 4420044,\n", " 4420050,\n", " 4420051,\n", " 4420086,\n", " 4420088,\n", " 4420259,\n", " 5210016,\n", " 5210025,\n", " 5210043,\n", " 5210047,\n", " 5210054,\n", " 5210064,\n", " 5210083,\n", " 5210097,\n", " 5210121,\n", " 5210127,\n", " 5210143,\n", " 5210153,\n", " 5210186,\n", " 5210230,\n", " 5210231,\n", " 5210271,\n", " 5210282,\n", " 5230056,\n", " 5230059,\n", " 5230070,\n", " 5230076,\n", " 5230088,\n", " 5230108,\n", " 5230135,\n", " 5230152,\n", " 5230157,\n", " 5230160,\n", " 5230167,\n", " 5230187,\n", " 5230192,\n", " 5230213,\n", " 5230218,\n", " 5230256,\n", " 5230278,\n", " 5230293,\n", " 5230321,\n", " 5250216,\n", " 5260285,\n", " 5260286,\n", " 5410013,\n", " 5410057,\n", " 5410067,\n", " 5420045,\n", " 5420056,\n", " 5420059,\n", " 5420060,\n", " 5420062,\n", " 5420073,\n", " 5420076,\n", " 5420260,\n", " 5420263,\n", " 5420268,\n", " 5420304,\n", " 5420314}" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_de_refs = set([int(_) for d in dfs.values() for _ in d['de ref'].values])\n", "all_de_refs" ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:48.793652Z", "start_time": "2018-06-07T10:38:48.493937Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df = pd.DataFrame.from_dict({\n", " year: [dr in df['de ref'].values for dr in all_de_refs] \n", " for year, df in dfs.items()\n", "}, orient='index')\n", "df.columns=all_de_refs\n", "sns.heatmap(df.T)" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:49.433620Z", "start_time": "2018-06-07T10:38:49.429249Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2009:['de ref' 'schoolname' 'year 8' 'year 9' 'year 10' 'year 11' 'year 12'\n", " 'year 13' 'year 14' 'year 15' 'total pupils']\n", "2010:['de ref' 'schoolname' 'year 8' 'year 9' 'year 10' 'year 11' 'year 12'\n", " 'year 13' 'year 14' 'year 15' 'total pupils']\n", "2011:['de ref' 'schoolname' 'year 8' 'year 9' 'year 10' 'year 11' 'year 12'\n", " 'year 13' 'year 14' 'year 15' 'total pupils']\n", "2012:['de ref' 'schoolname' 'year 8' 'year 9' 'year 10' 'year 11' 'year 12'\n", " 'year 13' 'year 14' 'year 15' 'total pupils']\n", "2013:['de ref' 'schoolname' 'year 8' 'year 9' 'year 10' 'year 11' 'year 12'\n", " 'year 13' 'year 14' 'year 15' 'total pupils']\n", "2014:['de ref' 'schoolname' 'year 8' 'year 9' 'year 10' 'year 11' 'year 12'\n", " 'year 13' 'year 14' 'year 15' 'total pupils']\n", "2015:['de ref' 'schoolname' 'year 8' 'year 9' 'year 10' 'year 11' 'year 12'\n", " 'year 13' 'year 14' 'year 15' 'total pupils']\n", "2016:['de ref' 'schoolname' 'year 8' 'year 9' 'year 10' 'year 11' 'year 12'\n", " 'year 13' 'year 14' 'total pupils']\n", "2017:['de ref' 'schoolname' 'year 8' 'year 9' 'year 10' 'year 11' 'year 12'\n", " 'year 13' 'year 14' 'total pupils']\n" ] } ], "source": [ "for year, df in dfs.items():\n", " print(f\"{year}:{df.keys().values}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Grand pivot\n" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:51.359399Z", "start_time": "2018-06-07T10:38:50.653976Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Got enrolement data for 2009\n", "Got enrolement data for 2010\n", "Got enrolement data for 2011\n", "Got enrolement data for 2012\n", "Got enrolement data for 2013\n", "Got enrolement data for 2014\n", "Got enrolement data for 2015\n", "Got enrolement data for 2016\n", "Got enrolement data for 2017\n" ] } ], "source": [ "def parse_enrolments_table(xls):\n", " join_n_strip_n_lower = lambda l: ' '.join(l).strip().lower()\n", " strip_n_lower = lambda s: s.strip().lower()\n", " unyearify = lambda s: int(s.replace('year ',''))\n", " \n", " if 'enrolments' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'enrolments', header=None, skip_footer=5)\n", " h_range = 2 if isinstance(df.ix[3,0], int) else 3\n", " try:\n", " df.columns=df.ix[3].fillna('').apply(strip_n_lower).values\n", " df = df.drop(df.index[0:h_range+1]).reset_index(drop=True)\n", " df.dropna(how='all', inplace=True, axis=0)\n", " df['de ref'] = df['de ref'].astype(int)\n", " df.drop('schoolname',axis=1, inplace=True)\n", " df.drop('total pupils',axis=1, inplace=True)\n", " df.set_index('de ref', inplace=True)\n", " df.rename(columns=unyearify, inplace=True)\n", " df=df.astype(float)\n", " except TypeError as e:\n", " print(e)\n", " else:\n", " df=None\n", " return df\n", "\n", "dfs = {}\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " df = parse_enrolments_table(xls)\n", " if df is not None:\n", " print(f'Got enrolement data for {year}')\n", " dfs[year]=df\n" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:52.466173Z", "start_time": "2018-06-07T10:38:52.453566Z" } }, "outputs": [ { "data": { "text/plain": [ "\n", "Dimensions: 9 (items) x 232 (major_axis) x 8 (minor_axis)\n", "Items axis: 2009 to 2017\n", "Major_axis axis: 1210014 to 5420314\n", "Minor_axis axis: 8 to 15" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "panel = pd.Panel(dfs)\n", "panel" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:53.218395Z", "start_time": "2018-06-07T10:38:53.203711Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
200920102011201220132014201520162017
823116.023113.021770.021322.021418.021367.021792.022571.022817.0
923859.023403.022925.021928.021425.021481.021422.022284.022650.0
1022954.024155.023245.023101.021971.021527.021443.021864.022381.0
1123521.023277.024094.023524.023299.022092.021601.022118.022102.0
1223808.023656.022967.024027.023353.023166.021864.022091.022099.0
1314912.015652.015421.015892.016567.016208.015912.015667.015347.0
1412607.013097.013274.013482.013554.014174.013922.013818.013149.0
15100.0154.0154.0196.0201.0275.0365.00.00.0
\n", "
" ], "text/plain": [ " 2009 2010 2011 2012 2013 2014 2015 2016 \\\n", "8 23116.0 23113.0 21770.0 21322.0 21418.0 21367.0 21792.0 22571.0 \n", "9 23859.0 23403.0 22925.0 21928.0 21425.0 21481.0 21422.0 22284.0 \n", "10 22954.0 24155.0 23245.0 23101.0 21971.0 21527.0 21443.0 21864.0 \n", "11 23521.0 23277.0 24094.0 23524.0 23299.0 22092.0 21601.0 22118.0 \n", "12 23808.0 23656.0 22967.0 24027.0 23353.0 23166.0 21864.0 22091.0 \n", "13 14912.0 15652.0 15421.0 15892.0 16567.0 16208.0 15912.0 15667.0 \n", "14 12607.0 13097.0 13274.0 13482.0 13554.0 14174.0 13922.0 13818.0 \n", "15 100.0 154.0 154.0 196.0 201.0 275.0 365.0 0.0 \n", "\n", " 2017 \n", "8 22817.0 \n", "9 22650.0 \n", "10 22381.0 \n", "11 22102.0 \n", "12 22099.0 \n", "13 15347.0 \n", "14 13149.0 \n", "15 0.0 " ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "panel.sum(axis=1)\n" ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:54.215940Z", "start_time": "2018-06-07T10:38:53.918588Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.heatmap(panel.sum(axis=2))\n" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:55.336585Z", "start_time": "2018-06-07T10:38:55.189210Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "panel.sum().sum().plot()" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:38:56.389044Z", "start_time": "2018-06-07T10:38:56.386530Z" } }, "source": [ "## Now to start bringing these together!\n", "\n" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:39:03.162277Z", "start_time": "2018-06-07T10:39:02.461754Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Got enrolement data for 2009\n", "Got enrolement data for 2010\n", "Got enrolement data for 2011\n", "Got enrolement data for 2012\n", "Got enrolement data for 2013\n", "Got enrolement data for 2014\n", "Got enrolement data for 2015\n", "Got enrolement data for 2016\n", "Got enrolement data for 2017\n" ] } ], "source": [ "def parse_enrolments_table(xls):\n", " join_n_strip_n_lower = lambda l: ' '.join(l).strip().lower()\n", " strip_n_lower = lambda s: s.strip().lower()\n", " unyearify = lambda s: int(s.replace('year ',''))\n", " \n", " if 'enrolments' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'enrolments', header=None, skip_footer=5)\n", " h_range = 2 if isinstance(df.ix[3,0], int) else 3\n", " try:\n", " df.columns=df.ix[3].fillna('').apply(strip_n_lower).values\n", " df = df.drop(df.index[0:h_range+1]).reset_index(drop=True)\n", " df.dropna(how='all', inplace=True, axis=0)\n", " df['de ref'] = df['de ref'].astype(int)\n", " df.drop('schoolname',axis=1, inplace=True)\n", " df.drop('total pupils',axis=1, inplace=True)\n", " df.set_index('de ref', inplace=True)\n", " df.rename(columns=unyearify, inplace=True)\n", " df=df.astype(float)\n", " except TypeError as e:\n", " print(e)\n", " else:\n", " df=None\n", " return df\n", "\n", "dfs = {}\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " df = parse_enrolments_table(xls)\n", " if df is not None:\n", " print(f'Got enrolement data for {year}')\n", " dfs[year]=df\n", "enrolements = pd.Panel(dfs)" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:39:05.953855Z", "start_time": "2018-06-07T10:39:04.638737Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Got reference data for 2009\n", "Got reference data for 2010\n", "Got reference data for 2011\n", "Got reference data for 2012\n", "Got reference data for 2013\n", "Got reference data for 2014\n", "Got reference data for 2015\n", "Got reference data for 2016\n", "Got reference data for 2017\n" ] } ], "source": [ "def parse_reference_table(xls):\n", " cols = [\n", " 'de ref',\n", " 'school name',\n", " 'school type',\n", " 'address 1',\n", " 'postcode',\n", " 'urban_rural',\n", " 'school management type',\n", " 'district council',\n", " 'parliamentary constituency',\n", " 'town'\n", " ]\n", " \n", " categories = [\n", " 'school type',\n", " 'urban_rural',\n", " 'school management type',\n", " 'district council',\n", " 'parliamentary constituency',\n", " 'town'\n", " ]\n", "\n", " ref_key_map={\n", " 'denino':'de ref',\n", " 'urban/ rural': 'urban_rural',\n", " 'schoolname': 'school name'\n", " }\n", " join_n_strip_n_lower = lambda l: ' '.join(l).strip().lower()\n", " \n", " if 'reference data' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'reference data', header=None)\n", " h_range = 2 if isinstance(df.ix[3,0], int) else 3\n", " try:\n", " df.columns=df.ix[1:h_range].fillna('').apply(join_n_strip_n_lower, axis=0).values\n", " df.rename(columns=ref_key_map, inplace=True)\n", " df = df.drop(df.index[0:h_range+1]).reset_index(drop=True)\n", " df = df[cols]\n", " df['de ref'] = df['de ref'].astype(int)\n", " df.set_index('de ref', inplace=True)\n", " for c in df:\n", " df[c]=df[c].str.lower().str.strip()\n", " for c in categories:\n", " df[c] = df[c].astype('category')\n", " except TypeError as e:\n", " print(e)\n", " else:\n", " df=None\n", " return df\n", "\n", "dfs = {}\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " df = parse_reference_table(xls)\n", " if df is not None:\n", " print(f'Got reference data for {year}')\n", " dfs[year]=df\n", "reference = pd.Panel(dfs)" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:39:08.413228Z", "start_time": "2018-06-07T10:39:08.367923Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
200920102011201220132014201520162017
de refminor
1210014school nameashfield girls' high schoolashfield girls' high schoolashfield girls' high schoolashfield girls' high schoolashfield girls' high schoolashfield girls' high schoolashfield girls' high schoolashfield girls' high schoolashfield girls' high school
school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
address 1holywood roadholywood roadholywood roadholywood roadholywood roadholywood road397 holywood road397 holywood road397 holywood road
postcodebt4 2lybt42lybt42lybt42lybt42lybt42lybt4 2lybt42lybt42ly
urban_ruralurbanurbanurbanurbanurbanurbanurbanurbanurban
school management typecontrolledcontrolledcontrolledcontrolledcontrolledcontrolledcontrolledcontrolledcontrolled
district councilbelfastbelfastbelfastbelfastbelfastbelfastbelfastbelfastbelfast
parliamentary constituencybelfast eastbelfast eastbelfast eastbelfast eastbelfast eastbelfast eastbelfast eastbelfast eastbelfast east
townbelfastbelfastbelfastbelfastbelfastbelfastbelfastbelfastbelfast
1210015school nameashfield boys' high schoolashfield boys' high schoolashfield boys' high schoolashfield boys' high schoolashfield boys' high schoolashfield boys' high schoolashfield boys' high schoolashfield boys' high schoolashfield boys' high school
school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
address 1holywood roadholywood roadholywood roadholywood roadholywood roadholywood road395 holywood road395 holywood road395 holywood road
postcodebt4 2lybt42lybt42lybt42lybt42lybt42lybt4 2lybt42lybt42ly
urban_ruralurbanurbanurbanurbanurbanurbanurbanurbanurban
school management typecontrolledcontrolledcontrolledcontrolledcontrolledcontrolledcontrolledcontrolledcontrolled
district councilbelfastbelfastbelfastbelfastbelfastbelfastbelfastbelfastbelfast
parliamentary constituencybelfast eastbelfast eastbelfast eastbelfast eastbelfast eastbelfast eastbelfast eastbelfast eastbelfast east
townbelfastbelfastbelfastbelfastbelfastbelfastbelfastbelfastbelfast
1210021school namebelfast model school for girlsbelfast model school for girlsbelfast model school for girlsbelfast model school for girlsbelfast model school for girlsbelfast model school for girlsbelfast model school for girlsbelfast model school for girlsbelfast model school for girls
school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
address 1dunkeld gardensdunkeld gardensdunkeld gardensdunkeld gardensdunkeld gardensdunkeld gardens35 dunowen gardens35 dunowen gardens35 dunowen gardens
postcodebt14 6ntbt146ntbt146ntbt146ntbt146ntbt146ntbt14 6nqbt146nqbt146nq
urban_ruralurbanurbanurbanurbanurbanurbanurbanurbanurban
school management typecontrolledcontrolledcontrolledcontrolledcontrolledcontrolledcontrolledcontrolledcontrolled
district councilbelfastbelfastbelfastbelfastbelfastbelfastbelfastbelfastbelfast
parliamentary constituencybelfast northbelfast northbelfast northbelfast northbelfast northbelfast northbelfast northbelfast northbelfast north
townbelfastbelfastbelfastbelfastbelfastbelfastbelfastbelfastbelfast
1210022school namebelfast boys' model schoolbelfast boys' model schoolbelfast boys' model schoolbelfast boys' model schoolbelfast boys' model schoolbelfast boys' model schoolbelfast boys' model schoolbelfast boys' model schoolbelfast boys' model school
school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
address 1ballysillan roadballysillan roadballysillan roadballysillan roadballysillan roadballysillan roadballysillan roadballysillan roadballysillan road
.................................
5420260district councildungannondungannondungannondungannondungannondungannonmid ulstermid ulstermid ulster
parliamentary constituencyfermanagh and south tyronefermanagh and south tyronefermanagh and south tyronefermanagh and south tyronefermanagh and south tyronefermanagh and south tyronefermanagh and south tyronefermanagh and south tyronefermanagh and south tyrone
towndungannondungannondungannondungannondungannondungannondungannondungannondungannon
5420263school namethe royal school armaghthe royal school armaghthe royal school armaghthe royal school armaghthe royal school armaghthe royal school, armaghthe royal school, armaghthe royal school, armaghthe royal school, armagh
school typegrammargrammargrammargrammargrammargrammargrammargrammargrammar
address 1college hillcollege hillcollege hillcollege hillcollege hillcollege hillcollege hillcollege hillcollege hill
postcodebt61 9dhbt619dhbt619dhbt619dhbt619dhbt619dhbt61 9dhbt619dhbt619dh
urban_ruralurbanurbanurbanurbanurbanurbanurbanurbanurban
school management typevoluntaryvoluntaryvoluntary - other managedvoluntary - other managedvoluntary - other managedvoluntaryvoluntaryvoluntaryvoluntary
district councilarmagharmagharmagharmagharmagharmagharmagh city, banbridge and craigavonarmagh city, banbridge and craigavonarmagh city, banbridge and craigavon
parliamentary constituencynewry and armaghnewry and armaghnewry and armaghnewry and armaghnewry and armaghnewry and armaghnewry and armaghnewry and armaghnewry and armagh
townarmagharmagharmagharmagharmagharmagharmagharmagharmagh
5420268school namest patrick's grammar schoolst patrick's grammar schoolst patrick's grammar schoolst patrick's grammar schoolst patrick's grammar schoolst patrick's grammar school, armaghst patrick's grammar school, armaghst patrick's grammar school, armaghst patrick's grammar school, armagh
school typegrammargrammargrammargrammargrammargrammargrammargrammargrammar
address 1cathedral roadcathedral roadcathedral roadcathedral roadcathedral roadcathedral roadcathedral roadcathedral roadcathedral road
postcodebt61 7qzbt617qzbt617qzbt617qzbt617qzbt617qzbt61 7qzbt617qzbt617qz
urban_ruralurbanurbanurbanurbanurbanurbanurbanurbanurban
school management typevoluntaryvoluntaryvoluntary - rc managedvoluntary - rc managedvoluntary - rc managedvoluntaryvoluntaryvoluntaryvoluntary
district councilarmagharmagharmagharmagharmagharmagharmagh city, banbridge and craigavonarmagh city, banbridge and craigavonarmagh city, banbridge and craigavon
parliamentary constituencynewry and armaghnewry and armaghnewry and armaghnewry and armaghnewry and armaghnewry and armaghnewry and armaghnewry and armaghnewry and armagh
townarmagharmagharmagharmagharmagharmagharmagharmagharmagh
5420304school namest patrick's academyst patrick's academyst patrick's academyst patrick's academyst patrick's academyst patrick's academy, dungannonst patrick's academy, dungannonst patrick's academy, dungannonst patrick's academy, dungannon
school typegrammargrammargrammargrammargrammargrammargrammargrammargrammar
address 137 killymeal road37 killymeal road37 killymeal road37 killymeal road37 killymeal road37 killymeal road37 killymeal road37 killymeal road37 killymeal road
postcodebt71 6dsbt716dsbt716dsbt716dsbt716dsbt716dsbt71 6dsbt716dsbt716ds
urban_ruralurbanurbanurbanurbanurbanurbanurbanurbanurban
school management typevoluntaryvoluntaryvoluntary - rc managedvoluntary - rc managedvoluntary - rc managedvoluntaryvoluntaryvoluntaryvoluntary
district councildungannondungannondungannondungannondungannondungannonmid ulstermid ulstermid ulster
parliamentary constituencyfermanagh and south tyronefermanagh and south tyronefermanagh and south tyronefermanagh and south tyronefermanagh and south tyronefermanagh and south tyronefermanagh and south tyronefermanagh and south tyronefermanagh and south tyrone
towndungannondungannondungannondungannondungannondungannondungannondungannondungannon
\n", "

1673 rows × 9 columns

\n", "
" ], "text/plain": [ " 2009 \\\n", "de ref minor \n", "1210014 school name ashfield girls' high school \n", " school type secondary \n", " address 1 holywood road \n", " postcode bt4 2ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210015 school name ashfield boys' high school \n", " school type secondary \n", " address 1 holywood road \n", " postcode bt4 2ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210021 school name belfast model school for girls \n", " school type secondary \n", " address 1 dunkeld gardens \n", " postcode bt14 6nt \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast north \n", " town belfast \n", "1210022 school name belfast boys' model school \n", " school type secondary \n", " address 1 ballysillan road \n", "... ... \n", "5420260 district council dungannon \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "5420263 school name the royal school armagh \n", " school type grammar \n", " address 1 college hill \n", " postcode bt61 9dh \n", " urban_rural urban \n", " school management type voluntary \n", " district council armagh \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420268 school name st patrick's grammar school \n", " school type grammar \n", " address 1 cathedral road \n", " postcode bt61 7qz \n", " urban_rural urban \n", " school management type voluntary \n", " district council armagh \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420304 school name st patrick's academy \n", " school type grammar \n", " address 1 37 killymeal road \n", " postcode bt71 6ds \n", " urban_rural urban \n", " school management type voluntary \n", " district council dungannon \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "\n", " 2010 \\\n", "de ref minor \n", "1210014 school name ashfield girls' high school \n", " school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210015 school name ashfield boys' high school \n", " school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210021 school name belfast model school for girls \n", " school type secondary \n", " address 1 dunkeld gardens \n", " postcode bt146nt \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast north \n", " town belfast \n", "1210022 school name belfast boys' model school \n", " school type secondary \n", " address 1 ballysillan road \n", "... ... \n", "5420260 district council dungannon \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "5420263 school name the royal school armagh \n", " school type grammar \n", " address 1 college hill \n", " postcode bt619dh \n", " urban_rural urban \n", " school management type voluntary \n", " district council armagh \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420268 school name st patrick's grammar school \n", " school type grammar \n", " address 1 cathedral road \n", " postcode bt617qz \n", " urban_rural urban \n", " school management type voluntary \n", " district council armagh \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420304 school name st patrick's academy \n", " school type grammar \n", " address 1 37 killymeal road \n", " postcode bt716ds \n", " urban_rural urban \n", " school management type voluntary \n", " district council dungannon \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "\n", " 2011 \\\n", "de ref minor \n", "1210014 school name ashfield girls' high school \n", " school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210015 school name ashfield boys' high school \n", " school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210021 school name belfast model school for girls \n", " school type secondary \n", " address 1 dunkeld gardens \n", " postcode bt146nt \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast north \n", " town belfast \n", "1210022 school name belfast boys' model school \n", " school type secondary \n", " address 1 ballysillan road \n", "... ... \n", "5420260 district council dungannon \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "5420263 school name the royal school armagh \n", " school type grammar \n", " address 1 college hill \n", " postcode bt619dh \n", " urban_rural urban \n", " school management type voluntary - other managed \n", " district council armagh \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420268 school name st patrick's grammar school \n", " school type grammar \n", " address 1 cathedral road \n", " postcode bt617qz \n", " urban_rural urban \n", " school management type voluntary - rc managed \n", " district council armagh \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420304 school name st patrick's academy \n", " school type grammar \n", " address 1 37 killymeal road \n", " postcode bt716ds \n", " urban_rural urban \n", " school management type voluntary - rc managed \n", " district council dungannon \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "\n", " 2012 \\\n", "de ref minor \n", "1210014 school name ashfield girls' high school \n", " school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210015 school name ashfield boys' high school \n", " school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210021 school name belfast model school for girls \n", " school type secondary \n", " address 1 dunkeld gardens \n", " postcode bt146nt \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast north \n", " town belfast \n", "1210022 school name belfast boys' model school \n", " school type secondary \n", " address 1 ballysillan road \n", "... ... \n", "5420260 district council dungannon \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "5420263 school name the royal school armagh \n", " school type grammar \n", " address 1 college hill \n", " postcode bt619dh \n", " urban_rural urban \n", " school management type voluntary - other managed \n", " district council armagh \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420268 school name st patrick's grammar school \n", " school type grammar \n", " address 1 cathedral road \n", " postcode bt617qz \n", " urban_rural urban \n", " school management type voluntary - rc managed \n", " district council armagh \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420304 school name st patrick's academy \n", " school type grammar \n", " address 1 37 killymeal road \n", " postcode bt716ds \n", " urban_rural urban \n", " school management type voluntary - rc managed \n", " district council dungannon \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "\n", " 2013 \\\n", "de ref minor \n", "1210014 school name ashfield girls' high school \n", " school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210015 school name ashfield boys' high school \n", " school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210021 school name belfast model school for girls \n", " school type secondary \n", " address 1 dunkeld gardens \n", " postcode bt146nt \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast north \n", " town belfast \n", "1210022 school name belfast boys' model school \n", " school type secondary \n", " address 1 ballysillan road \n", "... ... \n", "5420260 district council dungannon \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "5420263 school name the royal school armagh \n", " school type grammar \n", " address 1 college hill \n", " postcode bt619dh \n", " urban_rural urban \n", " school management type voluntary - other managed \n", " district council armagh \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420268 school name st patrick's grammar school \n", " school type grammar \n", " address 1 cathedral road \n", " postcode bt617qz \n", " urban_rural urban \n", " school management type voluntary - rc managed \n", " district council armagh \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420304 school name st patrick's academy \n", " school type grammar \n", " address 1 37 killymeal road \n", " postcode bt716ds \n", " urban_rural urban \n", " school management type voluntary - rc managed \n", " district council dungannon \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "\n", " 2014 \\\n", "de ref minor \n", "1210014 school name ashfield girls' high school \n", " school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210015 school name ashfield boys' high school \n", " school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210021 school name belfast model school for girls \n", " school type secondary \n", " address 1 dunkeld gardens \n", " postcode bt146nt \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast north \n", " town belfast \n", "1210022 school name belfast boys' model school \n", " school type secondary \n", " address 1 ballysillan road \n", "... ... \n", "5420260 district council dungannon \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "5420263 school name the royal school, armagh \n", " school type grammar \n", " address 1 college hill \n", " postcode bt619dh \n", " urban_rural urban \n", " school management type voluntary \n", " district council armagh \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420268 school name st patrick's grammar school, armagh \n", " school type grammar \n", " address 1 cathedral road \n", " postcode bt617qz \n", " urban_rural urban \n", " school management type voluntary \n", " district council armagh \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420304 school name st patrick's academy, dungannon \n", " school type grammar \n", " address 1 37 killymeal road \n", " postcode bt716ds \n", " urban_rural urban \n", " school management type voluntary \n", " district council dungannon \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "\n", " 2015 \\\n", "de ref minor \n", "1210014 school name ashfield girls' high school \n", " school type secondary \n", " address 1 397 holywood road \n", " postcode bt4 2ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210015 school name ashfield boys' high school \n", " school type secondary \n", " address 1 395 holywood road \n", " postcode bt4 2ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210021 school name belfast model school for girls \n", " school type secondary \n", " address 1 35 dunowen gardens \n", " postcode bt14 6nq \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast north \n", " town belfast \n", "1210022 school name belfast boys' model school \n", " school type secondary \n", " address 1 ballysillan road \n", "... ... \n", "5420260 district council mid ulster \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "5420263 school name the royal school, armagh \n", " school type grammar \n", " address 1 college hill \n", " postcode bt61 9dh \n", " urban_rural urban \n", " school management type voluntary \n", " district council armagh city, banbridge and craigavon \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420268 school name st patrick's grammar school, armagh \n", " school type grammar \n", " address 1 cathedral road \n", " postcode bt61 7qz \n", " urban_rural urban \n", " school management type voluntary \n", " district council armagh city, banbridge and craigavon \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420304 school name st patrick's academy, dungannon \n", " school type grammar \n", " address 1 37 killymeal road \n", " postcode bt71 6ds \n", " urban_rural urban \n", " school management type voluntary \n", " district council mid ulster \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "\n", " 2016 \\\n", "de ref minor \n", "1210014 school name ashfield girls' high school \n", " school type secondary \n", " address 1 397 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210015 school name ashfield boys' high school \n", " school type secondary \n", " address 1 395 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210021 school name belfast model school for girls \n", " school type secondary \n", " address 1 35 dunowen gardens \n", " postcode bt146nq \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast north \n", " town belfast \n", "1210022 school name belfast boys' model school \n", " school type secondary \n", " address 1 ballysillan road \n", "... ... \n", "5420260 district council mid ulster \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "5420263 school name the royal school, armagh \n", " school type grammar \n", " address 1 college hill \n", " postcode bt619dh \n", " urban_rural urban \n", " school management type voluntary \n", " district council armagh city, banbridge and craigavon \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420268 school name st patrick's grammar school, armagh \n", " school type grammar \n", " address 1 cathedral road \n", " postcode bt617qz \n", " urban_rural urban \n", " school management type voluntary \n", " district council armagh city, banbridge and craigavon \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420304 school name st patrick's academy, dungannon \n", " school type grammar \n", " address 1 37 killymeal road \n", " postcode bt716ds \n", " urban_rural urban \n", " school management type voluntary \n", " district council mid ulster \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "\n", " 2017 \n", "de ref minor \n", "1210014 school name ashfield girls' high school \n", " school type non-grammar \n", " address 1 397 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210015 school name ashfield boys' high school \n", " school type non-grammar \n", " address 1 395 holywood road \n", " postcode bt42ly \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast east \n", " town belfast \n", "1210021 school name belfast model school for girls \n", " school type non-grammar \n", " address 1 35 dunowen gardens \n", " postcode bt146nq \n", " urban_rural urban \n", " school management type controlled \n", " district council belfast \n", " parliamentary constituency belfast north \n", " town belfast \n", "1210022 school name belfast boys' model school \n", " school type non-grammar \n", " address 1 ballysillan road \n", "... ... \n", "5420260 district council mid ulster \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "5420263 school name the royal school, armagh \n", " school type grammar \n", " address 1 college hill \n", " postcode bt619dh \n", " urban_rural urban \n", " school management type voluntary \n", " district council armagh city, banbridge and craigavon \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420268 school name st patrick's grammar school, armagh \n", " school type grammar \n", " address 1 cathedral road \n", " postcode bt617qz \n", " urban_rural urban \n", " school management type voluntary \n", " district council armagh city, banbridge and craigavon \n", " parliamentary constituency newry and armagh \n", " town armagh \n", "5420304 school name st patrick's academy, dungannon \n", " school type grammar \n", " address 1 37 killymeal road \n", " postcode bt716ds \n", " urban_rural urban \n", " school management type voluntary \n", " district council mid ulster \n", " parliamentary constituency fermanagh and south tyrone \n", " town dungannon \n", "\n", "[1673 rows x 9 columns]" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reference.to_frame()" ] }, { "cell_type": "code", "execution_count": 94, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:39:09.561567Z", "start_time": "2018-06-07T10:39:09.318581Z" } }, "outputs": [ { "data": { "text/plain": [ "de ref minor \n", "1210014 school name False\n", " school type True\n", " address 1 True\n", " postcode True\n", " urban_rural False\n", " school management type False\n", " district council False\n", " parliamentary constituency False\n", " town False\n", "1210015 school name False\n", " school type True\n", " address 1 True\n", " postcode True\n", " urban_rural False\n", " school management type False\n", " district council False\n", " parliamentary constituency False\n", " town False\n", "1210021 school name False\n", " school type True\n", " address 1 True\n", " postcode True\n", " urban_rural False\n", " school management type False\n", " district council False\n", " parliamentary constituency False\n", " town False\n", "1210022 school name False\n", " school type True\n", " address 1 False\n", " ... \n", "5420260 district council True\n", " parliamentary constituency False\n", " town False\n", "5420263 school name True\n", " school type False\n", " address 1 False\n", " postcode True\n", " urban_rural False\n", " school management type True\n", " district council True\n", " parliamentary constituency False\n", " town False\n", "5420268 school name True\n", " school type False\n", " address 1 False\n", " postcode True\n", " urban_rural False\n", " school management type True\n", " district council True\n", " parliamentary constituency False\n", " town False\n", "5420304 school name True\n", " school type False\n", " address 1 False\n", " postcode True\n", " urban_rural False\n", " school management type True\n", " district council True\n", " parliamentary constituency False\n", " town False\n", "Length: 1673, dtype: bool" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reference.to_frame().apply(pd.Series.nunique, axis=1)!=1" ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:39:14.189085Z", "start_time": "2018-06-07T10:39:13.924233Z" } }, "outputs": [ { "data": { "text/plain": [ "minor\n", "school name 252.0\n", "school type 311.0\n", "address 1 241.0\n", "postcode 408.0\n", "urban_rural 195.0\n", "school management type 364.0\n", "district council 365.0\n", "parliamentary constituency 198.0\n", "town 187.0\n", "dtype: float64" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reference.to_frame().apply(pd.Series.nunique, axis=1).unstack('minor').sum()" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:39:14.615892Z", "start_time": "2018-06-07T10:39:14.346792Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
200920102011201220132014201520162017
de refminor
1210014school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
address 1holywood roadholywood roadholywood roadholywood roadholywood roadholywood road397 holywood road397 holywood road397 holywood road
postcodebt4 2lybt42lybt42lybt42lybt42lybt42lybt4 2lybt42lybt42ly
1210015school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
address 1holywood roadholywood roadholywood roadholywood roadholywood roadholywood road395 holywood road395 holywood road395 holywood road
postcodebt4 2lybt42lybt42lybt42lybt42lybt42lybt4 2lybt42lybt42ly
1210021school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
address 1dunkeld gardensdunkeld gardensdunkeld gardensdunkeld gardensdunkeld gardensdunkeld gardens35 dunowen gardens35 dunowen gardens35 dunowen gardens
postcodebt14 6ntbt146ntbt146ntbt146ntbt146ntbt146ntbt14 6nqbt146nqbt146nq
1210022school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
postcodebt14 6rbbt146rbbt146rbbt146rbbt146rbbt146rbbt14 6rbbt146rbbt146rb
1230053school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
postcodebt12 6enbt126enbt126enbt126enbt126enbt126enbt12 6enbt126enbt126en
school management typerc maintainedroman catholic maintainedrc maintainedrc maintainedrc maintainedcatholic maintainedcatholic maintainedcatholic maintainedcatholic maintained
1230104school nameour lady of mercy girls' schoolour lady of mercy girls' schoolour lady of mercy girls' schoolour lady of mercy girls' schoolour lady of mercy girls' schoolmercy collegemercy collegemercy collegemercy college belfast
school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
postcodebt14 7qrbt147qrbt147qrbt147qrbt147qrbt147qrbt14 7qrbt147qrbt147qr
school management typerc maintainedroman catholic maintainedrc maintainedrc maintainedrc maintainedcatholic maintainedcatholic maintainedcatholic maintainedcatholic maintained
1230130school namest rose's high schoolst rose's high schoolst rose's high schoolst rose's high schoolst rose's high schoolst rose’s dominican collegest rose’s dominican collegest rose’s dominican collegest rose’s dominican college
school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
address 1beechmount avenuebeechmount avenuebeechmount avenuebeechmount avenuebeechmount avenuebeechmount avenue65 beechmount avenue65 beechmount avenue65 beechmount avenue
postcodebt12 7nabt127nabt127nabt127nabt127nabt127nabt12 7nabt127nabt127na
school management typerc maintainedroman catholic maintainedrc maintainedrc maintainedrc maintainedcatholic maintainedcatholic maintainedcatholic maintainedcatholic maintained
1230146school namechristian brothers schoolchristian brothers schoolchristian brothers schoolchristian brothers schoolchristian brothers schoolchristian brothers school, belfastchristian brothers school, belfastchristian brothers school, belfastchristian brothers school, belfast
school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
postcodebt11 8bwbt118bwbt118bwbt118bwbt118bwbt118bwbt11 8bwbt118bwbt118bw
school management typerc maintainedroman catholic maintainedrc maintainedrc maintainedrc maintainedcatholic maintainedcatholic maintainedcatholic maintainedcatholic maintained
1230155school typesecondarysecondarysecondarysecondarysecondarysecondarysecondarysecondarynon-grammar
postcodebt11 9jpbt119jpbt119jpbt119jpbt119jpbt119jpbt11 9jpbt119jpbt119jp
school management typerc maintainedroman catholic maintainedrc maintainedrc maintainedrc maintainedcatholic maintainedcatholic maintainedcatholic maintainedcatholic maintained
.................................
5420062school namest colman's collegest colman's collegest colman's collegest colman's collegest colman's collegest colman's college, newryst colman's college, newryst colman's college, newryst colman's college, newry
postcodebt35 6ppbt356ppbt356ppbt356ppbt356ppbt356ppbt35 6ppbt356ppbt356pp
school management typevoluntaryvoluntaryvoluntary - rc managedvoluntary - rc managedvoluntary - rc managedvoluntaryvoluntaryvoluntaryvoluntary
district councilnewry & mournenewry & mournenewry and mournenewry and mournenewry and mournenewry and mournenewry mourne and downnewry mourne and downnewry mourne and down
5420073school namest joseph's grammar schoolst joseph's grammar schoolst joseph's grammar schoolst joseph's grammar schoolst joseph's grammar schoolst joseph's convent grammar school, donaghmorest joseph's convent grammar school, donaghmorest joseph's convent grammar school, donaghmorest joseph's convent grammar school, donaghmore
postcodebt70 3hebt703hebt703hebt703hebt703hebt703hebt70 3hebt703hebt703he
school management typevoluntaryvoluntaryvoluntary - rc managedvoluntary - rc managedvoluntary - rc managedvoluntaryvoluntaryvoluntaryvoluntary
district councildungannondungannondungannondungannondungannondungannonmid ulstermid ulstermid ulster
5420076school namesacred heart grammar schoolsacred heart grammar schoolsacred heart grammar schoolsacred heart grammar schoolsacred heart grammar schoolsacred heart grammar school, newrysacred heart grammar school, newrysacred heart grammar school, newrysacred heart grammar school, newry
postcodebt34 1prbt341prbt341prbt341prbt341prbt341prbt34 1prbt341prbt341pr
school management typevoluntaryvoluntaryvoluntary - rc managedvoluntary - rc managedvoluntary - rc managedvoluntaryvoluntaryvoluntaryvoluntary
district councilnewry & mournenewry & mournenewry and mournenewry and mournenewry and mournenewry and mournenewry mourne and downnewry mourne and downnewry mourne and down
parliamentary constituencynewry and armaghnewry and armaghsouth downsouth downsouth downsouth downsouth downsouth downsouth down
5420260school namethe royal school dungannonthe royal school dungannonthe royal school dungannonthe royal school dungannonthe royal school dungannonthe royal school, dungannonthe royal school, dungannonthe royal school, dungannonthe royal school, dungannon
address 11 ranfurley road1 ranfurley road1 ranfurley road1 ranfurley road1 ranfurley road1 ranfurley road2 ranfurley road2 ranfurley road2 ranfurley road
postcodebt71 6apbt716apbt716apbt716apbt716apbt716apbt71 6apbt716apbt716ap
school management typevoluntaryvoluntaryvoluntary - other managedvoluntary - other managedvoluntary - other managedvoluntaryvoluntaryvoluntaryvoluntary
district councildungannondungannondungannondungannondungannondungannonmid ulstermid ulstermid ulster
5420263school namethe royal school armaghthe royal school armaghthe royal school armaghthe royal school armaghthe royal school armaghthe royal school, armaghthe royal school, armaghthe royal school, armaghthe royal school, armagh
postcodebt61 9dhbt619dhbt619dhbt619dhbt619dhbt619dhbt61 9dhbt619dhbt619dh
school management typevoluntaryvoluntaryvoluntary - other managedvoluntary - other managedvoluntary - other managedvoluntaryvoluntaryvoluntaryvoluntary
district councilarmagharmagharmagharmagharmagharmagharmagh city, banbridge and craigavonarmagh city, banbridge and craigavonarmagh city, banbridge and craigavon
5420268school namest patrick's grammar schoolst patrick's grammar schoolst patrick's grammar schoolst patrick's grammar schoolst patrick's grammar schoolst patrick's grammar school, armaghst patrick's grammar school, armaghst patrick's grammar school, armaghst patrick's grammar school, armagh
postcodebt61 7qzbt617qzbt617qzbt617qzbt617qzbt617qzbt61 7qzbt617qzbt617qz
school management typevoluntaryvoluntaryvoluntary - rc managedvoluntary - rc managedvoluntary - rc managedvoluntaryvoluntaryvoluntaryvoluntary
district councilarmagharmagharmagharmagharmagharmagharmagh city, banbridge and craigavonarmagh city, banbridge and craigavonarmagh city, banbridge and craigavon
5420304school namest patrick's academyst patrick's academyst patrick's academyst patrick's academyst patrick's academyst patrick's academy, dungannonst patrick's academy, dungannonst patrick's academy, dungannonst patrick's academy, dungannon
postcodebt71 6dsbt716dsbt716dsbt716dsbt716dsbt716dsbt71 6dsbt716dsbt716ds
school management typevoluntaryvoluntaryvoluntary - rc managedvoluntary - rc managedvoluntary - rc managedvoluntaryvoluntaryvoluntaryvoluntary
district councildungannondungannondungannondungannondungannondungannonmid ulstermid ulstermid ulster
\n", "

723 rows × 9 columns

\n", "
" ], "text/plain": [ " 2009 \\\n", "de ref minor \n", "1210014 school type secondary \n", " address 1 holywood road \n", " postcode bt4 2ly \n", "1210015 school type secondary \n", " address 1 holywood road \n", " postcode bt4 2ly \n", "1210021 school type secondary \n", " address 1 dunkeld gardens \n", " postcode bt14 6nt \n", "1210022 school type secondary \n", " postcode bt14 6rb \n", "1230053 school type secondary \n", " postcode bt12 6en \n", " school management type rc maintained \n", "1230104 school name our lady of mercy girls' school \n", " school type secondary \n", " postcode bt14 7qr \n", " school management type rc maintained \n", "1230130 school name st rose's high school \n", " school type secondary \n", " address 1 beechmount avenue \n", " postcode bt12 7na \n", " school management type rc maintained \n", "1230146 school name christian brothers school \n", " school type secondary \n", " postcode bt11 8bw \n", " school management type rc maintained \n", "1230155 school type secondary \n", " postcode bt11 9jp \n", " school management type rc maintained \n", "... ... \n", "5420062 school name st colman's college \n", " postcode bt35 6pp \n", " school management type voluntary \n", " district council newry & mourne \n", "5420073 school name st joseph's grammar school \n", " postcode bt70 3he \n", " school management type voluntary \n", " district council dungannon \n", "5420076 school name sacred heart grammar school \n", " postcode bt34 1pr \n", " school management type voluntary \n", " district council newry & mourne \n", " parliamentary constituency newry and armagh \n", "5420260 school name the royal school dungannon \n", " address 1 1 ranfurley road \n", " postcode bt71 6ap \n", " school management type voluntary \n", " district council dungannon \n", "5420263 school name the royal school armagh \n", " postcode bt61 9dh \n", " school management type voluntary \n", " district council armagh \n", "5420268 school name st patrick's grammar school \n", " postcode bt61 7qz \n", " school management type voluntary \n", " district council armagh \n", "5420304 school name st patrick's academy \n", " postcode bt71 6ds \n", " school management type voluntary \n", " district council dungannon \n", "\n", " 2010 \\\n", "de ref minor \n", "1210014 school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", "1210015 school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", "1210021 school type secondary \n", " address 1 dunkeld gardens \n", " postcode bt146nt \n", "1210022 school type secondary \n", " postcode bt146rb \n", "1230053 school type secondary \n", " postcode bt126en \n", " school management type roman catholic maintained \n", "1230104 school name our lady of mercy girls' school \n", " school type secondary \n", " postcode bt147qr \n", " school management type roman catholic maintained \n", "1230130 school name st rose's high school \n", " school type secondary \n", " address 1 beechmount avenue \n", " postcode bt127na \n", " school management type roman catholic maintained \n", "1230146 school name christian brothers school \n", " school type secondary \n", " postcode bt118bw \n", " school management type roman catholic maintained \n", "1230155 school type secondary \n", " postcode bt119jp \n", " school management type roman catholic maintained \n", "... ... \n", "5420062 school name st colman's college \n", " postcode bt356pp \n", " school management type voluntary \n", " district council newry & mourne \n", "5420073 school name st joseph's grammar school \n", " postcode bt703he \n", " school management type voluntary \n", " district council dungannon \n", "5420076 school name sacred heart grammar school \n", " postcode bt341pr \n", " school management type voluntary \n", " district council newry & mourne \n", " parliamentary constituency newry and armagh \n", "5420260 school name the royal school dungannon \n", " address 1 1 ranfurley road \n", " postcode bt716ap \n", " school management type voluntary \n", " district council dungannon \n", "5420263 school name the royal school armagh \n", " postcode bt619dh \n", " school management type voluntary \n", " district council armagh \n", "5420268 school name st patrick's grammar school \n", " postcode bt617qz \n", " school management type voluntary \n", " district council armagh \n", "5420304 school name st patrick's academy \n", " postcode bt716ds \n", " school management type voluntary \n", " district council dungannon \n", "\n", " 2011 \\\n", "de ref minor \n", "1210014 school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", "1210015 school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", "1210021 school type secondary \n", " address 1 dunkeld gardens \n", " postcode bt146nt \n", "1210022 school type secondary \n", " postcode bt146rb \n", "1230053 school type secondary \n", " postcode bt126en \n", " school management type rc maintained \n", "1230104 school name our lady of mercy girls' school \n", " school type secondary \n", " postcode bt147qr \n", " school management type rc maintained \n", "1230130 school name st rose's high school \n", " school type secondary \n", " address 1 beechmount avenue \n", " postcode bt127na \n", " school management type rc maintained \n", "1230146 school name christian brothers school \n", " school type secondary \n", " postcode bt118bw \n", " school management type rc maintained \n", "1230155 school type secondary \n", " postcode bt119jp \n", " school management type rc maintained \n", "... ... \n", "5420062 school name st colman's college \n", " postcode bt356pp \n", " school management type voluntary - rc managed \n", " district council newry and mourne \n", "5420073 school name st joseph's grammar school \n", " postcode bt703he \n", " school management type voluntary - rc managed \n", " district council dungannon \n", "5420076 school name sacred heart grammar school \n", " postcode bt341pr \n", " school management type voluntary - rc managed \n", " district council newry and mourne \n", " parliamentary constituency south down \n", "5420260 school name the royal school dungannon \n", " address 1 1 ranfurley road \n", " postcode bt716ap \n", " school management type voluntary - other managed \n", " district council dungannon \n", "5420263 school name the royal school armagh \n", " postcode bt619dh \n", " school management type voluntary - other managed \n", " district council armagh \n", "5420268 school name st patrick's grammar school \n", " postcode bt617qz \n", " school management type voluntary - rc managed \n", " district council armagh \n", "5420304 school name st patrick's academy \n", " postcode bt716ds \n", " school management type voluntary - rc managed \n", " district council dungannon \n", "\n", " 2012 \\\n", "de ref minor \n", "1210014 school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", "1210015 school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", "1210021 school type secondary \n", " address 1 dunkeld gardens \n", " postcode bt146nt \n", "1210022 school type secondary \n", " postcode bt146rb \n", "1230053 school type secondary \n", " postcode bt126en \n", " school management type rc maintained \n", "1230104 school name our lady of mercy girls' school \n", " school type secondary \n", " postcode bt147qr \n", " school management type rc maintained \n", "1230130 school name st rose's high school \n", " school type secondary \n", " address 1 beechmount avenue \n", " postcode bt127na \n", " school management type rc maintained \n", "1230146 school name christian brothers school \n", " school type secondary \n", " postcode bt118bw \n", " school management type rc maintained \n", "1230155 school type secondary \n", " postcode bt119jp \n", " school management type rc maintained \n", "... ... \n", "5420062 school name st colman's college \n", " postcode bt356pp \n", " school management type voluntary - rc managed \n", " district council newry and mourne \n", "5420073 school name st joseph's grammar school \n", " postcode bt703he \n", " school management type voluntary - rc managed \n", " district council dungannon \n", "5420076 school name sacred heart grammar school \n", " postcode bt341pr \n", " school management type voluntary - rc managed \n", " district council newry and mourne \n", " parliamentary constituency south down \n", "5420260 school name the royal school dungannon \n", " address 1 1 ranfurley road \n", " postcode bt716ap \n", " school management type voluntary - other managed \n", " district council dungannon \n", "5420263 school name the royal school armagh \n", " postcode bt619dh \n", " school management type voluntary - other managed \n", " district council armagh \n", "5420268 school name st patrick's grammar school \n", " postcode bt617qz \n", " school management type voluntary - rc managed \n", " district council armagh \n", "5420304 school name st patrick's academy \n", " postcode bt716ds \n", " school management type voluntary - rc managed \n", " district council dungannon \n", "\n", " 2013 \\\n", "de ref minor \n", "1210014 school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", "1210015 school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", "1210021 school type secondary \n", " address 1 dunkeld gardens \n", " postcode bt146nt \n", "1210022 school type secondary \n", " postcode bt146rb \n", "1230053 school type secondary \n", " postcode bt126en \n", " school management type rc maintained \n", "1230104 school name our lady of mercy girls' school \n", " school type secondary \n", " postcode bt147qr \n", " school management type rc maintained \n", "1230130 school name st rose's high school \n", " school type secondary \n", " address 1 beechmount avenue \n", " postcode bt127na \n", " school management type rc maintained \n", "1230146 school name christian brothers school \n", " school type secondary \n", " postcode bt118bw \n", " school management type rc maintained \n", "1230155 school type secondary \n", " postcode bt119jp \n", " school management type rc maintained \n", "... ... \n", "5420062 school name st colman's college \n", " postcode bt356pp \n", " school management type voluntary - rc managed \n", " district council newry and mourne \n", "5420073 school name st joseph's grammar school \n", " postcode bt703he \n", " school management type voluntary - rc managed \n", " district council dungannon \n", "5420076 school name sacred heart grammar school \n", " postcode bt341pr \n", " school management type voluntary - rc managed \n", " district council newry and mourne \n", " parliamentary constituency south down \n", "5420260 school name the royal school dungannon \n", " address 1 1 ranfurley road \n", " postcode bt716ap \n", " school management type voluntary - other managed \n", " district council dungannon \n", "5420263 school name the royal school armagh \n", " postcode bt619dh \n", " school management type voluntary - other managed \n", " district council armagh \n", "5420268 school name st patrick's grammar school \n", " postcode bt617qz \n", " school management type voluntary - rc managed \n", " district council armagh \n", "5420304 school name st patrick's academy \n", " postcode bt716ds \n", " school management type voluntary - rc managed \n", " district council dungannon \n", "\n", " 2014 \\\n", "de ref minor \n", "1210014 school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", "1210015 school type secondary \n", " address 1 holywood road \n", " postcode bt42ly \n", "1210021 school type secondary \n", " address 1 dunkeld gardens \n", " postcode bt146nt \n", "1210022 school type secondary \n", " postcode bt146rb \n", "1230053 school type secondary \n", " postcode bt126en \n", " school management type catholic maintained \n", "1230104 school name mercy college \n", " school type secondary \n", " postcode bt147qr \n", " school management type catholic maintained \n", "1230130 school name st rose’s dominican college \n", " school type secondary \n", " address 1 beechmount avenue \n", " postcode bt127na \n", " school management type catholic maintained \n", "1230146 school name christian brothers school, belfast \n", " school type secondary \n", " postcode bt118bw \n", " school management type catholic maintained \n", "1230155 school type secondary \n", " postcode bt119jp \n", " school management type catholic maintained \n", "... ... \n", "5420062 school name st colman's college, newry \n", " postcode bt356pp \n", " school management type voluntary \n", " district council newry and mourne \n", "5420073 school name st joseph's convent grammar school, donaghmore \n", " postcode bt703he \n", " school management type voluntary \n", " district council dungannon \n", "5420076 school name sacred heart grammar school, newry \n", " postcode bt341pr \n", " school management type voluntary \n", " district council newry and mourne \n", " parliamentary constituency south down \n", "5420260 school name the royal school, dungannon \n", " address 1 1 ranfurley road \n", " postcode bt716ap \n", " school management type voluntary \n", " district council dungannon \n", "5420263 school name the royal school, armagh \n", " postcode bt619dh \n", " school management type voluntary \n", " district council armagh \n", "5420268 school name st patrick's grammar school, armagh \n", " postcode bt617qz \n", " school management type voluntary \n", " district council armagh \n", "5420304 school name st patrick's academy, dungannon \n", " postcode bt716ds \n", " school management type voluntary \n", " district council dungannon \n", "\n", " 2015 \\\n", "de ref minor \n", "1210014 school type secondary \n", " address 1 397 holywood road \n", " postcode bt4 2ly \n", "1210015 school type secondary \n", " address 1 395 holywood road \n", " postcode bt4 2ly \n", "1210021 school type secondary \n", " address 1 35 dunowen gardens \n", " postcode bt14 6nq \n", "1210022 school type secondary \n", " postcode bt14 6rb \n", "1230053 school type secondary \n", " postcode bt12 6en \n", " school management type catholic maintained \n", "1230104 school name mercy college \n", " school type secondary \n", " postcode bt14 7qr \n", " school management type catholic maintained \n", "1230130 school name st rose’s dominican college \n", " school type secondary \n", " address 1 65 beechmount avenue \n", " postcode bt12 7na \n", " school management type catholic maintained \n", "1230146 school name christian brothers school, belfast \n", " school type secondary \n", " postcode bt11 8bw \n", " school management type catholic maintained \n", "1230155 school type secondary \n", " postcode bt11 9jp \n", " school management type catholic maintained \n", "... ... \n", "5420062 school name st colman's college, newry \n", " postcode bt35 6pp \n", " school management type voluntary \n", " district council newry mourne and down \n", "5420073 school name st joseph's convent grammar school, donaghmore \n", " postcode bt70 3he \n", " school management type voluntary \n", " district council mid ulster \n", "5420076 school name sacred heart grammar school, newry \n", " postcode bt34 1pr \n", " school management type voluntary \n", " district council newry mourne and down \n", " parliamentary constituency south down \n", "5420260 school name the royal school, dungannon \n", " address 1 2 ranfurley road \n", " postcode bt71 6ap \n", " school management type voluntary \n", " district council mid ulster \n", "5420263 school name the royal school, armagh \n", " postcode bt61 9dh \n", " school management type voluntary \n", " district council armagh city, banbridge and craigavon \n", "5420268 school name st patrick's grammar school, armagh \n", " postcode bt61 7qz \n", " school management type voluntary \n", " district council armagh city, banbridge and craigavon \n", "5420304 school name st patrick's academy, dungannon \n", " postcode bt71 6ds \n", " school management type voluntary \n", " district council mid ulster \n", "\n", " 2016 \\\n", "de ref minor \n", "1210014 school type secondary \n", " address 1 397 holywood road \n", " postcode bt42ly \n", "1210015 school type secondary \n", " address 1 395 holywood road \n", " postcode bt42ly \n", "1210021 school type secondary \n", " address 1 35 dunowen gardens \n", " postcode bt146nq \n", "1210022 school type secondary \n", " postcode bt146rb \n", "1230053 school type secondary \n", " postcode bt126en \n", " school management type catholic maintained \n", "1230104 school name mercy college \n", " school type secondary \n", " postcode bt147qr \n", " school management type catholic maintained \n", "1230130 school name st rose’s dominican college \n", " school type secondary \n", " address 1 65 beechmount avenue \n", " postcode bt127na \n", " school management type catholic maintained \n", "1230146 school name christian brothers school, belfast \n", " school type secondary \n", " postcode bt118bw \n", " school management type catholic maintained \n", "1230155 school type secondary \n", " postcode bt119jp \n", " school management type catholic maintained \n", "... ... \n", "5420062 school name st colman's college, newry \n", " postcode bt356pp \n", " school management type voluntary \n", " district council newry mourne and down \n", "5420073 school name st joseph's convent grammar school, donaghmore \n", " postcode bt703he \n", " school management type voluntary \n", " district council mid ulster \n", "5420076 school name sacred heart grammar school, newry \n", " postcode bt341pr \n", " school management type voluntary \n", " district council newry mourne and down \n", " parliamentary constituency south down \n", "5420260 school name the royal school, dungannon \n", " address 1 2 ranfurley road \n", " postcode bt716ap \n", " school management type voluntary \n", " district council mid ulster \n", "5420263 school name the royal school, armagh \n", " postcode bt619dh \n", " school management type voluntary \n", " district council armagh city, banbridge and craigavon \n", "5420268 school name st patrick's grammar school, armagh \n", " postcode bt617qz \n", " school management type voluntary \n", " district council armagh city, banbridge and craigavon \n", "5420304 school name st patrick's academy, dungannon \n", " postcode bt716ds \n", " school management type voluntary \n", " district council mid ulster \n", "\n", " 2017 \n", "de ref minor \n", "1210014 school type non-grammar \n", " address 1 397 holywood road \n", " postcode bt42ly \n", "1210015 school type non-grammar \n", " address 1 395 holywood road \n", " postcode bt42ly \n", "1210021 school type non-grammar \n", " address 1 35 dunowen gardens \n", " postcode bt146nq \n", "1210022 school type non-grammar \n", " postcode bt146rb \n", "1230053 school type non-grammar \n", " postcode bt126en \n", " school management type catholic maintained \n", "1230104 school name mercy college belfast \n", " school type non-grammar \n", " postcode bt147qr \n", " school management type catholic maintained \n", "1230130 school name st rose’s dominican college \n", " school type non-grammar \n", " address 1 65 beechmount avenue \n", " postcode bt127na \n", " school management type catholic maintained \n", "1230146 school name christian brothers school, belfast \n", " school type non-grammar \n", " postcode bt118bw \n", " school management type catholic maintained \n", "1230155 school type non-grammar \n", " postcode bt119jp \n", " school management type catholic maintained \n", "... ... \n", "5420062 school name st colman's college, newry \n", " postcode bt356pp \n", " school management type voluntary \n", " district council newry mourne and down \n", "5420073 school name st joseph's convent grammar school, donaghmore \n", " postcode bt703he \n", " school management type voluntary \n", " district council mid ulster \n", "5420076 school name sacred heart grammar school, newry \n", " postcode bt341pr \n", " school management type voluntary \n", " district council newry mourne and down \n", " parliamentary constituency south down \n", "5420260 school name the royal school, dungannon \n", " address 1 2 ranfurley road \n", " postcode bt716ap \n", " school management type voluntary \n", " district council mid ulster \n", "5420263 school name the royal school, armagh \n", " postcode bt619dh \n", " school management type voluntary \n", " district council armagh city, banbridge and craigavon \n", "5420268 school name st patrick's grammar school, armagh \n", " postcode bt617qz \n", " school management type voluntary \n", " district council armagh city, banbridge and craigavon \n", "5420304 school name st patrick's academy, dungannon \n", " postcode bt716ds \n", " school management type voluntary \n", " district council mid ulster \n", "\n", "[723 rows x 9 columns]" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reference.to_frame()[reference.to_frame().apply(pd.Series.nunique, axis=1)!=1]" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:39:15.036158Z", "start_time": "2018-06-07T10:39:15.030307Z" }, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Counter({'catholic maintained': 258,\n", " 'controlled': 628,\n", " 'controlled integrated': 45,\n", " 'gmi': 120,\n", " 'grant maintained integrated': 15,\n", " nan: 201,\n", " 'other maintained': 12,\n", " 'rc maintained': 282,\n", " 'roman catholic maintained': 71,\n", " 'voluntary': 303,\n", " 'voluntary - other managed': 66,\n", " 'voluntary - rc managed': 87})" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from collections import Counter\n", "Counter(reference[:,:,'school management type'].values.ravel('k'))" ] }, { "cell_type": "code", "execution_count": 98, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:39:19.901133Z", "start_time": "2018-06-07T10:39:19.897349Z" } }, "outputs": [], "source": [ "reference_value_rename = {\n", " 'school management type':{\n", " 'controlled integrated':'integrated',\n", " 'roman catholic maintained':'rc maintained',\n", " 'grant maintained integrated':'gmi',\n", " 'voluntary - other managed':'other maintained',\n", " 'voluntary - rc managed':'rc maintained',\n", " 'catholic maintained':'rc maintained'\n", " }\n", "}" ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:39:22.743993Z", "start_time": "2018-06-07T10:39:21.417598Z" }, "code_folding": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Got reference data for 2009\n", "Got reference data for 2010\n", "Got reference data for 2011\n", "Got reference data for 2012\n", "Got reference data for 2013\n", "Got reference data for 2014\n", "Got reference data for 2015\n", "Got reference data for 2016\n", "Got reference data for 2017\n" ] } ], "source": [ "\n", "import numpy as np\n", "def parse_reference_table(xls):\n", " cols = [\n", " 'de ref',\n", " 'school name',\n", " 'school type',\n", " 'address 1',\n", " 'postcode',\n", " 'urban_rural',\n", " 'school management type',\n", " 'district council',\n", " 'parliamentary constituency',\n", " 'town'\n", " ]\n", " \n", " categories = [\n", " 'school type',\n", " 'urban_rural',\n", " 'school management type',\n", " 'district council',\n", " 'parliamentary constituency',\n", " 'town'\n", " ]\n", "\n", " ref_key_map={\n", " 'denino':'de ref',\n", " 'urban/ rural': 'urban_rural',\n", " 'schoolname': 'school name'\n", " }\n", " \n", " reference_value_rename = {\n", " 'school management type':{\n", " 'gmi':'integrated',\n", " 'controlled integrated':'integrated',\n", " 'roman catholic maintained':'rc maintained',\n", " 'grant maintained integrated':'integrated',\n", " 'voluntary - other managed':'voluntary',\n", " 'voluntary - rc managed':'voluntary',\n", " 'catholic maintained':'rc maintained'\n", " }\n", " }\n", " join_n_strip_n_lower = lambda l: ' '.join(l).strip().lower()\n", " \n", " if 'reference data' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'reference data', header=None)\n", " h_range = 2 if isinstance(df.ix[3,0], int) else 3\n", " try:\n", " df.columns=df.ix[1:h_range].fillna('').apply(join_n_strip_n_lower, axis=0).values\n", " df.rename(columns=ref_key_map, inplace=True)\n", " df = df.drop(df.index[0:h_range+1]).reset_index(drop=True)\n", " df = df[cols]\n", " df['de ref'] = df['de ref'].astype(int)\n", " df.set_index('de ref', inplace=True)\n", " for c in df:\n", " df[c]=df[c].str.lower().str.strip() \n", " df.replace(reference_value_rename, inplace=True)\n", " for c in categories:\n", " df[c].fillna('NA', inplace=True)\n", " df[c] = df[c].astype('category')\n", " except TypeError as e:\n", " print(e)\n", " else:\n", " df=None\n", " return df\n", "\n", "dfs = {}\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " df = parse_reference_table(xls)\n", " if df is not None:\n", " print(f'Got reference data for {year}')\n", " dfs[year]=df\n", "reference = pd.Panel(dfs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parse Available" ] }, { "cell_type": "code", "execution_count": 203, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T13:31:25.360872Z", "start_time": "2018-06-07T13:31:24.310106Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Got available data for 2010\n", "Got available data for 2011\n", "Got available data for 2012\n", "Got available data for 2013\n", "Got available data for 2014\n", "Got available data for 2015\n", "Got available data for 2016\n", "Got available data for 2017\n" ] }, { "data": { "text/plain": [ "\n", "Dimensions: 8 (items) x 229 (major_axis) x 5 (minor_axis)\n", "Items axis: 2010 to 2017\n", "Major_axis axis: 1210014 to 5420314\n", "Minor_axis axis: actual enrolments to supernumerary pupils" ] }, "execution_count": 203, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"\"\"School level data\"\"\"\n", "\n", "def parse_available_table(xls):\n", " ref_key_map={\n", " 'schoolname': 'school name',\n", " 'total unfilled places': 'available places',\n", " 'unfilled places': 'available places',\n", " 'total approved enrolment number': 'approved enrolments'\n", " }\n", " \n", " join_n_strip_n_lower = lambda l: ' '.join(l).strip().lower()\n", " \n", " if 'School level data' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'School level data', header=None)\n", " h_range = 2 if isinstance(df.ix[3,0], int) else 3\n", " elif 'unfilled places' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'unfilled places', header=None)\n", " h_range = 2 if isinstance(df.ix[3,0], int) else 3\n", " else:\n", " df=None\n", " \n", " if df is not None:\n", " try:\n", " df.columns=df.ix[1:h_range].fillna('').apply(join_n_strip_n_lower, axis=0).values\n", " df.rename(columns=ref_key_map, inplace=True)\n", " df = df.drop(df.index[0:h_range+1]).reset_index(drop=True)\n", " df=df.applymap(lambda x: np.nan if isinstance(x, str) and x.isspace() else x)\n", " df.dropna(how='all', axis=1, inplace=True)\n", " df.dropna(how='any', axis=0, inplace=True)\n", " if df.shape[1] == 6: # recent doesn't have fecking headers\n", " cols = list(df.columns)\n", " cols[0] = 'de ref'\n", " cols[1] = 'school name'\n", " df.columns=cols\n", " df.drop('school name', axis=1, inplace=True)\n", " df['de ref'] = df['de ref'].astype(int)\n", " df.set_index('de ref', inplace=True)\n", " df.replace('*',2.0, inplace=True) # * == < 5\n", " df.replace('!',1, inplace=True) # ! avoid identification, so it's prob one or two\n", " df.dropna(how='all', inplace=True, axis=1)\n", " df.astype(int, inplace=True)\n", " \n", "\n", " \n", " except TypeError as e:\n", " print(e)\n", "\n", " return df\n", "dfs={}\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " df = parse_available_table(xls)\n", " if df is not None:\n", " print(f'Got available data for {year}')\n", " dfs[year]=df\n", " \n", "available = pd.Panel(dfs)\n", "available" ] }, { "cell_type": "code", "execution_count": 205, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T13:31:32.471950Z", "start_time": "2018-06-07T13:31:32.441846Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
actual enrolmentsapproved admissionsapproved enrolmentsavailable placessupernumerary pupils
de ref
1210014NaNNaN660.00.0NaN
1210015NaNNaN600.00.0NaN
1210021NaNNaN950.056.0NaN
1210022NaNNaN905.012.0NaN
1210266NaNNaN548.02.0NaN
1230026NaNNaN780.0111.0NaN
1230053NaNNaN2280.0787.0NaN
1230089NaNNaN650.00.0NaN
1230104NaNNaN650.0238.0NaN
1230130NaNNaN575.0237.0NaN
1230146NaNNaN750.0305.0NaN
1230155NaNNaN1000.00.0NaN
1230173NaNNaNNaNNaNNaN
1230182NaNNaN1025.09.0NaN
1230262NaNNaN600.0232.0NaN
1230275NaNNaN664.0143.0NaN
1230321NaNNaNNaNNaNNaN
1240291NaNNaN600.060.0NaN
1260269NaNNaN850.014.0NaN
1260294NaNNaN800.0189.0NaN
1410079NaNNaN1075.00.0NaN
1410270NaNNaN770.00.0NaN
1410315NaNNaNNaNNaNNaN
1420018NaNNaN710.02.0NaN
1420020NaNNaN950.073.0NaN
1420021NaNNaN1180.00.0NaN
1420022NaNNaN1810.074.0NaN
1420027NaNNaN1050.032.0NaN
1420028NaNNaN1410.019.0NaN
1420029NaNNaN966.00.0NaN
..................
5230152NaNNaN760.00.0NaN
5230157NaNNaN1355.00.0NaN
5230160NaNNaN450.0291.0NaN
5230167NaNNaN600.017.0NaN
5230187NaNNaN1000.037.0NaN
5230192NaNNaN680.0403.0NaN
5230213NaNNaN1200.088.0NaN
5230218NaNNaN1029.00.0NaN
5230256NaNNaN800.0646.0NaN
5230278NaNNaN960.043.0NaN
5230293NaNNaN575.00.0NaN
5230321NaNNaNNaNNaNNaN
5250216NaNNaN450.0149.0NaN
5260285NaNNaN500.00.0NaN
5260286NaNNaN500.00.0NaN
5410013NaNNaN1320.05.0NaN
5410057NaNNaN440.02.0NaN
5410067NaNNaN780.00.0NaN
5420045NaNNaN570.00.0NaN
5420056NaNNaN570.00.0NaN
5420059NaNNaN850.00.0NaN
5420060NaNNaN860.08.0NaN
5420062NaNNaN860.00.0NaN
5420073NaNNaN575.00.0NaN
5420076NaNNaN875.025.0NaN
5420260NaNNaN650.05.0NaN
5420263NaNNaN650.00.0NaN
5420268NaNNaN750.00.0NaN
5420304NaNNaN1400.031.0NaN
5420314NaNNaNNaNNaNNaN
\n", "

229 rows × 5 columns

\n", "
" ], "text/plain": [ " actual enrolments approved admissions approved enrolments \\\n", "de ref \n", "1210014 NaN NaN 660.0 \n", "1210015 NaN NaN 600.0 \n", "1210021 NaN NaN 950.0 \n", "1210022 NaN NaN 905.0 \n", "1210266 NaN NaN 548.0 \n", "1230026 NaN NaN 780.0 \n", "1230053 NaN NaN 2280.0 \n", "1230089 NaN NaN 650.0 \n", "1230104 NaN NaN 650.0 \n", "1230130 NaN NaN 575.0 \n", "1230146 NaN NaN 750.0 \n", "1230155 NaN NaN 1000.0 \n", "1230173 NaN NaN NaN \n", "1230182 NaN NaN 1025.0 \n", "1230262 NaN NaN 600.0 \n", "1230275 NaN NaN 664.0 \n", "1230321 NaN NaN NaN \n", "1240291 NaN NaN 600.0 \n", "1260269 NaN NaN 850.0 \n", "1260294 NaN NaN 800.0 \n", "1410079 NaN NaN 1075.0 \n", "1410270 NaN NaN 770.0 \n", "1410315 NaN NaN NaN \n", "1420018 NaN NaN 710.0 \n", "1420020 NaN NaN 950.0 \n", "1420021 NaN NaN 1180.0 \n", "1420022 NaN NaN 1810.0 \n", "1420027 NaN NaN 1050.0 \n", "1420028 NaN NaN 1410.0 \n", "1420029 NaN NaN 966.0 \n", "... ... ... ... \n", "5230152 NaN NaN 760.0 \n", "5230157 NaN NaN 1355.0 \n", "5230160 NaN NaN 450.0 \n", "5230167 NaN NaN 600.0 \n", "5230187 NaN NaN 1000.0 \n", "5230192 NaN NaN 680.0 \n", "5230213 NaN NaN 1200.0 \n", "5230218 NaN NaN 1029.0 \n", "5230256 NaN NaN 800.0 \n", "5230278 NaN NaN 960.0 \n", "5230293 NaN NaN 575.0 \n", "5230321 NaN NaN NaN \n", "5250216 NaN NaN 450.0 \n", "5260285 NaN NaN 500.0 \n", "5260286 NaN NaN 500.0 \n", "5410013 NaN NaN 1320.0 \n", "5410057 NaN NaN 440.0 \n", "5410067 NaN NaN 780.0 \n", "5420045 NaN NaN 570.0 \n", "5420056 NaN NaN 570.0 \n", "5420059 NaN NaN 850.0 \n", "5420060 NaN NaN 860.0 \n", "5420062 NaN NaN 860.0 \n", "5420073 NaN NaN 575.0 \n", "5420076 NaN NaN 875.0 \n", "5420260 NaN NaN 650.0 \n", "5420263 NaN NaN 650.0 \n", "5420268 NaN NaN 750.0 \n", "5420304 NaN NaN 1400.0 \n", "5420314 NaN NaN NaN \n", "\n", " available places supernumerary pupils \n", "de ref \n", "1210014 0.0 NaN \n", "1210015 0.0 NaN \n", "1210021 56.0 NaN \n", "1210022 12.0 NaN \n", "1210266 2.0 NaN \n", "1230026 111.0 NaN \n", "1230053 787.0 NaN \n", "1230089 0.0 NaN \n", "1230104 238.0 NaN \n", "1230130 237.0 NaN \n", "1230146 305.0 NaN \n", "1230155 0.0 NaN \n", "1230173 NaN NaN \n", "1230182 9.0 NaN \n", "1230262 232.0 NaN \n", "1230275 143.0 NaN \n", "1230321 NaN NaN \n", "1240291 60.0 NaN \n", "1260269 14.0 NaN \n", "1260294 189.0 NaN \n", "1410079 0.0 NaN \n", "1410270 0.0 NaN \n", "1410315 NaN NaN \n", "1420018 2.0 NaN \n", "1420020 73.0 NaN \n", "1420021 0.0 NaN \n", "1420022 74.0 NaN \n", "1420027 32.0 NaN \n", "1420028 19.0 NaN \n", "1420029 0.0 NaN \n", "... ... ... \n", "5230152 0.0 NaN \n", "5230157 0.0 NaN \n", "5230160 291.0 NaN \n", "5230167 17.0 NaN \n", "5230187 37.0 NaN \n", "5230192 403.0 NaN \n", "5230213 88.0 NaN \n", "5230218 0.0 NaN \n", "5230256 646.0 NaN \n", "5230278 43.0 NaN \n", "5230293 0.0 NaN \n", "5230321 NaN NaN \n", "5250216 149.0 NaN \n", "5260285 0.0 NaN \n", "5260286 0.0 NaN \n", "5410013 5.0 NaN \n", "5410057 2.0 NaN \n", "5410067 0.0 NaN \n", "5420045 0.0 NaN \n", "5420056 0.0 NaN \n", "5420059 0.0 NaN \n", "5420060 8.0 NaN \n", "5420062 0.0 NaN \n", "5420073 0.0 NaN \n", "5420076 25.0 NaN \n", "5420260 5.0 NaN \n", "5420263 0.0 NaN \n", "5420268 0.0 NaN \n", "5420304 31.0 NaN \n", "5420314 NaN NaN \n", "\n", "[229 rows x 5 columns]" ] }, "execution_count": 205, "metadata": {}, "output_type": "execute_result" } ], "source": [ "available[2013]" ] }, { "cell_type": "code", "execution_count": 200, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T13:30:34.788395Z", "start_time": "2018-06-07T13:30:34.564355Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 200, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "all_ = set([_ for df in dfs.values() for _ in df.keys()])\n", "df = pd.DataFrame.from_dict({\n", " year: [sn in these_ for sn in all_] \n", " for year, these_ in dfs.items()\n", "}, orient='index')\n", "df.columns=all_\n", "sns.heatmap(df.T)" ] }, { "cell_type": "code", "execution_count": 201, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T13:30:34.985452Z", "start_time": "2018-06-07T13:30:34.981525Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2010:(217, 2):approved enrolments,available places\n", "2011:(216, 2):approved enrolments,available places\n", "2012:(215, 2):available places,approved enrolments\n", "2013:(210, 2):available places,approved enrolments\n", "2014:(208, 1):available places\n", "2015:(202, 3):approved admissions,approved enrolments,available places\n", "2016:(201, 4):approved enrolments,actual enrolments,supernumerary pupils,available places\n", "2017:(199, 4):approved enrolments,actual enrolments,supernumerary pupils,available places\n" ] } ], "source": [ "for year,df in dfs.items():\n", " print(f\"{year}:{df.shape}:{','.join(df.keys())}\")" ] }, { "cell_type": "code", "execution_count": 178, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T11:28:49.631140Z", "start_time": "2018-06-07T11:28:49.624851Z" } }, "outputs": [ { "data": { "text/plain": [ "Counter({'actual enrolments': 2,\n", " 'approved admissions': 1,\n", " 'approved enrolments': 7,\n", " 'available places': 8,\n", " 'supernumerary pupils': 2})" ] }, "execution_count": 178, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Counter([_ for df in dfs.values() for _ in df.keys()])" ] }, { "cell_type": "code", "execution_count": 179, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T11:28:59.421960Z", "start_time": "2018-06-07T11:28:59.417040Z" } }, "outputs": [ { "data": { "text/plain": [ "approved enrolments float64\n", "actual enrolments float64\n", "supernumerary pupils float64\n", "available places float64\n", "dtype: object" ] }, "execution_count": 179, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfs[2017].dtypes" ] }, { "cell_type": "code", "execution_count": 186, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T11:30:08.689101Z", "start_time": "2018-06-07T11:30:08.678874Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
approved enrolmentsavailable places
2010159503.017780.0
2011159793.019473.0
2012158906.020256.0
2013156996.019599.0
20140.021151.0
2015153916.020186.0
2016154131.020946.0
2017154098.021022.0
\n", "
" ], "text/plain": [ " approved enrolments available places\n", "2010 159503.0 17780.0\n", "2011 159793.0 19473.0\n", "2012 158906.0 20256.0\n", "2013 156996.0 19599.0\n", "2014 0.0 21151.0\n", "2015 153916.0 20186.0\n", "2016 154131.0 20946.0\n", "2017 154098.0 21022.0" ] }, "execution_count": 186, "metadata": {}, "output_type": "execute_result" } ], "source": [ "available.sum().ix[['approved enrolments','available places']].T" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2018-06-07T11:22:55.956810Z", "start_time": "2018-06-07T11:22:55.826546Z" } }, "source": [ "![](img/starman.png)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2018-06-08T11:43:11.883408Z", "start_time": "2018-06-08T11:43:11.072285Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/andrew.bolster/anaconda3/lib/python3.6/site-packages/ipykernel/__main__.py:29: DeprecationWarning: \n", ".ix is deprecated. Please use\n", ".loc for label based indexing or\n", ".iloc for positional indexing\n", "\n", "See the documentation here:\n", "http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Got fsm data for 2009\n", "Got fsm data for 2010\n", "Got fsm data for 2011\n", "Got fsm data for 2012\n", "Got fsm data for 2013\n", "Got fsm data for 2014\n", "Got fsm data for 2015\n", "Got fsm data for 2016\n", "Got fsm data for 2017\n" ] } ], "source": [ "from collections import defaultdict\n", "import numpy as np\n", "from pathlib import Path\n", "import pandas as pd\n", "\n", "## Initialisation and re-walking already extracted\n", "## Datasets.\n", "\n", "year_files = defaultdict(list)\n", "dest = Path('./data/education-ni/')\n", "for year_p in dest.iterdir():\n", " try:\n", " year=int(year_p.parts[-1])\n", " for file in year_p.iterdir():\n", " year_files[year].append(file.parts[-1])\n", " except ValueError:\n", " pass\n", " \n", "year_files = dict(sorted(year_files.items()))\n", "year_files\n", "\n", "def parse_fsm_table(xls):\n", " join_n_strip_n_lower = lambda l: ' '.join(l).strip().lower()\n", " strip_n_lower = lambda s: s.strip().lower()\n", " unyearify = lambda s: int(s.replace('year ',''))\n", " \n", " if 'free school meals' in xls.sheet_names:\n", " df = pd.read_excel(xls, 'free school meals', header=None, skip_footer=5)\n", " h_range = 2 if isinstance(df.ix[3,0], int) else 3\n", " try:\n", " df.columns=df.ix[3].fillna('').apply(strip_n_lower).values\n", " df = df.drop(df.index[0:h_range+1]).reset_index(drop=True)\n", " df.dropna(how='all', inplace=True, axis=0)\n", " df['de ref'] = df['de ref'].astype(int)\n", " df.drop('schoolname',axis=1, inplace=True)\n", " df.drop('free school meals', axis=1, inplace=True)\n", " df.set_index('de ref', inplace=True)\n", " df.replace('#',pd.np.nan, inplace=True) # # = Undisclosed\n", " df.replace('*',2.0, inplace=True) # * == < 5\n", " df.replace('!',1, inplace=True) # ! avoid identification, so it's prob one or two\n", " \n", " df=df.astype(float)\n", " except TypeError as e:\n", " print(e)\n", " else:\n", " df=None\n", " return df\n", "\n", "dfs = {}\n", "for year, files in year_files.items():\n", " for file in files:\n", " if 'post' in file:\n", " xls = pd.ExcelFile(f'data/education-ni/{year}/{file}')\n", " df = parse_fsm_table(xls)\n", " if df is not None:\n", " print(f'Got fsm data for {year}')\n", " dfs[year]=df\n", "fsm = pd.Panel(dfs)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2018-06-08T11:41:44.452740Z", "start_time": "2018-06-08T11:41:44.413255Z" } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
200920102011201220132014201520162017
de refminor
1210014pupils672.000000688.000000703.000000708.000000704.000000697.000000704.000000696.000000691.000000
fsme132.000000153.000000170.000000183.000000171.000000241.000000277.000000301.000000310.000000
free school meals0.1964290.2223840.2418210.2584750.2428980.3457680.3934660.4324710.448625
1210015pupils647.000000650.000000649.000000666.000000709.000000737.000000744.000000728.000000740.000000
fsme127.000000141.000000157.000000177.000000173.000000270.000000312.000000332.000000326.000000
free school meals0.1962910.2169230.2419110.2657660.2440060.3663500.4193550.4560440.440541
1210021pupils963.000000929.000000899.000000930.000000916.000000884.000000910.000000954.000000946.000000
fsme376.000000359.000000367.000000379.000000368.000000452.000000522.000000572.000000580.000000
free school meals0.3904470.3864370.4082310.4075270.4017470.5113120.5736260.5995810.613108
1210022pupils907.000000932.000000913.000000930.000000943.000000969.000000968.000000991.000000997.000000
fsme363.000000392.000000384.000000390.000000380.000000522.000000548.000000575.000000588.000000
free school meals0.4002210.4206010.4205910.4193550.4029690.5387000.5661160.5802220.589769
1230053pupils1547.0000001530.0000001530.0000001521.0000001516.0000001518.0000001474.0000001420.0000001435.000000
fsme546.000000551.000000578.000000618.000000563.000000821.000000834.000000847.000000860.000000
free school meals0.3529410.3601310.3777780.4063120.3713720.5408430.5658070.5964790.599303
1230104pupils438.000000429.000000384.000000367.000000423.000000433.000000446.000000452.000000450.000000
fsme184.000000188.000000184.000000192.000000217.000000337.000000333.000000323.000000315.000000
free school meals0.4200910.4382280.4791670.5231610.5130020.7782910.7466370.7146020.700000
1230130pupils468.000000440.000000406.000000388.000000352.000000316.000000273.000000240.000000243.000000
fsme272.000000244.000000239.000000214.000000183.000000217.000000187.000000171.000000166.000000
free school meals0.5811970.5545450.5886700.5515460.5198860.6867090.6849820.7125000.683128
1230146pupils508.000000513.000000528.000000529.000000490.000000490.000000498.000000500.000000525.000000
fsme242.000000237.000000245.000000286.000000236.000000270.000000317.000000326.000000329.000000
free school meals0.4763780.4619880.4640150.5406430.4816330.5510200.6365460.6520000.626667
1230155pupils1011.0000001027.0000001043.0000001069.0000001078.0000001061.0000001070.0000001059.0000001022.000000
fsme327.000000349.000000401.000000417.000000409.000000539.000000584.000000591.000000559.000000
free school meals0.3234420.3398250.3844680.3900840.3794060.5080110.5457940.5580740.546967
1230182pupils1116.0000001088.0000001088.0000001098.0000001093.0000001116.0000001117.0000001104.000000958.000000
fsme348.000000348.000000359.000000386.000000345.000000535.000000562.000000588.000000508.000000
free school meals0.3118280.3198530.3299630.3515480.3156450.4793910.5031330.5326090.530271
.................................
5410013pupils1311.0000001325.0000001324.0000001331.0000001327.0000001324.0000001320.0000001312.0000001301.000000
fsme38.00000046.00000048.00000056.00000048.00000067.00000076.00000083.00000086.000000
free school meals0.0289860.0347170.0362540.0420740.0361720.0506040.0575760.0632620.066103
5410057pupils432.000000438.000000455.000000457.000000451.000000453.000000455.000000451.000000455.000000
fsme20.00000027.00000024.00000021.00000025.00000037.00000038.00000041.00000050.000000
free school meals0.0462960.0616440.0527470.0459520.0554320.0816780.0835160.0909090.109890
5410067pupils789.000000788.000000780.000000778.000000798.000000791.000000788.000000778.000000744.000000
fsme27.00000035.00000031.00000034.00000037.00000046.00000058.00000073.00000064.000000
free school meals0.0342210.0444160.0397440.0437020.0463660.0581540.0736040.0938300.086022
5420045pupils586.000000587.000000585.000000587.000000586.000000591.000000588.000000564.000000564.000000
fsme76.00000079.00000071.00000085.00000073.000000135.000000131.000000131.000000126.000000
free school meals0.1296930.1345830.1213680.1448040.1245730.2284260.2227890.2322700.223404
5420059pupils880.000000887.000000894.000000907.000000900.000000911.000000902.000000882.000000885.000000
fsme77.00000088.00000085.00000087.00000084.000000141.000000155.000000149.000000125.000000
free school meals0.0875000.0992110.0950780.0959210.0933330.1547750.1718400.1689340.141243
5420060pupils861.000000861.000000864.000000861.000000858.000000845.000000853.000000854.000000853.000000
fsme71.00000077.00000080.00000084.00000081.000000129.000000123.000000124.000000116.000000
free school meals0.0824620.0894310.0925930.0975610.0944060.1526630.1441970.1451990.135991
5420062pupils919.000000940.000000942.000000920.000000900.000000904.000000897.000000903.000000885.000000
fsme57.00000070.00000072.00000082.00000083.000000135.000000132.000000140.000000134.000000
free school meals0.0620240.0744680.0764330.0891300.0922220.1493360.1471570.1550390.151412
5420073pupils527.000000555.000000579.000000604.000000635.000000678.000000707.000000709.000000686.000000
fsme82.00000081.00000089.00000095.00000088.000000155.000000170.000000195.000000168.000000
free school meals0.1555980.1459460.1537130.1572850.1385830.2286140.2404530.2750350.244898
5420076pupils836.000000846.000000845.000000849.000000855.000000853.000000854.000000852.000000843.000000
fsme56.00000068.00000079.00000078.00000074.000000122.000000131.000000130.000000131.000000
free school meals0.0669860.0803780.0934910.0918730.0865500.1430250.1533960.1525820.155397
5420260pupils646.000000658.000000665.000000652.000000653.000000660.000000650.000000652.000000638.000000
fsme29.00000031.00000031.00000031.00000028.00000058.00000064.00000062.00000061.000000
free school meals0.0448920.0471120.0466170.0475460.0428790.0878790.0984620.0950920.095611
\n", "

547 rows × 9 columns

\n", "
" ], "text/plain": [ " 2009 2010 2011 2012 \\\n", "de ref minor \n", "1210014 pupils 672.000000 688.000000 703.000000 708.000000 \n", " fsme 132.000000 153.000000 170.000000 183.000000 \n", " free school meals 0.196429 0.222384 0.241821 0.258475 \n", "1210015 pupils 647.000000 650.000000 649.000000 666.000000 \n", " fsme 127.000000 141.000000 157.000000 177.000000 \n", " free school meals 0.196291 0.216923 0.241911 0.265766 \n", "1210021 pupils 963.000000 929.000000 899.000000 930.000000 \n", " fsme 376.000000 359.000000 367.000000 379.000000 \n", " free school meals 0.390447 0.386437 0.408231 0.407527 \n", "1210022 pupils 907.000000 932.000000 913.000000 930.000000 \n", " fsme 363.000000 392.000000 384.000000 390.000000 \n", " free school meals 0.400221 0.420601 0.420591 0.419355 \n", "1230053 pupils 1547.000000 1530.000000 1530.000000 1521.000000 \n", " fsme 546.000000 551.000000 578.000000 618.000000 \n", " free school meals 0.352941 0.360131 0.377778 0.406312 \n", "1230104 pupils 438.000000 429.000000 384.000000 367.000000 \n", " fsme 184.000000 188.000000 184.000000 192.000000 \n", " free school meals 0.420091 0.438228 0.479167 0.523161 \n", "1230130 pupils 468.000000 440.000000 406.000000 388.000000 \n", " fsme 272.000000 244.000000 239.000000 214.000000 \n", " free school meals 0.581197 0.554545 0.588670 0.551546 \n", "1230146 pupils 508.000000 513.000000 528.000000 529.000000 \n", " fsme 242.000000 237.000000 245.000000 286.000000 \n", " free school meals 0.476378 0.461988 0.464015 0.540643 \n", "1230155 pupils 1011.000000 1027.000000 1043.000000 1069.000000 \n", " fsme 327.000000 349.000000 401.000000 417.000000 \n", " free school meals 0.323442 0.339825 0.384468 0.390084 \n", "1230182 pupils 1116.000000 1088.000000 1088.000000 1098.000000 \n", " fsme 348.000000 348.000000 359.000000 386.000000 \n", " free school meals 0.311828 0.319853 0.329963 0.351548 \n", "... ... ... ... ... \n", "5410013 pupils 1311.000000 1325.000000 1324.000000 1331.000000 \n", " fsme 38.000000 46.000000 48.000000 56.000000 \n", " free school meals 0.028986 0.034717 0.036254 0.042074 \n", "5410057 pupils 432.000000 438.000000 455.000000 457.000000 \n", " fsme 20.000000 27.000000 24.000000 21.000000 \n", " free school meals 0.046296 0.061644 0.052747 0.045952 \n", "5410067 pupils 789.000000 788.000000 780.000000 778.000000 \n", " fsme 27.000000 35.000000 31.000000 34.000000 \n", " free school meals 0.034221 0.044416 0.039744 0.043702 \n", "5420045 pupils 586.000000 587.000000 585.000000 587.000000 \n", " fsme 76.000000 79.000000 71.000000 85.000000 \n", " free school meals 0.129693 0.134583 0.121368 0.144804 \n", "5420059 pupils 880.000000 887.000000 894.000000 907.000000 \n", " fsme 77.000000 88.000000 85.000000 87.000000 \n", " free school meals 0.087500 0.099211 0.095078 0.095921 \n", "5420060 pupils 861.000000 861.000000 864.000000 861.000000 \n", " fsme 71.000000 77.000000 80.000000 84.000000 \n", " free school meals 0.082462 0.089431 0.092593 0.097561 \n", "5420062 pupils 919.000000 940.000000 942.000000 920.000000 \n", " fsme 57.000000 70.000000 72.000000 82.000000 \n", " free school meals 0.062024 0.074468 0.076433 0.089130 \n", "5420073 pupils 527.000000 555.000000 579.000000 604.000000 \n", " fsme 82.000000 81.000000 89.000000 95.000000 \n", " free school meals 0.155598 0.145946 0.153713 0.157285 \n", "5420076 pupils 836.000000 846.000000 845.000000 849.000000 \n", " fsme 56.000000 68.000000 79.000000 78.000000 \n", " free school meals 0.066986 0.080378 0.093491 0.091873 \n", "5420260 pupils 646.000000 658.000000 665.000000 652.000000 \n", " fsme 29.000000 31.000000 31.000000 31.000000 \n", " free school meals 0.044892 0.047112 0.046617 0.047546 \n", "\n", " 2013 2014 2015 2016 \\\n", "de ref minor \n", "1210014 pupils 704.000000 697.000000 704.000000 696.000000 \n", " fsme 171.000000 241.000000 277.000000 301.000000 \n", " free school meals 0.242898 0.345768 0.393466 0.432471 \n", "1210015 pupils 709.000000 737.000000 744.000000 728.000000 \n", " fsme 173.000000 270.000000 312.000000 332.000000 \n", " free school meals 0.244006 0.366350 0.419355 0.456044 \n", "1210021 pupils 916.000000 884.000000 910.000000 954.000000 \n", " fsme 368.000000 452.000000 522.000000 572.000000 \n", " free school meals 0.401747 0.511312 0.573626 0.599581 \n", "1210022 pupils 943.000000 969.000000 968.000000 991.000000 \n", " fsme 380.000000 522.000000 548.000000 575.000000 \n", " free school meals 0.402969 0.538700 0.566116 0.580222 \n", "1230053 pupils 1516.000000 1518.000000 1474.000000 1420.000000 \n", " fsme 563.000000 821.000000 834.000000 847.000000 \n", " free school meals 0.371372 0.540843 0.565807 0.596479 \n", "1230104 pupils 423.000000 433.000000 446.000000 452.000000 \n", " fsme 217.000000 337.000000 333.000000 323.000000 \n", " free school meals 0.513002 0.778291 0.746637 0.714602 \n", "1230130 pupils 352.000000 316.000000 273.000000 240.000000 \n", " fsme 183.000000 217.000000 187.000000 171.000000 \n", " free school meals 0.519886 0.686709 0.684982 0.712500 \n", "1230146 pupils 490.000000 490.000000 498.000000 500.000000 \n", " fsme 236.000000 270.000000 317.000000 326.000000 \n", " free school meals 0.481633 0.551020 0.636546 0.652000 \n", "1230155 pupils 1078.000000 1061.000000 1070.000000 1059.000000 \n", " fsme 409.000000 539.000000 584.000000 591.000000 \n", " free school meals 0.379406 0.508011 0.545794 0.558074 \n", "1230182 pupils 1093.000000 1116.000000 1117.000000 1104.000000 \n", " fsme 345.000000 535.000000 562.000000 588.000000 \n", " free school meals 0.315645 0.479391 0.503133 0.532609 \n", "... ... ... ... ... \n", "5410013 pupils 1327.000000 1324.000000 1320.000000 1312.000000 \n", " fsme 48.000000 67.000000 76.000000 83.000000 \n", " free school meals 0.036172 0.050604 0.057576 0.063262 \n", "5410057 pupils 451.000000 453.000000 455.000000 451.000000 \n", " fsme 25.000000 37.000000 38.000000 41.000000 \n", " free school meals 0.055432 0.081678 0.083516 0.090909 \n", "5410067 pupils 798.000000 791.000000 788.000000 778.000000 \n", " fsme 37.000000 46.000000 58.000000 73.000000 \n", " free school meals 0.046366 0.058154 0.073604 0.093830 \n", "5420045 pupils 586.000000 591.000000 588.000000 564.000000 \n", " fsme 73.000000 135.000000 131.000000 131.000000 \n", " free school meals 0.124573 0.228426 0.222789 0.232270 \n", "5420059 pupils 900.000000 911.000000 902.000000 882.000000 \n", " fsme 84.000000 141.000000 155.000000 149.000000 \n", " free school meals 0.093333 0.154775 0.171840 0.168934 \n", "5420060 pupils 858.000000 845.000000 853.000000 854.000000 \n", " fsme 81.000000 129.000000 123.000000 124.000000 \n", " free school meals 0.094406 0.152663 0.144197 0.145199 \n", "5420062 pupils 900.000000 904.000000 897.000000 903.000000 \n", " fsme 83.000000 135.000000 132.000000 140.000000 \n", " free school meals 0.092222 0.149336 0.147157 0.155039 \n", "5420073 pupils 635.000000 678.000000 707.000000 709.000000 \n", " fsme 88.000000 155.000000 170.000000 195.000000 \n", " free school meals 0.138583 0.228614 0.240453 0.275035 \n", "5420076 pupils 855.000000 853.000000 854.000000 852.000000 \n", " fsme 74.000000 122.000000 131.000000 130.000000 \n", " free school meals 0.086550 0.143025 0.153396 0.152582 \n", "5420260 pupils 653.000000 660.000000 650.000000 652.000000 \n", " fsme 28.000000 58.000000 64.000000 62.000000 \n", " free school meals 0.042879 0.087879 0.098462 0.095092 \n", "\n", " 2017 \n", "de ref minor \n", "1210014 pupils 691.000000 \n", " fsme 310.000000 \n", " free school meals 0.448625 \n", "1210015 pupils 740.000000 \n", " fsme 326.000000 \n", " free school meals 0.440541 \n", "1210021 pupils 946.000000 \n", " fsme 580.000000 \n", " free school meals 0.613108 \n", "1210022 pupils 997.000000 \n", " fsme 588.000000 \n", " free school meals 0.589769 \n", "1230053 pupils 1435.000000 \n", " fsme 860.000000 \n", " free school meals 0.599303 \n", "1230104 pupils 450.000000 \n", " fsme 315.000000 \n", " free school meals 0.700000 \n", "1230130 pupils 243.000000 \n", " fsme 166.000000 \n", " free school meals 0.683128 \n", "1230146 pupils 525.000000 \n", " fsme 329.000000 \n", " free school meals 0.626667 \n", "1230155 pupils 1022.000000 \n", " fsme 559.000000 \n", " free school meals 0.546967 \n", "1230182 pupils 958.000000 \n", " fsme 508.000000 \n", " free school meals 0.530271 \n", "... ... \n", "5410013 pupils 1301.000000 \n", " fsme 86.000000 \n", " free school meals 0.066103 \n", "5410057 pupils 455.000000 \n", " fsme 50.000000 \n", " free school meals 0.109890 \n", "5410067 pupils 744.000000 \n", " fsme 64.000000 \n", " free school meals 0.086022 \n", "5420045 pupils 564.000000 \n", " fsme 126.000000 \n", " free school meals 0.223404 \n", "5420059 pupils 885.000000 \n", " fsme 125.000000 \n", " free school meals 0.141243 \n", "5420060 pupils 853.000000 \n", " fsme 116.000000 \n", " free school meals 0.135991 \n", "5420062 pupils 885.000000 \n", " fsme 134.000000 \n", " free school meals 0.151412 \n", "5420073 pupils 686.000000 \n", " fsme 168.000000 \n", " free school meals 0.244898 \n", "5420076 pupils 843.000000 \n", " fsme 131.000000 \n", " free school meals 0.155397 \n", "5420260 pupils 638.000000 \n", " fsme 61.000000 \n", " free school meals 0.095611 \n", "\n", "[547 rows x 9 columns]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fsm.to_frame()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## New heading" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.972386Z", "start_time": "2018-06-07T10:36:11.946Z" } }, "outputs": [], "source": [ "dfs[2016]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.973678Z", "start_time": "2018-06-07T10:36:11.949Z" } }, "outputs": [], "source": [ "Counter(reference[:,:,'school management type'].values.ravel('k'))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.974946Z", "start_time": "2018-06-07T10:36:11.954Z" } }, "outputs": [], "source": [ "reference[:,:,'school management type'].apply(Counter, axis=0)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.975973Z", "start_time": "2018-06-07T10:36:11.960Z" } }, "outputs": [], "source": [ "categories=pd.DataFrame.from_dict({\n", " year: dict(c)\n", " for year,c in reference[:,:,'school management type'].apply(Counter, axis=0).iteritems()\n", "})\n", "categories.plot.bar()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.977774Z", "start_time": "2018-06-07T10:36:11.963Z" } }, "outputs": [], "source": [ "pd.DataFrame.from_dict({\n", " category:\n", " enrolements[:,(reference.minor_xs('school management type')==category).any(axis=1),:].sum().sum()\n", " for category in categories.drop(np.nan).index\n", "}).plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.983348Z", "start_time": "2018-06-07T10:36:11.968Z" } }, "outputs": [], "source": [ "enrolements.sum().sum().plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.989380Z", "start_time": "2018-06-07T10:36:11.971Z" } }, "outputs": [], "source": [ "\n", "Counter(reference.minor_xs('town').values.ravel('k'))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:11.995484Z", "start_time": "2018-06-07T10:36:11.975Z" } }, "outputs": [], "source": [ "gazetteer = \"45341066-1998-4116-b234-6223e7e19397\"\n", "gztr = pd.DataFrame.from_records(dataset_generator(gazetteer))\n", "gztr" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:12.002026Z", "start_time": "2018-06-07T10:36:11.979Z" } }, "outputs": [], "source": [ "gztr['town'] = gztr['PLACENAME'].str.lower()\n", "town_lookup = gztr.set_index('town')[['X','Y']]\n", "town_lookup" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:12.007460Z", "start_time": "2018-06-07T10:36:11.981Z" } }, "outputs": [], "source": [ "for town, n in Counter(reference.minor_xs('town').values.ravel('k')).items():\n", " if town not in town_lookup.index:\n", " print(f\"{town}:{n}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:12.013210Z", "start_time": "2018-06-07T10:36:11.985Z" } }, "outputs": [], "source": [ "from shapely.geometry import Point\n", "from pyproj import Proj, transform\n", "prj_wgs = Proj(proj='latlong',datum='WGS84')\n", "prj_itm = Proj(init='EPSG:29903')\n", "\n", "def apply_itm_to_wgs(row, e='eastings', n='northings'):\n", " eastings, northings = row[e], row[n]\n", " if eastings is not None and northings is not None: \n", " long,lat = transform(prj_itm, prj_wgs, eastings, northings)\n", " else:\n", " long,lat = None,None\n", " \n", " return pd.Series({'latitude':lat,'longitude':long})\n", "town_lookup = gpd.GeoDataFrame(town_lookup, crs={'init': 'epsg:4326'},\n", " geometry=town_lookup.apply(lambda r: Point(apply_itm_to_wgs(r, e='Y',n='X')), axis=1))\n", "town_lookup.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:12.019400Z", "start_time": "2018-06-07T10:36:11.987Z" } }, "outputs": [], "source": [ "categories = set(reference.minor_xs('town').values.ravel('k'))\n", "df= pd.DataFrame.from_dict({\n", " category:\n", " enrolements[:,(reference.minor_xs('town')==category).any(axis=1),:].sum().sum()\n", " for category in categories\n", "}).T.drop(np.nan)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:12.025399Z", "start_time": "2018-06-07T10:36:11.991Z" } }, "outputs": [], "source": [ "town_stats = gpd.GeoDataFrame(geometry=town_lookup.apply(lambda r: Point(apply_itm_to_wgs(r, e='Y',n='X')), axis=1))\n", "town_stats['mean_enrolment'] = df.mean(axis=1)\n", "town_stats['2017_change'] = (-1+df[2017]/df.mean(axis=1))\n", "town_stats.plot(column='2017_change')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:12.030985Z", "start_time": "2018-06-07T10:36:11.993Z" }, "code_folding": [] }, "outputs": [], "source": [ "constituency_shp = 'http://osni-spatial-ni.opendata.arcgis.com/datasets/563dc2ec3d9943428e3fe68966d40deb_3.zip'\n", "urllib.request.urlretrieve(constituency_shp, 'data/constituency.zip')\n", "import zipfile\n", "with zipfile.ZipFile('data/constituency.zip','r') as z:\n", " z.extractall('data/')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-06-07T10:36:12.036793Z", "start_time": "2018-06-07T10:36:11.997Z" } }, "outputs": [], "source": [ "import geopandas as gpd\n", "df = gpd.GeoDataFrame.from_file('data/OSNI_Open_Data_Largescale_Boundaries__Parliamentary_Constituencies_2008.shp')\n", "df" ] } ], "metadata": { "kernelspec": { "display_name": "Python [conda root]", "language": "python", "name": "conda-root-py" }, "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.6.4" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }