<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Mauro Abner on Medium]]></title>
        <description><![CDATA[Stories by Mauro Abner on Medium]]></description>
        <link>https://medium.com/@mcoderz?source=rss-c2fab73df554------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*ze914eEcKXOoBOwyvxHPhw.jpeg</url>
            <title>Stories by Mauro Abner on Medium</title>
            <link>https://medium.com/@mcoderz?source=rss-c2fab73df554------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 19 May 2026 22:45:28 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@mcoderz/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Visualização de dados com Altair]]></title>
            <link>https://medium.com/@mcoderz/visualiza%C3%A7%C3%A3o-de-dados-com-altair-d24db644fcd0?source=rss-c2fab73df554------2</link>
            <guid isPermaLink="false">https://medium.com/p/d24db644fcd0</guid>
            <category><![CDATA[dataviz]]></category>
            <category><![CDATA[altair]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[data-visualization]]></category>
            <dc:creator><![CDATA[Mauro Abner]]></dc:creator>
            <pubDate>Tue, 24 May 2022 20:03:31 GMT</pubDate>
            <atom:updated>2022-05-25T22:15:07.651Z</atom:updated>
            <content:encoded><![CDATA[<h4>Uma introdução rápida</h4><h4><strong>Introdução</strong></h4><p>Se você chegou até aqui é porque compreende a importância da visualização de dados dentro da área de Ciência de Dados e dito isto, parto do principio que você já usou tanto plataformas como Jupyter Notebook quanto bibliotecas como Pandas, Matplotlib, Seaborn ou Plotly para análise exploratória de dados. O objetivo desse pequeno tutorial é agregar a biblioteca Altair como mais uma opção para este ferramental.</p><p>Dentro das ferramentas citadas acima, a biblioteca Altair encaixa-se em meio ao conjunto Matplotlib, Seaborn e Plotly, isto quer dizer que, se trata de uma biblioteca projetada para visualização de dados, porém a grande pergunta é: O que a Altair nos agrega que a torna diferente das bibliotecas que já conhecemos?</p><h4><strong>Altair</strong></h4><p>Altair é uma biblioteca de visualização estatística <a href="https://medium.com/@alexandre.malavasi/descomplicando-programa%C3%A7%C3%A3o-imperativa-declarativa-e-reativa-a481baa87742">declarativa</a> que utiliza a gramática <a href="https://vega.github.io/vega/">Vega</a> e <a href="http://vega.github.io/vega-lite/">Vega-Lite</a> a qual possibilita descrever tanto o comportamento como a aparência de uma visualização usando o formato <a href="https://pt.stackoverflow.com/questions/4042/o-que-%C3%A9-json-para-que-serve-e-como-funciona">JSON</a>.</p><p>Como neste tutorial nos ateremos a implementar a Altair e plotar seu primeiro gráfico a partir de uma base de dados, sugiro uma olhada no site abaixo para entender um pouco mais sobre como funciona a gramática Vega e Vega-Lite:</p><p><a href="https://vega.github.io/vega/tutorials/bar-chart/">Let&#39;s Make A Bar Chart Tutorial</a></p><h4><strong>Instalação</strong></h4><p>É bastante simples a instalação da biblioteca Altair, basta utilizar o <em>pip</em> ou o <em>conda</em>, e voilà a biblioteca está pronta para ser usada.</p><p>Utilizando <em>pip</em>:</p><pre>$ pip install altair vega_datasets</pre><p>Utilizando <em>conda</em>:</p><pre>$ conda install -c conda-forge altair vega_datasets</pre><p>Existe um bônus nos dois código acima que é a instalação da base de dados <a href="https://github.com/vega/vega-datasets/blob/master/SOURCES.md"><em>vega_datasets</em></a>, a qual possuí conjuntos de dados já tratados e prontos para serem usados em uma análise exploratória de dados. Com a <em>vega_dataset</em> já podemos começar a aprender mais sobre a biblioteca Altair, sem nos preocuparmos em procurar uma base de dados para isso. Lógico, se você não desejar a base de dados <em>vega_dataset</em>, basta retirá-la do comando de instalação.</p><h4><strong>Conceitos</strong></h4><p>Existem alguns conceitos que são bons de saber de antemão:</p><ul><li>Data: Os dados dentro da biblioteca Altair devem ser um quadro de dados (<em>dataframe</em>) do Pandas.</li><li><a href="https://altair-viz.github.io/user_guide/generated/toplevel/altair.Chart.html#altair.Chart">Chart</a>: Esta é uma classe que recebe alguns argumentos, dentro os quais está o <em>dataframe</em> com o qual deseja-se trabalhar.</li><li>Chart.mark: Método que define como os dados devem ser visualizados no gráfico (linhas, pontos, barras…).</li><li>Chart.encoding: Método que define, entre outras coisas, como os dados serão representados (eixo x, eixo y , tamanho, cor)</li></ul><h4>Mãos à obra</h4><p>No Jupyter, vamos importar as bibliotecas necessárias para nossa análise exploratória de dados:</p><pre>import pandas as pd<br>import altair as alt<br>from vega_datasets import data</pre><p>Para este exercício, escolhemos a base de dados Cars. para dar uma olhada nas informações desta base de dados, basta escrever:</p><pre>data.cars()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/884/1*p7pkxS-RoUur5AuoOvJeqw.png" /><figcaption>base de dados cars</figcaption></figure><p>No próximo passo, vamos criar um <em>dataframe</em> df_cars que receberar a base de dados cars, retiraremos o dia e mês da coluna Year e extrairemos a marca dos carros da coluna Name, criando uma nova coluna chamada Brand. Por fim mostraremos as primeiras cinco linhas do dataframe. Esses passo de manipulação, são apenas para podermos ter mais alternativas de características para realizar plotar os gráficos.</p><pre>df_cars = data.cars()</pre><pre>df_cars[‘Year’] = df_cars[‘Year’].dt.year</pre><pre>df_cars[‘Brand’] = df_cars[‘Name’].str.extract(r’^([\w\-]+)’,expand = True)</pre><pre>df_cars.head()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/853/1*w-nUdHkKE96Mda5rt-nSdw.png" /><figcaption>head()</figcaption></figure><p>É sempre importante ver os tipos de dados do nosso dataframe, pois isto nos dirá quais tipos de trabalho poderemos fazer.</p><pre>with pd.option_context(‘display.max_rows’, None):<br> print(df_cars.dtypes)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/286/1*seIKM3uhhLR6d870mhLfZQ.png" /><figcaption>type</figcaption></figure><p>Feito isto, vamos criar uma instância da classe Chart que faz parte da biblioteca Altair, e passaremos como argumento o dataframe que iremos trabalhar.</p><pre>chart = alt.Chart(df_cars)</pre><p>Acabamos de criar o objeto chart, a partir do qual podemos chamar os diversos métodos que nos ajudaram a criar nossas visualizações. E o primeiro método que iremos chamar é o <a href="https://altair-viz.github.io/user_guide/marks.html">mark_* </a>(este asterisco mostra as diversas formas as quais podemos usar para mostrar os dados no gráfico.</p><pre>chart.mark_point()</pre><p>Acima definimos que desejamos usar o método mark_point() o qual nos ajuda a criar um gráfico de dispersão, mostrando os dados como pontos no gráfico. Mas só este método não basta, pois ainda não definimos quais dados farão parte do eixo X e eixo Y. Para tal, precisamos usar o método <a href="https://altair-viz.github.io/user_guide/encoding.html">encode()</a>.</p><p>Antes de aplicar o método encode(), ainda não falamos sobre a pergunta que gostaríamos de responder com esse gráfico de dispersão. E bom, estamos curiosos para ver qual a relação entre a massa dos carros (Weight_in_libs) e sua autonomia (Miles_per_Gallon). Feito isto, agora podemos definir os dados do eixo X e eixo Y.</p><pre>chart.mark_point().encode(<br> x = ‘Weight_in_lbs’,<br> y = ‘Miles_per_Gallon’<br> )</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/445/1*Asukcx7Vbbb0frUdneeLDw.png" /></figure><p>Conseguimos ver que realmente quanto maior a massa do carro, isto é, quanto mais pesado ele é, menor fica sua autonomia.</p><p>Se você deseja customizar cada eixo do gráfico, a Altair possui um meio um pouco mais verboso, mas que ajuda neste tipo de configuração.</p><p>Neste caso trabalharemos com as classes X e Y da biblioteca Altair, dentro do método encode().</p><p>A customização que faremos será alterar a escala dos eixos, retirando o zero, para que os dados fiquem no centro do gráfico.</p><pre>chart.mark_point().encode(<br> alt.X(‘Weight_in_lbs’, scale=alt.Scale(zero=False)),<br> alt.Y(‘Miles_per_Gallon’, scale=alt.Scale(zero=False))<br>)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/445/1*Act6MXXtQpxvvhjBh6QBWw.png" /></figure><p>Podemos alterar a cor de cada ponto de acordo com o país de origem dos veículo.</p><p>Repare que além de inserir a classe Color, também definimos o parâmetro filled do método mark_point como True, para que os pontos sejam preenchidos.</p><pre>chart.mark_point(filled=True).encode(<br> alt.X(‘Weight_in_lbs’, scale=alt.Scale(zero=False)),<br> alt.Y(‘Miles_per_Gallon’, scale=alt.Scale(zero=False)),<br> alt.Color(‘Origin’) <br>)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/512/1*tyCuJhcDdYOQ3a-bh7kC_w.png" /></figure><p>Para adicionar informações a cada ponto no gráfico, basta usar a classe Tooltip.</p><p>No nosso caso, queremos que as informações sobre ano, nome e marca do carro apareçam sobre cada ponto, quanto o mouse pousar sobre este.</p><pre>chart.mark_point(filled=True).encode(<br> alt.X(‘Weight_in_lbs’, scale=alt.Scale(zero=False)),<br> alt.Y(‘Miles_per_Gallon’, scale=alt.Scale(zero=False)),<br> alt.Color(‘Origin’),<br> tooltip = [alt.Tooltip(‘Name’), <br> alt.Tooltip(‘Year’)<br> ]<br>)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/587/1*DmR7meM5AjdsaD9Mx-3dVg.gif" /></figure><p>Também podemos aumentar o tamanho dos pontos com a classe Size, por exemplo, de acordo com a potência dos carros.</p><p>Para complementar adicionamos a classe OpacityValue para dar um pouco de transpareência aos pontos.</p><pre>chart.mark_point(filled=True).encode(<br> alt.X(‘Weight_in_lbs’, scale=alt.Scale(zero=False)),<br> alt.Y(‘Miles_per_Gallon’, scale=alt.Scale(zero=False)),<br> alt.Color(‘Origin’),<br> alt.OpacityValue(0.7),<br> alt.Size(‘Horsepower’),<br> tooltip = [alt.Tooltip(‘Name’), <br> alt.Tooltip(‘Year’)<br> ]<br> )</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/529/1*8N157XQHcHE7-kgH8NoY4g.png" /></figure><p>Se adicionarmos o métdos interactive(), damos a possibilidade de aproximar ou afastar o gráfico, para melhor vermos os pontos.</p><pre>chart.mark_point(filled=True).encode(<br> alt.X(‘Weight_in_lbs’, scale=alt.Scale(zero=False)),<br> alt.Y(‘Miles_per_Gallon’, scale=alt.Scale(zero=False)),<br> alt.Color(‘Origin’),<br> alt.OpacityValue(0.7),<br> alt.Size(‘Horsepower’),<br> tooltip = [alt.Tooltip(‘Name’), <br> alt.Tooltip(‘Year’)<br> ]<br>).interactive()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/587/1*QK41QN1KIJdC6k3g5nhkQg.gif" /></figure><p>Agora, imagine que desejassemos mostrar os dados como base no ano.</p><p>Essa ação pode ser realizada com a propriedade selection.</p><p>Antes precisamos ver qual é o maior e menor ano registrado na base de dados.</p><pre>df_cars[‘Year’].max()</pre><pre>df_cars[‘Year’].min()</pre><p>Assim nos criamos variável <em>select_year</em> que recebe o método <em>selection_single</em> no qual definimos com qual coluna trabalharemos, quando é a data inicial e qual é a faixa, que no caso vai de 1970 a 1982.</p><p>Após isto, adicionamos ao objeto chart o métdo <em>add_selection()</em> e o método <em>transform_filter()</em>, ambos métodos recebem com argumento <em>select_year</em>.</p><pre>select_year = alt.selection_single(<br> name=’Select’, fields=[‘Year’], init={‘Year’: 1970},<br> bind=alt.binding_range(min=1970, max=1982, step=1)<br>)</pre><pre>chart.mark_point(filled=True).encode(<br> alt.X(‘Weight_in_lbs’, scale=alt.Scale(zero=False)),<br> alt.Y(‘Miles_per_Gallon’, scale=alt.Scale(zero=False)),<br> alt.Color(‘Origin’),<br> alt.OpacityValue(0.7),<br> alt.Size(‘Horsepower’),<br> tooltip = [alt.Tooltip(‘Name’), <br> alt.Tooltip(‘Year’)<br> ]<br>).interactive().add_selection(select_year).transform_filter(select_year)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/587/1*fyZALtp2TaWUki9rGBIXnA.gif" /></figure><p>Vamos ver como plotar um boxplot.</p><pre>chart.mark_boxplot(size=100, extent=0.5).encode(<br> alt.Y(‘Miles_per_Gallon’, scale=alt.Scale(zero=False))<br>)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/110/1*Yk64NcjS9aSfPtgOvBEtzw.png" /></figure><p>Para tornar o gráfico mais apresentável, há algumas propriedades que podemos configurar como properties(), configure_axis() e configure_mark():</p><pre>chart.mark_boxplot(size=100, extent=0.5).encode(<br> alt.Y(‘Miles_per_Gallon’, scale=alt.Scale(zero=False))<br>).properties(<br> width=400,<br> height=400,<br> title=’Distribuição da autonomia de vários carros’<br>).configure_axis(<br> labelFontSize=14,<br> titleFontSize=14<br>).configure_mark(<br> opacity=0.6,<br> color=’darkmagenta’<br>)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/451/1*oqouXKJWIrO5Cn61-LAPOQ.png" /></figure><p>Já usamos o método transform_filter(), mas vamos usá-lo novamente para criar um filtro para que em nosso gráfico só conste carros da marca Ford.</p><p>No campo field da classe ieldOneOfPredicate definimos a coluna que vamos filtrar, e no campo oneOf um ou mais termos que não serão filtrados.</p><pre>chart.mark_boxplot(size=100, extent=0.5).encode(<br> alt.Y(‘Miles_per_Gallon’, scale=alt.Scale(zero=False))<br>).transform_filter(<br> alt.FieldOneOfPredicate(<br> field=’Brand’,<br> oneOf=[‘ford’])<br>).properties(<br> width=400,<br> height=400,<br> title=’Distribuição da autonomia de carros da Ford’<br>).configure_axis(<br> labelFontSize=14,<br> titleFontSize=14<br>).configure_mark(<br> opacity=0.6,<br> color=’darkmagenta’<br>)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/451/1*yePOt_r4ECvF9RJ-o_9Y5g.png" /></figure><p>Vamos fazer também um Histograma.</p><pre>chart.mark_bar().encode(<br> x=alt.X(‘Miles_per_Gallon’, bin=alt.Bin(maxbins=30)),<br> y=’count()’<br>)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/445/1*-qcR6IfgKYoP_-8L9ag6ZA.png" /></figure><p>E um gráfico de linha comparando a autonomia através dos anos.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/446/1*gMa6iRoZLKYfi44qFiGwpg.png" /></figure><h4>Conclusão</h4><p>Há muito o que se explorar nos diversos recursos disponíveis dentro da biblioteca Altair. Sem dúvida ela se mostrou uma alternativa eficiente para criar visualizações de maneira mais simples, fazendo com que o cientista de dados volte mais sua atenção a visualização, do que a programação em si, dado que o uso da gramática Vega, em JSON torna tudo mais ágil.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d24db644fcd0" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>