← Ana Sayfaya Dön
📊 Profil 3 - Veri Analizi

EduBot 2.0 - Profil 3: Veri Analizi ve Python

Gün 1: Python ile Proje Geliştirmeye Giriş

Python ile proje geliştirmeye başlarken, öncelikle iyi bir planlama yapmak ve proje yapısını doğru oluşturmak çok önemlidir. Bu gün, bir Python projesinin temel bileşenlerini, dosya organizasyonunu ve temel proje yönetimi tekniklerini öğreneceğiz.

Bir Python projesi genellikle modüller, paketler ve bir ana uygulama dosyasından oluşur. Modüller, belirli bir işlevselliği içeren Python dosyalarıdır. Paketler ise bu modülleri gruplayan ve içinde __init__.py dosyası bulunan klasörlerdir. Projenizin büyüklüğüne göre bu yapıyı ölçeklendirebilirsiniz.

Proje geliştirirken dikkat etmeniz gereken en önemli noktalardan biri de "DRY" (Don't Repeat Yourself) prensibidir. Aynı kodu birden fazla yerde yazmak yerine, fonksiyonlar ve modüller oluşturarak kodunuzu daha verimli hale getirebilirsiniz. Ayrıca, projenizin başkaları tarafından da anlaşılabilir olması için açıklayıcı isimlendirmeler yapmalı ve yeterli dokümantasyon sağlamalısınız.

Örnek Proje Yapısı

my_project/
│
├── main.py              # Ana uygulama dosyası
├── requirements.txt     # Bağımlılıklar
├── README.md            # Proje açıklaması
│
├── utils/               # Yardımcı fonksiyonlar
│   ├── __init__.py
│   ├── file_utils.py
│   └── math_utils.py
│
└── tests/               # Test dosyaları
    ├── __init__.py
    └── test_utils.py

Örnek Modül Kullanımı

# math_utils.py dosyası içeriği
def calculate_average(numbers):
    """Sayıların ortalamasını hesaplar"""
    return sum(numbers) / len(numbers) if numbers else 0

# main.py dosyası içeriği
from utils.math_utils import calculate_average

data = [10, 20, 30, 40, 50]
avg = calculate_average(data)
print(f"Ortalama: {avg}")
Ortalama: 30.0
1. Python projelerinde 'DRY' prensibi neyi ifade eder?

Gün 2: Fonksiyonel Programlama Temelleri

Fonksiyonel programlama, Python'da veri analizi ve dönüşümleri için güçlü bir paradigmadır. Bu yaklaşımda, kodunuzu bir dizi fonksiyon olarak düşünür ve bu fonksiyonları birleştirerek karmaşık işlemleri gerçekleştirirsiniz. Fonksiyonel programlamanın temel prensipleri arasında saf fonksiyonlar (aynı girdi için her zaman aynı çıktıyı üreten ve yan etkisi olmayan), yüksek dereceli fonksiyonlar (fonksiyonları parametre olarak alan veya fonksiyon döndüren) ve değişmez veri yapıları bulunur.

Python'da fonksiyonel programlama için en çok kullanılan araçlar map(), filter() ve reduce() fonksiyonlarıdır. map(), bir fonksiyonu bir veri koleksiyonunun her elemanına uygular. filter(), bir koşulu sağlayan elemanları seçer. reduce() ise bir koleksiyonu tek bir değere indirger. Bu fonksiyonlar, veri işleme boru hatları oluşturmak için çok kullanışlıdır.

Lambda fonksiyonları, fonksiyonel programlamada önemli bir rol oynar. Bunlar tek satırlık isimsiz fonksiyonlardır ve genellikle map(), filter() gibi fonksiyonlarla birlikte kullanılır. Ancak, karmaşık işlemler için normal fonksiyonlar kullanmak daha okunabilir kod sağlar. Fonksiyonel programlama, özellikle veri dönüşümleri ve analizleri sırasında kodunuzu daha temiz ve ifade edici hale getirebilir.

Örnek: Fonksiyonel Programlama Araçları

from functools import reduce

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Çift sayıları filtrele
evens = list(filter(lambda x: x % 2 == 0, numbers))

# Sayıların karesini al
squares = list(map(lambda x: x**2, evens))

# Karelerin toplamını hesapla
sum_of_squares = reduce(lambda a, b: a + b, squares)

print("Çift sayılar:", evens)
print("Kareleri:", squares)
print("Karelerin toplamı:", sum_of_squares)
Çift sayılar: [2, 4, 6, 8, 10]
Kareleri: [4, 16, 36, 64, 100]
Karelerin toplamı: 220

Liste Üreteçleri (List Comprehensions)

# Fonksiyonel yaklaşımla aynı işlemi liste üreteciyle yapma
sum_of_squares = sum([x**2 for x in numbers if x % 2 == 0])

print("Karelerin toplamı (liste üreteciyle):", sum_of_squares)
Karelerin toplamı (liste üreteciyle): 220
2. Aşağıdakilerden hangisi Python'da fonksiyonel programlama için kullanılan temel araçlardan biri değildir?

Gün 3: JSON ve API Veri Yapıları

JSON (JavaScript Object Notation), veri alışverişi için hafif bir veri formatıdır ve modern web API'larında yaygın olarak kullanılır. Python'da JSON verileriyle çalışmak oldukça kolaydır çünkü JSON yapısı Python'daki sözlük ve liste yapılarına çok benzer. json modülü, JSON verilerini Python veri yapılarına dönüştürmek (deserialization) ve Python veri yapılarını JSON formatına dönüştürmek (serialization) için gerekli araçları sağlar.

API'lar (Application Programming Interface), farklı yazılım sistemlerinin birbirleriyle iletişim kurmasını sağlayan arayüzlerdir. REST API'lar genellikle HTTP protokolünü kullanır ve veri alışverişi için JSON formatını tercih eder. Python'da API istekleri göndermek için requests kütüphanesi yaygın olarak kullanılır. Bu kütüphane, GET, POST, PUT, DELETE gibi HTTP metodlarını kullanarak API endpoint'lerine istek göndermenizi ve yanıtları işlemenizi sağlar.

API'lardan gelen verilerle çalışırken, verinin yapısını anlamak ve uygun şekilde işlemek önemlidir. Çoğu API, veriyi belirli bir şema ile döndürür ve bu şemayı anlamak, istediğiniz verilere erişmek için kritiktir. Ayrıca, API isteklerinde hata yönetimi de önemli bir konudur. HTTP durum kodlarını kontrol etmek ve olası hatalara karşı kodunuzu hazırlamak, daha sağlam uygulamalar geliştirmenizi sağlar.

Örnek: JSON İşlemleri

import json

# Python veri yapısı
data = {
    "name": "EduBot",
    "version": 2.0,
    "features": ["Python eğitimi", "Proje temelli öğrenme", "Veri analizi"],
    "active": True
}

# Python'dan JSON'a dönüştürme
json_data = json.dumps(data, indent=2)
print("JSON Verisi:")
print(json_data)

# JSON'dan Python'a dönüştürme
loaded_data = json.loads(json_data)
print("\nPython Verisi:")
print(loaded_data)
JSON Verisi:
{
  "name": "EduBot",
  "version": 2.0,
  "features": [
    "Python eğitimi",
    "Proje temelli öğrenme",
    "Veri analizi"
  ],
  "active": true
}

Python Verisi:
{'name': 'EduBot', 'version': 2.0, 'features': ['Python eğitimi', 'Proje temelli öğrenme', 'Veri analizi'], 'active': True}

Örnek: API İsteği Gönderme

import requests
from pprint import pprint

# Ücretsiz test API'si
response = requests.get("https://jsonplaceholder.typicode.com/users/1")

if response.status_code == 200:
    user_data = response.json()
    print("Kullanıcı Bilgileri:")
    pprint(user_data)
else:
    print(f"Hata oluştu: {response.status_code}")
Kullanıcı Bilgileri:
{'address': {'city': 'Gwenborough',
             'geo': {'lat': '-37.3159', 'lng': '81.1496'},
             'street': 'Kulas Light',
             'suite': 'Apt. 556',
             'zipcode': '92998-3874'},
 'company': {'bs': 'harness real-time e-markets',
             'catchPhrase': 'Multi-layered client-server neural-net',
             'name': 'Romaguera-Crona'},
 'email': 'Sincere@april.biz',
 'id': 1,
 'name': 'Leanne Graham',
 'phone': '1-770-736-8031 x56442',
 'username': 'Bret',
 'website': 'hildegard.org'}
3. Aşağıdaki Python kod parçasının çıktısı ne olur?
import json
data = {'a': 1, 'b': [2, 3]}
json_str = json.dumps(data)
print(type(json_str))

Gün 4: Proje Tasarımı: Planlama ve Modülerlik

İyi bir Python projesi tasarlamak, sadece çalışan kod yazmaktan daha fazlasını gerektirir. Projenizin uzun vadede sürdürülebilir, genişletilebilir ve bakımı kolay olması için doğru bir yapılandırma ve organizasyon şarttır. Bu gün, proje tasarımının temel prensiplerini ve modüler bir yapı oluşturma tekniklerini öğreneceğiz.

Proje planlamasına başlarken, öncelikle projenizin temel işlevselliğini ve hedeflerini net bir şekilde tanımlamalısınız. Bu, "gereksinim analizi" olarak adlandırılır. Ardından, bu işlevselliği nasıl modüllere bölebileceğinizi düşünmelisiniz. Her modül, belirli bir işlevselliği kapsamalı ve mümkün olduğunca bağımsız çalışabilmelidir. Bu yaklaşım, "yüksek bağlantısızlık ve düşük bağımlılık" prensibi olarak bilinir ve projenizin bakımını kolaylaştırır.

Modüler tasarımın bir diğer önemli avantajı da kodun yeniden kullanılabilirliğini artırmasıdır. İyi tasarlanmış modüller, farklı projelerde de kullanılabilir. Ayrıca, modüler yapı test yazmayı kolaylaştırır çünkü her modül bağımsız olarak test edilebilir. Projeniz büyüdükçe, paketler oluşturarak modülleri mantıklı bir şekilde gruplayabilirsiniz. Python'un paket yönetim sistemi (pip ve PyPI), modüler projeleri paylaşmayı ve başkalarının modüllerini kullanmayı kolaylaştırır.

Örnek: Modüler Proje Yapısı

data_analysis_project/
│
├── main.py                  # Ana uygulama giriş noktası
├── config.py                # Yapılandırma ayarları
├── requirements.txt         # Bağımlılıklar
│
├── data/                    # Veri dosyaları
│   ├── input/
│   └── output/
│
├── analysis/                # Analiz modülleri
│   ├── __init__.py
│   ├── statistical.py
│   └── visualization.py
│
├── utils/                   # Yardımcı fonksiyonlar
│   ├── __init__.py
│   ├── file_handlers.py
│   └── data_cleaners.py
│
└── tests/                   # Testler
    ├── __init__.py
    ├── test_analysis.py
    └── test_utils.py

Örnek: Modüller Arası İletişim

# analysis/statistical.py
def calculate_correlation(x, y):
    """İki veri seti arasındaki korelasyonu hesaplar"""
    n = len(x)
    if n != len(y):
        raise ValueError("Veri setleri aynı uzunlukta olmalıdır")
    
    sum_x = sum(x)
    sum_y = sum(y)
    sum_x_sq = sum(xi**2 for xi in x)
    sum_y_sq = sum(yi**2 for yi in y)
    sum_xy = sum(xi*yi for xi, yi in zip(x, y))
    
    numerator = sum_xy - (sum_x * sum_y)/n
    denominator = ((sum_x_sq - sum_x**2/n) * (sum_y_sq - sum_y**2/n)) ** 0.5
    
    return numerator / denominator if denominator != 0 else 0

# main.py
from analysis.statistical import calculate_correlation

x = [1, 2, 3, 4, 5]
y = [2, 4, 5, 4, 5]

corr = calculate_correlation(x, y)
print(f"Korelasyon katsayısı: {corr:.2f}")
Korelasyon katsayısı: 0.85
4. Modüler proje tasarımının aşağıdaki avantajlarından hangisi yanlıştır?

Gün 5: Gerçek Veri ile Çalışmak (CSV, JSON)

Gerçek dünya verileriyle çalışmak, veri analizi projelerinin en önemli ve genellikle en zorlu kısmıdır. Bu gün, Python'da CSV ve JSON formatlarındaki verileri okuma, işleme ve analiz etme tekniklerini öğreneceğiz. CSV (Comma-Separated Values), tablo verilerini depolamak için yaygın kullanılan bir formattır. JSON ise daha karmaşık ve hiyerarşik veri yapıları için idealdir.

Python'da CSV dosyalarıyla çalışmak için csv modülünü kullanabiliriz. Bu modül, CSV dosyalarını okuma ve yazma için özel fonksiyonlar sağlar. Pandas kütüphanesi (pandas) ise daha büyük ve karmaşık veri setleriyle çalışırken çok kullanışlıdır. Pandas, veri temizleme, dönüştürme ve analiz için geniş bir fonksiyon yelpazesi sunar. Özellikle eksik veri işleme, veri filtreleme ve gruplama gibi işlemlerde çok güçlüdür.

Veri analizinde ilk adım genellikle veriyi keşfetmek ve temizlemektir. Veri temizleme sürecinde, eksik değerlerin ele alınması, tutarsızlıkların düzeltilmesi ve verinin analiz için uygun formata getirilmesi gibi adımlar bulunur. Temizlenmiş veriyle çalışmak, daha doğru analiz sonuçları elde etmenizi sağlar. Ayrıca, veri görselleştirme araçları (matplotlib, seaborn gibi) kullanarak verinizdeki desenleri ve ilişkileri daha kolay anlayabilirsiniz.

Örnek: CSV Dosyası Okuma ve İşleme

import csv
from pprint import pprint

# CSV dosyasını okuma
with open('data/sample.csv', mode='r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    data = [row for row in reader]

# İlk 3 kaydı gösterme
print("CSV Verisinden Örnekler:")
pprint(data[:3])

# Belirli bir sütundaki değerleri toplama
total = sum(float(row['price']) for row in data)
print(f"\nToplam Fiyat: {total:.2f}")
CSV Verisinden Örnekler:
[{'category': 'Electronics', 'name': 'Laptop', 'price': '999.99'},
 {'category': 'Books', 'name': 'Python Guide', 'price': '29.99'},
 {'category': 'Clothing', 'name': 'T-Shirt', 'price': '19.99'}]

Toplam Fiyat: 1049.97

Örnek: Pandas ile Veri Analizi

import pandas as pd

# CSV'yi pandas DataFrame'e yükleme
df = pd.read_csv('data/sample.csv')

# Temel istatistikler
print("Temel İstatistikler:")
print(df.describe())

# Kategorilere göre gruplama
category_stats = df.groupby('category')['price'].agg(['count', 'mean', 'sum'])
print("\nKategori İstatistikleri:")
print(category_stats)
Temel İstatistikler:
           price
count    3.000000
mean   349.990000
std    495.983973
min     19.990000
25%     24.990000
50%     29.990000
75%    514.990000
max    999.990000

Kategori İstatistikleri:
             count        mean      sum
category                              
Books           1   29.990000   29.99
Clothing        1   19.990000   19.99
Electronics     1  999.990000  999.99
5. Pandas kütüphanesiyle ilgili aşağıdaki ifadelerden hangisi yanlıştır?