TGViewer
Мир аналитика данных Мир аналитика данных @analysts_world · 4.56K subscribers
Post #155 3.55K
📊 Анализ данных: Извлечение доменов почт клиентов 📊

Привет, друзья! Меня на днях попросили проанализировать домены почт у клиента если сможем.✉️ Цитата:
Типа такого: яндекс - 1,2 млн / 15% мейл.ру - …. гугл

Я ответила, что можем и полезла в базу пошла за кофе.
Покажу решение на примере SQL-запроса и Python кода.

📜 SQL-запрос
Для начала я использую SQL-запрос, чтобы извлечь домены почт из базы данных:
query = ""
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', -1), '.', 1) AS mail_type, COUNT(*)
FROM user.user
WHERE client_id = 1000
AND type = 'user'
GROUP BY 1
"""
users = pd.read_sql(query, connection)

Этот запрос выполняет следующие действия:

✔️SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', -1), '.', 1)
- SUBSTRING_INDEX(email, '@', -1) извлекает часть строки после символа @ (то есть домен почты).
- SUBSTRING_INDEX(..., '.', 1) затем извлекает часть строки до первой точки в домене, чтобы получить тип почты.
Таким образом, если email выглядит как user@mail.com, результат будет mail. Если email выглядит как user@yandex.ru, результат будет yandex.

✔️COUNT(*) — считает количество пользователей с каждым доменом.

✔️WHERE client_id = 1000 AND type = 'user' — фильтрует данные по определённому аккаунту и типу пользователя.

✔️GROUP BY 1 — группирует результаты по домену.


💻 Python код
После получения данных из SQL-запроса, мы используем Python для дальнейшей обработки. В целом можно и в SQL написать было, но базе и так тяжело, не стала нагружать ее подзапросами.
import pandas as pd
#Сортировка данных по количеству пользователей в порядке убывания
users_sorted = users.sort_values('count(*)', ascending=False)

# Подсчёт общего количества пользователей
total_count = users_sorted['count(*)'].sum()

# Расчёт процента для каждого домена
users_sorted['percentage'] = (users_sorted['count(*)'] / total_count) * 100


P.S. Функция SUBSTRING_INDEX используется в MySQL и не поддерживается PostgreSQL. В PostgreSQL для аналогичной задачи нужно использовать
split_part(split_part(email, '@', 2), '.', 1) AS mail_type


Цифра 2 в функции split_part(email, '@', 2) указывает на то, что мы хотим получить вторую часть строки, разделённую символом '@'. Мы разделяем email на две части: до символа '@' и после него. Нам нужна часть, идущая после символа '@', то есть домен почты.

📝 Результаты
После выполнения этого кода мы получаем таблицу, отсортированную по количеству пользователей для каждого домена, с процентным значением.

Теперь понятно какие почтовые домены наиболее популярны среди пользователей. ✉️
  • 👍 31
  • ❤ 5
More from @analysts_world
  1. Sep 21, 2026📊 Задачка с собеседования Ну что, по итогам голосования большинство хотят задачки и sql.…
  2. Sep 14, 2026Post #345
  3. Sep 14, 2026Что-то я тут прям зачастила с A/B тестами 😅 Смотрю на последние посты и такое чувство, чт…
  4. Sep 1, 2026🎒 С 1 сентября, друзья! Сегодня как раз отправила своих детей в школу – и вот это чувство…
  5. Aug 24, 2026Вне выборки Обычно здесь про SQL, Python и AB-тесты. Но не всё, что важно, попадает в выбо…
  6. Aug 20, 2026Fuckup Night от создателей Trisigma, Ares и karpov.courses Согласитесь, ивенты, где все де…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →