Kurs
Plotly sadece güzel görselleştirmeler oluşturmakla ilgili değildir; verinizin tüm potansiyelini açığa çıkarmak ve aksi halde gizli kalacak içgörüleri ortaya koymakla ilgilidir. Sayıların dili ile hikâyelerin dili arasında bir köprü görevi görür, bireyleri ve kurumları bilinçli kararlar almaya ve anlamlı değişimler yaratmaya güçlendirir.
ChatGPT, Plotly’i böyle tanımlıyor. Açıkça görülüyor ki Plotly, mevcut en iyi veri görselleştirme kütüphanelerinden biri.

Aşağıdakine benzer son derece etkileşimli ve görsel açıdan çekici grafikler üretir:
Bugün, Plotly ile harika görseller oluşturmanın temellerini öğreneceksiniz.
Plotly Express’in Temelleri
Diğer tüm eğitimlerde olduğu gibi, pip (ya da tercih ederseniz conda) ile kütüphaneyi kurarak başlıyoruz.
$ pip install --upgrade plotly
$ conda install -c conda-forge plotly
Plotly düzenli güncellemeler alır, bu yüzden kütüphane hâlihazırda kuruluysa --upgrade etiketini eklediğinizden emin olun.
Bu eğitim, 2019’da tanıtılan ve çekirdek Plotly kütüphanesiyle eski etkileşim yöntemlerine göre birçok avantaj sunan Plotly’nin Express API’sine odaklanıyor:
- Basit sözdizimi (neredeyse İngilizce okur gibi)
- Geniş görselleştirme yelpazesi (ya da kendi aracınızı oluşturmanız için araçlar)
- Otomatik eksen ve renk ölçekleme
- pandas ile entegrasyon (Pandas’ın
.plotfonksiyonu için Plotly çizim arka ucunu kullanabilirsiniz)
İşte Plotly Express’te temel bir grafiğin anatomisi:
import plotly.express as px
fig = px.plotting_function(
dataframe,
x='column-for-xaxis',
y='column-for-yaxis',
title='Title For the Plot',
width=width_in_pixels,
height=height_in_pixels
)
fig.show()
Farklı grafikler kendi adları altında yer alır; örneğin express modülünde (kısaca px) histogram veya scatter. Herhangi bir çizim fonksiyonunun ilk argümanı veri çerçevesidir ve X ile Y eksenleri için çizilecek sütun adları verilir.
En iyi uygulamalar, okuyucuların grafiğin neyle ilgili olduğunu bilmesi için grafiklerinize bilgilendirici bir title vermenizi önerir.
Bir çizim fonksiyonu çalıştığında bir Figure nesnesi döndürür; bu nesnenin üzerine show metodunu çağırarak grafiği defterinizde görüntülersiniz.
Grafik oluşturmaya başlamak için bir veri kümesine ihtiyacımız var. Bu eğitimde Diamonds veri kümesini kullanıyoruz. Sayısal ve kategorik özelliklerin güzel bir birleşimini içerir — bu makalenin amaçları için mükemmel.
import pandas as pd
diamonds = pd.read_csv("data/diamonds.csv")
diamonds.head()

Veri kümesi 10 fiziksel özelliğe sahip 53 binden fazla elmas içerir. Aşağıda verinin temel istatistiklerini keşfedebilirsiniz.
diamonds.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53940 entries, 0 to 53939
Data columns (total 10 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 carat 53940 non-null float64
1 cut 53940 non-null object
2 color 53940 non-null object
3 clarity 53940 non-null object
4 depth 53940 non-null float64
5 table 53940 non-null float64
6 price 53940 non-null int64
7 x 53940 non-null float64
8 y 53940 non-null float64
9 z 53940 non-null float64
dtypes: float64(6), int64(1), object(3)
memory usage: 4.1+ MB
diamonds.describe()
Keşifsel Veri Analizi (EDA) yaparken ilk adımlardan biri tekil dağılımları incelemektir.
Plotly bu görev için birçok grafik sunar: histogramlar, kutu grafikleri, keman grafikleri, çubuk grafikler vb. Birkaçını görelim.
Plotly Express’te histogramlar
Histogram muhtemelen insanların öğrendiği ilk görseldir.
Bir dağılımın değerlerini sıralar ve kutucuklara (bin) yerleştirir. Ardından, her kutucuğa düşen değerlerin sayısını göstermek için çubuklar kullanılır:
import plotly.express as px
fig = px.histogram(
diamonds,
x="price",
title="Histogram of diamond prices",
width=600,
height=400,
)
fig.show()

Herhangi bir çubuğun üzerine geldiğinizde, ilgili kutucuğun aralığını görebilirsiniz. Plotly kutucuk sayısını otomatik olarak bulur; ancak kendiniz ayarlamak isterseniz nbins parametresini kullanabilirsiniz.
Bununla birlikte, her bir dağılım için mükemmel kutucuk sayısını bulmak zordur. Bu nedenle, yaygın bir uygulama olarak kutucuk sayısını dağılım uzunluğunun kareköküne eşitleyebilirsiniz:
# Doğru kutucuk sayısını bulun
nbins = int(len(diamonds) ** (1 / 2))
fig = px.histogram(
diamonds,
x="price",
title="Histogram of diamond prices",
nbins=nbins,
width=600,
height=400,
)
fig.show()
Plotly Express çubuk grafikleri
Histogramlar nicel özellikleri analiz eder. Kategorik verileri analiz etmek için çubuk grafiklere başvururuz. Örneğin, kategorik cut sütununu histogram fonksiyonuna verdiğimizde, countplot denilen bir çubuk grafik türü elde ederiz. Evet, doğru tahmin ettiniz — her kategorideki gözlem sayısını sayar.
fig = px.histogram(diamonds, x="cut")
fig.show()

Ama durun, grafiğe hiç etiket koymadık! Bunu, bir figür oluşturulduktan sonra pek çok yönünü değiştirebilen update_layout fonksiyonunu kullanarak düzeltelim.
fig.update_layout(
title="The number of diamonds in each diamond cut category",
xaxis_title="",
yaxis_title="Count",
)

title‘ın ne yaptığını zaten biliyorsunuz. xaxis_title ve yaxis_title, Plotly tarafından üretilen her iki eksenin etiketlerini (ki bunlar basitçe sütun adlarıdır) değiştirir.
Şimdi, her bir elmas kesim kategorisi için ortalama fiyatı görelim. Önce pandas groupby kullanalım:
mean_prices = (
diamonds.groupby("cut")["price"].mean().reset_index()
)
mean_prices

groupby işleminin sonuna reset_index fonksiyonunu zincirlemek çıktıyı bir DataFrame’e dönüştürür ve Plotly DataFrame’leri çok sever. Öyleyse bunu bar fonksiyonuna iletelim:
fig = px.bar(mean_prices, x="cut", y="price")
fig.update_layout(
title="Average diamond prices for each cut category",
xaxis_title="",
yaxis_title="Mean price ($)",
)
fig.show()

bar, bir kategorik ve bir sayısal özelliği alır, iletilen DataFrame’deki her satır için tek bir çubuk oluşturur. Sonuç, her elmas türü için fiyatların göze hoş gelen bir karşılaştırmasıdır.
Plotly Express’te kutu grafikleri
Dağılımları analiz etmek için bir diğer yaygın grafik, Plotly Express’te box ile oluşturulan kutu grafiğidir:
fig = px.box(diamonds, x="clarity", y="carat")
fig.update_layout(
title="Distribution of diamond carats for each clarity category",
xaxis_title="Clarity",
yaxis_title="Carat",
)
fig.show()

Yalnızca ortalama elmas karatını gösteren çubuklar oluşturmak yerine, kutu grafiği birden fazla istatistik gösterir:

Şunları görebilirsiniz:
- Minimum/maksimum
- Medyan
- 25. yüzdelik
- 75. yüzdelik
- ve aykırı değerler
her bir elmas berraklığı kategorisi için.
Plotly Express’te keman grafikleri
Dağılımları keşfetmek için bir başka eğlenceli grafik türü keman grafiktir. Keman grafikleri, birkaç ek dokunuşla birlikte temelde kutu grafikleridir:
fig = px.violin(diamonds, x="cut", y="price")
fig.show()

Kutu göstermek yerine, bir özelliğin yoğunluğunu belirten düzgün bir eğri gösterir. İçine bir kutu grafik bindirmek için box özniteliğini True olarak ayarlayabilirsiniz:
fig = px.violin(diamonds, x="cut", y="price", box=True)
fig.show()

Yalnızca özet istatistikler gösteren kutu grafiklerin aksine, keman grafikleri dağılımın şeklini de gösterir.
Plotly Express’te özellikler arası ilişkileri görselleştirme
Birbiriyle yakından ilişkili özellikleri çizdiğinizde yeni kalıplar ve içgörüler görmeye başlarsınız. Örneğin, elmasın karatının (ağırlığının) fiyatını belirleyen ana faktör olduğunu varsayarsak, bu ilişkiyi keşfedelim.
Plotly Express’te saçılım grafikleri
Tüm veri kümesindeki elmasları nokta olarak çizen bir saçılım grafiği (px.scatter) kullanabiliriz. Noktaların konumu, karşılık gelen fiyat ve karat değerleri tarafından belirlenir:
fig = px.scatter(diamonds, x="price", y="carat")
fig.update_layout(
title="Price vs. Carat",
xaxis_title="Price ($)",
yaxis_title="Carat",
)
fig.show()

Bir grafikte gösterilecek çok fazla veri olduğunda ortaya çıkan aşırı çakışma sorunuyla karşılaştık. Aşırı çakışma, verideki gerçek kalıpları ve eğilimleri göstermek yerine onları gizler.
Bunu, veri kümesinin yalnızca ~%10’unu çizerek düzeltebiliriz; bu, mevcut kalıpları ortaya çıkarmak için yeterli olacaktır:
fig = px.scatter(
diamonds.sample(5000), x="price", y="carat"
)
fig.update_layout(
title="Price vs. Carat",
xaxis_title="Price ($)",
yaxis_title="Carat",
)
fig.show()

Saçılım fonksiyonuna çağrıda, yalnızca 5000 satır (.sample(5000)) geçiriyoruz; bu da fiyat-karat ilişkisinde hafif bir yukarı yönlü eğilim gösteriyor.
Plotly Express ısı haritaları
Isı haritaları, hücrelerdeki sayı yığınından kalıpları görmenin zor olduğu büyük bir matris gibi karmaşık veri kümelerini görselleştirmek için harikadır.
Bir ısı haritası, bir matristen her hücrenin büyüklüğüne göre renkler atar. Bunun faydalı olabileceği bir senaryo, bir veri kümesinin korelasyon matrisine bakmaktır.
Korelasyon, sayısal özellikler arasındaki doğrusal ilişkiyi ölçer. Dolayısıyla korelasyon matrisindeki her hücre, bir özellik çiftinin korelasyonunu temsil eder.
Herhangi bir veri kümesinin korelasyon matrisini pandas’ın corr yöntemiyle hesaplayabilirsiniz; bu yöntem bir DataFrame döndürür. Bunu Express’in imshow fonksiyonuna geçirirseniz bir ısı haritası elde edersiniz:
import plotly.express as px
# Create heatmap using Plotly Express
fig = px.imshow(
diamonds.corr(),
color_continuous_scale="Inferno_r",
)
# Show plot
fig.show()

Korelasyon -1 ile 1 arasında değişir. Aralığın uçlarına yakın değerler, özellikler arasında güçlü pozitif ya da negatif doğrusal ilişkiyi ifade eder.
color_continuous_scale parametresi için ters Inferno renk haritasını seçiyoruz. Plotly dokümanlarındaki renk ölçekleri sayfasından diğer renk haritalarını seçebilirsiniz.
Plotly Express’te grafik özelleştirme
Plotly Express API’sinin en büyük özelliklerinden biri, grafiklerin kolayca özelleştirilebilmesidir.
update_layout fonksiyonu, grafiklerinizin neredeyse her yönünü değiştirmek için kullanabileceğiniz birçok parametre içerir.
Grafiklerinizin nerede görüntüleneceğine bağlı olarak, onları her türlü izleyici, mekân veya medya için sunulabilir hâle getirmek sizin görevinizdir.
Seçilecek ilk şeylerden biri grafik temasınıdır. Plotly’de temalar, neredeyse tüm bileşenleri kontrol eden varsayılan grafik yapılandırmalarıdır.
Herhangi bir çizim fonksiyonunun template parametresini kullanarak bunu değiştirebilirsiniz:
sample = diamonds.sample(3000)
fig = px.scatter(
sample, x="price", y="carat", template="ggplot2"
)
fig.show()

Popüler olanlardan bazıları ggplot2, seaborn, plotly_dark ve presentation’dır. Tam listeyi plotly.io.templates çağırarak görebilirsiniz.
Renkler
Saçılım grafiklerimiz şimdiye kadar iki boyutluydu. Ancak renkle buna ek bilgi ekleme seçeneğimiz var.
Örneğin, grafikteki her noktayı elmasın ait olduğu kategoriye göre renklendirebiliriz. Bunu yapmak için, yalnızca cut değerini color parametresine geçirmeniz yeterli:
sample = diamonds.sample(3000)
fig = px.scatter(sample, x="price", y="carat", color="cut")
fig.show()

cut parametresi ayrıca grafikte kategori renklerini gösteren bir açıklama kutusunu (legend) zorunlu kılar.
İşaretçi boyutu
Uygulayabileceğimiz bir diğer yaklaşım, sayısal bir özelliği noktaların boyutuyla göstermektir.
size parametresini carat olarak ayarlayarak, elmas karatına bağlı olarak farklı boyutlarda noktalar elde ederiz:
fig = px.scatter(sample, x="price", y="x", size="carat")
fig.show()

Hem rengi hem boyutu kullansak nasıl olur? Elbette!
fig = px.scatter(
sample, x="price", y="x", size="carat", color="cut"
)
fig.show()

Ancak bu grafik, çıplak gözün işlemesi için fazla bilgi içerdiğinden çok bilgilendirici değil. İyi bir uygulama olarak tek bir grafiğe üçten fazla özellik yüklememek gerekir.
Sonuç
Sonuna kadar geldiğiniz için tebrikler! Bu eğitimde, aşağıdaki kaynaklarımızdan bazılarıyla Plotly’i kendi kendinize öğrenmeye devam edecek kadar bilgi edindiniz:
- Python ile Plotly’e Giriş kursu
- R ile Plotly ile Veri Görselleştirme eğitimi
- Plotly’de histogram oluşturma eğitimi
Ayrıca daha fazla özelleştirme seçeneği, etkileşim ve animasyon üzerinde tam kontrol ve gelişmiş görselleştirme türleri desteği için Plotly’nin Graph Objects API’sini de öğrenebilirsiniz.
