Загрузка данных
import csv
# Инициализация структур для сбора статистики
pclass_counts = {} # 1. Всего человек в каждом классе
total_survived = 0 # 2. Всего выжило
total_dead = 0 # 2. Всего утонуло
class_survived = {} # 3. Выжило в каждом классе
gender_survived = {"F": 0, "M": 0} # 4. Выжившие по полу
gender_class_survived = (
{}
) # 5. Разбиение выживших женщин и мужчин по классам
survived_passengers = [] # Для задач 6 и 7 (поиск старших/младших выживших)
class_fares = {} # 8. Стоимость билетов по классам
# Открытие и чтение CSV-файла
# Замените 'titanic.csv' на путь к вашему файлу
with open("titanic.csv", mode="r", encoding="utf-8") as file:
# Используем DictReader, чтобы каждая строчка была словарем
reader = csv.DictReader(file)
for row in reader:
# Пропускаем строки с незаполненными ключевыми данными, если такие есть
if not row["Pclass"] or not row["Survived"]:
continue
pclass = row["Pclass"]
survived = int(row["Survived"])
sex = row["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] = {"F": 0, "M": 0}
if sex in gender_class_survived[pclass]:
gender_class_survived[pclass][sex] += 1
# Сбор данных для 6 и 7 задач (возраст)
if row["Age"]: # Проверяем, указан ли возраст
try:
age = float(row["Age"])
# Сохраняем имя и возраст выжившего
name = f"{row.get('First Name', '')} {row.get('Last Name', '')}".strip()
if not name: # Если колонки называются иначе (например, Name)
name = row.get("Name", "Неизвестно")
survived_passengers.append({"name": name, "age": age})
except ValueError:
pass # Если возраст некорректный
else:
total_dead += 1
# 8. Сбор стоимости билетов для каждого класса
if row["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['F']}, мужчин: {gender_survived['M']}"
)
if gender_survived["F"] > gender_survived["M"]:
print(" Выжило больше женщин.")
elif gender_survived["M"] > gender_survived["F"]:
print(" Выжило больше мужчин.")
else:
print(" Выжило поровну.")
print("\n5. Разбиение выживших женщин и мужчин по классам:")
for pclass, genders in sorted(gender_class_survived.items()):
print(
f" Класс {pclass} -> Женщин: {genders['F']}, Мужчин: {genders['M']}"
)
# Сортировка пассажиров для задач 6 и 7
# Сортируем по возрасту в порядке убывания
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. Пять самых молодых выживших:")
# Берём 5 элементов с конца отсортированного списка (самые молодые)
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}"
)