DevGang
Авторизоваться

Polars для аналитики Введение

Иногда вы достигаете точки, когда вы соединяете точки между разными вещами. Действительно, в настоящее время мы копаемся в SQL, и для каждой новой концепции, которую изучили, пытаемся проиллюстрировать ее с помощью проекта ruby.

Вот в чем дело, мы любим ruby, это классный язык сценариев. Но мы должны признать, что это не лучший язык для аналитики и так далее. К тому же, иногда здорово узнавать что-то новое и практиковать свои навыки другим способом. Поэтому решили использовать Polars и Python, чтобы иметь другую точку зрения.

Чего ждать? Polars не для SQL. Как можно выучить SQL, используя Polars и Python?

Наше второе замечание заключается в том, что важны концепции, а есть много концепций (полагаем, не все из них), которые являются общими как для SQL, так и для Polars. Например, реляционная алгебра или оконная функция.

Эта статья представляет собой введение в использование Polars и Python для изучения концепций SQL.

Детский шаг

Это было сказано, прежде чем погрузиться в действительно сложные темы. Сначала мы должны изучить азбуку нашего API.

Итак, в качестве первого проекта мы хотели провести базовую аналитику данных github, которые нашли на Kaggle. Если вам интересно, вот набор данных.

Как мы уже сказали, давайте осторожно возьмем Polars и посмотрим, что мы можем сделать. Давайте обнаружим наш набор данных, прочитав CSV и отобразив имя первых 5 репозиториев.

import polars as pl

df = pl.read_csv("path/to/github_dataset.csv")

first_five_repo = df.select(
  pl.col("repositories").head(5)
)

print(first_five_repo)

Это эквивалентно этому в SQL, если мы предположим, что наш csv — это, скажем, имя таблицы git_repos.

SELECT repositories FROM git_repos LIMIT 5

И это дает нам такой результат:

shape: (5, 1)
┌───────────────────────────┐
│ repositories              │
│ ---                       │
│ str                       │
╞═══════════════════════════╡
│ octocat/Hello-World       │
│ EddieHubCommunity/support │
│ ethereum/aleth            │
│ localstack/localstack     │
│ education/classroom       │
└───────────────────────────┘

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

Немного более продвинутый материал

Давайте посмотрим, какие 5 лучших языков в нашем csv-файле, вы будете действительно удивлены :

top_5 = df.groupby("language").agg(
    [pl.count().alias("count")]
  ).sort("count",descending=True).head(5)

print(top_5)

Эквивалент этого в PostgreSQL будет примерно таким

SELECT COUNT(*) AS count FROM git_repos GROUP BY language ORDER BY count DESC;

И в итоге мы приходим к такому результату:

shape: (5, 2)
┌────────────┬───────┐
│ language   ┆ count │
│ ---        ┆ ---   │
│ str        ┆ u32   │
╞════════════╪═══════╡
│ JavaScript ┆ 253   │
│ Python     ┆ 155   │
│ NULL       ┆ 145   │
│ HTML       ┆ 72    │
│ Java       ┆ 44    │
└────────────┴───────┘

Да, кажется, что NULL — 3-й любимый язык людей во всем мире.

Давайте просто отфильтруем нулевые значения, чтобы получить лучшее представление о распределении языков, и тогда все будет в порядке:

filtered_language = df.filter(pl.col("language") != "NULL")
top_5 = filtered_language.groupby("language").agg(
    [pl.count().alias("count")]
  ).sort("count",descending=True).head(5)

print(top_5)

Что в значительной степени не совсем эквивалентно чему-то вроде одного из следующих ответов.

SELECT COUNT(*) AS count FROM git_repos WHERE language IS NOT NULL GROUP BY language ORDER BY count DESC;

--OR something like that in the idea but a bit more advanced in SQL

WITH filtered_language AS (SELECT * FROM git_repos WHERE language IS NOT NULL)
SELECT COUNT(*) AS count FROM filtered_language GROUP BY count ORDER BY DESC

Что хорошего в использовании python и Polars для создания всего этого, так это то, что у вас есть несколько интересных концепций SQL или что-то почти бесплатное. Например, здесь мы объявили значение filtered_language, которое содержит все столбцы нашего DataFrame, но без NULL.

Это близко к общим табличным выражениям в SQL, как и во втором способе написания этого запроса.

Вывод

Мы должны сказать, что мы доволен гибкостью Polars, которая, конечно, близка к Pandas. Это добавляет слой абстракции поверх нашей любимой реляционной алгебры. И не выбрасываем Ruby или что-то еще, но это правда, что когда вы хотите проводить аналитику данных, менее естественно использовать Ruby, чем Python.

Тем не менее, python и pandas никогда не заменят SQL, так как они не предназначены для того же использования, и дальнейшее совершенствование наших навыков SQL по-прежнему является для нас способом идти вместе с Ruby. 

#Python #SQL
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу