Анализ данных (Data analysis)
Data science, наука о данных. @haarrp - админ РКН: clck.ru/3FmyAp
Ko'proq ko'rsatish📈 Telegram kanali Анализ данных (Data analysis) analitikasi
Анализ данных (Data analysis) (@data_analysis_ml) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 50 248 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 2 657-o'rinni va Rossiya mintaqasida 12 484-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 50 248 obunachiga ega bo‘ldi.
25 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni 38 ga, so‘nggi 24 soatda esa 0 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 8.85% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 6.52% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 4 447 marta ko‘riladi; birinchi sutkada odatda 3 278 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 28 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent llm, контекст, openai, архитектура, deepseek kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Data science, наука о данных.
@haarrp - админ
РКН: clck.ru/3FmyAp”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 26 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
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_mldef get_body(message):
if message.get_plain_text_body():
return process_plain_text_body(message)
if message.get_html_body():
return process_html_body(message)
Остается получить адрес отправителя, для которого, в отличие от имени, выделенного атрибута не оказалось. Внимательный читатель мог заметить, что в pff.message имеется поле с интригующим названием «transport_headers». Обратившись к данному атрибуту, я увидел бы содержимое, описывающее путь электронного письма (изображение взято из интернета для примера).
📌Читать дальше
@data_analysis_ml!pip install nltk
!pip install pandas
import pandas as pd
import nltk
from nltk.tokenize import sent_tokenize,word_tokenize
from nltk.stem import PorterStemmer
from nltk.corpus import stopwords
import re
Обзор данных
▪Следующим этапом проекта будет загрузка датасета. В данном случае мы будем использовать набор данных твитов о катастрофах из Kaggle.
▪Мы можем загрузить наш датасет с помощью библиотеки pandas.
df = pd.read_csv("/train.csv")
▪Для того чтобы получить общее представление о данных, мы можем просмотреть верхние строки набора данных с помощью функции head в pandas:
df.head(10)
Для анализа столбца ключевых слов мы используем библиотеку seaborn, которая позволяет визуализировать распределение ключевых слов и их корреляцию с целью.
plt.figure(figsize=(10,70))
sns.countplot(data=df,y="keyword",hue="target",saturation=0.50)
plt.legend(bbox_to_anchor=(1.02, 1), loc='upper left', borderaxespad=0)
plt.show()
📌 Продолжение
@data_analysis_mlimport folium
import pandas as pd
import numpy as np
Допустим, что у меня имеется датасет с аггрегированной информацией о переводах от одного клиента другому:
data = pd.read_csv('data.csv', sep = ';')
В 75% строках датасета количество операций от отправителя к получателю 5 или меньше. Отфильтруем данные, оставив наиболее сильные связи:
data_clean = data[data['opers_cnt']>5]
Далее, необходимо получить набор точек (nodes) с идентификаторами клиентов и их координатами и посчитать общую сумму операций у клиента – отправлений и поступлений:
data_senders = data_clean.rename(
columns = {'id_send':'id','lat_send':'lat','lon_send':'lon'})[['id','lat','lon','opers_sum']]
data_receivers = data_clean.rename(
columns = {'id_recei':'id','lat_rec':'lat','lon_rec':'lon'})[['id','lat','lon','opers_sum']]
nodes = (pd.concat([data_senders, data_receivers])
.groupby(['id','lat','lon'])['opers_sum']
.sum()
.reset_index())
Нормализуем объем операций, данный столбец будет использоваться в качестве параметра размера точки:
nodes['opers_sum_scaled'] = (nodes['opers_sum']-nodes['opers_sum'].min()) / (nodes['opers_sum'].max()-nodes['opers_sum'].min())*20
Обогащаем информацией о суммах отправлений и поступлений каждого идентификатора:
id_send_opers = (data_clean.groupby(['id_send'])['opers_sum'].sum()
.reset_index()
.rename(columns = {'id_send':'id','opers_sum':'send_sum'}))
id_rec_opers = (data_clean.groupby(['id_recei'])['opers_sum'].sum()
.reset_index()
.rename(columns = {'id_recei':'id','opers_sum':'rec_sum'}))
nodes = nodes.merge(id_send_opers, on ='id', how = 'left')
nodes = nodes.merge(id_rec_opers, on ='id', how = 'left')
nodes = nodes.fillna(0)
Получил всю необходимую информацию для нанесения точек на карту:
Далее эти точки необходимо соединить – формирую список ребер:
edges = (pd.DataFrame(np.unique(np.array(['-'.join(sorted(edge)) for edge in zip(for_edges['id_send'],for_edges['id_recei'])])))[0]
.str.split('-', expand = True).rename(columns=({0:'id_x', 1:'id_y'})))
coords_list = nodes[['id','lat','lon']]
edges = edges.merge(coords_list.rename(columns={'id':'id_x'}), on ='id_x', how = 'left')
edges = edges.merge(coords_list.rename(columns={'id':'id_y'}), on ='id_y', how = 'left')
📌 Читать дальше
@data_analysis_ml
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
