Prática Avançada de Data Science e Visualization

Laboratórios

Olá, tudo bem?

Meu papel nessa disciplina será ajudar no aprendizado da parte dos códigos etc.

Também posso dar pitacos nas apresentações e salvá-los em situações de desespero (atendimentos extras).

Sobre como posso ajudar

Coisas que eu conheço bastante:

  • R / tidyverse
  • extensões do ggplot2
  • htmlwidgets
  • Shiny
  • git/github
  • Quarto

Coisas que eu conheço um pouco:

  • Python / pandas
  • seaborn, plotnine

Uso de IA nas nossas atividades

Dinâmica

Nesse lab, nosso objetivo será construir soluções de transformação e visualização de dados.

  • Os grupos são os que montamos para o trabalho final. Se os grupos ainda não existirem, podemos usar provisioramente os do trimestre passado.

  • As tarefas serão imitar um gráfico que eu montei para vocês usando ggplot2. Eu mostrarei apenas a imagem. Posso dar dicas no meio do caminho.

  • O grupo que conseguir fazer o gráfico primeiro ganhará prêmios.

Base olist

Utilizaremos a base de dados da olist, para que vocês possam aproveitar os trabalhos nas atividades integradoras.

  • Para garantir que as visualizações funcionam, disponibilizei uma base que eu montei (pode conter erros) no material dos labs.

  • A base está no formato .parquet (usar pacote {arrow}) ou pd.read_parquet() (precisa do pyarrow ou equivalente instalado)

Base olist

olist <- arrow::read_parquet(
  "https://github.com/padsInsper/202433-padsv/releases/download/dados/olist_items.parquet"
)

dplyr::glimpse(olist)
Rows: 112,650
Columns: 42
$ order_id                      <chr> "00010242fe8c5a6d1ba2dd792cb16214", "000…
$ order_item_id                 <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ product_id                    <chr> "4244733e06e7ecb4970a6e2683c13e61", "e5f…
$ seller_id                     <chr> "48436dade18ac8b2bce089ec2a041202", "dd7…
$ shipping_limit_date           <dttm> 2017-09-19 09:45:35, 2017-05-03 11:05:1…
$ price                         <dbl> 58.90, 239.90, 199.00, 12.99, 199.90, 21…
$ freight_value                 <dbl> 13.29, 19.93, 17.87, 12.79, 18.14, 12.69…
$ customer_id                   <chr> "3ce436f183e68e07877b285a838db11a", "f6d…
$ order_status                  <chr> "delivered", "delivered", "delivered", "…
$ order_purchase_timestamp      <dttm> 2017-09-13 08:59:02, 2017-04-26 10:53:0…
$ order_approved_at             <dttm> 2017-09-13 09:45:35, 2017-04-26 11:05:1…
$ order_delivered_carrier_date  <dttm> 2017-09-19 18:34:16, 2017-05-04 14:35:0…
$ order_delivered_customer_date <dttm> 2017-09-20 23:43:48, 2017-05-12 16:04:2…
$ order_estimated_delivery_date <dttm> 2017-09-29, 2017-05-15, 2018-02-05, 201…
$ product_category_name         <chr> "cool_stuff", "pet_shop", "moveis_decora…
$ product_name_lenght           <dbl> 58, 56, 59, 42, 59, 36, 52, 39, 59, 52, …
$ product_description_lenght    <dbl> 598, 239, 695, 480, 409, 558, 815, 1310,…
$ product_photos_qty            <dbl> 4, 2, 2, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 2…
$ product_weight_g              <dbl> 650, 30000, 3050, 200, 3750, 450, 200, 1…
$ product_length_cm             <dbl> 28, 50, 33, 16, 35, 24, 27, 35, 30, 29, …
$ product_height_cm             <dbl> 9, 30, 13, 10, 40, 8, 5, 75, 12, 3, 25, …
$ product_width_cm              <dbl> 14, 40, 33, 15, 30, 15, 20, 45, 16, 21, …
$ seller_zip_code_prefix        <chr> "27277", "03471", "37564", "14403", "879…
$ seller_city                   <chr> "volta redonda", "sao paulo", "borda da …
$ seller_state                  <chr> "SP", "SP", "MG", "SP", "PR", "SP", "SP"…
$ customer_unique_id            <chr> "871766c5855e863f6eccc05f988b23cb", "eb2…
$ customer_zip_code_prefix      <chr> "28013", "15775", "35661", "12952", "132…
$ customer_city                 <chr> "campos dos goytacazes", "santa fe do su…
$ customer_state                <chr> "RJ", "SP", "MG", "SP", "SP", "MG", "SP"…
$ n_payments                    <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ types                         <chr> "credit_card", "credit_card", "credit_ca…
$ payment_value                 <dbl> 72.19, 259.83, 216.87, 25.78, 218.04, 34…
$ n_reviews                     <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ score                         <dbl> 5, 4, 5, 4, 5, 4, 4, 5, 1, 4, 5, 5, 5, 5…
$ geolocation_lat_seller        <dbl> -22.49818, -23.56626, -22.26409, -20.548…
$ geolocation_lng_seller        <dbl> -44.12361, -46.51842, -46.15856, -47.395…
$ geolocation_city_seller       <chr> "volta redonda", "sao paulo", "borda da …
$ geolocation_state_seller      <chr> "RJ", "SP", "MG", "SP", "PR", "SP", "SP"…
$ geolocation_lat_customer      <dbl> -21.75808, -20.21239, -19.86044, -23.144…
$ geolocation_lng_customer      <dbl> -41.31263, -50.94147, -44.59797, -46.539…
$ geolocation_city_customer     <chr> "campos dos goytacazes", "santa fe do su…
$ geolocation_state_customer    <chr> "RJ", "SP", "MG", "SP", "SP", "MG", "SP"…

Base olist

import pandas as pd

olist = pd.read_parquet(
  "https://github.com/padsInsper/202433-padsv/releases/download/dados/olist_items.parquet"
)

olist.info()

Exercício 01 🍪

  • Usar a coluna types

  • Estudar a função theme()

  • As geom_label() ficam na metade da altura da barra.

  • Descubra a cor usando o color picker do seu navegador.

Exercício 02 🍪🍪

  • Usar seller_state para o estado

  • Usar scale_x_date()

  • Estudar scale_color_viridis_d()

  • lubridate::floor_date() para aproximar datas

  • case_when() ou fct_other() para reclassificar uma variável categórica

  • filtrar a base para o intervalo de datas entre “2017-01-01” e “2018-07-01”

  • devemos contar/agrupar por data (mês) e estado

Exercício 03 🍪🍪🍪

  • Usar o pacote {ggridges}.

  • Para pintar apenas uma categoria, crie uma coluna.

  • Para anotações no gráfico (como “Mediana”), use a função annotate().

  • Para fazer os reais, use a função scales::scales_dollar_format().

Exercício 04 🍪🍪🍪🍪

  • Faça a contagem por estado, latitude/longtude do seller e customer

  • Filtre para os estados de interesse

  • Use slice_sample() para pegar 1000 observações.

  • Você pode usar essa semente para ficar reprodutível: set.seed(42)

  • Para obter o mapa, usar o pacote {geobr}

  • Para plotar o mapa, usar a função geom_sf()

  • Estamos desenhando CURVAS

  • Use facets