Подробное сравнение наиболее популярных вариантов анализа данных - Часть 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 - по крайней мере, на этом уровне. Смело выбирайте тот, который вам больше нравится, вы не ошибетесь.

Спасибо за прочтение.

Присоединяйтесь к моему личному списку адресов электронной почты, чтобы получать больше полезной информации.