R - Veritabanları
Veriler, İlişkisel veritabanı sistemleri normalleştirilmiş bir formatta saklanır. Bu nedenle, istatistiksel hesaplama yapmak için çok gelişmiş ve karmaşık Sql sorgularına ihtiyacımız olacak. Ancak R, MySql, Oracle, Sql server vb. Birçok ilişkisel veritabanına kolayca bağlanabilir ve onlardan bir veri çerçevesi olarak kayıtları alabilir. Veriler R ortamında mevcut olduğunda, normal bir R veri seti haline gelir ve tüm güçlü paketler ve işlevler kullanılarak işlenebilir veya analiz edilebilir.
Bu eğitimde, R'ye bağlanmak için referans veri tabanımız olarak MySql kullanacağız.
RMySQL Paketi
R, MySql veritabanı ile arasında yerel bağlantı sağlayan "RMySQL" adlı yerleşik bir pakete sahiptir. Bu paketi aşağıdaki komutu kullanarak R ortamına kurabilirsiniz.
install.packages("RMySQL")
R'yi MySql'e bağlama
Paket kurulduktan sonra, veritabanına bağlanmak için R'de bir bağlantı nesnesi oluşturuyoruz. Giriş olarak kullanıcı adı, şifre, veritabanı adı ve ana bilgisayar adını alır.
# 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)
Yukarıdaki kodu çalıştırdığımızda şu sonucu verir -
[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"
Tabloları Sorgulama
MySql'deki veritabanı tablolarını fonksiyonu kullanarak sorgulayabiliriz dbSendQuery(). Sorgu MySql'de çalıştırılır ve sonuç kümesi R kullanılarak döndürülür.fetch()işlevi. Son olarak, R'de bir veri çerçevesi olarak saklanı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)
Yukarıdaki kodu çalıştırdığımızda şu sonucu verir -
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
Filtre Maddeli Sorgu
Sonucu almak için herhangi bir geçerli seçme sorgusunu geçebiliriz.
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)
Yukarıdaki kodu çalıştırdığımızda şu sonucu verir -
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
Tablolardaki Satırları Güncelleme
Güncelleme sorgusunu dbSendQuery () işlevine ileterek bir Mysql tablosundaki satırları güncelleyebiliriz.
dbSendQuery(mysqlconnection, "update mtcars set disp = 168.5 where hp = 110")
Yukarıdaki kodu çalıştırdıktan sonra MySql Ortamında tablonun güncellendiğini görebiliriz.
Tablolara Veri Ekleme
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)"
)
Yukarıdaki kodu çalıştırdıktan sonra MySql Ortamında tabloya eklenen satırı görebiliriz.
MySql'de Tablo Oluşturma
MySql'de fonksiyonu kullanarak tablolar oluşturabiliriz dbWriteTable(). Zaten varsa tablonun üzerine yazar ve girdi olarak bir veri çerçevesi alır.
# 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)
Yukarıdaki kodu çalıştırdıktan sonra MySql Ortamında oluşturulan tabloyu görebiliriz.
MySql'de Tabloları Bırakma
Drop table deyimini dbSendQuery () 'ye ileterek MySql veritabanındaki tabloları, tablolardan veri sorgulamak için kullandığımız gibi bırakabiliriz.
dbSendQuery(mysqlconnection, 'drop table if exists mtcars')
Yukarıdaki kodu çalıştırdıktan sonra tablonun MySql Ortamına düştüğünü görebiliriz.