<?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/data-visualization/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/data-visualization/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Mapeando a abertura de escolas municipais em São Paulo ao longo dos anos com um GIF</title>
      <link>http://www.sillasgonzaga.com/post/mapeando-a-abertura-de-escolas-municipais-em-sao-paulo-ao-longo-dos-anos/</link>
      <pubDate>Mon, 14 May 2018 00:00:00 +0000</pubDate>
      
      <guid>http://www.sillasgonzaga.com/post/mapeando-a-abertura-de-escolas-municipais-em-sao-paulo-ao-longo-dos-anos/</guid>
      <description>&lt;p&gt;Pessoas adoram mapas. Sempre que puder fazer mapas para representar visualmente uma determinada informação, faça!&lt;/p&gt;
&lt;p&gt;Suponha que você deseja fazer uma visualização da taxa de homicídio por estados brasileiros. Nada te impede de fazer um gráfico de barras, onde cada UF seria representado por uma barra cujo tamanho seria dependente do valor da taxa, mas teria um impacto visual menor em que cada estado estaria colorido de acordo com essa variável.&lt;/p&gt;
&lt;p&gt;Contudo, em algumas situações, um mapa é a única maneira possível de transmitir com clareza uma ideia. Esta é a ideia deste post: mostrar como um mapa pode ser útil para mostrar a evolução das abertudas de escolas municipais na cidade de São Paulo.&lt;/p&gt;
&lt;div id=&#34;coleta-e-limpeza-dos-dados&#34; class=&#34;section level2&#34;&gt;
&lt;h2&gt;Coleta e limpeza dos dados&lt;/h2&gt;
&lt;p&gt;Eu já tive a oportunidade de participar de uma palestra do pessoal da Secretaria Municipal de Educação de São Paulo, onde conheci suas iniciativas de &lt;a href=&#34;http://dados.prefeitura.sp.gov.br/group/educacao&#34;&gt;dados abertos&lt;/a&gt;. Esses projetos são benéficos não só para a população como um todo, por toda a questão da transparência, mas especialmente para quem deseja desenvolver projetos para praticar análise de dados, ganhando assim experiência real para lidar com tarefas de limpeza, manuseio e visualização de dados.&lt;/p&gt;
&lt;p&gt;O dataset de interesse deste post é o &lt;a href=&#34;http://dados.prefeitura.sp.gov.br/dataset/cadastro-de-escolas-municipais-conveniadas-e-privadas&#34;&gt;Cadastro de escolas municipais, conveniadas e privadas&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;# pacotes
library(tidyverse)
library(ggmap)
library(gganimate)
library(lubridate)&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;# definir locale para lidar com caracteres especiais
lcl &amp;lt;- locale(encoding = &amp;quot;ISO-8859-1&amp;quot;)
df &amp;lt;- read_csv2(&amp;quot;/home/sillas/R/Projetos/paixaopordados-blogdown/data/escolasr34dez2017.csv&amp;quot;,
                locale = lcl)

# dimensoes do dataset
dim(df)&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;## [1] 6878   53&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O dataset possui 53 colunas, mas só precisamos de realmente 3: as colunas de coordenadas geográficas e a de data de fundação das escolas.&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;df &amp;lt;- df %&amp;gt;% 
  select(DATA = DT_CRIACAO, LAT = LATITUDE, LON = LONGITUDE)

knitr::kable(head(df))&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr class=&#34;header&#34;&gt;
&lt;th align=&#34;left&#34;&gt;DATA&lt;/th&gt;
&lt;th align=&#34;right&#34;&gt;LAT&lt;/th&gt;
&lt;th align=&#34;right&#34;&gt;LON&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class=&#34;odd&#34;&gt;
&lt;td align=&#34;left&#34;&gt;13-jun-88&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;-23553905&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;-46398452&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&#34;even&#34;&gt;
&lt;td align=&#34;left&#34;&gt;04-jul-88&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;-23489728&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;-46670198&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&#34;odd&#34;&gt;
&lt;td align=&#34;left&#34;&gt;05-jul-88&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;-23478312&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;-46427344&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&#34;even&#34;&gt;
&lt;td align=&#34;left&#34;&gt;27-mai-88&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;-23612237&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;-46749888&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&#34;odd&#34;&gt;
&lt;td align=&#34;left&#34;&gt;22-jun-88&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;-23486142&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;-46733901&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class=&#34;even&#34;&gt;
&lt;td align=&#34;left&#34;&gt;07-jun-88&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;-23611929&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;-46750176&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;O output acima revela a necessidade de alguns ajustes de limpeza: converter a coluna &lt;code&gt;DATA&lt;/code&gt; para a classe &lt;code&gt;Date&lt;/code&gt; e dividir as colunas de latitude e longitude por um milhão para obter os valores corretos.&lt;/p&gt;
&lt;p&gt;A transformação da coluna &lt;code&gt;DATA&lt;/code&gt; poderia ser feita por funções automáticas, como a &lt;code&gt;strptime&lt;/code&gt;, mas isso dependeria de algumas configurações internas do seu sistema operacional. Por isso, eu uso uma solução mais manual:&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;converter_mes &amp;lt;- function(x){
  nomes &amp;lt;- c(&amp;quot;jan&amp;quot;, &amp;quot;fev&amp;quot;, &amp;quot;mar&amp;quot;, &amp;quot;abr&amp;quot;, &amp;quot;mai&amp;quot;, &amp;quot;jun&amp;quot;,
             &amp;quot;jul&amp;quot;, &amp;quot;ago&amp;quot;, &amp;quot;set&amp;quot;, &amp;quot;out&amp;quot;, &amp;quot;nov&amp;quot;, &amp;quot;dez&amp;quot;)
  
  numeros &amp;lt;- str_pad(1:12, width = 2, pad = &amp;quot;0&amp;quot;)
  
  x &amp;lt;- str_replace_all(x, nomes[1], numeros[1])
  x &amp;lt;- str_replace_all(x, nomes[2], numeros[2])
  x &amp;lt;- str_replace_all(x, nomes[3], numeros[3])
  x &amp;lt;- str_replace_all(x, nomes[4], numeros[4])
  x &amp;lt;- str_replace_all(x, nomes[5], numeros[5])
  x &amp;lt;- str_replace_all(x, nomes[6], numeros[6])
  x &amp;lt;- str_replace_all(x, nomes[7], numeros[7])
  x &amp;lt;- str_replace_all(x, nomes[8], numeros[8])
  x &amp;lt;- str_replace_all(x, nomes[9], numeros[9])
  x &amp;lt;- str_replace_all(x, nomes[10], numeros[10])
  x &amp;lt;- str_replace_all(x, nomes[11], numeros[11])
  x &amp;lt;- str_replace_all(x, nomes[12], numeros[12])
  
  x
  
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Escrita a função, passo para a transformação das colunas:&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;df &amp;lt;- df %&amp;gt;% 
  mutate(DATA_CLEAN = dmy(converter_mes(DATA)),
         LAT = LAT/1e6,
         LON = LON/1e6
         ) %&amp;gt;% 
  mutate(ANO = year(DATA_CLEAN)) %&amp;gt;% 
  # remover linhas onde LAT ou LON é NA
  na.omit()

summary(df)&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;##      DATA                LAT              LON           DATA_CLEAN        
##  Length:4576        Min.   :-23.89   Min.   :-47.05   Min.   :1969-01-30  
##  Class :character   1st Qu.:-23.63   1st Qu.:-46.71   1st Qu.:2004-10-24  
##  Mode  :character   Median :-23.57   Median :-46.63   Median :2011-10-23  
##                     Mean   :-23.57   Mean   :-46.60   Mean   :2008-10-17  
##                     3rd Qu.:-23.51   3rd Qu.:-46.48   3rd Qu.:2015-05-08  
##                     Max.   :-22.89   Max.   :-46.37   Max.   :2068-12-12  
##       ANO      
##  Min.   :1969  
##  1st Qu.:2004  
##  Median :2011  
##  Mean   :2008  
##  3rd Qu.:2015  
##  Max.   :2068&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Surgiu um novo erro: a coluna &lt;code&gt;ANO&lt;/code&gt; possui valores acima do ano atual (2018). Isso provavelmente foi causado na conversão de datas como &lt;code&gt;30/08/68&lt;/code&gt;, que o R retornou 2068 ao invés de 1968. Sinceramente, não parei para investigar o motivo disso, até porque é facilmente consertado:&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;df &amp;lt;- df %&amp;gt;% 
  mutate(ANO = if_else(ANO &amp;gt; year(today()), ANO - 100, ANO))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&#34;apresentacao-dos-dados&#34; class=&#34;section level2&#34;&gt;
&lt;h2&gt;Apresentação dos dados&lt;/h2&gt;
&lt;p&gt;Primeiramente, qual a distribuição da abertura de novas escolas por ano?&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;df %&amp;gt;% 
  count(ANO) %&amp;gt;% 
  ggplot(aes(x = ANO, y = n)) + 
  geom_col(fill = &amp;quot;darkorange1&amp;quot;) + 
  theme_minimal() +
  labs(x = NULL, y = NULL,
       title = &amp;quot;Quantidade de escolas fundadas por ano em São Paulo&amp;quot;) +
  scale_x_continuous(breaks = scales::pretty_breaks(n = 10))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;http://www.sillasgonzaga.com/post/2018-05-14-mapeando-a-abertura-de-escolas-municipais-em-sao-paulo-ao-longo-dos-anos_files/figure-html/unnamed-chunk-6-1.png&#34; width=&#34;864&#34; /&gt;&lt;/p&gt;
&lt;p&gt;A grande maioria das escolas foi criada a partir do ano de 2005. Confesso que esperava uma distribuição mais uniforme.&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&#34;criando-o-mapa&#34; class=&#34;section level2&#34;&gt;
&lt;h2&gt;Criando o mapa&lt;/h2&gt;
&lt;p&gt;Existem diversas maneiras de criar um mapa no R. O melhor método depende basicamente do tipo de dados que se tem em mãos. Caso seja necessário, por exemplo, plotar polígonos, áreas e fronteiras, o indicado é o combo do pacote &lt;code&gt;sf&lt;/code&gt; e da função &lt;code&gt;ggplot2::geom_sf&lt;/code&gt;. No nosso caso, como estamos interessados em plotar pontos e já possuímos os dados das coordenadas geográficas, uma das melhores opções é usar o pacote &lt;code&gt;ggmap&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Para criar um mapa, são necessários dois parâmetros iniciais: um ponto central e um nível de zoom, que define a escala do gráfico.&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;# para o centro de sp, usei as coordenadas da praca da se, que peguei no google maps
praca_se &amp;lt;- c(lon = -46.634123, lat = -23.548408)
# o zoom é calculado pela funcao calc_zoom do ggmap
zoom_sp &amp;lt;- calc_zoom(lon = LON, lat = LAT, data = df)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Apenas com esses dois parâmetros, já é possível plotar um mapa base:&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;mapa_sp &amp;lt;- get_map(location = praca_se,
                   zoom = zoom_sp,
                   maptype = &amp;quot;toner-lite&amp;quot;)

ggmap(mapa_sp) +
  # plotar praça da sé
  geom_point(x = praca_se[1], y = praca_se[2], color = &amp;quot;red&amp;quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;http://www.sillasgonzaga.com/post/2018-05-14-mapeando-a-abertura-de-escolas-municipais-em-sao-paulo-ao-longo-dos-anos_files/figure-html/unnamed-chunk-8-1.png&#34; width=&#34;864&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Vamos então adicionar um pouco de vida ao gráfico e plotar todas as escolas presentes no dataset:&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;ggmap(mapa_sp) +
  geom_point(data = df, aes(x = LON, y = LAT),
             color = &amp;quot;red&amp;quot;, alpha = 0.1)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;http://www.sillasgonzaga.com/post/2018-05-14-mapeando-a-abertura-de-escolas-municipais-em-sao-paulo-ao-longo-dos-anos_files/figure-html/unnamed-chunk-9-1.png&#34; width=&#34;864&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Aparantemente existe uma concentração de escolas perto, entre outras, da área de Itaquaquecetuba. Uma maneira de visualizar densidade de pontos é por meio do &lt;code&gt;geom_density2d&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;ggmap(mapa_sp) +
  geom_density2d(data = df, aes(x = LON, y = LAT),
                 color = &amp;quot;red&amp;quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;http://www.sillasgonzaga.com/post/2018-05-14-mapeando-a-abertura-de-escolas-municipais-em-sao-paulo-ao-longo-dos-anos_files/figure-html/unnamed-chunk-10-1.png&#34; width=&#34;864&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&#34;acrescentando-o-elemento-tempo-no-mapa&#34; class=&#34;section level2&#34;&gt;
&lt;h2&gt;Acrescentando o elemento tempo no mapa&lt;/h2&gt;
&lt;p&gt;Ainda não mostrei como representar o fator tempo na visualização. Penso que isto pode ser feito de três maneiras: colorir as escolas de acordo com o ano de fundação, separar o gráfico em &lt;em&gt;facets&lt;/em&gt; por ano ou, minha preferida, criar um gif composto por uma série de gráficos sobrepostos. Fazer isso é muito fácil com o auxílio do pacote &lt;code&gt;gganimate&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;Para criar uma sobreposição de gráficos ggplot com o pacote &lt;code&gt;gganimate&lt;/code&gt;, basta setar a &lt;em&gt;aesthetic&lt;/em&gt; especial &lt;code&gt;frame&lt;/code&gt; com o nome da variável que você deseja usar para separar os gráficos em unidades individuais. O argumento &lt;code&gt;cumulative&lt;/code&gt; é usado para que as escolas de anos mais recentes permaneçam no gráfico ao longo dos anos:&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;p &amp;lt;- ggmap(mapa_sp) +
  geom_point(data = df,
             aes(x = LON, y = LAT, frame = ANO,
                 cumulative  = TRUE), color = &amp;quot;red&amp;quot;, alpha = 0.1) + 
  labs(x = NULL, y = NULL, title = &amp;quot;Escolas em São Paulo em &amp;quot;)

# o argumento interval define o intervalo de transição do gif em segundos
gganimate(p = p, interval = .075)&lt;/code&gt;&lt;/pre&gt;
&lt;video width=&#34;864&#34;  controls loop&gt;
&lt;source src=&#34;http://www.sillasgonzaga.com/post/2018-05-14-mapeando-a-abertura-de-escolas-municipais-em-sao-paulo-ao-longo-dos-anos_files/figure-html/unnamed-chunk-11.webm&#34; /&gt;
&lt;/video&gt;
&lt;p&gt;Taí! Com o auxílio do gráfico, é possível perceber (pelo menos foi o que vi, vai que é uma miragem) que, de acordo com o dataset, nas primeiras décadas foram priorizadas as áreas mais periféricas de São Paulo. A região mais central aparenta ter recebido mais escolas apenas a partir das últimas duas décadas.&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&#34;publicidade&#34; class=&#34;section level2&#34;&gt;
&lt;h2&gt;Publicidade&lt;/h2&gt;
&lt;p&gt;Sou um dos intrutores do curso de &lt;a href=&#34;https://www.ibpad.com.br/produto/ciencia-de-dados-com-r-sp/&#34;&gt;Ciência de Dados do IBPAD&lt;/a&gt;. Temos um dia do curso voltado exclusivamente para visualização de dados, dentre eles mapas! Mais informações de novas turmas &lt;a href=&#34;https://www.ibpad.com.br/produto/ciencia-de-dados-com-r-sp/&#34;&gt;neste link&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Sobre gráficos e a mensagem que eles querem transmitir</title>
      <link>http://www.sillasgonzaga.com/post/sobre-graficos/</link>
      <pubDate>Sun, 26 Nov 2017 00:00:00 +0000</pubDate>
      
      <guid>http://www.sillasgonzaga.com/post/sobre-graficos/</guid>
      <description>&lt;p&gt;Recentemente, quando estava no trabalhando lendo uma revista de negócios sobre o varejo, me deparei com o seguinte gráfico:&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;knitr::include_graphics(&amp;quot;https://i.imgur.com/f1dh4uw.jpg&amp;quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/f1dh4uw.jpg&#34; width=&#34;600px&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Mesmo sem contexto, é possível perceber que essa visualização foi criada para mostrar a divergência de opiniões sobre a importância dada a fatores de compra pelos executivos de varejo e pelos consumidores. Imediatamente, eu pensei que o jornalista perdeu uma ótima oportunidade de representar melhor a informação desejada.&lt;/p&gt;
&lt;p&gt;Primeiramente, a ordem dos fatores no gráfico não segue uma ordem clara. Se o gráfico foi feito para enfatizar essa divergência de opiniões, teria sido melhor que os fatores fossem ordenados no gráfico pela diferença numérica entre executivos e consumidores. Veja que o ponto onde há maior disparidade, &lt;em&gt;Acesso a informações, venda e serviços&lt;/em&gt;, aparece no canto inferior direito, fazendo com que os olhos do leitor tenham de percorrer o gráfico quase que até seu final para extrair sua informação mais importante. Além disso, o fator de compra que apresenta maior uniformidade, &lt;em&gt;Informações em tempo real sobre inventário e disponibilidade de informações&lt;/em&gt;, aparece logo ao lado da que apresenta mais divergência.&lt;/p&gt;
&lt;p&gt;Outra oportunidade perdida é que não é dada uma ênfase ao que os consumidores, os responsáveis pela empresa existir, preferem. Como esta é uma revista voltada para o segmento de varejo, seu público-alvo são executivos do setor, que estão sedentos por saber o que os clientes pensam. Contudo, os fatores que os consumidores mais preferem, &lt;em&gt;Pagamento simples e fluido&lt;/em&gt; e &lt;em&gt;Acesso a informaçoes, venda e serviços&lt;/em&gt;, aparecem em ordem aleatória no gráfico (em quinto e em oitavo lugar, respectivamente).&lt;/p&gt;
&lt;p&gt;Por isso, este post é dedicado a propor uma nova versão dessa visualização de dados, de maneira que atenda aos pontos citados acima. Ou seja, um gráfico que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ordene os fatores de acordo com o grau de divergência entre consumidores e executivos;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Destaque de alguma maneira os fatores que os consumidores consideram mais importantes que os executivos.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;library(tidyverse)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Recriando o dataset do gráfico:&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;df &amp;lt;- tribble(
  ~fator, ~Executivos, ~Consumidores,
  &amp;quot;Experiência personalizada&amp;quot;, 43, 27,
  &amp;quot;Experiência fluida em todos os canais&amp;quot;, 42, 26,
  &amp;quot;Pagamento simples e fluido&amp;quot;, 41, 50,
  &amp;quot;Tecnologia em loja&amp;quot;, 38, 18,
  &amp;quot;Informações em tempo real sobre inventário e disponibilidade de informações&amp;quot;, 37, 38,
  &amp;quot;Plataformas mobile e aplicativos de compra&amp;quot;, 36, 19,
  &amp;quot;Habilidade de customizar produtos e serviços&amp;quot;, 35, 24,
  &amp;quot;Engajamento e presença em redes sociais&amp;quot;, 35, 14,
  &amp;quot;Pagamento digital e opções de câmbio&amp;quot;, 34, 31,
  &amp;quot;Acesso a informações, venda e serviços&amp;quot;, 31, 50,
  &amp;quot;Gamificação e experiência digital interativa&amp;quot;, 21, 9
)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Em seguida, calculamos a diferença entre as duas colunas numéricas e usamos a funçao &lt;code&gt;forcats::fct_reorder()&lt;/code&gt; para ordenar os fatores de acordo com essa diferença.&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;df &amp;lt;- df %&amp;gt;% 
  mutate(diferenca = abs(Executivos - Consumidores),
         # Quebrar o string do fator em parágrafos e reordenar
         fator = str_wrap(fator, 40),
         fator = fct_reorder(fator, diferenca, .desc = FALSE)) %&amp;gt;% 
  # criar colunas para armazenar os valores maximo e minimo entre executivos e consumidores 
  rowwise() %&amp;gt;% 
   mutate(maior_percentual = max(Executivos, Consumidores),
          menor_percentual = min(Executivos, Consumidores))

# criar coluna para identificar &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O código desse gráfico é um pouco mais complexo do que o usual. Como eu queria que o label de cada ponto ficasse à esquerda no caso do menor número e à direita do maior, é necessário criar duas camadas de &lt;code&gt;geom_text()&lt;/code&gt; separadamente, uma para o valor mínimo de cada fator e outra para o valor máximo, sendo que cada possui um valor diferente de &lt;code&gt;hjust&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;df.long &amp;lt;- df %&amp;gt;% 
  # transformar para formato tidy (long)
  gather(fonte_opiniao, valor, 2:3)

p &amp;lt;- ggplot(df.long, aes(x = valor, y = fator)) +
  geom_point(aes(color = fonte_opiniao), size = 3) +
  # ajustar pontos
  scale_x_continuous(limits = c(0, 55), breaks = seq(0, 50, 10)) +
  # mudar aparencia. isso é opcional.
  theme_minimal() + 
  # adicionar manualmente o label do valor que cada ponto representa
  geom_text(data = df, aes(x = maior_percentual, label = maior_percentual), hjust = -0.3) +
  geom_text(data = df, aes(x = menor_percentual, label = menor_percentual), hjust = 1.4) +
  # mudar titulos dos eixos e do grafico
  labs(x = &amp;quot;%&amp;quot;, y = NULL, color = NULL, title = &amp;quot;Quais fatores influenciam a compra?&amp;quot;) +
  theme(legend.position = &amp;quot;bottom&amp;quot;)

p&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;http://www.sillasgonzaga.com/post/2017-11-26-sobre-graficos_files/figure-html/unnamed-chunk-3-1.png&#34; width=&#34;672&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Com este gráfico, creio que atendemos ao primeiro ponto. Veja que, além dos objetivos listados anteriormente, o gráfico apresenta outras melhorias em relação ao original. Uma delas é que é possível descobrir muito mais facilmente quais são os fatores que os consumidores menos se lembram (&lt;em&gt;Gamificação&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Para atender à segunda melhoria proposta, a de destacar de alguma maneira os fatores considerados mais importantes pelos consumidores, decidi usar o seguinte método: plotar um segmento ligando os pontos em cada fator, sendo que, nos fatores de compra que foram mais lembrados por consumidores do que por executivos, o segmento fosse mais destacado (ou menos transparente) no gráfico.&lt;/p&gt;
&lt;p&gt;Para isso, vamos criar uma coluna onde o valor do &lt;code&gt;alpha&lt;/code&gt; do segmento, que correspondência ao seu nível de opacidade, seja definido manualmente:&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;# criar coluna para identificar quem da mais importancia ao fator
df &amp;lt;- df %&amp;gt;% 
  mutate(alpha_segmento = if_else(Executivos - Consumidores &amp;gt; 0, 0.2, 1))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vamos então adicionar esse novo elemento no gráfico.&lt;/p&gt;
&lt;pre class=&#34;r&#34;&gt;&lt;code&gt;p + 
  # para não fazer que o segmento fique em cima do ponto, eu removo 0,3 de cada lado dele
  geom_segment(data = df, aes(x = maior_percentual-0.3, xend = menor_percentual+0.3,
                              y = fator, yend = fator,
                              alpha = alpha_segmento),
               inherit.aes = FALSE, show.legend = FALSE) +
  scale_alpha_identity()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;http://www.sillasgonzaga.com/post/2017-11-26-sobre-graficos_files/figure-html/unnamed-chunk-5-1.png&#34; width=&#34;672&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Acredito que, com essa visualização, as mensagens que o gráfico da revista foi criado para mostrar são transmitidas mais claramente.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>