Рубрики
Без рубрики

Построение данных с помощью Seaborn и Pandas

Есть много хороших библиотек для диаграммы данных в Python, возможно, слишком M … Tagged DataScience, Pandas, Datavis, Python.

Есть много хороших библиотек для диаграммы данных в Python, возможно, тоже много. Участок великолепен, но предел из 25 свободных графиков вряд ли является отправной точкой. Конечно, есть matplotlib, но, конечно, мы находим что -то немного меньше … Ну, хромой. Где все простые, но в течение мощного библиотеки диаграмм?

Как вы, наверное, догадались, именно здесь входит Seaborn. Seaborn-это не сторонняя библиотека, поэтому вы можете начать без создания учетных записей пользователей и не беспокоясь об ограничениях API и т. Д. Seaborn также построен на вершине Matplotlib, что делает его логичным следующим шагом для любого, кто хочет некоторую огневую мощь из своих графиков.

Мы исследуем Seaborn, наметив некоторые данные сами. Мы проведем процесс подготовки данных для графика, построения указанных диаграмм и изучения доступных функциональности на этом пути. В этом уроке предполагается, что у вас есть рабочие знания о пандах и доступ к интерфейсу ноутбука Jupyter.

Подготовка данных в пандах

Первый Firs – нам понадобятся некоторые данные. Чтобы сосредоточиться на графике, в отличие от сложной очистки данных, я собираюсь использовать самый простой набор данных, известный человечеству: погода. В качестве дополнительного бонуса это позволит нам отпраздновать нашу неизбежную надвигающуюся гибель, поскольку мир в среднем согревает более 3 градусов по Цельсию. Набор данных, который мы будем использовать, это Гистоальная почасовая погода Каггл данных Анкет

С этими CSVS, сохраненными локально, мы можем начать осматривать наши данные:

import pandas as pd
import seaborn as sns
from matplotlib import pyplot

temperature_df = pd.read_csv('temperature.csv')

print(temperature_df.head(5))
print(temperature_df.tail(5))

Это дает нам следующий выход:

thead tr td: первый ребенок {min-width: 190px; } tbody tr td: первый ребенок {min-width: 190px; }

2012-10-02 289.990 24
2012-10-03 290.370 48
2012-10-04 290.840 72
2012-10-05 293.180 96
2012-10-06 288.240 120
2013-09-26 286.220 8640
2013-09-27 285.370 8664
2013-09-28 286.650 8688
2013-09-29 286.290 8712
2013-09-30 283.435 8736

Это говорит нам о нескольких вещах:

  • Степень этого набора данных начинается 1 октября 2012 года и заканчивается 29 ноября 2017 года.
  • Не все города имеют достаточное количество данных, которые начинаются и заканчиваются на эти даты.
  • Данные были взяты с 1 часовым интервалом, 24 раза в день.
  • Температура в Кельвине: самая бесполезная единица измерения в мире.

Удалить посторонние данные

24 чтения в день это много. Создание диаграмм может принять значительное количество системных ресурсов (и времени), что делает 24 отдельных температура каждый день смешным. Давайте спасем себя 23/24 -е годы этой головной боли, опустив наши записанные температуры до одного чтения в день.

Мы изменим наш флажок Data, чтобы включить только один из каждых 24 рядов:

modified_df = temperature_df.iloc[::24]

Взять размер выборки

Мы захотим наметить значения для одного места, чтобы начать, поэтому давайте начнем с Нью -Йорка.

Также может быть интересно сопоставить эти данные по сравнению с прошлым годом, чтобы наблюдать за любыми изменениями. Для этого мы сократим наш набор данных, чтобы включить только первый год показаний.

Наконец, мы захотим удалить те пустые ячейки, которые мы заметили из этого неполного набора данных. Все вышеперечисленное дает нам следующее:

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

temperature_df = pd.read_csv('temperature.csv')
nyc_df = temperature_df[['datetime','New York']]
nyc_df = nyc_df.iloc[::24]
nyc_df.dropna(how='any', inplace=True)

print(nyc_df.head(5))
print(nyc_df.tail(5))

Полученный фрагмент дает нам одну зарегистрированную температуру в день в первый год результатов. Вывод должен выглядеть так:

thead tr td: первый ребенок {min-width: 190px; } tbody tr td: первый ребенок {min-width: 190px; }

2012-10-02 289.990 24
2012-10-03 290.370 48
2012-10-04 290.840 72
2012-10-05 293.180 96
2012-10-06 288.240 120
2013-09-26 286.220 8640
2013-09-27 285.370 8664
2013-09-28 286.650 8688
2013-09-29 286.290 8712
2013-09-30 283.435 8736

Исправление нашей температуры

Мы должны что -то сделать с этой ситуацией в Кельвине. В последний раз, когда я измерял что -либо в градусах Кельвина, когда контролировал тепло моего реактора в Мех Воин 2 Анкет Не пытайтесь найти эту игру, это реликвия 90 -х годов.

Быстрый поиск в Google раскрывает формулу для преобразования Кельвина в Фаренгейт:

(x − 273.15) × 9/5 + 32

Это требует функции Lambda!

nyc_df['temp'] = nyc_df['temp'].apply(lambda x: (x-273.15) * 9/5 + 32)

Проверка нашей работы с Печать (NYC_DF.Head (5)) :

2012-10-02 0 62.584651
2012-10-03 1 63.266000
2012-10-04 2 64.112000
2012-10-05 3 68.324000
2012-10-06 4 59.432000

Настройка наших данных

Мы загрузили наши данные с CSV, поэтому мы знаю Наши типы данных будут мусором. Панды, как известно, хранит типы данных из CSV как объекты, когда не знает, что случилось. Быстро бег print (nyc_df.info ()) раскрывает это:


Int64Index: 1852 entries, 24 to 44448
Data columns (total 2 columns):
date 1852 non-null object
temp 1852 non-null float64
dtypes: float64(1), object(1)
memory usage: 43.4+ KB
None

«Объект» – это причудливое слово Pandas для «Бесполезной широкой классификации типа данных. ” Пандас видит особые символы в данных этого столбца, таким образом, немедленно сдает любую попытку логического анализа сказанных данных. Давайте исправим это:

nyc_df['date'] = pd.to_datetime(nyc_df['date'])

.Информация () теперь должен отобразить столбец «Дата» как тип данных «датийм»:


Int64Index: 1852 entries, 24 to 44448
Data columns (total 2 columns):
date 1852 non-null datetime64[ns]
temp 1852 non-null float64
dtypes: datetime64[ns](1), float64(1)
memory usage:43.4 KB
None

Форматирование данных, удобное для морских срожденных

Рассмотрим таблицу, которую мы собираемся сделать на мгновение: мы стремимся создать многострочную диаграмму на одном участке, где мы накладываем на себя показания температуры друг на друга, по сравнению с прошлым годом. Несмотря на сопоставление нескольких строк, Seaborn Charts примет только DataFrame, который имеет один столбец для всех значений x, и один столбец для всех значений Y. Это означает, что, несмотря на несколько строк, все значения наших строк будут жить в одном массивном столбце. Из -за этого нам необходимо каким -то образом группировать ячейки в этом столбце, как будто «эти значения принадлежат линии 1, эти значения принадлежат линии 1».

Мы можем сделать это через третью колонку. Этот столбец служит «меткой», которая будет сгруппировать все значения одной и той же метки вместе (т.е. создать одну строку). Мы создаем один сюжет в год, так что это на самом деле довольно просто:

nyc_df['year'] = nyc_df['date'].dt.year

Это так просто! Нам нужно сделать его еще раз для День года Чтобы представить наши значения x:

nyc_df['day'] = nyc_df['date'].dt.dayofyear

Проверка вывода:

                   date temp year day 
0 2012-10-02 12:00:00 62.3147 2012 276 
1 2012-10-03 12:00:00 62.9960 2012 277 
2 2012-10-04 12:00:00 63.8420 2012 278 
3 2012-10-05 12:00:00 68.0540 2012 279 
4 2012-10-06 12:00:00 59.1620 2012 280

Уборка дома

Мы просто сделали целую кучу, но мы сделали немного беспорядка в процессе.

С одной стороны, мы никогда не изменяли наши имена столбцов. Почему есть столбец с именем Нью -Йорк в наборе данных, который уже назван как таковой? Как кто -нибудь знает, что точно представляют цифры в этом столбце? Давайте настроим:

nyc_df.columns = ['date','temperature']

Наши индексы строки должны быть исправлены после того, как сбросили все эти пустые строки раньше. Давайте исправим это:

nyc_df.reset_index(inplace=True)

Вот, это было много! Давайте вспомним все, что мы сделали до сих пор:

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

# Load Data From CSV
temperature_df = pd.read_csv('temperature.csv')

# Get NYC temperatures daily
nyc_df = temperature_df[['datetime','New York']]
nyc_df = nyc_df.iloc[::24]
nyc_df.dropna(how='any', inplace=True)

# Convert temperature to Farenheight
nyc_df['New York'] = nyc_df['New York'].apply(lambda x: (x-273.15) * 9/5 + 32)

# Set X axis, group Y axis
nyc_df['date'] = pd.to_datetime(nyc_df['date'])
nyc_df['year'] = nyc_df['date'].dt.year
nyc_df['day'] = nyc_df['date'].dt.dayofyear

# Cleanup
nyc_df.columns = ['date','temperature']
nyc_df.reset_index(inplace=True)

Приготовление диаграммы

Первым типом диаграммы, на который мы рассмотрим, будет линейная диаграмма, показывающая изменение температуры с течением времени. Перед сопоставлением этих данных мы должны сначала установить стадию. Без установки правильных метаданных для нашей графики, он будет по умолчанию, чтобы быть уродливым, 5×5 квадратом без заголовка.

Показывая диаграммы встроенных в Юпитере

Прежде чем мы сможем увидеть какие -либо диаграммы, нам нужно явно настроить нашу ноутбук, чтобы показать встроенные диаграммы. Это достигнуто в Юпитере с « Волшебная функция ». Прокрутите обратно к началу вашей записной книжки и убедитесь, что %matplotlib inline присутствует с самого начала:

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
%matplotlib inline

Установка размера сюжета

Если вы знакомы с Matplotlib, эта следующая часть должна выглядеть знакома:

plt.figure(figsize=(15, 7))

Действительно, мы действуем на plt , который является псевдонимом, который мы дали пирог (импорт из библиотеки Matplotlib). Вышеуказанное устанавливает размеры диаграммы: 15×7 дюймов. Поскольку Seaborn работает на Matplotlib в его ядре, мы можем изменить нашу диаграмму с помощью того же синтаксиса, что и модификация диаграмм Matplotlib.

Установка цветов нашей диаграммы

Но как насчет цветов? Разве «симпатичный» аспект Seaborn – вся причина, по которой мы его используем? Действительно, друг:

sns.palplot(sns.color_palette("husl", 8))

… И вывод:

Миниатюры для палитры «Гус».

Подожди, что мы только что сделали? Мы установили новый цветовой поддон для нашего графика, используя встроенную палитру «Husl», построенную в Seaborn. Есть много других способов контроля вашей цветовой палитру, которая плохо объяснена в их документации Здесь Анкет

Добавьте здесь.

Называя нашу диаграмму

Другой пример:

plt.set_title('NYC Weather Over Time')

Теперь мы назвали нашу диаграмму Погода в Нью -Йорке с течением времени. Две строки кода, приведенные выше, приводят к этому выводу:

Вот: чистый холст.

Теперь мы установили стиль нашего диаграммы, установили размеры размеров и дали ему имя. Мы почти готовы к бизнесу.

Графики графиков

Теперь для хороших вещей: создание диаграмм! В Seaborn сюжет создается с помощью sns.plottype () Синтаксис, где plottype () должен быть заменен типом диаграммы, которую мы хотим увидеть. Мы планируем линейную диаграмму, поэтому мы будем использовать sns.lineplot () :

nyc_chart = sns.lineplot(x="day",
                         y="temp",
                         hue='year',
                         data=nyc_df
                         ).set_title('NYC Weather Over Time')
plt.show()

Обратите внимание на наши прошедшие аргументы здесь:

  • данные является ли DataFrame Pandas, содержащим данные нашей графики.
  • x и y столбцы в нашем раме данных, которые должны быть назначены x и y Осины соответственно.
  • оттенок это метка, с помощью которой можно группировать значения оси y.

Конечно, LinePlot () принимает еще много аргументов, которые мы не затронули. Например:

  • AX принимает объект Matplotlib «сюжет», подобный тому, который мы создали, содержащий метаданные нашего диаграммы. Нам не нужно было передавать это, потому что Seaborn автоматически наследует то, что мы сохраняем для нашего plt переменная по умолчанию. Если бы у нас было несколько сюжетов, это было бы полезно.
  • размер позволяет нам изменить ширину линии на основе переменной.
  • Легенда Предоставляет три различных варианта, как отобразить легенду.

Полная документация всех аргументов, принятых LinePlot () можно найти Здесь Анкет Достаточно болтовни, давайте посмотрим, как выглядит наша таблица!

Она красавица.

Вы должны быть Посейдоном, потому что вы сейчас выглядите как король моря.

Достижение разблокировано

Я рекомендую ваше терпение за то, что он сидел еще одним словом о очистке данных. К сожалению, 3 года недостаточно долго времени, чтобы визуально продемонстрировать, что изменение климата существует: температура в мире, по прогнозам, будет расти в среднем на 2-3 градуса по Цельсию в течение примерно пары сотен лет, так что наша таблица не является ‘ t на самом деле очень полезен.

У Seaborn много типов диаграмм, чем просто линейные сюжеты. Надеюсь, вы чувствуете себя достаточно комфортно, чтобы начать топнуть вокруг Документация и немного распространите эти крылья.

Оригинал: “https://dev.to/hackersandslackers/plotting-data-with-seaborn-and-pandas-59nk”