Загрузка данных
import csv
# Инициализация структур для сбора статистики
pclass_counts = {} # 1. Всего человек в каждом классе
total_survived = 0 # 2. Всего выжило
total_dead = 0 # 2. Всего утонуло
class_survived = {} # 3. Выжило в каждом классе
# 4. Для подсчета выживших по полу (на русском)
gender_survived = {"Женщины": 0, "Мужчины": 0}
gender_class_survived = {} # 5. Разбиение выживших по классам
survived_passengers = [] # 6 и 7. Возраст выживших
class_fares = {} # 8. Стоимость билетов по классам
# Открытие и чтение CSV-файла
with open("titanic.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. Сбор стоимости билетов для каждого класса
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['Мужчины']}"
)
# Сортировка пассажиров для задач 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. Пять самых молодых выживших:")
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}"
)