Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
Все самое полезное для дата сайентиста в одном канале. Учиться у нас: clc.to/6qVHgg По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5b03124c8ba6dcaa121c9
نمایش بیشتر📈 تحلیل کانال تلگرام Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
کانال Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение (@dsproglib) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 18 453 مشترک است و جایگاه 7 203 را در دسته فناوری و برنامهها و رتبه 36 416 را در منطقه روسيا دارد.
📊 شاخصهای مخاطب و پویایی
از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 18 453 مشترک جذب کرده است.
بر اساس آخرین دادهها در تاریخ 30 ژوئن, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -69 و در ۲۴ ساعت گذشته برابر -1 بوده و همچنان دسترسی گستردهای حفظ شده است.
- وضعیت تأیید: تأیید نشده
- نرخ تعامل (ER): میانگین تعامل مخاطب 7.26% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 4.10% واکنش نسبت به کل مشترکان کسب میکند.
- دسترسی پستها: هر پست به طور میانگین 1 340 بازدید دریافت میکند. در اولین روز معمولاً 756 بازدید جمعآوری میشود.
- واکنشها و تعامل: مخاطبان بهطور فعال حمایت میکنند؛ میانگین واکنش به هر پست 7 است.
- علایق موضوعی: محتوا بر موضوعات کلیدی مانند сайентиста, llm, буст, навигация, openai تمرکز دارد.
📝 توضیح و سیاست محتوایی
نویسنده این فضا را محل بیان دیدگاههای شخصی توصیف میکند:
“Все самое полезное для дата сайентиста в одном канале.
Учиться у нас: clc.to/6qVHgg
По рекламе: @proglib_adv
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5b03124c8ba6dcaa121c9”
به لطف بهروزرسانیهای پرتکرار (آخرین داده در تاریخ 01 ژوئیه, 2026)، کانال همواره بهروز و دارای دسترسی بالاست. تحلیلها نشان میدهد مخاطبان بهطور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامهها تبدیل کردهاند.
در حال بارگیری داده...
| تاریخ | رشد مشترکین | اشارات | کانالها | |
| 01 ژوئیه | 0 |
# x: [B, F, N, D] # Temporal attention — последовательность это кадры x_t = rearrange(x, "b f n d -> (b n) f d") x_t = temporal_attention(x_t, x_t, x_t) x = rearrange(x_t, "(b n) f d -> b f n d", n=N) # Spatial attention — последовательность это патчи x_s = rearrange(x, "b f n d -> (b f) n d") x_s = spatial_attention(x_s, x_s, x_s) x = rearrange(x_s, "(b f) n d -> b f n d", f=F)Просто перекладываем тензор — и стандартный attention блок работает нужным образом. 🔗 Ссылка на пост 📍 Навигация: Вакансии • Задачи • Собесы Библиотека дата-сайентиста #буст
| 2 | 🥲 One-hot encoding: не всегда лучший выбор
Первое что учат при работе с категориальными признаками — pd.get_dummies(). Но у one-hot encoding есть серьёзные ограничения о которых часто забывают.
🔴 Когда one-hot ломается
Высокая кардинальность — признак «город» с 500 уникальными значениями даст 500 новых колонок. Sparse матрица, проклятие размерности, медленное обучение.
Цикличные признаки — час дня: 23 и 0 это соседние значения, но one-hot считает их максимально далёкими.
Новые категории в проде — если в тесте появилась категория которой не было в трейне, модель падает или молча ошибается.
✅ Что использовать вместо
🎯 Target encoding — заменяем категорию средним значением таргета. Компактно, мощно, но только внутри pipeline с cross-validation чтобы избежать утечки:
from category_encoders import TargetEncoder
enc = TargetEncoder()
X_train['city'] = enc.fit_transform(X_train['city'], y_train)
📊 Frequency encoding — заменяем категорию её частотой в данных. Просто, без утечки, хорошо работает с деревьями:
freq = df['city'].value_counts(normalize=True)
df['city_freq'] = df['city'].map(freq)
🌀 Cyclic encoding — для часа, дня недели, месяца. Синус и косинус сохраняют цикличность:
df['hour_sin'] = np.sin(2 * np.pi * df['hour'] / 24)
df['hour_cos'] = np.cos(2 * np.pi * df['hour'] / 24)
📋 Шпаргалка выбора
- Мало уникальных значений (< 15) → one-hot
- Есть порядок → ordinal encoding
- Высокая кардинальность → target или frequency encoding
- Временные признаки → cyclic encoding
- XGBoost / LightGBM → нативная поддержка категорий, можно не кодировать вообще
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст | 700 |
| 3 | 🚀 Не уверены, стоит ли переходить на зрелую ИИ-инженерию? Начните с демо-урока!
Вот-вот стартует наш курс AgentOps. Если вы сомневаетесь в формате, просто оставьте заявку и получите бесплатный демо-урок «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов».
Для тех, кто готов мощно прокачать портфолио, прямо сейчас действует предложение «3 любых курса по цене 1»:
— При покупке VIP-тарифа (осталось 4 места) нового потока «ИИ-агенты» вы получаете в подарок доступ к курсу «AgentOps» + ещё один любой курс Академии на выбор
— В деньгах это два топовых курса по автоматизации и контролю ИИ всего за 134.000 ₽ вместо 263.000 ₽ 🔥 А за счет третьего курса (например, можно выбрать «Математику») вы соберете мощный стек и освоите целое востребованное направление.
— Платеж можно разбить на несколько частей с помощью беспроцентной рассрочки.
👉 Получить демо-урок и зафиксировать спецпредложение 3 в 1 | 787 |
| 4 | 🆕 Polars 1.42: три полезных улучшения
1️⃣ Адаптивный контроллер параллелизма для облачного I/O
При чтении Parquet и IPC файлов из S3, GCS, Azure теперь автоматически подбирается оптимальное количество параллельных запросов под текущую скорость соединения. На бенчмарке TPC-H SF=1000 на 64-ядерном инстансе — 2x ускорение в среднем и до 4x на I/O-bound запросах.
Никаких изменений в API — scan_parquet и scan_ipc из облака получают это автоматически.
2️⃣ Устранение противоречивых фильтров
Оптимизатор запросов теперь определяет когда фильтр не может вернуть ни одной строки — и вообще не выполняет запрос. Шесть категорий противоречий:
— A AND NOT(A)
— x > 5 AND x <= 5
— is_in([]) — пустое множество
— a > 5 AND a < 3 — несовместимые диапазоны
— два непересекающихся is_between
— a == 5 AND a > 10
Полезно при программно генерируемых фильтрах где параметры могут дать low > high или взаимоисключающие условия. Никаких изменений в коде не нужно.
3️⃣ is_sorted() для DataFrame и Expr
Series.is_sorted() давно есть, теперь добавили для DataFrame и выражений:
df.is_sorted("a") # True/False
df.is_sorted("b", descending=True)
df.select(pl.col("a").is_sorted()) # внутри select/filter
Поддерживает descending и nulls_last. Пока помечено как unstable.
🔛 Релиз-блог
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст | 935 |
| 5 | pandas — 10 приёмов которые используют каждый день
Не основы, а то что реально ускоряет работу.
Фильтрация
df.query() — читается как SQL, работает быстро:
df.query("age > 30 and city == 'Moscow'")
df.query("category in @my_list") # переменные через @
Новые колонки
np.select() для нескольких условий вместо вложенных np.where():
conditions = [df.score > 90, df.score > 70, df.score > 50]
choices = ["A", "B", "C"]
df["grade"] = np.select(conditions, choices, default="F")
Пропуски
Процент null по каждой колонке — одной строкой:
df.isnull().mean().sort_values(ascending=False)
Удалить колонки где больше 50% null:
df.dropna(thresh=len(df) * 0.5, axis=1)
Агрегация
Именованные агрегации — результат сразу с нужными именами:
df.groupby("region").agg(
total_sales=("sales", "sum"),
avg_rating=("rating", "mean"),
n_orders=("order_id", "count"),
)
transform() — добавить агрегат как колонку не теряя строки:
df["pct_of_region"] = df["sales"] / df.groupby("region")["sales"].transform("sum")
Feature engineering
Процентильный ранг:
df["rank"] = df["sales"].rank(pct=True)
Биннинг:
df["bucket"] = pd.cut(df["age"], bins=[0,18,35,60,100],
labels=["teen","young","mid","senior"])
Z-score для поиска выбросов:
from scipy import stats
df["zscore"] = stats.zscore(df["value"])
outliers = df[df["zscore"].abs() > 3]
Даты
Компоненты даты сразу все:
df["year"] = df["date"].dt.year
df["month"] = df["date"].dt.month
df["weekday"] = df["date"].dt.day_name()
df["is_weekend"] = df["date"].dt.dayofweek >= 5
✔️ Больше хитростей в прикрепленной шпаргалке
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст | 993 |
| 6 | 🎯 Нормализация vs Стандартизация: в чем разница
При подготовке данных для машинного обучения (Feature Scaling) часто возникает дилемма: что выбрать — нормализацию или стандартизацию?
Эта инфографика наглядно разбирает оба метода, их формулы и сценарии применения.
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст | 1 047 |
| 7 | 🎬 Где ломаются архитектуры ИИ-агентов и как этого избежать: запись урока от Proglib.Academy и cloud․ru
Proglib.аcademy вместе с cloud․ru провели вебинар, где разобрали реальные боли проектирования автономных систем. Вы просили запись встречи — она уже в открытом доступе!
Что внутри:
— критерии выбора между одним агентом и мультиагентной системой;
— разбор популярных архитектурных ошибок;
— реальные ограничения современных ИИ-агентов;
— практические рекомендации по проектированию агентных систем.
👉 Посмотреть запись можно тут:
● VK
● YouTube | 1 087 |
| 8 | ✅ Gefen: замена AdamW которая экономит 6.5 ГБ памяти на каждый миллиард параметров
Одна из главных проблем при обучении больших моделей — память под состояние оптимизатора. AdamW хранит два момента для каждого параметра, и это бьёт по VRAM сильнее чем сами веса.
Gefen — drop-in замена AdamW с 8-кратным сокращением памяти оптимизатора. Та же точность, те же гиперпараметры, два изменённых строки в коде:
# было:
# optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3)
# стало:
from gefen import Gefen
optimizer = Gefen(model.parameters(), lr=1e-3)
➡️ Gefen квантизирует состояния оптимизатора до 8 бит используя подход основанный на блочно-диагональном приближении матрицы Гессиана. Это не просто округление — точность квантизации подбирается так чтобы не ронять качество обучения.
➡️ Работает с PyTorch DDP, FSDP, DeepSpeed ZeRO. Интегрируется в Hugging Face Trainer через optimizer_cls_and_kwargs. Есть версия GefenMuon — Muon с 4-кратным сокращением памяти оптимизатора.
pip install gefen
🔗 Ссылка на Gefen
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст | 1 163 |
| 9 | 🤖 Запускаем новый курс: «Spec-Driven Development»!
Всем надоело, что ИИ-агенты (Cursor, Claude) генерируют сотни строк хаотичного кода, который приходится переписывать. Дело не в нейросети, а в том, что вы заставляете её угадывать условия задачи.
На курсе вы освоите методологию SDD (Spec-Driven Development) — управление ИИ через спецификации (спеки) и тесты вместо «вайб-кодинга».
Как это работает?
До генерации кода вы фиксируете в спеке контракты, инварианты и граничные случаи. Документ четко определяет ЧТО делать, сводя лотерею в PR к нулю.
За 8 недель с экспертами из BigTech вы:
🔹 Встроите ИИ в личный или командный workflow.
🔹 Превратите генерацию кода в предсказуемый инженерный процесс.
🔹 Перестанете перепроверять за моделями каждую строчку.
📖 Полный разбор методологии с примерами и готовый промпт для генерации спеки — в нашей статье
👉 Освоить SDD и ускорить разработку | 1 126 |
| 10 | ⚠️ Graph Neural Networks: с чего начать и куда идти дальше
GNN применяются везде где данные имеют структуру графа: молекулы, социальные сети, рекомендательные системы, карты дорог, белковые взаимодействия.
➡️ Подборка полезных ресурсов по GNNs
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст | 1 037 |
| 11 | RNN — шпаргалка
Архитектуры
RNN → простая, страдает от vanishing gradient
LSTM → long + short memory, 3 гейта, решает vanishing
GRU → упрощённый LSTM, 2 гейта, быстрее обучается
Bi-RNN → читает последовательность в обе стороны
Когда что брать
— Короткие последовательности → RNN (или вообще не RNN)
— Длинные зависимости → LSTM
— Скорость важнее качества → GRU
— Нужен контекст с обеих сторон → Bi-LSTM / Bi-GRU
— Очень длинные последовательности → Transformer
PyTorch — минимально
lstm = nn.LSTM(input_size=10, hidden_size=64,
num_layers=2, batch_first=True)
out, (h_n, c_n) = lstm(x) # x: (batch, seq_len, input_size)
Типичные проблемы
— Vanishing gradient → LSTM/GRU + gradient clipping
— Exploding gradient → clip_grad_norm_ с порогом 1.0
— Переобучение → dropout между слоями
— Медленно → GRU вместо LSTM, или Transformer
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст | 1 155 |
| 12 | 👌 Урок из DynamoDB для работы с большими данными
Задача кажется простой: держать отсортированный индекс по 10 000 записей в секунду. Но один лимит всё ломает — у одной партиции потолок пропускной способности.
Математика проблемы:
500 байт/запись × 10 000 запросов/с × 100 записей/запрос
= 500 МБ/с
Лимит одной партиции = 24 МБ/с
Нужно минимум 21 партиция
Наивные решения и почему они не работают
Случайный суффикс → нельзя искать по значению, не знаешь в какой партиции данные.
Хэш от значения → данные распределены равномерно, но порядок потерян. Нельзя вернуть отсортированный результат.
Первый символ → 5 400 уникальных символов в реальных данных (Unicode), часть символов всё равно не помещается в одну партицию.
Правильное решение: границы по перцентилям
Разбить отсортированные данные на N равных диапазонов и сохранить граничные значения:
import bisect, unicodedata
# Предварительно вычисленные границы из реальных данных
BOUNDARIES = ['', 'agartha', 'barstow', 'can you', ...]
def shard_id(title):
normalized = unicodedata.normalize('NFKD', title.lower())
return bisect.bisect(BOUNDARIES, normalized) - 1
Поиск границы — O(log n) через bisect, константа с предвычисленным списком.
Урок для дата сайнтиста
Это та же проблема что при партиционировании данных в pandas, Spark или Polars: если партиции неравномерные — одни воркеры простаивают, другие перегружены (data skew).
Решение одинаковое: не делить по первому символу или хэшу, а вычислять границы по перцентилям реального распределения данных. В Spark это называется range partitioning, в pandas — pd.qcut.
Данные всегда распределены неравномерно. Проектировать партиции нужно под реальное распределение, а не под удобство.
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст | 985 |
| 13 | 👀 Умеете строить предсказуемую архитектуру с ИИ? Станьте спикером Proglib academy
Мы в Proglib.academy запускаем курс по Spec-Driven Development (SDD) — учим разработчиков управлять ИИ-агентами (Cursor, Copilot, Claude) через спецификации, контекст и тесты, чтобы не перепроверять за нейросетью каждую строку.
Для этого курса мы ищем классных спикеров-практиков.
➡️ Что требуется от вас?
● BigTech бэкграунд: опыт работы разработчиком, тимлидом или архитектором в крупных технологических компаниях.
● Опыт управляемой разработки с ИИ: вы на практике знаете, как встроить AI-инструменты в личный или командный workflow (от постановки задачи до ревью AI-кода).
● Системный подход: умение превращать хаотичную генерацию кода в предсказуемый инженерный процесс (работа с архитектурой, чек-листами, легаси и покрытием тестами).
➡️ Что мы предлагаем?
● Достойную оплату за подготовку материалов и проведение занятий.
● Мощное продвижение личного бренда через медиаресурсы Proglib (наша аудитория — 1 млн+ айтишников).
● Возможность публиковать свои экспертные материалы и статьи на наших площадках.
● Доступ к сильному и закрытому профессиональному сообществу.
Также мы ищем консультанта программы.
Если вы практикующий эксперт и готовы помочь нам отвалидировать программу курса, дать рекомендации по актуальности тем и финальным результатам обучения — мы вас очень ждем.
➡️ Как с нами связаться:
Telegram: @alinaa_kh
E-mail: alina@proglib.io | 1 034 |
| 14 | Библиотека дата-сайентиста
#развлекалово | 1 213 |
| 15 | 📕 Курс по Deep Learning
10 лекций, изначально записанных для клиницистов и медицинских физиков. Но не спешите закрывать вкладку.
Курс занимает интересную нишу: глубже чем большинство «AI для медицины» программ, но доступнее стандартных ML-курсов. Начинается с векторов и линейной регрессии и доходит до современных тем:
— self-attention и трансформеры
— byte-pair encoding
— RLHF
— RAG
— агенты
Хорошо подходит чтобы освежить базу, найти новые способы объяснить концепции коллегам или просто посмотреть на знакомые темы под другим углом.
🔗 Бесплатно, открытый доступ.
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст | 1 344 |
| 16 | ⏰ Уже сегодня в 19:00 (МСК) стартует наш открытый урок!
Знаем, летом хочется отложить учёбу на осень. Но пока остальные отдыхают 😅, мы предлагаем без лишней конкуренции прокачать свой workflow и начать закрывать тикеты в три раза быстрее.
Тема:
«AI-инструменты в разработке: пишем код быстрее»
Мы покажем живой разбор реального проекта: как с помощью AI-ассистентов мгновенно разбираться в чужой кодовой базе, искать нужные участки и собирать Pull Request. Только рабочие промпты, которые сэкономят вам часы рутины.
🎙 Спикер — Ольга Лукьянова, руководитель команды в SourceCraft (18+ лет развивала инструменты в JetBrains и Huawei).
👉 Узнать, как ускорить разработку с AI | 1 318 |
| 17 | ➡️ Marin: open-source фреймворк для обучения LLM
Большинство фреймворков для обучения моделей сохраняют результат. Marin сохраняет весь процесс: каждый шаг от сырых данных до финальной модели, включая неудачные эксперименты.
✳️ Что умеет
Полный пайплайн из одного фреймворка:
— курирование и фильтрация данных
— токенизация
— обучение (Llama, DeepSeek, Qwen и аналоги)
— оценка
Эксперименты описываются как граф зависимостей — шаги выполняются в топологическом порядке, как Makefile:
tinystories_tokenized = default_tokenize(
name="roneneldan/TinyStories",
tokenizer=llama3_tokenizer,
)
model = default_train(
name="marin-nano-tinystories",
tokenized=tinystories_tokenized, # зависимость явная
model_config=llama_nano,
train_config=nano_train_config,
)
С помощью Marin обучили первую open-source 8B модель которая превзошла Llama 3.1 8B. Скрипт обучения и ретроспектива опубликованы — можно воспроизвести самостоятельно.
➡️ Фреймворк
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст | 1 378 |
| 18 | 1.51 ТБ модель на ноутбуке — Unsloth сжал GLM-5.2 на 84%
GLM-5.2 от Z.ai — 744 млрд параметров, MIT лицензия, контекстное окно 1M токенов (целые кодовые базы за один запрос). Проблема: весит 1.51 ТБ. Ни у кого столько нет.
Unsloth решили это квантизацией: 2-битная версия занимает 238 ГБ и сохраняет ~82% точности. Критически важные слои остаются на высокой точности — качество не обваливается.
Что нужно для запуска
На одной машине:
— Mac M3/M4 Ultra с 256 ГБ RAM
С offloading:
— 24 ГБ GPU + 256 ГБ RAM
Инструменты: llama.cpp, LM Studio или Unsloth Studio.
Зачем это важно
Локальный coding agent с контекстом на весь репозиторий — без облака, без API-ключей, без лимитов, без отправки кода на чужие серверы. Для корпоративных задач с чувствительным кодом это меняет расклад.
Год назад такое требовало серверного кластера.
github.com/unslothai/unsloth
#llm #localai #quantization #opensource | 721 |
| 19 | ✳️ Гайд: Марковские цепи
Формально: P(Xₙ₊₁ | X₁,...,Xₙ) = P(Xₙ₊₁ | Xₙ). Только текущее состояние определяет следующее. Вся история не важна.
Это кажется ограничением. На практике — это мощь.
✳️Стационарное распределение
При определённых условиях (эргодичность) цепь сходится к стационарному распределению π независимо от начального состояния:
π = π · P
Это собственный вектор матрицы переходов. Долгосрочное поведение системы закодировано в одном векторе.
✳️Где это нетривиально
PageRank — марковская цепь по графу веб-страниц. Стационарное распределение и есть ранг страниц.
MCMC (Markov Chain Monte Carlo) — сэмплирование из сложных распределений через построение цепи у которой нужное распределение является стационарным. Байесовский вывод, генеративные модели, физические симуляции.
Hidden Markov Models — состояния скрыты, наблюдаем только эмиссии. Речь, биоинформатика, временные ряды.
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст | 1 510 |
| 20 | ⚠️ Тензор в ML и тензор в математике: это не одно и то же
Слово «тензор» используется в двух разных смыслах, и путаница между ними реальная.
✔️ Тензор в ML (практический смысл)
Многомерный массив чисел с определённой формой:
scalar: () # одно число
vector: (n,) # строка чисел
matrix: (m, n) # таблица
image batch: (B, H, W, C)
transformer activation:(B, T, D) # batch, seq_len, hidden_dim
Это то что имеют в виду PyTorch, TensorFlow и JAX. Тензор = способ организовать числа и эффективно их обрабатывать. Никакой дополнительной структуры.
✔️ Тензор в математике (настоящий смысл)
В математике и физике тензор — это не про форму массива. Это про то как объект преобразуется при смене системы координат.
Вектор — тензор первого ранга: при повороте координат его компоненты меняются по определённому правилу. Матрица напряжений в механике — тензор второго ранга: её компоненты меняются по другому правилу. Скаляр — тензор нулевого ранга: не меняется вообще.
Ключевое: не любой многомерный массив является тензором в математическом смысле. Таблица пикселей изображения не является тензором физически — у неё нет смысла трансформации при смене координат. Но в PyTorch она называется тензором.
✔️ Почему это важно
Когда в ML говорят «тензор» — имеют в виду структуру данных. Когда в физике говорят «тензор» — имеют в виду геометрический объект с законом преобразования.
Матрица весов нейросети и тензор инерции тела — оба «тензоры», но в совершенно разных смыслах. Второй несёт физический смысл который сохраняется при любом выборе координат. Первый — просто таблица чисел.
Название «TensorFlow» отсылает именно к тому как активации текут через граф вычислений — не к математическому определению.
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека дата-сайентиста
#буст | 1 513 |
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
