Загрузка данных


import csv

pclass_counts = {}
total_survived = 0
total_dead = 0
class_survived = {}
gender_survived = {"Женщины": 0, "Мужчины": 0}
gender_class_survived = {}
survived_passengers = []
class_fares = {}

# Открытие и чтение CSV-файла
with open("titanic_passengers.csv", mode="r", encoding="utf-8") as file:
    reader = csv.DictReader(file)

    for row in reader:
        if (
            not row.get("Pclass")
            or not row.get("Survived")
            or not row.get("Sex")
        ):
            continue

        pclass = row["Pclass"].strip()
        survived = int(row["Survived"])

        sex_raw = row["Sex"].strip().lower()
        if sex_raw in ["f", "female", "женский", "ж"]:
            sex = "Женщины"
        elif sex_raw in ["m", "male", "мужской", "м"]:
            sex = "Мужчины"
        else:
            sex = "Неизвестно"

        # 1 Сколько человек плыло в каждом классе
        pclass_counts[pclass] = pclass_counts.get(pclass, 0) + 1

        # 2 Сколько всего человек выжило, а сколько утонуло
        if survived == 1:
            total_survived += 1

            # 3 Сколько человек в каждом классе выжило
            class_survived[pclass] = class_survived.get(pclass, 0) + 1

            # 4 Кого больше выжило
            if sex in gender_survived:
                gender_survived[sex] += 1

            # 5 Разбиение выживших женщин и мужчин по классам
            if pclass not in gender_class_survived:
                gender_class_survived[pclass] = {"Женщины": 0, "Мужчины": 0}
            if sex in gender_class_survived[pclass]:
                gender_class_survived[pclass][sex] += 1

            # 6 и 7 возроста
            if row.get("Age"):
                try:
                    age = float(row["Age"])
                    name = f"{row.get('First Name', '')} {row.get('Last Name', '')}".strip()
                    if not name:
                        name = row.get("Name", "Неизвестно")
                    survived_passengers.append({"name": name, "age": age})
                except ValueError:
                    pass
        else:
            total_dead += 1

        # 8 Cтоимости билетов для каждого класса
        if row.get("Fare"):
            try:
                fare = float(row["Fare"])
                if pclass not in class_fares:
                    class_fares[pclass] = []
                class_fares[pclass].append(fare)
            except ValueError:
                pass


print("1. Количество людей в каждом классе:")
for pclass, count in sorted(pclass_counts.items()):
    print(f"   Класс {pclass}: {count} ")

print(f"\n2. Всего выжило: {total_survived} утонуло: {total_dead} ")

print("\n3. Количество выживших в каждом классе:")
for pclass, count in sorted(class_survived.items()):
    print(f"   Класс {pclass}: {count} ")

print(
    f"\n4. Выжило женщин: {gender_survived['Женщины']}, мужчин: {gender_survived['Мужчины']}"
)
if gender_survived["Женщины"] > gender_survived["Мужчины"]:
    print("   Выжило больше женщин.")
elif gender_survived["Мужчины"] > gender_survived["Женщины"]:
    print("   Выжило больше мужчин.")
else:
    print("   Выжило поровну.")

print("\n5. Выжившие женщины и мужчины по классам:")
for pclass, genders in sorted(gender_class_survived.items()):
    print(
        f"   Класс {pclass} -> Женщин: {genders['Женщины']}, Мужчин: {genders['Мужчины']}"
    )

survived_passengers.sort(key=lambda x: x["age"], reverse=True)

print("\n6. Пять самых старших выживших:")
for p in survived_passengers[:5]:
    print(f"   {p['name']} — {p['age']} лет")

print("\n7. Пять самых молодых выживших:")
for p in reversed(survived_passengers[-5:]):
    print(f"   {p['name']} — {p['age']} лет")

print("\n8. Стоимость билетов по классам :")
for pclass, fares in sorted(class_fares.items()):
    max_fare = max(fares)
    min_fare = min(fares)
    avg_fare = sum(fares) / len(fares)
    print(
        f"   Класс {pclass} -> Макс: {max_fare:.2f}, Мин: {min_fare:.2f}, Средняя: {avg_fare:.2f}"
    )