Вы можете делать все в Pandas с помощью SQL

Иногда вам следует

Панды - один из самых полезных инструментов, которые может использовать специалист по данным. Он предоставляет несколько удобных функций для извлечения информации. К сожалению, использование Pandas требует загрузки данных в DataFrames, которые не подходят для обработки огромных объемов данных - объемов данных, обычных в компании, где вам могут понадобиться такие навыки работы с данными.

Если бы вам нужно было загрузить полный массивный набор данных - возможно, сохранить его как файл .csv - вам нужно было бы потратить как минимум несколько минут на ожидание завершения загрузки файла и его преобразования в DataFrame с помощью Pandas. Вдобавок ко всему, любые выполняемые вами операции будут медленными, потому что Pandas не справляется с такими огромными объемами данных и должен проходить через каждую строку.

Лучшее решение? Сначала запросите базу данных с помощью SQL - родного, эффективного языка обработки, на котором он, вероятно, работает, - затем загрузите сокращенный набор данных, если необходимо, и используйте Pandas для работы с таблицами меньшего размера, для которых он предназначен. Хотя SQL очень эффективен с большими базами данных, он не может заменить интеграцию Panda с другими библиотеками и языком Python в целом.

Однако в случае, когда нам нужно найти только числовые ответы, такие как средняя стоимость предмета или количество сотрудников, получающих комиссию, но не почасовую заработную плату выше 40 долларов, (обычно) нет необходимости касаться Pandas и среды Python по адресу все.

Хотя большинство людей знакомы с SQL, останавливаясь на SELECT * FROM table WHERE id = ‘Bob’, можно было бы удивиться функциональным возможностям, которые предлагает SQL.

В качестве примера мы будем работать с базой данных SQL Tryit Editor, предоставленной w3schools. Этот сайт позволяет выполнять SQL-запросы к вымышленной базе данных. Таблица Клиенты (полный список таблиц вы можете увидеть на правой панели) имеет 7 столбцов с числовыми и текстовыми данными:

Допустим, мы хотим отправить подготовленное заявление в форме «Имя ЖИТЕТ В Адрес, Город». Это просто: оператор двойной трубы || действует как конкатенация. Затем мы можем добавить значения столбцов и строки и сохранить результат под псевдонимом или именем столбца результата, используя AS.

Обратите внимание, что, поскольку мы дополнительно указали Country=’Mexico’, наши результаты - это все адреса и города в Мексике. Этот тип операции было бы сложнее и труднее выполнить в Python.

Обратите внимание, что не все базы данных поддерживают одинаковый синтаксис. В этой статье используется синтаксис для PostgreSQL, хотя каждая обсуждаемая операция имеет операции в базах данных DB2, Oracle, MySQL и SQL Server, иногда с одинаковым синтаксисом, иногда с разными синтаксисами. StackOverflow или Google могут помочь вам найти эти ключевые слова, относящиеся к базе данных.

Предположим, что в таблице Products мы хотим сгруппировать продукты в три ценовых сегмента: Cheap, Regular и Expensive для цен меньше 12 долларов, от 12 до 21 доллара и выше 21 доллара соответственно.

Без проблем! Ключевое слово CASE может помочь. Это ключевое слово действует как оператор if / else if / else на других языках, таких как Python.

Ключевое слово CASE использует синтаксис WHEN condition THEN value. Когда несколько WHEN складываются в стопку, они предполагают связь «иначе - если». Наконец, можно добавить ELSE value, если условие не выполнено. Наконец, END записывается для обозначения конца оператора CASE, а результаты сохраняются (с псевдонимом) в столбце с именем Bucket до AS Bucket.

Это также можно было сделать в Pandas с .apply(), но с гораздо меньшей скоростью.

Допустим, мы хотим случайным образом выбрать 5 строк из Products. Хотя прямого метода для этого нет, мы можем проявить творческий подход, используя ключевые слова ORDER BY и LIMIT. ORDER BY упорядочивает данные в определенном формате; например, использование ORDER BY Price ASC упорядочит данные таким образом, чтобы цена была в возрастающем формате. Использование DESC использует убывание, а ORDER BY работает со строками, сортируя их по алфавиту.

ORDER BY random() упорядочивает данные случайным образом, а LIMIT x возвращает первые x строк в выбранном подмножестве данных. Таким образом, из данных выбираются пять случайных строк (* означает все столбцы).

Примечание. К сожалению, редактор SQL Tryit Editor не поддерживает random (), но реальные базы данных поддерживают (или используют вариант, например rand()).

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

Кроме того, SQL предоставляет все необходимые статистические функции. Все, от MIN() до MAX(), до COUNT(), до SUM(), до AVG(), до ASIN() (арксинус), готово. Вы можете использовать расширения пакетов для таких показателей, как стандартное отклонение, или создавать их самостоятельно, используя существующие функции по умолчанию, что совсем несложно.

Это стандартные задачи, но что более удивительно, так это то, что SQL - это полный по Тьюрингу язык. Проще говоря, вы могли бы представить программу, скажем, на Python или C ++, на SQL, создав свои собственные сложные системы памяти и используя такие элементы SQL, как функции, if / elses, рекурсию и т. Д. Вы можете просмотреть некоторые увлекательные демонстрации Тьюринга. -полный SQL here. Суть этого не в том, чтобы побудить вас использовать SQL в качестве операционного языка, а в том, чтобы продемонстрировать, что SQL можно использовать для гораздо большего, чем вы думали.

С помощью SQL вы можете сделать гораздо больше, о чем мы не говорили:

  • Укажите свои собственные пользовательские функции, как если бы вы объявляли функцию в Python или C ++. Их можно использовать, например, для анализа IP-адресов.
  • Используйте рекурсию для создания сложных циклов и генерации данных с ключевым словом WITH.
  • Сортируйте строковые столбцы по подстроке.
  • Выполните сложное объединение нескольких таблиц.
  • Используйте SQL для генерации SQL (автоматизация задач).
  • Создавайте прогнозы с использованием статистических моделей.
  • Создайте гистограммы.
  • Создавайте древовидные структуры (с листами, ветвями, корневыми узлами).

Это правда, что с помощью SQL вы можете сделать гораздо больше, чем с помощью Pandas. При этом обычно в дополнительных функциях нет необходимости. Основная причина, по которой вам следует использовать SQL, заключается в том, что он создан для обработки больших объемов данных в настраиваемой среде, в отличие от DataFrames.

Как правило, SQL - это простой, но иногда очень запутанный язык, и его обычно следует использовать только для уменьшения размера данных, пока он не станет более управляемым для обработки в меньшей среде Pandas.

Ключевые моменты

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