Анализ данных (Data analysis)
46.3K subscribers
2.34K photos
275 videos
1 file
2.07K links
Data science, наука о данных.

@haarrp - админ

@itchannels_telegram - 🔥 главное в ит

@ai_machinelearning_big_data - ML

@machinelearning_interview - вопросы с собесдований по Ml

РКН: clck.ru/3FmyAp
Download Telegram
🖥 Тайны виртуальных конвертов: чтение и парсинг .pst файлов

Сегодня я рассмотрю алгоритм чтения и парсинга .pst файлов, написанный на python. Для работы с одним файлом и оставлю в стороне параллельную обработку, которую стоит использовать при работе с большим числом архивов.

Для открытия и чтения .pst файлов воспользуюсь pypff – python оберткой для библиотеки libpff, написанной на C. Эта библиотека позволяет работать с форматами PFF (Personal Folder File) и OFF (Offline Folder File), в которые как раз и входит формат .pst, наряду с форматами .pab (Personal Address Book) и .ost (Offline Storage Table).

# Установка библиотеки
pip install libpff-python
# Импортирование библиотеки
import pypff
Работа с файлом будет подобна работе с древовидным архивом. Поэтому в первую очередь после чтения файла необходимо получить корневую папку:

pst = pypff.file()
pst.open(“example.pst”)
root = pst.get_root_folder()

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

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

Для получения списка всех писем воспользуюсь рекурсивным методом, который проходит по папке и собирает содержимое из нее и её дочерних папок:

def parse_folder(base):
messages = []
for folder in base.sub_folders:
if folder.number_of_sub_folders:
# Извлечение писем из дочерней папки
messages += parse_folder(folder)
# Обработка писем в текущей папке
for message in folder.sub_messages:
messages.append({
"folder": folder.name,
"subject": message.subject,
"sender_name": message.sender_name,
"sender_email": get_sender_email(message),
"datetime": message.client_submit_time,
"body_plain": get_body(message)
})
return messages

# Извлечение всех писем из файла
messages = parse_folder(root)

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

Как можно видеть из списка атрибутов pff.message, письмо может иметь тело в трех форматах (plain_text, html, rtf), а точнее в одном из этих трех.

Для задачи меня будет интересовать получение тела письма в формате текста, поэтому необходимо конвертировать html строки (которых оказалось больше всего). Для этого воспользуемся библиотекой BeautilfulSoup: создадим объект bs на основе нашего html_body и воспользуемся методом get_text(), чтобы получить очищенный от html тегов текст письма. На этом можно было бы остановится, но в результирующих строках оставались комментарии с описанием стилей и шрифтов, поэтому дополнительно производится их удаление с помощью регулярных выражений, а также замена двойных символов перевода строки на одинарные.

📌Читать дальше

@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132🔥2
Data Cleaning and Preprocessing for data science beginners

В этом руководстве рассмотрены все важнейшие этапы с примера кода по очистке и предварительной обработке данных.

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

📚Скачать книгу

@data_analysis_ml
👍10🔥41
Эмбеддинг - это как переводчик, преобразующий слова в числа, чтобы алгоритмы могли их понять.

Chroma позволяет легко создавать эмбеддинги из документов и находить похожие результаты, используя всего нескольких строк кода.

Github
Colab

@data_analysis_ml
👍191🔥1🤔1
Яндекс уже применяет нейросеть YandexGPT в браузере и в Алисе, голосовом помощнике. Какие профессии нужны, чтобы нейросеть становилась умнее, и как отбирают данные для обучения — расскажут сотрудники, работающие над YandexGPT.

→ Бесплатно, 21 августа в 19:00 Мск

Наши спикеры:
◾️Николай Зинов
Руководитель группы YaLM Alignment в Яндексе
◾️Ирина Барская
Руководитель службы аналитики и исследований в Яндексе

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

→ Зарегистрируйтесь на вебинар

Реклама АНО ДПО "Образовательные технологии Яндекса", ИНН:7704282033, erid:LjN8JvPzS
👍5👎2
Redis Explained

Глубокое техническое погружение во все тонкости Redis.

В статье рассматриваются различные топологии Redis, персистентность данных и форкинг процессов.

Отличная иллюстрированная статья для глубокого понимания Redis.

Читать

@data_analysis_ml
👍10🔥21
🖥 Контроль за дрейфами предсказательных моделей и Popmon

Для решения задачи мониторинга данных в голландском банке ING была разработана библиотека Popmon для Python, название которой является сокращением от «population monitoring» — «наблюдение за популяцией».

В качестве датасета для демонстрации я буду использовать данные ежедневных замеров метеорологических сенсоров с 1961 по 1978 год: показания трех датчиков, минимальная и максимальная температура воздуха, минимальная температура травы, количество осадков и скорость ветра. Целью датасета является предсказание скорости ветра. Источник находится здесь.

Данная библиотека позволяет найти отклонения по входным и выходным данным в датасетах. Также имеется возможность провести сравнительный анализ датасета на основе статистики из другого.

Popmon умеет работать с датафреймами из библиотек Pandas и PySpark. В целях демонстрации я буду использовать Pandas.

Читать дальше
Github

@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🥰1
🟡 Дайджест полезных материалов из мира : Data Science за неделю

Почитать:
Опыт работы с данными или с чем может столкнуться аналитик
Кто, как и ради чего создаёт онлайн-образование в IT-сфере: истории пяти экспертов
Тестирование грамматики Llama Cpp, основанной на ограничениях выборки
2 ВИЗУАЛИЗАЦИИ, КОТОРЫЕ ЛЕГЧЕ С ПИТОНОМ (по сравнению с TABLEAU)
Как получить real-time данные смарт-контракта, используя The Graph (пишем свой сабграф)
Apache Spark 3.4 для Databricks Runtime 13.0
ML-искусство переживать проблемы: как избегать разочарований и находить аналоги товаров в периоды out-of-stock
Enhancing Database Performance: In-Depth Query Optimization with ApacheAGE
Step by step guide to becoming a Data Scientist in 2023
Visual Language Processing: Bridging Vision and Language with Transformers
Guia Avançado do Método `merge` no Pandas com Exemplos
8 Completely FREE Big Data Resources
CV-based self-diagnosis telemedicine application
A Powerful Tool for Data Engineers: Apache Doris 2.0.0 is Production-Ready!
Embracing Modularity: Template for Structuring Machine Learning Projects
 Get Mining into Data with These Top 5 Resources
Python Data Type

Посмотреть:
🌐 Универсальный рецепт по написанию и аннотированию декораторов Python.
🌐 NVIDIA Omniverse: Virtual Worlds Come Alive
🌐 Lightning Interview "Hands-On Generative AI Applications"

Хорошего дня!

@data_analysis_ml
👍8🔥43
🖥 AutoScraper: Умный, автоматический, быстрый и легкий веб-парсер на Python

Если вы хотите автоматически спарить веб-сайт за несколько строк кода на
#Python, попробуйте autoscraper.

С помощью autoscraper можно извлекать элементы с определенными шаблонами, просто предоставив текст с этим шаблоном.

$ pip install autoscraper

Github

@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥41
🔥 Применение эффективного асинхронного web-парсинга при работе с Bigdata

Парсинг или веб-скрапинг — это автоматизированный сбор и структурирование информации из открытых источников при помощи специальной программы, называемой парсером. Технически получить доступ к открытой информации можно с помощью API, но как правило доступ ограничен или требует вложения денежных средств.

Рассмотрим принцип работы парсинга. Данный процесс происходит в несколько этапов:

1. Отправка HTTP-запроса на сервер.
2. Поиск необходимых данных.
3. Трансформация полученных данных.

При отправке HTTP-запроса на сервер у нас есть два варианта:

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

У каждой из представленных реализаций есть свои плюсы и минусы. Так, например, асинхронный запрос значительно увеличивает производительность кода, поскольку позволяет обрабатывать несколько запросов одновременно, но его довольно сложно реализовать. В свою очередь, синхронный запрос прост в разработке и отладке, но имеет низкую эффективность за счёт последовательной отправки HTTP-запросов.

Основные проблемы парсинга

Парсинг, как и любая технология, сталкивается с рядом проблем. Перечислим наиболее актуальные:

блокировка доступа к данным: использование CAPTCHA, блокирование IP-адресов и другое;
скорость выполнения: большой объем данных требует много ресурсов и времени;
сложность обработки ошибок: ошибки соединения, ошибки синтаксиса и другие;
работа с динамическим контентом: необходимо разрабатывать специальные инструменты для анализа сайтов, использующих технологии ajax и javascript.

Реализация парсера на основе Beautiful Soup. Обзор возможностей.

Beautiful Soup — это библиотека Python для извлечения данных из файлов форматов HTML и XML. Beautiful Soup (или BS4) использует DOM-модель (Document Object Model) для трансформации и извлечения данных.

Основными возможностями BS4 являются:

поиск элементов на странице по тегу, классу, id и другим атрибутам;
извлечение текста и атрибутов элементов;
навигация по дереву элементов страницы;
манипуляции с HTML-кодом, такие как добавление, удаление или изменение элементов.

Для извлечения данных из HTML-кода необходимо использовать конструктор BeautifulSoup(), который принимает два аргумента: разметку (HTML-код) и анализатор (необходим для обработки HTML-кода). BS4 поддерживает различные библиотеки для синтаксического анализа, включая стандартные html.parser, а также более быстрые, такие как lxml и html5lib. В нашем случае будем использовать lxml. Также, для отправки запросов на сайт воспользуемся библиотекой requests.

Реализация кода на базе Beautiful Soup
Для начала установим и импортируем библиотеки.
# установка
pip install beautifulsoup4
pip install requests
pip install lxml
# импорт
from bs4 import BeautifulSoup
import requests


📌 Продолжение

@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍5🔥2
☝️Низкое качество #данных может привести к неверным выводам и плохой работе модели.

pandera предоставляет гибкий и удобный API для выполнения проверки данных на объектах типа dataframe, чтобы сделать конвейеры обработки данных более читаемыми и надежными.

Github
Документация

@data_analysis_ml
👍92🔥2
🔍 Выявление неявных связей при анализе графов или как увидеть незримое

Неявные связи в графах. Что это и как с ними работать, разберу на примерах.

Граф — множество узлов, объединенных множеством ребер.

С узлами все понятно, взяли города России, клиентов банка или компьютеры в сети, и получили множество объектов, которые и будут узлами для графа.

Что же с ребрами? На первый взгляд все просто: города соединены дорогами, клиенты совершают переводы денежных средств, а компьютеры постоянно обмениваются информацией. Все, что было перечислено, относится к явным типам связей.

Существует факт взаимосвязи между объектами: если дороги нет, то ребро между узлами отсутствует.
Что же относится к неявным связям? Неявные связи сложнее, они могут зависеть от явных связей или же быть самостоятельными.

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

Теперь перейдем к практическому примеру.
Есть 2 файла:

◾️Данные о мошенниках, их номерах телефонов, а также периоды их активности;
◾️Данные о клиентах и номерах телефонов с периодами активности.
◾️Данные с номерами телефонов сложно найти в открытом доступе, придется сгенерировать их самостоятельно. Код для генерации необходимых данных расположен по ссылке.

Следующим этапом будет создание графа. Для этой задачи понадобятся следующие python-библиотеки:

▪️Pandas – для работы с файлами;
▪️NetworkX – для создания графа связей, его визуализации;
▪️Matplotlib и Numpy – нужны для настройки визуализации графа;
▪️Datetime – для операций над временными данными.

Перед созданием графа взглянем на данные, с которыми нам предстоит работать.

Описание данных:

📍index – id клиента / мошенника;
📍numbers – номер телефона;
📍Date_start – начало периода активности;
📍Date_end – окончание периода активности.

➡️ Продолжение

@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
👍172🔥2
Event-Driven Declarative Orchestrator

Популярные библиотеки оркестровки потоков операций по обработке данных, такие как Airflow, требуют написания Python-кода для использования их возможностей, что усложняет код и затрудняет работу с проектом.

Чтобы отделить код data science от логики оркестровки, используйте библиотеку
Kestra.

Github
Демо

@data_analysis_ml
7👍4🔥1😁1
🚀 Ruff

Ruff - это #Python-линтер, написанный на Rust, который может быть использован для замены различных инструментов, таких как Flake8, isort, pydocstyle, yesqa, eradicate, pyupgrade и autoflake.

Ruff также работает в 10-100 раз быстрее, чем существующие линтеры.

pip install ruff

Github
Документация

@data_analysis_ml
👍6🔥42👎1