Анализ данных (Data analysis)
Data science, наука о данных. @haarrp - админ РКН: clck.ru/3FmyAp
Show more📈 Analytical overview of Telegram channel Анализ данных (Data analysis)
Channel Анализ данных (Data analysis) (@data_analysis_ml) in the Russian language segment is an active participant. Currently, the community unites 50 192 subscribers, ranking 2 668 in the Technologies & Applications category and 12 554 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 50 192 subscribers.
According to the latest data from 15 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -8 over the last 30 days and by 25 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 8.82%. Within the first 24 hours after publication, content typically collects 5.98% reactions from the total number of subscribers.
- Post reach: On average, each post receives 4 427 views. Within the first day, a publication typically gains 2 999 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 30.
- Thematic interests: Content is focused on key topics such as llm, контекст, openai, архитектура, deepseek.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Data science, наука о данных.
@haarrp - админ
РКН: clck.ru/3FmyAp”
Thanks to the high frequency of updates (latest data received on 16 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
DataFrame df:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'user_id': [1, 1, 2, 2, 3, 3],
'score': [100, 90, np.nan, 85, 75, 95]
})
Ты хочешь:
1) Для каждого пользователя найти средний score,
2) Заполнить пропущенные значения score средним по этому пользователю.
Ты пишешь код:
df['score_filled'] = df.groupby('user_id')['score'].apply(lambda x: x.fillna(x.mean()))
Ожидаешь, что пропущенное значение будет заменено на `85.0`.
Но вместо этого… возникает ошибка или неверный результат.
❓ Вопрос:
1) Почему этот код не работает как ты ожидаешь?
2) Какое поведение apply() вызывает подвох?
3) Как правильно решить задачу?
---
✅ Разбор:
💥 Проблема в `.apply()` + присваивание по индексу
Функция `groupby().apply()` возвращает **объединённый результат с вложенным индексом**, который **не совпадает с индексом исходного DataFrame**.
Пример:
```python
df.groupby('user_id')['score'].apply(lambda x: x.fillna(x.mean()))
```
→ возвращает Series с уровнем индекса: `(user_id, original_index)`,
а `df['score_filled'] = ...` ожидает индекс, совпадающий с `df.index`.
📌 Результат: pandas либо выбрасывает `ValueError`, либо вставляет неправильные значения.
✅ Правильные способы
Способ 1: использовать `transform` (индекс сохраняется!):
```python
df['score_filled'] = df['score'].fillna(
df.groupby('user_id')['score'].transform('mean')
)
```
Способ 2: в два шага:
```python
user_means = df.groupby('user_id')['score'].transform('mean')
df['score_filled'] = df['score']
df.loc[df['score'].isna(), 'score_filled'] = user_means
```
🎯 Так `NaN` будет корректно заполнен значением `85.0`.
⚠️ Подвох
• `groupby().apply()` не гарантирует совпадение индексов
• `transform()` — безопаснее, если хочешь сохранить структуру
• Даже опытные часто используют `apply` “по привычке” и попадают в ловушку
• Такие ошибки не всегда приводят к crash — они хуже: создают **тихие баги**
Хочешь сделать вторую часть , ставь 👍fast-agent — это современный фреймворк для быстрой разработки и тестирования интеллектуальных агентов и рабочих процессов, поддерживающих протокол MCP (Model-Context-Protocol). Он предоставляет простой декларативный синтаксис и мощные инструменты для построения многоагентных систем с поддержкой OpenAI, Anthropic и других моделей.
▪ Основные возможности
• Быстрое создание агентов с помощью декораторов @fast.agent, минимизируя количество кода.
• Поддержка рабочих процессов: цепочки (`chain`), параллельные вызовы (`parallel`), маршрутизаторы (`router`), оркестраторы (`orchestrator`), схемы с оценкой и оптимизацией (`evaluator_optimizer`).
• Мультимодальность: обработка изображений, PDF-файлов и интеграция с внешними ресурсами MCP.
• Интерактивная отладка: настройка и диагностика агентов до, во время и после выполнения рабочих процессов.
• Гибкая конфигурация через fastagent.config.yaml и fastagent.secrets.yaml.
• Интеграция с LLM: OpenAI (GPT-4 и др.), Anthropic (Haiku, Sonnet, Opus) и другие модели через MCP-серверы.
▪ Быстрый старт
1️⃣ Установите менеджер пакетов uv для Python.
2️⃣ Установите fast-agent:
uv pip install fast-agent-mcp
3️⃣ Создайте пример агента и конфигурационные файлы:
uv run fast-agent setup
4️⃣ Запустите агента:
uv run agent.py
5️⃣ Для запуска примеров рабочих процессов:
uv run fast-agent quickstart workflow
▪ Документация и примеры
• Официальный сайт: [fast-agent.ai](https://fast-agent.ai)
• Документация: [fast-agent-docs](https://github.com/evalstate/fast-agent-docs)
• Примеры: директория examples в репозитории.
▪ Сообщество и развитие
• Проект активно развивается, ⭐ 1.7k+ звёзд на GitHub.
• Обсуждения: [Discussions](https://github.com/evalstate/fast-agent/discussions)
• Последние релизы: [Releases](https://github.com/evalstate/fast-agent/releases)
▪ Видеообзор
[First Look at Fast-Agent (or Manus) – Coding an AI ...](https://www.youtube.com/watch?v=GaVQyYougPc&utm_source=chatgpt.com)
🔍 GitHubTDT - декодер, который предсказывает слова, звуки и их длительность. Вместо того чтобы проверять каждый кусочек аудиозаписи по порядку, TDT «перепрыгивает» через лишние сегменты, опираясь на прогноз времени, которое занимает текущий токен. Это сокращает вычисления, экономит время и при этом не теряется точность.
Fast Conformer — это переработанная архитектура Conformer, которая ускоряет распознавание речи за счет увеличения downsampling до 8x с помощью более легких сверток и упрощенных блоков, и замены стандартного внимания на комбинацию локального контекста и одного глобального токена.Обучение Parakeet проводилось в 2 этапа: сначала на 128 GPU A100 с использованием псевдоразмеченных данных, а затем — на 500 часах человеческой транскрипции. Часть обучающего датасета пока недоступна публично, их NVIDIA обещает открыть после конференции Interspeech 2025. Результаты на бенчмарке Open ASR впечатляют: средняя ошибка (WER) составляет всего 6.05% при greedy decoding без внешней языковой модели. Для сравнения, на чистом аудио из LibriSpeech WER составляет 1.69%, а сильном зашумлении (SNR 5) показатель не превышает 8.39%. В телефонии, где аудио сжимается через μ-law, потери в точности минимальны — всего 4.1%. По этим результатам, Parakeet-tdt-0.6b-v2 может стать универсальным инструментом для колл-центров или мобильных приложений. Модель поддерживает форматы
.wav и .flac с частотой 16 кГц и требует всего 2 ГБ оперативной памяти. Для интеграции разработчикам понадобится фреймворк NeMo от NVIDIA, он упрощает настройку под конкретные задачи.
📌Лицензирование: CC-BY-4.0 License.
🟡Модель
🟡Demo
@ai_machinelearning_big_data
#AI #ML #ASR #Parakeet #NVIDIAdf с данными о зарплатах сотрудников в компании:
import pandas as pd
data = {
'employee_id': range(1, 11),
'department': ['IT', 'IT', 'IT', 'HR', 'HR', 'Finance', 'Finance', 'Finance', 'Finance', 'Finance'],
'salary': [120000, 125000, None, 70000, None, 90000, None, 95000, None, 100000]
}
df = pd.DataFrame(data)
print(df)
Результат:
employee_id department salary
0 1 IT 120000.0
1 2 IT 125000.0
2 3 IT NaN
3 4 HR 70000.0
4 5 HR NaN
5 6 Finance 90000.0
6 7 Finance NaN
7 8 Finance 95000.0
8 9 Finance NaN
9 10 Finance 100000.0
👉 В задаче требуется:
> **Заполнить пропущенные зарплаты медианой по департаменту.
> Затем найти департамент с наибольшим средним уровнем зарплаты.**
Вы пишете такой код:
df['salary_filled'] = df.groupby('department')['salary'].transform(lambda x: x.fillna(x.median()))
top_department = df.groupby('department')['salary_filled'].mean().idxmax()
print(top_department)
❗️ Результат: "Finance"
Но через неделю выясняется, что HR утверждает:
> “Наш средний уровень зарплаты выше, чем в Finance!”
📝 Ваша задача:
1. Объяснить почему результат показывает Finance, хотя HR утверждает обратное?
2. Где ошибка в логике?
3. Как правильно посчитать среднюю зарплату, учитывая реальную ситуацию?
---
🎯 Подвох (ключевой момент):
Медиана по HR = 70000 (только одно известное значение).
Пропущенная зарплата в HR тоже заполняется 70000, т.е. обе записи будут 70000.
В Finance медиана = 95000 (из трёх известных: 90000, 95000, 100000).
Две пропущенные зарплаты в Finance тоже заполняются 95000.
✅ Но на самом деле в HR могли быть более высокие зарплаты, а мы по сути искусственно “усекли” распределение зарплат, заменив пропуски фиксированной медианой.
👉 Такая замена снижает дисперсию и искажает среднее, особенно если выборка мала.
---
💡 Правильный подход:
1. Вместо заполнения медианой, использовать **множественную имputation** (например, через `sklearn.impute.IterativeImputer`).
2. Либо **не заполнять NaN при вычислении среднего**, а использовать `mean(skipna=True)`, чтобы не “усекать” данные.
3. Либо **показать доверительный интервал** для среднего по каждой группе.
Пример альтернативного подхода:
```python
top_department = df.groupby('department')['salary'].mean().idxmax()
print(top_department)
```
✅ Таким образом NaN просто не участвуют в расчёте среднего, и мы не искажаем данные искусственным заполнением.
---
🔥 Усложнение (ещё один подвох):
А что если пропуски не случайны?
Например, все высокие зарплаты в HR отсутствуют, потому что сотрудники не раскрыли данные?
→ Тогда импутация медианой дополнительно “занижает” зарплаты HR, и классическая mean() даёт biased estimate.
В таком случае нужна модель пропусков (MAR, MCAR, MNAR) и специфические методы восстановления.
---
📝 Что проверяет задача:
✅ Понимание влияния методов заполнения пропусков
✅ Знание статистических эффектов усечения данных
✅ Умение интерпретировать результат с учётом bias
✅ Навык выбирать подходящий метод обработки пропусков в зависимости от их природы
pip install -U cocoindex
https://github.com/cocoindex-io/cocoindex
2. Настройте базу данных PostgreSQL с расширением pgvector.
3. Создайте файл quickstart.py и настройте пайплайн обработки данных.
4. Запустите пайплайн для обработки и индексации данных.
🟢 Github
@data_analysis_ml
Available now! Telegram Research 2025 — the year's key insights 
