Google Cloud Machine Learning Engineer sertifikası Eğitimi

Machine Learning Engineer, makine öğrenimi sistemlerini tasarlar, derler, üretime geçirir, optimize eder, çalıştırır ve yönetir. Bu öğrenme yolu talep üzerine alınan kurslar, laboratuvarlar ve beceri rozetlerinden oluşan özenle seçilmiş bir koleksiyonda size yol gösterir. Eğitim boyunca ML Engineer rolü için gerekli olan Google Cloud teknolojilerini kullanarak pratiğe dayalı deneyim edinirsiniz. Öğrenme yolunu tamamladıktan sonra kariyer yolculuğunuzda emin adımlarla ilerlemek için Google Cloud Machine Learning Engineer sertifikasına göz atın.



Buradan ulaşabilirsiniz.

The Machine That Changed the World: The Story of Lean Production-- Toyota's Secret Weapon in the Global Car Wars That Is Now Revolutionizing World Kitabı

The Machine That Changed the World: The Story of Lean Production-- Toyota's Secret Weapon in the Global Car Wars That Is Now Revolutionizing World ... Wars That Is Revolutionizing World Industry) 



"Machine That Changed the World: The Story of Lean Production" kitabı, Toyota'nın dünya otomobil piyasasında nasıl bir devrim yarattığını ve "Lean Production" (Yalın Üretim) adı verilen üretim metodunu nasıl başarıyla uyguladığını anlatıyor. Bu metod, israfı azaltmak, verimliliği artırmak ve daha kaliteli ürünler üretmek üzerine kurulu. Kitapta, Toyota'nın bu yöntemi nasıl geliştirdiği ve bunun dünya çapındaki sanayiye nasıl yayıldığı anlatılıyor. Yalın üretim, sadece otomobil sektöründe değil, birçok farklı alanda da kullanılan bir yöntem haline geldi. Kitap, bu devrimin arkasındaki stratejileri ve etkilerini ayrıntılı bir şekilde inceliyor.


Yalın üretim yöntemi, özellikle stok maliyetlerini azaltma, üretim süreçlerini hızlandırma ve müşteri ihtiyaçlarına daha hızlı yanıt verme gibi avantajlar sağlıyor. Toyota, bu sistemle üretim hatlarında gereksiz işlemleri azaltarak ve çalışanların sürekli iyileştirme yapmalarını teşvik ederek verimliliği artırdı. Bu sayede, daha az hata ile daha hızlı ve ekonomik bir şekilde üretim yapabiliyorlar.


Kitapta, Toyota'nın bu başarısının arkasında yatan temel prensipler ve uygulamalar detaylı bir şekilde inceleniyor. Örneğin, "Just-in-Time" (Tam Zamanında) üretim, stok tutma maliyetlerini minimuma indirmek için kullanılıyor. Ayrıca, çalışanların sürekli iyileştirme yapmaları, problem çözme yeteneklerini geliştirmeleri ve karar alma süreçlerine aktif olarak katılmaları teşvik ediliyor.


Kitap, Toyota'nın yalın üretim yöntemlerini nasıl başarıyla uyguladığını ve bu yöntemlerin dünya çapında nasıl benimsendiğini anlatarak, modern sanayi ve üretim yöntemlerine dair önemli bir perspektif sunuyor. Bu yaklaşım, diğer şirketler ve sektörler tarafından da benimsenerek, genel olarak üretim ve işletme yönetiminde devrim yaratan bir model haline geldi.


Toyota'nın yalın üretim sistemini başarılı kılan bir diğer önemli özellik de sürekli iyileştirme ve esneklik. Şirket, sürekli olarak üretim süreçlerini gözden geçiriyor ve iyileştirmeler yapıyor. Bu, çalışanlardan gelen geri bildirimler ve önerilerle destekleniyor. Çalışanlar, süreçlerdeki hataları ve israfları tespit edebiliyor ve bunları düzeltmek için yenilikçi çözümler geliştirebiliyorlar.


Kitap, bu süreçlerin sadece üretimle sınırlı kalmadığını, aynı zamanda şirketin tedarik zinciri yönetimi, müşteri ilişkileri ve hatta ürün tasarımı gibi diğer alanlara da uygulandığını gösteriyor. Yalın üretim yaklaşımı, ürünlerin daha hızlı piyasaya sürülmesine, müşteri ihtiyaçlarının daha iyi anlaşılmasına ve daha verimli bir iş gücü oluşturulmasına olanak tanıyor.


Kitabın vurguladığı bir diğer önemli nokta, yalın üretim yaklaşımının sadece Toyota veya otomobil sektörü için değil, her türlü üretim ve hizmet sektörü için uygulanabilir olması. Bu yaklaşım, dünyanın dört bir yanındaki şirketler tarafından benimsenmiş durumda ve sürekli geliştirilmekte.


Sonuç olarak, "The Machine That Changed the World" kitabı, Toyota'nın yalın üretim sistemini ve bu sistemin dünya çapındaki etkilerini derinlemesine inceliyor. Bu sistem, günümüzde birçok sektörde verimliliği ve kaliteyi artırmanın anahtarı olarak görülüyor. Kitap, bu devrimsel yaklaşımın temellerini ve uygulamalarını ayrıntılı bir şekilde ortaya koyarak, modern iş dünyası için önemli bir kaynak haline geliyor.

Kanal Önerisi (Discord,Youtube) : ahmet alp balkan




Junior ve Medior arkadaşlar için kanal önerisi. Kenisi Google, Twitter, Microst'da çalışmış, halihazırda Linkedin'de çalışan Ahmet Alp Balkan'ın kanalı. Ayrıca discord kanalına da abone olabliyorsunuz.


Discord : https://bit.ly/ahmetb-discord

Youtube :https://www.youtube.com/@ahmetb

Java PriorityQueue nedir? Örnek bir senaryo ile Java kodu



Java'da PriorityQueue sınıfı, bir öncelik kuyruğunu uygulayan bir koleksiyondur. Bu kuyruk, öğeleri doğal sıralamalarına göre veya bir Comparator aracılığıyla sağlanan bir sıralamaya göre saklar. PriorityQueue sınıfı, Java'nın java.util paketinin bir parçasıdır ve Queue arayüzünü uygular. Öncelik kuyruklarının(PriorityQueue) ana özellikleri şunlardır:

  • Sıralama: Öğeler, doğal sıralamalarına (örneğin, sayılar küçükten büyüğe) veya bir Comparator ile belirtilen bir sıraya göre saklanır.

  • Veri Yapısı: Genellikle bir ikili heap yapısı kullanılarak uygulanır, bu da hem ekleme (offer) hem de en yüksek öncelikli öğeyi çıkarma (poll) işlemlerinin verimli bir şekilde yapılmasını sağlar.

  • Ekleme ve Kaldırma: offer metodu, kuyruğa yeni bir öğe eklemek için kullanılır. poll metodu, kuyruktan en yüksek öncelikli öğeyi kaldırır ve döndürür. Eğer kuyruk boşsa, poll null değerini döndürür.

  • Görüntüleme: peek metodu, en yüksek öncelikli öğeyi kaldırmadan görüntülemek için kullanılır. Kuyruk boşsa, null değerini döndürür.

  • Boyut ve Kapasite: PriorityQueue başlangıçta belirli bir kapasite ile oluşturulabilir ve ihtiyaç duyuldukça otomatik olarak genişler.

  • İterasyon: PriorityQueue üzerinde iterasyon yapmak, öğeleri kesin bir sırayla döndürmez. Belirli bir sırayla elemanlara erişmek için öğeleri kuyruktan kaldırmak gerekir.

PriorityQueue sınıfı, özellikle performans açısından verimli bir şekilde öncelikli elemanlara erişim gerektiren durumlarda, örneğin görev planlayıcılarında veya minimum/maximum hesaplamalarında kullanışlıdır.

Örnek bir senaryo ile Java kodu

Senaryo: Hasta Sıralaması

Bir hastanede, acil servise gelen hastaların tedavi önceliğini belirlemek için bir öncelik kuyruğu kullanılıyor. Her hastanın bir "aciliyet derecesi" vardır. Bu derece ne kadar yüksekse, hastanın tedavi önceliği o kadar yüksek olur. Hastalar öncelik sırasına göre tedavi edilir.

Bu senaryoda, hastaları Patient adında bir sınıf ile temsil edeceğiz. Her Patient nesnesinin bir ismi ve bir aciliyet derecesi olacak. PriorityQueue sınıfını kullanarak hastaları aciliyet derecelerine göre sıralayacağız.


Kod:

java

Copy code

import java.util.PriorityQueue;

import java.util.Comparator;


// Hasta sınıfı

class Patient {

    String name;

    int urgency;

    public Patient(

        final String name,

        final int urgency

    ) {

        this.name = name;

        this.urgency = urgency;

    }


    @Override

    public String toString() {

        return name + " (Aciliyet Derecesi: " + urgency + ")";

    }

}

public class HospitalQueue {

    public static void main(String[] args) {

        // Öncelik kuyruğunu, aciliyet derecesine göre ters sıralama ile oluşturuyoruz

        PriorityQueue<Patient> queue = new PriorityQueue<>(Comparator.comparingInt(p -> -p.urgency));

        // Hastaları kuyruğa ekliyoruz

        queue.offer(new Patient("Ali", 5));

        queue.offer(new Patient("Ayşe", 3));

        queue.offer(new Patient("Ahmet", 10));

        queue.offer(new Patient("Fatma", 1));

      // Hastaları öncelik sırasına göre tedavi ediyoruz

        while (!queue.isEmpty()) {

            Patient nextPatient = queue.poll();

            System.out.println("Tedavi edilen             hasta: " + nextPatient);

        }

    }

}

Bu kodda, Patient sınıfı tanımlanır ve her hastanın ismi ve aciliyet derecesi saklanır. HospitalQueue sınıfının main metodunda, PriorityQueue sınıfından bir nesne oluşturulur ve Comparator ile hastaların aciliyet derecelerine göre sıralanması sağlanır. Daha sonra hastalar kuyruğa eklenir ve öncelik sırasına göre tedavi edilir. Bu sırada, en yüksek aciliyet derecesine sahip hasta öncelikle tedavi edilir.

queue.poll() edildiğinde ilk önce hangi hasta kuruktan çekilir?

Bu örnekte, queue.poll() çağrıldığında, PriorityQueue içindeki en yüksek aciliyet derecesine sahip hasta ilk olarak kuyruktan çekilir. PriorityQueue burada Comparator kullanılarak ters sıralama ile oluşturulduğu için, en yüksek aciliyet derecesine (yani en büyük sayıya) sahip hasta en önce çıkarılır.

Kodda tanımlanan hastalar ve aciliyet dereceleri şöyleydi:

Ali, Aciliyet Derecesi: 5

Ayşe, Aciliyet Derecesi: 3

Ahmet, Aciliyet Derecesi: 10

Fatma, Aciliyet Derecesi: 1

Bu durumda, queue.poll() ilk çağrıldığında, en yüksek aciliyet derecesine (10) sahip olan "Ahmet" isimli hasta kuyruktan çekilir.

ML Gözetimli öğrenme, Örnek bir veri seti ile Spark-Java sınıflandırma örneği

Gözetimli öğrenme, modelin belirli bir çıktıyı tahmin etmesi gerektiği durumlarda kullanılır. Eğitim veri setinde girdi ve beklenen çıktılar bulunur ve model bu veriler üzerinde eğitilir.





Gözetimli öğrenme (supervised learning), yapay zeka ve makine öğrenmesinde sıkça kullanılan bir yöntemdir. Bu yöntemde, bir modelin belirli bir çıktıyı doğru bir şekilde tahmin etmesi amaçlanır. Gözetimli öğrenme süreci şöyle işler:


Veri Toplama: Gözetimli öğrenme için ilk adım, eğitim veri setinin toplanmasıdır. Bu veri seti, modelin öğrenmesi için gerekli bilgileri içerir.


Eğitim Veri Seti: Eğitim veri seti, girdi (input) ve beklenen çıktılar (output) içerir. Girdiler, modelin tahmin yapması için kullanacağı verilerdir. Beklenen çıktılar ise, modelin bu girdilere karşılık üretmesi gereken sonuçlardır.


Model Eğitimi: Model, eğitim veri seti kullanılarak eğitilir. Bu süreçte, model girdi verilerini alır ve bu verilere dayanarak bir çıktı üretir. Modelin ürettiği çıktı, beklenen çıktı ile karşılaştırılır ve modelin performansı değerlendirilir.


Optimizasyon ve Ayarlama: Modelin performansı yeterli değilse, algoritma parametreleri ve model yapılandırması optimize edilerek modelin daha doğru tahminler yapması sağlanır.


Test ve Değerlendirme: Model eğitildikten sonra, genellikle daha önce görmediği verilerle test edilir. Bu aşama, modelin gerçek dünya verileri üzerinde ne kadar iyi performans gösterdiğini değerlendirmek için önemlidir.


Gözetimli öğrenme, sınıflandırma (classification) ve regresyon (regression) gibi çeşitli problem türleri için kullanılabilir. Örneğin, sınıflandırma problemi, bir e-postanın "spam" veya "spam değil" olarak sınıflandırılması olabilir. Regresyon problemi ise, bir evin değerinin tahmin edilmesi gibi sürekli bir çıktının üretilmesini içerebilir.


Gözetimli öğrenmenin devamında, modelin gerçek dünya verileri üzerindeki performansını değerlendirme ve iyileştirme süreçleri önem taşır:


Gerçek Dünya Verileri ile Test: Model, eğitim aşamasında görmediği gerçek dünya verileri ile test edilir. Bu, modelin genelleme yeteneğini ve yeni verilere nasıl tepki verdiğini anlamak için önemlidir.


Değerlendirme Metrikleri: Modelin başarısını ölçmek için çeşitli değerlendirme metrikleri kullanılır. Sınıflandırma problemleri için doğruluk (accuracy), hassasiyet (precision), duyarlılık (recall) ve F1 skoru gibi metrikler; regresyon problemleri için ise ortalama kare hatası (mean squared error) ve ortalama mutlak hata (mean absolute error) gibi metrikler tercih edilir.


Hata Analizi ve İyileştirme: Modelin performansını artırmak için hata analizi yapılır. Yanlış tahminler incelenir ve bu hataların nedenleri belirlenmeye çalışılır. Buna dayanarak, modelin eğitim süreci veya veri seti üzerinde iyileştirmeler yapılabilir.


Özellik Mühendisliği (Feature Engineering): Modelin performansını artırmak için özellik mühendisliği yapılır. Bu süreçte, mevcut verilerden daha anlamlı özellikler (features) türetilir veya gereksiz özellikler çıkarılır.


Modelin Güncellenmesi ve Bakımı: Model, zaman içinde değişen veri ve gereksinimlere uyum sağlayabilmek için düzenli olarak güncellenir ve bakımı yapılır. Bu süreç, modelin uzun vadeli başarısını sağlamak için önemlidir.


Gözetimli öğrenme, finansal tahminler, tıbbi teşhis, görüntü ve ses tanıma, metin sınıflandırma gibi pek çok alanda kullanılmaktadır. Bu yöntemin başarısı, hem kullanılan algoritmanın kalitesine hem de eğitim veri setinin yeterliliğine ve doğruluğuna bağlıdır. Veri setinin kalitesi ve çeşitliliği arttıkça, modelin daha doğru ve güvenilir tahminler yapma ihtimali de artar.


Şimdi senden 50 adetlik örnek veri seti isteyeceğim. Daha sonraki mesajımda bu veri seti üzerinden bir sınıflandırmayı Apache Spark ve Javayla model oluşturmanı isteyeceğim. Önce bana veri setini ver ve feature valıe ve labelların ne olduğunu söyle.


İşte sınıflandırma için kullanabileceğiniz 50 örneklik bir veri seti:


Özellikler (Features):


Feature1: 0 ile 100 arasında rastgele değerler.

Feature2: 0 ile 50 arasında rastgele değerler.

Feature3: İkili değerler (0 veya 1).

Etiket (Label):


Label: 0 veya 1 olarak sınıflandırılmış. Bu etiket, belirli bir kurala göre hesaplanmıştır: (Feature1 + Feature2 * 2 + Feature3 * 50) > 100.

İlk 10 örnek şu şekildedir:


Feature1 Feature2 Feature3 Label

54.88 28.51 1 1

71.52 21.93 0 1

60.28 49.42 1 1

54.49 5.10 0 0

42.37 10.44 0 0

64.59 8.07 1 1

43.76 32.66 1 1

89.18 12.66 0 1

96.37 23.32 0 1

38.34 12.22 0 0

Bu veri seti, Apache Spark ve Java ile model oluşturmak için kullanılabilir. ​​


Şimdi Spark ve java ile kodunu yaz ve modeli oluştur


Apache Spark ve Java kullanarak basit bir sınıflandırma modeli oluşturmak için aşağıdaki adımları takip edebilirsiniz. Burada, Spark MLlib kütüphanesini kullanacağız. Öncelikle, gerekli kütüphaneleri içe aktararak başlayalım:


java

Copy code

import org.apache.spark.sql.SparkSession;

import org.apache.spark.sql.Dataset;

import org.apache.spark.sql.Row;

import org.apache.spark.ml.feature.VectorAssembler;

import org.apache.spark.ml.classification.LogisticRegression;

import org.apache.spark.ml.classification.LogisticRegressionModel;

Daha sonra, bir SparkSession başlatarak işlemlere başlayabilirsiniz:


java

Copy code

SparkSession spark = SparkSession

  .builder()

  .appName("ClassificationExample")

  .config("spark.master", "local")

  .getOrCreate();

Veri setinizi Spark DataFrame formatına dönüştürmek için, öncelikle verilerinizi bir CSV dosyasına kaydetmeniz ve sonra Spark ile yüklemeniz gerekir. Burada, verilerinizi bir CSV dosyasında olduğunu varsayıyorum:


java

Copy code

Dataset<Row> data = spark.read().format("csv")

  .option("header", "true")

  .option("inferSchema", "true")

  .load("path/to/your/csvfile.csv");

VectorAssembler kullanarak özellikleri bir vektöre dönüştürün:


java

Copy code

VectorAssembler assembler = new VectorAssembler()

  .setInputCols(new String[]{"Feature1", "Feature2", "Feature3"})

  .setOutputCol("features");


Dataset<Row> transformedData = assembler.transform(data);

Logistic Regression modelini oluşturun ve verilerle eğitin:


java

Copy code

LogisticRegression lr = new LogisticRegression()

  .setLabelCol("Label")

  .setFeaturesCol("features");


LogisticRegressionModel model = lr.fit(transformedData);

Modeli test verileri üzerinde değerlendirme ve tahmin yapma için kullanabilirsiniz. Burada, basitlik adına, modeli eğitim verisi üzerinde değerlendirdik. Gerçek bir senaryoda, veri setinizi eğitim ve test setlerine bölmelisiniz.


Son olarak, Spark oturumunu kapatmayı unutmayın:


spark.stop();

Bu kod parçacığı, temel bir sınıflandırma modelinin nasıl oluşturulacağını göstermektedir. Gerçek dünya uygulamalarında, veri ön işleme, model parametre ayarlama ve performans değerlendirme gibi ek adımlar gerekebilir.

Dağıtık sistemlerde karşışabileceğimiz problemler. Örnek bir senaryo




Dağıtık sistemler, birden fazla bilgisayarın bir ağ üzerinden birbirleriyle iletişim kurarak bir görevi gerçekleştirmesi esasına dayanır. Bu sistemler, modern bilgi teknolojisinin birçok alanında kullanılır, ancak çeşitli sorunlarla karşılaşılabilir. İşte dağıtık sistemlerde karşılaşılabilecek bazı yaygın problemler:


Eşzamanlama ve Zamanlama Sorunları: Dağıtık sistemlerde, farklı makinelerde çalışan işlemler arasında uyum sağlamak zor olabilir. Zamanlama ve eşzamanlama sorunları, veri tutarsızlığına ve performans düşüşlerine yol açabilir.


Veri Tutarsızlığı ve Çoğaltma Sorunları: Verilerin birden fazla noktada çoğaltılması, veri tutarsızlığına sebep olabilir. Bu, veri güncellemelerinin tüm kopyalara düzgün bir şekilde yayılmamasından kaynaklanır.


Güvenlik Zorlukları: Dağıtık sistemler, veri aktarımı sırasında güvenlik açıklarına daha fazla maruz kalabilir. Veri şifreleme ve güvenli iletişim protokolleri bu sorunları azaltmada önemlidir.


Ağ Sorunları ve Gecikmeler: Ağ bağlantısı sorunları ve gecikmeler, dağıtık sistemlerde performansı etkileyebilir. Özellikle, yüksek gecikme süreleri verimliliği düşürebilir.


Hata Toleransı ve Güvenilirlik Sorunları: Dağıtık sistemler, tek bir noktada meydana gelebilecek hatalara karşı daha dayanıklı olmasına rağmen, sistem genelinde hata yönetimi karmaşık hale gelebilir.


Kaynak Yönetimi ve Ölçeklenebilirlik: Kaynakların etkili bir şekilde yönetilmesi ve sistem ölçeklendirildikçe performansın korunması, dağıtık sistemlerde önemli bir zorluktur.


Uygulama Geliştirme ve Test Zorlukları: Dağıtık sistemlerde uygulama geliştirmek ve test etmek, tek bir makine üzerinde çalışan sistemlere göre daha karmaşıktır. Farklı sistem bileşenlerinin birlikte uyumlu çalışmasını sağlamak önemlidir.


Bu sorunlar, çeşitli algoritmalar, protokoller ve tasarım yaklaşımları kullanılarak ele alınabilir. Örneğin, zaman damgası algoritmaları ve kilit mekanizmaları eşzamanlama sorunlarını çözmeye, veri çoğaltma stratejileri tutarsızlık sorunlarına, ve yük dengeleme algoritmaları kaynak yönetimi sorunlarına yardımcı olabilir.


Örnek bir senaryo 

Elbette, işte dağıtık sistemlerle ilgili bir senaryo:


Senaryo: Çevrimiçi Perakende Satış Platformu

Durum: Bir çevrimiçi perakende satış platformu, dünya çapında milyonlarca kullanıcıya hizmet vermektedir. Platform, farklı coğrafi konumlardaki veri merkezlerinde barındırılan çok sayıda sunucu üzerinde çalışmaktadır. Müşteriler, çeşitli ürünleri arayabilir, inceleyebilir ve satın alabilirler. Platform ayrıca satıcıların ürünlerini listelemelerine ve yönetmelerine olanak tanır.


Dağıtık Sistem Sorunları ve Çözümleri:


Eşzamanlama Sorunları:


Sorun: Müşteriler aynı anda aynı ürün üzerinde işlem yapmaya çalıştığında, stok sayısında tutarsızlıklar oluşabilir.

Çözüm: Optimistik kilitleme mekanizmaları kullanarak, eş zamanlı işlemlerin doğru bir şekilde yönetilmesini sağlamak.

Veri Çoğaltma ve Tutarsızlık:


Sorun: Farklı veri merkezlerindeki ürün bilgileri arasında tutarsızlıklar oluşabilir.

Çözüm: Güçlü tutarlılık modeli veya eventual consistency yaklaşımını benimseyerek, veri çoğaltmasını etkin bir şekilde yönetmek.

Güvenlik Zorlukları:


Sorun: Kullanıcı verilerinin ve ödeme bilgilerinin güvenliğinin sağlanması gerekmektedir.

Çözüm: Güçlü şifreleme yöntemleri ve güvenli iletişim protokolleri kullanarak veri güvenliğini artırmak.

Ağ Gecikmeleri:


Sorun: Kullanıcıların platforma erişiminde gecikmeler yaşanabilir.

Çözüm: İçerik Dağıtım Ağları (CDN) kullanarak kullanıcılara daha yakın noktalardan hizmet vermek ve gecikmeyi azaltmak.

Hata Toleransı:


Sorun: Bir sunucunun çökmesi, hizmet kesintilerine yol açabilir.

Çözüm: Yüksek kullanılabilirlik ve felaket kurtarma stratejileri ile sistem güvenilirliğini artırmak.

Kaynak Yönetimi ve Ölçeklenebilirlik:


Sorun: Kullanıcı sayısının artmasıyla sistem kaynaklarının yetersiz kalması.

Çözüm: Otomatik ölçeklendirme ve etkin kaynak yönetimi ile talebe göre kaynakları ayarlamak.

Uygulama Geliştirme ve Test Zorlukları:


Sorun: Farklı sunucular ve hizmetler arasında entegrasyon ve sürekli işbirliği gereksinimi.

Çözüm: Mikro hizmetler mimarisi ve sürekli entegrasyon/dışa verme (CI/CD) yaklaşımlarını benimsemek.

Bu senaryoda, dağıtık sistemlerin karmaşıklığı ve çeşitli zorlukları, etkin yönetim ve uygun teknolojik çözümlerle başarılı bir şekilde ele alınmıştır.

AWS CookBook Kitabı: AWS'de Başarı için Tarifler - John Culkin, Mike Zazon & Kesha Williams - GOTO 2022

 



Graph Database konusu ve Neo4j anlatımı 40 kayıtlık örnek veri seti ver Bu veri setinden Cypher sorgu dilini kullanarak kullanıcı 1 in arkadaşlarını sorgular mısın? Çeşitli büyük teknoloji şirketlerine başvuran kişiler, kişilerin özellikleri, şirketler, kişilerin şirketlerle yaptığı mülakatlar, mülakat sonuçlarını tanımlayan veri setleri ve ilişkiler



Graf veritabanları, verileri graf yapısı olarak depolayan ve işleyen veritabanlarıdır. Bu veritabanları, düğümler (nodelar), kenarlar (edgeler) ve özellikler (properties) kullanarak veriler arasındaki ilişkileri ifade eder. Graf veritabanlarının en bilinen örneklerinden biri Neo4j'dir.


Neo4j, açık kaynak kodlu bir graf veritabanı yönetim sistemidir. Neo4j, verileri graf yapısında saklar ve bu yapının avantajlarını, özellikle karmaşık ilişkiler ve bağlantılar içeren veri setleri için kullanır. Neo4j'nin bazı önemli özellikleri şunlardır:


Esnek Veri Modeli: Neo4j, verileri düğümler, kenarlar ve özellikler olarak depolar. Bu esnek yapı, çeşitli veri tiplerini ve karmaşık ilişkileri kolayca modellemeye olanak tanır.


Sorgu Dili (Cypher): Neo4j, Cypher adında özel bir sorgu dili kullanır. Cypher, graf verilerini sorgulamak ve manipüle etmek için güçlü ve kullanıcı dostu bir arayüz sunar.


Performans: Graf veritabanları, özellikle ilişkisel veritabanlarına kıyasla, ilişkisel sorguları çok daha hızlı işleyebilir. Neo4j, veri ilişkileri üzerinden hızlı sorgulama ve veri erişimi sağlar.


Skalabilite ve Güvenilirlik: Neo4j, büyük veri setlerini işleyebilir ve yüksek kullanılabilirlik ve veri bütünlüğü sağlar.


Uygulama Alanları: Sosyal ağ analizi, öneri sistemleri, sahtekarlık tespiti, ağ analizi ve karmaşık veri ilişkilerinin analizi gibi birçok alanda kullanılır.


Neo4j'nin kurulumu ve kullanımı görece basittir. Topluluk sürümü ücretsiz olarak sunulurken, daha gelişmiş özelliklere sahip ticari sürümleri de mevcuttur. Neo4j, veri ilişkilerini anlamak ve analiz etmek için güçlü bir araçtır ve günümüzde birçok sektörde popülerdir.


Hangi durumlarda sql databaselerden kaçınıp graph db kullanmalıyız?


SQL veritabanları ve graf veritabanları, farklı veri yapılarına ve kullanım senaryolarına hizmet eder. Belirli durumlarda SQL veritabanlarından kaçınıp graf veritabanlarını tercih etmek daha uygun olabilir. İşte bu durumlardan bazıları:


Karmaşık İlişkisel Veriler: Veri setiniz karmaşık ilişkisel yapılar içeriyorsa ve bu ilişkiler ana odak noktanızsa, graf veritabanları daha uygun olabilir. Örneğin, sosyal ağlar, öneri sistemleri veya ağ analizleri gibi.


Derinlemesine Bağlantı Analizi: Eğer veri setinizdeki bağlantıları derinlemesine analiz etmeniz gerekiyorsa (örneğin, bir kullanıcının arkadaşlarının arkadaşları gibi), graf veritabanları bu tür sorguları çok daha etkili bir şekilde işleyebilir.


Dinamik Şema Gereksinimi: Graf veritabanları, şemasız veya yarı şemalı verileri işlemek için daha uygun olabilir. Eğer veri yapınız sürekli değişiyorsa ve esnek bir şema gerekiyorsa, graf veritabanları tercih edilebilir.


Performans İhtiyaçları: Graf veritabanları, özellikle ilişkisel veritabanlarına göre, bağlantılı veriler üzerinde yapılan sorgularda genellikle daha yüksek performans sunar. Eğer çok sayıda bağlantılı veri üzerinde sorgu yapmanız gerekiyorsa, graf veritabanları daha verimli olabilir.


Yol Bulma ve Ağ Analizi: Graf veritabanları, en kısa yol bulma, ağ analizi ve benzeri görevler için daha uygun olabilir. Örneğin, lojistik, ulaşım ağları veya iletişim ağları gibi alanlarda kullanılabilir.


Polimorfik İlişkiler: Graf veritabanları, birden fazla türdeki nesneler arasındaki ilişkileri modellemek için daha esnektir. Eğer veri modeliniz polimorfik ilişkiler içeriyorsa, graf veritabanları bu ihtiyaca daha iyi yanıt verebilir.


Gerçek Zamanlı Tavsiye Sistemleri: Özellikle e-ticaret, içerik önerisi ve benzeri alanlarda, gerçek zamanlı ve dinamik öneri sistemleri için graf veritabanları daha etkili olabilir.


Her iki veritabanı türünün de avantajları ve dezavantajları vardır. Seçim yaparken, veri modelinizin gereksinimleri, uygulamanızın ölçeklendirilebilirliği, sorgu türleri ve performans ihtiyaçları gibi faktörleri dikkate almanız önemlidir.

40 kayıtlık örnek veri seti ver

Bir örnek veri seti oluşturmak için genellikle veri setinin kullanılacağı bağlam ve ihtiyaçlar önemlidir. Ancak, genel bir örnek olarak, basit bir sosyal ağ veri seti tasarlayabiliriz. Bu veri seti, 40 kullanıcıyı (düğüm) ve bu kullanıcılar arasındaki arkadaşlık ilişkilerini (kenar) içerebilir. Her kullanıcı için temel özellikler (ad, yaş, konum gibi) belirleyebiliriz.


Aşağıda, bu tür bir veri seti için basit bir örnek verilmiştir:


Kullanıcılar (Düğümler)

Kullanıcı ID: 1, Adı: "Ahmet", Yaşı: 25, Konum: "İstanbul"

Kullanıcı ID: 2, Adı: "Ayşe", Yaşı: 30, Konum: "Ankara"

Kullanıcı ID: 3, Adı: "Mehmet", Yaşı: 22, Konum: "İzmir"

...

Kullanıcı ID: 40, Adı: "Elif", Yaşı: 28, Konum: "Bursa"

Arkadaşlık İlişkileri (Kenarlar)

Kullanıcı 1 - Kullanıcı 2

Kullanıcı 1 - Kullanıcı 3

Kullanıcı 2 - Kullanıcı 4

...

Kullanıcı 39 - Kullanıcı 40

Bu veri seti, her kullanıcı için ID, Adı, Yaşı ve Konum gibi özellikleri içerir. Ayrıca, kullanıcılar arasındaki arkadaşlık ilişkileri de kenarlar olarak tanımlanmıştır. Gerçek dünya veri setleri genellikle çok daha karmaşık ve büyük olabilir, ancak bu örnek, graf veritabanlarındaki temel yapıyı ve ilişkileri göstermek için yeterlidir.


Bir Neo4j veritabanına bu veri setini yüklemek için Cypher sorgu dilini kullanabilirsiniz. Öncelikle düğümleri oluşturmak için CREATE komutlarını, ardından ilişkileri kurmak için MATCH ve CREATE komutlarını kullanabilirsiniz.


Bu veri setinden  Cypher sorgu dilini kullanarak kullanıcı 1 in arkadaşlarını sorgular mısın?


Elbette, Neo4j'de Cypher sorgu dilini kullanarak belirli bir kullanıcının arkadaşlarını sorgulamak oldukça basittir. Örneğin, kullanıcı 1'in arkadaşlarını bulmak için aşağıdaki Cypher sorgusunu kullanabiliriz:


cypher

Copy code

MATCH (u:User {id: 1})-[:FRIEND]->(friend:User)

RETURN friend

Bu sorgu, şu adımları izler:


MATCH komutu, veritabanındaki düğümler ve kenarlar arasındaki deseni eşleştirmek için kullanılır.


(u:User {id: 1})-[:FRIEND]->(friend:User) deseni, id özelliği 1 olan bir User düğümü (u) ile arkadaş (FRIEND ilişkisi) olan başka User düğümleri (friend) arasındaki ilişkiyi ifade eder.


RETURN friend komutu, sorgu sonucunda bulunan arkadaş düğümlerini döndürür.


Bu sorgu, kullanıcı 1'in tüm arkadaşlarını listeleyecektir. Burada, User düğümleri için id, name, age, location gibi özellikler tanımlanmış olabilir ve FRIEND ilişkisi, iki kullanıcı arasındaki arkadaşlık bağını temsil eder.


Unutmayın ki bu sorgu, yukarıda tanımladığımız örnek veri seti yapılandırmasına dayanmaktadır. Gerçek bir Neo4j veritabanında, düğüm ve ilişki türleri, özellik isimleri ve yapıları veritabanınızın tasarımına bağlı olarak değişebilir.


Örnek 2


Çeşitli büyük teknoloji şirketlerine başvuran kişiler, kişilerin özellikleri, şirketler, kişilerin şirketlerle yaptığı mülakatlar, mülakat sonuçlarını tanımlayan veri setleri ve ilişkiler


Bir veri seti oluşturmak için öncelikle düğüm (node) ve kenar (edge) tiplerini tanımlamak gerekir. Bu örnekte, düğümler olarak 'Adaylar' (Candidates), 'Şirketler' (Companies) ve 'Mülakatlar' (Interviews) kullanılabilir. Kenarlar, bu düğümler arasındaki ilişkileri tanımlar. Aşağıda, bu veri setinin bir örneğini ve bu düğümler arasındaki potansiyel ilişkileri bulabilirsiniz.


Düğümler (Nodes)

Adaylar (Candidates)

Özellikler: ID, Adı, Yaşı, Eğitim, Teknik Beceriler, Deneyim Yılı

Şirketler (Companies)

Özellikler: ID, Şirket Adı, Sektör, Konum

Mülakatlar (Interviews)

Özellikler: ID, Tarih, Mülakat Türü (Teknik, HR, vs.), Durum (Beklemede, Kabul, Red)

Kenarlar (Edges)

Aday-Şirket İlişkisi

Adayın başvurduğu şirket

Aday-Mülakat İlişkisi

Adayın katıldığı mülakat

Şirket-Mülakat İlişkisi

Şirketin gerçekleştirdiği mülakat

Örnek Veri Seti

Adaylar

ID: 1, Adı: "Aylin", Yaşı: 28, Eğitim: "Bilgisayar Mühendisliği", Teknik Beceriler: ["Python", "SQL"], Deneyim Yılı: 5

ID: 2, Adı: "Emre", Yaşı: 32, Eğitim: "Yazılım Mühendisliği", Teknik Beceriler: ["Java", "C++"], Deneyim Yılı: 7

...

Şirketler

ID: 1, Şirket Adı: "TeknoDev", Sektör: "Yazılım", Konum: "İstanbul"

ID: 2, Şirket Adı: "DataCorp", Sektör: "Veri Analizi", Konum: "Ankara"

...

Mülakatlar

ID: 1, Aday ID: 1, Şirket ID: 1, Tarih: "2023-01-15", Mülakat Türü: "Teknik", Durum: "Beklemede"

ID: 2, Aday ID: 2, Şirket ID: 2, Tarih: "2023-01-20", Mülakat Türü: "HR", Durum: "Kabul"

...

Bu veri seti, teknoloji şirketlerine başvuran adayların, şirketlerin ve yapılan mülakatların temel özelliklerini içerir. Bu veri seti üzerinde, adayların hangi şirketlere başvurduğunu, hangi mülakatlara katıldığını ve mülakat sonuçlarını sorgulamak mümkündür. Neo4j gibi bir graf veritabanında, bu tür verilerin ilişkisel yapısını ve karmaşıklığını etkili bir şekilde yönetebilir ve analiz edebilirsiniz.


Kenarlara örnek veri ver


Kenarlar, graf veritabanlarında düğümler (nodelar) arasındaki ilişkileri temsil eder. Önceki örneğimizde belirttiğimiz 'Adaylar', 'Şirketler' ve 'Mülakatlar' düğümleri için kenarlar oluşturacağız. Bu kenarlar, adayların şirketlere yaptığı başvuruları ve katıldıkları mülakatları temsil edecek.


Kenar Örnekleri

Aday-Şirket Kenarları (Başvurular)

Bu kenarlar, adayların hangi şirketlere başvurduğunu gösterir.


Aday ID: 1 - Şirket ID: 1 (Aylin, TeknoDev'e başvurdu)

Aday ID: 2 - Şirket ID: 2 (Emre, DataCorp'a başvurdu)

...

Aday-Mülakat Kenarları

Bu kenarlar, adayların hangi mülakatlara katıldığını gösterir.


Aday ID: 1 - Mülakat ID: 1 (Aylin, TeknoDev ile mülakat yaptı)

Aday ID: 2 - Mülakat ID: 2 (Emre, DataCorp ile mülakat yaptı)

...

Şirket-Mülakat Kenarları

Bu kenarlar, şirketlerin hangi mülakatları gerçekleştirdiğini gösterir.


Şirket ID: 1 - Mülakat ID: 1 (TeknoDev, Aylin ile mülakat yaptı)

Şirket ID: 2 - Mülakat ID: 2 (DataCorp, Emre ile mülakat yaptı)

...

Bu örnekler, bir graf veritabanında nasıl ilişkisel bağlantılar kurulacağını gösterir. Kenarlar, düğümler arasında mantıksal bağlantılar oluşturarak, veri setindeki karmaşık ilişkileri anlamamıza yardımcı olur. Özellikle, bu tür bir veri seti, işe alım süreçlerinin analizinde veya işe alım süreçlerinin iyileştirilmesinde kullanılabilir. Neo4j'de bu tür verileri sorgulamak ve ilişkileri incelemek için Cypher sorgu dilini kullanabilirsiniz.


Cypher ile Aylinin mülakat yaptığı ve başarılı olduğu şirketleri listele


Aylin'in mülakat yaptığı ve başarılı olduğu şirketleri listelemek için Cypher sorgu dilini kullanabiliriz. Bu sorgu, Aylin'in mülakatlarına ve bu mülakatların sonuçlarına odaklanacaktır. Aşağıdaki sorgu, Aylin'in (varsayalım ki Aylin'in ID'si 1) başarılı olduğu mülakatları ve bu mülakatları gerçekleştiren şirketleri döndürür:


cypher

Copy code

MATCH (c:Candidate {id: 1})-[:HAS_INTERVIEW]->(i:Interview {status: "Accepted"})-[:CONDUCTED_BY]->(company:Company)

RETURN company

Bu sorgu şu şekilde çalışır:


MATCH komutu, belirli bir deseni (pattern) eşleştirmek için kullanılır.


(c:Candidate {id: 1})-[:HAS_INTERVIEW]->(i:Interview {status: "Accepted"}) deseni, ID'si 1 olan Candidate düğümü (Aylin) ile 'Accepted' (Kabul edildi) durumunda olan Interview (Mülakat) düğümleri arasındaki ilişkiyi ifade eder.


-[:CONDUCTED_BY]->(company:Company) kısmı, bu mülakatları gerçekleştiren Company (Şirket) düğümleri ile olan ilişkiyi tanımlar.


RETURN company komutu, sorgu sonucunda bulunan şirket düğümlerini döndürür.


Bu sorgu, Aylin'in başvurduğu ve başarılı olduğu mülakatları yapan şirketlerin listesini verecektir. Unutmayın ki bu sorgunun çalışması için veritabanınızda Candidate, Interview, ve Company düğümlerinin yanı sıra HAS_INTERVIEW ve CONDUCTED_BY gibi ilişkilerin doğru şekilde tanımlanmış olması gerekmektedir.

Rastgele İçerik

DonanımHaber

© tüm hakları saklıdır
made with by templateszoo