# Add all sorts of data to topojson file to display in D3 map
import pandas as pd
import numpy as np
import pickle
#################################
# HISTORISCHE VERKIEZINGSDATA
#################################
verkiezingen = pickle.load(open("geodata/Verkiezingen/input/verkiezingenBelgie_backup.p","rb"))
# pickle.dump(verkiezingen,open("geodata/Verkiezingen/input/verkiezingenBelgie.p","wb"))

# Change errors
verkiezingen.Stemmen = verkiezingen.Stemmen.astype(str)
verkiezingen.Stemmen = verkiezingen.Stemmen.apply(lambda x: x.split('.')[0])
verkiezingen.Stemmen = verkiezingen.Stemmen.apply(lambda x: x.split('number:')[1] if len(x.split('number:'))>1 else x)
verkiezingen.Stemmen = verkiezingen.Stemmen.astype(float)

verkiezingen.Partij = verkiezingen.Partij.astype(str)
verkiezingen.Partij = verkiezingen.Partij.apply(lambda x: x.split('text:')[1] if len(x.split('text:'))>1 else x)
verkiezingen.Partij = verkiezingen.Partij.apply(lambda x: x[1:] if x[0] == "'" else x)
verkiezingen.Partij = verkiezingen.Partij.apply(lambda x: x[:-1] if x[-1] == "'" else x)
verkiezingen.Partij = verkiezingen.Partij.apply(lambda x: x.replace('\\n-\\n',"#"))

verkiezingen.Plaats = verkiezingen.Plaats.astype(str)
verkiezingen.Plaats = verkiezingen.Plaats.apply(lambda x: x.split('text:')[1] if len(x.split('text:'))>1 else x)
verkiezingen.Plaats = verkiezingen.Plaats.apply(lambda x: x[1:] if x[0] == "'" else x)
verkiezingen.Plaats = verkiezingen.Plaats.apply(lambda x: x[:-1] if x[-1] == "'" else x)
verkiezingen.Plaats = verkiezingen.Plaats.apply(lambda x: x.replace('\\n-\\n',"#"))
verkiezingen.Plaats = verkiezingen.Plaats.apply(lambda x: x.split('#')[1] if len(x.split('Canton Spécial'))>1 else x)
verkiezingen.Plaats = verkiezingen.Plaats.apply(lambda x: x.split('#')[1] if len(x.split('Spécial:'))>1 else x)
verkiezingen.Plaats = verkiezingen.Plaats.apply(lambda x: x.replace("BZ","Speciaal: BuZa "))
verkiezingen.Plaats = verkiezingen.Plaats.apply(lambda x: x.replace('BzAntwerpen',"Speciaal: BuZa Antwerpen"))
verkiezingen.Plaats = verkiezingen.Plaats.apply(lambda x: x.replace("Oost-Vlaandren","Oost-Vlaanderen"))
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("11002","Antwerpen")

# Unicode issues
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Ãª","ê")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Ã¢","â")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Ã©","é")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Ã¨","è")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Ã\x89","É")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Ã«","ë")

verkiezingen.Partij = verkiezingen.Partij.str.replace("Ãª","ê")
verkiezingen.Partij = verkiezingen.Partij.str.replace("Ã¢","â")
verkiezingen.Partij = verkiezingen.Partij.str.replace("Ã©","é")
verkiezingen.Partij = verkiezingen.Partij.str.replace("Ã¨","è")
verkiezingen.Partij = verkiezingen.Partij.str.replace("Ã\x89","É")
verkiezingen.Partij = verkiezingen.Partij.str.replace("Ã«","ë")

verkiezingen = verkiezingen[verkiezingen.Type != "Kieskringen"]

# ~df.countries.isin(countries)
a = verkiezingen[(verkiezingen.Type == "Kieskring") & (~verkiezingen.Datum.isin(["10-06-2007","13-06-2010","25-05-2014"]))].Type.str.replace("Kieskring","Arrondissement")
verkiezingen.loc[a.index, "Type"] = a

verkiezingen.Type = verkiezingen.Type.str.replace("Provincie","Kieskring")
verkiezingen.Type = verkiezingen.Type.str.replace("Provinciale","")
verkiezingen.Type = verkiezingen.Type.str.replace("(","")
verkiezingen.Type = verkiezingen.Type.str.replace(")","")
verkiezingen.Type = verkiezingen.Type.str.replace("Kieskring ","Kieskring")

# Kieskringen nettoyage
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Brabant Wallon","Waals-Brabant")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Liège","Luik")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Liége","Luik")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Namur","Namen")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Luxembourg","Luxemburg")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Hainaut","Henegouwen")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Leuze-en-Henegouwen","Leuze-en-Hainaut")

# Arrondissementen nettoyage
verkiezingen.Plaats = verkiezingen.Plaats.str.replace(" - ","-")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace(" -","-")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("  -  ","-")

# Kantons nettoyage
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Speciaal Kanton:","Speciaal:")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace("Alost#Aalst","Aalst")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Anvers#Antwerpen','Antwerpen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Arlon#Aarlen','Aarlen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Ath#Aat','Aat')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Audenarde#Oudenaarde','Oudenaarde')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Bastogne#Bastenaken','Bastenaken')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Beveren#Beveren-Waas','Beveren')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Beveren-Waas','Beveren')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Bruges#Brugge','Brugge')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Bruxelles#Brussel','Brussel')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Dixmude#Diksmuide','Diksmuide')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Enghien#Edingen','Edingen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Etalle#Étalle','Etalle')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Flobecq#Vloesberg','Vloesberg')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Fontaine-lEvêque',"Fontaine-l'Evêque")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('"Fontaine-l\'Evêque"',"Fontaine-l'Evêque")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Fourons#Voeren','Voeren')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Frasnes-lez-Anvaing','Frasnes-Lez-Anvaing')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Furnes#Veurne','Veurne')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Gand#Gent','Gent')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Jodoigne#Geldenaken','Geldenaken')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Ixelles#Elsene','Elsene')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Gembloux-sur-Orneau','Gembloux')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Genappe#Genepiën','Genepiën')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Grammont#Geraardsbergen','Geraardsbergen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Glabbeek-Zuurbemde','Glabbeek')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Hal#Halle','Halle')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Hannut#Hannuit','Hannuit')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Herck-la-Ville#Herk-de-Stad','Herk-de-Stad')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Hollogne aux Pierres','Grâce-Hollogne')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Huy#Hoei','Hoei')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Jehay-Bodegnee','Hoei') # Hoort bij Kanton Hoei
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Jodoigne#Geldenaken','Geldenaken')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Lessines#Lessen','Lessen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Lierre#Lier','Lier')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Limbourg#Limburg','Limburg')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Looz#Borgloon','Borgloon')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Louvain#Leuven','Leuven')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Luik#Luik','Luik')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Étalle','Etalle')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Léau#Zoutleeuw','Zoutleeuw')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Malines#Mechelen','Mechelen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Mechelen a/d Maas','Maasmechelen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Menin#Menen','Menen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Messines#Mesen','Mesen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Mons#Bergen','Bergen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Molenbeek-Saint-Jean#Sint-Jans-Molenbeek','Sint-Jans-Molenbeek')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Mouscron#Moeskroen','Moeskroen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Namen#Namen','Namen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Nederbrakel','Brakel')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Nieuport#Nieuwpoort','Nieuwpoort')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Nivelles#Nijvel','Nijvel')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Ostende#Oostende','Oostende')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Perwez#Perwijs','Perwijs')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Pâturages','Dour')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Renaix#Ronse','Ronse')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Rhode-Saint-Genèse#Sint-Genesius-Rode','Sint-Genesius-Rode')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Roesbrugge-Haringe','Poperinge')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Roeulx','Le Roeulx')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Roulers#Roeselare','Roeselare')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Saint-Gilles#Sint-Gillis','Sint-Gillis')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Saint-Josse-Ten-Noode#Sint-Joost-Ten-Node','Sint-Joost-Ten-Node')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Saint-Josse-ten-Noode#Sint-Joost-Ten-Node','Sint-Joost-Ten-Node')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Sint-Joost-ten-Node','Sint-Joost-Ten-Node')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Saint-Nicolas#Sint-Niklaas','Sint-Niklaas')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Saint-Trond#Sint-Truiden','Sint-Truiden')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Saint-Vith#Sankt-Vith','Sankt-Vith')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Saint-Vith','Sankt-Vith')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Schaerbeek#Schaarbeek','Schaarbeek')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Soignies#Zinnik','Zinnik')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Tamise#Temse','Temse')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Termonde#Dendermonde','Dendermonde')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Tirlemont#Tienen','Tienen')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Tongres#Tongeren','Tongeren')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Tournai#Doornik','Doornik')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Uccle#Ukkel','Ukkel')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Vilvorde#Vilvoorde','Vilvoorde')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Visé#Wezet','Wezet')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Waremme#Borgworm','Borgworm')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Wavre#Waver','Waver')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Ypres#Ieper','Ieper')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Bassenge#Bitsingen',"Bitsingen")
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Comines-Warneton#Komen-Waasten','Komen-Waasten')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Courtrai#Kortrijk','Kortrijk')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Arlon-Marche-en-Famenne-Bastogne','Aarlen-Marche-Bastogne')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Aarlen-Marche-en-Famenne-Bastogne-Neufchâteau-Virton','Aarlen-Marche-Bastogne-Neufchâteau-Virton')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('BHV','Brussel-Halle-Vilvoorde')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Gembloers','Gembloux')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Le Le Roeulx','Le Roeulx')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Steenput','Estaimpuis')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Zichem-Zussen-Bolder','Zichen-Zussen-Bolder')
verkiezingen.Plaats = verkiezingen.Plaats.str.replace('Tournai-Ath-Moucron','Tournai-Ath-Mouscron')

# Partijen
verkiezingen.Partij = verkiezingen.Partij.str.replace('cdH','CDH')
verkiezingen.Partij = verkiezingen.Partij.str.replace('CD&V;','CD&V')
verkiezingen.Partij = verkiezingen.Partij.str.replace('OpenVld','Open Vld')
verkiezingen.Partij = verkiezingen.Partij.str.replace('open vld','Open Vld')
verkiezingen.Partij = verkiezingen.Partij.str.replace('RLiège','Retour à Liège')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Parti Liberale/Liberale ','Liberal/Liberaal')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Christ. Werklieden/Ouvri','Christelijke Werklieden')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Diss. Kath.','Diss. Kath.')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Dissid Cath','Diss. Kath.')
verkiezingen.Partij = verkiezingen.Partij.str.replace('autres/andere','Autres/Andere')
verkiezingen.Partij = verkiezingen.Partij.str.replace('CARTEL','Cartel Lib/Soc')
verkiezingen.Partij = verkiezingen.Partij.str.replace('CARTEL LIB/s','Cartel Lib/Soc')
verkiezingen.Partij = verkiezingen.Partij.str.replace('CARTEL LIB/ soc','Cartel Lib/Soc')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Cartel Lib/Soc LIB/ soc','Cartel Lib/Soc')
verkiezingen.Partij = verkiezingen.Partij.str.replace("Cartel Lib/Soc LIB/s",'Cartel Lib/Soc')
verkiezingen.Partij = verkiezingen.Partij.str.replace('CD&V; NVA','CD&V/N-VA')
verkiezingen.Partij = verkiezingen.Partij.str.replace('CD&V NVA','CD&V/N-VA')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Front Wallon des Travail','Front Wallon')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Rassemblement national','Rass. National')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Rassemblement Social Chr','Rass. Soc. Chr.')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Middenstand/Classes Moye','Middenstand')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Christelijke Vlaamse Vol','Chr. Vl. Volksunie')
verkiezingen.Partij = verkiezingen.Partij.str.replace('PARTI PATRIOTIQUE BELGE','Parti Patr. Belge')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Middenstand/Classes Moye','Middenstand')
verkiezingen.Partij = verkiezingen.Partij.str.replace('commercants/handelaars','Comm./Hand.')
verkiezingen.Partij = verkiezingen.Partij.str.replace('commercants/handelaars2','Comm./Hand.')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Classe moy/Middenklasse','Middenstand')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Anc. Combat./Oudstrijder','Anc. Combat./Oudstr.')
verkiezingen.Partij = verkiezingen.Partij.apply(lambda x: "BSP/PSB" if x == "BSP" else x)
verkiezingen.Partij = verkiezingen.Partij.apply(lambda x: "BSP/PSB" if x == "PSB-BSP" else x)
verkiezingen.Partij = verkiezingen.Partij.apply(lambda x: "BSP/PSB" if x == "BSP" else x)
verkiezingen.Partij = verkiezingen.Partij.apply(lambda x: "BWP/POB" if x == "Social" else x)
verkiezingen.Partij = verkiezingen.Partij.str.replace("Socialistische Partij/ P","BSP/PSB")
verkiezingen.Partij = verkiezingen.Partij.str.replace('onafh/isolés','Onafh./Isolés')
verkiezingen.Partij = verkiezingen.Partij.str.replace('andere/autres','Autres/Andere')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Parti dUnite Wallonne',"Parti d'Unité")
verkiezingen.Partij = verkiezingen.Partij.str.replace('ancien combattants','Anc. Combat./Oudstr.')
verkiezingen.Partij = verkiezingen.Partij.str.replace('union indépendant','Union Indépendant')
verkiezingen.Partij = verkiezingen.Partij.str.replace('union catholique belge','Cath/Kath')
verkiezingen.Partij = verkiezingen.Partij.str.replace('Cath 2','Cath/Kath')
verkiezingen.Partij = verkiezingen.Partij.str.replace(r"\(.*\)","") # This removes everything between parentheses
verkiezingen.Partij = verkiezingen.Partij.str.replace("(","") 
verkiezingen.Partij = verkiezingen.Partij.str.replace("partisans de daens -daensisten ch","Daensisten")
verkiezingen.Partij = verkiezingen.Partij.str.replace("parti ouvrier belge-belgische werkliedenpartij","BWP/POB")
verkiezingen.Partij = verkiezingen.Partij.str.replace("parti libéral-liberale partij","Liberal/Liberaal")

# Soms 2 data elementen van zelfde partij in 1 regio
verkiezingen = verkiezingen.groupby(["Datum","Type","Plaats","Partij"],as_index=False).sum()

# Fouten in inputdata
# FDF 100% In regio leuven in 31-03-1968
verkiezingen = verkiezingen[verkiezingen.Procent != 100]

pickle.dump(verkiezingen,open("geodata/Verkiezingen/input/verkiezingenBelgie.p","wb"))