
Tableau ile neden Python kullanılır
Tableau, yeni veri alanları eklemek ve oluşturmak için çeşitli seçenekler sunar. Hesaplanmış alanları kullanarak aritmetik, mantıksal, mekânsal ve kestirimsel modelleme işlevlerini gerçekleştirebilirsiniz. Tableau güçlü bir İş Zekâsı (BI) aracıdır, ancak bazı kısıtlar vardır; işte tam bu noktada Python imdadımıza yetişir.
Python, veri topluluğu içinde popüler bir programlama dilidir. Verileri çıkarmak, temizlemek, işlemek ve karmaşık istatistiksel işlevler uygulamak için kullanabilirsiniz. Makine öğrenimi çerçeveleri, veri orkestrasyonları, çok süreçli çalışma ve neredeyse her görevi gerçekleştirmeye olanak tanıyan zengin kütüphaneler sunar.
Python çok amaçlı bir dildir ve Tableau ile birlikte kullanmak son derece karmaşık görevleri yerine getirme özgürlüğü sağlar. Bu eğitimde, verileri çıkarmak ve temizlemek için Python kullanacağız. Ardından, temiz verileri Tableau'da görselleştirme oluşturmak için kullanacağız.
Tableau içinde Python betiklerini çalıştırmak için bir Tableau Python sunucusu oluşturmak üzere Tabpy kullanmayacağız. Bunun yerine, önce verileri Python'da (Jupyter Notebook) çıkarıp temizleyecek, ardından Tableau ile etkileşimli görselleştirmeler oluşturacağız.

Goodreads Veri Görselleştirmesi | Tableau Public
Bu, Goodreads API ve Tableau'da karmaşık görselleştirmeler oluşturmaya dair adım adım, kod tabanlı bir eğitimdir. Koda ve Tableau panosuna erişmek için aşağıdaki bağlantılara göz atın.
Python ile Veri Alma ve İşleme
Eğitimin ilk bölümünde, herkese açık verilere erişmek için Goodreads API'ını kullanmayı öğreneceğiz. Bizim durumumuzda, kullanıcı profiline odaklanacak ve bunu okunabilir bir Pandas veri çerçevesine dönüştüreceğiz. Ayrıca, verileri temizleyip CSV dosya formatına aktaracağız.
Başlarken
Python kodunu çalıştırmak için DataLab kullanacağız. Veri bilimi görevleri için gerekli Python paketleriyle birlikte gelir.
Python'a yeniyseniz ve yerel makinenizde ortam kurmak istiyorsanız, Anacondayı kurun. Python, Jupyter Notebook ve gerekli Python paketlerini yükler.
Kod yazmaya başlamadan önce, DataLab veya Anaconda veri yığınında yer almadığı için xmltodict paketini kurmamız gerekir. Eksik Python paketini kurmak için `pip` kullanacağız.
Not: `!` simgesi yalnızca Jupyter Notebook'larda çalışır. Jupyter kod hücresi içinden terminale erişmemizi sağlar.
!pip install xmltodict
>>> Collecting xmltodict
>>> Using cached xmltodict-0.13.0-py2.py3-none-any.whl (10.0 kB)
>>> Installing collected packages: xmltodict
>>> Successfully installed xmltodict-0.13.0
Bir sonraki adımda gerekli paketleri içe aktaracağız.
import pandas as pd
import xmltodict
import urllib.request
Profil Bağlantısını Ayrıştırma
Kullanıcı verilerini çıkarmak için hem kullanıcı kimliğine hem de kullanıcı adına ihtiyacımız var. Bu bölümde, kullanıcı (Abid) profil bağlantısını ayrıştıracağız.
Not: Arkadaşınızın profilini veya kendi profil bağlantınızı kullanabilir ve bu betiği çalıştırabilirsiniz.
- Bağlantıdaki rakamları filtreleyerek user_id'yi çıkarır ve “73376016” değerini döndürür.
- user_name'i çıkarmak için, user_id üzerinde dizeyi böler, ardından kullanıcıyı almak için “-” işaretine göre böleriz. “-” işaretlerini boşlukla değiştirince kullanıcı adı “abid” elde edilir.
- Son olarak, user_id ile user_name'i birleştiririz. Bu benzersiz kimlik, bir sonraki bölümde kullanıcı verilerine erişmek için kullanılacaktır.
Goodread_profile = "https://www.goodreads.com/user/show/73376016-abid"
user_id = ''.join(filter(lambda i: i.isdigit(), Goodread_profile))
user_name = Goodread_profile.split(user_id, 1)[1].split('-', 1)[1].replace('-', ' ')
user_id_name = user_id+'-'+user_name
print(user_id_name)
>>> 73376016-abid
Goodreads Veri Çıkarma
Goodreads, 2020'nin sonunda geliştirici API'ını sunmayı durduracaktır. Tam raporu buradan okuyabilirsiniz. Bu sorunu aşmak için, streamlit_goodreads_app gibi eski projelerden API anahtarlarını kullanacağız. Proje, API kullanarak Goodreads kullanıcı verilerine nasıl erişileceğini açıklar.
Goodreads ayrıca API anahtarı olmadan CSV dosya formatında veri indirme seçeneği de sunar, ancak bu bir kullanıcıyla sınırlıdır ve gerçek zamanlı veri çıkarmada esneklik sağlamaz.
Bu bölümde, user_id_name, version, shelf, per_page ve apiKey alanlarını alan işlevler oluşturacağız.
- apiKey: herkese açık verilere erişmek içindir
- version: en güncel veri türünü belirtmek içindir.
- shelf: Kullanıcı profilinde birden çok raf vardır, ancak çoğunlukla read, to-read ve currently-reading.
- per_page: Sayfa başına kitap girişi sayısı
İşlev, URL'yi hazırlamak için kullanıcı girdilerini alır ve ardından urllib.request kullanarak verileri indirir. Son olarak verileri XML formatında elde ederiz.
apiKey = "ZRnySx6awjQuExO9tKEJXw"
version = "2"
shelf = "read"
per_page = "200"
def get_user_data(user_id, apiKey, version, shelf, per_page):
api_url_base = "https://www.goodreads.com/review/list"
final_url = (
api_url_base
+ user_id
+ ".xml?key="
+ apiKey
+ "&v="
+ version
+ "&shelf="
+ shelf
+ "&per_page="
+ per_page
)
contents = urllib.request.urlopen(final_url).read()
return contents
contents = get_user_data(user_id_name,apiKey,version, shelf, per_page)
print(contents[0:100])
>>> b'<?xml version="1.0" encoding="UTF-8"?>\n<GoodreadsResponse>\n <Request>\n <authentication>true</aut'
XML'i JSON'a Dönüştürme
İlk verilerimiz XML formatındadır ve bunu doğrudan yapılandırılmış bir veritabanına dönüştürmenin yolu yoktur. Bu nedenle, xmltodict Python paketini kullanarak JSON'a dönüştüreceğiz.
XML verileri iç içe geçmiş JSON formatına dönüştürülür ve kitap inceleme verilerindeki ilk girdiyi göstermek için köşeli ayraçları kullanarak kapsüllenmiş verilere erişeceğiz.
Üstveriyle denemeler yapabilir ve daha fazla seçeneği keşfedebilirsiniz, ancak bu eğitimde kullanıcı inceleme verilerine odaklanacağız.
contents_json = xmltodict.parse(contents)
print(contents_json["GoodreadsResponse"]["reviews"]["review"][:1])
>>> [{'id': '4626706284', 'book': {'id': {'@type': 'integer', '#text': '57771224'}, 'isbn': '1250809606', 'isbn13': '9781250809605', 'text_reviews_count': {'@type': 'integer', '#text': '150'}, 'uri': 'kca://book/amzn1.gr.book.v3.tcNoY0o7ErAhczdQ', 'title': 'Good Intentions', 'title_without_series': 'Good Intentions', 'image_url': .........
JSON'u Pandas DataFrame'e Dönüştürme
JSON veri türünü Pandas veri çerçevesine dönüştürmek için json_normalize işlevini kullanacağız. İnceleme verileri üçüncü düzeydedir ve buna erişmek için GoodreadsResponse, reviews ve review'ı kullanacağız.
Veri çerçevesini göstermeden önce, date_updated sütunu eksik olan kitapları düşürerek ilgisiz verileri filtreleyeceğiz.
CSV dosyaları, e-tablolar, JSON, SQL veritabanları ve API'ları Pandas ile içe almanın çeşitli yollarını öğrenmek için pandas ile Kolaylaştırılmış Veri Alma kursunu alın.
df = pd.json_normalize(contents_json["GoodreadsResponse"]["reviews"]["review"])
df = df[df["date_updated"].notnull()]
df.head()

Veri Temizleme
Ham veri çerçevesi makul derecede temiz görünüyor, ancak yine de sütun sayısını azaltmamız gerekiyor.
Gördüğünüz gibi 61 sütun var.
df.shape
(200, 61)
Boş olanları düşürelim.
df.dropna(axis=1, how='all', inplace=True)
df.shape
(200, 58)
Eksik değerlere sahip 3 sütunu başarıyla düşürdük.
Şimdi `df.columns` kullanarak tüm sütun adlarını kontrol edecek ve en kullanışlı sütunları seçeceğiz.
final_df = df[
[
"rating",
"started_at",
"read_at",
"date_added",
"book.title",
"book.average_rating",
'book.ratings_count',
"book.publication_year",
"book.authors.author.name"
]
]
final_df.head()
Gözlemlediğimiz üzere, nihai veri çerçevesi ilgili veri alanlarıyla temiz görünüyor.

CSV Dosyası Dışa Aktarma
Son bölümde, veri çerçevesini Tableau ile uyumlu bir CSV dosyasına aktaracağız. to_csv işlevinde, dosya adını uzantı türüyle birlikte ekleyin ve index argümanını False yaparak indeksi kaldırın.
final_df.to_csv("abid_goodreads_clean_data.csv",index=False)
CSV dosyası mevcut dizinde görünecektir.

Goodreads Temiz CSV Dosyası
Python Jupyter Notebook'a da göz atabilirsiniz: Goodreads API kullanarak Veri Alma. Kodunuzu hata ayıklamanıza yardımcı olur; ayrıca Python programlama kısmını atlamak isterseniz, Copy & Edit düğmesine tıklayıp betiği çalıştırarak dosyayı doğrudan indirebilirsiniz.
Tableau'da Veri Görselleştirme
İkinci bölümde, temiz verileri kullanarak Tableau'da basit ve karmaşık veri görselleştirmeleri oluşturacağız. Amacımız, kullanıcının kitap okuma davranışını anlamamıza yardımcı olacak etkileşimli grafikler çizmektir.
Veriyi Bağlama
Text dosyası seçeneğini seçip abid_goodreads_clean_data.csv dosyasını seçerek CSV dosyasını bağlayacağız. Ardından, aşağıda gösterildiği gibi Started At, Read At ve Date Added veri alanlarını Date & Time olarak değiştireceğiz.
Not: Veri alanlarınızı başta düzenlemek iyi bir uygulamadır.

Veriyi Bağlama ve Veri Türlerini Değiştirme
Puan Histogramı Oluşturma
Bu bölümde, kullanıcının kitap puanlarının histogramını oluşturacağız.
- Önce, Rating alanını Rows rafına sürükleyip bırakın.

Kullanıcı Puan Histogramı Bölüm 1
- Görselleştirme şablonlarına erişmek için Show Me açılır düğmesine tıklayın. Histogram seçeneğine tıklayarak çubuk grafiği histogram'a dönüştüreceğiz.

Kullanıcı Puan Histogramı Bölüm 2
- Rating ekseninde 0,5 aralıklı işaretler var. Alt eksene sağ tıklayıp Edit Axis seçeneğini belirleyerek işaretleri değiştirin. Ardından Tick Marks sekmesine tıklayın ve Major Tick Marks değerini Fixed olarak değiştirin. Tick Origin'in 0 ve Tick Interval'ın 1 olduğundan emin olun.

Kullanıcı Puan Histogramı Bölüm 3
- Histogramı, eksen etiketlerini sadeleştirerek, çubukların renklerini ve kenarlıklarını değiştirerek ve işaret etiketleri ekleyerek özelleştireceğiz. Tüm bunları Marks panelindeki seçeneklerden yapabilirsiniz. Orta-sol bölümde bulabilirsiniz.

Kullanıcı Puan Histogramı Bölüm 4
Kullanıcı genellikle 3 ile 4 arasında puanlar vermiş. Sıfır puanlar, puanlanmamış kitapları gösterir.
Çizgi Grafiği
Çizgi grafik çizmek için:
- Book.Publication Year alanını Rows ve Columns raflarına sürükleyip bırakın.
- Rows veri alanını sağ tıklayıp Measure > Count seçerek sayıya dönüştürün.
- Columns veri alanını sağ tıklayıp Dimensions seçerek boyut yapın.
- Marks paneline gidin, Automatic açılır seçeneğine tıklayın ve Line olarak değiştirin.
- Eksen etiketini sadeleştirin, grafiği özelleştirin, başlık ekleyin ve null değerleri kaldırın.

Kitap Yayın Yılı Çizgi Grafiği
Kullanıcı bazı eski kitapları okumuş, ancak özellikle 2015 ile 2020 yılları arasında yayımlanan kitaplarla ilgileniyor.
Eğer bunaltıcı geliyorsa ve Tableau'nun temellerini öğrenmek istiyorsanız, Eugenia Anello'nun Yeni Başlayanlar için Tableau Eğitimi size yardımcı olabilir.
Kutu Grafiği
Kutu-bıyık grafiği çizmek için:
- Books.Ratings Count veri alanını Rows rafına sürükleyip bırakın. Discrete'ten Continuous'a değiştirin.
- Books.Ratings Count veri alanını Marks panelindeki Detail seçeneğine sürükleyip bırakın. Measure'dan Dimension'a değiştirin.
- Show Me açılır seçeneğine tıklayın ve kutu-bıyık grafikleri seçeneğini seçin.
- Yatay yapmak için veri alanını Rowstan Columns rafına taşıyın.
- Son kısım tamamen özelleştirmeyle ilgilidir. Boyutu artıracağız, rengi değiştireceğiz, başlık ekleyeceğiz ve ekseni “Popularity” olarak yeniden adlandıracağız.

Kitap Başına İnceleme Sayısı Kutu Grafiği
Görünüşe göre kullanıcı daha az popüler ve birkaç ünlü kitabı okuyor. Bu da kullanıcının popülerlikten ziyade içeriğe dayalı, kendine özgü bir zevke sahip olduğunu gösteriyor.
Balon Grafiği
Kullanıcının kitap okuma davranışını öğrenmek için basit ama etkileyici bir görselleştirme oluşturduk. Sırada, yeni bir hesaplanmış alan oluşturma, kutuları (bin) düzenleme ve birden fazla katman oluşturmayı içeren daha karmaşık bir görselleştirme var.
Balon grafiklerinde etiketler, bir kullanıcının bir kitabı bitirmesinin kaç gün sürdüğünü; balonun boyutu ise kaç kez gerçekleştiğini temsil eder. Süre için bir veri alanımız yok, ancak Started At ve Read At alanlarını kullanarak bunu oluşturabiliriz.
İlk adımda, Data panelindeki aşağı okuna tıklayıp Create Calculated Field seçeneğini belirleyerek yeni bir hesaplanmış alan oluşturmalıyız.

Hesaplanmış Alan Oluşturma
Yeni bir pencere açılacak ve şunları yapmanız gerekecek:
- Başlık alanını “Read Duration” olarak yeniden adlandırın
- Read At ile Started At arasındaki farkı almak için DATEDIFF işlevini kullanın.
- İşlevin ilk argümanının “day” olduğundan emin olun.
- İkinci ve üçüncü argüman olarak, kare ayraç içinde alan adını sürükleyip bırakın veya yazın.

Gün Cinsinden Okuma Süresi
Read Duration veri alanı süreklidir ve paket balon görselleştirmesini çizmek için bu alanı kutular (bins) adı verilen daha küçük parçalara bölmemiz gerekir.
- Yeni oluşturulan `Read Duration` alanını Rows rafına sürükleyip bırakın.
- Show Me'ye tıklayın ve histogram seçin. Sizin için otomatik olarak bir bin alanı oluşturacaktır.

Bir Bin Alanı Oluşturur
- Yeni oluşturulan Read Duration (bin) alanına sağ tıklayın ve Read Duration in Days seçeneğini belirleyin.
- Size of Bins değerini 10 olarak değiştirin. Bu, daha rafine bir paket balon grafiği oluşturmamıza yardımcı olacak birden fazla küçük veri parçası yaratacaktır.

Bins Düzenleme
Zorlu kısmı aştık, şimdi emeğimizin karşılığını görme zamanı.
- Basit görselleştirmeyi oluşturmak için Show Me'ye tıklayın ve packed bubbles seçeneğini seçin. Farklı boyutlarda tek renkli daireler göreceksiniz.
- Biraz renk katmak için, Read Duration alanını Marks panelindeki Color seçeneğine sürükleyip bırakacağız.
- Her bir bin veya etikete benzersiz bir renk vermek için, alana sağ tıklayıp Measure > Count (Distinct) seçerek renk alanını Count (Distinct) olarak değiştirin.

Tek Renkli Paket Balon Grafiği
- Marks panelindeki Color seçeneğine tıklayın ve Edit Colors… > Sunrise-Sunset Diverging seçin. Zevkinize uygun herhangi bir gradyan rengi seçebilirsiniz.
- Son kısım tamamen özelleştirmeyle ilgilidir ve görselleştirmenizin çekici ve doğru mesajı verdiğinden emin olmanız gerekir.

Paket Balon Grafiği
Kullanıcının çoğu kitabı bir günden kısa sürede bitirdiği görülüyor. 300'ün üzerinde birkaç aykırı değer de görebilirsiniz.
Bu görselleştirmeleri birleştirerek bir Tableau panosu da oluşturabiliriz. Bu eğitimde Tableau panosunun nasıl oluşturulacağını öğrenin.
Sonuç
Bu eğitimde, Python'ın önemini ve Tableau ile nasıl kullanılacağını öğrendik. İlk bölümde, geliştirici API'ını kullanarak Goodreads kullanıcı verilerini çıkardık ve XML verilerini temiz ve yapılandırılmış bir Pandas veri çerçevesine dönüştürdük. İkinci bölümde, temiz verileri kullanarak hem basit hem de karmaşık veri görselleştirmeleri oluşturduk.
Python ile Tableau'nun birleşimi bambaşka bir olasılıklar dünyasının kapılarını açar. Veri boru hatlarını entegre edebilir, makine öğrenimi modelleri uygulayabilir, karmaşık istatistiksel analizler çalıştırabilir ve yalnızca Tableau ile gerçekleştirilemeyecek çeşitli görevleri yapabilirsiniz.
Python kodunu DataLab'de ücretsiz olarak çalıştırabilirsiniz; bu örneği çalıştırmanız için gerekli tüm paketlerle birlikte gelir. Tableau görselleştirmesi oluşturmak için, Tableau Public adlı ücretsiz bir Tableau sürümü kullandık.
Python'a yeniyseniz ve işlevler ile sözdizimi hakkında daha fazla bilgi edinmek istiyorsanız, Introduction to Data Science in Python kursuna göz atın. Ayrıca, Tableau Fundamentals yetkinlik yolunu alarak Tableau görselleştirmesinin ve özelleştirmenin temellerine hâkim olabilirsiniz. 5 kurstan oluşur ve Tableau'ya giriş, veri analizi, etkileşimli panolar oluşturma, bir vaka çalışması yürütme ve birden çok veri kaynağına bağlanmayı kapsar.
