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;
- echo
- nl
- split
- paste
- uniq
- sed
- 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!
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.
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.
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_
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.
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.
paste -d ',' id_number.csv PersonData.csv > PersonData2.csv
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 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 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 -F, 'NR == 2' PersonData.csv NR: Number of Record -F: Value
awk -F, '$3=="Erkek" { print $1", "$2", "$3 }' PersonData.csv -F: Value
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/