En este reporte se presenta un análisis exhaustivo de un conjunto de datos relacionados con los niveles de Nitrógeno (N), Fósforo (P) y Potasio (K). Estos nutrientes son fundamentales para el crecimiento de las plantas y son indicadores importantes para la salud y productividad del suelo. El objetivo de este análisis es comprender la distribución de estos elementos, explorar posibles correlaciones entre ellos y identificar patrones de agrupación que puedan ser útiles para la gestión agrícola o la investigación científica.
En esta etapa, se accede a los datos a través de una API, que proporciona información sobre los niveles de NPK en muestras de suelo. Se utiliza la librería httr para realizar una solicitud GET a la URL especificada, y luego se verifica el estado de la respuesta para asegurar que la solicitud sea exitosa. Si la solicitud es exitosa, los datos en formato JSON se convierten a un dataframe de R utilizando la librería jsonlite. Posteriormente, se filtran las observaciones que contienen valores de N, P y K fuera del rango esperado, lo que puede indicar errores en la medición o datos anómalos.
#library(httr)
#library(jsonlite)
#url <- "https://api-j903.onrender.com/ver"
#respuesta <- GET(url, timeout(60))
#if (status_code(respuesta) == 200) {
# print("Solicitud exitosa")
# contenido <- content(respuesta, "text")
# datos_lista <- fromJSON(contenido, flatten = TRUE)
# datos_dataframe <- as.data.frame(datos_lista)
# head(datos_dataframe)
#} else {
# print(paste("Error en la solicitud:", status_code(respuesta)))
#}
#View(datos_dataframe)
#write.csv(datos_dataframe, file = "npk.csv", row.names = FALSE)
dataset <- read.csv("/Users/gaelcalderon/npk.csv")
dataset <- subset(dataset, Nitrogen > 0 & Nitrogen <= 50 &
Phosphorous > 0 & Phosphorous <= 50 &
Potassium > 0 & Potassium <= 50)
En esta sección, se explora la distribución individual de los niveles de N, P y K mediante la creación de histogramas. Cada histograma muestra la frecuencia de los valores en un rango específico, lo que permite identificar la concentración y dispersión de cada nutriente en el conjunto de datos.
library(ggplot2)
# Histograma de Nitrógeno
ggplot(dataset, aes(x=Nitrogen)) +
geom_histogram(binwidth=1, fill="blue", color="black") +
ggtitle("Distribución de Nitrógeno")
# Histograma de Fósforo
ggplot(dataset, aes(x=Phosphorous)) +
geom_histogram(binwidth=1, fill="green", color="black") +
ggtitle("Distribución de Fósforo")
# Histograma de Potasio
ggplot(dataset, aes(x=Potassium)) +
geom_histogram(binwidth=1, fill="red", color="black") +
ggtitle("Distribución de Potasio")
Para obtener una visión más integrada de los niveles de N, P y K, se combinan los datos en un único histograma. Esto permite comparar directamente las distribuciones de los tres nutrientes y destacar posibles relaciones entre ellos. Cada nutriente se representa con un color diferente, lo que facilita la identificación de patrones de co-ocurrencia o variaciones entre ellos. aqui podemos observe que los datos mayores a 10 son de otro tierra diferente al resto ya que cunentan con una saturacion mayor de los nutrientes
library(reshape2)
dataset_melted <- melt(dataset, id.vars = NULL, measure.vars = c("Nitrogen", "Phosphorous", "Potassium"),
variable.name = "Element", value.name = "Value")
# Crear el histograma combinado
ggplot(dataset_melted, aes(x = Value, fill = Element)) +
geom_histogram(binwidth = 1, color = "black", position = "dodge") +
ggtitle("Distribución de Nitrógeno, Fósforo y Potasio") +
xlab("Valor") +
ylab("Frecuencia") +
scale_fill_manual(values = c("blue", "green", "red")) +
theme_minimal()
Para identificar posibles patrones de agrupación en los datos, se aplica el algoritmo de K-means clustering. Este algoritmo agrupa los datos en clusters basados en la similitud de sus características. En este caso, se agrupan las observaciones según los niveles de N y P. La visualización de los clusters resultantes permite identificar segmentaciones naturales en los datos
#Análisis de Correlación
library(corrplot)
## corrplot 0.92 loaded
cor_matrix <- cor(dataset[, c("Nitrogen", "Phosphorous", "Potassium")])
print(cor_matrix)
## Nitrogen Phosphorous Potassium
## Nitrogen 1.0000000 0.2012422 0.1786176
## Phosphorous 0.2012422 1.0000000 0.1940934
## Potassium 0.1786176 0.1940934 1.0000000
corrplot(cor_matrix, method="circle")
Finalmente, se utiliza un Pairs Plot para visualizar todas las posibles relaciones entre los niveles de N, P y K. Este tipo de visualización permite explorar no solo las relaciones bivariadas entre pares de variables, sino también las distribuciones marginales de cada variable. Esto proporciona una visión global de la estructura de los datos
pairs(dataset[, c("Nitrogen", "Phosphorous", "Potassium")],
main = "Pairs plot de NPK",
pch = 21,
bg = c("red", "green", "blue")[unclass(dataset$cluster)])
este análisis proporciona una comprensión detallada de los niveles de N, P y K en el conjunto de datos. Se identificaron patrones de distribución, correlaciones y agrupaciones que pueden ser de interés para la gestión agrícola, la investigación científica o la toma de decisiones relacionadas con la salud del suelo y el rendimiento de los cultivos.