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.