import pandas as pd, numpy as np, json, os
import networkx as nx
import matplotlib.pyplot as plt
%matplotlib inline
m=json.loads(open('ignore/member_timelines.json','r').read())
m[0]
{'start': '2000-12-15 00:00:00', 'end': '2004-11-30 00:00:00', 'Name': 'Ion MOCIOI', 'duration': '1446', 'Simple': 'Mocioi Ion | 1940-10-03', 'Csoportok': '⏫ Gazdaság, ipar', 'Csoportok0': '⏫ Gazdaság, ipar ', 'Csoportok1': '⏫ Gazdaság, ipar', 'Típus': 'Bizottság'}
# m=m[:1000]
data={'Ország':{},'Bizottság':{},'Párt':{},'Megye':{}}
attention={}
for k,i in enumerate(m):
if k%1000==0: print(k/len(m)*100,'%')
name=i['Simple']
if i['Típus'] in list(data.keys()):
if i['Csoportok'] not in data[i['Típus']]:data[i['Típus']][i['Csoportok']]={}
for t in pd.date_range(i['start'],i['end']):
st=str(t)[:10]
if st not in data[i['Típus']][i['Csoportok']]:data[i['Típus']][i['Csoportok']][st]=set()
data[i['Típus']][i['Csoportok']][st].add(name)
if name not in attention:attention[name]={}
if st not in attention[name]:attention[name][st]=0
attention[name][st]+=1
0.0 % 3.3083005260197833 % 6.616601052039567 % 9.92490157805935 % 13.233202104079133 % 16.54150263009892 % 19.8498031561187 % 23.15810368213849 % 26.466404208158266 % 29.774704734178055 % 33.08300526019784 % 36.39130578621762 % 39.6996063122374 % 43.007906838257185 % 46.31620736427698 % 49.624507890296755 % 52.93280841631653 % 56.241108942336325 % 59.54940946835611 % 62.85770999437589 % 66.16601052039567 % 69.47431104641547 % 72.78261157243524 % 76.09091209845502 % 79.3992126244748 % 82.70751315049459 % 86.01581367651437 % 89.32411420253416 % 92.63241472855395 % 95.94071525457373 % 99.24901578059351 %
def anneal(t,p=7):
#pd.to_datetime('2020-01-01')-pd.to_datetime('1989-01-01')=11322
return (2-(pd.to_datetime('2020-01-01')-pd.to_datetime(t)).days/11322)**p
tanneal={}
anneal2020=anneal(pd.to_datetime('2020'))
for t in pd.date_range('1990','2020'):
tanneal[t]=anneal(t)/anneal2020+0.1
tanneal[str(t)[:10]]=tanneal[t]
plt.subplots(1,1,figsize=(5,3))
plt.grid()
plt.plot(tanneal.keys(),tanneal.values())
plt.ylabel('Elavulási együttható')
plt.show()
C:\ProgramData\Anaconda3\lib\site-packages\pandas\plotting\_converter.py:129: FutureWarning: Using an implicitly registered datetime converter for a matplotlib plotting method. The converter was registered by pandas on import. Future versions of pandas will require you to explicitly register matplotlib converters. To register the converters: >>> from pandas.plotting import register_matplotlib_converters >>> register_matplotlib_converters() warnings.warn(msg, FutureWarning)
edges={}
points={'Ország':3,'Bizottság':4,'Párt':2,'Megye':1}
for tipus in data:
for csoport in data[tipus]:
print(csoport)
for t in data[tipus][csoport]:
names=list(data[tipus][csoport][t])
st=t[:7]
for r in range(len(names)):
name=names[r]
for p in range(r+1,len(names)):
name2=names[p]
nset=tuple(np.sort([name,name2]))
v=points[tipus]
if t not in edges:edges[st]={}
if nset not in edges[st]:edges[st][nset]={'anneal':0,'values':0}
edges[st][nset]['values']+=v
edges[st][nset]['anneal']+=v*tanneal[t]
🇮🇳 India 🇸🇪 Svédország 🇦🇷 Argentína 🇦🇹 Ausztria 🇦🇺 Ausztrália 🇨🇮 Elefántcsontpart 🇫🇮 Finnország 🇭🇷 Horvátország 🇱🇹 Litvánia 🇵🇹 Portugália 🇸🇮 Szlovénia 🇹🇭 Thaiföld 🇧🇪 Belgium 🇧🇬 Bulgária 🇪🇨 Ecuador 🇮🇷 Irán 🇹🇲 Türkmenisztán Más ország 🇨🇿 Czechia 🇫🇷 Franciaország 🇬🇧 Egyesült Királyság 🇮🇩 Indonézia 🇮🇪 Írország 🇱🇺 Luxemburg 🇲🇦 Marokkó 🇵🇭 Fülöp-szigetek 🇧🇦 Bosznia-Hercegovina 🇳🇴 Norvégia 🇷🇸 Szerbia 🇩🇪 Németország 🇹🇳 Tunézia 🇹🇷 Törökország 🇨🇳 Kína 🇬🇷 Görögország 🇮🇹 Olaszország 🇯🇵 Japán 🇰🇷 Dél-Korea 🇲🇽 Mexikó 🇵🇪 Peru 🇪🇸 Spanyolország 🇨🇾 Ciprus 🇺🇾 Uruguay 🇻🇪 Venezuela 🇨🇷 Costa Rica 🇸🇬 Szingapúr 🇱🇧 Libanon 🇨🇬 Kongó 🇲🇪 Montenegró 🇸🇳 Szenegál 🇪🇬 Egyiptom 🇨🇦 Kanada 🇨🇱 Chile 🇮🇱 Izrael 🇩🇿 Algéria 🇬🇪 Grúzia 🇦🇪 Egyesült Arab Emírségek 🇧🇷 Brazília 🇨🇺 Kuba 🇪🇪 Észtország 🇺🇦 Ukrajna 🇸🇰 Szlovákia 🇿🇦 Dél-Afrika 🇵🇰 Pakisztán 🇵🇱 Lengyelország 🇦🇱 Albánia 🇯🇴 Jordánia 🇧🇭 Bahrein 🇦🇲 Örményország 🇸🇾 Szíria 🇲🇾 Malajzia 🇲🇳 Mongólia 🇨🇴 Kolumbia 🇶🇦 Katar 🇻🇳 Vietnam 🇨🇭 Svájc 🇱🇻 Lettország 🇲🇰 Macedónia Jugoszlávia 🇲🇹 Málta 🇴🇲 Omán 🇦🇿 Azerbajdzsán 🇸🇦 Szaúd-Arábia 🇰🇼 Kuvait 🇭🇺 Magyarország 🇳🇱 Hollandia 🇵🇦 Panama 🇷🇺 Oroszország 🇧🇴 Bolívia 🇬🇳 Guinea 🇰🇿 Kazahsztán 🇩🇰 Dánia 🇮🇸 Izland 🇧🇾 Fehéroroszország 🇮🇶 Irak 🇱🇰 Srí Lanka 🇸🇩 Szudán 🇿🇲 Zambia ⏫ Gazdaság, ipar 🌐 Külpolitika, diaszpóra ⏺️ Európa 🚰 Mezőgazdaság, erdők 🎦 Művészet, média 🔠 Oktatás, tudomány, sport 🚻 Munka, szociális és családi ügyek ➿ Infrastruktúra, energia, kommunikáció 🔀 Állami ügyek 🔄 Közigazgatás, környezetvédelem ♿️ Egészségügy 🚹 Emberi jogok, kisebbségek 🛃 Biztonság 💹 Pénzügy 🔱 PRM - România Mare 🌷 RMDSZ - Romániai Magyar Demokrata Szövetség 🌹 PSD - Social Democrat 👤 Independent - Independent 🔶 PDL - Democrat Liberal 🌹 PDSR - emocraţiei Sociale din România 🔘 Independent - Independent 🔷 USR - Salvaţi România ⚪️ FSN - Salvării Naţionale 📐 PAC - Alianţei Civice 📐 PNL - Naţional Liberal 🔶 PD - ul Democrat 🕊️ PUNR - nităţii Naţionale Române 🦅 UNPR - ţională pentru Progresul României ✳️ PNTCD - ional Ţărănesc Creştin Democrat 🕊️ PC - ul Conservator 🕊️ ALDE - lianţa Liberalilor şi Democraţilor 🔘 FC - Civică ⚪️ FDSN - mocrat al Salvarii Nationale ⚛️ PP-DD - Partidul Poporului Dan Diaconescu 🔘 PAR - Alternativa României 📐 PL'93 - eral 🍀 FER - a Ecologistă Română 🍀 MER - Ecologistă din România 🍏 PMP - Mişcarea Populară 🌹 PSDR - ocial Democrat Român 🕊️ PUR-SL - Partidul Umanist din România 🔘 AUR - pentru Unitatea Românilor 🍀 PER - Ecologist Român 📐 PNL-CD - nal Liberal 🌹 PSM - Socialist al Muncii 🔘 PLS - Liber Schimbist 📐 PNL-AT - nal Liberal 🍀 PDAR - emocrat Agrar din România 🔘 PRNR - econstrucţiei Naţionale din România 🔘 PTLDR - eretului Liber Democrat din România 🔘 GDC - Democratică de Centru 🔘 PDM - Democrat al Muncii 👤 Minorități - Minorități 🔘 ULB - Liberală "Brătianu" 🇷🇴 Gorj 🇷🇴 Hargita 🇷🇴 Kolozs 🇷🇴 Bukarest 🇷🇴 Mehedinți 🇷🇴 Argeș 🇷🇴 Arad 🇷🇴 Dâmbovița 🇷🇴 Maros 🇷🇴 Hunyad 🇷🇴 Brassó 🇷🇴 Vâlcea 🇷🇴 Kovászna 🇷🇴 Iași 🇷🇴 Ialomița 🇷🇴 Olt 🇷🇴 Botoșani 🇷🇴 Máramaros 🇷🇴 Beszterce 🇷🇴 Prahova 🇷🇴 Galac 🇷🇴 Bihar 🇷🇴 Szatmár 🇷🇴 Bákó 🇷🇴 Suceava 🇷🇴 Krassó-Szörény 🇷🇴 Tulcea 🇷🇴 Neamț 🇷🇴 Temes 🇷🇴 Buzău 🇷🇴 Konstanca 🇷🇴 Călărași 🇷🇴 Giurgiu 🇷🇴 Szeben 🇷🇴 Brăila 🇷🇴 Ilfov 🇷🇴 Teleorman 🇷🇴 Fehér 🇷🇴 Szilágy 🇷🇴 Vrancea 🇷🇴 Vaslui 🇷🇴 Dolj 🇷🇴 Diaszpóra
Save
import pickle
def save_obj(obj, name ):
with open('ignore/'+ name + '.pkl', 'wb') as f:
pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)
def load_obj(name ):
with open('ignore/' + name + '.pkl', 'rb') as f:
return pickle.load(f)
save_obj(edges,'plotter_tname_edges')
edges=load_obj('plotter_tname_edges')
Prune
Continue from here...
df=pd.DataFrame(edges).T
all_nodes=set(df.reset_index()['level_0']).union(df.reset_index()['level_1'])
min_baratsag=500
df2=df[df['anneal']>min_baratsag]
df2['regi']=df2['anneal']/df2['values']
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy """Entry point for launching an IPython kernel.
df2=df2['anneal'].reset_index()
df2.columns=['source','target','weight']
nodes={}
for i in all_nodes:
if i not in nodes:
nodes[i]={'pr':0,'bc':0,'cf':0}
G=nx.Graph(df2)
r = nx.pagerank(G,weight='weight')
mr=np.median(list(r.values()))
for i in r:
nodes[i]['pr']=r[i]/mr
Gc = max(nx.connected_component_subgraphs(G), key=len)
r = nx.current_flow_closeness_centrality(Gc,weight='weight')
mr=np.median(list(r.values()))
for i in r:
nodes[i]['cf']=r[i]/mr
links={}
for i in G.edges(data=True):
name=i[0]
name2=i[1]
z=i[2]['weight']
if name not in links:links[name]={}
if name2 not in links:links[name2]={}
links[name][name2]=z
links[name2][name]=z
#save
network={'nodes':nodes,'links':links}
print(len(nodes),'nodes and',len(G.edges()),'edges')
2811 nodes and 307728 edges
open('ignore/plotter_name.json','w').write(json.dumps(network))
32754181
import zipfile
with zipfile.ZipFile("json/plotter_name.zip", "w", compression=zipfile.ZIP_DEFLATED) as zf:
zf.write("ignore/plotter_name.json",'plotter_name.json')