Random sayı programcılar arasında genelde “rastgele sayı” veya “her zaman farklı bir sayı” olarak bilinmektedir, ancak bilinenin aksine random sözcüğü bu anlama gelmez. Random, “mantıksal olarak tahmin edilemeyen” anlamına gelir.
Diğer yandan random için “mantıksal olarak tahmin edilememe” konusu biraz kafa karıştırıcı. Çünkü bilgisayarlar üzerinde çalışan tüm program kodları belli bir algoritmaya dayalı olarak çalıştığına göre random sayılar da üretilirken belli bir algoritma üzerinden çalışır. Bu durumda random sayıyı üreten program kodu tahmin edilebilir, dolayısıyla random için tahmin edilemeyen demek mantıksal olarak doğru görünmüyor.
Bu nedenle random sayıları üretmek için kullanılan algoritmaya sözde random (pseudo random) denilmektedir. Peki, gerçekte tahmin edilemeyen sayılar üretebilir miyiz?
Evet. Bilgisayarlarımızda tahmin edilemeyen gerçek random sayılar üretmek istiyorsak dış kaynaktan gelen random verilere ihtiyacımız olacak. Dış kaynaklardan gelen veriler; klavye tuşları, mouse hareketleri, ağdan gelen veriler vs. olabilir. Gerçek random sayılara güvenlik anahtarı, şifreler gibi hassas noktalarda, dijital rulet masaları gibi uygulamalarda ihtiyaç duyulmaktadır.
Bu bölümde random sayılardan söz ederken gerçek random sayıları değil, sözde random sayıları kullanacağız.
Random sayı nasıl üretilir?
NumPy’da random sayı üretmek için bir random modülü bulunmaktadır. Bu modül aracılığı belirli aralıklarda, tam sayı (int), ondalıklı sayı (float) veya dizi (array) şeklinde random sayılar üretmek mümkündür.
rand() fonksiyonu 0-1 arasında (1 dahil değil) random bir sayı üretir.
randint(100) fonksiyonu 0-100 arasında (100 dahil değil) tamsayı random bir sayı üretir.
randint(x,y) fonksiyonu belirli bir aralıkta -tamsayı olarak- random sayılar üretir. x ve y negatif değerler de alabilir.
NumPy’da dizilerle çalıştığımıza göre random diziler yapmak için randint() fonksiyonu ile bir dizinin şeklini (shape) belirtebiliriz.
Rand () fonksiyonu ile bir dizinin şeklini belirtebiliriz.
Randint(x,y) fonksiyonunda başlangıç (x) ve bitiş (y) değerleri birden fazla değer alabilir.
Bir Diziden Random Sayı Çıkarmak
Choice() yöntemi, bir diziden random bir değer oluşturmanızı sağlar. Choice(), parametre olarak bir diziyi alır ve değerlerden birini rastgele döndürür.
Choice() ile ayrıca bir değer dizisi döndürebiliriz. Bu durumda dizinin şeklini belirtmek için bir boyut parametresi eklenir.
Random Veri Dağılımı (Random Data Distribution)
Veri dağılımı, tüm olası değerlerin ve her bir değerin ne sıklıkta oluştuğunun bir listesidir. İstatistik ve veri bilimiyle çalışırken bu tür listeler sıklıkla kullanılır. NumPy Random modülü, random olarak oluşturulmuş veri dağılımlarını döndüren yöntemler sunmaktadır.
Random dağılım, belirli bir olasılık yoğunluk fonksiyonunu (probability density function) izleyen rastgele sayılar kümesidir.
Olasılık Yoğunluk Fonksiyonu: Sürekli bir olasılığı tanımlayan bir fonksiyondur. Örneğin bir dizideki tüm değerlerin gelme olasılığı gibi.
Random modülün choice() fonksiyonu tanımlanmış olasılıklara dayalı olarak rastgele sayılar üretir. Ayrıca burada her bir değer için olasılığı belirleyebiliriz. Olasılık, 0 ile 1 arasında bir sayı ile belirlenir; 0 (sıfır), değerin hiçbir zaman gerçekleşmeyeceği ve 1, değerin her zaman gerçekleşeceğini göstermektedir.
Tüm olasılık sayılarının toplamı 1 olmalıdır. Yukarıdaki örnekte görüleceği gibi 0.1+0.3+0.6+0.0=1.0
Diğer yandan ne kadar dönerse dönsün bu dizide 7 değeri hiç olmayacaktır. “Size” parametresi dizinin şeklini belirtir, buraya sabit bir değer (örneğin 10 gibi) belirterek o kadar sayıda elemanı olan 1-D bir dizi de döndürebiliriz.
Random Permütasyonlar
Permütasyon, dizide eleman düzenlemesini ifade eder. Örneğin. [3, 2, 1], [3, 1, 2], [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1] bir permütasyondur.
NumPy Random modülü bu amaçla iki fonksiyon sağlar: shuffle() ve permutation().
Shuffle(), dizinin kendisinde düzeni değiştirmek anlamına gelir. Yani shuffle() orijinal dizide değişiklikler yapar.
Permutation() ise yeniden düzenlenmiş bir dizi döndürür ve orijinal diziyi değiştirmeden bırakır.
Seaborn: İstatistiksel veri görselleştirme
Seaborn, matplotlib tabanlı bir Python veri görselleştirme kitaplığıdır. Bu kütüphane çekici ve bilgilendirici istatistiksel grafikler çizmek için üst düzey bir arayüz sağlamaktadır.
Seaborn’un sunduğu bazı işlevler şu şekildedir:
- Birden çok değişken arasındaki ilişkileri incelemek için veri seti odaklı bir API sunmak
- Toplu istatistikleri göstermek için kategorik değişkenleri kullanmak
- Tek değişkenli veya iki değişkenli dağılımları görselleştirmek ve bunları veri alt kümeleri arasında karşılaştırmak
- Farklı türde bağımlı değişkenler için doğrusal regresyon modellerinin otomatik tahmini ve çizilmesi
- Karmaşık veri setlerinin genel yapısına uygun görünümler
- Karmaşık görselleştirmeleri kolayca oluşturmanıza olanak tanıyan çoklu grafik ızgaraları
- Verilerinizdeki desenleri aslına sadık kalarak ortaya çıkaran renk paletlerini seçmek için araçlar
Aşağıdaki kodu adım adım inceleyelim:
Kodlar çalıştığında yukarıdaki grafikler çıkmaktadır.
Bu özel grafikler, tips veri setindeki beş değişken arasındaki ilişkiyi göstermektedir. Bunlardan üçü numerik ve ikisi kategorik değişkenlerdir. İki numerik değişken (total_bill ve tip) eksenler üzerindeki her noktanın konumunu belirler ve üçüncüsü (boyut) her noktanın boyutunu belirler. Kategorik değişkenlerden biri, veri setini iki farklı eksene (axes) böler ve diğeri her bir noktanın rengini ve şeklini belirler.
Tüm bunlar, seaborn relplot () işlevine yapılan tek bir çağrı ile gerçekleşmektedir. Lütfen veri setindeki değişkenlerin adlarını ve plot (grafik) üzerinde oynamalarını istediğimiz rolleri nasıl sağladıklarına dikkat edin. Burada doğrudan matplotlib kullanımının aksine, değişkenleri parametrelere (örneğin, her kategori için kullanılacak belirli renk veya işaretleyici) çevirmek gerekli değildir. Bu çeviri seaborn tarafından otomatik olarak yapılmaktadır. Bu durum, kullanıcının grafikte cevaplanmasını istediği soruya odaklanmasını sağlamaktadır.
Seaborn kütüphanesi hakkında daha fazla bilgi edinmek için lütfen tıklayınız.
Seaborn, ayrıca, random dağılımları görselleştirmek için de kullanılır.
import matplotlib.pyplot as plt ifadesi kullanılarak Matplotlib modülünün pyplot nesnesi kodun içine aktarılır.
import seaborn as sns ifadesi ile bu modül kullanılabilir.
Distplot, dağıtım grafiği anlamına gelir, girdi olarak bir dizi alır ve dizideki noktaların dağılımına karşılık gelen bir eğri (çan eğrisi) çizer.
Grafikte histogram göstermemek için distplot’a hist=False özelliği eklenebilir.
Bu bölümde NumPy’da random sayılar, bu sayılar nasıl üretilir, dizilerde nasıl kullanılır, random veri dağılımı, random permütasyonlar nasıl oluşturulur ve NumPy’da istatistiksel veri görselleştirme amaçlı kullanılan Seaborn kütüphanesinden kısaca bahsettim.
Bir sonraki bölümde NumPy’da olasılık dağılımlarından bahsedeceğim.
Tekrar görüşmek dileğiyle,
Serinin Github kaynakları için tıklayınız.
Bir önceki bölüm: NumPy’da İterasyon, Join, Split, Search, Sort, Filter – Bölüm 9
Bir sonraki bölüm: NumPy’da Olasılık Dağılımları: Normal Dağılım, Binom Dağılımı, Poisson Dağılımı – Bölüm 11