<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Suami Medeiros</title>
    <description>The latest articles on Forem by Suami Medeiros (@surocham).</description>
    <link>https://forem.com/surocham</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F919967%2Fccc065f1-9794-4224-b108-b3677291970c.jpg</url>
      <title>Forem: Suami Medeiros</title>
      <link>https://forem.com/surocham</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/surocham"/>
    <language>en</language>
    <item>
      <title>vem ver isso aqui rapidin</title>
      <dc:creator>Suami Medeiros</dc:creator>
      <pubDate>Mon, 23 Mar 2026 19:30:14 +0000</pubDate>
      <link>https://forem.com/surocham/vem-ver-isso-aqui-rapidin-14ha</link>
      <guid>https://forem.com/surocham/vem-ver-isso-aqui-rapidin-14ha</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/fransborges/engenharia-de-prompt-por-que-a-forma-como-voce-pergunta-muda-tudoum-guia-introdutorio-3hb0" class="crayons-story__hidden-navigation-link"&gt;Engenharia de Prompt: Por Que a Forma Como Você Pergunta Muda Tudo(Um guia introdutório)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/fransborges" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F875746%2F033e1464-5037-4968-8662-001046c1c2d1.png" alt="fransborges profile" class="crayons-avatar__image" width="412" height="669"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/fransborges" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Fran Borges
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Fran Borges
                
              
              &lt;div id="story-author-preview-content-3333073" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/fransborges" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F875746%2F033e1464-5037-4968-8662-001046c1c2d1.png" class="crayons-avatar__image" alt="" width="412" height="669"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Fran Borges&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/fransborges/engenharia-de-prompt-por-que-a-forma-como-voce-pergunta-muda-tudoum-guia-introdutorio-3hb0" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 23&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/fransborges/engenharia-de-prompt-por-que-a-forma-como-voce-pergunta-muda-tudoum-guia-introdutorio-3hb0" id="article-link-3333073"&gt;
          Engenharia de Prompt: Por Que a Forma Como Você Pergunta Muda Tudo(Um guia introdutório)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/braziliandevs"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;braziliandevs&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/fransborges/engenharia-de-prompt-por-que-a-forma-como-voce-pergunta-muda-tudoum-guia-introdutorio-3hb0" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;84&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/fransborges/engenharia-de-prompt-por-que-a-forma-como-voce-pergunta-muda-tudoum-guia-introdutorio-3hb0#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              2&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            7 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Análise de correspondência, o que é e como fazer com Python, usando Naruto como exemplo</title>
      <dc:creator>Suami Medeiros</dc:creator>
      <pubDate>Mon, 02 Feb 2026 21:21:21 +0000</pubDate>
      <link>https://forem.com/surocham/analise-de-correspondencia-o-que-e-e-como-fazer-com-python-usando-naruto-como-exemplo-3phd</link>
      <guid>https://forem.com/surocham/analise-de-correspondencia-o-que-e-e-como-fazer-com-python-usando-naruto-como-exemplo-3phd</guid>
      <description>&lt;p&gt;Dentro desse artigo vamos explorar diferentes técnicas para análise de dados categóricos, para entender de forma lúdica vamos vestir nossas bandanas e nos transportar para o mundo de Naruto (que eu particularmente gosto muito). Vamos seguir a seguinte linha de raciocínio: Imagine que você seja um sensei na vila de konoha acompanhando seus alunos no exame chunin e deseja saber qual o estilo de luta que é mais popular entre os shinobis de cada aldeia para traçar estratégias junto com os mesmos. Vamos lá?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7qnin9wbkcu3mzucfk7h.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7qnin9wbkcu3mzucfk7h.gif" alt="kakashi e naruto" width="498" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Indíce
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;O inicio de tudo - Análise de correspondência&lt;/li&gt;
&lt;li&gt;Definindo nosso cenário básico - Importando bibliotecas&lt;/li&gt;
&lt;li&gt;Carregando nossos dados para análise&lt;/li&gt;
&lt;li&gt;Visualizando-os com uma tabela de contingência&lt;/li&gt;
&lt;li&gt;
Calculando os perfis de linha e coluna - Qual é o estilo da aldeia?

&lt;ul&gt;
&lt;li&gt;Visualizando o perfil de linha de maneira estruturada&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Teste QUI-Quadrado - Isso é uma coincidência ou não?&lt;/li&gt;

&lt;li&gt;Resíduos padronizados - Quem está fora do esperado?&lt;/li&gt;

&lt;li&gt;Decomposição SVD - Reduzindo o mundo em duas dimensões&lt;/li&gt;

&lt;li&gt;Mapa de Correspondência (Biplot) - O mapa final do mundo do Naruto&lt;/li&gt;

&lt;li&gt;Interpretação final&lt;/li&gt;

&lt;li&gt;Biblioteca Prince - Otimizando o tempo&lt;/li&gt;

&lt;li&gt;Conclusão&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  O inicio de tudo - Análise de correspondência
&lt;/h2&gt;

&lt;p&gt;Para isso vamos conhecer nossas armas: A análise de correspondência simples é uma técnica estatística multivariada utilizada para explorar e visualizar relações entre as variáveis categóricas em tabelas de contingência. Para compreender melhor esse conceito é bom entender uma categoria como um conceito que representa grupos não numéricos, ou seja, se você estiver agrupando coisas que são diferentes de grupos numéricos então você está usando categorias.&lt;/p&gt;

&lt;p&gt;Dentro do nosso cenário, vamos imaginar que recebemos o relatório com os resultados feito pelos pesquisadores da aldeia e vamos começar a analisar esses dados:&lt;/p&gt;

&lt;h2&gt;
  
  
  Definindo nosso cenário básico - Importando bibliotecas
&lt;/h2&gt;

&lt;p&gt;Nesse primeiro momento vamos garantir que todas as nossas bibliotecas estão importadas e vamos configurar o estilo do nosso gráfico afim de garantir um aspecto mais visivelmente agradável.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;seaborn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;sns&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;scipy.stats&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;chi2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;contigency&lt;/span&gt;

&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;whitegrid&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rcParams&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;udate&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;
  &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;font.family&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sans-serif&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;font.size&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;axes.titlesize&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;axes.titleweight&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bold&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;axes.labelsize&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Carregando nossos dados para análise
&lt;/h2&gt;

&lt;p&gt;Nessa parte da análise vamos carregar o relatório que nos foi enviado para que possamos visualizar melhor em gráficos e ter uma noção melhor de quais são as aldeias&lt;sup&gt;1&lt;/sup&gt; comparados com os tipos de estilo de luta&lt;sup&gt;2&lt;/sup&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;: Nesse relatório as aldeias são apresentadas como linhas na tabela&lt;br&gt;
&lt;sup&gt;2&lt;/sup&gt;: Nesse relatório os estilos de luta são apresentados como colunas na tabela&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;dados&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;tabela_contigencia_naruto.csv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index_col&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora que carregamos nosso relatório, vamos visualizar os dados de forma básica para termos uma ideia geral do cenário:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Forma da tabela&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0sllfor3gnskcsajn7x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0sllfor3gnskcsajn7x.png" alt="tabela" width="380" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Visualizando-os com uma tabela de contingência
&lt;/h2&gt;

&lt;p&gt;Aqui temos mais uma de nossas armas: A tabela de contingência nos ajuda a cruzar duas categorias relacionadas — que no nosso caso são aldeias e estilos de luta —&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqmu21k3wwbjtpfd3z9do.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqmu21k3wwbjtpfd3z9do.gif" alt="hinata lutando" width="498" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Utilizaremos um heatmap (mapa de calor) para visualizar os dados brutos de uma forma mais intuitiva. Nele podemos visualizar através de tons, onde quanto mais escuro mais shinobis existem naquela combinação.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;heatmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;annot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;cmap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;TlordRd&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;linewidth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;linecolor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#cccccc&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;cbar_kws&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;label&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Quantidade de Shinobis&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Tabela de Contingência - Dados Brutos&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Estilo de Luta&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Aldeia&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tight_layout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiyi0rvf89m5neuzamu5l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiyi0rvf89m5neuzamu5l.png" alt="tabela de contingencia" width="508" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Calculando os perfis de linha e coluna - Qual é o estilo da aldeia?
&lt;/h2&gt;

&lt;p&gt;Agora que podemos visualizar nosso dado de formas diferentes vamos começar a nos perguntar o que esse dado precisa nos dizer como pode ser visto abaixo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Olhar para o perfil de linha é como perguntar: "De todos os shinobis da vila de Konoha, qual a porcentagem de cada estilo?", ou seja, nós dividismo cada valor pela soma da linha, essa informação nos aproxima do que seria o perfil de combate geral em cada aldeia.&lt;/li&gt;
&lt;li&gt;Já olhar para o perfil de coluna nos diz justamente o contrário: "De todos os que preferem Taijutsu, quantos são de cada aldeia?", ou seja, olhamos para o perfil de um estilo específico visto por cada aldeia.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmt1qi5pk476aw6b9gsc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmt1qi5pk476aw6b9gsc.gif" alt="gaara vs rock lee" width="498" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para calcular o perfil de linha vamos realizar o calculo dos dados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;row_profile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;div&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Perfil de linha (proporção por aldeia)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row_profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Soma por linha (deve ser 1.0):&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row_profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvu96058hx7to520x70a5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvu96058hx7to520x70a5.png" alt="perfil de linha" width="400" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Já para o perfil de coluna faremos o contrário como foi explicado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;col_profile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;div&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Perfil de coluna (proporção por estilo)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;col_profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Soma por coluna (deve ser 1.0):&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;col_profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchc5uu4ec1ayga7aeuxe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchc5uu4ec1ayga7aeuxe.png" alt="perfil de coluna" width="390" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Visualizando o perfil de linha de maneira estruturada
&lt;/h3&gt;

&lt;p&gt;Perfeito! Agora que entendemos o conceito e conseguimos visualizar nossos numeros brutos dos perfis, vamos visualiza-los em um gráfico:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;CORES_ALDEIAS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Konoha&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#F25C54&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Suna&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#F2A83A&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Kiri&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#3AA3F2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Ame&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#8E5CF2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;arange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colums&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;aldeia&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;idx&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row_profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;CORES_ALDEIAS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;edgecolor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;white&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linewidth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Perfil de Linha - &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Perfil de combate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; de cada aldeia&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Estilo de luta&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Proporção (%)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_xticks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_ylim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;yaxis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_major_formatter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FuncFormatter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tight_layout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fab7qregtboyoemoljstc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fab7qregtboyoemoljstc.png" alt="perfil_de_linha" width="499" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Teste QUI-Quadrado - Isso é uma coincidência ou não?
&lt;/h2&gt;

&lt;p&gt;Um dos aspectos mais importantes em uma análise de dados é questionar nossa base com carater investigativo, dentro do nosso cenário devemos nos perguntar se há mesmo uma relação entre aldeias e estilos de luta ou se estamos atribuindo causalidade&lt;sup&gt;3&lt;/sup&gt; para dados correlacionados&lt;sup&gt;4&lt;/sup&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;sup&gt;3&lt;/sup&gt;: Causalidade refere-se a uma relação de causa e efeito entre duas informações, onde o efeito de uma influencia diretamente o efeito da segunda.&lt;br&gt;
&lt;sup&gt;4&lt;/sup&gt;: Já a correlação mostra uma associação entre duas informações, mas não implica causalidade.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8pn4tonji7fwwkzx8vh5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8pn4tonji7fwwkzx8vh5.gif" alt="tsunade lendo" width="498" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para nos auxiliar nessa investigação vamos utilizar mais uma de nossas armas ninjas: O teste qui-quadrado, ele nos ajuda a fazer exatamente essa verificação onde se o &lt;code&gt;p-valor&lt;/code&gt; for menor que &lt;code&gt;0,05&lt;/code&gt; podemos dizer então que não há coincidência e que existe uma associação real entre as informações analisadas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;p &amp;lt; 0,05 - Existe associação significativa (não é coincidência)&lt;/li&gt;
&lt;li&gt;p &amp;gt; 0,05 - Não há evidência suficiente de associação&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Para informações mais detalhadas sobre o assunto, [leia o artigo](&lt;a href="https://docs-scipy-org.translate.goog/doc/scipy-1.17.0/reference/generated/scipy.stats.chisquare.html?_x_tr_sl=en&amp;amp;_x_tr_tl=pt&amp;amp;_x_tr_hl=pt&amp;amp;_x_tr_pto=tc%5D(https://docs-scipy-org.translate.goog/doc/scipy-1.17.0/reference/generated/scipy.stats.chisquare.html?_x_tr_sl=en&amp;amp;_x_tr_tl=pt&amp;amp;_x_tr_hl=pt&amp;amp;_x_tr_pto=tc" rel="noopener noreferrer"&gt;https://docs-scipy-org.translate.goog/doc/scipy-1.17.0/reference/generated/scipy.stats.chisquare.html?_x_tr_sl=en&amp;amp;_x_tr_tl=pt&amp;amp;_x_tr_hl=pt&amp;amp;_x_tr_pto=tc](https://docs-scipy-org.translate.goog/doc/scipy-1.17.0/reference/generated/scipy.stats.chisquare.html?_x_tr_sl=en&amp;amp;_x_tr_tl=pt&amp;amp;_x_tr_hl=pt&amp;amp;_x_tr_pto=tc&lt;/a&gt; )&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;chi2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p_value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dof&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;expected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;chi2_contingency&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Teste Qui-Quadrado&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Chi-Quadrado : &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;chi2&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;P-valor      : &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;p_value&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Graus de lib.: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;dof&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p_value&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Resultado: p &amp;lt; 0,05 - Existe associação&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Resultado: p &amp;gt; 0,05 - Não existe associação&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Frequência Esperada (Se não houvesse associação)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;expected_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expected_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuvpdqne7xrghn48t48bd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuvpdqne7xrghn48t48bd.png" alt="qui quadrado" width="434" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resíduos padronizados - Quem está fora do esperado?
&lt;/h2&gt;

&lt;p&gt;Após nossa análise investigativa temos a certeza que estamos no caminho certo! Sem a associação entre a aldeia e o estilo, as propoções seriam quase iguais em todos os lugares.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhp29impkx7wsiv4cwt83.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhp29impkx7wsiv4cwt83.gif" alt="obito" width="400" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para continuar nossa análise devemos questionar novamente nossa base de dados e entender quem está fora do esperado. Para isso vamos conhecer mais uma de nossas armas ninjas: Os resíduos padronizados nos proporcionam uma medição dessa diferença: O que vemos de fato x O que veríamos se tudo fosse igual ou parecido.&lt;/p&gt;

&lt;p&gt;Afim de calcular essa informação seguimos a formula de resíduo onde &lt;code&gt;resíduo = (observado - esperado) / esperado (raiz quadrada de esperado)&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;row_sums&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;col_sums&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;residuals&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;expected_ij&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row_sums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;col_sums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;
        &lt;span class="n"&gt;residuals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;expected_ij&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expected_ij&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Resíduos Padronizados)
print(residuals.round(3))
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85oozfvbxprt2o65qlnk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85oozfvbxprt2o65qlnk.png" alt="residuos padronizados" width="410" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora com nossos números brutos definidos, podemos visualiza-los em gráfico onde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Valor positivo (azul): Mais do que o esperado, associação forte.&lt;/li&gt;
&lt;li&gt;Valor negativo (vermelho): Menos do que o esperado. Fórmula: resíduo = (observado - esperado) / esperado(raiz quadrada de esperado)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;heatmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;residuals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;annot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.2f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cmap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;RdBu_r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;center&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;linewidths&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linecolor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#cccccc&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;cbar_ks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;label&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Resíduo Padronizado&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="n"&gt;annot_kws&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;size&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;weight&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bold&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="n"&gt;vmin&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mf"&gt;1.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vmax&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Resíduos Padronizados&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Azul= Acima do esperado | Vermelho = Abaixo do esperado&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Estilo de Luta&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Aldeia&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tight_layout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffypn0f2tfx6kkl9bggkc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffypn0f2tfx6kkl9bggkc.png" alt="residuos padronizados" width="513" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Decomposição SVD - Reduzindo o mundo em duas dimensões
&lt;/h2&gt;

&lt;p&gt;Vamos imaginar o mapa do mundo de naruto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhb2hemgfqr08jtle92u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhb2hemgfqr08jtle92u.png" alt="mapa mundo ninja" width="696" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos observar nossa amostra com mil aldeias e mil estilos de luta. Dentro desse cenário é impossível de visualizar, concorda? Para isso a decomposição SVD ajuda a pegar todas essa informação e comprimi-la em duas dimensões, como se você fosse um cartógrafo e decidisse criar um mapa mais simplificado que ainda captura informações importantes.&lt;/p&gt;

&lt;p&gt;Não perde tudo, só os detalhes menos relevantes. É como usar o sharingan: você foca no que importa.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzol3zjlt4zepjqrcyfed.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzol3zjlt4zepjqrcyfed.gif" alt="kakashi sharingan" width="640" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em termos mais técnicos: A SVD (Singular Value Decomposition) é o coração matemático da CA (Correspondency Analysis). Para ela temos algumas etapas necessárias afim de aplica-la efetivamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Normalizar a matriz&lt;/li&gt;
&lt;li&gt;2. Calcular a matriz&lt;/li&gt;
&lt;li&gt;3. Aplicar SVD para obter as coordenadas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Primeiro vamos normalizá-la:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Matriz de Proporções (P)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Soma total (deveser 1.0): &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkd1yy58sjhi8pkilb6x5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkd1yy58sjhi8pkilb6x5.png" alt="matriz de proporcoes" width="454" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em seguida calculamos a matriz Z e massas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;row_mass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# massa das linhas
&lt;/span&gt;&lt;span class="n"&gt;col_mass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# massa das colunas
&lt;/span&gt;
&lt;span class="nf"&gt;print &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Massa das linhas (aldeias):&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;massa&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row_mass&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;massa&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Massa das colunas (estilos):&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;estilo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;massa&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colums&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;col_mass&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;estilo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;massa&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Matriz Z (resíduos padronizados pela massa)
&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;outer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row_mass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;col_mass&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;outer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row_mass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;col_mass&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Matriz Z (entrada SVD)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4ma3f4jb321viiyj5uf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4ma3f4jb321viiyj5uf.png" alt="massa e matriz Z" width="389" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E por fim aplicamos a SVD de fato:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Vt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;linalg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;svd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;full_matrices&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Valores Singulares (s)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;val&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumetate &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; s[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] = &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Coordenadas nas duas primeiras dimensões
&lt;/span&gt;&lt;span class="n"&gt;row_coords&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="p"&gt;[:,&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;col_coords&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Vt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[:,&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Inércia explicada por dimensão
&lt;/span&gt;&lt;span class="n"&gt;inertia&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;explained_var&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inertia&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;inertia&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Inércia explicada por dimensão&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;explained_var&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; Dimensão &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt; Acumulada (Dim 1 + 2): &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;explained_var&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;explained_var&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Coordenadas das aldeias&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;coords_aldeias&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row_coords&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Dim &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Dim 2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coords_aldeias&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Coordenadas dos estilos&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;coords_estilos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;col_coords&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Dim 1&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Dim 2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coords_estilos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fprimejcv06s6kk0r6hop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fprimejcv06s6kk0r6hop.png" alt="svd" width="256" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mapa de Correspondência (Biplot) - O mapa final do mundo do Naruto
&lt;/h2&gt;

&lt;p&gt;Finalmente nos aproximamos ao final de nossa análise afim de podermos traçar as melhores estratégias para nossos queridos alunos!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwdmx9blzudx30z4dddv2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwdmx9blzudx30z4dddv2.gif" alt="rock lee naruto guy" width="640" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pontos próximos = relação forte.&lt;br&gt;&lt;br&gt;
Se Konoha e Taijutsu estão do mesmo lado do mapa, significa que a Konoha é conhecida por Taijutsu. Faz sentido, né? Rock Lee, Guy-Sensei, todos são de Konoha e são mestres de Taijutsu.&lt;/p&gt;

&lt;p&gt;Pontos longe = relação fraca.&lt;br&gt;&lt;br&gt;
Se Kiri fica do outro lado, significa que os shinobis de Kiri não são tão voltados para Taijutsu.&lt;/p&gt;

&lt;p&gt;A origem do mapa (centro) é o ponto neutro, sem associação forte com nada.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# maior residuo padronizado positivo
&lt;/span&gt;
&lt;span class="n"&gt;associacoes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;aldeia&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;estilo_mais_forte&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;residuals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;idxmax&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;associacoes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;estilo_mais_forte&lt;/span&gt;

&lt;span class="n"&gt;CORES_ESTILOS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;estilo&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;associacoes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;CORES_ESTILOS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;estilo&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CORES_ALDEIAS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;estilo&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;estilo&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;CORES_ESTILOS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;estilo&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#999999&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; Associações por resíduo mais forte: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;estilo&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;associacoes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; - &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;estilo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (resíduo: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;residuals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;estilo&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Linhas de referência
&lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;axhline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#aaaaaa&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linewidth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linestyle&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;--&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;axvline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#aaaaaa&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linewidth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linestyle&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;--&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Linhas conectando ao centro
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row_coords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row_coords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;
        &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;CORES_ALDEIAS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt; &lt;span class="n"&gt;linewidth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;alpha&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Aldeias (círculos)
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;aldeia&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scatter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row_coords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;row_coords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CORES_ALDEIAS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;edgecolors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;black&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;linewidth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;zorder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;annotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row_coords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;row_coords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
        &lt;span class="n"&gt;textcoords&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;offset points&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xytext&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;fontsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontweight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bold&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;CORES_ALDEIAS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# Estilos (quadrados)
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;estilo&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scatter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row_coords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;row_coords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;CORES_ALDEIAS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;edgecolors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;black&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;linewidth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;zorder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;annotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;,(&lt;/span&gt;&lt;span class="n"&gt;row_coords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;row_coords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
        &lt;span class="n"&gt;textcoords&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;offset points&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xytext&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;fontsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontweight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bold&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;CORES_ALDEIAS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;


&lt;span class="c1"&gt;# Legenda das associações
&lt;/span&gt;&lt;span class="n"&gt;legend_handles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;estilo&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;associacoes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;legend_handles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Line2D&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;marker&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;o), color=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;,
        markerfacecolor=CORES_ALDEIAS[aldeia], markersize=12,
        label=f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;aldeia&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="err"&gt;●&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;estilo&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, linestyle=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;)
        )
legend_handles.append(

plt.Line2D([0], [0], marker=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, color=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, markerfacecolor=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="c1"&gt;#cccccc',
&lt;/span&gt;
&lt;span class="n"&gt;markersize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;● = Aldeia&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linestyle&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;None&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;legend_handles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;

&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Line2D&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;marker&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;markerfacecolor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#cccccc&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="n"&gt;markersize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;■ = Estilo&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linestyle&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;None&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;legend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handles&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;legend_handles&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;lower right&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="n"&gt;framealpha&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Associações&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;title_fontsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mapa de Correspondência (Biplot)&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Cores iguais = aldeia e estilo mais associados&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Dimensão 1 (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;explained_var&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% da inércia)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Dimensão 2 (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;explained_var&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% da inércia)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mapa de Correspondência (Biplot)&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Cores iguais = aldeia e estilo mais associados&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Dimensão 1 (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;explained_var&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% da inércia)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Dimensão 2 (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;explained_var&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% da inércia)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Far6l8agfg0r1da54a6ms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Far6l8agfg0r1da54a6ms.png" alt="mapa de correspondencia (biplot)" width="542" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Interpretação final
&lt;/h2&gt;

&lt;p&gt;No final do mapa, você veria Konoha bem perto de Taijutsu ( Rock Lee e Guy), Kiri perto de Senjutsu (por exemplo), e assim por diante.&lt;br&gt;
Cada cluster conta uma história sobre quem se parece com quem no mundo dos shinobis.&lt;br&gt;
É basicamente isso. A Análise de Correspondência é um mapa que mostra quais categorias se parecem entre si, sem precisar olhar para uma tabela cheia de números!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffgfjx67x74l9c3przjwj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffgfjx67x74l9c3przjwj.gif" alt="naruto festa" width="640" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Biblioteca Prince - Otimizando o tempo
&lt;/h2&gt;

&lt;p&gt;Durante toda a análise, calculamos manualmente cada etapa: a matriz de proporções, as massas, a matriz Z, a decomposição SVD e as coordenadas.&lt;/p&gt;

&lt;p&gt;Isso foi muito importante para entender o que acontece por baixo dos panos, como se você fosse um Sensei explicando cada movimento de uma técnica de luta aos seus Genins.&lt;/p&gt;

&lt;p&gt;Mas imagina que agora você precisa executar a técnica o mais rápido possível para uma missão (Ou, talvez... A vila esteja sendo atacada e precisam saber com quem podem contar de cada Aldeia). É exatamente isso que a biblioteca PRINCE oferece, ela encapsula toda essa matemática em poucas linhas de código, assim como o Naruto não precisa pensar em cada passo do Rasenshuriken depois que já dominou a técnica.&lt;/p&gt;

&lt;p&gt;O Prince entrega tudo pronto: coordenadas das aldeias, coordenadas dos estilos, inércia explicada e contribuições de cada ponto. É a diferença entre um genin aprendendo Taijutsu passo a passo e um jounin executando a técnica em um segundo.&lt;/p&gt;

&lt;p&gt;A única desvantagem que percebo é que, assim como usar um jutsu poderoso sem entender sua origem, você perde a visibilidade do que acontece internamente. Por isso, entender a implementação manual primeiro é fundamental antes de partir para algo mais avançado como o Prince.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwatjr8hhaq6b9htkykif.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwatjr8hhaq6b9htkykif.png" alt="biblioteca prince" width="300" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnrhl0bisntthxat043pu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnrhl0bisntthxat043pu.gif" alt="hinata rindo" width="498" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Obrigada por ler até aqui! :)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fontes:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs-scipy-org.translate.goog/doc/scipy-1.17.0/reference/generated/scipy.stats.chisquare.html?_x_tr_sl=en&amp;amp;_x_tr_tl=pt&amp;amp;_x_tr_hl=pt&amp;amp;_x_tr_pto=tc" rel="noopener noreferrer"&gt;https://docs-scipy-org.translate.goog/doc/scipy-1.17.0/reference/generated/scipy.stats.chisquare.html?_x_tr_sl=en&amp;amp;_x_tr_tl=pt&amp;amp;_x_tr_hl=pt&amp;amp;_x_tr_pto=tc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pt.khanacademy.org/math/statistics-probability/analyzing-categorical-data" rel="noopener noreferrer"&gt;https://pt.khanacademy.org/math/statistics-probability/analyzing-categorical-data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maxhalford.github.io/prince/ca/" rel="noopener noreferrer"&gt;https://maxhalford.github.io/prince/ca/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://naruto.fandom.com/pt-br/wiki/Geografia" rel="noopener noreferrer"&gt;https://naruto.fandom.com/pt-br/wiki/Geografia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para ter acesso a todo código da análise sinta-se a vontade para se basear no repósitorio:  &lt;a href="https://github.com/surocham/ca_naruto" rel="noopener noreferrer"&gt;https://github.com/surocham/ca_naruto&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agradecimento especial para &lt;a class="mentioned-user" href="https://dev.to/cherryramatis"&gt;@cherryramatis&lt;/a&gt; que me ajudou revisando este artigo. 💗💗💗&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>analytics</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Minha Jornada na Área de Dados: Um Guia Para Quem Está Começando</title>
      <dc:creator>Suami Medeiros</dc:creator>
      <pubDate>Fri, 30 Jan 2026 23:08:56 +0000</pubDate>
      <link>https://forem.com/surocham/minha-jornada-na-area-de-dados-um-guia-para-quem-esta-comecando-i57</link>
      <guid>https://forem.com/surocham/minha-jornada-na-area-de-dados-um-guia-para-quem-esta-comecando-i57</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foi91bn3wtca339bf11w0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foi91bn3wtca339bf11w0.png" alt=" " width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hoje recebi uma mensagem no LinkedIn da Mari perguntando como foi meu início na área de dados. A resposta honesta? Ainda estou descobrindo.&lt;/p&gt;

&lt;p&gt;Mas o fato de alguém me perguntar isso já mostra que estou no caminho certo. Fico feliz que meus posts do desafio #100DiasDeCodigo estejam alcançando pessoas que, assim como eu, buscam uma oportunidade em dados.&lt;/p&gt;

&lt;p&gt;Mesmo sem saber tudo, mas muito motivada e determinada, decidi criar este guia para quem se sente perdido nessa área.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por Que Este Guia É Diferente?
&lt;/h2&gt;

&lt;p&gt;Existem milhares de conteúdos excelentes sobre transição de carreira para dados. Mas ao encontrar minhas publicações, talvez você tenha curiosidade de saber &lt;strong&gt;exatamente como eu fiz e estou fazendo:&lt;/strong&gt; com os erros, acertos e a bagunça organizada que é aprender enquanto se constrói uma carreira.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meu Contexto (Aviso: Não Faça Isso em Casa)
&lt;/h2&gt;

&lt;p&gt;Estou fazendo muitas coisas simultaneamente e &lt;strong&gt;não recomendo isso para ninguém&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pós-graduação na FIAP&lt;/li&gt;
&lt;li&gt;Ativa em comunidades de dados: DataTalks da Laura, AI Girls, Indicium, ComuniDados, Data Creators e He4rt Devs&lt;/li&gt;
&lt;li&gt;Mãe solo conciliando rotina doméstica, estudos e busca por vagas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazik5zl2jd0kwex5pfo9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazik5zl2jd0kwex5pfo9.png" alt=" " width="500" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Não é fácil, mas encontrei pessoas incríveis que me ajudam demais! Agradecimento especial ao @ Ricardo e @ Cherry.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Decisão Que Mudou Tudo
&lt;/h2&gt;

&lt;p&gt;Quando decidi entrar em dados, não sabia por onde começar. Pensei: "Quero muito isso e vou fazer acontecer, mesmo sem saber exatamente como".&lt;/p&gt;

&lt;p&gt;Tive medo. Ainda me sinto insegura sobre muitas coisas. Mas já faz um tempo que comecei e não me arrependo. Cada dia aprendo algo novo e descubro múltiplas formas de resolver um mesmo problema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minha evolução:&lt;/strong&gt; não sabia nem fazer cálculo no Excel, hoje crio planilhas limpas e organizadas. Posso dizer que estou orgulhosa de mim!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ferramentas que descobri:&lt;/strong&gt; RStudio, Google Colab (Jupyter), Databricks, Qlik, AWS, Docker, Azure, Fabric&lt;/p&gt;

&lt;h2&gt;
  
  
  5 Passos Para Não Se Perder
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Saiba o que você quer agora&lt;/strong&gt; - clareza no objetivo de curto prazo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anote seu objetivo final&lt;/strong&gt; - visualize seu destino&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organize metas cronologicamente&lt;/strong&gt; - dê check quando alcançá-las&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compartilhe com o máximo de pessoas&lt;/strong&gt; - isso evita desistência e promove seu trabalho&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contribua com a comunidade&lt;/strong&gt; - ajude quem está começando&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7t485f9t30q1cf6v7ygu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7t485f9t30q1cf6v7ygu.png" alt=" " width="498" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Meu Caminho: De Dev para Dados
&lt;/h2&gt;

&lt;p&gt;Como desenvolvedora, já tinha feito bootcamp de Python pela Embraer. Pesquisei: &lt;strong&gt;"Qual a melhor forma de entrar na área de dados hoje?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A resposta: &lt;strong&gt;Análise de Dados&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Em eventos de tecnologia em Belém, conversei com @ Gustavo Ramos e a Artemisia (referências em dados) que confirmaram: essa é a porta de entrada.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hard Skills Essenciais
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Power BI&lt;/li&gt;
&lt;li&gt;Excel&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;SQL&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Soft Skills: O Diferencial
&lt;/h3&gt;

&lt;p&gt;É sobre &lt;strong&gt;negócios&lt;/strong&gt;. Tenho consumido conteúdo do Sasaki e aprendido como as empresas realmente esperam que analistas de dados entreguem: &lt;strong&gt;resultados na mesa&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meu Plano de Estudos
&lt;/h2&gt;

&lt;p&gt;Dos quatro itens essenciais, eu só tinha Python. Precisei correr atrás do resto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftwz2y49mxkshmpnfzmdk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftwz2y49mxkshmpnfzmdk.png" alt=" " width="500" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Excel
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Playlist do &lt;a href="https://www.youtube.com/@bosontreinamentos" rel="noopener noreferrer"&gt;Boson Treinamentos&lt;/a&gt; no YouTube&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Power BI
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Evento com Karine Lago (referência em Power BI) - criei meu primeiro dashboard&lt;/li&gt;
&lt;li&gt;Evento da Hashtag Treinamentos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Curso "Power BI para Business Intelligence"&lt;/strong&gt; da Data Science Academy (gratuito, +70 horas) - questionei o tempo todo se aquele conteúdo gratuito era real!&lt;/li&gt;
&lt;li&gt;Bootcamp de Análise de Dados pela DIO&lt;/li&gt;
&lt;li&gt;Bootcamp focado em Azure e Fabric&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Certificações Conquistadas (Gratuitas!)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Databricks Fundamentals&lt;/li&gt;
&lt;li&gt;IBM Data Fundamentals&lt;/li&gt;
&lt;li&gt;Curso de Docker pelo LinuxTips&lt;/li&gt;
&lt;li&gt;Curso de AWS pelo ChamaAsMina do LinuxTips&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Próximas Certificações na Mira
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;PI-900&lt;/li&gt;
&lt;li&gt;AWS Practitioner&lt;/li&gt;
&lt;li&gt;Google Cloud&lt;/li&gt;
&lt;li&gt;Badges e certificações Databricks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(Alô, alguém me patrocina? 😅)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Outras Ferramentas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tableau&lt;/li&gt;
&lt;li&gt;Looker Studio&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Jornada Continua: sobre Comunidade
&lt;/h2&gt;

&lt;p&gt;Nesse meio tempo, migrei para &lt;strong&gt;Linux Arch&lt;/strong&gt; e explorei os repositórios &lt;a href="https://github.com/he4rt/4noobs" rel="noopener noreferrer"&gt;4Noobs da He4rt&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Como uma coisa leva à outra, vi o guia de Arch Linux e também o de Obsidian. Aí lembrei que a Cherry escreveu um &lt;a href="https://dev.to/he4rt/compartilhando-seu-conhecimento-com-o-mundo-como-escrever-artigos-5ghc"&gt;artigo incrível no DEV&lt;/a&gt; sobre como compartilhar conhecimento com o mundo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh657mv0axqb6hjdyar06.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh657mv0axqb6hjdyar06.png" alt=" " width="498" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Obrigada a comunidade He4rt que me acolheu desde 2022, sempre tirei muitas duvidas, sempre participei dos eventos (quando dava) e a troca real, valeu demais pelos toques.&lt;/p&gt;

&lt;h2&gt;
  
  
  O Segredo? Não Existe Segredo
&lt;/h2&gt;

&lt;p&gt;Uma série de coisas me trouxe até aqui. De pouquinho em pouquinho, vou chegando mais perto dos meus objetivos, tentando não surtar nem desistir.&lt;/p&gt;

&lt;p&gt;A verdade é que a jornada não é linear. É cheia de desvios, descobertas e conexões inesperadas. E está tudo bem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F942jblxcrezctjaz8hp7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F942jblxcrezctjaz8hp7.png" alt=" " width="384" height="498"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Obrigada por chegar até aqui!&lt;/strong&gt; Se você também está nessa jornada, vamos trocar experiências nos comentários?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;#AreaDeDados #AnaliseDeDados #100DiasDeCodigo #TransiçãoDeCarreira #DevCommunity&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>community</category>
      <category>datascience</category>
      <category>analytics</category>
    </item>
    <item>
      <title>My first time participating in Hacktoberfest 2024</title>
      <dc:creator>Suami Medeiros</dc:creator>
      <pubDate>Sun, 13 Oct 2024 13:46:19 +0000</pubDate>
      <link>https://forem.com/surocham/my-first-time-participating-in-hacktoberfest-2024-4940</link>
      <guid>https://forem.com/surocham/my-first-time-participating-in-hacktoberfest-2024-4940</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest"&gt;2024 Hacktoberfest Writing challenge&lt;/a&gt;: Maintainer Experience&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This was my first time participating in this event, and I was really happy because I was able to actively contribute to open-source projects that I really like and follow.&lt;/p&gt;

&lt;p&gt;I made a total of five PRs in beginner-level projects since I wasn't very confident in my developer skills. So I started my journey with a really cool project of useful links for learning programming languages. My first PR was rejected because I messed up the commit formatting, hehe. I didn't give up, tried again, and now I'm waiting, hoping it will be approved.&lt;/p&gt;

&lt;p&gt;The second PR was for a really cool app made with Flutter and Rust, which is very similar to Notion, called AppFlowy. This PR was a bit challenging for me because I wasn't sure how to contribute. I looked at the issues, evaluated the documentation, and didn't have much success, but I still tried something and submitted the PR. I'm also waiting for that one to be accepted.&lt;/p&gt;

&lt;p&gt;The third PR was to add a link to a learning path for C, and the fourth was to update the README of a project idea, which was really nice. Now I'm searching for my last repository to submit a PR and wait.&lt;/p&gt;

&lt;p&gt;But I absolutely loved this experience and recommend it to every beginner dev, it's worth gold!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Como fazer deploy no vercel com o seu app web flutter</title>
      <dc:creator>Suami Medeiros</dc:creator>
      <pubDate>Sat, 28 Sep 2024 02:11:59 +0000</pubDate>
      <link>https://forem.com/devsnorte/como-fazer-deploy-no-vercel-com-o-seu-app-web-flutter-3o43</link>
      <guid>https://forem.com/devsnorte/como-fazer-deploy-no-vercel-com-o-seu-app-web-flutter-3o43</guid>
      <description>&lt;h1&gt;
  
  
  Como fazer deploy no vercel com o seu app web flutter
&lt;/h1&gt;

&lt;p&gt;Venho aqui trazer esse "guia" de como publicar sua aplicação web flutter no site muito famosinho chamado &lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Dei algumas alternativas de como fazer isso e no final vou deixar a referência que me inspirou a digitar esse artigo(passem lá pra dar os claps pro coleguinha, rs).&lt;/p&gt;

&lt;h2&gt;
  
  
  Antes de tudo...
&lt;/h2&gt;

&lt;p&gt;Gostaria de desejar os meus parabéns pelo seu ótimo trabalho. Publicar uma aplicação web é um marco enorme para qualquer desenvolvedor, e se você chegou até aqui, é por estar a um passo de compartilhar o seu trabalho com o mundo.&lt;/p&gt;

&lt;p&gt;Agora vou te mostrar como fazer a publicação do seu app web flutter para a plataforma &lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Indice&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Preparando a sua aplicação flutter para Web.

&lt;ul&gt;
&lt;li&gt;Habilitar o suporte web no seu projeto Flutter.

&lt;ul&gt;
&lt;li&gt;  Criar a versão web da sua aplicação.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Criando uma conta na Vercel.

&lt;ul&gt;
&lt;li&gt;Acessar o site da Vercel.

&lt;ul&gt;
&lt;li&gt;Criar uma conta.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Subindo sua aplicação para o GitHub.

&lt;ul&gt;
&lt;li&gt;Inicialize o git no seu projeto.

&lt;ul&gt;
&lt;li&gt;Adicionar todos os arquivos e fazer o commit inicial.&lt;/li&gt;
&lt;li&gt;Subir a aplicação para o GitHub.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Conectando o seu projeto à Vercel

&lt;ul&gt;
&lt;li&gt;Conectar o repositório.

&lt;ul&gt;
&lt;li&gt;Configurar as opções de build.&lt;/li&gt;
&lt;li&gt;Clicar em deploy.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Publicação finalizada e opção de customizar o link.

&lt;ul&gt;
&lt;li&gt;Verificar se está tudo ok.

&lt;ul&gt;
&lt;li&gt;Atualização automática&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fim.&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  Preparando a sua aplicação flutter para Web
&lt;/h1&gt;

&lt;p&gt;Vamos garantir que a sua aplicação está configurado corretamente para web.&lt;/p&gt;

&lt;h3&gt;
  
  
  Habilitar o suporte web no seu projeto flutter
&lt;/h3&gt;

&lt;p&gt;Vá ao terminal (No meu VSCode o atalho é Ctrl + Shift + ') e digite e execute o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter config --enable-web

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Criar a versão web da sua aplicação
&lt;/h3&gt;

&lt;p&gt;Agora precisamos gerar os arquivos necessários para o deploy. Mais uma vez, no terminal, digite e execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter build web

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Será criada uma pasta &lt;code&gt;build\web&lt;/code&gt;, que vai ter os arquivos necessários que comentei anteriormente, após fazer a compilação do seu projeto.&lt;/p&gt;




&lt;h1&gt;
  
  
  Criando uma conta na Vercel
&lt;/h1&gt;

&lt;p&gt;Se você não conhece a Vercel é uma plataforma bem legal pra subir os seus projetos. Para subir seu projeto você vai precisar criar uma conta mas não se preocupe pois não é preciso pagar nada (Só se você quiser um domínio personalizado, vamos falar disso no final, ok?).&lt;/p&gt;

&lt;p&gt;Prosseguindo..&lt;/p&gt;

&lt;h3&gt;
  
  
  Acessar o site da Vercel
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;https://vercel.com/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Criar uma conta
&lt;/h3&gt;

&lt;p&gt;Você pode se registrar com uma conta do GitHub, GitLab ou BitBucket. Isso poderá ser útil mais tarde.&lt;/p&gt;




&lt;h1&gt;
  
  
  Subindo sua aplicação para o GitHub
&lt;/h1&gt;

&lt;p&gt;Antes de fazer o deploy do seu projeto flutter no Vercel, é preciso que o seu projeto esteja no github ou em alguma plataforma citada anteriormente.&lt;/p&gt;

&lt;p&gt;Vou mostrar como se faz no GitHub.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inicializar o Git no seu projeto
&lt;/h3&gt;

&lt;p&gt;Abra o terminal dentro do seu projeto e digite e execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adicionar todos os arquivos e fazer o commit inicial
&lt;/h3&gt;

&lt;p&gt;Após execute o git init, digite e execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
git commit -m " sua mensagem de preferencia"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Subir o projeto para o GitHub
&lt;/h3&gt;

&lt;p&gt;Finalmente a última etapa para subir a sua aplicação para o GitHub.&lt;/p&gt;

&lt;p&gt;Depois de dar o commit inicial, vá no seu repositório e copie o link, você vai precisar para essa etapa.&lt;/p&gt;

&lt;p&gt;Mais uma vez abra o terminal do seu projeto e digite e execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote add origin https://github.com/seu-usuario/seu-repositorio.git
git push -u origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Detalhe importante: se for em outras plataformas o processo é muito semelhante.&lt;/p&gt;




&lt;h1&gt;
  
  
  Conectando o projeto à Vercel
&lt;/h1&gt;

&lt;p&gt;Belezuras, agora podemos finalmente configurar a publicação na Vercel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conectar o repositório
&lt;/h3&gt;

&lt;p&gt;Com a sua conta logada na Vercel, encontre o botão &lt;em&gt;New Project&lt;/em&gt;, após clicar no botão escolha o Github e procure pelo seu projeto, digitando o nome na barra de busca deve encontrar rápido.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configurar as opções de build
&lt;/h3&gt;

&lt;p&gt;Na seção &lt;code&gt;Build &amp;amp; Development Settings&lt;/code&gt;, escolha &lt;code&gt;Other&lt;/code&gt; como a predefinição da estrutura. Flutter infelizmente não é uma opção padrão no Vercel, então você precisará defini-lo manualmente.&lt;/p&gt;

&lt;p&gt;Substitua as configurações padrões:  &lt;/p&gt;

&lt;p&gt;obs: para isso é preciso clicar no toggle que fica do lado de cada configuração para ativar cada campo.&lt;/p&gt;

&lt;p&gt;Build Command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter/bin/flutter build web --release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output directory&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;build/web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if cd flutter; then git pull &amp;amp;&amp;amp; cd .. ; else git clone https://github.com/flutter/flutter.git; fi &amp;amp;&amp;amp; ls &amp;amp;&amp;amp; flutter/bin/flutter doctor &amp;amp;&amp;amp; flutter/bin/flutter clean &amp;amp;&amp;amp; flutter/bin/flutter config --enable-web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Clicar em deploy
&lt;/h3&gt;

&lt;p&gt;Ao clicar no botão de deploy a Vercel fará todo o trabalho dai em diante. Vai compilar e hospedar o seu app web Flutter automaticamente e é claro que isso pode demorar um pouco.&lt;/p&gt;




&lt;h1&gt;
  
  
  Publicação finalizada e opção de customizar o link
&lt;/h1&gt;

&lt;p&gt;Quando a plataforma concluir a publicação, vai aparecer uma nova janela com o link para o seu projeto deployado (acabei de inventar essa palavra que muitos usam rs).&lt;/p&gt;

&lt;p&gt;Certo, agora você finalmente concluiu sua publicação na Vercel. Meus parabéns!! 🎊&lt;/p&gt;

&lt;h3&gt;
  
  
  Verificar se está tudo ok
&lt;/h3&gt;

&lt;p&gt;Pode ser que algum problema aconteça mas você pode voltar nas outras etapas e verificar o que pode ter acontecido.&lt;/p&gt;

&lt;h3&gt;
  
  
  Atualização automática
&lt;/h3&gt;

&lt;p&gt;E só pra você saber: O maior beneficio de subir pela Vercel é que as suas atualizações são automáticas.&lt;/p&gt;




&lt;h1&gt;
  
  
  Fim
&lt;/h1&gt;

&lt;p&gt;Obrigada por chegar até aqui. Agora seu aplicativo web está ativo, certifique-se de compartilhar com o mundo através das redes sociais, artigos e boca a boca também rs. Networking é o poder!!&lt;/p&gt;

&lt;p&gt;Vou me despedindo por aqui, espero que tenha gostado e até a próxima &amp;lt;3 &lt;/p&gt;

&lt;p&gt;Happy Coding 🚀&lt;/p&gt;




&lt;p&gt;Referência:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.leszekkrol.com/how-to-deploy-a-flutter-web-app-to-vercel-887b28c93478" rel="noopener noreferrer"&gt;How to Deploy a Flutter Web App to Vercel - Leszek W. Król&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>programming</category>
      <category>coding</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Como projetar para várias telas? Aprenda os 4c's</title>
      <dc:creator>Suami Medeiros</dc:creator>
      <pubDate>Fri, 31 May 2024 15:54:45 +0000</pubDate>
      <link>https://forem.com/devsnorte/como-projetar-para-varias-telas-aprenda-os-4cs-551</link>
      <guid>https://forem.com/devsnorte/como-projetar-para-varias-telas-aprenda-os-4cs-551</guid>
      <description>&lt;p&gt;Ao projetar um novo produto ou recurso, é importante pensar sobre os diferentes tipos de plataforma em que o design será disponibilizado. Para lembrar, uma plataforma é o meio pelo qual os usuários utilizam seu produto. Algumas plataformas comuns são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Computadores desktop&lt;/li&gt;
&lt;li&gt;Laptops&lt;/li&gt;
&lt;li&gt;Celulares&lt;/li&gt;
&lt;li&gt;Tablets&lt;/li&gt;
&lt;li&gt;Portáteis, como relógios inteligentes&lt;/li&gt;
&lt;li&gt;TVs&lt;/li&gt;
&lt;li&gt;Telas inteligentes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;À medida que projeta para vários dispositivos, você precisa considerar o tamanho da tela do dispositivo, a interação entre o dispositivo e o usuário, a forma como o conteúdo será organizado em vários tamanhos de tela, a maneira como os usuários vão interagir com cada dispositivo e muito mais.&lt;/p&gt;

&lt;p&gt;Para proporcionar uma ótima experiência de usuário em vários dispositivos, tenha em mente os 4Cs: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Consistência: ter um design uniforme para que os usuários sintam familiaridade com todos os dispositivos e produtos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continuidade: proporcionar uma experiência tranquila e ininterrupta aos usuários enquanto eles navegam entre dispositivos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Contexto: projetar para as necessidades de um dispositivo específico e a forma como o usuário vai utilizar esse dispositivo em qualquer situação.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Complementariedade: levar em consideração como o design do produto em cada dispositivo pode melhorar a experiência geral do usuário.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A plataforma selecionada deve ser aquela que atende melhor às necessidades dos usuários finais. Mais tarde, você pode projetar para outras plataformas. Além de ter uma experiência do usuário consistente entre plataformas, também é importante ter uma identidade de marca consistente.&lt;/p&gt;

&lt;p&gt;Por exemplo, uma Empresa deve ter o mesmo visual e sensação no computador desktop e no celular. E é importante ter em mente que algumas funcionalidades existem apenas em certas plataformas. Pense em um assistente de voz que permite que você faça perguntas ou controle seu celular com a voz. Muito inteligente, não é? No início, apenas celulares tinham assistentes de voz. Se o produto que você projetasse exigisse o uso de um assistente de voz, a única plataforma em que ele funcionaria seria em um celular. Mas, atualmente, assistentes de voz são integrados a muitas outras plataformas, como computadores desktop, TVs e até geladeiras.&lt;/p&gt;

&lt;p&gt;Esse foi um papo mais de ux mas que faz sentido para quem desenvolve front tanto web quanto para app. Espero que tenham gostado.&lt;/p&gt;

&lt;p&gt;Obrigada 🫰💚&lt;/p&gt;

</description>
      <category>design</category>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Web ou App? Qual o melhor para criar em Flutter?</title>
      <dc:creator>Suami Medeiros</dc:creator>
      <pubDate>Fri, 31 May 2024 15:35:12 +0000</pubDate>
      <link>https://forem.com/surocham/web-ou-app-qual-o-melhor-para-criar-em-flutter-4oio</link>
      <guid>https://forem.com/surocham/web-ou-app-qual-o-melhor-para-criar-em-flutter-4oio</guid>
      <description>&lt;p&gt;A criação de aplicações modernas pode ser um desafio, especialmente quando se considera a necessidade de alcançar usuários em várias plataformas. Flutter, um framework desenvolvido pelo Google, tem se destacado por sua capacidade de criar interfaces de usuário nativas para iOS, Android, Web e desktop com um único código-base. No entanto, quando se trata de decidir entre desenvolver para a Web ou como um aplicativo móvel (App) em Flutter, há várias considerações a serem feitas.&lt;/p&gt;

&lt;p&gt;A principal diferença entre desenvolver para Web e para App em Flutter reside na forma como a aplicação é distribuída e utilizada. Aplicações Web são acessadas através de navegadores e não requerem instalação no dispositivo do usuário. Elas são ideais para alcançar um público amplo rapidamente, pois basta um link para que os usuários possam acessar a aplicação. Um exemplo comum de aplicação Web seria um sistema de gerenciamento de conteúdo (CMS) ou uma plataforma de e-commerce, onde o acesso instantâneo e a compatibilidade com múltiplos dispositivos são cruciais.&lt;/p&gt;

&lt;p&gt;Por outro lado, um aplicativo móvel (App) em Flutter é instalado diretamente no dispositivo do usuário, seja ele iOS ou Android. Isso permite uma integração mais profunda com o hardware do dispositivo, como câmeras, GPS, sensores de movimento, entre outros. Aplicativos móveis também oferecem a possibilidade de funcionar offline e fornecer uma experiência de usuário mais rica e responsiva. Um exemplo clássico de um aplicativo móvel seria um aplicativo de redes sociais ou um jogo, onde a performance e a interação com o hardware são primordiais.&lt;/p&gt;

&lt;p&gt;A escolha entre Web e App em Flutter depende muito do público-alvo e das funcionalidades desejadas. Se a prioridade é alcançar rapidamente o maior número possível de usuários com uma solução que não requer instalação, a Web pode ser a melhor escolha. Além disso, aplicações Web são mais fáceis de atualizar e manter, já que as mudanças são refletidas imediatamente sem a necessidade de download de atualizações pelos usuários.&lt;/p&gt;

&lt;p&gt;Entretanto, se a aplicação necessita de um desempenho superior, acesso a funcionalidades avançadas do dispositivo ou uma experiência de usuário mais fluida, o desenvolvimento de um App pode ser mais apropriado. Aplicativos móveis também podem se beneficiar de notificações push e outras funcionalidades nativas que são mais limitadas ou inexistentes na Web.&lt;/p&gt;

&lt;p&gt;No entanto, muitas vezes, um único produto pode precisar de ambas as abordagens para atender a diferentes necessidades do usuário. Por exemplo, uma empresa de serviços financeiros pode oferecer um aplicativo móvel para clientes que necessitam de acesso rápido e seguro às suas contas e transações, enquanto também oferece uma versão Web para usuários que preferem acessar esses serviços a partir de um computador desktop. Neste caso, utilizar Flutter para desenvolver tanto a versão Web quanto a versão App pode ser altamente benéfico, uma vez que permite a reutilização de grande parte do código, economizando tempo e recursos no desenvolvimento e manutenção do software.&lt;/p&gt;

&lt;p&gt;Em resumo, a decisão entre desenvolver para Web ou App em Flutter deve ser orientada pelas necessidades específicas do projeto e dos usuários finais. Cada abordagem tem seus próprios benefícios e limitações, e muitas vezes, a melhor solução pode ser uma combinação de ambas, utilizando a flexibilidade do Flutter para criar uma experiência de usuário consistente e eficiente em múltiplas plataformas.&lt;/p&gt;

&lt;p&gt;Obrigada 🫰&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Roteiro Altamente Subjetivo para Desenvolvimento com Flutter</title>
      <dc:creator>Suami Medeiros</dc:creator>
      <pubDate>Thu, 18 Apr 2024 15:07:40 +0000</pubDate>
      <link>https://forem.com/devsnorte/roteiro-altamente-subjetivo-para-desenvolvimento-com-flutter-2ei9</link>
      <guid>https://forem.com/devsnorte/roteiro-altamente-subjetivo-para-desenvolvimento-com-flutter-2ei9</guid>
      <description>&lt;p&gt;Roteiro Altamente Subjetivo para Desenvolvimento com Flutter&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3m2qgvx0iss52lz8dhp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3m2qgvx0iss52lz8dhp.jpg" alt="Roadmap Flutter" width="764" height="4000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1
&lt;/h2&gt;

&lt;p&gt;Independentemente de estar usando o Android Studio ou o VSC, dedique tempo para aprender atalhos e plugins da IDE. Investir algumas horas nisso vai valer a pena a longo prazo, economizando tempo e esforço. Vale a pena aprender o Flutter CLI, já que algumas tarefas são mais rápidas de serem realizadas pela linha de comando.&lt;/p&gt;

&lt;p&gt;Também é importante desenvolver o hábito de usar um sistema de controle de versão o mais cedo possível. O Git é atualmente a opção mais popular. Embora usar a linha de comando possa parecer legal, recomendo utilizar um cliente Git amigável como Fork, Sourcetree, ou um integrado à sua IDE.&lt;/p&gt;

&lt;h2&gt;
  
  
  2
&lt;/h2&gt;

&lt;p&gt;É importante seguir o estilo de código, mas se você é totalmente novo nisso, pode adicionar frustração, então sinta-se à vontade para pular isso por agora, mas retorne a ele mais tarde.&lt;/p&gt;

&lt;p&gt;O manual "Effective Dart" é o caminho a seguir. Use um linter rigoroso como o very_good_analysis desde o início.&lt;/p&gt;

&lt;p&gt;Quando se trata de Programação Orientada a Objetos (OOP) e Programação Funcional, é melhor começar com o básico. Não se preocupe com padrões complexos ou conceitos como monads por enquanto. Concentre-se em aprender os fundamentos e desenvolver suas habilidades gradualmente.&lt;/p&gt;

&lt;h2&gt;
  
  
  3
&lt;/h2&gt;

&lt;p&gt;Assista ao &lt;a href="https://youtube.com/playlist?list=PLjxrf2q8roU23XGwz3Km7sQZFTdB996iG&amp;amp;si=ggNaYUo7MbJHBxMm" rel="noopener noreferrer"&gt;Widget of the Week&lt;/a&gt; no Youtube, explore os conceitos de Material Design, e familiarize-se com os widgets básicos do Flutter que estão sendo disponibilizados.&lt;/p&gt;

&lt;p&gt;O programa &lt;a href="https://youtube.com/playlist?list=PLjxrf2q8roU1quF6ny8oFHJ2gBdrYN_AK&amp;amp;si=VoupD0boCZsgEegy" rel="noopener noreferrer"&gt;Package of the Week&lt;/a&gt; irá apresentar alguns dos widgets e pacotes de terceiros mais populares disponíveis para o Flutter.&lt;/p&gt;

&lt;h2&gt;
  
  
  4
&lt;/h2&gt;

&lt;p&gt;Os padrões de design são os blocos de construção para desenvolver aplicações robustas. Compreender esses padrões é essencial para o desenvolvimento avançado e para obter um entendimento mais profundo do próprio framework. Além disso, esses padrões são universais e não específicos para nenhum framework ou linguagem de programação em particular. Portanto, investir tempo em estudá-los é uma escolha sábia para o trabalho de desenvolvimento futuro. Para começar a aprender sobre padrões de design, o antigo livro "Gang of Four" é um ótimo recurso.&lt;/p&gt;

&lt;h2&gt;
  
  
  5
&lt;/h2&gt;

&lt;p&gt;Manter o princípio KISS (Keep It Simple, Stupid) e DRY (Don't Repeat Yourself) como foco tático durante o desenvolvimento de software é importante, mas também é essencial construir sobre uma base sólida de princípios estratégicos como SOLID. O livro "Clean Code" de Uncle Bob é um recurso valioso que ajudará em todas essas áreas. Sugiro usar Provider ou get_it para injeção de dependência. Se estiver se sentindo aventureiro e quiser experimentar geração de código, o pacote injectable é uma excelente opção.&lt;/p&gt;

&lt;h2&gt;
  
  
  6
&lt;/h2&gt;

&lt;p&gt;É importante entender como funciona a comunicação entre front-end e back-end e os detalhes por trás das redes. Utilize a geração de código em produção.&lt;/p&gt;

&lt;p&gt;Retrofit, Dio e Json Serializable são ótimos aliados aqui.&lt;/p&gt;

&lt;p&gt;Se você estiver interessado em GraphQL, experimente o Ferry.&lt;/p&gt;

&lt;h2&gt;
  
  
  7
&lt;/h2&gt;

&lt;p&gt;Armazenar dados é um requisito comum para quase todo aplicativo, mas nem todo aplicativo precisa de uma solução de armazenamento extensa. Em muitos casos, é melhor manter as coisas simples e usar persistência básica quando for suficiente. O plugin shared_preferences, ou suas alternativas, podem ser uma boa opção a considerar para esse propósito.&lt;/p&gt;

&lt;h2&gt;
  
  
  8
&lt;/h2&gt;

&lt;p&gt;Quando você precisa aumentar a capacidade de armazenamento dos seus dados, pode ser hora de considerar soluções mais maduras, ou até mesmo opções baseadas em nuvem.&lt;/p&gt;

&lt;h2&gt;
  
  
  9
&lt;/h2&gt;

&lt;p&gt;Está tudo bem desenvolver aplicativos com Provider, desde que você siga alguns acordos ou padrões arquiteturais. Você pode querer mudar para flutter_bloc, flutter_mobx, async_redux, ou outros padrões mais conscientes da arquitetura.&lt;/p&gt;

&lt;p&gt;Suami: Leve em consideração que packages não oficiais podem depender de seus respectivos mantenedores e que por isso pode cair em desuso ou sofre falta de atualizações. (Importante levar em consideração para o tipo de projeto).&lt;/p&gt;

&lt;h2&gt;
  
  
  10
&lt;/h2&gt;

&lt;p&gt;Quando se trata de escrever aplicativos rapidamente, a chave é escrevê-los corretamente desde o início. Para fazer isso, comece com a abordagem TDD (Test Driven Development) e depois faça a transição para BDD (Behavior Driven Development). O livro de Kent Beck, "Test Driven Development by Example", é um ótimo recurso para começar com TDD. Além disso, a série "Clean Code" do Uncle Bob cobre o tópico em profundidade.&lt;/p&gt;

&lt;h2&gt;
  
  
  11
&lt;/h2&gt;

&lt;p&gt;Aprender o desenvolvimento nativo de aplicativos móveis pode ajudá-lo a obter uma compreensão mais profunda da plataforma subjacente, o que pode ser valioso para corrigir problemas com bibliotecas de terceiros ou desenvolver seus próprios plugins. Para começar, faça o curso da Udacity para Android e o curso de Stanford para iOS. FFIgen e JNIgen nos ajudarão a acessar seu código nativo.&lt;/p&gt;

&lt;h2&gt;
  
  
  12
&lt;/h2&gt;

&lt;p&gt;Agora é hora de entender como o async/await realmente funciona e por que o stateless é benéfico. O uso de pacotes como freezed pode ajudar a melhorar o gerenciamento de modelos, enquanto fpdart ou dartz podem tornar seu código mais elegante. Para um entendimento mais profundo, recomendo fazer um curso básico sobre Closure de C#.&lt;/p&gt;

&lt;h2&gt;
  
  
  13
&lt;/h2&gt;

&lt;p&gt;Criar seu próprio plugin pode ser um desafio emocionante! Se estiver se sentindo confiante, desafie-se criando um plugin com uma visualização nativa. E se isso não for o bastante, certifique-se de testar minuciosamente seu plugin e garantir que não haja vazamento de memória. É uma excelente maneira de expandir suas habilidades e contribuir para a comunidade de desenvolvimento. Boa sorte!&lt;/p&gt;

&lt;h2&gt;
  
  
  14
&lt;/h2&gt;

&lt;p&gt;Entender como encontrar vazamentos de memória e identificar problemas de desempenho é crucial para o desenvolvimento eficiente de aplicativos. Você pode começar assistindo a uma palestra de Filip Hracek sobre esse tema no Flutter Europe, disponível no YouTube. Isso fornecerá uma base sólida para melhorar a qualidade e o desempenho dos seus aplicativos Flutter.&lt;/p&gt;

&lt;h2&gt;
  
  
  15
&lt;/h2&gt;

&lt;p&gt;Para obter um entendimento mais profundo do framework, reserve um tempo para aprender sobre o pipeline de renderização do Flutter e como ele organiza seus widgets. Confira recursos como "Flutter's Rendering Pipeline" de Ian Hickson para começar. Isso ajudará você a compreender melhor o funcionamento interno do Flutter e a otimizar o desempenho de seus aplicativos.&lt;/p&gt;

&lt;h2&gt;
  
  
  16
&lt;/h2&gt;

&lt;p&gt;Descobrir que alguém roubou seu aplicativo e o publicou sob um nome diferente seria desanimador e frustrante. O MASVS (Mobile Application Security Verification Standard) pode ajudá-lo a considerar e abordar diferentes cenários de segurança, incluindo esse. Além disso, o freeRASP é uma maneira simples, embora não suficiente por si só, de proteger seu aplicativo contra várias ameaças de segurança. Ao implementar medidas de segurança adequadas, você pode ajudar a proteger seu aplicativo e os dados dos usuários contra esses tipos de ataques e violações de segurança.&lt;/p&gt;

&lt;h2&gt;
  
  
  17
&lt;/h2&gt;

&lt;p&gt;Ao aproveitar o poder do Flutter, você pode criar aplicativos que não são limitados pelas restrições dos smartphones - não se esqueça de explorar também desktop e web.&lt;/p&gt;

&lt;p&gt;Se estiver interessado no desenvolvimento full stack, frameworks como dart_frog podem valer a pena conferir. Eles oferecem uma abordagem abrangente para o desenvolvimento de aplicativos, cobrindo tanto o frontend quanto o backend, utilizando a linguagem Dart em toda a pilha de tecnologia. Isso pode proporcionar uma experiência de desenvolvimento mais integrada e eficiente para projetos complexos.&lt;/p&gt;

&lt;h2&gt;
  
  
  18
&lt;/h2&gt;

&lt;p&gt;Evite construir builds de produção a partir da pasta de desenvolvimento local. Em vez disso, considere usar ferramentas como Codemagic, Travis, GitHub Actions, Circle CI, ou registrar sua máquina de desenvolvimento como um nó CI para GitLab CI. Construir um ciclo de vida de desenvolvimento de software e coletar cobertura de código e outras métricas ajudará a manter a qualidade do código. Confira o Danger, SonarQube e, mais importante, FastLane. Um linter estrito é indispensável aqui. Isso garantirá que seu código esteja em conformidade com padrões de codificação consistentes e ajudará a detectar problemas potenciais antes que eles se tornem problemas reais.&lt;/p&gt;

&lt;h2&gt;
  
  
  19
&lt;/h2&gt;

&lt;p&gt;A análise é essencial para entender como os usuários interagem com seu aplicativo e para tomar decisões orientadas por dados. Firebase Analytics, Firebase Crashlytics e DataDog são apenas algumas das muitas plataformas que oferecem recursos de análise gratuitamente. Ao usar essas ferramentas, você pode acompanhar o desempenho do seu aplicativo, identificar problemas e oportunidades de melhoria e tomar decisões informadas para melhorar a experiência do usuário.&lt;/p&gt;

&lt;h2&gt;
  
  
  20
&lt;/h2&gt;

&lt;p&gt;Você tem a responsabilidade de orientar seus clientes sobre o que é possível e o que não é em termos de conformidade legal. Isso inclui o cumprimento das leis de privacidade, como GDPR e CCPA, além de aderir às políticas e diretrizes da loja de aplicativos. É fundamental garantir que seu aplicativo esteja em conformidade com todas as regulamentações relevantes e políticas da plataforma para evitar problemas legais e garantir a confiança dos usuários.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ambiente de desenvolvimento
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developer.android.com/studio/intro/keyboard-shortcuts" rel="noopener noreferrer"&gt;Android Studio Shortcuts&lt;/a&gt; - Atalhos para acelerar o desenvolvimento no Android Studio.&lt;br&gt;
VSCode Shortcuts for &lt;a href="https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf" rel="noopener noreferrer"&gt;Windows&lt;/a&gt;, &lt;a href="https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf" rel="noopener noreferrer"&gt;macOS&lt;/a&gt; - Atalhos para acelerar o desenvolvimento no VSCode.&lt;br&gt;
&lt;a href="https://docs.flutter.dev/reference/flutter-cli" rel="noopener noreferrer"&gt;Flutter CLI&lt;/a&gt; - Explicação detalhada de todos os comandos Flutter CLI.&lt;br&gt;
&lt;a href="https://dart.dev/tools/dart-tool" rel="noopener noreferrer"&gt;Dart CLI&lt;/a&gt; - Explicação detalhada de todos os comandos Dart CLI (dart fix pode ser bastante útil no desenvolvimento diário).&lt;br&gt;
&lt;a href="https://dartpad.dev/" rel="noopener noreferrer"&gt;DartPad&lt;/a&gt; - Uma ferramenta para criar conteúdo educacional eficaz e envolvente para usuários de Dart e Flutter.&lt;br&gt;
&lt;a href="https://dart.dev/tools/dartpad" rel="noopener noreferrer"&gt;DartPad Documentation&lt;/a&gt; - Documentação do DartPad em dart.dev.&lt;br&gt;
&lt;a href="https://zapp.run/" rel="noopener noreferrer"&gt;Zapp!&lt;/a&gt; - Ambiente sandbox on-line gratuito para criar e compartilhar aplicativos Dart e Flutter, com suporte a todos os pacotes pub.dev, análise estática, incorporação, visualização e muito mais.&lt;br&gt;
&lt;a href="https://learngitbranching.js.org/?locale=pt_BR" rel="noopener noreferrer"&gt;Interactive Git learning online&lt;/a&gt; - Aprenda comandos git de forma interativa no site learngitbranching.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linguagem
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://dart.dev/guides/language/language-tour%E2%80%8A-%E2%80%8AUm" rel="noopener noreferrer"&gt;https://dart.dev/guides/language/language-tour - Um&lt;/a&gt; breve tour pela linguagem Dart.&lt;br&gt;
&lt;a href="https://dart.dev/guides/language/effective-dart%E2%80%8A-%E2%80%8AUm" rel="noopener noreferrer"&gt;https://dart.dev/guides/language/effective-dart - Um&lt;/a&gt; guia para escrever um código Dart melhor.&lt;br&gt;
&lt;a href="https://dart.dev/guides/language/analysis-options%E2%80%8A-%E2%80%8AUm" rel="noopener noreferrer"&gt;https://dart.dev/guides/language/analysis-options - Um&lt;/a&gt; guia de configuração de análise estática.&lt;br&gt;
&lt;a href="https://dart.dev/guides/language/sound-problems%E2%80%8A-%E2%80%8AUm" rel="noopener noreferrer"&gt;https://dart.dev/guides/language/sound-problems - Um&lt;/a&gt; guia sobre como corrigir problemas comuns no código Dart.&lt;br&gt;
&lt;a href="https://dart.dev/tools/linter-rules%E2%80%8A-%E2%80%8AUma" rel="noopener noreferrer"&gt;https://dart.dev/tools/linter-rules - Uma&lt;/a&gt; lista de todas as regras do Dart linter disponíveis.&lt;br&gt;
&lt;a href="https://dcm.dev" rel="noopener noreferrer"&gt;Dart Code Metrics&lt;/a&gt; - Uma ferramenta para ajudá-lo a gerenciar a qualidade e a consistência do código (fornece regras adicionais de lint, métricas de código e muito mais).&lt;/p&gt;

&lt;h3&gt;
  
  
  Widgets Básicos
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://youtube.com/playlist?list=PLjxrf2q8roU23XGwz3Km7sQZFTdB996iG" rel="noopener noreferrer"&gt;Widget of the Week playlist&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtube.com/playlist?list=PLjxrf2q8roU1quF6ny8oFHJ2gBdrYN_AK" rel="noopener noreferrer"&gt;Package of the Week playlist&lt;br&gt;
&lt;/a&gt;&lt;a href="https://flutter.dev/docs/development/ui/widgets-intro" rel="noopener noreferrer"&gt;https://flutter.dev/docs/development/ui/widgets-intro&lt;/a&gt;&lt;br&gt;
&lt;a href="http://material.io" rel="noopener noreferrer"&gt;http://material.io&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.apple.com/design/" rel="noopener noreferrer"&gt;https://developer.apple.com/design/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Design Patterns
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Design_Patterns" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Design_Patterns&lt;/a&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Design_Patterns" rel="noopener noreferrer"&gt;The "Gang of Four" aka "Design Patterns: Elements of Reusable Object-Oriented Software" book&lt;/a&gt;&lt;br&gt;
&lt;a href="https://flutterdesignpatterns.com/" rel="noopener noreferrer"&gt;Flutter Design Patterns&lt;/a&gt;&lt;br&gt;
&lt;a href="https://refactoring.guru/design-patterns" rel="noopener noreferrer"&gt;Refactoring Guru&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Princípios Core Design
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/KISS_principle" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/KISS_principle&lt;/a&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Don%27t_repeat_yourself&lt;/a&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/SOLID" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/SOLID&lt;/a&gt;&lt;br&gt;
&lt;a href="https://cleancoders.com" rel="noopener noreferrer"&gt;https://cleancoders.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/provider" rel="noopener noreferrer"&gt;https://pub.dev/packages/provider&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/get_it" rel="noopener noreferrer"&gt;https://pub.dev/packages/get_it&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/injectable" rel="noopener noreferrer"&gt;https://pub.dev/packages/injectable&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Networking
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Representational_state_transfer" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Representational_state_transfer&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/retrofit" rel="noopener noreferrer"&gt;https://pub.dev/packages/retrofit&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/json_serializable" rel="noopener noreferrer"&gt;https://pub.dev/packages/json_serializable&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Persistência Simples
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://pub.dev/packages/shared_preferences" rel="noopener noreferrer"&gt;https://pub.dev/packages/shared_preferences&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/flutter_secure_storage" rel="noopener noreferrer"&gt;https://pub.dev/packages/flutter_secure_storage&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Database
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://pub.dev/packages/isar" rel="noopener noreferrer"&gt;https://pub.dev/packages/isar&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/sqflite" rel="noopener noreferrer"&gt;https://pub.dev/packages/sqflite&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/firebase_storage" rel="noopener noreferrer"&gt;https://pub.dev/packages/firebase_storage&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/cloud_firestore" rel="noopener noreferrer"&gt;https://pub.dev/packages/cloud_firestore&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/icloud_storage" rel="noopener noreferrer"&gt;https://pub.dev/packages/icloud_storage&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Arquitetura
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://fluttersamples.com" rel="noopener noreferrer"&gt;https://fluttersamples.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/async_redux" rel="noopener noreferrer"&gt;https://pub.dev/packages/async_redux&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/flutter_mobx" rel="noopener noreferrer"&gt;https://pub.dev/packages/flutter_mobx&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/flutter_bloc" rel="noopener noreferrer"&gt;https://pub.dev/packages/flutter_bloc&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Teste
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Test-driven_development" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Test-driven_development&lt;/a&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Behavior-driven_development" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Behavior-driven_development&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530" rel="noopener noreferrer"&gt;https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Outras linguagens
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012" rel="noopener noreferrer"&gt;https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012&lt;/a&gt;&lt;br&gt;
&lt;a href="https://cs193p.sites.stanford.edu" rel="noopener noreferrer"&gt;https://cs193p.sites.stanford.edu&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Dart
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://pub.dev/packages/freezed" rel="noopener noreferrer"&gt;https://pub.dev/packages/freezed&lt;/a&gt;&lt;br&gt;
&lt;a href="https://fsharpforfunandprofit.com" rel="noopener noreferrer"&gt;https://fsharpforfunandprofit.com&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Package Manager
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://flutter.dev/docs/development/packages-and-plugins/developing-packages" rel="noopener noreferrer"&gt;Developing packages &amp;amp; plugins&lt;/a&gt; - How to develop packages and plugins for Flutter.&lt;br&gt;
&lt;a href="https://cocoapods.org/" rel="noopener noreferrer"&gt;CocoaPods&lt;/a&gt; - package manager for Swift and Objective-C projects.&lt;br&gt;
&lt;a href="https://docs.gradle.org/current/userguide/userguide.html" rel="noopener noreferrer"&gt;Gradle&lt;/a&gt; - build automation system and package manager for Android.&lt;/p&gt;

&lt;h3&gt;
  
  
  Profiling
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://flutter.dev/docs/perf/rendering/ui-performance" rel="noopener noreferrer"&gt;https://flutter.dev/docs/perf/rendering/ui-performance&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtu.be/vVg9It7cOfY" rel="noopener noreferrer"&gt;https://youtu.be/vVg9It7cOfY&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Flutter Interno
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://youtu.be/UUfXWzp0-DU" rel="noopener noreferrer"&gt;https://youtu.be/UUfXWzp0-DU&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtu.be/dkyY9WCGMi0" rel="noopener noreferrer"&gt;https://youtu.be/dkyY9WCGMi0&lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.cs.cmu.edu/%7Ebam/uicourse/830spring20/05-830-2020-03-23-Lecture-10-Flutter.mp4" rel="noopener noreferrer"&gt;http://www.cs.cmu.edu/~bam/uicourse/830spring20/05-830-2020-03-23-Lecture-10-Flutter.mp4&lt;/a&gt;&lt;br&gt;
&lt;a href="https://mrale.ph/dartvm/" rel="noopener noreferrer"&gt;https://mrale.ph/dartvm/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://surf.dev/flutter-under-the-hood/" rel="noopener noreferrer"&gt;https://surf.dev/flutter-under-the-hood/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.flutter.dev/resources/architectural-overview" rel="noopener noreferrer"&gt;https://docs.flutter.dev/resources/architectural-overview&lt;/a&gt;&lt;br&gt;
&lt;a href="https://surf.dev/flutter-architecture-guide/" rel="noopener noreferrer"&gt;https://surf.dev/flutter-architecture-guide/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Segurança
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://owasp.org/www-project-mobile-app-security/" rel="noopener noreferrer"&gt;OWASP MASVS&lt;/a&gt; - Mobile Application Security Verification Standard&lt;br&gt;
&lt;a href="https://pub.dev/packages/freerasp" rel="noopener noreferrer"&gt;https://pub.dev/packages/freerasp&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Integração Continua
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://fastlane.tools" rel="noopener noreferrer"&gt;https://fastlane.tools&lt;/a&gt;&lt;br&gt;
&lt;a href="https://danger.systems" rel="noopener noreferrer"&gt;https://danger.systems&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.sonarqube.org" rel="noopener noreferrer"&gt;https://www.sonarqube.org&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codemagic.io/" rel="noopener noreferrer"&gt;https://codemagic.io/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://travis-ci.org" rel="noopener noreferrer"&gt;https://travis-ci.org&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Analytics - Análises Métricas
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://firebase.google.com/docs/analytics" rel="noopener noreferrer"&gt;https://firebase.google.com/docs/analytics&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-us/appcenter/analytics/" rel="noopener noreferrer"&gt;https://docs.microsoft.com/en-us/appcenter/analytics/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mixpanel.com/docs/flutter" rel="noopener noreferrer"&gt;https://developer.mixpanel.com/docs/flutter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.smartlook.com/docs/sdk/flutter" rel="noopener noreferrer"&gt;https://docs.smartlook.com/docs/sdk/flutter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/packages/datadog_flutter_plugin" rel="noopener noreferrer"&gt;https://pub.dev/packages/datadog_flutter_plugin&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Store - Loja
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developer.apple.com/app-store/review/guidelines/" rel="noopener noreferrer"&gt;https://developer.apple.com/app-store/review/guidelines/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://play.google.com/about/developer-content-policy/" rel="noopener noreferrer"&gt;https://play.google.com/about/developer-content-policy/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.android.com/distribute/best-practices/launch/launch-checklist" rel="noopener noreferrer"&gt;https://developer.android.com/distribute/best-practices/launch/launch-checklist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora finalmente você é um desenvolvedor(a) Flutter Senior! Parabéns.&lt;/p&gt;

&lt;p&gt;Ps: Com o tempo vou atualizando o artigo e adicionando mais coisas, então já salva se for importante pra você é claro.&lt;/p&gt;

&lt;p&gt;Muito obrigada!&lt;/p&gt;

&lt;p&gt;Roteiro Altamente Subjetivo para Desenvolvimento com Flutter&lt;br&gt;
por Oleksandr Leushchenko (@olexale)&lt;br&gt;
traduzido por Suami Rocha&lt;/p&gt;

&lt;p&gt;Faça uma cópia da imagem no figma:&lt;br&gt;
&lt;a href="https://www.figma.com/community/file/1362804868277413920/roadmap-flutter-2024" rel="noopener noreferrer"&gt;https://www.figma.com/community/file/1362804868277413920/roadmap-flutter-2024&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>5 Dicas de Flutter</title>
      <dc:creator>Suami Medeiros</dc:creator>
      <pubDate>Sun, 14 Apr 2024 15:56:51 +0000</pubDate>
      <link>https://forem.com/surocham/5-dicas-de-flutter-36ee</link>
      <guid>https://forem.com/surocham/5-dicas-de-flutter-36ee</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvj33kb79691w6xh1hu37.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvj33kb79691w6xh1hu37.gif" alt="flutter" width="480" height="270"&gt;&lt;/a&gt;&lt;br&gt;
Atenção desenvolvedores Flutterers,&lt;/p&gt;

&lt;p&gt;Você está procurando melhorar suas habilidades de desenvolvimento com Flutter?&lt;/p&gt;

&lt;p&gt;Aqui estão &lt;strong&gt;cinco dicas práticas e truques&lt;/strong&gt; para Flutter:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Aproveite o Hot Reload para economizar tempo e fazer alterações rapidamente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Utilize widgets para reutilização e organização de código mais limpo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mantenha seu código simples e evite adicionar recursos desnecessários.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use programação assíncrona para melhor eficiência e experiência do usuário.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mantenha-se atualizado com a interface do usuário (UI) em evolução do Flutter e continue aprendendo.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzpx6jy5x62i69kkjp8w5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzpx6jy5x62i69kkjp8w5.gif" alt="user" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lembre-se, &lt;strong&gt;entender a perspectiva do usuário é crucial&lt;/strong&gt; para um ótimo desenvolvimento do Flutter.&lt;/p&gt;

&lt;p&gt;Não hesite em experimentar e &lt;strong&gt;testar diferentes abordagens&lt;/strong&gt; para encontrar o que funciona melhor para seus projetos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.discordapp.net%2Fattachments%2F1205192853882404896%2F1229078699844964484%2Fimage.png%3Fex%3D662e5fbd%26is%3D661beabd%26hm%3De9afced821f27030d87efcdcd8552481cac2c189b50ed46eaeebfe091214a107%26%3D%26format%3Dwebp%26quality%3Dlossless%26width%3D944%26height%3D467" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.discordapp.net%2Fattachments%2F1205192853882404896%2F1229078699844964484%2Fimage.png%3Fex%3D662e5fbd%26is%3D661beabd%26hm%3De9afced821f27030d87efcdcd8552481cac2c189b50ed46eaeebfe091214a107%26%3D%26format%3Dwebp%26quality%3Dlossless%26width%3D944%26height%3D467" alt="pattern" width="800" height="400"&gt;&lt;/a&gt;&lt;code&gt;Imagem usada para demonstrar um exemplo de organização de código em Flutter&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;IMPORTANTE&lt;br&gt;
Se uma função ou método fizer uma tarefa complexa, não use assíncrono. Em vez disso, os use isolados.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwna9j0xirjkxhc7xviq5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwna9j0xirjkxhc7xviq5.gif" alt="celebrate" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cada abordagem tem seus pontos fortes dependendo do objetivo da tarefa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Muito obrigada pela atenção 🩵🩵✌️&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Referências: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://devmuaz.medium.com/flutter-clean-architecture-series-part-1-d2d4c2e75c47" rel="noopener noreferrer"&gt;Flutter Clean Architecture Series — Part 1 (UPDATED)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>flutter</category>
      <category>frontend</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Desenvolvendo um widget de upload com Flutter 🩵</title>
      <dc:creator>Suami Medeiros</dc:creator>
      <pubDate>Wed, 10 Apr 2024 05:09:49 +0000</pubDate>
      <link>https://forem.com/devsnorte/desenvolvendo-um-widget-de-upload-com-flutter-54oi</link>
      <guid>https://forem.com/devsnorte/desenvolvendo-um-widget-de-upload-com-flutter-54oi</guid>
      <description>&lt;p&gt;Desenvolvendo um widget de upload com flutter&lt;/p&gt;

&lt;p&gt;Oi, muito obrigada por estar aqui, gostaria de informar que esse é o meu primeiro artigo publicado oficialmente aqui no Dev To e que estão tods convidads a se chegarem e lerem um pouquinho das experiências e vivências minhas, eu que sou atualmente estagiária flutter, também sigo atuando como freelancer front end nas horas vagas e uxui por hobby.&lt;/p&gt;

&lt;p&gt;Pois bem, apresentada, agora vamos ao que interessa.&lt;/p&gt;

&lt;p&gt;Esse foi um dos meus muitos desafios que tive no cotidiano do estágio. Em algum momento precisei desenvolver um widget que fizesse o upload de pdfs e que além disso também tivesse a funcionalidade de drag e drop na área ao redor.&lt;/p&gt;

&lt;p&gt;Para a criação desse projeto, utilizei o seguinte comando:&lt;br&gt;
&lt;code&gt;flutter create --project-name testedropdrag --org br.com.suamirocha --platforms web ./testedropdrag&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Dessa forma, fica claro que o projeto será feito para web.&lt;/p&gt;

&lt;p&gt;Para implementar o widget e deixar ele funcional como eu gostaria, vou utilizar os seguintes pacotes:&lt;/p&gt;

&lt;p&gt;ps: encontre os pacotes no site oficial dos pacotes: &lt;a href="https://pub.dev" rel="noopener noreferrer"&gt;https://pub.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwxvirgn47t0tv2z1nar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwxvirgn47t0tv2z1nar.png" alt="Package 1" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnh8lom6xw6slqioae9f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnh8lom6xw6slqioae9f.png" alt="Package 2" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvu516v1g8yziaw8jfnzv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvu516v1g8yziaw8jfnzv.png" alt="Package 3" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;agora que baixei as minhas dependencias, elas ficam assim no arquivo pubscpec.yaml&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyoq7531cwsh4kk6vnts.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyoq7531cwsh4kk6vnts.png" alt="Image Pubspec.yaml" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora vamos organizar o projeto.&lt;/p&gt;

&lt;p&gt;No meu arquivo Main, vai apenas o principal para rodar a nossa página:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fovtordaq009k4wed757w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fovtordaq009k4wed757w.png" alt="Image Main.dart" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora podemos trabalhar na nossa página principal que é onde o nosso widget ficará.&lt;/p&gt;

&lt;p&gt;A princípio o código vai estar assim: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg68jmxufl4q3nkr4v4i1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg68jmxufl4q3nkr4v4i1.png" alt="Image Home.dart" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora vamos fazer os imports dos pacotes de instalamos no nosso projeto:&lt;/p&gt;

&lt;p&gt;Eles ficarão assim mas não se assuste rs&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3i3i72ps8tp4iq1dkl0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3i3i72ps8tp4iq1dkl0.png" alt="imports" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em relação ao pacote cross _file, ele irá identificar os nossos arquivos, então além de importá-lo eu preciso também instanciar o XFile junto a uma matriz de bytes para ter acesso aos seus métodos e propriedades de metadados.&lt;/p&gt;

&lt;p&gt;Vou fazer a importação do Uint8List e aqui vai uma explicação legal sobre isso:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw8u30giraoicbpwylwvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw8u30giraoicbpwylwvx.png" alt="final xfile e Uint8List" width="800" height="96"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Uint8List é uma lista de comprimento fixo de inteiros não assinados de 8 bytes.&lt;br&gt;
Mas de uma forma simples e divertida, imagine que você tenha um monte de brinquedos diferentes, certo? E às vezes você quer organizar em grupos diferentes e especiais. A UintList8 é como uma caixa onde você pode guardar coisas, mas é especial porque só guarda números pequenos entre 0 e 255.&lt;/p&gt;

&lt;p&gt;Então nessa linha de código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;final List&amp;lt;(XFile file, Uint8List bytes)&amp;gt; _list = [];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Está criando uma lista chamada _list que é uma lista de pares, onde cada par consiste em dois objetos, sendo um o XFile e o outro o Uint8List, dessa forma o XFile representa o arquivo em si e o Uint8List os bytes desse arquivo.&lt;/p&gt;

&lt;p&gt;E isso tudo é útil porque em alguns casos você quer acessar tanto o arquivo, quando os seus bytes então faz sentido agrupá-los dessa forma, como é o nosso caso. &lt;/p&gt;

&lt;p&gt;Dando continuidade…&lt;/p&gt;

&lt;p&gt;Adicionei essas propriedades para centralizar o nosso widget:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2c10cyzo26hnoz3bv5l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2c10cyzo26hnoz3bv5l.png" alt="Center" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adicionei o DropTarget(desktop_drop) que cuidará dos eventos de drop e drag do nosso arquivo em pdf.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwv44w7ykuoofdvqfc5e2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwv44w7ykuoofdvqfc5e2.png" alt="droptarget" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estilizei o widget como queria e agora vamos deixar ele funcional&lt;/p&gt;

&lt;p&gt;Crio um booleano iniciando como falso, para criar um estado no futuro:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bool isHovering = false;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basicamente essa função basicamente faz a leitura do bytes e os adiciona na _list com o xFiles de forma assíncrona.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0spk0z6t8a68w7xjq52g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0spk0z6t8a68w7xjq52g.png" alt="setfile" width="800" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essa função seleciona um ou mais arquivos essa condição no final quer dizer que se o resultado for diferente de null ele irá selecionar o arquivo e colocar no 'result'&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsujg4k9k3048jihnao7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsujg4k9k3048jihnao7.png" alt=" " width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quando o usuário soltar os arquivos na área que escolhi, essa função vai processar os arquivos que foram soltos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwuc2k8kzahypma7fjcmw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwuc2k8kzahypma7fjcmw.png" alt="dragfile" width="800" height="107"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Já nessa nossa última função assíncrona, vamos apenas deletar o par de Xfile e Uint8List que representa o nosso arquivo que fizemos o upload.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd28iasl3smwvwzl29bf5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd28iasl3smwvwzl29bf5.png" alt="deletefile" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por fim, fiz as alterações necessárias no nosso widget DropTarget para ligar os estados e deixar a nossa área funcional.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbyoptxwq094l9pq2lhs4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbyoptxwq094l9pq2lhs4.png" alt="funcional" width="800" height="611"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mas ainda faltam alguns detalhes.. &lt;/p&gt;

&lt;p&gt;Agora preciso criar um widget onde mostrará meu arquivo quando ele subir ou for carregado, assim saberei que deu tudo certo e posso excluí-lo futuramente caso precise.&lt;/p&gt;

&lt;p&gt;E essa aqui foi a minha solução para isso, envolvi todo o conteúdo do DropTarget em uma coluna e no final adicionei uma fila com icone e texto para representar o meu arquivo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjz81qcqsicm0b56j69qe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjz81qcqsicm0b56j69qe.png" alt="arquivo" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enfim, temos o nosso Widget completo do inicio ao fim esse aqui é o resultado final:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ze3mijwrgkso5zep1q7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ze3mijwrgkso5zep1q7.png" alt="resultado 1" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdemh94cy90z6qijq09de.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdemh94cy90z6qijq09de.png" alt="resultado 2" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3p5gfnenzla6sgke4al.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3p5gfnenzla6sgke4al.png" alt="resultado 3" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Muito obrigada pela atenção 🩵🩵✌️&lt;/p&gt;

&lt;p&gt;Agradecimento especial aos meus chefinhos, ao arthur e lizandra que me inspiraram a fazer o widget, ao pessoal da devs norte que me motivaram a escrever por aqui e muito obrigada a todos os demais que de alguma forma única contribuíram para que eu chegasse aqui.&lt;/p&gt;

&lt;p&gt;Caso você queira ver o meu código desse tutorial, ele se encontra nesse link: &lt;a href="https://github.com/suamirochadev/upload-widget-flutter" rel="noopener noreferrer"&gt;https://github.com/suamirochadev/upload-widget-flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Referências: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/c6BPtrU0M7I?si=69U577eSw-T5XV6k" rel="noopener noreferrer"&gt;Drag and Drop Flutter Buil Show&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/pZdJX3PAydQ?si=JqTHbrtd_AaPNxrN" rel="noopener noreferrer"&gt;Flutter Tutorial Drag and Drop File Upload Drop Files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/o9LuC4eqWPg?si=22GTBpLbQim-lPNl" rel="noopener noreferrer"&gt;Flutter Desktop Drag and Drop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pub.dev/packages/cross_file" rel="noopener noreferrer"&gt;Package Cross File&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pub.dev/packages/desktop_drop" rel="noopener noreferrer"&gt;Package Desktop Drop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pub.dev/packages/file_picker" rel="noopener noreferrer"&gt;Package Picker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>flutter</category>
      <category>frontend</category>
      <category>dart</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
