Давайте разберем каждое задание по очереди. Предположим, у нас есть необходимые данные, которые мы можем анализировать с помощью Python, SQL, или других инструментов для анализа данных, например, Pandas. Вот как можно подойти к решению заданий:
Задание 1: Тикеты, ожидающие обработки
Для подсчета количества тикетов, ожидающих отработки, используем следующие шаги:
- Отфильтровать все записи, где статус не равен 1.
- Убедиться, что строки со статусом 1 не учитываются, если в одном тикете зарегистрированы разные статусы.
Примерный код на Python с использованием Pandas:
import pandas as pd
# Предположим, df - это ваш DataFrame с данными
waiting_tickets = df[(df['status'] != 1) & (~df.duplicated('ticket_id', keep=False))]
count_waiting_tickets = waiting_tickets['ticket_id'].nunique()
Ответ: количество тикетов, ожидающих обработки.
Задание 2: Удалённые сообщения
Необходимо подсчитать количество удаленных сообщений от сотрудников и пользователей. Используйте:
- Суммируйте количество удаленных сообщений, разделяя по
user_type. - Выберите группу с большим количеством удалений.
Пример:
deleted_messages = df[df['event_type'] == 'message_deleted']
deleted_by = deleted_messages.groupby('user_type').size()
most_frequent_deleter = deleted_by.idxmax()
count_deleted = deleted_by.max()
Ответ: количество удаленных сообщений выбранной группой.
Задание 3: Повторные вопросы после закрытия по причине «троллинг»
Для этого задания нужно определить количество тикетов с новым вопросом после события troll_closed:
troll_closed = df[df['event_type'] == 'troll_closed']['ticket_id'].unique()
replies_after_troll = df[(df['ticket_id'].isin(troll_closed)) & (df['event_type'] == 'reply')]
count_replies_after_troll = replies_after_troll.shape[0]
Ответ: количество тикетов с новыми вопросами.
Задание 4: Анализ тегов тикетов
Посчитываем количество тикетов по тегам. Убедитесь, что подбираете только последний тег:
tags = df[df['event_subtype'].str.contains('tag_')]
last_tags = tags.groupby('ticket_id').last()
popular_tag = last_tags['event_subtype'].value_counts().idxmax()
Ответ: самый популярный тег.
Задание 5: Тег, который чаще всего ставят агенты
Отфильтруйте события, где агенты ставят теги вручную, и подсчитайте:
manual_tags = df[df['event_type'] == 'tag_set_manually']
most_common_tag = manual_tags['event_subtype'].value_counts().idxmax()
Ответ: тег, который чаще всего ставят агенты.
Задание 6: Изменение категории тикета со статусом 0
Подсчитайте тикеты, где статус был равен 0 на момент изменения категории:
set_category_events = df[df['event_type'] == 'set_category']
tickets_with_status_0 = set_category_events[set_category_events['ticket_id'].isin(df[df['status'] == 0]['ticket_id'])]
question_ids_with_status_0 = tickets_with_status_0['ticket_id'].unique()
Ответ: номера тикетов.
Задание 7: Расчет UWT
Вычислите среднее время ожидания ответа:
# Создание временных меток и их парирование
user_questions = df[df['event_type'] == 'reply']
agent_replies = df[df['event_type'] == 'agent_reply']
# Объединение и расчет UWT
merged = pd.merge(user_questions, agent_replies, on='ticket_id')
# Расчет времени ожидания
uwt = (merged['reply_time'] - merged['question_time']).mean()
Ответ: среднее время ожидания в секундах.
Задание 8: Расчёт SL
Для расчета уровня обслуживания (SL):
total_pairs = len(merged)
within_time_limit = len(merged[merged['waiting_time'] <= 15 * 60]) # перевод в секунды
sl = (within_time_limit / total_pairs) * 100
Ответ: значение SL с точностью до сотых.
Задание 9: Определение скорости ответа сотрудников
Проведение группировки по user_type и расчет времени ответа:
response_time = df[df['event_type'] == 'agent_reply']['response_time']
avg_response_time = df.groupby('user_type')['response_time'].mean()
fastest_response_type = avg_response_time.idxmin()
Ответ: user_type с наименьшим временем ответа.
Задание 10: Время до закрытия тикета
Для этой задачи используем следующие шаги:
closed_by_time_events = df[df['event_type'] == 'closed_by_time']
previous_actions = df[df['timestamp'] < closed_by_time_events['timestamp']]
avg_time_to_close = (closed_by_time_events['timestamp'] - previous_actions['timestamp']).mean()
Ответ: среднее количество дней до закрытия тикета.
Задание 11: Время между назначением и сбросом агента
Для расчета времени между set_agent и drop_agent:
set_agent_events = df[df['event_type'] == 'set_agent']
drop_agent_events = df[df['event_type'] == 'drop_agent']
# Создание пар и расчет времени
avg_time_until_drop = (drop_agent_events['timestamp'] - set_agent_events['timestamp']).mean()
Ответ: среднее время в секундах.
Итоговый файл
Соберите ответы в формате, который соответствует заданному стилю (текстовый файл с вопросами и ответами), и отправьте его, как указано.
Если у вас есть уточняющие вопросы по каждому из заданий, не стесняйтесь спрашивать! Это может помочь вам лучше понять материал. Удачи с вашей работой над анализом данных!
