-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAD-Productos_PC-amazon2.Rmd
201 lines (170 loc) · 7.46 KB
/
AD-Productos_PC-amazon2.Rmd
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
---
title: "webscraping en amazon"
author: "Anthony J. Servita R."
date: "12/12/2020"
output: pdf_document
---
```{r, echo=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
1.- conocimiento del problema.
Se realizara una extraccion de datos (webscraping) sobre la pagina web de amazon, se hara una revision de los porductos computacionales que posee amazon en venta. se extraeran los modelos, las marcas asi como su precio y fecha de publicacion.
importacion de paquetes para la extraccion de datos.
```{r webscraping}
library(rvest)
library(robotstxt)
library(selectr)
library(xml2)
library(tidyverse)
library(lubridate)
library(dplyr)
library(skimr)
library(tidyr)
```
2.- Extraccion de datos. El webscraping se realizara por medio del paquete rvest.
```{r}
# vecto de caracter que contiene el template de amazon a la cual estoy accediendo
url <- c("https://www.amazon.com/-/es/s?i=computers-intl-ship&bbn=16225007011&rh=n%3A16225007011%2Cn%3A13896617011%2Cn%3A565098&dc&language=es&qid=1607804959&rnid=2057412011&ref=sr_nr_p_n_feature_fourteen_browse-bin_2")
#asistencia del robots.txt para ver si esta disponible la extraccion de datos legalmente
paths_allowed(paths = url)
```
Dado que el valor del robot.txt nos arrojo un TRUE, extrearemos los datos que queremos de la pagina objetivo.
```{r}
#instancia que responde a la extraccion del code HTML de la pagina objetivo.
pagina_web <- read_html(url)
# vector de la clase css que situa el nombre del producto.
css_producto <- c(".s-line-clamp-2")
# se extrae en CODE HTML que contiene el nombre del producto
producto_html <- html_nodes(pagina_web, css_producto)
# Extreccion de nombre del producto
producto_texto <- html_text(producto_html)
# limpieza de cadenas de texto sobre los productos
producto_texto <- gsub("\n", "", producto_texto)
producto_texto <- gsub(" ", "", producto_texto)
nombre_col <- c("PC_producto",
"procesador",
"discoduro",
"RAM",
"artefactos",
"tarjetaswifi")
producto_texto <- read_delim(producto_texto,
",", col_names = F)
head(producto_texto)
colnames(producto_texto) <- nombre_col
head(producto_texto)
#obtenemos los precios
css_precio <- c(".a-price-whole")
precio_html <- html_nodes(pagina_web, css_precio)
precio_texto <- html_text(precio_html)
#limpieza de las cadenas de precio
precio_texto <- gsub(",", "", precio_texto)
precio_texto <- gsub(".", "", precio_texto)
#visualizacion de los precios
head(precio_texto)
```
3.- Transformacion de variables
```{r}
precio_real <- as.numeric(precio_texto)
# Dataframe con las variables extraidas
df <- data.frame("PC_producto" = producto_texto[1],
"procesador" = producto_texto[2],
"disco_duro" = producto_texto[3],
"RAM" = producto_texto[4],
"atefactos" = producto_texto[5],
"tarjetaswifi" = producto_texto[6],
"precio" = precio_real)
head(df)
write.csv(df, file = "tabla de datos-WS-PC.csv")
```
luego de realizar dla extraccion de datos y arreglarlos, se importaran estos datos para realizar un analisis descriptivo.
4.- importacion de newdata.
```{r}
library(readr)
tabla_de_datos_WS_PC <- read_delim("tabla de datos-WS-PC.csv",
";", escape_double = FALSE, na = "0",
trim_ws = TRUE)
head(tabla_de_datos_WS_PC)
```
5.- conocimiento de los datos.
Los datos que se han importado, estan contenidos en una tabal de 16 x 7 los cuales contienen valores para las 5 variables cualitativas y 1 variable cuantitativa.
```{r}
df <- tabla_de_datos_WS_PC
glimpse(df)
```
parece que el tipo de datos precio se guardo por valores double, se realizar un cambio del tipo de variable, corrigiendo este valor para evitar problema a futuro.
```{r}
df <- df %>%
mutate(precio = as.integer(precio))
glimpse(df)
skim(df)
```
Conclusiones: los precios que maneja amazon sobre la muestra extraida es de 938 USD por computador, con una desviacion de 628 USD. Asi mismo, el precio mas bajo por computador equivale a los 236 USD y el mas alto contiene un valor de 2922 USD. hasta el 50% de los datos, los precios llegan hasta 745 USD. Sobre el histograma podemos visualizar que coeficiente de asimetria es alto dado que su asimetria es positiva. Ergo, el valor mas frecuente es menor a la media y a la mediana.
Agruparemos los precio por computador.
```{r}
df %>%
select(PC_producto, precio) %>%
dplyr::group_by(PC_producto) %>%
skim()
```
interpretacion. Nos damos cuenta que el computador mas barato es una miniPC marca Acer chromeboxCXI3
con un valor en USD de 236. el mas costoso una PC de escritorio para gaming (juegos) valorada en 2922 USD.
agrupemos los precios por procesador de computadora.
```{r}
df %>%
select(procesador, precio) %>%
group_by(procesador) %>%
skim()
```
interpretacion. Los computadores mas caros contienen un procesador intel core i9; en contraste,
el computador mas barato posee un procesador intel celeron de 1.8GHZ de frecuencia.
Agrupemos por memoria RAM.
```{r}
df %>%
select(RAM, precio) %>%
group_by(RAM) %>%
skim()
```
interpretacion. el computador mas caro, viene con una memoria RAM de 32GB. el mas barato contiene una RAM de 4GBDDR4.
6. Analisis de datos pro graficos.
```{r PC amazon, echo=FALSE}
ggplot(df) + geom_boxplot(aes(y = precio))
```
interpretacion grafica. solo encontamos un valor perdido sobre el grafico de boxplot.
el rango intercuartilico se encuentra por debajo de los 2000 USD por lo que los precio
de los computadores no exceden los 2000 USD.
```{r}
ggplot(df) + geom_histogram(aes(precio), bins = 10, colour = 'black')
```
este acercamiento al histograma nos muestra que el valor promedio es menor al valor de la moda, aun asi el la asimetria es positiva.
7.- Analisis exploratorio de varibles (EDA).
```{r}
df %>%
select_if(is.integer) %>%
gather() %>%
ggplot(aes(value)) + geom_density() +
facet_wrap(~key, scales = 'free') +
theme(axis.text = element_text(size = 6))
```
Con este Grafico visualizamos mejor la densidad de los datos, y su distribucion.
podemos ver que no existe una distribucion normal.
Aplicaremos el test de normalidad de shapiro wilk para corroborar la normalidad de los datos. para esto, se contrastaran la hipotesis nula de ditribucion normal sobre los datos con un nivel de significancia del 5%.
```{r}
shapiro.test(df$precio)
```
Conclusiones. Dado que el valor de probabilidad es inferior al valor de significancia, de 0,05. entonces, no existe evidencia suficiente para no rechazar la hipotesis nula, por lo que se tiene un 95% de confianza que para esta muestra los datos no se encuentran distribuidos normalmente.
8.- Analisis inferencial sobre los datos.
En el siguiente analisis se realizara una inferencia sobre el promedio de la poblacion de los precio que se encuentran reunidos en el pagina de amazon sobre la ventas de computadores.
para un nivel de significancia de 5%, y una desviacion estandar de 628USD.
```{r}
length(df$precio)
#ratio de la desviacion y la raiz de n
ratio <- sd(df$precio)/sqrt(length(df$precio))
#calcular t-student dado qeu los datos no poseen distribucion normal.
valor_t <- qt(c(1-(0.05/2)), c(16-1))
Rempirica_95 <- c(ratio * valor_t)
lim_inf <- c(mean(df$precio) - Rempirica_95)
lim_sup <- c(mean(df$precio) + Rempirica_95)
inter_construction <- c(lim_inf, lim_sup)
print(inter_construction)
```
Conclusiones. Con un 95% de confianza inferimos que el valor del promedio para el precio de los computadores se encuentra entre los 603.1173 y 1272.6327 USD por computadora, dado los componentes que la misma proporciona.