Подробное сравнение наиболее популярных вариантов анализа данных - Часть 2/2
SQL и Pandas - не новые технологии. И все же найти соответствующие функции для обеих технологий - не самая простая задача. Вот здесь и вступают в игру эта и предыдущая статья, где вы можете провести подробное сравнение между ними.
Пару дней назад я рассмотрел первую часть этой серии из двух частей, посвященную более простым сравнениям между двумя технологиями:
Первоначальное прочтение этой статьи не является обязательным условием, но определенно поможет вам лучше понять их. Технологии не предназначены для одной и той же задачи, но приятно видеть соответствующие функции между ними. Как и было обещано, сегодня мы рассмотрим более сложные темы:
- Присоединяется
- Союзы
- Группировки
Прежде чем мы это сделаем, давайте начнем с операторов удаления.
Удалить
Оператор DELETE
используется в SQL для удаления строки из таблицы. Синтаксис удаления строк в SQL следующий:
DELETE FROM table_name WHERE condition;
В Pandas удаление строки немного отличается. В Pandas мы не удаляем строку, мы просто выбираем ту часть, которая нам нужна, и отбрасываем остальную часть. Не волнуйтесь, если вам это кажется загадкой, пример проиллюстрирует это дальше.
Допустим, мы хотим удалить все записи из азиатского региона.
SQL
DELETE FROM fert_data WHERE region = ‘Asia’;
Строки были успешно удалены. Теперь давайте посмотрим, как выполнить эту задачу в Pandas.
Панды
df = df.loc[df[‘region’] != ‘Asia’]
Здесь мы выбрали все строки, в которых регион не является «Азией», а затем присвоили набор результатов нашему текущему фрейму данных. Это означает, что мы исключили все строки, в которых указан регион «Азия».
Присоединяется
JOINS
используются в SQL для объединения или слияния двух или более таблиц вместе на основе определенного условия. В основном в SQL есть четыре типа объединений: LEFT
, RIGHT
, INNER
, FULL
. Вот синтаксис JOIN:
SELECT * FROM table_name_1 as t1 JOIN table_name_2 as t2 ON t1.column_name_1 = t2.column_name_2;
В Pandas мы можем объединить два или более фрейма данных с помощью merge()
. По умолчанию выполняется внутреннее соединение. Но вы можете настроить его, используя аргумент how
для выполнения других соединений. Базовый синтаксис для pd.merge()
следующий:
merge(left_df, right_df, how=’inner’, on=condition)
Вот пример, иллюстрирующий соединения.
SQL
Ниже представлена таблица с названием country_sub_region. Мы должны соединить эту таблицу с fert_data, используя внутреннее соединение.
SELECT country, sub_region FROM country_sub_region;
SELECT * FROM fert_data as f INNER JOIN country_sub_region as c ON f.country = c.country;
Таблицы были успешно объединены. Давайте посмотрим, как присоединиться к ним в Pandas.
Панды
Здесь мы создали фрейм данных, аналогичный таблице country_sub_region:
country_sub_reg = data = [ [‘country’, ’subregion’], [‘Kenya’, ’East Africa’], [‘Liberia’, ’West Africa’], [‘Mali’, ’West Africa’] ] df_sr = pd.DataFrame(country_sub_reg[1:],columns=country_sub_reg[0])
Мы объединим df_sr
с df
в поле country, используя внутреннее соединение:
pd.merge(df, df_sr, on=’country’, how=’inner’)
Союз
Оператор UNION
используется для объединения результатов двух или более операторов SELECT
в SQL. Есть товарищ по Союзному оператору по имени UNION ALL
. Они отличаются в том смысле, что первый удаляет повторяющиеся значения из объединенного результата.
Задачу оператора UNION ALL
в Pandas можно выполнить с помощью pd.concat()
. В то время как функцию оператора UNION
можно выполнить, сначала объединив кадры данных с помощью pd.concat()
, а затем применив к нему pd.drop_duplicates()
.
SQL
Чтобы проиллюстрировать оператор UNION/UNION ALL
в SQL, мы создали дополнительную таблицу с названием fert_data_1. Данные в этой таблице выглядят примерно так:
Наша задача следующая - найти объединение строк из таблицы fert_data и fert_data_1:
SELECT * FROM fert_data_1 UNION ALL SELECT * FROM fert_data ORDER BY country;
Вы заметите, что есть несколько повторяющихся значений. Да, вы правильно угадали. Вы можете использовать оператор UNION
, чтобы удалить их. Попробуйте сами.
Панды
В Pandas мы создали фрейм данных, аналогичный таблице fert_data_1 в SQL.
data = [ [‘country’, ’region’, ’tfr’, ’contraceptors’], [‘USA’, ’North.Amer’, 1.77, 20], [‘UK’, ’Europe’, 1.79, 23], [‘Bangladesh’, ’Asia’, 5.5, 40], [‘Thailand’, ’Asia’, 2.3, 68] ] df1 = pd.DataFrame(data[1:], columns=data[0])
Союз df
и df1
:
df_dupli = pd.concat([df1, df])
Данные из фреймов данных были объединены. Но в этом случае мы получим и повторяющиеся строки. Например, цель состоит в том, чтобы «Бангладеш» был указан только один раз:
df_dupli[df_dupli[‘country’] == ’Bangladesh’]
Мы можем удалить повторяющиеся записи, используя drop_duplicates()
, как показано:
df_wo_dupli = pd.concat([df1, df]).drop_duplicates()
Давайте запустим тот же запрос и посмотрим, получим ли мы по-прежнему две строки.
df_wo_dupli[df_wo_dupli[‘country’] == ‘Bangladesh’]
Задача решена. Больше никаких повторяющихся строк.
Группа по
Предложение GROUP BY
в SQL используется для подготовки итоговых строк путем группирования записей вместе. Предложение обычно используется вместе с агрегатными функциями, такими как AVG, SUM, COUNT, MIN, MAX и т. Д. Вот основной синтаксис для предложения GROUP BY
:
SELECT column_name_1, agg_func(column_name_2) FROM table_name GROUP BY column_name_1;
В Pandas у нас есть функция groupby()
, которая помогает нам суммировать данные по определенному столбцу. Общий синтаксис выглядит следующим образом:
df.groupby([‘column_name_1’]).agg_function()
Давайте попробуем пример, чтобы лучше понять это - найдите среднее значение tfr и количество полей контрацепторов для каждого региона.
SQL
SELECT region, round(avg(tfr),2), count(contraceptors) FROM fert_data GROUP BY region;
Панды
df.groupby(‘region’).agg({‘tfr’: np.mean, ‘contraceptors’: np.size}).round(2)
Мы получили одинаковые результаты по обоим запросам. Вам должно быть интересно, для чего используется этот agg()
в Pandas. Он используется для агрегирования одной или нескольких операций по указанной оси.
Прежде чем ты уйдешь
Вот и все - теперь у вас должно быть хорошее представление об обеих технологиях, по крайней мере, с точки зрения анализа данных. Трудно рекомендовать одно перед другим, так как это будет зависеть от вашего предыдущего опыта, предубеждений и возможностей компании, в которой вы работаете.
Хорошо то, что все, что делается в SQL, можно сделать в Pandas - по крайней мере, на этом уровне. Смело выбирайте тот, который вам больше нравится, вы не ошибетесь.
Спасибо за прочтение.