Apache Superset ile Veri Görselleştirme

Veri görselleştirme bilindiği üzere verilerin grafiksel temsilidir.  Verinin daha kolay yorumlanmasını ve anlaşılmasını kolaylaştırmak için verileri çizelgeler, grafikler, haritalar ve gösterge tabloları gibi görsel formatlara dönüştürerek sunmaktır.   Görselleştirme, analistlerin karmaşık bilgileri daha sezgisel bir şekilde iletmesine olanak tanıyarak, paydaşların verilerdeki eğilimleri, kalıpları ve ilişkileri hızlı bir şekilde kavramasını sağlar.  Veriler, görsel olarak sunulduğunda buradan edinilecek bilgi ve iç görüler daha kolay ortaya çıkar, eğilimler rahatlıkla belirlenir ve bulgular daha etkili bir şekilde iletilebilir.

Bu yazıda veri görselleştirme ihtiyacımızı karşılayan, açık kaynaklı araçlardan biri olan, Apache Superset‘i inceleyeceğiz.  Bilirsiniz, açık kaynaklı ve kendini ispatlamış çözümleri severiz 🥰

Apache Superset nedir, nasıl ortaya çıkmıştır?

Apache Superset, modern, kurumsal kullanıma hazır bir iş zekası web uygulamasıdır.  Backend için Python ve frontend için JavaScript kombinasyonu kullanılarak oluşturulmuştur.  Sağlam, ölçeklenebilir ve açık kaynaklı bir veri görselleştirme platformuna duyulan ihtiyaçtan ortaya çıkmıştır.  2015 yılında Airbnb’de bir hackathon projesi olarak başladıktan sonra, 2016 yılında açık kaynaklı hale gelmiştir ve Mayıs 2017’de Apache Incubator programına katılmıştır.  Kuluçka evresinden sonra Apache Software Foundation tarafından üst-seviye proje olarak duyurulmuştur.  Bugün, basit pasta grafiklerinden ayrıntılı deck.gl coğrafi grafiklerine kadar geniş bir yelpazede, farklı yeteneklere sahip kullanıcılar bu platformda veri analizi ve görselleştirme yapabilmektedir.

Bir çok özelliğinin içinde, aşağıdaki temel özellikleri öne çıkmaktadır:

  • Güçlü olmakla birlikte kullanımı kolaydır.  Basitçe ve kod kullanmadan görselleştirme yapabilir veya SQL IDE’yi kullanarak verilerinizi keşfedebilirsiniz.
  • Modern, SQL-based veri tabanlarına ve petabayt ölçeğindeki motorlara da bağlanabilir.
  • Hafiftir (verimlilik, performans ve dağıtım kolaylığı açısından)  ve ölçeklenebilirdir.  Başka bir katman gerektirmeden mevcut veri altyapınızın gücünden yararlanır.
  • 40’tan fazla hazır görselleştirme türüyle birlikte gelir. Plug-in mimarisi ile özel görselleştirmeler oluşturulabilir.

Superset şu anda birçok şirkette geniş ölçekte çalıştırılmaktadır.  Örneğin, Airbnb’de Kubernetes üzerinde canlı ortamda (production) çalışmaktadır ve günde 100.000’den fazla grafiği görüntüleyen 600’den fazla aktif kullanıcıya hizmet vermektedir.

O zaman biz de docker ortamında çalıştırıp arayüzünü tanıyalım ve bazı temel görselleştirmeler ile Superset’i bir inceleyelim.🫶

Önce kısaca adımları özetlemek istiyorum:

  • Docker ile Superset ve Postgresql container oluşturma
  • Superset yapılandırma
  • Superset arayüzüne genel bir bakış
  • Veri kaynağı oluşturma
  • Superset ile Postgresql bağlantısını kurma
  • Veri setleri oluşturma
  • Grafik ve panel oluşturma
    • Kontrol paneli oluşturma
    • Grafik oluşturma

Docker ile Superset ve Postgresql container oluşturma

Ben bu çalışmada Windows OS ile devam ettim.  Bu ortamda docker desktop ve python 3.8.10 mevcut.

  • İlk aşama için klasör yapımızın nasıl olması gerektiğine bir bakalım.
├── .env
├── README.md
├── docker-compose.yaml
└── superset
    └── Dockerfile
version: '3.7'
services:
  psql:
    restart: always
    image: postgres
    container_name: psql
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - psql_data:/var/lib/postgresql/data

  superset:
    container_name: superset
    restart: always
    build: ./superset
    image: superset_server
    volumes:
     - ./superset/superset-conf/config:/etc/superset
     - ./superset/superset-conf/data:/var/lib/superset
     - superset:/app/superset_home
    ports:
     - "8088:8088"
    environment:
     - SUPERSET_SECRET_KEY=${SUPERSET_SECRET_KEY}

volumes:
  psql_data:
  superset:
  • Superset’in baz imajını kullanacağımız için ve postgresql kullanımına uygun hale getireceğimiz için Dockerfile’ı düzenleyerek, gerekli kütüphaneyi indirmesini sağlayalım.  Bu imajı nasıl genişleteceğinize docker-hub’dan bakabilirsiniz.  Hangi sürücüleri kullanabileceğiniz de Apache Superset’in dokümanlarında yine bulunuyor tabi. 😉
FROM apache/superset
# Switching to root to install the required packages
USER root
# Example: installing the Postgresql driver to connect to the metadata database
RUN pip install psycopg2-binary
# Switching back to using the `superset` user
USER superset
  • Docker-compose dosyasındaki değişkenler dikkatinizi çekmiştir.  Bunlar için .env dosyasına gerekli bilgileri yazalım. (Ben burda ortam değiştirip WSL’de “openssl rand -base64 42”  kullanarak key oluşturdum.)
export POSTGRES_PASSWORD="YOUR_PASSWORD"
export SUPERSET_SECRET_KEY="YOUR_SECRET_KEY"

Ön hazırlıklarımızı yaptığımıza göre devam edebiliriz.

  • Konteynerları çalıştıralım.
docker-compose up -d

Superset Yapılandırma

  • Admin hesabı oluşturalım.
docker exec -it superset superset fab create-admin \
--username admin \
--firstname Superset \
--lastname Admin \
--email admin@superset.com \
--password admin
  • Lokal veritabanı versiyonunu yükseltelim.
docker exec -it superset superset db upgrade
  • Örnek veri setlerini yükleyelim (Bu çalışmada kullanmayacağız, bu yüzden opsiyonel bir adımdır.)
docker exec -it superset_demo superset load_examples
  • Rolleri oluşturalım.
docker exec -it superset superset init

Superset arayüzüne genel bir bakış

  • Tarayıcıda bizi ilk karşılayan tabi ki “login” sayfası olacak.  admin/admin ile giriş yapalım.
Şekil-1: Superset giriş/login sayfası
  • İsimlerinden de anlaşılacağı gibi aşağıdaki sekmeler ve daha fazlası bulunmaktadır.  Görüldüğü üzere çok karmaşık bir ara yüzü yok.
    • 1: Kontrol/Gösterge panelleri
    • 2: Grafikler
    • 3: Veri setleri
    • 4: SQL IDE
    • 5: Kullanıcı ve roller gibi güvenlik ile bağlantılı konular
    • 6: Veri tabanı bağlantıları
    • 7: Kurulumda hazır gelen (opsiyonel) kontrol panelleri
    • 8: Kurulumda hazır gelen (opsiyonel) grafikler
Şekil-2: Superset ara yüzü

Veri kaynağı oluşturma

Grafikleri oluşturmadan önce bir veri kaynağına ihtiyacımız var.  Aslında Superset kurulumunda hazır gelen bir takım veri setleri bulunuyor, ancak daha gerçek bir senaryoya yakın bir örnek yapalım istiyorum.  Bu yüzden kurduğumuz Postgresql veri tabanına AWS’ye ait örnek veri setlerini yükleyeceğiz ve bu kaynağı kullanarak grafikler oluşturacağız.  Veri setlerini doğrudan kendi sitelerinden indirebilirsiniz veya bu repoda bulabilirsiniz.

  • Veri tabanına bağlanalım, kullanıcı ve veri tabanı oluşturalım.  Ben her şeyi aynı isimde (prod) oluşturmuşum, karışmaması için değiştirebilirsiniz tabi.😅
docker exec -it psql bash
psql -U postgres
CREATE USER prod WITH PASSWORD 'prod';
CREATE DATABASE prod;
GRANT ALL PRIVILEGES ON DATABASE prod TO prod;
ALTER DATABASE prod OWNER TO prod;
GRANT USAGE, CREATE ON SCHEMA public TO prod;
  • Ctrl+D ile çıkıp, tekrar prod user ile bağlanalım.
psql -U prod -d prod
  • Tabloları oluşturalım.  Bunun için yine create_table.md dosyasında bulunan tablo oluşturma komutlarını kullanabilirsiniz.
prod=> \dt
         List of relations
 Schema |   Name   | Type  | Owner
--------+----------+-------+-------
 public | category | table | prod
 public | date     | table | prod
 public | event    | table | prod
 public | listing  | table | prod
 public | sales    | table | prod
 public | users    | table | prod
 public | venue    | table | prod
(7 rows)
  • Datasets klasörü oluşturalım ve veri setlerini buraya alalım.
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        10/16/2019  12:08 PM         445838 allevents_pipe.txt
-a----        10/16/2019  12:09 PM        5893626 allusers_pipe.txt
-a----        10/16/2019  12:09 PM            465 category_pipe.txt
-a----        10/16/2019  12:09 PM          14534 date2008_pipe.txt
-a----        10/16/2019  12:09 PM       11585036 listings_pipe.txt
-a----        10/16/2019  12:09 PM       11260097 sales_tab.txt
-a----        10/16/2019  12:10 PM           7988 venue_pipe.txt
  • Python environment oluşturalım, aktif hale getirelim ve requirements.txt dosyasını kullanarak gerekli kütüphaneleri indirelim.
python3 -m venv superset_venv
.\venv\Scripts\activate
pip install -r requirements.txt
  • Jupyterlab çalıştıralım.
jupyter lab --ip 0.0.0.0 --port 8888
  • Veri setlerini incelemek ve postgresql’e yüklemek için explore_tickit.ipynb dosyasını kullanalım.

Superset ile Postgresql bağlantısı kurma

  • Aşağıdaki görselleri kullanarak veri tabanı bağlantısını oluşturalım.

Veri seti oluşturma

Yine aşağıdaki adımları takip ederek veri tabanımızda bulunan tablolardan “dataset” oluşturalım.  Sadece “sales” tablosunu veri seti olarak eklememiz bu aşamada yeterli.

 

  • Soldaki menüden veri tabanını ve şemayı seçtiğinizde tablolar listelenecek.  Ben bu veri setini daha önce oluşturduğum için aşağıda uyarı veriyor, sizde böyle bir şey olmayacak.

  • Yeni bir veri seti daha eklemek gerekirse aşağıdaki “Add a dataset” bölümüne tıklayarak da devam edebilirsiniz.  Biz diğer grafikleri tabloların birleşiminden oluşan yeni veri setleri üzerinden oluşturacağımız için, şimdilik yeni bir veri seti eklemeye ihtiyaç duymuyoruz.

Buraya kadar her şey yolundadır umarım.💕 Artık grafik ve panel oluşturma için tamamen hazırız!

Grafik ve panel oluşturma

Hedef çıktımız aşağıdaki gibi olacak.  Bunun üzerine sizlerin daha güzel ve daha zengin grafikler oluşturacağınıza eminim 🤗

O zaman yukarıdaki hedefimizi gerçekleştirmek üzere devam edelim.

Kontrol Paneli oluşturma

  • Önce aşağıdaki görselde görülen sekmelerden “Dashboards”a gidelim ve yeni bir tane oluşturalım.

 

  • Ana sayfaya dönelim. Görüldüğü gibi buraya eklenmiş panelimiz (İsmi daha sonra ismi Ticket Dash Test olarak değiştirmişim😅). Tekrar buradan tıklayıp panele ulaşabiliriz.

Grafik oluşturma

  • Düzenleme için aşağıdaki butona tıklayalım.

  • Yeni grafik oluştur butonuna tıklayalım.

  • Karşımıza aşağıdaki sayfa gelecek, solda eklediğimiz veri setlerini seçmemize imkan veren bir menü var, buradan ilgilendiğimiz veri setini seçelim.  Ben ilk olarak toplam ne kadar bilet satışı gerçekleştiğini görmek istiyorum.  Bu yüzden önümüze çıkan grafik seçeneklerinden “Big Number” ile başlayabiliriz.  Burada sık kullanılanların yanı sıra “Choose chart type” bölümünde çok daha fazla çeşitte grafik seçeneği göreceksiniz.

  • Açılan yeni sayfada artık metrik seçebiliriz.  Daha sonrasında aynı sayfada “CREATE TABLE” butonuna veya doğrudan “SAVE” butonuna tıklayalım.

  • Grafiğimizi isimlendirelim ve hangi panele eklemek istediğimizi belirtip kaydedelim.

  • Aynı zamanda diyelim ki bilet satışlarından toplam kazancımızı da görmek istiyoruz. (Ki nihai panelimizde var:)) Bunun için yukarıda oluşturduğumuz grafik için aynı adımları tekrar ederek sadece “qtysold” yerine “pricepaid” i seçerek bu grafiği de ekleyelim.
  • Son olarak aynı veri seti ile bir de aylık toplam kazancı görmek için çizgi grafiği oluşturalım.  Save edip isim vererek panelimize ekleyebiliriz. (Tekrar eden eylemler için ekran alıntısı eklemedim)

 

Görüldüğü gibi, herhangi bir veri seti birleştirmeye ihtiyacımız olmadığında, bu şekilde doğrudan grafik oluşturabilirsiniz.  Ancak veri setlerini birleştirmeye ihtiyaç duyarsanız bunun için de imkan var.🤓 Bu yüzden, sonraki adımlarda SQL Lab kullanarak devam edeceğiz.

  • Evet, şimdi kategoriye göre ne kadar etkinlik olduğunu takip etmek istediğimizi varsayalım.  Bunun için “event” tablosu ile “category” tablosunu birleştirerek bir grafik oluşturalım.

select 
   event.eventid,
   event.catid,
   event.venueid,
   event.dateid,
   event.starttime,
   event.eventname,
category.catname from event 
left join category on event.catid=category.catid;
  • Soldaki menüden veri tabanını ve şemayı seçelim.  Yukarıdaki sorguyu editöre ekleyelim.

  • Bu sorguyu önce bir kaydedelim, lazım olur belki.😌

  • Sorguyu çalıştıralım ve grafik oluştur seçeneğine tıklayalım. Sonraki adımlarda bu kısım hep geçerli olacak, paylaşılan sorguları bu şekilde SQL Lab’da çalıştıracağız.

  • Ve yine düzlemlerde ne görmek istediğimize dair bilgileri vererek kaydedelim.

  • Kategorilere göre toplam satışı görmek için de “pie chart” oluşturalım (Türkçesini pek sevemedim 😅).
select 
    sales.saletime,
    sales.pricepaid,
    category.catname from sales
left join event on sales.eventid=event.eventid 
left join category on event.catid=category.catid;

  • Toplam satışı, kategoriler açısından görebilmek için bir çizgi grafiği daha ekleyelim.
select 
    date_trunc('week', sales.saletime::date) AS weekly,
    sum(sales.pricepaid),category.catname 
from sales
left join event on sales.eventid=event.eventid 
left join category on event.catid=category.catid
group by weekly,category.catname
order by weekly;

  • Ve son olarak,  kategori grubu bazında satılan bilet sayısının toplam bilet sayısıyla ilişkisini görmek için çubuk grafik oluşturalım.
select 
    sum(qtysold) as sold,
    sum(numtickets) as total_ticket,
    event.eventid,
    category.catid,
    category.catname,
    catgroup 
from listing
left join sales on sales.listid=listing.listid
left join event on sales.eventid=event.eventid
left join category on event.catid=category.catid
group by event.eventid,category.catid,category.catname,catgroup
order by event.eventid;

Bu yazımızın da sonuna geldik! Umarım sizin için yine faydalı bir yazı olmuştur.  İleri düzey tablolar/grafikler için henüz benim de deneyimleme fırsatım olmadı ama bir veri mühendisi olarak ihtiyaç durumunda Apache Superset ile rahatlıkla grafik oluşturabiliyorum ve genel olarak ara yüzünden memnun kaldığımı söyleyebilirim.  Tek olumsuz yorumum bazı sayfaların devamlı yeni sekmede açılıyor olması üzerine oldu.  Bu kadar kullanıcısı varken ve Apache söz konusuyken, belki benim gözden kaçırdığım bir mevzu vardır diye düşünüyorum.

Umarım siz de bu yazıyla birlikte deneyimleme fırsatı bulursunuz.  Okuduğunuz için teşekkür ederim🤩 Bir sonraki yazıda görüşmek üzere, sevgilerle!

Kaynaklar:

https://unsplash.com/photos/a-large-group-of-colorful-blocks-lISkvdgfLEk

https://superset.apache.org/docs/intro

https://medium.com/airbnb-engineering/supercharging-apache-superset-b1a2393278bd

https://superset.apache.org/docs/installation/docker

https://hub.docker.com/r/apache/superset

https://github.com/apache/superset/blob/master/RESOURCES/INTHEWILD.md

 

Yazar Hakkında
Toplam 6 yazı
Elif Sinem AKTAŞ
Elif Sinem AKTAŞ
VBO'da Data Engineer olarak çalışmaktadır. Teknolojiye ve veri bilimine olan ilgisi sebebiyle çıktığı yolda, günümüzün yeniliklerine yönelik gelişmeye ve öğrendiklerini paylaşmaya devam etmektedir.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara