<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Paixão por Dados</title>
    <link>http://www.sillasgonzaga.com/tags/censo-educacao/index.xml</link>
    <description>Recent content on Paixão por Dados</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <copyright>&amp;copy; 2016. All rights reserved.</copyright>
    <atom:link href="http://www.sillasgonzaga.com/tags/censo-educacao/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Censo da Educação Superior (2): Como plotar o movimento migratório universitário no Brasil em um mapa</title>
      <link>http://www.sillasgonzaga.com/post/censo-da-educacao-superior-02/</link>
      <pubDate>Fri, 08 Jul 2016 00:00:00 +0000</pubDate>
      
      <guid>http://www.sillasgonzaga.com/post/censo-da-educacao-superior-02/</guid>
      <description>

&lt;p&gt;No primeiro post sobre os microdados do Censo da Educação Superior, falei sobre as cidades e estados que mais atraem universitários de fora. Neste segundo post, discutirei mais a fundo este movimento migratório universitário, incluindo a elaboração de um rebusco mapa de fluxo migratório.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;library(stringr)
library(tidyr)
library(magrittr)
library(dplyr)
library(feather)
library(maptools)
library(maps)
library(geosphere)
library(knitr)
&lt;/code&gt;&lt;/pre&gt;

&lt;h1 id=&#34;importação-dos-dados&#34;&gt;Importação dos dados&lt;/h1&gt;

&lt;p&gt;Para plotar em um mapa os universitários que estudam em uma cidade diferente da que nasceram, precisamos de dois tipos de dados:
- Dados espaciais dos municípios brasileiros;&lt;br /&gt;
- Um &lt;a href=&#34;https://pt.wikipedia.org/wiki/Shapefile&#34;&gt;shapefile&lt;/a&gt; dos estados brasileiros
- Dados de universitários que estudam em uma cidade diferente da que nasceram;&lt;/p&gt;

&lt;h2 id=&#34;dados-espaciais&#34;&gt;Dados espaciais&lt;/h2&gt;

&lt;p&gt;Para poder localizar os municípios brasileiros em um mapa, precisamos de dados sobre suas latitudes e longitudes. Em minhas pesquisas, a melhor fonte que eu encontrei foi &lt;a href=&#34;http://www.monolitonimbus.com.br/coordenadas-geograficas-das-cidades-do-brasil/&#34;&gt;neste site&lt;/a&gt;, que fornece o link para baixar um arquivo KML contendo os dados que precisamos. Para fazer a conversão de KML para um formato tratável pelo R, usei comandos em linux, como indicado pelo próprio site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ATENÇÃO&lt;/strong&gt;: Eu baixei o KML descrito acima em 08/06/2016, mas no momento que escrevo este post, o ftp do IBGE para baixar esse arquivo está fora do ar. Por isso, eu disponibilizei os arquivos KML e CSV no &lt;a href=&#34;https://github.com/sillasgonzaga/sillasgonzaga.github.io/tree/master/data&#34;&gt;meu Github&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;df_coord &amp;lt;- read.csv2(&amp;quot;https://raw.githubusercontent.com/sillasgonzaga/sillasgonzaga.github.io/master/data/coordenadas_BR.csv&amp;quot;,
                      stringsAsFactors = FALSE, header = FALSE)

# Ver estrutura do arquivo
head(df_coord, 10)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;##                   V1                                             V2
## 1                                                                  
## 2                                                                  
## 3    BARRA DO QUARAÍ                              RIO GRANDE DO SUL
## 4         URUGUAIANA                              RIO GRANDE DO SUL
## 5             QUARAÍ                              RIO GRANDE DO SUL
## 6          SANT&amp;amp;apos                              ANA DO LIVRAMENTO
## 7  ANA DO LIVRAMENTO -55.5348142679597,-30.8893840103812,200.677824
## 8             ITAQUI                              RIO GRANDE DO SUL
## 9           ALEGRETE                              RIO GRANDE DO SUL
## 10         MAÇAMBARÁ                              RIO GRANDE DO SUL
##                   V3
## 1                   
## 2                   
## 3    BARRA DO QUARAÍ
## 4         URUGUAIANA
## 5             QUARAÍ
## 6  RIO GRANDE DO SUL
## 7                   
## 8             ITAQUI
## 9           ALEGRETE
## 10         MAÇAMBARÁ
##                                                        V4
## 1                                                        
## 2                                                        
## 3             -57.5570603248122,-30.2110754071007,42.0408
## 4   -57.0818249090229,-29.7598231712009,78.23018999999999
## 5          -56.4536470403836,-30.3828679600575,118.674261
## 6                                               SANT&amp;amp;apos
## 7                                                        
## 8           -56.55713349703041,-29.128636898258,62.084645
## 9  -55.7958701453331,-29.78204320831051,94.73120299999999
## 10         -56.06361348173561,-29.146144198381,104.458392
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Acrescentar nomes de colunas
names(df_coord) &amp;lt;- c(&amp;quot;municipio&amp;quot;, &amp;quot;uf&amp;quot;, &amp;quot;municipio_localidade&amp;quot;, &amp;quot;coordenadas&amp;quot;)
# Remover duas primeiras linhas
df_coord &amp;lt;- df_coord[-(1:2),]
# Remover linha na coluna uf se contém número
df_coord &amp;lt;- df_coord[!grepl(&amp;quot;\\d&amp;quot;, df_coord$uf),]
# Remover linha na coluna coordenadas se NAO contem numero
df_coord &amp;lt;- df_coord[grepl(&amp;quot;\\d&amp;quot;, df_coord$coordenadas),]
# Separar coluna de coordenadas em três e remover a última
df_coord %&amp;lt;&amp;gt;% separate(coordenadas, into = c(&#39;x1&#39;, &#39;x2&#39;, &#39;x3&#39;), sep = &amp;quot;,&amp;quot;)

df_coord %&amp;lt;&amp;gt;% filter(municipio == municipio_localidade)
# remover última coluna
df_coord %&amp;lt;&amp;gt;% select(-x3, -municipio_localidade, -uf) %&amp;gt;% rename(lat = x2, lon = x1)
# remover acentos da coluna de municipio_localidade
df_coord$municipio %&amp;lt;&amp;gt;% iconv(to = &amp;quot;ASCII//TRANSLIT&amp;quot;)
# remover duplicatas
df_coord %&amp;lt;&amp;gt;% distinct(municipio)
head(df_coord)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;##         municipio                lon                lat
## 1 BARRA DO QUARAI  -57.5570603248122  -30.2110754071007
## 2      URUGUAIANA  -57.0818249090229  -29.7598231712009
## 3          QUARAI  -56.4536470403836  -30.3828679600575
## 4          ITAQUI -56.55713349703041   -29.128636898258
## 5        ALEGRETE  -55.7958701453331 -29.78204320831051
## 6       MACAMBARA -56.06361348173561   -29.146144198381
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Precisamos de uma coluna com o código do município.
# Para isso, usamos o arquivo df_cidades usado no post1 que eu disponibilizei tbm no github
df_cidades &amp;lt;- read.csv2(&amp;quot;https://raw.githubusercontent.com/sillasgonzaga/sillasgonzaga.github.io/master/data/municipiosBR.csv&amp;quot;)
names(df_cidades) &amp;lt;- c(&amp;quot;uf&amp;quot;, &amp;quot;cod_municipio&amp;quot;, &amp;quot;municipio&amp;quot;)  
df_cidades$municipio  %&amp;lt;&amp;gt;% iconv(to = &amp;quot;ASCII//TRANSLIT&amp;quot;) %&amp;gt;% str_to_upper()
df_cidades %&amp;lt;&amp;gt;% left_join(df_coord, by = &#39;municipio&#39;)
df_cidades %&amp;lt;&amp;gt;% na.omit()
df_cidades$lon %&amp;lt;&amp;gt;% as.numeric()
df_cidades$lat %&amp;lt;&amp;gt;% as.numeric()
head(df_cidades)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;##   uf cod_municipio               municipio       lon        lat
## 2 RO       1100379 ALTO ALEGRE DOS PARECIS -61.85308 -12.131777
## 3 RO       1100403            ALTO PARAISO -53.73289 -23.508131
## 5 RO       1100023               ARIQUEMES -63.03327  -9.908463
## 6 RO       1100452                 BURITIS -63.82968 -10.209805
## 7 RO       1100031                  CABIXI -60.54431 -13.499763
## 8 RO       1100601             CACAULANDIA -62.90319 -10.338873
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Importar o shapefile
# disponível em https://github.com/sillasgonzaga/sillasgonzaga.github.io/raw/master/data/estados_2010.shp
estados &amp;lt;- readShapePoly(&amp;quot;/home/sillas/R/Projetos/CensoEducSuperior/Dados/shapefiles/estados_2010/estados_2010.shp&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&#34;dados-de-universitários&#34;&gt;Dados de universitários&lt;/h2&gt;

&lt;p&gt;O &lt;code&gt;DM_ALUNO.csv&lt;/code&gt;, tratado no post anterior, e filtrado para os casos em que o município de nascimento não é o mesmo do município da IES:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# importar df original
system.time(df &amp;lt;- read_feather(&amp;quot;/home/sillas/R/Projetos/CensoEducSuperior/Dados/dm_aluno_tratado.feather&amp;quot;))
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;##    user  system elapsed 
##   4.516   0.892   6.141
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;df %&amp;lt;&amp;gt;% filter(municipio_diferente == 1)
# excluir cidades que não estão presentes no df_cidades
df %&amp;lt;&amp;gt;% filter(CO_MUNICIPIO_NASCIMENTO %in% df_cidades$cod_municipio &amp;amp; CO_MUNICIPIO_IES %in% df_cidades$cod_municipio)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# selecionar apenas colunas referentes às cidades
df_agg &amp;lt;- df %&amp;gt;%
  select(cod_mun_aluno = CO_MUNICIPIO_NASCIMENTO, nome_mun_aluno =  municipioNascimento,
         cod_mun_ies = CO_MUNICIPIO_IES, nome_mun_ies = municipioIES) %&amp;gt;%
  group_by(cod_mun_aluno, nome_mun_aluno, cod_mun_ies, nome_mun_ies) %&amp;gt;%
  tally(sort = TRUE) %&amp;gt;%
  ungroup() %&amp;gt;%
  rename(qtd = n)

# Os 10 fluxos migratórios mais comuns
df_agg %&amp;gt;% top_n(n = 10, wt = qtd) %&amp;gt;% select(nome_mun_aluno, nome_mun_ies, qtd) %&amp;gt;% kable()
&lt;/code&gt;&lt;/pre&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&#34;left&#34;&gt;nome_mun_aluno&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;nome_mun_ies&lt;/th&gt;
&lt;th align=&#34;right&#34;&gt;qtd&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Aracaju (SE)&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Săo Cristóvăo (SE)&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;17574&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Contagem (MG)&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Belo Horizonte (MG)&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;11023&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Niterói (RJ)&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Rio de Janeiro (RJ)&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;16817&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Rio de Janeiro (RJ)&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Duque de Caxias (RJ)&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;12676&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Rio de Janeiro (RJ)&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Săo Gonçalo (RJ)&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;11029&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;São Bernardo do Campo (SP)&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Săo Paulo (SP)&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;10811&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;São Paulo (SP)&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Guarulhos (SP)&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;14762&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;São Paulo (SP)&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Săo Bernardo do Campo (SP)&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;15408&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Porto Alegre (RS)&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Indaial (SC)&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;11902&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Porto Alegre (RS)&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Canoas (RS)&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;12571&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Uma curiosidade sobre o primeiro lugar da lista: o fluxo Aracaju &amp;gt; São Cristóvão é devido ao fato de a única universidade pública de Sergipe, a Universidade Federal de Sergipe (UFS), estar localizado em São Cristóvão, mas como a UFS é muito próxima a Sergipe, os universitários aracajuanos vão à UFS e voltam para casa no mesmo dia.&lt;/p&gt;

&lt;p&gt;Finalmente, vamos o código para plotar o mapa. O código abaixo foi &amp;ldquo;inspirado&amp;rdquo; &lt;a href=&#34;http://flowingdata.com/2011/05/11/how-to-map-connections-with-great-circles/&#34;&gt;deste post do Flowing Data&lt;/a&gt;, um ótimo blog sobre visualização de dados. Adaptar o código do artigo não foi tão direto como eu imaginava, por isso fiz questão de documentar todos os passos e explicar o que eles fazem.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Para deixar mais fortes os fluxos mais frequentes, precisamos classificar os dados em ordem crescente de frequência
df_agg %&amp;lt;&amp;gt;% arrange(qtd)

# Criar dataframes separados para os municipios do aluno (origem ou org) e da IES (destino ou dest)
df_org &amp;lt;- select(df_agg, org = cod_mun_aluno)
df_dest &amp;lt;- select(df_agg, dest = cod_mun_ies)
# criar variáveis para a quantidade de cada fluxo
qtd &amp;lt;- df_agg$qtd
maxqtd &amp;lt;- max(qtd)
# acrescentar latitude e longitude para cada cidade dois dataframes
df_org %&amp;lt;&amp;gt;% left_join(df_cidades, by = c(&#39;org&#39; = &#39;cod_municipio&#39;))
df_dest %&amp;lt;&amp;gt;% left_join(df_cidades, by = c(&#39;dest&#39; = &#39;cod_municipio&#39;))

# para ver quanto tempo levou para gerar o mapa
t1 &amp;lt;- proc.time()

# Para salvar em um PNG de alta resolução, desmarque as duas linhas abaixo, além da dev.off()
#myPng &amp;lt;- function(..., width=13, height=13, res=300) {png(..., width=width*res, height=height*res, res=res)}
#myPng(&amp;quot;mapa.png&amp;quot;)

# Para deixar o gráfico bonito, usaremos um fundo preto
map(estados, col=&amp;quot;#191919&amp;quot;, fill=TRUE, bg=&amp;quot;#000000&amp;quot;)
# além de um escala que vai de preto (valores menores) a azul (valores maiores)
pal &amp;lt;- colorRampPalette(c(&amp;quot;#333333&amp;quot;, &amp;quot;white&amp;quot;, &amp;quot;#1292db&amp;quot;))
colors &amp;lt;- pal(100)
# título
title(&amp;quot;Mapeamento do movimento migratório \nuniversitário no Brasil&amp;quot;, col.main = &amp;quot;white&amp;quot;, cex.main = 1)
# referencia abaixo do mapa
mtext(&amp;quot;Fonte: Censo do Ensino Superior 2014 \n Autor: Sillas Gonzaga (sillasgonzaga.github.io)&amp;quot;,
      col = &amp;quot;white&amp;quot;, side = 1, line = 1, cex = 1)
# Para gerar as linhas, a função gcIntermediate é necessária,
# porém dois dos argumentos dela, p1 e p2, só podem ser vetores de tamanho 2
# portanto, preciamos fazer um for loop para plotar cada linha de df_org e df_dest individualmente
# ao final do loop, todas as linhas estarão plotadas no mapa
for (i in 1:nrow(df_agg)) {
  p1 = c(df_org[i, ]$lon, df_org[i, ]$lat)
  p2 = c(df_dest[i, ]$lon, df_dest[i, ]$lat)
  inter &amp;lt;- gcIntermediate(p1, p2, n = 100, addStartEnd = TRUE)
  # determinar cor de cada fluxo
  colindex &amp;lt;- ((qtd[i]/maxqtd)*length(colors)) %&amp;gt;% round
  mycol = colors[colindex]
  lines(inter, col = mycol, lwd = 0.8)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Clique na imagem abaixo para ver em alta definição.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://i.imgur.com/gvCCHSN.png&#34;&gt;&lt;img src=&#34;http://www.sillasgonzaga.com/figs/censo_educ_superior2/plotar mapa-1.png&#34; alt=&#34;&#34; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;#dev.off()
t2 &amp;lt;- proc.time()
# Tempo necessário para construir o mapa (em segundos)
t2 - t1
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;##    user  system elapsed 
## 322.500   3.436 375.426
&lt;/code&gt;&lt;/pre&gt;
</description>
    </item>
    
    <item>
      <title>Censo da Educação Superior (1) - Quais são as cidades mais universitárias do Brasil?</title>
      <link>http://www.sillasgonzaga.com/post/censo-da-educacao-superior-01/</link>
      <pubDate>Tue, 07 Jun 2016 00:00:00 +0000</pubDate>
      
      <guid>http://www.sillasgonzaga.com/post/censo-da-educacao-superior-01/</guid>
      <description>

&lt;p&gt;Recentemente, discuti com um amigo meu que afirmou que Aracaju, cidade onde moramos, é uma capital universitária - ou seja, uma cidade que atrai muitos estudantes de fora -, que eu não acredito que seja verdade. Mas não há melhor maneira de responder a isso senão com análise de dados, não é mesmo?&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;library(data.table)
library(dplyr)
library(magrittr)
library(gdata)
library(feather)
library(ggplot2)
library(ggthemes)
library(stringr)
library(tidyr)
library(microbenchmark)
library(gridExtra)
library(scales)
library(cowplot)
library(gtable)
library(grid)
library(ggrepel)
setwd(&amp;quot;/home/sillas/R/Projetos/CensoEducSuperior/Dados&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;h1 id=&#34;introdução&#34;&gt;Introdução&lt;/h1&gt;

&lt;p&gt;Os dados que podem tirar essa dúvida, além de trazer a luz muitas outras informações interessantes, são os microdados do &lt;a href=&#34;http://portal.inep.gov.br/basica-levantamentos-microdados&#34;&gt;Censo da Educação Superior&lt;/a&gt;, disponibilizados pelo Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira, o &lt;a href=&#34;http://portal.inep.gov.br/&#34;&gt;Inep&lt;/a&gt;. Segundo o &lt;a href=&#34;http://dados.gov.br/dataset/microdados-do-censo-da-educacao-superior&#34;&gt;Portal Brasileiro de Dados&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Anualmente, o Inep realiza a coleta de dados sobre a educação superior, com o objetivo de oferecer informações detalhadas sobre a situação atual e as grandes tendências do setor, tanto à comunidade acadêmica quanto à sociedade em geral.
A coleta dos dados tem como referência as diretrizes gerais previstas pelo Decreto nº 6.425 de 4 de abril de 2008. O censo da educação superior reúne informações sobre as instituições de ensino superior, seus cursos de graduação presencial ou a distância, cursos seqüenciais, vagas oferecidas, inscrições, matrículas, ingressantes e concluintes, além de informações sobre docentes, nas diferentes formas de organização acadêmica e categoria administrativa.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para saber mais: &lt;a href=&#34;http://www.censosuperior.inep.gov.br/&#34;&gt;http://www.censosuperior.inep.gov.br/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Os dados mais atualizados disponíveis ao público são de 2014. Neste post, mostrarei todo o processo da análise dos dados, composto por limpeza, manipulação e apresentação dos resultados.&lt;/p&gt;

&lt;h1 id=&#34;limpeza-de-dados&#34;&gt;Limpeza de dados&lt;/h1&gt;

&lt;p&gt;O arquivo principal desta análise, o &lt;code&gt;DM_ALUNO.csv&lt;/code&gt;, é um arquivo de 5,4 GB onde as colunas são separadas pelo caractere &lt;code&gt;|&lt;/code&gt;. Como só tenho 4 GB de memória RAM em meu notebook, o R não conseguirá importar este arquivo da maneira tradicional. Contudo, não é necessário carregar o arquivo para o R para saber algumas características sobre ele. O dicionário dos microdados, disponível na planilha ANEXO I - 2014, informa que existem 117 colunas no arquivo em questão. Felizmente, para responder a pergunta deste post, só precisamos de quatro colunas:&lt;br /&gt;
- &lt;code&gt;CO_IES&lt;/code&gt;, que informa o código único de identificação da IES do aluno;&lt;br /&gt;
- &lt;code&gt;CO_UF_NASCIMENTO&lt;/code&gt;, que informa o código do estado de nascimento do aluno;&lt;br /&gt;
- &lt;code&gt;CO_MUNICIPIO_NASCIMENTO&lt;/code&gt;, que informa o código do nascimento do aluno;
- &lt;code&gt;ANO_INGRESSO&lt;/code&gt;, que informa o ano de ingresso do aluno no curso.&lt;/p&gt;

&lt;p&gt;Obs.: Veja que a variável &lt;code&gt;ANO_INGRESSO&lt;/code&gt; diz respeito ao aluno que entrou no curso e não na universidade. Como mudanças de curso não são tão frequentes assim e como o volume de dados é muito grande, fazendo com que essas incertezas não prejudiquem o resultado, ignorarei esse detalhe nos resultados.&lt;/p&gt;

&lt;p&gt;Para importar apenas essas colunas para o R, a melhor opção foi usar um comando em bash, que é muito mais rápido que o R para tarefas de tratamento de arquivos de texto. O que eu fiz foi criar um novo arquivo, chamado de &lt;code&gt;DM_ALUNO_novo.csv&lt;/code&gt;, com apenas essas quatro variáveis:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# colunas importantes: CO_IES (1),  UF(40), CO_MUNICIPIO_NASCIMENTO(41), ANO_INGRESSO (117)
# cut_sh &amp;lt;- &amp;quot;cut -d &#39;|&#39; -f 1,40,41,117 DM_ALUNO.csv &amp;gt; DM_ALUNO_novo.csv&amp;quot;
# system.time(system(cut_sh))

# A operação acima leva cerca de 20 segundos para ser executada

# Comparando os dois arquivos:
file.size(&amp;quot;DM_ALUNO.csv&amp;quot;) %&amp;gt;% humanReadable()
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in if (any(x &amp;lt; 0)) stop(&amp;quot;&#39;x&#39; must be positive&amp;quot;): missing value where TRUE/FALSE needed
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;file.size((&amp;quot;DM_ALUNO_novo.csv&amp;quot;)) %&amp;gt;% humanReadable()
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in if (any(x &amp;lt; 0)) stop(&amp;quot;&#39;x&#39; must be positive&amp;quot;): missing value where TRUE/FALSE needed
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Assim, o arquivo a ser importado tem apenas 195,5 MB. Contudo, como ele tem muitas linhas, escolhi o pacote &lt;code&gt;data.table&lt;/code&gt; para importar e manipular os dados:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;system.time(df &amp;lt;- fread(&amp;quot;DM_ALUNO_novo.csv&amp;quot;))
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in fread(&amp;quot;DM_ALUNO_novo.csv&amp;quot;): File &#39;DM_ALUNO_novo.csv&#39; does not exist. Include one or more spaces to consider the input a system command.
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Timing stopped at: 0 0 0
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;x = df %&amp;gt;% nrow %&amp;gt;% format(big.mark = &amp;quot;.&amp;quot;, decimal.mark = &amp;quot;,&amp;quot;)
paste0(&amp;quot;Quantidade de linhas do arquivo importado: &amp;quot;, x)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## [1] &amp;quot;Quantidade de linhas do arquivo importado: 8.041.338&amp;quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;head(df)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;##    CO_IES CO_UF_NASCIMENTO CO_MUNICIPIO_NASCIMENTO ANO_INGRESSO
## 1:      1               51                 5108402         2012
## 2:      1               51                 5103403         2012
## 3:      1               51                 5103403         2012
## 4:      1               51                 5103403         2014
## 5:      1               51                 5103403         2011
## 6:      1               51                 5103403         2011
##                                 NO_IES SGL_IES DS_CATEGORIA_ADMINISTRATIVA
## 1: UNIVERSIDADE FEDERAL DE MATO GROSSO    UFMT             Pública Federal
## 2: UNIVERSIDADE FEDERAL DE MATO GROSSO    UFMT             Pública Federal
## 3: UNIVERSIDADE FEDERAL DE MATO GROSSO    UFMT             Pública Federal
## 4: UNIVERSIDADE FEDERAL DE MATO GROSSO    UFMT             Pública Federal
## 5: UNIVERSIDADE FEDERAL DE MATO GROSSO    UFMT             Pública Federal
## 6: UNIVERSIDADE FEDERAL DE MATO GROSSO    UFMT             Pública Federal
##    CO_MUNICIPIO_IES NO_MUNICIPIO_IES CO_UF_IES SGL_UF_IES NO_REGIAO_IES
## 1:          5103403           Cuiabá        51         MT  Centro-Oeste
## 2:          5103403           Cuiabá        51         MT  Centro-Oeste
## 3:          5103403           Cuiabá        51         MT  Centro-Oeste
## 4:          5103403           Cuiabá        51         MT  Centro-Oeste
## 5:          5103403           Cuiabá        51         MT  Centro-Oeste
## 6:          5103403           Cuiabá        51         MT  Centro-Oeste
##    municipioNascimento ufNascimento municipioIES capitalIES
## 1:  Várzea Grande (MT)           MT  Cuiabá (MT)          1
## 2:         Cuiabá (MT)           MT  Cuiabá (MT)          1
## 3:         Cuiabá (MT)           MT  Cuiabá (MT)          1
## 4:         Cuiabá (MT)           MT  Cuiabá (MT)          1
## 5:         Cuiabá (MT)           MT  Cuiabá (MT)          1
## 6:         Cuiabá (MT)           MT  Cuiabá (MT)          1
##    municipio_diferente uf_diferente
## 1:                   1            0
## 2:                   0            0
## 3:                   0            0
## 4:                   0            0
## 5:                   0            0
## 6:                   0            0
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Com o &lt;code&gt;data.table&lt;/code&gt;, o R levou menos de 3 segundos para carregar o arquivo. Já deu para ver que o objeto carregado tem quase 11 milhões de linhas e alguns valores nulos nas colunas referente à UF e ao município de nascimento.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Percentual de alunos com informação de UF de nascimento inválida
100*sum(is.na(df$CO_UF_NASCIMENTO))/nrow(df)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## [1] 0
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# filtrar fora alunos sem informação de UF
df &amp;lt;- df[!is.na(CO_UF_NASCIMENTO)]
&lt;/code&gt;&lt;/pre&gt;

&lt;h1 id=&#34;manipulação-dos-dados&#34;&gt;Manipulação dos dados&lt;/h1&gt;

&lt;p&gt;Outro arquivo presente nos microdados é o &lt;code&gt;DM_IES.csv&lt;/code&gt;, que traz informações sobre as Instituições de Ensino Superior no Brasil. Para este post, ele será usado como uma tabela suporte ao arquivo principal, que obterá dele informações sobre as IES de cada aluno, como o nome, o estado onde está localizada, o tipo da universidade, etc.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;df_ies &amp;lt;- fread(&amp;quot;DM_IES.CSV&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in fread(&amp;quot;DM_IES.CSV&amp;quot;): File &#39;DM_IES.CSV&#39; does not exist. Include one or more spaces to consider the input a system command.
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Vendo se funcionou:
names(df_ies)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in eval(expr, envir, enclos): object &#39;df_ies&#39; not found
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Imprimindo alguns nomes de universidades:
df_ies$NO_IES %&amp;gt;% head
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in eval(expr, envir, enclos): object &#39;df_ies&#39; not found
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Temos que consertar o encoding do arquivo. Para isso, usamos a função iconv
df_ies$NO_IES %&amp;lt;&amp;gt;% iconv(from = &amp;quot;ISO-8859-2&amp;quot;, to = &amp;quot;UTF-8&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in eval(expr, envir, enclos): object &#39;df_ies&#39; not found
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Testando para ver se funcionou:
df_ies$NO_IES %&amp;gt;% head
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in eval(expr, envir, enclos): object &#39;df_ies&#39; not found
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Funcionou! Vamos então fazer o mesmo para outras colunas de texto
df_ies$SGL_IES %&amp;lt;&amp;gt;% iconv(from = &amp;quot;ISO-8859-2&amp;quot;, to = &amp;quot;UTF-8&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in eval(expr, envir, enclos): object &#39;df_ies&#39; not found
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;df_ies$DS_CATEGORIA_ADMINISTRATIVA %&amp;lt;&amp;gt;% iconv(from = &amp;quot;ISO-8859-2&amp;quot;, to = &amp;quot;UTF-8&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in eval(expr, envir, enclos): object &#39;df_ies&#39; not found
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;df_ies$NO_MUNICIPIO_IES %&amp;lt;&amp;gt;% iconv(from = &amp;quot;ISO-8859-2&amp;quot;, to = &amp;quot;UTF-8&amp;quot;)  
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in eval(expr, envir, enclos): object &#39;df_ies&#39; not found
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Selecionando apenas colunas úteis para esta análise
df_ies %&amp;lt;&amp;gt;% select(CO_IES, NO_IES, SGL_IES, DS_CATEGORIA_ADMINISTRATIVA, CO_MUNICIPIO_IES,
                   NO_MUNICIPIO_IES, CO_UF_IES, SGL_UF_IES, NO_REGIAO_IES)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in eval(expr, envir, enclos): object &#39;df_ies&#39; not found
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# juntando todos os arquivos em um só:
df %&amp;lt;&amp;gt;% left_join(df_ies, by = &amp;quot;CO_IES&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in is.data.frame(y): object &#39;df_ies&#39; not found
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;rm(df_ies)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Warning in rm(df_ies): object &#39;df_ies&#39; not found
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Certificar que o df será tratado como data.table:
setDT(df)
# Nosso df ficou assim:
str(df)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Classes &#39;data.table&#39; and &#39;data.frame&#39;:	8041338 obs. of  18 variables:
##  $ CO_IES                     : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ CO_UF_NASCIMENTO           : int  51 51 51 51 51 51 51 51 51 51 ...
##  $ CO_MUNICIPIO_NASCIMENTO    : int  5108402 5103403 5103403 5103403 5103403 5103403 5103403 5103403 5103403 5103403 ...
##  $ ANO_INGRESSO               : int  2012 2012 2012 2014 2011 2011 2010 2010 2011 2010 ...
##  $ NO_IES                     : chr  &amp;quot;UNIVERSIDADE FEDERAL DE MATO GROSSO&amp;quot; &amp;quot;UNIVERSIDADE FEDERAL DE MATO GROSSO&amp;quot; &amp;quot;UNIVERSIDADE FEDERAL DE MATO GROSSO&amp;quot; &amp;quot;UNIVERSIDADE FEDERAL DE MATO GROSSO&amp;quot; ...
##  $ SGL_IES                    : chr  &amp;quot;UFMT&amp;quot; &amp;quot;UFMT&amp;quot; &amp;quot;UFMT&amp;quot; &amp;quot;UFMT&amp;quot; ...
##  $ DS_CATEGORIA_ADMINISTRATIVA: chr  &amp;quot;Pública Federal&amp;quot; &amp;quot;Pública Federal&amp;quot; &amp;quot;Pública Federal&amp;quot; &amp;quot;Pública Federal&amp;quot; ...
##  $ CO_MUNICIPIO_IES           : int  5103403 5103403 5103403 5103403 5103403 5103403 5103403 5103403 5103403 5103403 ...
##  $ NO_MUNICIPIO_IES           : chr  &amp;quot;Cuiabá&amp;quot; &amp;quot;Cuiabá&amp;quot; &amp;quot;Cuiabá&amp;quot; &amp;quot;Cuiabá&amp;quot; ...
##  $ CO_UF_IES                  : int  51 51 51 51 51 51 51 51 51 51 ...
##  $ SGL_UF_IES                 : chr  &amp;quot;MT&amp;quot; &amp;quot;MT&amp;quot; &amp;quot;MT&amp;quot; &amp;quot;MT&amp;quot; ...
##  $ NO_REGIAO_IES              : chr  &amp;quot;Centro-Oeste&amp;quot; &amp;quot;Centro-Oeste&amp;quot; &amp;quot;Centro-Oeste&amp;quot; &amp;quot;Centro-Oeste&amp;quot; ...
##  $ municipioNascimento        : chr  &amp;quot;Várzea Grande (MT)&amp;quot; &amp;quot;Cuiabá (MT)&amp;quot; &amp;quot;Cuiabá (MT)&amp;quot; &amp;quot;Cuiabá (MT)&amp;quot; ...
##  $ ufNascimento               : chr  &amp;quot;MT&amp;quot; &amp;quot;MT&amp;quot; &amp;quot;MT&amp;quot; &amp;quot;MT&amp;quot; ...
##  $ municipioIES               : chr  &amp;quot;Cuiabá (MT)&amp;quot; &amp;quot;Cuiabá (MT)&amp;quot; &amp;quot;Cuiabá (MT)&amp;quot; &amp;quot;Cuiabá (MT)&amp;quot; ...
##  $ capitalIES                 : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ municipio_diferente        : num  1 0 0 0 0 0 0 0 0 0 ...
##  $ uf_diferente               : num  0 0 0 0 0 0 0 0 0 0 ...
##  - attr(*, &amp;quot;sorted&amp;quot;)= chr &amp;quot;CO_IES&amp;quot;
##  - attr(*, &amp;quot;.internal.selfref&amp;quot;)=&amp;lt;externalptr&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Acrescentar nome do municipio de nascimento
# importar códigos dos municípios brasileiros (tirado do site do IBGE)
df_cidades &amp;lt;- fread(&amp;quot;municipiosBR.csv&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## Error in fread(&amp;quot;municipiosBR.csv&amp;quot;): File &#39;municipiosBR.csv&#39; does not exist. Include one or more spaces to consider the input a system command.
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;names(df_cidades) &amp;lt;- c(&amp;quot;uf&amp;quot;, &amp;quot;codigo&amp;quot;, &amp;quot;nomemunicipio&amp;quot;)  
# Acrescentar coluna no df original:
df &amp;lt;- df[, municipioNascimento := df_cidades$nomemunicipio[match(CO_MUNICIPIO_NASCIMENTO, df_cidades$codigo)]]
df &amp;lt;- df[, ufNascimento := df_cidades$uf[match(CO_MUNICIPIO_NASCIMENTO, df_cidades$codigo)]]
# Acrescentar UF no nome da cidade
df &amp;lt;- df[, municipioIES := paste0(NO_MUNICIPIO_IES, &amp;quot; (&amp;quot;, SGL_UF_IES, &amp;quot;)&amp;quot;)]
df &amp;lt;- df[, municipioNascimento := paste0(municipioNascimento, &amp;quot; (&amp;quot;, ufNascimento, &amp;quot;)&amp;quot;)]


# Adicionar coluna que identifica se cidade é capital
capitaisBR &amp;lt;- c(&amp;quot;RIO BRANCO&amp;quot;, &amp;quot;MACEIO&amp;quot;, &amp;quot;MACAPA&amp;quot;, &amp;quot;MANAUS&amp;quot;, &amp;quot;SALVADOR&amp;quot;, &amp;quot;FORTALEZA&amp;quot;, &amp;quot;BRASÍLIA&amp;quot;, &amp;quot;VITORIA&amp;quot;,
                &amp;quot;GOIANIA&amp;quot;, &amp;quot;SAO LUIS&amp;quot;, &amp;quot;CUIABA&amp;quot;, &amp;quot;CAMPO GRANDE&amp;quot;, &amp;quot;BELO HORIZONTE&amp;quot;, &amp;quot;BELÉM&amp;quot;, &amp;quot;JOAO PESSOA&amp;quot;,
                &amp;quot;CURITIBA&amp;quot;, &amp;quot;RECIFE&amp;quot;, &amp;quot;TERESINA&amp;quot;, &amp;quot;RIO DE JANEIRO&amp;quot;, &amp;quot;NATAL&amp;quot;, &amp;quot;PORTO ALEGRE&amp;quot;, &amp;quot;PORTO VELHO&amp;quot;,
                &amp;quot;BOA VISTA&amp;quot;, &amp;quot;FLORIANOPOLIS&amp;quot;, &amp;quot;SAO PAULO&amp;quot;, &amp;quot;ARACAJU&amp;quot;, &amp;quot;PALMAS&amp;quot;
                )


removeracentos &amp;lt;- function(x) iconv(x, to = &amp;quot;ASCII//TRANSLIT&amp;quot;)
df &amp;lt;- df[, capitalIES := ifelse(removeracentos(str_to_upper(NO_MUNICIPIO_IES)) %in% capitaisBR, 1, 0)]
&lt;/code&gt;&lt;/pre&gt;

&lt;h1 id=&#34;apresentação-de-dados&#34;&gt;Apresentação de dados&lt;/h1&gt;

&lt;p&gt;Agora já é possível fazer diversas análises possíveis. Vamos então responder a algumas perguntas.&lt;/p&gt;

&lt;h2 id=&#34;quantos-universitários-estudam-foram-de-suas-cidades-e-de-seus-estados-de-nascimento&#34;&gt;Quantos universitários estudam foram de suas cidades e de seus estados de nascimento?&lt;/h2&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;media &amp;lt;- function(x) (round(100*mean(x), 2))
df &amp;lt;- df[, municipio_diferente := ifelse(CO_MUNICIPIO_IES != CO_MUNICIPIO_NASCIMENTO, 1, 0)]
df &amp;lt;- df[, uf_diferente := ifelse(CO_UF_IES != CO_UF_NASCIMENTO, 1, 0)]

media(df$municipio_diferente)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## [1] 57.38
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;media(df$uf_diferente)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;## [1] 22.83
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;57,38% dos alunos estudam em uma cidade diferente da que nasceram e 22,83% em um estado diferente.&lt;/p&gt;

&lt;p&gt;A distribuição desse índice por cidade e por IES pode ser observada nestes gráficos:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;temp1 &amp;lt;- df %&amp;gt;%
  tbl_df() %&amp;gt;% # necessário para converter data.table em tbl_df, o formato do dplyr
  group_by(CO_MUNICIPIO_IES) %&amp;gt;%
  summarise(porc_cidade_dif = media(municipio_diferente), porc_uf_dif = media(uf_diferente)) %&amp;gt;%
  gather(referencia, valor, 2:3) %&amp;gt;%
  mutate(referencia = factor(referencia, labels = c(&amp;quot;Alunos de outra cidade&amp;quot;, &amp;quot;Alunos de outro estado&amp;quot;)),
         estratificacao = &amp;quot;Estratificação por cidade&amp;quot;) %&amp;gt;% select(-1)

temp2 &amp;lt;- df %&amp;gt;%
  tbl_df() %&amp;gt;% # necessário para converter data.table em tbl_df, o formato do dplyr
  group_by(CO_IES) %&amp;gt;%
  summarise(porc_cidade_dif = media(municipio_diferente), porc_uf_dif = media(uf_diferente)) %&amp;gt;%
  gather(referencia, valor, 2:3) %&amp;gt;%
  mutate(referencia = factor(referencia, labels = c(&amp;quot;Alunos de outra cidade&amp;quot;, &amp;quot;Alunos de outro estado&amp;quot;)),
         estratificacao = &amp;quot;Estratificação por IES&amp;quot;) %&amp;gt;% select(-1)

temp &amp;lt;- rbind(temp1, temp2)

ggplot(temp, aes(x = valor)) +
    geom_histogram(binwidth = 5, fill = &amp;quot;#1A476F&amp;quot;, color = &amp;quot;black&amp;quot;) +
    facet_wrap(estratificacao ~ referencia, scales = &amp;quot;free_y&amp;quot;) +
    scale_x_continuous(breaks = seq(0, 100, 10)) + 
    theme_bw() +
    labs(x = &amp;quot;%&amp;quot;, y = &amp;quot;Frequência&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;http://www.sillasgonzaga.com/figs/censo_educ_superior1/unnamed-chunk-6-1.png&#34; alt=&#34;center&#34; /&gt;&lt;/p&gt;

&lt;p&gt;A diferença da distribuição de alunos de outra cidade quando se agrega os resultados por cidade ou por IES é curiosa, a ponto de eu não conseguir formular uma explicação para ela.&lt;/p&gt;

&lt;h2 id=&#34;quais-são-as-cidades-que-mais-atraem-universitários-de-outros-municípios-e-estados&#34;&gt;Quais são as cidades que mais atraem universitários de outros municípios e estados?&lt;/h2&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Definir um vetor de cores para cada região geográfica, 
# cada uma terá uma cor fixa, baseada no palette wsj() do pacote ggthemes()
cores &amp;lt;- c(&amp;quot;Centro-Oeste&amp;quot; = &#39;#c72e29&#39;, &#39;Nordeste&#39; = &#39;#016392&#39;,
           &#39;Norte&#39; = &#39;#be9c2e&#39;, &#39;Sudeste&#39; = &#39;#098154&#39;, &#39;Sul&#39; = &#39;#fb832d&#39;)

#p1 = percentual de aluno de outros municipios
p1 &amp;lt;- df %&amp;gt;% tbl_df() %&amp;gt;%
  group_by(municipioIES, NO_REGIAO_IES) %&amp;gt;%
  summarise(porc_municipio = media(municipio_diferente)) %&amp;gt;%
  ungroup() %&amp;gt;%
  top_n(9, porc_municipio) %&amp;gt;%
  ggplot(aes(x = reorder(municipioIES, porc_municipio), y = porc_municipio, fill = NO_REGIAO_IES)) +
    geom_bar(stat = &amp;quot;identity&amp;quot;) +
    scale_fill_manual(values = cores) +
    theme_bw() +
    scale_y_continuous(limits = c(0, 100)) +
    theme(panel.border = element_blank()) +
    coord_flip() +
    labs(x = NULL, y = NULL,
         title = &amp;quot;Cidades com maior porcentual \nde universitários de cidades diferentes&amp;quot;, fill = &amp;quot;Região&amp;quot;)

# p2: percentual de aluno de outros estados
p2 &amp;lt;- df %&amp;gt;% tbl_df() %&amp;gt;%
  group_by(municipioIES, NO_REGIAO_IES) %&amp;gt;%
  summarise(porc_uf = media(uf_diferente)) %&amp;gt;%
  ungroup() %&amp;gt;%
  top_n(9, porc_uf) %&amp;gt;%
  ggplot(aes(x = reorder(municipioIES, porc_uf), y = porc_uf, fill = NO_REGIAO_IES)) +
    geom_bar(stat = &amp;quot;identity&amp;quot;) +
    scale_fill_manual(values = cores) +
    theme_bw()  +
    scale_y_continuous(limits = c(0, 100)) +
    coord_flip() +
    labs(x = NULL, y = NULL,
         title = &amp;quot;Cidades com maior porcentual \nde universitários de estados diferentes&amp;quot;, fill = &amp;quot;Região&amp;quot;) +
    theme(panel.border = element_blank())

# p1 com apenas capitais
p3 &amp;lt;- df %&amp;gt;% tbl_df() %&amp;gt;%
  filter(capitalIES == 1) %&amp;gt;%
  group_by(municipioIES, NO_REGIAO_IES) %&amp;gt;%
  summarise(porc_municipio = media(municipio_diferente)) %&amp;gt;%
  ungroup() %&amp;gt;%
  top_n(9, porc_municipio) %&amp;gt;%
  ggplot(aes(x = reorder(municipioIES, porc_municipio), y = porc_municipio, fill = NO_REGIAO_IES)) +
    geom_bar(stat = &amp;quot;identity&amp;quot;) +
    scale_fill_manual(values = cores) +
    theme_bw() +
    scale_y_continuous(limits = c(0, 100)) +
    theme(panel.border = element_blank()) +
    coord_flip() +
    labs(x = NULL, y = NULL,
         title = &amp;quot;Capitais com maior porcentual \nde universitários de cidades diferentes&amp;quot;, fill = &amp;quot;Região&amp;quot;)

# p2 com apenas capitais
p4 &amp;lt;- df %&amp;gt;% tbl_df() %&amp;gt;%
  filter(capitalIES == 1) %&amp;gt;%
  group_by(municipioIES, NO_REGIAO_IES) %&amp;gt;%
  summarise(porc_uf = media(uf_diferente)) %&amp;gt;%
  ungroup() %&amp;gt;%
  top_n(9, porc_uf) %&amp;gt;%
  ggplot(aes(x = reorder(municipioIES, porc_uf), y = porc_uf, fill = NO_REGIAO_IES)) +
    geom_bar(stat = &amp;quot;identity&amp;quot;) +
    scale_fill_manual(values = cores) +
    theme_bw()  +
    scale_y_continuous(limits = c(0, 100)) +
    coord_flip() +
    labs(x = NULL, y = NULL,
         title = &amp;quot;Capitais com maior porcentual \nde universitários de estados diferentes&amp;quot;, fill = &amp;quot;Região&amp;quot;) +
    theme(panel.border = element_blank())
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Para isso, uma novidade aqui no blog: será usado o pacote &lt;code&gt;cowplot&lt;/code&gt; para juntar quatro diferentes gráficos em uma imagem só.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# juntar quatro gráficos em um só
# Retira a legenda dos gráficos (para não ficar redundante) e 
# reduz a margem da direita e da esquerda para reduzir o espaço vazio
p1 &amp;lt;- p1 + theme(legend.position = &amp;quot;none&amp;quot;, plot.margin = unit(c(6, 0, 6, 0), &amp;quot;pt&amp;quot;), plot.title = element_text(size = 12))
p2 &amp;lt;- p2 + theme(legend.position = &amp;quot;none&amp;quot;, plot.margin = unit(c(6, 0, 6, 0), &amp;quot;pt&amp;quot;), plot.title = element_text(size = 12))
p3 &amp;lt;- p3 + theme(legend.position = &amp;quot;none&amp;quot;, plot.margin = unit(c(6, 0, 6, 0), &amp;quot;pt&amp;quot;), plot.title = element_text(size = 12))
p4 &amp;lt;- p4 + theme(legend.position = &amp;quot;none&amp;quot;, plot.margin = unit(c(6, 0, 6, 0), &amp;quot;pt&amp;quot;), plot.title = element_text(size = 12))

prow &amp;lt;- plot_grid(p1, p3, p2, p4, align = &amp;quot;vh&amp;quot;, nrow = 2)

# plotar legenda embaixo dos 4 gráficos
grobs &amp;lt;- ggplotGrob(p3 + theme(legend.position=&amp;quot;bottom&amp;quot;))$grobs
legend_b &amp;lt;- grobs[[which(sapply(grobs, function(x) x$name) == &amp;quot;guide-box&amp;quot;)]]
# adicionar anotação:
p &amp;lt;- add_sub(prow, &amp;quot;Em % dos universitários da cidade&amp;quot;)
p &amp;lt;- plot_grid(p, legend_b, ncol = 1, rel_heights = c(1, .2))
ggdraw(p)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;http://www.sillasgonzaga.com/figs/censo_educ_superior1/unnamed-chunk-8-1.png&#34; alt=&#34;center&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Ou seja: para as 10 cidades com o maior porcentual de alunos de fora do município, esse valor é de 100%. O histograma dessa distribuição mostra que esse resultado não é surpreendente, pois existem mais de 20 cidades que têm no mínimo 95% de alunos de outra cidade.
Já quando se trata de analisar as cidades que mais atraem universitários de outros estados, quatro cidades goianas e três paranaenses despontam como capitais universitárias. Surpreendentemente (ao menos para mim), apenas uma cidade do Sudeste consta nesse Top 10.
Dentre as capitais, Palmas e Campo Grande se destacam como pólos universitários.&lt;/p&gt;

&lt;p&gt;Possivelmente, o resultado será diferente se considerarmos, ao invés da quantidade relativa, o número absoluto de universitários, que é o que é feito abaixo:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;#p1 = percentual de aluno de outros municipios
p1 &amp;lt;- df %&amp;gt;% tbl_df() %&amp;gt;%
  group_by(municipioIES, NO_REGIAO_IES) %&amp;gt;%
  summarise(porc_municipio = sum(municipio_diferente)/1000) %&amp;gt;%
  ungroup() %&amp;gt;%
  top_n(9, porc_municipio) %&amp;gt;%
  ggplot(aes(x = reorder(municipioIES, porc_municipio), y = porc_municipio, fill = NO_REGIAO_IES)) +
    geom_bar(stat = &amp;quot;identity&amp;quot;) +
    scale_fill_manual(values = cores) +
    theme_bw() +
    scale_y_continuous(labels = comma) +
    theme(panel.border = element_blank()) +
    coord_flip() +
    labs(x = NULL, y = NULL,
         title = &amp;quot;Cidades com maior número\nde universitários de cidades diferentes&amp;quot;, fill = &amp;quot;Região&amp;quot;)

# p2: percentual de aluno de outros estados
p2 &amp;lt;- df %&amp;gt;% tbl_df() %&amp;gt;%
  group_by(municipioIES, NO_REGIAO_IES) %&amp;gt;%
  summarise(porc_uf = sum(uf_diferente)/1000) %&amp;gt;%
  ungroup() %&amp;gt;%
  top_n(9, porc_uf) %&amp;gt;%
  ggplot(aes(x = reorder(municipioIES, porc_uf), y = porc_uf, fill = NO_REGIAO_IES)) +
    geom_bar(stat = &amp;quot;identity&amp;quot;) +
    scale_fill_manual(values = cores) +
    theme_bw()  +
    coord_flip() +
    labs(x = NULL, y = NULL,
         title = &amp;quot;Cidades com maior número\nde universitários de estados diferentes&amp;quot;, fill = &amp;quot;Região&amp;quot;) +
    theme(panel.border = element_blank())

# p1 com apenas capitais
p3 &amp;lt;- df %&amp;gt;% tbl_df() %&amp;gt;%
  filter(capitalIES == 1) %&amp;gt;%
  group_by(municipioIES, NO_REGIAO_IES) %&amp;gt;%
  summarise(porc_municipio = sum(municipio_diferente)/1000) %&amp;gt;%
  ungroup() %&amp;gt;%
  top_n(9, porc_municipio) %&amp;gt;%
  ggplot(aes(x = reorder(municipioIES, porc_municipio), y = porc_municipio, fill = NO_REGIAO_IES)) +
    geom_bar(stat = &amp;quot;identity&amp;quot;) +
    scale_fill_manual(values = cores) +
    theme_bw() +
    theme(panel.border = element_blank()) +
    coord_flip() +
    labs(x = NULL, y = NULL,
         title = &amp;quot;Capitais com maior número\nde universitários de cidades diferentes&amp;quot;, fill = &amp;quot;Região&amp;quot;)

# p2 com apenas capitais
p4 &amp;lt;- df %&amp;gt;% tbl_df() %&amp;gt;%
  filter(capitalIES == 1) %&amp;gt;%
  group_by(municipioIES, NO_REGIAO_IES) %&amp;gt;%
  summarise(porc_uf = sum(uf_diferente)/1000) %&amp;gt;%
  ungroup() %&amp;gt;%
  top_n(9, porc_uf) %&amp;gt;%
  ggplot(aes(x = reorder(municipioIES, porc_uf), y = porc_uf, fill = NO_REGIAO_IES)) +
    geom_bar(stat = &amp;quot;identity&amp;quot;) +
    scale_fill_manual(values = cores) +
    theme_bw()  +
    coord_flip() +
    labs(x = NULL, y = NULL,
         title = &amp;quot;Capitais com maior número\nde universitários de estados diferentes&amp;quot;, fill = &amp;quot;Região&amp;quot;) +
    theme(panel.border = element_blank())
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# acrescentar quatro gráficos em um só
p1 &amp;lt;- p1 + theme(legend.position = &amp;quot;none&amp;quot;, plot.margin = unit(c(6, 0, 6, 0), &amp;quot;pt&amp;quot;), plot.title = element_text(size = 12))
p2 &amp;lt;- p2 + theme(legend.position = &amp;quot;none&amp;quot;, plot.margin = unit(c(6, 0, 6, 0), &amp;quot;pt&amp;quot;), plot.title = element_text(size = 12))
p3 &amp;lt;- p3 + theme(legend.position = &amp;quot;none&amp;quot;, plot.margin = unit(c(6, 0, 6, 0), &amp;quot;pt&amp;quot;), plot.title = element_text(size = 12))
p4 &amp;lt;- p4 + theme(legend.position = &amp;quot;none&amp;quot;, plot.margin = unit(c(6, 0, 6, 0), &amp;quot;pt&amp;quot;), plot.title = element_text(size = 12))

prow &amp;lt;- plot_grid(p1, p3, p2, p4, align = &amp;quot;vh&amp;quot;, vjust = 30, nrow = 2)

grobs &amp;lt;- ggplotGrob(p3 + theme(legend.position=&amp;quot;bottom&amp;quot;))$grobs
legend_b &amp;lt;- grobs[[which(sapply(grobs, function(x) x$name) == &amp;quot;guide-box&amp;quot;)]]
p &amp;lt;- add_sub(prow, &amp;quot;Em milhares de universitários&amp;quot;)
p &amp;lt;- plot_grid(p, legend_b, ncol = 1, rel_heights = c(1, .2))
ggdraw(p)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;http://www.sillasgonzaga.com/figs/censo_educ_superior1/unnamed-chunk-10-1.png&#34; alt=&#34;center&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Já que analisamos os resultados por cidade, podemos fazer o mesmo por estado: quais UFs recebem mais estudantes de outros estados?&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;p &amp;lt;- df[, list(num_absoluto = sum(uf_diferente)/1000, porcentual = media(uf_diferente)), by = .(SGL_UF_IES, NO_REGIAO_IES)]

ggplot(p, aes(x = num_absoluto, y = porcentual, color = NO_REGIAO_IES, label = SGL_UF_IES)) +
    geom_point() +
    geom_text_repel() +
    scale_x_continuous(labels = comma) +
    scale_color_manual(values = cores) +
    labs(x = &amp;quot;Quantidade absoluta (milhares)&amp;quot;,
         y = &amp;quot;% dos estudantes que são de outro estado&amp;quot;,
         title = &amp;quot;Quantidade absoluta e porcentual do total de universitários de \noutros estados para cada UF&amp;quot;,
         color = &amp;quot;Região&amp;quot;) +
    theme_minimal() + theme(legend.position = &amp;quot;right&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;http://www.sillasgonzaga.com/figs/censo_educ_superior1/grafico uf-1.png&#34; alt=&#34;center&#34; /&gt;&lt;/p&gt;

&lt;p&gt;O estado do Paraná é disparado o campeão nesse quesito em ambos os critérios, isto é, tanto por quantidade absoluta - cerca de 600.000 universitários de outras partes do Brasil estudam na Rússia brasileira - como por porcentual - aquela quantidade corresponde a cerca de 55% do total de estudantes matriculados em universidades paranaenses.
Na outra ponta do gráfico, a ponta inferior esquerda, a maioria dos estados são da região Nordeste e Norte, com destaque negativo para Maranhão, Alagoas e Bahia, três dos estados mais pobres do país. Arrisco dizer que, por serem mais pobres que a média nacional, as universidades desses estados não têm reputação suficiente para atrair universitários de outros estados do Brasil.&lt;/p&gt;

&lt;h1 id=&#34;conclusão&#34;&gt;Conclusão&lt;/h1&gt;

&lt;p&gt;Este é o fim de mais um post. No próximo post, falarei sobre o efeito do Enem no movimento migracional&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-r&#34;&gt;# Salvar o arquivo para posteriores análises:
write_feather(df, &amp;quot;dm_aluno_tratado.feather&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;
</description>
    </item>
    
  </channel>
</rss>