Veri Manipülasyonu : Survey Monkey Anket Çalışması

Cem ÖZÇELİK
10 min readJan 8, 2022

--

Güzel bir haftasonundan merhaba. 2021'i tamamlayıp kapısını araladığımız 2022 yılının hepimiz için iyi başlangıçlar yaratmasını diliyorum öncelikle. Benim için yoğun bir döneme açılan 2022'nin ilk yazısında sizlerle basit ama fazlası ile işinizi kolaylaştırabilecek bir veri manipülasyonu çalışması gerçekleştiriyor olacağız.

Survey Monkey… dünya üzerinde çevrimiçi anket denildiğinde en kullanışlı portalların başında gelen çok güzel bir araç. Şirket içerisinde etkinliğini ölçmek istediğimiz durumları, şirket çalışanlarımızın fikrine sunarak almak istediğimiz aksiyon planlarını daha temkinli şekilde tasarlamamıza destek olabilen bir araç da diyebiliriz. Yalnızca bir şirket için karar-destek sisteminde kullanılıyor olarak da sınırlandırmamak gerekli aslında. Yani, bir kullanıcı olarak bir çalışmada anket çalışmasına başvurulmak istenildiğinde fazlası ile işimize yarayabilen oldukça kullanışlı bir platform.

Survey Monkey üzerinde açmış olduğumuz anketler kullanıcılar tarafından tamamlandıktan sonra dilerseniz portalın size hazırlamış olduğu basit istatistiksel grafiklerden yola çıkarak anketinizi sonlandırabilirsiniz ya da anket çalışmanızı .CSV veya .XLSX uzantılı bir dosya halinde indirerek birazdan uygulamalı olarak anlatacak olduğum gibi üzerinde kendi manipülasyonlarınızı gerçekleştirerek daha etkin veri analizi çalışmaları yürütebilirsiniz. Ben bu çalışmada survey monkey üzerinden almış olduğum örnek bir anket çalışması için .xlsx uzantılı dosya üzerinde önce Microsoft Excell sonrasında Jupyter Lab kullanarak veri manipülasyonu çalışması gerçekleştiriyor olacağım. Daha fazla uzatmadan uygulamamıza geçmek istiyorum.

Survey Monkey Output.xlsx

Yukarıdaki görselde de görüldüğü gibi xlsx uzantılı dosyayı ilk açtığımızda son derece kaotik bir görüntü ile karşılaşıyoruz. Dosyanın ilk satırında sorularımızı görebiliriz. İkinci satırda ise çoktan seçmeli “Sub-questions” dediğimiz alt soruları görebiliriz. Buradaki alt soru dediğimiz kısmı bir görsel ile anlatalım.

Sub-questions

Görüldüğü gibi ilk satırda “Question 5” ve “Question 6” sorularını görmekteyiz. Alt satırında ise “Response 1”, “Response 2”, “Response 3” gibi ifadelerin yer aldığı sütunlar sub-question olarak ifade edilmekte.

İlk olarak, karmaşık yapıdaki veri setimizi hangi hale getirmemiz gerektiğini de yine bir excel görseli ile gösterelim.

Desired Data

Veri setimiz yukarıdaki gösterdiğimiz bir yapıda olacak şekilde manipülasyon edilmeli. Buradaki sütunlar ise,

  • ID : Kullanıcı ID si diyebiliriz. Yani anketi dolduran her bir katılımcı için unique bir ID değeri tanımlanır ve her bir satır bir katılımcıyı temsil eder.
  • Demographic Info: Her bir katılımcının tanımlayıcı bilgileridir. Yani katılımcının mail adresi, ismi, soyismi, cinsiyeti, anket türüne göre uyruğu ya da katılımcının şirket içindeki birimi gibi bilgilerin yer aldığı bu sütun katılımcının demografik bilgilerini içerir. Bu bilgileri kullanarak veri görselleştirme araçları olan PowerBI, QlickSense , Tableau gibi araçlarda kategoriler üzerinde sınıflandırma yapılırken demografik bilgilerinden faydalanırız.
  • Question : İlk görselde görülen ve sütunlarda her birisi bir sütunu temsil eden soruların transpoze edilmiş hali ile oluşturulan bir sütundur.
  • Question+ Subquestion : Burası da yine ilk görselde yer alan ilk 2 satırın collapse edilmiş halidir diyebiliriz.
  • Answer : Kullanının Question ve Question+Subquestion satırlarına verdiği cevapları içeren sütundur.
  • Total Respondents : Soruyu cevaplayan kullanıcı sayısı
  • Same Answer : Aynı cevabı veren kullanıcı sayısı

Sonrasında ise karmaşık bir görüntüye sahip olan veri setimiz üzerinde bazı oynamalar yapalım.

Transform -1

İlk olarak veri setimizin ilk satırında bulunan Question satırını kopyalayıp Questions isimli excel sheet ine Transpoze olarak yapıştırıyoruz.

Transform -2

Yapıştırıldıktan sonra oluşan veri setimizin ilk aşamasının sonunda,

Transform -3

Görüntüsünü elde ediyoruz. Daha sonra aynı kopyalama işlemini Sub-questions sütununa da yapıyoruz ve kopyaladığımız sütunu B sütununa yine aynı şekilde transpose şeklinde yapıştırıyoruz.

Transform -4

İki soru sütununu da transpoze halinde kopyaladıktan sonra bu iki sütunu tek bir satırda birleştirecek işlemlerimize başlayalım. İlk olarak Questions sheet inin ilk sütununda bulunan boşlukları temizlemek için C sütununa bir excel formülü yazalım.

The Excel Formula For Transform
Transformed Data -5-

Yukarıdaki görselde görüldüğü gibi yapmak istediğimiz işlem tam olarak gerçekleşmedi.Bunun sebebi ise yazmış olduğumuz excel formülünden kaynaklanmakta. Yani yazdığımız kod, “A2 hücresi boş değilse A2 yi yaz eğer A2 boşsa A1 hücresini yaz” manasına gelmektedir. Bu hatalı bir formüldür çünkü, ilk sorularımız olan Respondent ID gibi satırlarda kod başarılı çalışabilir ancak Question 5 den sonraki satırlarda kod görüldüğü gibi 0 değerini döndürmektedir. Bunun sebebi ise Question 5 değerinin olduğu A21 hücresi boş değildir dolayısı ile A2 yazdırılmıştır. Altındaki A22 hücresi ise boştur ve boş olduğunda A22 hücresi yazdırıldığı için 0 değerini çıktı olarak vermektedir. Bu durumu düzeltmek için excel kodumuzu düzeltelim.

Right Excel Formula for transform

Yazdığımız excell kodunu düzelttik ve veri setimiz artık soruların ard arda geleceği şekilde düzenlendi.

Transformed Data -6-

Aynı excel formülünü Raw_Subquestion sütunu için de yazalım.

Same formula for another questıon column

Son olarak sorularımızın olduğu Questions ve alt soruların olduğu Sub_Questions sütunlarını concat işlemi yapabilmek için birleştiriyoruz.

Transformed Data -7-

Veri setimizde bulunan karmaşık yapıyı büyük oranda düzelttik. İlk aşamada nasıldık ve şimdi nasılız bir bakalım.

Before the Transform

Bu görselde veri setimizdeki sütun başlıklarının ne denli karmaşık bir halde olduğunu görebiliriz. Yani, Question4 sonrasında gelen boşluk ve Question5 sonrasında gelen 5 boşluk fazlası ile üzerinde analitik süreç yürütmek için zor durumda idi. Son halinde ise

After the Transform

Her bir soru ve ana soruya ait alt soruları sütun başlığı olarak tutan karmaşıklıktan uzak bir veri seti elde ettik. Tüm bunları normalde python ile de yapabilirdik ancak basit ve hızlı bir şekilde üstesinden gelmek var iken kod blokları ile uğraşmak zaman kaybı olurdu.

Transform işlemlerimizi hallettikten sonra veri setimizin son halini farklı kaydet ile kayıt altına alıyoruz. Sonraki işlemlerimizi Jupyter Lab kullanarak yapıyor olacağız.

Veri dönüştürme işlemlerimizden sonra Jupyter Lab ile geri kalan veri manipülasyonu işlemlerimizi de gerçekleştirerek verimizi görselleştirmeye hazır hale getireceğiz. İlk olarak ihtiyacımız olan kütüphaneleri indirelim.

Import the Libraries

Import ettiğimiz pandas kütüphanesi ile python dataframe’leri üzerinde fazlası ile hızlı ve basit şekilde işlemlerimizi gerçekleştirebiliriz. OS Kütüphanesi ile de şuanda içinde bulunduğumuz çalışma dizinini mevcuttaki çalışma dizini olarak alacak olması ve sonrasında farklı bir çalışma dizininde çalışmak istediğimizde dosyalar arasında geçiş yapmamızı kolaylaştıracağı içindir. Peki biz OS kütüphanesini bu çalışmada ne için import ettik ?Bazı iş problemlerinde bizden istenilen çalışmayı bitirdiğimiz ve raporumuzu sunduktan sonra aradan aylar geçtiğinde aynı çalışmaya geri dönüp farklı bir iş problemi üzerinde çalışmamız gerekebilir. Bu yüzden oluşturulan dosyalar arasında bağ kurabilmek yada aralarında kolay geçiş sağlamak bizim için kolaylık sağlayacaktır.

Kütüphanelerimizi import ettikten sonra veri setimizi import edebiliriz.

Import the Dataset

Veri setimizi import ettik.Sonrasında da veri setimizin “dataset_modified” isminde bir kopyasını alıyoruz. Bunu yapmamızın sebebi ise bazen üzerinde çalışıyor olduğumuz veri setleri oldukça büyük boyutta olabilirler .Ve veri setinin kopyasını almadan üzerinde gerçekleştirdiğimiz değişiklikler ana veri seti üzerinde gerçekleşeceği için geri dönülmesi zor olan durumlara yol açabilir. Her defasında ise yüksek boyutlu veri setinin import edilmesi oldukça uzun zaman alacağı için zaman kaybına yol açacaktır.

Veri setimizin kopyasını aldıktan sonra veri setimizde bulunan kolonların isimlerini gözlemleyelim.

The Columns for dataset

Bunu yapmamızın sebebi bazı kolonlar ile şuan için bir işlem yapmıyor olucaz bu yüzden veri setinden drop ile çıkarmamız gereklidir. Böylelikle yapmış olduğumuz işlemler daha hızlı bir şekilde gerçekleşecektir.

Bu veri setimizde ihtiyacımız olmayan kolonlar olan “‘Start Date’, ‘End Date’, ‘Email Address’,’First Name’, ‘Last Name’, ‘Custom Data 1’” kolonlarını veri setinden kaldıralım.

Drop the useless columns

Kullanışsız veri sütunlarını kaldırdıktan sonra, elimizde kalan veri sütunları,

Lifted columns after from dropped

Veri setinden kullanışsız sütunlarımızı kaldırdıktan sonra geri kalan veri setimizde unpivot işlemi yapıyor olacağız. Bunun için pandas kütüphanesinin metodlarından olan melted metodundan faydalanıyor olacağız. Burada melt fonksiyonu uygulayacağımız kısım ise kullanıcının demografik bilgilerini almak için ankette sorduğumuz ilk 8 kolona denk gelen veri seti kolonlarıdır.

Bu sorulara bir göz atalım :

Identify which division you work in : Hangi departmanda çalıştığınızı belirleyin

Which of the following best describes your position level?: Aşağıdakilerden hangisi konum seviyenizi en iyi tanımlar?

Which generation are you apart of?: Hangi kuşaktansınız?

Please select the gender in which you identify. :Lütfen cinsiyetinizi seçin

Which duration range best aligns with your tenure at your company? : Hangi süre aralığı şirketinizdeki görev sürenize en uygun?

Which of the following best describes your employment type? : Aşağıdakilerden hangisi çalışma şeklinizi en iyi tanımlıyor?

Melted Method For Unpivot

Yukarıdaki görselde melted methodunu gerçekleştirdik. Burada yapılan işlemi özet ile anlatalım, melted metodunun ilk argümanı olan id_vars ile sabit kalıcak sütunları belirtiyoruz ki bunlar yukarıda belirttiğimiz tüm veri setindeki ilk 8 sütuna denk gelmektedir. Aynı zamanda bu sütunlar anket katılımcısının demografik bilgilerini tutan kolonlardır. Sonraki argüman olan vale_vars ile de hangi sütunları unpivot ile çözeceğimizi belirtiyoruz. Bizim burada yaptığımız işlemde ilk 8 sütundan sonra gelen diğer kolonları unpivot ile çözmüş oluyoruz. Var_name ise çözdüğümüz sütunlara verilen kolon ismi yani biz ilk 8 kolondan sonrasını çözmüştük. Burada Questions+Sub_Questions değerleri yer almakta idi. Var_name ile de bu değerlerin sütunlarına isim vermiş oluyoruz. Value_name ile de kullanıcıların sorulara vermiş oldukları cevapları tutuyoruz ve bunun ismini de Answer olarak belirlemiş olduk. Bu yapıyı yazımızın başında göstermiş olduğumuz yapıdan hatırlayabilirsiniz.(Bkz.) Sonraki aşamada da her bir soruyu kaç kullanıcı cevaplamış ve sorulara aynı cevabı veren kullanıcı sayısı nedir ? sorularına cevap verebilmek için Total_Respondents ve Same_Answer kolonlarını oluşturalım.

Bu kolonları oluştururken SQL sorgularında fazlası ile karşılaşabileceğimiz join ve aggregate mantığından faydalanıyor olucaz. Bu iki yaklaşımı benimsemek bize veri analizi konusunda 2 önemli majör skill kazandırmış olacaktır. Join işlemi veri analizi dünyasında oldukça yaygın kullanılan bir işlemdir ve farklı veri setleri- veri tabloları üzerinden veriler arasında bağlantı kurmamızda bize büyük fayda sağlayan bir işlemdir. Join işlemini basit bir örnek ile anlatacak olursak, veri tabanımızda müşterilerimizin bilgilerini bir tabloda ve müşterilerimizden gelen siparişleri de farklı bir tabloda tuttuğumuzu varsayalım. Bu iki tablo arasında da her bir müşteri için unique olarak belirlenen bir ID kolonu olsun. ID kolonu üzerinde join işlemi yaparak müşterilerimizin kimlikleri ve siparişleri arasında bağlantı kurabiliriz. Sonrasında aggregate işlemi ile de müşterilerimizin siparişlerini toplalıştırdığımızda tüketim alışkanlıklarını saptayabiliriz. Verilmiş olan küçük örneğin işe yaradığını düşünerek konuyu çok saptırmamak üzere işlemlerimize geri dönelim.

Total_Respondents ve Same_Answer kolonlarını oluşturken excel dosyası içinde bulunan Questions isimli çalışma sayfasını import ediyoruz.

Import the Question Sheet

Bu veri setini de import ettikten sonra kullanışsız veri kolonlarını veri setinden silelim. Bu veri setindeki kullanışsız veri kolonları “Raw_Question” , “Raw_Subquestion” ,”Subquestion” kolonlarıdır.

Transformed Questions Sheet

Questions isimli veri setimizi de temizledikten sonra merge metodu ile iki veri setimizi Questions +Subquestions sütunu üzerinde join mantığı ile birleştirelim.

After the join

Yukarıdaki görselde bulunan dataset_merged değişkeninin eşitliğini açıklayalım. Burada bulunan left = dataset_melted ifadesi bizim unpivot ile çözümlediğimiz ilk veri setimizi ifade etmektedir. right=questions ise ikinci olarak import ettiğimiz questions çalışma sayfasına ait veri setimiz. how = “left” ifadesi ile de join işleminin çeşidi belirtilmiş oldu. Yani left join yapmış olduk. Peki left veya right join ne ifade etmektedir ? Left join, left olarak belirlemiş olduğumuz dataset_melted veri setindeki her bir veriyi alır ve right olarak belirttiğimiz questions veri setinden ise dataset_melted veri seti ile ortak olarak bulunan sütunları alır.

Join işleminden sonra ise gruplama işlemini yaparak Total_Respondents sütunu değerlerini elde edelim. Gruplama işlemi de SQL’de aggregate olarak bilinen toplulaştırma işlemidir. Buradaki mantıkta da Question1 için kaç cevap geldi ise Question1 değerinin karşısında soru için gelen cevapların sayısını gösteren değer yazdırmış oluyoruz.

Total Responses by any of question

Görselde de görüleceği gibi her bir soruya kaç kişinin yanıt verdiğini gruplamış olduk. Oluşturduğumuz bu kolonu veri setimize dahil edelim. Burada bir join işlemi daha yapıyoruz.

New look’s of the dataset-1-

Total_Respondents sütunumuzu da ekledik. Sonraki aşama da her bir soru için aynı cevabı veren kişi sayısı bilgisini tutan Same Answer veri sütununu oluşturup veri setimize dahil ediyoruz.

Same Answers Count of for Each Question

Bu sütun verilerini görüntüledikten sonra bir join işlemi daha yapıyoruz.

New Look’s of the Dataset -2-

Veri setimize ait son görünüm yukarıda görüldüğü gibidir. Bundan sonraki aşamada da demografik bilgilerimizi tutan sütunları yeniden isimlendirelim.

The Final Look’s of the Dataset

Veri setimiz üzerinde yapmamız gereken veri manipülasyonu işlemlerini yaptık. Şimdi de diğer iş zekası uygulamarında görselleştirebilmek amacı ile işlenmiş veri setimizi excel dosyası halinde export edelim.

Exportation of the Transformed data

Veri setimizi dışarı aktardık. Şimdi de veri manipülasyonu işlemleri ile dönüştürdüğümüz veri setimize bakalım.

New Dataset For Data Visualization

Çalışmamızı tamamladık. Bundan sonraki süreçte veri setimiz üzerinde görselleştirmeler yaparak veriden yola çıkıp iş değerine dönüştürme aşamalarını gerçekleştirebiliriz. Bir sonraki yazımızda görüşmek üzere.

--

--