In [2]:
import pandas as pd

In [226]:
titanic_data = pd.read_csv('resources/titanic.csv')

In [227]:
print(titanic_data.shape)


(891, 12)

In [228]:
print(titanic_data.Pclass.value_counts())


3    491
1    216
2    184
Name: Pclass, dtype: int64

In [229]:
#Какое количество мужчин и женщин ехало на корабле? В качестве ответа приведите два числа через пробел.
print(titanic_data.Sex.value_counts())


male      577
female    314
Name: Sex, dtype: int64

In [231]:
#Какой части пассажиров удалось выжить? 
#Посчитайте долю выживших пассажиров. 
#Ответ приведите в процентах (число в интервале от 0 до 100, знак процента не нужен), округлив до двух знаков.
died = titanic_data.Survived.value_counts()[0]
surv = titanic_data.Survived.value_counts()[1]
print(titanic_data.Survived.value_counts())
print("Выжили %d" % surv)
print("Погибли %d" % died)
print("Процент выживаемости %.2f" % (100.0 * surv / (died + surv)))


0    549
1    342
Name: Survived, dtype: int64
Выжили 342
Погибли 549
Процент выживаемости 38.38

In [51]:
# Какую долю пассажиры первого класса составляли среди всех пассажиров? 
# Ответ приведите в процентах (число в интервале от 0 до 100, знак процента не нужен), округлив до двух знаков.
total = len(titanic_data)
first_class = len(titanic_data[titanic_data.Pclass == 1])
print("%.2f" % (100.0 * first_class / total))


24.24

In [246]:
#Какого возраста были пассажиры? Посчитайте среднее и медиану возраста пассажиров. 
#В качестве ответа приведите два числа через пробел.
import numpy as np

avg = titanic_data.Age.mean(skipna=True)
meadian = titanic_data.Age.median(skipna=True)

print("%.2f %.2f" % (avg, meadian))


29.70 28.00

In [147]:
# Коррелируют ли число братьев/сестер/супругов с числом родителей/детей? 
# Посчитайте корреляцию Пирсона между признаками SibSp и Parch.
print("%.2f" % np.corrcoef(titanic_data.SibSp, titanic_data.Parch)[0, 1])


0.41

In [212]:
# Какое самое популярное женское имя на корабле? 
# Извлеките из полного имени пассажира (колонка Name) его личное имя (First Name). 
# Это задание — типичный пример того, с чем сталкивается специалист по анализу данных. 
# Данные очень разнородные и шумные, но из них требуется извлечь необходимую информацию. 
# Попробуйте вручную разобрать несколько значений столбца Name и выработать правило для извлечения имен, а также 
# разделения их на женские и мужские.

def normilize_name1(n = None):
    if '(' in n:
        return n.split("(")[1].replace(")", "")
    return n

def normilize_name2(n = None):
    if ' ' in n:
        return n.strip().split(" ")[-1].replace(")","")
    return n

def normilize_name3(n = None):
    if '"' in n:
        n = n.replace('"',"")
    if '(' in n:
        n = n.replace('(',"")
    if ')' in n:
        n = n.replace(')',"")

    return n

titanic_data['Name1'] = titanic_data.Name.str.split(", ").str.get(1).str.split("\.\s").str.get(1);
titanic_data['Name2'] = titanic_data.Name1.apply(normilize_name1)
titanic_data['ClearedName'] = titanic_data.Name2.apply(normilize_name2).apply(normilize_name3)

names = titanic_data[titanic_data.Sex == 'female']["ClearedName"];

print(names.describe())


count      314
unique     252
top       Mary
freq        10
Name: ClearedName, dtype: object