Kurs

Matplotlib, Python’da güçlü ve oldukça popüler bir veri görselleştirme kütüphanesidir. Bu eğitimde, 2022 yılındaki borsa verilerini kullanarak Matplotlib ile çizgi, çubuk ve saçılım grafiklerinin nasıl oluşturulacağını ele alacağız. Bunlar, veriyi anlamaya, görselleştirmeye ve veriler üzerinden hikâye anlatmaya başlamanızı sağlayan temel grafiklerdir. Veri görselleştirme, tüm veri analistleri için gerekli bir beceridir ve Matplotlib, görselleştirme oluşturmak için en yaygın kütüphanelerden biridir.
Bu eğitim, NumPy dizileri ve pandas veri çerçeveleri hakkında temel düzeyde ön bilgi bekler. Bu kütüphaneleri kullandığımız yerlerde ne yaptığımızı kısaca açıklayacağız. Bu eğitimin ana odağı, bu veri yapılarının üzerinde çalışarak görselleştirmeler oluşturan Matplotlib’dir.
Matplotlib, grafik oluşturma konusunda oldukça esnek ve özelleştirilebilirdir. Ancak az özelleştirmeyle daha temel grafikler oluşturmak için fazlaca kod gerektirebilir. Keşifsel veri analizi yapmanın ana amaç olduğu, estetikten ziyade hızlıca pek çok grafik çizmenin gerektiği ortamlarda, Matplotlib’in üzerine inşa edilerek görselleştirmeleri daha hızlı oluşturan seaborn kütüphanesi harika bir seçenektir. Eğer önceliğiniz keşifsel veri analizi veya hızlı ve kolay grafik üretimi ise lütfen bunun yerine Yeni Başlayanlar için Python Seaborn Eğitimi yazımıza göz atın.
Matplotlib Örnekleri
Bu eğitimin sonunda, Matplotlib ile göze hoş gelen görselleştirmeler yapabileceksiniz. Çizgi, çubuk ve saçılım grafiklerinin oluşturulmasına odaklanacağız. Ayrıca renk kullanımı, grafiklerin etiketlenmesi ve güçlü bir hikâye anlatmak için açık şekilde düzenlenmesi gibi özelleştirme kararlarına da odaklanacağız.



Veri Kümesi
Matplotlib, NumPy dizileri ve pandas veri çerçeveleriyle çalışacak şekilde tasarlanmıştır. Kütüphane, tablolu verilerden grafik oluşturmayı kolaylaştırır. Bu eğitimde, Dow Jones Industrial Average (DJIA) endeksinin 2022-01-01 ile 2022-12-31 arasındaki geçmiş fiyatlarını (buradan) kullanacağız. Sayfada tarih aralığını ayarlayıp ardından “download a spreadsheet” düğmesine tıklayabilirsiniz.
pandas kütüphanesini kullanarak HistoricalPrices.csv adlı csv dosyasını içe alacağız ve ilk satırları .head() yöntemiyle görüntüleyeceğiz.
import pandas as pd
djia_data = pd.read_csv('HistoricalPrices.csv')
djia_data.head()

Verilerin 4 sütun içerdiğini görüyoruz: Date, Open, High, Low ve Close. Son dört sütun, işlem günü boyunca endeksin fiyatıyla ilgilidir. Aşağıda her değişkenin kısa bir açıklamasını bulabilirsiniz.
- Date: Hisse senedi fiyatı bilgisinin temsil ettiği gün.
- Open: Piyasa 09:30 AM ET’de açıldığında DJIA’nın fiyatı.
- High: DJIA’nın gün içinde ulaştığı en yüksek fiyat.
- Low: DJIA’nın gün içinde ulaştığı en düşük fiyat.
- Close: Piyasa 04:00 PM ET’de kapandığında DJIA’nın fiyatı.
Hızlı bir temizlik adımı olarak, indirdiğimiz veri setinde sütun adlarında fazladan boşluk olduğu için pandas içindeki rename() yöntemini de kullanmamız gerekecek.
djia_data = djia_data.rename(columns = {' Open': 'Open', ' High': 'High', ' Low': 'Low', ' Close': 'Close'})
Ayrıca Date değişkeninin datetime türünde olduğundan emin olup veriyi tarihe göre artan sırada sıralayacağız.
djia_data['Date'] = pd.to_datetime(djia_data['Date'])
djia_data = djia_data.sort_values(by = 'Date')
Matplotlib’i Yükleme
Sonraki adımda, grafik çizebilmek için Matplotlib’in pyplot alt modülünü yükleyeceğiz. pyplot modülü, grafik oluşturmak ve biçimlendirmek için ihtiyaç duyacağımız tüm ilgili yöntemleri içerir. Alışılmış plt kısaltmasını kullanacağız. Ayrıca bu eğitimin ilerleyen kısımları için pandas, numpy ve datetime’ı da içe alacağız.
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from datetime import datetime
Çizgi Grafikler Çizme
İlk olarak bir çizgi grafik oluşturacağız. Çizgi grafikler, zaman serisi verilerini göstermede çok başarılı oldukları için oldukça önemli bir grafik türüdür. Eyleme dönüştürülebilecek veri örüntülerini anlamak için, KPI’ların zaman içinde nasıl değiştiğini görselleştirmek sıklıkla önemlidir.
Tek Çizgili Çizgi Grafikler
- Tek bir çizgiyle basit bir çizgi grafiğin nasıl çizileceğini gösterin.
- Grafiğin gerçekten görünmesi için plt.show() kullanımını vurgulamayı unutmayın.
- Grafik hakkında kısa bir yorum ve yorumlama sağlayın.
Matplotlib’de, plt.plot() yöntemiyle çizgi grafik oluşturabiliriz; burada ilk argüman çizgimizdeki x değişkeni, ikinci argüman ise y değişkenidir. Bir grafik oluşturduğumuzda, oluşturduğumuz grafiği görebilmek için plt.show() çağrısı yaptığımızdan emin olmalıyız. DJIA’nın zaman içindeki kapanış fiyatını görselleştireceğiz.
plt.plot(djia_data['Date'], djia_data['Close'])
plt.show()

Yıl boyunca, endeks fiyatının en yüksek değerinden başladığını, yıl içinde yukarı aşağı dalgalandığını görüyoruz. Fiyatın Ekim civarında en düşük seviyeye indiğini ve yıl sonunda güçlü bir artışla kapandığını gözlemliyoruz.
Çoklu Çizgili Çizgi Grafikler
Aynı grafikte birden fazla çizgiyi görselleştirmek için, plt.show() fonksiyonundan önce ek bir plt.plot() çağrısı daha ekleyebiliriz.
plt.plot(djia_data['Date'], djia_data['Open'])
plt.plot(djia_data['Date'], djia_data['Close'])
plt.show()

Yıl boyunca, her bir gün için DJIA’nın açılış ve kapanış fiyatlarının birbirine nispeten yakın olduğunu, birinin sürekli olarak diğerinin üzerinde ya da altında olduğuna dair net bir örüntü bulunmadığını görüyoruz.
Lejant Ekleme
Hangi çizginin hangi sütunu temsil ettiğini ayırt etmek istersek, bir lejant ekleyebiliriz. Bu, grafiğin köşesinde renk kodlu bir etiket kümesi oluşturur. Bunu, her bir plt.plot() çağrısına label parametreleri ekleyip plt.legend() kullanarak yapabiliriz.
plt.plot(djia_data['Date'], djia_data['Open'], label = 'Open')
plt.plot(djia_data['Date'], djia_data['Close'], label = 'Close')
plt.legend()
plt.show()

Artık, belirttiğimiz etiketlere sahip bir lejantın varsayılan konum olan sağ üstte göründüğünü görüyoruz (konum, plt.legend() içindeki loc argümanıyla belirtilebilir).
Çubuk Grafikler Çizme
Çubuk grafikler, kategoriler arasında sayısal değerleri karşılaştırmak için çok kullanışlıdır. En büyük ve en küçük kategorileri bulmada özellikle yardımcıdırlar.
Bu bölümde, 2022 yılı boyunca DJIA’nın aylık performansını karşılaştırabilmek için verileri pandas ile aylık ortalamalara dönüştüreceğiz. Görselleştirmeyi kolaylaştırmak için ilk 6 ayı kullanacağız.
# Import the calendar package
from calendar import month_name
# Order by months by chronological order
djia_data['Month'] = pd.Categorical(djia_data['Date'].dt.month_name(), month_name[1:])
# Group metrics by monthly averages
djia_monthly_mean = djia_data \
.groupby('Month') \
.mean() \
.reset_index()
djia_monthly_mean.head(6)

Dikey Çubuk Grafikler
Dikey çubuklardan oluşan bir çubuk grafik oluşturarak başlayacağız. Bunu, ilk argümanın x ekseni değişkeni (Month) ve height parametresinin y ekseni (Close) olduğu plt.bar() yöntemiyle yapabiliriz. Ardından, grafiğimizi göstermek için plt.show() çağrısı yaptığımızdan emin olmak isteriz.
plt.bar(djia_monthly_mean['Month'], height = djia_monthly_mean['Close'])
plt.show()

DJIA’nın çoğu aylık kapanış ortalamasının birbirine yakın olduğunu, en düşük ortalama kapanış değerinin Haziran’da, en yüksek ortalama kapanış değerinin ise Ocak’ta olduğunu görüyoruz.
Çubuk Grafikte Çubukları Yeniden Sıralama
Bu çubukları, Aylık ortalama kapanış fiyatına göre yüksekten düşüğe sıralı göstermek istersek, pandas’taki sort_values() yöntemiyle veriyi sıralayıp yine aynı plt.bar() yöntemiyle çizebiliriz.
djia_monthly_mean_srtd = djia_monthly_mean.sort_values(by = 'Close', ascending = False)
plt.bar(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'])
plt.show()

Gördüğünüz gibi, hangi ayların en yüksek ortalama DJIA kapanış fiyatına, hangilerinin daha düşük ortalamalara sahip olduğunu görmek belirgin biçimde kolaylaştı. Ayları karşılaştırmak ve sıralamak da daha kolay.
Yatay Çubuk Grafikler
- Eksenleri nasıl değiştirip çubukların yatay yapılacağını gösterin.
- Grafik hakkında kısa bir yorum ve yorumlama sağlayın.
Etiketleri okumak ve çubuk grafikleri yorumlamak bazen çubukları yatay yaptığımızda daha kolaydır. Bunu plt.hbar() yöntemiyle yapabiliriz.
plt.barh(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'])
plt.show()

Gördüğünüz gibi, her kategorinin (ay) etiketleri, çubuklar dikeyken olduğundan daha kolay okunuyor. Grupları hâlâ rahatça karşılaştırabiliyoruz. Bu yatay çubuk grafik, kategori sayısının fazla olduğu durumlarda özellikle kullanışlıdır.
Saçılım Grafikleri Çizme
Saçılım grafikleri, iki sayısal değişken arasındaki ilişkileri belirlemede çok faydalıdır. Bu, bir değişken değiştiğinde diğerinde ne beklenebileceğine dair fikir verebilir ve doğrusal ya da doğrusal olmayan regresyon gibi farklı modelleme tekniklerini kullanma kararınızda da oldukça bilgilendirici olabilir.
Saçılım Grafikleri
Diğer grafiklere benzer şekilde, saçılım grafiği pyplot.scatter() ile oluşturulabilir; ilk argüman x ekseni, ikinci argüman y ekseni değişkenidir. Bu örnekte, DJIA’nın açılış ve kapanış fiyatları arasındaki ilişkiye bakacağız.
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.show()

X ekseninde DJIA’nın açılış fiyatı, y ekseninde ise kapanış fiyatı bulunuyor. Bekleneceği üzere, açılış fiyatı arttıkça kapanış fiyatının da güçlü bir ilişki içinde arttığını görüyoruz.
Eğilim Çizgili Saçılım Grafikleri
Sonraki adımda, açılış ve kapanış değişkenleri arasındaki doğrusal ilişkiyi daha açık göstermek için grafiğe bir eğilim çizgisi ekleyeceğiz. Bunun için numpy’ın polyfit() ve poly1d() yöntemlerini kullanacağız. İlk yöntem, birinci argümanı x değişkeni, ikinci argümanı y değişkeni ve üçüncü argümanı uyum derecesi (doğrusal için 1) olan en küçük kareler polinom uyumu verir. İkinci yöntem ise, plt.plot() ile eğilim çizgisi oluşturmamıza olanak sağlayan bir boyutlu bir polinom sınıfı döndürür.
z = np.polyfit(djia_data['Open'], djia_data['Close'], 1)
p = np.poly1d(z)
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.plot(djia_data['Open'], p(djia_data['Open']))
plt.show()

Görüldüğü gibi, grafiğin arka planındaki çizgi, saçılım grafiğindeki eğilimi yakından takip ediyor; çünkü açılış ve kapanış fiyatları arasındaki ilişki güçlü biçimde doğrusal. Açılış fiyatı arttıkça, kapanış fiyatının da genellikle benzer ve doğrusal bir oranda arttığını görüyoruz.
Grafik Başlığını ve Eksen Etiketlerini Ayarlama
Grafik başlıkları ve eksen etiketleri, bir görselleştirmeyi anlamayı ciddi ölçüde kolaylaştırır ve izleyicinin neye baktığını hızlıca kavramasını sağlar. Bunu, önceki bölümde oluşturduğumuz saçılım grafiği üzerinde plt.xtitle(), plt.ylabel() ve plt.xlabel() ile daha fazla katman ekleyerek yapabiliriz.
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.show()

Renkleri Değiştirme
Renk, belirli noktaları vurgulamak veya bir fikri tutarlı renklerle anlatmak için görselleştirmelerde güçlü bir araç olabilir. Matplotlib’de renkleri isimli renklerle (örn. "red", "blue" vb.), hex kodlarıyla ("#f4db9a", "#383c4a" vb.) ve kırmızı-yeşil-mavi üçlüleriyle (örn. (125, 100, 37), (30, 54, 121) vb.) değiştirebiliriz.
Çizgiler
Bir çizgi grafikte, rengi plt.plot() içindeki color özniteliğiyle değiştirebiliriz. Aşağıda, açılış fiyatı çizgimizin rengini “black”, kapanış fiyatı çizgimizin rengini ise “red” yapıyoruz.
plt.plot(djia_data['Date'], djia_data['Open'], color = 'black')
plt.plot(djia_data['Date'], djia_data['Close'], color = 'red')
plt.show()

Çubuklar
Çubuklar için, her bir çizginin rengini belirtmek üzere color özniteliğine bir liste verebiliriz. Diyelim ki, ortalama kapanış fiyatının ne kadar güçlü olduğuna dair bir noktayı vurgulamak için Ocak ayındaki ortalama fiyatı öne çıkarmak istiyoruz. Dikkati ona çekmek için o çubuğa benzersiz bir renk verebiliriz.
plt.bar(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'], color = ['blue', 'gray', 'gray', 'gray', 'gray', 'gray'])
plt.show()

Noktalar
Son olarak, saçılım grafikleri için rengi plt.scatter()’ın color özniteliğiyle değiştirebiliriz. Yukarıdaki görselleştirmedekiyle benzer bir hikâye anlatmak için Ocak ayındaki tüm noktaları mavi, diğer tüm noktaları gri renge boyayacağız.
plt.scatter(djia_data[djia_data['Month'] == 'January']['Open'], djia_data[djia_data['Month'] == 'January']['Close'], color = 'blue')
plt.scatter(djia_data[djia_data['Month'] != 'January']['Open'], djia_data[djia_data['Month'] != 'January']['Close'], color = 'gray')
plt.show()

Renk Haritalarını (Colormap) Kullanma
Renk haritaları, değerin büyüklüğüne göre ölçeklenen yerleşik Matplotlib renkleridir (belgeler burada). Renk haritaları genellikle birlikte estetik olarak uyumlu görünür ve artan değerleri anlatmaya yardımcı olur.
Aşağıdaki örnekte, c özniteliğine kapanış fiyatını (y değişkeni) verip cmap ile plasma renk haritasını kullanarak bir renk haritası uyguluyoruz. Değerler arttıkça ilişkinin renginin daha parlak ve sarıya döndüğünü; düşük değerlerin ise mor ve daha koyu olduğunu görüyoruz.
plt.scatter(djia_data['Open'], djia_data['Close'], c=djia_data['Close'], cmap = plt.cm.plasma)
plt.show()
Eksen Sınırlarını Ayarlama
Bazen, bir grafikte belirli bir değer aralığına bakmak faydalıdır. Örneğin, DJIA şu sıralar 30.000 $ civarında işlem görüyorsa, yalnızca bu fiyat etrafındaki davranışla ilgilenebiliriz. X ve y sınırlarını sırasıyla ayarlamak için plt.xlim() ve plt.ylim() içine birer demet (tuple) geçebiliriz. Demetteki ilk değer alt sınırı, ikinci değer ise üst sınırı belirtir.
Grafikleri Kaydetme
Son olarak, Matplotlib’de oluşturduğumuz grafikleri plt.savefig() yöntemiyle kaydedebiliriz. Dosyayı ‘png’, ‘pdf’ ve ‘svg’ dahil birçok farklı biçimde kaydedebiliriz. İlk argüman dosya adıdır. Biçim, dosya uzantısından çıkarılır (veya format argümanıyla geçersiz kılabilirsiniz).
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.savefig('DJIA 2022 Scatterplot Open vs. Close.png')
Bir Üst Seviyeye Taşıyın
Bu eğitimde Matplotlib’in temellerini ele aldık ve artık temel çizgi, çubuk ve saçılım grafiklerini oluşturabilirsiniz. Matplotlib, estetik açıdan hoş görselleştirmeler oluşturmak için pek çok harika özelliğe sahip gelişmiş bir kütüphanedir. Matplotlib becerilerinizi bir üst seviyeye taşımak isterseniz, Introduction to Data Visualization with Matplotlib kursumuzu alın. Kendi görselleştirmelerinizi oluşturmaya başlarken başvurmak üzere Matplotlib Cheat Sheet: Plotting in Python belgemizi de indirebilirsiniz.
Matplotlib Hakkında SSS
Python’da Matplotlib nedir?
Matplotlib, Python’da popüler bir veri görselleştirme kütüphanesidir. Genellikle Python’da statik, etkileşimli ve animasyonlu görselleştirmeler oluşturmak için kullanılır. Matplotlib; çizimler, histogramlar, çubuk grafikler, saçılım grafikleri vb. üretmenizi sadece birkaç satır kodla sağlar.
Veri görselleştirme için neden Matplotlib kullanmalıyım?
Birkaç nedeni vardır. İlk olarak, Matplotlib esnektir. Çok geniş yelpazede grafik türlerini destekler ve NumPy ile pandas gibi pek çok Python kütüphanesiyle iyi entegre olur. İkincisi, olgun ve yaygın kullanılan bir kütüphanedir; bu nedenle güçlü bir topluluğa ve bolca kaynağa ile eğitime sahiptir. Son olarak, Python içinde olduğundan, grafiklerinizi veri boru hatlarınızın bir parçası olarak otomatikleştirip özelleştirebilirsiniz.
Matplotlib’i nasıl kurarım?
Matplotlib’i Python’un paket yöneticisi pip ile kurabilirsiniz. Terminalinizi açıp şunu yazın: pip install matplotlib. Eğer bir Jupyter defteri kullanıyorsanız, komutun başına ünlem işareti ekleyerek bir kod hücresinde de çalıştırabilirsiniz: !pip install matplotlib.
Matplotlib’de temel bir grafik nasıl oluştururum?
İşte basit bir örnek. Önce, Matplotlib kütüphanesini içe aktarmanız gerekir. En sık kullanılan modül pyplot’tur ve genellikle plt kısaltmasıyla içe aktarılır:
import matplotlib.pyplot as plt
Ardından, şöyle temel bir çizgi grafik oluşturabilirsiniz:
plt.plot([1, 2, 3, 4]) plt.ylabel('Some Numbers') plt.show()
Bu örnekte plt.plot([1, 2, 3, 4]) belirtilen sayı listesini çizer. plt.ylabel('Some Numbers') satırı y ekseni etiketini ayarlar ve plt.show() grafiği görüntüler.
Veri Bilimi yazarı | Wayfair'da Kıdemli Teknik Pazarlama Analisti | University of Pennsylvania'da Veri Bilimi Yüksek Lisansı (MSE)

