Анализ данных (Data analysis)
Data science, наука о данных. @haarrp - админ РКН: clck.ru/3FmyAp
Показати більше📈 Аналітичний огляд Telegram-каналу Анализ данных (Data analysis)
Канал Анализ данных (Data analysis) (@data_analysis_ml) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 50 179 підписників, посідаючи 2 677 місце в категорії Технології та додатки та 12 565 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 50 179 підписників.
За останніми даними від 15 червня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -8, а за останні 24 години на 25, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 8.82%. Протягом перших 24 годин після публікації контент зазвичай збирає 5.98% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 4 427 переглядів. Протягом першої доби публікація в середньому набирає 2 999 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 30.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як llm, контекст, openai, архитектура, deepseek.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Data science, наука о данных.
@haarrp - админ
РКН: clck.ru/3FmyAp”
Завдяки високій частоті оновлень (останні дані отримано 16 червня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
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
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
