Novamente a comunidade Py013 organiza em Santos, um dia em comemoração a transparência dos Dados Abertos. Um dia internacional organizado pela Open Knowledge Foundation onde 179 eventos foram realizado em todo o mundo, entre os dias 4 a 10 de março, para falar, discutir e realizar descobertas sobre dados abertos.
Evento registrado no Mapa Oficial do Open Data Day
Através dos grupos do Whatsapp e Telegram da comunidade py013 foi realizada uma votação para saber qual o tema seria tratado no Open Data Day do ano de 2023. A comunidade escolheu entre 3 temas: Meio Ambiente, Eleições 2020/2022 e Casos de Dengue na Baixada Santista.
Foto de Gabriel Miceli, Diretor do Parque Tecnológico de Santos apresentando o Local.
O Diretor do Parque Tecnológico de Santos, Gabriel Miceli, fez uma breve apresentação do Parque Tecnológico de Santos, e em seguida João e Altair realizaram uma breve introdução sobre uma primeira análise a respeito dos Data Sets dos resultados das Eleições 2020. Após isso, os participantes agruparam-se em busca de uma análise exploratória inicial.
Altair dando início ao evento.
João apresentando a Comunidade Py013 e dando início a um exemplo de análise exploratória.
Após aproximadamente 3 horas de análise exploratória utilizando a biblioteca Pandas, começaram a ser apresentadas as primeiras descobertas.
Gabriel apresentando sua análise e Altair comentando junto com todos.
Gabriel descobriu que aproximadamente apenas 33% das sessões eleitorais possuem recursos de acessibilidade em todo o Brasil.
Grupo do Daniel apresentando seus resultados
O grupo do Daniel apresentou sua análise descobrindo nas eleições de 2022 para governador do Estado de São Paulo quais os candidatos que possuíam menos votos que o total de Brancos e Nulos.
Grupo do Ergon apresentando seus dados
Grupo do Ergon realizou um levantamento sobre o total de eleitores na região da Baixada Santista, e descobriu que Praia Grande possui quase a mesma quantidade de eleitores que São Vicente.
Altair comentando o mapa montado pelo João
João realizou uma análise parecida com a do grupo anterior, com o objetivo de localizar no município de Santos quais as escolas que possuem a maior quantidade de eleitores, e plotou num mapa da cidade de Santos e as 6 maiores escolas eleitorais.
Neto apresentando a raspagem de dados dos logs das Urnas Eletrônicas
Por fim, Neto apresentou seu código em Python que realizou uma raspagem de dados nos logs das Urnas Eletrônicos para montar um Data Set com o objetivo de analisar as versões das urnas eletrônicas e sua localização geográfica nas eleições de 2022. Conseguiu montar o Data Set do estado do Acre, tentou realizar para o estado de São Paulo mas a quantidade de Urnas é 10 vezes maior, consequentemente a quantidade de logs também, e demandaria muito tempo de processamento. Porém, foi possível realizar uma prova de conceito que é possível realizar essa análise.
Ao final do evento foram realizados sorteio de livros, e a divulgação de voucher de descontos da Novatec.
Livros sobre Empreendedorismo foram sorteados
Livro sobre Web Scrapying com Python foi sorteado
Voucher de desconto da Novatec
Participantes que ficaram até o final do evento
Foi um dos melhores Open Data Day realizados pela Py013, aparecemos também em um post no Instagram da Open Knowledge Brasil.
Abaixo segue alguns links do Google Colab das análises realizadas:
Agradecemos novamente o apoio do Parque Tecnológico de Santos, Universidade Católica de Santos e Editora Novatec. Esperamos todos novamente para o próximo Open Data Day em 2024, enquanto isso aguardem novidades, capaz de realizarmos mais um evento sobre Ciência de Dados dando continuidade ao Open Data Day deste ano!
Em breve mais novidades! Viva a Transparência dos Dados Abertos!
Este foi nosso último evento de 2022, ocorreu no SESC em Santos.
Lucas Ribeiro fez uma apresentação demonstrando a utilização das APIs da Google para consumir dados diretamente de uma planilha Googe Sheets e poder realizar análises dentro do Jupyter Notebook.
Vitor Dias deu continuidade no tema de forma espontânea criando rapidamente em tempo real uma API utilizando Flask e testando com o Postman.
Thiago Ferauche apresentou o projeto de código aberto (aprenda_micropython) em desenvolvimento para facilitar o aprendizado do micropython, uma versão do Python para a programação de sistemas embarcados.
E assim fechamos mais um ano, e acreditamos que 2023 deve vir muita coisa boa, como uma comunidade ativa, realizando mais eventos presenciais e projetos de forma colaborativa e espontânea.
No dia 22/10/22, a comunidade participou do evento do Baixada Nerd na ETEC Itanhaém palestrando sobre manipulação de dados com Python.
Altair Ribeiro falou sobre a ingestão de dados, manipulação e visualização de grandes volumes de dados e a versatilidade ao utilizar python para big data.
# Importa das bibliotecas necessárias para manipular os dataframes (dados)importnumpyasnpimportpandasaspdimportseabornasseafrompandasimportGrouperimportmatplotlib.pyplotasplt%matplotlib inline
2. Carregando os arquivos de dados utilizando o Pandas¶
In [457]:
# lê o arquivo de dados "network.csv" em um diretório padrão. Nomeie o arquivo de log para "network.csv"# municipio = pd.read_csv('Base_MUNIC_2020.csv')ifood=pd.read_csv('ifood.csv',sep=";")
### 1. Gráfico de Barrasimportmatplotlib.pyplotaspltimportseabornassns# sns.set_theme()# Load the example flights dataset and convert to long-formflights_long=sns.load_dataset("flights")flights=flights_long.pivot("month","year","passengers")# Draw a heatmap with the numeric values in each cellf,ax=plt.subplots(figsize=(9,6))sns.heatmap(flights,annot=True,fmt="d",linewidths=.5,ax=ax)
Out[477]:
<matplotlib.axes._subplots.AxesSubplot at 0x2280fd1e978>
importseabornassnsimportmatplotlib.pyplotasplt# sns.set_theme(style="whitegrid")# Load the example diamonds datasetdiamonds=sns.load_dataset("diamonds")# Draw a scatter plot while assigning point colors and sizes to different# variables in the datasetf,ax=plt.subplots(figsize=(6.5,6.5))sns.despine(f,left=True,bottom=True)clarity_ranking=["I1","SI2","SI1","VS2","VS1","VVS2","VVS1","IF"]sns.scatterplot(x="carat",y="price",hue="clarity",size="depth",palette="ch:r=-.2,d=.3_r",hue_order=clarity_ranking,sizes=(1,8),linewidth=0,data=diamonds,ax=ax)
Out[478]:
<matplotlib.axes._subplots.AxesSubplot at 0x2280f7107b8>
importnumpyasnpimportseabornassnsimportmatplotlib.pyplotasplt# sns.set_theme(style="white", context="talk")rs=np.random.RandomState(8)# Set up the matplotlib figuref,(ax1,ax2,ax3)=plt.subplots(3,1,figsize=(7,5),sharex=True)# Generate some sequential datax=np.array(list("ABCDEFGHIJ"))y1=np.arange(1,11)sns.barplot(x=x,y=y1,palette="rocket",ax=ax1)ax1.axhline(0,color="k",clip_on=False)ax1.set_ylabel("Sequencial")# Center the data to make it divergingy2=y1-5.5sns.barplot(x=x,y=y2,palette="vlag",ax=ax2)ax2.axhline(0,color="k",clip_on=False)ax2.set_ylabel("Divergente")# Randomly reorder the data to make it qualitativey3=rs.choice(y1,len(y1),replace=False)sns.barplot(x=x,y=y3,palette="deep",ax=ax3)ax3.axhline(0,color="k",clip_on=False)ax3.set_ylabel("Qualitativo")# Finalize the plotsns.despine(bottom=True)plt.setp(f.axes,yticks=[])plt.tight_layout(h_pad=2)
importseabornassnsimportmatplotlib.pyplotasplt# sns.set_theme(style="whitegrid")# Initialize the matplotlib figuref,ax=plt.subplots(figsize=(6,15))# Load the example car crash datasetcrashes=sns.load_dataset("car_crashes").sort_values("total",ascending=False)# Plot the total crashessns.set_color_codes("pastel")sns.barplot(x="total",y="abbrev",data=crashes,label="Total",color="b")# Plot the crashes where alcohol was involvedsns.set_color_codes("muted")sns.barplot(x="alcohol",y="abbrev",data=crashes,label="Alcoolizados",color="b")# Add a legend and informative axis labelax.legend(ncol=2,loc="lower right",frameon=True)ax.set(xlim=(0,24),ylabel="Estados Americanos",xlabel="Colisões de automóveis por bilhão de milhas")sns.despine(left=True,bottom=True)
No dia 24/09/22, a comunidade realizou mais um encontro para falarmos sobre a bilbioteca Pillow para manipulação e tratamento de imagens, apresentado por Altair Ribeiro.
Também, foi apresentado a Mineração de Dados na teoria e na prática e, um Caso de Uso demonstrando a ingestão, tratamento e processamento de dados, por José Fontebasso Neto.
José Fontebasso NetoParticipantes da comunidadeJosé Fontebasso NetoJosé Fontebasso NetoParticipantes da comunidadeParticipantes da comunidadeParticipantes da comunidadeParticipantes da comunidade
Chamada de PIL (Python Imaging Library) é uma bilbioteca para o processamento de imagens na linguagem Python.
Ela suporta vários formatos de imagens e entre eles estão: BMP, GIF, ICO, JPEG, PNG e TIFF.
# De novo o tamanho da Imagem com um texto muito melhorprint("Lagura = ",img.size[0])print("Altura = ",img.size[1])print("Imagem possui = ",img.size[0]," x ",img.size[1]," pixels")
Lagura = 810
Altura = 540
Imagem possui = 810 x 540 pixels
# Redimensionar a imagemprint("Imagem possui = ",img.size[0]," x ",img.size[1]," pixels")largura=int(input("Qual a nova largura da imagem ?"))altura=int(input("Qual a nova altura da imagem ?"))tamanho_novo=(largura,altura)resize_img=img.resize(tamanho_novo)iflargura==1000:ifaltura==100:print()print("Virou uma manjuba !!!!!!!!")print("Imagem possui = ",largura," x ",altura," pixels")resize_img
Imagem possui = 810 x 540 pixels
Qual a nova largura da imagem ?1000
Qual a nova altura da imagem ?100
Virou uma manjuba !!!!!!!!
Imagem possui = 1000 x 100 pixels
# Retirar a iluminação da imagem#tamanho_novo = (480, 320)#img = img.resize(tamanho_novo)withimgasimgnova:img1=img.convert("L")#Luminanciaimg1
Out[15]:
In [16]:
# Crie um filtro de classificação.# O filtro de classificação classifica todos os pixels em uma janela de determinado tamanho e retorna o valor de classificação.fromPILimportImageFilter# Carregar a imagem novamenteimg=Image.open("peixe.jpg")# Aplicar o filtro de Classificaçãoout=img.filter(ImageFilter.RankFilter(size=15,rank=3))# Gravar um arquivo de saídaout.save("out.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=300,height=400)wi2=widgets.Image(value=img2,format='jpg',width=300,height=400)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [17]:
# Crie um filtro mínimo. Escolhe o valor de pixel mais baixo em uma janela com o tamanho fornecido.fromPILimportImageFilterout1=img.filter(ImageFilter.MinFilter(size=5))# Gravar um arquivo de saídaout1.save("out1.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out1.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=300,height=400)wi2=widgets.Image(value=img2,format='jpg',width=300,height=400)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [18]:
# Crie um filtro de modo. Escolhe o valor de pixel mais frequente em uma imagem delimitada com o tamanho fornecido.# Os valores de pixel que ocorrem apenas uma ou duas vezes são ignorados;# se nenhum valor de pixel ocorrer mais de duas vezes, o valor de pixel original será preservado.out2=img.filter(ImageFilter.ModeFilter(size=15))# Gravar um arquivo de saídaout2.save("out2.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out2.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=300,height=400)wi2=widgets.Image(value=img2,format='jpg',width=300,height=400)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [19]:
# Filtro para borrar imagem borradafromPILimportImageFilterout3=img.filter(ImageFilter.BLUR)# Gravar um arquivo de saídaout3.save("out3.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out3.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=400,height=300)wi2=widgets.Image(value=img2,format='jpg',width=400,height=300)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [20]:
# Filtro para contornofromPILimportImageFilterout4=img.filter(ImageFilter.CONTOUR)# Gravar um arquivo de saídaout4.save("out4.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out4.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=300,height=400)wi2=widgets.Image(value=img2,format='jpg',width=300,height=400)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [21]:
# Filtro para EDGE EnhancefromPILimportImageFilterout5=img.filter(ImageFilter.EDGE_ENHANCE)# Gravar um arquivo de saídaout5.save("out5.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out5.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=300,height=400)wi2=widgets.Image(value=img2,format='jpg',width=300,height=400)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [22]:
# Filtro para EDGE Enhance MorefromPILimportImageFilterout6=img.filter(ImageFilter.EDGE_ENHANCE_MORE)# Gravar um arquivo de saídaout6.save("out6.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out6.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=300,height=400)wi2=widgets.Image(value=img2,format='jpg',width=300,height=400)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [23]:
# Filtro para EmbossfromPILimportImageFilterout7=img.filter(ImageFilter.EMBOSS)# Gravar um arquivo de saídaout7.save("out7.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out7.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=300,height=400)wi2=widgets.Image(value=img2,format='jpg',width=300,height=400)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [24]:
# Filtro para Find EdgesfromPILimportImageFilterout8=img.filter(ImageFilter.FIND_EDGES)# Gravar um arquivo de saídaout8.save("out8.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out8.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=300,height=400)wi2=widgets.Image(value=img2,format='jpg',width=300,height=400)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [25]:
# Filtro para SHARPEN. Utilizado para Nitidez.fromPILimportImageFilterout9=img.filter(ImageFilter.SHARPEN)# Gravar um arquivo de saídaout9.save("out9.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out9.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=300,height=400)wi2=widgets.Image(value=img2,format='jpg',width=300,height=400)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [26]:
# Filtro para SMOOTH. Para suavizar a imagem.fromPILimportImageFilterout10=img.filter(ImageFilter.SMOOTH)# Gravar um arquivo de saídaout10.save("out10.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out10.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=300,height=400)wi2=widgets.Image(value=img2,format='jpg',width=300,height=400)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [29]:
# Filtro para BoxBlur. Utilizado para desfoque de imagens.fromPILimportImageFilterout11=img.filter(ImageFilter.BoxBlur(10))# Gravar um arquivo de saídaout11.save("out11.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out11.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=300,height=400)wi2=widgets.Image(value=img2,format='jpg',width=300,height=400)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [30]:
# Filtro para GaussianBlur. É um filtro para desfoque utilizando uma função gaussiana.fromPILimportImageFilterout12=img.filter(ImageFilter.GaussianBlur(radius=5))# Gravar um arquivo de saídaout12.save("out12.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out12.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=300,height=400)wi2=widgets.Image(value=img2,format='jpg',width=300,height=400)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
In [31]:
# Filtro para Unsharp Masking# Aplica um desfoque gaussiano a uma cópia da imagem original e a compara com o original.# Se a diferença for maior do que uma configuração de limite especificada pelo usuário, as imagens serão (de fato) subtraídas.# O Unsharp Masking de nitidez é uma maneira flexível e poderosa de aumentar a nitidez da imagem.importmatplotlib.pyplotaspltout13=img.filter(ImageFilter.UnsharpMask(radius=20,percent=500,threshold=3))# Gravar um arquivo de saídaout13.save("out13.jpg")# Deixar as imagens lado a lado# Lê imagens de arquivos (ele é binário, pode ser utilizado com o ByteIO), mas assim é mais fácilimg1=open('peixe.jpg','rb').read()img2=open('out13.jpg','rb').read()# Cria um widget de imagem. Pode usar o layout de ipywidgets somente com widgets.# Seta as variáveis da imagem, formato e dimensãon.wi1=widgets.Image(value=img1,format='jpg',width=400,height=300)wi2=widgets.Image(value=img2,format='jpg',width=400,height=300)## Colocar lado a lado com o widget HBoxladoalado=widgets.HBox([wi1,wi2])# Finamente vamos mostrardisplay.display(ladoalado)
Mostrando a imagem com os eixos de tamanho em pixels¶
In [32]:
# Carregar a imagem novamenteimg=Image.open("peixe.jpg")# Plotar a imagem com os eixosplt.imshow(img)
Ao final do evento, tivemos o sorteio de um livro cedido pela Novatec e vouchers para cursos da 4Linux, além de código de desconto para os membros da comunidade adquirirem mais conhecimento na 4Linux.
Na primeira apresentação, o Victor Dias apresentou o uso do Python no Back-End e como ele se integra com várias ferramentas para o processamento de alto volume de dados.
Victor Dias
Na apresentação seguinte, o Robert Silva apresentou como publicar uma aplicação Python em Kubernetes.
Nesse vídeo preparatório para o Open Data Day 2022, o João Carlos Santos e o Lucas Ribeiro demonstram como utilizar a biblioteca geopandas para mapear dados em um mapa geográfico e facilitar a visualização de dados.
No Open Data Day 2022, João Carlos Santos e Lucas Ribeiro realizaram a análise dos dados de contaminação do vírus SARS-COV 2 (Coronavírus) que gerou a pandemia que iniciou em 2020.
Eles apresentaram como montar um Heat Map e também como colorir mapas para demonstrar dados.
Open Data Day 2022 – Explorar os dados de monitoramento da pandemia o Estado de São Paulo
Nesse vídeo, Altair Ribeiro, demonstra os comandos básicos para utilizar o JupyterLab utilizando Python. O JupyterLab e o Jupyter Notebook aceleram a ingestão e análise de dados.