Integrantes

Goñe Romero Renzo Harol

Samaniego Granados Caleb Eliseo

1 Manipulacion de Data Frame

Funciones

En R, las funciones son bloques de código que realizan tareas específicas y pueden ser llamadas por su nombre para ejecutar esas tareas cuando sea necesario. La definición de una función en R sigue la siguiente estructura básica:

funcion_multiplicar<-function(valor1,valor2,valor3){
  resultado<-valor1*valor2*valor3
  return(resultado)
}
valores<-funcion_multiplicar(10,11,12)
print(valores)
## [1] 1320

Librerias y Modulos

Librerías (Libraries): En R, las “librerías” se refieren a colecciones de funciones y datos que extienden las capacidades del lenguaje. Estas colecciones están empaquetadas en lo que se llama “paquetes” (packages). Los paquetes son conjuntos de funciones, datos y código compilados que facilitan tareas específicas.

Por ejemlo instalemos un paquete

#Instalar el paquete
#install.packages("ggplot2")
#Cargar el paquete
#library(ggplot2)

Modulos: En R, el término “módulo” puede referirse a unidades de código que encapsulan funcionalidades específicas y que pueden ser utilizadas para estructurar y organizar el código de una manera modular.

cuadrado <- function(x) {
  return(x^2)
}

# Módulo para sumar dos números
suma <- function(a, b) {
  return(a + b)
}

# Uso de los módulos
resultado_cuadrado <- cuadrado(5)
resultado_suma <- suma(3, 4)
print(resultado_cuadrado)
## [1] 25
print(resultado_suma)
## [1] 7

Dataframe En R, un “data frame” es una estructura de datos rectangular que organiza datos en filas y columnas, similar a una hoja de cálculo o una tabla en una base de datos relacional. Cada columna en un data frame puede contener diferentes tipos de datos (numéricos, caracteres, factores, etc.), y cada fila representa una observación o caso.

datos<-data.frame(
  nombre=c("Renzo","Benjamin","Alexander"),
  edad=c(24,24,22),
  puntuacion=c(15,12,11)
  )
print(datos)
##      nombre edad puntuacion
## 1     Renzo   24         15
## 2  Benjamin   24         12
## 3 Alexander   22         11

Analisis de Datos en R El análisis de datos en R es una tarea común y poderosa que permite a los usuarios explorar, visualizar y extraer información significativa de conjuntos de datos. R es un lenguaje de programación y un entorno de software estadístico que proporciona numerosas herramientas y paquetes específicamente diseñados para el análisis de datos.

En el ejemplo se presentara un sencillo analisis de datos

# Cargar el conjunto de datos mtcars (ya incorporado en R)
data(mtcars)

# Mostrar las primeras filas del conjunto de datos
head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
# Resumen estadístico del conjunto de datos
summary(mtcars)
##       mpg             cyl             disp             hp       
##  Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0  
##  1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5  
##  Median :19.20   Median :6.000   Median :196.3   Median :123.0  
##  Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7  
##  3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0  
##  Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0  
##       drat             wt             qsec             vs        
##  Min.   :2.760   Min.   :1.513   Min.   :14.50   Min.   :0.0000  
##  1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   1st Qu.:0.0000  
##  Median :3.695   Median :3.325   Median :17.71   Median :0.0000  
##  Mean   :3.597   Mean   :3.217   Mean   :17.85   Mean   :0.4375  
##  3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   3rd Qu.:1.0000  
##  Max.   :4.930   Max.   :5.424   Max.   :22.90   Max.   :1.0000  
##        am              gear            carb      
##  Min.   :0.0000   Min.   :3.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
##  Median :0.0000   Median :4.000   Median :2.000  
##  Mean   :0.4062   Mean   :3.688   Mean   :2.812  
##  3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :1.0000   Max.   :5.000   Max.   :8.000
# Crear un gráfico de dispersión entre mpg y hp (millas por galón vs. potencia)
plot(mtcars$hp, mtcars$mpg, main = "Relación entre Potencia y Millas por Galón", xlab = "Potencia (hp)", ylab = "Millas por Galón")

# Calcular la correlación entre mpg y hp
correlacion <- cor(mtcars$mpg, mtcars$hp)
cat("Correlación entre Millas por Galón y Potencia:", correlacion, "\n")
## Correlación entre Millas por Galón y Potencia: -0.7761684

Importacion de datos

La importación de datos en R se refiere al proceso de cargar conjuntos de datos externos en el entorno de trabajo de R para que puedan ser utilizados y analizados en el lenguaje. Los datos pueden provenir de una variedad de fuentes, como archivos de texto, hojas de cálculo, bases de datos, servicios web, entre otros. Veamos como importar archivos CSV

#Importando archivos en formato CSV

Flujo de proceso de Analisis de Datos

El flujo de datos se divide en ### 1. Planteamiento del Problema: Define claramente el problema que estás tratando de resolver o la pregunta que estás intentando responder. ### 2. Adquisición de Datos: Importa tus datos a R utilizando las funciones adecuadas según el formato de los datos (por ejemplo, read.csv() para archivos CSV, read_excel() para archivos Excel, etc.). ### 3. Exploración de Datos (EDA - Exploratory Data Analysis): Visualiza tus datos para comprender su estructura y distribución. Utiliza herramientas como gráficos de dispersión, histogramas, boxplots, etc. Identifica valores atípicos (outliers) y maneja datos faltantes si es necesario. ### 4. Preprocesamiento de Datos: Limpia los datos, elimina duplicados y maneja datos faltantes. Transforma variables si es necesario (por ejemplo, normalización, estandarización). Codifica variables categóricas si es necesario. ### 5. Análisis Estadístico: Realiza análisis estadísticos descriptivos para resumir las características principales de tus datos. Utiliza pruebas estadísticas para inferir conclusiones sobre tus datos. ### 6. Modelado: Selecciona el modelo o algoritmo apropiado según la naturaleza de tu problema (regresión, clasificación, agrupamiento, etc.). Divide tus datos en conjuntos de entrenamiento y prueba. Entrena tu modelo con los datos de entrenamiento. ### 7. Evaluación del Modelo: Evalúa el rendimiento de tu modelo utilizando métricas apropiadas. Ajusta hiperparámetros si es necesario. ### 8. Visualización de Resultados: Presenta tus resultados de manera efectiva utilizando gráficos y visualizaciones. Comunica las conclusiones obtenidas del análisis. ### 9. Documentación: Documenta tu código de manera clara para futuras referencias. Crea informes si es necesario (por ejemplo, usando R Markdown). ### 10. Comunicación: Presenta tus resultados de manera clara y comprensible a las partes interesadas. Responde preguntas y considera los comentarios para mejorar tu análisis. Este es un flujo general y puede haber variaciones dependiendo del tipo específico de análisis que estés realizando. La flexibilidad de R te permite adaptar este flujo a las necesidades específicas de tu proyecto.

Manejo de Datos

El manejo de datos en R constituye la primera fase crítica en cualquier análisis de datos. Comprende una serie de procesos diseñados para garantizar que los datos sean apropiados y estén listos para ser utilizados en análisis estadísticos o modelos predictivos. Esta etapa es esencial porque la calidad de los resultados finales depende en gran medida de la calidad de los datos iniciales.

Identificación y Manejo de Datos Missing

Los datos faltantes son una realidad común en conjuntos de datos del mundo real y pueden surgir por diversas razones, como errores de entrada, fallos en la recolección de datos o simplemente porque cierta información no está disponible. La identificación y manejo adecuado de estos datos son fundamentales.

Existen funciones que nos ayudarán mucho con este tema, por ejemplo: La función is.na() en R permite identificar los valores missing en un conjunto de datos. Posteriormente, la función na.omit() puede ser empleada para eliminar las observaciones que contienen datos faltantes. Además, técnicas avanzadas como la imputación, utilizando paquetes como mice, permiten estimar valores razonables para los datos faltantes, preservando la integridad del conjunto de datos.

# Identificación de datos missing

missing_values \<- is.na(data_frame)

# Eliminación de observaciones con datos faltantes

cleaned_data \<- na.omit(data_frame)

# Imputación de valores missing

imputed_data \<- mice::mice(data_frame, method = 'pmm')

Identificación y Manejo de Datos Outlier e Inconsistentes

Los outliers, valores atípicos que se desvían significativamente del patrón general de los datos, y los datos inconsistentes, que pueden surgir debido a errores de medición o entrada, son factores que pueden distorsionar los resultados del análisis. Identificar y abordar estos casos es crucial para mantener la integridad de los resultados.

En R, se pueden utilizar herramientas como gráficos de caja (boxplot para visualizar outliers, y técnicas basadas en cuartiles para eliminarlos o corregirlos. La robustez estadística es esencial para manejar datos inconsistentes y evitar que afecten negativamente el análisis.

# Identificación de outliers mediante un boxplot
boxplot(data_frame$variable_of_interest)

# Eliminación de outliers basada en cuartiles
q1 <- quantile(data_frame$variable_of_interest, 0.25)
q3 <- quantile(data_frame$variable_of_interest, 0.75)
iqr <- q3 - q1
cleaned_data <- subset(data_frame, variable_of_interest > q1 - 1.5 * iqr & variable_of_interest < q3 + 1.5 * iqr)

Limpieza de Datos y Preparación de Datos

La limpieza de datos va más allá de abordar valores faltantes o outliers. Involucra la identificación y corrección de duplicados, normalización de nombres de variables, y transformaciones necesarias para que los datos estén listos para el análisis.

Librerías como dplyr y tidyr en R facilitan estas tareas, permitiendo la eliminación de duplicados con distinct(), la estandarización de nombres de variables con rename(), y la creación de nuevas variables mediante la función mutate().

# Eliminación de duplicados
cleaned_data <- distinct(data_frame)

# Estandarización de nombres de variables
cleaned_data <- rename(cleaned_data, new_variable_name = old_variable_name)

# Transformación de datos para análisis
prepared_data <- mutate(cleaned_data, new_variable = log(old_variable))

Visualización de datos

La visualización de datos es un componente esencial en el análisis exploratorio y la comunicación efectiva de resultados en cualquier proyecto de análisis de datos. En R, la riqueza de herramientas y librerías dedicadas a la visualización ofrece a los analistas y científicos de datos la capacidad de transformar datos abstractos en representaciones visuales comprensibles y significativas.Es muy importante debido a dos aspectos, la comprensión exploratoria y la comunicación efectiva

las gráficas proporcionan una visión intuitiva y rápida de la distribución, patrones y tendencias en los conjuntos de datos. Al explorar gráficamente los datos, los analistas pueden identificar relaciones, outliers y patrones que pueden no ser evidentes en una inspección numérica.

El aspecto de la comunicación efectiva es importante debido a la capacidad de comunicar resultados de manera efectiva es crucial. Las visualizaciones permiten presentar hallazgos de una manera accesible y convincente, facilitando la comprensión por parte de audiencias diversas. Gráficos claros y atractivos pueden ser fundamentales al comunicar resultados a colegas, stakeholders o audiencias no técnicas.

Visualización de datos univariados.

Es el enfoque en explorar la distribución y patrones de una sola variable. Examinar la forma y la dispersión de una variable es fundamental para comprender su comportamiento y puede revelar información valiosa sobre tendencias, centralidad y dispersión.Para ellos se utilizan:

Histogramas

Los histogramas son una forma efectiva de representar la distribución de una variable continua. R ofrece la función hist() para crear histogramas. Se pueden ajustar los parámetros, como el número de intervalos (breaks), para obtener una representación más detallada.

hist(data_frame$variable, main = "Histograma de Variable", xlab = "Variable", col = "lightblue", border = "black")
``` r


### Gráficos de Densidad
Los gráficos de densidad proporcionan una representación suave de la distribución de una variable continua. La función `density()` se utiliza para calcular la densidad, y `plot()` para visualizarla.

``` r
plot(density(data_frame$variable), main = "Gráfico de Densidad de Variable", col = "blue")

Gráficos de Caja

Los gráficos de caja, o boxplots, son útiles para visualizar la distribución y la presencia de outliers en una variable. La función boxplot() crea este tipo de gráficos.

boxplot(data_frame$variable, main = "Gráfico de Caja de Variable", col = "lightgreen", border = "black")

Diagramas de Barra

Para variables categóricas, los diagramas de barra son efectivos. La función barplot() crea gráficos de barras que muestran la frecuencia o proporción de cada categoría.

barplot(table(data_frame$categorical_variable), main = "Diagrama de Barras", col = "skyblue", border = "black")

Visualización de datos bivariados

La visualización de datos bivariados se centra en explorar la relación entre dos variables. Esta exploración es fundamental para comprender las conexiones y patrones entre las variables, lo que puede proporcionar información valiosa para el análisis y la toma de decisiones.Algunas herramientas que se utilizan son:

Scatter Plots

Los scatter plots son una herramienta esencial para visualizar la relación entre dos variables continuas. En R, se pueden crear fácilmente con la función plot().

plot(data_frame$variable1, data_frame$variable2, main = "Scatter Plot", xlab = "Variable 1", ylab = "Variable 2")

Líneas de Regresión

Cuando se busca entender la tendencia o relación lineal entre dos variables, las líneas de regresión son útiles. R permite agregar líneas de regresión a un scatter plot con la función abline().

abline(lm(data_frame$variable2 ~ data_frame$variable1), col = "red")

Matrices de Dispersión

Cuando se trabaja con más de dos variables, las matrices de dispersión ofrecen una visión completa de las relaciones bivariadas. El paquete graphics en R proporciona la función pairs() para crear matrices de dispersión.

pairs(data_frame[, c("variable1", "variable2", "variable3")])

Heatmaps

Los heatmaps son útiles para visualizar la intensidad de la relación entre dos variables categóricas. La librería ggplot2 es eficaz para crear heatmaps.

library(ggplot2)
ggplot(data_frame, aes(x = variable1, y = variable2, fill = variable3)) +
  geom_tile() +
  labs(title = "Heatmap", x = "Variable 1", y = "Variable 2")

Visualización de datos bivariados multivariados.

c. Visualización de Datos Bivariados Multivariados

La visualización de datos bivariados multivariados se enfoca en analizar la relación simultánea entre más de dos variables. Este tipo de visualización es esencial para comprender las interacciones complejas y las asociaciones entre múltiples variables en un conjunto de datos. Algunas herramientas que se utilizan:

Gráficos 3D

Los gráficos 3D son una herramienta efectiva para visualizar la relación entre tres variables simultáneamente. Utilizando la función scatterplot3d, se puede crear un gráfico tridimensional que representa la interacción entre tres variables.

# Gráfico 3D
scatterplot3d(data_frame$variable1, data_frame$variable2, data_frame$variable3, main = "Gráfico 3D")

Matrices de Color

Las matrices de color son útiles para representar la correlación entre múltiples variables de manera visual. El paquete corrplot proporciona una función para crear matrices de color que muestran la fuerza y dirección de las relaciones.

library(corrplot)
corrplot(cor(data_frame[, c("variable1", "variable2", "variable3")]), method = "color")

Gráficos de Burbujas

Los gráficos de burbujas son útiles cuando se desea visualizar la relación entre tres variables, incluido el tamaño de las burbujas como una cuarta dimensión. La librería plotly permite crear gráficos de burbujas interactivos.

library(plotly)
plot_ly(data_frame, x = ~variable1, y = ~variable2, size = ~variable3, color = ~variable4, type = "scatter", mode = "markers")

Visualización de datos avanzados (imágenes)

En ocasiones, es necesario trabajar con datos que no son convencionales, como imágenes. La visualización de datos avanzados, específicamente de imágenes, requiere enfoques especializados. A continuación, se exploran algunas técnicas y paquetes que permiten trabajar con este tipo de datos.

Trabajo con Imágenes

R cuenta con paquetes que facilitan la carga, manipulación y visualización de imágenes. El paquete jpeg es útil para trabajar con imágenes en formato JPEG, mientras que png es adecuado para imágenes en formato PNG. Estos paquetes permiten leer imágenes y realizar operaciones básicas.

# Instalar y cargar paquetes
install.packages("jpeg")
install.packages("png")
library(jpeg)
library(png)

# Cargar y mostrar una imagen JPEG
img <- readJPEG("ruta/a/la/imagen.jpg")
plot(0, 0, type = "n", axes = FALSE, xlab = "", ylab = "")
rasterImage(img, 0, 0, 1, 1)

Análisis y Procesamiento de Imágenes

Para realizar análisis más avanzados en imágenes, el paquete imager es valioso. Permite realizar operaciones como filtrado, segmentación y medición en imágenes. Este paquete facilita el tratamiento de imágenes como datos y su integración en análisis de datos más amplios.

# Instalar y cargar paquete
install.packages("imager")
library(imager)

# Leer y mostrar una imagen con imager
img <- load.image("ruta/a/la/imagen.png")
plot(img)

Visualización Interactiva

Para una visualización interactiva de imágenes, shiny es una opción destacada. Permite crear aplicaciones web interactivas donde los usuarios pueden explorar imágenes de manera dinámica.

# Instalar y cargar paquete
install.packages("shiny")
library(shiny)

# Crear aplicación Shiny para visualización interactiva de imágenes
shinyApp(
  ui = fluidPage(
    imageOutput("imagen")
  ),
  server = function(input, output) {
    output$imagen <- renderImage({
      list(src = "ruta/a/la/imagen.png",
           alt = "Imagen",
           width = 800,
           height = 600)
    }, deleteFile = FALSE)
  }
)

Manipulación de datos no estructurados(texto)

La manipulación de datos no estructurados, centrada en el texto, es esencial en el análisis de datos moderno. Se refiere al proceso de trabajar con información que no sigue una estructura fija, como documentos, artículos, correos electrónicos o cualquier otro contenido textual. La capacidad de extraer información significativa de grandes volúmenes de texto es crucial para una variedad de aplicaciones, desde comprender la opinión pública hasta el procesamiento de lenguaje natural. En el contexto de R, existen diversas herramientas y paquetes especializados que facilitan la manipulación eficiente de estos datos no estructurados.

Importancia en el Análisis de Datos

Minería de Opiniones:

La manipulación de datos no estructurados es esencial en la minería de opiniones, donde se analizan grandes cantidades de texto, como reseñas de productos o comentarios en redes sociales, para comprender la percepción de los usuarios.

Procesamiento de Lenguaje Natural (NLP):

La manipulación de datos textuales es fundamental para el NLP, que se ocupa de la interacción entre las computadoras y el lenguaje humano. Tareas como el análisis de sentimiento, la extracción de entidades y la traducción automática dependen en gran medida de la manipulación eficiente de datos textuales.

Análisis de Contenido:

En el análisis de contenido, se examinan documentos y textos para identificar patrones, temas clave y relaciones. La manipulación de datos no estructurados permite explorar y comprender estos aspectos en conjuntos de texto extensos.

Herramientas y paquetes

Tokenización

La tokenización es el proceso de dividir un texto en unidades más pequeñas, llamadas tokens. Estos tokens suelen ser palabras, pero también podrían ser frases, sílabas o incluso caracteres individuales, dependiendo del nivel de granularidad deseado. La tokenización es una etapa fundamental en el procesamiento de texto y es esencial para realizar análisis de datos textuales, como contar palabras, realizar análisis de frecuencia o preparar texto para análisis de sentimiento.

En R, el paquete tokenizers facilita la tokenización de texto. A continuación, se proporciona una explicación más detallada sobre cómo utilizar este paquete para llevar a cabo la tokenización:

#instalación del paquete
install.packages("tokenizers")
library(tokenizers)

La función principal para tokenizar palabras en el paquete tokenizers es tokenize_words(). Esta función toma un vector de texto y devuelve una lista de vectores, donde cada vector contiene las palabras tokenizadas de un elemento del vector original.

# Texto de ejemplo
texto <- "La tokenización es crucial para el análisis de texto en R."

# Tokenización de palabras
tokens_palabras <- tokenize_words(texto)
print(tokens_palabras)

Si en lugar de tokenizar palabras, deseas dividir el texto en frases, puedes utilizar la función tokenize_sentences().

# Texto de ejemplo
texto <- "¡Hola! Esto es una oración de ejemplo. ¿Cómo estás?"

# Tokenización de frases
tokens_frases <- tokenize_sentences(texto)
print(tokens_frases)

Además de las funciones predeterminadas para tokenización de palabras y frases, tokenizers permite realizar tokenización personalizada mediante expresiones regulares. Esto es útil cuando se necesita una tokenización más específica.

Ejemplo de tokenización personalizada:

# Texto de ejemplo
texto <- "Tokenización::con::expresiones:regulares"

# Tokenización personalizada usando expresiones regulares
tokens_personalizado <- unlist(tokenize_words(texto, pattern = "::|:"))
print(tokens_personalizado)

La tokenización es un paso esencial en el análisis de datos textuales, y el paquete tokenizers en R proporciona una variedad de funciones para adaptarse a diferentes necesidades. Desde la tokenización básica de palabras hasta la tokenización personalizada, este paquete es valioso para preparar datos textuales para análisis más avanzados.

Eliminación de Stopwords con tm

La eliminación de stopwords es un paso fundamental en el preprocesamiento de texto. Las stopwords son palabras comunes que generalmente no aportan significado importante al análisis de texto y, por lo tanto, se eliminan para centrarse en las palabras clave que llevan información sustantiva. En R, el paquete tm es ampliamente utilizado para realizar esta tarea y otros procesamientos de texto.

install.packages("tm")
library(tm)

El paquete tm trabaja con la estructura de datos llamada “corpus”. Un corpus es una colección de documentos de texto. Puedes crear un corpus a partir de un vector de texto o desde un directorio que contiene archivos de texto.

# Desde un Vector de Texto:
texto <- c("Este es un ejemplo de eliminación de stopwords en R.",
           "Las stopwords son palabras comunes que deben ser eliminadas.",
           "El paquete tm facilita este proceso.")

corpus <- Corpus(VectorSource(texto))

# Desde un Directorio de Archivos de Texto:
ruta <- "ruta/a/tu/directorio"

# Cargar todos los archivos de texto en el directorio
corpus <- Corpus(DirSource(ruta))

La función removeWords() se utiliza para eliminar stopwords del corpus. Puedes personalizar la lista de stopwords o utilizar listas predefinidas según el idioma.


# Eliminar stopwords en español
corpus_sin_stopwords <- tm_map(corpus, removeWords, stopwords("spanish"))
# Lista de stopwords personalizada
stopwords_personalizadas <- c("ejemplo", "palabra", "otra")

# Eliminar stopwords personalizadas
corpus_sin_stopwords <- tm_map(corpus, removeWords, stopwords_personalizadas)

Otro paso común después de la eliminación de stopwords es realizar @stemming“, que implica reducir las palabras a sus raíces. Esto ayuda a consolidar las variaciones de las palabras.

# Aplicación de stemming al corpus
corpus_stemmed <- tm_map(corpus_sin_stopwords, stemDocument)

Finalmente, puedes crear una matriz de término-documento que representa la frecuencia de las palabras en el corpus preprocesado.

tdm <- TermDocumentMatrix(corpus_stemmed)

Análisis de Sentimiento con sentimentr

El análisis de sentimiento es una técnica que permite determinar la actitud o emoción expresada en un texto. Es una herramienta valiosa en el análisis de datos textuales, ya que puede ayudar a comprender la polaridad de opiniones en reseñas de productos, comentarios en redes sociales, o cualquier otro tipo de texto donde las emociones o actitudes jueguen un papel importante. El paquete sentimentr en R es una opción útil para llevar a cabo análisis de sentimiento de manera efectiva.

install.packages("sentimentr")
library(sentimentr)

La función principal para realizar análisis de sentimiento en sentimentr es sentiment(). Esta función toma un vector de texto y devuelve una puntuación de sentimiento para cada oración, indicando si la oración tiene una connotación positiva o negativa.

# Texto de ejemplo
texto <- c("Me encanta este producto, es increíble.", "No estoy satisfecho con el servicio.")

# Realizar análisis de sentimiento
resultados_sentimiento <- sentiment(texto)
print(resultados_sentimiento)

Los resultados incluirán información sobre la polaridad del sentimiento, la puntuación de sentimiento y otras métricas relacionadas.Es común visualizar los resultados del análisis de sentimiento para obtener una comprensión más clara de las tendencias emocionales en el texto. Puedes utilizar gráficos de barras, diagramas de dispersión o cualquier otro tipo de visualización que se adapte a lo que se necesite.

###Procesamiento de Lenguaje Natural con imager y wordcloud:

El procesamiento de lenguaje natural (PLN) implica la aplicación de técnicas y métodos computacionales para que las computadoras puedan entender, interpretar y generar texto de manera similar a como lo hacen los humanos. En el contexto del análisis de datos en R, los paquetes imager y wordcloud son herramientas útiles para realizar algunas tareas específicas dentro del procesamiento de lenguaje natural, como la visualización de imágenes y la creación de nubes de palabras.

Procesamiento de Imágenes con imager

install.packages("imager")
library(imager)
# Cargar una imagen
imagen <- load.image("ruta/a/tu/imagen.jpg")

# Visualizar la imagen
plot(imagen)

Para la manipulación y análisis de Imágenes imager ofrece una variedad de funciones para manipular y analizar imágenes, como cambiar el tamaño, ajustar el brillo, aplicar filtros, etc.

# Ejemplo: Cambiar tamaño de la imagen
imagen_redimensionada <- resize(imagen, 0.5)
plot(imagen_redimensionada)

Creación de Nubes de Palabras con wordcloud

El paquete wordcloud es ampliamente utilizado para crear visualizaciones de nubes de palabras, que representan gráficamente la frecuencia de las palabras en un conjunto de texto.

install.packages("wordcloud")
library(wordcloud)
# Para  Crear una nube de palabras
texto <- "Análisis de texto con R es fascinante. R es un lenguaje de programación poderoso."

# Tokenización y creación de nube de palabras
palabras <- wordcloud(words = unlist(strsplit(texto, " ")), scale=c(3,0.5))

Se puede personalizar la apariencia de la nube de palabras ajustando parámetros como colores, fuentes y tamaños.

# Ejemplo: Personalizar la nube de palabras
wordcloud(words = palabras$word, freq = palabras$freq, scale=c(3,0.5), colors=brewer.pal(8, "Dark2"))

Ambos paquetes, imager y wordcloud, son herramientas valiosas en el análisis de datos cuando se trabaja con imágenes y texto respectivamente. El imager facilita la manipulación y análisis de imágenes, mientras que wordcloud proporciona una forma efectiva y visualmente atractiva de explorar la frecuencia de palabras en un conjunto de texto. Estas herramientas son especialmente útiles en el contexto del procesamiento de lenguaje natural y el análisis exploratorio de datos.

Visualizacion de datos

Visualizacion de datos univariados

La visualización de datos univariados se refiere a la representación gráfica y análisis de una sola variable en un conjunto de datos. El objetivo principal es comprender la distribución y las características de una variable específica sin tener en cuenta otras variables.

#Este es un ejemplo con un histograma
library(ggplot2)
data <- data.frame(x = rnorm(1000))  # Ejemplo de datos aleatorios
ggplot(data, aes(x)) +
  geom_histogram(binwidth = 0.5, fill = "blue", color = "black", alpha = 0.7) +
  labs(title = "Histograma", x = "Variable X", y = "Frecuencia")

### Visualizacion de datos bivariados Los datos bivariados son conjuntos de información que consisten en observaciones o mediciones tomadas sobre dos variables distintas para cada unidad o individuo en estudio. Cada par de observaciones está compuesto por un valor para la primera variable (llamada variable independiente o predictor) y un valor correspondiente para la segunda variable (llamada variable dependiente o respuesta).

install.packages("ggplot2")
## Warning: package 'ggplot2' is in use and will not be installed
library(ggplot2)

# Genera datos de ejemplo con dos variables
set.seed(123)
data <- data.frame(
  x = rnorm(100),
  y = 2 * rnorm(100) + 0.5 * rnorm(100)
)

# Gráfico de dispersión
ggplot(data, aes(x, y)) +
  geom_point(color = "blue", size = 3) +
  labs(title = "Gráfico de Dispersión", x = "Variable X", y = "Variable Y")

Visualización de datos bivariados multivariados.

La visualización de datos bivariados multivariados se refiere a la representación gráfica y análisis de relaciones entre más de dos variables simultáneamente. En lugar de observar solo la relación entre dos variables, como en la visualización de datos bivariados, la visualización de datos bivariados multivariados explora las interacciones y patrones entre tres o más variables en un conjunto de datos.

install.packages("ggplot2")
## Warning: package 'ggplot2' is in use and will not be installed
# Carga la biblioteca ggplot2
library(ggplot2)

# Genera datos de ejemplo con dos variables
set.seed(123)
data <- data.frame(
  x = rnorm(100),
  y = 2 * rnorm(100) + 0.5 * rnorm(100),
  category = sample(c("A", "B"), 100, replace = TRUE)
)

# Gráfico de dispersión con colores por categoría
ggplot(data, aes(x, y, color = category)) +
  geom_point(size = 3) +
  labs(title = "Gráfico de Dispersión Bivariado", x = "Variable X", y = "Variable Y", color = "Categoría")

Conclusiones

R Studio es un entorno de desarrollo integrado (IDE) diseñado específicamente para trabajar con el lenguaje de programación R, que es ampliamente utilizado en estadísticas, análisis de datos y visualización. Aquí tienes algunas conclusiones clave sobre R Studio:

Interfaz Amigable: R Studio proporciona una interfaz de usuario intuitiva y amigable que facilita la escritura, ejecución y depuración de código en R. La pantalla está dividida en paneles que muestran el script, la consola, los archivos y los gráficos, lo que facilita la organización del trabajo.

Consola Interactiva: R Studio incluye una consola interactiva que permite ejecutar comandos de R de forma inmediata y ver los resultados al instante. Esto facilita la exploración de datos y la realización de análisis iterativos.

Soporte para Gráficos: La plataforma ofrece excelentes capacidades de visualización de datos, con soporte para la generación de gráficos de alta calidad. Los usuarios pueden crear gráficos interactivos y personalizar la apariencia de los gráficos según sus necesidades.

Administración de Proyectos: R Studio facilita la gestión de proyectos al proporcionar un entorno integrado para organizar scripts, datos y resultados. Esto es particularmente útil para proyectos de análisis de datos y estadísticas más grandes.

Soporte para Paquetes: R Studio integra el manejo de paquetes de R, lo que simplifica la instalación, actualización y carga de paquetes. Esto es esencial para acceder a funcionalidades adicionales y extensiones proporcionadas por la comunidad.

Desarrollo de Aplicaciones: Permite el desarrollo de aplicaciones web interactivas a través de bibliotecas como Shiny, lo que facilita la comunicación de los resultados del análisis de datos de manera dinámica.

Integración con Git: R Studio se integra con sistemas de control de versiones como Git, lo que facilita el seguimiento de cambios en el código, la colaboración en equipo y la gestión de versiones.

Documentación y Ayuda: Ofrece herramientas integradas para la generación de documentos con R Markdown, lo que permite la creación de informes reproducibles que combinan código, resultados y narrativa.

#Análisis de conductores de Formula 1

Ruta del archivo

ruta_del_archivo <- "C:/F1Drivers_Dataset.csv"

Importación del conjunto de datos desde el archivo CSV

f1_data <- read.csv(ruta_del_archivo)

Mostramos las primeras filas del conjunto de datos

head(f1_data)
##              Driver    Nationality                        Seasons Championships
## 1       Carlo Abate          Italy                   [1962, 1963]             0
## 2  George Abecassis United Kingdom                   [1951, 1952]             0
## 3     Kenny Acheson United Kingdom                   [1983, 1985]             0
## 4 Andrea de Adamich          Italy [1968, 1970, 1971, 1972, 1973]             0
## 5    Philippe Adams        Belgium                         [1994]             0
## 6         Walt Ader  United States                         [1950]             0
##   Race_Entries Race_Starts Pole_Positions Race_Wins Podiums Fastest_Laps Points
## 1            3           0              0         0       0            0      0
## 2            2           2              0         0       0            0      0
## 3           10           3              0         0       0            0      0
## 4           36          30              0         0       0            0      6
## 5            2           2              0         0       0            0      0
## 6            1           1              0         0       0            0      0
##   Active Championship.Years Decade Pole_Rate Start_Rate Win_Rate Podium_Rate
## 1  False                      1960         0  0.0000000        0           0
## 2  False                      1950         0  1.0000000        0           0
## 3  False                      1980         0  0.3000000        0           0
## 4  False                      1970         0  0.8333333        0           0
## 5  False                      1990         0  1.0000000        0           0
## 6  False                      1950         0  1.0000000        0           0
##   FastLap_Rate Points_Per_Entry Years_Active Champion
## 1            0        0.0000000            2    False
## 2            0        0.0000000            2    False
## 3            0        0.0000000            2    False
## 4            0        0.1666667            5    False
## 5            0        0.0000000            1    False
## 6            0        0.0000000            1    False
str(f1_data)
## 'data.frame':    868 obs. of  22 variables:
##  $ Driver            : chr  "Carlo Abate" "George Abecassis" "Kenny Acheson" "Andrea de Adamich" ...
##  $ Nationality       : chr  "Italy" "United Kingdom" "United Kingdom" "Italy" ...
##  $ Seasons           : chr  "[1962, 1963]" "[1951, 1952]" "[1983, 1985]" "[1968, 1970, 1971, 1972, 1973]" ...
##  $ Championships     : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Race_Entries      : num  3 2 10 36 2 1 1 9 4 1 ...
##  $ Race_Starts       : num  0 2 3 30 2 1 1 8 4 1 ...
##  $ Pole_Positions    : num  0 0 0 0 0 0 0 1 0 0 ...
##  $ Race_Wins         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Podiums           : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Fastest_Laps      : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Points            : num  0 0 0 6 0 0 0 1.5 0 0 ...
##  $ Active            : chr  "False" "False" "False" "False" ...
##  $ Championship.Years: chr  "" "" "" "" ...
##  $ Decade            : int  1960 1950 1980 1970 1990 1950 1950 1950 1970 2020 ...
##  $ Pole_Rate         : num  0 0 0 0 0 ...
##  $ Start_Rate        : num  0 1 0.3 0.833 1 ...
##  $ Win_Rate          : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Podium_Rate       : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ FastLap_Rate      : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Points_Per_Entry  : num  0 0 0 0.167 0 ...
##  $ Years_Active      : int  2 2 2 5 1 1 1 8 4 1 ...
##  $ Champion          : chr  "False" "False" "False" "False" ...

REsumen estadístico

#  resumen estadístico del conjunto de datos
summary(f1_data)
##     Driver          Nationality          Seasons          Championships   
##  Length:868         Length:868         Length:868         Min.   :0.0000  
##  Class :character   Class :character   Class :character   1st Qu.:0.0000  
##  Mode  :character   Mode  :character   Mode  :character   Median :0.0000  
##                                                           Mean   :0.0841  
##                                                           3rd Qu.:0.0000  
##                                                           Max.   :7.0000  
##   Race_Entries     Race_Starts     Pole_Positions      Race_Wins      
##  Min.   :  1.00   Min.   :  0.00   Min.   :  0.000   Min.   :  0.000  
##  1st Qu.:  2.00   1st Qu.:  1.00   1st Qu.:  0.000   1st Qu.:  0.000  
##  Median :  7.00   Median :  5.00   Median :  0.000   Median :  0.000  
##  Mean   : 29.92   Mean   : 27.69   Mean   :  1.244   Mean   :  1.248  
##  3rd Qu.: 29.25   3rd Qu.: 26.00   3rd Qu.:  0.000   3rd Qu.:  0.000  
##  Max.   :359.00   Max.   :356.00   Max.   :103.000   Max.   :103.000  
##     Podiums         Fastest_Laps        Points           Active         
##  Min.   :  0.000   Min.   : 0.000   Min.   :   0.00   Length:868        
##  1st Qu.:  0.000   1st Qu.: 0.000   1st Qu.:   0.00   Class :character  
##  Median :  0.000   Median : 0.000   Median :   0.00   Mode  :character  
##  Mean   :  3.757   Mean   : 1.262   Mean   :  55.85                     
##  3rd Qu.:  0.000   3rd Qu.: 0.000   3rd Qu.:   8.00                     
##  Max.   :191.000   Max.   :77.000   Max.   :4415.50                     
##  Championship.Years     Decade       Pole_Rate         Start_Rate    
##  Length:868         Min.   :1950   Min.   :0.00000   Min.   :0.0000  
##  Class :character   1st Qu.:1960   1st Qu.:0.00000   1st Qu.:0.6667  
##  Mode  :character   Median :1970   Median :0.00000   Median :0.9623  
##                     Mean   :1972   Mean   :0.01147   Mean   :0.7798  
##                     3rd Qu.:1982   3rd Qu.:0.00000   3rd Qu.:1.0000  
##                     Max.   :2020   Max.   :0.55769   Max.   :1.0000  
##     Win_Rate        Podium_Rate       FastLap_Rate     Points_Per_Entry 
##  Min.   :0.00000   Min.   :0.00000   Min.   :0.00000   Min.   : 0.0000  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.: 0.0000  
##  Median :0.00000   Median :0.00000   Median :0.00000   Median : 0.0000  
##  Mean   :0.01105   Mean   :0.04139   Mean   :0.01189   Mean   : 0.4792  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.: 0.3825  
##  Max.   :0.46154   Max.   :1.00000   Max.   :0.50000   Max.   :14.1977  
##   Years_Active      Champion        
##  Min.   : 1.000   Length:868        
##  1st Qu.: 1.000   Class :character  
##  Median : 2.000   Mode  :character  
##  Mean   : 3.665                     
##  3rd Qu.: 5.000                     
##  Max.   :19.000

Columnas

#  nombres de las columnas del conjunto de datos
column_names <- colnames(f1_data)
print(column_names)
##  [1] "Driver"             "Nationality"        "Seasons"           
##  [4] "Championships"      "Race_Entries"       "Race_Starts"       
##  [7] "Pole_Positions"     "Race_Wins"          "Podiums"           
## [10] "Fastest_Laps"       "Points"             "Active"            
## [13] "Championship.Years" "Decade"             "Pole_Rate"         
## [16] "Start_Rate"         "Win_Rate"           "Podium_Rate"       
## [19] "FastLap_Rate"       "Points_Per_Entry"   "Years_Active"      
## [22] "Champion"

Diferenciamos las variables cualitativas de las cuantitativas:

# Obtener los nombres de las columnas
column_names <- colnames(f1_data)

# Inicializar vectores para variables cuantitativas y cualitativas
cuantitativas <- c()
cualitativas <- c()

# Iterar sobre las columnas y clasificarlas
for (col_name in column_names) {
  if (is.numeric(f1_data[[col_name]])) {
    # Si la columna es numérica, agregar a variables cuantitativas
    cuantitativas <- c(cuantitativas, col_name)
  } else {
    # Si la columna no es numérica, agregar a variables cualitativas
    cualitativas <- c(cualitativas, col_name)
  }
}

# Mostrar los resultados
print("Variables Cuantitativas:")
## [1] "Variables Cuantitativas:"
print(cuantitativas)
##  [1] "Championships"    "Race_Entries"     "Race_Starts"      "Pole_Positions"  
##  [5] "Race_Wins"        "Podiums"          "Fastest_Laps"     "Points"          
##  [9] "Decade"           "Pole_Rate"        "Start_Rate"       "Win_Rate"        
## [13] "Podium_Rate"      "FastLap_Rate"     "Points_Per_Entry" "Years_Active"
print("Variables Cualitativas:")
## [1] "Variables Cualitativas:"
print(cualitativas)
## [1] "Driver"             "Nationality"        "Seasons"           
## [4] "Active"             "Championship.Years" "Champion"

Estadisticos descriptivos cualitativas

summary(cuantitativas)
##    Length     Class      Mode 
##        16 character character
# Filtra solo las columnas cualitativas (caracter o factor)
cualitativas <- f1_data[, sapply(f1_data, function(x) is.character(x) || is.factor(x))]


summary(cualitativas)
##     Driver          Nationality          Seasons             Active         
##  Length:868         Length:868         Length:868         Length:868        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##  Championship.Years   Champion        
##  Length:868         Length:868        
##  Class :character   Class :character  
##  Mode  :character   Mode  :character
# Filtrar solo las columnas cualitativas (caracter o factor)
cualitativas <- f1_data[, sapply(f1_data, function(x) is.character(x) || is.factor(x))]

Estadisticos descriptivos cuantitativos

cuantitativas <- f1_data[, sapply(f1_data, is.numeric)]

summary(cuantitativas)
##  Championships     Race_Entries     Race_Starts     Pole_Positions   
##  Min.   :0.0000   Min.   :  1.00   Min.   :  0.00   Min.   :  0.000  
##  1st Qu.:0.0000   1st Qu.:  2.00   1st Qu.:  1.00   1st Qu.:  0.000  
##  Median :0.0000   Median :  7.00   Median :  5.00   Median :  0.000  
##  Mean   :0.0841   Mean   : 29.92   Mean   : 27.69   Mean   :  1.244  
##  3rd Qu.:0.0000   3rd Qu.: 29.25   3rd Qu.: 26.00   3rd Qu.:  0.000  
##  Max.   :7.0000   Max.   :359.00   Max.   :356.00   Max.   :103.000  
##    Race_Wins          Podiums         Fastest_Laps        Points       
##  Min.   :  0.000   Min.   :  0.000   Min.   : 0.000   Min.   :   0.00  
##  1st Qu.:  0.000   1st Qu.:  0.000   1st Qu.: 0.000   1st Qu.:   0.00  
##  Median :  0.000   Median :  0.000   Median : 0.000   Median :   0.00  
##  Mean   :  1.248   Mean   :  3.757   Mean   : 1.262   Mean   :  55.85  
##  3rd Qu.:  0.000   3rd Qu.:  0.000   3rd Qu.: 0.000   3rd Qu.:   8.00  
##  Max.   :103.000   Max.   :191.000   Max.   :77.000   Max.   :4415.50  
##      Decade       Pole_Rate         Start_Rate        Win_Rate      
##  Min.   :1950   Min.   :0.00000   Min.   :0.0000   Min.   :0.00000  
##  1st Qu.:1960   1st Qu.:0.00000   1st Qu.:0.6667   1st Qu.:0.00000  
##  Median :1970   Median :0.00000   Median :0.9623   Median :0.00000  
##  Mean   :1972   Mean   :0.01147   Mean   :0.7798   Mean   :0.01105  
##  3rd Qu.:1982   3rd Qu.:0.00000   3rd Qu.:1.0000   3rd Qu.:0.00000  
##  Max.   :2020   Max.   :0.55769   Max.   :1.0000   Max.   :0.46154  
##   Podium_Rate       FastLap_Rate     Points_Per_Entry   Years_Active   
##  Min.   :0.00000   Min.   :0.00000   Min.   : 0.0000   Min.   : 1.000  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.: 0.0000   1st Qu.: 1.000  
##  Median :0.00000   Median :0.00000   Median : 0.0000   Median : 2.000  
##  Mean   :0.04139   Mean   :0.01189   Mean   : 0.4792   Mean   : 3.665  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.: 0.3825   3rd Qu.: 5.000  
##  Max.   :1.00000   Max.   :0.50000   Max.   :14.1977   Max.   :19.000

MANEJO DE DATOS

###Identificación y manejo de datos missing

VerificaCION de si hay datos faltantes en todo el conjunto de datos

any_missing <- any(is.na(f1_data))

Conteo del número de datos faltantes por columna

missing_per_column <- colSums(is.na(f1_data))

columnas con datos faltantes y la cantidad de valores faltantes

print(missing_per_column[missing_per_column > 0])
## named numeric(0)

Identificación y manejo de datos outlier e inconsistentes.

Identificación de las filas con outliers en al menos una columna

outliers <- apply(f1_data, 1, function(row) {
  numeric_values <- sapply(row, function(x) {
    if (is.numeric(x) && is.finite(x)) {
      return(x)
    } else {
      return(NA)
    }
  })
  
  # Verifica si hay NAs después de la coerción
  if (any(is.na(numeric_values))) {
    return(FALSE)
  }
  
  # Calcula el rango intercuartílico y mediana después de manejar valores no numéricos(trabajamos con esllo)
  iqr_row <- IQR(numeric_values, na.rm = TRUE)
  median_row <- median(numeric_values, na.rm = TRUE)
  
  # Verificación
  any(abs(numeric_values - median_row) > outlier_threshold * iqr_row)
})


outliers_rows <- which(outliers)
print(outliers_rows)
## integer(0)

#Visualización de datos ## Race_wins

# Histograma de Race_Wins
hist(f1_data$Race_Wins, main="Histograma de Race_Wins", xlab="Número de Victorias", col="lightblue", border="black")

# Boxplot de Race_Wins
boxplot(f1_data$Race_Wins, main="Boxplot de Race_Wins", ylab="Número de Victorias", col="lightblue", border="black")

Gráfico de Dispersión entre “Podiums” y “Race_Wins”

# Gráfico de Dispersión
plot(f1_data$Podiums, f1_data$Race_Wins, main="Gráfico de Dispersión", xlab="Podiums", ylab="Race_Wins", col="blue")

##Nacionalidad

barplot(table(f1_data$Nationality), main="Gráfico de Barras para Nationality", xlab="País", ylab="Frecuencia", col="lightblue")

# Diagrama de Mosaico
mosaicplot(table(f1_data$Decade, f1_data$Champion), main="Diagrama de Mosaico", color=TRUE)

Gráfico de Dispersión entre Podium_Rate y FastLap_Rate

plot(f1_data$Podium_Rate, f1_data$FastLap_Rate, 
     main="Gráfico de Dispersión entre Podium_Rate y FastLap_Rate",
     xlab="Podium_Rate", ylab="FastLap_Rate", col="blue", pch=16)