{
"cells": [
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"ExecuteTime": {
"end_time": "2019-03-07T02:56:32.521682Z",
"start_time": "2019-03-07T02:56:26.288106Z"
}
},
"outputs": [],
"source": [
"import pandas as pd, numpy as np, json, os\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['bmh',\n",
" 'classic',\n",
" 'dark_background',\n",
" 'fast',\n",
" 'fivethirtyeight',\n",
" 'ggplot',\n",
" 'grayscale',\n",
" 'seaborn-bright',\n",
" 'seaborn-colorblind',\n",
" 'seaborn-dark-palette',\n",
" 'seaborn-dark',\n",
" 'seaborn-darkgrid',\n",
" 'seaborn-deep',\n",
" 'seaborn-muted',\n",
" 'seaborn-notebook',\n",
" 'seaborn-paper',\n",
" 'seaborn-pastel',\n",
" 'seaborn-poster',\n",
" 'seaborn-talk',\n",
" 'seaborn-ticks',\n",
" 'seaborn-white',\n",
" 'seaborn-whitegrid',\n",
" 'seaborn',\n",
" 'Solarize_Light2',\n",
" 'tableau-colorblind10',\n",
" '_classic_test']"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plt.style.use('seaborn-whitegrid')\n",
"plt.style.available"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [],
"source": [
"#!pip install d3IpyPlus\n",
"from d3IpyPlus import ScatterPlot, LinePlot, BarPlot, StackedArea"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [],
"source": [
"#!pip install pyecharts"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [],
"source": [
"m=json.loads(open('ignore/member_timelines.json','r').read())\n",
"members=json.loads(open('ignore/member_simple.json','r').read())"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [],
"source": [
"d=pd.DataFrame(members['deaths'],index=['v']).T"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [],
"source": [
"d['v']=' †'"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [],
"source": [
"s=pd.DataFrame(members['s2'],index=['s']).T\n",
"s=s.join(d)\n",
"s['v']=s['v'].fillna('')\n",
"s['s']=s['s']+s['v']\n",
"s=s[['s']]\n",
"s['w']=s['s'].str.split(' ').str[0].str[0]+s['s'].str.split(' ').str[-1].str[0]"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Part | \n",
"
\n",
" \n",
" \n",
" \n",
" Zofota Severin | 1933-03-28 | \n",
" ⚪️ FSN - Frontul Salvării Naţionale | \n",
"
\n",
" \n",
" Comisel Constanta | 1934-04-30 | \n",
" ⚪️ FSN - Frontul Salvării Naţionale | \n",
"
\n",
" \n",
" Capatina Octavian-Dan | 1948-04-17 | \n",
" 🕊️ PUNR - Partidul Unităţii Naţionale Române | \n",
"
\n",
" \n",
" Bangu Corvin-Laurentiu | Ismeretlen | \n",
" ⚪️ FSN - Frontul Salvării Naţionale | \n",
"
\n",
" \n",
" Rosculet Radu Voicu | 1939-10-24 | \n",
" 📐 PNL - Partidul Naţional Liberal | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Part \n",
"Zofota Severin | 1933-03-28 ⚪️ FSN - Frontul Salvării Naţionale\n",
"Comisel Constanta | 1934-04-30 ⚪️ FSN - Frontul Salvării Naţionale\n",
"Capatina Octavian-Dan | 1948-04-17 🕊️ PUNR - Partidul Unităţii Naţionale Române\n",
"Bangu Corvin-Laurentiu | Ismeretlen ⚪️ FSN - Frontul Salvării Naţionale\n",
"Rosculet Radu Voicu | 1939-10-24 📐 PNL - Partidul Naţional Liberal"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p=pd.DataFrame(members['part'],index=['Part ']).T\n",
"p.head()"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [],
"source": [
"szd_color='#E91C62'"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [],
"source": [
"pcolors=json.loads(open('json/pcolors.json','r').read())\n",
"p['Color']=p['Part '].str.split(' ').str[1].str.strip()\n",
"p['Part ']=p['Part '].str.split('-').str[0].str.strip()\n",
"p=p.join(pd.DataFrame(pcolors,index=['cvalue']).T,on='Color')"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Megye | \n",
"
\n",
" \n",
" \n",
" \n",
" Arama Viorel | 1938-03-10 | \n",
" 🇷🇴 Bákó | \n",
"
\n",
" \n",
" Pop Petru | 1939-03-01 | \n",
" 🇷🇴 Argeș | \n",
"
\n",
" \n",
" Les Ioan | 1947-09-01 | \n",
" 🇷🇴 Szeben | \n",
"
\n",
" \n",
" Carp Mihai | 1956-05-20 | \n",
" 🇷🇴 Bihar | \n",
"
\n",
" \n",
" Craciun Gheorghe | 1954-12-13 | \n",
" 🇷🇴 Olt | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Megye \n",
"Arama Viorel | 1938-03-10 🇷🇴 Bákó\n",
"Pop Petru | 1939-03-01 🇷🇴 Argeș\n",
"Les Ioan | 1947-09-01 🇷🇴 Szeben\n",
"Carp Mihai | 1956-05-20 🇷🇴 Bihar\n",
"Craciun Gheorghe | 1954-12-13 🇷🇴 Olt"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g=pd.DataFrame(members['megye'],index=['Megye ']).T\n",
"g.head()"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [],
"source": [
"def replace_all(text, dic):\n",
" for i in dic:\n",
" text = text.replace(i, dic[i])\n",
" return text"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [],
"source": [
"medals={'🥈':2,'🥇':3,'🥉':1.5,'🏅':1.25,'🚩':1.5}\n",
"medals_none={i:'' for i in medals}\n",
"\n",
"bizotts={'Parlamenti Iroda':2,\n",
" 'Állambiztonság':2,\n",
" 'Állami ügyek':1.5,\n",
" 'Választások':1.5,\n",
" 'Parlament':1.5,\n",
" 'Pénzügy':1.5,\n",
" 'Biztonság':1.5,\n",
" '🇺🇳':2,\n",
" '🇺🇸':1.5,\n",
" '🇫🇷':1.5,\n",
" '🇮🇱':1.5,\n",
" '🇪🇸':1.5,\n",
" '🇮🇹':1.5,\n",
" '🇬🇧':1.5,\n",
" '🏅🔼 Szenátus':2,\n",
" '🏅🔽 Képviselőház':2,\n",
" '🥇🔼 Szenátus':5,\n",
" '🥇🔽 Képviselőház':5,\n",
" '🥈🔼 Szenátus':4,\n",
" '🥈🔽 Képviselőház':4,\n",
" '🥉🔼 Szenátus':3,\n",
" '🥉🔽 Képviselőház':3}"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0 %\n",
"2.9080757262919126 %\n",
"5.816151452583825 %\n",
"8.724227178875738 %\n",
"11.63230290516765 %\n",
"14.540378631459564 %\n",
"17.448454357751476 %\n",
"20.35653008404339 %\n",
"23.2646058103353 %\n",
"26.172681536627213 %\n",
"29.08075726291913 %\n",
"31.98883298921104 %\n",
"34.89690871550295 %\n",
"37.804984441794865 %\n",
"40.71306016808678 %\n",
"43.62113589437869 %\n",
"46.5292116206706 %\n",
"49.43728734696251 %\n",
"52.345363073254426 %\n",
"55.25343879954634 %\n",
"58.16151452583826 %\n",
"61.06959025213017 %\n",
"63.97766597842208 %\n",
"66.88574170471398 %\n",
"69.7938174310059 %\n",
"72.70189315729782 %\n",
"75.60996888358973 %\n",
"78.51804460988164 %\n",
"81.42612033617355 %\n",
"84.33419606246547 %\n",
"87.24227178875738 %\n",
"90.15034751504929 %\n",
"93.0584232413412 %\n",
"95.96649896763311 %\n",
"98.87457469392503 %\n"
]
}
],
"source": [
"data={'Ország':{},'Bizottság':{},'Párt':{},'Megye':{}}\n",
"attention={}\n",
"for k,i in enumerate(m):\n",
" if k%1000==0: print(k/len(m)*100,'%')\n",
" name=i['Simple']\n",
" if i['Típus'] in list(data.keys()):\n",
" csoport=i['Csoportok']\n",
" csoport=replace_all(csoport,medals_none)\n",
" if csoport not in data[i['Típus']]:data[i['Típus']][csoport]={}\n",
" for t in pd.date_range(i['start'],i['end']):\n",
" st=str(t)[:10]\n",
" if st not in data[i['Típus']][csoport]:data[i['Típus']][csoport][st]=set()\n",
" data[i['Típus']][csoport][st].add(name) \n",
" if name not in attention:attention[name]={}\n",
" if st not in attention[name]:attention[name][st]=0\n",
" v=1\n",
" for j in medals:\n",
" if j in i['Csoportok']:\n",
" v*=medals[j]\n",
" for j in bizotts:\n",
" if j in i['Csoportok']:\n",
" v*=bizotts[j]\n",
" attention[name][st]+=v"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [],
"source": [
"df=pd.DataFrame(attention)"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Timedelta('523 days 00:00:00')"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.to_datetime('2019-07-01')-pd.to_datetime('2018-01-24')"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [],
"source": [
"counts=df.count().sort_values(ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Marton Arpad-Francisc | 1955-03-25 10556\n",
"Verestoy Attila | 1954-03-01 10040\n",
"Dumitrescu Cristian-Sorin | 1955-04-24 9711\n",
"Seres Denes | 1953-07-21 9711\n",
"Nicolicea Eugen | 1956-06-06 9704\n",
"Marko Bela | 1951-09-08 9641\n",
"Kerekes Karoly | 1947-12-14 9634\n",
"dtype: int64"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"counts.head(7)"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [],
"source": [
"counts2=df.max().sort_values(ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [],
"source": [
"counts2={}\n",
"for i in df.columns:\n",
" counts2[i]=df[i].last_valid_index()\n",
"counts2=pd.DataFrame(counts2,index=[0]).T[0]"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Dutu Ion | 1942-10-07 2000-07-10\n",
"Berciu Ion | 1940-01-17 2000-11-30\n",
"Otiman Paun-Ion | 1942-05-28 2004-11-30\n",
"Popa Mihaela | 1962-04-16 2016-12-21\n",
"Brezniceanu Alexandru | 1941-06-19 2000-11-30\n",
"Hoara Constantin Emil | 1942-08-22 1996-11-22\n",
"Marko Bela | 1951-09-08 2016-12-21\n",
"Name: 0, dtype: object"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"counts2.head(7)"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [],
"source": [
"min_time=365*6\n",
"min_time1=365*4\n",
"min_dep=2"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [],
"source": [
"de=pd.DataFrame(counts).join(p)\n",
"de=de[de[0]>min_time1]\n",
"dd=de.groupby('Part ').nunique()\n",
"de=de.groupby('Part ').mean()\n",
"de=np.round(de.loc[dd[dd[0]>min_dep].index]/365,1)\n",
"de.columns=['Atlagos regiseg']\n",
"de=de.join(p.set_index('Part ').drop_duplicates())\n",
"dj=de.groupby(['Part ','cvalue']).mean().reset_index().sort_values(by='Atlagos regiseg', ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Atlagos regiseg | \n",
" Color | \n",
" Part | \n",
" cvalue | \n",
"
\n",
" \n",
" Part | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" ✳️ PNTCD - Partidul Naţional Ţărănesc Creştin Democrat | \n",
" 5.3 | \n",
" PNTCD | \n",
" ✳️ PNTCD | \n",
" #04843c | \n",
"
\n",
" \n",
" 🌷 RMDSZ - Romániai Magyar Demokrata Szövetség | \n",
" 10.0 | \n",
" RMDSZ | \n",
" 🌷 RMDSZ | \n",
" green | \n",
"
\n",
" \n",
" 🌹 PDSR - Partidul Democraţiei Sociale din România | \n",
" 5.3 | \n",
" PDSR | \n",
" 🌹 PDSR | \n",
" #dc2c24 | \n",
"
\n",
" \n",
" 🌹 PSD - Partidul Social Democrat | \n",
" 9.0 | \n",
" PSD | \n",
" 🌹 PSD | \n",
" #dc2c24 | \n",
"
\n",
" \n",
" 🌹 PSDR - Partidul Socialist Democratic din România | \n",
" 6.3 | \n",
" PSDR | \n",
" 🌹 PSDR | \n",
" #dc2c24 | \n",
"
\n",
" \n",
" 🌹 PSM - Partidul Socialist al Muncii | \n",
" 4.3 | \n",
" PSM | \n",
" 🌹 PSM | \n",
" #dc2c24 | \n",
"
\n",
" \n",
" 🍀 PER - Partidul Ecologist Român | \n",
" 7.2 | \n",
" PER | \n",
" 🍀 PER | \n",
" #69a54f | \n",
"
\n",
" \n",
" 🍏 PMP - Partidul Mişcarea Populară | \n",
" 8.3 | \n",
" PMP | \n",
" 🍏 PMP | \n",
" #0484cc | \n",
"
\n",
" \n",
" 👤 Independent - Independent | \n",
" 6.4 | \n",
" Independent | \n",
" 👤 Independent | \n",
" #555 | \n",
"
\n",
" \n",
" 📐 PNL - Partidul Naţional Liberal | \n",
" 7.6 | \n",
" PNL | \n",
" 📐 PNL | \n",
" #f4d42c | \n",
"
\n",
" \n",
" 📐 PNL-CD - Partidul Naţional Liberal | \n",
" 5.1 | \n",
" PNL-CD | \n",
" 📐 PNL | \n",
" #f4d42c | \n",
"
\n",
" \n",
" 🔱 PRM - Partidul România Mare | \n",
" 7.4 | \n",
" PRM | \n",
" 🔱 PRM | \n",
" #0d5ca4 | \n",
"
\n",
" \n",
" 🔶 PD - Partidul Democrat | \n",
" 7.3 | \n",
" PD | \n",
" 🔶 PD | \n",
" darkOrange | \n",
"
\n",
" \n",
" 🔶 PDL - Partidul Democrat Liberal | \n",
" 5.7 | \n",
" PDL | \n",
" 🔶 PDL | \n",
" darkOrange | \n",
"
\n",
" \n",
" 🕊️ ALDE - Partidul Alianţa Liberalilor şi Democraţilor | \n",
" 11.1 | \n",
" ALDE | \n",
" 🕊️ ALDE | \n",
" #046cab | \n",
"
\n",
" \n",
" 🕊️ PC - Partidul Conservator | \n",
" 8.7 | \n",
" PC | \n",
" 🕊️ PC | \n",
" #96c2f2 | \n",
"
\n",
" \n",
" 🕊️ PUNR - Partidul Unităţii Naţionale Române | \n",
" 5.1 | \n",
" PUNR | \n",
" 🕊️ PUNR | \n",
" grey | \n",
"
\n",
" \n",
" 🦅 UNPR - Uniunea Naţională pentru Progresul României | \n",
" 5.6 | \n",
" UNPR | \n",
" 🦅 UNPR | \n",
" #a8190f | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Atlagos regiseg \\\n",
"Part \n",
"✳️ PNTCD - Partidul Naţional Ţărănesc Creştin D... 5.3 \n",
"🌷 RMDSZ - Romániai Magyar Demokrata Szövetség 10.0 \n",
"🌹 PDSR - Partidul Democraţiei Sociale din România 5.3 \n",
"🌹 PSD - Partidul Social Democrat 9.0 \n",
"🌹 PSDR - Partidul Socialist Democratic din România 6.3 \n",
"🌹 PSM - Partidul Socialist al Muncii 4.3 \n",
"🍀 PER - Partidul Ecologist Român 7.2 \n",
"🍏 PMP - Partidul Mişcarea Populară 8.3 \n",
"👤 Independent - Independent 6.4 \n",
"📐 PNL - Partidul Naţional Liberal 7.6 \n",
"📐 PNL-CD - Partidul Naţional Liberal 5.1 \n",
"🔱 PRM - Partidul România Mare 7.4 \n",
"🔶 PD - Partidul Democrat 7.3 \n",
"🔶 PDL - Partidul Democrat Liberal 5.7 \n",
"🕊️ ALDE - Partidul Alianţa Liberalilor şi Democ... 11.1 \n",
"🕊️ PC - Partidul Conservator 8.7 \n",
"🕊️ PUNR - Partidul Unităţii Naţionale Române 5.1 \n",
"🦅 UNPR - Uniunea Naţională pentru Progresul Rom... 5.6 \n",
"\n",
" Color \\\n",
"Part \n",
"✳️ PNTCD - Partidul Naţional Ţărănesc Creştin D... PNTCD \n",
"🌷 RMDSZ - Romániai Magyar Demokrata Szövetség RMDSZ \n",
"🌹 PDSR - Partidul Democraţiei Sociale din România PDSR \n",
"🌹 PSD - Partidul Social Democrat PSD \n",
"🌹 PSDR - Partidul Socialist Democratic din România PSDR \n",
"🌹 PSM - Partidul Socialist al Muncii PSM \n",
"🍀 PER - Partidul Ecologist Român PER \n",
"🍏 PMP - Partidul Mişcarea Populară PMP \n",
"👤 Independent - Independent Independent \n",
"📐 PNL - Partidul Naţional Liberal PNL \n",
"📐 PNL-CD - Partidul Naţional Liberal PNL-CD \n",
"🔱 PRM - Partidul România Mare PRM \n",
"🔶 PD - Partidul Democrat PD \n",
"🔶 PDL - Partidul Democrat Liberal PDL \n",
"🕊️ ALDE - Partidul Alianţa Liberalilor şi Democ... ALDE \n",
"🕊️ PC - Partidul Conservator PC \n",
"🕊️ PUNR - Partidul Unităţii Naţionale Române PUNR \n",
"🦅 UNPR - Uniunea Naţională pentru Progresul Rom... UNPR \n",
"\n",
" Part cvalue \n",
"Part \n",
"✳️ PNTCD - Partidul Naţional Ţărănesc Creştin D... ✳️ PNTCD #04843c \n",
"🌷 RMDSZ - Romániai Magyar Demokrata Szövetség 🌷 RMDSZ green \n",
"🌹 PDSR - Partidul Democraţiei Sociale din România 🌹 PDSR #dc2c24 \n",
"🌹 PSD - Partidul Social Democrat 🌹 PSD #dc2c24 \n",
"🌹 PSDR - Partidul Socialist Democratic din România 🌹 PSDR #dc2c24 \n",
"🌹 PSM - Partidul Socialist al Muncii 🌹 PSM #dc2c24 \n",
"🍀 PER - Partidul Ecologist Român 🍀 PER #69a54f \n",
"🍏 PMP - Partidul Mişcarea Populară 🍏 PMP #0484cc \n",
"👤 Independent - Independent 👤 Independent #555 \n",
"📐 PNL - Partidul Naţional Liberal 📐 PNL #f4d42c \n",
"📐 PNL-CD - Partidul Naţional Liberal 📐 PNL #f4d42c \n",
"🔱 PRM - Partidul România Mare 🔱 PRM #0d5ca4 \n",
"🔶 PD - Partidul Democrat 🔶 PD darkOrange \n",
"🔶 PDL - Partidul Democrat Liberal 🔶 PDL darkOrange \n",
"🕊️ ALDE - Partidul Alianţa Liberalilor şi Democ... 🕊️ ALDE #046cab \n",
"🕊️ PC - Partidul Conservator 🕊️ PC #96c2f2 \n",
"🕊️ PUNR - Partidul Unităţii Naţionale Române 🕊️ PUNR grey \n",
"🦅 UNPR - Uniunea Naţională pentru Progresul Rom... 🦅 UNPR #a8190f "
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"de"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"var link = document.createElement(\"link\");\n",
"\tlink.ref = \"stylesheet\";\n",
"\tlink.type = \"text/css\";\n",
"\tlink.href = \"\";\n",
"\tdocument.head.appendChild(link);\n",
"new Promise(function(resolve, reject) {\n",
"\tvar script = document.createElement(\"script\");\n",
"\tscript.onload = resolve;\n",
"\tscript.onerror = reject;\n",
"\tscript.src = \"//d3plus.org/js/d3.js\";\n",
"\tdocument.head.appendChild(script);\n",
"}).then(() => {\n",
"new Promise(function(resolve, reject) {\n",
"\tvar script = document.createElement(\"script\");\n",
"\tscript.onload = resolve;\n",
"\tscript.onerror = reject;\n",
"\tscript.src = \"//d3plus.org/js/d3plus.js\";\n",
"\tdocument.head.appendChild(script);\n",
"}).then(() => {\n",
"\n",
" (function (){\n",
" \n",
" var viz_data = [{\"Part \": \"\\u2733\\ufe0f PNTCD - Partidul Na\\u0163ional \\u0162\\u0103r\\u0103nesc Cre\\u015ftin Democrat\", \"Atlagos regiseg\": 5.3, \"Color\": \"PNTCD\", \"Part \": \"\\u2733\\ufe0f PNTCD\", \"cvalue\": \"#04843c\"}, {\"Part \": \"\\ud83c\\udf37 RMDSZ - Rom\\u00e1niai Magyar Demokrata Sz\\u00f6vets\\u00e9g\", \"Atlagos regiseg\": 10.0, \"Color\": \"RMDSZ\", \"Part \": \"\\ud83c\\udf37 RMDSZ\", \"cvalue\": \"green\"}, {\"Part \": \"\\ud83c\\udf39 PDSR - Partidul Democra\\u0163iei Sociale din Rom\\u00e2nia\", \"Atlagos regiseg\": 5.3, \"Color\": \"PDSR\", \"Part \": \"\\ud83c\\udf39 PDSR\", \"cvalue\": \"#dc2c24\"}, {\"Part \": \"\\ud83c\\udf39 PSD - Partidul Social Democrat\", \"Atlagos regiseg\": 9.0, \"Color\": \"PSD\", \"Part \": \"\\ud83c\\udf39 PSD\", \"cvalue\": \"#dc2c24\"}, {\"Part \": \"\\ud83c\\udf39 PSDR - Partidul Socialist Democratic din Rom\\u00e2nia\", \"Atlagos regiseg\": 6.3, \"Color\": \"PSDR\", \"Part \": \"\\ud83c\\udf39 PSDR\", \"cvalue\": \"#dc2c24\"}, {\"Part \": \"\\ud83c\\udf39 PSM - Partidul Socialist al Muncii\", \"Atlagos regiseg\": 4.3, \"Color\": \"PSM\", \"Part \": \"\\ud83c\\udf39 PSM\", \"cvalue\": \"#dc2c24\"}, {\"Part \": \"\\ud83c\\udf40 PER - Partidul Ecologist Rom\\u00e2n\", \"Atlagos regiseg\": 7.2, \"Color\": \"PER\", \"Part \": \"\\ud83c\\udf40 PER\", \"cvalue\": \"#69a54f\"}, {\"Part \": \"\\ud83c\\udf4f PMP - Partidul Mi\\u015fcarea Popular\\u0103\", \"Atlagos regiseg\": 8.3, \"Color\": \"PMP\", \"Part \": \"\\ud83c\\udf4f PMP\", \"cvalue\": \"#0484cc\"}, {\"Part \": \"\\ud83d\\udc64 Independent - Independent\", \"Atlagos regiseg\": 6.4, \"Color\": \"Independent\", \"Part \": \"\\ud83d\\udc64 Independent\", \"cvalue\": \"#555\"}, {\"Part \": \"\\ud83d\\udcd0 PNL - Partidul Na\\u0163ional Liberal\", \"Atlagos regiseg\": 7.6, \"Color\": \"PNL\", \"Part \": \"\\ud83d\\udcd0 PNL\", \"cvalue\": \"#f4d42c\"}, {\"Part \": \"\\ud83d\\udcd0 PNL-CD - Partidul Na\\u0163ional Liberal\", \"Atlagos regiseg\": 5.1, \"Color\": \"PNL-CD\", \"Part \": \"\\ud83d\\udcd0 PNL\", \"cvalue\": \"#f4d42c\"}, {\"Part \": \"\\ud83d\\udd31 PRM - Partidul Rom\\u00e2nia Mare\", \"Atlagos regiseg\": 7.4, \"Color\": \"PRM\", \"Part \": \"\\ud83d\\udd31 PRM\", \"cvalue\": \"#0d5ca4\"}, {\"Part \": \"\\ud83d\\udd36 PD - Partidul Democrat\", \"Atlagos regiseg\": 7.3, \"Color\": \"PD\", \"Part \": \"\\ud83d\\udd36 PD\", \"cvalue\": \"darkOrange\"}, {\"Part \": \"\\ud83d\\udd36 PDL - Partidul Democrat Liberal\", \"Atlagos regiseg\": 5.7, \"Color\": \"PDL\", \"Part \": \"\\ud83d\\udd36 PDL\", \"cvalue\": \"darkOrange\"}, {\"Part \": \"\\ud83d\\udd4a\\ufe0f ALDE - Partidul Alian\\u0163a Liberalilor \\u015fi Democra\\u0163ilor\", \"Atlagos regiseg\": 11.1, \"Color\": \"ALDE\", \"Part \": \"\\ud83d\\udd4a\\ufe0f ALDE\", \"cvalue\": \"#046cab\"}, {\"Part \": \"\\ud83d\\udd4a\\ufe0f PC - Partidul Conservator\", \"Atlagos regiseg\": 8.7, \"Color\": \"PC\", \"Part \": \"\\ud83d\\udd4a\\ufe0f PC\", \"cvalue\": \"#96c2f2\"}, {\"Part \": \"\\ud83d\\udd4a\\ufe0f PUNR - Partidul Unit\\u0103\\u0163ii Na\\u0163ionale Rom\\u00e2ne\", \"Atlagos regiseg\": 5.1, \"Color\": \"PUNR\", \"Part \": \"\\ud83d\\udd4a\\ufe0f PUNR\", \"cvalue\": \"grey\"}, {\"Part \": \"\\ud83e\\udd85 UNPR - Uniunea Na\\u0163ional\\u0103 pentru Progresul Rom\\u00e2niei\", \"Atlagos regiseg\": 5.6, \"Color\": \"UNPR\", \"Part \": \"\\ud83e\\udd85 UNPR\", \"cvalue\": \"#a8190f\"}];\n",
"\n",
" var viz_d3viz_7 = d3plus.viz()\n",
" .container('#d3viz_7')\n",
" .type('bar')\n",
" .id('Part ')\n",
"\t\t.x('Part ')\n",
"\t\t.y({'value': 'Atlagos regiseg','label': 'Atlagos regiseg (ev)'})\n",
"\t\t.text(' ')\n",
"\t\t.color('cvalue')\n",
"\t\t.tooltip(['Part '])\n",
"\t\t.legend(false)\n",
"\t\t.aggs({'Atlagos regiseg': 'mean'})\n",
"\t\t.order({'value': 'Atlagos regiseg','sort': 'desc'})\n",
" .data(viz_data)\n",
" .draw();\n",
"\n",
" })();\n",
" \n",
"});\n",
"});"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"3900"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sample_data = list(de.reset_index().T.to_dict().values())\n",
"scplot = BarPlot(\n",
" x='Part ', \n",
" y={'value':'Atlagos regiseg','label':'Atlagos regiseg (ev)'}, \n",
" id='Part ', \n",
" aggs={'Atlagos regiseg':'mean'},\n",
" text=' ', \n",
" color='cvalue', \n",
" order={'value':'Atlagos regiseg','sort':'desc'},\n",
" tooltip=['Part '], \n",
" legend=False, \n",
" width='100%', \n",
")\n",
"scplot.draw(sample_data)\n",
"scplot.height='100%'\n",
"open('time1.html','w').write(scplot.dump_html(sample_data))"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [],
"source": [
"from IPython.display import IFrame"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [],
"source": [
"from pyecharts.charts import Bar, Grid\n",
"from pyecharts import options as opts\n",
"#docs https://pyecharts.org/#/en-us/"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
" "
],
"text/plain": [
""
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bar = (\n",
" Bar(\n",
" init_opts=opts.InitOpts(\n",
" width='100%',\n",
" height='410px'\n",
" )\n",
" )\n",
" .add_xaxis(list(dj['Part '].values))\n",
" .add_yaxis('Átlagos régiség',\n",
" [opts.BarItem(\n",
" name=i[1]['Part '],\n",
" value=np.round(i[1]['Atlagos regiseg'],1),\n",
" itemstyle_opts=opts.ItemStyleOpts(color=i[1]['cvalue']),\n",
" ) for i in dj.T.iteritems()]\n",
" )\n",
" .set_global_opts(\n",
" legend_opts=opts.LegendOpts(is_show=False),\n",
" title_opts=opts.TitleOpts(\n",
" title=\"Parlamenterek átlagos régisége\",\n",
" pos_left='center',\n",
" pos_top='20'\n",
" ),\n",
" xaxis_opts=opts.AxisOpts(\n",
" type_='category',\n",
" axislabel_opts =opts.LabelOpts(\n",
" rotate=-50,\n",
" font_weight='normal'\n",
" )\n",
" ),\n",
"# graphic_opts=[\n",
"# opts.GraphicImage(\n",
"# graphic_item=opts.GraphicItem(\n",
"# id_=\"logo\",\n",
"# right=50,\n",
"# top=50,\n",
"# z=-10,\n",
"# bounding=\"raw\",\n",
"# origin=[75, 75],\n",
"# ),\n",
"# graphic_imagestyle_opts=opts.GraphicImageStyleOpts(\n",
"# image=\"https://szekelydata.csaladen.es/favicon.ico\",\n",
"# width=25,\n",
"# height=25,\n",
"# opacity=0.8,\n",
"# ),\n",
"# )\n",
"# ],\n",
" )\n",
" .set_series_opts(\n",
" label_opts=opts.LabelOpts(\n",
" )\n",
" )\n",
" .render('time1e.html')\n",
")\n",
"IFrame(src='time1e.html', width='98%', height=440)"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
" "
],
"text/plain": [
""
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from plotly import offline as po\n",
"import plotly.plotly as py\n",
"import plotly.graph_objs as go\n",
"\n",
"trace0 = go.Bar(\n",
" x=list(dj['Part '].values),\n",
" y=np.round(np.array(dj['Atlagos regiseg'].values),1),\n",
" marker=dict(\n",
" color=list(dj['cvalue'].values)\n",
" ),\n",
")\n",
"\n",
"data = [trace0]\n",
"\n",
"fig = go.Figure(data=data)\n",
"file_name='time1c.html'\n",
"po.plot(fig, filename=file_name, auto_open=False);\n",
"IFrame(src=file_name, width='98%', height=420)"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [],
"source": [
"de=pd.DataFrame(counts).join(g)\n",
"de=de[de[0]>min_time1]\n",
"dd=de.groupby('Megye ').nunique()\n",
"de=de.groupby('Megye ').mean()\n",
"de=np.round(de.loc[dd[dd[0]>min_dep].index]/365,1)\n",
"de.columns=['Atlagos regiseg']\n",
"dj=de.groupby(['Megye ']).mean().reset_index().sort_values(by='Atlagos regiseg', ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3629"
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ro_shape=json.loads(open('json/romania-counties.json','r').read())\n",
"megyek=json.loads(open('C:/users/csala/Onedrive/Github/universal/ro/hun_megyek.json','r').read())\n",
"megye_map={}\n",
"for i,di in enumerate(ro_shape['objects']['ROU_adm1']['geometries']):\n",
" if (di['properties']['VARNAME_1']):\n",
" megye_map[i]=di['properties']['VARNAME_1']\n",
" else:\n",
" megye_map[i]=di['properties']['NAME_1']\n",
"megye_map={megyek[megye_map[i]]:i for i in megye_map}\n",
"dj['id']=[megye_map[i] if i in megye_map else -1 for i in dj['Megye '].str.split(' ').str[1].values]\n",
"open('json/megye_map.json','w').write(json.dumps(list(dj.T.to_dict().values())))"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"var link = document.createElement(\"link\");\n",
"\tlink.ref = \"stylesheet\";\n",
"\tlink.type = \"text/css\";\n",
"\tlink.href = \"\";\n",
"\tdocument.head.appendChild(link);\n",
"new Promise(function(resolve, reject) {\n",
"\tvar script = document.createElement(\"script\");\n",
"\tscript.onload = resolve;\n",
"\tscript.onerror = reject;\n",
"\tscript.src = \"//d3plus.org/js/d3.js\";\n",
"\tdocument.head.appendChild(script);\n",
"}).then(() => {\n",
"new Promise(function(resolve, reject) {\n",
"\tvar script = document.createElement(\"script\");\n",
"\tscript.onload = resolve;\n",
"\tscript.onerror = reject;\n",
"\tscript.src = \"//d3plus.org/js/d3plus.js\";\n",
"\tdocument.head.appendChild(script);\n",
"}).then(() => {\n",
"\n",
" (function (){\n",
" \n",
" var viz_data = [{\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Arad\", \"Atlagos regiseg\": 6.5}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Arge\\u0219\", \"Atlagos regiseg\": 7.8}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Beszterce\", \"Atlagos regiseg\": 6.1}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Bihar\", \"Atlagos regiseg\": 7.1}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Boto\\u0219ani\", \"Atlagos regiseg\": 6.3}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Brass\\u00f3\", \"Atlagos regiseg\": 6.9}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Br\\u0103ila\", \"Atlagos regiseg\": 7.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Bukarest\", \"Atlagos regiseg\": 7.9}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Buz\\u0103u\", \"Atlagos regiseg\": 7.5}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 B\\u00e1k\\u00f3\", \"Atlagos regiseg\": 7.3}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 C\\u0103l\\u0103ra\\u0219i\", \"Atlagos regiseg\": 7.7}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Diaszp\\u00f3ra\", \"Atlagos regiseg\": 7.2}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Dolj\", \"Atlagos regiseg\": 8.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 D\\u00e2mbovi\\u021ba\", \"Atlagos regiseg\": 7.4}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Feh\\u00e9r\", \"Atlagos regiseg\": 7.2}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Galac\", \"Atlagos regiseg\": 7.7}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Giurgiu\", \"Atlagos regiseg\": 6.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Gorj\", \"Atlagos regiseg\": 5.8}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Hargita\", \"Atlagos regiseg\": 10.1}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Hunyad\", \"Atlagos regiseg\": 7.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Ialomi\\u021ba\", \"Atlagos regiseg\": 7.5}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Ia\\u0219i\", \"Atlagos regiseg\": 7.2}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Ilfov\", \"Atlagos regiseg\": 6.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Kolozs\", \"Atlagos regiseg\": 7.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Konstanca\", \"Atlagos regiseg\": 7.5}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Kov\\u00e1szna\", \"Atlagos regiseg\": 8.6}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Krass\\u00f3-Sz\\u00f6r\\u00e9ny\", \"Atlagos regiseg\": 6.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Maros\", \"Atlagos regiseg\": 8.2}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Mehedin\\u021bi\", \"Atlagos regiseg\": 6.5}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 M\\u00e1ramaros\", \"Atlagos regiseg\": 6.4}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Neam\\u021b\", \"Atlagos regiseg\": 6.8}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Olt\", \"Atlagos regiseg\": 7.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Prahova\", \"Atlagos regiseg\": 7.2}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Suceava\", \"Atlagos regiseg\": 6.5}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Szatm\\u00e1r\", \"Atlagos regiseg\": 7.8}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Szeben\", \"Atlagos regiseg\": 6.4}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Szil\\u00e1gy\", \"Atlagos regiseg\": 10.1}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Teleorman\", \"Atlagos regiseg\": 6.6}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Temes\", \"Atlagos regiseg\": 7.2}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Tulcea\", \"Atlagos regiseg\": 6.7}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Vaslui\", \"Atlagos regiseg\": 6.9}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Vrancea\", \"Atlagos regiseg\": 7.8}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 V\\u00e2lcea\", \"Atlagos regiseg\": 6.3}];\n",
"\n",
" var viz_d3viz_8 = d3plus.viz()\n",
" .container('#d3viz_8')\n",
" .type('bar')\n",
" .id('Megye ')\n",
"\t\t.x('Megye ')\n",
"\t\t.y({'value': 'Atlagos regiseg','label': 'Atlagos regiseg (ev)'})\n",
"\t\t.text(' ')\n",
"\t\t.color('Megye ')\n",
"\t\t.legend(false)\n",
"\t\t.aggs({'Atlagos regiseg': 'mean'})\n",
"\t\t.order({'value': 'Atlagos regiseg','sort': 'desc'})\n",
" .data(viz_data)\n",
" .draw();\n",
"\n",
" })();\n",
" \n",
"});\n",
"});"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"4089"
]
},
"execution_count": 108,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sample_data = list(de.reset_index().T.to_dict().values())\n",
"scplot = BarPlot(\n",
" x='Megye ', \n",
" y={'value':'Atlagos regiseg','label':'Atlagos regiseg (ev)'}, \n",
" id='Megye ', \n",
" aggs={'Atlagos regiseg':'mean'},\n",
" text=' ', \n",
"# color='cvalue', \n",
" order={'value':'Atlagos regiseg','sort':'desc'},\n",
"# tooltip=['Part '], \n",
" legend=False, \n",
" width='100%', \n",
")\n",
"scplot.draw(sample_data)\n",
"scplot.height='100%'\n",
"open('time2.html','w').write(scplot.dump_html(sample_data))"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
" "
],
"text/plain": [
""
]
},
"execution_count": 109,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bar = (\n",
" Bar(\n",
" init_opts=opts.InitOpts(\n",
" width='100%',\n",
" height='410px'\n",
" )\n",
" )\n",
" .add_xaxis(list(dj['Megye '].values))\n",
" .add_yaxis('Átlagos régiség',\n",
" [opts.BarItem(\n",
" name=i[1]['Megye '],\n",
" value=np.round(i[1]['Atlagos regiseg'],1),\n",
" itemstyle_opts=opts.ItemStyleOpts(color=szd_color),\n",
" ) for i in dj.T.iteritems()]\n",
" )\n",
" .set_global_opts(\n",
" legend_opts=opts.LegendOpts(is_show=False),\n",
" xaxis_opts=opts.AxisOpts(\n",
" type_='category',\n",
" axislabel_opts =opts.LabelOpts(\n",
" rotate=-90,\n",
" font_weight='normal'\n",
" ),\n",
"# offset=0\n",
" \n",
" ),\n",
"# graphic_opts=[\n",
"# opts.GraphicImage(\n",
"# graphic_item=opts.GraphicItem(\n",
"# id_=\"logo\",\n",
"# right=50,\n",
"# top=50,\n",
"# z=-10,\n",
"# bounding=\"raw\",\n",
"# origin=[75, 75],\n",
"# ),\n",
"# graphic_imagestyle_opts=opts.GraphicImageStyleOpts(\n",
"# image=\"https://szekelydata.csaladen.es/favicon.ico\",\n",
"# width=25,\n",
"# height=25,\n",
"# opacity=0.8,\n",
"# ),\n",
"# )\n",
"# ],\n",
" )\n",
" .set_series_opts(\n",
" label_opts=opts.LabelOpts(\n",
" )\n",
" )\n",
" .render('time2e.html')\n",
")\n",
"IFrame(src='time2e.html', width='98%', height=440)"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
" "
],
"text/plain": [
""
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from plotly import offline as po\n",
"import plotly.plotly as py\n",
"import plotly.graph_objs as go\n",
"\n",
"trace0 = go.Bar(\n",
" x=list(dj['Megye '].values),\n",
" y=np.round(np.array(dj['Atlagos regiseg'].values),1)\n",
")\n",
"\n",
"data = [trace0]\n",
"\n",
"fig = go.Figure(data=data)\n",
"file_name='time2c.html'\n",
"po.plot(fig, filename=file_name, auto_open=False);\n",
"IFrame(src=file_name, width='98%', height=420)"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [],
"source": [
"de=pd.DataFrame(counts2).join(p).join(d)\n",
"de=de.reset_index()\n",
"de=de[[str(i)=='nan' for i in list(de['v'].values)]] #keep only alive ones\n",
"de['szul']=de['index'].str.split('|').str[1].str.strip()\n",
"de=de[[str(i)!='Ismeretlen' for i in list(de['szul'].values)]] #keep only known birth dates\n",
"de['Eletkor']=(pd.to_datetime(de[0])-pd.to_datetime(de['szul'])).dt.days/365\n",
"dd=de.groupby('Part ').nunique()\n",
"de=de.groupby('Part ').mean()[['Eletkor']]\n",
"de=np.round(de.loc[dd[dd[0]>min_dep].index],0)\n",
"de.columns=['Atlagos eletkor']\n",
"de=de.join(p.set_index('Part ').drop_duplicates())\n",
"dj=de.groupby(['Part ','cvalue']).mean().reset_index().sort_values(by='Atlagos eletkor', ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"var link = document.createElement(\"link\");\n",
"\tlink.ref = \"stylesheet\";\n",
"\tlink.type = \"text/css\";\n",
"\tlink.href = \"\";\n",
"\tdocument.head.appendChild(link);\n",
"new Promise(function(resolve, reject) {\n",
"\tvar script = document.createElement(\"script\");\n",
"\tscript.onload = resolve;\n",
"\tscript.onerror = reject;\n",
"\tscript.src = \"//d3plus.org/js/d3.js\";\n",
"\tdocument.head.appendChild(script);\n",
"}).then(() => {\n",
"new Promise(function(resolve, reject) {\n",
"\tvar script = document.createElement(\"script\");\n",
"\tscript.onload = resolve;\n",
"\tscript.onerror = reject;\n",
"\tscript.src = \"//d3plus.org/js/d3plus.js\";\n",
"\tdocument.head.appendChild(script);\n",
"}).then(() => {\n",
"\n",
" (function (){\n",
" \n",
" var viz_data = [{\"Part \": \"\\u26aa\\ufe0f FSN - Frontul Salv\\u0103rii Na\\u0163ionale\", \"Atlagos eletkor\": 48.0, \"Color\": \"FSN\", \"Part \": \"\\u26aa\\ufe0f FSN\", \"cvalue\": \"grey\"}, {\"Part \": \"\\u2733\\ufe0f PNTCD - Partidul Na\\u0163ional \\u0162\\u0103r\\u0103nesc Cre\\u015ftin Democrat\", \"Atlagos eletkor\": 58.0, \"Color\": \"PNTCD\", \"Part \": \"\\u2733\\ufe0f PNTCD\", \"cvalue\": \"#04843c\"}, {\"Part \": \"\\ud83c\\udf37 RMDSZ - Rom\\u00e1niai Magyar Demokrata Sz\\u00f6vets\\u00e9g\", \"Atlagos eletkor\": 52.0, \"Color\": \"RMDSZ\", \"Part \": \"\\ud83c\\udf37 RMDSZ\", \"cvalue\": \"green\"}, {\"Part \": \"\\ud83c\\udf39 PDSR - Partidul Democra\\u0163iei Sociale din Rom\\u00e2nia\", \"Atlagos eletkor\": 54.0, \"Color\": \"PDSR\", \"Part \": \"\\ud83c\\udf39 PDSR\", \"cvalue\": \"#dc2c24\"}, {\"Part \": \"\\ud83c\\udf39 PSD - Partidul Social Democrat\", \"Atlagos eletkor\": 53.0, \"Color\": \"PSD\", \"Part \": \"\\ud83c\\udf39 PSD\", \"cvalue\": \"#dc2c24\"}, {\"Part \": \"\\ud83c\\udf39 PSDR - Partidul Socialist Democratic din Rom\\u00e2nia\", \"Atlagos eletkor\": 57.0, \"Color\": \"PSDR\", \"Part \": \"\\ud83c\\udf39 PSDR\", \"cvalue\": \"#dc2c24\"}, {\"Part \": \"\\ud83c\\udf40 MER - Mi\\u015fcarea Ecologist\\u0103 din Rom\\u00e2nia\", \"Atlagos eletkor\": 51.0, \"Color\": \"MER\", \"Part \": \"\\ud83c\\udf40 MER\", \"cvalue\": \"#69a54f\"}, {\"Part \": \"\\ud83c\\udf40 PER - Partidul Ecologist Rom\\u00e2n\", \"Atlagos eletkor\": 52.0, \"Color\": \"PER\", \"Part \": \"\\ud83c\\udf40 PER\", \"cvalue\": \"#69a54f\"}, {\"Part \": \"\\ud83c\\udf4f PMP - Partidul Mi\\u015fcarea Popular\\u0103\", \"Atlagos eletkor\": 48.0, \"Color\": \"PMP\", \"Part \": \"\\ud83c\\udf4f PMP\", \"cvalue\": \"#0484cc\"}, {\"Part \": \"\\ud83d\\udc64 Independent - Independent\", \"Atlagos eletkor\": 52.0, \"Color\": \"Independent\", \"Part \": \"\\ud83d\\udc64 Independent\", \"cvalue\": \"#555\"}, {\"Part \": \"\\ud83d\\udcd0 PNL - Partidul Na\\u0163ional Liberal\", \"Atlagos eletkor\": 53.0, \"Color\": \"PNL\", \"Part \": \"\\ud83d\\udcd0 PNL\", \"cvalue\": \"#f4d42c\"}, {\"Part \": \"\\ud83d\\udd31 PRM - Partidul Rom\\u00e2nia Mare\", \"Atlagos eletkor\": 60.0, \"Color\": \"PRM\", \"Part \": \"\\ud83d\\udd31 PRM\", \"cvalue\": \"#0d5ca4\"}, {\"Part \": \"\\ud83d\\udd36 PD - Partidul Democrat\", \"Atlagos eletkor\": 51.0, \"Color\": \"PD\", \"Part \": \"\\ud83d\\udd36 PD\", \"cvalue\": \"darkOrange\"}, {\"Part \": \"\\ud83d\\udd36 PDL - Partidul Democrat Liberal\", \"Atlagos eletkor\": 51.0, \"Color\": \"PDL\", \"Part \": \"\\ud83d\\udd36 PDL\", \"cvalue\": \"darkOrange\"}, {\"Part \": \"\\ud83d\\udd37 USR - Uniunea Salva\\u0163i Rom\\u00e2nia\", \"Atlagos eletkor\": 42.0, \"Color\": \"USR\", \"Part \": \"\\ud83d\\udd37 USR\", \"cvalue\": \"#04abe4\"}, {\"Part \": \"\\ud83d\\udd4a\\ufe0f PC - Partidul Conservator\", \"Atlagos eletkor\": 54.0, \"Color\": \"PC\", \"Part \": \"\\ud83d\\udd4a\\ufe0f PC\", \"cvalue\": \"#96c2f2\"}, {\"Part \": \"\\ud83d\\udd4a\\ufe0f PUNR - Partidul Unit\\u0103\\u0163ii Na\\u0163ionale Rom\\u00e2ne\", \"Atlagos eletkor\": 54.0, \"Color\": \"PUNR\", \"Part \": \"\\ud83d\\udd4a\\ufe0f PUNR\", \"cvalue\": \"grey\"}, {\"Part \": \"\\ud83e\\udd85 UNPR - Uniunea Na\\u0163ional\\u0103 pentru Progresul Rom\\u00e2niei\", \"Atlagos eletkor\": 54.0, \"Color\": \"UNPR\", \"Part \": \"\\ud83e\\udd85 UNPR\", \"cvalue\": \"#a8190f\"}];\n",
"\n",
" var viz_d3viz_9 = d3plus.viz()\n",
" .container('#d3viz_9')\n",
" .type('bar')\n",
" .id('Part ')\n",
"\t\t.x('Part ')\n",
"\t\t.y('Atlagos eletkor')\n",
"\t\t.text(' ')\n",
"\t\t.color('cvalue')\n",
"\t\t.tooltip(['Part '])\n",
"\t\t.legend(false)\n",
"\t\t.aggs({'Atlagos eletkor': 'mean'})\n",
"\t\t.order({'value': 'Atlagos eletkor','sort': 'desc'})\n",
" .data(viz_data)\n",
" .draw();\n",
"\n",
" })();\n",
" \n",
"});\n",
"});"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"3847"
]
},
"execution_count": 112,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sample_data = list(de.reset_index().T.to_dict().values())\n",
"scplot = BarPlot(\n",
" x='Part ', \n",
" y='Atlagos eletkor', \n",
" id='Part ', \n",
" aggs={'Atlagos eletkor':'mean'},\n",
" text=' ', \n",
" color='cvalue', \n",
" order={'value':'Atlagos eletkor','sort':'desc'},\n",
" tooltip=['Part '], \n",
" legend=False, \n",
" width='100%', \n",
")\n",
"scplot.draw(sample_data)\n",
"scplot.height='100%'\n",
"open('time3.html','w').write(scplot.dump_html(sample_data))"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
" "
],
"text/plain": [
""
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from plotly import offline as po\n",
"import plotly.plotly as py\n",
"import plotly.graph_objs as go\n",
"\n",
"trace0 = go.Bar(\n",
" x=list(dj['Part '].values),\n",
" y=np.round(np.array(dj['Atlagos eletkor'].values),0),\n",
" marker=dict(\n",
" color=list(dj['cvalue'].values)\n",
" ),\n",
")\n",
"\n",
"data = [trace0]\n",
"\n",
"fig = go.Figure(data=data)\n",
"file_name='time3c.html'\n",
"po.plot(fig, filename=file_name, auto_open=False);\n",
"IFrame(src=file_name, width='98%', height=420)"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [],
"source": [
"de=pd.DataFrame(counts2).join(g).join(d)\n",
"de=de.reset_index()\n",
"de=de[[str(i)=='nan' for i in list(de['v'].values)]] #keep only alive ones\n",
"de['szul']=de['index'].str.split('|').str[1].str.strip()\n",
"de=de[[str(i)!='Ismeretlen' for i in list(de['szul'].values)]] #keep only known birth dates\n",
"de['Eletkor']=(pd.to_datetime(de[0])-pd.to_datetime(de['szul'])).dt.days/365\n",
"dd=de.groupby('Megye ').nunique()\n",
"de=de.groupby('Megye ').mean()[['Eletkor']]\n",
"de=np.round(de.loc[dd[dd[0]>min_dep].index],0)\n",
"de.columns=['Atlagos eletkor']\n",
"dj=de.groupby(['Megye ']).mean().reset_index().sort_values(by='Atlagos eletkor', ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3670"
]
},
"execution_count": 115,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ro_shape=json.loads(open('json/romania-counties.json','r').read())\n",
"megyek=json.loads(open('C:/users/csala/Onedrive/Github/universal/ro/hun_megyek.json','r').read())\n",
"megye_map={}\n",
"for i,di in enumerate(ro_shape['objects']['ROU_adm1']['geometries']):\n",
" if (di['properties']['VARNAME_1']):\n",
" megye_map[i]=di['properties']['VARNAME_1']\n",
" else:\n",
" megye_map[i]=di['properties']['NAME_1']\n",
"megye_map={megyek[megye_map[i]]:i for i in megye_map}\n",
"dj['id']=[megye_map[i] if i in megye_map else -1 for i in dj['Megye '].str.split(' ').str[1].values]\n",
"open('json/megye_map2.json','w').write(json.dumps(list(dj.T.to_dict().values())))"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"var link = document.createElement(\"link\");\n",
"\tlink.ref = \"stylesheet\";\n",
"\tlink.type = \"text/css\";\n",
"\tlink.href = \"\";\n",
"\tdocument.head.appendChild(link);\n",
"new Promise(function(resolve, reject) {\n",
"\tvar script = document.createElement(\"script\");\n",
"\tscript.onload = resolve;\n",
"\tscript.onerror = reject;\n",
"\tscript.src = \"//d3plus.org/js/d3.js\";\n",
"\tdocument.head.appendChild(script);\n",
"}).then(() => {\n",
"new Promise(function(resolve, reject) {\n",
"\tvar script = document.createElement(\"script\");\n",
"\tscript.onload = resolve;\n",
"\tscript.onerror = reject;\n",
"\tscript.src = \"//d3plus.org/js/d3plus.js\";\n",
"\tdocument.head.appendChild(script);\n",
"}).then(() => {\n",
"\n",
" (function (){\n",
" \n",
" var viz_data = [{\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Arad\", \"Atlagos eletkor\": 51.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Arge\\u0219\", \"Atlagos eletkor\": 54.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Beszterce\", \"Atlagos eletkor\": 50.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Bihar\", \"Atlagos eletkor\": 52.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Boto\\u0219ani\", \"Atlagos eletkor\": 53.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Brass\\u00f3\", \"Atlagos eletkor\": 54.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Br\\u0103ila\", \"Atlagos eletkor\": 52.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Bukarest\", \"Atlagos eletkor\": 54.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Buz\\u0103u\", \"Atlagos eletkor\": 54.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 B\\u00e1k\\u00f3\", \"Atlagos eletkor\": 52.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 C\\u0103l\\u0103ra\\u0219i\", \"Atlagos eletkor\": 51.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Diaszp\\u00f3ra\", \"Atlagos eletkor\": 50.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Dolj\", \"Atlagos eletkor\": 54.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 D\\u00e2mbovi\\u021ba\", \"Atlagos eletkor\": 53.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Feh\\u00e9r\", \"Atlagos eletkor\": 50.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Galac\", \"Atlagos eletkor\": 54.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Giurgiu\", \"Atlagos eletkor\": 53.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Gorj\", \"Atlagos eletkor\": 53.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Hargita\", \"Atlagos eletkor\": 51.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Hunyad\", \"Atlagos eletkor\": 51.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Ialomi\\u021ba\", \"Atlagos eletkor\": 51.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Ia\\u0219i\", \"Atlagos eletkor\": 54.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Ilfov\", \"Atlagos eletkor\": 50.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Kolozs\", \"Atlagos eletkor\": 52.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Konstanca\", \"Atlagos eletkor\": 51.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Kov\\u00e1szna\", \"Atlagos eletkor\": 52.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Krass\\u00f3-Sz\\u00f6r\\u00e9ny\", \"Atlagos eletkor\": 53.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Maros\", \"Atlagos eletkor\": 54.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Mehedin\\u021bi\", \"Atlagos eletkor\": 52.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 M\\u00e1ramaros\", \"Atlagos eletkor\": 50.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Neam\\u021b\", \"Atlagos eletkor\": 52.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Olt\", \"Atlagos eletkor\": 54.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Prahova\", \"Atlagos eletkor\": 52.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Suceava\", \"Atlagos eletkor\": 55.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Szatm\\u00e1r\", \"Atlagos eletkor\": 49.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Szeben\", \"Atlagos eletkor\": 53.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Szil\\u00e1gy\", \"Atlagos eletkor\": 55.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Teleorman\", \"Atlagos eletkor\": 51.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Temes\", \"Atlagos eletkor\": 52.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Tulcea\", \"Atlagos eletkor\": 53.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Vaslui\", \"Atlagos eletkor\": 52.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 Vrancea\", \"Atlagos eletkor\": 48.0}, {\"Megye \": \"\\ud83c\\uddf7\\ud83c\\uddf4 V\\u00e2lcea\", \"Atlagos eletkor\": 55.0}];\n",
"\n",
" var viz_d3viz_10 = d3plus.viz()\n",
" .container('#d3viz_10')\n",
" .type('bar')\n",
" .id('Megye ')\n",
"\t\t.x('Megye ')\n",
"\t\t.y('Atlagos eletkor')\n",
"\t\t.text(' ')\n",
"\t\t.color('Megye ')\n",
"\t\t.legend(false)\n",
"\t\t.aggs({'Atlagos eletkor': 'mean'})\n",
"\t\t.order({'value': 'Atlagos eletkor','sort': 'desc'})\n",
" .data(viz_data)\n",
" .draw();\n",
"\n",
" })();\n",
" \n",
"});\n",
"});"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"4091"
]
},
"execution_count": 116,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sample_data = list(de.reset_index().T.to_dict().values())\n",
"scplot = BarPlot(\n",
" x='Megye ', \n",
" y='Atlagos eletkor', \n",
" id='Megye ', \n",
" aggs={'Atlagos eletkor':'mean'},\n",
" text=' ', \n",
"# color='cvalue', \n",
" order={'value':'Atlagos eletkor','sort':'desc'},\n",
"# tooltip=['Part '], \n",
" legend=False, \n",
" width='100%', \n",
")\n",
"scplot.draw(sample_data)\n",
"scplot.height='100%'\n",
"open('time4.html','w').write(scplot.dump_html(sample_data))"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
" "
],
"text/plain": [
""
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from plotly import offline as po\n",
"import plotly.plotly as py\n",
"import plotly.graph_objs as go\n",
"\n",
"trace0 = go.Bar(\n",
" x=list(dj['Megye '].values),\n",
" y=np.round(np.array(dj['Atlagos eletkor'].values),0)\n",
")\n",
"\n",
"data = [trace0]\n",
"\n",
"fig = go.Figure(data=data)\n",
"file_name='time4c.html'\n",
"po.plot(fig, filename=file_name, auto_open=False);\n",
"IFrame(src=file_name, width='98%', height=420)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Fusions"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0 %\n",
"2.9080757262919126 %\n",
"5.816151452583825 %\n",
"8.724227178875738 %\n",
"11.63230290516765 %\n",
"14.540378631459564 %\n",
"17.448454357751476 %\n",
"20.35653008404339 %\n",
"23.2646058103353 %\n",
"26.172681536627213 %\n",
"29.08075726291913 %\n",
"31.98883298921104 %\n",
"34.89690871550295 %\n",
"37.804984441794865 %\n",
"40.71306016808678 %\n",
"43.62113589437869 %\n",
"46.5292116206706 %\n",
"49.43728734696251 %\n",
"52.345363073254426 %\n",
"55.25343879954634 %\n",
"58.16151452583826 %\n",
"61.06959025213017 %\n",
"63.97766597842208 %\n",
"66.88574170471398 %\n",
"69.7938174310059 %\n",
"72.70189315729782 %\n",
"75.60996888358973 %\n",
"78.51804460988164 %\n",
"81.42612033617355 %\n",
"84.33419606246547 %\n",
"87.24227178875738 %\n",
"90.15034751504929 %\n",
"93.0584232413412 %\n",
"95.96649896763311 %\n",
"98.87457469392503 %\n"
]
}
],
"source": [
"switches={}\n",
"fusions={}\n",
"for k,i in enumerate(m):\n",
" if k%1000==0: print(k/len(m)*100,'%')\n",
" name=i['Simple']\n",
" if i['Típus'] in ['Megye','Párt']:\n",
" for t in pd.date_range(i['start'],i['end']):\n",
" st=str(t)[:10]\n",
" if name not in switches:switches[name]={}\n",
" if i['Típus']not in switches[name]:switches[name][i['Típus']]={'count':0,'current':i['Csoportok']}\n",
" if switches[name][i['Típus']]['current']!=i['Csoportok']:\n",
" p1=i['Csoportok']\n",
" p2=switches[name][i['Típus']]['current']\n",
" if i['Típus'] not in fusions:fusions[i['Típus']]={}\n",
" if p1 not in fusions[i['Típus']]:fusions[i['Típus']][p1]={}\n",
" if p2 not in fusions[i['Típus']][p1]:fusions[i['Típus']][p1][p2]=0\n",
" fusions[i['Típus']][p1][p2]+=1\n",
" switches[name][i['Típus']]['current']=str(i['Csoportok'])\n",
" switches[name][i['Típus']]['count']+=1"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [],
"source": [
"def get_sub(dz,x,k=1):\n",
" part=dz.T[x].sort_values(ascending=False)\n",
" print(part.mean())\n",
" print(part.head(5))\n",
" df=pd.DataFrame(part).join(pd.DataFrame(counts)).join(s)\n",
" df['a']=df[x]/(df[0]/k)\n",
" df=df.replace([np.inf, -np.inf], np.nan)\n",
" df=df[df[0]>min_time] #remove outliers\n",
" part=df.sort_values(by='a',ascending=False)[['a','s','w']]\n",
" return part"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.5197224251278305\n",
"Timis Ioan | 1951-09-17 6\n",
"Gradinaru Nicolae | 1953-11-05 5\n",
"Ion Vasile | 1950-01-12 5\n",
"Codirla Liviu | 1968-01-25 5\n",
"Iliescu Valentin Adrian | 1961-11-01 5\n",
"Name: Párt, dtype: int64\n",
"0.06829802775748722\n",
"Niculescu Duvaz Bogdan Nicolae | 1948-12-14 3\n",
"Banicioiu Nicolae | 1979-03-26 3\n",
"Mihalcescu Carmen-Ileana | 1970-05-14 3\n",
"Nicolaescu Sergiu-Florin | 1930-04-13 3\n",
"Nicolae Serban | 1968-04-05 2\n",
"Name: Megye, dtype: int64\n"
]
}
],
"source": [
"dw=pd.DataFrame({i:{j:switches[i][j]['count'] for j in switches[i]} for i in switches})\n",
"part=get_sub(dw,'Párt',365)\n",
"megye=get_sub(dw,'Megye',365)"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.10610293643790332\n",
"0.022165929140400432\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"