import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set_style('whitegrid')
from pivottablejs import pivot_ui
import warnings; warnings.simplefilter('ignore')
Dados obtidos com CNPQ-DGP Webscrapper em 03/07/17.
df = pd.read_excel('Grupos_Lista.xls')
df['Ano de Formação'] = df['Ano de Formação'].fillna(0.0).astype(int)
df.head()
BL = ["Casimiro de Abreu", "Rio das Ostras", "Silva Jardim", "Araruama", "Armação dos Búzios", "Arraial do Cabo", "Cabo Frio", "Iguaba Grande", "São Pedro da Aldeia", "Saquarema"]
CF = ["Cantagalo", "Carmo", "Cordeiro", "Macuco", "Bom Jardim", "Duas Barras", "Nova Friburgo", "Sumidouro", "Santa Maria Madalena", "São Sebastião do Alto", "Trajano de Moraes", "Areal", "Comendador Levy Gasparian", "Paraíba do Sul", "Sapucaia", "Três Rios"]
NOF = ["Bom Jesus do Itabapoana", "Italva", "Itaperuna", "Laje do Muriaé", "Natividade", "Porciúncula", "Varre-Sai", "Aperibé", "Cambuci", "Itaocara", "Miracema", "Santo Antônio de Pádua", "São José de Ubá"]
NF = ["Campos dos Goytacazes", "Cardoso Moreira", "São Fidélis", "São Francisco de Itabapoana", "São João da Barra", "Carapebus", "Conceição de Macabu", "Macaé", "Quissamã"]
SF = [" Angra dos Reis", "Barra do Piraí", "Barra Mansa", "Itatiaia", "Paraty", "Pinheiral", "Piraí", "Porto Real", "Quatis", "Resende", "Rio Claro", "Rio das Flores", "Valença", "Volta Redonda"]
MRJ = ["Itaguaí", "Belford Roxo", "Mesquita", "Nova Iguaçu", "Queimados", "Teresópolis", "Rio de Janeiro", "Mendes", "Nilópolis", "Petrópolis", "Engenheiro Paulo de Frontin", "Itaboraí", "Japeri", "Magé", "Mangaratiba", "Miguel Pereira", "Paracambi", "Paty do Alferes", "Rio Bonito", "São João de Meriti", "Seropédica", "Tanguá", "Guapimirim", "Maricá", "Vassouras", "Cachoeiras de Macacu", "Duque de Caxias", "Niterói", "São Gonçalo", "São José do Vale do Rio Preto"]
lista_geral = BL+ CF+ NOF+ NF+ SF+ MRJ
def MesoR(Mun):
MR = "NaN"
for cid in lista_geral:
if cid in Mun:
Mun= cid
if Mun in BL:
MR = "Baixada Litorânea"
if Mun in CF:
MR = "Centro Fluminense"
if Mun in NOF:
MR = "Noroeste Fluminense"
if Mun in NF:
MR = "Norte Fluminense"
if Mun in SF:
MR = "Sul Fluminense"
if Mun in MRJ:
MR = "Metropolitana do Rio de Janeiro"
return MR
df['Localidade'].fillna("NaN",inplace=True)
df['Mesorregião'] = df['Localidade'].apply(lambda x: MesoR(x))
df = df[df['Mesorregião'] != "NaN"]
df.head()
plt.figure(figsize=(12,6))
plt.title("Grupos criados x Ano")
ax = sns.countplot(df.sort_values('Ano de Formação')['Ano de Formação'][1:])
ax.set(ylabel="# Grupos")
ax.set_xticklabels(df.sort_values('Ano de Formação')['Ano de Formação'][1:].unique(), rotation=90)
plt.tight_layout()
cumulativo = np.cumsum(df.sort_values('Ano de Formação')['Ano de Formação'][1:].value_counts(sort = False).sort_index())
fig = plt.figure(figsize=(10,8))
plt.title("Grupos criados (Cumulativo) x Ano")
plt.xlabel("# Grupos")
plt.ylabel("Ano")
plt.plot(df.sort_values('Ano de Formação')['Ano de Formação'][1:].unique(),cumulativo)
import plotly.tools as tls
from plotly.offline import init_notebook_mode, iplot_mpl
import cufflinks as cf
cf.go_offline()
cumulativo = np.cumsum(df.sort_values('Ano de Formação')['Ano de Formação'][1:].value_counts(sort = False).sort_index())
cumulativoBL = np.cumsum(df[df['Mesorregião'] == "Baixada Litorânea"].sort_values('Ano de Formação')['Ano de Formação'][1:].value_counts(sort = False).sort_index())
cumulativoCF = np.cumsum(df[df['Mesorregião'] == "Centro Fluminense"].sort_values('Ano de Formação')['Ano de Formação'][1:].value_counts(sort = False).sort_index())
cumulativoNF = np.cumsum(df[df['Mesorregião'] == "Norte Fluminense"].sort_values('Ano de Formação')['Ano de Formação'][1:].value_counts(sort = False).sort_index())
cumulativoNOF = np.cumsum(df[df['Mesorregião'] == "Noroeste Fluminense"].sort_values('Ano de Formação')['Ano de Formação'][1:].value_counts(sort = False).sort_index())
cumulativoSF = np.cumsum(df[df['Mesorregião'] == "Sul Fluminense"].sort_values('Ano de Formação')['Ano de Formação'][1:].value_counts(sort = False).sort_index())
cumulativoMRJ = np.cumsum(df[df['Mesorregião'] == "Metropolitana do Rio de Janeiro"].sort_values('Ano de Formação')['Ano de Formação'][1:].value_counts(sort = False).sort_index())
fig = plt.figure(figsize=(10,8))
plt.title("Grupos criados (Cumulativo) x Ano")
plt.xlabel("# Grupos")
plt.ylabel("Ano")
plt.xlim(1949,2017)
plt.plot(df[df['Mesorregião'] == "Baixada Litorânea"].sort_values('Ano de Formação')['Ano de Formação'][1:].unique(),cumulativoBL, label='BL')
plt.plot(df[df['Mesorregião'] == "Centro Fluminense"].sort_values('Ano de Formação')['Ano de Formação'][1:].unique(),cumulativoCF, label='CF')
plt.plot(df[df['Mesorregião'] == "Norte Fluminense"].sort_values('Ano de Formação')['Ano de Formação'][1:].unique(),cumulativoNF, label='NF')
plt.plot(df[df['Mesorregião'] == "Noroeste Fluminense"].sort_values('Ano de Formação')['Ano de Formação'][1:].unique(),cumulativoNOF, label='NOF')
plt.plot(df[df['Mesorregião'] == "Sul Fluminense"].sort_values('Ano de Formação')['Ano de Formação'][1:].unique(),cumulativoSF, label='SF')
plt.plot(df[df['Mesorregião'] == "Metropolitana do Rio de Janeiro"].sort_values('Ano de Formação')['Ano de Formação'][1:].unique(),cumulativoMRJ, label='MRJ')
plt.plot(df.sort_values('Ano de Formação')['Ano de Formação'][1:].unique(),cumulativo, label='Geral')
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
iplot_mpl(fig)
df['Grande Área']= df['Grande Área'].apply(lambda x: x.split(";")[0])
pivot_ui(df, rows=['Mesorregião'],cols=['Grande Área'])
def highlight_max(data, color='yellow'):
'''
highlight the maximum in a Series or DataFrame
'''
attr = 'background-color: {}'.format(color)
if data.ndim == 1: # Series from .apply(axis=0) or axis=1
is_max = data == data.max()
return [attr if v else '' for v in is_max]
else: # from .apply(axis=None)
is_max = data == data.max().max()
return pd.DataFrame(np.where(is_max, attr, ''),
index=data.index, columns=data.columns)
Distribuição dos grupos na mesorregião, por grande área:
aux = pd.pivot_table(df[['Área','Mesorregião','Grande Área']], index=['Mesorregião'],
... columns=['Grande Área'], aggfunc='count', fill_value= 0)
mrq = aux['Área']
mrq.style.apply(highlight_max, axis=1)
mrqp = mrq.replace("-",0)
for region in df['Mesorregião'].unique():
mrqp.loc[region] = (mrqp.loc[region]/sum(mrqp.loc[region]))*100
mrqp.style.format("{:.2f}%")
i = 0
f, axs = plt.subplots(2,3,figsize=(12,10))
f.suptitle("Grande área x Mesorregião")
for region in df['Mesorregião'].unique():
i+=1
plt.subplot(2, 3, i)
ax = sns.barplot(x=df[df['Mesorregião']==region]['Mesorregião'], y=df['Ano de Formação'], data=df,hue=df['Grande Área'], estimator=lambda x: len(x) / len(df[df['Mesorregião']==region]) * 100)
ax.set(ylabel="Porcentagem")
ax.legend_.remove()
plt.tight_layout()
plt.subplots_adjust(top=0.9)
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
A = (df['Mesorregião'].value_counts() / len(df))*100
explode = (0, 0.4, 0.5, 0.6,0.7,0.8)
fig1, ax1 = plt.subplots(figsize=(10,8))
ax1.pie(A.values, explode=explode, labels=A.index, autopct='%1.1f%%',
shadow=True)
ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.tight_layout()
plt.show()
Ncumulativo = df.sort_values('Ano de Formação')['Ano de Formação'][1:].value_counts(sort = False).sort_index()
cumulativo = np.cumsum(df.sort_values('Ano de Formação')['Ano de Formação'][1:].value_counts(sort = False).sort_index())
fig = plt.figure(figsize=(10,8))
plt.title("Grupos criados (Cumulativo) x Ano")
plt.ylabel("# Grupos")
plt.xlabel("Ano")
plt.plot(df.sort_values('Ano de Formação')['Ano de Formação'][1:].unique(),cumulativo,label="Cumulativo")
plt.plot(df.sort_values('Ano de Formação')['Ano de Formação'][1:].unique(),Ncumulativo,label="Por Ano")
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
iplot_mpl(fig)
MunCd = {
"Itatiaia": "Itatiaia",
"PReal": "Porto Real",
"Resende": "Resende",
"Mendes": "Mendes",
"BPirai": "Barra do Piraí",
"BMansa": "Barra Mansa",
"Pinheiral": "Pinheiral",
"Pirai": "Piraí",
"Quatis": "Quatis",
"RClaro": "Rio Claro",
"VRedonda": "Volta Redonda",
"Paracambi": "Paracambi",
"Seropedica": "Seropédica",
"Valenca": "Valença",
"EPFrontin": "Engenheiro Paulo de Frontin",
"Japeri": "Japeri",
"MPereira": "Miguel Pereira",
"Nilopolis": "Nilópolis",
"NIguacu": "Nova Iguaçu",
"Queimados": "Queimados",
"RFlores": "Rio das Flores",
"Vassouras": "Vassouras",
"Mesquita": "Mesquita",
"SJMeriti": "São João de Meriti",
"BRoxo": "Belford Roxo",
"DCaxias": "Duque de Caxias",
"PAlferes": "Paty do Alferes",
"Petropolis": "Petrópolis",
"Areal": "Areal",
"CLGasparian": "Comendador Levy Gasparian",
"PSul": "Paraíba do Sul",
"TRios": "Três Rios",
"Guapimirim": "Guapimirim",
"Itaborai": "Itaboraí",
"Mage": "Magé",
"Marica": "Maricá",
"Niteroi": "Niterói",
"RBonito": "Rio Bonito",
"Tangua": "Tanguá",
"Sumidouro": "Sumidouro",
"Carmo": "Carmo",
"SJVRPreto": "São José do Vale do Rio Preto",
"Sapucaia" : "Sapucaia",
"Teresopolis": "Teresópolis",
"CMacacu": "Cachoeiras de Macacu",
"NFriburgo": "Nova Friburgo",
"Saquarema": "Saquarema",
"SJardim": "Silva Jardim",
"LMuriae": "Laje do Muriaé",
"Miracema": "Miracema",
"SAPadua": "Santo Antônio de Pádua",
"Aperibe": "Aperibé",
"BJardim": "Bom Jardim",
"Cantagalo": "Cantagalo",
"Cordeiro": "Cordeiro",
"DBarras": "Duas Barras",
"Itaocara": "Itaocara",
"Macuco": "Macuco",
"SSAlto": "São Sebastião do Alto",
"TMoraes": "Trajano de Moraes",
"SPDA": "São Pedro da Aldeia",
"ABuzios": "Armação dos Búzios",
"ACabo": "Arraial do Cabo",
"CFrio": "Cabo Frio",
"CAbreu": "Casimiro de Abreu",
"Araruama": "Araruama",
"ROstras": "Rio das Ostras",
"IGrande": "Iguaba Grande",
"Varre-Sai": "Varre-Sai",
"Cambuci": "Cambuci",
"Itaperuna": "Itaperuna",
"Natividade": "Natividade",
"Porciuncula": "Porciúncula",
"SJUba": "São José de Ubá",
"CMacabu": "Conceição de Macabu",
"Carapebus": "Carapebus",
"SMMadalena": "Santa Maria Madalena",
"BJItabapoana": "Bom Jesus do Itabapoana",
"CGoytacazes": "Campos dos Goytacazes",
"CMoreira": "Cardoso Moreira",
"Italva": "Italva",
"Quissama": "Quissamã",
"SFItabapoana": "São Francisco de Itabapoana",
"SFidelis": "São Fidélis",
"SJBarra": "São João da Barra",
"Paraty": "Paraty",
"AReis": "Angra dos Reis",
"Macae": "Macaé",
"Itaguai": "Itaguaí",
"RJ": "Rio de Janeiro",
"Mangaratiba": "Mangaratiba",
"SGoncalo": "São Gonçalo",
}
from pylab import *
cmap = cm.get_cmap('Blues', df['Localidade'].value_counts().nunique())
for i in range(cmap.N):
rgb = cmap(i)[:3] # will return rgba, we take only first 3 so we get rgb
lista = []
aux = []
count=-1
for i in df['Localidade'].value_counts(ascending = True):
if i not in aux:
count+=1
aux.append(i)
lista.append(count)
ref = pd.DataFrame(data=lista, index=df['Localidade'].value_counts(ascending = True).index)
from lxml import etree
f = open('RJ-CNPQ-DGP.svg')
doc = etree.fromstring(f.read().encode('utf-8'))
for i in doc[7]:
i.attrib['style'] = "fill: white; stroke:#000000; stroke-width:80"
cormapa = "fill: white; stroke:#000000; stroke-width:80"
i.attrib['onmouseout'] = cormapa
i.attrib['onmouseout'] = "mouseOut(evt,'white', this.id)"
i.attrib['onmouseover'] = i.attrib['onmouseover'].replace("Desc.", "0 Grupo(s)")
i.attrib['onclick'] = i.attrib['onmouseover']
if MunCd[i.attrib['id']] in ref.index:
count = ref.loc[MunCd[i.attrib['id']]][0]
if df['Localidade'].value_counts(ascending = True)[MunCd[i.attrib['id']]] == df['Localidade'].value_counts(ascending = True).unique()[count]:
cormapa = "fill: "+ matplotlib.colors.rgb2hex(cmap(count)[:3])
i.attrib['style'] = cormapa
i.attrib['onmouseout'] = 'mouseOut(evt,"'+ matplotlib.colors.rgb2hex(cmap(count)[:3]) +'", this.id)'
Descricao = str(df['Localidade'].value_counts(ascending = True)[MunCd[i.attrib['id']]])
i.attrib['onmouseover'] = i.attrib['onmouseover'].replace("0", Descricao)
i.attrib['onclick'] = i.attrib['onmouseover']
for j in i:
j.text = MunCd[i.attrib['id']]
for i in doc[15]:
i.text = "0"
for i in doc[16]:
i.text = str(max(df['Localidade'].value_counts(ascending = True)))
for i in doc[17]:
i.text = "#Grupos x Município"
for i in doc[2]:
for j in i:
if j.attrib['id'] == "stop4883":
corbarra = matplotlib.colors.rgb2hex(cmap(max(ref.values)[0])[:3])
j.attrib['style'] = "stop-color:"+ corbarra + ";stop-opacity:1;" #fim escala
if j.attrib['id'] == "stop4885":
corbarra = matplotlib.colors.rgb2hex(cmap(min(ref.values)[0])[:3])
j.attrib['style'] = "stop-color:"+ corbarra + ";stop-opacity:1;" #inicio escala
mapa =etree.tostring(doc)
with open('RJ_Grupos.svg','w') as f:
f.write(mapa.decode('utf-8'))
%%HTML
<figure>
<embed type="image/svg+xml" src="RJ_Grupos.svg" width="1100" />
</figure>