import pandas as pd
import ssl
import seaborn as sns
import re
import matplotlib.pyplot as plt
ssl._create_default_https_context = ssl._create_unverified_context
df = pd.read_csv("https://raw.githubusercontent.com/drobaina/Python/main/microdados_ed_basica_RJ_2022.csv", header=0)
df.head()
| Unnamed: 0 | NU_ANO_CENSO | NO_REGIAO | CO_REGIAO | NO_UF | SG_UF | CO_UF | NO_MUNICIPIO | CO_MUNICIPIO | NO_MESORREGIAO | ... | QT_TUR_FUND_AF | QT_TUR_MED | QT_TUR_PROF | QT_TUR_PROF_TEC | QT_TUR_EJA | QT_TUR_EJA_FUND | QT_TUR_EJA_MED | QT_TUR_ESP | QT_TUR_ESP_CC | QT_TUR_ESP_CE | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 2022 | Sudeste | 3 | Rio de Janeiro | RJ | 33 | Angra dos Reis | 3300100 | Sul Fluminense | ... | 10.0 | 20.0 | 0.0 | 0.0 | 8.0 | 0.0 | 8.0 | 21.0 | 21.0 | 0.0 |
| 1 | 1 | 2022 | Sudeste | 3 | Rio de Janeiro | RJ | 33 | Angra dos Reis | 3300100 | Sul Fluminense | ... | 4.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 4.0 | 4.0 | 0.0 |
| 2 | 2 | 2022 | Sudeste | 3 | Rio de Janeiro | RJ | 33 | Angra dos Reis | 3300100 | Sul Fluminense | ... | 0.0 | 8.0 | 1.0 | 1.0 | 4.0 | 0.0 | 4.0 | 5.0 | 5.0 | 0.0 |
| 3 | 3 | 2022 | Sudeste | 3 | Rio de Janeiro | RJ | 33 | Angra dos Reis | 3300100 | Sul Fluminense | ... | 8.0 | 32.0 | 10.0 | 10.0 | 0.0 | 0.0 | 0.0 | 27.0 | 27.0 | 0.0 |
| 4 | 4 | 2022 | Sudeste | 3 | Rio de Janeiro | RJ | 33 | Angra dos Reis | 3300100 | Sul Fluminense | ... | 8.0 | 5.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 0.0 |
5 rows × 386 columns
# read xlsx
dictionary = pd.read_excel("https://raw.githubusercontent.com/drobaina/Python/main/dicionariodedados.xlsx", header=0)
# remove first and last 8 rows and select columns
dictionary = dictionary.iloc[8:-8, [1, 2, 5]]
dictionary.columns = ["Nome da Variável", "Descrição da Variável", "Categoria"]
# reset index
dictionary = dictionary.reset_index(drop=True)
dictionary
| Nome da Variável | Descrição da Variável | Categoria | |
|---|---|---|---|
| 0 | NU_ANO_CENSO | Ano do Censo | NaN |
| 1 | NO_REGIAO | Nome da Região Geográfica | NaN |
| 2 | CO_REGIAO | Código da Região Geográfica | NaN |
| 3 | NO_UF | Nome da Unidade da Federação | NaN |
| 4 | SG_UF | Sigla da Unidade da Federação | NaN |
| ... | ... | ... | ... |
| 386 | QT_TUR_MED | Número de Turmas de Ensino Médio | NaN |
| 387 | QT_TUR_PROF | Número de Turmas de Educação Profissional | NaN |
| 388 | QT_TUR_PROF_TEC | Número de Turmas de Educação Profissional Técnica | NaN |
| 389 | QT_TUR_EJA | Número de Turmas de Educação de Jovens e Adult... | NaN |
| 390 | QT_TUR_EJA_FUND | Número de Turmas de Educação de Jovens e Adult... | NaN |
391 rows × 3 columns
df_Campos = df[df["NO_MUNICIPIO"] == "Campos dos Goytacazes"]
df_Campos.head()
| Unnamed: 0 | NU_ANO_CENSO | NO_REGIAO | CO_REGIAO | NO_UF | SG_UF | CO_UF | NO_MUNICIPIO | CO_MUNICIPIO | NO_MESORREGIAO | ... | QT_TUR_FUND_AF | QT_TUR_MED | QT_TUR_PROF | QT_TUR_PROF_TEC | QT_TUR_EJA | QT_TUR_EJA_FUND | QT_TUR_EJA_MED | QT_TUR_ESP | QT_TUR_ESP_CC | QT_TUR_ESP_CE | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1415 | 1415 | 2022 | Sudeste | 3 | Rio de Janeiro | RJ | 33 | Campos dos Goytacazes | 3301009 | Norte Fluminense | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 1416 | 1416 | 2022 | Sudeste | 3 | Rio de Janeiro | RJ | 33 | Campos dos Goytacazes | 3301009 | Norte Fluminense | ... | 14.0 | 0.0 | 0.0 | 0.0 | 4.0 | 4.0 | 0.0 | 17.0 | 17.0 | 0.0 |
| 1417 | 1417 | 2022 | Sudeste | 3 | Rio de Janeiro | RJ | 33 | Campos dos Goytacazes | 3301009 | Norte Fluminense | ... | 7.0 | 3.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 0.0 |
| 1418 | 1418 | 2022 | Sudeste | 3 | Rio de Janeiro | RJ | 33 | Campos dos Goytacazes | 3301009 | Norte Fluminense | ... | 4.0 | 3.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 3.0 | 3.0 | 0.0 |
| 1419 | 1419 | 2022 | Sudeste | 3 | Rio de Janeiro | RJ | 33 | Campos dos Goytacazes | 3301009 | Norte Fluminense | ... | 10.0 | 9.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 0.0 |
5 rows × 386 columns
public_schools = df[df["TP_DEPENDENCIA"].isin([1, 2, 3])]
public_schools["NO_MUNICIPIO"].value_counts().head(10)
Rio de Janeiro 1995 Campos dos Goytacazes 344 Duque de Caxias 274 Nova Iguaçu 228 São Gonçalo 203 Petrópolis 198 Macaé 162 Araruama 159 Nova Friburgo 155 Niterói 146 Name: NO_MUNICIPIO, dtype: int64
private_schools = df[df["TP_DEPENDENCIA"] == 4]
private_schools["NO_MUNICIPIO"].value_counts().head(10)
Rio de Janeiro 2492 São Gonçalo 382 Duque de Caxias 344 Nova Iguaçu 314 Niterói 260 São João de Meriti 200 Campos dos Goytacazes 174 Belford Roxo 149 Petrópolis 109 Nilópolis 82 Name: NO_MUNICIPIO, dtype: int64
# Agrupar os dados por cidade e dependência administrativa
grouped = df.groupby(['NO_MUNICIPIO'])['IN_COMPUTADOR'].sum().reset_index()
# Renomear as colunas para ficarem mais claras
grouped.columns = ['Cidade', 'Computadores por Cidade']
grouped
| Cidade | Computadores por Cidade | |
|---|---|---|
| 0 | Angra dos Reis | 139.0 |
| 1 | Aperibé | 13.0 |
| 2 | Araruama | 87.0 |
| 3 | Areal | 15.0 |
| 4 | Armação dos Búzios | 34.0 |
| ... | ... | ... |
| 87 | Três Rios | 67.0 |
| 88 | Valença | 73.0 |
| 89 | Varre-Sai | 14.0 |
| 90 | Vassouras | 34.0 |
| 91 | Volta Redonda | 181.0 |
92 rows × 2 columns
fig, axes = plt.subplots(nrows=3, ncols=3, figsize=(15, 12))
axes = axes.flatten()
variables = ['IN_AGUA_POTAVEL', 'IN_BANHEIRO', 'IN_COZINHA','IN_EQUIP_LOUSA_DIGITAL', 'IN_ACESSO_INTERNET_COMPUTADOR', 'IN_PROF_SAUDE', 'IN_ESCOLARIZACAO', 'IN_PATIO_COBERTO', 'IN_PISCINA']
for i, variable in enumerate(variables):
# Calculate the percentages
private_percentage = private_schools[variable].mean() * 100
public_percentage = public_schools[variable].mean() * 100
labels = ['Private Schools', 'Public Schools']
percentages = [private_percentage, public_percentage]
sns.barplot(x=labels, y=percentages, ax=axes[i], palette='viridis')
title = re.sub(r'_', ' ', re.sub(r'IN_', '', variable))
axes[i].set_title(title.capitalize())
axes[i].set_ylabel('Percentage (%)')
axes[i].set_xlabel('')
axes[i].set_ylim(0, 100) # setting y limit from 0 to 100
plt.tight_layout()
plt.show()
top_cities = df.groupby('NO_MUNICIPIO')['QT_PROF_SEGURANCA'].sum().sort_values(ascending=False).head(10)
plt.figure(figsize=(12, 8))
sns.barplot(x=top_cities.values, y=top_cities.index, palette='viridis')
plt.title('Top 10 cities by quantity of security staff')
plt.xlabel('Total QT_PROF_SEGURANCA')
plt.ylabel('City Name')
plt.show()