import Pkg
# Suprime mensagens e warnings durante a instalação dos pacotes
redirect_stdout(devnull) do
redirect_stderr(devnull) do
Pkg.add("RDatasets") # Datasets clássicos;
Pkg.add("StatsBase") # Estatísticas descritivas;
Pkg.add("StatsPlots") # Visualizações estatísticas;
Pkg.add("Distributions") # Distribuições estatísticas;
Pkg.add("Random") # Geração de números aleatórios;
Pkg.add("DataFrames") # Estrutura tipo planilha;
Pkg.add("Plots") # Biblioteca de gráficos;
Pkg.add("Statistics") # Funções como mean, median, etc;
Pkg.add("Dates") # Manipulação de datas.
Pkg.add("Measures") # Formatação
end
end
# Obs.: Apenas precisamos carregar o pacote uma vez por ambiente.
Introdução à Análise Exploratória de Dados (EDA) em Julia
Um guia completo e prático sobre como realizar Análise Exploratória de Dados (EDA) em Julia. Explore desde estatísticas descritivas, manipulação de dados, visualizações com Plots.jl e mais. Tudo com códigos prontos para aplicar nos seus projetos!
Introdução
A Análise Exploratória de Dados (EDA) é uma etapa fundamental na Ciência de Dados. Seu objetivo é entender a estrutura dos dados, identificar padrões, encontrar anomalias e formular hipóteses. Com a linguagem julia, voltada para alto desempenho e cálculo científico, a EDA pode ser feita de forma rápida e eficiente.
Benefícios de usar Julia para EDA
- Desempenho comparável ao C
- Sintaxe limpa e legível
- Grande suporte para operações matemáticas e estatísticas
- Ecossistema em crescimento com diversas bibliotecas voltadas para dados
- Integração com outras linguagens como Python, R e C/C++
Preparando o Ambiente
Instalação de Pacotes Essenciais
Dica: Use
Pkg.instantiate()
para garantir que todas as dependências do seu projeto estejam resolvidas.
Carregando um Conjunto de Dados
using RDatasets
= dataset("datasets", "iris") iris
150×5 DataFrame
Row │ SepalLength SepalWidth PetalLength PetalWidth Species
│ Float64 Float64 Float64 Float64 Cat…
─────┼─────────────────────────────────────────────────────────────
1 │ 5.1 3.5 1.4 0.2 setosa
2 │ 4.9 3.0 1.4 0.2 setosa
3 │ 4.7 3.2 1.3 0.2 setosa
4 │ 4.6 3.1 1.5 0.2 setosa
5 │ 5.0 3.6 1.4 0.2 setosa
6 │ 5.4 3.9 1.7 0.4 setosa
7 │ 4.6 3.4 1.4 0.3 setosa
8 │ 5.0 3.4 1.5 0.2 setosa
⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮
144 │ 6.8 3.2 5.9 2.3 virginica
145 │ 6.7 3.3 5.7 2.5 virginica
146 │ 6.7 3.0 5.2 2.3 virginica
147 │ 6.3 2.5 5.0 1.9 virginica
148 │ 6.5 3.0 5.2 2.0 virginica
149 │ 6.2 3.4 5.4 2.3 virginica
150 │ 5.9 3.0 5.1 1.8 virginica
135 rows omitted
first(iris, 5) # Visualização inicial das 5 primeiras linhas do dataset.
5×5 DataFrame
Row │ SepalLength SepalWidth PetalLength PetalWidth Species
│ Float64 Float64 Float64 Float64 Cat…
─────┼───────────────────────────────────────────────────────────
1 │ 5.1 3.5 1.4 0.2 setosa
2 │ 4.9 3.0 1.4 0.2 setosa
3 │ 4.7 3.2 1.3 0.2 setosa
4 │ 4.6 3.1 1.5 0.2 setosa
5 │ 5.0 3.6 1.4 0.2 setosa
O conjunto de dados Iris é um clássico da estatística e aprendizado de máquina. Ele contém medidas de sépalas e pétalas de três espécies de flores: Setosa, Versicolor e Virginica.
Estatísticas Descritivas
Vejamos como calcular estatísticas sumárias em julia usando os pacotes StatsBase e Statistics.
using StatsBase, Statistics
summarystats(iris.SepalWidth)
Summary Stats:
Length: 150
Missing Count: 0
Mean: 3.057333
Std. Deviation: 0.435866
Minimum: 2.000000
1st Quartile: 2.800000
Median: 3.000000
3rd Quartile: 3.300000
Maximum: 4.400000
# A função describe() também faz a mesma coisa.
# Obs.: julia também possui funções padrão como mean(), median(), std(), var(), ..., etc.
As principais medidas descritivas que podemos extrair incluem:
Média e Mediana: Medidas de tendência central
Desvio-padrão, Variância e Intervalo Interquartil (IQR): Medidas de dispersão
Correlação entre variáveis
# Calculando a correlação de Pearson entre duas variáveis numéricas, e depois descrevendo uma das colunas
= cor(iris.SepalWidth, iris.SepalLength) correlacao
-0.11756978413300205
println("Correlação entre SepalWidth e SepalLength: ", correlacao)
Correlação entre SepalWidth e SepalLength: -0.11756978413300205
Aqui, vemos a correlação de Pearson para as variáveis SepalWidth e SepalLength usando a função cor()
.
Manipulação de Dados
Manipular o dataset é essencial para criar subconjuntos, transformar colunas e preparar os dados para análise. Usaremos os pacotes Distributions, Random e, mais importante, DataFrames.
Criando novas colunas
using Distributions, Random, DataFrames
# Agora vamos adicionar uma nova coluna ao nosso dataset
Random.seed!(123) # Tornando os resultados reprodutíveis
TaskLocalRNG()
= iris.SepalWidth + iris.PetalWidth iris.soma_col
150-element Vector{Float64}:
3.7
3.2
3.4000000000000004
3.3000000000000003
3.8000000000000003
4.3
3.6999999999999997
3.6
3.1
3.2
⋮
5.4
4.6
5.5
5.8
5.3
4.4
5.0
5.699999999999999
4.8
= randn(150) iris.normal_padrao
150-element Vector{Float64}:
0.8082879284649668
-1.1220725081141734
-1.1046361023292959
-0.4169926351649334
0.28758798062385577
0.2298186980518676
-0.4217686643996927
-1.355590621101197
0.0694591410918936
-0.11732280453081337
⋮
-0.5245917996070839
1.2770297791112688
-1.0890471538422415
-1.088218513936287
0.7037583257923017
0.14332589323751366
0.14837536667608195
1.0096134137351438
0.028766636052271793
= rand(Normal(2, 0.5), 150) iris.normal
150-element Vector{Float64}:
1.8549928474436481
2.062061985303628
2.016057255141819
2.1161454686338543
1.3673429647209598
1.4120172154505015
1.9308005375653
1.6049470900443568
3.5293684931000344
1.0763261317866746
⋮
2.326721880967805
1.949391560407876
1.9438071314340073
2.728684959145093
2.259371762456528
1.7372020985648153
2.5003474504889027
1.377130936042281
2.3064311304205996
# Perceba que conseguimos criar uma normal padrão usando a função randn(). Já para uma normal com outros parêmtros de locação e escala utilizamos a função Normal()
first(iris, 5)
5×8 DataFrame
Row │ SepalLength SepalWidth PetalLength PetalWidth Species soma_col no ⋯
│ Float64 Float64 Float64 Float64 Cat… Float64 Fl ⋯
─────┼──────────────────────────────────────────────────────────────────────────
1 │ 5.1 3.5 1.4 0.2 setosa 3.7 ⋯
2 │ 4.9 3.0 1.4 0.2 setosa 3.2
3 │ 4.7 3.2 1.3 0.2 setosa 3.4
4 │ 4.6 3.1 1.5 0.2 setosa 3.3
5 │ 5.0 3.6 1.4 0.2 setosa 3.8 ⋯
2 columns omitted
Caso queira adicionar uma nova coluna ao seu dataset, por exemplo, comparar a soma - largura da sépala com a largura da pétala - para cada flor, apenas nomeie a sua nova coluna no formato dados.nova_coluna = nova_coluna
. É importante ressaltar que len(nova_coluna) = len(dados.coluna_qualquer)
, ou seja, o tamanho n da coluna (150 observações, no nosso exemplo) tem que ser igual no dataset inteiro.
Filtragem de dados
# Agora vejamos como filtrar valores no nosso dataset
= filter(row -> row.SepalLength > 7, iris) # Filtrando apenas as flores cuja sépala mede mais do que 7cm flores_grandes
12×8 DataFrame
Row │ SepalLength SepalWidth PetalLength PetalWidth Species soma_col ⋯
│ Float64 Float64 Float64 Float64 Cat… Float64 ⋯
─────┼──────────────────────────────────────────────────────────────────────────
1 │ 7.1 3.0 5.9 2.1 virginica 5.1 ⋯
2 │ 7.6 3.0 6.6 2.1 virginica 5.1
3 │ 7.3 2.9 6.3 1.8 virginica 4.7
4 │ 7.2 3.6 6.1 2.5 virginica 6.1
5 │ 7.7 3.8 6.7 2.2 virginica 6.0 ⋯
6 │ 7.7 2.6 6.9 2.3 virginica 4.9
7 │ 7.7 2.8 6.7 2.0 virginica 4.8
8 │ 7.2 3.2 6.0 1.8 virginica 5.0
9 │ 7.2 3.0 5.8 1.6 virginica 4.6 ⋯
10 │ 7.4 2.8 6.1 1.9 virginica 4.7
11 │ 7.9 3.8 6.4 2.0 virginica 5.8
12 │ 7.7 3.0 6.1 2.3 virginica 5.3
2 columns omitted
# flores_grandes1 = iris[iris.SepalLength .> 7, :] Outra forma de filtrar
first(flores_grandes, 5)
5×8 DataFrame
Row │ SepalLength SepalWidth PetalLength PetalWidth Species soma_col ⋯
│ Float64 Float64 Float64 Float64 Cat… Float64 ⋯
─────┼──────────────────────────────────────────────────────────────────────────
1 │ 7.1 3.0 5.9 2.1 virginica 5.1 ⋯
2 │ 7.6 3.0 6.6 2.1 virginica 5.1
3 │ 7.3 2.9 6.3 1.8 virginica 4.7
4 │ 7.2 3.6 6.1 2.5 virginica 6.1
5 │ 7.7 3.8 6.7 2.2 virginica 6.0 ⋯
2 columns omitted
Para filtrar nossos dados, podemos usar a função filter()
, no formato filter(row ou col -> condição, dados)
e assim criamos uma condição para filtrar as linhas do dataset. Uma alternativa seria usar o formato dados[condição, :]
.
Agrupamento e seleção
Selecionando as colunas SepalLength e PetalWidth para análise.
# Como selecionar e agrupar colunas
= select(iris, :SepalLength, :PetalWidth) # Selecionando colunas selecao
150×2 DataFrame
Row │ SepalLength PetalWidth
│ Float64 Float64
─────┼─────────────────────────
1 │ 5.1 0.2
2 │ 4.9 0.2
3 │ 4.7 0.2
4 │ 4.6 0.2
5 │ 5.0 0.2
6 │ 5.4 0.4
7 │ 4.6 0.3
8 │ 5.0 0.2
⋮ │ ⋮ ⋮
144 │ 6.8 2.3
145 │ 6.7 2.5
146 │ 6.7 2.3
147 │ 6.3 1.9
148 │ 6.5 2.0
149 │ 6.2 2.3
150 │ 5.9 1.8
135 rows omitted
first(selecao, 5)
5×2 DataFrame
Row │ SepalLength PetalWidth
│ Float64 Float64
─────┼─────────────────────────
1 │ 5.1 0.2
2 │ 4.9 0.2
3 │ 4.7 0.2
4 │ 4.6 0.2
5 │ 5.0 0.2
Dataframes agrupados por Species.
= groupby(iris, :Species) # Agrupando por categorias de uma colunas, nesse caso por espécie (virginica, setosa e versicolor) grupo
GroupedDataFrame with 3 groups based on key: Species
First Group (50 rows): Species = CategoricalArrays.CategoricalValue{String, UInt8} "setosa"
Row │ SepalLength SepalWidth PetalLength PetalWidth Species soma_col no ⋯
│ Float64 Float64 Float64 Float64 Cat… Float64 Fl ⋯
─────┼──────────────────────────────────────────────────────────────────────────
1 │ 5.1 3.5 1.4 0.2 setosa 3.7 ⋯
2 │ 4.9 3.0 1.4 0.2 setosa 3.2
⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋱
49 │ 5.3 3.7 1.5 0.2 setosa 3.9
50 │ 5.0 3.3 1.4 0.2 setosa 3.5
2 columns and 46 rows omitted
⋮
Last Group (50 rows): Species = CategoricalArrays.CategoricalValue{String, UInt8} "virginica"
Row │ SepalLength SepalWidth PetalLength PetalWidth Species soma_col ⋯
│ Float64 Float64 Float64 Float64 Cat… Float64 ⋯
─────┼──────────────────────────────────────────────────────────────────────────
1 │ 6.3 3.3 6.0 2.5 virginica 5.8 ⋯
2 │ 5.8 2.7 5.1 1.9 virginica 4.6
⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋱
50 │ 5.9 3.0 5.1 1.8 virginica 4.8
2 columns and 47 rows omitted
Aplicação de funções e ordenação
Aplicando a função y = log(x)
para a coluna SepalLength, retornando o vetor de valores y.
first(map(x -> log(x), iris.SepalLength), 10)
10-element Vector{Float64}:
1.62924053973028
1.589235205116581
1.547562508716013
1.5260563034950492
1.6094379124341003
1.6863989535702288
1.5260563034950492
1.6094379124341003
1.4816045409242156
1.589235205116581
Ordenando o dataset com base no tamanho da pétala (PetalLength), em ordem crescente.
first(sort(iris, :PetalLength), 10)
10×8 DataFrame
Row │ SepalLength SepalWidth PetalLength PetalWidth Species soma_col no ⋯
│ Float64 Float64 Float64 Float64 Cat… Float64 Fl ⋯
─────┼──────────────────────────────────────────────────────────────────────────
1 │ 4.6 3.6 1.0 0.2 setosa 3.8 ⋯
2 │ 4.3 3.0 1.1 0.1 setosa 3.1
3 │ 5.8 4.0 1.2 0.2 setosa 4.2
4 │ 5.0 3.2 1.2 0.2 setosa 3.4
5 │ 4.7 3.2 1.3 0.2 setosa 3.4 ⋯
6 │ 5.4 3.9 1.3 0.4 setosa 4.3
7 │ 5.5 3.5 1.3 0.2 setosa 3.7
8 │ 4.4 3.0 1.3 0.2 setosa 3.2
9 │ 5.0 3.5 1.3 0.3 setosa 3.8 ⋯
10 │ 4.5 2.3 1.3 0.3 setosa 2.6
2 columns omitted
É importante lembrar que muitas dessas funções possuem muita importância durante o tratamento dos dados no início de uma análise, mas também durante a criação de gráficos e tabelas.
Visualização de Dados
Agora vejamos como visualizar os nossos dados e variáveis de interesse através de gráficos! (aqui temos um tutorial para gráficos!).
Histogramas e Scatterplots
Criando histogramas e scatterplots para visualizar a distribuição dos dados
using Plots
using Measures
plot(
histogram(iris.SepalWidth, title="Distribuição da Largura da Sépala", xlabel="Largura", ylabel="Frequência", margin=5mm, label=""),
scatter(iris.PetalWidth, iris.PetalLength, title="Largura x Comprimento da Pétala", xlabel="Largura", ylabel="Comprimento", margin=5mm, label=""),
=(1, 2),
layout=(900, 400)
size )
Gráficos de dispersão (scatterplots) são úteis para visualizar a relação entre duas variáveis contínuas, enquanto histogramas ajudam a entender a distribuição de uma única variável. Vamos agora aprender filtrar e selecionar os dados que queremos visualizar.
using StatsPlots
# Filtrando apenas as linhas com Species == "virginica"
= filter(row -> row.Species == "virginica", iris) virginica
50×8 DataFrame
Row │ SepalLength SepalWidth PetalLength PetalWidth Species soma_col ⋯
│ Float64 Float64 Float64 Float64 Cat… Float64 ⋯
─────┼──────────────────────────────────────────────────────────────────────────
1 │ 6.3 3.3 6.0 2.5 virginica 5.8 ⋯
2 │ 5.8 2.7 5.1 1.9 virginica 4.6
3 │ 7.1 3.0 5.9 2.1 virginica 5.1
4 │ 6.3 2.9 5.6 1.8 virginica 4.7
5 │ 6.5 3.0 5.8 2.2 virginica 5.2 ⋯
6 │ 7.6 3.0 6.6 2.1 virginica 5.1
7 │ 4.9 2.5 4.5 1.7 virginica 4.2
8 │ 7.3 2.9 6.3 1.8 virginica 4.7
⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋱
44 │ 6.8 3.2 5.9 2.3 virginica 5.5 ⋯
45 │ 6.7 3.3 5.7 2.5 virginica 5.8
46 │ 6.7 3.0 5.2 2.3 virginica 5.3
47 │ 6.3 2.5 5.0 1.9 virginica 4.4
48 │ 6.5 3.0 5.2 2.0 virginica 5.0 ⋯
49 │ 6.2 3.4 5.4 2.3 virginica 5.7
50 │ 5.9 3.0 5.1 1.8 virginica 4.8
2 columns and 35 rows omitted
# Selecionando apenas as colunas de interesse, nesse caso SepalWidth e PetalLength
= select(virginica, :SepalWidth, :PetalLength) dados_virg
50×2 DataFrame
Row │ SepalWidth PetalLength
│ Float64 Float64
─────┼─────────────────────────
1 │ 3.3 6.0
2 │ 2.7 5.1
3 │ 3.0 5.9
4 │ 2.9 5.6
5 │ 3.0 5.8
6 │ 3.0 6.6
7 │ 2.5 4.5
8 │ 2.9 6.3
⋮ │ ⋮ ⋮
44 │ 3.2 5.9
45 │ 3.3 5.7
46 │ 3.0 5.2
47 │ 2.5 5.0
48 │ 3.0 5.2
49 │ 3.4 5.4
50 │ 3.0 5.1
35 rows omitted
# Scatterplot
scatter(dados_virg.SepalWidth, dados_virg.PetalLength,
= "SepalWidth",
xlabel = "PetalLength",
ylabel = "Virginica: SepalWidth vs PetalLength",
title = false) legend
Boxplots e Gráficos de Barras
using DataFrames, StatsPlots
# Criando boxplots e gráficos de barras para visualizar a distribuição dos dados
= boxplot(iris.Species, iris.SepalLength, xlabel="Espécie", ylabel="Comprimento da Sépala", title="Boxplot do SepalLength por Espécie", label="") box
# Agrupando por espécie e calculando a média do comprimento da pétala
= combine(groupby(iris, :Species), :SepalWidth => mean => :MediaSepalWidth) resumo
3×2 DataFrame
Row │ Species MediaSepalWidth
│ Cat… Float64
─────┼─────────────────────────────
1 │ setosa 3.428
2 │ versicolor 2.77
3 │ virginica 2.974
# Gráfico de barras
= bar(resumo.Species, resumo.MediaSepalWidth,
barras = "Espécie",
xlabel = "Média do SepalWidth",
ylabel = "Média da SepalWidth por Espécie",
title = false) legend
plot(box, barras, layout=(1, 2), size=(800, 400))
using DataFrames, StatsPlots
# Agrupando por espécie e calculando a média do comprimento da pétala
= combine(groupby(iris, :Species), :SepalLength => mean => :MediaSepalLength) resumo
3×2 DataFrame
Row │ Species MediaSepalLength
│ Cat… Float64
─────┼──────────────────────────────
1 │ setosa 5.006
2 │ versicolor 5.936
3 │ virginica 6.588
# Gráfico de barras
bar(resumo.Species, resumo.MediaSepalLength,
= "Espécie",
xlabel = "Média do SepalLength",
ylabel = "Média do Comprimento da Sépala por Espécie",
title = false) legend
Boxplots são ótimos para visualizar a dispersão e identificar outliers, enquanto gráficos de barras ajudam a entender a frequência de categorias. Vamos agora agrupar os dados e visualizar mais de uma variável.
using DataFrames, StatsPlots, Statistics
# Agrupando os dados e calculando suas medianas
= combine(groupby(iris, :Species),
df_bar :PetalWidth => median,
:PetalLength => median
)
3×3 DataFrame
Row │ Species PetalWidth_median PetalLength_median
│ Cat… Float64 Float64
─────┼───────────────────────────────────────────────────
1 │ setosa 0.2 1.5
2 │ versicolor 1.3 4.35
3 │ virginica 2.0 5.55
# Organizando os dados
= Matrix(select(df_bar, Not(:Species))) y
3×2 Matrix{Float64}:
0.2 1.5
1.3 4.35
2.0 5.55
= df_bar.Species x
3-element CategoricalArrays.CategoricalArray{String,1,UInt8}:
"setosa"
"versicolor"
"virginica"
groupedbar(
x,
y,= :dodge,
bar_position = "Espécie",
xlabel = "Mediana",
ylabel = "Mediana de PetalWidth e PetalLength por Espécie",
title = ["PetalWidth" "PetalLength"],
label = 0.6,
bar_width = 0,
lw = :box
framestyle )
Aqui, separamos a mediana do comprimento e largura da pétala (PetalLength e PetalWidth) para cada espécie, assim conseguindo visualizar conjuntamente a medida dessas variáveis em diferentes grupos.
Matriz de Correlação (Heatmap)
using StatsPlots
# Criando uma matriz de correlação e visualizando com um heatmap
= Matrix(iris[:, 1:4]) dados_num
150×4 Matrix{Float64}:
5.1 3.5 1.4 0.2
4.9 3.0 1.4 0.2
4.7 3.2 1.3 0.2
4.6 3.1 1.5 0.2
5.0 3.6 1.4 0.2
5.4 3.9 1.7 0.4
4.6 3.4 1.4 0.3
5.0 3.4 1.5 0.2
4.4 2.9 1.4 0.2
4.9 3.1 1.5 0.1
⋮
6.9 3.1 5.1 2.3
5.8 2.7 5.1 1.9
6.8 3.2 5.9 2.3
6.7 3.3 5.7 2.5
6.7 3.0 5.2 2.3
6.3 2.5 5.0 1.9
6.5 3.0 5.2 2.0
6.2 3.4 5.4 2.3
5.9 3.0 5.1 1.8
= cor(dados_num) cor_matriz
4×4 Matrix{Float64}:
1.0 -0.11757 0.871754 0.817941
-0.11757 1.0 -0.42844 -0.366126
0.871754 -0.42844 1.0 0.962865
0.817941 -0.366126 0.962865 1.0
= names(iris)[1:4] var_nomes
4-element Vector{String}:
"SepalLength"
"SepalWidth"
"PetalLength"
"PetalWidth"
# Plotando a matriz de correlação
heatmap(
cor_matriz,=(1:4, var_nomes),
xticks=(1:4, var_nomes),
yticks="Matriz de Correlação",
title=:blues,
color=(600, 500)
size )
A matriz de correlação é uma ferramenta poderosa para entender a relação entre variáveis. O heatmap ajuda a visualizar essas correlações de forma intuitiva.
Q-Q Plot (Normalidade)
using Distributions, StatsPlots
# Usando o pacote StatsPlots para criar um Q-Q plot
qqplot(Normal(), iris.PetalLength,
="Quantis Teóricos",
xlabel="Quantis Amostrais",
ylabel="Q-Q Plot de PetalLength") title
Q-Q plots são úteis para verificar a normalidade dos dados. Se os pontos seguirem a linha reta, os dados possivelmente seguem uma distribuição normal. Nesse caso, vemos que a variável PetalLength não segue uma distribuição Normal.
Série Temporal
Por último, criamos uma série temporal simulada para ilustrar como visualizar dados ao longo do tempo. A função cumsum()
é usada para calcular a soma acumulada (no nosso caso, acumular número aleatório de uma distribuição Normal padrão), e o gráfico mostra a evolução dos valores ao longo do ano.
using Dates
# Gerando uma série temporal simulada
= Date(2024,1,1):Day(1):Date(2024,12,31) datas
Date("2024-01-01"):Day(1):Date("2024-12-31")
= cumsum(randn(length(datas))) .+ 100 valores
366-element Vector{Float64}:
99.93356752809319
100.68920283747816
101.60107790420861
100.80867532750842
100.22443383684116
98.5038393366958
98.73218906091287
99.46750522556687
97.83974470691781
96.0199549308198
⋮
101.50097700552809
100.33548507315055
100.31383058790584
101.02944569713357
101.40802609294452
100.68350893826006
99.82193264955082
97.79657769045133
97.80224894941702
# Plotando a série temporal
plot(datas, valores,
="Data", ylabel="Valor",
xlabel="Série Temporal Simulada",
title=2, label="") linewidth
Considerações Finais
A Análise Exploratória de Dados (EDA) é uma etapa crucial para entender os dados e preparar o caminho para análises mais profundas. A linguagem julia, com sua sintaxe clara e desempenho elevado, é uma excelente escolha para essa tarefa.
Explore mais: experimente outros pacotes como
CSV.jl
para ler arquivos externos,GLM.jl
para regressão, eGadfly.jl
para visualizações mais elaboradas.
Ferramentas de IA foram utilizadas para correção ortográfica e aprimoramento do texto.