Skip to content

Commit d43713e

Browse files
authored
Merge pull request #4 from dodii/dodi
Dodi PR diamantes
2 parents 7e4f284 + f4e1af3 commit d43713e

2 files changed

Lines changed: 1395 additions & 4 deletions

File tree

Tarea_1.Rmd

Lines changed: 103 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,15 @@ sort(colSums(data_tf[2:113]))[0:10]
167167

168168

169169
```{r}
170-
# RESPUESTA
170+
# RESPUESTA: Definimos nuestro criterio de participación en base al total de la suma de los conceptos discutidos por asamblea, lo que sería básicamente un conteo de frecuencias.
171+
172+
sum_rows = rowSums(data_tf[2:113])
173+
localities = data_tf$localidad
174+
aux_df = data.frame(localidad = localities, total = sum_rows)
175+
sorted_df <- aux_df[order(-aux_df$total),]
176+
head(sorted_df, 10)
177+
178+
171179
```
172180

173181
5. Ejecute el siguiente código que permitirá agregar una nueva columna a nuestro dataframe que solo tendrá el nombre de la región.
@@ -243,7 +251,7 @@ ggplot(topSantiago) + # asociamos un data frame a ggplot
243251
6. De la pregunta anterior, ¿considera que es razonable usar el conteo de frecuencias para determinar las regiones que tuvieron mayor participación en el proceso? ¿Por qué? Sugiera y solamente comente una forma distinta de hacerlo.
244252

245253
```{r}
246-
# RESPUESTA
254+
# RESPUESTA: No es razonable para determinar la participación a nivel nacional, dado que distintas regiones tienen distintos tamaños de población. Por lo que regiones con menos participación pero más habitantes podrían dominar el conteo de frecuencias. Una alternativa mejor sería normalizar dicho conteo de frecuencias dividiendo por el total de población de cada región. De ese modo se podría evaluar por porcentajes de población, permitiéndole representación a las regiones con menor población.
247255
```
248256

249257
## Ejercicios
@@ -290,18 +298,109 @@ Realice una exploración por el set de datos para responder las siguientes pregu
290298

291299
1. Teniendo en cuenta las medidas físicas, ¿considera que existen valores inexistentes o inconsistentes? Describa como manejaría esta situación. Adjunte el código necesario.
292300

293-
**Respuesta: Podemos filtrar los datos utilizando el concepto matemático de la desigualdad triangular para encontrar los diamantes cuyas dimensiones sean inconsistentes y/o inexistentes dentro de los datos entregados.**
301+
**Respuesta: Primero podemos filtrar buscando filas que tengan valores N/A. Luego, podemos revisar si las dimensiones indicadas son consistentes con la realidad. Por ejemplo, no pueden haber diamantes en dimensiones menores a 3, dada la naturaleza de nuestra realidad. En el caso de que sí hubieran, esto representaría una inconsistencia con la información del dataframe. Es por esto que podemos buscar valores mínimos o máximos en las dimensiones como primer acercamiento.**
294302

295303
```{r}
296304
# RESPUESTA
305+
306+
#Revisar valores inexistentes
307+
non_existant = sum(is.na(diamonds))
308+
non_existant
309+
310+
# Resulta que no hay valores nulos en el dataframe, por lo que queda analizar las dimensiones de forma más específica. Partiremos revisando los valores mínimos que toman las dimensiones de los diamantes.
311+
312+
#Revisaremos con Summary a ver qué aparece.
313+
summary(diamonds)
314+
```
315+
316+
```{r}
317+
#Podemos notar que para las dimensiones x, y o z, hay valores iguales 0, así como valores demasiado grandes para una escala en centímetros. Respecto a cualquiera de los 3 valores iguales a 0, son dimensiones imposibles de concebir en una realidad de 3 dimensiones. Análogamente, sucede lo mismo con valores demasiado grandes. Veremos algunas de las filas en detalle que presentan valores iguales a 0 en x, y o z.
318+
head(diamonds[diamonds$x == 0 | diamonds$y == 0 | diamonds$z == 0,])
319+
320+
#Siendo un total de 20 filas
321+
nrow(diamonds[diamonds$x == 0 | diamonds$y == 0 | diamonds$z == 0,])
322+
```
323+
324+
```{r}
325+
#Respecto a los diamantes con algún valor en sus dimensiones demasiado grande, podemos calcular la desviación estándar de cada dimensión y revisar aquellas filas que posean algún valor de x, y o z que se aleje sustancialmente de una cota razonable definida a partir de dicha desviación. Por ejemplo, podríamos buscar las filas que posean alguna de sus dimensiones más allá de 9 veces la desviación estándar de tal dimensión.
326+
327+
#Primero calcularemos la desviación estándar de cada dimensión y la amplificaremos por un factor arbitrario.
328+
f = 9 # factor multiplicativo para la desviación estándar
329+
sd_x = sd(diamonds$x) * f
330+
sd_y = sd(diamonds$y) * f
331+
sd_z = sd(diamonds$z) * f
332+
333+
334+
#Ahora buscaremos las filas donde hayan dimensiones que se alejen más de f veces la desviación estándar respectiva a ellas. Mostraremos solo algunas de ellas.
335+
head(diamonds[diamonds$x > sd_x | diamonds$y > sd_y | diamonds$z > sd_z,])
336+
337+
#Podemos notar la primera inconsistencia de este tipo, donde hay un diamante con una dimensión en y igual a 58.90. Aunque hiciéramos el supuesto de tomarlo como consistente, éste sería mucho más grande que el diamante de igual corte "Premium" de dimensiones (10.14, 10.10, 6.17), pero vale aprox. 3000 menos, lo cual es extraño e inconsistente.
338+
339+
```
340+
341+
```{r}
342+
#Para abordar estas inconsistencias, hay varios caminos que seguir: en primer lugar, podemos derechamente eliminar las filas inconsistentes según los criterios definidos anteriormente, ya que son pocas en comparació al volumen original del dataframe. Por otro lado, siguiendo una ruta más compleja, se podría definir un tamaño hipotético esperable para los diamantes en función de los datos realmente consistentes, con el fin de rellenar los valores iguales a 0 para los diamantes inconsistentes. Respecto a los valores demasiado grandes, se podría hacer lo mismo, reduciendo tales valores, pero sería más complejo ya que habría que definir una cota, como se mencionó en el apartado anterior. El camino más sencillo es simplemente eliminar los datos inconsistentes, ya que son pocos.
343+
344+
#Podemos crear un nuevo dataframe (para no editar el de la tarea) eliminando los valores que tengan 0 y luego los valores que sean demasiado grandes, usando la libreria dplyr:
345+
library(tidyverse)
346+
library(dplyr)
347+
348+
diamonds2<-diamonds %>%
349+
filter(!((diamonds$x == 0 | diamonds$y == 0 | diamonds$z == 0)) & !(diamonds$x > sd_x | diamonds$y > sd_y | diamonds$z >sd_z))
350+
diamonds2
351+
n1= nrow(diamonds)
352+
n2 = nrow(diamonds2)
353+
n1
354+
n2
355+
356+
#Podemos notar que se eliminan 28 filas de datos inconsistentes según los criterios explicados anteriormente
357+
297358
```
298359

299360
2. Considerando la relación entre dos atributos, ¿qué atributos están más correlacionadas con el precio (price) y qué significa esto? ¿cuál es la correlación más alta para table? Adjunte el código necesario para la respuesta.
300361

301362
```{r}
302363
# RESPUESTA
364+
# Podemos calcular la correlación entre el precio y las demás variables con el coeficiente de correlación de Pearson y luego compararlas en un histograma. Usaremos el dataset que no tiene inconsistencias. Solamente analizaremos las variables numéricas
365+
library(ggplot2)
366+
367+
cor_price_carat = cor(diamonds2$price, diamonds2$carat)
368+
cor_price_depth = cor(diamonds2$price, diamonds2$depth)
369+
cor_price_table = cor(diamonds2$price, diamonds2$table)
370+
cor_price_x = cor(diamonds2$price, diamonds2$x)
371+
cor_price_y = cor(diamonds2$price, diamonds2$y)
372+
cor_price_z = cor(diamonds2$price, diamonds2$z)
373+
374+
cor_names <- c("cor_price_carat", "cor_price_depth", "cor_price_table", "cor_price_x", "cor_price_y", "cor_price_z")
375+
cor_vector <- c(cor_price_carat, cor_price_depth, cor_price_table, cor_price_x, cor_price_y, cor_price_z)
376+
377+
cor_df <- data.frame(correlations = cor_vector, cor_names)
378+
ggplot(data = cor_df, aes(x = cor_names, y = cor_vector)) + geom_point()
379+
380+
#Podemos notar que las correlaciones más altas son con el valor de "carat" y con las dimensiones zdel diamante.
381+
382+
```
383+
384+
```{r}
385+
#Ahora, para table, el proceso es análogo:
386+
387+
cor_table_carat = cor(diamonds2$table, diamonds2$carat)
388+
cor_table_depth = cor(diamonds2$table, diamonds2$depth)
389+
cor_table_price = cor(diamonds2$price, diamonds2$table)
390+
cor_table_x = cor(diamonds2$table, diamonds2$x)
391+
cor_table_y = cor(diamonds2$table, diamonds2$y)
392+
cor_table_z = cor(diamonds2$table, diamonds2$z)
393+
394+
cor_names2 <- c("cor_table_carat", "cor_table_depth", "cor_table_price", "cor_table_x", "cor_table_y", "cor_table_z")
395+
cor_vector2 <- c(cor_table_carat, cor_table_depth, cor_table_price, cor_table_x, cor_table_y, cor_table_z)
396+
397+
cor_df2 <- data.frame(correlations = cor_vector2, cor_names2)
398+
ggplot(data = cor_df2, aes(x = cor_names2, y = cor_vector2)) + geom_point()
399+
400+
#En este caso, la correlación es muy alta con las dimensiones, sobretodo en x, y con el parámetro "carat"; no así con el parámetro "depth".
401+
303402
```
304403

305404
3. Proponga otra forma para explorar los datos. ¿Qué información adicional aporta? Adjunte una breve explicación.
306405

307-
**Respuesta:**
406+
**Respuesta: Podríamos cambiar los valores de tipo string por factores ponderantes numéricos, por ejemplo, el valor "Premium" de la columna "cut" podría tener el máximo valor de 5, y el valor "Fair", uno menor, con el fin de poder calcular matemáticamente el coeficiente de correlación de Pearson. De esta manera, se podrían obtener más correlaciones entre el precio con tales variables.**

0 commit comments

Comments
 (0)