R - Bases de datos

Los datos son Los sistemas de bases de datos relacionales se almacenan en un formato normalizado. Entonces, para llevar a cabo la computación estadística necesitaremos consultas Sql muy avanzadas y complejas. Pero R puede conectarse fácilmente a muchas bases de datos relacionales como MySql, Oracle, Sql server, etc. y obtener registros de ellas como un marco de datos. Una vez que los datos están disponibles en el entorno R, se convierten en un conjunto de datos R normal y se pueden manipular o analizar utilizando todos los potentes paquetes y funciones.

En este tutorial usaremos MySql como nuestra base de datos de referencia para conectarnos a R.

Paquete RMySQL

R tiene un paquete integrado llamado "RMySQL" que proporciona conectividad nativa con la base de datos MySql. Puede instalar este paquete en el entorno R usando el siguiente comando.

install.packages("RMySQL")

Conectando R a MySql

Una vez que el paquete está instalado, creamos un objeto de conexión en R para conectarnos a la base de datos. Toma el nombre de usuario, la contraseña, el nombre de la base de datos y el nombre del host como entrada.

# Create a connection Object to MySQL database.
# We will connect to the sampel database named "sakila" that comes with MySql installation.
mysqlconnection = dbConnect(MySQL(), user = 'root', password = '', dbname = 'sakila',
   host = 'localhost')

# List the tables available in this database.
 dbListTables(mysqlconnection)

Cuando ejecutamos el código anterior, produce el siguiente resultado:

[1] "actor"                      "actor_info"                
 [3] "address"                    "category"                  
 [5] "city"                       "country"                   
 [7] "customer"                   "customer_list"             
 [9] "film"                       "film_actor"                
[11] "film_category"              "film_list"                 
[13] "film_text"                  "inventory"                 
[15] "language"                   "nicer_but_slower_film_list"
[17] "payment"                    "rental"                    
[19] "sales_by_film_category"     "sales_by_store"            
[21] "staff"                      "staff_list"                
[23] "store"

Consultar las tablas

Podemos consultar las tablas de la base de datos en MySql usando la función dbSendQuery(). La consulta se ejecuta en MySql y el conjunto de resultados se devuelve usando Rfetch()función. Finalmente, se almacena como un marco de datos en R.

# Query the "actor" tables to get all the rows.
result = dbSendQuery(mysqlconnection, "select * from actor")

# Store the result in a R data frame object. n = 5 is used to fetch first 5 rows.
data.frame = fetch(result, n = 5)
print(data.fame)

Cuando ejecutamos el código anterior, produce el siguiente resultado:

actor_id   first_name    last_name         last_update
1        1         PENELOPE      GUINESS           2006-02-15 04:34:33
2        2         NICK          WAHLBERG          2006-02-15 04:34:33
3        3         ED            CHASE             2006-02-15 04:34:33
4        4         JENNIFER      DAVIS             2006-02-15 04:34:33
5        5         JOHNNY        LOLLOBRIGIDA      2006-02-15 04:34:33

Consulta con cláusula de filtro

Podemos pasar cualquier consulta de selección válida para obtener el resultado.

result = dbSendQuery(mysqlconnection, "select * from actor where last_name = 'TORN'")

# Fetch all the records(with n = -1) and store it as a data frame.
data.frame = fetch(result, n = -1)
print(data)

Cuando ejecutamos el código anterior, produce el siguiente resultado:

actor_id    first_name     last_name         last_update
1        18         DAN            TORN              2006-02-15 04:34:33
2        94         KENNETH        TORN              2006-02-15 04:34:33
3       102         WALTER         TORN              2006-02-15 04:34:33

Actualizar filas en las tablas

Podemos actualizar las filas en una tabla Mysql pasando la consulta de actualización a la función dbSendQuery ().

dbSendQuery(mysqlconnection, "update mtcars set disp = 168.5 where hp = 110")

Después de ejecutar el código anterior podemos ver la tabla actualizada en el entorno MySql.

Insertar datos en las tablas

dbSendQuery(mysqlconnection,
   "insert into mtcars(row_names, mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb)
   values('New Mazda RX4 Wag', 21, 6, 168.5, 110, 3.9, 2.875, 17.02, 0, 1, 4, 4)"
)

Después de ejecutar el código anterior, podemos ver la fila insertada en la tabla en el entorno MySql.

Crear tablas en MySql

Podemos crear tablas en MySql usando la función dbWriteTable(). Sobrescribe la tabla si ya existe y toma un marco de datos como entrada.

# Create the connection object to the database where we want to create the table.
mysqlconnection = dbConnect(MySQL(), user = 'root', password = '', dbname = 'sakila', 
   host = 'localhost')

# Use the R data frame "mtcars" to create the table in MySql.
# All the rows of mtcars are taken inot MySql.
dbWriteTable(mysqlconnection, "mtcars", mtcars[, ], overwrite = TRUE)

Después de ejecutar el código anterior, podemos ver la tabla creada en el entorno MySql.

Soltar tablas en MySql

Podemos eliminar las tablas en la base de datos MySql pasando la declaración de eliminación de la tabla a dbSendQuery () de la misma manera que la usamos para consultar datos de tablas.

dbSendQuery(mysqlconnection, 'drop table if exists mtcars')

Después de ejecutar el código anterior, podemos ver que la tabla se coloca en el entorno MySql.