-
Notifications
You must be signed in to change notification settings - Fork 2
/
Gráficos.R
276 lines (210 loc) · 9.9 KB
/
Gráficos.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
# Visualização com ggplot2
library(ggplot2)
library(dplyr)
# importando a tabela
base <- read.csv("dados_estatisticas_final.csv", header = TRUE, sep = ",") # ver dados - criou com separador ","
head(base)
# ver estrutura dos dados
str(base)
# O pacote ggplot2 utiliza a gramática de gráficos, conceito desenvolvido por ....
# esse pacote possui um conjunto de ferramentas que permite a criação de gráficos que capture relações complexas.
# é uma biblioteca muito flexível...
# essa gramática de gráficos é sistematizada da seguinte forma:
# você inicializa a função ggplot() com os dados e pode adicionar diversos elementos de forma encadeada
# ex.: ggplot(data = dados, aes(x = idade, y = BaseCalculoMensal))
# Essa funcão cria um espaço para você adicionar alguma estrutura.
# Se eu quiser adicionar outro elemento, como pontos entre essas variáveis, devemos adicioná-los à p (objeto salvo anteriormente):
# ggplot(data = dados, aes(x = idade, y = BaseCalculoMensal)) + geom_point()
# Melhoramos o gráfico.
# É possível modificá-lo? Sim, podemos adicionar um título e alterar o texto dos eixos por meio da função labs().
# ggplot(data = dados, aes(x = idade, y = BaseCalculoMensal)) + geom_point() + labs(title = "Gráfico de dispersão", x = "Idade", y = "Base de Cálculo Mensal")
# Vamos visualizar as distribuições das variáveis
# Tudo dependerá do tipo da variável, se ela é qualitativa ou quantitativa
# Se ela for qualitativa, vamos usar o gráfico de barras
# Vamos visualizar um gráfico de barras par o sexo
ggplot(data = base, mapping = aes(sexo)) +
geom_bar()
# mesmo grafico com cores
p <- ggplot(data = base, mapping = aes(x = sexo, fill = sexo)) +
geom_bar()
# visualizar
print(p)
# quantidades para cada sexo
table(base$sexo)
# para tirar a legenda
p <- p + guides(fill = FALSE)
# agora adicionando a quantidade de pessoas acima da barra
p + geom_text(stat="count", aes(label=..count..), vjust=0)
# ajustando para negativo, os valores se distanciam do eixo x
p + geom_text(stat="count", aes(label=..count..), vjust=-1)
p + geom_text(stat="count", aes(label=..count..), vjust=-2)
# adicionando um contorno preto
ggplot(data = base, mapping = aes(x = sexo, fill = sexo)) +
geom_bar(colour = "black") +
geom_text(stat="count", aes(label = ..count..), vjust=-0.5) +
guides(fill = FALSE)
# Queremos ver agora o gráfico de barras para o estado civil
ggplot(data = base, mapping = aes(x = EstadoCivil)) +
geom_bar()
# com cores
ggplot(data = base, mapping = aes(x = EstadoCivil, fill = EstadoCivil)) +
geom_bar()
# com cores e contorno preto
ggplot(data = base, mapping = aes(x = EstadoCivil, fill = EstadoCivil)) +
geom_bar(colour="black")
# com os valores em cima das barras
ggplot(data = base, mapping = aes(x = EstadoCivil, fill = EstadoCivil)) +
geom_bar(colour="black") +
geom_text(stat = 'count', aes(label = ..count..), vjust=-0.5)
# agora reordenando as barras pela altura
b <- base %>%
count(EstadoCivil)
b
ggplot(data = b, mapping = aes(x = reorder(EstadoCivil, -n), y = n, fill = EstadoCivil)) +
geom_bar(stat="identity", colour="black") +
geom_text(aes(label = n),vjust=-0.5)
##### Exercício: Faça um gráfico de barras para a carreira e nos informe a que possui a maior quantidade de pessoas
# dica: veja quantas pessoas por carreira de forma decrescente:
base %>%
count(carreira) %>%
arrange(desc(n))
ggplot(data = base) +
geom_bar(mapping = aes(x = carreira))
##### Não ficou legal, pois temos muitas carreiras. Selecione 5 carreias e faça o mesmo gráfico colorido.
base_carreiras <- base %>%
filter(carreira == "PROFESSOR" | carreira == "ENFERMEIRO" |
carreira == "MOTORISTA" | carreira == "AG. COM. SAÚDE" |
carreira == "AGENTE ADM.")
ggplot(base_carreiras, mapping = aes(x = carreira)) +
geom_bar()
ggplot(base_carreiras, mapping = aes(x = carreira, fill = carreira)) +
geom_bar(colour = "black") +
guides(fill = FALSE)
# Agora faça colocando a quantidade acima da barra e reordene
b2 <- base_carreiras %>%
count(carreira)
ggplot(data = b2, mapping = aes(x = reorder(carreira, -n), y = n, fill = carreira)) +
geom_bar(stat = "identity", colour = "black") +
geom_text(aes(label = n),vjust=-0.5) +
guides(fill=FALSE)
#####
# Quando a variável é quantitativa, usamos o histograma
## Vamos visualizar o histograma da variável idade
ggplot(base, aes(x = idade)) +
geom_histogram()
# Podemos modificar o tamanho dos intervalos - bin
ggplot(base, aes(x = idade)) +
geom_histogram( binwidth = 30)
ggplot(base, aes(x = idade)) +
geom_histogram(binwidth = 20)
ggplot(base, aes(x = idade)) +
geom_histogram(binwidth = 10)
ggplot(base, aes(x = idade)) +
geom_histogram(binwidth = 5)
ggplot(base, aes(x = idade)) +
geom_histogram(binwidth = 2)
# visualizando os intervalos
base %>%
count(cut_width(idade, 20))
base %>%
count(cut_width(idade, 10))
base %>%
count(cut_width(idade, 5))
base %>%
count(cut_width(idade, 2))
# Se for de interesse plotar o histograma da idade pelo sexo
# vamos usar o argumento fill para preencher a área com a cor e o alpha para tornar mais transparente
ggplot(base, aes(x = idade, fill = sexo, color = sexo)) +
geom_histogram(binwidth = 5, alpha=0.6)
# vamos usar a position = "identity" para que a distribuição do sexo masculino não fique sobreposta
ggplot(base, aes(x = idade, fill = sexo, color = sexo) ) +
geom_histogram(binwidth = 5, alpha=0.6, position="identity")
##### Exercício: Crie um histograma para a base de cálculo para os
# estados civis solteiro e casado usando a cor e transparência e diga se:
# a distribuição é diferente?
sol_cas <- base %>%
filter(EstadoCivil == "solteir" | EstadoCivil == "casad")
ggplot(sol_cas, aes(x = BaseCalculoMensal, fill = EstadoCivil, color = EstadoCivil)) +
geom_histogram(binwidth = 400, alpha=0.6, position="identity")
# Verificamos que temos uma distribuição bimodal
##### Exercício: Crie um histograma para a base de cálculo para
# os estados civis solteiro e casado com base de cálculo menor do que R$ 3.000
# usando a cor e transparência
sol_cas <- base %>%
filter(EstadoCivil == "solteir" | EstadoCivil == "casad", BaseCalculoMensal < 3000)
ggplot(sol_cas, aes(x = BaseCalculoMensal, fill = EstadoCivil, color = EstadoCivil)) +
geom_histogram(binwidth = 400, alpha=0.6, position="identity")
####
# Verificamos que não há diferenças aberrantes.
# Mas será que existe diferença da bases de cálculos entre os sexos?
# Vamos investigar:
ggplot(base, aes(x = BaseCalculoMensal, fill = sexo, color = sexo)) +
geom_histogram()
ggplot(base, aes(x = BaseCalculoMensal, fill = sexo, color = sexo)) +
geom_histogram(binwidth = 400, alpha=0.6, position="identity")
##### Exercício: Faça um histograma por sexo para quem possui Base de Cálculo maior do que 3500.
base2000 <- base %>%
filter(BaseCalculoMensal > 3500)
ggplot(base2000) +
geom_histogram(mapping = aes(x = BaseCalculoMensal, fill = sexo, color = sexo), binwidth = 200, alpha=0.6, position="identity")
#####
# Podemos usar o gráfico de colunas para nos ajudar quando tentamos analisar uma variável quantitativa juntamente com uma qualitativa
## A base de cálculo é diferente entre os estados civis?
ggplot(base) +
geom_col(aes(x = EstadoCivil, y = BaseCalculoMensal))
ggplot(base) +
geom_col(aes(x = EstadoCivil, y = BaseCalculoMensal, fill = EstadoCivil))
#### Exercício:
ggplot(base) +
geom_col(aes(x = EstadoCivil, y = BaseCalculoMensal, fill = EstadoCivil))
# Quando desejamos criar um gráfico a partir de duas variáveis quantitativas, usamos o gráfico de dispersão
# Vamos analisar o salario em funcao da idade
ggplot(base) +
geom_point(aes(x = idade, y = BaseCalculoMensal))
# Percebmos que há dois grupos distintos. Será que é o sexo?
ggplot(base) +
geom_point(aes(x = idade, y = BaseCalculoMensal, color = sexo))
# Parece que não, vamos investigar com outro grupo, o estado civil
ggplot(base) +
geom_point(aes(x = idade, y = BaseCalculoMensal, color = EstadoCivil))
# Ainda não. Que tal a carreira
ggplot(base) +
geom_point(aes(x = idade, y = BaseCalculoMensal, color = carreira))
# Ops, muitas categorias
# vamos selecionar algumas
base_carreiras <-base %>%
filter(carreira == "PROFESSOR" | carreira == "ENFERMEIRO" | carreira == "MOTORISTA" | carreira == "AG. COM. SAÚDE" | carreira == "AGENTE ADM.")
# Parece que agora conseguimos identificar a diferença entre os grupos.
ggplot(base_carreiras) +
geom_point(aes(x = idade, y = BaseCalculoMensal, color = carreira))
# Perceba também que não há uma correlação entre idade e base de cálculo
# Por fim, vamos visualizar o box-plot
## box_plot base por sexo
ggplot(base) +
geom_boxplot(mapping = aes(x = sexo, y = BaseCalculoMensal))
# Box-plot base por estado civil
ggplot(base) +
geom_boxplot(mapping = aes(x = EstadoCivil, y = BaseCalculoMensal))
# Box-plot base por estado civil e sexo
ggplot(base) +
geom_boxplot(mapping = aes(x = EstadoCivil, y = BaseCalculoMensal, color = sexo))
# Perceba que há diferenças entre os sexos para alguns estados civis
##### Exercício: Faça um gráfico de box-plot da Base de cálculo para as 3 carreiras com as maiores e as 3 carreiras menores médias salariais (use profissões com n > 10), e faça a distinção por sexo.
maiores_medias <- base %>%
group_by(carreira) %>%
summarize(n = n(), media = mean(BaseCalculoMensal)) %>%
filter(n > 10) %>%
arrange(desc(media))
menores_medias <- base %>%
group_by(carreira) %>%
summarize(n = n(), media = mean(BaseCalculoMensal)) %>%
filter(n > 10) %>%
arrange(media)
maiores_medias
menores_medias
base_boxplot <- base %>%
filter(carreira == "PROFESSORA" | carreira == "PROFESSOR" | carreira == "AGENTE ADM." | carreira == "GARI" | carreira == "AGENTE DE ENDEMIAS" | carreira == "MOTORISTA")
base_boxplot
ggplot(base_boxplot) +
geom_boxplot(mapping = aes(x = carreira, y = BaseCalculoMensal, color = sexo))
#####