Задание на агрегацию и обработку файлов с данными
Медицинские диагностические устройства в клиниках. У медицинских клиник существуют чувствительные устройства, для которых важно плановое и своевременное обслуживание, для чего необходимо отслеживать статусы устройств.
Необходимо считать данные из файла xlsx и произвести следующие действия:
- Отфильтровать данные по гарантии
- Найти клиники с наибольшим количеством проблем
- Построить отчёт по срокам калибровки
- Сагрегировать данные по клиникам и оборудованию и составить сводную таблицу
Поля в таблице:
- device_id – уникальный идентификатор устройства
- clinic_id – уникальный идентификатор клиники, где установлено или планируется установить устройство
- clinic_name – название клиники, в которой используется оборудование
- city – город, где установлен аппарат (всего 15 городов)
- department – медицинское отделение клиники, в котором используется оборудование
- model – модель устройства (всего 6 моделей)
- serial_number – серийный номер устройства
- install_date – дата установки оборудования в клинике (Если устройство ещё не установлено, дата может быть в будущем, форматы дат могут отличаться)
- status – текущий статус устройства (planned_installation – устройство запланировано к установке, operational – устройство работает, maintenance_scheduled – запланировано техническое обслуживание, faulty – устройство неисправно). В данных могут встречаться варианты написания (например OK, op, broken), которые нужно нормализовать.
- warranty_until – дата окончания гарантии производителя, после этой даты ремонт может выполняться на платной основе.
- last_calibration_date – дата последней калибровки оборудования (значение может отсутствовать, дата может быть ошибочной (раньше даты установки))
- last_service_date – дата последнего технического обслуживания (когда проводилось обслуживание, какие устройства требуют сервисной проверки)
- issues_reported_12mo – количество зарегистрированных проблем за последние 12 месяцев
- failure_count_12mo – количество отказов устройства за последние 12 месяцев
- uptime_pct – процент времени, в течение которого устройство было работоспособным
- issues_text – текстовое описание некоторых проблем, зарегистрированных в работе устройства
- В качестве практической работы необходимо нарисовать блок-схемы работы алгоритма решения задач и загрузить в свой репозиторий в течение дня.
- В качестве домашней работы необходимо реализовать программы по ранее созданным алгоритмам решения задач на языке Python и загрузить в свой репозиторий до крайнего срока.
Даты сдачи оговариваются в канале группы.
XLSX — это формат таблиц Microsoft Excel.
Таблица состоит из:
- строк (rows)
- столбцов (columns)
- ячеек (cells)
- листов (sheets)
Пример таблицы:
| Name | Age | Salary |
|---|---|---|
| Alex | 25 | 3000 |
| Maria | 30 | 4200 |
В pandas такая структура называется DataFrame.
pip install pandas numpy openpyxlБиблиотеки:
- pandas — работа с таблицами
- numpy — быстрые математические операции
- openpyxl — чтение и запись Excel файлов
Таблица данных.
import pandas as pd
df = pd.DataFrame({
"Name": ["Alex", "Maria"],
"Age": [25, 30]
})Результат:
Name Age
0 Alex 25
1 Maria 30
Отдельный столбец таблицы.
df["Age"]Основная функция:
pd.read_excel()Пример:
import pandas as pd
df = pd.read_excel("data.xlsx")
print(df)df = pd.read_excel("data.xlsx", sheet_name="Sheet1")или
df = pd.read_excel("data.xlsx", sheet_name=0)sheets = pd.read_excel("data.xlsx", sheet_name=None)Результат — словарь:
{
"Sheet1": DataFrame,
"Sheet2": DataFrame
}
Использование:
df1 = sheets["Sheet1"]df.to_excel("result.xlsx")Без индекса:
df.to_excel("result.xlsx", index=False)with pd.ExcelWriter("file.xlsx") as writer:
df1.to_excel(writer, sheet_name="Users")
df2.to_excel(writer, sheet_name="Products")df.head()df.head(10)df.tail()df.info()df.describe()df["Age"]df[["Name", "Age"]]df.iloc[0]df[df["Age"] > 25]Несколько условий:
df[(df["Age"] > 25) & (df["Salary"] > 3000)]Добавление столбца:
df["Bonus"] = df["Salary"] * 0.1Изменение значений:
df["Age"] = df["Age"] + 1Проверка:
df.isnull()Удаление строк:
df.dropna()Замена:
df.fillna(0)import numpy as npПример вычислений:
df["LogSalary"] = np.log(df["Salary"])Преобразование столбца в массив:
arr = df["Salary"].to_numpy()Основные функции:
np.mean(arr)
np.max(arr)
np.min(arr)
np.std(arr)Пример таблицы:
| Department | Salary |
|---|---|
| IT | 4000 |
| IT | 5000 |
| HR | 3000 |
Группировка:
df.groupby("Department").mean()df.sort_values("Salary")По убыванию:
df.sort_values("Salary", ascending=False)Excel файл sales.xlsx:
| Product | Price | Quantity |
|---|---|---|
| Laptop | 1000 | 5 |
| Mouse | 20 | 50 |
Python код:
import pandas as pd
import numpy as np
df = pd.read_excel("sales.xlsx")
df["Revenue"] = df["Price"] * df["Quantity"]
total = np.sum(df["Revenue"])
print(df)
print("Total revenue:", total)
df.to_excel("report.xlsx", index=False)Обычно работа с Excel выглядит так:
- Загрузка файла
pd.read_excel()
- Очистка данных
dropna()
fillna()
- Обработка
filter
sort
groupby
- Вычисления
numpy
- Сохранение
to_excel()
read_excel()
to_excel()
head()
info()
describe()
groupby()
sort_values()
dropna()
fillna()
merge()
concat()