Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Большие данные - лекция-4 - Титаник + Matplotlib + Pandas

Anton
March 06, 2019

Большие данные - лекция-4 - Титаник + Matplotlib + Pandas

Визуализация данных с pandas и matplotlib

Обновлено: 05.03.2020

Anton

March 06, 2019
Tweet

More Decks by Anton

Other Decks in Education

Transcript

  1. 3d: Matplotlib vs Mayavi • Matplotlib — 3d не настоящее

    (проблемы проявляются при пересечении плоскостей и фигур) • Mayavi — настоящий OpenGL При этом • API matplotlib достаточно удобен и интуитивен • С Mayavi нужно привыкнуть к тому, что некоторые вещи сделаны не так, как можно ожидать
  2. Seaborn seaborn.pydata.org • Библиотека визуализации данных, на базе matplotlib •

    Больше графиков • Некоторые графики те же, что и matplotlib, но симпатичнее
  3. import matplotlib.pyplot as plt import numpy as np X =

    np.linspace(0,1) Y = X**3 - X**2 - 2 plt.plot(X, Y) plt.show()
  4. Колонки • PassengerId — порядковый номер записи • Survived —

    выжил/погиб • Pclass — класс билета: 1/2/3 • Name — имя • Sex — пол: male/female • Age — возраст
  5. Колонки • SibSp — количество родных братьев и сестер (siblings)

    и супругов (spouses) на борту судна • Parch — количество детей и родителей на борту судна • Ticket — номер билета • Fare — стоимость проезда • Cabin — номер каюты • Embarked — порт посадки: C = Cherbourg (Шербур, Франция), Q = Queenstown (Квинстаун, Ирландия), S = Southampton (Саутгемптон, гр. Гэмпшир, Англия)
  6. Pandas + Matplotlib: pivot_table + plot • Генерируем сводную таблицу

    с DataFrame.pivot_table • Рисуем график с DataFrame.plot • Под капотом Matplotlib
  7. titanic-plot.py # coding=utf-8 import pandas import numpy as np import

    matplotlib.pyplot as plt # PassengerId Survived Pclass Name Sex Age # SibSp Parch Ticket Fare Cabin Embarked data = pandas.read_csv('titanic-train.csv')
  8. titanic-plot.py # Pclass → Survived print("#### Pclass -> Survived") #

    Сформировать сводную таблицу pivot = data.pivot_table(values='PassengerId', index='Pclass', columns='Survived', aggfunc='count') print(pivot)
  9. pandas.DataFrame.pivot_table • Pivot table — сводная таблица • Результат DataFrame.pivot_table

    — объект DataFrame • values: колонка исходной таблицы — значения, которые будут сгруппированы в сводной таблице • index: колонка исходной таблицы — первая колонка сводной таблицы, уникальные значения колонки исходной таблицы — ключи для группировки в сводной таблице • columns: колонка исходной таблицы — колонки сводной таблицы, уникальные значения колонки исходной таблицы — колонки сводной таблицы • aggfunc: функция группировки значений values
  10. pandas.DataFrame.pivot_table:aggfunc • Операция аггрегирования — функция (или набор функций), применяемая

    к столбцу value • Если строка, то функция из Series (он же — одномерный ndarray) (??) 'sum', 'mean', 'count', 'min', 'max' и т. п. • Или функция из Numpy (без кавычек): np.xxx np.sum, np.mean, np.min и т. п. (те, которые принимают на входе массив, а на выходе дают число?) • Может быть собственная функция • По умолчанию: numpy.mean (np.mean)
  11. Замечание • Matplotlib на Python 2.7 по умолчанию не дружит

    с юникодом • Например, если в заголовок plot:title добавить что-то на русском, получим: UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128) • С Python 3 — всё ок
  12. pandas.DataFrame.plot:kind : str • ‘line’ : line plot (default) •

    ‘bar’ : vertical bar plot • ‘barh’ : horizontal bar plot • ‘hist’ : histogram • ‘box’ : boxplot • ‘kde’ : Kernel Density Estimation plot • ‘density’ : same as ‘kde’ • ‘area’ : area plot • ‘pie’ : pie plot • ‘scatter’ : scatter plot • ‘hexbin’ : hexbin plot
  13. Самостоятельно: построить графики • Sex → Survived • Age →

    Survived • Parch → Survived* (см дальше) • SibSp → Survived • Embarked → Survived • Fare → Survived** (см далее)
  14. Parch → Survived • Проблема: в правых колонках ничего не

    видно • Левая колонка слишком высокая, поэтому правые колонки слишком низкие • Задание: придумать, как сделать так, чтобы было видно и правую и левые колонки • Решение: использовать логарифмическую шкалу по вертикальной оси
  15. Подводный камень: • Логарифмическая шкала может исказить соотношение размеров блоков

    внутри одной колонки • Решение: включить логарифмическую шкалу, выключить режим стека
  16. SibSp → Survived • На графиках видно, что если у

    человека более 3-х родственников на корабле, его шансы на выживание заметно уменьшаются • Творческое задание: попробуйте найти этому объяснение, подтвердите дополнительными графиками • Примеры гипотез: - Они искали родственников, не хотели садиться на шлюпки поодиночке - Большие семьи ехали 3-м классом, поэтому у них было больше шансов погибнуть, как и у остальных в 3-м классе - Внутри 3-го класса у больших семей было больше шансов погибнуть - Это статистическая погрешность
  17. Обсуждение • Распределение классов по портам посадки Embarked (определить по

    графику, где Англия, где Франция, где Ирландия? — исторический контекст) • В каких классах больше людей ехали с семьями?
  18. Fare → Survived • На первый взгляд должен подтверждать график

    Pclass • Но значений по X слишком много: со столбиками месиво, линии не спасают • Задача: придумать подходящий способ визуализации