Загрузка данных
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}"
)