Bilim.techО проекте

Обработка данных на Python

Как по таблице проб масла найти машину, которой пора в ремонт? Запусти настоящий Python в браузере: среднее, фильтр, скользящее среднее и поиск выброса с графиком.

01 Что это такое

Обработка данных это путь от таблицы чисел к решению: прочитать, посчитать, отфильтровать, нарисовать. Python делает это несколькими строчками для любого объема.

Лаборатория присылает анализ масла по всему парку: железо, кремний, вязкость для каждой машины. Глазами в таблице из двадцати строк еще можно найти беду, а из двух тысяч уже нет. Программа на Python читает файл, считает среднее и разброс, отбирает машины выше порога и находит ту, что выбивается из общей картины. Если повторять это после каждой пробы, видно, у какой машины износ ускоряется, еще до поломки. Python здесь настоящий: он запускается прямо в браузере.

маш.FeSiтаблица CSVfe = [м["Fe"] for м in парк]sum(fe) / len(fe)программа Pythonграфик и выводпунктир: порог 60 ppm
Одна и та же программа обработает и 20, и 20 000 строк. Человек смотрит уже на итог: кто выше порога и у кого износ растет.
x̄
Среднее. Сумма всех значений, деленная на их число. Показывает, что обычно для парка.
σ
Разброс (стандартное отклонение). Насколько значения обычно отходят от среднего. Машина дальше 2σ от среднего подозрительна.
ppm
Миллионная доля. 1 ppm это 1 мг металла на 1 кг масла. Так лаборатория пишет железо, медь, кремний.
02 Опыт
Загрузи Python. Выбери программу. Поправь и запусти. PYTHON В БРАУЗЕРЕ
АНАЛИЗ МАСЛА ПАРКА

Кому из машин пора в ремонт?

Рис. 12.6
ГОТОВЫЕ ПРОГРАММЫ
Вывод
Данные: ПАРК и ПРОБЫ

Python
Строк в данных
Итог программы
03 Код по строкам

Три приема, на которых держится обработка данных

Собрать столбец, посчитать по нему и отобрать строки по условию. Числа ниже берутся из данных опыта.

Как достать столбец?

fe = [м["Fe"] for м in парк]

Это списковое включение: пройти по всем строкам таблицы и из каждой взять поле Fe. Получается обычный список чисел, по которому уже можно считать.

парк
список строк таблицы; каждая строка это словарь с полями машина, Fe, Si…
м["Fe"]
значение поля Fe в строке м, ppm
for м in
«для каждой строки м из парка»

Что обычно и насколько разбросано?

x̄ = Σx / n,  σ = √(Σ(x − x̄)² / (n − 1))

Среднее складывает все и делит на число машин. Разброс показывает типичное отклонение от среднего; делят на n − 1, потому что среднее посчитано по тем же данным.

x
железо у одной машины, ppm
n
число машин
x̄
среднее, ppm: sum(fe) / len(fe)
σ
стандартное отклонение, ppm

Как отобрать нужные строки?

[м for м in парк if м["Fe"] > 60]

То же включение, но с условием в конце: в новый список попадают только строки, где условие истинно. Так получают список машин на повторную пробу или в ремонт.

if
условие отбора, как «если»
60
порог железа, ppm. Учебный, настоящий берут из норм лаборатории
or, and
склеивают условия: Fe > 60 or Si > 20

То же самое в таблице Excel

Каждую строку программы можно повторить формулой в таблице: среднее, разброс, фильтр. Для двадцати машин это удобно. Python выигрывает, когда данных тысячи строк, файлов десятки, а обработку нужно повторять каждую неделю одним запуском: программу написали один раз, а таблицу каждый раз собирают руками.

В настоящей работе к Python добавляют библиотеку pandas: таблица читается одной строкой pd.read_csv("пробы.csv"), а среднее по столбцу это df["Fe"].mean(). Здесь мы обошлись без нее, чтобы было видно, что внутри. О том, что означают железо и кремний в масле, рассказано в теме «Анализ масла», а как провести прямую тренда через точки, в математике в теме «Метод наименьших квадратов».

PythonExcel
sum(fe) / len(fe)=СРЗНАЧ(C2:C21)
σ по формуле=СТАНДОТКЛОН.В(C2:C21)
[м for м in парк if м["Fe"] > 60]=ФИЛЬТР(A2:E21; C2:C21>60)
скользящее по 3=СРЗНАЧ(C2:C4), протянуть вниз
наклон тренда=НАКЛОН(C2:C13; B2:B13)
(x − x̄) / σ=СТАНДАРТИЗАЦИЯ(C2; x̄; σ)
В русском Excel аргументы разделяются точкой с запятой, потому что запятая занята под десятичную дробь.
04 Где и зачем это применяют

Данных у службы ТО больше, чем можно просмотреть глазами

Допущения модели+

Данные придуманы для учебы, но порядок цифр правдоподобен для дизеля карьерного самосвала: железо обычно 10–50 ppm за срок масла, кремний выше 20 ppm говорит о пыли, вязкость моторного масла 15W-40 при 100 °C около 14 сСт. Пороги 60 ppm железа и 20 ppm кремния учебные. Выброс ищется по железу, пересчитанному на 100 часов работы масла, и по правилу «дальше 2σ от среднего». Python работает через Pyodide (версия 0.26.4) с сайта jsdelivr и загружается только по кнопке, около 10 МБ. Без загрузки показывается результат тех же программ, заранее посчитанный на JavaScript; если код изменен, без Python его не выполнить. Графики рисует сайт по данным, которые вернула программа в переменной график.

Еще в направлении «Инженерия»

Все темы направления «Инженерия» →