GNU/Linux üzerinde Bash Komutları ile Veri Seti Keşfi ve Ön İşleme-2

Merhaba,

GNU/Linux komutları ile veri seti keşfi ve ön işleme yolculuğa devam ediyoruz. İlk yazımız da yaygın olarak kullanılan komutları [ wget, cat, tac, head, tail, wc, cut, tr, sort, shuf ] iris veri seti üzerinde irdelemiştik. Dilerseniz ilk yazıya buradan erişim sağlayabilirsiniz. Bugünkü içeriğe bakacak olursak;

  1. echo
  2. nl
  3. split
  4. paste
  5. uniq
  6. sed
  7. awk

shell komutlarını inceleyeceğiz. Hazırsanız başlıyoruz.

Ön Bilgi

Bu çalışmayı Ubuntu Desktop 18.04 [Bionic Beaver] https://ubuntu.com/ işletim sistemi üzerinde gerçekleştirmekteyim. Farklı bir distro ya da sürümde üzerinde aynı çıktıları alabilirsiniz. Komutlar hakkında daha fazla bilgi almak isterseniz man command ya da command –help komutlarını inceleyebilirsiniz.


echo Komutu

echo komutu; terminal üzerinde bir mesajı ekrana bastırmaya ve bir değişkene ait değeri bastırmaya yarayan bir komuttur. Örnek verecek olursak;

# Konsol üzerinde bir mesaj yazdıralım
echo "Merhaba VBO"

#Konsol üzerinde değişkenleri yazdıralım
v1="Hello GNU Linux"
echo $v1

v2=9*8
echo $((v2)) #Nümerik işlemler için paratezler dikkat!
echo komutu – 1

Case 1: Elimiz de MockPersonData.csv adında (virgül ile ayrılmış, 1000 gözlemden oluşan) bir veri seti var. Veri setininin ilk 5 satırını görmek istediğimizde:

head -n 5 MockPersonData.csv

1,Cleveland,Grafhom,Male,Triton College,Quinu,Marketing Assistant
2,Kore,McCorrie,Female,VanderCook College of Music,Cogibox,Product Engineer
3,Meris,Cosbee,Female,East Tennessee State University,Thoughtstorm,Account Executive
4,Yetta,Melross,Female,Loyola University New Orleans,Yodo,Marketing Manager
5,Der,Lyfe,Male,Instituto Politécnico de Viana do Castelo,InnoZ,Teacher

MockPersonData.csv dosyasının ilk satırına [id,first_name,last_name,gender,university,company_name,job_title] alan adlarını eklemek istiyoruz.

echo -e "first_name,last_name,gender,university,company_name,job_title" | cat - MockPersonData.csv > PersonData.csv

Not 1: Daha fazlası için man echo ya da echo –help komutlarına göz atabilirsiniz.

Not 2: sed ve awk komutları ile alan adları dosyaya yazılabilir.

echo komutu – 2

nl Komutu

man nl komutunu çalıştırdığımızda “number lines of files” yani veri setine ait satır sayısını dönecektir. Aşağıda çıktıda yukarıda eklediğimiz alan adları ile beraber 1001 satır olduğu görülmektedir.

Not : Daha fazlası için man nl ya da nl –help komutlarına göz atabilirsiniz.

nl komutu

split Komutu

split komutu ile büyük boyutlu dosyaları satır sayılarına göre yada diskteki kapladığı boyuta göre split (bölebiliriz) edebiliriz. 1001 satırdan oluşan PersonData.csv veri setimizi 250 satırlık veri setlerine bölmek için aşağıdaki komutu kullanabilirsiniz.

split -l 250 PersonData.csv PersonData_
split komutu – 1

Komutu çalıştırdıktan sonra PersonData_aa, PersonData_ab, PersonData_ac, PersonData_ad ve PersonData_ae olmak üzere 5 adet veri seti oluşacaktır. Not : Daha fazlası için man split ya da split –help komutlarına göz atabilirsiniz.

split komutu ile yapabileceğiniz bir diğer bölümlendirme ise boyut olarak bölümlendirme olacaktır.

split -b 10000 PersonData.csv PersonDataByte

Yukarıdaki komut ile PersonData.csv dosyasını 10 Kilobytes olarak parçaladık.

du -h PersonData.csv ile diskte kapladığı boyutu gördük.

ls -la PersonDataByte_* ile 10 KB’lık parçalanan dosyaları gördük.

Not : Daha fazlası için man split ya da split –help komutlarına göz atabilirsiniz.

split komutu – 2

paste Komutu

paste komutu ile birden fazla dosyayı column based olarak birleştirerek veriseti oluşturmamızı sağlar. Birleştirme yapılırken birleştirilecek dosyanın türüne göre uygun bir delimeter/seperator (örneğin csv için uygun seperator ‘,’) seçilerek birleştirme yapılmalıdır.

PersonData.csv dosyamıza id eklemek istiyoruz. Bunun için

seq 1000 > id.csv

ile 1’den 1000’e id oluşturarak id.txt dosyasına yazacağız. Ardından yazdığımız bu dosyaya id alan adını

echo -e "id" | cat - id.csv > id_number.csv

ile ekleyeceğiz.

seq ve echo komutları
paste -d ',' id_number.csv PersonData.csv > PersonData2.csv
paste komutu

Eğer satır olarak iki dosyayı alt alta eklemek isteseydik:

cat file1.csv file2.csv

Not : Daha fazlası için man paste ya da paste –help komutlarına göz atabilirsiniz.


uniq Komutu

Veri seti içerisinde tekrar eden satırları tespit etmek için uniq komutunu kullanacağız.

cat MockPersonData.csv | cut -d "," -f 3 | sort | uniq -c
uniq komutu

uniq komutunu algoritmatik bir biçimde inceleyecek olursak:

1- cat MockPersonData.csv ile dosyamızı okuyoruz. Çıktısını | pipe operatörü ile bir sonraki komuta girdi olarak sağlıyoruz.

2- cut -d “,” -f 3 komutu ile MockDataPerson.csv dosyasında 3 sütunda bulunan gender bilgisi seçiyoruz. Çıktısını | pipe operatörü ile bir sonraki komuta girdi olarak sağlıyoruz.

3- sort komutu ile gender sütunu altında yer alan gözlemleri sıralıyoruz ve | pipe komutu ile bir sonraki komuta girdi sağlıyoruz.

4- uniq -c komutu ile ilgili sütun için benzersiz gözlemler ve count bilgileri ekrana bastırılacaktır.

Not : Daha fazlası için man uniq ya da uniq –help komutlarına göz atabilirsiniz.


sed Komutu

sed komutu Stream Editör olarak bilinmektedir. sed komutu sed ‘s/old/new/g’ olarak kullanılmaktadır.

head -n 5 MockPersonData.csv

cat MockPersonData.csv | sed -i 's/Female/Kadin/g' MockPersonData.csv 

cat MockPersonData.csv | sed -i 's/Male/Erkek/g' MockPersonData.csv 

head -n 5 MockPersonData.csv
sed komutu

sed komutunu algoritmatik bir biçimde inceleyecek olursak:

1- head -n 5 PersonData.csv dosyasını okuduk

2- cat PersonData.csv | sed -i ‘s/Female/Kadin/g’ PersonData.csv komutu ile Female olan gözlemleri Kadin olarak -i parametresi ile üzerine yazılarak (inplace) MockPersonData.csv dosyasına yazdık.

3- cat PersonData.csv | sed -i ‘s/Male/Erkek/g’ PersonData.csv komutu ile Male olan gözlemleri Erkek olarak -i parametresi ile üzerine yazılarak (inplace) MockPersonData.csv dosyasına yazdık.

4- head -n 5 PersonData.csv dosyasını ile değişiklikleri gözlemledik.

Not : Daha fazlası için man sed ya da sed –help komutlarına göz atabilirsiniz.


awk Komutu

awk, Alfred Aho, Peter Weinberger ve Brian Kernighan tarafından 1977 yılında geliştirilmiş ve ilk olarak Unix Version 7 ile yayınlanmış bir programlama dilidir.

awk komutu – 1
awk -F, 'NR == 2' PersonData.csv
NR: Number of Record
-F: Value
awk -F, '$3=="Erkek" { print $1", "$2", "$3 }' PersonData.csv
-F: Value
awk komutu – 2

Veri seti üzerinde uygulanabilecek 7 adet GNU/Linux komutlarını kısaca burada paylaştık. Öncelikle söylemek isterim ki yukarıdaki komutlar özelinde ise “awk ve sed” bunlardan çok daha fazlası. Bu yüzden man command ve command –help komutlarına bir göz atın derim.

Görüş, öneri ve katkıda bulunmak isterseniz uslumetin@gmail.com üzerinden bana ulaşabilirsiniz. Görüşmek üzere, iyi haftalar ✋


Kaynaklar:

1- awk – https://tr.wikipedia.org/wiki/AWK & https://en.wikipedia.org/wiki/AWK

2- GNU – https://www.gnu.org/

3- Data Science at the Command Line – https://www.datascienceatthecommandline.com/

Yazar Hakkında
Toplam 7 yazı
Metin USLU
Metin USLU
Veri Bilimci @ LC Waikiki #Programmer #Statistician #ComEngStudent
Yorumlar (Yorum yapılmamış)

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

×

Bir Şeyler Ara