In [1]: import pandas as pd
- данные Titanic
Этот учебник использует набор данных Titanic, сохраненный как CSV. Данные состоят из следующих столбцов данных:
PassengerId: Идентификатор каждого пассажира.
Выжил: Указание, выжил ли пассажир.
0для да и1для нет.Pclass: Один из 3 классов билетов: Класс
1, Класс2и Класс3.Name: Имя пассажира.
Sex: Пол пассажира.
Age: Возраст пассажира в годах.
SibSp: Количество братьев, сестер или супругов на борту.
Parch: Количество родителей или детей на борту.
Ticket: Номер билета пассажира.
Fare: Указывает стоимость проезда.
Cabin: Номер каюты пассажира.
Embarked: Порт посадки.
In [2]: titanic = pd.read_csv("data/titanic.csv") In [3]: titanic.head() Out[3]: PassengerId Survived Pclass ... Fare Cabin Embarked 0 1 0 3 ... 7.2500 NaN S 1 2 1 1 ... 71.2833 C85 C 2 3 1 3 ... 7.9250 NaN S 3 4 1 1 ... 53.1000 C123 S 4 5 0 3 ... 8.0500 NaN S [5 rows x 12 columns]
Как рассчитать сводную статистику#
Агрегирование статистики#
Каков средний возраст пассажиров Титаника?
In [4]: titanic["Age"].mean() Out[4]: 29.69911764705882
Для столбцов с числовыми данными доступны различные статистические показатели, которые можно применять. Операции обычно исключают пропущенные данные и по умолчанию выполняются по строкам.
Каков медианный возраст и цена билета пассажиров Титаника?
In [5]: titanic[["Age", "Fare"]].median() Out[5]: Age 28.0000 Fare 14.4542 dtype: float64
Статистика, применяемая к нескольким столбцам
DataFrame(выбор двух столбцов возвращаетDataFrame, см. учебник по выборке данных) вычисляется для каждого числового столбца.
Агрегирующая статистика может быть рассчитана для нескольких столбцов одновременно. Помните, что describe функция из первое руководство?
In [6]: titanic[["Age", "Fare"]].describe()
Out[6]:
Age Fare
count 714.000000 891.000000
mean 29.699118 32.204208
std 14.526497 49.693429
min 0.420000 0.000000
25% 20.125000 7.910400
50% 28.000000 14.454200
75% 38.000000 31.000000
max 80.000000 512.329200
Вместо предопределенных статистик, специфические комбинации
агрегирующих статистик для заданных столбцов могут быть определены с использованием
DataFrame.agg() method:
In [7]: titanic.agg(
...: {
...: "Age": ["min", "max", "median", "skew"],
...: "Fare": ["min", "max", "median", "mean"],
...: }
...: )
...:
Out[7]:
Age Fare
min 0.420000 0.000000
max 80.000000 512.329200
median 28.000000 14.454200
skew 0.389108 NaN
mean NaN 32.204208
Подробности о описательной статистике приведены в разделе руководства пользователя описательная статистика.
Агрегирование статистики, сгруппированной по категориям#
Каков средний возраст пассажиров Титаника мужского и женского пола?
In [8]: titanic[["Sex", "Age"]].groupby("Sex").mean() Out[8]: Age Sex female 27.915709 male 30.726645
Поскольку нас интересует средний возраст для каждого пола, сначала выполняется выборка по этим двум столбцам:
titanic[["Sex", "Age"]]. Далее,groupby()метод применяется кSexстолбец для создания группы на категорию. Средний возраст для каждого пола вычисляется и возвращается.
Вычисление заданной статистики (например, mean возраст) для каждой категории в столбце (например, мужской/женский в Sex столбец) является распространенным шаблоном.
groupby метод используется для поддержки этого типа операций. Это
вписывается в более общий split-apply-combine шаблон:
Split данные на группы
Apply функцию к каждой группе независимо
Объединить результаты в структуру данных
Шаги apply и combine обычно выполняются вместе в pandas.
В предыдущем примере мы явно выбрали сначала 2 столбца. Если нет, mean метод применяется к каждому столбцу, содержащему числовые
столбцы, путем передачи numeric_only=True:
In [9]: titanic.groupby("Sex").mean(numeric_only=True)
Out[9]:
PassengerId Survived Pclass ... SibSp Parch Fare
Sex ...
female 431.028662 0.742038 2.159236 ... 0.694268 0.649682 44.479818
male 454.147314 0.188908 2.389948 ... 0.429809 0.235702 25.523893
[2 rows x 7 columns]
Не имеет особого смысла вычислять среднее значение для Pclass.
Если нас интересует только средний возраст для каждого пола,
выбор столбцов (квадратные скобки [] как обычно) также поддерживается
на сгруппированных данных:
In [10]: titanic.groupby("Sex")["Age"].mean()
Out[10]:
Sex
female 27.915709
male 30.726645
Name: Age, dtype: float64
Примечание
The Pclass столбец содержит числовые данные, но фактически
представляет 3 категории (или факторы) с метками '1',
'2' и '3'. Вычисление статистики по ним не имеет особого смысла.
Поэтому pandas предоставляет Categorical тип данных для обработки этого
типа данных. Дополнительная информация предоставлена в руководстве пользователя
Категориальные данные раздел.
Какова средняя цена билета для каждой комбинации пола и класса каюты?
In [11]: titanic.groupby(["Sex", "Pclass"])["Fare"].mean() Out[11]: Sex Pclass female 1 106.125798 2 21.970121 3 16.118810 male 1 67.226127 2 19.741782 3 12.661633 Name: Fare, dtype: float64
Группировка может выполняться по нескольким столбцам одновременно. Укажите имена столбцов в виде списка для
groupby()метод.
Полное описание подхода split-apply-combine приведено в разделе руководства пользователя о операции groupby.
Подсчитать количество записей по категориям#
Каково количество пассажиров в каждом из классов кают?
In [12]: titanic["Pclass"].value_counts() Out[12]: Pclass 3 491 1 216 2 184 Name: count, dtype: int64
The
value_counts()метод подсчитывает количество записей для каждой категории в столбце.
Эта функция является сокращением, так как фактически представляет собой операцию группировки в сочетании с подсчётом количества записей в каждой группе:
In [13]: titanic.groupby("Pclass")["Pclass"].count()
Out[13]:
Pclass
1 216
2 184
3 491
Name: Pclass, dtype: int64
Примечание
Оба size и count может использоваться в сочетании с
groupby. В то время как size includes NaN значения и просто предоставляет
количество строк (размер таблицы), count исключает пропущенные
значения. В value_counts метод, используйте dropna аргумент для
включения или исключения NaN значения.
В руководстве пользователя есть специальный раздел о value_counts , см. страницу дискретизация.
ПОМНИТЕ
Статистика агрегации может быть рассчитана по целым столбцам или строкам.
groupbyобеспечивает возможности разделение-применение-объединение шаблон.value_countsявляется удобным сокращением для подсчёта количества записей в каждой категории переменной.
Полное описание подхода split-apply-combine приведено в руководстве пользователя на страницах о операции groupby.