#Import bibliotek import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from scipy import stats from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, classification_report, confusion_matrix import numpy as np #Wczytać zbiór Titanic z biblioteki seaborn: (https://seaborn.pydata.org/) - biblioteka do wizuaizacji danych podpowiedź - load_cośtam #Wyświetlić 10 wierszy z danymi: df = sns.load_dataset("titanic") #Wyświetlcie 10 pierwszych wierszy print("Pierwsze 10 wierszy: ") print(df.head(10)) print() #Wyświetlcie brakujących wartości przed czyszczeniem print("Wyrzucone wiersze") print(df.isnull().sum()) #Usuwamy rekordy z brakującymi danymi w polu 'age' i wyświetlenie pozostałych wierszy df = df.dropna(subset=['age']) #Wyprintujcie ilość wierszy gdzie age ma wartość NAN print() print(f"Liczba wierszy przed czyszczeniem: {len(sns.load_dataset("titanic"))}") print(f"Liczba wierszy po czyszczeniu: {len(df)}") def fare_categories(fare, fare_ranges): if fare <= fare_ranges[0]: return 0 #niska elif fare <= fare_ranges[1]: return 1 #średnia else: return 2 min_fare = df['fare'].min() max_fare = df['fare'].max() fare_step = (max_fare - min_fare) / 3 fare_ranges = [min_fare + fare_step, min_fare + 2 * fare_step] print("Przedziały cenowe biletów:") print(f"Niska: {min_fare:.2f} - {fare_ranges[0]:.2f}") print(f"Średnia: {fare_ranges[0]:.2f} - {fare_ranges[1]:.2f}") print(f"Wysoka: {fare_ranges[1]:.2f} - {max_fare:.2f}") # Sekcja 4: Przygotowanie danych do modelowania selected_features = ['sex', 'pclass', 'age', 'fare_category'] df_model = df.copy() df_model['sex'] = df_model['sex'].map({'male': 0, 'female': 1}) df_model['fare_category'] = df_model['fare'].apply(lambda x: fare_categories(x, fare_ranges)) # Sekcja 5: Podział danych i skalowanie # Przygotowanie danych X = df_model[selected_features] y = df_model['survived'] # Podział na zbiór treningowy i testowy X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Skalowanie danych scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) #Lekcja 2 trenowanie i ocena modelu model = LogisticRegression( random_state=42, #Powtarzalność wyników C = 0.2 #Siła regularyzacji ) model.fit(X_train_scaled, y_train) y_pred = model.predict(X_test_scaled) accuracy = accuracy_score(y_test, y_pred) print("\nWyniki modelu:") print(f"Dokładność: {accuracy:.3f}") #Analizowanie metryk i macierzy pomyłek print("\nRaport Klasyfikacji:") print(classification_report(y_test, y_pred)) conf_matrix = confusion_matrix(y_test, y_pred) tn, fp, fn, tp = conf_matrix.ravel() sensitivity = tp / (tp + fn) precision = tp / (tp + fp) f1 = 2 * (precision * sensitivity) / (precision + sensitivity) print("\nDodatkowe metryki:") print(f"Czułość recall: {sensitivity:.3f}") print(f"Precyzja: {precision:.3f}") print(f"F1 Score: {f1:.3f}") #Program, który będzie działać w pętli aż do zakończenia przez użytkownika #Pytanie o kontynuację po każdej prognozie #Pobieranie danych od użytkownika (Płeć, klasa, wiek, kategoria cenowa biletu) #Utworzenie nowego DataFrame z danymi pasażera i dokonanie standaryzacji #Dokonanie prognozy czy pasażer przeżyje #Wyświetlenie prognozowanego wyniku while True: print("\nPrognoza przeżycia dla nowego pasażera") print("\nWpisz 'koiec' aby zakończyć") sex_input = input("Podaj płeć (m/k): ").lower() #jeżeli koniec to papa if sex_input == 'koniec': break sex = 1 if sex_input == 'k' else 0 pclass_input = input("Podaj klasę (1/2/3): ") if pclass_input == 'koniec': break pclass = int(pclass_input) age_input = input("Podaj wiek: ") if age_input == 'koniec': break age = float(age_input) print(f"Przedziały cenowe biletów: ") print(f"0 Niska: {min_fare:.2f} - {fare_ranges[0]:.2f}") print(f"1 Średnia: {fare_ranges[0]:.2f} - {fare_ranges[1]:.2f}") print(f"2 Wysoka: {fare_ranges[1]:.2f} - {max_fare:.2f}") fare_category_input = input("Podaj kategorie cenowe biletów (0/1/2): ") if fare_category_input == 'koniec': break fare_category = int(fare_category_input) #tutaj tworzycie dataframe new_passenger = pd.DataFrame({ 'sex': [sex], 'pclass': [pclass], 'age': [age], 'fare_category': [fare_category] }) new_passenger_scaled = scaler.transform(new_passenger) prediction = model.predict(new_passenger_scaled) probability = model.predict_proba(new_passenger_scaled) print("\nPrognoza przeżycia dla nowego pasażera:") print(f"Płeć: {'Kobieta' if sex == 1 else 'Mężczyzna'}") print(f"Klasa: {pclass}") print(f"Wiek: {age}") print(f"Kategoria cenowa biletu: {'Niska' if fare_category == 0 else 'Średnia' if fare_category == 1 else 'Wysoka'}") print(f"Przeżyje: Prawdopodobieństwo przeżycia {probability[0][1]:.2%}")