# Mevcut çalışma dizinini gösterir.
getwd()[1] "D:/GitHub/r-programlama/chapters/01-giris"
Veri analizi çoğu zaman R içinde veri üretmekle başlamaz. Gerçek çalışma akışında veri genellikle dış bir kaynaktan gelir: CSV dosyası, Excel çalışma kitabı, metin dosyası, kurum içi sistemden alınmış çıktı veya başka bir yazılım tarafından oluşturulmuş tablo.
Bu nedenle R öğrenirken yalnızca veri yapıları, fonksiyonlar ve kontrol yapıları bilmek yeterli değildir. Veriyi R ortamına doğru biçimde alabilmek ve analiz sonucunda elde edilen çıktıları uygun formatta dışarı aktarabilmek de temel bir beceridir.
Bu bölümde şu konular ele alınacaktır:
Bu bölümde kullanılan örnekler küçük ve yapay veri setleri üzerinden ilerleyecektir. Bunun nedeni, konunun özünü dosya okuma-yazma mantığı üzerinden anlatmaktır. Gerçek veri setleri daha sonraki veri manipülasyonu, keşifçi veri analizi ve modelleme bölümlerinde daha anlamlı hale gelecektir.
Bu bölümde amaç büyük veri setleriyle çalışmak değil, dosya okuma ve yazma mantığını sağlam biçimde öğrenmektir. Gerçek veriyle çalışırken karşılaşılan sorunların önemli bir kısmı aslında burada anlatılan temel konularla ilgilidir.
Dosya yanlış okunursa analiz de yanlış başlar. Örneğin sayısal bir değişken character olarak okunmuşsa ortalama hesaplanamaz. Tarih değişkeni yanlış biçimde okunmuşsa zaman serisi analizi hatalı sonuç verebilir. Ondalık ayracı yanlış yorumlanmışsa değerler olduğundan tamamen farklı görünebilir.
Bu nedenle veri okuma işlemi yalnızca teknik bir dosya açma işlemi değildir. Veri analizinin ilk kalite kontrol adımıdır.
Gerçek veri çalışmalarında şu sorunlar çok sık görülür:
Bu sorunlar başlangıçta küçük görünse de analiz ilerledikçe daha büyük problemlere yol açabilir.
R’de bir dosyayı okuyabilmek için dosyanın nerede bulunduğunu belirtmek gerekir. Bunun için dosya yolu kullanılır. Dosya yolu, bilgisayardaki bir dosyanın konumunu gösterir.
Windows işletim sisteminde bir dosya yolu şöyle olabilir:
C:/Users/Fatih/Documents/veri.csv
Mac veya Linux sistemlerinde ise yol yapısı genellikle şu şekildedir:
/home/fatih/projeler/veri.csv
R’de dosya yollarında ters bölü \ yerine düz bölü / kullanmak daha güvenlidir. Çünkü \ karakteri R içinde özel anlamlara sahip olabilir.
Windows dosya yollarını R içinde yazarken C:\Users\... biçimi sorun çıkarabilir. Bunun yerine C:/Users/... biçimini kullanmak daha güvenlidir.
Mevcut çalışma dizinini görmek için getwd() kullanılır.
# Mevcut çalışma dizinini gösterir.
getwd()[1] "D:/GitHub/r-programlama/chapters/01-giris"
Çalışma dizini, R’nin göreli dosya yollarını hangi klasöre göre yorumladığını belirler. Örneğin çalışma dizininde datasets adlı bir klasör varsa, bu klasördeki veri.csv dosyasına şöyle erişilebilir:
read.csv("datasets/veri.csv")Bu tür yollara göreli dosya yolu denir. Göreli yollar, projeyi başka bir bilgisayara taşıdığınızda daha esnek çalışır.
Projelerde mümkün olduğunca göreli dosya yolları kullanmak iyi bir alışkanlıktır. Böylece proje klasörü başka bir bilgisayara taşındığında kodların çalışması kolaylaşır.
Bu bölümde dışa aktarma ve içe aktarma işlemlerini göstermek için küçük bir örnek veri seti oluşturacağız. Böylece okuyacağımız dosyaları önce R içinde oluşturup sonra yeniden okuyabileceğiz.
# Örnek bir veri çerçevesi oluşturalım.
ogrenciler <- data.frame(
id = 1:5,
ad = c("Ali", "Ayşe", "Mehmet", "Zeynep", "Elif"),
bolum = c("İstatistik", "Matematik", "İstatistik", "Ekonomi", "Matematik"),
not = c(78.5, 92.0, 65.5, 88.0, 74.5),
gecti = c(TRUE, TRUE, FALSE, TRUE, TRUE)
)
ogrencilerBu veri seti farklı veri tiplerini içerir:
id: sayısal kimlik değişkeni,ad: metin değişkeni,bolum: kategorik nitelikte metin değişkeni,not: ondalıklı sayısal değişken,gecti: mantıksal değişken.Bu çeşitlilik dosya okuma-yazma işlemlerinde veri tiplerinin nasıl değişebileceğini gözlemlemek için faydalıdır.
CSV, Comma-Separated Values ifadesinin kısaltmasıdır. Türkçeye “virgülle ayrılmış değerler” olarak çevrilebilir. Ancak pratikte CSV dosyalarında ayraç her zaman virgül olmak zorunda değildir. Bazı ülkelerde ve yazılımlarda noktalı virgül ; kullanımı da oldukça yaygındır.
CSV dosyaları düz metin dosyalarıdır. Bu nedenle farklı yazılımlar arasında veri taşımak için sık kullanılır.
Bir CSV dosyasının içeriği kabaca şöyle görünür:
id,ad,bolum,not,gecti
1,Ali,İstatistik,78.5,TRUE
2,Ayşe,Matematik,92.0,TRUE
Burada ilk satır değişken adlarını, sonraki satırlar ise gözlemleri temsil eder.
R’de bir veri çerçevesini CSV dosyasına yazmak için base R içinde yer alan write.csv() fonksiyonu kullanılabilir.
Render sırasında bilgisayarınızdaki proje klasörüne dosya yazılmasını istemediğimiz için örneklerde geçici bir klasör kullanacağız. Gerçek projelerde ise genellikle data/, datasets/ veya outputs/ gibi proje klasörleri tercih edilir.
# Geçici klasör içinde dosya yolu oluşturalım.
csv_yolu <- file.path(tempdir(), "ogrenciler.csv")
# Veri çerçevesini CSV dosyasına yazalım.
# row.names = FALSE satır isimlerinin ayrı bir sütun olarak yazılmasını engeller.
write.csv(ogrenciler, file = csv_yolu, row.names = FALSE)
# Dosyanın oluşturulup oluşturulmadığını kontrol edelim.
file.exists(csv_yolu)[1] TRUE
file.path() fonksiyonu işletim sisteminden bağımsız dosya yolu oluşturmak için kullanılır. Windows, Mac ve Linux farklı dosya yolu ayraçları kullanabildiği için bu fonksiyon daha güvenli bir yaklaşımdır.
Dosya yolu oluştururken paste() yerine file.path() kullanmak daha güvenlidir. Çünkü file.path() işletim sistemine uygun klasör ayıracını kendisi kullanır.
CSV dosyasını okumak için read.csv() kullanılabilir.
# CSV dosyasını okuyalım.
ogrenciler_csv <- read.csv(csv_yolu)
ogrenciler_csvOkunan verinin yapısını inceleyelim.
# Veri tiplerini ve yapıyı kontrol edelim.
str(ogrenciler_csv)'data.frame': 5 obs. of 5 variables:
$ id : int 1 2 3 4 5
$ ad : chr "Ali" "Ayşe" "Mehmet" "Zeynep" ...
$ bolum: chr "İstatistik" "Matematik" "İstatistik" "Ekonomi" ...
$ not : num 78.5 92 65.5 88 74.5
$ gecti: logi TRUE TRUE FALSE TRUE TRUE
Veriyi okuduktan sonra ilk yapılması gereken işlemlerden biri yapıyı kontrol etmektir. Çünkü dosya okuma işlemi başarılı görünse bile değişken tipleri beklediğiniz gibi olmayabilir.
read.csv() Fonksiyonunun Temel Argümanlarıread.csv() fonksiyonunda sık kullanılan bazı argümanlar şunlardır:
| Argüman | Anlamı |
|---|---|
file |
Okunacak dosyanın yolu |
header |
İlk satır değişken adlarını içeriyor mu? |
sep |
Sütun ayıracı |
dec |
Ondalık işareti |
stringsAsFactors |
Metin değişkenleri factor olarak okunsun mu? |
fileEncoding |
Dosyanın karakter kodlaması |
Örneğin:
# Varsayılan olarak ilk satır değişken adları kabul edilir.
read.csv(csv_yolu, header = TRUE)R’nin eski sürümlerinde character değişkenlerin otomatik factor olarak okunması önemli bir konuydu. R 4.0.0 ve sonrasında varsayılan davranış değişmiştir; character değişkenler artık otomatik olarak factor yapılmaz.
R 4.0.0 öncesinde read.csv() character değişkenleri varsayılan olarak factor’a çevirebiliyordu. Güncel R sürümlerinde bu davranış değişmiştir. Yine de eski kodları okurken bu ayrıntıya dikkat etmek gerekir.
CSV dosyalarında sütunlar genellikle virgül ile ayrılır. Ancak özellikle Türkçe bölgesel ayarlarda Excel tarafından üretilen CSV dosyalarında noktalı virgül ; sık görülür.
Noktalı virgül ile ayrılmış bir dosya oluşturalım.
# Noktalı virgül ile ayrılmış CSV dosyası oluşturalım.
csv2_yolu <- file.path(tempdir(), "ogrenciler_noktali_virgul.csv")
write.table(
ogrenciler,
file = csv2_yolu,
sep = ";",
dec = ",",
row.names = FALSE
)
file.exists(csv2_yolu)[1] TRUE
Bu dosyada sütun ayıracı ;, ondalık işareti ise , olarak yazılmıştır. Böyle dosyaları okumak için read.csv2() kullanılabilir.
# read.csv2() varsayılan olarak sep = ";" ve dec = "," kabul eder.
ogrenciler_csv2 <- read.csv2(csv2_yolu)
ogrenciler_csv2Aynı işlem read.table() ile açık argümanlar yazılarak da yapılabilir.
# Aynı dosyayı read.table() ile okuyalım.
read.table(
csv2_yolu,
header = TRUE,
sep = ";",
dec = ","
)CSV dosyası beklediğinizden farklı okunuyorsa ilk kontrol etmeniz gereken şeyler ayraç (sep) ve ondalık işareti (dec) olmalıdır.
Türkçe Excel çıktılarında ondalık işareti çoğu zaman virgül , olabilir. R ise birçok durumda ondalık işareti olarak nokta . bekler.
Örneğin aşağıdaki değerler Türkçe biçimde yazılmıştır:
78,5
92,0
65,5
Eğer bu değerler yanlış okunursa sayısal değil character olarak gelebilir. Bu nedenle dosyanın hangi ondalık işaretini kullandığını bilmek önemlidir.
# read.csv2() Türkçe/Avrupa tipi CSV dosyaları için pratiktir.
str(ogrenciler_csv2)'data.frame': 5 obs. of 5 variables:
$ id : int 1 2 3 4 5
$ ad : chr "Ali" "Ayşe" "Mehmet" "Zeynep" ...
$ bolum: chr "İstatistik" "Matematik" "İstatistik" "Ekonomi" ...
$ not : num 78.5 92 65.5 88 74.5
$ gecti: logi TRUE TRUE FALSE TRUE TRUE
not değişkeninin sayısal olarak okunup okunmadığını kontrol edelim.
class(ogrenciler_csv2$not)[1] "numeric"
Türkçe karakter içeren dosyalarda karakter kodlama sorunu görülebilir. Örneğin İstatistik, Ayşe, Zeynep gibi metinler bozuk görünebilir.
Bu tür sorunlar genellikle dosyanın hangi kodlama ile kaydedildiği ve R’nin dosyayı hangi kodlama ile okuduğu arasındaki uyumsuzluktan kaynaklanır.
Sık karşılaşılan kodlamalar:
UTF-8Windows-1254ISO-8859-9Dosya okurken fileEncoding argümanı kullanılabilir.
# UTF-8 kodlamalı bir dosyayı okuma
read.csv("datasets/veri.csv", fileEncoding = "UTF-8")
# Windows Türkçe kodlaması ile kaydedilmiş dosyayı okuma
read.csv("datasets/veri.csv", fileEncoding = "Windows-1254")Yeni projelerde mümkün olduğunca UTF-8 kodlaması kullanmak daha sağlıklı ve taşınabilir bir yaklaşımdır.
read.table() ile Daha Genel Okumaread.csv() aslında read.table() fonksiyonunun özel bir kullanım biçimi olarak düşünülebilir. Daha esnek dosya okuma işlemleri için read.table() kullanılabilir.
# read.table() ile CSV okuma
read.table(
csv_yolu,
header = TRUE,
sep = ","
)read.table() özellikle ayraç karakterini, ondalık işaretini, başlık bilgisini ve veri tiplerini açıkça kontrol etmek istediğiniz durumlarda faydalıdır.
readr Paketi ile Veri OkumaBase R fonksiyonları yeterli olsa da modern R kullanımında readr paketi sık tercih edilir. readr, tidyverse ekosisteminin bir parçasıdır ve veri okuma işlemlerinde hızlı, tutarlı ve okunabilir fonksiyonlar sunar.
CSV dosyası okumak için read_csv() kullanılabilir.
# readr paketi yüklü değilse önce kurulmalıdır.
# install.packages("readr")
library(readr)
# read_csv() virgül ayracına sahip CSV dosyalarını okur.
ogrenciler_readr <- read_csv(csv_yolu, show_col_types = FALSE)
ogrenciler_readrreadr fonksiyonları genellikle tibble döndürür. Tibble, veri çerçevesinin modern ve daha düzenli yazdırma davranışına sahip bir türüdür.
class(ogrenciler_readr)[1] "spec_tbl_df" "tbl_df" "tbl" "data.frame"
Noktalı virgül ile ayrılmış dosyalar için read_csv2() kullanılabilir.
# read_csv2() sep = ";" ve dec = "," yapısındaki dosyalar için uygundur.
read_csv2(csv2_yolu, show_col_types = FALSE)Base R fonksiyonları veri çerçevesi döndürürken, readr fonksiyonları genellikle tibble döndürür. Tibble, tidyverse ekosisteminde yaygın kullanılan modern veri çerçevesi biçimidir.
readr ile Değişken Tiplerini Kontrol EtmeDosya okuma sırasında değişken tipleri otomatik tahmin edilir. Ancak bazı durumlarda bu tahminler yanlış olabilir. readr paketinde col_types argümanı ile değişken tipleri açıkça belirtilebilir.
# Değişken tiplerini açıkça belirterek okuma
ogrenciler_tipli <- read_csv(
csv_yolu,
col_types = cols(
id = col_integer(),
ad = col_character(),
bolum = col_character(),
not = col_double(),
gecti = col_logical()
)
)
ogrenciler_tipliBu kullanım daha uzun görünse de özellikle kritik veri setlerinde oldukça faydalıdır. Çünkü dosya okuma aşamasında veri tiplerini kontrol altına alır.
Excel dosyaları veri paylaşımında çok yaygındır. Ancak Excel dosyaları CSV dosyalarına göre daha karmaşık yapılardır. Bir Excel dosyasında birden fazla sayfa, biçimlendirme, formül, boş satır ve açıklama alanı bulunabilir.
R’de Excel dosyalarını okumak için en yaygın paketlerden biri readxl paketidir.
# readxl paketi yüklü değilse önce kurulmalıdır.
# install.packages("readxl")
library(readxl)readxl paketi örnek Excel dosyaları ile birlikte gelir. Bu sayede dışarıdan dosya indirmeden örnek yapabiliriz.
# readxl paketindeki örnek Excel dosyasının yolu
excel_yolu <- readxl_example("datasets.xlsx")
excel_yolu[1] "C:/Users/mfati/AppData/Local/R/win-library/4.4/readxl/extdata/datasets.xlsx"
Excel dosyasındaki sayfaları görmek için excel_sheets() kullanılır.
# Excel dosyasındaki sayfa adları
excel_sheets(excel_yolu)[1] "iris" "mtcars" "chickwts" "quakes"
Belirli bir sayfayı okumak için read_excel() kullanılır.
# İlk sayfayı okuyalım.
excel_veri <- read_excel(excel_yolu, sheet = "iris")
head(excel_veri)read_excel() fonksiyonunda sık kullanılan bazı argümanlar şunlardır:
| Argüman | Anlamı |
|---|---|
path |
Excel dosyasının yolu |
sheet |
Okunacak sayfa |
range |
Okunacak hücre aralığı |
skip |
Atlanacak satır sayısı |
col_names |
İlk satır sütun adları mı? |
col_types |
Sütun tipleri |
Örneğin ilk birkaç satırı atlamak için:
read_excel("datasets/veri.xlsx", sheet = "Sayfa1", skip = 2)Belirli bir hücre aralığını okumak için:
read_excel("datasets/veri.xlsx", range = "A1:D20")Excel dosyaları çoğu zaman analiz için doğrudan hazır değildir. Boş satırlar, birleşik hücreler, açıklama alanları ve farklı sayfa yapıları okuma sırasında sorun çıkarabilir.
Veri analizi sonunda elde edilen sonuçları dışa aktarmak da en az veri okuma kadar önemlidir. Analiz çıktıları raporlarda, sunumlarda, başka yazılımlarda veya arşivleme süreçlerinde kullanılabilir.
Dışa aktarma işlemlerinde dosya formatı amaca göre seçilmelidir.
| Amaç | Uygun format |
|---|---|
| Basit veri paylaşımı | CSV |
| Excel kullanıcılarıyla paylaşım | XLSX |
| R içinde yeniden kullanma | RDS |
| Birden fazla R nesnesini saklama | RData |
| Raporlama çıktıları | HTML, PDF, Word |
Bu bölümde temel dışa aktarma işlemlerine odaklanacağız.
Base R ile CSV yazmak için write.csv() kullanılabilir.
# Analiz sonucu gibi düşünebileceğimiz küçük bir özet tablo oluşturalım.
ozet <- data.frame(
bolum = c("İstatistik", "Matematik", "Ekonomi"),
ortalama_not = c(72.0, 83.25, 88.0)
)
ozetBu tabloyu CSV olarak yazalım.
# Geçici klasörde çıktı dosyası oluşturalım.
ozet_yolu <- file.path(tempdir(), "bolum_ozet.csv")
# CSV olarak yazalım.
write.csv(ozet, file = ozet_yolu, row.names = FALSE)
file.exists(ozet_yolu)[1] TRUE
readr ile CSV yazmak için write_csv() kullanılabilir.
# readr ile CSV yazma
write_csv(ozet, ozet_yolu)CSV ve Excel dosyaları farklı yazılımlar arasında veri taşımak için kullanışlıdır. Ancak bir R nesnesini daha sonra yine R içinde aynı haliyle kullanmak istiyorsak RDS formatı oldukça kullanışlıdır.
RDS dosyaları tek bir R nesnesini saklar. Veri tipleri, sütun yapıları ve nesne özellikleri daha iyi korunur.
# RDS dosyası yolu oluşturalım.
rds_yolu <- file.path(tempdir(), "ogrenciler.rds")
# R nesnesini RDS olarak kaydedelim.
saveRDS(ogrenciler, rds_yolu)
file.exists(rds_yolu)[1] TRUE
RDS dosyasını okumak için readRDS() kullanılır.
# RDS dosyasını yeniden okuyalım.
ogrenciler_rds <- readRDS(rds_yolu)
ogrenciler_rdsRDS formatının önemli avantajı, R nesnesinin yapısını korumasıdır.
str(ogrenciler_rds)'data.frame': 5 obs. of 5 variables:
$ id : int 1 2 3 4 5
$ ad : chr "Ali" "Ayşe" "Mehmet" "Zeynep" ...
$ bolum: chr "İstatistik" "Matematik" "İstatistik" "Ekonomi" ...
$ not : num 78.5 92 65.5 88 74.5
$ gecti: logi TRUE TRUE FALSE TRUE TRUE
Bir veri setini yalnızca R içinde tekrar kullanacaksanız RDS formatı çoğu zaman CSV’den daha güvenli ve pratiktir.
RData dosyaları birden fazla R nesnesini aynı dosyada saklamak için kullanılabilir. save() fonksiyonu ile nesneler kaydedilir, load() fonksiyonu ile geri yüklenir.
# Birkaç nesne oluşturalım.
a <- 1:5
b <- letters[1:5]
rdata_yolu <- file.path(tempdir(), "nesneler.RData")
# a ve b nesnelerini aynı dosyaya kaydedelim.
save(a, b, file = rdata_yolu)
file.exists(rdata_yolu)[1] TRUE
Yüklemek için:
# RData dosyasını yükler.
load(rdata_yolu)RData kullanışlıdır; ancak load() fonksiyonu nesneleri doğrudan çalışma ortamına yükler. Bu nedenle büyük projelerde bazen kontrolü zorlaştırabilir.
load() fonksiyonu dosya içindeki nesneleri doğrudan çalışma ortamına ekler. Hangi nesnelerin yükleneceğini bilmediğiniz dosyalarda dikkatli olunmalıdır.
Veri okuma-yazma işlemlerinde dosya ve klasör kontrolleri önemlidir. Bir dosyanın var olup olmadığını kontrol etmek için file.exists() kullanılır.
file.exists(csv_yolu)[1] TRUE
Bir klasör oluşturmak için dir.create() kullanılabilir.
# Geçici klasör içinde outputs adlı klasör oluşturalım.
output_klasoru <- file.path(tempdir(), "outputs")
# Klasör yoksa oluşturulur.
if (!dir.exists(output_klasoru)) {
dir.create(output_klasoru)
}
dir.exists(output_klasoru)[1] TRUE
Bu tür kontroller özellikle otomatik rapor üretiminde önemlidir.
Veri projelerinde dosya yönetimi yalnızca teknik bir ayrıntı değildir. Projenin sürdürülebilirliği açısından kritik bir konudur.
Basit bir proje yapısı şöyle olabilir:
proje/
├── data/
│ ├── raw/
│ └── processed/
├── scripts/
├── outputs/
├── figures/
└── rapor.qmd
Bu yapı içinde:
data/raw/: ham veri dosyaları,data/processed/: temizlenmiş veri dosyaları,scripts/: R kodları,outputs/: analiz çıktıları,figures/: grafikler,rapor.qmd: rapor dosyasıolarak düşünülebilir.
Ham veri dosyaları mümkün olduğunca değiştirilmeden saklanmalıdır. Temizleme ve dönüştürme işlemleri sonucunda yeni dosyalar oluşturmak daha güvenli bir yaklaşımdır.
Bu bölümde öğrendiklerimizi küçük bir iş akışı üzerinde birleştirelim.
Önce örnek veriyi CSV olarak yazalım.
# Örnek veriyi geçici CSV dosyasına yazıyoruz.
vaka_csv <- file.path(tempdir(), "vaka_ogrenciler.csv")
write.csv(ogrenciler, vaka_csv, row.names = FALSE)Dosyayı yeniden okuyalım.
# CSV dosyasını okuyoruz.
vaka_veri <- read.csv(vaka_csv)
head(vaka_veri)Bölümlere göre ortalama not hesaplayalım.
# tapply() ile bölümlere göre ortalama not hesaplıyoruz.
bolum_ort <- tapply(vaka_veri$not, vaka_veri$bolum, mean)
bolum_ort Ekonomi İstatistik Matematik
88.00 72.00 83.25
Sonucu veri çerçevesine dönüştürelim.
# tapply çıktısını veri çerçevesine dönüştürelim.
bolum_ort_df <- data.frame(
bolum = names(bolum_ort),
ortalama_not = as.numeric(bolum_ort)
)
bolum_ort_dfSonucu dışa aktaralım.
# Özet sonucu CSV olarak yazalım.
sonuc_yolu <- file.path(tempdir(), "bolum_ortalama_sonuc.csv")
write.csv(bolum_ort_df, sonuc_yolu, row.names = FALSE)
file.exists(sonuc_yolu)[1] TRUE
Bu küçük iş akışı gerçek projelerde çok sık karşılaşılan temel mantığı özetler:
read.csv("C:\Users\Fatih\veri.csv")Bu kullanım sorun çıkarabilir. Daha güvenli kullanım:
read.csv("C:/Users/Fatih/veri.csv")veya proje içi göreli yol:
read.csv("data/raw/veri.csv")Virgül yerine noktalı virgül kullanılan dosyayı read.csv() ile okumak veri setinin tek sütun olarak gelmesine neden olabilir.
# Eğer dosya ; ile ayrılmışsa
read.csv2("veri.csv")Ondalık işareti virgül olan dosyalarda dec = "," belirtilmelidir.
read.table("veri.csv", header = TRUE, sep = ";", dec = ",")Kodlama sorunu varsa fileEncoding denenebilir.
read.csv("veri.csv", fileEncoding = "UTF-8")
read.csv("veri.csv", fileEncoding = "Windows-1254")row.names Argümanını UnutmakCSV dışa aktarırken row.names = FALSE yazılmazsa satır adları gereksiz bir sütun olarak dosyaya eklenebilir.
# Genellikle önerilen kullanım
write.csv(ogrenciler, csv_yolu, row.names = FALSE)Dosya okunduktan sonra mutlaka ilk satırlar ve veri yapısı kontrol edilmelidir.
head(ogrenciler_csv)str(ogrenciler_csv)'data.frame': 5 obs. of 5 variables:
$ id : int 1 2 3 4 5
$ ad : chr "Ali" "Ayşe" "Mehmet" "Zeynep" ...
$ bolum: chr "İstatistik" "Matematik" "İstatistik" "Ekonomi" ...
$ not : num 78.5 92 65.5 88 74.5
$ gecti: logi TRUE TRUE FALSE TRUE TRUE
data.frame() ile en az dört sütundan oluşan küçük bir veri seti oluşturunuz.read.csv() ile tekrar okuyunuz.str() ile inceleyiniz.write.csv() kullanarak row.names = FALSE ve row.names = TRUE seçenekleriyle ayrı ayrı yazınız. Farkı gözlemleyiniz.read.csv2() ile okuyunuz.readr::read_csv() ile bir CSV dosyası okuyunuz.readxl_example() kullanarak readxl paketindeki örnek Excel dosyalarından birini okuyunuz.# 1. Küçük bir veri seti oluşturma
veri <- data.frame(
urun = c("A", "B", "C", "D"),
satis = c(120, 150, 90, 200),
fiyat = c(10.5, 12.0, 8.5, 15.0),
aktif = c(TRUE, TRUE, FALSE, TRUE)
)
veri# 2. CSV dosyasına yazma
veri_yolu <- file.path(tempdir(), "urun_veri.csv")
write.csv(veri, veri_yolu, row.names = FALSE)
file.exists(veri_yolu)[1] TRUE
# 3. CSV dosyasını okuma
veri_okunan <- read.csv(veri_yolu)
veri_okunan# 4. Yapıyı inceleme
str(veri_okunan)'data.frame': 4 obs. of 4 variables:
$ urun : chr "A" "B" "C" "D"
$ satis: int 120 150 90 200
$ fiyat: num 10.5 12 8.5 15
$ aktif: logi TRUE TRUE FALSE TRUE
# 5. row.names farkı
yol_false <- file.path(tempdir(), "row_false.csv")
yol_true <- file.path(tempdir(), "row_true.csv")
write.csv(veri, yol_false, row.names = FALSE)
write.csv(veri, yol_true, row.names = TRUE)
readLines(yol_false, n = 3)[1] "\"urun\",\"satis\",\"fiyat\",\"aktif\""
[2] "\"A\",120,10.5,TRUE"
[3] "\"B\",150,12,TRUE"
readLines(yol_true, n = 3)[1] "\"\",\"urun\",\"satis\",\"fiyat\",\"aktif\""
[2] "\"1\",\"A\",120,10.5,TRUE"
[3] "\"2\",\"B\",150,12,TRUE"
# 6. Noktalı virgül ve virgüllü ondalık yapısı
yol_csv2 <- file.path(tempdir(), "urun_veri_csv2.csv")
write.table(veri, yol_csv2, sep = ";", dec = ",", row.names = FALSE)
read.csv2(yol_csv2)# 7. readr ile CSV okuma
library(readr)
read_csv(veri_yolu, show_col_types = FALSE)# 8. readxl örnek dosyası okuma
library(readxl)
excel_yolu <- readxl_example("datasets.xlsx")
read_excel(excel_yolu, sheet = "iris")# 9. RDS kaydetme ve okuma
rds_yolu <- file.path(tempdir(), "urun_veri.rds")
saveRDS(veri, rds_yolu)
readRDS(rds_yolu)# 10. Özet tablo oluşturma ve dışa aktarma
ozet <- data.frame(
toplam_satis = sum(veri$satis),
ortalama_fiyat = mean(veri$fiyat)
)
ozet_yolu <- file.path(tempdir(), "urun_ozet.csv")
write.csv(ozet, ozet_yolu, row.names = FALSE)
read.csv(ozet_yolu)Bu bölümde verilerin R ortamına aktarılması ve R’de oluşturulan sonuçların dışa aktarılması ele alındı. CSV, metin, Excel, RDS ve RData dosyaları üzerinde temel okuma-yazma mantığı gösterildi.
Veri okuma işlemi yalnızca dosyayı açmak değildir. Dosya yolu, ayraç karakteri, ondalık işareti, karakter kodlama ve değişken tipleri doğru yönetilmediğinde analiz süreci daha başlangıçta hatalı hale gelebilir. Bu nedenle veri okunduktan sonra head(), str() ve benzeri fonksiyonlarla mutlaka kontrol yapılmalıdır.
Dışa aktarma tarafında CSV dosyaları farklı yazılımlar arasında veri paylaşımı için kullanışlıdır. RDS formatı ise R nesnelerini yapısını koruyarak saklamak için daha uygundur. RData birden fazla nesneyi saklayebilir; ancak çalışma ortamına doğrudan nesne yüklediği için dikkatli kullanılmalıdır.
Bu bölümle birlikte kitabın R Programlamaya Giriş kısmında temel programlama araçları, veri yapıları, fonksiyonlar, kontrol yapıları, tarih-zaman işlemleri, metin işlemleri, apply ailesi ve veri içe-dışa aktarma konuları tamamlanmış oldu. Bundan sonraki bölümlerde bu temelin üzerine veri manipülasyonu, dönüştürme, birleştirme, görselleştirme ve istatistiksel analiz konuları inşa edilecektir.