Python ya da Matlab ile ödev yardımı

Merhabalar,
Forumda yeniyim bir ödevim var lakin konuya hakimiyetim hiç yok tam dersler başladığında okul tatile girdi yardımcı olabilecek olan varsa çok memnun kalırım. Teşekkür ederim şimdiden.

Ödev:
kaggle’dana yada başka bir veri setiyle python yada matlab kullanılarak veri madenciliği yapılacak- sınıflandırma, kümeleme, birliktelik kuralları, regresyon vb bir kural kullanarak veri seti analiz edilecek.

Merhaba,

Birliktelik kuralları, regresyon analizi vb gibi konuları bilmiyorum ama aldığınız bir veri setini nasıl sınıflandırıp, kümelendirebileceğinizi göstermeye çalışayım.

Dosya olarak şu dosyayı seçtim; https://www.kaggle.com/spscientist/students-performance-in-exams

Bu dosyanın içine baktığım zaman şöyle ifadelerle karşılaştım:

"gender","race/ethnicity","parental level of education","lunch","test preparation course","math score","reading score","writing score"
"female","group B","bachelor's degree","standard","none","72","72","74"
"female","group C","some college","standard","completed","69","90","88"
"female","group B","master's degree","standard","none","90","95","93"
"male","group A","associate's degree","free/reduced","none","47","57","44"
"male","group C","some college","standard","none","76","78","75"

Bu yukarıdaki ifadeler sınıflandırmanın ve gruplandırmanın nasıl yapılacağı hakkında bilgi veriyor aslında.

Verileri önce female ve male olarak sınıflandırmam lazım. Her bir sınıfı da kaç tane group varsa o kadar gruba göre sınıflandırmam, her sınıflandırılmış grubu da "parental level of education" etiketine göre sınıflandırmam, sonra da "lunch" etiketine göre sınıflandırmam, sonra "test preparation course" etiketine göre sınıflandırmam ve son olarak "math", "reading" ve "writing" etiketlerine göre sınıflandırmam lazım. Sanırım "math", "reading" ve "writing" etiketlerini tek bir sözlük içerisinde anahtar olarak tutabilirim. Ve her bir anahtarın da değeri bir liste olup, notları bu listelere ekleyebilirim.

Yavaş yavaş sınıflandırmaya ve gruplandırmaya geçelim. Önce bu programda ihtiyacım olacak modülleri betik dosyasının içine aktarıyorum.

import csv
import json
  1. Aşağıdaki fonksiyon indirilen csv dosyasının verilerini okur.
def load_data_from_csv(filename):
    with open(filename, "r") as file:
        return [i for i in csv.reader(file)]
  1. Verileri sözlük yapısını kullanarak sınıflandıracağım. Bu yüzden aşağıdaki gibi uzun bir fonksiyon yazmak geldi aklıma, belki daha kısa bir yolu vardır ama uzun yolu geldi aklıma. Aşağıdaki kodları anlayabilmek için bir fonksiyonun ne anlama geldiğini, sözlük veri tipinin nasıl kullanıldığını, koşul ifadelerini, list veri tipinin bir metodu olan append'i, ve yinelenebilir bir verinin elemanlarına ulaşmak için belirli bir indeksteki veya indeks aralığındaki değerlere nasıl ulaşacağımızı bilmemiz yeterlidir.
def group(raw_data):
    data = {}
    for i, j in enumerate(raw_data[1:]):
        if j[0] not in data:
            data[j[0]] = {
                j[1]: {
                    j[2]: {
                        j[3]: {
                            j[4]: {
                                "math": [j[5]],
                                "reading": [j[6]],
                                "writing": [j[7]]
                            }
                        }
                    }
                }
            }
        else:
            if j[1] not in data[j[0]]:
                data[j[0]][j[1]] = {
                    j[2]: {
                        j[3]: {
                            j[4]: {
                                "math": [j[5]],
                                "reading": [j[6]],
                                "writing": [j[7]]
                            }
                        }
                    }
                }
            else:
                if j[2] not in data[j[0]][j[1]]:
                    data[j[0]][j[1]][j[2]] = {
                        j[3]: {
                            j[4]: {
                                "math": [j[5]],
                                "reading": [j[6]],
                                "writing": [j[7]]
                            }
                        }
                    }
                else:
                    if j[3] not in data[j[0]][j[1]][j[2]]:
                        data[j[0]][j[1]][j[2]][j[3]] = {
                            j[4]: {
                                "math": [j[5]],
                                "reading": [j[6]],
                                "writing": [j[7]]
                            }
                        }
                    else:
                        if j[4] not in data[j[0]][j[1]][j[2]][j[3]]:
                            data[j[0]][j[1]][j[2]][j[3]][j[4]] = {
                                "math": [j[5]],
                                "reading": [j[6]],
                                "writing": [j[7]]
                            }
                        else:
                            data[j[0]][j[1]][j[2]][j[3]][j[4]]["math"]\
                                .append(j[5])
                            data[j[0]][j[1]][j[2]][j[3]][j[4]]["reading"]\
                                .append(j[6])
                            data[j[0]][j[1]][j[2]][j[3]][j[4]]["writing"]\
                                .append(j[7])
    return data
  1. Bu verilerin düzgün bir şekilde nasıl gruplandırıldığını görebilmek için json modülünü kullanacağım ve verilerimizi bir json dosyasına yazdıracağım.
def save_data_to_json(filename, data):
    with open(filename, "w") as f:
        json.dump(data, f, indent=4)
  1. İşlemleri yapacak olan fonksiyonları oluşturduktan sonra İşlemleri başlatacak olan main fonksiyonumuzu tanımlıyoruz.
def main():
    raw_data = load_data_from_csv("StudentsPerformance.csv")
    grouped_data = group(raw_data)
    save_data_to_json("StudentsPerformance.json", grouped_data)

Ve main fonksiyonumuzu aşağıdaki gibi çağırıyoruz:

main()

İşlemler sona erdiğinde bulunduğumuz dizinde bir tane json dosyamızın oluşmuş olması lazım.

Json dosyasını verilerimizin nasıl gruplandırıldığını görmeniz için oluşturdum. Zorunlu değil.
Gruplandırılmış verileri kullanarak hangi işlemleri yapacaksınız bilmiyorum, bu verilere ulaşmak için anahtar sözcükleri kullanmanız gerekiyor.

Örneğin, main fonksiyonunun içindeyken şöyle bir ifade yazıp, bu ifadedeki etiketlere sahip kişilerin aldığı notları görebilirsiniz.

data1 = grouped_data["female"]["group B"]["bachelor's degree"]["standard"]["completed"]["math"]
print(data1)

Çıktı:

['66', '65']

Demek ki bu kriterlere uygun 2 kişi varmış.

Bazı anahtar sözcükler KeyError hatası verebilir. Bunun sebebi kapsayıcı etiketin böyle bir alt etiketinin olmamasıdır.

Başka bir örnek:

data2 = grouped_data["female"]["group C"]["master's degree"]["standard"]["completed"]["math"]
print(data2)

Çıktı:

['81', '69', '54']

Yukarıdaki kriterlere göre de 3 kişi varmış.

Siz anladığım kadarıyla iki veriyi birbiriyle karşılaştırıp, bazı hesaplamalar yapmak istiyorsunuz. Bu kısım benim bilgimin dışında. Yani regresyon analizi nasıl yapılır bilmiyorum. Ama bunun için matplotlib ve numpy kütüphanelerini kullanabilirsiniz. Aşağıdaki bağlantıyı incelemenizde fayda olabilir.

Neyse, şuanlık benim anlatacaklarım bu kadar. Eğer anlamadığınız bir yer varsa sorun, anlatmaya çalışayım.

5 Beğeni

Regresyon Analizi ile ilgili biraz araştırma yaptım. Regresyon analizi, doğrusal regresyon analizi, doğrusal olmayan regresyon analizleri gibi (üstel, logaritmik, trigonometrik fonksiyonlar için) alt başlıklara ayrılıyor. Ayrıca çok parametreli regresyon analizleri de yapılabiliyormuş.

Regresyon analizindeki değişkenlerden birisi bağımlı, diğeri de bağımsızdır. Örnek olarak, hava sıcaklığının artışı bağımsız bir değişkenken, hava sıcaklığına bağlı olarak oluşacak buharlaşma miktarı da bağımlı bir değişkendir.

Regresyon analizinin sonucunda ortaya y = ax + b gibi, bir fonksiyonun denkleminin katsayıları ortaya çıkar. Ve regresyon analizinin sonucunu bulduktan sonra verilen y değerinden x değerini ve verilen x değerinden de y değerini tahmin edebilirsiniz.

Öğrendiğim kadarıyla, machine learning’de belli durumlarda oluşacak sonuçları tahmin etmek için regresyon analizi kullanılıyor.

Neyse sizinle basit bir örneği paylaşacağım.

def linear_regression_analysis(x: list, y: list) -> tuple:
    return \
        (
            sum(y) * sum(i ** 2 for i in x)
            - sum(x)
            * sum(i * j for i, j in zip(x, y))
        ) / (len(x) * sum(i ** 2 for i in x) - sum(x) ** 2), \
        (len(x) * sum(i * j for i, j in zip(x, y)) - sum(x) * sum(y)) / \
        (len(x) * sum(i ** 2 for i in x) - sum(x) ** 2)


def predict(x_data: list, y_data: list, **kwargs) -> float:
    a, b = linear_regression_analysis(x_data, y_data)
    if len(kwargs) != 1::
        raise TypeError(
            f"predict expected at most 1 keyword argument, "
            f"got {len(kwargs)}"
        )
    if "x" in kwargs:
        return a + b * kwargs["x"]
    if "y" in kwargs:
        return (kwargs["y"] + a) / b


def main():
    x = [1, 2, 3]
    y = [3, 6, 9]
    print(predict(x, y, x=12))

main()

Çok teşekkür ederim.
Kusura bakmayın uzun süre giremedim teşekkür etmeyi unuttum.