<jupyter_start><jupyter_text>Открытый курс по машинному обучению. Сессия № 2Автор материала: программист-исследователь Mail.ru Group, старший преподаватель <NAME>. Материал распространяется на условиях лицензии [Creative Commons CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/). Можно использовать в любых целях (редактировать, поправлять и брать за основу), кроме коммерческих, но с обязательным упоминанием автора материала.  Тема 1. Первичный анализ данных с Pandas Практическое задание. Анализ данных пассажиров "Титаника"**Заполните код в клетках (где написано "Ваш код здесь") и ответьте на вопросы в [веб-форме](https://goo.gl/SbRcpW).**<jupyter_code>%matplotlib inline
import numpy as np
import pandas as pd
import seaborn as sb<jupyter_output><empty_output><jupyter_text>**Считаем данные из файла в память в виде объекта Pandas.DataFrame**<jupyter_code>!wget -q https://raw.githubusercontent.com/Yorko/mlcourse.ai/master/data/titanic_train.csv
data = pd.read_csv("titanic_train.csv", index_col="PassengerId")<jupyter_output><empty_output><jupyter_text>**Данные представлены в виде таблицы. Посмотрим на первые 5 строк:**<jupyter_code>data.head(5)<jupyter_output><empty_output><jupyter_text>**Для примера отберем пассажиров, которые сели в Cherbourg (Embarked=C) и заплатили более 200 у.е. за билет (fare > 200).**Убедитесь, что Вы понимаете, как эта конструкция работает. Если нет – посмотрите, как вычисляется выражение в квадратных в скобках.<jupyter_code>data[(data["Embarked"] == "C") & (data.Fare > 200)].head()<jupyter_output><empty_output><jupyter_text>**Можно отсортировать этих людей по убыванию платы за билет.**<jupyter_code>data[(data["Embarked"] == "C") & (data["Fare"] > 200)].sort_values(by="Fare", ascending=False).head()<jupyter_output><empty_output><jupyter_text>**Пример создания признака.**<jupyter_code>def age_category(age):
    """
    < 30 -> 1
    >= 30, <55 -> 2
    >= 55 -> 3
    """
    if age < 30:
        return 1
    elif age < 55:
        return 2
    else:
        return 3
age_categories = [age_category(age) for age in data.Age]
data["Age_category"] = age_categories<jupyter_output><empty_output><jupyter_text>**Другой способ – через `apply`.**<jupyter_code>data["Age_category"] = data["Age"].apply(age_category)<jupyter_output><empty_output><jupyter_text>**1. Сколько мужчин / женщин находилось на борту?**- 412 мужчин и 479 женщин- 314 мужчин и 577 женщин- 479 мужчин и 412 женщин- **577 мужчин и 314 женщин**<jupyter_code>print(data.Sex.value_counts()['male'], 'мужчин и', data.Sex.value_counts()['female'], 'женщин')<jupyter_output>577 мужчин и 314 женщин<jupyter_text>**2. Выведите распределение переменной `Pclass` (социально-экономический статус) и это же распределение, только для мужчин / женщин по отдельности. Сколько было мужчин 2-го класса?**- 104- **108**- 112- 125<jupyter_code>print(data[data.Pclass == 2].Sex.value_counts()['male'], 'мужчин 2-го класса')
sb.countplot(x='Pclass', hue='Sex', data=data)<jupyter_output>108 мужчин 2-го класса<jupyter_text>**3. Каковы медиана и стандартное отклонение платежей (`Fare`)? Округлите до 2 десятичных знаков.**- **Медиана – 14.45, стандартное отклонение – 49.69**- Медиана – 15.1, стандартное отклонение – 12.15- Медиана – 13.15, стандартное отклонение – 35.3- Медиана – 17.43, стандартное отклонение – 39.1<jupyter_code>print('Медиана –', round(data.Fare.median(), 2), ', стандартное отклонение –', round(data.Fare.std(), 2))<jupyter_output>Медиана – 14.45 , стандартное отклонение – 49.69<jupyter_text>**4. Правда ли, что люди моложе 30 лет выживали чаще, чем люди старше 60 лет? Каковы доли выживших в обеих группах?**- 22.7% среди молодых и 40.6% среди старых- **40.6% среди молодых и 22.7% среди старых**- 35.3% среди молодых и 27.4% среди старых- 27.4% среди молодых и 35.3% среди старых<jupyter_code>print(round(data[data.Age < 30].Survived.value_counts(normalize=True)[1] * 100, 1), '% среди молодых и',
      round(data[data.Age > 60].Survived.value_counts(normalize=True)[1] * 100, 1), '% среди старых')<jupyter_output>40.6 % среди молодых и 22.7 % среди старых<jupyter_text>**5. Правда ли, что женщины выживали чаще мужчин? Каковы доли выживших в обеих группах?**- 30.2% среди мужчин и 46.2% среди женщин- 35.7% среди мужчин и 74.2% среди женщин- 21.1% среди мужчин и 46.2% среди женщин- **18.9% среди мужчин и 74.2% среди женщин**<jupyter_code>print(round(data[data.Sex == 'male'].Survived.value_counts(normalize=True)[1] * 100, 1), '% среди мужчин и',
      round(data[data.Sex == 'female'].Survived.value_counts(normalize=True)[1] * 100, 1), '% среди женщин')<jupyter_output>18.9 % среди мужчин и 74.2 % среди женщин<jupyter_text>**6. Найдите самое популярное имя среди пассажиров Титаника мужского пола?**- Charles- Thomas- **William**- John<jupyter_code>print(data[data['Sex'] == 'male']['Name'].apply(lambda name: name[name.find('.') + 2:].split()[0]).value_counts().index[0])<jupyter_output>William<jupyter_text>**7. Сравните графически распределение стоимости билетов и возраста у спасенных и у погибших. Средний возраст погибших выше, верно?**- **Да**- Нет<jupyter_code>sb.countplot(x='Fare', hue='Survived', data=data)
sb.countplot(x='Age', hue='Survived', data=data)
print(data[data.Survived == 0].Age.mean() > data[data.Survived == 1].Age.mean())<jupyter_output>True<jupyter_text>**8. Как отличается средний возраст мужчин / женщин в зависимости от класса обслуживания? Выберите верные утверждения:**- **В среднем мужчины 1-го класса старше 40 лет**- В среднем женщины 1-го класса старше 40 лет- **Мужчины всех классов в среднем старше женщин того же класса**- **В среднем люди в 1 классе старше, чем во 2-ом, а те старше представителей 3-го класса**<jupyter_code>print('В среднем мужчины 1-го класса старше 40 лет:',
      data[(data.Sex == 'male') & (data.Pclass == 1)].Age.mean() > 40)
print('В среднем женщины 1-го класса старше 40 лет:',
      data[(data.Sex == 'female') & (data.Pclass == 1)].Age.mean() > 40)
# Сводную статистику можно вывести через метод describe()
# print(data.groupby(['Sex', 'Pclass']).describe()['Age']['mean'])
print('В среднем люди в 1 классе старше, чем во 2-ом, а те старше представителей 3-го класса:',
      data[(data.Sex == 'male') & (data.Pclass == 1)].Age.mean() > data[(data.Sex == 'female') & (data.Pclass == 1)].Age.mean() and
      data[(data.Sex == 'male') & (data.Pclass == 2)].Age.mean() > data[(data.Sex == 'female') & (data.Pclass == 2)].Age.mean() and
      data[(data.Sex == 'male') & (data.Pclass == 3)].Age.mean() > data[(data.Sex == 'female') & (data.Pclass == 3)].Age.mean())
print('Мужчины всех классов в среднем старше женщин того же класса:',
      data[data.Pclass == 1].Age.mean() > data[data.Pclass == 2].Age.mean() > data[data.Pclass == 3].Age.mean())<jupyter_output>В среднем мужчины 1-го класса старше 40 лет: True
В среднем женщины 1-го класса старше 40 лет: False
В среднем люди в 1 классе старше, чем во 2-ом, а те старше представителей 3-го класса: True
Мужчины всех классов в среднем старше женщин того же класса: True
{'fraction_non_alphanumeric': 0.15140744953085017, 'fraction_numerical': 0.038384987205004266, 'mean_word_length': 5.3954545454545455, 'pattern_counts': {'":': 0, '<': 59, '<?xml version=': 0, '>': 71, 'https://': 3, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '15', 'dir': 'jupyter-structured-clean-dedup', 'id': '312269', 'license': 'MIT', 'n_tokens_mistral': 3098, 'n_tokens_neox': 3213, 'n_words': 679, 'path': 'Workbooks/ODS-ML-Course/Lesson 1 - Practice Pandas Titanic.ipynb', 'repo_name': 'tensorush/Machine-Learning-Notebooks', 'size': '7075'}