Desafio 14

Author

Maria Eduarda Villéla Silva

Este relatório foi compilado em: 30/10/2025 19:55:35.

library(reticulate) #abrindo o pacote reticulate
Warning: pacote 'reticulate' foi compilado no R versão 4.4.3
virtualenv_create("r-reticulate", python = "C:/Program Files/Python312/python.exe") #criando um ambiente virtual para usar python
virtualenv: r-reticulate
use_virtualenv("r-reticulate", required = TRUE) #manda usar o ambiente virtual criado
py_config() #mostra as informações de configurações do Python que o reticulate está usando
python:         C:/Users/madud/Documents/.virtualenvs/r-reticulate/Scripts/python.exe
libpython:      C:/Users/madud/AppData/Local/Programs/Python/Python313/python313.dll
pythonhome:     C:/Users/madud/Documents/.virtualenvs/r-reticulate
version:        3.13.9 (tags/v3.13.9:8183fa5, Oct 14 2025, 14:09:13) [MSC v.1944 64 bit (AMD64)]
Architecture:   64bit
numpy:          C:/Users/madud/Documents/.virtualenvs/r-reticulate/Lib/site-packages/numpy
numpy_version:  2.3.4

NOTE: Python version was forced by use_python() function
py_install("polars", envname = "r-reticulate")
Using virtual environment "r-reticulate" ...
+ "C:/Users/madud/Documents/.virtualenvs/r-reticulate/Scripts/python.exe" -m pip install --upgrade --no-user polars
py_install("plotnine", envname = "r-reticulate")
Using virtual environment "r-reticulate" ...
+ "C:/Users/madud/Documents/.virtualenvs/r-reticulate/Scripts/python.exe" -m pip install --upgrade --no-user plotnine
  1. Importe o conjunto de dados diamonds, cujo arquivo está disponível no website da disciplina.
from plotnine.data import diamonds #importando direto do pacote plotnine

print(diamonds.head()) #vendo uma parte do dataset
   carat      cut color clarity  depth  table  price     x     y     z
0   0.23    Ideal     E     SI2   61.5   55.0    326  3.95  3.98  2.43
1   0.21  Premium     E     SI1   59.8   61.0    326  3.89  3.84  2.31
2   0.23     Good     E     VS1   56.9   65.0    327  4.05  4.07  2.31
3   0.29  Premium     I     VS2   62.4   58.0    334  4.20  4.23  2.63
4   0.31     Good     J     SI2   63.3   58.0    335  4.34  4.35  2.75
  1. Crie uma visualização de dados que descreva a associação existente entre as variáveis peso (carat) e preço (price). Que ações você tomou para garantir que você produziu um gráfico de boa qualidade? Escreva um parágrafo comunicando os seus achados.
from plotnine import (ggplot, aes, geom_point, labs, theme_minimal, theme,
    element_text, element_line, scale_color_manual, scale_shape_manual)

#paleta de cores distintas e visuais
cores_distintas = ["#4361EE", "#F72585", "#4CC9F0", "#3A0CA3", "#7209B7"]

#diferentes formas para distinguir os cortes
formas = ['o', '^', 's', 'D', 'P']

grafico = (
    ggplot(diamonds, aes(x='carat', y='price', color='cut', shape='cut')) +
    
    geom_point(alpha=0.4, size=2.2) +  # transparência alta por causa da sobreposição
    
    labs(
        title='Relação entre Peso (Carat) e Preço (US$) dos Diamantes',
        subtitle='Cada cor e forma representa um tipo de corte diferente',
        x='Peso (carat)',
        y='Preço (US$)',
        color='Corte',
        shape='Corte',
        caption='Fonte: plotnine.data.diamonds'
    ) +
    
    scale_color_manual(values=cores_distintas) +
    scale_shape_manual(values=formas) +
    
    theme_minimal(base_family='Arial') +
    theme(
        panel_grid_major=element_line(color="#d3d3d3", size=0.5),
        panel_grid_minor=element_line(color="#eeeeee", size=0.3),
        plot_title=element_text(size=16, weight='bold', ha='center', color="#3a0ca3"),
        plot_subtitle=element_text(size=11, ha='center', color="#555555"),
        axis_title=element_text(size=12, weight='bold', color="#3a0ca3"),
        axis_text=element_text(size=10, color="#333333"),
        plot_caption=element_text(size=8, color="#777777", ha='right')
    )
)

print(grafico)
<ggplot: (640 x 480)>
grafico.save("grafico_diamantes.png", dpi=300)
C:\Users\madud\DOCUME~1\VIRTUA~1\R-RETI~1\Lib\site-packages\plotnine\ggplot.py:623: PlotnineWarning: Saving 6.4 x 4.8 in image.
C:\Users\madud\DOCUME~1\VIRTUA~1\R-RETI~1\Lib\site-packages\plotnine\ggplot.py:624: PlotnineWarning: Filename: grafico_diamantes.png
#visualizar o gráfico na IDE e no HTML
knitr::include_graphics("grafico_diamantes.png")

De acordo com o gráfico, a relação entre peso (carat) e preço (price) dos diamantes é positiva: diamantes mais pesados tendem a custar mais caro. Para fazer com que o gráfico tivesse boa qualidade, foram utilizados pontos translúcidos para reduzir a sobreposição visual, cores distintas para diferentes categorias de corte (cut) de forma a destacar padrões dentro do conjunto de dados, além de títulos e rótulos claros. Para finalizar, para cada categoria de corte foi atribuída uma forma geométrica diferente, a fim de facilitar ainda mais a visualização.

  1. A relação identificada na questão anterior é a mesma relação presente nos diferentes cortes de diamantes? Crie uma visualização que demonstre seus achados eficientemente. Descreva sua conclusão em um parágrafo.
from plotnine import ggplot, aes, geom_point, geom_smooth, labs, theme_minimal, theme, element_text, facet_wrap

#gráfico: relação entre carat e price por corte
grafico_facets = (
    ggplot(diamonds, aes(x='carat', y='price')) +
    geom_point(alpha=0.4, color="#7b2cbf", size=1.5) +    # pontos translúcidos
    geom_smooth(method='lm', color="black", se=True, alpha=0.15) +  # linha preta
    facet_wrap('~cut') +                                   # separa por corte
    labs(
        title='Relação entre Peso (Carat) e Preço por Corte de Diamante',
        x='Peso (carat)',
        y='Preço (US$)',
        caption='Fonte: plotnine.data.diamonds'
    ) +
    theme_minimal(base_family='Arial') +
    theme(
        panel_grid_major=element_line(color="#d3d3d3", size=0.5),
        panel_grid_minor=element_line(color="#eeeeee", size=0.3),
        plot_title=element_text(size=16, weight='bold', ha='center', color="#3a0ca3"),
        axis_title=element_text(size=12, weight='bold', color="#3a0ca3"),
        axis_text=element_text(size=10, color="#333333"),
        plot_caption=element_text(size=8, color="#777777", ha='right')
    )
)

print(grafico_facets)
<ggplot: (640 x 480)>
grafico_facets.save("grafico_facets.png", dpi=300)
C:\Users\madud\DOCUME~1\VIRTUA~1\R-RETI~1\Lib\site-packages\plotnine\ggplot.py:623: PlotnineWarning: Saving 6.4 x 4.8 in image.
C:\Users\madud\DOCUME~1\VIRTUA~1\R-RETI~1\Lib\site-packages\plotnine\ggplot.py:624: PlotnineWarning: Filename: grafico_facets.png
#visualizar o gráfico na IDE e no HTML
knitr::include_graphics("grafico_facets.png")

A análise da relação entre peso (carat) e preço dos diamantes, segmentada pelos diferentes tipos de corte, revela que a tendência geral de aumento do preço com o peso se mantém em todos os casos. No entanto, observa-se que a intensidade dessa relação varia conforme o corte: diamantes com cortes de qualidade superior, como Ideal e Premium, tendem a apresentar preços mais elevados para um mesmo peso em comparação aos cortes Fair e Good. Isso sugere que, embora o peso seja um forte determinante do preço, o tipo de corte também exerce uma influência significativa.

  1. Crie uma visualização que mostre a relação entre preço e peso do diamante, considerando as diferentes combinações de qualidade de corte, cor e clareza do diamante. Quais foram as dificuldades encontradas? A relação entre preço e peso é a mesma para diferentes configurações de diamantes?
from plotnine import (
    ggplot, aes, geom_point, geom_smooth, labs,
    theme_minimal, theme, element_text, facet_grid)

#gráfico: relação entre preço e peso considerando cut, color e clarity
grafico_complex = (
    ggplot(diamonds, aes(x='carat', y='price', color='color')) +  # cor por 'color'
    geom_point(alpha=0.4, size=1.5) +                             # pontos translúcidos
    geom_smooth(method='lm', color="black", se=False, alpha=0.2) + # linha preta
    facet_grid('cut ~ clarity') +                                 # linhas por corte, colunas por clareza
    labs(
        title='Relação entre Peso (Carat) e Preço do Diamante',
        subtitle='Separado por corte e clareza; cor indica a cor do diamante',
        x='Peso (carat)',
        y='Preço (US$)',
        color='Cor',
        caption='Fonte: plotnine.data.diamonds'
    ) +
    theme_minimal(base_family='Arial') +
    theme(
        panel_grid_major=element_line(color="#d3d3d3", size=0.5),
        panel_grid_minor=element_line(color="#eeeeee", size=0.3),
        plot_title=element_text(size=16, weight='bold', ha='center', color="#3a0ca3"),
        plot_subtitle=element_text(size=11, ha='center', color="#555555"),
        axis_title=element_text(size=12, weight='bold', color="#3a0ca3"),
        axis_text=element_text(size=8, color="#333333"),
        plot_caption=element_text(size=8, color="#777777", ha='right'),
        legend_position='bottom'
    )
)

print(grafico_complex)
<ggplot: (640 x 480)>
grafico_complex.save("grafico_complex.png", dpi=300)
C:\Users\madud\DOCUME~1\VIRTUA~1\R-RETI~1\Lib\site-packages\plotnine\ggplot.py:623: PlotnineWarning: Saving 6.4 x 4.8 in image.
C:\Users\madud\DOCUME~1\VIRTUA~1\R-RETI~1\Lib\site-packages\plotnine\ggplot.py:624: PlotnineWarning: Filename: grafico_complex.png
#visualizar o gráfico na IDE e no HTML
knitr::include_graphics("grafico_complex.png")

O gráfico mostra que, embora exista uma relação positiva consistente entre o peso (carat) e o preço dos diamantes, essa relação varia de forma perceptível entre as diferentes combinações de corte, cor e clareza. Diamantes com cortes de maior qualidade e maior clareza tendem a apresentar preços mais altos, mesmo para pesos semelhantes, indicando que esses fatores valorizam significativamente a pedra. As principais dificuldades encontradas foram a sobreposição dos pontos e a densidade elevada de dados, que dificultam a visualização clara das tendências dentro de cada combinação. Ainda assim, o gráfico permite observar que o peso continua sendo o principal determinante do preço, mas seu efeito é amplificado conforme a qualidade geral do diamante aumenta.