R İLE EXCEL VERİSİ OKUMA

R öğrenen öğrencinin ilk gerçek duvarı istatistik değil, şu tek satırlık hatadır: cannot open file 'veri.xlsx': No such file or directory. Dosya masaüstünde duruyor, adı doğru, ama R bulamıyor. Ders örnekleri hep hazır verilerle aktığı için bu duvar sürpriz gelir — oysa gerçek hayatta tez verisi neredeyse her zaman bir Excel dosyasında yaşar ve analizin sıfırıncı adımı o dosyayı R'a taşımaktır.
Bu yazı o adımı baştan sona yürütüyor: iki sayfalı bir Excel dosyasını okuyacak, Türkçe sütun adlarıyla başa çıkacak, en sık hataları çözecek ve okunan veriyle ilk analizi yapacağız. Örnek dosya ile script indirilebilir; tüm çıktılar gerçek çalıştırmadan.
R scriptini indir (.R) — veri: r-excel-verisi-okuma-veri.xlsx1. readxl Paketi ve Sayfaları Listeleme
install.packages("readxl") # ilk seferde bir kez
library(readxl)
excel_sheets("r-excel-verisi-okuma-veri.xlsx")
# [1] "Anket" "Ogrenciler"Excel okumada standart araç readxl'dir: hızlıdır, Excel kurulumu gerektirmez ve xls ile xlsx'in ikisini de açar. İlk refleks excel_sheets() olmalı — dosyada hangi sayfaların olduğunu görmeden okumaya girişmek, hangi sayfanın geleceğini şansa bırakmaktır. Örnek dosyamızda iki sayfa var: öğrenci notları ve anket cevapları.
2. Sayfaları Okumak
ogrenciler <- read_excel("r-excel-verisi-okuma-veri.xlsx", sheet = "Ogrenciler")
str(ogrenciler)
# tibble [12 × 4]
# $ No : num 1 2 3 4 5 6 ...
# $ Bölüm: chr "Biyoloji" "Biyoloji" "Psikoloji" ...
# $ Vize : num 58 64 71 45 80 62 ...
# $ Final: num 72 70 68 55 85 59 ...
anket <- read_excel("r-excel-verisi-okuma-veri.xlsx", sheet = "Anket")sheet parametresi sayfa adını ya da sırasını alır; yazılmazsa ilk sayfa gelir — çok sayfalı dosyalarda bunu açıkça belirtmek sürprizleri önler. str() çıktısındaki "tibble" ifadesi readxl'in modern veri çerçevesi türüdür; klasik data.frame gibi kullanılır. Kritik kontrol sütun türleridir: Vize ve Final "num" olarak gelmiş — doğru. Excel'de sayı sütununa karışmış tek bir metin hücresi (örn. "girmedi" yazılmış bir not) bütün sütunu metne çevirir; str() bu kazayı ilk bakışta yakalar.
3. Türkçe Sütun Adları Sorunu
table(ogrenciler$`Bölüm`)
# Arkeoloji Biyoloji Psikoloji
# 4 4 4
names(ogrenciler) <- c("no", "bolum", "vize", "final")Excel başlıkları gerçek hayatta Türkçe gelir: "Bölüm", "Öğrenci No", "Sınav Puanı". R bu adları okur ama boşluk veya Türkçe karakter içeren adlara erişim ters tırnak (backtick) ister — ogrenciler$`Bölüm`. Her seferinde ters tırnak yazmak yorucu ve hataya açıktır; pratik çözüm okumadan hemen sonra adları sadeleştirmektir. Toplu ve otomatik sadeleştirme için janitor paketinin clean_names() fonksiyonu da yaygın tercihtir: tüm adları küçük harfe ve alt çizgili İngilizce karakterlere çevirir.
4. "cannot open file" Hatasının Anatomisi
Hatanın sebebi neredeyse her zaman şu üçünden biridir:
- R başka klasöre bakıyor. R, dosyayı çalışma klasöründe arar;
getwd()ile nereye baktığını görün. RStudio'da kalıcı çözüm: Session > Set Working Directory > To Source File Location — script hangi klasördeyse veri de oradan okunur. Script ile veriyi aynı klasörde tutma alışkanlığı bu hatayı kökten bitirir. - Uzantı görünmüyor. Windows varsayılanı uzantıları gizler; "veri.xlsx" sandığınız dosya aslında "veri.xlsx.xlsx" olabilir. Dosya Gezgini'nde Görünüm > Dosya adı uzantıları kutusunu işaretleyin.
- Dosya adı birebir değil. Büyük-küçük harf, boşluk, Türkçe karakter farkları — "Veri.xlsx" ile "veri.xlsx" aynı dosya değildir.
İki bonus durum: başlıktan önce açıklama satırları olan dosyalarda read_excel(..., skip = 2) ilk satırları atlar; yalnızca belirli bir aralık gerekiyorsa range = "A1:D13" hücre aralığı okur — kurum raporlarındaki süslü başlıklı tablolar için birebirdir.
5. Okunan Veriyle İlk Analiz
ogrenciler$ortalama <- 0.4 * ogrenciler$vize + 0.6 * ogrenciler$final
tapply(ogrenciler$ortalama, ogrenciler$bolum, mean)
# Arkeoloji Biyoloji Psikoloji
# 69.60 75.55 59.65
Veri R'a geldikten sonra Excel'de formül sürüklemeyle yapılan her iş tek satıra iner: ağırlıklı ortalama (%40 vize + %60 final) yeni sütun olarak eklendi, bölüm bazlı ortalamalar tek komutla döküldü. Biyoloji 75.55 ile önde, Psikoloji 59.65 ile geride. Bu farkın istatistiksel olarak anlamlı olup olmadığı sorusu ise ANOVA konusudur — betimleyici tablo yalnızca durumu tarif eder.
6. CSV ile Kıyas ve Dosyalar
Excel mi CSV mi sorusunun pratik cevabı: xlsx çok sayfalı ve biçimlidir, kurum içi raporlarda yaygındır; CSV tek sayfalık düz metindir, büyük veri paylaşımının ve arşivlemenin standardıdır. R tarafında karşılıkları da ayrıdır: xlsx için read_excel(), CSV için read.csv("dosya.csv", fileEncoding = "UTF-8") — encoding parametresi Türkçe karakterlerin bozulmadan gelmesi içindir. Tez verinizi hem xlsx hem CSV olarak saklamak, on yıl sonra da açılabilirlik garantisidir.
Script ile Excel dosyasını aynı klasöre koyup çalıştırın; sayfa listesinden bölüm ortalamalarına bütün çıktıyı üreteceksiniz. Alıştırma: Anket sayfasını okuyup memnuniyet ortalamasını hesaplayın. Veri aktarımından temizliğe, analizden rapora akışın tamamını kendi verinizle kurmak için R veri analizi eğitimi uygulamalı ilerliyor; Excel tarafındaki becerileri derinleştirmek isteyenler İleri Excel eğitimine göz atabilir.
Sıkça Sorulan Sorular
readxl için bilgisayarda Excel kurulu olması gerekir mi?
Hayır — readxl dosyayı doğrudan kendisi açar; Microsoft Excel'e, Java'ya veya başka bir dış programa bağımlılığı yoktur. Bu, üniversite laboratuvarı ya da sunucu gibi Excel bulunmayan ortamlarda bile xlsx okuyabilmek demektir. Aynı sebeple hızlıdır ve platformlar arasında (Windows/Mac/Linux) aynı davranır.
cannot open file hatasını en hızlı nasıl çözerim?
Önce getwd() yazıp R'ın hangi klasöre baktığını görün; dosya orada değilse sorun budur. RStudio'da Session > Set Working Directory > To Source File Location seçmek, çalışma klasörünü scriptin bulunduğu yere alır. Kalıcı alışkanlık olarak script ile veri dosyasını hep aynı klasörde tutun — bu tek düzen, hatanın sebeplerinin çoğunu ortadan kaldırır.
Sayı olması gereken sütun metin (chr) olarak geldi; sebebi ne?
Sütunun içinde sayı olmayan en az bir hücre vardır: 'girmedi' yazısı, boşluk karakteri, ya da binlik ayracı metin olarak girilmiş değerler. readxl türü sütunun geneline bakarak tahmin eder; tek aykırı hücre tüm sütunu metne çevirir. Çözüm: Excel'de o hücreleri temizlemek veya read_excel'e col_types parametresiyle türü açıkça bildirmek.
Excel'deki tarihler R'da 45291 gibi sayılara dönüştü; nasıl düzeltirim?
Bu sayılar Excel'in tarih seri numaralarıdır — Excel tarihleri 1900'den itibaren gün sayısı olarak saklar. readxl hücre biçimi doğruysa tarihi kendisi çevirir; sayı geldiyse as.Date(45291, origin='1899-12-30') ile dönüştürülür. Origin değerindeki 30 Aralık, Excel'in tarihsel artık yıl hatasını telafi eden standart düzeltmedir.
Birden çok Excel dosyasını tek seferde okuyabilir miyim?
Evet: list.files(pattern='xlsx$') ile klasördeki tüm xlsx dosyaları listelenir, lapply(dosyalar, read_excel) hepsini okur ve dplyr'ın bind_rows() fonksiyonu tek çerçevede birleştirir. Aylık raporların birikmiş dosyalarını birleştirmek gibi işler üç satıra iner — Excel'de kopyala-yapıştır ile saatler süren işin R karşılığı budur.
R'dan Excel'e veri yazmak da mümkün mü?
Mümkün — writexl paketinin write_xlsx() fonksiyonu veri çerçevesini doğrudan xlsx olarak kaydeder; readxl gibi dış bağımlılığı yoktur. Biçimlendirme (renk, formül, hücre stili) gerekiyorsa openxlsx paketi daha zengindir. Analiz sonuç tablolarını danışmana Excel formatında göndermek için en pratik yol write_xlsx'tir.


