Мир гистограмм с Python
В этой статье расскажу о ключевых инструментах для подсчета гистограмм и их визуализации в Python. В этом нам помогут библиотеки NumPy, Pandas, Matplotlib и Seaborn.
В качестве демонстрационных данных будем использовать опрос пользователей сайт Kaggle 2017 года (2017 Kaggle ML & DS Survey, файл multipleChoiceResponses.csv).
Получение численных значений гистрограммы
В этом нам поможет функция histogram из библиотеки NumPy. В число ее основных параметров входит bins - границы для интервалов деления или их количество (будут выбраны равные части из заданного диапазона range, который по умолчанию простирается от минимума выборки до ее максимума). Функция возвращает количество вхождений в каждый интервал и их границы. Также при задании параметра density=True histogram выполняет нормировку, действуя аналогично плотности распределения, так чтобы произведение вхождений на длины интервалов равнялось 1. Посчитаем гистограмму для столбца Age:
response=pd.read_csv('input/multipleChoiceResponses.csv', encoding='ISO-8859-1') hist, edges = np.histogram(response.loc[response['Age'].notnull(), 'Age'], bins=np.arange(101, step=11)) hist, edges
а теперь приведем пример с нормализацией:
hist, edges = np.histogram([1,2,3,5,6], bins=[0, 5, 7], density=True) hist, edges (hist*np.diff(edges)).sum()
Похожий результат возвращает функция hist библиотеки Matplotlib (плюсом еще рисует график):
hist, edges, patches = plt.hist(response['Age'])
Если изучаемый столбец категориальный, то его значения удобно вывести с помощью метода value_counts:
response['GenderSelect'].value_counts()
также присутствует возможность нормализации (за это отвечает параметр normalize):
response['GenderSelect'].value_counts(normalize=True)
Построение графиков гистограмм
Построение гистрограмм можно осуществить вызовом функций hist из Matplotlib (работает для численной переменной), как указывалось выше. Однако более гибким является способ вывода гистограмм с помощью Pandas и схожего метода hist:
response['Age'].hist(bins =np.arange(101, step=10), density=True)
В отличие от собрата из Matplotlib метод умеет работать с пропущенными значениями, а также позволяет построить распределение категориальной переменной:
response['GenderSelect'].hist(xrot=90)
Библиотека Seaborn отличается красивыми настройками по умолчанию. Как она выполняет отображение категориальной переменной с помощью функции countplot, можете оценить ниже:
sns.countplot(y=response['GenderSelect'],order=response['GenderSelect'].value_counts().index)