Персональный сайтhttps://dimyun.space/ru/2022-11-16T00:00:00+03:00Директор по инновациям, Аналитик данныхДиректор по инновациям, Аналитик данныхАвтоматизированные системы в неразрушающем контроле2019-12-09T00:00:00+03:002022-11-16T00:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2019-12-09:/ru/blog/education-ChSU-automation-system.html<p>Тепло приветствую Вас на страницах моего небольшого пособия, которое расскажет об автоматизированных системах в неразрушающем контроле. А если быть точным - мы рассмотрим некоторые системы различных датчиков. При этом, чтобы представлять место данных систем в реальном мире, будет рассмотрена промышленная автоматизация и контроль в целом.</p>
<p>В рамках настоящего пособия я постараюсь …</p><p>Тепло приветствую Вас на страницах моего небольшого пособия, которое расскажет об автоматизированных системах в неразрушающем контроле. А если быть точным - мы рассмотрим некоторые системы различных датчиков. При этом, чтобы представлять место данных систем в реальном мире, будет рассмотрена промышленная автоматизация и контроль в целом.</p>
<p>В рамках настоящего пособия я постараюсь максимально использовать английский язык, поскольку большинство научно-технической литературы сегодня пишется именно на нем. Можно сказать что английский является международным инженерным языком.</p>
<p>Буду очень признателен за обратную связь по этому небольшому проекту. О любых замечаниях и предложениях Вы можете написать на электронный адрес Dm.Yunoviodv@gmail.com</p>
<h2 id="0-TOC">Оглавление</h2>
<ol>
<li><a href="#1-Intro">Введение</a></li>
<li><a href="#2-Architecture">Архитектура систем промышленной автоматизации</a></li>
<li><a href="#3-Measuring_syst">Основные характеристики измерительных систем</a></li>
<li><a href="#4-Temperature">Измерения температуры</a></li>
<li><a href="#5-Pressure_and_force">Измерения давления и силы</a></li>
<li><a href="#6-Shift_velocity">Смещение и скорость</a></li>
<li><a href="#7-Flow_Measurement">Измерение потока</a></li>
<li><a href="#8-Level_Humidity_pH">Измерение уровня, влажности и рН</a></li>
<li><a href="#9-signal_conditioning_circuits">Цепи передачи сигнала</a></li>
<li><a href="#10-conclusion">Заключение</a></li>
</ol>
<h2 id='1-Intro'> 1. Введение</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>В данном разделе приведены некоторые основные принципы и понятия, с которыми мы будем работать. В результате раскроем следующие вещи:</p>
<ul>
<li>определение автоматизации, управления и информационных технологий (ИТ);</li>
<li>какая связь существует между приведенными в предыдущем пункте параметрами и как они связаны с производством;</li>
<li>концепция “жизненного цикла продукта”, а также понимание роли автоматизации и контроля в данном цикле;</li>
<li>классификация производственных предприятий и систем автоматизации.</li>
</ul>
<p>Но для начала немного терминологии (верхний уровень нашего курса). Инженерная наука является дискретной дисциплиной со своим языком, задачами и инструментами (как и многие другие науки, искусство, религия или философия - везде есть свои “языки” общения). <strong>Основной вопрос</strong> инженера:</p>
<blockquote>
<p>Как я могу решить данную проблему?</p>
</blockquote>
<p>Это приводит нас к типичному представлению системы, как <strong>“черного ящика”</strong> (неизвестно и не важно, что внутри, важно - как заставить это работать). Такой подход позволяет нам не задумываться о внутреннем устройстве системы, а сосредоточится на входящих и выходящих данных, а так же взаимосвязи между ними и общей системой (можно сказать, рассматриваем потоки информации). Это очень похоже на программирование. Каждый элемент системы (или устройство) будет порождать конкретный выход из конкретного входа (рис. 1.1).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_1-1.png" alt="Black box" width="600px"/>
</td>
<td>
<i>
Рис. 1.1. Концепция черного ящика.
</i>
</td>
</tr>
</table>
</div>
<p>Другой важной особенностью инженерной науки являются ее специальные инструменты. Как правило, визуального представления информации:</p>
<ul>
<li>технические чертежи и списки деталей,</li>
<li>схемы,</li>
<li>блок-схемы и программы,</li>
<li>технические планы и принципиальные схемы.</li>
</ul>
<p>Думаю с подробностями вы уже познакомились в процессе своего обучения инженерному делу.</p>
<p>Контроль, автоматизация, робототехника и измерительная техника имеют первостепенное значение для развития промышленности, особенно в течении последних десятилетий. Даже в настоящее время идет процесс реиндустриализации стран - и он никогда и не останавливался (сейчас это Индустрия 4.0). Таким образом, автоматизация - это всегда актуальная тема, начиная с 18 века (вспомним дядюшку Форда).</p>
<p>На мой взгляд одной из основных проблем автоматизации и контроля сегодня является комплексный и интеллектуальный анализ информации. А для него необходимо быстрое и понятное получение информации из различных источников и ее качественная обработка. Все это непосредственно связано с принятием решений, неразрушающем контролем и автоматизацией способов получения информации (и это относится не только к промышленным системам)</p>
<p>Обособленной проблемой стоит описание “хаоса” - множества нелинейных динамических систем (то.что мы называем нормальным распределением). Вопреки линейным динамическим системам (которые можно решить “аналитически” и с которыми работают дифференциальные уравнения), хаотические системы крайне чувствительны к окружающим условиям и системным параметрам. Для таких систем были введены в работу нелинейные методы и многокомпонентные методы машинного обучения и анализа “больших данных”. В нашем же курсе мы будем рассматривать только простейшие случаи, относящиеся к неразрушающему контролю и способам получения информации с точки зрения физических сенсоров.</p>
<blockquote>
<p><strong>Примечание</strong>. Именно из-за повсеместного наличия “хаоса” за счет множественного наложения нелинейных динамических систем мы повсюду встречаем нормальное распределение вероятности событий в окружающем нас мире. Так-то.</p>
</blockquote>
<p>Вообще, описание системы и последующий <strong>контроль</strong> - это проверка соответствия реальных параметров объекта установленным техническим требованиям (в специально выбранных точках). При этом в промышленности часто востребован именно неразрушающий контроль, поскольку важно не мешать техническому процессу и обеспечить его “замкнутость” (в меньшей степени важно еще и сохранить продукт). К неразрушающим методам относятся: </p>
<ul>
<li>органолептический контроль (визуальный, на цвет и запах), </li>
<li>спектроскопия (УФ, ИК и рентгеновского диапазона волн), </li>
<li>ультразвуковой анализ,</li>
<li>контроль температуры,</li>
<li>контроль давления,</li>
<li>и т.д. (практически все простые физические параметры можно контролировать без разрушения вещества)* </li>
</ul>
<blockquote>
<p>* сложнее дело обстоит с более высоким уровнем анализа - химическим, биологическим, социальным и т.д.</p>
<p><strong>Примечание</strong>. Обратите внимание, что все перечисленные методы относятся к “низкоуровневому” контролю физических величин. Гораздо сложнее дело обстоит с автоматизированным контролем более “сложных свойств”. К таким свойствам например относится цвет, химический состав, растворимость, цена, спрос и т.д. Тут уже важно применять сложные методы непрямого контроля и только лишь сенсорами не обойтись. </p>
</blockquote>
<p>Все перечисленные выше сложные названия и методы по сути сводятся к тем или иным датчикам (или сенсорам), которые устанавливаются в производственных условиях. Полученные данные используют для определения целевых параметров с использованием различных инструкций, методик и стандартов (нормативная документация). Иными словами - анализируют. Все это еще раз подтверждает факт того, что <strong>мы окружены данными</strong>. Да и сами по сути является данными, которые пока не очень хорошо умеем обрабатывать. А все, что нам остается - наблюдать и экспериментировать, чтобы по результатам анализа строить гипотезы и теории, открывать законы. Ну и контролировать помышленное производство конечно же.</p>
<p>Когда мы анализируемые полученные при контроле параметры, то принято делить их на 3 типа (сразу скажу, что не всегда такое деление используется и конечно же оно не единственное).</p>
<ul>
<li>
<p><strong>Функциональные параметры</strong> - характеризующие работу системы или процесса (действующее усилие, напряжения, давление жидкости в гидросистеме, время разгона/торможения, удельный расход энергии и т.д.) - определяют процесс в целом, не дают возможность конкретизировать его стадии.</p>
</li>
<li>
<p><strong>Структурные параметры</strong> - непосредственно характеризуют состояние конкретных стадий процесса или узлов оборудования (координаты положения элементов, коррозия и т.д.) - как правило, требуют проведение процесса в специальных условиях или разборки оборудования.</p>
</li>
<li>
<p><strong>Параметры сопутствующих процессов</strong> - определяемые из внешних условий и процессов, сопутствующих целевому процессу или оборудованию (температура, вибрация, акустические сигналы, уровень и спектр шумов, погрешность обработки) - наиболее распространены для измерений.</p>
</li>
</ul>
<p>Результатами контроля являются данные (количественные, ранговые или качественные), которые мы можем получить через специального вида взаимосвязи (для этого строят функции системы от времени, как правило - непрерывные с общей запись вида <span class="math">\(K_J(t)\)</span>). Кроме того для результатов <strong>обязательно указывают размерность</strong> и установленные/допустимые отклонения (погрешности). Также важно понятие <strong>чувствительности</strong> процедуры измерения (параметр <span class="math">\(K\)</span> в формуле) к измеряемому параметру (<span class="math">\(Q\)</span>): <span class="math">\(\frac{dK}{dQ}\)</span>.</p>
<blockquote>
<p><strong>Задача</strong>. Подумайте, как выражается геометрический смысл чувствительности, другими словами как можно визуально представить чувствительность метода? Чтобы помочь себе - нарисуйте график <span class="math">\(K_J(t) = aQ_J(t) + b\)</span> для чувствительной и не чувствительной системы (параметры можете выбрать случайным образом).</p>
</blockquote>
<p>Различают так же некоторые <strong>средства контроля</strong>: аппаратные, программные, ручные и автоматизированные, специализированные или универсальные. </p>
<p>Началом же неразрушающего контроля и диагностики принято считать открытие в ноябре 1895г. рентгеновских лучей (X-rays), которые позволили обнаружить металлический предмет в закрытой деревянной коробке (по тем временам это произвело фурор похлеще чем презентация новых айфонов).</p>
<p>Если вы представили себе как выглядит чувствительность, то становится понятно, что <strong>точность работы</strong> систем контроля зависит именно от <strong>чувствительности</strong>. Однако точность зависит и еще от нескольких важных параметров - <strong>разрешающей способности</strong> компонентов (характеризует способность отличить между собой два близких сигнала) и точности алгоритмов обработки всей получаемой информации. Кроме того, немаловажным фактором является точность калибровки измерительной системы (но это немного другое).</p>
<blockquote>
<p><strong>Задача</strong>. Подумайте, как в общем случае связаны между собой чувствительность и разрешающая способность. Всегда ли хорошо, когда наш график очень чувствительный?</p>
</blockquote>
<p>Дополнительно отметим, что сегодня во многих системах <strong>функции оператора</strong> (человек) являются во многом определяющими и достаточно сложными для автоматизации. В частности по этому системы автоматического (машинного) принятия решений еще не получили широкого распространения и эта проблема очень актуальна в настоящее время.</p>
<p>Таким образом, я бы сказал, что сегодня существуют <strong>четыре важных направления развития автоматизированных методов контроля</strong>:</p>
<ol>
<li>
<p>Машинное обучение методам и средствам анализа (интеллектуализация). Поиск функциональных метрик качества.</p>
</li>
<li>
<p>Разработка единой системы контроля качества технических объектов и окружающей среды (стандартизация).</p>
</li>
<li>
<p>Совершенствование диагностики (аппаратная и программная часть).</p>
</li>
<li>
<p>Стандартизация и внедрение систем контроля на местах (нормативная документация).</p>
</li>
</ol>
<p>В нашем случае - мы рассмотрим 3 пункт с точки зрения его физических основ. А именно <em>какие способы неразрушающего контроля промышленных процессов существуют на сегодняшний день с точки зрения различных сенсоров</em>. Но для начала дополним нашу базу <strong>терминов</strong> следующими понятиями.</p>
<p>В основе любой системы контроля лежит <strong>процесс измерения</strong>. Он представляет собой процедуру определения неизвестного численного значения через сравнение с эталоном в определенных единицах измерения (это же относится и к калибровочным кривым и т.п. - везде в основе лежат эталоны).</p>
<p><strong>Промышленность (Industry)</strong> - систематическая деятельность, которая может быть связана с производством/услугами/торговлей (нас будет интересовать только производство).</p>
<p><strong>Автоматизация (automation)</strong> - набор технологий, обеспечивающий управление машинами и системами без значительного вмешательства человека (при этом в идеале должна быть увеличена производительность и экономический эффект по сравнению с ручным трудом).</p>
<p><strong>Управление и контроль (Management and Control)</strong> - набор технологий, обеспечивающий получение желаемых выходных параметров для систем и машин через выставление входных параметров. Обычно, это процесс обработки информации с целью определения какого-либо события.</p>
<p><strong>Сенсоры (Sensors)</strong> - устройства, осуществляющие функции измерения, счета и т.п., с целью получения информации. Часто еще сенсор называют <strong>датчиком</strong>, что является синонимом (однако некоторые специалисты любят утверждать, что датчик это более сложная структура, которая включает в себя сенсор с “обвесом”).</p>
<p>В рамках настоящего курса мы будем в основном рассматривать особенности аппаратной реализации неразрушающего контроля и некоторые общие понятия автоматизации в современной индустрии. Кроме того, в область моей профессиональной деятельности довольно долгое время входило обеспечение контроля на производстве минеральных удобрений, и я постараюсь приводить побольше конкретных примеров из данной области (рис. 1.2).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_1-2.jpg" alt="Mineral fertilizer production" width="600px"/>
</td>
<td>
<i>
Рис. 1.2. Структура промышленного производства минеральных удобрений.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Задача</strong>. Чтобы лучше усвоить терминологию, потренируйтесь описать любой конкретный процесс в обозначенных терминах (например, управления температурой в паровом котле, включение и регулирование газовой комфорки и т.п.).</p>
</blockquote>
<p>Кроме того, важно понимать, как связаны системы автоматизации и системы управления и контроля.</p>
<ol>
<li>Системы автоматизации могут включать в себя системы управления и контроля, но обратное неверно.</li>
<li>Главная функция систем управления и контроля - следить за тем, чтобы выходной сигнал соответствовал значениям входного (иными словами, подчинялся заданной функциональной зависимости). При этом системы автоматизации могут выполнять бОльший функционал (вычислять “точки воздействия” для систем контроля, мониторить производительность системы, производить остановку и запуск производства, составлять и контролировать расписание работ и оборудования и т.д.).</li>
</ol>
<blockquote>
<p><strong>Задача</strong>. Приведите пример автоматической системы, в которую выходит система контроля (интернет в помощь).</p>
</blockquote>
<p>Помимо различных систем управления и контроля системы промышленной автоматизации широко используют возможности программирования и информационных технологий (ИТ, рис. 1.3).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_1-3.png" alt="IT in Industrial Automation" width="600px"/>
</td>
<td>
<i>
Рис. 1.3. Основные области ИТ, используемые в промышленной автоматизации.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Задача</strong>. Попробуйте найти конкретные примеры использования ИТ в автоматизированных системах (интернет в помощь).</p>
</blockquote>
<p>Но важно понимать, что промышленная автоматизация отличается от ИТ.</p>
<ol>
<li>Промышленная автоматизация включает в себя значительное количество аппаратных технологий (приборы, датчики, двигатели, электроника для формирования сигнала и т.д.).</li>
<li>Системы автоматизации низкого уровня используют ИТ в меньшей степени, больше работая с аппаратным обеспечением, электроникой и встроенными вычислениями (например, сенсоры и актуаторы).</li>
</ol>
<h3>1.3 Автоматизация в промышленности (роль и типы)</h3>
<p>Принято считать, что основными целями использования автоматизации в промышленности являются:</p>
<ul>
<li>повышение качества и безопасности производства (минимизация ошибки за счет человеческого фактора);</li>
<li>увеличение экономического эффекта производства (… profit).</li>
</ul>
<p>Сам экономический эффект выражается следующим образом:</p>
<div class="math">$$Profit = (\frac{Price}{Unit} - \frac{Cost}{Unit}) \times \text{Production Volume}$$</div>
<p>Автоматизация влияет на соотношение стоимости (с позиции затрат на производство) к количеству продукции, позволяя оптимизировать этот параметр (прибыль предприятия может быть увеличена за счет производства большего объема более качественной продукции при уменьшении производственных и временных затрат). Таким образом автоматизация влияет на экономику с позиции:</p>
<ul>
<li><strong>масштаба (economy of scale)</strong> - снижение затрат на единицу продукции (за счет увеличения объема производства, повышения операционной и временной эффективности);</li>
<li><strong>цели (области применения, economy of scope)</strong> - когда может производить более широкий ассортимент.</li>
</ul>
<p>Типичный жизненный цикл продукта приведен на рис. 1.4.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_1-4.png" alt="Products Life Cycle" width="600px"/>
</td>
<td>
<i>
Рис. 1.4. Типичный жизненный цикл продукта.
</i>
</td>
</tr>
</table>
</div>
<p>На первой стадии создается идея продукции на основе исследования рынков, спроса и активов. Затем создается макет производства и изготавливается прототип продукта. После проверки работоспособности производства и пригодности прототипа проводится масштабирование производства и его монтажа, чтобы убедиться в наличие необходимых ресурсов и технологий для массового производства. Затем идет непосредственное массовое производство и контроль качества продукции. Производимый продукт поступает на рынок, с которого приходит соответствующий ответ (feedback), на основании которого производство эволюционирует (наращивает мощности или меняет продукт).</p>
<blockquote>
<p><strong>Задача</strong>. Где здесь можно использовать автоматизацию и какие преимущества она дает?</p>
<p><strong>Задача</strong>. Приведите примеры отраслей: где 1 - экономия масштаба важнее, чем экономия цели; 2 - наоборот и 3 - они равнозначны.</p>
</blockquote>
<h4>1.3.1 Типы производственных систем</h4>
<p>Согласно введенным понятиям масштаба и цели можно предположить основные типы производств (рис. 1.5).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_1-5.png" alt="Type of Production Systems" width="600px"/>
</td>
<td>
<i>
Рис. 1.5. Классификация производственных систем.
</i>
</td>
</tr>
</table>
</div>
<ul>
<li>
<p><strong>Непрерывный процесс (continuous flow process)</strong> - производимое изделие “непрерывно” (не является единичным объектом). Объемы велики, различие в продукции относительно не велико (нефтепереработка, цементное производство, сталелитейная промышленность и т.д.).</p>
</li>
<li>
<p><strong>Массовое производство единичной продукции (mass manufacturing of discrete production)</strong> - большие объемы единичных объектов, вариации продуктов весьма ограничены (приборостроение, автомобилестроение, выпуск сковородок и т.д.).</p>
</li>
<li>
<p><strong>Серийное производство (ассортиментное, batch production)</strong> - производит серию единичного или непрерывного продукта, различия между продукцией больше. Один и тот же комплект оборудования изготавливает много видов продукции (но для каждой серии/партии устанавливается отдельный набор параметров - “рецепт” партии) (фармацевтика, литейное производство, формовка пластмасс, печать и т.д.). Сюда же и относится производство минеральных удобрений (хотя для некоторых технологических схем и предприятий можно предположить и массовое производство единичной продукции).</p>
</li>
<li>
<p><strong>Цеховое производство (мастерские, job shop)</strong> - небольшое количество единичной продукции, обычно на заказ, возможны любые изменения в изделии (прототипирование, 3Д печать, различные мастерские и т.д.).</p>
</li>
</ul>
<h4>1.3.2 Типы автоматизированных систем</h4>
<p>Автоматические системы можно разделить на категории в зависимости от гибкости и степени интеграции в производственный процесс.</p>
<ul>
<li>
<p><strong>Фиксированная автоматизация (fixed automation)</strong> - фиксированный набор рабочих параметров для механизированного оборудования. Используется для выполнения фиксированных и повторяющихся действий с целью производства большего количества одинаковых деталей (используется в непрерывных и массовых типах производств, например: конвейеры покрасочного цеха, дистилляция, линии подачи пробы и т.д.).</p>
</li>
<li>
<p><strong>Программируемая автоматизация (programmable automation)</strong> - изменение последовательности работы и конфигурации станков с помощью электронных средств управления. В данной схеме может потребоваться нетривиальное программирование (например, для различных PLC, обычно используется в серийном производстве где разнообразие рабочего оборудования низкое, а вариация продукции высокая; например бумажные или сталелитейные заводы и т.д.).</p>
</li>
<li>
<p><strong>Гибкая автоматизация (flexible automation)</strong> - используется в гибких производственных системах (flexible manufacturing system, FMS), которые постоянно управляются компьютером (операторы вводят команды высокого уровня, при этом изменения нижнего уровня выполняются автоматически; обычно используется в серийном и цеховом производстве где много сортов продукции, а объемы работ варьируются от средних до низких). В таких системах обычно используются многоцелевые компьютеры с числовым программным управлением (ЧПУ, CNC), автомобили с автоматическим наведением (роботизированные системы, AGV) и др.</p>
</li>
<li>
<p><strong>Интегрированная автоматизация (integrated automation)</strong> - полная автоматизация производства при которой все процессы выполняются и координируются компьютером (Computer Integrated Manufacturing - CIM). Другими словами, это полная интеграция технологических и управленческих операций с использованием ИТ. Часто в нее может входить и система бизнес управления. Пока что, успешные примеры таких систем крайне малы и сложно оценить, в каком виде производства они наиболее применимы.</p>
</li>
</ul>
<p>Обратите внимание, что масштаб и сложность автоматизированных систем растет от фиксированной до интегрированной автоматизации. Но необходимо помнить, что тип автоматизации выбирается под каждое конкретное производство и задачи, а инвестиции в нее должны быть оправданы экономически.</p>
<p>Например, фиксированная автоматизация целесообразна, когда:</p>
<ul>
<li>Различия в типе продукции малы (размер, форма, количество деталей, материал).</li>
<li>Существует прогнозируемый и стабильный спрос на продукт в течение 2-5 лет (и производственные мощности также стабильны).</li>
<li>Объем производства за единицу времени высок.</li>
<li>Требуется оптимальная производительность из-за конкуренции.</li>
</ul>
<p>Гибкая автоматизация, с другой стороны, используется в следующих ситуациях:</p>
<ul>
<li>Существуют значительные различия в типах продукции (для одной производственной системы).</li>
<li>Жизненный цикл модели продукта мал (частые усовершенствования и проектные модификации, которые изменяют производственные требования).</li>
<li>Объемы производства умеренны, а спрос не так предсказуем.</li>
</ul>
<p>Тем не менее в рамках протекающей на сегодняшний день промышленной революции Индустрия 4.0 все чаще склоняются к использованию серийного производства и модернизации непрерывных и массовых производств для данных целей. В связи с чем гибкая автоматизации становиться все более востребованной.</p>
<blockquote>
<p><strong>Задача</strong>. Как в ходе технического осмотра отрасли можно определить, какой тип автоматизации преобладает в ней? Для какой фабрики вы бы порекомендовали интегрированное компьютерное производство и почему? Какой вид автоматизации вы бы порекомендовали для производства:</p>
<ul>
<li>лампочек накаливания;</li>
<li>одежда;</li>
<li>текстиль;</li>
<li>минеральные удобрения;</li>
<li>печать;</li>
<li>фармацевтические препараты;</li>
<li>игрушки.</li>
</ul>
</blockquote>
<h3>1.4 Упражнения</h3>
<ol>
<li>
<p>Опишите роль автоматизации с точки зрения общей рентабельности производственной системы.</p>
</li>
<li>
<p>Как промышленная автоматизация помогает экономить и каких типов эта экономия?</p>
</li>
<li>
<p>Введите в интернете запрос “история автоматизации” и прочитайте понравившиеся ссылки.</p>
</li>
<li>
<p>Изучите стандарт ISO 9001 “Quality management systems”. Какие основные критерии системы менеджмента качества мы смогли найти в данной нормативной документации?</p>
</li>
<li>
<p>Какие есть альтернативные определения промышленности, автоматизации и контроля?</p>
</li>
</ol>
<h2 id="2-Architecture"> 2. Архитектура систем промышленной автоматизации (СПА)</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<h3>2.1 Введение и цели</h3>
<p>В настоящем разделе мы рассмотрим общую структуру системы автоматизации в промышленности. Хотелось бы, что бы по окончанию раздела вы могли:</p>
<ul>
<li>привести элементы систем промышленной автоматизации и их иерархию (уровни организации);</li>
<li>описать функциональную связь уровней организации (и назвать соответствующие технологии);</li>
<li>привести реальные промышленные примеры для каждого из уровней;</li>
<li>смогли описать поток информации между данными уровнями.</li>
</ul>
<h3>2.2 Архитектура системы промышленной автоматизации</h3>
<p>Перейдем к рассмотрению общей структуры всего промышленного комплекса, чтобы определить в нем свое место (рис. 2.1). Для простоты - представьте, что это один завод (например, АО “Рога и копыта”).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-1.png" alt="Industrial control stages" width="600px"/>
</td>
<td>
<i>
Рис. 2.1. Архитектура промышленного комплекса. Обратите внимание на обозначение уровней.
</i>
</td>
</tr>
</table>
</div>
<p>Начнем анализ с верхнего уровня - это наиболее соответствует человеческому восприятию всего процесса (с общего абстрактного уровня управления до конкретного алгоритмического). На <strong>4 уровне</strong> (верхний) находится менеджмент верхнего уровня, т.е. управление всем предприятием (Enterprise). Данное понятие включает в себя определение экономических, научных, потребительских и прочих высокоуровневых направлений развития производства в целом. Думаю, это точно не то, что мы будем автоматизировать (пока что).</p>
<p>Далее следует контроль выпускаемой продукции (<strong>3 уровень</strong>, Production Control), где осуществляется проверка на соответствие ГОСТ и ТУ. Тоже выполняется пока людьми. Однако здесь отдаются уже более конкретные управляющие команды.</p>
<p>На <strong>2 уровне</strong> расположился контроль принятия решений (Supervisory Control). Можно сказать что это переходный этап между понятным людям и понятным машинам командам и параметрам. Эту функцию берут на себя операторы производства вместе с автоматическими системами управления процессами (комната с большими мониторами на заводе). А то, что отображается на мониторах компьютеров и позволяет операторам понимать, что происходит в процессе производства называют АСУТП (Автоматизированная система управления технологическим процессом или supervisory control and data acquisition, SCADA). Очень часто этот уровень обозначают просто как АСУТП, хотя это уровень не ограничен только АСУТП и включает в себя еще и функции операторов по управлению процессом.</p>
<p><strong>Уровень 1</strong> (Automation Control) занимают системы автоматического контроля. Если говорить точнее, то системы поддержания заданных параметров качества (которые задаются АСУТП и операторами для конкретных <strong>точек процесса</strong>). На данном уровне часто используются компьютеры (PC) или логические контроллеры (PLC). Самая что ни на есть автоматизация! Те функции, которые не могут выполняться автоматически, берут на себя аппаратчики производства (цеховые рабочие).</p>
<p>На последнем, <strong>0 уровне</strong> (Sensors & Actuacors) расположены сенсоры и актуаторы - устройства “получения” и “передачи” физической информации о процессе, которую они предоставляют на более высокие уровни управления.</p>
<p>Взаимодействие между уровнями обеспечивается единой информационно-коммуникационной системой предприятия (система управления производственными процессами или Manufacturing execution system, <a href="https://en.wikipedia.org/wiki/Manufacturing_execution_system">MES</a>). Например, для АО “Апатит” такой системой является <a href="https://pisquare.osisoft.com/s/Blog-Detail/a8r1I000000GviqQAC/pi-and-mes">PI System</a>.</p>
<p>От себя добавлю, что на сегодняшний день все большее распространение получают роботизированные системы контроля установленные прямо в производственном процессе (т.е. это система 0 - 2 уровня). Данные системы могут как взаимодействовать с АСУТП напрямую, так и работать автономно (например, как агрегаторы данных). На примере подобных систем можно хорошо <a href="http://www.ijmerr.com/uploadfile/2020/1113/20201113045713870.pdf">проиллюстрировать связь описанных уровней с точки зрения промышленной автоматизации</a> (рис. 2.2).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-2.png" alt="Robotic control stages" width="600px"/>
</td>
<td>
<i>
Рис. 2.2. Архитектура роботизированной системы контроля гранулометрического состава на предприятии, производящим минеральные удобрения.
</i>
</td>
</tr>
</table>
</div>
<p>Данная система была разработана мною с коллегами и служит для контроля гранулометрического состава производимых минеральных удобрений. Более подробная взаимосвязь компонентов и принцип работы приведены на рис. 2.3.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-3.png" alt="Robotic control flow" width="600px"/>
</td>
<td>
<i>
Рис. 2.3. Потоки передачи сигналов и данных для роботизированной системы контроля гранулометрического состава. Пунктирные линии представляют цифровые сигналы, остальные - аналоговые сигналы.
</i>
</td>
</tr>
</table>
</div>
<p>Отметим, что время принятия решения и количество информации, которые заложенны в одном конкретном решении увеличиваются от 0 до 4 уровня. Другими словами “чем выше уровень - тем более общие управляющие термины используются” (что означает большее количество времени и опыта/баз данных для декомпозиции этих запросов). </p>
<blockquote>
<p><strong>Пример</strong>. Менеджеры говорят “сделай качественно для рынка”; техотдел передает “сделай качественно согласно ГОСТ 2х2”; управление контролем качества проводят анализы и передают параметры операторам; те в свою очередь вводят в АСУТП параметры в виде “подкрутить ручки 1-2-3 в позиции 3-2-1”; аппаратчик или система автоматического контроля “подкручивает ручки и удерживает заданные параметры” в согласии с прочими параметрами системы; сенсоры и актуаторы “крутятся, меряют и урчат” передавая новую информацию на верх. Как-то так.</p>
</blockquote>
<p>На первый взгляд - наше место находиться на 0 и 1 уровнях данной системы. Однако, часто и 2 уровень попадает в поле зрения автоматизации и неразрушающего контроля (см. заметку про роботизированные системы, рис. 2.2). Тем не менее, в рамках настоящего пособия будут рассматриваться измерительные устройства 0 уровня (сенсоры), поскольку именно они являются незыблемым фундаментом автоматического неразрушающего контроля. Но все же далее мы приведем краткое описание каждого из уровней автоматизации предприятия для формирования общей картины (начиная с самого низкого уровня).</p>
<h3>2.3 Уровень 0. Сенсоры и актуаторы</h3>
<p>Первой системой контроля (которая непосредственно отвечает за автоматизацию) будет <strong>система сенсоров</strong> (уровень 0). Она должна давать нам точную и чувствительную информацию (<strong>сигнал</strong>), связанную с физической величиной (например, температурой) (рис. 2.4). Получение такой информации возможно за счет специальных устройств - <strong>сенсоров</strong> (датчики, sensors/gages). Получение данной информации необходимо, чтобы на уровне 2 были произведены нужные вычисления и рассчитан ответ управляющей системы (или среагировал оператор). На основании данного ответа для актуатора или аппаратчика поступит новый ввод данных (например, для удержания процесса в технологических рамках). </p>
<blockquote>
<p><strong>Примечание</strong>. Все это “циклическое взаимодействие между уровнями 0-1-2 происходит для обеспечения общего качества по ГОСТ или ТУ в рамках уровня 4 в соответствии с требованиями рынка, которые передаются через уровень 5. </p>
</blockquote>
<p>При этом, информация (сигнал) от/до уровня 0 передается в виде <strong>электрической или пневматической</strong> формах информации и дальше преобразуется либо в электрический сигранл по одному из протоколов связи с компьютером или ПЛК (например <a href="https://en.wikipedia.org/wiki/Modbus">Modbus</a>, <a href="https://en.wikipedia.org/wiki/Profibus">Profibus</a>, <a href="https://en.wikipedia.org/wiki/RS-485">RS485</a>, <a href="https://en.wikipedia.org/wiki/RS-232">RS232</a> <a href="https://en.wikipedia.org/wiki/Ethernet">Ethernet</a> и т.п.), либо во входной параметр технологического процесса (тепло, сила потока). Таким образом передать сигнал от процесса - задача сенсоров, принять управляющий сигнал и воздействовать на процесс - задача других устройств, <strong>актуаторов</strong>.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-4.png" alt="Sensors (level 0)" width="600px"/>
</td>
<td>
<i>
Рис. 2.4. Система сенсорного контроля (уровень 0).
</i>
</td>
</tr>
</table>
</div>
<p>При этом, нас интересует информация о состоянии физической среды (medium), которая относится к конкретному технологическому физическому процессу. Если более конкретно, то нас интересует измерение некоторой физической переменной, функционально связанной с этим явлением, лежащим в основе технологического процесса.</p>
<blockquote>
<p><strong>Пример</strong>. Информация о температуре теплоносителя в топке с точки зрения изменения данного параметра при измерении расхода жидкости.</p>
</blockquote>
<p>Именно для этого нам нужен <strong>сенсор</strong> - черный ящик, находящийся в непосредственном контакте со средой, который обеспечивает контроль состояния этой среды (как правило, не разрушающий). </p>
<p>Сам же сенсор состоит из следующих основных элементов.</p>
<ol>
<li><strong>Чувствительный элемент (sensing element)</strong> - элемент, чьи физические/химические/биологические свойства изменяются в зависимости от физической среды (прямой или непрямой контакт). </li>
</ol>
<blockquote>
<p><strong>Пример</strong>. Типичным примером сенсора является изменение удельного сопротивления из-за нагрева провода <a href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%80%D0%BC%D0%BE%D1%80%D0%B5%D0%B7%D0%B8%D1%81%D1%82%D0%BE%D1%80">термистра</a> (терморезистор, resistance Temperature Detector, RTD). </p>
</blockquote>
<ol start="2">
<li>После, чувствительный элемент соединяется с <strong>модулем формирования сигнала (signal-conditioning element)</strong>, который изменяет тип сигнала от чувствительного элемента (обычно преобразует его в электрическую форму: напряжение, ток, емкость или индуктивность). Данное преобразование зависит в основном от типа сенсора (именно по этому чувствительный элемент является уникальным для того или иного типа датчика). Как правило, для подобных модулей используются аналоговые электронные схемы, которые в конечном итоге вырабатывают электрические сигналы в виде напряжения или тока в определенных диапазонах. Кроме того, подобный модуль может также использоваться и для специальных функций, не связанных с преобразованием сигнала. Например, для нивелирования внешних условий измерений для термопар (“внешняя привязка”, ambient referencing). </li>
</ol>
<blockquote>
<p><strong>Пример</strong>. Для температурного резистора (RTD) изменение сопротивления может быть легко преобразовано в напряжение путем включения RTD в <a href="https://ru.wikipedia.org/wiki/%D0%98%D0%B7%D0%BC%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BC%D0%BE%D1%81%D1%82">измерительный мост</a> (мост Уитстона, Wheatstone’s bridge). Таким образом данный мост служит модулем формирования сигнала. </p>
</blockquote>
<ol start="3">
<li>
<p>Следующим модулем стоит <strong>элемент обработки сигнала (signal processing element)</strong>, который используется для последующей работы с электрическим сигналом с целью фильтрации (устранение шумов), диагностики (оценка состояния датчика), линеаризации (получение выхода, линейно связанного с физическими параметрами среды) и т.д.. Как можно догадаться из количества функций этот элемент обычно имеет более общее назначение чем предыдущие. </p>
</li>
<li>
<p>Последний модуль - <strong>элемент целевой обработки сигнала (target signal-handling element)</strong>. Обычно он тоже универсален и может выполнять различные функции: отображение данных/сигналов, запись, хранение, обратная связь с системой управления процессом и т.д.. Примерами могут служить регистратор температурных диаграмм, регистратор лент КИПиА, цифровой дисплей или аналого-цифровой преобразователь (АЦП, ADC) с последующим подключением к компьютеру системы управления процессом.</p>
</li>
</ol>
<blockquote>
<p><strong>Примечание</strong>. Современные сенсоры обычно обладают дополнительным модулем/способностью цифровой передачи данных. Для этого используются серийные, параллельные или сетевые протоколы (например <a href="https://ru.wikipedia.org/wiki/USB">USB</a> и упомянутые в разделе 2.2 <a href="https://en.wikipedia.org/wiki/RS-485">RS485</a>, <a href="https://en.wikipedia.org/wiki/RS-232">RS232</a> <a href="https://en.wikipedia.org/wiki/Ethernet">Ethernet</a> и т.п.). Такие сенсоры называют “умными” (smart) и они содержат соответствующие дополнительные цифровые электронные системы преобразования сигнала под протокол связи.</p>
</blockquote>
<p>Таким образом, сенсор переводит входящие физические сигналы (температура, давление, скорость и т.д.) в выходящие электрические сигналы, которые в свою очередь являются входящими сигналами для следующего уровня автоматизации: управление ПЛК, анализа операторами, принятие решений и, т.д. </p>
<blockquote>
<p><strong>Примечание</strong>. Помимо электрических сигналов от сенсоров существуют еще и пневматические, но их рассмотрение выходит за рамки нашего курса.</p>
</blockquote>
<p>Таким образом мы кратко рассмотрели как осуществляется передача информации от процесса до управления. Однако есть и обратное направление и чтобы осуществить управляющее воздействие на сам процесс, нам нужны <strong><a href="https://ru.wikipedia.org/wiki/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%BE">исполнительные устройства или актуаторы</a></strong> (мы все еще на уровне 0). Данные устройства характеризуют воздействие на процесс, в зависимости от полученного сенсорного сигнала в соответствии с заданным управлением (задается с более высоких уровней, например 1 или 2).</p>
<p><strong>Исполнительные устройства или актуаторы (Actuator)</strong> - это преобразователь электрического сигнала в физическое воздействие который необходим для обеспечения изменений в физических процессах (например, регуляция скорости потока, массы продукта, давления и т.д.). </p>
<blockquote>
<p><strong>Пример</strong>. Актуатор может повернуть заслонку или открыть сопло горелки, что приведет к изменению состояния физической среды в производственном процессе. </p>
</blockquote>
<p>Таким образом, сенсоры и актуаторы являются двумя сторонами одной медали, но работают с преобразованиями различной силы: актуаторы являются исполнительными устройствами и потребляют много энергии (формируют воздействие определенной силы в зависимости от сигнала), в то время, как сенсоры формируют электрический сигнал из физического воздействия и не требуют высокой мощности. Следовательно, актуаторная система хоть и является обратной сенсорной по своей сути, но обычно входящие в ее состав устройства более энергоемкие и в большинстве случаев производят какое-либо движение (которое потом преобразуется в другие формы физического воздействия). Тем не менее логика работы актуаторов с сигналом примерно соответствует сенсорной логике (рис. 2.5). </p>
<blockquote>
<p><strong>Примечание</strong>. Аналогично сенсорам, существуют и “умные актуаторы”.</p>
</blockquote>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-5.png" alt="actuator_scheme" width="600px"/>
<br>
a)
<br>
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-5-b.jpg" alt="real_actuator" width="600px"/>
<br>
b)
</td>
<td>
<i>
Рис. 2.5. Функциональная конфигурация типичной актуаторной системы (a) и пример ее промышленной реализации (b).
</i>
</td>
</tr>
</table>
</div>
<p>Разберем типичные блоки исполнительной системы (актуатора):</p>
<ol>
<li><strong>Элемент обработки сигнала (signal processing element)</strong> принимает команду от системы контроля в электрической форме (как правило, слабой мощности). Данная команда может обрабатываться несколькими путями. Например, может производиться усиление или фильтрация (для удаления входящего сигнала определенной частоты, которая может вызвать резонанс). Многие актуаторы исполняются в виде замкнутых блоков со встроенным управлением (т.е. 1ый уровень автоматизации) с обратной связью (в блок входит и получение сигнала от встроенного сенсора) для обеспечения своевременности и точности срабатывания. Поэтому электронный блок обработки сигналов часто содержит систему управления для самого привода (например ПЛК).</li>
<li><strong>Элемент усиления мощности (power amplifying element)</strong> иногда содержит линейные каскады усиления мощности (linear power amplification stages). В других случаях он может состоять из силовых электронных схем, например, для электрических приводов (motor driven actuators). Требуется для получения необходимой актуатору мощности для осуществения воздействия на среду.</li>
<li><strong>Элемент преобразования переменной (variable conversion element)</strong> выполняет функцию изменения характера сигнала, генерируемого электронным элементом усиления мощности (с электрической на не электрическую форму, как правило, в движение). Примерами являются электрогидравлические сервоклапаны (electrohydraulic servo valve), шаговые/серво двигатели (stepper/servo motors), преобразователи тока в пневматическое давление (Current to Pneumatic Pressure converters) и т.д.</li>
<li><strong>Элемент преобразования энергии (energy conversation element)</strong>, дополнительный элемент который, как правило, включает в себя <strong>элементы не электрического преобразования мощности (non-electrical power conversion element)</strong> и используется при необходимости дальнейшего увеличения мощности (как правило, с помощью гидравлических или пневматических механизмов). Кроме того в его составе могут использоваться <strong>элементы не электрического преобразования переменной (non-electrical variable conversion elements)</strong> для преобразования управляемой переменной в желаемую форму, часто в несколько этапов. Типичные примеры включают преобразование скорости движения в скорость потока в проточных клапанах, преобразователи поворотного движения в линейное с использованием специальных механизмов (например, червячная передача), преобразование скорости потока в тепло с использованием пара или горячих жидкостей и т.д.</li>
</ol>
<p>В заключении, в актуаторах могут использоваться различные <strong>вспомогательные элементы (оборудование)</strong> для смазки/охлаждения/фильтрации, дополнительные резервуары, первичные приводы, датчики обратной связи, компоненты для отображения, дистанционное управление, а также защитные механизмы и т.д. поскольку уровень мощности (электрической) актуаторов значительно выше, чем сенсоров.</p>
<p>Подводя итог настоящему разделу, системы 0 уровня можно отобразить в общем виде на примере управления задвижкой крана, который регулирует поток в некоторой среде (рис. 2.6).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-6.png" alt="0 level" width="600px"/>
</td>
<td>
<i>
Рис. 2.6. Система контроля 0 уровня.
</i>
</td>
</tr>
</table>
</div>
<h3>2.4 Уровень 1. Система автоматического управления (контроля)</h3>
<p>Как вы могли видеть из рис. 2.6 - существует некоторый цикл, связывающий сенсор и актуатор. За счет этого уикла и взаимодействия данных устройств должно происходит некое управление средой. Именно этот цикл и понятие “управления” дает нам возможность подняться в автоматизации на уровень выше и рассмотреть систему автоматического управления (уровень 1). Как правило, под промышленными системами управления 1ого уровня подразумевается использование небольших управляющих контуров на базе <strong><a href="https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B9_%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80">программируемого логического контроллера</a> (ПЛК, PL controller, PLC)</strong>. Этот новый элемент (обычно электронный или пневматический) принимает на вход сигналы от операторов или АСУТП (устанавливает заданное значение), а так же обратную связь от сенсора (промышленного процесса) и на выходе выдает (или рассчитывает) сигналы для актуатора, чтобы реальное значение было как можно ближе к заданному (рис. 2.7).</p>
<blockquote>
<p><strong>Примечание</strong>. Широко изместный Arduino-контроллер в обычном исполнении не является ПЛК поскольку не предназначен для автономного использования в промышленных условиях и не обладает промышленными интерфейсами работы с сенсорами - это просто микроконтроллер. Но на сегодняшний день есть варианты Arduino-контроллеров, которые являются полноценными ПЛК, например <a href="https://www.controllino.com/">Controllino</a>. </p>
</blockquote>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-7.png" alt="Typical control loop" width="600px"/>
</td>
<td>
<i>
Рис. 2.7. Цикл автоматической системы контроля (уровень 1).
</i>
</td>
</tr>
</table>
</div>
<p>Данный цикл также часто называют автоматическим управлением (Automatic Control), управлением процессом (Process Control), управлением с обратной связью (Feedback Control) и т.д. В данном случае целью контроллера является обеспечение таких сигналов на актуатор, чтобы вход от показаний сенсора (параметр технологического процесса y(t)) следовал за входом от команды управления (команда операторов r(t)) настолько близко, насколько это возможно (и по значению, и по времени). Как можно видеть на рис. 2.7 показана структура общего контура управления с его составными элементами, а именно: контроллером, приводом (актуатор), сенсором и самим процессом (среда, в которой происходит процесс). Кроме того, на рисунке отмечены сигналы, существующие в различных точках системы:</p>
<ul>
<li>вход от команды управления (заданное значение или эталонный сигнал, set point or reference signal);</li>
<li>вход от сенсора (данные среды);</li>
<li>внешние помехи (шум, noise).</li>
</ul>
<p>Несмотря на кажущуюся простоту работы ПЛК <strong>достичь точного соответствия заданному значению практически невозможно</strong> за счет наличия помех (изменение нагрузок, наводящие токи, шум датчика) и ограниченного времени отклика за счет внешних факторов производства (нестабильность, неопределенность и изменчивость в динамике процесса).</p>
<blockquote>
<p><strong>Примечание</strong>. Еще раз обратите внимание на новый элемент - <strong>контроллер</strong>. По сути это и есть промышленная система автоматического управления 1 уровня (по своей сути <strong>это связной</strong> - он обеспечивает прямую и обратную связь входных и выходных параметров между уровнями 0 и 1, следит за их соответствием друг другу).</p>
</blockquote>
<p>Большинство промышленных “управляющих” сигналов для контроллера представляют собой <strong>“кусочно-неизменяемые” или дискретные сигналы</strong> (т.е. дискретные константы), указывающие на желаемое значение переменной/параметров процесса (например, желаемая температура, давление, расход, уровень и т.п.). Они задаются через определенные интервалы времени в виде конкретных величин и должны улучшать протекающие процессы и качество изделия. Однако сам процесс производства является <strong>непрерывным</strong> (continuous process). Из-за этого он склонен постоянно откланяется на разную величину от заданного параметра, что в теории приводит к частому и большому изменению управляющего сигнала и к ухудшению качества продукции (как и к выходу из строя актуаторов и контроллеров). Чтобы избежать этой проблемы применяют разные схемы “приблизительного” управления типа “П”, “ПИ”, “ПИД” и т.п. регуляции. </p>
<blockquote>
<p><strong>Примечание</strong>. Описанная проблема очень актуальна для различных автопилотов, особенно для автомобильного транспорта. </p>
</blockquote>
<p>В целом, рассмотрение схем регуляции контроллеров выходит за рамки настоящего курса. Поэтому ограничусь лишь небольшими основами. Во-первых, мы рассматриваем контроллер с точки зрения управления процессом (т.е. как черный ящик), а потому в нашем случае он будет синонимом, т.е. “мгновенным” регулятором (хотя с аппаратной точки зрения это разные устройства). Тогда с точки зрения регуляции процесса существует несколько контроллеров:</p>
<ol>
<li>П (P) - пропорциональный</li>
<li>И (I) - интегральный</li>
<li>Д(D) - дифференциальный</li>
<li>ПИ (PI) - пропорциональный и интегральный</li>
<li>ПД (PD) - пропорциональный и дифференциальный</li>
<li><a href="https://ru.wikipedia.org/wiki/%D0%9F%D0%98%D0%94-%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%82%D0%BE%D1%80">ПИД (PID) - пропорциональный, интегральный и дифференциальный</a></li>
</ol>
<blockquote>
<p><strong>Примечание.</strong> Сами понятия П, ПД, ПИ, ПИД (P, PD, PI, PID) и т.п. регуляторы означают устройства регулирования (черный ящик) для актуатора, которые генерируют на своем выходе обратную связь в виде результата некой передаточной функции для положения актуатора (т.е. на выходе возвращается по сути разность между установленным значением и значением сенсора, приближенная той или иной функцией). Тп передаточной функции как раз и обозначается как П, ПИ и т.д..</p>
<p><strong>Пример</strong>. Рассмотрим регулирование комнатной температуры (поддержании ее значения в <code>X</code> градусов) с помощью некоего комнатного электронагревателя, выходная мощность которого зависит от уровня входного сигнала. Т.е. при изменении температуры на некую положительную величину <code>e</code> (повышении температуры до уровня <code>X+e</code>) к стандартному входному сигналу <code>U</code> нагревателя будет добавлен отрицательный сигнал регулятора <code>u</code>. Результирующим сигналом на входе нагревателя будет, таким образом, <code>U-u</code> , что уменьшит выходную мощность нагревателя, и, следовательно, комнатную температуру (отрицательная обратная связь от регулятора). Именно так (с отрицательной обратной связью) работает большинство регуляторов в промышленной автоматизации.</p>
<p>Очень часто <code>e</code> называют “ошибкой” или “отклонением”, <code>Х</code> - “заданным уровнем” или “заданным значением”, причем <code>Х</code>, в общем случае, может быть и регулируемым сигналом в каком-то другом контуре регулирования.</p>
</blockquote>
<p>Далее мы немного более подробно рассмотрим работу ПИД (PID) регулятор как наиболее универсального представителя класса (беря за основу приведенный выше пример с температурой в комнате). Любой другой регулятор может быть получен путем обнуления коэффициента передачи в соответствующем слагаемом передаточной функции.</p>
<p>Итак, передаточная функция ПИД регулятора описывается уравнением:</p>
<div class="math">$$
u(t) = P + I + D = K_p \cdot e(t) + K_i \int_0^t e(\tau) d \tau + K_d \frac{de}{dt}
$$</div>
<p>Часто используются следующие обозначения:</p>
<ol>
<li><span class="math">\(K_p\)</span> - пропорциональный коэффициент усиления</li>
<li><span class="math">\(P_b = \frac{1}{K_p}\)</span> - относительный диапазон регулирования</li>
<li><span class="math">\(K_i\)</span> - интегральный коэффициент усиления</li>
<li><span class="math">\(T_i = \frac{1}{K_i}\)</span> - постоянная интегрирования (размерность - время)</li>
<li><span class="math">\(K_d\)</span> - дифференциальный коэффициент усиления</li>
<li><span class="math">\(T_d = K_d\)</span> - постоянная дифференицирования (размерность - время)</li>
</ol>
<p>Рассмотрим, каждое из слагаемого ПИД регулятора по порядку:</p>
<ul>
<li>
<p>Пропорциональное регулирование (П или P регуляторы) - величина поправки в регулирующее воздействие, которая линейно пропорциональна величине отклонения. Логично, чем больше отклонение температуры в комнате от заданного уровня, тем сильнее следует изменить мощность нагревателя для компенсации изменения.</p>
</li>
<li>
<p>Интегральное регулирование - величина поправки в регулирующее воздействие, которая зависит от накопленного действия отклонения регулируемой величины. Например, пропорциональное регулирование попросту не позволяет прогреть комнату при открытом окне и уйти от низких температур в комнате (т.е. помещение будет проветриваться с той же скоростью, что и прогреваться). Но при интегральном регулировании, если накопленное действие пониженной температуры растет (интеграл), то это слагаемое даст дополнительное приращение мощности нагревателя (по сравнению с пропорциональным) и позволит прогреть комнату (считаем, что наш нагреватель обладает бесконечной мощностью).</p>
</li>
<li>
<p>Дифференциальное регулирование - величина поправки зависит от скорости изменения регулируемого параметра. Если температура на улице резко упала, то лучше поскорее прогреть комнату и стены (чтобы не дать им остыть). Однако следует помнить, что данный вид регулирования может легко вызвать резкие перепады и резонансы в управлении.</p>
</li>
</ul>
<p>В случае кусочно-непрерывного управления (дискретные константы), мы получаем сигнал с сенсора на контроллере, рассчитываем управляющее воздействие, применяем его к актуатору, получаем новый сигнал с сенсора и т.д. В общем случае отклик системы измеряется волновыми характеристиками (рис. 2.8).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-7-1.jpg" alt="PID" width="600px"/>
</td>
<td>
<i>
Рис. 2.8. Характеристики отклика типичного ПИД регулятора, работающего по замкнутой схеме управления.
</i>
</td>
</tr>
</table>
</div>
<p>Для регулятора существуют следующие характеристики и определения:</p>
<ul>
<li>Время подъема (Rise Time) - время, при котором система проходит от 10 до 90 % заданного уровня (steady-state value).</li>
<li>Процент перевыполнения (Percent Overshoot) - величина превышения характеристики процесса (в процентах от заданного значения).</li>
<li>Время установки (Settling time) - это время, необходимое для того, чтобы переменная процесса достигла определенного процента конечного значения (обычно 5%).</li>
<li>Ошибка в установившемся состоянии (Steady-State Error) - это конечная разница между переменной процесса и заданным значением.</li>
<li>Сопротивление возмущающим воздействиям системы (disturbance rejection of the control system) - количественная мера того, насколько хорошо система управления способна преодолевать последствия возмущений.</li>
<li>Нелинейная система (nonlinear system) - это система, в которой параметры управления зависят от параметров системы (например, камера, частично заполненная жидкостью, будет показывать гораздо более быструю реакцию на мощность нагревателя, когда он почти пуст, чем когда он почти заполнен жидкостью).</li>
<li>Надежность системы управления (robustness of the control system) - мера того, насколько хорошо система управления выдержит возмущения и нелинейности.</li>
<li>Мертвое время (временем простоя, deadtime) - это задержка между моментом изменения переменной процесса и моментом, когда это изменение детектируются.</li>
</ul>
<blockquote>
<p><strong>Пример</strong>. Если датчик температуры расположен на большом расстоянии от входного клапана холодной воды, он не будет выдавать изменение температуры сразу же после изменения положения клапана - вначале до него должны “дотечь” изменения. Кроме того, мертвое время также может быть вызвано приводом, который медленно реагирует на команду управления (клапан, который медленно открывается или закрывается).</p>
</blockquote>
<ul>
<li>Время цикла (loop cycle time) - интервал времени, между установкой новой дискретной константы и вызовом алгоритма управления (системы, которые быстро меняются или имеют сложное поведение, требуют более высокой скорости цикла управления).</li>
</ul>
<blockquote>
<p><strong>Примечание.</strong> Точное определение приведенных выше терминов может варьироваться в различных промышленных и научных кругах.</p>
<p><strong>Примечание</strong>. Одно устройство ПЛК может работать как регулятор в нескольких управляющих циклах (single-loop/multi-loop controller). Сегодня многие контроллеры предлагают адаптивное управление и алгоритмы нечеткой логики для улучшения управления процессом. Среди прочих требуемых и распространенных характеристик: возможность взаимодействия с системой принятия решений (АСУТП), взаимодействие в одноранговых сетях (peer-to-peer network) (таких, как <a href="https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C">Fieldbus или DeviceNet</a>), поддержка ручного управления в случае сбоя автоматики. При этом программное обеспечение также является важным фактором и используется для настройки, мониторинга, автонастройки и сигнализации. В то время как большинство современных сложных контроллеров и регуляторов являются электронными, существуют и пневматические варианты.</p>
</blockquote>
<p>Еще раз отмечу, что многие современные контроллеры, которые широко применяются для последовательного управления в конвейерных линиях, робототехнике, управлении процессом и многих других автоматизированных системах являются <strong>программируемыми логическими контроллерами</strong> (ПЛК, Programmable Logic Controller, PLC). По сути, ПЛК - это специализированная промышленная микропроцессорная вычислительная система реального времени внутри которой установлен контроллер (мозг).</p>
<blockquote>
<p><strong>Примечание</strong>. Стандартный программируемый логический контроллер состоит из: </p>
<ul>
<li>процессорного блока (CPU), который интерпретирует входы, выполняет сохраненную программу управления и посылает выходные сигналы,</li>
<li>блока питания, который преобразует переменное напряжение в постоянное (обычно 12 или 24 В),</li>
<li>устройства памяти, хранящее данные (8 бит, 64 бита и т.д.),</li>
<li>входных и выходных интерфейсов для приема/отправки данных от/к внешним устройствам (цифровые или аналоговые),</li>
<li>интерфейса связи для приема и передачи данных от/к ПЛК.</li>
</ul>
</blockquote>
<p>Обычно, для настройки и прошивки ПЛК требуются специальные устройства для записи программного кода - программаторы, которое используется для разработки и последующей загрузки программы в память контроллера (иногда эту функцию выполняет компьютер).</p>
<blockquote>
<p><strong>Примечание</strong>. Некоторые современные ПЛК даже содержат операционную систему реального времени, например, OS-9 или VxWorks.</p>
<p><strong>Задача.</strong> Вспомните/подумайте, является ли Arduino ПЛК?</p>
</blockquote>
<h3>2.5 Уровень 2. Контроль принятия решений</h3>
<p>Остается последним из уровней, частично входящий в нашу область ответственности. Уровень 2 - контроль принятия решений (Supervisory Control, рис. 2.8). Данная ступень контроля на уровень выше “автоматических контроллеров” 1 уровня, которые контролируют лишь небольшую подсистему (и часто в замкнутом цикле).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-8.png" alt="Level 2)" width="600px"/>
</td>
<td>
<i>
Рис. 2.8. Общая система управления производством с точки зрения контроля принятия решений (уровень 2).
</i>
</td>
</tr>
</table>
</div>
<p>Контроль принятия решений обычно выполняет следующие функции:</p>
<ul>
<li>Устанавливает <strong>“точки контроля”</strong> для важных переменных в технологических процессах (зависит от природы продукта, объема и типа производства) - это сильно влияет на управление процессом, энергией, качеством и эффективностью. <strong>Точка контроля</strong> - это определенное место в техническом процессе (среде), где производится контроль и управляющее воздействие. Можно сказать что туда ставится ПЛК.</li>
<li>Обеспечивает <strong>мониторинг/диагностику</strong> производительности многих технологических процессов: проверяет сенсоры и актуаторы, параметры процессов в выбранных точках контроля, следит на наличие ошибок (результаты сохраняются) и т.д..</li>
<li>Производит <strong>запуск/остановку/экстренные операции</strong> - специальные дискретные и непрерывные модели управления, созданные для ответа на команды оператора и диагностические события (такие, как обнаруженные ошибки или критические отклонения процессов).</li>
<li>Контроль <strong>переконфигурации/настройка</strong> систем автоматизации 1ого уровня - структурная или параметрическая перестройка контуров управления. Выполняется либо в ответ на команды оператора, либо в ответ на диагностические события. Реконфигурация управления может потребоваться также для адаптации контуров управления к изменению обратной связи от сенсоров или потребляемой энергии (например, при сжигании газа в масле, расхода компонента и т.д.).</li>
<li><strong>Графический интерфейс</strong> - интерфейс оператора для ручного управления и корректирования.</li>
</ul>
<p>Можно заметить, что данные системы зависимы от типа управляемого процесса (в противовес уровню 1, который обычно унифицирован). Как правило, в системах 2ого уровня присутствует смесь аппаратных и программных алгоритмов и такие системы стоят очень дорого.</p>
<blockquote>
<p><strong>Задание</strong>. Рассмотрите автоматическую <a href="https://www.datancnc.com/index_projectxq_id_166_jpid_91.html">систему контроля драйвера двигателя для ЧПУ</a> (CNC Machine drivers) на рис. 2.9. Найдите, где данная система установила свои точки расчета (set points). Рассмотрите прочие функциональные особенности, согласно взаимодействию с уровнем 2.
</p>
</blockquote>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/auto_fig2_9.png" alt="CNC Control" width="600px"/>
</td>
<td>
<i>
Рис. 2.9. Автоматическая система контроля драйвера двигателя ЧПУ (https://www.datancnc.com/index_projectxq_id_166_jpid_91.html).
</i>
</td>
</tr>
</table>
</div>
<h3>2.6 Прочие уровни управления</h3>
<p>Кратко рассмотрим функции 3его уровня (контроль производства).</p>
<ul>
<li>Планирование процесса: обработка доступности ресурсов для их оптимального использования и переработки (в зависимости от последовательности операций, которые необходимо выполнить с имеющимися партиями продукции).</li>
<li>Управление техническим обслуживанием: процессы принятия решений, связанные с обнаружением и развертыванием операций технического обслуживания.</li>
<li>Управление запасами: процессы принятия решений, связанные с мониторингом состояния запасов сырья, готовой продукции и т.д. и развертыванием операций, связанных с их управлением.</li>
<li>Управление качеством: оценка, документирование и управление качеством.</li>
</ul>
<p>Как правило, на заводе за это отвечают отдел главного технолога и управление контроля качеством (лаборатории).</p>
<h3>2.7 Заключение</h3>
<p>В настоящей главе мы рассмотрели общие особенности системы управления производством на разных ее уровнях. Кратко описали каждый из уровней и составили основные диаграммы.</p>
<p>Не забываем, что время и информативность решений увеличиваются по мере увеличения уровня. На самом низком уровне система контроля работает очень быстро (один датчик) - собственно там и контроля-то нет, просто получение информации. На более высоких уровнях система работает гораздо медленнее (множество датчиков и процессов). Так на уровне АСУТП (2ой) время отклика всей системы на управляющее воздействие вполне может превышать 45-60 мин. (за это время может быть произведено сотни тонн готового продукта). На уровне менеджмента (4ый) происходит агрегирование информации по всему заводу за промежуток времени от суток и больше (суточные, недельные, квартальный, полугодовые и годовые отчеты о производственной деятельности). </p>
<p>При этом каждый из уровней соединен по тому или иному протоколу связи (как внутри себя, так и друг с другом) и все это образует единую информационную систему предприятия. Это относиться не только к высокому уровню, но и к сетям низкого уровня для связи компьютеров и ПЛК с датчиками и актуаторами (вспоминаем промышленные протоколы связи).</p>
<p>Конкретный пример технического задания на разработку системы АСУТП на примере прокатного цеха представлен в приложении ниже (2.8). В примере раскрываются основные функции в современных системах автоматизации и элементы, которые используются для их реализации.</p>
<h3>2.8 Приложение А. Пример Технического задания для разработки автоматизированной системы управления технологическим процессом (2ой уровень управления) (<em>TODO: может у кого есть более свежий пример?</em>)</h3>
<p>Данное приложение содержит спецификацию производственного участка холодного проката (PL-TCM), который обычно включает в себя линии:</p>
<ul>
<li>подачи, </li>
<li>сортировки,</li>
<li>травления,</li>
<li>сдвоенного (тандемного) холодного проката. </li>
</ul>
<p>Рассмотренная ниже спецификация обычно составляется при закупке и установке систем автоматизации для промышленных предприятий. Некоторые из описанных далее терминов и понятий будут рассмотрены в последующих главах более подробно.</p>
<blockquote>
<p><strong>Примечание</strong>. <a href="https://steelplantech.com/wp-content/uploads/2014/07/New-PL-TCM-in-Vietnam-T.Kikkawa-AISTech-2014-The-Iron-Steel-Technology-Conferance-and-Exposition-Pickling-Lines.pdf">Линия травления и тандемный стан холодной прокатки (Pickling Line and Tandem Cold Mill, PL-TCM)</a> как правило состоит из трех основных секций, а именно: секции травления для очистки поверхности полосы от оксидного слоя; секции боковой обрезки для обрезки краев полосы; и секции TCM для прокатки для достижения заданной толщины.</p>
</blockquote>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-10-2.jpg" alt="PL-TCM" width="600px"/>
</td>
<td>
<i>
Рис. 2.10. Линия травления и тандемный стан холодной прокатки (https://www.ikeuchi.eu/solutions/industries/steel-making-industry/plate-mill-rolling-mill-production/).
</i>
</td>
</tr>
</table>
</div>
<p><strong>Платформы (Platforms)</strong>: Все указанные уровни управления должны быть реализованы с помощью программируемых логических контроллеров (ПЛК), микропроцессорных систем, а также ПК / рабочих станций по мере необходимости.</p>
<p>Каждая из систем автоматизации PL-TCM должна быть выделена в отдельный цикл управления в соответствии с функциональными требованиями и должна включать управляющие воздействия в разомкнутом и замкнутом контурах.</p>
<p><strong>Режимы работы (Modes of operation):</strong> В основном, системы должны иметь два режима работы. В полуавтоматическом режиме параметры должны вводиться вручную опретором для различных участков PL-TCM через дисплей (VDU), и программа должна передавать эти значения циклам управления в соответствующей временной последовательности. В полностью автоматическом режиме система должна вычислять все установочные значения через математические модели и передавать их подчиненным системам управления по выбранному каналу передачи данных (тут можно указать конкретный канал передачи данных или оставить это на усмотрение исполнителя).</p>
<h4>2.8.1 Базовый уровень</h4>
<p>Функции, которые должны выполняться системой автоматизации базового уровня, должны охватывать, но не ограничиваться следующим.</p>
<ol>
<li><strong>Функциональность на базовом уровне:</strong></li>
</ol>
<p>Базовый уровень должен охватывать управление всем оборудованием, установление очередности, блокировку, слежение, специализированные технологические функции, хранение графиков прокатки и контрольных таблиц, протоколирование неисправностей и событий и т.д. Некоторые из них перечислены ниже.</p>
<ul>
<li>Блокировки (interlocking), определение очередности (sequencing control) и последовательное управление оборудованием (например, для управления лентами (strips), управления резкой (shear) и т.п.). В том числе для автоматической обработки металлических катушек (coil) на входе и выходе, автоматическую последовательную работу сварочного/переварного (welding/rewelding) аппарата и управление последовательностью заправки лент (strip), а также для кислотной регенерационной системы (кислотного травления для очистки от оксидов, acid regeneration plant).</li>
<li>Расчет диаметра и ширины катушки на входных распределительных барабанах (reels).</li>
<li>Позиционное управление ушками катушек (coils ears) для центрального размещения катушек на стержнях (mandrels).</li>
<li>Генерация эталонных значений скорости для линии в зависимости от условий ее работы и ввода оператора, а также в зависимости от нагрузки на систему управления приводом.</li>
<li>Управление скоростью синхронизации приводов по мере необходимости.</li>
<li>Управление натяжением ленты (положением и прогибом) за счет управления соответствующими приводами и механизмами.</li>
<li>Центрирование валков с механическим приводом (power operated rolls), рулевых валков (steering/dancer rolls); управление положением лафетных вагонов (looper car). Автоматическое управление предварительной настройкой, измерение и контроль для датчика уровня натяжения (tension leveller). При необходимости автоматический контроль положения краев на натяжных барабанах (tension reels).</li>
<li>Контроль начального сдвига (entry shear) для автоматической резки полосы.</li>
<li>Контроль параметров травления (pickling parameters) с учетом скорости полосы в травильном участке.</li>
<li>Автоматическая настройка боковых триммеров (side trimmer).</li>
<li>Захваты, упорядочение и управление устройством для зачистки ленты (scrap baller), если таковое предусмотрено.</li>
<li>Автоматическая калибровка для контроля положения/точного позиционирования (по мере необходимости).</li>
<li>Ручное/автоматическое замедление/остановка ленты в точке сварки (weld point), боковом обрезчике, фрезерном и выходном срезах (mill and exit shear) на нивелире натяжения (т.е. на заданном уровне натяжения).</li>
<li>
<p>Управление технологическими функциями тандемного станка, такими как:</p>
</li>
<li>
<p>датчики натяжения;</p>
</li>
<li>контроль формы;</li>
<li>
<p>контроль прокатных усилий (roll force).</p>
</li>
<li>
<p>Хранение графиков прокатки сдвоенного (тандемного) станка, для всей номенклатуры продукции и всех возможных вариаций. Должны быть составлены подходящие справочные таблицы для операторов по настройке линии/оборудования в качестве руководства.</p>
</li>
<li>Автоматическая смена валков наряду с автоматическим позиционированием шпинделей (spindle).</li>
<li>Управление линией прокатки с учетом данных об износе валков, а также после смены валков.</li>
<li>Автоматическое управление вращающимися резцами перед натяжным валком.</li>
<li>Автоматическое управление очередностью работы контрольных валков.</li>
<li>Обеспечение ручного замедления/остановки ленты, а также контроля “пробега” для проверки дефектов на нивелире натяжения, входа в боковой триммер и выхода после прокатного стана с помощью специальной кнопки (push button station).</li>
<li>Слежение за лентой и изменение установленных значений для обеспечения непрерывной работы с лентами различного размера.</li>
<li>Настройка прокатного стана либо по сохраненному графику прокатки (ручной режим), либо по показаниям технологического процесса (с возможностью выгрузки и модификации оператором) (автоматический и полу-автоматический режим).</li>
<li>Автоматическое управление поточным взвешиванием, маркировкой и круговой обвязкой катушек после их доставки, включая натяжные барабаны.</li>
</ul>
<ol start="2">
<li><strong>Функции для операторов на базовом уровне</strong>:</li>
</ol>
<p>Централизованная система диспетчерского управления должна быть обеспечена специализированными процессорами и MMI (man-machine interface, UI) на базовом уровне. Все необходимые сигналы должны приниматься через систему управления вводом, а также непосредственно от датчиков/устройств. Система должна быть способна выполнять следующие основные действия:</p>
<ul>
<li>Централизованное включение и запуск различных линейных приводов (line drives) и вспомогательных систем (auxiliary system) с помощью мнемосхем (mimic display).</li>
<li>Отображение состояния приводов и электрооборудования завода для технического обслуживания.</li>
<li>Контроль и отображение значений для главных приводов прокатного стана и других приводов большой мощности для аварийных сигналов и аварийного отключения (например температуры обмоток).</li>
<li>Централизованное переключение и индикация состояния распределительных щитов (switchboards) 33 кВ и 6,6 кВ.</li>
<li>Индикация отдельных линейных схем распределительных щитов 33 кВ и 6,6 кВ, главных приводов, линейных вспомогательных приводов и т.д.</li>
<li>Сбор сигналов о неисправностях с различных участков предприятия с возможностью отображения и распечатки сообщений о неисправностях в текстовом виде.</li>
</ul>
<h4>2.8.2 Комплексные функции</h4>
<p><strong>Функциональность на уровне управления процессом.</strong></p>
<p>Уровень управления процессом отвечает за вычисление и управление оптимизацией работы. На этом уровне должны быть реализованы такие функции, как:</p>
<ul>
<li>генерация задаваемых значений с использованием математических моделей,</li>
<li>обучаемое управление,</li>
<li>отслеживание материалов внутри технологической линии/участка цеха,</li>
<li>ввод первичных данных для моделей (включая первичные данные для последующей оптимизации),</li>
<li>управление функциями процесса в реальном времени с учетом данных от базового уровня,</li>
<li>генерация отчетов и т.д.</li>
</ul>
<p><strong>Cпецифические функции</strong>, которые должны выполняться автоматизированной системой.</p>
<ul>
<li>Слежение за катушкой внутри технологической линии/агрегата путем считывания пробитых отверстий (punched holes) по сварным швам (weld seams).</li>
<li>Ввод первичных данных (primary data input, PDI) катушек на входе в PL-TCM с обеспечением последующей выгрузки данных управления производством.</li>
<li>Генерация рабочих значений для прокатного стана с использованием данных PDI, модели стана, модели усилия прокатки, модели мощности, модели контроля толщины полосы, модели контроля формы/профиля с тепловым контролем плоскостности полосы, а также других участков.</li>
<li>Обучающий (адаптивный) контроль с использованием фактических данных и математической модели для расчетов настроек.</li>
<li>Хранение значений положения нивелиров, боковых триммеров.</li>
<li>Ввод данных о дефектах полосы вручную через инспекционную панель на объекте поточного контроля после бокового триммера.</li>
<li>Обработка фактических данных о работе прокатки, создание отчетов и отправка данных на уровень управления производством.</li>
</ul>
<p><strong>Функции информационной системы.</strong></p>
<p>Информационная система, как правило, должна соответствовать следующим функциям:</p>
<ul>
<li>Производственные данные должны быть доступны соответствующему персоналу в виде журналов и отчетов.</li>
<li>Вывод журналов и отчетов в заданное время или при наступлении определенных событий.</li>
<li>Должна быть обеспечена возможность изменения элементов и форматов журналов без дополнительного вмешательства в работу системы.</li>
<li>Записанная в журнале информация должна храниться в течение адекватного периода времени, обеспечивающего доступность исторических данных.</li>
<li>Информация в системе должна проверяться на целостность, достоверность и правдоподобие с последующим оповещением оператора.</li>
</ul>
<p><strong>Пользовательский интерфейс (MMI, UI).</strong></p>
<p>Визуализация в системе должна осуществляться через интерфейс MMI для обеспечения управления и эксплуатации всей линии PL-TCM. Система должна отображать следующие экраны, с возможностью печати на бумажном носителе:</p>
<ul>
<li>Имитация процесса для всей линии PL-TCM с помощью различных схем с выводом информации о состоянии всех важных приводов, а также с фактическими значениями всех важных параметров.</li>
<li>Динамическая информация в виде гистограммы для отображения эталонных и фактических значений важных параметров.</li>
<li>Графики, на которых отображаются тренды важных параметров процессов.</li>
<li>Сбор фактических параметров (среднее/максимальное/минимальное) для всей линии PL-TCM для генерации журналов по отдельным процессам и по производству в целом.</li>
</ul>
<p><strong>Стандарты.</strong></p>
<p>Предлагаемые контроллеры и другое оборудование на базе микропроцессоров должны быть спроектированы/структурированы, изготовлены и испытаны в соответствии с рекомендациями, изложенными в МЭК-1131 (часть 2) (IEC-1131, part 2), с учетом (и за исключением) параметров отраслевых стандартов, принятых соответствующими производителями.</p>
<p><strong>Аппаратное обеспечение.</strong></p>
<p>Аппаратное обеспечение каждого основного контроллера/оборудования должно включать в себя основной блок обработки данных, модули памяти, стабилизированный блок питания, необходимые модули интерфейса связи, вспомогательное запоминающее устройство (при необходимости), модули ввода/вывода (I/O), удаленные станции ввода/вывода и инструмент программирования и отладки (programming and debugging tool, PADT). Аппаратная и программная структура должна быть модульной, чтобы отвечать широкому спектру технологических требований. Модули ввода/вывода должны свободно конфигурироваться в зависимости от требований.</p>
<p><strong>Сеть.</strong></p>
<p>Сетевое обеспечение должно соответствовать следующим спецификациям:</p>
<ul>
<li>На каждом из двух уровней автоматизации все контроллеры и системы должны быть подключены в качестве отдельного узла к соответствующей шине данных локальной сети с использованием стандартизированных аппаратных и программных средств.</li>
<li>Система LAN должна соответствовать стандарту ISO-Open System Interconnect.</li>
<li>Все оборудование на уровне приводов должно быть надлежащим образом связано с базовым уровнем для эффективного обмена данными/сигналами между этими двумя уровнями. Однако все аварийные сигналы и сигналы безопасности должны быть подключены непосредственно к соответствующим контроллерам.</li>
<li>Аналогичным образом системы LAN для базового уровня и уровня управления процессом должна быть надлежащим образом связана соответствующим мостом/интерфейсом для эффективного обмена данными/сигналами. Должна быть также предусмотрена соответствующая связь между уровнем управления процессом и системой автоматизации производства.</li>
<li>Шины передачи данных должны быть сконструированы таким образом, чтобы обеспечивать оптимальную загрузку, и это должно быть четко указано в коммерческом предложении.</li>
<li>Дистанционные вводы/выводы измерительных приборов и машин на микропроцессорной основе (весы, машины для маркировки и кольцевого обвязывания катушек и т.д.) должны быть соединены по последовательным каналам связи (serial) с соответствующими контроллерами.</li>
<li>Персональные компьютеры и рабочие станции должны быть подключены по локальной сети соответствующего уровня.</li>
</ul>
<p><strong>Данные и визуализация.</strong></p>
<p>В отношении безопасности, достоверности и правильной визуализации данных применяются следующие спецификации:</p>
<ul>
<li>Все интерфейсы оператора (включающие цветной дисплей (VDU) и клавиатуру в качестве MMI для взаимодействия с соответствующей системой), должны быть подключены к соответствующей системе локальной сети.</li>
<li>Для предотвращения несанкционированного проникновения в систему должны быть предусмотрены блокировка клавиатуры/пароль.</li>
<li>Должна быть также предусмотрена проверка действительности и плановости входа оператора.</li>
<li>Для систем автоматизации должен быть предусмотрен инженерный пульт, состоящий из процессора, цветного VDU, клавиатуры/мыши и принтера. Консоль должна иметь необходимое аппаратное и программное обеспечение для связи с локальной сетью и иметь доступ ко всей системе. Основными функциями пульта должны быть автономная конфигурация базы данных, разработка программ, документаций и т.д.</li>
</ul>
<p><strong>Прикладное программное обеспечение.</strong></p>
<p>Прикладное программное обеспечение должно быть представлено через программные модули из функциональных блоков, а также программные модули высокого уровня на базе программного обеспечения с соответствующим языком программирования.</p>
<p>Программное обеспечение должно быть удобным для пользователя, снабжено вспомогательными функциями и т.д. Для всей системы должен использоваться только один язык программирования. Однако для простых логических функций может использоваться другой язык программирования последовательного типа. Должно предоставляться только отлаженное и протестированное в промышленных условиях (или разработанное по производственным стандартам) программное обеспечение.</p>
<h4>2.8.3 Обоснование для выбора системы</h4>
<p><strong>Будущее расширение.</strong> Выбор оборудования, стандартного программного обеспечения и сети должен быть таким, чтобы обеспечить оптимальную гибкость для будущего расширения, не влияя на надежность системы.</p>
<p><strong>Надежность.</strong> Система должна быть спроектирована так, чтобы работать в автоматическом или полуавтоматическом режиме в условиях отказа (некоторых подсистем или всей системы в целом).</p>
<p><strong>Запасная емкость.</strong> Система должна иметь достаточную вычислительную емкость для выполнения всех необходимых функций. При этом минимум 30% общей памяти должно оставаться не распределенным для использования в будущем.</p>
<p><strong>Загрузка.</strong> Магистраль данных должна быть спроектирована таким образом, чтобы обеспечить оптимальную загрузку, и это должно быть четко указано в коммерческом предложении.</p>
<p><strong>Структура программного обеспечения и качество программ.</strong> Программы должны быть выполнены на языке высокого уровня, который является эффективным и экономичным для предлагаемой системы с точки зрения модуляризации, скорости кодирования, использования памяти и времени работы. Структура программного обеспечения системы должна быть оптимально распределена/централизована для контроля и управления смежными технологическими областями в соответствии с современным уровнем архитектуры.</p>
<p><strong>Интеграция.</strong> Коммуникационное программное обеспечение должно быть таким, чтобы системы могли независимо общаться между собой и с системой автоматизации базового управления/процессного контроля нижнего уровня (при необходимости). Должна быть предусмотрена возможность взаимодействия системы управления производством PL-TCM с системой управления более высокого уровня (АСУТП), которая в будущем будет развернута для всего металлургического завода.</p>
<p><strong>Программируемость.</strong> Информационная система должна быть спроектирована таким образом, чтобы можно было изменять элементы данных и форматы журналов без излишнего вмешательства в работу системы.</p>
<p><strong>Целостность и защита данных.</strong> Записанная в журнал информация должна храниться в течение соответствующего периода времени, обеспечивающего доступность записи исторических данных. Данные, получаемые системой, должны проверяться на целостность с точки зрения их достоверности и правдоподобия с помощью системы оповещения. Должно обеспечиваться хранение и запись важнейших данных при отключении системы электроснабжения или во время сбоя.</p>
<h3>2.9 Задачи по разделу</h3>
<ol>
<li>Нарисуйте функциональную блок-схему типичного сенсора.</li>
<li>Нарисуйте функциональную блок-схему актуатора.</li>
<li>Рассмотрим электрогидравлический сервопривод клапана (рис. 2.6). Изучите и определите подсистемы актуатора и разделите эти подсистемы на классы элементов.</li>
<li>Нарисуйте блок-схему типичной промышленной системы управления 1 уровня.</li>
<li>Рассмотрим систему управления положением с приводом от двигателя, как это обычно бывает в приводах станков с ЧПУ (рис. 2.9). Определите основные датчики обратной связи в системе. Определить основные источники помех. Чем такой привод отличается от автоматической конвейерной системы?</li>
<li>Укажите основное различие системы последовательного логического управления от аналоговых систем управления.</li>
<li>Приведите пример и опишите промышленную систему, использующую дискретные датчики и дискретные исполнительные механизмы.</li>
<li>Назовите три основные функции системы диспетчерского контроля.</li>
<li>Изложить три основные функции системы управления производством.</li>
<li>Изучить и выяснить конкретные виды деятельности для контроля производства на любом типичном заводе. Нарисуйте пирамиду автоматизации и определите уровни.</li>
<li>Укажите три основные характеристики системы автоматизации, упомянутые в приложении А (раздел 2.8).</li>
</ol>
<h2 id='3-Measuring_syst'> 3. Основные характеристики измерительных систем</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<h3>3.1 Введение и цели</h3>
<p>Раздел посвящен основным параметрам (измерительным и статистическим), которые, как правило, приводятся в спецификациях на тот или иной сенсор. Не забываем, что ваш основной документ - это <strong>характеристика (specification, datasheet)</strong>, которая предоставляется производителем сенсора/актуатора (да и любого другого устройства в электронике). Часто, эти спецификации используют различный стиль и терминологию, что может сбивать с толку. Однако всякий датчик характеризуется соотношениями между измеряемой величиной (вход) и его выходной величиной (которую он порождает на выходе в ответ на измеряемую величину). И существует всего <strong>два основных типа</strong> таких характеристик:</p>
<ul>
<li><strong>статические (включая случайную природу)</strong>;</li>
<li><strong>динамические</strong>.</li>
</ul>
<p>Как мы уже говорили ранее, сенсор - это некая система (черный ящик). И, как и любая другая система, она может находиться в одном из двух <strong>режимов</strong>: стационарном (установившемся) и переходном (не путать со статическим и динамическим - это разные вещи).</p>
<blockquote>
<p><strong>Задача</strong>. Подумайте почему стационарный и переходный режимы и статические и динамические характеристики не одно и тоже. Приведите примеры.</p>
</blockquote>
<ol>
<li>
<p><strong>Стационарный (установившийся) режим</strong> – обусловлен постоянным во времени расхождение между истинным значением регулируемой величины и ее заданным значением (отношение вход/выход - постоянная величина). Стационарный режим работы системы в свою очередь <strong>может быть двух видов</strong>: статический и динамический.</p>
<ul>
<li><strong>Статический стационарный режим</strong> – это режим, при котором система находится в состоянии покоя вследствие того, что все внешние воздействия и параметры системы не меняются во времени. Другими словами, скорость изменения выходного параметра системы равна нулю (например, так работает любой электронный усилитель). Т.е. существующая ошибка управления стремится к постоянному значению, зависящему от величины воздействия (но не зависящему от времени). Обычно такой режим представляют в линейном виде (прямая с коэффициентом наклона <span class="math">\(k\)</span>). Если модель объекта нелинейна, то обычно ее преобразуют к линейному виду путем линеаризации (например логарифмирование и т.п.).</li>
<li>
<p><strong>Динамический стационарный режим</strong> – это режим, при котором приложенные к системе внешние воздействия изменяются по какому-либо установившемуся закону. В результате чего система переходит в режим установившегося вынужденного движения, т. е. скорость или ускорение выходного параметра системы постоянно во времени. Такой режим используется для снятия частотных характеристик и бывает двух типов:</p>
<ul>
<li>детерминированный динамический стационарный режим – при котором на систему действуют детерминированные (регулярные) динамические стационарные воздействия (например, гармонические колебания).</li>
<li>случайный динамический стационарный режим – при котором на систему действуют случайные динамические стационарные функции (TODO: привести пример).</li>
</ul>
</li>
</ul>
</li>
<li>
<p><strong>Переходный режим</strong> – режим изменения во времени различных переменных системы (фазовые или выходные параметры, скорость или ускорение), в ходе которого система стремится к стационарному режиму (изменяет свое состояние и стремится перейти в новый или вернуться в старый стационарный режим).</p>
</li>
</ol>
<blockquote>
<p><strong>Примечание</strong>. Изменение во времени или ускорение можно оценить через производную.</p>
</blockquote>
<p>Далее мы кратко рассмотрим характеристики каждого из режимов работы системы и параметры, которыми она обладает</p>
<h3>3.2 Статические характеристики стационарного режима работы системы</h3>
<p>Для такой системы любое ее звено (а как следствие и вся система) описывается уравнениями вида <span class="math">\(y = F(x,f)\)</span>, в которых отсутствует параметр времени <span class="math">\(t\)</span>. Соответствующие им <strong>графики называются статическими характеристиками</strong> системы.</p>
<p>Статическую характеристику часто изображают графически с учетом количества входов (<a href="https://studfile.net/preview/15340808/page:9/">рис. 3.1</a>). По сути это <strong>калибровочная кривая</strong> (градуировка) - зависимость отклика датчика от входящего параметра. Важно! - вид данной характеристики не зависит от времени.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-1-1.png" alt="Linearity" width="600px"/>
</td>
<td>
<i>
Рис. 3.1. Схема включения (а) и статические характеристики (б) однотактного индуктивного датчика с плоскопараллельным воздушным зазором: 1 - идеальная (холостой ход) и 2 - реальная (нагрузочная).
</i>
</td>
</tr>
</table>
</div>
<p>В качестве другого примера рассмотрим обычный механический рычаг. Его можно рассматривать как “сенсор”, функцией которого является усиление (или ослабление) входящего сигнала (давим с одной стороны, чтобы применить силу с другой стороны рычага). Тогда статическая характеристика для него имеет вид <span class="math">\(y = kx\)</span>. При это входной сигнал будет меняться в <span class="math">\(k\)</span> раз. Коэффициент <span class="math">\(k = y/x\)</span> (отношение выходной и входной величины, в нашем случае - плечи рычага) называется <strong>коэффициентом усиления звена</strong> (звено в нашем случае - это сам рычаг). Когда входная и выходная величины имеют разную природу (т.е. коэффициент имеет размерность), его называют <strong>коэффициентом передачи</strong>.</p>
<p>Для статических характеристик есть ряд параметров, которые нужно учитывать:</p>
<ol>
<li>
<p><strong>Диапазон (R, range, span)</strong> - определяет минимальное и максимальное значения входных и выходных значений для которых рекомендуется использовать устройство. Как правило, берется диапазон в котором отклик устройства будет линеен (например, <span class="math">\(100-500^o C\)</span> для термометра).</p>
</li>
<li>
<p><strong>Чувствительность (k, sensitivity)</strong> - отношение между выходным и входным сигналом (обычно чем больше, тем лучше). Определяя чувствительность, принимают линейность входных-выходных характеристик (для определенного <strong>диапазона</strong>). Например, если чувствительность термопары <span class="math">\(\frac{10 мкВ}{^o C}\)</span>, то она указана для “линейного” рабочего диапазона. </p>
<blockquote>
<p><strong>Задача</strong>. Более наглядно понятие чувствительности проявляется для пружины: как думаете о чем нам говорит величина 25 мм/кг?</p>
<p><strong>Примечание</strong>. Чувствительность - не константа, она может зависеть от внешних условий эксплуатации (например, температуры). Подобное явление называется <strong>дрейф чувствительности</strong>. Для устранения подобного дрейфа в точных приборах используют контроль внешних параметров и их учет.</p>
<p><strong>Пример</strong>. Допустим, чувствительность пружины при <span class="math">\(20^o C\)</span> составляет 25 мм/кг, а при <span class="math">\(30^o C\)</span> - 27 мм/кг. Тогда дрейф чувствительности равен <span class="math">\(0.2 \frac{мм}{кг} \cdot \frac{1}{^o C}\)</span>.</p>
</blockquote>
</li>
<li>
<p><strong>Линейность (О, linearity)</strong> - максимальное отклонение от линейной модели. На практике зависимость выходного сигнала от входа обычно не линейна и нам нужно вводить различные коэффициенты (приближения), которые и характеризуют понятие <strong>линейности прибора</strong> (рис. 3.1, рис. 3.2).</p>
</li>
</ol>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-1.png" alt="Linearity" width="600px"/>
</td>
<td>
<i>
Рис. 3.2. Линейность устройства.
</i>
</td>
</tr>
</table>
</div>
<div class="math">$$
Linearity = \frac{\Delta O}{O_max - O_min}
$$</div>
<p> где <span class="math">\(\Delta O = max(\Delta O_1, \Delta O_2)\)</span>.</p>
<blockquote>
<p><strong>Примечание</strong>. Кроме коэффициента линейности, для оценки линейности и вида взаимосвязи между двумя величинами используют различные статистические параметры, такие как коэффициенты корреляции (Пирсона, Спирмана и др.).</p>
</blockquote>
<ol start="4">
<li>
<p><strong>Линейный диапазон работы (linear range)</strong> - диапазон входного сигнала, при котором мы получаем линейный отклик. Особенно важная характеристика для проведения точных измерений и если у датчика малая чувствительность.</p>
</li>
<li>
<p><strong>Гистерезис (Hys. %, Hysteresis)</strong> - отклонение между возрастанием и убыванием сигнала (т.е. при одинаковом входном сигнале может быть разный выходной сигнал). Данное явление существует, как правило, в магнитных полях, но не ограничивается ими. Например, на рис. 3.3 показано отклонение манометра мембранного типа для одного и того же давления (возрастающего и убывающего).</p>
</li>
</ol>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-2.png" alt="Hysteresis" width="600px"/>
</td>
<td>
<i>
Рис. 3.3. Гистерезис на примере манометра мембранного типа для одного и того же давления (возрастающего и убывающего).
</i>
</td>
</tr>
</table>
</div>
<div class="math">$$
Hysteresis = \frac{H}{O_{max} - O_{min}} \cdot 100
$$</div>
<p> где <span class="math">\(H\)</span> - максимальный гистерезис (максимальная разница результатов при одинаковом входящем сигнале).</p>
<ol start="6">
<li>
<p><strong>Разрешение (Res. %, resolution)</strong> - сколько информации от входящего сигнала содержится в выходящем. Другими словами, разрешение определяет минимальное детектируемое изменение во входящем сигнале:</p>
<p>
<div class="math">$$Resolution = \frac{\Delta I}{I_{max} - I_{min}} \cdot 100$$</div>
</p>
<p>Коэффициент между измеряемым диапазоном и разрешением часто выражается в виде <strong>динамического диапазона (Дб, dB)</strong> (привет наушникам) и определяется как:</p>
<p>
<div class="math">$$Dynamic\_range = \frac{measurment\_range}{resolutions}$$</div>
</p>
<blockquote>
<p><strong>Пример</strong>. Восьми битный двоичный АЦП (ADC) преобразователь со входящим сигналом +5В может измерить минимальное напряжение <span class="math">\(\frac{5}{2^8-1}\)</span> или 19.6 мВ (напомним, что двоичный 8-разрядный АЦП способен выдать 255 дискретных значений (0…255), поскольку <span class="math">\(2^8 = 256\)</span> и 1 тратится на аппаратные затраты).</p>
<p>При этом динамический диапазон n-битного ADC приблизительно равен <span class="math">\(6 \cdot n\)</span> дБ.</p>
<p><strong>Разбор</strong>. Для АЦП динамический диапазон соответствует количеству бит, которые используются для цифровизации аналогового сигнала. Для идеального n битного АЦП минимальное детектируемое значение - это минимальный значимый бит (least significant bit, LSB). Тогда максимальное значение будет <span class="math">\((2n - 1) \cdot \text{LSB value}\)</span>.</p>
<p>Тогда:</p>
<p><span class="math">\(DR = 20 \cdot log_{10}(\frac{(2n-1) \cdot LSB}{LSB}) \approx 6.02 \cdot n\)</span> (dB).</p>
<p>Таким образом, с 10-битным двоичным АЦП мы ожидали бы динамический диапазон 6.02 дБ. Кроме того, надо учитывать, что 10 битный двоичный АЦП сможет разрешать амплитуды сигналов от <span class="math">\(x\)</span> до <span class="math">\(2^{10}x = 1024x\)</span>, где <span class="math">\(x\)</span> - это минимально допустимый уровень, который может быть обнаружен.</p>
</blockquote>
</li>
<li>
<p><strong>Точность (accuracy, случайная природа)</strong> - близость измеренного значения к фактическому или истинному значению, выражается в виде максимальной погрешности (<em>измеренное значение - истинное значение</em>) в процентах от максимального показания шкалы (это читерство, но для сенсоров так и делают!). Учитывает случайную и систематическую погрешности.</p>
<p>Например, если точность термометра в диапазоне <span class="math">\(0-500^oC\)</span> задана как <span class="math">\(\pm 0.5%\)</span>, то измеренное значение всегда будет находиться в пределах <span class="math">\(\pm 2.5^oC\)</span> от истинного (измеренного с помощью поверенного прибора в процессе калибровки). Но, при <span class="math">\(250^oC\)</span>, ошибка также будет <span class="math">\(\pm 2.5^oC = 1 %\)</span> <strong>(!)</strong>. Поэтому всегда лучше выбирать шкалу измерений, где входной сигнал близок к максимальному значению. При этом не забываем, что истинную величину всегда трудно получить, для ее измерения используют стандартные калиброванные приборы в специальных лабораториях.</p>
</li>
<li>
<p><strong>Воспроизводимость (прецизионность, случайная природа)</strong> - повторяемость показаний прибора (не путать с точностью!). Если мы будем измерять одну и ту же величину в течении интервала времени (например, в течение дня), то показания расположатся в определенном интервале в случайном порядке (случайная погрешность).</p>
<p>Эти случайные колебания показаний (в основном с гауссовым распределением) часто обусловлены случайными колебаниями ряда факторов, которые не были приняты во внимание при измерении переменной. При использовании прецизионного прибора последовательно полученные значения будут очень близким, но не одинаковыми по своим абсолютным значениям, а <em>стандартное отклонение</em> будет очень малым.</p>
<p>Количественно, точность может быть выражена через воспроизводимость следующим образом:</p>
<p>
<div class="math">$$Precision = \frac{\text{measured range}}{\sigma_e}$$</div>
</p>
<p>Нужно четко понимать различие между воспроизводимостью и точностью (рис. 3.5)!</p>
<p>Воспроизводимость гарантирует повторение последовательных показаний (т.е. случайная погрешность мала), но не гарантирует их точность - измерения могут быть близки друг к другу, но далеки от истинного значения (систематическая погрешность велика). С другой стороны, точный прибор должен быть и воспроизводимым (т.е. случайная ошибка должна быть мала).</p>
<p>Для статической характеристики обычно используют прямую пропорциональную зависимость между установившимися значениями входной и выходной величин (очень часто весьма приближенно). Зависимость между установившимися значениями входной и выходной величин применительно к датчикам также называют калибровочной кривой (тарировочной, градуировочной).</p>
</li>
</ol>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-4.png" alt="Precision VS Accuracy" width="600px"/>
</td>
<td>
<i>
Рис. 3.5. Точность и воспроизводимость (случайная и систематическая погрешность).
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Примечание.</strong> В ряде случаев для удобства дальнейшего анализа фактическая нелинейная статическая характеристика датчика в определенных пределах измерения и с определенным влиянием на показания этого датчика может быть приближенно заменена неким линейным эквивалентом. Операция такой замены, по существу, означает разложение нелинейной функциональной зависимости, связывающей выходную и входную величины, в степенной ряд Тейлора с последующим отбрасыванием членов разложения 2-го и более высоких порядков. В определенных условиях такая операция является допустимой, и тогда она носит название линеаризации.</p>
</blockquote>
<h3>3.3 Динамические характеристики стационарного режима работы системы</h3>
<p>Под динамической характеристикой датчика понимают <strong>поведение выходной величины во время переходного процесса (в ответ на изменение его входной величины)</strong>.</p>
<p>Если в статической характеристике датчика строится зависимость только между значениями выходной величины <span class="math">\(Y\)</span> и входной величины <span class="math">\(X\)</span>, то в динамической характеристике датчика участвует также и параметр времени <span class="math">\(t\)</span> (динамическая характеристика описывается зависимостью вида <span class="math">\(Y(t)\)</span>).</p>
<blockquote>
<p><strong>Пример</strong>. Такие характеристики описывают “скорость реакции на изменения”. Например, человеческий глаз не может обнаружить ни одного события, продолжительность которого составляет менее одной десятой секунды (динамические характеристики человеческого глаза не очень). К этому же виду параметров относится и “мертвое время детектора” - сколько измерений в единицу времени детектор упускает из рассмотрения за счет их большой скорости изменения.</p>
</blockquote>
<p>Для сравнения динамических характеристик различных датчиков принято считать, что при прочих равных условиях на их входы поступают воздействия одного и того же вида, а именно — ступенчатые. Это означает мгновенный «наброс» входной величины. На практике это соответствует, например, подаче напряжения на электродвигатель либо помещению термопары в закалочную печь и т. д. Двигатель будет набирать обороты не мгновенно, а в соответствии с динамическими свойствами привода, в который он включен. Точно так же показания термопары начнут отражать температуру в печи не мгновенно, а по мере разогрева ее спая и т. д. Характерные примеры динамических характеристик датчиков приведены на рис. 3.5.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-4-1.png" alt="Dynamic characteristic" width="600px"/>
</td>
<td>
<i>
Рис. 3.5. Динамические характеристики датчиков при ступенчатом входе. Разбор каждого случая приведен ниже.
</i>
</td>
</tr>
</table>
</div>
<p>На рис. 3.5 (а) приведено <strong>“чистое запаздывание”</strong> в датчике, когда его выходная величина просто повторяет в определенном масштабе входную величину, запаздывая по отношению к ней на постоянную величину.</p>
<p>На рис. 3.5 (б) показан апериодический характер переходного процесса, когда выходная величина постепенно приближается к новому установившемуся значению монотонным образом (монотонно убывая или, как показано на рисунке, монотонно возрастая).</p>
<p>Рис. 3.5 (в) соответствует так называемому колебательному характеру переходного процесса, когда выходная величина постепенно приближается к новому установившемуся значению, совершая за время переходного процесса одно или несколько колебаний, превышая на время новое значение выходной величины, а затем возвращаясь к нему.</p>
<p>Динамические процессы в датчиках характеризуются так называемыми <strong>показателями качества переходного процесса</strong>:</p>
<ul>
<li>время завершения переходного процесса;</li>
<li>величина превышения выходного параметра над его новым установившимся значением (в течение переходного процесса);</li>
<li>степень колебательности (число колебаний) переходного процесса.</li>
</ul>
<p>Кроме того, часто используется так называемый <strong>интегральный показатель качества</strong> переходного процесса, обычно представляющий собой площадь под кривой переходного процесса (т.е. интеграл).</p>
<p>Математически, динамические характеристики устройства обычно выражаются дифференциальным уравнением, связывающим входные и выходные величины. Для этого используют понятие <strong>передаточной функции</strong>. Эта функция - компактное описание взаимосвязи входящих и выходящих величин (как правило, через дифференциальные уравнения).</p>
<blockquote>
<p><strong>Примечание.</strong> Помимо передаточной функции, математическая модель системы может быть представлена аналитически (другими уравнениями), графически (переходными или частотными характеристиками) или в табличной форме.</p>
</blockquote>
<p>В зависимости от используемых операторов линейные непрерывные модели делят на <strong>временные и частотные</strong>. К временным моделям относятся те, у которых аргументом является время. Это дифференциальные и разностные уравнения, записанные в явном виде или в операторной форме. Частотные модели предусматривают использование переменных операторов, аргументом которых является частота соответствующего сигнала (операторы Лапласа, Фурье и т. д).</p>
<p>В завершении раздела подчерку еще раз, что как вход, так и выход в случае динамических систем являются переменными по времени. Система с одним входом и одним выходом называется <strong>SISO</strong> (Single Input Single Outlet Output - система с одним входом и одним выходом), существуют так же и <strong>MIMO</strong> системы (Multi Input Multi Output), но в рамках настоящего курса мы будем работать только к системам SISO.</p>
<h4>3.3.1 Передаточная функция (transfer function) (TODO: разобрать примеры подробнее, конкретно - что делать со временным сдвигом?)</h4>
<p>Передаточная функция представляет собой удобное представление линейной и неизменной во времени динамической системы. Математически, передаточная функция является дифференциальной функцией комплексных переменных (для систем с конечной размерностью). Передаточную функцию можно получить с помощью эксперимента или алгебраических манипуляций с дифференциальными уравнениями, описывающими систему.</p>
<p><strong>Дифференциальные уравнения.</strong></p>
<p>Самым простым представлением системы является обычное дифференциальное уравнение (ODE, любое движение, а значит и динамический процесс в системах автоматического управления можно математически описать в виде дифференциального уравнения).</p>
<p>Дифференциальное уравнение представляет собой аналитическую зависимость, связывающую изменение выходной величины <span class="math">\(у\)</span> от входной <span class="math">\(х\)</span>, с учетом скорости и ускорения данных величин (т.е. с учетом их изменения во времени). <strong>Порядок или степень дифференциального уравнения</strong> – наибольший порядок производных, входящих в него. Вид дифференциального уравнения зависит от свойств системы. В простейших случаях это линейные дифференциальные уравнения с постоянными коэффициентами.</p>
<blockquote>
<p><strong>Примечание</strong>. При работе с обычными дифференциальными уравнениями зависимые переменные являются функцией положительной вещественной переменной <span class="math">\(t\)</span> (часто это время). Применяя <strong>трансформацию Лапласа</strong>, мы переключаемся с функции времени на функцию сложной переменной <span class="math">\(s\)</span> (частота) и дифференциальное уравнение становится алгебраическим уравнением.</p>
</blockquote>
<p>Всегда удобно выражать динамические характеристики на входе-выходе в виде линейного дифференциального уравнения. Поэтому часто нелинейная математическая модель линеаризируется и только потом вычисляется передаточная функция и порядок системы.</p>
<p>Графически, линеаризацию некоторого уравнения от двух переменных <span class="math">\(F(х,у) = 0\)</span> в окрестности некоторой точки <span class="math">\((х_0, у_0)\)</span> можно представить как замену рассматриваемого участка кривой на касательную (<a href="https://kr.mathworks.com/help/slcontrol/ug/linearizing-nonlinear-models.html">рис. 3.6</a>), уравнение которой определяется по формуле</p>
<div class="math">$$
\frac{\delta F}{\delta x} dx + \frac{\delta F}{\delta y} dy = 0
$$</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-4-2.png" alt="Linearization" width="600px"/>
</td>
<td>
<i>
Рис. 3.6. Линеаризация в графической форме (https://kr.mathworks.com/help/slcontrol/ug/linearizing-nonlinear-models.html).
</i>
</td>
</tr>
</table>
</div>
<p>Это один их способов линеаризации нелинейного уравнения. Другой способ заключается в разложении в ряд Тейлора. Пусть в установившемся режиме части системы (или ее звена) описываются нелинейным алгебраическим уравнением <span class="math">\(y = f(x)\)</span>, а входная и выходная величины имеют значения <span class="math">\(х_0\)</span> и <span class="math">\(y_0\)</span>. Тогда нелинейную функцию можно разложить в ряд Тейлора в окрестностях выбранной точки <span class="math">\((х_0, y_0)\)</span> и, отбросив члены ряда выше первого порядка, получить выражение</p>
<div class="math">$$
\begin{equation}\begin{aligned}
y & \approx f(x_0) + (\frac{df}{dx})_0 (x - x_0)\\
y - f(x_0) & = k \Delta x\\
\Delta y & = k \Delta x
\end{aligned}\end{equation}
$$</div>
<p> где <span class="math">\((\frac{df}{dx})_0\)</span> - производная функции по <span class="math">\(x\)</span> в установившемся режиме (т.е. это касательная в точке <span class="math">\(x_0\)</span>) при этом данная касательная выражается тангенсом угла наклона (мы ее заменяем на коэффициент <span class="math">\(k = tg \alpha\)</span>).</p>
<p><strong>Преобразование Лапласа</strong></p>
<p>Такое преобразование “переключает” функции времени на функцию частоты (сложной переменной). Например, функционирование некоторой системы описывается уравнением вида</p>
<div class="math">$$
a_0 \frac{d^2 y}{dt^2} + a_1 \frac{dy}{dt} + a_2 y = b_0 \frac{dx}{dt} + b_1 x
$$</div>
<p> где <span class="math">\(х\)</span> и <span class="math">\(у\)</span> – входная и выходная величины.</p>
<p>Если в данное уравнение вместо <span class="math">\(x(t)\)</span> и <span class="math">\(y(t)\)</span> подставить функции <span class="math">\(X(p)\)</span> и <span class="math">\(Y(p)\)</span> комплексной переменной величины <span class="math">\(p\)</span>, такие, что:</p>
<div class="math">$$
\begin{equation}\begin{aligned}
X(p) & = \int_0^\inf x(t) e^{-pt} dt
Y(p) & = \int_0^\inf y(t) e^{-pt} dt
\end{aligned}\end{equation}
$$</div>
<p>Таким образом, исходное уравнение при нулевых начальных условиях равносильно линейному алгебраическому уравнению</p>
<div class="math">$$
a_0 p^2 Y(p) + a_1 p Y(p) + a_2 Y(p) = b_0 p X(p) + b_1 p X(p)
$$</div>
<p> где <span class="math">\(p = \frac{d}{dt}\)</span></p>
<p>Переход от одной модели (временной) к другой (частотной) достаточно прост и заключается в замене дифференциалов <span class="math">\(\frac{d^n}{dt^n}\)</span> на операторы <span class="math">\(p^n\)</span>, интегралов <span class="math">\(\int \dots dt\)</span> на множители <span class="math">\(\frac{1}{p}\)</span>, а самих переменных от времени <span class="math">\(x(t)\)</span> и <span class="math">\(y(t)\)</span> – на их частотные проекции <span class="math">\(X(p)\)</span> и <span class="math">\(Y(p)\)</span>.</p>
<p>Такой переход от дифференциальных к алгебраическим уравнениям называется <strong>прямым преобразованием Лапласа</strong>, формулы преобразований - формулами прямого преобразования Лапласа, а полученное уравнение - <strong>операторным уравнением или уравнением в операторной форме</strong>.</p>
<p>Само преобразование Лапласа обозначается как</p>
<div class="math">$$
L[x(t)] = X(p)
$$</div>
<p>При этом <span class="math">\(x(t)\)</span> называют оригиналом, а <span class="math">\(X(p)\)</span> - изображением. Для обратного перехода от операторного уравнения к функциям от времени используется <strong>метод обратного преобразования Лапласа</strong>. Общая формула обратного преобразования Лапласа:</p>
<div class="math">$$
x(t) = L^{-1} [X(p)] = \frac{1}{2 \pi} \int_{- \inf}^{+\inf} X(p) e^{pt} dt
$$</div>
<p>Эта формула достаточно сложна и поэтому были разработаны специальные <a href="https://tutorial.math.lamar.edu/classes/de/Laplace_Table.aspx">таблицы</a>, в которые сведены наиболее часто встречающиеся изображения функций <span class="math">\(X(p)\)</span> и их оригиналы <span class="math">\(x(t)\)</span>. Таким образом, описание линейных непрерывных систем может быть представлено через преобразование Лапласа в операторной форме, что позволяет нам уйти от временной неопределенности системы (+ есть “таблицы красных мячиков”, так любимые инженерами из анекдотов).</p>
<p><strong>Передаточная функция</strong></p>
<p>Следующая возможность описания временных уравнений являются передаточные функции. Это своего рода математические модели систем регулирования, поскольку они полностью характеризуют динамические свойства систем.</p>
<p>Передаточной функцией называется <strong>отношение изображения выходного сигнала <span class="math">\(Y(p)\)</span> к изображению входного воздействия <span class="math">\(X(p)\)</span></strong> при нулевых начальных условиях:</p>
<div class="math">$$
W(p) = \frac{Y(p)}{X(p)}
$$</div>
<p>Разберем эту функцию подробнее. Допустим дифференциальная форма некой системы выглядит следующим образом</p>
<div class="math">$$
a_0 \frac{d^n y}{dt^n} + a_{1} \frac{d^{n-1} y}{dt^{n-1}} + ... + a_n y = \\
= b_0 \frac{d^m u}{dt^m} + b_{1} \frac{d^{m-1} u}{dt^{m-1}} + ... + b_1 \frac{du}{dt} +b_m u
\tag{3.1}\label{eq3.1}$$</div>
<p> где <span class="math">\(u\)</span> и <span class="math">\(y\)</span> сигналы на входе и выходе системы соответственно.</p>
<p>Учтем, что </p>
<ol>
<li>Каждое дифференциальное уравнение можно представить в полиномиальной форме как мы разбирали ранее</li>
</ol>
<div class="math">$$
\begin{cases}
a(s) &= a_0 s^n + a_1 s^{n-1} + a_2 s^{n-2} + ... + a_{n-1}s + a_n\\
b(s) &= b_0 s^m + b_1 s^{m-1} + b_2 s^{m-2} + ... + b_{m-1}s + b_m
\end{cases}
$$</div>
<p> где <span class="math">\(b(s)\)</span> и <span class="math">\(a(s)\)</span> - полиномы, характерные для нашей системы (вход и выход соответственно).</p>
<ol start="2">
<li>Вход задается уравнением <span class="math">\(u(t) = e^{st}\)</span>. Тогда и выход системы также будет функцией подобного вида (по условию система линейна): <span class="math">\(y(t) = y_0 e^{st}\)</span>. </li>
</ol>
<p>Подставив все в уравнение <span class="math">\(\eqref{eq3.1}\)</span> получим</p>
<div class="math">$$(a_0 s^n + a_1 s^{n-1} + ... + a_n) y_0 e^{st} = (b_0 s^m + b_1 s^{m-1} + ... + b_m) e^{st}$$</div>
<p>Если <span class="math">\(a(s) \neq 0\)</span>, то:</p>
<div class="math">$$
\begin{equation}\begin{aligned}
y(t) = y_0 e^{st} = \frac{b(s)}{a(s)} e^{st} = G(s) u(t)
\end{aligned}\end{equation}
\tag{3.2}\label{eq3.2}
$$</div>
<p>Где <span class="math">\(G(s)\)</span> - передаточная функция системы (transfer function of the system), характеризующая отношения входного сигнала к выходному. <span class="math">\(m < n\)</span> и <span class="math">\(n\)</span> называется порядком системы (обычно 0, 1 или 2), а <span class="math">\(s\)</span> - оператор передаточной функции (уравнение для сигнала).</p>
<blockquote>
<p><strong>Пример 3.1</strong>. Передаточная функция <span class="math">\(G(s) = 1 / s\)</span> соответствует дифференциальному уравнению <span class="math">\(\frac{dy}{dt} = u\)</span> и устройству - <strong>интегратору</strong>. В свою очередь <span class="math">\(G(s) = s\)</span> соответствует <span class="math">\(y = \frac{du}{dt}\)</span> - <strong>дифференциатору</strong>.</p>
<p><strong>Пример 3.2.</strong> Передаточные функции временной задержки. Задержка по времени соответствует многим системам, для которых соотношение вход/выход равно:</p>
<p>
<div class="math">$$y(t) = u(t - T)$$</div>
</p>
<p>Предположим вход <span class="math">\(u(t) = e^{st}\)</span>, а выход: <span class="math">\(y(t) = y_0 e^{st}\)</span>, тогда:</p>
<p>
<div class="math">$$y(t) = y_0 e^{st} = e^{s(t-T)} = e^{-sT} e^{st} = e^{-sT} u(t)$$</div>
</p>
<p>Передаточная функция при временной задержке: <span class="math">\(G(s) = e^{-sT}\)</span> - не рациональная функция.</p>
<p><strong>Примечание.</strong> В выводе формул используется экспонента, поскольку такие сигналы играют значимую роль в линейных системах (например, импульсный ответ линейной системы). Большая часть сигналов может быть представлена в экспоненциальной форме или как линейная комбинация таких форм. Неизменный сигнал, будет выражаться как: <span class="math">\(e^{at}\)</span> при <span class="math">\(a=0\)</span>. Затухающий синусоидальный и косинусоидальный сигнал: <span class="math">\(e^{(\sigma + i \omega)t} = e^{\sigma t} e^{i \omega t} = e^{\sigma t} (sin(\omega t) + i cos(\omega t))\)</span>.</p>
</blockquote>
<p>Далее описаны некоторые примеры систем с их передаточными функциями.</p>
<h4>3.3.2 Примеры систем и их передаточных функций</h4>
<p><strong>1. Потенциометр</strong></p>
<p>Этот сенсор (рис. 3.5) не имеет элементов накопления энергии, а выходное напряжение может быть связано с входным сигналом (длина потенциометра) через уравнение:</p>
<div class="math">$$
e_0(t) x_t = Ex_i(t)
$$</div>
<p>или</p>
<div class="math">$$
\begin{equation}\begin{aligned}
\frac{e_0(t)}{x_i(t)} = \frac{E}{x_t} = const = G(s)
\end{aligned}\end{equation}
\tag{3.3}\label{eq3.3}
$$</div>
<p> где <span class="math">\(x_t\)</span> - общая длина потенциометра, <span class="math">\(E\)</span> - действующее напряжение. Это <strong>система нулевого порядка</strong>.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-5.png" alt="Potentiometer" width="600px"/>
</td>
<td>
<i>
Рис. 3.5. Потенциометр.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Задача.</strong> Подумайте, что обозначает <span class="math">\(s\)</span> при работе с передаточными функциями и чему равно <span class="math">\(s\)</span> в данном примере?</p>
</blockquote>
<p><strong>2. Термопара</strong>. </p>
<p>Обычная термопара (рис. 3.6) имеет горячий спай (рабочий конец) определенной массы (<span class="math">\(m\)</span>).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-6.png" alt="Termocouple" width="600px"/>
</td>
<td>
<i>
Рис. 3.6. Термопара.
</i>
</td>
</tr>
</table>
</div>
<p>Если термопара погружена в жидкость при температуре <span class="math">\(T_f\)</span>, тогда ее динамические характеристики (связанные с выходным напряжением <span class="math">\(e_0\)</span> и температурой на входе <span class="math">\(T_f\)</span>) могут быть выражены следующей передаточной функцией:</p>
<div class="math">$$
\begin{equation}\begin{aligned}
\frac{e_0(t)}{T_f(t)} = \frac{K_v}{1+s \tau} = G(s)
\end{aligned}\end{equation}
\tag{3.4}\label{eq3.4}
$$</div>
<p> где</p>
<ul>
<li><span class="math">\(K_v\)</span> - установившаяся чувствительность для напряжения термопары, выраженная в <span class="math">\(В/^oC\)</span>.</li>
<li><span class="math">\(\tau\)</span> - константа времени для термопары <span class="math">\(=\frac{mC}{hA}\)</span> [с]</li>
<li><span class="math">\(m\)</span> - масса горячего спая (рабочий конец) [кг]</li>
<li><span class="math">\(C\)</span> - <a href="https://ru.wikipedia.org/wiki/%D0%A3%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D1%91%D0%BC%D0%BA%D0%BE%D1%81%D1%82%D1%8C">удельная теплоемкость</a> [Дж/(кг·К)]</li>
<li><span class="math">\(h\)</span> - <a href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0#%D0%9A%D0%BE%D1%8D%D1%84%D1%84%D0%B8%D1%86%D0%B8%D0%B5%D0%BD%D1%82_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8">коэффициент теплопередачи</a> [Вт/(м2·К)]</li>
<li><span class="math">\(A\)</span> - площадь поверхности горячего спая [м2].</li>
</ul>
<p>Таким образом, обычная термопара является сенсором первого порядка (<span class="math">\(s=1\)</span>, линейная функция). Но если термопара помещена в металлический защитный кожух (как это обычно делается в промышленности), то порядок системы увеличивается за счет дополнительного энергоаккумулирующего элемента (тепловой массы кожуха), и она становится системой второго порядка (<span class="math">\(s=2\)</span>, квадратичная функция).</p>
<p><strong>3. Датчики вибрации</strong></p>
<p>Сейсмические датчики (seismic sensor, рис. 3.7) обычно используются для измерений вибраций и ускорения.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-7.png" alt="Seismic sensor" width="600px"/>
</td>
<td>
<i>
Рис. 3.7. Датчик вибрации.
</i>
</td>
</tr>
</table>
</div>
<p>Передаточная функция (связь) между входящим смещением <span class="math">\(x_i\)</span> и выходящим смещением <span class="math">\(x_0\)</span> выражается как</p>
<div class="math">$$
\begin{equation}\begin{aligned}
\frac{x_0(t)}{x_i(t)} = \frac{Ms^2}{Ms^2 + Bs + K} = G(s)
\end{aligned}\end{equation}
\tag{3.5}\label{eq3.5}
$$</div>
<p> где</p>
<ul>
<li><span class="math">\(M\)</span> - масса вибрирующего тела [г]</li>
<li><span class="math">\(B\)</span> - константа затухания</li>
<li><span class="math">\(K\)</span> - постоянная пружины.</li>
</ul>
<p>Таким образом датчик вибрации является системой второго порядка.</p>
<h4>3.3.3 Некоторые характеристики устройств с переменным сигналом</h4>
<p>Как известно переходные и динамические процессы возможны только при каких-либо изменяющихся входных воздействиях. Только тогда происходит изменение внутренних параметров системы во времени (это и характеризует динамические свойства системы) с использованием <strong>переходных характеристик</strong>. Такие характеристики могут записываться аналитически или изображаться графически в виде кривой <span class="math">\(y(t)\)</span> (<a href="https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%BD%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F">рис. 3.8</a>).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-8-1.png" alt="Transfer characteristic" width="600px"/>
</td>
<td>
<i>
Рис. 3.8. Графический пример переходных характеристик (https://en.wikipedia.org/wiki/Step_response).
</i>
</td>
</tr>
</table>
</div>
<p>Нужно понимать, что переходные и динамические процессы системы будут зависеть от входных воздействий. Обычно, для простоты анализа, входные воздействия приводят к одному из <a href="https://habr.com/ru/post/509612/">типовых видов</a> (рис. 3.9).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-8-2.png" alt="Step response" width="600px"/>
</td>
<td>
<i>
Рис. 3.9. Основные входные воздействия: a - единичное ступенчатое, b - импульсное (дельна-функция), c - линейное, d - синусоидальное (гармоническое).
</i>
</td>
</tr>
</table>
</div>
<ul>
<li>Единичная ступенчатая функция (функция Хэвисайда, единичная ступенчатая функция, функция единичного скачка, включенная единица) – кусочно-постоянная функция, равная нулю для отрицательных значений аргумента и единице – для положительных.</li>
<li>Дельта-функция (<span class="math">\(\delta\)</span>-функция Дирака, дельта-импульс) – применяется в математической физике при решении задач, в которые входят сосредоточенные величины: сосредоточенная нагрузка, сосредоточенный заряд и т.д. Физически <span class="math">\(\delta\)</span>-функцию можно представить как бесконечный всплеск единичной интенсивности.</li>
<li>Линейная функция - соответствует линейно возрастающему входному сигналу.</li>
<li>Синусоидальная (гармоническая) функция - соответствует гармоническим колебаниям входного сигнала.</li>
</ul>
<p>Более подробно о математике, лежащей за данными функциями можно прочитать на <a href="https://habr.com/ru/post/509612/">хабре</a>. Ниже приводятся некоторые важные характеристики переходных динамических систем с кратким описанием.</p>
<p><strong>1. <a href="http://infor.wallst.ru/5/ab13.htm">Переходная характеристика</a> (степень реагирования на единичное воздействие как на рис. 3.9 a, step response performance)</strong></p>
<p>Реакция системы на единичное ступенчатое воздействие при нулевых начальных условиях (<span class="math">\(х(0) = 0\)</span> и <span class="math">\(у(0) = 0\)</span>). Нормализованная переходная функция системы обычно описывается как показано на рис. 3.10.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-8.png" alt="Step response" width="600px"/>
</td>
<td>
<i>
Рис. 3.10. Переходная функция динамической системы при ступенчатом воздействии (3.9 a).
</i>
</td>
</tr>
</table>
</div>
<p>Для описания такой системы используют следующие параметры динамического ответа (реагирования):</p>
<ul>
<li>перерегулирование (peak overshoot, <span class="math">\(M_p\)</span>) - разница между максимальным значением и значением покоя, обычно выражается в процентах;</li>
<li>время регулирования (время переходного процесса, setting time, <span class="math">\(t_s\)</span>) - это время, необходимое для достижения ответа в пределах <span class="math">\(\pm 2\)</span> % от значения в устойчивом состоянии;</li>
<li>время нарастания (rise time, <span class="math">\(t_r\)</span>) - интервал времени, за которое переходная характеристика (response) увеличивается с 10 до 90%</li>
</ul>
<blockquote>
<p><strong>Задача</strong>. Найдите время нарастания на графике 3.10.</p>
</blockquote>
<p><strong>2. Амплитудно-частотная характеристика (frequency response perfomance)</strong></p>
<p>Отражает зависимость амплитуды ответного сигнала системы от частоты ее входного сигнала (рис. 3.11).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-9.png" alt="Frequency response" width="600px"/>
</td>
<td>
<i>
Рис. 3.11. Частотный ответ
</i>
</td>
</tr>
</table>
</div>
<p>Предположим <span class="math">\(G(s)\)</span> это передаточная функция динамической системы, выраженная общим уравнением <span class="math">\(\eqref{eq3.2}\)</span>. Если входящий сигнал является синусом с амплитудой <span class="math">\(А\)</span> и частотой <span class="math">\(\omega\)</span>, тогда в равновесном состоянии, выходом будет также синус с такой же частотой, но другой амплитудой <span class="math">\(B\)</span> и будет фазовая разница между входом и выходом. Может быть доказано, что отношение амплитуд и фазовая разница будут выражены следующем образом:</p>
<div class="math">$$\frac{B}{A} = |G(j\omega)|$$</div>
<p>и</p>
<div class="math">$$\phi = \angle G(l\omega)$$</div>
<p>Графики, показывающие вариации амплитудных отношений и фазового угла от частоты, называются графиками амплитудно-частотной характеристики. Типичная амплитудно-частотная характеристика пьезоэлектрического акселерометра показаны на рис.3.12.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-10.png" alt="Amplitude VS Frequency" width="600px"/>
</td>
<td>
<i>
Рис. 3.12. Характеристики амплитуды в зависимости от частоты для пьезоэлектрического акселерометра.
</i>
</td>
</tr>
</table>
</div>
<p><strong>3. Полоса пропускания и естественная частота (brandwidth and natural frequency)</strong></p>
<p>Из рис. 3.12 следует, что амплитуда является константой для широкого диапазона частот. Этот диапазон называется шириной пропускания (bandwidth) измеряемой системы (если быть точным, это частотный диапазон в котором нормализованное амплитудное отношение не опускается ниже уровня 0.707 отн. ед. или -3 дБ). Устройства могут использоваться именно в данном диапазоне. Нижний и верхний лимиты называются “нижний и верхний срез (край, cut)” частот. Частота, при которой амплитудное отношение достигает пика, называется естественной (затухающей) частотой системы (damped, natural frequency).</p>
<h2>3.4 Погрешности</h2>
<p>Данный раздел посвящён очень важно и очень “странной” вещи - статистике и погрешностям измерений. Явлениям этой природы и частичному обзору статистики для исследований и измерений посвящен отдельный курс моей преподавательской деятельности “Планирование эксперимента и анализ данных”. Для хорошего понимания, что такое анализ данных, статистика и обработка результатов измерений - <a href="https://dimyun.space/ru/blog/education-ChSU-technology-experiment_data.html#education-ChSU-technology-experiment_data">прошу ознакомиться</a>. Далее же приводятся только некоторые тезисы и основные понятия, минимально необходимые для настоящего курса. </p>
<p>В практике любых измерений можно заметить, что если проводить повторные измерения в зафиксированных условиях, то результаты будут отличаться друг от друга. Часто это вызвано какими-либо внутренними источниками погрешности, которые изменяются случайным образом в случайный момент времени и сложны для предсказания. Для примера, характеристики диодов и элементов сопротивления (резисторов) на электронной схеме являются случайными, в зависимости от источника шумов (помех): температурного и наводящегося электрического или магнитного шума.</p>
<p>Таким образом, для описания результатов повторяющихся измерений с целью установления истинного значения необходимо использовать аппарат <strong>статистики</strong>. Наиболее распространенными понятиями в нем являются <strong>среднее и стандартное отклонение</strong>. <strong>Среднее</strong> серии измерении (показаний, <span class="math">\(\overline{x}\)</span>), является наиболее точным приближением истинного значения. С другой стороны, <strong>стандартное отклонение</strong> (<span class="math">\(\sigma\)</span>) является мерой разброса данных относительно среднего. При нормальном распределении величины и в случае правильных условий измерений (когда погрешности будет действительно случайной), <strong>68 % измерений будут находиться в интервале <span class="math">\(\pm \sigma\)</span> от среднего</strong>. Обычно, чем меньше значение <span class="math">\(\sigma\)</span>, тем более повторяемыми и точными будут измерения). Предел неопределенности исмерений обычно устанавливается равным <span class="math">\(\pm 3\sigma\)</span>, это соответствует 99% доверительному интервалу (столько случайных измерений нашей величины должно оказаться в данном интервале). Диапазон неопределенности зачастую называют <strong>доверительным интервалом</strong>.</p>
<blockquote>
<p><strong>Примечание</strong>. <strong>Статистика и понимание природы ошибок</strong> - чрезвычайно важное знание. Особенно это важно при доказании своей правоты и проверки сделанных предположений. Например, отличаются ли 2 метода статистически значимо. Или видимое различие лишь случайно…</p>
</blockquote>
<p>Для грамотной работы с измерительными устройствами и сенсорами необходимо уметь:</p>
<ul>
<li>определять тип ошибки;</li>
<li>определять среднее, дисперсию и средне-квадратичное отклонение;</li>
<li>понимать лимитирующую ошибку устройства;</li>
<li>строить зависимость методом наименьших квадратов;</li>
<li>различать калибровку по 1 и 2 точкам.</li>
</ul>
<p>В принципе, основной нашей задачей является получение данных о системе - <strong>измерение</strong>. Однако мы никогда не можем измерить истинное значение какой-либо физической величины, поскольку все относительно в этом мире и погрешности накапливаются. Да и из-за случайных факторов всегда есть вероятность ошибки. <strong>В наших силах лишь набрать массив измерений, посчитать статистики и сделать предположение об истинности полученных результатов</strong>. Для более вероятного получения наиболее близких к истине результатов используют калибровки и сравнения со стандартами.</p>
<h3>3.4.1 Анализ ошибок</h3>
<p>В общем случае ошибка измерения выражается как</p>
<div class="math">$$
\begin{equation}\begin{aligned}
\text{Error} = \text{Instrument reading} - \text{True reading}
\end{aligned}\end{equation}
\tag{3.6}\label{eq3.6}
$$</div>
<p>Часто, ошибка выражается в процентах как:</p>
<div class="math">$$
\begin{equation}\begin{aligned}
\text{% Error} = \frac{\text{Instrument reding} - \text{True reading}}{\text{True reading}} \times 100
\end{aligned}\end{equation}
\tag{3.7}\label{eq3.7}
$$</div>
<p>Ошибки (погрешности) устройства могут быть 3 категорий:</p>
<ol>
<li><strong>Промахи (gross)</strong> - из-за человеческого фактора (считывание показание до достижения стабильности, ошибка записи, ошибка расчета и т.д.);</li>
<li><strong>Систематические</strong> - те, которые влияют на все значения в одинаковой мере (ошибка установки 0, дрейф сигнала со временем), может быть исправлена калибровкой;</li>
<li><strong>Случайные</strong> - ошибки статистической (т.е. неизвестной исследователю) природы, которые случайным образом оказывают влияние, не может быть исправлена, может быть только уменьшена и статистически учтена.</li>
</ol>
<h3>3.4.2 Систематические ошибки</h3>
<p>Систематические ошибки могут возникать по разным причинам. Это может быть связано с неисправностями прибора или датчика. Прибор может иметь “ошибку нуля” (когда приборный ноль не соответствует истинному), или его выход может изменяться нелинейно со входом (отклоняясь от идеального линейного соотношения “вход/выход”). Кроме того, усилитель внутри прибора может иметь входное смещение по напряжению и току, что будет способствовать появлению ошибке нуля. Различные нелинейности в цепи усилителя также приведут к ошибке из-за нелинейности. Также систематическая погрешность может быть вызвана неправильной конструкцией измерительной схемы. Погрешность может возникать из-за эффекта нагрузки, неправильного выбора датчика или частоты отсечения фильтра. Систематические ошибки могут быть также вызваны эффектом окружающей среды (характеристики датчика могут изменяться с изменением температуры или других условий окружающей среды).</p>
<p>Главной особенностью систематических погрешностей является то, что источники погрешностей распознаются и могут быть в значительной степени уменьшены путем тщательного проектирования измерительной системы и выбора ее компонентов (или просто введением поправок). Помещение прибора в контролируемую среду может также помочь в уменьшении систематических ошибок. Они могут быть еще больше уменьшены путем правильной и регулярной калибровки прибора.</p>
<h3>3.4.3 Случайные ошибки</h3>
<p>В отличие от систематических погрешностей, случайные не имеют какой-либо известной природы и не могут быть устранены (они появляются из-за общей неопределенности, как-бы это не звучало). Такие ошибки могут быть только уменьшены с использованием законов статистики. Такие ошибки не смешенные (т.е. случайным образом распределены вокруг какого-то среднего значения как в большую, так и в меньшую сторону). Но к счастью, обычно такие ошибки следуют нормальному закону распределения и их величину можно уменьшить набором большего количества измерений и усреднением.</p>
<p>Основные понятия случайных величин перечислены ниже.</p>
<p><strong>Среднее (Mean):</strong></p>
<div class="math">$$
\begin{equation}\begin{aligned}
\overline{x} = \frac{1}{n} \sum_{i=1}^{n}x_i
\end{aligned}\end{equation}
\tag{3.8}\label{eq3.8}
$$</div>
<p> где <span class="math">\(n\)</span> - общее число измерений и <span class="math">\(x_i\)</span> - значение единичного измерения.</p>
<p>Может быть показано, что средняя величина является наиболее вероятным значением для данной выборки, именно по этому среднее - одна из важнейших величин в статистическом анализе.</p>
<p><strong>Отклонение (Deviation):</strong></p>
<div class="math">$$
\begin{equation}\begin{aligned}
d_i = x_i - \overline{x}
\end{aligned}\end{equation}
\tag{3.9}\label{eq3.9}
$$</div>
<p>Данная величина показывает насколько сильно единичные измерения отклоняются от среднего. К сожалению, усреднение данной величины не сможет предсказать как сильно может отклониться следующее измерение от среднего:</p>
<p><strong>Среднее значение отклонений (Mean of deviation):</strong></p>
<div class="math">$$
\frac{1}{n} \sum_{i=1}^{n} (x_i - \overline{x}) = \overline{x} - \frac{1}{n}(n \overline{x}) = 0
$$</div>
<p>Важная величина - используется что бы оценить насколько все значения в некотором диапазоне отклоняются от истинных. Кроме того нужна для аппроксимации набора значений методом наименьших квадратов (МНК).</p>
<p><strong>Дисперсия (Variance):</strong></p>
<div class="math">$$
\begin{equation}\begin{aligned}
V = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \overline{x})^2 = \sigma^2
\end{aligned}\end{equation}
\tag{3.10}\label{eq3.10}
$$</div>
<p>Интересно, что усреднение для дисперсии ведется по <span class="math">\(n-1\)</span> величине. Это называется <strong>количеством степеней свободы</strong>, поскольку при единичном измерении оно никуда не отклониться (само от себя). Однако, для больших выборок (<span class="math">\(n>30\)</span>), можно аппроксимировать дисперсию как:</p>
<div class="math">$$
\begin{equation}\begin{aligned}
V = \frac{1}{n} \sum_{i=1}^{n} (x_i - \overline{x})^2 = \sigma^2
\end{aligned}\end{equation}
\tag{3.11}\label{eq3.11}
$$</div>
<h3>3.4.4 Распространение ошибки</h3>
<p>Довольно часто искомая величина зависит от нескольких измеряемых значений (например расчет мощности источника постоянного тока по напряжению и току). Как тогда расчитать погрешность, если неопределенность измеряемых величин известна?</p>
<p>Допустим <span class="math">\(y = f(x_1, x_2, ..., x_n)\)</span>. Если неопределенность (или отклонение) для <span class="math">\(x_i\)</span> известна и равна <span class="math">\(\Delta x_i\)</span>, (i = 1, 2,.. n), то расчитаем неопределенность для <span class="math">\(y\)</span>.</p>
<p>Для этого продифференцируем выражение и разложим его в <a href="https://ru.wikipedia.org/wiki/%D0%A0%D1%8F%D0%B4_%D0%A2%D0%B5%D0%B9%D0%BB%D0%BE%D1%80%D0%B0">ряд Тейлора</a>:</p>
<div class="math">$$
\begin{equation}\begin{aligned}
\Delta y = \frac{\delta f}{\delta x_1} \Delta x_1 + \frac{\delta f}{\delta x_2} \Delta x_2 + ... + \frac{\delta f}{\delta x_n} \Delta x_n
\end{aligned}\end{equation}
\tag{3.12}\label{eq3.12}
$$</div>
<p>Поскольку <span class="math">\(\Delta x_i\)</span> может быть как положительной, так и отрицательной, то максимальная погрешность достигается обыкновенным сложением абсолютных отклонений:</p>
<div class="math">$$
|\Delta y| = \frac{\delta f}{\delta x_1} |\Delta x_1| + \frac{\delta f}{\delta x_2} |\Delta x_2| + ... + \frac{\delta f}{\delta x_n} |\Delta x_n|
$$</div>
<p>Однако, это крайне маловероятное событие. На практике, <span class="math">\(x_1, x_2 ,..., x_n\)</span> являются независимыми величинами и все ошибки не проявляются в максимальной форме единовременно. Тогда, перейдя к средне квадратинчому отклонению из уравнения <span class="math">\(\eqref{eq3.12}\)</span> получим:</p>
<div class="math">$$
\begin{equation}\begin{aligned}
(\Delta y)^2 = (\frac{\delta f}{\delta x_1})^2 (\Delta x_1)^2 + (\frac{\delta f}{\delta x_2})^2 (\Delta x_2)^2 + ... + 2\frac{\delta f}{\delta x_1}\frac{\delta f}{\delta x_2} (\Delta x_1)(\Delta x_2) + ...
\end{aligned}\end{equation}
\tag{3.13}\label{eq3.13}
$$</div>
<p>Если вариации <span class="math">\(x_1, x_2, ...\)</span> независимы, то положительное значение одного приращения с одинаковой вероятностью будет связано с отрицательным значением другого приращения, так что некоторые из величин могут быть приняты как ноль (все слагаемые с отличной от 2-ой степенью) для совокупности повторных наблюдений. </p>
<p>Мы уже определили дисперсию <span class="math">\(V\)</span> как ошибку среднего квадрата. Таким образом, среднее <span class="math">\((\Delta y)^2\)</span> для набора повторных наблюдений, становится дисперсией <span class="math">\(y\)</span>, или</p>
<div class="math">$$
\begin{equation}\begin{aligned}
(\Delta y)^2 = V(y) = (\frac{\delta f}{\delta x_1})^2 V(x_1) + (\frac{\delta f}{\delta x_2})^2 V(x_2) + ...
\end{aligned}\end{equation}
\tag{3.14}\label{eq3.14}
$$</div>
<p>Тогда стандартное отклонение <span class="math">\(y\)</span>:</p>
<div class="math">$$
\sigma (y) = [(\frac{\delta f}{\delta x_1})^2 \sigma^2 (x_1) + (\frac{\delta f}{\delta x_2})^2 \sigma^2 (x_2) + ... ]^{\frac{1}{2}}
$$</div>
<h3>3.4.5 Ограничивающая ошибка (Limiting Error)</h3>
<p>Ограничивающая погрешность является важным параметром, который используется для определения точности устройств. Ограничительная погрешность (или гарантированная погрешность) указывается изготовителем для определения максимального предела погрешности прибора. </p>
<p>Предположим, что точность вольтметра 0-100 В указана как 2% от полного диапазона шкалы. Это означает, что погрешность гарантированно будет в пределах <span class="math">\(\pm 2V\)</span> при любом показании. Если вольтметр считывает 50 В, то ошибка также находится в пределах <span class="math">\(\pm 2V\)</span>. В результате, точность этого показания будет равна <span class="math">\(\frac{20}{50} \times 100 = 4%\)</span>. Если общая производительность измерительной системы зависит от точности нескольких независимых параметров, то предельная или гарантийная погрешность определяется абсолютной погрешностью, как указано в выражении в <span class="math">\(\eqref{eq3.13}\)</span>. </p>
<p>Например, если мы измеряем значение неизвестного элемента сопротивления с помощью <a href="https://ru.wikipedia.org/wiki/%D0%98%D0%B7%D0%BC%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BC%D0%BE%D1%81%D1%82">моста wheatstone</a>, чьи резисторы имеют заданную погрешность в 1%, 2% и 3% соответственно, то, поскольку</p>
<div class="math">$$
R_x = \frac{R_1 R_2}{R_3}
$$</div>
<div class="math">$$
\Delta R_x = \frac{R_2}{R_3} \Delta R_1 + \frac{R_1}{R_3} \Delta R_2 - \frac{R_1 R_2}{R_3^2} \Delta R_3
$$</div>
<p>или</p>
<div class="math">$$
\frac{\Delta R_x}{R_x} = \frac{\Delta R_1}{R_1} + \frac{\Delta R_2}{R_2} - \frac{\Delta R_3}{R3}
$$</div>
<p>Тогда по логике <span class="math">\(\eqref{eq3.13}\)</span> абсолютная ошибка расчитывается с использованием только положительных значений, и ограничительная погрешность составит 6%.</p>
<h3>3.4.6 Значимость арифметического среднего</h3>
<p>Несмотря на распространенность такой процедуры как взятие арифметического среднего, давайте постараемся разобраться почему это так важно. А связано это с нем, что арифметическое среднее - это наиболее вероятное значение для выборки:</p>
<p>Допустим <span class="math">\(x_1, x_2, ..., x_n\)</span> - выборка из <span class="math">\(n\)</span> наблюдений. Пусть <span class="math">\(X\)</span> - центральное значение (пока не уточняем какое).</p>
<p>Тогда отклонения от центрального значения будут равны <span class="math">\((x_1 − X), (x_2 − X), ..., (x_n − X)\)</span> соответственно.</p>
<p>Сумма квадратов отклонений: <span class="math">\(S_{sq} = (x_1 − X)^2 + (x_2 − X)^2 + ... + (x_n − X)^2 = x_1^2 + x_2^2 + ... + x_n^2 - 2X(x_1 + x_2 + ... + x_n) + nX^2\)</span></p>
<p>Найдем среднее <span class="math">\(X\)</span> при минимальных квадратах отклонений:</p>
<div class="math">$$
\frac{dS_{sq}}{dX} = -2(x_1 + x_2 + ... + x_n) + 2nX = 0
$$</div>
<p>или</p>
<div class="math">$$
X = \frac{1}{n}(x_1 + x_2 + ... + x_n) = \overline{x}
$$</div>
<p>Таким образом <strong>арифметическое среднее</strong> - это центральное значение с точки зрения квадратов отклонений. </p>
<p>Стоит учитывать, что взяв другой набор измерений мы получим другое среднее (опять влияние наших любимых случайных погрешностей). Однако при очень большом количестве измерений мы приблизимся очень близко к истинному значению (математическое ожидание). Тогда возникает закономерный вопрос - как определить отклонение различных наборов средних значений от истинной величины?</p>
<h3>3.4.7 Стандартное отклонение среднего</h3>
<p>Предположим, имеется набор измерений <span class="math">\(x_1, x_2, x_3, ..., x_n\)</span>. Тогда среднее, как мы выяснили ранее будет равно:</p>
<div class="math">$$
\overline{x} = \frac{1}{n} (x_1 + x_2 + ... + x_n) = f(x_1 + x_2 + ... + x_n)
$$</div>
<p>Используя выражение для дисперсии <span class="math">\(\eqref{eq3.14}\)</span> получим:</p>
<div class="math">$$
V(y) = (\frac{\delta f}{\delta x_1})^2 V(x_1) + (\frac{\delta f}{\delta x_2})^2 V(x_2) + ... = \frac{1}{n^2} (V(x_1) + V(x_2) + ... + V(x_n))
$$</div>
<p>Тогда стандартное отклонение для измерений <span class="math">\(x_1, x_2, x_3, ..., x_n\)</span>:</p>
<div class="math">$$
\sigma = [\frac{1}{n}(V(x_1) + V(x_2) + ... + V(x_n))]^{\frac{1}{2}}
$$</div>
<p> где <span class="math">\(n\)</span> - велико.</p>
<p>Таким образом,</p>
<div class="math">$$
V(\overline{x}) = \frac{1}{n^2} (n \sigma^2) = \frac{\sigma^2}{n}
$$</div>
<div class="math">$$
\sigma(\overline{x}) = \frac{\sigma}{\sqrt{n}}
$$</div>
<p>Вот мы и определили отклонение средних от истинного среднего. Полученная закономерность говорит о том, что воспроизводимость может быть улучшена (а <span class="math">\(\sigma (x)\)</span> уменьшена) за счет увеличения числа наблюдений. Но улучшение будет медленным из-за <span class="math">\(\sqrt{n}\)</span>.</p>
<blockquote>
<p><strong>Пример</strong>. Предположим, что сенсор имеет случайную ошибку со стандартным отклонением 1%. Сколько измерений нужно сделать и усреднить, для того, чтобы уменьшить стандартное отклонение от истинного среднего до <span class="math">\( < 0.1%\)</span>?</p>
<p><strong>Решение</strong>: <span class="math">\(\frac{\sigma}{\sqrt{n}} < 0.1; \sqrt{n} > \frac{1}{0.1} = 10\)</span>; или <span class="math">\(n > 100\)</span>.</p>
</blockquote>
<h4>3.4.8 Метод наименьших квадратов</h4>
<p>Пожалуй это один из самых распространенных методов аппроксимации данных и о нем нужно хотя бы один раз услышать. В нашем случае рассмотрим данный метод для построения аппроксимирующей прямой. Это часто необходимо, когда по экспериментальным данным нужно предположить какую-либо зависимость (например, сопротивление от температуры и т.д.). Для этого необходимо найти такой полином, среднеквадратичное отклонение от которого до экспериментальных данных будет минимальным - это и есть <a href="https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B8%D1%85_%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%BE%D0%B2">МНК</a> (метод наименьших квадратов, рис. 3.13)</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-11.png" alt="Least square" width="600px"/>
</td>
<td>
<i>
Рис. 3.13. Метод наименьших квадратов.
</i>
</td>
</tr>
</table>
</div>
<p>Предположим, у нас имеется <span class="math">\(n\)</span> экспериментальных данных: <span class="math">\((x_1, y_1), (x_2, y_2), ..., (x_n, y_n)\)</span>. Мы хотим найти зависимость вида <span class="math">\(y = a_0 + a_1 x\)</span> при которой общий квадрат ошибки будет минимальным. Неизвестными являются <span class="math">\(a_0\)</span> и <span class="math">\(a_1\)</span>. При этом ошибка для i-ого измерения:</p>
<div class="math">$$
e_i = y_i - y = y_i - a_0 - a_1 x_i
$$</div>
<p>А общая квадратичная ошибка:</p>
<div class="math">$$
S_e = \sum_{i=1}^{n} e_i^2 = \sum_{i=1}{n} (y_i - a_0 - a_1 x_i)^2
$$</div>
<p>Для минимизации необходимо минимизировать эти ошибки: <span class="math">\(\frac{\delta S_e}{\delta a_0} = 0\)</span> и <span class="math">\(\frac{\delta S_e}{\delta a_1} = 0\)</span></p>
<p>или</p>
<div class="math">$$
\begin{equation}\begin{aligned}
\frac{\delta S_e}{\delta a_0} = -2 \sum_{i=1}^{n} (y_i - a_0 - a_1 x_i) = 0
\end{aligned}\end{equation}
\tag{3.15}\label{eq3.15}
$$</div>
<p>и</p>
<div class="math">$$
\begin{equation}\begin{aligned}
\frac{\delta S_e}{\delta a_1} = -2 \sum_{i=1}{n} x_i (y_i - a_0 - a_1 x_i) = 0
\end{aligned}\end{equation}
\tag{3.16}\label{eq3.16}
$$</div>
<p>Из <span class="math">\(\eqref{eq3.15}\)</span> и <span class="math">\(\eqref{eq3.16}\)</span> получим</p>
<div class="math">$$
\sum_{i=1}^{n} y_i - a_0 n - a_1 \sum_{i=1}^{n} x_i = 0
$$</div>
<div class="math">$$
\sum_{i=1}^{n} x_i y_i - a_0 \sum_{i=1}^{n} x_i - a_1 \sum_{i=1}^{n} x_i^2 = 0
$$</div>
<p>Решая данную систему получим:</p>
<div class="math">$$
a_1 = \frac{n \sum_{i=1}^{n} x_i y_i - \sum_{i=1}^{n} x_i \sum_{i=1}^{n} y_i}{n \sum_{i=1}^{n} x_i^2 - (\sum_{i=1}^{n} x_i)^2}
$$</div>
<p>или</p>
<div class="math">$$
a_1 = \frac{\frac{1}{n} \sum_{i=1}^{n} x_i y_i - \overline{x} \overline{y}}{\frac{1}{n} \sum_{i=1}^{n} x_i^2 - \overline{x}^2}
$$</div>
<p> где <span class="math">\(\overline{x}\)</span> и <span class="math">\(\overline{y}\)</span> - средние значения экспериментальных данных <span class="math">\(x_i\)</span> и <span class="math">\(y_i\)</span> соответственно.</p>
<p>Тогда:</p>
<div class="math">$$
a_0 = \overline{y} - a_1 \overline{x}
$$</div>
<blockquote>
<p><strong><a href="https://www.matburo.ru/ex_ms.php?p1=msmnk">Задача</a></strong>. Считая, что зависимость между переменными x и y имеет вид <span class="math">\(y = ax^2 + bx + c\)</span>, найти оценки параметров <span class="math">\(a\)</span>, <span class="math">\(b\)</span> и <span class="math">\(c\)</span> методом наименьших квадратов по выборке:</p>
<table>
<thead>
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>7</td>
<td>31</td>
<td>61</td>
<td>99</td>
<td>129</td>
<td>178</td>
<td>209</td>
</tr>
<tr>
<td>y</td>
<td>13</td>
<td>10</td>
<td>9</td>
<td>10</td>
<td>12</td>
<td>20</td>
<td>26</td>
</tr>
</tbody>
</table>
</blockquote>
<h4>3.4.9 Калибровка и устранение погрешности</h4>
<p>Уже упоминалось, случайные ошибки не могут быть устранены. Но, взяв ряд показаний при одном и том же условии и рассчитав их среднее, можно значительно сократить разброс случайных ошибок. На самом деле, если количество показаний очень велико, то среднее значение приблизится к истинному, и так ошибка может быть минимизирована. В другом случае - можно использовать статистический подход и оценить диапазон погрешности измерения.</p>
<p>С другой стороны, для систематической погрешности можно выявить ее источник (идентифицировать) и устранить его. Однако даже для простого устройства систематические ошибки могут возникать по целому ряду причин. А выявление и устранение всех источников ошибки может оказаться весьма утомительным процессом. Привлекательной альтернативой является <strong>калибровка прибора под различные известные входы</strong>.</p>
<p><strong>Калибровка (calibration)</strong> - это процесс, в котором известный входной сигнал или ряд входных сигналов применяются к системе с целью выявить значение систематической погрешности для его математического устранения в расчетах. Сравнивая фактическое входное значение со значением выхода, можно наблюдать общий эффект от систематических ошибок. Затем в точках калибровки найденные ошибки обнуляются с помощью калибровочных диаграмм или с помощью расчитанных коэффициентов.</p>
<p>Строго говоря, калибровка подразумевает сравнение измеренной величины со стандартной (полученной в результате сравнения с эталонами). Однако в реальной калибровочной системе нам зачастую требуется не только стандартный прибор (например, для измерения давления), но и особый испытательный стенд (где желаемое давление может быть сгенерировано при различных условиях). В некоторых случаях процесс калибровки устройства еще более сложный. Например, в случае измерения ускорения, поскольку желаемое ускорение должно быть получено на конкретном объекте, то и измерительное устройство должно быть смонтировано на нем же. А фактическое значение полученного ускорения должно измеряться каким-то другим, косвенным образом.</p>
<p>Есть разные подходы для осуществления калибровки. Она может быть выполнена для всех точек с составлением <strong>обзорной таблицы (look-up table)</strong>, по которой затем получают показание для каждого фактического измерения. Такой тип калибровки часто называют <strong>калибровкой с помощью программного обеспечения (software calibration)</strong>. Однако более популярным способом является <strong>калибровка прибора в одной, двух или трех точках измерения</strong> и подгонка показаний прибора так, чтобы погрешность в этих точках была равна нулю. В этом случае ожидается, что погрешность для всего диапазона измерения уменьшиться и останется в пределах малого интервала (не забываем - основное наше предположение для сенсоров - что мы работаем в линейном диапазоне). Такие калибровки известны как <strong>калибровка в одной точке, в двух точках и в трех точках</strong> соответственно. Типичные характеристики входа-выхода измерительного устройства при этих трех калибровках показаны на рис. 3.14.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_3-12.png" alt="Calibration" width="600px"/>
</td>
<td>
<i>
Рис. 3.14. Калибровка a) - по одной точке, b) - по двум точкам, c) - по трем точкам.
</i>
</td>
</tr>
</table>
</div>
<p>Калибровку по одной точке часто называют <strong>регулировкой смещения (offset adjustment)</strong>, при котором отклонение в одной точке для системы должно быть нулевым (часто такая калибровка делается при 0 входе, т.е. сенсор калибруется по холостой пробе). Для электронных приборов часто это делается автоматически, а сам процесс называется <strong>автоматическая калибровка нуля (auto-zero)</strong>. В большинстве же случаев, калибровка выполняется в двух точках: одна - 0 на входе, другая - в максимуме шкалы. Другое название подобной калибровки - <strong>корректировки нуля и диапазона (zero and span adjustment)</strong>.</p>
<p>Необходимо упомянуть один важный момент - <strong>характеристики прибора со временем меняются</strong>. Поэтому даже при хорошей калибровке систематическая погрешность может опять появиться со временем (как правило, за счет изменения окружающих условия, таких как температура, место размещения и т.п.). Поэтому процесс калибровки должен повторяться через определенные промежутки времени регулярно.</p>
<h4>3.4.1. Заключение по разделу 3.4</h4>
<p>Погрешности и калибровка являются двумя основными проблемами при любых измерениях. Фактически, знания об измерениях остаются неполными без какого-либо всеобъемлющего представления об этих двух явлениях и в настоящий главе приведен только их краткий обзор. Были определены и объяснены термины “ошибка”, “предельная ошибка” и классифицированы различные типы ошибок. Мы также обсудили и метод наименьших квадратов для построения прямых линий (аппроксимация). Тем не менее я крайне рекомендую ознакомиться с курсом <a href="https://dimyun.space/ru/blog/education-ChSU-technology-experiment_data.html#education-ChSU-technology-experiment_data">“Планирование эксперимента и анализ данных”</a> для более глубокого понимания этих очень важных характеристик окружающего нас мира.</p>
<p>Кроме того, мы кратко рассмотрели понятие калибровки систем. Показано, что характеристики прибора могут меняться со временем в связи с чем необходимо достаточно часто и регулярно проводить калибровку (особенно при изменении внешних условий измерений). Для этого показаны различные методы существующей калибровки (калибровка по одной точке, калибровка по двум точкам и калибровка по трем точкам).</p>
<h3>References</h3>
<ol>
<li><a href="https://x-engineer.org/graduate-engineering/signals-systems/control-systems/find-transfer-function-system/">x-engineer</a></li>
<li><a href="https://lpsa.swarthmore.edu/Representations/SysRepTransformations/TF2SDE.html">Transfer function</a></li>
<li><a href="https://www.cds.caltech.edu/~murray/courses/cds101/fa04/reading.html">Caltech course CDS 101/110, Fall 2004, Analysis and Design of Feedback Systems</a></li>
<li><a href="https://www.researchgate.net/publication/266644154_Temperature_measurement_by_thermocouple_probe_influences_of_variable_fluid_velocity_on_the_dynamic_characteristics_of_thermocouple">Yang, Zhaoxin & Meng, Xiaofeng. (2012). Temperature measurement by thermocouple probe: influences of variable fluid velocity on the dynamic characteristics of thermocouple. 10.2991/emeit.2012.425. DOI: 10.2991/emeit.2012.425 </a></li>
</ol>
<p>All_cite
1. <a href="https://doi.org/10.1016/C2013-0-15387-1">Measurement and Instrumentation. Theory and Application. Book. 2nd Edition • 2016</a>
2. <a href="https://doi.org/10.1016/C2009-0-25186-5">Instrumentation Reference Book. Book. 4th Edition. 2010</a></p>
<ol>
<li>M.B.Stout: Basic Electrical Measurements, 2/e, Prentice Hall of India, New Delhi, 1981.</li>
<li>R.Pallas-Areny and J.G.Webster: Analog Signal Processing, John Wiley, NY, 1999.</li>
<li>R.B. Northrup: Introduction to Instrumentation and Measurements (2/e), CRC Press, Boca Raton, 2005.</li>
<li>J.W. Dally, W.F. Riley and K.G. McConnell: Instrumentation for Engineering Measurements (2/e), John Wiley & Sons, NY, 2003.</li>
</ol>
<h2>3.5 Упражнения и вопросы</h2>
<ol>
<li>
<p>Имеется лазерный датчик перемещения со следующими характеристиками:</p>
<ul>
<li>Диапазон измерений: <span class="math">\(\pm 10\)</span> мм</li>
<li>Точка измерения: 40 мм</li>
<li>Разрешение: 3 мкм</li>
<li>Линейность: 1 % полной шкалы</li>
<li>Время отклика: 0.15 мс</li>
<li>Линейный выход: 4-20 мА</li>
</ul>
<p>Ответьте на следующие вопросы:</p>
<ul>
<li>Объясните смысл каждого из терминов.</li>
<li>Предположим, дистанция между сенсором и объектом равна 35 мм. Какой должен быть выход в мА?</li>
<li>Какая будет погрешность от нелинейности для данных условий?</li>
<li>Определите чувствительность данного сенсора в мА/мм.</li>
</ul>
</li>
<li>
<p>Определите разрешение 10-битного АЦП (ADC), если он питается от 10 В источника.</p>
</li>
<li>
<p>Точность датчика давления в диапазоне 0-10 кПа составляет 2%. Опер делите максимальную погрешность измерения в Па, если датчик показывает 4.0 кПа.</p>
</li>
<li>
<p>Докажите следующие утверждения:</p>
<ul>
<li>Потенциометр является устройством 0 порядка.</li>
<li>Простая термопара является устройством 1ого порядка.</li>
<li>Акселерометр является устройством второго порядка.</li>
</ul>
</li>
<li>
<p>Определить ошибку (в процентах), если индикатор температуры показывает <span class="math">\(189.8^o C\)</span>, когда фактическая температура составляет <span class="math">\(195.5^o C\)</span>.</p>
</li>
<li>
<p>Проведите различие между грубой ошибкой и систематической ошибкой. Запишите два возможных источника систематической ошибки.</p>
</li>
<li>
<p>Объясните термин “ограничивающая погрешность”. Обоснуйте, почему при измерении всегда рекомендуется брать показания там, где они близки к полному диапазону.</p>
</li>
<li>
<p>Обоснуйте, почему наиболее вероятным значением множества единичных данных является их среднее арифметическое.</p>
</li>
<li>
<p>Значение сопротивления <span class="math">\(R_t\)</span> металлического провода при температуре <span class="math">\(t\)</span> задается выражением, <span class="math">\(R_t = R_0 (1+ \alpha t)\)</span> где, <span class="math">\(R_0\)</span> - сопротивление при <span class="math">\(0^o C\)</span>, а <span class="math">\(\alpha\)</span> - температурный коэффициент сопротивления. Значения сопротивления металлического провода при различных температурах приведены ниже. Получить значения <span class="math">\(R_0\)</span> и <span class="math">\(\alpha\)</span> можно, используя метод наименьших квадратов.</p>
<table>
<thead>
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>Tempareture (oC)</td>
<td>20</td>
<td>40</td>
<td>60</td>
<td>80</td>
<td>100</td>
</tr>
<tr>
<td>Сопротивление (ом)</td>
<td>107.5</td>
<td>117.0</td>
<td>117.0</td>
<td>128.0</td>
<td>142.5</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Большинство приборов имеют регулировку нуля и диапазона, что это значит?</p>
</li>
<li>
<p>Объясните калибровку по трем точкам и ее преимущество перед другими типами калибровок.</p>
</li>
</ol>
<h2 id='4-Temperature'> 4. Измерения температуры (temperature measurement)</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<h3>4.1 Описание раздела</h3>
<p>В настоящем разделе будет рассмотрено понятие температуры и способов ее измерения. Человечество не так давно научилось воспроизводимо измерять температуру и первые термометры появились только в 17 веке, благодаря открытию Галлилео Галелея (Galileo Galilei). Однако это открытие произошло одновременно с аналогичным открытием немецкого ученого Дреббелем (Drebbel). При этом первые термометры были чувствительны и к температуре, и к давлению - т.е. были <strong>не селективны</strong>.</p>
<p>Для калибровки шкалы исторически используется 2 точки однако они могут отличаться.</p>
<ul>
<li><strong>Шкала Фаренгейта</strong>: 0 - смесь соли со льдом, 96 - температура человеческого тела. Тогда температура плавления льда равна <span class="math">\(32^0\)</span>, а кипения воды: <span class="math">\(212^0\)</span>.</li>
<li><strong>Шкала Цельсия</strong>: 0 - температура плавления льда, 100 - температура кипения воды.</li>
<li><strong>Шкала Кельвина</strong> (самая поздняя и “абсолютная”): 0 - абсолютная температура замерзания газа водорода (абсолютный ноль), 273 - температура замерзания воды.</li>
</ul>
<blockquote>
<p><strong>Задание 4.1</strong>. Вспомните, какие могут быть недостатки у калибровки по 2ум точкам?</p>
<p><strong>Задание 4.2</strong>. На основании калибровочных данных, приведенных выше, предложите уравнения пересчета из одной шкалы в другую.</p>
</blockquote>
<p>Изначально термометры служили для измерения атмосферной температуры или температуры тела. Однако сегодня нам необходимо измерять температуру для гораздо более широкого спектра задач и в гораздо более широких диапазонах. Для этого используются следующие основные типы термометров:</p>
<ol>
<li>Жидкие и газообразные термометры (liquid and gas thermometer).</li>
<li>Биметаллические пластины (bimetallic strip).</li>
<li>Термометры сопротивления (металлические и полупроводниковые, resistance thermometers: RTD and Thermistors).</li>
<li>Термопары (thermocouple).</li>
<li>Соединительный полупроводниковый датчик (Junction semiconductor sensor).</li>
<li>Радиационный пирометр (Radiation pyrometer).</li>
</ol>
<p>В рамках данного курса мы рассмотрим лишь некоторые из перечисленных типов термометров. Хотелось бы, что бы по окончанию раздела вы умели следующее:</p>
<ul>
<li>Знали терминологию.</li>
<li>Различали принципы работы RTD и Термистора.</li>
<li>Могли объяснить значение термина компенсации сопротивления для RTD (“компенсация проводниками”, lead wire compensation).</li>
<li>Различали характеристики PTC и NTC термисторов.</li>
<li>Могли выбрать необходимую термопару для конкретного температурного диапазона.</li>
<li>Могли разработать простую компенсационную схему холодного соединения (cold junction compensation) для термопары.</li>
</ul>
<h3>4.2 Термометры на основе сопротивления (Resistance Thermometers)</h3>
<p>Как известно из законов физики, сопротивление металлических проводников возрастает с ростом температуры. С другой стороны для полупроводников (semiconductors) - как правило зависимость обратная (уменьшается). Таким образом термометры, использующие металлические проводники для измерения температур, называются <a href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%80%D0%BC%D0%BE%D0%BC%D0%B5%D1%82%D1%80_%D1%81%D0%BE%D0%BF%D1%80%D0%BE%D1%82%D0%B8%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F">Термометр сопротивления (Resistance Temperature Detector, RTD)</a>, а использующие полупроводники - <a href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%80%D0%BC%D0%BE%D1%80%D0%B5%D0%B7%D0%B8%D1%81%D1%82%D0%BE%D1%80">thermistors (термисторы)</a>. При этом RTD более прочны и имеют более-менее линейные характеристики в широком диапазоне температур. С другой стороны термисторы более чувствительны, но имеют нелинейные характеристики.</p>
<h4>4.2.1 RTD (термометр сопротивления)</h4>
<p>Общая формула зависимости сопротивления от температуры для металлического проводника может быть представлена как:</p>
<div class="math">$$
R_t = R_0[1+\alpha(t-t_0) + \beta (t-t_0)^2 + \dots]
$$</div>
<p> где <span class="math">\(R_t\)</span> и <span class="math">\(R_0\)</span> - значения сопротивления при <span class="math">\(t^0 C\)</span> и <span class="math">\(t_0^0 C\)</span> соответственно; <span class="math">\(\alpha\)</span>, <span class="math">\(\beta\)</span> и т.д. - константы, которые зависят от металла.</p>
<p>Для небольшого диапазона температур, можно упростить уравнение до:</p>
<div class="math">$$
R_t = R_0[1+\alpha(t-t_0)]
$$</div>
<p>при этом для меди <span class="math">\(\alpha = 0.00427 /^o C\)</span>.</p>
<p>Медь, никель и платина - наиболее часто используемые металлы для RTD. Диапазон измеряемых температур определяется в зависимости от диапазона, где зависимость сопротивление-температура приблизительно линейна (рис. 4.1).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_4-1.png" alt="RTD" width="600px"/>
</td>
<td>
<i>
Рис. 4.1. Зависимость сопротивление-температура для различных металлов при $t_0 = 0^0 C$.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Задача 4.3</strong> Сравните приведенные характеристики с температурами плавления данных металлов. Какие выводы можно сделать?</p>
</blockquote>
<p><strong>Конструкция</strong></p>
<p>Редко когда незащищенная металлическая проволока может быть использована для температурных измерений в промышленности. Для ее защиты от механических повреждений используют различные дополнительные материалы (рис. 4.2).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_4-2.png" alt="Construction of RTD" width="600px"/>
</td>
<td>
<i>
Рис. 4.2. Конструкция промышленного RTD.
</i>
</td>
</tr>
</table>
</div>
<ul>
<li>Измерительная проволока зачастую помещается в оболочку из нержавеющей стали (помимо механической защиты, это обеспечивает удобство эксплуатации - дефектный сенсор может быть легко заменен на новый без изъятия корпуса из производства).</li>
<li>Между оболочкой и проволокой помещается проводящий тепло (но не проводящий электрический ток) материал (например, керамическая крошка).</li>
<li>Измерительный провод (resistance wired) должен быть аккуратно намотан на подложку из слюды (mika) или кварца, чтобы избежать растяжения и сжатия в процессе измерения температуры (такие материалы как кварц или слюда имеют небольшие значения температурных деформаций).</li>
</ul>
<p><strong>Улучшение качества сигнала</strong> (Signal conditioning)</p>
<p>Изменение сопротивления RTD может быть измерено непосредственно вольт-амперметром или с использованием <a href="https://ru.wikipedia.org/wiki/%D0%98%D0%B7%D0%BC%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BC%D0%BE%D1%81%D1%82">измерительного моста</a> (мост Уитстона, Wheatstone’s bridge). Однако основным ограничением для точного измерения температуры является вклад проводящих проводов (lead wires) в общее измеренное сопротивление. <strong>Поскольку длина проводника от RTD до измерительного устройства может изменяться, это может сказаться на точности измерения температуры</strong>. Однако существует метод для компенсации влияния длины проводника (т.е. его дополнительного сопротивления). Это метод заключается в использовании трехпроводного или четырех проводного RTD в виде моста (рис. 4.3).</p>
<blockquote>
<p><strong>Примечание</strong>. Вообще понятие моста чрезвычайно важно для измерительных систем и автоматизации в целом. Советую вам обращать пристальное внимание на все подобные “мостовые” схемы и хорошо разобраться в данном вопросе. </p>
</blockquote>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_4-3.png" alt="Compensation scheme" width="600px"/>
</td>
<td>
<i>
Рис. 4.3. Компенсационная схема для а) трех проводного и б) четырех проводного RTD
</i>
</td>
</tr>
</table>
</div>
<p>В трехпроводном методе один дополнительный “фиктивный” провод (4.3.а - а), взятый из элемента сопротивления, соединен в мост таким образом, что два подводящих провода (4.3.а - b, c) соединяются с двумя смежными рычагами моста, тем самым устраняя эффект друг от друга (рис. 4.3(а)). На рис. 4.3(b) показан <a href="https://limi.ru/2021/08/03/chetyrehprovodnaja-shema-izmerenija-soprotivlenija-realizovannaja-v-linejke-nashih-mikroommetrov/">четырехпроводной метод (схема Кельвина)</a> измерения. Он аналогичен четырем клеммам сопротивления: две клеммы используются для подачи тока, в то время как две другие - для измерения напряжения. Тогда сопротивления проводов a, b, c, d компенсируют друг друга и измеряется только сопротивление целевого RDT.</p>
<h4>4.2.2 Термистор (thermistor)</h4>
<p><a href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%80%D0%BC%D0%BE%D1%80%D0%B5%D0%B7%D0%B8%D1%81%D1%82%D0%BE%D1%80">Термистор</a> - это полупроводниковый тип термометров по сопротивлению. Они обладают бОльшей чувствительностью, но при этом у них крайне нелинейные характеристики. Это становиться понятным из того факта, что для типичного 2000 <span class="math">\(\Omega\)</span> термистора сопротивление меняется на 80 <span class="math">\(\Omega/C^0\)</span> при <span class="math">\(25^0 C\)</span>, тогда как для платинового RTD изменением сопротивления составит 7 <span class="math">\(\Omega/^0 C\)</span> при тех же <span class="math">\(25^0 C\)</span>. Термисторы могут быть 2 типов: а) с негативным температурным коэффициентом (NTC) и б) с позитивным температурным коэффициентом (PTC) (рис. 4.4).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_4-4.png" alt="Characteristics of termistors" width="600px"/>
</td>
<td>
<i>
Рис. 4.4. Типичные характеристики термисторов: а) NTC, б) PTC.
</i>
</td>
</tr>
</table>
</div>
<p>Наиболее распространенными являются термисторы NTC типа. Обычно они производятся из оксидов железа, марганца, магния и др. Их характеристики могут быть выражены уравнением:</p>
<div class="math">$$
\begin{equation}\begin{aligned}
R_T = R_0 e^{\beta (\frac{1}{T} - \frac{1}{T_0})}
\end{aligned}\end{equation}
\tag{4.1}\label{eq4.1}
$$</div>
<p>где,
<span class="math">\(R_T\)</span> - сопротивление при температуре T [K]
<span class="math">\(R_0\)</span> - сопротивление при температуре <span class="math">\(T_0\)</span> [K]
<span class="math">\(T_0\)</span> - температура сравнения, обычно <span class="math">\(25^0 C\)</span>
<span class="math">\(\beta\)</span> - константа, которая определяется в зависимости от характеристик материала, обычно принимается 4000 условных единиц.</p>
<p>Из уравнения <span class="math">\(\eqref{eq4.1}\)</span> можно получить температурный коэффициент сопротивления [<span class="math">\(K^{−1}\)</span>]:</p>
<div class="math">$$
\alpha_T = \frac{1}{R_T} \frac{dR_T}{dT} = - \frac{\beta}{T^2}
$$</div>
<p>Таким образом мы получили негативный коэффициент <span class="math">\(\alpha_T\)</span>, что соответствует NTC термистору.</p>
<p>Термисторы обычно используются в интервале температур от -100 до +300 <span class="math">\(^0\)</span> C. При этом, как правило, только один термистор не может использоваться для всего диапазона измерений. Более того, существующие термисторы не являются взаимозаменяемыми: между двумя термисторами одного типа имеется заметное отклонение номинального сопротивления и температурного коэффициента. Таким образом, если неисправный термистор будет заменен новым аналогичного типа, то необходимо проводить калибровку. Доступные на рынке термисторы имеют стандартные значения в 1К, 2К, 10К, 20К, 100К и т.д.. Эти значения показывают уровень сопротивления при 25 <span class="math">\(^0 C\)</span> в [Ом]. Термисторы доступны в разных формах: шарик, стержень, диск и т.д.. Как правило, размер чувствительного элемента небольшой, что позволяет проводить точечное измерение температуры. Константа времени реагирования также мала, из-за малого размера элемента.</p>
<p>Стоит учитывать, что нелинейные отрицательные температурные характеристики также дают увеличение погрешности из-за эффекта самонагревания термистора. Когда через термистор протекает ток, то генерируется тепло согласно <span class="math">\(I^2R\)</span> потерям энергии, что может увеличить температуру чувствительного элемента. В свою очередь это приведет к уменьшению сопротивления и <strong>цепной реакции</strong> за счет чего продолжает увеличиваться проходящий ток и температура. Если не устранить данный эффект, он может привести к необратимому повреждению термистора (он просто сгорает). Для предотвращения такой цепной реакции необходимо ограничить протекание тока ниже указанного в спецификациях значения.</p>
<p>Нелинейные характеристики термисторов часто вызывают проблемы с точным измерением температуры и часто бывает необходимо специально линеаризовать характеристики термистора. Это может быть сделано за счет добавления одного постоянного сопротивления (резистора), параллельного термистору. Температурные характеристики нового эквивалентного сопротивления будут более линейными. Однако это приведет к уменьшению общей чувствительности.</p>
<p>Термисторы с позитивным температурным коэффициентом (PTC) имеют ограниченную область применения и в основном используются для защиты моторов и трансформаторов (transformer widings). Как показано на рис. 4.4 б), они имеют низкое и относительно постоянное сопротивление ниже пороговой температуры <span class="math">\(T_R\)</span>, после которой сопротивление быстро возрастает. PTC термисторы производятся из соединений бария, свинца и титаната стронция.</p>
<h3>4.3 Термопары (thermocouple)</h3>
<p>Открытие возможности генерировать электрическую энергию от температуры (термальной энергии) принадлежит Thomas Johan Seeback (1821 г., в нашей литературе - Зеебек). Суть явления в том, что когда области соединения нескольких разнородных металлов (проводников) подвергается воздействию различных температур, то образуется ЭДС (электродвижущая сила). Фактическое значение генерируемого ЭДС зависит от используемых материалов и разницы температур между горячим и холодным соединениями. Генерируемая ЭДС, на самом деле, обусловлена сочетанием двух эффектов: <a href="https://ru.wikipedia.org/wiki/%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82_%D0%97%D0%B5%D0%B5%D0%B1%D0%B5%D0%BA%D0%B0">эффект Пельтье (Peltier) и эффект Томсона (Thomson, в нашей литературе известный как эффект Зеебека)</a>. Типичный термоэлектрический переход в ЭДС показан на рис. 4.5.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_4-5.png" alt="Termocouple" width="600px"/>
</td>
<td>
<i>
Рис. 4.5. Классическая термопара (hot junction, cold junction - горячая и холодная область соединения проводников соответственно).
</i>
</td>
</tr>
</table>
</div>
<p>Генерируемая ЭДС может быть приблизительно выражена такой зависимостью:</p>
<div class="math">$$
e_0 = C_1 (T_1 - T_2) + C_2 (T_1^2 - T_2^2) \mu v
$$</div>
<p> где: <span class="math">\(T_1\)</span> и <span class="math">\(T_2\)</span> - горячая и холодная температуры (К). <span class="math">\(C_1\)</span> и <span class="math">\(C_2\)</span> - константы, зависящие от материала термопары (например, <span class="math">\(C_1 = 62.1\)</span>, <span class="math">\(C_2 = 0.045\)</span> для Медно/Константной термопары).</p>
<p>Термопары очень широко используются при измерениях температур в производственных условиях. Основные причины такой популярности следующие:</p>
<ul>
<li>они прочны, и их показания стабильны;</li>
<li>они могут измерять в широком диапазоне температур (большой линейный диапазон измерений);</li>
<li>их характеристики практически линейны в широком диапазоне с точностью около <span class="math">\(\pm 0,05\%\)</span>.</li>
</ul>
<p>Однако основным недостатком термопар является их низкая чувствительность по сравнению с другими приборами для измерения температуры (например, RTD или термисторами).</p>
<h4>4.3.1 Материалы термопар</h4>
<p>В теории, любая пара разных металлов (проводников) может использоваться как термопара. Но на практике, только несколько материалов получили широкое распространение. На выбор материалов влияет несколько факторов: чувствительность, стабильность калибровки, инертность в условиях эксплуатации и взаимозаменяемость (термопара должна иметь возможность заменены на такую же без дополнительной калибровки). В табл. 4.1 приведены основные термопары (их тип, композиция, диапазон температур, чувствительность и т.д.).</p>
<p><em>Табл. 4.1. Характеристики и материалы термопар</em></p>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid; border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px; border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-wa1i{font-weight:bold;text-align:center;vertical-align:middle}
.tg .tg-nrix{text-align:center;vertical-align:middle}
</style>
<table class="tg">
<tr>
<th class="tg-wa1i">Тип</th>
<th class="tg-wa1i">Позитивный сплав</th>
<th class="tg-wa1i">Негативный сплав</th>
<th class="tg-wa1i">Температурный диапазон, оС</th>
<th class="tg-wa1i">Температурный коэффициент вариации (мкВ/ оС)</th>
<th class="tg-wa1i">Линейный диапазон (оС) и <br>чувствительность в нем (мкВ / оС)</th>
</tr>
<tr>
<td class="tg-wa1i">R</td>
<td class="tg-nrix">Платина-Родий (87% Pt, 13% Rh)</td>
<td class="tg-nrix">Платина<br></td>
<td class="tg-nrix">0-1500 </td>
<td class="tg-nrix">5.25-14.1</td>
<td class="tg-nrix">1100 - 1500 (13,6-14,1)</td>
</tr>
<tr>
<td class="tg-wa1i">S</td>
<td class="tg-nrix">Платина-Родий (90% Pt, 10% Rh)</td>
<td class="tg-nrix">Платина</td>
<td class="tg-nrix">0-1500</td>
<td class="tg-nrix">5.4 - 12.2</td>
<td class="tg-nrix">1100 - 1500 (13,6-14,1)</td>
</tr>
<tr>
<td class="tg-wa1i">K</td>
<td class="tg-nrix">Хромель (90% Ni, 10% Cr)<br></td>
<td class="tg-nrix">Алюмель (Ni94Al2, Mn3Si)</td>
<td class="tg-nrix">-200 - 1300</td>
<td class="tg-nrix">15.2 - 42.6</td>
<td class="tg-nrix">0 - 1000 (38 - 42.9)</td>
</tr>
<tr>
<td class="tg-wa1i">E</td>
<td class="tg-nrix">Хромель</td>
<td class="tg-nrix">Константант (57% Cu, 43% Ni)</td>
<td class="tg-nrix">-200 - 1000</td>
<td class="tg-nrix">25.1 - 80.8</td>
<td class="tg-nrix">300 - 800 (77.9 - 80.8)</td>
</tr>
<tr>
<td class="tg-wa1i">T</td>
<td class="tg-nrix">Медь<br></td>
<td class="tg-nrix">Константант</td>
<td class="tg-nrix">-200 - 350</td>
<td class="tg-nrix">15.8 - 61.8</td>
<td class="tg-nrix">нелинеен</td>
</tr>
<tr>
<td class="tg-wa1i">J</td>
<td class="tg-nrix">Железо</td>
<td class="tg-nrix">Константант</td>
<td class="tg-nrix">-150 - 750</td>
<td class="tg-nrix">21.8 - 64.6</td>
<td class="tg-nrix">100 -500 (54.4 - 55.9)</td>
</tr>
</table>
<blockquote>
<p><strong>Примечание</strong>. Верхний температурный диапазон работы термопары обычно зависит от условий, в которых она используется. Например, верхний порог для Chromel/Alumel термопары может быть увеличен в окислительной атмосфере, в то время как для Iron/Constantan он может быть увеличен в вакууме.</p>
</blockquote>
<h4>4.3.2 Законы термопар</h4>
<p>Эффекты Плетье, Зеебека и Томпсона объясняют основные принципы генерации ЭДС от термопар. Но их не достаточно, чтобы обеспечить приемлемые методики измерений для каждой конкретной ситуации. Для этого существуют <a href="https://www.lcard.ru/lexicon/thermoelectricity"><strong>3 закона термоэлектрических цепей (three laws of thermoelectric circuits)</strong></a>, которые дают нам полезные практические советы по измерению температуры. Эти законы известны как:</p>
<ul>
<li>закон однородной цепи (law of homogeneous circuit);</li>
<li>закон промежуточных металлов (law of intermediate metals);</li>
<li>закон промежуточных температур (law of intermediate temperature).</li>
</ul>
<p>Эти законы можно объяснить с помощью рис. 4.6.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_4-6.png" alt="Laws of termocouple" width="600px"/>
</td>
<td>
<i>
Рис. 4.6. Законы термопар.
</i>
</td>
</tr>
</table>
</div>
<p><strong>Первый закон</strong> можно объяснить с помощью рис. 4.6 (a) - общая сгенерированная ЭДС зависит только от материалов и температур проводников и не зависит от промежуточных температур.</p>
<p><strong>Согласно 2 закону</strong> (рис. 4.6 (b)), если подключить третий материал в любой точки (формируется 2 дополнительных соединения), то он не будет оказывать никакого эффекта, если эти 2 дополнительных соединения остаются при одинаковых температурах. Этот закон позволяет вставить измерительное устройство без влияния на общую ЭДС.</p>
<p><strong>Третий закон</strong> относиться к калибровке термопар. Он гласит, что если термопара производит ЭДС <span class="math">\(e_1\)</span> при температуре проводников <span class="math">\(T_1\)</span> и <span class="math">\(T_2\)</span> и <span class="math">\(e_2\)</span> при температурах <span class="math">\(T_2\)</span> и <span class="math">\(T_3\)</span>, то она производит общую ЭДС <span class="math">\(e_1 + e_2\)</span> при температурах <span class="math">\(T_1\)</span> и <span class="math">\(T_3\)</span> (рис. 4.6 (c)).</p>
<p>Третий закон особенно важен с точки зрения компенсации измерительного соединения. Калибровочный график термопары строится по холодному участку термопары (<span class="math">\(0^оС\)</span>). Однако в реальных измерительных условиях температура холодного участка редко поддерживается одинаковой и равной температуре при калибровке (обычно ее никак не изолируют и она обладает температурой окружающей среды). Третий закон помогает нам вычислить точную температуру горячего участка с компенсацией новой температуры холодного участка с помощью калибровочных таблиц. </p>
<blockquote>
<p><strong>Пример 4.1</strong> Следующая таблица была получена при калибровке железо-константной термопары с температурой калибровки <span class="math">\(0^оС\)</span> (эталонная).</p>
</blockquote>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid; border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px; border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-baqh{text-align:center;vertical-align:top}
.tg .tg-wa1i{font-weight:bold;text-align:center;vertical-align:middle}
.tg .tg-nrix{text-align:center;vertical-align:middle}
.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
</style>
<table class="tg">
<tr>
<th class="tg-wa1i">Температура (оС)<br></th>
<th class="tg-nrix">15</th>
<th class="tg-nrix">30</th>
<th class="tg-nrix">40</th>
<th class="tg-baqh">...<br></th>
<th class="tg-baqh">180</th>
<th class="tg-baqh">190</th>
<th class="tg-baqh">200</th>
<th class="tg-baqh">208</th>
<th class="tg-baqh">210</th>
</tr>
<tr>
<td class="tg-amwm">ЭДС (мВ)</td>
<td class="tg-baqh">0.778</td>
<td class="tg-baqh">1.56</td>
<td class="tg-baqh">2.11</td>
<td class="tg-baqh">...</td>
<td class="tg-baqh">9.64</td>
<td class="tg-baqh">10.25</td>
<td class="tg-baqh">10.74</td>
<td class="tg-baqh">11.20</td>
<td class="tg-baqh">11.32</td>
</tr>
</table>
<blockquote>
<p><strong>Пример</strong>. Предположим, что температура горячего стыка измеряется термопарой железо-константан при температуре холодного стыка <span class="math">\(30^oC\)</span>, а измеренное напряжение составляет 9,64 мВ. Требуется найти фактическую температуру горячего участка термопары (горячий стык).</p>
<p><strong>Решение</strong></p>
<p>Обратимся к 3 закону термоэлектрических цепей (рис. 4.6 (с)): <span class="math">\(T_1\)</span> - неизвестная температура, <span class="math">\(T_2 = 30^oC\)</span>, <span class="math">\(T_3 = 0^0C\)</span>. Измеренное напряжение составляет <span class="math">\(e_1 = 9.64\)</span> мВ, а калибровочное напряжение <span class="math">\(e_2 = 1.56\)</span> мВ. Тогда: <span class="math">\(e_3 = e_1 + e_2 = 11.20\)</span> мВ. Следовательно, согласно калибровочной таблице, фактическая температура составит <span class="math">\(T_1 = 208^oC\)</span>.</p>
</blockquote>
<h4>4.3.3 Компенсация холодного участка термопар (спай, стык)</h4>
<p>Из рассмотренного выше примера следует, что выходное напряжение термопары будет изменяться при изменении температуры холодного участка (“холодного соединения”). Поэтому для измерения температуры желательно, чтобы холодный участок термопары поддерживался при постоянной температуре. Для данной цели можно использовать ледяную ванну или другие способы “изолирования” температуры от окружающей среды (например, использование термостатической печи с постоянной температурой), но это не является практичным решением для промышленности. Поэтому наиболее распространенный случай работы термопар - это когда холодное соединение имеет температуру окружающей среды. В этом случае при измерении высокой температуры погрешность будет мала (не значима) и ее можно уменьшить с помощью табличного пересчета. </p>
<blockquote>
<p><strong>Пример</strong>. При измерении температуры <span class="math">\(1500^o C\)</span> с температурой окружающей среды в пределах <span class="math">\(25 \pm 15^o C\)</span> погрешность составит около 1%.</p>
<p><strong>Задача</strong>. Обоснуйте приведенное выше утверждение.</p>
</blockquote>
<p>Однако при более низких температурах погрешность будет возрастать. Тогда используют различные <strong>варианты температурной компенсации</strong> (вспоминаем про измерительный мост). Типичная схема подобной компенсации приведена на рис. 4.7.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_4-7.png" alt="Reference junction compensation 1" width="600px"/>
</td>
<td>
<i>
Рис. 4.7. Простой метод компенсации температуры холодного участка термопары.
</i>
</td>
</tr>
</table>
</div>
<p>Здесь через смещение операционного усилителя (op-amp) добавляется постоянное напряжение, соответствующее температуре окружающей среды. Напряжение термопары также усиливается этим же операционным усилителем (op-amp).</p>
<p>Более точный метод температурной компенсации холодного участка термопары представлен на рис. 4.8.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_4-8.png" alt="Reference junction compensation 2" width="600px"/>
</td>
<td>
<i>
Рис. 4.8. Компенсационная схема с использованием измерительного моста (моста Уитстона, Wheatstone bridge).
</i>
</td>
</tr>
</table>
</div>
<p>Здесь термистор или ТДС (RTD) используется для измерения температуры окружающей среды и компенсации погрешности через мостовую схему. Мостовая схема балансируется при <span class="math">\(0^o C\)</span>. Когда температура окружающей среды поднимается выше <span class="math">\(0^o C\)</span>, генерируемая в термопаре ЭДС будет снижаться, но в то же время в мостовую цепь будет добавляться напряжение от термистора для компенсации.</p>
<p>Как указано на рис. 4.8, компенсация холодного участка термопары обычно происходит вместе с контурами формирования сигнала вдали от точки измерения (горячий участок). Это может потребовать использования длинных проводов из материала термопары к цепи компенсации. Для уменьшения длины дорогостоящих проводов термопары (в некоторых случаях платина) обычно используются недорогие компенсационные провода между термопарой и цепью компенсации. Эти провода подбираются таким образом, что бы их характеристики температурной ЭДС были близки к характеристикам проводов термопары при температуре окружающей среды.</p>
<h4>4.4 Заключение</h4>
<p>Температура является одним из самых важных параметров технологических процессов. Это параметр требует постоянного измерения в огромном количестве процессов и устройств (например очень хорошей практикой является измерение температуры двигателей различных актуаторов). При этом среди множества типов измерителей температуры, наиболее распространенными являются термометры сопротивления и термопары. Их популярность в основном обусловлена прочностью, повторяемостью (от сенсора к сенсору) и широкими линейными диапазонами рабочих температур. “Чистые” термометры сопротивления и термопары редко используются на практике, вместо этого их помещают в защитные металлические оболочки. Наряду с этим, должны использоваться и цепи формирования сигнала для уменьшения погрешностей (наши любимые измерительные мосты и различные их вариации).</p>
<blockquote>
<p><strong>Примечание</strong>. На практике существуют случаи, когда измеряемые температуры превышают <span class="math">\(2000^o C\)</span>. Рассмотренные нами подходы не в состоянии измерить настолько высокую температуру. Вместо этого измерение проводится на расстоянии бесконтактным методом (радиационные пирометры). Но это уже совсем другая история…</p>
</blockquote>
<h4>4.5 Упражнения</h4>
<ol>
<li>Назовите материалы, которые обычно используется для ТДС (RTD). Какой из них обладает наиболее широкими линейными характеристиками?</li>
<li>Что имеется в виду под компенсацией проводов для ТДС? Как работают данные устройства?</li>
<li>PT-100 - это платиновый ТДС, сопротивление которого при <span class="math">\(0^oC = 100 \Omega\)</span>. Если температурный коэффициент сопротивления платины составляет <span class="math">\(3.91 \times 10^{-3} \frac{1}{^oC}\)</span>, то найдите его сопротивление при <span class="math">\(100^oC\)</span>.</li>
<li>В чем разница между термистором NTC и PTC типа?</li>
<li>Обоснуйте, почему термистор больше подходит для измерения температуры в небольшом диапазоне.</li>
<li>Назовите три типа термопар и их температурные диапазоны.</li>
<li>Нарисуйте схемы и объясните 3 закона термопар.</li>
<li>Что подразумевается под компенсацией холодного участка термопары? Предложите 2 способа такой компенсации.</li>
<li>Термопара имеет линейную чувствительность <span class="math">\(30 \mu v / ^oC\)</span> и откалибрована при температуре холодного соединения <span class="math">\(0^C\)</span>. Данная термопара используется для измерений при температуре холодного соединения <span class="math">\(30^oC\)</span>. Найдите актуальную температуру горячего соединения, если генерируемая ЭДС равна <span class="math">\(3.0 mv\)</span>.</li>
</ol>
<h2 id='5-Pressure_and_force'> 5. Измерения давления и силы (temperature measurement)</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<h3>5.1. Введение и цели</h3>
<p>В этом разделе мы обсудим различные методы измерения давления и силы. Для этого, как правило, используют эластичные элементы, такие как мембраны (diaphragms) и трубки Бурдона (Bourdon tubes). С другой стороны, могут использоваться и тензодатчики (strain gages), однако они применяются для измерения силы (усилия). Конструкции и принципы работы различных упругих элементов для измерения давления рассмотрены далее в настоящей главе. За ними следует рассмотрение тензодатчиков и способов их использования в неразрушающем контроле.</p>
<p>В результате анализа данной главы необходимо уметь:</p>
<ol>
<li>Назвать различные способы измерения давления с помощью эластичных преобразователей (transducers).</li>
<li>Объяснить конструкцию и принцип работы датчика давления с трубкой Бурдона (Bourdon tube).</li>
<li>Определить коэффициент деформации датчиков давления (strain gage).</li>
<li>Назвать различные материалы тензодатчиков и указать их коэффициенты замера (gage factors).</li>
<li>Нарисовать схему соединения несбалансированного моста с четырьмя тензодатчиками, чтобы получить максимальную чувствительность и идеальную температурную компенсацию.</li>
<li>Назвать различные способы измерения силы с помощью тензодатчиков.</li>
</ol>
<h3>5.2. Измерение давления</h3>
<p>Измерение давления внутри замкнутого пространства (трубопровод или контейнер) в производственных условиях является весьма сложной задачей. Необходимо учитывать, что показатели давления могут меняться в широких диапазонах и довольно быстро (от очень высокого до вакуума). При этом измеряемая среда тоже может быть разнообразной: как жидкой, так и газообразной. В настоящей главе мы не будем обсуждать методы измерения давления в вакууме, а попытаемся сконцентрироваться на общих методах измерения давления, которое превышающего атмосферное (это наиболее частый случай в различных производствах). Такие измерения в основном осуществляются с помощью <a href="https://ru.wikipedia.org/wiki/%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D0%B4%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F">различных упругих элементов</a>: <strong>мембран (diaphragms), мехов (bellows) и трубок Бурдона (Bourdon tubes)</strong>. Эти эластичные элементы меняют свою форму в зависимости от приложенного давления, а изменение формы может быть измерено с помощью подходящих датчиков изгиба (deflection transducers) или конденсаторов.</p>
<h4>5.2.1 Мембраны (diaphragms)</h4>
<p>Как правило, различают <strong>три типа</strong> мембран:</p>
<ul>
<li>Тонкая пластина (Thin plate);</li>
<li>Мембрана (Membrane);</li>
<li>Гофрированная диафрагма (Corrugated diaphragm) .</li>
</ul>
<p>Данная классификация основана на различиях в силе воздействующего давления и вызываемых соответствующих смещениях. При этом принцип измерения остается одним и тем же - с использованием <strong>датчиков смещения (например, измеряя емкость конденсатора)</strong>.</p>
<p><strong>1. Тонкая пластина (thin plate)</strong> - изготавливается путем механической обработки цельного блока заготовки с изготовлением круглой тонкой части посередине. Такая конструкция похожа на мембрану, но используется для измерения относительно высокого давления.</p>
<p><strong>2. В мембране (membrane)</strong> - чувствительный участок наклеивается между двумя твердыми блоками. Толщина мембраны гораздо меньше пластины в первом случае и, как следствие, смещение в ответ на давление гораздо больше (а значит больше и чувствительность).</p>
<p><strong>3. Гофрированная мембрана (corrugated diaphragm)</strong>. Используется для еще большего увеличения чувствительности. Когда при небольшом изменении давления может быть получено очень большое отклонение (изменение формы). Однако при этом теряется линейность отклика.</p>
<p>Общий вид мембранных датчиков приведен на рис. 5.1.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_5-1.png" alt="Diaphragm" width="600px"/>
</td>
<td>
<i>
Рис. 5.1. Устройство датчиков мембранного типа.
</i>
</td>
</tr>
</table>
</div>
<p>Для изготовления таких сенсоров используются бронза, латунь, нержавеющая сталь и т.д. В последнее время широко используются мембраны из кремния в датчиках давления <a href="https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BC%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B">MEMS (Micro Electro Mechanical Systems, Микроэлектромеханические системы)</a>.</p>
<p>Отклонение мембраны может быть выражено как:</p>
<div class="math">$$
f_n = \frac{1}{2 \pi} \sqrt{\frac{k}{m_{eq}}}
$$</div>
<p>где</p>
<p> <span class="math">\(m_{eq}\)</span> - эквивалентная масса,</p>
<p> <span class="math">\(k\)</span> - константа упругости для диафрагмы.</p>
<p>Рабочее отклонение при измеряемом давлении должна быть меньше, чем собственное отклонение мембраны (иначе датчик выйдет из строя).</p>
<p>Как вы уже могли понять, принцип работы мембранных датчиков весьма прост. При подаче давления на мембрану она отклоняется, и максимальное отклонение в центре (<span class="math">\(y_0\)</span>) может быть измерено с помощью датчика смещения (например как изменение емкости конденсатора). Для тонкой пластины максимальное отклонение <span class="math">\(y_0\)</span> мало (<span class="math">\(y_0 \lt 0,3t\)</span>), а линейная зависимость между <span class="math">\(p\)</span> и <span class="math">\(y_0\)</span> выражатся как:</p>
<div class="math">$$
y_0 = \frac{3}{16} p \frac{(1-\nu^2)}{Et^3}R^4
$$</div>
<p>где</p>
<p> <span class="math">\(E\)</span> - модуль упругости материала диафрагмы, и</p>
<p> <span class="math">\(\nu\)</span> - отношение Пуассона.</p>
<div class="math">$$
p_{max} = 1.5(\frac{t}{R})^2 \sigma_{max}
$$</div>
<p>где</p>
<p> <span class="math">\(\sigma_{max}\)</span> - упругая степень деформации материала.</p>
<p>Для обычной мембраны мембраны при большом отклонение соотношение между <span class="math">\(p\)</span> и <span class="math">\(y_0\)</span> будет нелинейным (для <span class="math">\(\nu\)</span> = 0.3):</p>
<div class="math">$$
p = 3.58 \frac{Et^3}{R^4} y_0^3
$$</div>
<p>Для гофрированной мембраны трудно дать какую-либо определенную математическую связь между <span class="math">\(p\)</span> и <span class="math">\(y_0\)</span>; но эта связь также сильно нелинейна.</p>
<p>По мере деформации мембраны, величина и знак деформации будут отличаться для разных мест мембраны. Для нивелирования подобного эффекта используют четырех датчика смещения на самой мембране. Принцип работы подобных датчиков будет рассмотрен в следующем разделе. </p>
<p>Кроме того, следует понимать, что в реальных условиях математический расчет поведения диафрагм - <a href="https://journals.ioffe.ru/articles/viewPDF/51357">весьма сложная задача</a>. Поэтому важно использовать калибровку и внимательно изучать документацию для каждого конкретного мембранного сенсора.</p>
<h4>5.1.2 Меха (сильфоны, bellows)</h4>
<p>Такой тип сенсоров (рис. 5.2) изготавливается с мягкими стенками и один из жестких концов сенсора фиксируется (на нем же расположены отверстия для входа среды). Другой конец мехов свободно перемещается (как правило, именно на нем и происходит измерение действующего на меха давления).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_5-2.png" alt="Bellows" width="600px"/>
</td>
<td>
<i>
Рис. 5.2. Схема сенсора типа "меха".
</i>
</td>
</tr>
</table>
</div>
<p>Смещение свободного конца можно увеличить, за счет использования бОльшего количества изгибов (обычно варьируется от 5 до 20 “складок”). Часто используется внешняя пружина, установленная противоположно движению сильфонов. В результате из уравнения для пружины можно получить линейную зависимость для измерения давления:</p>
<div class="math">$$
p \cdot A = k \cdot x
$$</div>
<p>где</p>
<p> <span class="math">\(A\)</span> - площадь мехов,</p>
<p> <span class="math">\(k\)</span> - константа сжатия,</p>
<p> <span class="math">\(x\)</span> - перемещение мехов.</p>
<p>Для изготовления мехов обычно используют фосфорную бронзу, латунь, бериллиевую медь и нержавеющую сталь. Сильфоны изготавливаются либо путем токарной обработки цельного блока металла, либо путем пайки или сварки штампованных круглых колец, либо путем специальной прокатки (прессования) труб.</p>
<h4>5.1.3 Трубка Бордона (Bourdon tube)</h4>
<p>Наверное наиболее широко для индикации давления используются трубчатые манометры Бордона. Этот тип манометров был впервые разработан Э. Бордоном в 1849 году. Трубчатые манометры Бордона могут использоваться для измерения в широком диапазоне давлений: от вакуума до давления в несколько тысяч фунтов на кв. дюйм (psi). В основном такой манометр состоит из С-образной полой трубки, один конец которой закреплен и соединен с резьбовым соединением. Другой конец свободен и соединен с индикацией (рис. 5.3). Поперечное сечение трубы эллиптическое.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_5-3.png" alt="Bouron tubes 1" width="600px"/>
<br>
a)
<br>
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_5-3_a.jpg" alt="Bouron tubes 2" width="600px"/>
<br>
b)
</td>
<td>
<i>
Рис. 5.3. Трубка Бордона, схема (а) и пример (b, https://en.wikipedia.org/wiki/Pressure_measurement).
</i>
</td>
</tr>
</table>
</div>
<p>При подаче давления эллиптическая труба пытается достичь круглого поперечного сечения, в результате чего трубка пытается выпрямиться. Таким образом, свободный конец трубки перемещается вверх в зависимости от величины давления. На свободном конце прикреплен механизм отклонения и индикации, который поворачивает указатель. В качестве материалов используют для изготовления также используют фосфорная бронзу, латунь и бериллиевую медь. Для 2” (два инч) общего диаметра трубы полезный ход свободного конца составляет примерно <span class="math">\(\frac{1}{8}\)</span>”. Несмотря на то, что трубы С-типа наиболее распространены, используются также трубы других форм, например, гелиоцентрические (helical), витые (twisted) или спиральные (spiral).</p>
<h3>5.3. Измерение силы</h3>
<p>Следующем после измерения давления является измерение силы. Наиболее популярным способом здесь является использование деформируемых измерителей. Мы измеряем деформацию, возникшую под действием силы, с помощью деформационных датчиков. В свою очередь, умножив данную деформацию на эффективную площадь поперечного сечения и модуль Юнга материала (Young’s modulus) мы получаем значение действующей силы. Тензодатчики (Load cells) и измерительные кольца (Proving rings) - два распространенных метода измерения силы с помощью деформации (strain gages). Сначала мы обсудим принцип работы тензометрических датчиков, а затем перейдем к прочим методам измерения силы.</p>
<h4>5.3.1 Тензодатчик (Strain Gage)</h4>
<p><a href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BD%D0%B7%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA">Тензодатчик (strain gages)</a> (иногда в России его называют <a href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BD%D0%B7%D0%BE%D1%80%D0%B5%D0%B7%D0%B8%D1%81%D1%82%D0%BE%D1%80">тензорезистор</a>) является одним из самых популярных типов преобразователей и имеет широкий спектр применения. Он может использоваться для измерения силы, крутящего момента, давления, ускорения и многих других параметров которые связаны с силой воздействия. Основной принцип работы такого датчика весьма прост: при применении растяжения (strain) к тонкой металлической проволоке изменяются ее размеры и, следовательно, сопротивление. </p>
<h5>5.3.1.1 Коэффициент тензочувствительности (коэффициент замера датчика деформации, Gage Factor)</h5>
<p>Рассмотрим длинную прямую металлическую проволоку длиной <span class="math">\(l\)</span> круглого сечения диаметром <span class="math">\(d\)</span>. При воздействии силы, приложенной к этому проводу с двух концов, изменяется размер датчика (<span class="math">\(l\)</span> меняется на <span class="math">\(l + \Delta l\)</span>, <span class="math">\(d\)</span> меняется на <span class="math">\(d + \Delta d\)</span> и площадь сечения <span class="math">\(A\)</span> меняется на <span class="math">\(A + \Delta A\)</span>, рис. 5.4).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_5-4.png" alt="Change of resistance with strains" width="600px"/>
</td>
<td>
<i>
Рис. 5.4. Изменение сопротивления в зависимости от деформации (изменение площади сечения А показано пунктиром).
</i>
</td>
</tr>
</table>
</div>
<p>Для простоты будем считать, что все изменения происходят в положительном направлении. Тогда зависимость сопротивление провода от его размеров будет выражаться следующим образом:</p>
<div class="math">$$
R = \frac{\rho l}{A}
$$</div>
<p>где</p>
<p> <span class="math">\(\rho\)</span> - <a href="https://en.wikipedia.org/wiki/Electrical_resistivity_and_conductivity">электрическая проводимость</a>, <span class="math">\(l\)</span> - размер проводника, <span class="math">\(A\)</span> - площадь сечения проводника.</p>
<p>Тогда изменение сопротивления в зависимости от растяжения:</p>
<div class="math">$$
\Delta = (\frac{\delta R}{\delta l})\Delta l + (\frac{\delta R}{\delta A})\Delta A + (\frac{\delta R}{\delta \rho})\Delta \rho = \frac{\rho}{A} \Delta l - \frac{\rho}{A^2} \Delta A + \frac{l}{A} \Delta \rho = R \frac{\Delta l}{l} - R \frac{\Delta A}{A} + R \frac{\Delta \rho}{\rho}
$$</div>
<p>или,</p>
<div class="math">$$
\begin{equation}\begin{aligned}
\frac{\Delta R}{R} = \frac{\Delta l}{l} - \frac{\Delta A}{A} + \frac{\Delta \rho}{\rho}
\end{aligned}\end{equation}
\tag{5.1}\label{eq5.1}
$$</div>
<p>Тогда если площадь круглого сечения равна <span class="math">\(A=\frac{\pi d^2}{4}\)</span>, то <span class="math">\(\Delta A = \frac{\pi d}{2} \Delta d\)</span>. Или,</p>
<div class="math">$$
\frac{\Delta A}{A} = 2 \frac{\Delta d}{d}
$$</div>
<p>Следовательно,</p>
<div class="math">$$
\frac{\Delta R}{R} = \frac{\Delta l}{l} - 2 \frac{\Delta d}{d} + \frac{\Delta \rho}{\rho}
$$</div>
<p>Теперь введем константу, называемую <a href="https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%8D%D1%84%D1%84%D0%B8%D1%86%D0%B8%D0%B5%D0%BD%D1%82_%D0%9F%D1%83%D0%B0%D1%81%D1%81%D0%BE%D0%BD%D0%B0">“Пуассоновским отношением”</a> (отношение поперечного сжатия к продольному расширению):</p>
<div class="math">$$
v = -\frac{lateral\ strain}{longitudinal\ strain} = - \frac{\frac{\Delta d}{d}}{\frac{\Delta l}{l}}
$$</div>
<p>Соотношение Пуассона является свойством материала и не зависит от размера. Итак, с учетом <span class="math">\(\eqref{eq5.1}\)</span> можно заключить, что:</p>
<div class="math">$$
\frac{\Delta R}{R} = (1+2v)\frac{\Delta l}{l} + \frac{\Delta \rho}{\rho}
$$</div>
<p>Следовательно,</p>
<div class="math">$$
\frac{\frac{\Delta R}{R}}{\frac{\Delta l}{l}} = 1 + 2v + \frac{\frac{\Delta \rho}{\rho}}{\frac{\Delta l}{l}}
$$</div>
<p>Последнее слагаемое в правой части вышеприведенного выражения представляет собой изменение сопротивления материала в результате приложенной деформации (возникающее из-за пьезостойкости материала). Фактически, все элементы в правой части приведенного выше уравнения не зависят от геометрии проволоки, подвергающейся деформации, а зависят только от свойств материала проволоки. Именно по этой причине для описания характеристик деформационного датчика используется так называемый <strong>коэффициент тензочувствительности (“Коэффициент замера”, gage factor)</strong>. Который определяется как:</p>
<div class="math">$$
G = \frac{\frac{\Delta R}{R}}{\frac{\Delta l}{l}}=1 + 2v + \frac{\frac{\Delta \rho}{\rho}}{\frac{\Delta l}{l}}
$$</div>
<p>Если учесть, что для нормальных металлов отношение Пуассона <span class="math">\(v\)</span> варьируется в диапазоне <span class="math">\( 0.3 \leq v \leq 0.6 $, а коэффициент пьезостойкости варьируется в диапазоне $0.2 \leq \frac{\frac{\Delta \rho}{\rho}}{\frac{\Delta l}{l}} \leq 0.6\)</span>, то мы получим, что “коэффициент тензочувствительности” металлических тензодатчиков варьируется в диапазоне <span class="math">\(1.8 \leq G \leq 2.6\)</span>. </p>
<p>Однако стоит учитывать, что для полупроводниковых тензодатчиков данный диапазон не верен и они имеют очень большой коэффициент тензочувствительности (в диапазоне 100-150 отн. ед.). Это достигается за счет сильного пьезостойкого свойства полупроводников. Коммерчески доступные тензодатчики имеют определенные фиксированные значения сопротивления, например, 120Ω, 350Ω, 1000Ω и др. Изготовитель также указывает коэффициент тензочувствительности и максимальный ток при измерении для исключения самонагрева датчика (обычно в диапазоне от 15 мА до 100 мА).</p>
<p><strong>Выбор материала для металлического тензодатчика</strong> должен зависеть от нескольких факторов:</p>
<ul>
<li>материал должен иметь низкий температурный коэффициент сопротивления;</li>
<li>материал должен иметь низкий коэффициент теплового расширения.</li>
</ul>
<p>Исходя из приведенных факторов, только несколько сплавов пригодны для коммерческих металлических тензодатчиков:</p>
<ul>
<li><strong>Advance</strong> (55% Cu, 45% Ni): Gage Factor between 2.0 to 2.2;</li>
<li><strong>Nichrome</strong> (80% Ni, 20% Co): Gage Factor between 2.2 to 2.5.</li>
<li>Иногда еще используется <strong>изоэластан (isoelastic)</strong> - другой зарегистрированный в качестве торговой марки сплав с Gage Factor около 3.5. </li>
</ul>
<p>Тензодатчики полупроводникового типа, хотя и имеют большой коэффициент тензочувствительности, находят ограниченное применение из-за их высокой чувствительности и нелинейности характеристик (в чем-то аналогичных полупроводниковым термисторам).</p>
<h5>5.3.1.2 Металлические тензометрические датчики (Strain Gage)</h5>
<p>Как отмечалось выше, большинство тензодатчиков - металлические. Они могут быть двух типов: <strong>несвязанные и связанные</strong>. <strong>Несвязанный тензодатчик</strong> обычно используется для измерения деформации (или смещения) между неподвижной и подвижной конструкцией путем крепления к <strong>обоим конструкциям</strong> четырех металлических проводов таким образом, что два находятся в сжатии и два - в натяжении.</p>
<p>С другой стороны, в <strong>связанном деформационном датчике</strong> деформируемый элемент не связан проводами. При этом сам датчик находится на подложке, которая постоянно закрепляется на измеряемой конструкции с помощью клея. Чаще всего используются склеенные тензодатчики типа металлической фольги. Такие датчики изготавливается методом фотографического травления тонкораскатанного металлического проводника. Тонкие полоски фольги являются активными элементами тензодатчика, а толстые полоски фольги служат для обеспечения электрических соединений. Из-за большой площади толстой части их сопротивление мало и они не оказывают влияния на измерение сопротивления при деформации. Зато такой проводник увеличивает площадь для рассеивания тепла, кроме того становится проще соединить сигнальные провода с тензодатчиком.</p>
<p>Конструкция описанных типов тензодатчиков и варианты получения сигнала показана на рис. 5.5.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_5-5.png" alt="Gage" width="600px"/>
</td>
<td>
<i>
Рис. 5.5. Несвязанные (а) и связанные (б) металлические тензодатчики и варианты их подключения через мостовые схемы.
</i>
</td>
</tr>
</table>
</div>
<p>На рис. 5.5. (а) показана схема измерения давления. Мембрана напрямую соединена арматурой с несвязным тензодатчиком. С увеличением давления увеличивается нагрузка на измерительную пару В и С, а на измерительную пару А и D - уменьшается. Для получения сигнала используется измерительный мост с четырьмя активными элементами (мост Уитстона, уже встречаемый нами ранее). Резистор <span class="math">\(R_y\)</span> и потенциометр <span class="math">\(R_x\)</span> используются для первоначальной балансировки моста, <span class="math">\(v_0\)</span> - приложенное напряжение, а <span class="math">\(dv_i\)</span> - выходное (измеряемое) напряжение на вольтметре или аналогичном устройстве с внутренним сопротивлением <span class="math">\(R_i\)</span>.</p>
<p>В свою очередь на рис. 5.5 (b) приведен связанный тензодатчик и вариант его подключения также через измерительный мост с постоянным балансирующим сопротивлением (например, <span class="math">\(R_g = R_1 = R_2 = R_3 = 200 \Omega\)</span>, когда нет напряжения).</p>
<blockquote>
<p><strong>Задача 5.1</strong> Как Вы думаете, какой вариант на рис. 5.5 наиболее чувствительный и точный. Обоснуйте свой ответ.</p>
<p><strong>Задача 5.2</strong> Если на рис. 5.5 (b) <span class="math">\(R_g = R_1 = R_2 = R_3 = 200 \Omega\)</span> при отсутствии давления, а само приложенное давление вызывает напряжение <span class="math">\(V_{in} = 50 mV\)</span>. То каким будет измеренное напряжение <span class="math">\(V_{measure}\)</span>, если размер датчика увеличился на 2%.</p>
</blockquote>
<p>Учтите, что датчик на рис. 5.5 (b) может измерять деформацию только в одном направлении. Если мы хотим измерить деформацию в двух или более направлениях в одной и той же точке, то необходимо использовать розетку тензодатчиков. Она изготавливается путем укладки нескольких тензодатчиков в разных направлениях (на рис. 5.6 показана трехэлементная деформационная розетка, уложенная в стек под <span class="math">\(45^0\)</span>).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_5-6.png" alt="Three-element Gage" width="600px"/>
</td>
<td>
<i>
Рис. 5.6. Трехэлементный тензодачик, уложенный розеткой под углом $45^oC$
</i>
</td>
</tr>
</table>
</div>
<p>В заключение отметим, что материал подложки для тензодатчика должен удовлетворять нескольким важным свойствам:</p>
<ul>
<li>обладать высокой механической прочностью;</li>
<li>обладать высокой диэлектрической проницаемостью;</li>
<li>должен быть негигроскопичным (иначе поглощение влаги вызовет набухание и создаст локальную деформацию - т.е. систематическую погрешность).</li>
</ul>
<p>Обычно в качестве подложки используют специально пропитанную бумага, стекловолокно и т.д. Крепежный материал, используемый для постоянной фиксации тензодатчика к конструкции также должен быть негигроскопичным (обычно используют эпоксидную смолу и целлюлозу).</p>
<h5>5.3.1.3 Полупроводниковый тип тензодатчика (Strain Gage)</h5>
<p>Тензопреобразователь полупроводникового типа изготавливается из тонкой кремниевой проволоки (обычно от 0,005 до 0,0005 дюйма и длиной от 0,05 до 0,5 дюйма). Такие датчики могут быть двух типов: <strong>p-типа и n-типа</strong>. В первом случае сопротивление увеличивается с положительной деформацией, а в последнем - уменьшается с температурой. Конструкция и типичные характеристики полупроводникового тензодатчика показаны на рис. 5.7.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_5-7.png" alt="Semiconductor strain gage" width="600px"/>
</td>
<td>
<i>
Рис. 5.7. Конструкция n-типа (a) и характеристики (b) полупроводникового тензодатчика.
</i>
</td>
</tr>
</table>
</div>
<p>В настоящее время все большую популярность приобретают датчики давления <a href="https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BC%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B">MEMS</a>. Они изготавливаются из небольшой кремниевой диафрагмы с установленными на ней четырьмя пьезорезистивными тензодатчиками. Подобные датчики оснащены встроенными контурами формирования сигнала и выдают напряжение, соответствующее приложенному давлению. Небольшой вес и малые габариты датчика делают его пригодным для измерения давления в специфических условиях применения.</p>
<h5>5.3.1.4 Мост тензодатчиков (Strain Gage Bridge)</h5>
<p>Еще раз подробнее рассмотрим мостовую схему для увеличения точности и чувствительности измерений. Для рассмотренных датчиков деформация является микроскопической (типичное значение: <span class="math">\(\frac{\Delta l}{l} = 1 \times 10^{-4}\)</span>). В результате связанное с ним изменение сопротивления тоже мало, как и его линейный диапазон измерений. При этом если один тензодатчик подключен к измерительному мосту (Wheatstone bridge) с тремя фиксированными сопротивлениями, то выходное напряжение моста тоже будет линейным (выходное напряжение моста будет линейно изменяться с <span class="math">\(\frac{\Delta R}{R}\)</span> , если <span class="math">\(\frac{\Delta R}{R}\)</span> не превысит 0,1) (рис. 5.5 (b)).</p>
<p>При этом в реальных мостовых схемах, как правило, никогда не используется один тензодатчик - это связано не с улучшением линейности, а с получением идеальной <strong>температурной компенсации</strong>. Таким образом, если в нашем случае находится один тензодатчик в мосте с тремя плечами с фиксированным сопротивлением (рис. 5.5 (b)), то из-за повышения температуры, сопротивление тензодатчика будет изменяться. Это приведет к разбалансировке моста и даст ошибочный сигнал (даже если деформация датчика отсутствет). С другой стороны, если используется два одинаковых тензодатчика для одного моста (на соседних плечах, один на сжатие, другой на растяжение) - температурная компенсация может быть достигнута. Изменение температуры будет в равной степени влиять на сопротивления тензодатчиков и это обеспечит баланс моста при отсутствии деформаций. Такая конфигурация моста называется <strong>“push-pull”</strong>. Еще одним преимуществом такого решения является повышение чувствительности.</p>
<p>Фактически, все четыре рычага моста могут быть сформированы из активных тензодатчиков. Это позволит еще больше повысить чувствительность, сохраняя при этом свойство температурной компенсации (рис. 5.5 (а)) (именно так, например, делается в точных аналитических весах, измеряющих величины с точностью до 0.0001 г).</p>
<p>Можно показать, что если сопротивления тензодатчиков одинаковы и равны коэффициенту тензочувствительности <span class="math">\(G\)</span>, то несбалансированное напряжение будет равно</p>
<div class="math">$$
e_0 = \frac{EG}{4}(\epsilon_1 + \epsilon_3 - \epsilon_1)
$$</div>
<p> где <span class="math">\(\epsilon_1, \epsilon_2, \epsilon_3, \epsilon_4\)</span> - это деформации, созданные с соответствующими знаками (<span class="math">\(\epsilon = \frac{\Delta l}{l}\)</span>)</p>
<blockquote>
<p><strong>Примечание</strong>. Измерительные мосты применяются для измерения/балансировки электрического сопротивления (относятся к одинарным мостам). Далее приведены основные расчеты для моста (перед глазами нужно держать рис. 5.5 (b) и задачу 5.2.)</p>
<p>Итак, принято считать, что ток течет от + к - (хотя электронны движутся от - к + и несут с собой отрицательный заряд…) и проходить он будет по 2 путям: <span class="math">\(A-B-C\)</span> и <span class="math">\(A-D-C\)</span> (считаем, что сопротивление вольтметра велико настолько, что точки <span class="math">\(D-B\)</span> не соединены). Тогда если <span class="math">\(\phi_A, \phi_B, \phi_C, \phi_D\)</span> - потенциалы соответствующих точек, то напряжения между точками <span class="math">\(A-C\)</span> и <span class="math">\(D-B\)</span> равно</p>
<p>
<div class="math">$$U_{AC} = \phi_A - \phi_C $$</div>
</p>
<p>
<div class="math">$$U_{DB} = \phi_D - \phi_B $$</div>
</p>
<p>И сопротивление участков <span class="math">\(A-B-C\)</span> и <span class="math">\(A-D-C\)</span> равны:</p>
<p>
<div class="math">$$R_{ABC} = R_1 + R_g$$</div>
</p>
<p>
<div class="math">$$R_{ADC} = R_2 + R_3$$</div>
</p>
<p>Тогда по закону Ома токи на участках <span class="math">\(A-B-C\)</span> и <span class="math">\(A-D-C\)</span></p>
<p>
<div class="math">$$I_{ABC} = \frac{U_{AC}}{R{ABC}} = \frac{U_{AC}}{R_1 + R_g}$$</div>
</p>
<p>
<div class="math">$$I_{ADC} = \frac{U_AC}{R_{ADC}} = \frac{U_{AC}}{R_2 + R_3}$$</div>
</p>
<p>А напряжение на участках <span class="math">\(D-C\)</span> и <span class="math">\(B-C\)</span>:</p>
<p>
<div class="math">$$U_{DC} = I_{ADC}R_2$$</div>
</p>
<p>
<div class="math">$$U_{BC} = I_{ABC}R_g$$</div>
</p>
<p>Потенциалы в точках B и D выражаются как:</p>
<p>
<div class="math">$$\phi_D = \phi_C + U_{DC} = \phi_C + I_{ADC}R_2$$</div>
</p>
<p>
<div class="math">$$\phi_B = \phi_C + U_{BC} = \phi_C + I_{ABC}R_g$$</div>
</p>
<p>Тогда напряжение <span class="math">\(D-B\)</span> будет:</p>
<p>
<div class="math">$$\begin{align}U_{DB} & = \phi_D - \phi_B \\ & = (\phi_C + I_{ADC}R_2) - (\phi_C + I_{ABC}R_x) \\ & = I_{ADC}R_2 - I_{ABC}R_g \\ & = \frac{U_{AC}}{R_2 + R_3} \dot R_2 - \frac{U_{AC}}{R_1 + R_g} \dot R_g \end{align}$$</div>
</p>
<p>При этом если мост сбалансирован, то:</p>
<p>
<div class="math">$$0 = U_{DB} = \frac{U_{AC}}{R_2 + R_3} \dot R_2 - \frac{U_{AC}}{R_1 + R_g} \dot R_g$$</div>
</p>
<p>
<div class="math">$$\frac{R_2}{R_2 + R_3} = \frac{R_g}{R_1 + R_g}$$</div>
</p>
<p>
<div class="math">$$R_g = \frac{R_2 R_3}{R_1} $$</div>
</p>
</blockquote>
<h4>5.3.2 Нагрузочная ячейка (Load Cell)</h4>
<p>Нагрузочные ячейки широко используются для измерения силы. По своей сути - это комбинация тензодатчиков на упругом металлическом корпусе. Одним из наиболее распространенных способ измерения действующей силы на данную систему является <strong>весовой мост (weigh bridge, рис. 5.8)</strong>. С точки зрения измерительных цепей - это мост Уитстона, где все 4 сопротивления являются тензодатчиками: два измеряют продольную деформацию (при сжатии ячейки они сжимаются), а два других - поперечную (при сжатии ячейки они растягиваются, рис. 5.8).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_5-8.png" alt="Load cell" width="600px"/>
</td>
<td>
<i>
Рис. 5.8. Пример и схема нагрузочной ячейки (Load cell) с 4 тензодатчиками.
</i>
</td>
</tr>
</table>
</div>
<p>Тензодатчики, измеряющие одинаковую деформацию (скажем, растяжение) располагают на противоположных плечах моста, в то время как соседние плечи моста должны измерять противоположные деформации. Если тензодатчики идентичны по характеристикам, то это обеспечит не только идеальную температурную компенсацию, но и максимально достижимую чувствительность. </p>
<p>Сама деформация в случае весового моста задается уравнением:</p>
<div class="math">$$
\epsilon = \frac{\nu F}{AE}
$$</div>
<p> где <span class="math">\(F\)</span> - приложенная сила, <span class="math">\(A\)</span> - площадь поперечного сечения, <span class="math">\(E\)</span> - модуль Юнга для эластичного материала, <span class="math">\(\nu\)</span> - соотношение Пуассона.</p>
<h4>5.3.3 Удостоверяющее кольцо (Proving Ring).</h4>
<p>Еще одним распространенным типом датчиков для измерения силы воздействия являются удостоверяющие кольца. Данный тип устройств зачастую используется для проверки действующе силы. Удостоверяющие кольца могут использоваться для измерения как сжимающих, так и растягивающих усилий. Преимущество удостоверяющего кольца заключается в том, что благодаря его конструкции можно развить бОльшую деформацию по сравнению с тензодатчиком и проводить измерения в более широких диапазонах (рис. 5.9).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_5-9.png" alt="Proving Ring" width="600px"/>
</td>
<td>
<i>
Рис. 5.9. Удостоверяющее кольцо.
</i>
</td>
</tr>
</table>
</div>
<p>Кольцо состоит из полого цилиндрического стержня радиуса <span class="math">\(R\)</span>, толщины <span class="math">\(t\)</span> и осевой ширины <span class="math">\(b\)</span>. Измеряемое усилие прикладывается к специальным площадкам, закрепленным с двух сторон удостоверяющего кольца. Четыре тензодатчика установлены на стенках испытательного кольца: два - на внутренней стороне и два - на внешней стороне (опять мост Уинстона, аналогичный предыдущему разделу). При воздействии на кольцо 2 датчика сжимаются (<span class="math">\(- \epsilon\)</span>), в то время как датчики 1 и 3 - растягиваются (<span class="math">\(+ \epsilon\)</span>). Величина деформации в таком случае задается выражением:</p>
<div class="math">$$
\epsilon = \frac{1.08 FR}{Ebt^2}
$$</div>
<h4>5.3.4 Кантиливерная балка (Cantilever Beam)</h4>
<p>С такими устройствами мы уже сталкивались в курсе когда рассматривали нагрузочные ячейки. По сути, кантиливерная балка является частным случаем нагрузочной ячейки (раздел 5.3.2). Такая конструкция может использоваться для измерения веса до 10 кг. Один конец балки является жестко закрепленным, а на другой (свободный) прилагается нагрузка (рис. 5.8).</p>
<blockquote>
<p><strong>Задача</strong>. Подумайте, как еще можно расположить тензодатчики?</p>
</blockquote>
<p>Напряжение на фиксированном конце выражается как:</p>
<div class="math">$$
\epsilon = \frac{6Fl}{Ebt^2}
$$</div>
<p>где:</p>
<p> <span class="math">\(l\)</span> - длина балки</p>
<p> <span class="math">\(t\)</span> - толщина кантиливера</p>
<p> <span class="math">\(b\)</span> - ширина балки</p>
<p> <span class="math">\(E\)</span> - модуль Юнга для материала.</p>
<p>Создаваемую деформацию можно измерить, закрепив тензодатчики на фиксированном конце: два на верхней стороне балки (растяжение) и два на нижней (сжатие).</p>
<h3>5.4. Заключение</h3>
<p>В этой главе мы изучили наиболее часто встречающиеся типы сенсоров для измерения давления и силы. Мембраны используются для непосредственного измерения давления газов или жидкостей на систему (сигнал преобразуется в смещение, а затем, с помощью тензодатчиков или других сенсоров - в сопротивление или другой электрический сигнал).</p>
<p>С другой стороны, мы рассмотрели тензодатчики и их различные комбинации для измерения воздействующей силы. На примере удостоверяющих колец, нагрузочных ячеек и кантиливерных балок мы разобрали как с помощью тензодатчиков измеряют действующие на систему силы. Кроме того мы повторили устройство измерительных мостовых схем, которые позволяют добиться температурной компенсации и увеличить чувствительность измерений.</p>
<p><strong>Задания для проверки</strong></p>
<ol>
<li>Какой из эластичных датчиков: сильфоны, тонкая пластина или гофрированная мембрана, может использоваться для измерения высокого давления?</li>
<li>Сильфоны обычно используются в сочетании с пружиной, почему?</li>
<li>Объяснить конструкцию и принцип работы трубы Бурдона для измерения давления.</li>
<li>Определите коэффициент деформации датчика. Какие материалы обычно используются для изготовления тензодатчиков? Какой из них имеет максимальный коэффициент замера (gage factor)?</li>
<li>Что такое розетка тензодатчиков?</li>
<li><span class="math">\(120 \Omega\)</span> тензодатчик с коэффициентом тензочувствительности 2.0 подвергается деформации равной <span class="math">\(1 \times 10^{- 6}\)</span>. Найдите как изменилось сопротивление тензодатчика.</li>
<li>Расскажите, каким образом можно компенсировать температурный эффект в тензодатчике?</li>
</ol>
<p><strong>Ссылки на литературу</strong></p>
<ol>
<li><a href="https://ieeexplore.ieee.org/document/5767428">D. M. Ştefănescu, “Strain gauges and Wheatstone bridges — Basic instrumentation and new applications for electrical measurement of non-electrical quantities,” Eighth International Multi-Conference on Systems, Signals & Devices, Sousse, 2011, pp. 1-5.</a></li>
<li><a href="http://www.instrumentationtoday.com/strain-gauge/2011/08/">Instrumentation today</a></li>
<li><a href="https://www.researchgate.net/publication/309762259_Visualisation_of_Radioactivity_in_Real-Time_on_a_Tablet_Measured_by_a_Hybrid_Pixel_Detector">Keller, Oliver. (2015). Visualisation of Radioactivity in Real-Time on a Tablet Measured by a Hybrid Pixel Detector. 10.13140/RG.2.2.17343.71848. </a></li>
<li><a href="https://www.sciencedirect.com/science/article/abs/pii/S0924424712006267?via%3Dihub">Fleming, Andrew. (2013). A review of nanometer resolution position sensors: Operation and performance. Sensors and Actuators A: Physical. 190. 106–126. 10.1016/j.sna.2012.10.016. </a></li>
<li><a href="https://www.nist.gov/pml/quantum-measurement/mass-and-force/proving-ring-design">NIST</a></li>
</ol>
<h2 id='6-Shift_velocity'> 6. Смещение и скорость (Displacement and Speed Measurement)</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<h3>6.1 Введение</h3>
<p>Смещение и скорость - это два важных параметра, измерения которых важны во многих промышленных системах (например в схемах позиционирования и управления).</p>
<p>Измеряемое типичными сенсорами смещение может быть в диапазоне от нескольких мкм до нескольких см. Кроме того, существует как контактное, так и бесконтактное измерение. Само же смещение может быть линейным или угловым (поворотным). Это же верно и в случае измерения скорости.</p>
<p>В результате освоения данной главы, неплохо было бы уметь:</p>
<ol>
<li>Назвать три метода измерения смещения с помощью пассивных электронных датчиков.</li>
<li>Набросать конструкцию и характеристики LVDT.</li>
<li>Объяснить принципы работы индуктивных и емкостных типов датчиков приближения.</li>
<li>Различить емкостные датчики смещения с переменным расстоянием и переменной площадью.</li>
<li>Объяснить принцип действия оптического датчика смещения.</li>
<li>Назвать два метода бесконтактного измерения скорости вращения и объяснить принципы их работы.</li>
</ol>
<h3>6.2 Измерение смещения (displacement measurement)</h3>
<p>Если мы хотим измерить некое смещение системы в пространстве, то можно использовать два типа измерения: <strong>контактное и бесконтактное</strong>. При этом принцип измерения можно разделить на две категории: <strong>электронное и оптическое</strong>. При электронном измерении используются пассивные электронные датчики, измеряющие индуктивность или емкость (inductance or capacitance). С другой стороны, оптический метод работает по принципу изменения интенсивности света в зависимости от расстояния.</p>
<p>Далее мы сознательно не будем отмечать диапазон измерений смещений для рассматриваемых сенсоров, т.к. он в основном зависит от используемой “механики” (т.е. всегда можно пропорционально увеличить или уменьшить размер измеряемых величин, используя конструкцию из рычагов и т.п.).</p>
<h4>6.2.1 Потенциометр (potentiometer)</h4>
<p>Потенциометры являются самым простыми измерителями смещения. Они могут использоваться как для линейного, так и для углового измерения перемещений (рис. 6.1).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_6-1.png" alt="Potentiometer" width="600px"/>
</td>
<td>
<i>
Рис. 6.1. Потенциометр: a) - линейный, b) - поворотный
</i>
</td>
</tr>
</table>
</div>
<p>Подобные сенсоры являются резистивными датчиками (transducers, т.е. меняют свое сопротивление в ответ на воздействие). Тогда выходное напряжение после такого датчика будет пропорционально смещению согласно формуле:</p>
<div class="math">$$
e_i = \frac{x_i}{x_t} e_0
$$</div>
<p>где</p>
<p> <span class="math">\(x_i\)</span> - приложенное смещение, <span class="math">\(x_t\)</span> - общее смещение и <span class="math">\(e_0\)</span> - питающее напряжение.</p>
<p>Основной проблемой потенциометров является <strong>проблема наличия контакта</strong>, возникающая в результате износа (есть подвижные детали, а значит будет быстрый износ). В результате, несмотря на простоту, применение потенциометров в промышленности весьма ограничено.</p>
<h4>6.2.2 Линейный дифференциальный трансформатор (ЛДТ, Linear Variable Differential transformer, LVDT)</h4>
<p><a href="https://ru.wikipedia.org/wiki/LVDT">LVDT</a> работает по принципу вариации взаимной индуктивности. Его конструкция состоит из трех неподвижных соосных обмоток (показаны коричневым на рис. 6.2) и подвижного ферромагнитного сердечника на оси трансформатора (показан синим). Сердечник короче чем длина всего трансформатора, поэтому при его перемещении меняется коэффициент магнитной связи обмоток и, следовательно, получаемый наведенный ток на обмотках. На центральную обмотку подается напряжение возбуждения, с боковых обмоток снимается наведенный сигнал, пропорциональный положению сердечника.</p>
<p>Это один из самых популярных типов датчиков смещения. Кроме того он имеет хорошую линейность в широком диапазоне перемещений. При этом масса подвижного тела мала, а сама подвижная часть не соприкасается с неподвижной деталью, что минимизирует сопротивление трения и вероятность выхода из строя датчика. Коммерческие LVDT доступны с полным диапазоном перемещения от <span class="math">\(\pm 1,25\)</span> мм до <span class="math">\(\pm 250\)</span> мм. Благодаря малой инерции сердечника, LVDT обладает хорошими динамическими характеристиками.</p>
<p>Конструкция и принцип работы LVDT приведены на рис. 6.2.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_6-2.png" alt="LVDT" width="600px"/>
</td>
<td>
<i>
Рис. 6.2. Linear Variable Differential transformer (LVDT) и Последовательное соединение вторичных обмоток (изображение взять с сайта wikipedia.org и распространяется по лицензии CC BY-SA 3.0).
</i>
</td>
</tr>
</table>
</div>
<p>Как уже отмечалось выше, устройство работает по принципу изменений взаимной индуктивности между двумя катушками в зависимости от смещения ферритового сердечника. Датчик состоит из первичной обмотки и двух одинаковых вторичных обмоток трансформатора, намотанных на полый цилиндр (tubular former). Внутри цилиндра движется сердечник из ферромагнитного отожженного никель-железного сплава (феррит).</p>
<p>Две вторичные обмотки соединены последовательно друг с другом и выходное напряжение является разностью напряжений между ними:</p>
<div class="math">$$
e_{out} = e_1 - e_2
$$</div>
<p>Первичная обмотка возбуждается источником переменного напряжения 1-10 В (r.m.s. A.C.), частота возбуждения находиться в диапазоне от 50 Гц до 50 КГц. При этом возможно 2 случая:</p>
<ol>
<li>Выходное напряжение равно нулю, когда сердечник находится в центральном положении (напряжение, наведенное в обеих вторичных обмотках, одинаковое и поэтому разница равна нулю).</li>
<li>Напряжение возрастает по мере удаления сердечника от центрального положения, в любом направлении.</li>
</ol>
<p>Таким образом, по измерению только выходного напряжения невозможно предсказать направление движения сердечника.</p>
<p>Для возможности определения направления движения используют фазовый чувствительный детектор (<a href="https://www.sciencedirect.com/topics/chemistry/phase-sensitive-detection">phase sensitive detector</a>, PSD). Он подключается на выходе LVDT и сравнивает фазу выхода с первичным сигналом для определения направления движения. На выходе из фазового чувствительного детектора получаем постоянное напряжение (после фильтрации низких частот, рис. 6.3). При этом зависимость напряжения от смещения будет линейной.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_6-3.png" alt="LVDT output" width="600px"/>
</td>
<td>
<i>
Рис. 6.3. Выходное напряжение по отношению к характеристикам перемещения LVDT до (a) и после (b) фазочувствительного обнаружения.
</i>
</td>
</tr>
</table>
</div>
<p>Тем не менее описанный тип датчиков обладает рядом недостатков:</p>
<ol>
<li>Чувствительность к наведенным магнитным полям.</li>
<li>Чувствительность к вибрациям.</li>
<li>Чувствительность к температуре.</li>
</ol>
<blockquote>
<p><strong>Задача 6.1</strong>. На основании раздела 6.2.2 и информации в сети, составьте список плюсов LVDT.</p>
<p><strong>Задача 6.2</strong>. Предложите схему для компенсации влияния температуры на показания LVDT по аналогии с датчиками давления.</p>
</blockquote>
<h4>6.2.3 Индуктивные датчики (Inductive type Sensors)</h4>
<p>Рассмотренные в предыдущей главе LVDT работает по принципу изменения общей наведенной индуктивности (mutual inductance). С другой стороны существую <a href="https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B4%D1%83%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA">индуктивные датчики</a>, которые работают по принципу изменения исключительно собственной индуктивности. Часто они используются для оценки близости двух металлических объектов (рис. 6.4).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_6-4.png" alt="self inductance sensor" width="600px"/>
</td>
<td>
<i>
Рис. 6.4. Датчик близости на основе изменения собственной индуктивности.
</i>
</td>
</tr>
</table>
</div>
<p>В этом случае индуктивность катушки меняется по мере того, как ферромагнитный объект движется вблизи магнитного носителя (металл), изменяя таким образом сопротивление магнитного поля (magnetic path). Измерительная цепь (inductance measuring circuit) такого датчика обычно представляет собой мост переменного тока (AC bridge).</p>
<h4>6.2.4 Ротационный дифференциальный трансформатор с переменной величиной (<a href="https://en.wikipedia.org/wiki/Rotary_variable_differential_transformer">rotary variable differential transformer</a>, RVDT)</h4>
<p>Его конструкция аналогична конструкции LVDT, за исключением того, что сердечник спроектирован таким образом, что при его движении взаимная индуктивность между обмотками изменяется линейно с угловым смещением (рис. 6.5).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_6-5.png" alt="RVDT" width="600px"/>
</td>
<td>
<i>
Рис. 6.5. Rotary Variable Differential Transformer (RVDT).
</i>
</td>
</tr>
</table>
</div>
<h4>6.2.5 Вращающийся трансформатор с возбуждающей обмоткой на роторе (Ресольвер, Resolver)</h4>
<p><a href="https://ru.wikipedia.org/wiki/%D0%92%D1%80%D0%B0%D1%89%D0%B0%D1%8E%D1%89%D0%B8%D0%B9%D1%81%D1%8F_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%BE%D1%80">Ресольвер</a> также работают по принципу изменения взаимной индуктивности и широко используются для измерения вращательного движения. Основная конструкция показана на рис. 6.6.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_6-6.png" alt="Resolver" width="600px"/>
</td>
<td>
<i>
Рис. 6.6. Схема ресольвера.
</i>
</td>
</tr>
</table>
</div>
<p>Ресольвер состоит из ротора, содержащего первичную обмотку и двух обмоток статора (с одинаковым количеством витков), расположенных перпендикулярно друг другу. Ротор крепится непосредственно к объекту, вращение которого измеряется. Если подаваемое AC напряжение на роторе равно <span class="math">\(V_r\)</span>, то индуцированное напряжение на двух обмотках статора составит:</p>
<div class="math">$$
\nu_{01} = KV_r cos \Theta
$$</div>
<div class="math">$$
\nu_{02} = KV_r sin \Theta
$$</div>
<p>где</p>
<p> <span class="math">\(K\)</span> - константа.</p>
<p>Путем измерения описанных напряжений можно однозначно определить угловое положение (<span class="math">\(0 \le \Theta \le 90^o\)</span>). Фазовая чувствительность необходима, если мы хотим измерить углы во всех четырех квадрантах и понимать в каком квадранте мы сейчас измеряем положение.</p>
<blockquote>
<p><strong>Примечание</strong>. Аналогично рассмотренному датчику работают сельсины (<a href="https://en.wikipedia.org/wiki/Synchro">synchros</a>), которые широко используются в качестве датчиков ошибок в системах позиционного регулирования. Кому интересно - может посмотреть в интернете.</p>
</blockquote>
<h4>6.2.6 Датчики емкости (Capacitance Sensors)</h4>
<p><a href="https://ru.wikipedia.org/wiki/%D0%81%D0%BC%D0%BA%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA">Датчики емкостного типа</a> являются универсальным и выпускаются в различных размерах и формах. При этом они могут измерять очень маленькое смещение (порядка микрометров), что успешно используется в сенсорных экранах современных телефонов. Часто весь датчик изготовлен на кремниевом основании и интегрирован в технологическую схему в виде отдельной маленькой микросхемы. Думаю, что Вы догадываетесь о принципе работы подобных датчиков (мы ведь измеряем емкость, а значит - говорим о конденсаторах). Для использования различных режимов работы такого датчика необходимо учитывать емкость, формируемую диэлектриком между двумя проводящими параллельными пластинами. Емкостное сопротивление между пластинами задается формулой:</p>
<div class="math">$$
C = \frac{\epsilon_r \epsilon_0 A}{d}
$$</div>
<p>где</p>
<p> <span class="math">\(A\)</span> - площадь пластин</p>
<p> <span class="math">\(d\)</span> - расстояние между пластинами</p>
<p> <span class="math">\(\epsilon_r\)</span> - относительная диэлектрическая проницаемость диэлектрика (его пропускная способность, permittivity)</p>
<p> <span class="math">\(\epsilon_0\)</span> - абсолютная диэлектрическая проницаемость в вакууме = <span class="math">\(8.854 \dot 10^{-12} \frac{F}{m}\)</span></p>
<p>Емкостной датчик может быть сформирован по принципу изменения:</p>
<ul>
<li>разделяющего пространства (<span class="math">\(d\)</span>),</li>
<li>площади пластин (<span class="math">\(A\)</span>),</li>
<li>диэлектрической проницаемости диэлектрика (<span class="math">\(\epsilon_r\)</span>).</li>
</ul>
<p>Сенсоры для измерения смещения обычно основаны на первых двух принципах, в то время как принцип переменной диэлектрической проницаемости используется для измерения влажности, уровня и др. На рис. 6.7 показаны схематические конструкции датчиков измерения емкости с переменным расстоянием и переменной площадью.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_6-7.png" alt="Capacitive displacement sensor" width="600px"/>
</td>
<td>
<i>
Рис. 6.7. Емкостные датчики смещения с вариацией a) разделяющего пространства, b) площади пластин проводника.
</i>
</td>
</tr>
</table>
</div>
<p>Емкостной датчик с переменным типом площади выдает линейные изменения емкости с входной переменной, в то время как датчик с переменным типом разделения имеет обратную зависимость от входящего смещения (<span class="math">\(\frac{1}{x}\)</span>).</p>
<p>Емкостные датчики также используются как сенсоры приближения (рис. 6.7).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_6-8.png" alt="capacitance proximity detector" width="600px"/>
</td>
<td>
<i>
Рис. 6.7. Схематичное изображение емкостного датчика близости.
</i>
</td>
</tr>
</table>
</div>
<p>Измерительная часть датчика состоит из двух электродов: один круглый (В), а другой - кольцеобразный (А). Электроды разделены небольшим диэлектрическим промежутком. При попадании предмета в пределы измерительной части датчика, емкость между пластинами А и В изменяется. Разница может быть точно измерена при сравнении с емкостью фиксированного (эталонного) конденсатора.</p>
<p>Подобные сенсоры имеют небольшие размеры, бесконтактны и могут обнаруживать присутствие металлических или изолирующих (indulating) объектов в диапазоне около 0-5 см. Для обнаружения изолирующих объектов диэлектрическая постоянная такого объекта должна быть значительно больше чем диэлектрическая постоянная материала, разделяющего А-В.</p>
<p>Измерительные цепи для емкостных датчиков, как правило, являются емкостными мостами (аналогично рассмотренным ранее измерительным мостам по сопротивлению). При этом изменение емкости подобных сенсоров очень мало (несколько pF, в некоторых случаях даже меньше). Изменения такого порядка с трудом возникают и детектируются при наличии большой блуждающей емкости (которая обычно присутствует в промышленных системах). Кроме того полученный сигнал будет содержать много помех. Для минимизации всех описанных негативных влияний датчик должен быть тщательно спроектирован и экранирован. Это же касается и самой измерительной схемы (measuring circuit).</p>
<h4>6.2.7 <a href="https://en.wikipedia.org/wiki/Electro-optical_sensor">Оптические датчики</a> (optical sensors)</h4>
<p>Следующий тип сенсоров работает по принципу уменьшения интенсивности света с увеличением расстояния. Таким образом, если источник света и детектор зафиксированы, то количество задетектированного света (отраженного от движущейся поверхности) будет зависеть от расстояния и скорости движения измеряемой поверхности. Оптические сенсоры весьма капризны и требуют тщательной калибровки, поскольку количество полученного света зависит от отражательной способности поверхности, интенсивности излучения источника и т.д. Тем не менее, подобный датчик обеспечивает простой метод измерения смещения. В конструкции подобных устройств часто используются <a href="https://ru.wikipedia.org/wiki/%D0%92%D0%BE%D0%BB%D0%BE%D0%BA%D0%BE%D0%BD%D0%BD%D0%BE-%D0%BE%D0%BF%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA">оптические волокна</a> (optical fibers, рис. 6.9).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_6-9.png" alt="fiber optic position sensor" width="600px"/>
</td>
<td>
<i>
Рис. 6.9. Оптоволоконный сенсор определения близости.
</i>
</td>
</tr>
</table>
</div>
<p>В приведенном датчике используется 2 пучка волокон: одно передает свет от источника на измеряемую поверхность, другое - принимает отраженный свет и передает его в фотодетектор. Источниками света могут быть лазеры или светодиоды, а детекторами - фотодиоды (photodiodes) или фототранзистры (phototransistors).</p>
<h3>6.3 Измерение скорости</h3>
<p>Мы рассмотрели большое количество различных датчиков измерения расстояния и многие из них обладает хорошими динамическими характеристиками, что позволяет использовать их для измерения скорости. Однако для этого требуется перевести скорость в более удобную форму для измерений.</p>
<p>Самым простым способом измерить скорость является измерение скорости вращения (переводим поступательную скорость во вращательную через специальные механизмы). Для этого нужно поместить на вращающемся валу <a href="https://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80">электрический генератор</a> (tachogenerator) и измерить вырабатываемое им напряжение (которое будет пропорционально скорости). Однако, это измерение контактного типа (со всеми вытекающими минусами и рисками выхода из строя). Но существуют и другие - бесконтактные способы. Одним из них является оптический метод (рис. 6.10)</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_6-10_a.png" alt="optical speed sensor 1" width="600px"/>
<br>
a)
<br>
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_6-10_b.png" alt="optical speed sensor 2" width="600px"/>
<br>
b)
</td>
<td>
<i>
Рис. 6.10. Оптический датчик скорости: a) схема; b) пример такого датчика для определения скорости конвейерной ленты.
</i>
</td>
</tr>
</table>
</div>
<p>Для оптического измерения скорости вращения на валу (частота вращения которого должна быть измерена), устанавливается непрозрачный диск с перфорацией через равные интервалы (прозрачные окна). С одной стороны диска устанавливается источник света, а с другой - фотоприемник, который обнаруживает проходящий свет. Детектируемый сигнал будет формировать квадратную волну, частота которой будет определяться скоростью вала и количеством прозрачных отверстий на диске.</p>
<p>Однако не только оптическая схема может использоваться для изменения скорости. На рис. 6.11 приведена другая схема измерения - датчик переменного сопротивления (variable reluctance).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_6-11.png" alt="variable reluctance speed sensor" width="600px"/>
</td>
<td>
<i>
Рис. 6.11. Сенсор измерения скорости по переменному сопротивлению.
</i>
</td>
</tr>
</table>
</div>
<p>На валу устанавливается колесо с выступающими зубцами из ферромагнитного материала. Статический датчик представляет собой постоянный магнит с поисковой катушкой (search coil), которая монтируется на фиксированном расстоянии от колеса. Магнитный поток (flux) от постоянного магнита будет изменяться при движении колеса с ферромагнитными зубцами и улавливаться в катушке. При вращении колеса, в катушке будет изменяться наведенное напряжение, которое может быть выражено как:</p>
<div class="math">$$
\phi(t) = \phi_0 + \phi_m sin \omega t
$$</div>
<p>где</p>
<p> <span class="math">\(\omega\)</span> - угловая скорость колеса.</p>
<p>Тогда индуцируемое напряжение катушки:</p>
<div class="math">$$
e = -N \frac{d \phi}{d t} = -N \omega \phi_m cos \omega t
$$</div>
<p>где</p>
<p> <span class="math">\(N\)</span> - число оборотов поисковой катушки.</p>
<p>Таким образом и амплитуда, и частота наведенного напряжения будут зависеть от скорости вращения. Далее, напряжение подается на цепь компоратора (comparator circuit), который выдает на выходе квадратную волну с постоянной амплитудой и частотой, пропорциональной скорости.</p>
<p>Для обоих типов рассмотренных сенсоров результатам измерения скорости вращения является квадратная волны. Этот сигнал подается на частотный счетчик (frequency counter), который используется для подсчета количества квадратных импульсов через фиксированные интервалы времени и отображает скорость. Таким образом происходит измерение скорости вращения.</p>
<h3>6.4 Заключение</h3>
<p>В настоящей главе были рассмотрены некоторые техники измерения смещения и скорости. Выбор той или иной измерительной схемы зависит от технических требований, окружающей среды и доступности места установки. Само же измерение может быть проведено 2 путями:</p>
<ul>
<li>
<p>первый - преобразование перемещения в изменение индуктивности или емкости с последующим использованием подходящей измерительной схемы;</p>
</li>
<li>
<p>второй - использовать оптический метод, основанный на детектировании отраженного света от движущейся поверхности.</p>
</li>
</ul>
<p>Важным аспектом применением любой из этих схем является возможность определять близость объекта и учет внешних условий измерения.</p>
<p>С другой стороны была рассмотрена возможность определения скорости вращения. Наиболее популярным способом определения такой скорости является электрический генератор (tachogenerator). Он монтируется на вращающийся вал, а далее измеряется генерируемое напряжение (которое будет пропорционально скорости). Однако существуют и безконтактные способы измерить скорость, при которых полученный сигнал преобразуется в частотный с последующим измерением частоты.</p>
<p>Не забывайте, что рассмотренный материал покрывает лишь малую часть возможных способов определения смещения/близости объектов.</p>
<h3>6.5 Вопросы для проверки</h3>
<ol>
<li>Какова функция фазового чувствительного детектора (PSD) в цепи LVDT?</li>
<li>Опишите конструкцию и принцип работы LVDT.</li>
<li>Приведите отличия между емкостными детекторами на основе изменения расстояния и площади.</li>
<li>Какие существуют достоинства и недостатки оптических датчиков перемещения/положения?</li>
<li>Назовите два способа бесконтактного измерения скорости. Объясните принцип работы любого из них (с использованием схем).</li>
<li>Оптический датчик измерения скорости имеет диск с 36 прямоугольными отверстиями через равные расстояния по периметру диска. Частота сигнала с фотодетектора составляет 360 Гц. Найдите частоту вращения вала в об/мин (rpm), на котором размещен данный диск.</li>
</ol>
<h3>6.6 Литература</h3>
<ol>
<li><a href="https://www.rdpe.com/ex/hiw-lvdt.htm">RDP Group</a></li>
<li><a href="https://www.metrolog.net/lvdt.php?lang=en">Metrolog</a></li>
<li><a href="https://www.researchgate.net/publication/272361397_An_Adaptive_Analog_Circuit_for_LVDT%27s_Nanometer_Measurement_Without_Losing_Sensitivity_and_Range">Chen, Gang & Zhang, Bo & Liu, Pinkuan & Ding, Han. (2015). An Adaptive Analog Circuit for LVDT’s Nanometer Measurement Without Losing Sensitivity and Range. IEEE Sensors Journal. 15. 2248-2254. 10.1109/JSEN.2014.2364610. </a></li>
<li><a href="http://www.ti.com/lit/an/slyt680/slyt680.pdf?ts=1588411212005">Arun T Vemuri; Matthew Sullivan (2016). “Ratiometric measurements in the context of LVDT-sensor signal conditioning” (PDF). Texas Instruments Industrial Analog Applications Journal. Retrieved 27 October 2017.</a></li>
<li><a href="https://www.electrical4u.com/linear-variable-differential-transformer/">LVDT</a></li>
<li>J.P. Bentley: Principles of Measurement Systems (3/e), Longman, U.K., 1995.</li>
<li>L.K.Baxter: Capacitance Sensors Design and Applications, IEEE Press, New Jersey,
1997.</li>
<li>D. Patranabis: Sensors and Transducers (2/e), PHI, New Delhi, 2003.</li>
</ol>
<h2 id='7-Flow_Measurement'> 7. Измерение потока (Flow Measurement)</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<h3>7.1 Введение и цели</h3>
<p>Точное измерение потока жидкостей и газов является необходимым требованием для поддержания качества многих технологических процессов. Фактически, большинство промышленных контуров управления регулируют именно расход поступающих потоков жидких или газообразных сред.</p>
<p>В зависимости от ситуации могут существовать различные требования к измерению расхода. Это может быть объемный или массовый расход, среда может быть жидкой или газообразной, измерение может быть контактным или бесконтактным и т.д.. В результате существует <a href="https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%85%D0%BE%D0%B4%D0%BE%D0%BC%D0%B5%D1%80">множество промышленных типов расходомеров</a>, например:</p>
<ul>
<li>по давлению (переменного или постоянного перепада давления) (obstruction type: differential pressure or variable area);</li>
<li>механические счетчики турбинного типа (inferential, turbine type);</li>
<li>электромагнитные (electromagnetic);</li>
<li>механические счетчики шестерёнчатого типа (positive displacement, integrating);</li>
<li>вихревой (fluid dynamic, vortex shedding);</li>
<li>анемометры (anemometer);</li>
<li>ультразвуковые (ultrasonic);</li>
<li>массового расхода на эффекте Кориолиса (mass flowmeter, Coriolis).</li>
</ul>
<p>После освоения предложенного материала будет хорошо если вы сможете:</p>
<ol>
<li>Назвать различные типы расходомеров, используемые в промышленности.</li>
<li>Различать конструктивные различия между диафрагменными и лопастными расходомерами.</li>
<li>Понимать основной принцип работы расходомера заградительного типа.</li>
<li>Объяснить основные принципы работы расходомера турбинного и электромагнитного типа.</li>
<li>Привести принципиальную блок-схему формирования сигнала для типичных расходомеров.</li>
</ol>
<h3>7.2 Расходомеры по давлению</h3>
<p>Одними из самых распространенных приборов измерения расхода являются датчики, основанные на связи скорости потока, его давлении и площади. Как можно догадаться, такие датчики бывают 2 типов.</p>
<ul>
<li>Переменного давления. Такие, как орифиметр (Orifice meter, расходомер с сужающим диафрагменным устройством, которые являются грубой формой расходомера Вентури), расходомер Вентури (расходомер с сужающим устройством, Venturimeter), трубка Пито (Pitot tube).</li>
<li>Переменной площади (постоянный перепад давления) - ротаметры (rotameter)..</li>
</ul>
<p>При этом в обоих случаях на пути потока создается заграждение, а перепад давления потока до и после этой преграды будет связан с расходом.</p>
<h4>7.2.1 Основные принципы</h4>
<p>Согласно показаниям <a href="https://en.wikipedia.org/wiki/Reynolds_number">числа рейнольдса</a> <span class="math">\(R_D\)</span>, поток может быть двух типов: <strong>ламинарный (можно представить его как “вязкий”, <span class="math">\(R_D \le \sim 2000\)</span>) и турбулентный</strong> (<span class="math">\(R_D > \sim 2000\)</span>). </p>
<p>В настоящем пособии будем считать, что поток турбулентный (обычно так и бывает на практике) и рассмотрим поток жидкости по замкнутой трубе переменного сечения (рис. 7.1).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-1.png" alt="Flow" width="600px"/>
</td>
<td>
<i>
Рис. 7.1. Поток через трубу переменного сечения (varying cross-section).
</i>
</td>
</tr>
</table>
</div>
<p>Пусть давление [Па], скорость [<span class="math">\(м/c\)</span>], площадь поперечного сечения [<span class="math">\(м^2\)</span>] и высота над базовой точкой [м] будут выражены как: <span class="math">\(p_1\)</span>, <span class="math">\(\nu_1\)</span>, <span class="math">\(A_1\)</span> и <span class="math">\(z_1\)</span> для сечения 1 и <span class="math">\(p_2\)</span>, <span class="math">\(\nu_2\)</span>, <span class="math">\(A_2\)</span> и <span class="math">\(z_2\)</span> для сечения 2 соответственно. Дополнительно предположим, что поток не сжимаемый. Тогда</p>
<div class="math">$$
\begin{equation}\begin{aligned}
\frac{p_1}{\gamma} + \frac{\nu^2}{2g} + z_1 = \frac{p_2}{\gamma} + \frac{\nu_2^2}{2g} + z_2
\end{aligned}\end{equation}
\tag{7.1}\label{eq7.1}
$$</div>
<p>где</p>
<p> <span class="math">\(\gamma = \rho g\)</span> - это удельный вес жидкости (specific weight of the fluid, <span class="math">\(кг/(м \cdot с)^2\)</span>)</p>
<p> <span class="math">\(\rho\)</span> - плотность [<span class="math">\(кг/м^3\)</span>]</p>
<p> <span class="math">\(g\)</span> - ускорение свободного падения [<span class="math">\(9.81\ м/с^2\)</span>]</p>
<p>Если <span class="math">\(z_1 = z_2\)</span>, тогда:</p>
<div class="math">$$
\frac{p_1}{\gamma} + \frac{\nu_1^2}{2g} = \frac{p_2}{\gamma} + \frac{\nu_2^2}{2g}
$$</div>
<p>При это, если жидкости не сжимаемые, то <span class="math">\(nu_1 A_1 = nu_2 A_2\)</span>.</p>
<p>Таким образом,</p>
<div class="math">$$
\nu_2^2 - \nu_1^2 = \frac{2g}{\gamma} (p_1 - p_2)
$$</div>
<p>или</p>
<div class="math">$$
\nu_2^2 (1-\frac{A_2^2}{A_1^2}) = \frac{2g}{\gamma} (p_1 - p_2)
$$</div>
<p>В результате получаем</p>
<div class="math">$$
\nu_2 = \frac{1}{\sqrt{(1-\frac{A_2^2}{A_1^2})}} \sqrt{\frac{2g}{\gamma} (p_1 - p_2)} = \frac{1}{\sqrt{1-\beta^4}} \sqrt{\frac{2g}{\gamma} (p_1 - p_2)}
$$</div>
<p>Учитывая круглое сечение, определим <span class="math">\(\beta\)</span> как соотношение двух диаметров, т.е. <span class="math">\(\beta = \frac{d_2}{d_1}\)</span> и <span class="math">\(\frac{A_2}{A_1} = \beta^2\)</span></p>
<p>Тогда объемный поток через трубу, может быть выражен как:</p>
<div class="math">$$
\begin{equation}\begin{aligned}
Q = \nu_2 A_2 = \frac{A_2}{\sqrt{1-\beta^4}} \sqrt{\frac{2g}{\gamma} (p_1 - p_2)} = \frac{A_2}{\sqrt{1-(\frac{d_2}{d_1})^4}} \sqrt{\frac{2}{\rho} (p_1 - p_2)}
\end{aligned}\end{equation}
\tag{7.2}\label{eq7.2}
$$</div>
<blockquote>
<p><strong>Примечание</strong>. Проверим все наши вычисления по размерности:</p>
<p>
<div class="math">$$
Q = \nu_2 A_2 = \frac{м}{с} \cdot м^2 = \frac{м^3}{с}
$$</div>
</p>
<p>С другой стороны:</p>
<p>
<div class="math">$$Q = \frac{A_2}{\sqrt{1-(\frac{d_2}{d_1})^4}} \sqrt{\frac{2}{\rho} (p_1 - p_2)} = \\
= м^2 \cdot \sqrt{\frac{1}{\frac{кг}{м^3}} \cdot Па} = м^2 \cdot \sqrt{\frac{м^3}{кг} \cdot \frac{кг}{м \cdot с^2}} = м^2 \cdot \frac{м}{с} = \frac{м^3}{с}$$</div>
</p>
<p>Все сходится, ЧТД.</p>
</blockquote>
<p>Для массы потока <span class="math">\(Q_m = \rho Q\ [\frac{кг}{с}]\)</span></p>
<p>Из приведенного выше выражения можно сделать вывод, что при наличии препятствия на пути движения потока, которое изменяет площадь поперечного сечения, будет наблюдаться разность статических давлений до и после препятствия. Измеряя разность этих давлений можно получить скорость потока с помощью уравнения <span class="math">\(\eqref{eq7.2}\)</span>. Однако, данная формула <strong>справедлива только для несжимаемых потоков (т.е. жидкостей, не газов)</strong> и при этом зависимость между объемным расходом и отношением давлений является не линейной. Для получения линейной зависимости, необходимо использовать специальный <strong>контур обработки сигнала (контур с квадратным корнем, square rooting circuit)</strong>. Но об этом мы поговорим далее.</p>
<p>Таким образом, <strong>в зависимости от типа препятствия, мы можем получить разные типы измерителей расхода</strong>.</p>
<h4>7.2.2 Орифиметр (Orifice meter, расходомер с сужающим диафрагменным устройством)</h4>
<p>Этот тип датчиков представляет собой грубую форму измерителя Вентури, где в трубе установлена диафрагменная пластина (orifice plate), как показано на рис. 7.2.</p>
<blockquote>
<p><strong>Примечание</strong>. Измеритель Вентури является “точкой отсчета” и основным измерителем данного класса датчиков. Его мы разберем немного позже. </p>
</blockquote>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-2.png" alt="Orifice type" width="600px"/>
</td>
<td>
<i>
Рис. 7.2. Орифиметр.
</i>
</td>
</tr>
</table>
</div>
<p>Если <span class="math">\(d_1\)</span> и <span class="math">\(d_2\)</span> диаметр трубы и отверстия в диафрагме (это упругая часть, сужающая диаметр исходной трубы) соответственно, то скорость потока может быть получена согласно уравнению <span class="math">\(\eqref{eq7.2}\)</span> при измерении разницы давлений <span class="math">\((p_1 - p_2)\)</span>.</p>
<blockquote>
<p><strong>Задача 7.1</strong> Рассчитайте массовую скорость потока, если диаметр трубы 0.5 м, диаметр сужения 30 см, а разница давлений составляет 20 Па. Плотность жидкости равна 1 кг/м3.$</p>
</blockquote>
<h4>7.2.3. Поправки для расчета потока</h4>
<p>Рассмотренное ранее выражение для потока <span class="math">\(\eqref{eq7.2}\)</span> хоть и связывает интересующие нас величины, но не является достаточно точным для реального применения (подумайте, почему). Для более точных расчетов необходимо использовать поправку в виде <strong><a href="https://en.wikipedia.org/wiki/Discharge_coefficient">коэффициента расхода</a> (discharge coefficient)</strong> (<span class="math">\(C_d\)</span>):</p>
<div class="math">$$
\begin{equation}\begin{aligned}
Q = \nu_2 A_2 = \frac{C_d A_2}{\sqrt{1-\beta^4}} \sqrt{\frac{2}{\rho} (p_1 - p_2)}
\end{aligned}\end{equation}
\tag{7.3}\label{eq7.3}
$$</div>
<p>Коэффициент <span class="math">\(C_d\)</span> определяется как отношение фактического потока к идеальному и <strong>всегда меньше 1</strong>. По факту существует 2 основных причины, по которым реальная скорость потока всегда меньше идеальной (которая получена по уравнению <span class="math">\(\eqref{eq7.2}\)</span>).</p>
<ul>
<li>Первая - предположение об отсутствия трения для потока не всегда верно. Сумма трений зависит от числа Рейнольдса (<span class="math">\(R_D\)</span>).</li>
<li>Вторая (более важная) - это то, что реальная минимальная площадь “сжатого” потока не ограничивается отверстием <span class="math">\(А_2\)</span>, а немного меньше и достигается на некотором расстоянии от диафрагмы (<a href="https://en.wikipedia.org/wiki/Vena_contracta">контакт Вена, Vena Contracta</a>). Именно в этой точке необходимо брать давление для расчета, чтобы получить максимальную (и правильную) разность.</li>
</ul>
<p>Таким образом, нам необходимо использовать поправочный коэффициент <span class="math">\(C_d < 1\)</span> для уточнения реальных расчетов.</p>
<p>На самом деле, <span class="math">\(C_d\)</span> зависит от <span class="math">\(\beta\)</span>, также как и от <span class="math">\(R_D\)</span>. Но было установлено, что для <span class="math">\(R_D > 10^4\)</span> поток является полностью турбулентным и зависимостью <span class="math">\(C_d\)</span> от <span class="math">\(R_D\)</span> можно пренебречь. В таком случае значение <span class="math">\(C_d\)</span> обычно варьируется между 0.6 и 0.7.</p>
<h4>7.2.4. Падение давления, измеритель Вентури и форсунка в потоке (Venturimeter and Flow nozzle)</h4>
<p>Установка рассмотренной ранее сужающей диафрагмы является наиболее распространенным случаем измерения скорости потока. Основным ее достоинством является то, что это дешевое устройство, простое в конструкции и легко устанавливаемое в трубу (рис. 7.3).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-3.png" alt="Orifice plate and permanent pressure drop" width="600px"/>
</td>
<td>
<i>
Рис. 7.3. Сужающая диафрагма и падение давления.
</i>
</td>
</tr>
</table>
</div>
<p>Обычно, такие диафрагмы - это круглые пластины с отверстием по центру. Врезки для измерения давления обычно делаются на расстоянии <span class="math">\(D\)</span> и <span class="math">\(0.5 \cdot D\)</span> выше и ниже по потоку от точки замера (<span class="math">\(D\)</span> - внутренний диаметр трубы).</p>
<p>Однако основным недостатком использования диафрагменной пластины является понижение давления в трубе (относительно штатного давления среды, рис. 7.3). После установленной диафрагмы давление потока значимо падает и может быть восстановлено лишь частично. Величина снижения давления достигает 40 %. При этом во многих промышленных системах это недопустимо и приводит к большим энергопотерям. Но описанная проблема решается использованием более совершенных конструкций: <strong><a href="https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D1%83%D0%B1%D0%BA%D0%B0_%D0%92%D0%B5%D0%BD%D1%82%D1%83%D1%80%D0%B8">измерителем Вентури</a></strong> (рис. 7.4) или <strong>форсункой в потоке</strong>.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-4.png" alt="Venturimeter" width="600px"/>
</td>
<td>
<i>
Рис. 7.4. Измеритель Вентури (https://en.wikipedia.org/wiki/Venturi_effect).
</i>
</td>
</tr>
</table>
</div>
<p><a href="https://en.wikipedia.org/wiki/Venturi_effect">Конструкция Вентури</a> обеспечивает постепенное изменение давления с последующим его восстановлением. В результате не наблюдается постоянного уменьшения давления в потоке, а коэффициент расхода <span class="math">\(C_d\)</span> варьируется между 0.95 и 0.98. Такая конструкция также обеспечивает высокую механическую прочность измерителя. Однако основным недостатком является высокая стоимость устройства.</p>
<p>Компромиссом между диафрагмой и измерителем Вентури является установка форсунки внутри потока (рис. 7.5).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-5.png" alt="Flow nozzle" width="600px"/>
</td>
<td>
<i>
Рис. 7.5. Форсунка в потоке.
</i>
</td>
</tr>
</table>
</div>
<p>В заключении стоит отметить, что при установке любых расходомеров заградительного типа (obstruction type flowmeters) существует несколько специфичных рекомендаций (внимательно читайте инструкцию к каждому конкретному датчику!) и наиболее важной из них является то, что рядом с расходомером не должно быть других препятствий или изгибов трубы. Несмотря на то, что данный тип расходомеров наиболее популярен в промышленности, их точность не велика при низких скоростях/расходах потока (для таких потоков они не рекомендуются).</p>
<h4>7.2.5 Измерение расхода сжимаемого потока (газ)</h4>
<p>До сих пор мы обсуждали измерения несжимаемых потоков (жидкости). В свою очередь для сжимаемых потоков (газы), скорость обычно измеряется в массовом расходе. Для газов, как и для жидкостей, также могут использоваться расходомеры заградительного типа, но тогда необходимо использование дополнительного корректирующего фактора для учета сжимаемости потока.</p>
<p>Массовый расход газа может быть выражен как:</p>
<div class="math">$$
W = Y [\frac{C_d A_2}{\sqrt{1-\beta^4}} \sqrt{\frac{2g (p_1-p_2)}{\nu_1}}]
$$</div>
<p>где,</p>
<p> <span class="math">\(\nu = \frac{yRT}{p}\)</span> - удельный объем газа (<a href="https://en.wikipedia.org/wiki/Specific_volume">specific volume</a>) [ <span class="math">\(\frac{m^3}{kgf}\)</span>],</p>
<p> <span class="math">\(y\)</span> - фактор сжатия (<a href="https://en.wikipedia.org/wiki/Compressibility_factor">compressibility factor</a>),</p>
<p> <span class="math">\(R\)</span> - газовая постоянная (<a href="https://en.wikipedia.org/wiki/Gas_constant">gas constant</a>) [<span class="math">\(\frac{J}{K \cdot mol}\)</span>],</p>
<p> <span class="math">\(Y = \frac{Compressible\ flow\ rate\ (mass)}{Incomressible\ flow\ rate\ (mass)} = 1-(0.41+0.35 \beta^4) \frac{p_1-p_2}{p_1} \frac{1}{K}\)</span> - приближенное эмпирическое выражение фактора расширения (используется для диапазона <span class="math">\(0.8 \le \frac{p_2}{p_1} \ge 1.0\)</span>).</p>
<p> <span class="math">\(K = \frac{C_p}{C_v}\)</span> - соотношение удельных теплот (specific heat ration): для постоянного объема (<span class="math">\(C_v\)</span>) и для постоянного давления (<span class="math">\(C_P\)</span>). K = 1.66 для идеального одноатомного газа и K = 1.4 для воздуха (приблизительно двухатомный газ).</p>
<p>Все остальные обозначения приведены выше.</p>
<h4>7.2.6 Трубка Пито (Pitot Tube)</h4>
<p><a href="https://en.wikipedia.org/wiki/Pitot_tube">Трубки Пито</a> широко используются для измерения скорости в самолетах. Ее основной принцип работы и типичная конструкция приведены на рис. 7.6.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-6.png" alt="pitot tube" width="600px"/>
</td>
<td>
<i>
Рис. 7.6. Трубка Пито: a) основной принцип действия и b) конструкция.
</i>
</td>
</tr>
</table>
</div>
<p>Если в канал потока поместить твердый объект (blunt object), то скорость потока в точке, расположенной непосредственно перед ним, будет равна 0 (т.е. поток “останавливается” этим объектом). Предположив, что поток несжимаем. Тогда из <span class="math">\(\eqref{eq7.1}\)</span> получим:</p>
<div class="math">$$
\frac{p_1}{\gamma} + \frac{\nu_1^2}{2g} = \frac{p_2}{\gamma} + \frac{\nu_2^2}{2g}
$$</div>
<p>при <span class="math">\(\nu_2 = 0\)</span>:</p>
<div class="math">$$
\frac{\nu_1^2}{2g} = \frac{p_2 - p_1}{\gamma}
$$</div>
<p>или</p>
<div class="math">$$
\nu_1 = \sqrt{\frac{2g}{\gamma} (p_2 - p_1)}
$$</div>
<p>Однако для сжимаемых потоков нужно вносить поправки.</p>
<h4>7.2.7 Ротаметр (расходомер с переменной площадью, расходомер постоянного перепада давления)</h4>
<p>Диафрагменные измерители, измерители Вентури и сопла (форсунки) работают по принципу переменного давления: площадь препятствия постоянна, а разница давлений меняется при изменении скорости потока. С другой стороны, <a href="https://en.wikipedia.org/wiki/Rotameter">ротаметр</a> работает при постоянной разнице давлений, но за счет изменяющейся площади. </p>
<p>Такой тип приборов может быть использован только в вертикальной трубе. Его точность меньше по сравнению с другими типами расходомеров (примерно на 2%), но основным его достоинством является простота конструкции и установки. Дополнительно, расход может быть непосредственно виден на калибровочной шкале без помощи какого-либо дополнительного оборудования, а само устройство работает в широком диапазоне изменений расхода (примерно 10:1).</p>
<p>Основная конструкция приведена на рис. 7.7.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-7.png" alt="rotameter" width="600px"/>
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-7-2.jpg" alt="rotameter-2" width="400px"/>
<br>
c)
</td>
<td>
<i>
Рис. 7.7. Конструкция ротаметра (a, b) и пример его использования (c).
</i>
</td>
</tr>
</table>
</div>
<p>Само устройство состоит из вертикальной трубы, суженой в нижней части. Внутри трубы находиться металлический поплавок цилиндрического типа. Поток течет вверх через зазор между трубой и поплавком. При движении поплавка вниз или вверх происходит изменение зазора, в результате чего изменяется площадь пропускного отверстия. Поплавок остановиться в том случае, когда тяга от падения давления через зазор труба-поплавок (направленная вверх) уравновеситься силой тяжести самого поплавка (направлена вниз). Положение поплавка предварительно калибруется по расходу потока.</p>
<p>Предположим, что:</p>
<p> <span class="math">\(\gamma_1\)</span> - удельный вес потока до поплавка (т.е. нормированный на объем или площадь)</p>
<p> <span class="math">\(\gamma_2\)</span> - удельный вес потока после поплавка</p>
<p> <span class="math">\(\nu_f\)</span> - объем потока</p>
<p> <span class="math">\(A_f\)</span> - площадь потока</p>
<p> <span class="math">\(A_t\)</span> - площадь сечения трубы при равновесии (в соответствии с калибровочной шкалой)</p>
<p>Тогда из уравнения <span class="math">\(eqref{eq7.3}\)</span> для сечения и с учетом несжимаемости жидкости мы имеем:</p>
<div class="math">$$
\begin{equation}\begin{aligned}
Q = \frac{C_d A_2}{\sqrt{1-(\frac{A_2}{A_1})^2}} \sqrt{\frac{2g}{\gamma_2} (p_1-p_2)}
\end{aligned}\end{equation}
\tag{7.4}\label{eq7.4}
$$</div>
<p>Положим, <span class="math">\(F_d\)</span> - сила, действующая вниз на поплавок, <span class="math">\(F_u\)</span> - сила, действующая вверх на поплавок, <span class="math">\(W\)</span> - собственный вес поплавка (рис. 7.7).</p>
<p>Тогда при равновесии <span class="math">\(W = F_u - F_d\)</span> или</p>
<div class="math">$$
V_f (\gamma_1 - \gamma_2) = p_1 A_f - p_2 A_f
$$</div>
<p>и</p>
<div class="math">$$
p_1 - p_2 = \frac{\nu_f}{A_f} (\gamma_1 - \gamma_2)
$$</div>
<p>Подставляя полученное выражение в <span class="math">\(\eqref{eq7.4}\)</span> получим:</p>
<div class="math">$$
\begin{equation}\begin{aligned}
Q = \frac{C_d (A_t - A_f)}{\sqrt{1-(\frac{A_t - A_f}{A_f})}} [\sqrt{\frac{2g}{\gamma_2} \frac{\nu_f}{A_f} (\gamma_1 - \gamma_2)}]
\end{aligned}\end{equation}
\tag{7.5}\label{eq7.5}
$$</div>
<p>Условие в третьей скобке в приведенном выше выражении - константа. Тогда при <span class="math">\((\frac{A_t-A_f}{A_t})^2 \lt \lt 1\)</span> получим:</p>
<div class="math">$$
Q = K (A_t - A_f)
$$</div>
<p>Если труба сделана таким образом, что <span class="math">\(A_t\)</span> изменяется линейно со смещением, то у нее есть линейное соотношение в форме,</p>
<div class="math">$$
Q = K_1 + K_2 x
$$</div>
<p>То есть, шкала трубки может быть градуированной линейно по скорости потока. В противном случае смещение поплавка может быть преобразовано в электрический сигнал с помощью LVDT или аналогичного типа датчика перемещения. Для измерения больших расходов ротаметр обычно располагается в обходной (bypass) линии.</p>
<p>Основной источник погрешности ротаметра связан с изменением плотности измеряемой среды. Кроме того, наличие вязкости может оказывать дополнительное воздействие на поплавок (вязкость как дополнительная сила воздействия). Для минимизации подобных погрешностей используется особая конструкция поплавка (рис. 7.7)</p>
<p>Стоит учитывать, что устройство поплавка в значительной степени определяется производительностью ротаметра. В общем случае поплавок должен:</p>
<ul>
<li>быть расположен вертикально;</li>
<li>создавать равномерную турбулентность, чтобы быть нечувствительным к вязкости;</li>
<li>уменьшить чувствительность ротаметра к изменению плотности потока.</li>
</ul>
<p>В общем случае верхняя часть поплавка имеет острый край и несколько угловых канавок. Жидкость, проходящая через эти канавки, вызывает вращение поплавка и возникающая при этом турбулентность значительно снижает влияние вязкости.</p>
<p>Согласно <span class="math">\(\eqref{eq7.5}\)</span> объемный расход среды может быть записан как:</p>
<div class="math">$$
Q = K \sqrt{\frac{2g}{\gamma_2} \frac{\nu_f}{A_f} (\gamma_1 - \gamma_2)}
$$</div>
<p>Значения расходомера можно сделать практически независимыми от плотности потока, если правильно выбрать материал поплавка, например такой, что <span class="math">\(\gamma_1 >> \gamma_2\)</span>. Тогда для измерения массового потока (W), мы можем использовать:</p>
<div class="math">$$
W = \gamma_2 Q = K \sqrt{K_1 (\gamma_1 - \gamma_2) \gamma_2}
$$</div>
<p>И условие <span class="math">\(\frac{dW}{d \gamma_2} = 0\)</span>, выполняется, если <span class="math">\(\gamma_1 = \gamma_2\)</span>. Этого можно добиться при использовании полого или пластикового поплавка.</p>
<h3>7.2.8 Электромагнитные измерители потока (<a href="https://en.wikipedia.org/wiki/Magnetic_flow_meter">Electromagnetic Flowmeter</a>)</h3>
<p>Данный тип расходомеров отличается от остальных сразу по нескольким показателям.</p>
<ol>
<li>Не создает препятствий для потока.</li>
<li>Выдает линейный выход в виде напряжения.</li>
<li>На выход не влияет давление, температура и вязкость потока.</li>
<li>Может быть измерен обратный поток.</li>
<li>Могут быть измерены малые скорости потока (до <span class="math">\(10^{-6}\)</span> m/sec).</li>
</ol>
<p>Электромагнитные измерители потока подходят для измерения скорости только проводящих (например, ртуть) и слабо проводящих (например, вода) потоков. Основной принцип работы приведен на <a href="https://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BC%D0%B0%D0%B3%D0%BD%D0%B8%D1%82%D0%BD%D1%8B%D0%B9_%D1%80%D0%B0%D1%81%D1%85%D0%BE%D0%B4%D0%BE%D0%BC%D0%B5%D1%80">рис. 7.8</a>.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-8.png" alt="electromagnetic flowmeter" width="600px"/>
<br>
a)
<br>
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-8-2.jpg" alt="electromagnetic flowmeter 2" width="400px"/>
<br>
b)
</td>
<td>
<i>
Рис. 7.8. Электромагнитный измеритель потока: схема (a) и внешний вид (b) (https://en.wikipedia.org/wiki/Magnetic_flow_meter).
</i>
</td>
</tr>
</table>
</div>
<p>Устройство работает по принципу, основанному на электромагнитной индукции. Когда проводник движется в магнитном поле перпендикулярно направлению потока, напряжение будет наведено перпендикулярно направлению движения и перпендикулярно магнитному полю. При этом протекающая жидкость должна действовать как проводник. Внешнее магнитное поле прикладывается перпендикулярно направлению потока, и два электрода крепятся к стенке трубопровода, как показано на рисунке. Тогда наведенное напряжение составит:</p>
<div class="math">$$
e_0 = \frac{B}{\nu}
$$</div>
<p>где <span class="math">\(l\)</span> - длина проводника (в данном случае диаметр трубы <span class="math">\(d\)</span>), а <span class="math">\(v\)</span> - скорость потока. Вышеприведенное выражение показывает обратную зависимость между наведенным напряжением и скоростью. Однако, применяемое магнитное поле не будет постоянным (DС), если жидкая среда является водой или любой другой поляризуемой жидкостью. Это связано с тем, что если магнитное поле является DC, то наведенное напряжение будет также DC и небольшое количество постоянного тока будет протекать при подключении измерительной цепи к клеммам. Этот небольшой ток вызовет электролиз и образуются пузырьки кислорода и водорода, которые будут прилипать к поверхностям электродов в течение некоторого времени. Это обеспечит изоляционный слой на поверхностях электродов, который нарушит процесс генерирования напряжения. В результате магнитное поле, применяемое для поляризуемых жидкостей должно быть переменным (возбужденное переменным током AC или импульсами постоянного тока).</p>
<p>Сам измеритель может использоваться только для жидкостей с умеренной проводимостью (более 10 мкм/см). В результате он не подходит для газов или жидких углеводородов, а примерная погрешность измерения скорости потока составляет около <span class="math">\(\pm 1%\)</span>.</p>
<h3>7.2.9. Механические счетчики турбинного типа (Turbine type Flowmeter)</h3>
<p><a href="https://instrumentationtools.com/turbine-flow-meter-working-principle/">Турбинный тип расходомеров</a> - это простой способ измерить скорость потока. Вращающийся вал с угловыми лопастями турбинного типа помещается внутрь трубы. Протекающий поток вызывает вращение турбины и ее скорость вращения пропорциональна скорости потока (рис. 7.9).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-9.png" alt="Turbine type flowmeter" width="600px"/>
</td>
<td>
<i>
Рис. 7.9. Турбинный расходомер.
</i>
</td>
</tr>
</table>
</div>
<p>Пусть лопасти наклонены на угол <span class="math">\(\alpha\)</span> к корпусу, то</p>
<div class="math">$$
\frac{\omega_r R}{\overline{vi}} = tan \alpha
$$</div>
<p>где,</p>
<p> <span class="math">\(\overline{vi}\)</span> - средняя скорость потока (<span class="math">\(=\frac{Q}{A}\)</span>)</p>
<p> <span class="math">\(Q\)</span> - объемный расход</p>
<p> <span class="math">\(A\)</span> - эффективное сечение потока в трубе</p>
<p> <span class="math">\(R\)</span> - радиус лопастей</p>
<p> <span class="math">\(\omega_r\)</span> - угловая скорость лопастей.</p>
<p>Исходя из приведенного уравнения, объемный расход будет связан с угловой скоростью как <span class="math">\(\omega_r = k Q\)</span> где <span class="math">\(k = \frac{tan \alpha}{RA}\)</span>.</p>
<p>При этом скорость вращения турбины может быть измерения разными путями (например, оптическим способом или по вырабатываемому напряжению (inductive pick up) и т.д.). Если на выходе получается частотный сигнал, то количество импульсов будет равно:</p>
<div class="math">$$
n_p = \frac{T_p f}{Q}
$$</div>
<p>где,</p>
<p> <span class="math">\(n_p\)</span> - количество импульсов на единицу объема;</p>
<p> <span class="math">\(T_p\)</span> - временная константа [мин];</p>
<p> <span class="math">\(Q\)</span> - объемный расход;</p>
<p> <span class="math">\(f\)</span> - частота [Гц].</p>
<blockquote>
<p><strong>Задача</strong>. Подумайте, в каких случаях может получаться частотный сигнал. Какую можно предложить схему для получения сигнала, связанного со скоростью потока с использованием турбины?</p>
</blockquote>
<h3>7.2.10 Вихревой расходомер (<a href="https://en.wikipedia.org/wiki/Vortex_flowmeter">Vortex type flowmeter</a>)</h3>
<p>Образование завихрений в потоке, протекающем через препятствие является обычным явлением (например, обратите внимание на ветку или камень в реке). Однако не всем известно, что частота образования завихрений пропорциональна скорости потока. На рис. 7.10 показано устройство вихревого расходомера.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-10.png" alt="Vortex type flowmeter" width="600px"/>
</td>
<td>
<i>
Рис. 7.10. Вихревой расходомер.
</i>
</td>
</tr>
</table>
</div>
<p>Принцип его работы основан на принципе затенения центра завихрения (principle of vertex shading). При размещении плотного предмета на пути потока образуются вихри. При этом вихри такого рода называются “Вихрь Кармана” (<a href="https://en.wikipedia.org/wiki/K%C3%A1rm%C3%A1n_vortex_street">Karman Vortex</a>). Если поток турбулентный и число Рейнольда большое (<span class="math">\(R_D > 10^4\)</span>), то частота формирования вихрей задается как:</p>
<div class="math">$$
f = \frac{N_{st}}{d} \nu
$$</div>
<p>где,</p>
<p> <span class="math">\(d\)</span> - ширина плотного объекта [м];</p>
<p> <span class="math">\(\nu\)</span> - скорость потока [м/с];</p>
<p> <span class="math">\(N_{st}\)</span> - постоянна, называемая числом Струхаля (<a href="https://en.wikipedia.org/wiki/Strouhal_number">Strouhal Number</a>.</p>
<p>На рис. 7.10 показана типичная схема измерения частоты образования завихрений ультразвуковым способом. Завихрение будет модулировать интенсивность ультразвука, получаемого приемником. При этом частота модуляции может быть легко измерена и использована для расчета скорости потока.</p>
<h3>7.2.11 Заключение</h3>
<p>В данной главе мы изучили различные способы измерения потоков в производственных условиях. Вы могли заметить, что большинство техник основаны на заграждающем типе расходомеров. При этом наиболее популярными являются мембранные расходомеры и расходомеры Вентури. Однако им требуются дополнительные преобразователи разницы давлений в соответствующий электрический сигнал, а так же устройства квадратичного преобразования для линеаризации выходящего сигнала (пропорционального расходу жидкости). </p>
<p>С другой стороны существует электромагнитный расходомер, который обеспечивает прямой метод измерения расхода и сам выдает линейный сигнал, пропорциональный расходу напряжение. Дополнительно, он не создает никаких препятствий потоку (а значит и не создает разницы давлений). Но данный метод измерения подходит только для проводящих жидкостей и не может использоваться для газов. Более того, поляризационные жидкости (например, вода) требуют отдельного контура возбуждения и обработки сигнала.</p>
<p>Помимо рассмотренных в настоящей главе существуют и другие типы расходомеров (например, достаточно дорогой, но не инвазивный ультразвуковой расходомер, рис. 7.11). Другим не рассмотренным типом датчиков является расходомер положительного вытеснения (<a href="https://en.wikipedia.org/wiki/Positive_displacement_meter">Positive displacement flowmeter</a>) - это интегральный тип расходомера который измеряет суммарный расход потока за заданное время (находит широкое применение в счетчиках воды, бензиновых насосах и т.п.).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_7-11.jpg" alt="ultrasonic-example" width="600px"/>
</td>
<td>
<i>
Рис. 7.11. Пример ультразвукового расходомера на производстве фосфорной кислоты.
</i>
</td>
</tr>
</table>
</div>
<p><strong>Упражнения</strong></p>
<ol>
<li>Что имеется в виду под коэффициентом расхода в расходомерах по давлению?</li>
<li>Сравнить преимущества и недостатки диафрагменного расходомера и вентуриметра.</li>
<li>Можно ли использовать ротаметр в горизонтальном трубопроводе? Если нет, то объясните почему.</li>
<li>Магнитное поле, действующее на электромагнитный расходомер, изменяется во времени и не является постоянным. Почему?</li>
<li>У какого типа расходомеров частота измерений изменяется со скоростью потока?</li>
<li>В чем разница между расходомерами с переменным и с постоянным перепадом давления?</li>
<li>Падение давления через отверстие расходомера по давлению измеряется для определенного расхода. Если удвоить расход, сохранив все остальные параметры постоянными, что произойдет с перепадом давления?<ul>
<li>Оно останется неизменным.</li>
<li>Оно также удвоится.</li>
<li>Оно уменьшиться вдвое.</li>
<li>Оно увеличится в четыре раза.</li>
</ul>
</li>
<li>Что будет с показаниями ротаметра, который предназначен для измерения расхода воды, но используется для измерения расхода рассола (удельный вес 1,15) без перекалибровки и изменения шкалы? Уменьшатся или увеличатся его показания? Ответ обоснуйте. </li>
</ol>
<p><strong>Список литературы</strong></p>
<ol>
<li><a href="https://www.efunda.com/formulae/fluids/calc_orifice_flowmeter.cfm">Efunda. Engineeric fundamentals</a></li>
<li><a href="https://www.idc-online.com/resources/technical-references/instrumentation-technical-references.html">IDC Technologies</a></li>
<li><a href="https://www.idc-online.com/technical_references/pdfs/instrumentation/Industrial_Instrumentation%20-%20Flow.pdf">Industrial Flow Measurments</a></li>
<li><a href="http://hyperphysics.phy-astr.gsu.edu/hbase/Kinetic/shegas.html">Specific heats of gases</a></li>
<li><a href="https://www.theprocesspiping.com/introduction-to-pipe-flow-measurement/">The process piping</a></li>
</ol>
<h2 id='8-Level_Humidity_pH'> 8. Измерение уровня, влажности и рН (Measurement of Level, Humidity and pH)</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<h3>8.1 Введение и цели</h3>
<p>Теперь мы переходим к более сложным параметрам для измерений: уровень жидкости, влажность (влагосодержание) и рН. Эти величины весьма важны для промышленного производства (в особенности - химического). В этой главе мы кратко рассмотрим различные техники, применимые в промышленности, а так же принципы измерения и конструктивные особенности.</p>
<p>По окончанию главы проверьте себя, что вы можете:</p>
<ol>
<li>Привести различные методы измерения уровня и влагосодержания (moisture).</li>
<li>Объяснить основные техники измерения уровня и влажности (humidity).</li>
<li>Объяснить принцип измерения рН.</li>
<li>Обосновать необходимость использования специальной измерительной схемы для измерения рН.</li>
</ol>
<h3>8.2 <a href="https://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%BC%D0%B5%D1%80">Измерение уровня</a></h3>
<p>Существует несколько случаев, когда нам необходимо измерить уровень жидкости в емкостях. В некоторых случаях суть проблемы весьма проста - нужно следить за уровнем воды в резервуаре и тогда достаточно простого механизма поплавкового типа. Но в некоторых случаях емкость может быть герметична, а жидкость - горючей или химически-активной, в результате чего процесс мониторинга усложняется. В зависимости от ситуации, существуют различные методы измерения уровня жидкости:</p>
<ol>
<li>Поплавкового типа (Float type).</li>
<li>Датчики гидростатического перепада давления (гидростатический уровнемер, Hydrostatic differential pressure gage type).</li>
<li>Емкостной тип (Capacitance type).</li>
<li>Ультразвуковой (Ultrasonic type).</li>
<li>Зондирование радиационным излучением (Radiation technique).</li>
</ol>
<p>Некоторые из этих датчиков и техник измерения рассмотрены далее.</p>
<h4>8.2.1 Гидростатический уровнемер (Hydrostatic Differential Pressure type)</h4>
<p>Первый из рассматриваемых типов сенсоров - гидростатический уровнемер. Принцип его работы основан на перепаде давлений между верхним и нижнем уровнем в емкости и выражается уравнением:</p>
<div class="math">$$
p = \rho g h
$$</div>
<p>где:</p>
<p> <span class="math">\(h\)</span> - высота уровня жидкости, <span class="math">\(g\)</span> - сила тяготения, а <span class="math">\(\rho\)</span> - плотность жидкости.</p>
<p>Таким образом, поместив два датчика давления внизу и наверху бака, мы можем измерить разность давлений, которая будет зависеть от уровня жидкости (нужна калибровка). Такая схема приведена на рис. 8.1.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_8-1.png" alt="hydrostatic differential" width="600px"/>
</td>
<td>
<i>
Рис. 8.1. Измерение уровня с помощью гидростатической разницы в давлениях.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Примечание</strong>. Уровень жидкости в нагревательном котле (drum level of a boiler) обычно измеряется именно таким способом. Однако необходимо проводить аккуратную компенсацию изменения плотности воды с изменением давления и температуры.</p>
</blockquote>
<h4>8.2.2 Емкостной тип (Capacitance type)</h4>
<p>Этот тип датчиков активно применяется в химической и нефтехимический промышленности и может быть использован для широкого диапазона температур (-40 to 200 <span class="math">\(^oC\)</span>) и давлений (25 to 60 <span class="math">\(kg/cm^2\)</span>). Для измерений используется цилиндр коаксиального типа (<a href="https://en.wikipedia.org/wiki/Coaxial">coaxial</a> type cylinder), а емкость измеряется между внутренней и внешней стенками цилиндра (inner rod and the outer cylinder) - рис. 8.2. Общая емкость между двумя такими “клеммами” (terminals) является сумой:</p>
<ul>
<li>емкости изоляционной втулки (insulating bushing) при пустом баке,</li>
<li>емкости воздуха и паров жидкости,</li>
<li>емкости жидкости.</li>
</ul>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_8-2.png" alt="capacitance technique" width="600px"/>
</td>
<td>
<i>
Рис. 8.2. Емкостной датчик измерения уровня.
</i>
</td>
</tr>
</table>
</div>
<p>Если <span class="math">\(C_1\)</span> - общая емкость пустого бака, то емкость с уровнем жидкости <span class="math">\(h\)</span> может быть выражена как:</p>
<div class="math">$$
C_i = C_1 + \frac{2 \pi \epsilon_0 (\epsilon_1 - \epsilon_2) h}{ln(\frac{r_2}{r_1})}
$$</div>
<p> где <span class="math">\(\epsilon_1\)</span> - относительная диэлектрическая проницаемость жидкости (<a href="https://en.wikipedia.org/wiki/Relative_permittivity">relative permittivity</a>) и <span class="math">\(\epsilon_2\)</span> - относительная диэлектрическая проницаемость воздуха и паров жидкости (<span class="math">\(\approx 1\)</span> ).</p>
<p>Таким образом у нас имеется линейная зависимость от уровня жидкости. Еще одним преимуществом датчиком данного типа является то, что диэлектрическая проницаемость жидкости слабо зависит от температуры, а само это слабое влияние может быть легко скомпенсировано. При этом изолирующим слоем (внешним цилиндром) может являться и сам бак.</p>
<h4>8.2.3 Ультразвуковой тип (Ultrasonic type)</h4>
<p>Ультразвуковой метод может быть использован для измерения уровня жидкости в герметичной емкости, а сам принцип измерения аналогичен ультразвуковому измерению скорости потока кратко рассмотренному в главе 7. Пара передатчик/приемник ультразвукового типа размещается на дне резервуара. Генерируемая ультразвуковая волна может проходить через жидкость, но отражается на границе раздела фаз (жидкость-воздух) - рис. 8.3. Измеряется время, затраченное на прием отраженного импульса, которое зависит от уровня жидкости. Для обеспечения точности измерения необходима компенсация изменения скорости ультразвука от плотности (т.е. и температуры) жидкости.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_8-3.png" alt="ultrasonic technique" width="600px"/>
</td>
<td>
<i>
Рис. 8.3. Ультразвуковой измеритель уровня.
</i>
</td>
</tr>
</table>
</div>
<h4>8.2.4 Радиационная методика (Radiation technique)</h4>
<p>Еще один метод, который мы обошли стороной в главе 7. Этот способ так же используется для измерения уровня жидкости в герметичных емкостях. Принцип работы основан на ослаблении радиоактивных лучей при прохождении через определенную среду (medium). Интенсивность излучения, прошедшего дистанцию <span class="math">\(x\)</span> задается уравнением:</p>
<div class="math">$$
I(x) = I_0 e^{-\alpha x}
$$</div>
<p>где</p>
<p> <span class="math">\(I_0\)</span> - начальная интенсивность (incidental intensity) и <span class="math">\(\alpha\)</span> - коэффициент поглощения среды.</p>
<p>Таким образом, если мы знаем <span class="math">\(I_0\)</span>, и <span class="math">\(\alpha\)</span>, а также измерили конечную интенсивность, то можно рассчитать <span class="math">\(x\)</span>.</p>
<p>Могут быть использовано несколько подходов. <strong>В первом случае</strong> используется поплавок с внутренним радиоактивным источников, который двигается по вертикале в зависимости от уровня жидкости. Приемник в виде счетчика Гейгера-Мюллера (<a href="https://en.wikipedia.org/wiki/Geiger_counter">Geiger Muller Counter</a>) при этом располагается на дне резервуара и измеряет интенсивность излучения (рис. 8.4 (а)).</p>
<p><strong>В другом случае</strong> используется сборка источник-детектор, который движется по высоте сосуда (рис. 8.4 (б)). Как только блок “источник-детектор” пройдет через границу контакта жидкость-воздух, то сигнал принимаемый детектором сильно изменится. Данный метод часто используется при бутилировании продукции.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_8-4.png" alt="radiation techniques" width="600px"/>
</td>
<td>
<i>
Рис. 8.4. Радиационный метод для измерения уровня.
</i>
</td>
</tr>
</table>
</div>
<p>Радиоактивные методы, хотя и основаны на простом принципе, находят ограниченное применение из-за возможной радиационной опасности (radiation hazards). Однако подобные подходы нашли широкое применение для измерения уровня зерен и гранулированных твердых частиц в промышленном производстве.</p>
<h3>8.3 Измерение влажности (<a href="https://en.wikipedia.org/wiki/Humidity#Measurement">Humidity</a> Measurement)</h3>
<p>Измерение влажности находит широкое применение в различных отраслях обрабатывающей промышленности (например, влагосодержание в окружающем воздухе важно для производства полупроводниковых устройств, оптических волокон и т.д., а влажность продукта при сушке контролируется для текстиля, бумага, зерна и т.п.). Влажность может быть выражена разными способами:</p>
<ul>
<li><strong>абсолютная влажность</strong> (<a href="https://en.wiktionary.org/wiki/absolute_humidity">absolute humidity</a>),</li>
<li><strong>относительная влажность</strong> (<a href="https://en.wiktionary.org/wiki/relative_humidity#English">relative humidity</a>),</li>
<li><strong>точка росы</strong> (<a href="https://en.wikipedia.org/wiki/Dew_point">dew point</a>).</li>
</ul>
<h4>8.3.1 Гигрометры (<a href="https://en.wikipedia.org/wiki/Hygrometer">Hygrometer</a>)</h4>
<p>Множество гигроскопичных материалов чувствительны к содержанию влаги (например, дерево, волосы, бумага и т.д.). Их размеры изменяются в зависимости от поглощённой влаги, что может использоваться при измерениях с использованием предварительной калибровки.</p>
<h4>8.3.2 <a href="https://ru.wikipedia.org/wiki/%D0%9F%D1%81%D0%B8%D1%85%D1%80%D0%BE%D0%BC%D0%B5%D1%82%D1%80">Психрометры</a> (<a href="https://en.wikipedia.org/wiki/Hygrometer#Psychrometers">Psychrometer</a>)</h4>
<p>Психрометрический метод - является весьма популярным методом измерения относительной влажности. Для этого используются два термометра - с сухой и влажной колбами (dry bulb and wet bulb). Влажная - насыщена водяным паром, а сухая - находится в окружающих условиях. Разница температур между сухой и влажной колбами используется для расчета относительной влажности с помощью психрометрической диаграммы (любимые инженерами и сотрудниками лабораторий калибровочные таблицы, рис. 8.5).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_8-5.jpg" alt="psychrometer" width="600px"/>
</td>
<td>
<i>
Рис. 8.5. Типичный психрометр, до сих пор его можно часто увидеть в отечественных лабораториях. Изображение взято с сайта wikipedia.org и распространяется по лицензии CC BY-SA 3.0.
</i>
</td>
</tr>
</table>
</div>
<p>Стоит понимать, что несмотря на приведенный пример, весь процесс может быть полностью автоматизирован.</p>
<h4>8.3.3 Измерение точки росы (Dew point measurement)</h4>
<p>Суть этого способа заключается в том, что если охлаждать газ при постоянном давлении, то при достижении точки росы начнется конденсация пара. Точка росы может быть измерена, если в атмосферу такого газа поместить чистое стеклянное зеркало (температура которого контролируется и медленно снижается). При достижении температуры точки росы на зеркале начнется конденсация пара, которую можно задетектировать с помощью оптического метода анализа. При этом полученная температура записывается и по ней рассчитывается влажность окружающей среды.</p>
<h4>8.3.4 Метод измерения по проводимости/емкости (Conductance/Capacitance method of measurement)</h4>
<p>Многие твердые тела поглощают влагу из окружающей среды (влагосодержание, moisture) и их значения проводимости или емкости изменяются. </p>
<blockquote>
<p><strong>Пример</strong>. Содержание влаги в гранулах изменяет емкость между двумя электродами, помещенными внутрь. Таким образом, измеряя емкость, может быть рассчитана влажность гранул. Аналогичным образом, содержание влаги в бумаге и текстиле изменяет их сопротивление.</p>
</blockquote>
<p>Схема измерения содержания влаги в материале детектора с помощью резистивного моста (Resistance Bridge) показана на рис. 8.6.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_8-6.png" alt="resistive technique" width="600px"/>
</td>
<td>
<i>
Рис. 8.6. Измерение влагосодержания по проводимости материала.
</i>
</td>
</tr>
</table>
</div>
<h4>8.3.5 Инфракрасное измерение (<a href="https://en.wikipedia.org/wiki/Infrared_spectroscopy">Infrared Technique</a>)</h4>
<p>Данный подход основан на прямом взаимодействии с молекулами воды. Эти молекулы присутствуют практически в любом материале и могут активно поглощать инфракрасное излучение с длинами волн 1,94; 2,95 и 6,2 мкм. Степень поглощения на любой из этих длин волн будет связана с количеством молекул воды в измеряемом материале (однако, измерение будет происходить на поверхности).</p>
<p>Данный метод находит все более широкое применение в аналитической практике и автоматизированном контроле. Однако его описание выходит за рамки настоящего пособия.</p>
<h3>8.4 Измерение рН (<a href="https://en.wikipedia.org/wiki/PH_meter">Measurement of pH</a>)</h3>
<p><strong><a href="https://en.wikipedia.org/wiki/PH">рН</a></strong> - мера содержания ионов водорода в растворе (другими словами - кислотность раствора). Это важный параметр, определяющий общее качество жидкости, в том числе воды. рН выражается как:</p>
<div class="math">$$
pH = \frac{1}{log_{10}C}
$$</div>
<p> где <span class="math">\(C\)</span> - концентрация ионов <span class="math">\(H^+\)</span> в растворе [моль/л].</p>
<p>В чистой (деионизованной) воде концентрация ионов <span class="math">\(H^+\)</span> составляет <span class="math">\(10^{-7}\)</span> <span class="math">\(\dfrac{моль}{л}\)</span> при <span class="math">\(25^oC\)</span>. Таким образом рН:</p>
<div class="math">$$
pH = \frac{1}{log_{10}10^{-7}} = 7
$$</div>
<p>Преимущества использования шкалы рН состоит в том, что активность (т.е. сила) всех сильных и слабых кислот и оснований может быть сведена к шкале 0-14. Значение рН кислых растворов (acidic solutions) находится в диапазоне 0-7, а щелочных (alkaline solutions) - в диапазоне 7-14.</p>
<p>Значение рН растворов измеряют с помощью рН-метров. Они обычно состоят из пары электродов (могут выполняться в одном корпусе): измерительного (measuring) и электрода сравнения (reference) (оба погружаются в измеряемый раствор). Эти два электрода по существу образуют две половины <a href="https://en.wikipedia.org/wiki/Electrolytic_cell">электрохимической ячейки</a> общий потенциал которой складывается из потенциалов этих половин. В то время как потенциал электрода сравнения постоянный, потенциал измерительного электрода зависит от концентрации гидрид-ионов и выражается <strong><a href="https://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%9D%D0%B5%D1%80%D0%BD%D1%81%D1%82%D0%B0">уравнением Нернста</a></strong> (<a href="https://en.wikipedia.org/wiki/Nernst_equation">Nernst’s equation</a>):</p>
<div class="math">$$
E = E_0 + \frac{RT}{nF} ln(\alpha C)
$$</div>
<p>где:</p>
<p> <span class="math">\(E\)</span> - электродный потенциал (e.m.f. of the half cell) [В];</p>
<p> <span class="math">\(E_0\)</span> - стандартный электродный потенциал (при стандартных условиях, emf of the half cell under saturated condition) [В];</p>
<p> <span class="math">\(R\)</span> - газовая постоянная (<span class="math">\(8.314 \frac{Дж}{\text{моль К}}\)</span>);</p>
<p> <span class="math">\(T\)</span> - абсолютная температура (K);</p>
<p> <span class="math">\(N\)</span> - валентность иона (количество электронов, участвующих в реакции);</p>
<p> <span class="math">\(F\)</span> - постоянная Фарадея (Faraday Constant, <span class="math">\(96485.33 \frac{Кл}{моль}\)</span>);</p>
<p> <span class="math">\(\alpha\)</span> - коэффициент активности (Activity coefficient, <span class="math">\(0 \le \alpha \le 1\)</span>); для очень разбавленных растворов (very dilute solution), <span class="math">\(\alpha \to 1\)</span>);</p>
<p> <span class="math">\(C\)</span> - молярная концентрация ионов (molar concentration of ions) [<span class="math">\(\frac{моль}{л}\)</span>].</p>
<h4>8.4.1 Электроды для измерения pH (Measuring and reference Electrodes)</h4>
<p>Как отмечалось выше, для измерения рН в общем случае используется 2 электрода: измерительный и электрод сравнения.</p>
<p><strong><a href="https://en.wikipedia.org/wiki/Glass_electrode">Измерительный электрод</a></strong> изготавливается из тонкого селективного к <span class="math">\(H^+\)</span> стекла с ионами натрия. При погружении в водный раствор на поверхностях такой стеклянной колбы образуется потенциал, который чувствителен к концентрации ионов <span class="math">\(H^+\)</span> (чувствительность <span class="math">\(59.2 \frac{m v}{pH}\)</span> at <span class="math">\(25^o C\)</span>). Буферный раствор внутри электрода имеет постоянную концентрацию ионов <span class="math">\(H^+\)</span> и обеспечивает электрическое соединение с выводным проводом.</p>
<p>В свою очередь основным назначением <strong><a href="https://en.wikipedia.org/wiki/Reference_electrode">электрода сравнения</a></strong> является обеспечение непрерывности электрической цепи, т.к. потенциал не может быть измерен абсолютно (требуется измерить его относительно чего-то). При погружении измерительного и сравнительного электрода в ячейку потенциал измеряется между их проводами. Электрическое соединение электрода сравнения со средой поддерживается через солевой мостик. При этом электрод сравнения должен удовлетворят следующим <strong>основным требованиям</strong>:</p>
<ul>
<li>Развиваемый потенциал должен быть независим от концентрации ионов <span class="math">\(H^+\)</span>.</li>
<li>Потенциал не должен зависеть от температуры.</li>
<li>Потенциал не должен меняться во времени.</li>
</ul>
<p>Учитывая данные требования обычно используют <strong>два типа электродов сравнения</strong>: каломельный (<span class="math">\(Hg - HgCl_2\)</span>) и хлор-серебряный (<span class="math">\(Ag-AgCl_2\)</span>).</p>
<p>Устройство электродов приведено на рис. 8.7. </p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_8-7.png" alt="pH electrodes" width="600px"/>
</td>
<td>
<i>
Рис. 8.7. Измерительный электрод (a) и каломельный электрод сравнения (b).
</i>
</td>
</tr>
</table>
</div>
<p>Как отмечалось выше, иногда измерительный электрод и электрод сравнения могут быть изготовлены в одном корпусе (рис. 8.8).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_8-8.png" alt="combination of pH electrode" width="600px"/>
</td>
<td>
<i>
Рис. 8.8. Комбинированный рН электрод.
</i>
</td>
</tr>
</table>
</div>
<p>Такой тип электродов называется <strong>комбинированным</strong>. В таком случае используется хлор-серебряный электрод сравнения.</p>
<h4>8.4.2 Схема измерения (Measuring scheme)</h4>
<p>Чувствительность рН электрода составляет около <span class="math">\(59.2 \text{ мВ/pH}\)</span> при <span class="math">\(25^o C\)</span>. Этой чувствительности должно быть достаточно для измерения напряжения с помощью обычного вольтметра. Однако за счет наличия стеклянной мембраны между проводниками внутреннее сопротивление датчика рН очень велико (порядка <span class="math">\(10^8 - 10^9 \Omega\)</span>) и в результате выходное сопротивление измерительного прибора должно быть как минимум в 10 раз больше сопротивления ячейки, что тяжело осуществимо в реальных условиях. Поэтому требуются специальные измерительные схемы.</p>
<p>Для усиления напряжения с электродов обычно используют усилительные цепи с транзисторами эффекта поля (<a href="https://en.wikipedia.org/wiki/FET_amplifier">FET-input amplifier</a> circuits). Кроме того, сопротивление изоляции между выводами также должно быть очень высоким и для этого их обычно снабжают влагостойким изоляционным покрытием.</p>
<blockquote>
<p><strong>Примечание</strong>. Напряжение в pH-метре зависит от температуры (как видно из уравнения Нернста). Поэтому в измерительной схеме должна быть также предусмотрена подходящая схема температурной компенсации (вспоминаем измерительные мосты).</p>
</blockquote>
<h3>8.5 Вопросы для проверки</h3>
<ol>
<li>Как бы вы измерили уровень жидкости в герметичном резервуаре? Приведите схему любого из методов.</li>
<li>Назовите различные способы, используемые для измерения уровня жидкости. Объяснить принцип работы гидростатического манометра перепада давления.</li>
<li>Назовите несколько примеров, когда измерение влажности/влагосодержания (humidity / moisture) находит применение в промышленности.</li>
<li>Как можно измерить содержание влаги в твердых телах? Приведите пример и покажите схему.</li>
<li>Как можно определить pH раствора. Какова концентрация ионов водорода в растворе, если рН раствора 5,0?</li>
<li>С использованием схем объясните конструкцию измерительного и эталонного электродов. Почему для измерения pH требуется два электрода?</li>
<li>Почему при измерении рН должна быть предусмотрена схема температурной компенсации?</li>
<li>Какие специальные схемы должны быть предусмотрены для усиления напряжения, генерируемого рН-электродом? Обоснуйте.</li>
</ol>
<h3>8.6 Список литературы</h3>
<ol>
<li><a href="https://www.pragolab.cz/files/aktuality/2015-03/pH-Measurement-Handbook.pdf">“pH Measurement Handbook” (PDF). PragoLab. Thermo Scientific, Inc. Retrieved 22 March 2017.</a></li>
<li><a href="https://journals.sagepub.com/doi/full/10.1177/0020294014546943">Kumar, Brajesh & Rajita, Gurindapalli & Mandal, Nirupama. (2014). A Review on Capacitive-Type Sensor for Measurement of Height of Liquid Level. Measurement and Control. 47. 219-224. 10.1177/0020294014546943. </a></li>
<li><a href="http://www.ydic.co.jp/english/technology/detection_E.html">Principles of detection by capacitance level switches</a></li>
<li><a href="http://www.ydic.co.jp/english/technology/level_E.html">What are the level switch and level meter?</a></li>
</ol>
<h2 id='9-signal_conditioning_circuits'> 9. Цепи передачи сигнала (Signal Conditioning Circuits)</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<h3>9.1 Введение и цели</h3>
<p>В данной заключительной главе мы подведем небольшой логический итог работы со всеми возможными датчиками, рассмотрев как передается и измеряется электрический сигнал, который мы получаем на выходе из 99% сенсоров. Как уже отмечалось ранее <a href="https://en.wikipedia.org/wiki/Data_acquisition">измерительная система</a> состоит из <a href="https://en.wikipedia.org/wiki/Signal_processing">3 основных блоков</a>:</p>
<ul>
<li><strong>чувствительный элемент</strong> (sensing element),</li>
<li><strong>элемент, передающий сигнал</strong> (signal conditioning element),</li>
<li><strong>элемент, обрабатывающий (формирующий) сигнал</strong> (signal processing element) (рис. 9.1)</li>
</ul>
<blockquote>
<p><strong>Примечание</strong>. Для лучшего понимания, предлагаю освежить материал из <a href="#2-Architecture">главы 2</a>.</p>
</blockquote>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_9-1.png" alt="measuring system" width="600px"/>
</td>
<td>
<i>
Рис. 9.1. Основные элементы измерительной системы.
</i>
</td>
</tr>
</table>
</div>
<p><strong>Чувствительный элемент</strong> преобразует не электрический сигнал (например температуру) в электрический (например напряжение, ток, сопротивление, емкость и т.д.).</p>
<p>Работа <strong>передающего сигнал элемента</strong> заключается в преобразовании различных форм электрических сигналов в напряжение (с уровнем, достаточным для дальнейшей обработки).</p>
<p>Следующим идет <strong>элемент, обрабатывающий сигнал</strong>. Он принимает выходящий от передающего элемента сигнал и преобразует его в более удобную форму для дальнейшего отображения/обработки (индикация, запись, управление обратной связью и др.). Например, к подобным преобразователям относятся: АЦП (аналого-цифровой преобразователь, <a href="https://en.wikipedia.org/wiki/Analog-to-digital_converter">Analog-to-digital converters, AD</a>), цепи линеаризации (linearization circuits), измерительные мосты и др..</p>
<p>Успех в проектировании любой измерительной системы для сенсора в значительной степени зависит от конструкции и характеристик применяемых цепей обработки сигнала (signal conditioning circuits). Даже дорогостоящий и точный преобразователь может не обеспечить хороших эксплуатационных характеристик, если схема обработки сигнала спроектирована неверно. Схемы расположения и выбора пассивных и активных элементов данной цепи в значительной степени влияют на характеристики всей измерительной системы. Часто цепь обработки сигнала определяется выходным сигналом чувствительного элемента и в настоящее время многие коммерческие датчики имеют встроенную схему обработки сигнала. Такая компоновка помогает решить проблему несовместимости чувствительного элемента и цепи формирования (обработки) сигнала.</p>
<p>Если посмотреть на различные поперечные сечения чувствительных элементов и изучить схемы формирования сигнала, то можно заметить, что большинство из них используют стандартные блоки, такие как мосты (AC и DC bridges), усилители (amplifiers), фильтры (filters) и фазовые чувствительные детекторы (phase sensitive detectors) для формирования сигнала. В этой главе мы сконцентрируемся в основном на мостах и усилителях и поразмышляем над общими вопросами проектирования.</p>
<p>После изучения главы нужно уметь:</p>
<ol>
<li>Определить различные блоки измерительной системы и объяснить назначение каждого блока.</li>
<li>Спроектировать несбалансированный <a href="https://en.wikipedia.org/wiki/Wheatstone_bridge">измерительный мост</a> (<a href="http://wheatstonebridge.weebly.com/unbalanced-bridge.html">unbalanced Wheatstone bridge</a>) и определить его чувствительность и другие параметры.</li>
<li>Объяснить преимущества использования конфигурации “push-pull” (двухтактную) в несбалансированных мостах AC и DC.</li>
<li>Дать определение CMRR усилителю и объяснить принцип его действия для усиления дифференциального сигнала (differential signal).</li>
<li>Сравнить характеристики одиночных входных усилителей (инвертирующих и не инвертирующих) (single input amplifiers (inverting and non-inverting)) с точки зрения усиления и входного импеданса.</li>
<li>Рассчитать выражение коэффициента усиления three-op.amp. instrumentation amplifier.</li>
</ol>
<h3>9.2 Несбалансированный мост постоянного тока (Unbalanced D.C. Bridge)</h3>
<p>На данный момент мы чаще сталкивались со сбалансированным измерительным мостом (мост Уитстона, Wheatstone bridge), чем с его аналогом - не сбалансированными. Там не менее, последний получил широкое распространение в области приборостроения. Для иллюстрации несбалансированного DC моста рассмотрим схему на рис. 9.2.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_9-2.png" alt="unbalansed DC bridge" width="600px"/>
</td>
<td>
<i>
Рис. 9.2. Несбалансированный мост постоянного тока.
</i>
</td>
</tr>
</table>
</div>
<p>Допустим, переменная сопротивление (<span class="math">\(R_2 = R(1+x)\)</span>) - это сенсор, чье сопротивление меняется в зависимости от производственных параметров. Тогда <span class="math">\(e_0\)</span> - выходящее напряжение, которое будет изменяться пропорционально сопротивлению сенсора <span class="math">\(x\)</span> (<span class="math">\(= \frac{\Delta R}{R}\)</span>). При этом <span class="math">\(p\)</span> - плечевое отношение (arm ratio) для моста, а <span class="math">\(E\)</span> - напряжение возбуждения.</p>
<p>Тогда,</p>
<div class="math">$$
e_0 = [\frac{R(1+x)}{pR + R(1+x)} - \frac{R}{pR+R}]E = \frac{px}{(p+1+x)(p+1)} E
$$</div>
<p>Исходя из приведенной формулы можно сделать несколько выводов:</p>
<ol>
<li>Зависимость <span class="math">\(e_0\)</span> VS <span class="math">\(x\)</span> нелинейна (поскольку <span class="math">\(x\)</span> представлен и в числителе и в знаменателе).</li>
<li>
<p>Максимальная чувствительность моста может быть достигнута для плечевого отношения <span class="math">\(p = 1\)</span>.</p>
<p>Вышеизложенное может быть проверено путем дифференцирования <span class="math">\(e_0\)</span> относительно <span class="math">\(p\)</span> и путем сравнения с 0 (это стандартная процедура поиска экстремума).</p>
<p>
<div class="math">$$
\frac{de_0}{dp}=0
$$</div>
</p>
<p>получаем,</p>
<p>
<div class="math">$$
x(p+1+x)(p+1)-px(2p+2+x) = 0
$$</div>
</p>
<p>или</p>
<p>
<div class="math">$$
p^2 = 1 + x
$$</div>
</p>
<p> т.е. <span class="math">\(p = \sqrt{1+x} \approx 1\)</span>, для малых <span class="math">\(x\)</span>.</p>
</li>
<li>
<p>Нелинейность моста уменьшается с возрастанием плечевого отношения <span class="math">\(p\)</span>, но при этом уменьшается чувствительность.</p>
<p>Этот факт может быть проверен путем построения графика <span class="math">\(\frac{e_0}{E}\)</span> vs. <span class="math">\(x\)</span> для различных <span class="math">\(p\)</span> (рис. 9.3).</p>
<p><div>
<br>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_9-3.png" alt="bridge characteristics" width="600px"/>
</td>
<td>
<i>
Рис. 9.3. Характеристики моста для разных плечевых отношений.
</i>
</td>
</tr>
</table></p>
</div>
</li>
<li>
<p>Для единичного плечевого отношения (коэффициент рычага) (<span class="math">\(p=1\)</span>) и для малых <span class="math">\(x\)</span>, мы можем получить приблизительно линейную связь</p>
<p>
<div class="math">$$
\begin{equation}\begin{aligned}
e+0 = \frac{x}{4} E
\end{aligned}\end{equation}
\tag{9.1}\label{eq9.1}
$$</div>
</p>
</li>
<li>
<p>Как было показано в п.2, максимальная чувствительность моста достигается при плечевом отношении <span class="math">\(p = 1\)</span>. Вместо того, что бы выравнять все сопротивления <span class="math">\(R_1\)</span>, <span class="math">\(R_2\)</span>, <span class="math">\(R_3\)</span>, <span class="math">\(R_4\)</span> (сбалансированная схема), данное плечевое отношение может быть достигнуто и путем выбора различных сопротивлений. Их нужно выбирать так, чтобы <span class="math">\(R_1 = R_2\)</span>, <span class="math">\(R_3 = R_4\)</span> для <span class="math">\(x = 0\)</span>. Однако в большинстве случаев делать это не целесообразно, поскольку выходной импеданс (сопротивление) моста будет выше. Исходя из требования низкого выходного сопротивления элемента, формирующего сигнал, лучше спроектировать основной мост со всеми равными сопротивлениями.</p>
</li>
<li>
<p>Из вышеприведенных рассуждений может показаться, что нет никаких ограничений на выбор возбуждающего напряжения для моста. Более того, казалось бы чем больше входное напряжение, тем больше чувствительность для выходного напряжения. Однако ограничение на входное напряжение связано с допустимым рассеянием мощности на резисторах. Если мы повышаем входное <span class="math">\(E\)</span>, это вызовет бОльшую потерю мощности на элементах сопротивления. А если потеря мощности превысит допустимый порог рассеяния, то произойдет самонагрев (self heating) резисторов и сенсора. В этом случае опять произойдет повышение температуры на резисторе, что опять изменит сопротивление и потерю мощности (цепная реакция). Зачастую это приводит к необратимому повреждению датчика (сгорит).</p>
</li>
</ol>
<h4>Двухконтактная схема (Push-Pull configuration)</h4>
<p>Характеристики несбалансированного измерительного моста с одним элементом сопротивления на плече могут быть значимо улучшены с использованием двухконтактной схемы. Данная схема состоит из двух одинаковых элементов сопротивления в соседних плечах: пока сопротивление датчика падает, сопротивление на другом датчике возрастает на ту же величину (рис. 9.4).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_9-4.png" alt="unbalanced DC bridge" width="600px"/>
</td>
<td>
<i>
Рис. 9.4. Несбалансированный мост постоянного тока с "push-pull" конфигурацией.
</i>
</td>
</tr>
</table>
</div>
<p>Несбалансированное напряжение может быть рассчитано как:</p>
<div class="math">$$
e_0 = [\frac{R(1+x)}{R(1+x)+R(1-x)} - \frac{R}{2R}]E = [\frac{1+x}{2} - \frac{1}{2}]E = \frac{x}{2}E
$$</div>
<p>Исходя из приведенного выражения можно заметить преимущества предложенной схемы. Во-первых, нелинейность моста может быть полностью устранена. Во-вторых, чувствительность увеличивается в 2 раза по сравнению с мостом с одним сенсором. Подобное решение может быть использовано и для AC мостов с индуктивными или емкостными сенсорами. Подобное применение описано ниже.</p>
<h3>9.3 Насбалансированный мост переменного напряжения с двухконтактной схемой (Unbalanced A.C. Bridge with Push-Pull configuration)</h3>
<p>На рис. 9.5 приведена схема несбалансированного двухконтактного АС моста с индуктивными или емкостными датчиками. Здесь возбуждающий DC сигнал заменен на источник AC и два одинаковых фиксированных сопротивления (расположенных на соседних плечах). При этом индуктивные (или емкостные) сенсоры расположены таким образом, что при увеличении одной индуктивности (емкости) другая уменьшается на такое же количество.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_9-5.png" alt="unbalanced AC bridge" width="600px"/>
</td>
<td>
<i>
Рис. 9.5. Насбалансированный мост переменного напряжения с "push-pull" конфигурацией для a) индуктивного сенсора и b) для емкостного сенсора.
</i>
</td>
</tr>
</table>
</div>
<p>Для рис. 9.5(a), </p>
<div class="math">$$
e_0 = [\frac{jwL(1+x)}{jwL(1+x) + jwL(1-x)} - \frac{R}{2R}]E
$$</div>
<p> где <span class="math">\(\omega\)</span> - угловая частота возбуждения (angular frequency of excitation), <span class="math">\(L\)</span> - номинальное значение индуктивности и <span class="math">\(x = \frac{\Delta L}{L}\)</span>.</p>
<p>Упростив выражение, получим доказательство линейных характеристик измерительного моста:</p>
<div class="math">$$
\begin{equation}\begin{aligned}
e_0 = \frac{x}{2}E
\end{aligned}\end{equation}
\tag{9.2}\label{eq9.2}
$$</div>
<p>Для емкостного датчика (рис. 9.5(б)):</p>
<div class="math">$$
\begin{equation}\begin{aligned}
e_0 = [\frac{\frac{1}{jwC(1+x)}}{\frac{1}{jwC(1+x)} + \frac{1}{jwC(1-x)}} - \frac{R}{2r}]E =\\
[\frac{jwC(1-x)}{jwC(1+x) + jwC(1-x)} - \frac{R}{2R}]E = -\frac{x}{2} E
\end{aligned}\end{equation}
\tag{9.3}\label{eq9.3}
$$</div>
<p> где <span class="math">\(x = \frac{\Delta C}{C}\)</span>.</p>
<p>Как и ожидалось, здесь также получены линейные характеристики (вне зависимости от значения <span class="math">\(x\)</span>). Но есть небольшое отличие от предыдущего выражения (<span class="math">\(\eqref{9.2}\)</span> и <span class="math">\(\eqref{9.3}\)</span>) - отрицательный знак. Этот отрицательный знак для АС моста показывает, что выходящее напряжение на рис. 9.4(б) будет на <span class="math">\(180^o\)</span> в противофазе со входящим напряжением <span class="math">\(E\)</span>. Однако мы не сможем обнаружить эту разницу, если будем использовать простой АС вольтметр для измерения выходящего напряжения. Фактически, если бы значение <span class="math">\(x\)</span> само было отрицательным, то это вызвало бы аналогичный эффект сдвига фаз, который мы не смогли бы обнаружить без специального оборудования для определения фазы. </p>
<p>Описанный тип схемы называется фазочувствительным устройством (PSD) и оно часто используется в сочетании с индуктивными и емкостными датчиками. Цепь PSD выпрямляет небольшое AC напряжение в DC. При этом полярность выходного напряжения в DC меняется на противоположную (имеет место смена фазы).</p>
<h4>Емкостной усилитель (Capacitance Amplifier)</h4>
<p>Здесь приводиться другая конфигурация, приемлемая для емкостной двухконтурной схемы с сенсором. Сама схема может быть определена как полумост и ее типичная конфигурация приведена на рис. 9.6.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_9-6.png" alt="capacitance amplifire" width="600px"/>
</td>
<td>
<i>
Рис. 9.6. Емкостной усилитель (сенсор отмечен как подстраиваемая емкость).
</i>
</td>
</tr>
</table>
</div>
<p>В схеме последовательно соединены два идентичных источника напряжения с общим заземлением. Такой же эффект может быть достигнут с помощью трансформатора с центральным заземлением. Два сенсора-конденсатора <span class="math">\(C_1\)</span> и <span class="math">\(C_2\)</span> соединены, как показано на рис. 9.5. При этом несимметричный ток проходит через цепь усилителя с конденсатором обратной связи <span class="math">\(C_f\)</span>. Тогда переменный ток через конденсаторы:</p>
<div class="math">$$
I_1 = VjwC_1
$$</div>
<p>и</p>
<div class="math">$$
I_2 = -VjwC_2
$$</div>
<p>Несбалансированный ток составит:</p>
<div class="math">$$
I = I_1 + I_2 = Vjw(C_1 - C_2)
$$</div>
<p>Выходящее напряжения от усилителя:</p>
<div class="math">$$
V_0 = -\frac{I}{jwC_f} = -\frac{C_1 - C_2}{C_f} V
$$</div>
<p>Таким образом мы получили линейный отклик. При этом его также можно получить, подключив конфигурацию “push-pull” емкостного сопротивления (рис. 9.6). Усиление схемы может быть скорректировано с помощью переменной величины <span class="math">\(C_f\)</span>. </p>
<p>Стоит понимать однако, что мы рассмотрели идеальную схему. Для реальной схемы высокое сопротивление должно быть расположено параллельно с <span class="math">\(C_f\)</span>.</p>
<h3>9.4 <a href="https://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D1%83%D1%81%D0%B8%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C">Усилители</a> (<a href="https://en.wikipedia.org/wiki/Amplifier">Amplifiers</a>)</h3>
<p><a href="https://en.wikipedia.org/wiki/Operational_amplifier_applications">Усилитель</a> является неотъемлемой частью любой схемы формирования сигнала. При этом существуют различные конфигурации усилителей и нужно уметь выбирать подходящую схему в зависимости от типа задач. </p>
<h4>9.4.1 Инвертирующий и не инвертирующий усилители (<a href="https://www.tutorialspoint.com/inverting-and-non-inverting-operational-amplifiers">Inverting and Non-inverting Amplifiers</a>)</h4>
<p>Эти два типа усилителей представляют собой устройства с одним выходом (при этом один из входов заземлен). Из схем этих двух популярных усилителей, показанных на рис. 9.7, видно, что коэффициент усиления по напряжению для инвертирующего усилителя:</p>
<div class="math">$$
\frac{e_0}{e_i} = - \frac{R_2}{R_1}
$$</div>
<p>Тогда как коэффициент от не инвертирующего усилителя:</p>
<div class="math">$$
\frac{e_0}{e_i} = 1 + \frac{R_2}{R_1}
$$</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_9-7.png" alt="amplifires" width="600px"/>
</td>
<td>
<i>
Рис. 9.7. Инвертирующий усилитель (a) и не инвертирующий усилитель (b).
</i>
</td>
</tr>
</table>
</div>
<p>Очевидно, что оба усилителя способны обеспечить любое желаемое усиление по напряжению (при условии, что фазовая инверсия не представляет проблемы для первого случая). Но в приведенных схемам можно заметить, что входное сопротивление инвертирующего усилителя конечное и составляет примерно <span class="math">\(R_1\)</span>, в то время как не инвертирующий усилитель имеет бесконечное входное сопротивление. </p>
<p><strong>Определенно, второй усилитель будет работать лучше, если мы хотим чтобы усилитель не загружал датчик (или мостовую схему).</strong></p>
<h4>9.4.2 Дифференциальный усилитель (<a href="https://en.wikipedia.org/wiki/Differential_amplifier">Differential Amplifier</a>)</h4>
<p>Дифференциальный усилитель — электронный усилитель с двумя входами, выходной сигнал которого равен разности входных напряжений, умноженной на константу. Применяется в случаях, когда необходимо выделить небольшую разность напряжений на фоне значительной синфазной составляющей. Такие усилители полезны в тех случаях, когда обе входные клеммы являются инвертирующими, а сами усилители находят широкое применение в приборостроении. Типичный дифференциальный усилитель с одиночной конфигурацией усилителя (single op.amp. configuration) показан на рис. 9.8.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_9-8.png" alt="differential amplifier" width="600px"/>
</td>
<td>
<i>
Рис. 9.8. Дифференциальный усилитель.
</i>
</td>
</tr>
</table>
</div>
<p>Применяя теорему о суперпозиции (<a href="https://en.wikipedia.org/wiki/Superposition_theorem">superposition theorem</a>), можно получить вклад каждого входа и добавить их алгебраически, чтобы получить выходное напряжение в виде:</p>
<div class="math">$$
e_0 = \frac{R_4}{R_3 + R_4} (1+\frac{R_2}{R_1}) e_2 - \frac{R_2}{R_1} e_1
$$</div>
<p>Если мы выберем сопротивления таким образом, что <span class="math">\(\frac{R_4}{R_3} = \frac{R_2}{R_1}\)</span>, то выходящее напряжение будет:</p>
<div class="math">$$
\begin{equation} \begin{aligned}
e_0 = \frac{R_2}{R_1} (e_2-e_1)
\end{aligned}\end{equation}
\tag{9.4}\label{eq9.4}
$$</div>
<p>Однако такой тип дифференциального усилителя (с одним операционным усилителем, single op. amp.) также страдает от ограничения предельного входного сопротивления. Фактически, для <strong>оценки характеристик усилителя</strong> используется несколько критериев:</p>
<ul>
<li>смещение и дрейф (offset and drift),</li>
<li>входной импеданс (input impedance),</li>
<li>усиление и пропускная способность (gain and bandwidth),</li>
<li>коэффициент отклонения общего режима (common mode rejection ratio, <strong>CMRR</strong>).</li>
</ul>
<p>Эксплуатационные характеристики операционного усилителя оцениваются по коэффициенту усиления в полосе пропускания (который указывается в спецификации производителя). В разомкнутом контуре коэффициент усиления очень высок (около <span class="math">\(10^5\)</span>), но полоса пропускания очень мала. В замкнутом контуре коэффициент усиления низкий, но достижимая ширина полосы пропускания высока. Обычно коэффициент усиления в однокаскадной операционной схеме усилителя (single stage operational amplifier circuit) ограничен примерно 10, поэтому достижима большАя ширина полосы пропускания. При этом для достижения бОльшего усиления можно объединять несколько усилителей в каскад (cascade).</p>
<p>Коэффициент CMRR является очень важным параметром для КИПиА (instrumentation circuit applications). Желательно использовать усилители с высокой CMRR при подключении к измерительным схемам. Сам коэффиуиент <strong>CMRR определяется как</strong>:</p>
<div class="math">$$
CMRR = 20 log_{10}\frac{A_d}{A_c}
$$</div>
<p>где:</p>
<p> <span class="math">\(A_d\)</span> это дифференциальное модовое усиление (differential mode gain), а <span class="math">\(A_c\)</span> это общее модовое усиление (common mode gain) усилителя.</p>
<p>Важность использования усилителя с высокой CMRR можно объяснить следующим примером:</p>
<blockquote>
<p><strong>Пример</strong>. Несбалансированное напряжение измерительного моста по сопротивлению должно быть усилено в 200 раз с помощью дифференциального усилителя. Конфигурация показана на рис. 9.9 с <span class="math">\(R = 1000 \Omega\)</span> и <span class="math">\(x = 2 \times 10^{-3} \Omega\)</span>. Имеются два усилителя: один с <span class="math">\(A_d = 200\)</span> и <span class="math">\(CMRR = 80 дБ\)</span>, а другой с <span class="math">\(A_d = 200\)</span> и <span class="math">\(CMRR = 60 дБ\)</span>. Найдите значения <span class="math">\(V_0\)</span> для обоих случаев и вычислите ошибки.</p>
<p><div>
<br>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_9-9.png" alt="example-1" width="600px"/>
</td>
<td>
<i>
Рис. 9.9. Измерительная схема к задаче.
</i>
</td>
</tr>
</table></p>
</blockquote>
</div>
<blockquote>
<p><strong>Решение</strong></p>
<p>Здесь <span class="math">\(x = 2 \times 10^{-3} \Omega\)</span>. Используя <span class="math">\(\eqref{9.1}\)</span>,</p>
<p>
<div class="math">$$e_i = \frac{x}{4} x 10 = 5 mv = v_d$$</div>
</p>
<p>Общая мода напряжения для усилителя <span class="math">\(v_c = 5 V\)</span> (половина напряжения питания). Для усилителя 1: <span class="math">\(A_d = 200\)</span>, <span class="math">\(20 log \frac{A_d}{A_c}=80 dB\)</span></p>
<p>Тогда, <span class="math">\(\frac{A_d}{A_c} = 10^4\)</span>, или, <span class="math">\(A_c = \frac{200}{10^4}=0.02\)</span>.</p>
<p>Таким образом, <span class="math">\(v_0 = A_d v_d + A_c v_c = 200 \times 5 \times 10^{-3} + 0.02 \times 5 = 1.1 V\)</span></p>
<p>В идеале, напряжение должно составлять 1.0 V для усиленного в 200 раз исходного сигнала (в случае несбалансированого моста). Однако из-за присутствия мостового несбалансированного напряжения достигается <strong>ошибка в 10%</strong>.</p>
<p>Во втором случае, CMRR составляет 60 dB (все остальное остается таким же). В данном случае <span class="math">\(A_c = \frac{200}{10^3} = 0.2\)</span> Таким образом,</p>
<p><span class="math">\(v_0 = A_d v_d + A_c v_c = 100 \times 5 \times 10^{-3} + 0.2 \times 5 = 2.0 V\)</span></p>
<p>И рассчитанная <strong>погрешность в 100%</strong> появляется из-за общего напряжения!</p>
<p>Ссылаясь на рис. 9.8, при условии что операционный усилитель идеальный и сопротивление выбрано таким, что <span class="math">\(\frac{R_4}{R_3} = \frac{R_2}{R_1}\)</span> мы можем полностью устранить влияние общего напряжения (видно из примера <span class="math">\(eqref{9.4}\)</span>). Однако если значения сопротивлений отличаются (например, из-за допусков резисторов), то общее напряжение приведет к большОй ошибке в усиленном выходном напряжении. Альтернативой рассмотренной схеме в приведенном выше примере является применение на клеммах <strong>мостового питания (bridge supply terminals) +5 и -5В, вместо +10 В и 0 В</strong>.</p>
</blockquote>
<h4>9.4.3 Измерительный усилитель (Instrumentation Amplifier)</h4>
<p>Часто в приборостроении необходимо усиливать небольшое дифференциальное напряжение в несколько сотен раз. Одноступенчатый дифференциальный усилитель (рис. 9.8) не способен эффективно выполнять эту работу по нескольким причинам:</p>
<ul>
<li>Входной импеданс конечен. Более того, достижимое усиление в однокаскадном усилителе ограничено из-за полосы пропускания. </li>
<li>Из-за ограничений, связанных со смещением тока в операционном усилителе. </li>
</ul>
<p>Улучшенной версией рассмотренного ранее однокаскадного усилителя является инструментальный усилитель из 3 операционных усилителей (three op. amp. Instrumentation amplifier, а рис. 9.10).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_9-10.png" alt="instumentation amplifier" width="600px"/>
</td>
<td>
<i>
Рис. 9.10. Инструментальный усилитель, состоящий из 3 операционных усилителей.
</i>
</td>
</tr>
</table>
</div>
<p>Основные свойства:</p>
<ul>
<li>высокое дифференциальное усиление (регулируемое до 1000);</li>
<li>бесконечный входной импеданс;</li>
<li>большой коэффициент CMRR (80 дБ и более);</li>
<li>умеренная полоса пропускания.</li>
</ul>
<p>Из рис. 9.10 видно, что входной каскад операционного усилителя не заглушает ток (поскольку вход подается на не инвертирующие входные клеммы). Таким образом, достигается второе свойство, упомянутое выше. Если посмотреть на входной каскад, то через сопротивления <span class="math">\(R_1\)</span> и <span class="math">\(R_2\)</span> протекает тот же самый входной ток <span class="math">\(I\)</span>. Используя свойства идеального операционного усилителя, мы можем получить ток:</p>
<div class="math">$$
I = \frac{e_1 - e_{i1}}{R_1} = \frac{e_{i1}-e_{i2}}{R_2} = \frac{e_{i2} - e_2}{R_1}
$$</div>
<p>Далее мы получим напряжение</p>
<div class="math">$$
e_1 = e_{i1} + \frac{R_1}{R_2} (e_{i1} - e_{i2})
$$</div>
<div class="math">$$
e_2 = e_{i2} - \frac{R_1}{R_2} (e_{i1} - e{i2})
$$</div>
<p>Таким образом,</p>
<div class="math">$$
e_1 - e_2 = (1+\frac{2R_1}{R_2})(e_{i1} - e{i2})
$$</div>
<p>Следующий (второй) каскад инструментального усилителя является простым дифференциальным усилителем, и, следовательно, используя <span class="math">\(\eqref{9.4}\)</span> по всему коэффициенту усиления:</p>
<div class="math">$$
e_0 = \frac{R_4}{R_3}(e_2-e_1) = \frac{R_4}{R_3}(1+\frac{2R_1}{R_2})(e_{i2}-e_{i1})
$$</div>
<p>Таким образом, варьируя <span class="math">\(R_2\)</span> можно получить очень большой выигрыш (но соотношение обратное). При этом полоса пропускания не страдает (так как за усиление отвечают три операционных усилителя).</p>
<blockquote>
<p><strong>Примечание</strong>. На рынке представлено множество коммерчески доступных одночиповых инструментальных усилителей. Их коэффициент усиления можно настроить, подключив внешнее сопротивление или выбрав коэффициент усиления (50, 100 или 500) через перемычку.</p>
</blockquote>
<h3>9.5 Заключение</h3>
<p>При проектировании схемы формирования сигнала необходимо учитывать несколько моментов. Линейность, чувствительность, эффект загрузки, ширина полосы пропускания, отклонение общего режима (Linearity, sensitivity, loading effect, bandwidth, common mode rejection) - важные вопросы, влияющие на работу схем формирования сигнала. В этом уроке мы узнали о различных конфигурациях несбалансированных мостов постоянного и переменного тока, подходящих для резистивных, емкостных преобразователей и преобразователей индуктивного типа. Кроме характеристик различных типов усилителей, использование общих операционных усилителей было также подробно рассмотрены. Однако реальная конструкция зависит от конкретного используемого сенсорного элемента и его характеристик.</p>
<p>Несколько других типов схем формирования сигнала (например, фазовый чувствительный детектор, фильтры и многие другие) были оставлены без внимания в ходе обсуждения (добавить).</p>
<h3>9.6 Вопросы для проверки</h3>
<ol>
<li>Медный детектор температурного сопротивления имеет сопротивление <span class="math">\(100 \Omega\)</span> при <span class="math">\(0^o C\)</span>. Коэффициент температурного сопротивления меди составляет <span class="math">\(\frac{0.00427}{^oC}\)</span> при <span class="math">\(0^o C\)</span>. Чувствительный элемент помещен в несбалансированный измерительный мост как показано на рис. 9.2, остальные плечи имеют фиксированное сопротивление по <span class="math">\(100 \Omega\)</span>. Постройте зависимость несбалансированного напряжения от температуры для диапазона температуры от <span class="math">\(0^o C\)</span> до <span class="math">\(100^o C\)</span>, если напряжение возбуждения <span class="math">\(E = 2V\)</span>. Являются ли характеристики линейными или нелинейными? Обоснуйте свой ответ.</li>
<li>Объясните преимущество использования схемы “push-pull” в мостовой схеме.</li>
<li>Для какого плечевого отношения достигается максимальная чувствительность несбалансированного измерительного моста?</li>
<li>Не инвертирующий усилитель обеспечивает более высокий входной импеданс измерительной схемы по сравнению с инвертирующим усилителем - обоснуйте это.</li>
<li>Дайте определение коэффициента CMRR операционного усилителя. Почему важен его учет при проектировании измерительной системы?</li>
<li>Разработайте дифференциальный усилитель с коэффициентом усиления 10 и нарисуйте его схему.</li>
<li>Приведите основные особенности инструментального усилителя.</li>
<li>Схема дифференциального усилителя, показанная на рис. 9.8, имеет сопротивления: <span class="math">\(R_1 = 10K\)</span>, <span class="math">\(R_2 = 100 K\)</span>, <span class="math">\(R_3 = 11 K\)</span> и <span class="math">\(R_4 = 100 K\)</span>. Допустим, операционный усилитель является идеальным, найдите коэффициент CMRR усилителя.</li>
<li>Простая схема усилителя емкости показана на рисунке 9.11. <span class="math">\(C_1\)</span> представляет собой емкостный датчик, номинальное значение которого составляет 50 пФ. <span class="math">\(C_2\)</span> - фиксированный конденсатор 25 пФ. Найдите выходное напряжение при синусоидальном напряжении возбуждения 1В с пиком на частоте 1 кГц предположив, что операционный усилитель является идеальным.</li>
</ol>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_9-11.png" alt="task 9.1" width="600px"/>
</td>
<td>
<i>
Рис. 9.11 Задача 9.1.
</i>
</td>
</tr>
</table>
</div>
<h3>9.7 Ссылки на источники</h3>
<ol>
<li><a href="https://nptel.ac.in/courses/108105062/">Industrial Automation and Control course from NPTEL</a></li>
<li><a href="http://www.instrumentationtoday.com/strain-gauge/2011/08/">Instrumentation today</a></li>
<li><a href="https://www.idc-online.com/resources/technical-references/instrumentation-technical-references.html">IDC Technologies</a></li>
<li><a href="https://doi.org/10.1016/C2013-0-15387-1">Measurement and Instrumentation. Theory and Application. Book. 2nd Edition • 2016</a></li>
<li><a href="https://doi.org/10.1016/C2009-0-25186-5">Instrumentation Reference Book. Book. 4th Edition. 2010</a></li>
<li><a href="https://www.cds.caltech.edu/~murray/courses/cds101/fa04/reading.html">Caltech course CDS 101/110, Fall 2004, Analysis and Design of Feedback Systems</a></li>
<li><a href="https://www.deepl.com/">Help in translate: Deepl.com</a></li>
<li><a href="https://www.tablesgenerator.com">Help with HTML table</a></li>
<li><a href="https://app.diagrams.net/">Perfect tools for construct diagrams: draw.io</a></li>
</ol>
<h2 id='10-conclusion'> 10. Заключение</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>В заключение этой небольшой статьи-пособия хочется подвести небольшой итог по рассмотренным темам. Были кратко исследованы и описаны следующие основные разделы: </p>
<ul>
<li>Архитектура систем промышленной автоматизации - были описаны и исследованы все основные уровни принятия решения в промышленном производстве. Описана последовательность передачи сигнала внутри сенсоров, актуаторов, ПЛК и АСУТП. Приведен пример технического задания на разработку системы АСУТП по управлению цехом холодной прокатки стали.</li>
<li>Основные характеристики измерительных систем - приведен ряд статических и динамических характеристик измерительных систем (наши сенсоры). Дан краткий экскурс в погрешности, статистику, разрешающую способность и калибровку. Рассмотрены понятия передаточной функции, преобразования Лапласа, амплитудно-частотных характеристик и примеры использования данных понятий для описания работы сенсорных систем.</li>
<li>Сенсоры для измерения температуры - приведены примеры работы нескольких типов температурных сенсоров: термометры на основе сопротивления (RTD, термисторы) и термопары. </li>
<li>Сенсоры для измерения давления и силы - рассмотрена работа измерителей давления мембранного типа, мехов и трубок Бордона. Приведены различные способы измерения силы: тензодатчики, нагрузочная ячейка, удостоверяющее кольцо и кантиливерная балка. </li>
<li>Сенсоры для измерения скорости и смещения - измерение смещения с помощью потенциометров, линейного дифференциального трансформатора, индуктивных датчиков, ротационного дифференциального трансформатора с переменной величиной, ресольвера, датчиков емкости, оптических датчиков. Кроме того приведены примеры измерения скорости с помощью оптического и индуктивного метода.</li>
<li>Сенсоры для измерения потока - расходомеры по давлению (Вентури, орифиметр, вихревые и т.д.).</li>
<li>Сенсоры измерения уровня, влажности и Ph.</li>
</ul>
<p>Кроме этого кратко были рассмотрены цепи передачи сигналов от сенсоров к системам автоматизации. Приведены их общие схемы и пару задач на расчет ключевых характеристик. Не обошлось и без вводного раздела с основными определениями и так любой инженерами концепции “черного ящика”. Описаны ключевые типы промышленных систем и систем автоматизации.</p>
<p>Надеюсь в рамках этого пособия в сон не клонило и прочитанный материал оказался полезен и интересен. В относительно ближайшее время попробую написать методичку по этому курсу и более подробно и физически-обоснованно раскрыть очень практическую и интересную тему работы автоматизированных систем неразрушающего контроля в промышленном производстве. </p>
<p>Буду рад любым замечаниям и предложениям по данному курсу!</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>Проектная деятельность2018-12-09T00:00:00+03:002022-10-09T12:00:00+03:00Дмитрий Юновидовtag:dimyun.space,2018-12-09:/ru/blog/education-ChSU-automation-drive_proj.html<p>Авторская методичка по проектной деятельности</p><p>Данная небольшая заметка относится к набору моих курсов для студентов Череповецкого Государственного Университета (ЧГУ). В рамках данной заметки раскрывается материал следующих дисциплин по учебному плану:</p>
<ul>
<li>управление проектной деятельностью;</li>
<li>менеджмент проектов;</li>
<li>проектная деятельность;</li>
<li>управление инновационными проектами;</li>
<li>инженерное лидерство.</li>
</ul>
<p>Все, кому это актуально или интересно - рад приветствовать!</p>
<h2 id="0-TOC">Оглавление</h2>
<ol>
<li><a href="#1">Введение. Цели и задачи</a></li>
<li><a href="#2">Теоретические основы (обзор литературы)</a><ol>
<li><a href="#2-1">ГОСТ Р 54869-2011. Проектный менеджмент. Требования к управлению проектом</a></li>
<li><a href="#2-2">ГОСТ Р 54870-2011. Проектный менеджмент. Требования к
управлению портфелем проектов</a></li>
<li><a href="#2-3">ГОСТ Р 54871-2011. Проектный менеджмент. Требования к
управлению программой</a></li>
<li><a href="#2-4">ГОСТ Р 56715.1-2015. Проектный менеджмент. Системы
проектного менеджмента. Часть 1. Основные положения</a></li>
<li><a href="#2-5">ГОСТ Р 56715.2-2015. Проектный менеджмент. Системы
проектного менеджмента. Часть 2. Процессы и процессная модель</a></li>
<li><a href="#2-6">ГОСТ Р 56715.3-2015. Проектный менеджмент. Системы
проектного менеджмента. Часть 3. Методы</a></li>
<li><a href="#2-7">ГОСТ Р 56715.4-2015. Проектный менеджмент. Системы
проектного менеджмента. Часть 4. Данные и модель данных</a></li>
<li><a href="#2-8">ГОСТ Р 56715.5-2015. Проектный менеджмент. Системы
проектного менеджмента. Часть 5. Термины и определения</a></li>
<li><a href="#2-9">ГОСТ Р ИСО 21500-2014. Руководство по проектному
менеджменту</a></li>
</ol>
</li>
<li><a href="#3">Упрощение жизни по проектной деятельности</a><ol>
<li><a href="#3-1">Что такое проект и его особенности</a></li>
<li><a href="#3-2">Фазы и процессы в проекте</a></li>
<li><a href="#3-3">На заметку</a></li>
</ol>
</li>
<li><a href="#4">Практика, задания и лабы (опционально)</a> </li>
<li><a href="#5">Литература</a> </li>
</ol>
<h2 id="1">1. Введение. Цели и задачи</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Причина, по которой в рамках данной заметки собрано так много “различных”
дисциплин учебного процесса проста. Их общая и основная <strong>ЦЕЛЬ</strong> - <em>дать вам
представление о проектной деятельности, ее методах, целях, задачах и
показать реальные примеры этой деятельности</em>. А потому, все они объединены в
данный общий модуль. Тоже относиться и к инженерному лидерству - можете
считать себя лидером, если смогли успешно реализовать собственный проект и
работать с группой людей. Да и в рамках каждой из этих дисциплин мы изучаем
по сути одни и те же подходы, но с разным уклонов в теоретическую или
практическую область. Поэтому, по моему мнению, будет не лишним в рамках
каждой из этих дисциплин заново “проходить” весь приведенный здесь материал,
там самым закрепляя его (но с разным практическим уклоном и тестовыми заданиям).</p>
<p>Наши <strong>основные задачи:</strong></p>
<ul>
<li>познакомиться с проектной культурой и ее принципами;</li>
<li>проанализировать и изучить систему управления проектами;</li>
<li>отработать основные практически навыки разработки проектов;</li>
<li>исследовать путь развития проекта;</li>
<li>разобрать несколько практических примеров выигрышных проектов.</li>
</ul>
<p><strong>Для “проекта” мы рассмотрим следующие элементы:</strong></p>
<ul>
<li>основные признаки;</li>
<li>структуру;</li>
<li>критерии успешности;</li>
<li>жизненный цикл;</li>
<li>правила постановки цели (SMART);</li>
<li>правильное планирование;</li>
<li>диаграммы Ганта;</li>
<li>матрица ответственности команды;</li>
<li>инструменты анализа и управления рисками.</li>
</ul>
<p><strong>Вы научитесь:</strong></p>
<ul>
<li>отличать проектную деятельность от операционной;</li>
<li>учитывать критерии проекта при его разработке;</li>
<li>формировать цель и задачи для вашей идеи;</li>
<li>составлять план проекта и матрицу ответственности;</li>
<li>работать с рисками.</li>
</ul>
<p>Кроме того, данная заметка будет пополняться следующими полезными практиками
(возможно в виде отдельных статей в блоге):</p>
<ul>
<li>примеры успешных проектов (презентаций и планов) автора;</li>
<li>разбор agile-системы управления командой в процессе выполнения проекта;</li>
<li>разбор современных инструментов планирования и управления проектами;</li>
<li>практика DevOps работы в GitLab для ведения и учета проектов.</li>
</ul>
<h2 id="2">2. Теоретические основы (обзор литературы)</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p><strong>Проектная деятельность</strong> - понятие, относящееся к широкому кругу деятельности и весьма интуитивное, а значит сложное в систематизации и конкретном объяснении. Но как известно, в любой непонятной ситуации - читай ГОСТ. Этим и займемся.</p>
<p>Первый этап любого исследования (будь то научная работа, поход в горы или
попытка приготовить что-нибудь вкусненькое на кухне) начинается с обзора
литературы и, подчеркну особенно, с обзора нормативной документации (НД)
(ГОСТ, ТУ, ISO, ASTM, методик, СанПин, Указов, Приказов и т.д.). Крайне
рекомендую провести самостоятельный поиск НД по заданной тематике, я мог не
заметить что-то важное и интересное. Далее приведено сжатое изложение
основных НД по тематике <strong>проектного менеджмента</strong> (что является
<strong>синонимом</strong> проектного управления и прочих дисциплин, описанных в начале
статьи).</p>
<h3 id="2-1">2.1 ГОСТ Р 54869-2011. Проектный менеджмент. Требования к
управлению проектом</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<blockquote>
<p>Настоящий стандарт устанавливает требования к управлению проектом от его старта до завершения, при этом предметом стандартизации являются обязательные выходы процессов управления проектом. Рассказывает о различных понятиях и процессах в проекте, что является целью и выходом каждого процесса в проекте.</p>
</blockquote>
<p>В переводе с эльфийского и в сжатом изложении данный ГОСТ рассматривает структуру проекта и те стадии и данные, которые должны содержаться в каждом из проектов. Основные понятия приведены на рис. 1, а процессы в составе проекта - на рис. 2.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig1.png"
alt="projects management" width="900px"/>
</td>
<td>
<i>
Рис. 1. Основные понятия проектного менеджмента и их взаимосвязь.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig2.png" alt="processes of project" width="900px"/>
</td>
<td>
<i>
Рис. 2. Схема процессов проекта.
</i>
</td>
</tr>
</table>
</div>
<h3 id="2-2">2.2 ГОСТ Р 54870-2011. Проектный менеджмент. Требования к
управлению портфелем проектов</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<blockquote>
<p>Устанавливает требования к управлению портфелем проектов на этапах его формирования и реализации, при этом предметом стандартизации являются выходы процессов управления портфелем проектов. Управление портфелем проектов подразумевает деятельность, направленную на достижение стратегических целей организации путем формирования, оптимизации, мониторинга и контроля, управления изменениями портфеля проектов в условиях определенных ограничений. Управление портфелем проектов обеспечивает связь между уровнем стратегического управления в организации и уровнем управления проектами и программами.</p>
</blockquote>
<p>Ok, Google, опять же, переведя на более понятный язык, получим, что вся стратегия развития компании/стартапа/личности — есть создание, управление и изменения набора проектов. Таким образом стандарт посвящен способам управления портфелем (т.е. набором) проектов. Приводятся некоторые понятия данного процесса (рис. 3).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig3.png" alt="Аналитические методы" width="900px"/>
</td>
<td>
<i>
Рис. 3. Понятия портфеля проектов.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Задание 1</strong>. Составьте схему, аналогичную рис. 3 для вашей дипломной
или курсовой работы.</p>
</blockquote>
<h3 id="2-3">2.3 ГОСТ Р 54871-2011. Проектный менеджмент. Требования к
управлению программой</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<blockquote>
<p>Настоящий стандарт устанавливает требования к управлению программой для обеспечения эффективного достижения целей и реализации выгод программы.</p>
</blockquote>
<p>Таким образом, это по сути способ адаптации ГОСТ №1 для “набора действий” (здесь называется программой). К проектам относится условно и более подробно здесь рассматриваться не будет.</p>
<h3 id="2-4">2.4 ГОСТ Р 56715.1-2015. Проектный менеджмент. Системы
проектного менеджмента. Часть 1. Основные положения</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<blockquote>
<p>Является первым в серии “Проектный менеджмент - Системы проектного менеджмента”, которая состоит из следующих частей:</p>
<ul>
<li>Часть 1: Основные положения;</li>
<li>Часть 2: Процессы и процессная модель (<strong>очень любят на кафедре -
рекомендую прочитать!</strong>);</li>
<li>Часть 3: Методы;</li>
<li>Часть 4: Данные и модель данных;</li>
<li>Часть 5: Термины и определения.</li>
</ul>
</blockquote>
<p>Данная система ГОСТ-ов на мой взгляд наиболее полно описывает понятие проект и проектная деятельность. Так, утверждается, что <em>проекты состоят из уникального набора процессов различных типов</em>. Они (проекты) различаются по целям и конечным результатам, по величине, сложности, необходимому времени выполнения и затратам, по количеству задействованных и заинтересованных лиц. Проекты осуществляются организациями любого размера.</p>
<p>Руководство организации должно определять и документировать свою политику в области проектного менеджмента и все этапы ее реализации. Для этого следует внедрить, поддерживать на должном уровне и постоянно улучшать систему проектного менеджмента организации, а также предоставить все необходимые средства и организационные структуры.</p>
<p>Основной <strong>целью использования</strong> системы проектного менеджмента является успешная реализация проектов. В частности, основные на мой взгляд цели:</p>
<ul>
<li>достижение целей заказчика/клиента;</li>
<li>построение прозрачной структуры проекта (для лучшей интерпретируемости и изучения);</li>
<li>обеспечение эффективной (максимально полной и своевременной) коммуникации между всеми участниками проекта;</li>
<li>определение фаз/этапов реализации проекта (планирование);</li>
<li>мониторинг и оценка рисков;</li>
<li>обеспечение качества;</li>
<li>создание возможности для контроля основных процессов проектного менеджмента;</li>
<li>обеспечение управления изменениями (корректировки планов) при необходимости;</li>
<li>установление профессиональных требований к проектному менеджменту и требований к компетентности персонала;</li>
<li>проведение комплексной оценки процессов единого проекта;</li>
<li>определение связей между проектами в рамках программы или портфеля проектов.</li>
</ul>
<p>В рамках данной НД широко используются модели.</p>
<blockquote>
<p><strong>Задание 2.</strong> Что такое модель? Дайте свое определение.</p>
</blockquote>
<p>Модели строятся в соответствии со специально установленными требованиями. Они должны отражать характерные задачи и процессы, визуализировать взаимосвязи и структуры, необходимые для решения задач. Используемая в настоящем стандарте модель описывает идеализированную систему проектного менеджмента, которая должна корректироваться для каждого конкретного случая применения.</p>
<p>Обозначим <strong>свойства системы</strong> проектного менеджмента по ГОСТ 56715.1-2015:</p>
<ul>
<li><strong>Гибкость</strong>: Система за короткое время может приспосабливаться к новым или
изменившимся условиям.</li>
<li><strong>Универсальность</strong>: Система позволяет максимально разностороннее применение
и использование.</li>
<li><strong>Модульность</strong>: Система строится из подсистем и может разрабатываться и
расширяться модульным образом. При формировании процессов и выборе связующих звеньев создаются возможности для технической поддержки, ускорения и оптимизации процессов.</li>
<li><strong>Совместимость</strong>: Системы, подсистемы и отдельные элементы системы являются
интегрируемыми и совместимыми с внешними системами и частями систем, тем самым создавая возможности для формирования необходимой структуры и возникновения синергетического эффекта.</li>
<li><strong>Прозрачность</strong>: Система делает видимыми процессы и их взаимосвязи.</li>
<li><strong>Превентивность</strong>: Система поддерживает принцип работы “Предупреждение
вместо реагирования”.</li>
</ul>
<p>Таким образом, первый ГОСТ серии 56715 вводит нас в курс дела и обрисовывает общие черты проектного менеджмента.</p>
<h3 id="2-5">2.5 ГОСТ Р 56715.2-2015. Проектный менеджмент. Системы
проектного менеджмента. Часть 2. Процессы и процессная модель</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<blockquote>
<p>Базовый принцип настоящего стандарта заключается в том, что желаемого результата можно достичь эффективнее, если все работы в рамках проекта и относящиеся к ним ресурсы используются и управляются на основе процессного подхода. В настоящем стандарте виды деятельности, необходимые для проектного менеджмента, формируются как процессы и вовлекаются во взаимодействие в их проектной среде. С одной стороны, это облегчает всем участникам проекта ориентацию на результаты в ходе реализации проекта, а с другой стороны, создает хорошую основу для создания кооперационных связей, выходящих за рамки предприятия, и непрерывного совершенствования системы.</p>
</blockquote>
<p>С эльфийского: проект разбивается на процессы, своего рода “диаграмму действий”. При этом различают четыре группы процессов (по уменьшению приоритета):</p>
<ul>
<li>руководства проектами;</li>
<li>проектного менеджмента;</li>
<li>обеспечивающие;</li>
<li>создания продукта проекта (производственные процессы).</li>
</ul>
<p>Ход реализации проекта (жизненный цикл проекта), начиная с инициирования и
заканчивается завершением группы <strong>фаз</strong> - взаимосвязанные отрезки. Настоящий
стандарт различает фазы проекта и группы проектного менеджмента (процессы в каждой фазе). Пример одной фазы приведен на рис. 4. Каждый проект включает несколько фаз (своего рода подпроектов).</p>
<blockquote>
<p><strong>Задание 3.</strong> А теперь вспомним и представим себе рекурсию.</p>
</blockquote>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig4.png" alt="projects phases" width="900px"/>
</td>
<td>
<i>
Рис 4. Графическое представление фаз проекта.
</i>
</td>
</tr>
</table>
</div>
<p>Фазы проекта разделяют жизненный цикл проекта на отрезки (взаимозависимые по
времени) и отражают развитие проекта. В каждой фазе указывают виды работ и
прочие необходимые данные. Разделение на <strong>группы процессов</strong> на уровне
проектного менеджмента опирается на логически взаимосвязанные задачи и
включает: <strong>“Инициирование (I)”, “Определение (D)”, “Планирование (P)”,
“Контроль (S)” и “Завершение (A)”</strong>. Об этом мы более подробно и
человеческим языком поговорим в следующей главе.</p>
<p>Можно обратить внимание, что интерпретация проектного менеджмента в данном
стандарте немного отличается от ГОСТ-ов № 1-3, что говорит о достаточно
вольном и интуитивном понимании в принципе “проектного управления”.</p>
<p>Рассмотрим пример расписанной фазы проекта (<em>табл. 1</em>).</p>
<p><em>Таблица 1. Пример фазы проекта.</em></p>
<div>
<table>
<tr>
<th></th>
<th>Инициирование</th>
<th>Определение</th>
<th>Планирование</th>
<th>Контроль</th>
<th>Завершение</th>
</tr>
<tr>
<td>1 Сроки </td>
<td> </td>
<td> D.1.1 Определение<br> вех проекта (ключевых событий) <br> <br> </td>
<td><br> P.1.1<br> Планирование работ<br> <br> P.1.2<br> Составление календарного плана<br> <br> P.1.3 Составление<br> плана проекта<br> </td>
<td><br> S.1.1<br> Запуск работ<br> <br> S.1.2 Управление<br> сроками <br> <br> </td>
<td><br> <br> </td>
</tr>
<tr>
<td><br> 2 Изменения<br> <br> </td>
<td><br> <br> </td>
<td><br> <br> </td>
<td><br> P.2.1 Планирование<br> методов работы с изменениями<br> </td>
<td><br> S.2.1 Управление<br> изменениями <br> <br> </td>
<td><br> <br> </td>
</tr>
<tr>
<td><br> 3<br> Информация/<br> коммуникация/<br> документация<br> <br> </td>
<td><br> I.3.1 Выдача<br> разрешения <br> <br> </td>
<td><br> D.3.1<br> Определение информации, коммуникации<br> и отчетности<br> <br> D.3.2<br> Определение маркетинга проекта<br> <br> D.3.3 Выдача<br> разрешения<br> </td>
<td><br> P.3.1<br> Планирование информации, коммуникации,<br> отчетности и документации<br> <br> P.3.2 Выдача<br> разрешения <br> <br> </td>
<td><br> S.3.1<br> Управление информацией, коммуникацией,<br> отчетностью и документацией<br> <br> S.3.2 Приемка<br> <br> </td>
<td><br> A.3.1<br> Составление заключительного отчета<br> по проекту<br> <br> A.3.2 Создание<br> архива проектной документации <br> <br> </td>
</tr>
<tr>
<td><br> 4 Затраты и<br> финансы <br> <br> </td>
<td><br> <br> </td>
<td><br> D.4.1 Грубая<br> (приближенная) оценка затрат <br> <br> </td>
<td><br> P.4.1 Составление<br> плана затрат и финансовых средств<br> </td>
<td><br> S.4.1 Управление<br> затратами и финансовыми средствами <br> <br> </td>
<td><br> A.4.1 Составление<br> калькуляции фактических издержек <br> <br> </td>
</tr>
<tr>
<td><br> 5 Организация<br> <br> </td>
<td><br> I.5.1<br> Назначение ответственных<br> <br> I.5.2 Выбор<br> процессов проектного менеджмента <br> <br> </td>
<td><br> D.5.1 Формирование<br> команды управления проектом <br> <br> </td>
<td><br> P.5.1 Планирование<br> организации работы над проектом <br> <br> </td>
<td><br> S.5.1<br> Проведение стартового совещания<br> <br> S.5.2<br> Создание команды проекта<br> <br> S.5.3 Развитие<br> команды проекта<br> </td>
<td><br> A.5.1<br> Проведение заключительного совещания<br> <br> A.5.2<br> Оценка достижений<br> <br> A.5.3 Роспуск<br> проектной организации<br> </td>
</tr>
<tr>
<td><br> 6 Качество<br> <br> </td>
<td><br> <br> </td>
<td><br> D.6.1 Определение<br> критериев успеха <br> <br> </td>
<td><br> Р.6.1 Планирование<br> обеспечения качества<br> </td>
<td><br> S.6.1 Обеспечение<br> качества <br> <br> </td>
<td><br> A.6.1 Обобщение<br> опыта проекта <br> <br> </td>
</tr>
<tr>
<td><br> 7 Ресурсы<br> <br> </td>
<td><br> <br> </td>
<td><br> <br> </td>
<td><br> P.7.1 Составление<br> ресурсного плана<br> </td>
<td><br> S.7.1 Управление<br> ресурсами <br> <br> </td>
<td><br> A.7.1 Освобождение<br> ресурсов <br> <br> </td>
</tr>
<tr>
<td><br> 8 Риск <br> <br> </td>
<td><br> <br> </td>
<td><br> D.8.1<br> Определение методов работы с рисками<br> <br> D.8.2<br> Анализ окружения проекта/<br> заинтересованных<br> лиц<br> <br> D.8.3 Оценка<br> реализуемости<br> </td>
<td><br> Р.8.1<br> Анализ<br> рисков<br> <br> Р.8.2 Планирование<br> реагирования на риски <br> <br> </td>
<td><br> S.8.1 Управление<br> рисками <br> <br> </td>
<td><br> <br> </td>
</tr>
<tr>
<td><br> 9 Структура<br> проекта <br> <br> </td>
<td><br> <br> </td>
<td><br> D.9.1 Составление<br> укрупненной структуры <br> <br> </td>
<td><br> Р.9.1<br> Разработка структуры декомпозиции<br> работ<br> <br> P.9.2<br> Описание пакетов работ<br> <br> P.9.3 Описание<br> работ<br> </td>
<td><br> <br> </td>
<td><br> <br> </td>
</tr>
<tr>
<td><br> 10 Договора и<br> дополнительные требования <br> <br> </td>
<td><br> <br> </td>
<td><br> D.10.1<br> Определение методов работы с договорами<br> <br> D.10.2 Определение<br> содержания договора с заказчиком<br> </td>
<td><br> P.10.1 Определение<br> содержания договоров с поставщиками<br> <br> <br> </td>
<td><br> S.10.1<br> Реализация договоров с клиентами и<br> поставщиками<br> <br> S.10.2 Управление<br> дополнительными требованиями <br> <br> </td>
<td><br> A.10.1 Окончание<br> договоров <br> <br> </td>
</tr>
<tr>
<td><br> 11 Цели и<br> содержание <br> <br> </td>
<td><br> I.11.1 Первоначальное<br> определение целей <br> <br> </td>
<td><br> D.11.1<br> Определение целей<br> <br> D.11.2 Определение<br> содержания проекта<br> </td>
<td><br> <br> </td>
<td><br> S.11.1 Управление<br> целями и содержанием <br> <br> </td>
<td><br> <br> </td>
</tr>
</table>
</div>
<p>Примеры диаграмм процессов проектного менеджмента приведены на <em>рис. 5</em> и <em>рис. 6</em> (извиняюсь за качество, буду искать более читабельные варианты. А на данном этапе лучше заглянуть в ГОСТ).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig5.png" alt="Проектный менеджмент" width="900px"/>
</td>
<td>
<i>
Рис. 5. Диаграммы процессов одной стадии в одной фазе.
</i>
</td>
</tr>
</table>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig6.png" alt="Проектный менеджмент" width="900px"/>
</td>
<td>
<i>
Рис. 6. Диаграммы процессов одной стадии в одной фазе. Более сложный случай.
</i>
</td>
</tr>
</table>
</div>
<p>На этом краткий обзор этого ГОСТ-а можно закончить. Еще раз отмечу -
процессные модели очень любят на кафедре и всегда требуют на защитах
дипломных работ. Поэтому крайне рекомендую ознакомиться с ГОСТ-ом и
попрактиковаться в декомпозиции различных процессов на такие диаграммы.</p>
<h3 id="2-6">2.6 ГОСТ Р 56715.3-2015. Проектный менеджмент. Системы
проектного менеджмента. Часть 3. Методы</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<blockquote>
<p>Настоящий стандарт определяет основные методы, используемые в системах управления проектами.</p>
</blockquote>
<p>В стандарте описываются некоторые метрики (параметры) для сравнения различных стратегий ведения проектов. Рассмотрим некоторые из них подробнее.</p>
<p><strong>1.6.1 Оценка затрат</strong> - используется для прогнозирования того, какие ресурсы (персонал, финансы и т.д.) и в каком объеме необходимы для реализации проекта (<em>табл. 2</em>).</p>
<p><em>Таблица 2. Оценка затрат</em></p>
<div>
<table>
<tr>
<th>Метод</th>
<th>Характеристика</th>
</tr>
<tr>
<td>Экспертная оценка</td>
<td>Оценка проводится одним экспертом или группой экспертов</td>
</tr>
<tr>
<td>Дельфийский метод</td>
<td>(Экспертная) оценка систематизируется путем структурированного многопрофильного опроса</td>
</tr>
<tr>
<td>Метод трех точек</td>
<td>(Экспертная) оценка дополняется оценкой оптимистического, реалистического и пессимистического пути. <br>Сумма оценки определяется как среднее значение вышеуказанных значений, причем реалистическая оценка имеет больший вес, как правило, в четыре раза.</td>
</tr>
<tr>
<td>Совещательная оценка</td>
<td>(Экспертная) оценка проводится в форме коллективного, т.е. не анонимного многопрофильного опроса экспертов.Этапами совещательной оценки являются:<br>
1) Выбор экспертов, которые будут проводить оценку.<br>
2) Предоставление экспертам информации.<br>
3) (Предварительная) оценка затрат экспертами.<br>
4) Общее обсуждение результатов оценки, в частности отклонений (внимание также уделяется предпосылкам и допущениям).<br>
5) Определение поддерживаемого всеми результата оценки, а также общих предпосылок.
</td>
</tr>
<tr>
<td>Сравнение проектов (по аналогам)</td>
<td>Затраты проектов определяются с помощью актуальных требований расчетным путем из данных опыта<br> аналогичных проектов. </td>
</tr>
</table>
</div>
<p><strong>1.6.2 контроль проектов</strong>. Используются, главным образом, для двух <strong>целей: контроля и управления изменениями</strong>. Другими словами они служат для целей сравнения “запланированного” с “реальным”, с тем, чтобы потом можно было отследить изменения проекта.</p>
<p>Форма и методы контроля зависят от размера и сложности проекта и должны соответствовать внутренним регламентам и стандартам организации. В ГОСТ приведены некоторые методы контроля.</p>
<p><strong>Анализ по методу освоенного объема (EVA) (Earned Value Analysis)</strong>. Включает совместный анализ таких показателей как расходы, временные затраты и полученные результаты (результативность). Анализ проводится для определенного объекта (например проект, фаза проекта, пакет рабочих заданий) на определенную дату. Для расчета необходимы плановые и фактические показатели и, если есть, оценка объема оставшихся затрат. На основе EVA можно сделать прогнозы в отношении ожидаемых издержек, а также определить срок завершения проекта. Кроме того, EVA имеет ряд важных для проекта показателей, таких как, CPI или SPI, которые также могут быть использованы в качестве показателей системы раннего предупреждения (<em>табл. 3</em>).</p>
<p><em>Таблица 3. Наиболее важные международные сокращения и показатели с примером расчета</em></p>
<div>
<table>
<tr>
<th>Acronym </th>
<th>Name <br>(Calculation) </th>
<th>Название<br>(формула расчета)</th>
</tr>
<tr>
<td>ВАС </td>
<td>Budget at Completion</td>
<td>Бюджет по завершении (окончательная смета проекта)</td>
</tr>
<tr>
<td>DD </td>
<td>Data Date = Time now = As-of Date</td>
<td>Отчетная дата = Текущая дата = По состоянию на</td>
</tr>
<tr>
<td>PC</td>
<td>Percent(age) Complete</td>
<td>Процент выполнения (на день составления)</td>
</tr>
<tr>
<td>РСТ </td>
<td>Process Degree</td>
<td>Степень завершенности процесса<br>Степень готовности по плану (на день составления)</td>
</tr>
<tr>
<td>PV</td>
<td>Planned Value</td>
<td>Плановое значение (на день составления) </td>
</tr>
<tr>
<td>BCWS</td>
<td>Budget Cost of Work Scheduled </td>
<td>Плановая стоимость запланированных работ </td>
</tr>
<tr>
<td>АС</td>
<td>Actual Cost </td>
<td>Фактические затраты (на день составления)</td>
</tr>
<tr>
<td>ACWP</td>
<td>Actual Cost of Work Performed</td>
<td>Фактическая стоимость выполненных работs </td>
</tr>
<tr>
<td>EV</td>
<td>Earned Value<br>=ВАС * PC</td>
<td>Освоенный объем (на день составления) </td>
</tr>
<tr>
<td>BCWP</td>
<td>=Budget Cost of Work Performed</td>
<td>Плановая стоимость выполненных работ</td>
</tr>
<tr>
<td>API</td>
<td>Actual Performance Index<br>=ACWP/BCWS=AC/PV</td>
<td>Фактический показатель деятельности (показатель издержек производства)</td>
</tr>
<tr>
<td>CPI </td>
<td>Cost Performance lndex<br>=BCWP/ACWP=EV/AC</td>
<td>Индекс освоения затрат</td>
</tr>
<tr>
<td>SPI</td>
<td>Schedule Performance Index<br>=BCWP/BCWS =EV/PV</td>
<td>Индекс выполнения сроков</td>
</tr>
<tr>
<td>CV</td>
<td>Cost Variance<br>=BCWP-ACWP =EV-AC</td>
<td>Отклонение затрат = Сравнение заданных и фактических значений</td>
</tr>
<tr>
<td>CV%</td>
<td>Cost Variance Percentage<br>=CV/BCWP * 100=CV/EV * 100</td>
<td>Отклонение затрат в процентах</td>
</tr>
<tr>
<td>SV</td>
<td>Schedule Variance<br>=BCWP-BCWS=EV-PV</td>
<td>Отклонение от плана (несоответствие календарному графику) = Сравнение заданных и плановых значений </td>
</tr>
<tr>
<td>SV%</td>
<td>Schedule Variance Percentage<br>=SV/BCWS * 100=SV/PV * 100</td>
<td>Отклонение от плана (несоответствие календарному графику) в процентах</td>
</tr>
<tr>
<td>EAC</td>
<td>Estimated Cost at Completion (Kosten)<br>=ВАС/CPI</td>
<td>Предположительные затраты по завершении проекта <br> (Линейный прогноз) ВАС * AC/EV=<br>(Аддитивный прогноз) АС+ВАС-EV=<br>(Первоначальный план) ВАС=</td>
</tr>
<tr>
<td>РАС</td>
<td>Projection at Completion (Zeit)<br>=Planned Duration/SPI<br>=((ВАС/SPI)-ВАС)/(Среднее значение BCWS/единица времени)</td>
<td>Прогноз (перспективная оценка) по завершении проектаs</td>
</tr>
<tr>
<td>VAC</td>
<td>Variance at Completion<br>=ВАС-EAC</td>
<td>Прогнозное отклонение стоимости проекта (отклонение общих затрат по завершении проекта)</td>
</tr>
<tr>
<td>VAC%</td>
<td>Variance at Completion Percentage<br>=VAC/ВАС * 100</td>
<td>Прогнозное отклонение стоимости проекта в процентах (отклонение общих затрат по завершении проекта в процентах)</td>
</tr>
</table>
</div>
<p>Степень готовности проекта определяется на день составления (конкретный срок) (PC на основе EVA) путем сравнения заданного и фактического состояния и указывается в процентах (%). При этом степень готовности может определяться для различных задач (например проект, детальный проект, пакет рабочих заданий) и при необходимости указываться нарастающим итогом.</p>
<p><strong>1.6.3 Сравнение проектов (анализ по аналогам)</strong></p>
<p>Служит для прогнозирования данных новых проектов, например, для оценки затрат на основе оценки опыта реализации завершенных проектов и сравнении параметров проектов.</p>
<p>Данные о завершенных проектах должны собираться и классифицироваться заранее (архив, база знаний). Необходимо использовать данные о не менее чем 10-30 проектах. Если проекты очень похожи, будет достаточно меньшего количества аналогичных проектов.</p>
<p>Оценка опытных данных при сравнении проектов происходит путем параметрического расчета, определения средних значений или путем выводов по аналогии между отдельными проектами.</p>
<p>Параметрический расчет устанавливает связь между целевыми показателями проектов, например, затратами и продолжительностью проекта, и другими параметрами, например составом работ и достигнутыми результатами. Процесс расчета с помощью специальных или общих программных средств (приложений) по статистическому анализу показывает количественную среднюю взаимосвязь между целевыми показателями и параметрами.</p>
<p>Эта взаимосвязь или определенные средние значения и аналогии позволяют осуществить прогнозы в отношении новых отдельных параметров и оценку завершенных проектов по отдельным целевым признакам (частичное сравнение). Для общего прогноза или общей оценки реализации проекта результаты отдельных частичных сравнений могут объединяться (полное сравнение).</p>
<p><strong>1.6.4 Формирование структуры проекта</strong></p>
<p>Проекты, как правило, отличаются высокой сложностью. Они включают в себя множество взаимосвязанных задач, которые часто трудно спрогнозировать полностью.</p>
<p>Структурирование проекта служит для наглядного представления совокупности всех задач проекта с соответствующими зависимостями и оказывает поддержку процессам планирования и контроля благодаря рациональному структурированию.</p>
<ol>
<li>
<p>Метод деления на составляющие (сверху вниз). Начинают с первого уровня, который представляет собой название проекта. Потом проект по определенному критерию делится на различные части. Они образуют второй уровень. Структурный план проекта будет готов, когда все части проекта будут разделены на пакеты работ.</p>
</li>
<li>
<p>Метод обобщения (снизу вверх). Пакеты работ одного проекта разрабатываются на основании предыдущего опыта и с применением соответствующих методов доработки. Структура работ проекта может строиться с использованием нескольких подходов к разбиению на составляющие (декомпозиции). Различают три вида структурных планов проекта:</p>
<ul>
<li>структурный план проекта, ориентированный на объект (определение пакетов работ сводится к (технической) структуре объекта);</li>
<li>структурный план проекта, ориентированный на функции (пакеты работ разделяются по различным функциям (например, сбыт, разработка, испытание, изготовление));</li>
<li>структурный план проекта, ориентированный на фазы и ход реализации проекта (классификация задач ориентируется на модель фаз жизненного цикла (например, проектирование, разработка, реализация, приемка)).</li>
</ul>
</li>
</ol>
<h3 id="2-7">2.7 ГОСТ Р 56715.4-2015. Проектный менеджмент. Системы
проектного менеджмента. Часть 4. Данные и модель данных</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<blockquote>
<p>Представленная в настоящем стандарте модель данных описывает на профессиональном уровне элементарные структуры данных проектного менеджмента. Модель данных можно использовать для:</p>
<ul>
<li>архивирования данных проектного менеджмента;</li>
<li>обмена данными проектного менеджмента между организациями и различными системами программного обеспечения;</li>
<li>спецификации требований к программному обеспечению проектного менеджмента (в качестве исходных данных).</li>
</ul>
</blockquote>
<p>Формат сохранения данных как правило <code>xml</code>. Элементы данных называются
существительными и всегда используется в единственном числе. Элементы данных могут называться также двумя существительными, при этом, если возможно, для определения иерархии понятий используется позиция (порядок следования) существительного. Так, существует, например, иерархическое отношение между элементами данных Initiative (объект управления) и InitiativeGroup (группа объектов управления). Это отношение можно определить только по одному названию элементов. Для лучшего понимания присвоение имени из нескольких существительных происходит с использованием дефисов.</p>
<p>Таким образом данный стандарт устанавливает структуру данных при хранении и архивации проекта. Данная структура утверждена и является стандартизированной, что довольно удобно. Рекомендую полностью ознакомиться с ГОСТ, если вы чувствуете, что это необходимо и хотите потренировать английский язык, поскольку в нем приведены переводы основных величин.</p>
<blockquote>
<p>Добавлю от себя, что сейчас очень часто прибегают к формату <code>json</code> для
передачи данных, а хранят их в табличном виде в специальных базах данных
(например Oracle или PostgreSQL). Но это требует больших “технических
ресурсов” и используется в основном в ИТ-проектах.</p>
</blockquote>
<h3 id="2-8">2.8 ГОСТ Р 56715.5-2015. Проектный менеджмент. Системы
проектного менеджмента. Часть 5. Термины и определения</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Является по сути словарем терминов.</p>
<blockquote>
<p><strong>Задание 4.</strong> Ознакомиться с терминами и выписать 10 наиболее значимых на ваш взгляд.</p>
</blockquote>
<h3 id="2-9">2.9 ГОСТ Р ИСО 21500-2014. Руководство по проектному
менеджменту</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<blockquote>
<p>Настоящий стандарт содержит общие рекомендации, основные понятия и характеристики процессов проектного менеджмента, которые важны для выполнения проектов и влияют на их результаты</p>
</blockquote>
<p>По сути представляет собой обобщение ГОСТ-ов с № 4-8. Однако с точки зрения
полноты изложения и даты выпуска я рекомендую использовать именно предыдцщие
стандарты.</p>
<p>Подводя итог. В целом данные стандарты, да и вся дисциплина призвана навести
порядок в голове <em>%username%</em>. Так что если вы испытываете сложность с
планированием и донесением своих планов до окружающих, можно попробовать
изучить данную НД. Но даже если все в порядке, можно использовать ссылку на
ГОСТ при рабочем споре — это может сильно упростить жизнь. Так что важно
представлять, о чем же все-таки говорят данные стандарты, и уметь
использовать данные понятия. А значит мы продолжаем и переходим к следующей
части, которая призвана немного упростить нам жизнь.</p>
<h2 id="3">3. Упрощение жизни по проектной деятельности</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Далее попробую предоставить вам более понятное изложение о том, как
надо работать с проектами. </p>
<p>Данная информация сейчас очень актуальна при работе в больших компаниях. В
частности на “ФосАгро”, в которой я работал довольно долгое время (АО
“НИУИФ”). В данной корпорации широко практиковались и я думаю практикуются
различные тренинги по развитию и управлению проектами. Попробую поделиться
тем, что я освоил в процессе своей работы и что потом отшлифовал при
многократной защите и выполнении своих проектов (как внутри ФосАгро в АО
“НИУИФ”, так и при участии в различных конкурсах и акселераторах).</p>
<h3 id="3-1">3.1 Что такое проект и его особенности</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Итак, <strong>проект</strong> по ISO 21500 - это “уникальный набор процессов, состоящих
из скоординированных и управляемых задач с начальной и конечной датами,
предпринятых для достижения цели”. Думаю стоит сказать немного понятнее: это
ограниченная во времени деятельность, результатом которой являются <strong>новые и
уникальные продукты, услуги и результаты</strong>. Этим проект принципиально
отличается от операционной деятельности или процесса. Отличать их важно! Для
этого существует набор параметров, которые мы разберем далее. Отмечу, что для меня лично, ключевым из этих параметров является <strong>вероятность (статистика)
успеха</strong> - процесс всегда сопряжен с большими рисками, но и несет большую
выгоду.</p>
<div>
<table>
<tr>
<th>Процесс (операционная деятельность)</th>
<th>Проект</th>
</tr>
<tr>
<td>
<ul>
<li>привычные результаты</li>
<li>устоявшиеся бизнес-процессы</li>
<li>отсутствие существенных рисков</li>
<li>относительно постоянная команда (штат)</li>
</ul>
</td>
<td>
<ul>
<li>уникальные результаты</li>
<li>ограниченный срок (конечность))</li>
<li>множество рисков</li>
<li>гибкая команда проекта</li>
</ul>
</td>
</tr>
</table>
</div>
<p>Виды проектов для компании:</p>
<ol>
<li>Экономический (цель - деньги)</li>
<li>Социальный (цель - люди)</li>
</ol>
<p>Основные признаки проекта:</p>
<ul>
<li>Наличие цели (составляется по специальным параметрам, об этом далее).</li>
<li>Наличие изменения некоторой системы (операционной деятельности).</li>
<li>Ограниченность во времени (всегда есть начало и конец проекта).</li>
<li>Неповторимость (уникальность по совокупности стадий).</li>
<li>Ограниченность требуемых ресурсов (есть спецификация и график потребления ресурсов).</li>
<li>Специфическая организация.</li>
</ul>
<blockquote>
<p><strong>Задание 5.</strong> Подумайте, что из перечисленного относится к проекту и какому (социальному или экономическому): постройка жилого дома, выпуск новой продукции на заводе, эксплуатация электростанции, получение образования, вождение машины, семейная жизнь, руководство отделом, ремонт помещения.</p>
<p><strong>Задание 6.</strong> Опишите свой опыт работы с проектом. Если не было - придумайте)</p>
</blockquote>
<p>Причины возникновения проекта:</p>
<ul>
<li>возможность</li>
<li>проблемам</li>
</ul>
<p>Важно различать данные причины, от них зависит обоснование и разработка проекта. Особое внимание необходимо уделять: <strong>срокам, бюджету и качеству</strong> (как говорят, выберите любые 2, но наша цель - учесть все 3).</p>
<p>Наиболее частые причины провала проекта:</p>
<ul>
<li>несоответствующие ресурсы;</li>
<li>неверные контрольные сроки;</li>
<li>слабые коммуникации;</li>
<li>недостаток внимания и проработки стадий проекта;</li>
<li>недостаточное финансирование;</li>
<li>недостаток инструментов управления;</li>
<li>недостаточная вовлеченность руководства проекта.</li>
</ul>
<p>Проект успешен тогда и только тогда, когда он <strong>завершен</strong>:</p>
<ul>
<li>в установленные сроки;</li>
<li>в рамках бюджета;</li>
<li>с удовлетворительным результатом (по цели и задачам);</li>
</ul>
<h3 id="3-2">3.2 Фазы и процессы в проекте</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Вся структура проекта, включая деление на фазы и процессы, необходима для
управления следующими его конечными свойствами:</p>
<ol>
<li>Интеграцией - в программу или глобальный процесс (первичная работа по разработке проекта: устав, описание, план управления проектом, мониторинг).</li>
<li>Содержанием - включение всех необходимых работ в проект (планирование содержания, структуры работ, управление изменениями содержания).</li>
<li>Сроками - завершение вовремя (расписание; длительность, состав и взаимодействие между операциями).</li>
<li>Стоимостью - уложиться в бюджет.</li>
<li>Качеством - проект удовлетворял потребностям, для которых он создан (обеспечение и контроль качества, политики, цели и распределение ответственности).</li>
<li>Человеческими ресурсами - организация и управление командой.</li>
<li>Коммуникациями - подготовка, сбор, распределение, хранение, выборка и конечное размещение информации.</li>
<li>Рисками - анализ, реагирование, мониторинг управление рисками для повышения вероятности успеха.</li>
</ol>
<p><strong>Фазы проекта</strong> - это крупные блоки (считай содержание), которые стандартные бля любого проекта. Более формально - это совокупность логически связанных работ, выполнение которых приводит к получению конкретного результата по проекту.</p>
<p><strong>Жизненный цикл проекта</strong> - набор последовательных фаз проекта. При этом
содержание внутри фазы часто может зависеть от самого проекта и необходимого
контроля.</p>
<p><strong>Результат</strong> - измеримый, осязаемый и поддающийся контролю выход для проекта
(т.е. количественный). Часто используется в более узком смысле, как нечто,
требующее утверждение спонсором проекта или заказчиком.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig7.png" alt="Фазы проекта" width="900px"/>
</td>
<td>
<i>
Рис. 7. Уровень усилий и влияния на проект с учетом основных фаз (для упрощения фазы исполнения и контроля объединены).
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Задание 7.</strong> Вспомните, какой ГОСТ описывает фазы проекта?</p>
</blockquote>
<p>Далее давайте разберем каждую из фаз подробнее.</p>
<p><strong>3.2.1 Начальная фаза (инициализация)</strong> проекта.</p>
<ul>
<li>сбор исходных данных и анализ текущего состояния (обзор литературы) для выявления потребности в изменениях;</li>
<li>
<p>определение проекта:</p>
<ul>
<li>цели, задачи, результаты;</li>
<li>основные требования, ограничения и критерии;</li>
<li>уровень риска;</li>
<li>окружение проекта, потенциальные участники (важно, рассмотрим подробнее далее);</li>
<li>время, ресурсы, средства и т.д.</li>
<li>определение и сравнение альтернатив проекту;</li>
<li>утверждение концепции и получения одобрения для следующей фазы.</li>
</ul>
</li>
</ul>
<p>Результат - санкционирование начала проекта (если заказчик его утвердит) и
составление <strong>резюме проекта</strong> - отдельный документ, похожий на дипломную
работу где более развернуто описан проект с указанием фаз и действий внутри фаз.</p>
<p>Ниже приведен небольшой пример-описание начальной фазы и на какие вопросы
она должна отвечать.</p>
<div>
<table>
<tr>
<th>Пункт</th>
<th>Требования</th>
</tr>
<tr>
<td>Название</td>
<td>Интересное, интригующее, отвечающее содержанию</td>
</tr>
<tr>
<td>Актуальность<br>(Зачем, что хотим?)</td>
<td>Решение проблемы (в операционной деятельности) или реализация потенциала: <br>- почему необходимо реализовать проект?<br>- почему эта возможность важная и приоритетная?<br>Ключевая задача: описать, оцифровать (сделать измеримым), визуализировать.<br></td>
</tr>
<tr>
<td>Цель</td>
<td>Насколько решит или снизит проблемы (подробнее - далее). </td>
</tr>
<tr>
<td>Результат реализации</td>
<td>Какое конкретное улучшение/изменение получит спонсор/заказчик.</td>
</tr>
<tr>
<td>Этапы</td>
<td>Технология реализации проекта (важно!) - краткий план конкретных действий и <br>промежуточные ожидаемые результаты.</td>
</tr>
<tr>
<td>Заказчик</td>
<td>Кто вкладывает ресурсы.<br></td>
</tr>
<tr>
<td>Пользователи</td>
<td>Аудитория, на которую проект окажет влияние.</td>
</tr>
<tr>
<td>Команда</td>
<td>Исполнители (как внутренние, так и внешние) - прописывать максимально конкретно, <br>вплоть до должностей и ФИО.</td>
</tr>
<tr>
<td>Сроки</td>
<td>Разработки и реализации от момента согласования до завершающей стадии в месяцах. <br>Если проект длительный - указывать промежуточные сроки, применительно к этапам.</td>
</tr>
<tr>
<td>Бюджет (предполагаемый)</td>
<td>Стоимость и количество инвестиций и предполагаемый экономический эффект<br>(т.е. срок, когда инвестиции начнут окупаться).</td>
</tr>
</table>
</div>
<blockquote>
<p><em>Примечание</em>. Важно всегда получать информацию (хотя бы экспертную оценку) по тематике проекта.</p>
<p><em>Примечание</em>. Если проект направлен на решение проблемы - всегда подразумевается оценка и данные. Особенно когда есть оценочные прилагательные (больше, меньше и т.д.) - нужны данные.</p>
</blockquote>
<p><strong>Цель проекта</strong> - наиболее важный пункт во всей проектной деятельности, по
сути - название вашей работы. Она должна удовлетворять SMART идеологии!</p>
<div>
<table>
<tr>
<th>S<br></th>
<th>Конкретная</th>
<th>Дает ли однозначное представление о том, что должно быть достигнуто?</th>
</tr>
<tr>
<td>M</td>
<td>Измеримая</td>
<td>Имеются ли количественные или качественные критерии достижения?</td>
</tr>
<tr>
<td>A</td>
<td>Достижимая</td>
<td>Насколько реальная с точки зрения объективных условий и возможностей?</td>
</tr>
<tr>
<td>R</td>
<td>Согласованная</td>
<td>Как связана с другими целями?</td>
</tr>
<tr>
<td>T</td>
<td>Ограниченная по времени</td>
<td>К какому сроку цель должна быть достигнута?</td>
</tr>
</table>
</div>
<p>Примеры:</p>
<div>
<table>
<tr>
<th>SMART цели</th>
<th>Не цели</th>
</tr>
<tr>
<td><br>- снизить уровень текучести персонала до 10 % к началу второго квартала 2016 года.<br>- обеспечить месячный товарооборот в размере 5 млн. рублей к 1 мая 2020 года.<br>- занять второе место на региональном конкурсе "1-2-3" в этом году.<br></td>
<td><br>- работать лучше.<br>- поучаствовать в конкурсе.<br>- мотивировать персонал.<br>- работать по плану.<br></td>
</tr>
</table>
</div>
<p><strong>Участники проекта</strong></p>
<p>Еще раз повторюсь - нужно максимально конкретизировать любую информацию в проекте - в том числе и все участников, вплоть до отдела, должности и ФИО.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig8.png" alt="Участники проекта" width="900px"/>
</td>
<td>
<i>
Рис. 8. Взаимодействие между участниками проекта. Пунктирные линии означают, что 2 участника могут быть одним и тем же лицом (а могут и не быть).
</i>
</td>
</tr>
</table>
</div>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-88nc{font-weight:bold;border-color:inherit;text-align:center}
.tg .tg-xldj{border-color:inherit;text-align:left}
.tg .tg-0pky{border-color:inherit;text-align:left;vertical-align:top}
</style>
<table class="tg">
<tr>
<th class="tg-88nc">Роль</th>
<th class="tg-88nc">Описание</th>
</tr>
<tr>
<td class="tg-xldj">Инициатор</td>
<td class="tg-xldj">Автор идеи или основная заинтересованная сторона</td>
</tr>
<tr>
<td class="tg-0pky">Заказчик</td>
<td class="tg-0pky">Принятие решения об открытие проекта, мониторинг реализации, выделение бюджета,<br>ключевые решения по проблемам (не входящим в сферу полномочий Куратора и Руководителя проекта), <br>утверждение итогового отчета и принятие решения о закрытии.</td>
</tr>
<tr>
<td class="tg-0pky">Спонсор</td>
<td class="tg-0pky">Обеспечивает проект ресурсами. Может быть и заказчиком.</td>
</tr>
<tr>
<td class="tg-0pky">Выгодоприобретатель</td>
<td class="tg-0pky">Отвечает за контроль качества и принятие результатов проекта, дальнейшее использование результатов проекта.</td>
</tr>
<tr>
<td class="tg-0pky">Консультант (куратор = внутренний <br>консультант, эксперты)</td>
<td class="tg-0pky">Отвечает за инициирование, мониторинг и контроль реализации. Участвует в согласовании ключевых событий <br>проекта и формирует итоговое заключение.<br></td>
</tr>
<tr>
<td class="tg-0pky">Руководитель</td>
<td class="tg-0pky">Отвечает за достижение целей проекта, результативное и экономически эффективное использование ресурсов проекта.</td>
</tr>
<tr>
<td class="tg-0pky">Участник проектной <br>команды</td>
<td class="tg-0pky">Отвечают за исполнение поручений Руководителя</td>
</tr>
<tr>
<td class="tg-0pky">Заинтересованные лица</td>
<td class="tg-0pky">Лица, попадающие в зону интереса проекта (не всегда выгодопреобретатели, эффект м.б. и негативным). </td>
</tr>
</table>
</div>
<p>Отмечу, что полезно бывает проанализировать все заинтересованные стороны (stakeholder) с точки зрения матрицы влияния на проект.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig9.png" alt="Матрица влияния" width="900px"/>
</td>
<td>
<i>
Рис. 9. Матрица влияния на проект.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Задание 8</strong>. Проведите оценку того, как участники A-E влияют на проект, как бы Вы построили взаимодействие с данными людьми?</p>
</blockquote>
<p><strong>3.2.2. Фаза разработки</strong> - уже относится не просто к описанию проекта, но
к планированию деятельности (набор команды, определение ролей,
взаимодействие с командой и заказчиком и т.п.)</p>
<ul>
<li>назначение руководителя, формирование команды и ответственных;</li>
<li>установление контактов и изучение целей, мотивации и требования заказчика/спонсора и др. ключевых участников;</li>
<li>
<p>развитие концепции и разработка основного содержания:</p>
<ul>
<li>конечный результат;</li>
<li>стандарты качества;</li>
<li>структура;</li>
<li>основные работы;</li>
<li>ресурсы.</li>
</ul>
</li>
<li>
<p>планирование:</p>
<ul>
<li>разложение на простые стадии (декомпозиция);</li>
<li>календарные планы;</li>
<li>смета и бюджет;</li>
<li>потребность в ресурсах;</li>
<li>техника контроля;</li>
<li>определение и распределение рисков.</li>
</ul>
</li>
<li>
<p>организация/проведение торгов и заключение контрактов;</p>
</li>
<li>представление и выполнение базовых проектных и конструкторских работ;</li>
<li>получение одобрения на следующий шаг.</li>
</ul>
<p><strong>Управление содержанием проекта</strong> (как один из элементов фазы разработки):</p>
<ul>
<li>Планирование содержания.</li>
<li>Определение содержания (подробное описание).</li>
<li>Создание иерархической структуры работ (<strong>ИСР</strong>).</li>
<li>Подтверждение содержания (формализация и утверждение - документирование).</li>
<li>Управление изменениями содержания.</li>
</ul>
<p><strong>План проекта</strong> - формальный и утвержденный документ, который может быть использован для управления исполнением проекта (может корректироваться в процессе). Состав:</p>
<ul>
<li>Основание для выполнения проекта.</li>
<li>Описание подхода к управлению проектом.</li>
<li>Констатация целей.</li>
<li>ИСР.</li>
<li>Оценка стоимости и плановых дат (включая методы оценки).</li>
<li>Распределение ответственных (до уровня ИСР).</li>
<li>Основные контрольные события и их даты.</li>
<li>Ключевой и необходимый персонал.</li>
<li>Основные риски и плановая реакция на наступление каждого.</li>
<li>Планы управления составляющими проекта (целями, ресурсами, контрактами, рисками, взаимодействием, персоналом).</li>
<li>Открытые вопросы и отложенные решения.</li>
</ul>
<p><strong>Дополнительная информация плана проекта</strong>:</p>
<ul>
<li>Ограничения и допущения.</li>
<li>Техническая документация (требования, спецификации, проектная документация).</li>
<li>Используемые стандарты и нормативы.</li>
</ul>
<blockquote>
<p><strong>Примечание.</strong> Отличной идеей будет повесить план проекта на самое видное
для команды место (на холодильник например) и постоянно напоминать о его
существовании.</p>
</blockquote>
<p>Остановимся подробнее на <strong>иерархической структуре работ (ИСР)</strong> проекта (Work Breakdown Structure (WBS)). Это некое дерево (или диаграмма), которое
представляет собой деление проекта на естественные элементы с целью
обеспечения контроля и управления.</p>
<p>Правила построения ИСР:</p>
<ol>
<li>Работы нижнего уровня являются способом достижения работ верхнего.</li>
<li>Для каждой дочерней работы может быть только одна родительская.</li>
<li>На каждом уровне работы должны быть равнозначны (например, по объему и времени выполнения и т.д.).</li>
<li>На различных уровнях можно и нужно применять различные критерии
декомпозиции (<strong>важное отличие от обычной классификации! при которой мы
используем деление по некому “физическому” или прочему смыслу</strong>)</li>
</ol>
<p>Декомпозиция прекращается, если для уровня:</p>
<ul>
<li>работы ясны и понятны менеджеру и участникам проекта;</li>
<li>понятен конечный результат работы и способы его достижения;</li>
<li>временные характеристики и ответственность за выполнение работ могут быть однозначно определены.</li>
</ul>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig10.png" alt="ИСР" width="900px"/>
</td>
<td>
<i>
Рис. 10. иерархическая структура работ (ИСР) проекта (Work Breakdown Structure (WBS)).
</i>
</td>
</tr>
</table>
</div>
<p><strong>Управление сроками проекта (тоже относится к фазе разработки)</strong> -
обеспечивает своевременное завершение проекта:</p>
<ul>
<li>определение состава операций;</li>
<li>определение взаимосвязей операций;</li>
<li>оценка ресурсов операций;</li>
<li>оценка длительности операций;</li>
<li>разработка расписания (с учетом последовательности операций, их длительности, требований к ресурсам и ограничений на сроки);</li>
<li>управление расписанием.</li>
</ul>
<p>Для данных целей часто используют <strong>диаграмму Ганта</strong> - графическое
представления плана проекта (расписание). Выглядит как горизонтальные полосы, расположенные между двумя осями: списком задач по вертикали и датами по горизонтали. Довольно легко строиться в <code>MS Excel</code> или <code>LibreOffice Calc</code> закрашиванием соответствующих ячеек.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/drive_proj_fig10.png" alt="Диаграмма Ганта" width="900px"/>
</td>
<td>
<i>
Рис. 10. Примеры диаграмм Ганта (https://ru.smartsheet.com/).
</i>
</td>
</tr>
</table>
</div>
<p><strong>3.2.3 Фаза реализации</strong> - самая ответственная часть проекта. Состоит из:</p>
<ul>
<li>организация/проведение торгов;</li>
<li>выполнение работ;</li>
<li>ввод в действие коммуникации участников;</li>
<li>ввод в действие системы стимулирования (мотивации) участников;</li>
<li>детальное проектирование и технические спецификации;</li>
<li>оперативное планирование работ;</li>
<li>информационный контроль за ходом работ;</li>
<li>управление материально-техническим обеспечением;</li>
<li>мониторинг и прогноз прогресса: ход, качество, продолжительность, стоимость и др. работы.</li>
<li>решение возникающих проблем.</li>
</ul>
<p>При этом можно (а в некоторых случаях и нужно) объединять данную
фазу с фазой <strong>Управления и контроля</strong> для проекта (проводить их параллельно
друг другу). Для управления и контроля рекомендую сделать следующее:</p>
<ol>
<li>Еще раз пройтись по плану проекта. Перед началом каждого этапа уточнять с
каждым участником его задачи и обязанности.</li>
<li>Оценить сделанное по работам, срокам, трудоемкости, затратах и сравнить с запланированным (желательно с участниками проекта).</li>
<li>Принимать корректирующие меры, если требуется менять план.</li>
<li>Информировать людей о ходе реализации проекта.</li>
</ol>
<p>Для анализа выполнения графика необходимы следующие данные:</p>
<ul>
<li>Идентификаторы и описание событий (не забываем про количественные оценки!).</li>
<li>Имена ответственных лиц.</li>
<li>Предполагаемые даты достижения событий.</li>
<li>Фактические даты достижения событий.</li>
</ul>
<p>Вся необходимая для контроля информация может быть отражена в таблице:</p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-hgcj{font-weight:bold;text-align:center}
.tg .tg-s268{text-align:left}
</style>
<table class="tg">
<tr>
<th class="tg-hgcj" rowspan="2">Работа</th>
<th class="tg-hgcj" rowspan="2">Ответственное лицо</th>
<th class="tg-hgcj" colspan="2">Дата начала</th>
<th class="tg-hgcj" colspan="2">Дата завершения</th>
<th class="tg-hgcj" rowspan="2">Комментарии</th>
</tr>
<tr>
<td class="tg-hgcj">плановая</td>
<td class="tg-hgcj">факт</td>
<td class="tg-hgcj">плановая</td>
<td class="tg-hgcj">факт</td>
</tr>
<tr>
<td class="tg-s268">Разработка анкет</td>
<td class="tg-s268">Иванов А.</td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268">Критический путь<br></td>
</tr>
<tr>
<td class="tg-s268">Проведение <br>пилотного опроса<br></td>
<td class="tg-s268">Петров В.</td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
</tr>
<tr>
<td class="tg-s268">Печать инструкций</td>
<td class="tg-s268">Иванов А.</td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
</tr>
</table>
</div>
<p>При выборе периодичности наблюдений рекомендую учесть:</p>
<ul>
<li>находятся ли работы на критическом пути (зависят ли от них сроки начала следующих работ);</li>
<li>имеет ли задача значительные риски;</li>
<li>наличие предварительных затруднений для аналогичных задач.</li>
</ul>
<p>Контролировать выполнение работ нужно не реже одного раза в месяц.</p>
<blockquote>
<p><strong>Примечание.</strong> Сейчас очень популярна agile-система контроля и управления
проектами. В ней сроки и идеология немного изменены для обеспечения
максимальной эффективности, но за счет перенапряжения команды. Не всегда
такая система будет эффективна и воспринята командой. Но об этом
отдельно.</p>
</blockquote>
<p><strong>Квалификационный список проекта</strong> - удобная форма отображения квалификации
и знаний сотрудников команды для распределения их ролей и контроля развития
команды. Рекомендуется использовать следующую схему:</p>
<ul>
<li>основная квалификация (соответствие поставленной задаче в качестве ведущей роли);</li>
<li>дополнительная квалификация (соответствие поставленной задаче в качестве исполнителя под ответственным руководством);</li>
<li>проявленный интерес (желание работника выполнять определенные задачи).</li>
</ul>
<p>Пример:</p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-s6z2{text-align:center}
.tg .tg-hgcj{font-weight:bold;text-align:center}
</style>
<table class="tg">
<tr>
<th class="tg-s6z2"></th>
<th class="tg-s6z2">дизайнер (Иванов А)</th>
<th class="tg-s6z2">аналитик (Петров П)</th>
<th class="tg-s6z2">программист (Сидоров С)</th>
<th class="tg-s6z2">HR-менеджер (Иванов Б)</th>
</tr>
<tr>
<td class="tg-hgcj">разработка технической документации</td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2">осн. квалификация / <br>проявленный интерес</td>
<td class="tg-s6z2">проявленный интерес</td>
</tr>
<tr>
<td class="tg-hgcj">проведение интервью</td>
<td class="tg-s6z2">проявленный интерес</td>
<td class="tg-s6z2">проявленный интерес<br></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2">осн. квалификация /<br>проявленный интерес</td>
</tr>
<tr>
<td class="tg-hgcj">графический дизайн</td>
<td class="tg-s6z2">осн. квалификация / <br>проявленный интерес</td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2">доп. квалификация</td>
<td class="tg-s6z2">проявленный интерес</td>
</tr>
<tr>
<td class="tg-hgcj">разработка анкет</td>
<td class="tg-s6z2">доп. квалификация</td>
<td class="tg-s6z2">доп. квалификация</td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2">осн. квалификация</td>
</tr>
</table>
</div>
<p>В качестве руководства при создании списка:</p>
<ol>
<li>Составьте полный список специальностей, которые могут потребоваться для будущего проекта.</li>
<li>Составьте полный список людей для таблицы.</li>
<li>Предложите людям из списка оценить свои профессиональные качества и интерес во всех сферах проекта.</li>
<li>Предложите непосредственным руководителям этих людей оценить их проф. качества в необходимых сферах.</li>
<li>Сравните данные, проведите корректировку.</li>
<li>Составьте окончательный вариант квалификационного списка.</li>
</ol>
<p><strong>Матрица ответственности</strong> - используется для отображения связей между выполняемыми работами и членами проекта, устанавливает степень ответственности. При составлении используют методику RACI.</p>
<p><strong>Методика RACI (или ARCI):</strong></p>
<ul>
<li>Ответственный (Accountable) - полностью отвечает за исполнение этапа/задачи, вправе принимать решения по способу реализации (может назначаться только один человек).</li>
<li>Исполнитель (Responsible) - исполняет задачу, не несет ответственности за выбор способ ее решения, не отвечает за качество и сроки реализации (может быть более одного).</li>
<li>Консультант (Consult before doing) - оказывает консультации в ходе решения задач проекта, контролирует качество реализации.</li>
<li>Наблюдатель (Inform after doing) - может оказывать консультации в ходе решения задач проекта, не несет ответственности. Оповещается после исполнения работ.</li>
</ul>
<p>Можно использовать и другие роли, например:</p>
<ul>
<li>О - основная обязанность (в целом по данной задаче).</li>
<li>Д - дополнительная обязанность (по выполнению отдельных частей задачи).</li>
<li>У - утверждение работ.</li>
<li>Э - экспертиза (методов и результатов работы).</li>
<li>П - приемка (результатов деятельности по данной работе).</li>
<li>Об - обеспечение (необходимыми материалами и информацией).</li>
</ul>
<div>
<table>
<tr>
<th>Операция</th>
<th>Иванов</th>
<th>Петров</th>
<th>Сидоров</th>
<th>Кузнецов</th>
<th>Сергеев</th>
</tr>
<tr>
<td>Задача 1</td>
<td>R<br></td>
<td>A<br></td>
<td>C<br></td>
<td>I<br></td>
<td>I<br></td>
</tr>
<tr>
<td>Задача 2</td>
<td>A<br></td>
<td>C<br></td>
<td>C<br></td>
<td>R<br></td>
<td>I<br></td>
</tr>
<tr>
<td>Задача 3</td>
<td>C</td>
<td>A</td>
<td>I</td>
<td>R</td>
<td>R</td>
</tr>
<tr>
<td>Задача 4</td>
<td>C</td>
<td>I</td>
<td>A<br></td>
<td>C</td>
<td>I</td>
</tr>
</table>
</div>
<p>Для контроля так же важно использовать <strong>оценку стоимости проекта</strong>. Она
может быть нескольких видов.</p>
<ol>
<li>
<p>Экспертная (Expert Judgement) - привлечение экспертов области. После их предложений усредняем и приходим к единому решению в ходе дискуссии.</p>
</li>
<li>
<p>По 3 точкам (Three Point Estimation) - на основе пессимистичной (P), оптимистичной (O) и реалистичной(среднее, M):</p>
<p><span class="math">\(E = \frac{O+4M+P}{6}\)</span></p>
<p>Отметим, что Р, О и М определяются экспертно в часах/днях/валюте в ходе обсуждения в команде на основании вопросов: “сколько времени займет проект, если не будет никаких рисков?”, “каким может быть самый негативный сценарий?” и т.п.</p>
<p>Результат расчета дает усредненную оценку.</p>
</li>
<li>
<p>Оценка по аналогам / “Сверху вниз” (Analogous Estimation) - опираемся на прошлый опыт, в т.ч. и на основе декомпозиции проекта.</p>
</li>
<li>
<p>Оценка по параметрам (Parametric Model) - один из самых точных и гибких методов, строим параметрическую модель - прогноз, взяв за основу прошлый опыт, имеющиеся данные, метрики и статистику.</p>
</li>
<li>
<p>Оценка “Снизу вверх” (Bottom-up Estimation) - оценивается стоимость каждой операции, затем они суммируются доя получения общей стоимости проекта.</p>
</li>
<li>
<p>Стоимость качества (Cost of Quality) - суммарные расходы создания продукта/услуги проекта в соответствии со стандартами качества. Т.е. отдельно оценивается стоимость работ, выполненных из-за несоответствия требованиям качества.</p>
</li>
</ol>
<p><strong>Управление рисками</strong> - включает процессы, связанные с определением, анализом и реагированием на риски проекта с целью повышения вероятности и степени влияния положительных и снижения вероятности негативных событий в проекте.</p>
<p><strong>Риск проекта</strong> - неопределенное событие или условие, которое, в случае возникновения, имеет позитивное/негативное воздействие по меньшей мере на одну из целей проекта (например, сроки, стоимость, содержание или качество).</p>
<p>В план управления рисками может входить:</p>
<ul>
<li>методология управления рисками;</li>
<li>роли и ответственности участвующих в управлении рисками;</li>
<li>бюджет для управления рисками;</li>
<li>определение периодичности процедур управления рисками;</li>
<li>пороговые критерии для распознавания наступления риска;</li>
<li>категории рисков;</li>
<li>матрицы вероятности и воздействия рисков;</li>
<li>форматы и отчеты шаблонов.</li>
</ul>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-s6z2{text-align:center}
.tg .tg-hgcj{font-weight:bold;text-align:center}
</style>
<table class="tg">
<tr>
<th class="tg-hgcj">№</th>
<th class="tg-hgcj">Риск</th>
<th class="tg-hgcj">Влияние риска</th>
<th class="tg-hgcj">Вероятность</th>
<th class="tg-hgcj">На что влияет<br>(сроки, бюджет, результаты)</th>
<th class="tg-hgcj">Мероприятия по <br>минимизации<br></th>
<th class="tg-hgcj">Владелец <br>риска</th>
</tr>
<tr>
<td class="tg-hgcj">1</td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
</tr>
<tr>
<td class="tg-hgcj">...</td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
</tr>
</table>
</div>
<p>Примеры типовых рисков (по СТО 8.1-16-2018, АО “Апатит”)</p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-1wig{font-weight:bold;text-align:left;vertical-align:top}
.tg .tg-hgcj{font-weight:bold;text-align:center}
.tg .tg-5ua9{font-weight:bold;text-align:left}
.tg .tg-s268{text-align:left}
.tg .tg-0lax{text-align:left;vertical-align:top}
</style>
<table class="tg">
<tr>
<th class="tg-hgcj">Категория риска /<br>тип проекта<br></th>
<th class="tg-hgcj">Типовой состав рисков</th>
</tr>
<tr>
<td class="tg-hgcj" colspan="2">Риски, применимые для всех типов проектов организационных преобразований</td>
</tr>
<tr>
<td class="tg-5ua9">Управления содержанием</td>
<td class="tg-s268">- Неточность/неполнота определения целей, задач и результатов проекта.<br>- Изменение требований на поздних стадиях реализации проекта.<br>- Недостоверность представляемой исходной информации.<br>- Некачественная/недостаточная проработка документов и результатов проекта.<br>- Не достижение целей, задач и результатов проекта.<br></td>
</tr>
<tr>
<td class="tg-5ua9">Управления сроками</td>
<td class="tg-s268">- Недостаточное планирование на начальных этапах реализации проекта.<br>- Отсутствие исходных данных для детального планирования.<br>- Нехватка ресурсов для реализации проекта в заданные сроки.<br>- Нескоординированность действий проектной команды.<br>- Отсутствие совместного планирования со взаимосвязанными проектами.<br>- Несвоевременное обеспечение потребностей проекта структурными подразделениями и смежными проектами.<br>- Длительное рассмотрение и согласование проектных документов.<br></td>
</tr>
<tr>
<td class="tg-5ua9">Управления контрактами</td>
<td class="tg-s268">- Длительные сроки проведения конкурсного отбора и заключения договора с внешним консультантом.<br>- Нежелание внешнего консультанта принимать все условия типового договора.<br>- Невозможность обеспечения постоянного присутствия специалистов на площадках Заказчика.<br>- Нарушение условия договоров Исполнителем. <br></td>
</tr>
<tr>
<td class="tg-5ua9">Управления персоналом</td>
<td class="tg-s268">- Недостаточная квалификация работников/отсутствие необходимой экспертизы.<br>- Нехватка ресурсов для реализации проекта в заданные сроки.<br>- Изменение состава участников проектной группы от Заказчика и Подрядчика.<br>- Отсутствие "реального" временного ресурса у участников рабочей группы.<br>- Отсутствие реальных полномочий у руководителя проекта.<br></td>
</tr>
<tr>
<td class="tg-5ua9">Макроэкономические</td>
<td class="tg-s268">- Колебание курса доллара.<br>- Изменение цен на сырье и готовую продукцию.<br>- Повышение инфляции, рост заработной платы, увеличение налогов и др.<br></td>
</tr>
<tr>
<td class="tg-hgcj" colspan="2">Риски, возникающие при реализации проектов организационных преобразований определенного типа</td>
</tr>
<tr>
<td class="tg-5ua9">Разработка стратегии/<br>Концепции</td>
<td class="tg-s268">- Выбор некорректного подхода к анализу деятельности.<br>- Учет не всех факторов при разработке.<br>- Недостаточная проработка плана мероприятий по реализации стратегии.<br></td>
</tr>
<tr>
<td class="tg-5ua9">Создание/выделение<br>нового подразделения<br></td>
<td class="tg-s268">- Неправильная оценка численности и должностных обязанностей работников.<br>- Невозможность найма персонала на имеющиеся вакансии.<br>- Затруднение при получении необходимых лицензий и разрешений.<br></td>
</tr>
<tr>
<td class="tg-1wig">Внедрение нового бизнес-<br>процесса<br></td>
<td class="tg-0lax">- Нежелание внешних участников процесса принять предлагаемые изменения.<br>- Нежелание линейных руководителей проводить необходимые изменения процессов. </td>
</tr>
<tr>
<td class="tg-1wig">Повышение/понижение<br>производительности<br>персонала<br></td>
<td class="tg-0lax">- Нежелание линейных руководителей проводить необходимые изменения процессов.<br>- Отсутствие необходимой статистики.<br>- Отсутствие технической экспертизы по определенным типам/группам оборудования.<br></td>
</tr>
</table>
</div>
<p>Оценка негативного влияния рисков на проект:</p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-glna{background-color:#fffe65;text-align:left;vertical-align:top}
.tg .tg-hgcj{font-weight:bold;text-align:center}
.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
.tg .tg-57mh{background-color:#ffffc7;text-align:left}
.tg .tg-og4q{background-color:#fd6864;text-align:left;vertical-align:top}
</style>
<table class="tg">
<tr>
<th class="tg-hgcj">Объект \ Влияние</th>
<th class="tg-hgcj">Очень низкое<br>0,05<br></th>
<th class="tg-amwm">Низкое<br>0,1<br></th>
<th class="tg-amwm">Умеренное<br>0,2<br></th>
<th class="tg-amwm">Высокое<br>0,4<br></th>
<th class="tg-amwm">Очень высокое,<br>0,8<br></th>
</tr>
<tr>
<td class="tg-hgcj">Стоимость</td>
<td class="tg-57mh">Незначительное<br>увеличение</td>
<td class="tg-glna">Увеличение < 10%</td>
<td class="tg-glna">Увеличение 10-20%</td>
<td class="tg-og4q">Увеличение 20-40%</td>
<td class="tg-og4q">Увеличение > 40%</td>
</tr>
<tr>
<td class="tg-hgcj">Сроки</td>
<td class="tg-57mh">Незначительное<br>увеличение</td>
<td class="tg-glna">Увеличение < 5%<br></td>
<td class="tg-glna">Увеличение 5-10 %</td>
<td class="tg-og4q">Увеличение 10-20 %</td>
<td class="tg-og4q">Увеличение > 20%</td>
</tr>
<tr>
<td class="tg-hgcj">Содержание</td>
<td class="tg-57mh">Изменения не <br>заметны<br></td>
<td class="tg-glna">Незначительное<br>увеличение</td>
<td class="tg-glna">Значительные <br>изменения<br></td>
<td class="tg-og4q">Неприемлемое для <br>клиента изменение</td>
<td class="tg-og4q">Достижение конечных<br>результатов невозможно<br></td>
</tr>
<tr>
<td class="tg-hgcj">Качество</td>
<td class="tg-57mh">Изменения не<br>заметны<br></td>
<td class="tg-glna">Незначительное<br>увеличение</td>
<td class="tg-glna">Изменения требуют<br>согласия клиента<br></td>
<td class="tg-og4q">Неприемлемое для<br>клиента изменение<br></td>
<td class="tg-og4q">Достижение конечных<br>результатов невозможно</td>
</tr>
</table>
</div>
<p>Стратегии рисков и угроз по проекту:</p>
<ul>
<li>Уклонение от риска - изменение плана проекта, направленное на устранение риска либо на защиту целей проекта от его воздействия.</li>
<li>Передача риска - перенос последствий риска на третью сторону (не устраняет, а передает управление). Обычно за перенос риска взимается страховая премия. Пример - страхование основных средств.</li>
<li>Снижение риска - снижение вероятности наступления риска или его последствий до приемлемого уровня.</li>
<li>Принятие риска - стратегия, при которой риск принимается. Команда проекта не пытается повлиять на риск.</li>
</ul>
<p><strong>3.2.4 Завершающая фаза</strong>:</p>
<ul>
<li>планирование процесса завершения;</li>
<li>испытания продукта;</li>
<li>подготовка к эксплуатации (кадры, документация);</li>
<li>оценка результатов и подведение итогов (подготовка итоговых документов);</li>
<li>разрешение конфликтов;</li>
<li>накопление и хранение фактических и опытных данных для последующих проектов;</li>
<li>расформирование команды.</li>
</ul>
<p>Критерии оценки проекта при его утверждении заказчиком, как правило, следующие.</p>
<p>Шкала оценки: 1 (критерий не проявляется), 2 (проявляется ниже среднего), 3 (проявляется удовлетворительно), 4 (проявляется выше среднего), 5 (проявляется идеально).</p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-s6z2{text-align:center}
.tg .tg-hgcj{font-weight:bold;text-align:center}
.tg .tg-s268{text-align:left}
.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
.tg .tg-0lax{text-align:left;vertical-align:top}
</style>
<table class="tg">
<tr>
<th class="tg-s6z2">№</th>
<th class="tg-hgcj">Предмет оценки</th>
<th class="tg-hgcj">Критерий оценки</th>
<th class="tg-hgcj">Оценка</th>
</tr>
<tr>
<td class="tg-hgcj">1</td>
<td class="tg-s268">Сложность проекта</td>
<td class="tg-s268">- Масштаб решаемой проблемы.</td>
<td class="tg-s268"></td>
</tr>
<tr>
<td class="tg-hgcj">2</td>
<td class="tg-s268">Детальная проработка проекта</td>
<td class="tg-s268">- Детальная проработка проекта.<br>- Наличие показателей результативности.<br>- Соответствие мероприятий проекта его целям.<br></td>
<td class="tg-s268"></td>
</tr>
<tr>
<td class="tg-hgcj">3</td>
<td class="tg-s268">Обоснование выбора решения с<br>учетом альтернативных вариантов<br></td>
<td class="tg-s268">- Обоснование выбора решения с учетом <br>альтернативных вариантов.<br></td>
<td class="tg-s268"></td>
</tr>
<tr>
<td class="tg-hgcj">4</td>
<td class="tg-s268">Учет экономической <br>целесообразности</td>
<td class="tg-s268">- Соответствие предлагаемых изменений и сметы проекта<br>масштабу решаемой проблемы и ее негативных последствий.<br></td>
<td class="tg-s268"></td>
</tr>
<tr>
<td class="tg-amwm">5</td>
<td class="tg-0lax">Работа с рисками</td>
<td class="tg-0lax">- Минимизация рисков, связанных с реализацией проекта.</td>
<td class="tg-0lax"></td>
</tr>
<tr>
<td class="tg-amwm">6</td>
<td class="tg-0lax">Эффективность предлагаемого<br>решения<br></td>
<td class="tg-0lax">- Соответствие предлагаемых мероприятий ожидаемому <br>результату.<br></td>
<td class="tg-0lax"></td>
</tr>
<tr>
<td class="tg-amwm">7</td>
<td class="tg-0lax">Эффективная презентация</td>
<td class="tg-0lax">- Доступность изложения.<br>- Логичность выступления (четкость структуры).<br>- Умение аргументировать свою позицию.<br>- Уверенность при ответах на вопросы.<br>- Качество оформления презентации.<br></td>
<td class="tg-0lax"></td>
</tr>
</table>
</div>
<h3 id="3-3">3.3 На заметку</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>В ходе выполнения проекта могут формироваться запросы на изменения, которые могут включать:</p>
<ul>
<li>корректирующие действия;</li>
<li>предупреждающие действия;</li>
<li>исправление ошибок;</li>
<li>обновления.</li>
</ul>
<p>Могут измениться:</p>
<ul>
<li>результаты проекта;</li>
<li>содержание проекта;</li>
<li>план управления проектом;</li>
<li>проектная документация.</li>
</ul>
<p>Мониторинг (наблюдение, сбор отчетности) и контроль (сравнение состояний) над работами проекта - это процесс непрерывного наблюдения, анализа и регулирования прогресса, который затрагивает следующие моменты:</p>
<ul>
<li>сравнение текущего хода исполнения с планом;</li>
<li>оценка хода исполнения для выявления необходимости корректировки или предупреждения;</li>
<li>анализ, отслеживание и мониторинг рисков;</li>
<li>выявление достоверной и актуальной информационной базы по продуктам проекта и сопутствующей документации;</li>
<li>выявление и предоставление информации для отчетности;</li>
<li>представление и расчет прогнозов развития проекта.</li>
</ul>
<p>Итак, думаю вы уже прочитали все, что было мной найдено и выложено на
ресурсе. Этого вполне достаточно на мой взгляд. Однако вот в чем вопрос,
внешний мир не ограничивается моим и вашим взглядами) Так что давайте ка
послушаем, что о проектном менеджменте думают другие люди и насколько наши идеи сходятся. Так что милости прошу на <a href="https://stepik.org/course/2376/">курс</a> который вам предстоит прочитать/прослушать и выполнить на нем все задания) (опционально). Этого будет вполне достаточно (не считая нашей практике, но об этом после). Так что удачи, менеджеры проектов)</p>
<h2 id="4">4. Практика, задания и лабы (опционально)</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Для всех, кому это необходимо привожу ряд практических и теоретических
задания по курсу. Все они приведены в <em>таблице № 12</em>, а вот какие из них
нужно выполнять необходимо спросить у меня лично старостам групп (или
дождаться моего прямого указания).</p>
<p>Задания, встречающиеся в тексте выполнять и присылать мне не обязательно, но они встретятся на коллоквиуме/зачете/экзамене.</p>
<p><em>Таблица 12. Задания для выполнения</em></p>
<div>
<table>
<tr>
<th> № </th>
<th> Название </th>
<th> Примечания </th>
</tr>
<tr>
<td> 1 </td>
<td> <a href="../../../extra/blog/education/ChSU/drive_proj_test_0.xls" download> Входной контроль </a> </td>
<td> - </td>
</tr>
<tr>
<td> 2 </td>
<td> <a href="https://stepik.org/course/2376/"> Выполнить курс и показать скриншот результата </a> </td>
<td> - </td>
</tr>
<tr>
<td> 3 </td>
<td><a href="http://www.pmservices.ru/project-management-news/top-7-metodov-upravleniya-proektami-agile-scrum-kanban-prince2-i-drugie/"> Практическое задание №1 (Различные системы управления проектами). Ознакомиться с различными системами управления проектами, составить таблицу с кратким описанием, достоинствами и недостатками каждой из них.</a> </td>
<td> - </td>
</tr>
<tr>
<td> 4 </td>
<td><a href="https://trello.com"> Практическое задание №2 (Практика работы в системе типа Kanboard на примере Trello.com). Зарегистрироваться на Trello.com и создать любой проект на Ваше усмотрение.</a> </td>
<td> - </td>
</tr>
<tr>
<td> 5 </td>
<td><a href="https://trello.com"> Практическое задание №3 (Практика работы в системе типа Kanboard на примере Trello.com). Организуйте рабочее совещание с приглашенными участниками (реальных людей приглашать не стоит, достаточно знать, как это делается), датой, повесткой дня и оповещением.</a> <a href="https://blog.paperpile.com/trello-uses-for-researchers/"> В качестве инструкции, можете использовать этот сайт. </a> </td>
<td> - </td>
</tr>
<tr>
<td> 6 </td>
<td><a href="https://trello.com"> Практическое задание №4 (Практика работы в системе типа Kanboard на примере Trello.com). Создайте исследовательский проект.</a> <a href="https://medium.com/@bettstetter/using-trello-in-academia-fd0462b6b5a6"> В качестве инструкции, можете использовать этот сайт. </a> </td>
<td> - </td>
</tr>
</table>
</div>
<h2 id="5">5. Литература</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<ol>
<li>ГОСТ Р 54869-2011 Проектный менеджмент. Требования к управлению проектом.</li>
<li>ГОСТ Р 54870-2011 Проектный менеджмент. Требования к управлению портфелем проектов.</li>
<li>ГОСТ Р 54871-2011 Проектный менеджмент. Требования к управлению программой.</li>
<li>ГОСТ Р 56715.1-2015 Проектный менеджмент. Системы проектного менеджмента. Часть 1. Основные положения.</li>
<li>ГОСТ Р 56715.2-2015 Проектный менеджмент. Системы проектного менеджмента. Часть 2. Процессы и процессная модель.</li>
<li>ГОСТ Р 56715.3-2015 Проектный менеджмент. Системы проектного менеджмента. Часть 3. Методы.</li>
<li>ГОСТ Р 56715.4-2015 Проектный менеджмент. Системы проектного менеджмента. Часть 4. Данные и модель данных.</li>
<li>ГОСТ Р 56715.5-2015 Проектный менеджмент. Системы проектного менеджмента. Часть 5. Термины и определения.</li>
<li>ГОСТ Р ИСО 21500-2014 Руководство по проектному менеджменту.</li>
<li>Курс <a href="https://stepik.org/course/2376/">“Основы управления проектами”</a> на stepic.org.</li>
<li>Набор сайтов о системах управления проектами: <a href="https://blog.paperpile.com/trello-uses-for-researchers/">Trello for Researchers</a>, <a href="https://medium.com/@bettstetter/using-trello-in-academia-fd0462b6b5a6">Using Trello in academia</a>, <a href="https://vc.ru/flood/12674-preply-trello">Личный опыт каких-то ребят</a>, <a href="http://www.pmservices.ru/project-management-news/top-7-metodov-upravleniya-proektami-agile-scrum-kanban-prince2-i-drugie/">Топ-7 методов управления проектами: Agile, Scrum, Kanban, PRINCE2 и другие</a>.</li>
<li>Конечно же <a href="https://en.wikipedia.org/wiki/Project_management">Википедия</a> - отличное место, чтобы начать знакомство с предметом и узнать перевод необходимых терминов.</li>
<li>Немного примеров для расчета <a href="https://www.simplilearn.com/calculating-eac-article">параметров проекта</a>.</li>
<li><a href="https://www.wsdot.wa.gov/publications/fulltext/projectmgmt/pmog/pm_glossary.pdf">Project management glossary of terms</a>.</li>
<li>Прекрасный переводчик <a href="https://www.deepl.com/translator">deepl.com</a>.</li>
<li>Конструктор <a href="https://www.tablesgenerator.com/html_tables">html таблиц</a>.</li>
<li>Составление <a href="https://app.diagrams.net/">диаграмм любой сложности</a>.</li>
</ol>
<p>Спасибо, что были с нами и приятного дня!</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>Drive Project2018-12-09T12:00:00+03:002022-10-09T12:00:00+03:00Dmitrii Iunovidovtag:dimyun.space,2018-12-09:/blog/education-ChSU-automation-drive_proj.html<p>Authors technique for project management</p><p>This small note refers to the set of my courses for students of Cherepovets State University (ChSU). This course includes the following curriculum disciplines:</p>
<ul>
<li>project activity management;</li>
<li>project management;</li>
<li>project activity;</li>
<li>management of innovative projects;</li>
<li>engineering leadership.</li>
</ul>
<p>Warm welcome to all participants!</p>
<h2 id="0-TOC">Table of Content</h2>
<ol>
<li><a href="#1">Introduction</a></li>
<li><a href="#2">Theoretical basis (literature review)</a><ol>
<li><a href="#2-1">GOST R 54869-2011. Project management. Project management requirements</a></li>
<li><a href="#2-2">GOST R 54870-2011. Project management. Bunch of project management requirements</a></li>
<li><a href="#2-3">GOST R 54871-2011. Project management. Program management requirements</a></li>
<li><a href="#2-4">GOST R 56715.1-2015. Project management. Systems of project management. Part 1. Basic principles</a></li>
<li><a href="#2-5">GOST R 56715.2-2015. Project management. Systems of project management. Part 2. Processes and process models</a></li>
<li><a href="#2-6">GOST R 56715.3-2015. Project management. Systems of project management. Part 3. Methods</a></li>
<li><a href="#2-7">GOST R 56715.4-2015. Project management. Systems of project management. Part 4. Data and data models</a></li>
<li><a href="#2-8">GOST R 56715.5-2015. Project management. Systems of project management. Part 5. Terms and definitions</a></li>
<li><a href="#2-9">GOST R ISO 21500-2014. Project management guide</a></li>
</ol>
</li>
<li><a href="#3">Simplified project activities and techniques</a><ol>
<li><a href="#3-1">Project - definition and features</a></li>
<li><a href="#3-2">Project phases and processes</a></li>
<li><a href="#3-3">Notes</a></li>
</ol>
</li>
<li><a href="#4">Practices, assignments and labs</a> </li>
<li><a href="#5">Literatures</a> </li>
</ol>
<h2 id="1">1. Introduction</h2>
<p><a href="#0-TOC">TOC</a></p>
<p>So, <strong>the aim</strong> of my little note about project management is <em>to give you some ideas of project activity, its methods, goals and objectives</em>.</p>
<p><strong>Primary tasks are:</strong></p>
<ul>
<li>learn culture and principles of any projects;</li>
<li>analyze and study the project management system;</li>
<li>develop basic practical skills in project development;</li>
<li>develop the path of project development;</li>
<li>explore some good projects practice.</li>
</ul>
<p><strong>For the “project” in chapter 3 we will consider:</strong></p>
<ul>
<li>main features;</li>
<li>structure;</li>
<li>criteria for success;</li>
<li>life cycle;</li>
<li>the rules for setting a goal (the S.M.A.R.T. one);</li>
<li>correct planning;</li>
<li>Gants diagrams;</li>
<li>team responsibility matrix;</li>
<li>tools for analysis;</li>
<li>risk management.</li>
</ul>
<p>I hope, that <strong>you will learn how to:</strong></p>
<ul>
<li>make distinguish between project activities and operations;</li>
<li>consider project criteria;</li>
<li>set goals and objectives;</li>
<li>create a project plan and a responsibility matrix;</li>
<li>manage risks.</li>
</ul>
<p>I will tell you a little about the ways to assess and control your knowledge. If I have enough time and energy, I will use the “ready-rating” for continuous control. This is my own feature, which I really want to test (that’s a coincidence, isn’t it?). Training will be based on examining your own readiness. In other words, you will be constantly checked for ability:</p>
<ul>
<li>to face the real problems of the profession/skill;</li>
<li>to use theoretical concepts;</li>
<li>to use your own logic and intelligence.</li>
</ul>
<p>This process will be automated and posted online (I think you have already noticed). The rating will include 3 grades: ready, ready in part, not ready. In my turn, I will explore it and modify it based on your comments, successes and failures (also progressing together with you). After all, successful works and strategies are based on mutual cooperation.</p>
<p>But this is not for sure…</p>
<p>If something doesn’t work out, we will limit ourselves to the classical intermediate and final control; which will br unique for each group and which we will talk about in our offline classes.</p>
<h2 id="2">2. Some theoretical basis (based on GOST, which is like ISO in Russ.)</h2>
<p><a href="#0-TOC">TOC</a></p>
<p><strong>Project activities</strong> is a concept, which refers to a wide range of activities, and it is very intuitive (thus it is hard to give clear explanation and systematization of it). But as you know if you met any unclear situation, you must read regulatory documents (ISO or State Standards). This is what we will do now.</p>
<p>The first stage of any research (scientific, regular, or any other) begins with a review of the literature. I emphasize, that all researches must begins from a review of worldwide and home country regulatory documents (GOST, TU, ISO, ASTM, techniques, SanPin, etc.). Furthermore, I extremely recommend you to make an independent search of the relevant regulatory documents (RD), because I might miss something important and interesting.</p>
<p>Below you can find a brief summary of the main RD, which are related to the <strong>project management</strong>.</p>
<h3 id="2-1">2.1 GOST R 54869-2011. Project Management. Requirements to project management</h3>
<p><a href="#0-TOC">TOC</a></p>
<blockquote>
<p>This standard specifies requirements to project management from its beginning to end (where is the subject of standardization are strictly defined outputs of project management processes). It describes the different concepts and processes inside the project (which have the defined goals and outputs).</p>
</blockquote>
<p>In summary and with translation from Elvish. This GOST considers the project structure: stages, data and process in it. The basic concepts are shown on Fig. 1, and the processes within the project (Fig. 2).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig1.png" alt="projects management" width="900px"/>
</td>
<td>
<i>
Fig. 1. Main concepts of project management (with relationship).
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig2.png" alt="processes of project" width="900px"/>
</td>
<td>
<i>
Fig. 2. Scheme of processes in project.
</i>
</td>
</tr>
</table>
</div>
<h3 id="2-2">2.2 GOST R 54870-2011. Project Management. Requirements for project portfolio management</h3>
<p><a href="#0-TOC">TOC</a></p>
<blockquote>
<p>The RD set requirements for project portfolio management at the stages of its formation and implementation, while the subject of standardization are the outputs of processes, which is related to project portfolio management. Project portfolio management involves activities, which leads to achieve the strategic goals of the organization through the formation, optimization, monitoring, control and change the project portfolio management under certain limitations. Project portfolio management provides a link between the level of strategic management in the organization and the level of project and program management.</p>
</blockquote>
<p>Ok, Google! Again, by translating into a more understandable language, we get the basis, that the entire strategy of the company/startup/personality is the creation, management and change of a set of projects. Thus, the standard is dedicated to the methods of portfolio management (i.e. set of projects). The document describe some concepts of such processes too (fig. 3).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig3.png" alt="projects portfolio" width="900px"/>
</td>
<td>
<i>
Fig. 3. Projects portfolio.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Task 1</strong>. Based of fig. 3 develop a scheme of processes (use fig. 2 as example).</p>
</blockquote>
<h3 id="2-3">2.3 GOST R 54871-2011. Project Management. Requirements to program management</h3>
<p><a href="#0-TOC">TOC</a></p>
<blockquote>
<p>This standard sets out the requirements for program management to ensure the effective achievement of program objectives and benefits.</p>
</blockquote>
<p>In a fact, this document describe a way of adaptation of GOST No. 1 for “a set of actions” (here it is called the program). Program is not the project, that is why this documents will not be considered here in more detail (but you know it name, if you are interested).</p>
<h3 id="2-4">2.4 GOST R 56715.1-2015. Project management. Project management systems. Part 1. Main statements (identical to DIN 69901-1:2009 in German)</h3>
<p><a href="#0-TOC">TOC</a></p>
<blockquote>
<p>Is the first document in the series “Project Management - Project Management Systems”. Series consists of the following parts:</p>
<ul>
<li>Part 1: Basic statements;</li>
<li>Part 2: Processes and the process model;</li>
<li>Part 3: Methods;</li>
<li>Part 4: Data and Data Model;</li>
<li>Part 5: Terms and definitions.</li>
</ul>
</blockquote>
<p>This system of standards is the most fully describes, and it give clear concept of project and project activities (from my point of view of cause). Thus, it is stated that <em>projects consist of a unique set of processes of different types</em>. They (projects) differ in purposes, final results, size, complexity, necessary time of fulfillment, expenses and quantity of involved persons. And finally, the projects are implemented by organizations of any size.</p>
<p>Furthermore, standard declare, that the organization management should define the policy in the area of a project management and all stages of its realization (in form of a document). For this purpose it is necessary to introduce, support at appropriate level and constantly improve system of a project management of the organization.</p>
<p>The <strong>main purpose</strong> of the project management system is the successful implementation of projects. In particular, the main goals in my opinion:</p>
<ul>
<li>achieving customer/client goals;</li>
<li>building a transparent project structure (for better interpretation and research);</li>
<li>ensuring effective communication between all project participants;</li>
<li>defining the phases/stages of project implementation (planning);</li>
<li>monitoring and risk assessment;</li>
<li>quality assurance;</li>
<li>creating an environment to control the main project management processes;</li>
<li>providing control of plan adjustments where necessary;</li>
<li>setting professional requirements for project management and staff competence;</li>
<li>carrying out a comprehensive assessment of the single project processes;</li>
<li>identification of links between projects within a program or a project portfolio.</li>
</ul>
<p>Also, within the framework of the given regulatory document different models are widely used.</p>
<blockquote>
<p><strong>Task 2.</strong> Define the model in terms of GOST R 56715.1-2015</p>
</blockquote>
<p>Models are built according to specially defined requirements. They should represent characteristic tasks and processes, visualize interrelationships and structures, which are necessary for solving the tasks. The model used in this standard describes an idealized project management system and need to be adapted for each specific application.</p>
<p>We shall denote <strong>properties of the system</strong> of project management, according to GOST 56715.1-2015:</p>
<ul>
<li><strong>Flexibility</strong>: The system can adapt to new/changed conditions in a short time.</li>
<li><strong>Universality</strong>: The system allows maximum variety of application and usage.</li>
<li><strong>Modularity</strong>: The System is built from subsystems and it can be developed and expanded in a modular manner.</li>
<li><strong>Compatibility</strong>: Systems, sub-systems and individual system elements are integrated and compatible with external systems and system parts.</li>
<li><strong>Transparency</strong>: The system makes visible the processes and their interrelationships.</li>
<li><strong>Prevention</strong>: The system supports the principle of “warning instead of response”.</li>
</ul>
<p>Thus, the first GOST of a 56715 series introduces us to the business and outlines the general features of project management.</p>
<h3 id="2-5">2.5 GOST R 56715.2-2015. Project Management. Project management systems. Part 2. Processes and process model (identical to DIN 69901-2:2009 in German)</h3>
<p><a href="#0-TOC">TOC</a></p>
<blockquote>
<p>The fundamental principle of this standard is process approach, which is used for all project activities (include resources) to reach the desired result more effectively. The required activities for project management are formed as processes and involved in their project environment. On the one hand, it makes easier for all project participants to orientate themselves on results (during project implementation), and on the other hand, it provides a good basis for continuous improvement of the system and creating cooperative links (beyond the corporation).</p>
</blockquote>
<p>From Elvish: the project is split into processes, a kind of “action chart”. At the same time, there are four groups of processes (on priority reduction):</p>
<ul>
<li>leads of projects,</li>
<li>project management,</li>
<li>providing resources,</li>
<li>production processes (create of product)).</li>
</ul>
<p>Project implementation progress (project life cycle) starting with initiation and ending with completion of a group of <strong>phases</strong> (which are interconnected segments). This standard distinguishes between project phases and project management groups (processes in each phase). An example of one phase is given in Fig. 4. Each project includes several phases (a kind of sub-projects).</p>
<blockquote>
<p><strong>Task 3.</strong> Now let’s remember and imagine the recursion.</p>
</blockquote>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig4.png" alt="projects phases" width="900px"/>
</td>
<td>
<i>
Fig 4. Graphical representation of project phases.
</i>
</td>
</tr>
</table>
</div>
<p>The project phases divide the project life cycle into time-dependent sections, which are reflect project development. Types of work and other necessary data are indicated in each phase. The separation into <strong>process groups</strong> at project management level is based on logically interrelated tasks and includes: <strong>“Initializing (I)”, “Defining (D)”, “Planning (P)”, “Supervising (control, S)” and “Accomplishing (A)”</strong>. More about such phases we will study in chapter 3.</p>
<p>Pay attention, that interpretation of project management in the given standard differs from previous described GOSTs (№ 1-3). It testifies to free and intuitive understanding of the “projects”.</p>
<p>Let us consider an example of a described project phase (<em>Table 1</em>).</p>
<p><em>Table 1. Example of project phase.</em></p>
<div>
<table>
<tr>
<th></th>
<th>Initializing (I)</th>
<th>Defining (D)</th>
<th>Planning (P)</th>
<th>Supervising (S)</th>
<th>Accomplishing (A)</th>
</tr>
<tr>
<td> 1. Deadlines </td>
<td> </td>
<td> D.1.1 Identification of project steps (key events) </td>
<td> P.1.1 Work planning <br> P.1.2 Calendar planning <br> P.1.3 Project planning </td>
<td> S.1.1 Launching work <br> S.1.2 Time management</td>
<td> </td>
</tr>
<tr>
<td> 2. Changes </td>
<td> </td>
<td> </td>
<td> P.2.1 Planning methods of working with changes </td>
<td> S.2.1 Change management </td>
<td> </td>
</tr>
<tr>
<td> 3. Information, documentation, communication </td>
<td> I.3.1 Granting permissions </td>
<td> D.3.1 Definition of information, communication and reports <br> D.3.2 Definition of the project marketing <br> D.3.3 Authorization </td>
<td> P.3.1 Planning of information, communication, reporting and documentation <br> P.3.2 Authorization </td>
<td> S.3.1 Information, communication, reporting and documentation management <br> S.3.2 Acceptance </td>
<td> A.3.1 Preparation of the final project report <br> A.3.2 Creation of a project documentation archive </td>
</tr>
<tr>
<td> 4. Expenses and finance </td>
<td> </td>
<td> D.4.1 Rough (approximated) cost estimate </td>
<td> P.4.1 Preparation of cost and financial plan </td>
<td> S.4.1 Cost and financial management </td>
<td> A.4.1 Compilation of actual cost estimates </td>
</tr>
<tr>
<td> 5. Organizing </td>
<td> I.5.1 Assignment of responsible persons <br> I.5.2 Selection of project management processes </td>
<td> D.5.1 Forming a project management team </td>
<td> P.5.1 Project organization planning </td>
<td> S.5.1 Holding a startup meeting <br> S.5.2 Creating a project team <br> S.5.3 Developing a project team </td>
<td> A.5.1 Conducting the final meeting <br> A.5.2 Assessment of achievements <br> A.5.3 Disposal of the project organization </td>
</tr>
<tr>
<td> 6. Quality </td>
<td> </td>
<td> D.6.1 Defining criteria for success </td>
<td> Р.6.1 Planning for quality assurance </td>
<td> S.6.1 Quality assurance </td>
<td> A.6.1 Generalization of project experience </td>
</tr>
<tr>
<td> 7. Resources </td>
<td> </td>
<td> </td>
<td> P.7.1 Developing a resource plan </td>
<td> S.7.1 Resource management </td>
<td> A.7.1 Release of resources </td>
</tr>
<tr>
<td> 8. Risks </td>
<td> </td>
<td> D.8.1 Definition of risk management methods <br> D.8.2 Analysis of the environment of project or interested persons <br> D.8.3 Realizability assessment </td>
<td> P.8.1 Risk analysis <br> P.8.2 Risk response planning </td>
<td> S.8.1 Risk management </td>
<td> </td>
</tr>
<tr>
<td> 9. Project structure </td>
<td> </td>
<td> D.9.1 Composition of an enlarged structure </td>
<td> P.9.1 Development of work decomposition structure <br> P.9.2 Description of work packages <br> P.9.3 Description of process </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> 10. Contract and requirements </td>
<td> </td>
<td> D.10.1 Determining the methods of working with contracts <br> D.10.2 Determining the content of the contract with the customer </td>
<td> P10.1 Determining the content of supplier contracts </td>
<td> S.10.1 Implementation of contracts with customers and suppliers <br> S.10.2 Management of additional requirements </td>
<td> A.10.1 Contracts finishing </td>
</tr>
<tr>
<td> 11. Aims and content </td>
<td> I.11.1 Initial definition of objectives </td>
<td> D.11.1 Defining objectives <br> D.11.2 Defining project content </td>
<td> </td>
<td> S.11.1 Management of objectives and content </td>
<td> </td>
</tr>
</table>
</div>
<p>Examples of diagrams of project management processes are given in <em>fig. 5</em> and <em>fig. 6</em> (for more information see the GOST).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig5.png" alt="processes in stage" width="900px"/>
</td>
<td>
<i>
Fig. 5. Scheme of processes in one stage in one phase of project.
</i>
</td>
</tr>
</table>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig6.png" alt="complicate processes in stage" width="900px"/>
</td>
<td>
<i>
Fig. 6. Scheme of processes in one stage in one phase of project. More complicate example.
</i>
</td>
</tr>
</table>
</div>
<p>This is the end of this brief review of this GOST. I’ll note once again -
process models are very fond of at the University department and always require at any project defences. Therefore, I highly recommend reading this GOST and
practice the decomposition of various processes in such diagrams.</p>
<h3 id="2-6">2.6 GOST R 56715.3-2015. Project management systems. Part 3. Methods (identical to DIN 69901-3:2009 in German)</h3>
<p><a href="#0-TOC">TOC</a></p>
<blockquote>
<p>This standard defines the basic methods that are used in project management systems.</p>
</blockquote>
<p>The standard describes some metrics (parameters) for comparing different project management strategies. Let’s consider some of them in more detail.</p>
<p><strong>1.6.1 Cost estimate</strong> - used for forecasting what resources (personnel, finances, etc.) and to what extent are necessary for project implementation (<em>Table 2</em>).</p>
<p><em>Table 2. Cost estimate</em></p>
<div>
<table>
<tr>
<th>Method</th>
<th>Characteristics</th>
</tr>
<tr>
<td>Experts estimation</td>
<td>The evaluation shall be conducted by one expert or group of experts</td>
</tr>
<tr>
<td>Delphic method</td>
<td>Evaluation (from experts) is systematized through a structured multi-skilled survey.</td>
</tr>
<tr>
<td>Three dots methods</td>
<td>Evaluation (from experts) is supported by an assessment of the optimistic, realistic and pessimistic way. <br> The sum of evaluation is defined as the average value of the above values (usually, the realistic evaluation takes in four times more powerful then others).</td>
</tr>
<tr>
<td>Collective evaluation</td>
<td>Evaluation (from experts) is conducted in the form of a collective, i.e., not anonymous, multidisciplinary expert survey. The stages of the collective evaluation are:<br>
1) Selection of experts to carry out the evaluation.<br>
2) Provision of information to the experts.<br>
3) (Preliminary) expert cost estimate.<br>
4) General discussion of evaluation results, in particular of deviations (attention is also paid to preconditions and assumptions).<br>
5) Determining a fully supported assessment result as well as general preconditions.
</td>
</tr>
<tr>
<td>Comparison of projects (by analogues)</td>
<td>Costs of projects are determined with the help of actual requirements by calculation from the experience data<br> of similar projects. </td>
</tr>
</table>
</div>
<p><strong>1.6.2 project supervision</strong>. Used mainly for two <strong> objectives: control and modification management</strong>. In other words, it serves the purpose of comparing “planned” with “real” so that you can later track project modifications.</p>
<p>The form and methods of control depend on the size and complexity of the project and must comply with internal regulations and organizational standards. The GOST specifies some control methods.</p>
<p><strong>The Earned Value Analysis (EVA) method</strong>. It includes a joint analysis of such indicators as cost, time consumption and results obtained (performance). The analysis is performed for a certain object (e.g. project, project phase, work package) on a certain date. The calculation requires to be planned and actual indicators and an estimate of the remaining costs (if available). On the basis of EVA it is possible to make forecasts about the expected expenses as well as determine the term of project completion. In addition, the EVA has a number of important project indicators, such as CPI or SPI, which can also be used as early warning system indicators. The most important international abbreviations and indicators with an example calculation show below.</p>
<ul>
<li>Budget at Completion (BAC);</li>
<li>Data Date (DD) = Time now = As-of date;</li>
<li>Percent of complete (PC);</li>
<li>Process Degree (PCT);</li>
<li>Planned Value (PV);</li>
<li>Budget Cost of Work Scheduler (BCWS);</li>
<li>Actual Cost (AC);</li>
<li>Actual Cost of Work Performed (ACWP);</li>
<li>Earned Value (EV) <span class="math">\(= BAC \cdot PC\)</span>;</li>
<li>Budget Cost of Work Performed (BCWP);</li>
<li>Actual Performance Index (API) <span class="math">\(= \frac{ACWP}{BCWS} = \frac{AC}{PV}\)</span>;</li>
<li>Cost Performance Index (CPI) <span class="math">\(= \frac{BCWP}{ACWP} = \frac{EV}{AC}\)</span>;</li>
<li>Scheduler Performance Index (SPI) <span class="math">\(= \frac{BCWP}{BCWS} = \frac{EV}{PV}\)</span>;</li>
<li>Cost Variance (CV) <span class="math">\(=BCWP - ACWP = EV - AC\)</span>;</li>
<li>Cost Variance Percentage (CV%) <span class="math">\(=\frac{CV}{BCWP} \cdot 100% = \frac{CV}{EV} \cdot 100%\)</span>;</li>
<li>Scheduler Variance (SV) <span class="math">\(=BCWP - BCWS = EV - PV\)</span>;</li>
<li>Scheduler Variance Percentage (SV%) <span class="math">\(= \frac{SV}{BCWS} \cdot 100% = \frac{SV}{PV} \cdot 100%\)</span>;</li>
<li>
<p>Estimated Cost at Completion (Kosten, EAC):
<div class="math">$$EAC = BAC \cdot \frac{AC}{EV} = \frac{BAC}{CPI\ (cumulative)}\ (linear estimate)$$</div>
<div class="math">$$EAC = AC + (BAC - EV)/ (summarizing estimate)$$</div>
<div class="math">$$EAC = BAC (start planning)$$</div>
</p>
</li>
<li>
<p>Projection at Completion (Zeit, PAC) <span class="math">\(=\frac{Planned\ Duration}{SPI} = \frac{\frac{BAC}{SPI} - BAC}{\frac{average\ BCWS}{time\ unit}}\)</span>;</p>
</li>
<li>Variance at Completion (VAC) <span class="math">\(= BAC - EAC\)</span>;</li>
<li>Variance at Completion Percentage (VAC%) <span class="math">\(= \frac{VAC}{BAC} \cdot 100%\)</span>.</li>
</ul>
<p>The degree of project completion is determined on the date of compilation (specific date) (PC based on EVA) by comparing the set and actual status and is indicated as a percentage (%). The availability level can be defined for different tasks (e.g. project, detailed project, work package) and shown as a cumulative total (if necessary).</p>
<p><strong>1.6.3 Comparison of projects (peer review)</strong></p>
<p>It is used to forecast new projects data and compare project parameters (e.g. to evaluate costs based on experience with completed projects).</p>
<p>Data on completed projects should be preliminary collected and classified (archive, knowledge base). Data on at least 10-30 projects should be used. If the projects are very similar, a smaller number of similar projects will be sufficient.</p>
<p>Experimental data are evaluated in comparison of projects by parametric calculation, determination of average values or similar conclusions between projects.</p>
<p>Parametric calculation establishes a link between the project targets (e.g. costs and project duration, the composition of the work and the results achieved etc.). The calculation process use statistical analysis software (applications) and can show the quantitative average relationship between the targets and the parameters.</p>
<p>This relationship or given average allows making predictions about new individual parameters and evaluation (partial comparison). For an overall forecast or overall assessment of the project implementation, the results of individual partial comparisons can be combined (full comparison).</p>
<p><strong>1.6.4 Project structure</strong></p>
<p>Projects are usually very complex. They involve many interrelated tasks that are often difficult to fully predict.</p>
<p>Project structuring serves to visualize the entire range of project tasks with their respective dependencies and to support planning and control processes through rational structuring.</p>
<ol>
<li>
<p>Method of division into components (from top to bottom). Begins with the first level, which is the project name. Then the project is divided into different parts by a certain criterion. They form the second level. The structural plan of the project is ready when all parts of the project are divided into work packages.</p>
</li>
<li>
<p>The method of generalization (from bottom to top). The work packages of one project are developed on the basis of previous experience and using appropriate methods of improvement. The structure of the project activities can be built using several approaches to decomposition. There are three types of project structural plans:</p>
<ul>
<li>the structural plan of the project oriented to the object (the definition of work packages is reduced to (technical) structure of the object);</li>
<li>function-oriented structural project plan (work packages are divided into different functions (e.g. sales, development, testing, manufacturing));</li>
<li>the structural plan of the project oriented to the phases and progress of the project (classification of tasks is oriented to the life cycle phase model (e.g. design, development, implementation, acceptance)).</li>
</ul>
</li>
</ol>
<h3 id="2-7">2.7 GOST R 56715.4-2015. Project Management. Project management systems. Part 4. Data and data model (identical to DIN 69901-4:2009 in German)</h3>
<p><a href="#0-TOC">TOC</a></p>
<blockquote>
<p>The data model presented in this standard describes the elementary data structures of project management at the professional level. The data model can be used for:</p>
<ul>
<li>archiving project management data;</li>
<li>exchange project management data between organizations and different software systems;</li>
<li>specification of project management software requirements (as input data).</li>
</ul>
</blockquote>
<p>Data saving format: <code>xml</code>. The data elements are named as nouns and are always used in the single form. The data elements can also be named as two nouns (the position (sequence) of the noun define the hierarchy where it possible). For example, there are a hierarchical relationship between the data elements “Initiative” and the “InitiativeGroup”. This relation can be defined only by name of the elements. For better understanding, assigning a name from multiple nouns is done using hyphens.</p>
<p>Thus, this standard establishes the data structure when storing and archiving a project. This structure is approved and standardized, which is quite convenient. I recommend to read the GOST completely if you feel it is necessary and want to practice English/German, as it contains translations of the main values.</p>
<h3 id="2-8">2.8 GOST R 56715.5-2015. Project Management. Project management systems. Part 5. Terms and definitions (identical to DIN 69901-5:2009 in German)</h3>
<p><a href="#0-TOC">TOC</a></p>
<p>Is basically a dictionary of terms.</p>
<blockquote>
<p>Task 4. Review the terms and write out the 10 most important ones in your opinion.</p>
</blockquote>
<h3 id="2-9">2.9 GOST R ISO 21500-2014** Project Management Guide (identical to international standard ISO 21500:2012 "Guidance on project management")</h3>
<p><a href="#0-TOC">TOC</a></p>
<blockquote>
<p>This standard contains general recommendations, basic concepts and characteristics of project management processes, which are important for project implementation and affect their results.</p>
</blockquote>
<p>Essentially, it is a short generalization of GOSTs No 4-8 (I recommend to use them instead of this standard).</p>
<p>In general, all standards (and the whole project management discipline) is designed to put order in the head of <em>%username%</em>. So if you have difficulty with planning and reporting your plans to others, you can try to study this n.a.. But even if everything is okay, you can use the reference to GOST in a working dispute - it can greatly simplify your life. So it is important to understand the main points of these standards, and to be able to use selected concepts. So we continue and move on to the next part, which is designed to simplify our lives a little.</p>
<h2 id="3">3. Simplification of life in project activities</h2>
<p><a href="#0-TOC">TOC</a></p>
<p>In this chapter I will try to give you a more understandable description of work with projects. This information is now very relevant, especially when you working in big companies. In particular, various trainings on self-development and project management are widely practiced at “PhosAgro” corporation (where I had worked for 10 years). I will try to share with you what I have learned in the course of my work in this company.</p>
<h3 id="3-1">3.1 Introduction to project activities</h3>
<p><a href="#0-TOC">TOC</a></p>
<p>So, <strong>project</strong> according to ISO 21500 is “a unique set of processes, which consists of coordinated and managed tasks with initial and final dates, undertaken to achieve the goal”. I think it is better to say a little more clearly: it is a time-limited activity which results are <strong>new and unique</strong> products or services. It is the main differences of project, compare to the operational activity or process. For me, one of the indicators of project activity is <strong>probability of success</strong> (the project is always associated with more risks than the operational activities).</p>
<div>
<table>
<tr>
<th>Process (operational activities)</th>
<th>Project </th>
</tr>
<tr>
<td>
<ul>
<li>usual results </li>
<li>stable business process </li>
<li>lack of big risks </li>
<li>relatively stable team (staff)</li>
</ul>
</td>
<td>
<ul>
<li>unique results</li>
<li>finite duration</li>
<li>a lot of risks</li>
<li>flexible project team</li>
</ul>
</td>
</tr>
</table>
</div>
<p>Types of projects for the company:</p>
<ol>
<li>economic (target - money);</li>
<li>social (target - people).</li>
</ol>
<p>The main features of the project:</p>
<ul>
<li>the presence of a target;</li>
<li>the presence of a change in some system;</li>
<li>time limitations (there is always a start and an end to a project);</li>
<li>unique (by the set of stages);</li>
<li>limited resources required (there is a resource consumption specification and schedule);</li>
<li>specific organization.</li>
</ul>
<blockquote>
<p><strong>Task 5.</strong> Think about which of the following is relevant to the project and which one (social or economic): construction of a residential building, production of new products in the factory, operation of the power plant, education, driving, family life, department management, repair of the room.</p>
<p><strong>Task 6.</strong> Describe your experience with the project. If not, make up one.</p>
</blockquote>
<p>Reasons for the project implementation:</p>
<ul>
<li>possibility</li>
<li>problems</li>
</ul>
<p>It is important to separate these reasons, the justification and design of the project depend on them. Special attention must be given to these reasons: <strong>time, budget and quality</strong> (as they say, choose any 2, but our goal is to consider all 3).</p>
<p>The most common reasons for failure of the project:</p>
<ul>
<li>inappropriate resources;</li>
<li>wrong deadlines;</li>
<li>poor communication;</li>
<li>lack of focus and development of the project stages;</li>
<li>lack of funding;</li>
<li>lack of management tools;</li>
<li>lack of involvement of project leadership.</li>
</ul>
<p>A project is successful when and only when it is <strong>completed</strong>:</p>
<ul>
<li>in due time;</li>
<li>within budget;</li>
<li>with satisfactory results (in terms of goals and objectives);</li>
</ul>
<h3 id="3-2">3.2 Phases and processes inside a project</h3>
<p><a href="#0-TOC">TOC</a></p>
<p>The <strong>phases and processes</strong> in a project are necessary for management</p>
<ol>
<li>integration - to the program or global process (initial project development work: documentation, description, project management plan, monitoring);</li>
<li>content - place all necessary works in the project (content planning, work structures, content change management);</li>
<li>deadlines - make work on time (schedule, duration, composition and interaction between operations);</li>
<li>cost - stay within budget;</li>
<li>quality - the project met the needs for which it was created (quality assurance and control, policies, goals and responsibilities);</li>
<li>human resources - organization and management of the team;</li>
<li>communications - preparation, collection, distribution, storage, selection and final placement of information;</li>
<li>risks - analysis, response, monitoring and management of risks to increase the probability of success.</li>
</ol>
<p><strong>Project phases</strong> - this is a massive blocks (you can think about them as a table of content), which are the same for every project. They are logically connected activities, which leads to predefined result.</p>
<p><em>Project Life Cycle</em> - a set of ordered project phases. Often may depend on the project itself and the necessary controls.</p>
<p><em>Result</em> - a measurable, tactile and controllable output of the project. It is often used in a narrower sense, as something that requires approval by the project sponsor or the customer.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig7.png" alt="project phases" width="900px"/>
</td>
<td>
<i>
Fig. 7. Level of effort and impact on the project, taking into account the main phases (to simplify the initializing and defining phases and Implementing and Supervisory control phases are combined). *
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p>* This project description also include implementation phase, which is not mentioned in GOSTs No 4-8 because of different point of view (when we management the project we do not implement it but define description of the project).</p>
</blockquote>
<p><strong>3.2.1 Initializing & Defining phases (phase I + D)</strong></p>
<ul>
<li>collection of baseline data and analysis of the current status (literature review) to identify the need for changes;</li>
<li>
<p>project identification:</p>
</li>
<li>
<p>goals, objectives, results;</p>
</li>
<li>basic requirements, limitations and criteria;</li>
<li>risk level;</li>
<li>the project environment, potential participants (it is important, let’s consider more details below);</li>
<li>time, resources, funds, etc.</li>
<li>identification and comparison of alternatives to the project;</li>
<li>approving the concept for the next phase.</li>
</ul>
<p>The result is approval for the start of the project and the creation of a <strong>project summary</strong>. The definition of common project summary show in <em>Table 3</em>.</p>
<p><em>Table 3. Common content of the project summary</em></p>
<div>
<table>
<tr>
<th> Item</th>
<th> Requirements</th>
</tr>
<tr>
<td> Name </td>
<td> Interesting, intriguing, relevant to the content </td>
</tr>
<tr>
<td> Relevance <br>
(Why, what do we want?) </td>
<td> Problem solution (in operational activity) or realization of potential: <br>
- why is it necessary to realize the project? <br>
- why is this possibility important and priority? <br>
Major problem need to be describe, digitize (make measurable) and visualize </td>
</tr>
<tr>
<td> Target (aim) </td>
<td> How much the target will solve or reduce the problems (for more - see below) </td>
</tr>
<tr>
<td> Implementation result </td>
<td> What specific improvement/changing will the sponsor/customer receive </td>
</tr>
<tr>
<td> Stages </td>
<td> Technology for project implementation (important!) - a brief plan of concrete actions and <br>
intermediate expected results </td>
</tr>
<tr>
<td> Sponsor/Customer </td>
<td> Who invests resources </td>
</tr>
<tr>
<td> Users </td>
<td> The public that the project will influence </td>
</tr>
<tr>
<td> Team </td>
<td> Developers (both internal and external) - describe as clearly as possible, <br>
as far as positions and full names. </td>
</tr>
<tr>
<td> Deadlines </td>
<td> Development and implementation from the moment of approval to the final stage in months. <br>
If the project is long - specify the intermediate deadlines for the stages. </td>
</tr>
<tr>
<td>Budget (expected)</td>
<td>Cost and number of investments and estimated economic effect <br>
(i.e. the period when the investment will start to pay off) </td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Note.</strong> It is always important to receive information on the subject of the project from the outside (at least an expert evaluation).</p>
<p><strong>Note.</strong> If the project is targeted at solving the problem, evaluation and numerical data are always assumed. Especially when there are evaluation adjectives (more, less, etc.) - you need numerical data.</p>
</blockquote>
<p>The <strong>goal of the project</strong> - is the main part of every project and should satisfy <strong>S.M.A.R.T.</strong> ideology!</p>
<div>
<table>
<tr>
<th> S </th>
<th> Specific </th>
<th> Does it give a clear idea of what should be achieved? </th>
</tr>
<tr>
<td> M </td>
<td> Measurable </td>
<td> Are there quantitative or qualitative criteria for achievement? </td>
</tr>
<tr>
<td> A </td>
<td> Achievable </td>
<td> How real is it in terms of objective conditions and possibilities? </td>
</tr>
<tr>
<td> R </td>
<td> Relatable </td>
<td> What does it relate to other goals? </td>
</tr>
<tr>
<td> T </td>
<td> Time Limited </td>
<td> When should the goal be achieved? </td>
</tr>
</table>
</div>
<p><strong>Examples:</strong></p>
<div>
<table>
<tr>
<th> SMART goals </th>
<th> NOT goals </th>
</tr>
<tr>
<td> - reduce the level of staff attrition to 10% by the beginning of the second quarter of 2016. <br>
- to ensure a monthly sales volume of 5 million rubles by May 1, 2020. <br>
- to take second place in the regional competition "1-2-3" this year. </td>
<td> - work better. <br>
- to participate in the competition.<br>
- motivate the staff.<br>
- to work as planned. </td>
</tr>
</table>
</div>
<p><strong>Project participants</strong></p>
<p>Once again, it is necessary to specify as much as possible any information in the project - including all participants, up to the department, positions and full names. Interaction between project participants show in fig. 8.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig8.png" alt="project participants" width="900px"/>
</td>
<td>
<i>
Fig. 8. Interaction between project participants. Dashed lines mean that 2 participants may or may not be the same person.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Note</strong>. <strong>Project Initiator</strong> is the author or owner of the main idea (and usually he/she prepare preliminary justification of the proposal).</p>
</blockquote>
<p>More detail about participants explain in <em>Table 4</em>.</p>
<p><em>Table 4. Participants ant they roles</em>.</p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-88nc{font-weight:bold;border-color:inherit;text-align:center}
.tg .tg-xldj{border-color:inherit;text-align:left}
.tg .tg-0pky{border-color:inherit;text-align:left;vertical-align:top}
</style>
<table class="tg">
<tr>
<th class="tg-88nc">Role</th>
<th class="tg-88nc">Description</th>
</tr>
<tr>
<td class="tg-xldj">Project Initiator (promoter)</td>
<td class="tg-xldj">Author of idea or main stakeholder (interested party)</td>
</tr>
<tr>
<td class="tg-0pky">Customer</td>
<td class="tg-0pky">Decision making on project opening; implementation monitoring; budget allocation; <br>
key decisions on the problems, which are not included in the competence of the Curator and Project Manager; <br>
approval of the final report and decision making on closing.</td>
</tr>
<tr>
<td class="tg-0pky">Sponsor</td>
<td class="tg-0pky">Providing resources to the project. May be the customer.</td>
</tr>
<tr>
<td class="tg-0pky">Beneficiary</td>
<td class="tg-0pky">Responsible for quality control and acceptance of project results. Future user of project results.</td>
</tr>
<tr>
<td class="tg-0pky">Consultant (tutor = internal <br>
consultant, expert)</td>
<td class="tg-0pky">Responsible for initiating, monitoring and controlling implementation. Participates in the coordination of key events <br>
of the project and participates in develop of the final conclusion.</td>
</tr>
<tr>
<td class="tg-0pky">Supervisor</td>
<td class="tg-0pky">Responsible for the achievement of project goals, as well as for efficient and cost-effective use of project resources.</td>
</tr>
<tr>
<td class="tg-0pky">Project team</td>
<td class="tg-0pky">Are responsible for the fulfillment of the supervisor's instructions</td>
</tr>
<tr>
<td class="tg-0pky">Interested parties</td>
<td class="tg-0pky">Persons who fall into the zone of interest of the project (not always the beneficiaries, the effect of project may be negative for they). </td>
</tr>
</table>
</div>
<p>I should point out that it is useful to analyze all interested parties (stakeholders) in terms of the impact matrix on the project.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig9.png" alt="impact matrix" width="900px"/>
</td>
<td>
<i>
Fig. 9. Impact matrix.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Task 8.</strong> Describe your relationship with A-to-G people involving in your project.</p>
</blockquote>
<p><strong>2.2 Development & planning phase (P)</strong></p>
<ul>
<li>appointing a supervisor, forming a team and responsible people;</li>
<li>establishing contacts and studying goals, motivations and requirements of the customer/sponsor and other key participants;</li>
<li>
<p>concept development and core content development:</p>
</li>
<li>
<p>final result;</p>
</li>
<li>quality standards;</li>
<li>structure;</li>
<li>basic works;</li>
<li>
<p>resources.</p>
</li>
<li>
<p>planning:</p>
</li>
<li>
<p>decomposition into simple stages;</p>
</li>
<li>calendar plans;</li>
<li>estimate and budget;</li>
<li>resource requirement;</li>
<li>control technique;</li>
<li>risk identification and allocation.</li>
<li>tendering and contracting;</li>
<li>presentation and performance of basic design and construction (CAD) works;</li>
<li>obtaining approval for the next step.</li>
</ul>
<p>Let’s pay more attention to <strong>Management of project content</strong>, which includes:</p>
<ul>
<li>Content planning.</li>
<li>Content definition (detailed description).</li>
<li>Creating a hierarchical work structure (Work Breakdown Structure, <strong>WBS</strong>).</li>
<li>Validating the content (formalizing and documenting).</li>
<li>Content change management.</li>
</ul>
<p><strong>Project plan</strong> - formal and approved document that can be used to manage project execution (can be corrected in process). Composition:</p>
<ul>
<li>Basis for project fulfillment.</li>
<li>Description of the approach to project management.</li>
<li>Description of goals.</li>
<li>WBS.</li>
<li>Valuation and scheduled deadlines (including valuation methods).</li>
<li>Allocation of responsible persons (up to WBS level).</li>
<li>Major control events and their dates.</li>
<li>Key and required personnel.</li>
<li>Key risks and planned response to each one.</li>
<li>Management plans for project components (objectives, resources, contracts, risks, interactions, staff).</li>
<li>Open issues and delayed decisions.</li>
</ul>
<p><strong>Additional information in the project plan</strong>:</p>
<ul>
<li>Limitations and assumptions.</li>
<li>Technical documentation (requirements, specifications, project documentation).</li>
<li>Standards and regulations involved.</li>
</ul>
<blockquote>
<p><strong>Note.</strong> It is always a good practice to pin project plan in the most viewed and visited place of your team. </p>
</blockquote>
<p>Let’s consider the hierarchical structure of the project (Work Breakdown Structure, WBS), which divide the project into natural elements to ensure control and management.</p>
<p>Work Breakdown Structure (WBS) rules:</p>
<ol>
<li>Lower-level works are the way to achieve upper-level works.</li>
<li>There can only be one parent work for each child.</li>
<li>For each level, the jobs must be equal (e.g. volume, time, etc.).</li>
<li>Different decomposition criteria can and should be applied at different levels (<strong>important difference from usual classification!</strong>).</li>
</ol>
<p>The decomposition stops if for the level:</p>
<ul>
<li>the work is clear and understandable to the manager and project participants;</li>
<li>the final result of the work is clear as well as the ways to achieve it;</li>
<li>the time characteristics and responsibility for the work can be clearly defined.</li>
</ul>
<p>Main structure and example of WBS are shown on fig. 10.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Drive_Proj/chsu_auto_drive-proj_fig9.png" alt="WBS" width="900px"/>
</td>
<td>
<i>
Fig. 10. Work Breakdown Structure (WBS)
</i>
</td>
</tr>
</table>
</div>
<p><strong>Management of project deadlines</strong> - ensures that the project is completed on time:</p>
<ul>
<li>determining the composition of operations;</li>
<li>defining the interrelationships of operations;</li>
<li>estimating the resources of operations;</li>
<li>estimating the duration of operations;</li>
<li>developing a schedule (taking into account the sequence of operations, their duration, resource requirements and time limits);</li>
<li>schedule management.</li>
</ul>
<p>For these purposes is often used the Gantt Chart, a graphical representation of the project plan (schedule). It looks like horizontal bars, located between two axes: list of tasks vertically and dates horizontally. It is quite easy to build in MS Excel or LibreOffice Calc by painting over the corresponding cells. You can find a lot of examples in the internet.</p>
<p><strong>3.2.3 Implementing and supervising phase (S)</strong></p>
<ul>
<li>tenders (organizing or conducting);</li>
<li>work fulfillment;</li>
<li>launch of communication between participants;</li>
<li>launch of the motivation (incentive) system for participants;</li>
<li>detailed design and technical specifications of works;</li>
<li>operative planning of works;</li>
<li>informative control over work progress;</li>
<li>material and technical support management;</li>
<li>monitor and forecast of work progress (quality, duration, cost, etc);</li>
<li>solution of arising problems.</li>
</ul>
<p><strong>Management and control</strong> for the project. I recommend you to do the following:</p>
<ol>
<li>Go through the plan again. Before starting each stage, clarify with each participant its tasks and responsibilities.</li>
<li>Evaluate what has already been done in terms of work, time, labor input and costs. Compare it with the plane (preferably with project participants).</li>
<li>Take corrective actions if plan changes is required.</li>
<li>Informing people about the progress of the project.</li>
</ol>
<p>The following data are needed to analyze the progress of the schedule:</p>
<ul>
<li>ID-s and descriptions of events.</li>
<li>Names of responsible persons.</li>
<li>Estimated and actual dates of events to be achieved.</li>
</ul>
<p>All the necessary information for monitoring can be displayed in the table (<em>Table 5</em>).</p>
<p><em>Table 5. Example of data for monitoring</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-hgcj{font-weight:bold;text-align:center}
.tg .tg-s268{text-align:left}
</style>
<table class="tg">
<tr>
<th class="tg-hgcj" rowspan="2"> Job </th>
<th class="tg-hgcj" rowspan="2"> Responsible </th>
<th class="tg-hgcj" colspan="2"> Start date </th>
<th class="tg-hgcj" colspan="2"> End date </th>
<th class="tg-hgcj" rowspan="2"> Comment </th>
</tr>
<tr>
<td class="tg-hgcj"> plane </td>
<td class="tg-hgcj"> actual </td>
<td class="tg-hgcj"> plane </td>
<td class="tg-hgcj"> actual </td>
</tr>
<tr>
<td class="tg-s268"> Survey development </td>
<td class="tg-s268"> Ivanov A. </td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"> Critical path </td>
</tr>
<tr>
<td class="tg-s268"> Carrying out a pilot survey </td>
<td class="tg-s268"> Petrov V.</td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
</tr>
<tr>
<td class="tg-s268"> Instruction printing </td>
<td class="tg-s268"> Ivanov A.</td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
<td class="tg-s268"></td>
</tr>
</table>
</div>
<p>When you choose the periodicity of observations, I recommend you to consider:</p>
<ul>
<li>whether the job are on a critical path (whether the timing of the next job depends on it);</li>
<li>whether the task has significant risks;</li>
<li>if there are preliminary difficulties for similar tasks.</li>
</ul>
<p>The work should be supervised at least once a month.</p>
<p><strong>The project’s qualification list</strong> is a convenient form of displaying the qualification and knowledge of team members. It is recommended to use the following scheme:</p>
<ul>
<li>basic qualification (what person can do as a leader);</li>
<li>additional qualification (what person can do under the management of the leader);</li>
<li>interest shown (desire of the employee to perform certain tasks).</li>
</ul>
<p>Example is shown on the Table 6.</p>
<p><em>Table 6. Example of qualification list</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-s6z2{text-align:center}
.tg .tg-hgcj{font-weight:bold;text-align:center}
</style>
<table class="tg">
<tr>
<th class="tg-s6z2"></th>
<th class="tg-s6z2"> designer <br> (Ivanov A) </th>
<th class="tg-s6z2"> analyst <br> (Petrov P) </th>
<th class="tg-s6z2"> programmer <br> (Sidorov S) </th>
<th class="tg-s6z2"> HR-manager <br> (Ivanov B) </th>
</tr>
<tr>
<td class="tg-hgcj"> develop of technical documents </td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"> basic qualification/ <br> shown interest </td>
<td class="tg-s6z2"> shown interest </td>
</tr>
<tr>
<td class="tg-hgcj"> interviewing </td>
<td class="tg-s6z2"> shown interest </td>
<td class="tg-s6z2"> shown interest </td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"> basic qualification/ <br> shown interest </td>
</tr>
<tr>
<td class="tg-hgcj"> graphical design </td>
<td class="tg-s6z2"> basic qualification/ <br> shown interest </td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"> additional qualification </td>
<td class="tg-s6z2"> shown interest </td>
</tr>
<tr>
<td class="tg-hgcj"> surveys development </td>
<td class="tg-s6z2"> additional qualification </td>
<td class="tg-s6z2"> additional qualification </td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"> basic qualification </td>
</tr>
</table>
</div>
<p>As a guide for creating qualification table you can use follow statements:</p>
<ol>
<li>Make a complete list of skills that may be required for the future project.</li>
<li>Create a complete list of people for the table.</li>
<li>Invite people from the list to evaluate their skills and interest in all areas of the project.</li>
<li>Invite the direct supervisors of these people to evaluate their professional qualities in the necessary areas.</li>
<li>Compare the data, make adjustments.</li>
<li>Compile the final version of the qualification list.</li>
</ol>
<p><strong>Responsibility Matrix</strong> - used to display the links between the performed jobs and project members, as well as establishes the degree of responsibility. The <strong>A.R.C.I.</strong> method is used for drawing up.</p>
<p><strong>A.R.C.I. method (<em>Table 7</em>)</strong>:</p>
<ul>
<li><strong>Accountable</strong> - fully responsible for the execution of the stage/task, has the right to make decisions on the way of implementation (only one person can be assigned).</li>
<li><strong>Responsible</strong> - performs the task, is not responsible for the choice of the method of its solution, is not responsible for the quality and timing of implementation (there can be more than one person).</li>
<li><strong>Consultant before doing</strong> - provides consultations during the solution of the project tasks, controls the quality of implementation.</li>
<li><strong>Inform after doing (observer)</strong> - can provide consultations in the course of solving the project tasks, is not responsible. He is informed after carrying out of jobs.</li>
</ul>
<p><em>Table 7. Example of A.R.C.I. method</em></p>
<div>
<table>
<tr>
<th> Operations </th>
<th> Ivanov </th>
<th> Petrov </th>
<th> Sidorov </th>
<th> Kuznecov </th>
<th> Sergeev </th>
</tr>
<tr>
<td> Task 1 </td>
<td> R </td>
<td> A</td>
<td> C </td>
<td> I </td>
<td> I </td>
</tr>
<tr>
<td> Task 2 </td>
<td> A </td>
<td> C </td>
<td> C </td>
<td> R </td>
<td> I </td>
</tr>
<tr>
<td> Task 3 </td>
<td> C </td>
<td> A </td>
<td> I </td>
<td> R </td>
<td> R </td>
</tr>
<tr>
<td> Task 4 </td>
<td> C </td>
<td> I </td>
<td> A </td>
<td> C </td>
<td> I </td>
</tr>
</table>
</div>
<p><strong>Valuation of the project cost</strong> can perform in several ways.</p>
<ol>
<li>
<p><strong>Expert Judgment</strong> - attraction of experts from the project area. After their makes proposals, we average them and come to a single solution during the discussion.</p>
</li>
<li>
<p><strong>Three Point Estimation</strong> - on the basis of pessimistic (P), optimistic (O), and realistic (R) future we calculate an average score:</p>
</li>
</ol>
<p><span class="math">\(E = \frac{O+4R+P}{6}\)</span>.</p>
<p>Note that P, O and R are determined by expert opinion. P, O and R measure in hours/days/currency and calculate during the team discussion based on questions: “how long will the project take if there are no risks?”, “what can be the most negative scenario?” etc.</p>
<ol start="3">
<li>
<p><strong>Analogous Estimation (from top to bottom)</strong> - based on past experience, including decomposition of the project.</p>
</li>
<li>
<p><strong>Bottom-up Estimation</strong> - estimates the cost of each operation, then sums it up to the total cost of the project.</p>
</li>
<li>
<p><strong>Parametric Model</strong> - one of the most accurate and flexible methods. We build a parametric model (based on past experience, available data, metrics and statistics), which is used to forecast.</p>
</li>
<li>
<p><strong>Cost of Quality</strong> - the total cost of creating a project (which is product or service) calculate according to quality standards. This approach is not common and works only if our project have some regulatory documentation.</p>
</li>
</ol>
<p><strong>Risk management</strong> - includes processes related to the identification, analysis and response to project risks in order to increase the probability and impact of positive events and reduce the probability of negative events of the project.</p>
<p><strong>Project Risk</strong> - An uncertain event or condition that has a positive or negative impact on at least one of the project objectives (e.g. timing, cost, content or quality) if it occurs.</p>
<p>The risk management scheme may include (<em>Table 8</em>):</p>
<ul>
<li>risk management methodology;</li>
<li>roles and responsibilities of those who are involved in risk management;</li>
<li>budget for risk management;</li>
<li>defining the frequency of risk management procedures;</li>
<li>threshold criteria for recognizing the occurrence of risk;</li>
<li>risk categories;</li>
<li>probability and impact matrices for risks;</li>
<li>reports of templates.</li>
</ul>
<p><em>Table 8. Example of risk management scheme.</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-s6z2{text-align:center}
.tg .tg-hgcj{font-weight:bold;text-align:center}
</style>
<table class="tg">
<tr>
<th class="tg-hgcj"> No </th>
<th class="tg-hgcj"> Risks </th>
<th class="tg-hgcj"> Risk influence </th>
<th class="tg-hgcj"> Probability </th>
<th class="tg-hgcj"> Influence on ... <br>
(e.g. timing, cost, results, etc.) </th>
<th class="tg-hgcj"> Minimization procedures </th>
<th class="tg-hgcj"> Owner of risk </th>
</tr>
<tr>
<td class="tg-hgcj">1</td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
</tr>
<tr>
<td class="tg-hgcj">...</td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
<td class="tg-s6z2"></td>
</tr>
</table>
</div>
<p>Example of typical risk are shown in <em>Table 9</em> (according to regulatory documentation of JSC “Apatite” STO 8.1-16-2018).</p>
<p><em>Table 9. Example of risk description.</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-1wig{font-weight:bold;text-align:left;vertical-align:top}
.tg .tg-hgcj{font-weight:bold;text-align:center}
.tg .tg-5ua9{font-weight:bold;text-align:left}
.tg .tg-s268{text-align:left}
.tg .tg-0lax{text-align:left;vertical-align:top}
</style>
<table class="tg">
<tr>
<th class="tg-hgcj"> Risk category / type of project </th>
<th class="tg-hgcj"> Typical structure of risks </th>
</tr>
<tr>
<td class="tg-hgcj" colspan="2"> Risks, which are applicable to all types of organizational change projects </td>
</tr>
<tr>
<td class="tg-5ua9"> Content management </td>
<td class="tg-s268"> - Inaccuracy/incomplete determination of project goals, objectives and results.<br>
- Change of requirements at late stages of the project implementation.<br>- Inaccuracy of the provided source information.<br>
- Poor quality/incomplete elaboration of documents and project results. <br>
- Not achieving project goals, objectives and results. </td>
</tr>
<tr>
<td class="tg-5ua9"> Deadlines management </td>
<td class="tg-s268"> - Insufficient planning at the initial stages of the project implementation.<br>
- Absence of baseline data for detailed planning.<br>
- Lack of resources to implement the project within the specified time frame. <br>
- Uncoordinated actions of the project team.<br>
- Lack of joint planning with interconnected projects.<br>
- Untimely provision of project needs by structural units and related projects.<br>
- Prolonged review and approval of project documents. </td>
</tr>
<tr>
<td class="tg-5ua9"> Contracts management </td>
<td class="tg-s268">- Long terms of the tender selection and signing a contract with an external consultant. <br>
- The reluctance of an external consultant to accept all the conditions of the model contract. <br>
- Impossibility to ensure permanent presence of specialists at the Customer's facilities.<br>
- Violation of the terms and conditions of contracts by the Contractor. </td>
</tr>
<tr>
<td class="tg-5ua9"> Human resources management </td>
<td class="tg-s268">- Insufficient qualification of employees / lack of necessary expertise.<br>
- Lack of resources to implement the project within the specified time frame. <br>
- Change in the structure of the project team from the Customer or the Contractor.<br>
- Absence of a "real" time resource for the working group members.
- Lack of real authority from the project supervisor.</td>
</tr>
<tr>
<td class="tg-5ua9"> Macroeconomic </td>
<td class="tg-s268">- Fluctuation of the USD exchange rate.<br>
- Changes in prices for raw materials and products.<br>
- Increase in inflation, wage growth, tax increases, etc.</td>
</tr>
<tr>
<td class="tg-hgcj" colspan="2"> Risks, which are associated with organizational change projects of a certain type </td>
</tr>
<tr>
<td class="tg-5ua9"> Strategy/Concepts development </td>
<td class="tg-s268">- Choosing the wrong approach to activity analysis.<br>
- Not all factors are taken into account during development.<br>
- Insufficient planning to implement the strategy.</td>
</tr>
<tr>
<td class="tg-5ua9"> Creation of a new unit </td>
<td class="tg-s268">- Incorrect estimates of the number of employees and their job duties.<br>
- Inability to hire staff for available vacancies. <br>
- Difficulty in obtaining the necessary licenses and permits. </td>
</tr>
<tr>
<td class="tg-1wig"> New business process implementation</td>
<td class="tg-0lax">- The desire of external participants to not accept the proposed changes. <br>
- The reluctance of line managers to make the necessary changes in processes. </td>
</tr>
<tr>
<td class="tg-1wig"> Increase/decrease in staff productivity </td>
<td class="tg-0lax">- The reluctance of line managers to make the necessary changes in the processes. <br>
- Lack of the necessary statistics.<br>
- Lack of technical expertise for certain types/groups of equipment.</td>
</tr>
</table>
</div>
<p>The evaluation of the negative impact of risks on the project is given in the <em>Table 10</em>.</p>
<p><em>Table 10. Evaluation of risks impact.</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-glna{background-color:#fffe65;text-align:left;vertical-align:top}
.tg .tg-hgcj{font-weight:bold;text-align:center}
.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
.tg .tg-57mh{background-color:#ffffc7;text-align:left}
.tg .tg-og4q{background-color:#fd6864;text-align:left;vertical-align:top}
</style>
<table class="tg">
<tr>
<th class="tg-hgcj"> Object/Influence </th>
<th class="tg-hgcj"> Very low <br> 0.05 </th>
<th class="tg-amwm"> Low <br> 0.1 </th>
<th class="tg-amwm"> Moderate <br> 0.2 </th>
<th class="tg-amwm"> Hight <br> 0.4 </th>
<th class="tg-amwm"> Very hight <br> 0.8 </th>
</tr>
<tr>
<td class="tg-hgcj"> Cost </td>
<td class="tg-57mh"> Insignificant increase </td>
<td class="tg-glna"> Increase < 10%</td>
<td class="tg-glna"> Increase 10-20%</td>
<td class="tg-og4q"> Increase 20-40%</td>
<td class="tg-og4q"> Increase > 40%</td>
</tr>
<tr>
<td class="tg-hgcj"> Deadlines </td>
<td class="tg-57mh"> Insignificant increase </td>
<td class="tg-glna"> Increase < 5%<br></td>
<td class="tg-glna"> Increase 5-10 %</td>
<td class="tg-og4q"> Increase 10-20 %</td>
<td class="tg-og4q"> Increase > 20%</td>
</tr>
<tr>
<td class="tg-hgcj"> Contents </td>
<td class="tg-57mh"> Changes are not visible </td>
<td class="tg-glna"> Insignificant increase</td>
<td class="tg-glna"> Significant changes </td>
<td class="tg-og4q"> Unacceptable change for client </td>
<td class="tg-og4q"> Achieving the final results is impossible </td>
</tr>
<tr>
<td class="tg-hgcj"> Quality </td>
<td class="tg-57mh"> Changes are not visible </td>
<td class="tg-glna"> Insignificant increase </td>
<td class="tg-glna"> Changes require client's approval </td>
<td class="tg-og4q"> Unacceptable change for client </td>
<td class="tg-og4q"> Achieving the final results is impossible </td>
</tr>
</table>
</div>
<p><strong>Risk and threat strategies</strong> for the project:</p>
<ul>
<li><strong>Risk avoidance</strong> - a change in the project plan to eliminate the risk or to protect project objectives from impacts.</li>
<li><strong>Transfer of risk</strong> - transfer of the risk impact to a third party (does not eliminate, but transfers the control). Usually an insurance benefit is charged for risk transfer. Example - insurance of capital assets.</li>
<li><strong>Risk reduction</strong> - reducing the probability of the risk or its consequences to an acceptable level.</li>
<li><strong>Risk acceptance</strong> - is the strategy under which the risk is accepted. The project team does not try to influence the risk.</li>
</ul>
<p><strong>3.2.4 Accomplishing (A), final phase</strong></p>
<ul>
<li>planning the close of process;</li>
<li>product testing;</li>
<li>preparation for product exploitation (personnel, documentation);</li>
<li>evaluation of results and summarizing (preparation of final documents);</li>
<li>conflict handling;</li>
<li>accumulation and storage of actual and test data for future projects;</li>
<li>team disbandment.</li>
</ul>
<p>Sometimes it is good to self-evaluate your project (or make a open survey for all involving people and experts). <strong>Criteria for project evaluation</strong> are shown in <em>Table 11</em>.</p>
<p><em>Table 11. Table of project evaluation criteria</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-s6z2{text-align:center}
.tg .tg-hgcj{font-weight:bold;text-align:center}
.tg .tg-s268{text-align:left}
.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
.tg .tg-0lax{text-align:left;vertical-align:top}
</style>
<table class="tg">
<tr>
<th class="tg-s6z2"> No </th>
<th class="tg-hgcj"> Subject of evaluation </th>
<th class="tg-hgcj"> Criteria of evaluation </th>
<th class="tg-hgcj"> Mark* </th>
</tr>
<tr>
<td class="tg-hgcj"> 1 </td>
<td class="tg-s268"> Project difficulty </td>
<td class="tg-s268"> - the scope of the solved problem. </td>
<td class="tg-s268"></td>
</tr>
<tr>
<td class="tg-hgcj"> 2 </td>
<td class="tg-s268"> Project development </td>
<td class="tg-s268"> - how detailed the project is developed?<br>
- are efficiency indicators available (preferably in numbers)?<br>
- are project actions correspond to its objectives? </td>
<td class="tg-s268"></td>
</tr>
<tr>
<td class="tg-hgcj"> 3 </td>
<td class="tg-s268">Justification of solution choice according to alternatives.</td>
<td class="tg-s268">- are choice of solutions justified (according to alternatives)?</td>
<td class="tg-s268"></td>
</tr>
<tr>
<td class="tg-hgcj"> 4 </td>
<td class="tg-s268"> Economic reasonability </td>
<td class="tg-s268">- are the proposed solution and budget relevant to the scale of the problem (according to it negative consequences)?</td>
<td class="tg-s268"></td>
</tr>
<tr>
<td class="tg-amwm"> 5 </td>
<td class="tg-0lax"> Risk management </td>
<td class="tg-0lax"> - are project risks minimized? </td>
<td class="tg-0lax"></td>
</tr>
<tr>
<td class="tg-amwm"> 6 </td>
<td class="tg-0lax"> Effectivity of proposed solution </td>
<td class="tg-0lax"> - are proposed actions corresponding to estimated result? </td>
<td class="tg-0lax"></td>
</tr>
<tr>
<td class="tg-amwm">7</td>
<td class="tg-0lax"> Effective presentation </td>
<td class="tg-0lax">- Understandable story.<br>
- Logic of the speech (clarity of structure).<br>
- Ability to justify your position.<br>
- Confidence in answering the questions.<br>
- Quality of presentation design.<br></td>
<td class="tg-0lax"></td>
</tr>
</table>
</div>
<p>*<em>Rating scale: 1 (criterion not applicable), 2 (below average), 3 (satisfactory), 4 (above average), 5 (ideal).</em></p>
<h3 id="3-3">3.3 For the notes and final records</h3>
<p><a href="#0-TOC">TOC</a></p>
<p>In the course of the project implementation, next change requests will be able to arise:</p>
<ul>
<li>corrective actions;</li>
<li>preventive actions;</li>
<li>error correction;</li>
<li>updates.</li>
</ul>
<p>Moreover, will be able to change:</p>
<ul>
<li>project results;</li>
<li>project content;</li>
<li>project management plan;</li>
<li>project documentation.</li>
</ul>
<p>Monitoring (reporting) and control (comparing states) of the project’s works are a continuous processes of monitoring, analyzing and managing progress, which involves the following aspects:</p>
<ul>
<li>comparing the current progress with the plan;</li>
<li>progress assessment to identify whether correction or warning is needed;</li>
<li>analysis, tracking and monitoring of risks;</li>
<li>identification of a reliable and up-to-date information base about project products and related documentation;</li>
<li>identification and provision of information for reporting;</li>
<li>presentation and calculation of project development forecasts.</li>
</ul>
<p>So, I think you have already read everything that I have found and posted on this resource. That is quite enough in my opinion. But here’s the question, the outside world is not limited to my and your opinions) So let’s hear what other people think about project management and how our ideas match up. So please have fun with <a href="https://stepik.org/course/2376/">the course</a> which you will have to read/listen and do all the tasks on it) And only that will be quite enough (for now). So, good luck, project managers!</p>
<h2 id="4">4. Practice, tasks and labs (not necessary needed)</h2>
<p><a href="#0-TOC">TOC</a></p>
<p>For all those who need it, I bring a number of practical and theoretical tasks about this course. All of them are given in <em>Table 12</em> (concrete tasks should be taken from me by headmen of groups personally).</p>
<p>Tasks that meet in the text do not need to be performed and sent to me, but they will meet at the colloquium or examination.</p>
<p><em>Table 12. Practice, tasks and labs</em></p>
<div>
<table>
<tr>
<th> No </th>
<th> Name </th>
<th> Comments </th>
</tr>
<tr>
<td> 1 </td>
<td> <a href="../../../extra/blog/education/ChSU/drive_proj_test_0.xls" download> Entry control </a> </td>
<td> - </td>
</tr>
<tr>
<td> 2 </td>
<td> <a href="https://stepik.org/course/2376/"> Complete the course (need the screenshot or link to certificate) </a> </td>
<td> - </td>
</tr>
<tr>
<td> 3 </td>
<td><a href="http://www.pmservices.ru/project-management-news/top-7-metodov-upravleniya-proektami-agile-scrum-kanban-prince2-i-drugie/"> Practical task No 1 (Different project management systems). </a> To learn about different project management systems, make a table with a brief description, advantages and disadvantages of each of them (In Russ.). </td>
<td> - </td>
</tr>
<tr>
<td> 4 </td>
<td><a href="https://trello.com"> Practical task No 2 (Practice of working in a Kanboard system using Trello.com as an example). </a> Register on Trello.com and create any project at your choice. </td>
<td> - </td>
</tr>
<tr>
<td> 5 </td>
<td><a href="https://trello.com"> Practical task No 3 (Practice of working in a Kanboard system using Trello.com as an example).</a> Organize a meeting with invited participants (no need to invite real people, just know how to do it), date, agenda and notification. You can use <a href="https://blog.paperpile.com/trello-uses-for-researchers/"> this site</a>, as an instruction. </td>
<td> - </td>
</tr>
<tr>
<td> 6 </td>
<td><a href="https://trello.com"> Practical task No 4 (Practice of working in a Kanboard system using Trello.com as an example).</a> Create research project. You can use <a href="https://medium.com/@bettstetter/using-trello-in-academia-fd0462b6b5a6"> this site</a>, as an instruction. </td>
<td> - </td>
</tr>
</table>
</div>
<h2 id="5">5. Literature</h2>
<p><a href="#0-TOC">TOC</a></p>
<ol>
<li>GOST R 54869-2011 Project management. Requirements to project management (in Russ).</li>
<li>GOST R 54870-2011 Project management. Requirements for project portfolio management (in Russ).</li>
<li>GOST R 54871-2011 Project management. Requirements for program management (in Russ).</li>
<li>GOST R 56715.1-2015 Project management. Project management systems. Part 1. Main provisions (in Russ).</li>
<li>GOST R 56715.2-2015 Project management. Project management systems. Part 2. Processes and process model (in Russ).</li>
<li>GOST R 56715.3-2015 Project management. Project management systems. Part 3. Methods.(in Russ).</li>
<li>GOST R 56715.4-2015 Project management. Systems of project management. Part 4: Methods. Data and data model (in Russ).</li>
<li>GOST R 56715.5-2015 Project management. Project management systems. Part 5. Terms and definitions (in Russ).</li>
<li>GOST R ISO 21500-2014 Project Management Guide (in Russ).</li>
<li>Course <a href="https://stepik.org/course/2376/">“Basic of project management”</a> on stepic.org (in Russ).</li>
<li>Set of sites about project management systems: <a href="https://blog.paperpile.com/trello-uses-for-researchers/">Trello for Researchers</a>, <a href="https://medium.com/@bettstetter/using-trello-in-academia-fd0462b6b5a6">Using Trello in academia</a>, <a href="https://vc.ru/flood/12674-preply-trello">Some guys’ personal experience (in Russ)</a>, <a href="http://www.pmservices.ru/project-management-news/top-7-metodov-upravleniya-proektami-agile-scrum-kanban-prince2-i-drugie/">Top 7 methods of project management: Agile, Scrum, Kanban, PRINCE2 and others (in Russ)</a>.</li>
<li>Of course <a href="https://en.wikipedia.org/wiki/Project_management">Wiki</a> - a good place to start and search the direction of further studies.</li>
<li>Some examples and calculation <a href="https://www.simplilearn.com/calculating-eac-article">of projects’ parameters</a>.</li>
<li><a href="https://www.wsdot.wa.gov/publications/fulltext/projectmgmt/pmog/pm_glossary.pdf">Project management glossary of terms</a>.</li>
<li>Good translator <a href="https://www.deepl.com/translator">deepl.com</a>.</li>
<li>Creator of <a href="https://www.tablesgenerator.com/html_tables">html tables</a>.</li>
<li>Creator of <a href="https://app.diagrams.net/">diagrams</a>.</li>
</ol>
<p>Thank you for your attention!</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>Мои доклады и конференции2018-08-02T00:00:00+03:002020-07-01T00:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2018-08-02:/ru/blog/science-conference.html<p>В данной заметке собраны основные конференции и некоторые конкурсы, в которых я принимал участие. Приведены названия работ и материалы к ним.</p>
<h2 id="0-TOC">Оглавление</h2>
<ol>
<li><a href="#1">Второй съезд аналитиков России, 2013, г. Москва, Россия</a></li>
<li><a href="#2">VIII Всероссийская конференция по рентгеноспектральному анализу, 2014, г. Иркутск, Россия</a></li>
<li><a href="#3">Третий съезд аналитиков России, 2017, г. Москва, Россия</a></li>
<li><a href="#4">11th Winter …</a></li></ol><p>В данной заметке собраны основные конференции и некоторые конкурсы, в которых я принимал участие. Приведены названия работ и материалы к ним.</p>
<h2 id="0-TOC">Оглавление</h2>
<ol>
<li><a href="#1">Второй съезд аналитиков России, 2013, г. Москва, Россия</a></li>
<li><a href="#2">VIII Всероссийская конференция по рентгеноспектральному анализу, 2014, г. Иркутск, Россия</a></li>
<li><a href="#3">Третий съезд аналитиков России, 2017, г. Москва, Россия</a></li>
<li><a href="#4">11th Winter symposium on chemometrics (WSC11), 2018, Saint Petersburg, Russia</a></li>
<li><a href="#5">5th International Congress on Microscopy & Spectroscopy (INTERM), 2018, Oludeniz, Turkey</a></li>
<li><a href="#6">I Всероссийская конференция с международным участием «Математическое и компьютерное моделирование в науке о материалах”, 2019, г. Череповец, Россия</a></li>
<li><a href="#7">3rd International Conference on Information Processing and Control Engineering (ICIPCE), 2019, Moscow, Russia</a></li>
<li><a href="#8">Международная научно-практическая конференция АО “НИУИФ”: 100 лет развития науки и производства, 2019, г. Череповец, Россия</a></li>
<li><a href="#9">III Всероссийская конференция по аналитической спектроскопии с международным участием, 2019, г. Туапсе, Россия</a></li>
<li><a href="#10">3rd International Conference on Automation, Control and Robots (ICACR), 2019, Prague, Czech Republic</a></li>
<li><a href="#11">Ночь наук, 2019, г. Кировск, Россия</a></li>
<li><a href="#12">The 4th International Conference on Mechanical, System and Control Engineering (ICMSC), 2020, Kazan, Russia</a></li>
</ol>
<h2 id="1">1. Второй съезд аналитиков России, 2013, г. Москва, Россия</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p><strong>1.1</strong> Постерный доклад.</p>
<p>Юновидов Д.В., Ребрикова А.Т., Осколок К.В., Соколов В.В. Рентгенофлуоресцентное определение технологически важных элементов в экстракционной фосфорной кислоте // Второй съезд аналитиков России. Москва. Россия. 2013. Тезисы. С. 289.</p>
<p><strong>1.2</strong> Постерный доклад.</p>
<p>Юновидов Д.В., Ребрикова А.Т., Осколок К.В., Соколов В.В. Техника виртуального эксперимента для количественного рентгенофлуоресцентного анализа экстракционной фосфорной кислоты // Второй съезд аналитиков России. Москва. Россия. 2013. Тезисы. С. 290.</p>
<h2 id="2">2. VIII Всероссийская конференция по рентгеноспектральному анализу, 2014, г. Иркутск, Россия</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p><strong>2.1</strong> <a href="../../extra/blog/science/site_science_conf-irkutsk-stend.pdf">Постерный доклад</a>.</p>
<p>Юновидов Д. В., Эль-Салим С. З., Осколок К. В. Техника виртуального эксперимента и её применение для количественного рентгенофлуоресцентного анализа экстракционной фосфорной кислоты // VIII Всероссийская конференция по рентгеноспектральному анализу. Иркутск, Россия. 2014 г. Тезисы. С. 140.</p>
<p><strong>2.2</strong> <a href="../../extra/blog/science/site_science_conf-irkutsk-speech.pdf">Устный доклад</a>.</p>
<p>Юновидов Д. В., Эль-Салим С.З., Осколок К.В. Восстановление спектра гомогенной системы по временным зависимостям интенсивностей линий в зарождающейся и развивающейся гетерогенной системе на примере экстракционной фосфорной кислоты // VIII Всероссийская конференция по рентгеноспектральному анализу. Иркутск. Россия. 2014 г. Тезисы. C. 139. (Оформление презентации убрано специально).</p>
<h2 id="3">3. Третий съезд аналитиков России, 2017, г. Москва, Россия</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p><strong>3.1</strong> <a href="../../extra/blog/science/site_science_conf-3-an-congress_poster.pdf">Постерный доклад</a>.</p>
<p>Юновидов Д.В., Соколов В.В., Бахвалов А.С. Использование спектра NPKS удобрений для оценки значимости стадий пробоподготовки для рентгенофлуоресцентного анализа // Третий съезд аналитиков России. Москва. Россия. 2017. <a href="http://www.wssanalytchem.org/car2017/Publications/2017-Abstracts.pdf">Тезисы</a>. С. 243.</p>
<h2 id="4">4. 11th Winter symposium on chemometrics (WSC11), 2018, Saint Petersburg, Russia</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<embed src="../../extra/certificates-awards/aw_certif-WSC11_2018.pdf" width="600px" height="1000px" />
</td>
<td>
<i>
Рис. 1. Сертификат.
</i>
</td>
</tr>
</table>
</div>
<p><strong>4.1</strong> <a href="../../extra/blog/science/site_science_conf-wsc11-poster.pdf">Постерный доклад</a>.</p>
<p>D. Yunovidov, V. Sokolov, A. Bahvalov Big data analysis and comprehensive analytical control of fertilizers // 11 Winter School of Chemometrics (WSC 11). Saint Petersburg. Russia. 2018. <a href="http://wsc.chemometrics.ru/media/files/conferences/wsc11/abstracts/abstract__yunovidov_dmitry.pdf">Theses</a>.</p>
<h2 id="5">5. 5th International Congress on Microscopy & Spectroscopy (INTERM), 2018, Oludeniz, Turkey</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<embed src="../../extra/certificates-awards/aw_certif-INTERM_2018.PDF" width="1000px" height="600px"/>
</td>
<td>
<i>
Рис. 2. Сертификат.
</i>
</td>
</tr>
</table>
</div>
<p><strong>5.1</strong> <a href="../../extra/blog/science/site_science_conf-interm-poster.pdf">Постерный доклад</a>.</p>
<p>D. Yunovidov, V. Sokolov, A. Bahvalov Optical addition to X-ray Fluorescence Analysis of Mineral Fertilizers // 5th International Congress on Microscopy & Spectroscopy (INTERM). Oludeniz. Turkey. 2018. Theses.</p>
<p><a href="http://przyrbwn.icm.edu.pl/APP/PDF/135/app135z5p69.pdf">Научная работа (статья)</a>.</p>
<h2 id="6">6. I Всероссийская конференция с международным участием «Математическое и компьютерное моделирование в науке о материалах", 2019, г. Череповец, Россия</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../extra/certificates-awards/aw_certif-conf-chsu_2019.jpg" alt="сертификат" wight="600px"/>
</td>
<td>
<i>Рис. 3. Сертификат</i>
</td>
</tr>
</table>
</div>
<p><strong>6.1</strong> <a href="../../extra/blog/science/site_science_conf-chsu-speech.pdf">Устный доклад</a>.</p>
<p>D.V. Yunovidov Multidimensional classification method of industrially produced mineral fertilizers for the representation of the “manufacturer–quality” model // Математическое и компьютерное моделирование в науке о материалах. Череповец. Россия. 2019. Тезисы.</p>
<p><strong>6.2</strong> <a href="../../extra/blog/science/site_science_conf-chsu-poster-1.pdf">Постерный доклад</a>.</p>
<p>Надежин М.Н., Юновидов Д.В., Шабалов В.А., Соколов В.В. Моделирование и оценка связи гранулометрического состава с различными параметрами производства минеральных удобрений по схеме барабан-гранулятор-сушилка (на примере диаммонийфосфата) // Математическое и компьютерное моделирование в науке о материалах. Череповец. Россия. 2019. Тезисы.</p>
<p><strong>6.3</strong> <a href="../../extra/blog/science/site_science_conf-chsu-poster-2.pdf">Постерный доклад</a>.</p>
<p>Сидорова Е.Е., Юновидов Д.В., Соколов В.В. Гранулометрический состав как параметр моделирования технологического процесса производства минеральных удобрений по схеме барабанный гранулятор-сушилка // Математическое и компьютерное моделирование в науке о материалах. Череповец. Россия. 2019. Тезисы.</p>
<h2 id="7">7. 3rd International Conference on Information Processing and Control Engineering (ICIPCE), 2019, Moscow, Russia</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<embed src="../../extra/certificates-awards/aw_certif-ICIPCE_2019.PDF" width="1000px" height="600px"/>
</td>
</tr>
<tr>
<td>
<embed src="../../extra/certificates-awards/aw_certif-ICIPCE-exellent_2019.PDF" width="1000px" height="600px"/>
</td>
</tr>
<tr>
<td>
<i>
Рис. 4. Сертификаты.
</i>
</td>
</tr>
</table>
</div>
<p><strong>7.1</strong> <a href="../../extra/blog/science/site_science_conf-icipce_2019.pdf">Устный доклад</a>.</p>
<p>D.V. Yunovidov, M.N. Nadezhin, V.A. Shabalov Pattern recognition in the differentiated image for the powder and granulated materials particle size classification // 3rd International Conference on Information Processing and Control Engineering. Moscow. Russia. 2019. Theses.</p>
<p><a href="../../extra/blog/science/site_science_conf-icipce-speech_2019.pdf">Текст доклада</a>.</p>
<p><a href="https://iopscience.iop.org/article/10.1088/1757-899X/630/1/012026/pdf">Научная работа (статья)</a>.</p>
<h2 id="8">8. Международная научно-практическая конференция АО "НИУИФ": 100 лет развития науки и производства, 2019, г. Череповец, Россия</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<embed src="../../extra/certificates-awards/aw_certif-NIUIF100_2019.PDF" width="600px" height="1000px" />
</td>
<td>
<i>
Рис. 5. Сертификат.
</i>
</td>
</tr>
</table>
</div>
<p><strong>8.1</strong> <a href="../../extra/blog/science/site_science_conf-niuif-100-speech-1_2019.pdf">Устный доклад</a>.</p>
<p>Юновидов Д.В. Современные методы автоматизированного экспресс контроля при анализе качества минеральных удобрений // Международная научно-практическая конференция АО “НИУИФ”: 100 лет развития науки и производства. Череповец. Россия. 2019. Тезисы.</p>
<p><strong>8.2</strong> <a href="../../extra/blog/science/site_science_conf-niuif-100-speech-2_2019.pdf">Устный доклад</a>.</p>
<p>Юновидов Д.В. Современные методы анализа минеральных удобрений, сырья и полупродуктов // Международная научно-практическая конференция АО “НИУИФ”: 100 лет развития науки и производства. Секция аналитическая химия. Череповец. Россия. 2019. Тезисы.</p>
<h2 id="9">9. III Всероссийская конференция по аналитической спектроскопии с международным участием, 2019, г. Туапсе, Россия</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p><strong>9.1</strong> <a href="../../extra/blog/science/site_science_conf-tuapse-poster_2019.pdf">Постерный доклад</a>.</p>
<p>Юновидов Д.В., Сидорова Е.Е., Надежин М.Н., Соколов В.В. Оптический контроль качества промышленной обработки минеральных удобрений кондиционирующими добавками // III Всероссийская конференция по аналитической спектроскопии с международным участием. Краснодар. Россия. 2019. Тезисы.</p>
<p><strong>9.2</strong> <a href="../../extra/blog/science/site_science_conf-tuapse-poster-2_2019.pdf">Постерный доклад</a>.</p>
<p>Юновидов Д.В. Классификационный и регрессионный анализ марок минеральных удобрений // III Всероссийская конференция по аналитической спектроскопии с международным участием. Краснодар. Россия. 2019. Тезисы.</p>
<h2 id="10">10. 3rd International Conference on Automation, Control and Robots (ICACR), 2019, Prague, Czech Republic</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<embed src="../../extra/certificates-awards/" width="600px" />
</td>
<td>
<i>
Рис. 6. Сертификат.
</i>
</td>
</tr>
</table>
</div>
<p><strong>10.1</strong> <a href="../../extra/blog/science/site_science_conf-icacr_2019.pdf">Устный доклад</a>.</p>
<p>D.V. Yunovidov, V.A. Shabalov, V.V. Sokolov Method of Industrial Automated Optical-electronic Control of Granulometric Composition of Mineral Fertilizers // 3rd International Conference on Automation, Control and Robots. Prague. Czech Republic. 2019. Theses.</p>
<p><a href="../../extra/blog/science/site_science_conf-icacr-speech_2019.pdf">Текст доклада</a>.</p>
<p><a href="https://dl.acm.org/doi/abs/10.1145/3365265.3365268">Научная работа (статья)</a>.</p>
<h2 id="11">11. Ночь наук, 2019, г. Кировск, Россия</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p><strong>11.1</strong> <a href="../../extra/blog/science/site_science_conf-night-science-speech.pdf">Устный доклад</a>.</p>
<p>Юновидов Д.В. “НИУИФ - история и современность” // Ночь наук. Кировск. Россия. 2019.</p>
<h2 id="12">12. The 4th International Conference on Mechanical, System and Control Engineering (ICMSC), 2020, Kazan, Russia</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<embed src="../../extra/certificates-awards/aw_certif-ICMSC_2020.pdf" width="600px" height="1000px"/>
</td>
</tr>
<tr>
<td>
<embed src="../../extra/certificates-awards/aw_certif-ICMSC-SC_2020.pdf" width="1000px" height="600px"/>
</td>
</tr>
<tr>
<td>
<i>
Рис. 7. Сертификаты.
</i>
</td>
</tr>
</table>
</div>
<p><strong>12.1</strong> <a href="../../extra/blog/science/site_science_conf-icmsc_2020.pdf">Устный доклад</a></p>
<p>D.V. Yunovidov, K.A. Menshikov, E.E. Sidorova Robotic control system for particle size distribution of industrially produced mineral fertilizers // The 4th International Conference on Mechanical, System and Control Engineering. Kazan. Russia. 2020. Theses.</p>
<p><a href="../../extra/blog/science/site_science_conf-icmsc-speech_2020.pdf">Текст доклада</a>.</p>
<p>Научная работа принята к публикации в журнале IJMERR (International Journal of Mechanical Engineering and Robotics Research | http://www.ijmerr.com/).</p>Experiments and data2019-12-09T10:00:00+03:002020-06-28T12:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2019-12-09:/blog/education-ChSU-technology-experiment_data.html<p>Greetings to everyone who interested in this topic!</p>
<p>This section is dedicated to the basics of experiment planning and analysis of the acquired data. This is the core of any scientific and analytical work. However, I do not see much difference in what kind of science or discipline it will …</p><p>Greetings to everyone who interested in this topic!</p>
<p>This section is dedicated to the basics of experiment planning and analysis of the acquired data. This is the core of any scientific and analytical work. However, I do not see much difference in what kind of science or discipline it will be. In fact, we conduct experiments and process data all the time. So, I will try to make this course as useful and meaningful as possible, regardless of the field of application. After all, we are all scientists and engineers in ordinary life (the question is: good or bad?). We solve various optimization tasks (e.g. how to get a higher salary), accumulate data through observations and draw conclusions from our own experience.</p>
<p><strong>The goal</strong> of the course is to develop a general theoretical and practical vision of science, data and experiment.</p>
<p><strong>Main objectives</strong> are:</p>
<ol>
<li>Show the terminology and logic of experiments in science.</li>
<li>Describe the features of the experiment in terms of the investigated factors.</li>
<li>Define effective ways of carrying out the experiment and obtaining information in order to optimize the system response.</li>
<li>Provide an introduction to statistics and processing of the results.</li>
<li>Introduce the building of linear regression models.</li>
<li>Consider and solve some problems and examples, which are related to the course topic.</li>
</ol>
<p>Many tasks and definitions in this module are taken from excellent courses from [coursera.org] (https://www.coursera.org/) and [stepic.org] (https://stepik.org/) (more in the reference list), as well as from various analytical chemistry’s textbooks and manuals. All presented material has been studied, structured and redesigned based on my own experience and reflects my subjective point of view.</p>
<h2>1. Introduction. Science and scientific approach</h2>
<p>Well, science and scientific approach, what is this?</p>
<p><strong>Science</strong> - systematic representation about structure and organization of all “knowledge” (information) about our life and Universe with the possibility of <strong>verification and prediction</strong>.</p>
<p>As we know from ancient Greek’s philosophy, we have only two option to study our environment: <strong>the observation and the experiment</strong> (I really can’t see any controversies about this assumption in nowadays).</p>
<p>The <strong>scientific activity</strong> can be described as “data collection through observations and experiments”. Besides, they are constantly updated, systematized and analysed. The consequence is the acquisition (synthesis) of new knowledge and laws of our World. In other words, on the basis of data, we create theories and hypotheses that are confirmed/confronted by observations or experiments. Thus, we can assume the following cycle of scientific cognition (Fig. 1, Table 1).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_1.png" alt="science cycle" width="900px"/>
</td>
<td>
<i>
Fig. 1. Relations in "science cycle".
</i>
</td>
</tr>
</table>
</div>
<p><em>Table 1. The terms of scientific study</em></p>
<div>
<table>
<tr>
<th></th>
<th>apply to unit or small amount</th>
<th>apply to all cases</th>
</tr>
<tr>
<td>describe <b>what</b> is happening </td>
<td>observation</td>
<td>law</td>
</tr>
<tr>
<td>describe <b>why</b> it is happening</td>
<td>hypothesis</td>
<td>theory</td>
</tr>
</table>
</div>
<p>As a general rule, in any science we will <strong>work on hypotheses and theories, operating with laws and observations (data)</strong>.</p>
<p>At the same time, we should not forget that the <strong>basic tool of description</strong> and classification of any phenomenon is mathematics. To work effectively in the modern world, we need one more tool - programming. I advise you not to forget about it and then your competence will be high.</p>
<p>The experiment itself is an essential part of science and our lives. It is the <strong>planned observation (made for a purpose)</strong>. We all conduct experiments in our daily lives. As one teacher said, if you stop experimenting, you are disappointed in life. And that means it’s time to start any movement and experiment again.</p>
<blockquote>
<p><strong>The challenge.</strong> Think about it, have you experimented recently? What does an experiment mean to you?</p>
</blockquote>
<p>Here’s a good example of an experiment. Let us grow the plant in front of our monitor and set the goal to optimize its growth. First of all, we should analyze how the growth is expressed: length, number of leaves, weight, etc.. Then, you need to determine factors (or features) that can affect the length of the plant: water amount for irrigation, irrigation frequency, soil type, plant pot type, fertilizer type, fertilizer amount, light, temperature, etc…</p>
<p>Thus, we have obtained quite a few factors, which can affect to our system. We need to understand which factors (or its combination) will allow us to achieve the goal.</p>
<p>From this example, we can see what we will face next. We will have to plan and describe our experiments, as well as process the data and demonstrate whether it is statistically correct (representative).</p>
<p>To successfully plan an experiment we need to understand the theory of examined field of knowledge as well as its terminology (in order to set goals and define factors correctly). In addition, it is important to use the scientific cycle, which is described earlier. Shall we begin?</p>
<h2>2. Experiments, systems and factors</h2>
<h3>2.1 Introduction and terminology</h3>
<p>During the experiment, our goal is <strong>outcome(s)</strong>, what we want to know/optimize/represent in <strong>numeric form</strong> (i.e. measured). Synonym of the outcome is <strong>response</strong> of the system.</p>
<p><strong>Factors (features, variables)</strong> -variable properties, which are supposed to determine the result of the experiment.</p>
<p>All experiments should have at least 1 changeable (and measurable) factor. And the more number of factors we take into account, the better (in the general case).</p>
<p>The <strong>factors themselves are divided into</strong>:</p>
<ul>
<li>quantitative (numeric) - can be measured and compared (e.g. ordered by increasing/decreasing);</li>
<li>qualitative (categorical, nominal) - are determine the type of objects, but cannot be numeric compare.</li>
</ul>
<p>Sometimes there are also the rank factors, which determine the type as qualitative variables, but they can be compared to each other (for example, the place in the competition). However, only quantitative or qualitative values are used to analyze results in major cases. Rank values are used to calculate various statistical criteria.</p>
<blockquote>
<p><strong>Example</strong>. Let’s consider a classical example of building an experiment and processing its results. We want to increase the profit of the store (<span class="math">\(= \text{revenue} - \text{expenses}\)</span>) and we think that it will be influenced by 2 factors: the illumination of the room (we can set the dimmer at 50 \% and 75 \%) and the price of goods (let’s say 7.79 \<span class="math">\( or 8.49 \\)</span>). So we are faced with a <strong>two-factor experiment</strong>.</p>
<p>Note that such experiment should be carried out 4 times (for example, every Monday). <strong>It’s not enough just to change one feature one time (3 experiments), you need to add one more - when both features change at once</strong>. It will 2 times increase quantity of the received information and allow to compare influence of both features on experiment result. Further we will see the reason why.</p>
<p>While planning the experiment, we should use a special table (Table 2). The sequence of data in the table are called the <strong>standard test sequence</strong>.</p>
<p><em>Table 2. Example of the experiment data</em></p>
</blockquote>
<div>
<table>
<thead>
<tr>
<th>No</th>
<th>real No</th>
<th>Dimmer, %</th>
<th>Price</th>
<th>Profit, $</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>3</td>
<td>50</td>
<td>Low</td>
<td>490</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td>75</td>
<td>Low</td>
<td>570</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
<td>50</td>
<td>High</td>
<td>370</td>
</tr>
<tr>
<td>4</td>
<td>2</td>
<td>75</td>
<td>High</td>
<td>450</td>
</tr>
</tbody>
</table>
</div>
<blockquote>
<p>Once we’ve recorded the results, we can start analyzing them. For example, the effect of light brightness at low price is 80 \<span class="math">\( (difference between dim and bright light). The same effect at a high price is 80 \\)</span>. So, we <strong>observe</strong> the increase of profit by 80 \$ from the illumination effect. You can see that the effect is the same at different price levels.</p>
<p>Same for the price effect: in dim light it goes to 120 \<span class="math">\(, in bright light it goes to 120 \\)</span>. Thus, when the price of the goods increases, the profit falls (in our case only).</p>
<p><strong>The challenge.</strong> What do you think might go wrong? What factors we didn’t take into consideration and what else might affect profit? Is our experiment reproducible (will we get the same results just repeating our experiment)?</p>
</blockquote>
<p>It is interesting that for the above example, many people would not do 4 experiments, but 3. As the first experiment, they would choose low light and low price. Further, they would carry out the second experiment (increase the brightness of light at a constant price). Then, they would return to an initial point and would carry out the third experiment (increase only the price).</p>
<p>A lot of people will think that’s the way to do experiments. Because you only change one factor per time. You were trained to do that at school and university. You can only change one parameter at a time. But in general, <strong>you don’t have to do that</strong>!</p>
<p>If you limit yourself to these three experiments, you will get only one evaluation of the effect of light and only one evaluation of the effect of price. However, by carry out one more experiment we will be able to evaluate both effects twice (when both factors are increased). In total, we will get two estimates of illumination effect and two estimates of price effect on profit. Therefore, by adding just one additional experiment, we will actually double the received information.</p>
<blockquote>
<p><strong>Note</strong>. We have described a so-called “full factor experiment”. However, the example of a “fixed” experiment approach (when we change only one factor with fixed other factors) is very common in analytical chemistry. In case of calibration line, we change only one variable (analytical signal) under fixed conditions and calculate only one response (concentration). Why we can do this? What additional experimental work needs to be done before it is possible to fix other factors?</p>
</blockquote>
<p>For further study we will need a number of terms and the concept of measurement error.</p>
<p>The generation of the set of our object observations is <strong>measurement process</strong>. The recording of observation in certain unit is <strong>quantitative analysis/the measurement</strong> (it is comparison with the established standard, e.g. when we measure something with a ruler). Thus, a quantitative measurement is a recorded result of a comparison in a certain units. <strong>Qualitative analysis</strong> is simply a relative result of comparison without units (more or less, there is an object or not). Sometimes you can read about semi-quantitative analysis, which is not very precise quantitative analysis (but better than nothing).</p>
<h4>2.1.1 Accuracy and precision (repeatability)</h4>
<p>We have arrived at the basic concepts of experimental data processing: <strong>accuracy and precision</strong>. These terms can be better explained by the analogy with targets for shooting (Fig. 2).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_2.png" alt="accuracy and repeatability (variance)" width="900px"/>
</td>
<td>
<i>
Fig. 2. Examples of accurate and precise shooting. From left to right: accurate and precise, not accurate but "precise", and not precise but accurate in average.
</i>
</td>
</tr>
</table>
</div>
<p><strong>Accuracy</strong> indicates the closeness of the obtained result to the absolute value, and <strong>precise</strong> indicates closeness to the previous obtained result. Precise and accuracy are evaluated using a very important and useful tool - <strong>statistics</strong> (field of mathematics).</p>
<p>To estimate the accuracy of the obtained result, we can use the concept of <strong>absolute and relative error</strong>.</p>
<p><strong>Absolute error</strong> can be measured as <span class="math">\(a = x_{true} − x_{our}\)</span>, where <span class="math">\(x_{true}\)</span> - the true value (usually we didn’t know it and use referent or average values), <span class="math">\(x_{our}\)</span> - measured value. As you can see, <em>the absolute error measured in the same unit as x</em>.</p>
<p><strong>Relative error</strong> can be measured as <span class="math">\(\Delta = \frac{x_{true} - x_{our}}{x_{true}}\)</span> and use relative unit or percent (if we multiply it with 100 \%).</p>
<p>Precision is defined a bit more complex and we will return to it in part 3 of this course.</p>
<p>It is worth saying that there are only <strong>2 nature of error</strong>: <strong>random</strong> (due to the statistical nature of measurements, which is always present in our imperfect world) and <strong>systematic</strong> (due to the action of some constant disturbance force, which can be corrected).</p>
<blockquote>
<p><strong>Note.</strong> The prevalence of a “fixed” approach in analytical chemistry is caused by the fact that it provides greater accuracy and precision of the obtained results. However, before selecting the most significant factor and fixing all the others, it is necessary to carefully examine the system. This is what factor experiments are used for. In addition, factor experiment dominates in other fields of knowledge, including chemical technology.</p>
</blockquote>
<h4>2.1.2 Some words about the rules for result presentation</h4>
<p>The <strong>significant digits and round rules</strong> are important concept of any nature sciences. In other words, it is necessary to show how many digits in the result have real physical justification. Other digits should be dropped (we will not lose the accuracy).</p>
<p><strong>The number of significant digits determines the error of the experiment</strong> (and vice versa, the measurement result is rounded to the same digit as the absolute error with one significant digit).</p>
<blockquote>
<p><strong>Example.</strong> If, due to the experiment we get 100.1, 99.8 and 100.2 M of concentration for standard sample with justified concentration of 100.0 M, then average absolute error is: <span class="math">\(\frac{\sum |x_i - 100|}{3} = \frac{0.1 + 0.2 + 0.2}{3} = 0.16666.. \approx 0.2\)</span>. Thus, our average experimental value is: <span class="math">\(\frac{100.1 + 99.8 + 100.2}{3} = 100.0333... = 100.0\)</span>.</p>
<p>Such result is usually wrote as <span class="math">\(100.0 \pm 0.2\)</span>. Last digit is not precisely define and can take any value within the limits of the experimental error <span class="math">\(x \in [99.8; 100.2]\)</span>.</p>
</blockquote>
<p>The significant numbers are very useful for the natural sciences. They allow us to simplify some stages of the experiment and make it more reproducible. They also can show our colleagues the accuracy of our research. For example, <strong>if we know the accuracy for our experiment (e.g. 4 significant numbers for 10.00 M), then we can weight our reagent with that accuracy (4 significant numbers also, like 10.50 g, without 4 digits after dot)</strong>.</p>
<p>We show you below some rules for significant digits. If you want to understand and remember it, you <strong>have to think about error concepts</strong>. The <strong>last significant digit contains the absolute error of experiment</strong>.</p>
<ul>
<li>Each digit other than 0 is significant (for example, 237 - 3 significant digits, 129.7 - 4 significant digits).</li>
<li>0 before not 0 digits - not significant (0.0165 - 3 significant digits). In this case it is better to apply <strong>“scientific” or exponential number record</strong>: <span class="math">\(1.65 \cdot 10^{-1}\)</span>.</li>
<li>0 to decimal point - you can’t say for sure, that’s not how a scientist should write (you shouldn’t write 10, you should write it as <span class="math">\(1.0 \cdot 10\)</span>). Unfortunately, I meet such a record very often in my practice. If you found such record too (e.g. 3700 units), then a person, who made it is not familiar with the practice of significant digits and just rounded experimental result up to the integer. You can only drop this number or analyze the experiment and set the number of significant digits by yourself (use the weighting accuracy or absolute error).</li>
<li>In other cases 0 is significant (85,950 - 5 significant digits, 12.06 - 4 significant digits).</li>
</ul>
<blockquote>
<p><strong>Note.</strong> <strong>The scientific (exponential) record of a number</strong> always involves a single digit to the decimal point and the exact indication of significant digits after it (e.g. <span class="math">\(1.650 \cdot 10^{-10}\)</span> or <span class="math">\(2.740 \cdot 10^{5}\)</span>). I strongly recommend you always using it in experimental practice.</p>
<p><strong>Example.</strong> Mass of sample is 0.1 g. If you had weighted it with analytical scale with <span class="math">\(\pm 0.0001\)</span> g error, then you has to write your result as <span class="math">\(0.1000 = 1.000 \cdot 10^{-1}\)</span> g.</p>
</blockquote>
<p>Moreover, there are some <strong>arithmetic rules for significant digits</strong>. They allows us to preserve physical sens in calculation and in finished result.</p>
<ul>
<li>Add/subtract - use absolute categories (number size is important). Leave as many digits after the decimal point as there are in the summand with the smallest number of decimal digits (i.e. accuracy is limited by the number, which have <strong>the bigger absolute uncertainty</strong>). Remember, the last significant digit carries an uncertainty, which limits everything else and when we add/subtract numbers such effect will be proportional to the size of number.</li>
<li>Multiplication/division - use relative categories (at multiplication or division the uncertainty of the limiting number is proportionally transferred to the result). The number of significant digits of the result will be equal to the minimum number of significant digits of the participants (i.e. the accuracy is limited by the number, which have the <strong>bigger relative uncertainty</strong>). If the number of significant digits of participants are the same, the accuracy is limited by the number, which have the smallest <strong>mantissa</strong> (the absolute value, which is equal to all ordered digits of number).</li>
</ul>
<blockquote>
<p><strong>Example.</strong> For <span class="math">\(0.0304 \times 5.43\)</span> mantissa of 1st number is 304, and mantissa of second number is 543. So, the 0.0304 is number, which limit accuracy (it’s relative error is bigger, then relative error of 5.43).</p>
</blockquote>
<ul>
<li>Logarithmization - logarithmic number and mantissa (in case of logarithmization it is the result of logarithm) contain the same number of significant digits.</li>
</ul>
<blockquote>
<p><strong>Example.</strong> Let’s calculate the pH value of <span class="math">\(2.0 \cdot 10^{-3}\)</span> M of HCl solution. The base of logarithm and 10’s degree are the exact values. Then the result is:</p>
</blockquote>
<div class="math">$$
pH(2.0 \cdot 10^{-3}) = -lg(2.0 \cdot 10^{-3}) = -(lg(2.0) -3) = -(0.30 - 3) = 2.70
$$</div>
<blockquote>
<p>Note, that due to the addition of an absolutely accurate value of 3, the final result have 3 significant digit - more, than the initial value (the absolute measurement error remained the same, but the relative error decreased).</p>
</blockquote>
<ul>
<li>Exponentiation - multiplication of numbers with the same number of significant digits. The number of significant digits in the result will be the same as in initial value.</li>
<li>Root of number - can be represented as a result in absolute degree, i.e. multiple multiplication of the result. The number of significant digits will thus remain the same as in the initial value.</li>
</ul>
<div class="math">$$
\sqrt{x} = a \\
x = a^2
$$</div>
<ul>
<li>We follow the arithmetic order as in mathematics.</li>
<li>To avoid accumulation of an error, the result is rounded only at the end of the whole calculation. In intermediate calculations we leave the number of significant digits + 1. In the final result, this additional digit is rounded up.</li>
</ul>
<blockquote>
<p><strong>Note.</strong> The above calculation rules with significant digits are nothing but an approximation for the error of the result. For this reason, it is extremely unwise to perform many calculations for values with errors (especially exponentiation, taking the root and logarithms) - the more such operations, the more uncertain our final result is in reality. The arithmetical rules for significant digits can be strictly justified on the basis of the law of error propagation (but we will certainly not do it).</p>
<p><strong>Note.</strong> The results of gravimetric and titrimetric determinations are in most cases recorded as numbers with 4 or 2 significant digits, which is related to the error of measurement of the mass of substances (e.g. <span class="math">\(\pm 0.0001\)</span> g) and volumes of solutions (e.g. <span class="math">\(\pm 0.03\)</span> ml). However, the number of significant digits strongly depends on the initial weight of the analyzing sample.</p>
<p><strong>Note.</strong> Experimental result and its error should have the same digits after decimal dot (e.g. <span class="math">\(10.1 \pm 0.1\)</span>).</p>
</blockquote>
<p><strong>Rules of rounding</strong>:
* we round up to the number of significant digits (the last digit has an uncertainty);
* if the rounded digit is more than five or less, round it up to the appropriate side;
* if the rounded digit is 5, we round it up to the nearest even digit (if we need to round up only one digit 5: <span class="math">\(10.5 \approx 10\)</span>, but this is not the case if we round up 2 digits <span class="math">\(10.51 \approx 11\)</span>);
* do not round up intermediate calculations, leave the required number of significant digits + 1.
* always remember that <strong>significant digits is an absolute measurement error of the value</strong> and you should work with them accordingly to described rules.</p>
<blockquote>
<p><strong>Example.</strong> Calculate the result:</p>
</blockquote>
<div class="math">$$
\frac{(\frac{97.7}{32.42} \cdot 100.0) + 36.04}{687} = \\
\frac{301_{.4} + 36.04}{687} = \frac{337_{.4}}{687} = 0.0491_1 = 0.0491
$$</div>
<h3>2.2 Analysis of two-factor experiment</h3>
<p>I hope, that I was able to show you how to record the results of experiments and convinced you about the importance of factor experiments in our lives. It’s time to move on to studying and analyzing them.</p>
<p>Let’s take the popcorn as an example. We will try to optimize the number of popped kernels. The good thing about this experiment is that you can repeat it at home. If you don’t understand something, you can feel free to write to me or watch [the course] (https://www.coursera.org/learn/experimentation) where this experiment is analyzed in more detail.</p>
<p>Well, we have 2 investigated factors in such experiment. This factors can take 2 values each: A - heating time (160 and 200 s) and B - type of kernels (yellow and white). We can easily calculate that the number of experiments will be 4.</p>
<blockquote>
<p><strong>Note.</strong> In general, you can use the following formula: <span class="math">\(f^v = 2^2 = 4\)</span>, where <span class="math">\(f\)</span> is the number of factors and <span class="math">\(v\)</span> is the number of values, which each factor can have (according to another area of mathematics, combinatorics). In our case, we will always use the same number of levels for factors, consider it a kind of requirement for such plans of experiments.</p>
</blockquote>
<p>Let us make a table of the experiment (Table 3) and denote - and + (low and high) level of factors (for the categorical factor order does not matter, we can choose any). Then for A: <em>-: 160, +: 200</em>, for B: <em>-: White, +: Yellow</em>.</p>
<blockquote>
<p><strong>Note</strong>. For informative results, it is important to:</p>
<ul>
<li><strong> do not use extremes</strong> for factors (otherwise they will be affected by many influences and will differ too much from each other, which will increase errors);</li>
<li><strong> always carry out experiments in random order!</strong> This is the only way to get rid of the systematic error and the additional connections between the values.</li>
</ul>
</blockquote>
<p><em>Table 3. The results of a two-factor popcorn experiment.</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-baqh{text-align:center;vertical-align:top}
.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
</style>
<table class="tg">
<thead>
<tr>
<th class="tg-amwm">Standard order</th>
<th class="tg-amwm">Random order (real)</th>
<th class="tg-amwm">A - time \*</th>
<th class="tg-amwm">B - corn</th>
<th class="tg-amwm">Results</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-baqh">1<br>2<br>3<br>4</td>
<td class="tg-baqh">3<br>1<br>4<br>2</td>
<td class="tg-baqh">-<br>+<br>-<br>+</td>
<td class="tg-baqh">-<br>-<br>+<br>+</td>
<td class="tg-baqh">52<br>74<br>62<br>80</td>
</tr>
</tbody>
</table>
</div>
<p>* you should use the standard order for changing the level of factors. First, we change the 1st factor all the time, then we change the 2nd factor in matching order.</p>
<p>So, we have results, and now is good time for analysis. It’s always a good idea to start with visualization (this is how we think). The visualization of factor experiment is called <strong>cube plot (graph, chart)</strong>. It is shown in Fig. 3.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_3.png" alt="cube plot" width="900px"/>
</td>
<td>
<i>
Fig. 3. Cube plot of 2 factor popcorn-experiment with isolines (contour lines).
</i>
</td>
</tr>
</table>
</div>
<p>This plot shows the effect of each factors in corresponding square or cube corner (2 or 3 factor experiment respectively).</p>
<p>Let’s start with <strong>heating time effect</strong>. When you increase the cooking time for yellow popcorn, the result increases from 62 to 80 popped kernels (PK). Therefore, we see an increase by 18 units. For white popcorn we see a rise from 52 to 74 PK, which is an increase by 22 units. So, on average, we see an increase by 20 units when the heating time increases from 160 to 200 seconds.</p>
<p>Then let’s estimate the difference between the two types of popcorn. We fix heating time and look at the effect of switching from white to yellow popcorn: from 74 to 80 for 200 sec. and from 52 to 62 for 160 sec. On the average we see increase by 8 units during change from white to yellow popcorn. Make sure that your interpretation matches the cube chart. This visualization is very important for self-testing.</p>
<p>But besides the output, the cube plot also shows <strong>contour lines</strong> (contour plot or <strong>insolines</strong>). They indicate the area, which contain constant value of output (on 1 line the number of PK remain the same). They are drawn starting from any corner of the cubic diagram, which don’t have maximum or minimum value. Then, equal value is searched on the opposite side of the square and line is draw. To check the curvature of the line, we need to calculate our fixed value for the middle of the scale (we see it later in this course).</p>
<p>Then we draw the second line in the same way for the value of 74. The others lines are drawn parallel to the obtained ones.</p>
<p>Thanks to the isolines, we can quickly understand where to start moving to optimize the result, i.e. towards to our goal. For example, if the goal is to maximize the number of popped kernels, then we need to move perpendicular to the isolines in the upper right corner. It means, that we should take yellow popcorn and increase the cooking time (which is quite intuitive from the cube plot).</p>
<p>Such an approach to optimization (using the isolines) helps us to define the way of carrying out the next experiment. The contour diagram is our <strong>gradient</strong> (path to maximize or minimize the output).</p>
<p>Moreover, we have another type of visualization, it is <strong>the diagram of interaction</strong> (Fig. 4).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_4.png" alt="interaction plot" width="900px"/>
</td>
<td>
<i>
Fig. 4. diagram of interaction for 2 factor popcorn experiment.
</i>
</td>
</tr>
</table>
</div>
<p>Pay attention that these two lines are practically parallel, which means that there is practically no interaction in the examined system. The choice of a variable for the interaction diagram does not play a big role and we could choose another variable to be marked on the horizontal axis.</p>
<p>All the described methods of visualization do not require any software. You can use these visualization methods for both numerical and categorical factors. This shows the obvious advantage of such an approach to the experiment (we can quickly interpret the results using simple graphical tools, elementary mathematics and a sheet of paper).</p>
<p>Being that simple means, that the results can be easily shared with managers or colleagues at work.</p>
<h3>2.3 Make a prediction</h3>
<p>We discussed the example of planning, conducting and analyzing an experiment. But what does it give us? How can we present and use the obtained data? The answer is to build a prediction (model, regression equation). In our course, we will only consider linear models (with a few exceptions). Such models are the most universal (any smooth and monotonic function can be represented as a set of linear segments).</p>
<p>We discussed the example of planning, conducting and analyzing an experiment. But what does it give us? How can we present and use the obtained data? The answer is to build a prediction (model, regression equation). In our course, we will only consider linear models (with a few exceptions). Such models are the most universal (any smooth and monotonic function can be represented as a set of linear segments).</p>
<p>In case of our “popcorn experiment” (2-factor experiment), the obtained model consists of 3 parts:</p>
<div class="math">$$
\hat{y} = a_0 + a_1 \cdot x_A + a_2 \cdot x_B
$$</div>
<p>where,</p>
<ol>
<li><span class="math">\(a_0\)</span> is the intercept that we expect to see when there is no effect (when the encoded factor values = 0). This coefficient is calculated as an average of 4 values in a cubic diagram (i.e. its center).</li>
<li><span class="math">\(a_1\)</span> - coefficient of influence of factor A (its coded value), which depends on preparation time. It is calculated as the average normalized difference between the high and low values of the factor: <span class="math">\(a_1 = \frac{\frac{(80-62) + (74-52)}{2}}{2}\)</span>. Note that normalization involves the calculation of the coefficient for a unit change in the factor (i.e. from -1 to 0 or from 0 to +1), so we should divide the average by 2.</li>
<li><span class="math">\(a_2\)</span> - Factor B coefficient, which depends on the type of grains. It is calculated similarly to point 2.</li>
</ol>
<p>Considering the above description, our model will be:</p>
<div class="math">$$
\hat{y} = 67 + 10 \cdot x_A + 4 \cdot x_B
$$</div>
<blockquote>
<p><strong>The challenge.</strong> Check this model for different coded value of each factors.</p>
</blockquote>
<h3>2.4 Factors interaction</h3>
<p>So far we have considered very ideal cases where factors have no interaction between each other and the target variable. However, this is frequently wrong.</p>
<blockquote>
<p><strong>Example</strong>. We try to wash our hands and conduct a 2-factor experiment: there is/no soap and warm/cold water. You may notice that the effect of warm water will increase when you use soap. And vice versa, the soap effect will be enhanced by using warm water. In other words, “interaction” indicates that the effect of one factor depends on the level of another factor.</p>
<p>Besides, these interactions are usually symmetrical. That means it makes no difference whether we wash our hands in warm water with soap or with soap in warm water, the result is the same.</p>
</blockquote>
<p>The first indicator of the presence of interaction between factors is the asymmetry of lines in the interaction diagram or the curve form of isolines in the cubic diagram. If you observe such effects, it is <strong>double factors interaction</strong> (when the behavior of one variable is very depends on the level of the other one).</p>
<p>Let’s consider the experiment in the figure 5 and calculate all the coefficients. The experiment involved analysis of the effect of baking time (factor A) and sugar type (factor B) on cookie taste (on a scale from 1 to 10).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_5.png" alt="cube plot" width="900px"/>
</td>
<td>
<i>
Fig. 5. Cube plot for experiment with factors interaction.
</i>
</td>
</tr>
</table>
</div>
<p>Note that the isolines are no longer parallel and should be presented in a curved form (once again, the result must be the same on the line). For this purpose I recommend you drawing an additional line in the center of the cube plot.</p>
<p>The expressed non-parallelism of lines indicates the presence of mutual influence of factors. Strictly speaking, when analyzing the experiment, it is always necessary to construct the model taking into account the mutual influence and exclude it only if the coefficient before this interaction is very small. Let us calculate the resulting model.</p>
<p>To build a model, the influence of each factor is calculated separately and in the same way as mention above. In case of interaction it is necessary to calculate changes at one fixed factor (sugar type) as an normalized averaged difference at high and low values of the feature: <span class="math">\(interaction = \frac{(9-4) - (5-3)}{2} = $1.5\)</span>. Let us check the symmetry of the influence by fixing another factor: <span class="math">\(interaction = \frac{(9-5)(4-3)}{2} = 1.5\)</span>. Thus, the influence is really symmetrical and equal (if not - take average value). Finally, our model is:</p>
<div class="math">$$
\hat{y} = \frac{3+5+4+9}{4} + \frac{(5-3) + (9-4)}{2} \cdot \frac{1}{2} \cdot x_A +\\
\frac{(4-3) + (9-5)}{2} \cdot \frac{1}{2} \cdot x_B + \frac{1.5}{2} \cdot x_A x_B
$$</div>
<div class="math">$$
\hat{y} = 5.25 + 1.75 x_A + 1.25 x_B + 0.75 x_A x_B
$$</div>
<blockquote>
<p><strong>The challenge.</strong> Build interaction diagram and verify that there is an interaction. Check the accuracy of models prediction with and without interaction.</p>
</blockquote>
<h3>2.5 Three-factor experiment</h3>
<p>Once we have mastered the basics of analyzing the results of the experiment, we can make the initial conditions more complicated. A new example is taken from textbook, which is called <a href="https://www.amazon.com/Statistics-Experimenters-Design-Innovation-Discovery/dp/0471718130">“Statistics for Experimenters: Design, Innovation, and Discovery”</a>. In the new experiment, an optimal combination of parameters is searched to reduce the pollutant in the waste water.</p>
<p>Once we have mastered the basics of analyzing the results of the experiment, we can make the initial conditions more complicated. A new example is taken from textbook, which is called [“Statistics for Experimentalists”] (https://www.amazon.com/Statistics-Experimenters-Design-Innovation-Discovery/dp/0471718130). In the new experiment, an optimal combination of parameters is searched to reduce the pollutant in the waste water of a wastewater treatment plant.</p>
<p>Three factors with 2 levels are considered. The first factor is C, which is a chemical compound (P and Q). The next factor is T (temperature), which is the water treatment temperature (<span class="math">\(72^o F, $100^o F\)</span>). The last factor is S (stirring speed), which is mixing speed (200 or 400 rpm). Then the number of necessary experiments are:</p>
<div class="math">$$
f^v = 3^2 = 8
$$</div>
<p>where <span class="math">\(f\)</span> is the number of factors and <span class="math">\(v\)</span> is the number of values of each factor.</p>
<p>The result of the experiment is the number of pollutants measured in pounds.</p>
<p>Using the standard procedure of the experiment, we will make a table 4.</p>
<p><em>Table 4: Results of a three-factor experiment.</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-baqh{text-align:center;vertical-align:top}
.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
</style>
<table class="tg">
<thead>
<tr>
<th class="tg-amwm">Standard order</th>
<th class="tg-amwm">Random order (real)</th>
<th class="tg-amwm">C - chemical</th>
<th class="tg-amwm">T - time</th>
<th class="tg-amwm">S - stirring speed</th>
<th class="tg-baqh"><span style="font-weight:bold">Outcome</span></th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-baqh">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8</td>
<td class="tg-baqh">6<br>2<br>5<br>3<br>7<br>1<br>8<br>4</td>
<td class="tg-baqh">-<br>+<br>-<br>+<br>-<br>+<br>-<br>+</td>
<td class="tg-baqh">-<br>-<br>+<br>+<br>-<br>-<br>+<br>+</td>
<td class="tg-baqh">-<br>-<br>-<br>-<br>+<br>+<br>+<br>+</td>
<td class="tg-baqh">5<br>30<br>6<br>33<br>4<br>3<br>5<br>4</td>
</tr>
</tbody>
</table>
</div>
<p>One of the advantages of such table is the quickly overview of the factor impact to the result. For example, you can estimate how pollutant quantity change, when we vary the chemical compound (C factor). The level of the factor changes from low to high as well as the amount of pollutant. Look at the effect of Factor S. The first four experiments shows very high levels of pollutant, while the last four experiments shows low levels of it.</p>
<p>Just looking at the table, we can say that factors C and S are most likely important for understanding the results.</p>
<p>Based on the table of the experiment, we shall make a cube plot (Figure 6).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_6.png" alt="cube plot" width="900px"/>
</td>
<td>
<i>
Fig. 6. Cube plot of 3 factors experiment.
</i>
</td>
</tr>
</table>
</div>
<p>According to acquire results, we need chemical Q with low temperature and hight mixing speed (400 rpm). <strong>Let’s analyze the main effects and interactions</strong>.</p>
<p>Let us start with the first factor C (choice between chemical compounds P and Q, where Q is a high level factor). From the cube plot we can get four estimates of the C effect (along each of the four horizontal edges). At high temperature and high stirring speed (i.e. high T level and high S level) the effect of this factor is 4-5 pounds of contamination. At high temperature and low speed: 33-6. At low temperature and high speed (i.e., T - and S +), the effect is equal: 3 and 4. And finally, at low temperature and low speed: 30 and 5.</p>
<p>We can analyze the obtained information in terms of each factor and their possible interaction.</p>
<ol>
<li>
<p>During the tests, the chemical compound showed four results. The average for these four numbers is <span class="math">\(\frac{50}{4} = 12.5\)</span>. But what does the resulting number 12.5 really mean? How would you explain this value to your manager, who knows nothing about statistics and experiments?</p>
<ul>
<li>
<p>The value of 12.5 indicates that on average we expect to see an increase of 12.5 pounds per ton of pollution when moving from chemical compound P to Q (although the model uses a 6.25 - half coefficient). <strong>Therefore, for the features in the model, we write half of the effect (taking into account normalization)</strong>.</p>
</li>
<li>
<p>The difference between the effects of a chemical at high and low mixing levels (S) is another thing to pay attention to. Note the huge difference, which indicates that there is a clear interaction between factor C and factor S.</p>
</li>
</ul>
</li>
<li>
<p>Before we move on to the interactions, let us look at temperature (T). According to the table, there is no noticeable effect of temperature on the system response. This is also confirmed by the calculated coefficient in the model = 1.5 units (or 0.75 when normalizing the effect). This is a really weak effect.</p>
</li>
<li>
<p>Finally, let us consider the effect of stirring speed (S). The average for the effect is -14.5 (or -7.25 when normalizing). In other words, we expect a mean reduction of 14.5 pounds of pollution when moving from low to high mixing speed.</p>
</li>
</ol>
<p>At this stage you should always take a moment to <strong>ensure that your results make sense</strong>. We can see that switching from chemical P to Q increases contamination (horizontal axis Figure 6). So the value of 6.25 looks adequate. A small value of 0.75 for temperature also looks logical, because it really has a very weak effect. Finally, an increase in stirring speed leads to the most significant reduction in pollution by 7.25 units.</p>
<p><strong>Since we have finished interpreting the individual factors, we can move on to the interactions</strong>. Previously, we noted that the effect of the chemical changes greatly when the stirring speed is low. However, on the back edge of the cube (at high stirring speeds) the effect of chemical selection is almost equal to zero. It is obvious that the stirring speed changes the effect of the chemical compound. Thus, we observe the interaction between 2 factors (S and C). For numerical estimation, we will use a familiar technique of adding a new term to the equation.</p>
<p>We have two possibilities to calculate it using different levels of the variable:
1. at high temperature;
2. at low temperature.</p>
<p>We have two possibilities to calculate it using different levels of the variable:
1. at high temperature;
2. at low temperature.</p>
<p>There is no guarantee that the effect will be symmetrical, so we will perform both calculations, and then take the average (even if the effect is symmetrical we will not lose anything, otherwise we will take into account both effects). Next, we normalize it by the number of attribute levels, as always (write half).</p>
<p>So far, we have only considered the interaction between C-S factors. There if no strong interaction for other factors (the low temperature effect is possibilities of it). In fact, there is also a <strong>three-factor interaction C-T-S</strong>. But it is difficult to calculate it with bare hands. Further on, we will use a computer for this purpose. So let’s stop at the results we’ve got and analyze them for now.</p>
<p><strong>General analysis of results</strong>. The main conclusion is that at low mixing speeds chemical Q is not effective, but at high mixing speeds both chemical compounds are equally effective. From this moment, the experiments become a really powerful tool. We saw the lowest level of contamination when using chemical Q with high S and low T (find this value in the cubic diagram). But what if, according to the government, the pollution should be less than 10? And with that, let’s say, chemical Q is twice as expensive as P…</p>
<p>In fact, we have now thought about the additional result - profit. Do not forget, that profit (or expenses) often play an important role in all systems. So you should always keep in mind the economic component of each corner of the cube.</p>
<p>At the same time, we have seen a small temperature effect. And here is the question: does it mean that there is no reason to consider temperature as a factor? And the answer is no. It is important to understand, that even minor effects provide us important information about system. So, in our example, we see that in the temperature range <span class="math">\([70; 100]^o F\)</span> temperature has a negligible effect on the amount of pollutants. And this is important, because based on this information, an engineer or operator can choose the most economical working conditions. And again, it all comes down to profit. It’s very likely that working at lower temperatures will save energy. And since temperature has only a small impact on the system, we will not have a significant impact on the level of pollution if we decide to work at a lower temperature. And that’s a great result.</p>
<blockquote>
<p><strong>The challenge.</strong> Build a forecast for any case using the cube plot and check it for the model without influences. In which direction do the interactions work (increase or decrease the amount of pollutants)?</p>
<p><strong>The challenge.</strong> Why do you think chemical compound Q is less effective at low mixing speed, but works very well at high speed?</p>
</blockquote>
<h3>2.6 Least square method for two factor experiment model</h3>
<p>Coming to this section, we looked at some important examples of how to build and analyze an experiment. Moreover, we learned how to calculate models, which allows us to associate encoded factors with a target variable (output). However, we have chosen coefficients for the model intuitively, based on quite logical assumptions about averaging the effects of features. It is time to describe the model in a more formal way.</p>
<p>To build a mathematically justified predictive model, we will use the most common approach - the method of least squares (LSM). We will discuss the statistical basis of this method in Chapter 3, but for now we will focus on its general features and experimental application. As an example, we will consider our “popcorn experiment”. Let me remind you that the linear model for a two-factor experiment generally looks like this:</p>
<div class="math">$$
\hat{y} = b_0 + b_A x_A + b_B x_B + b_{AB} x_A x_B
$$</div>
<p>where <span class="math">\(x_A\)</span> and <span class="math">\(x_B\)</span> are coded factors (features with -1 or +1 values for time (A) and corn type (B)).</p>
<p>We carried out 4 experiments and for each of them our model shall be work. Then:</p>
<div class="math">$$
\begin{cases}
\hat{y_1} = b_0 + b_A x_{A-} + b_B {x_B-} + b_{AB} {x_A-} {x_B-} \\[2ex]
\hat{y_2} = b_0 + b_A x_{A+} + b_B {x_B-} + b_{AB} {x_A+} {x_B-} \\[2ex]
\hat{y_3} = b_0 + b_A x_{A-} + b_B {x_B+} + b_{AB} {x_A-} {x_B+} \\[2ex]
\hat{y_4} = b_0 + b_A x_{A+} + b_B {x_B+} + b_{AB} {x_A+} {x_B+}
\end{cases}
$$</div>
<p>Therefore, after carrying out the experiment we have 4 equations with 4 unknowns, which means - we can solve them! These equations are linear, so the system of equations is quite simply solved using matrix methods. There is no need to be afraid, it is just a more convenient form of recording and calculation equations. Let me show you how to do it.</p>
<p>In the matrix form, our equations are written down as follows:</p>
<div class="math">$$
\begin{pmatrix}
y_1 \\
y_2 \\
y_3 \\
y_4 \\
\end{pmatrix} =
\begin{pmatrix}
1 & -1 & -1 & -1 \cdot -1 \\
1 & +1 & -1 & +1 \cdot -1 \\
1 & -1 & +1 & -1 \cdot +1 \\
1 & +1 & +1 & +1 \cdot +1 \\
\end{pmatrix}
\begin{pmatrix}
b_0 \\
b_A \\
b_B \\
b_{AB} \\
\end{pmatrix}
$$</div>
<p>Matrix values <span class="math">\(4 \times 4\)</span> consist of coded variables. The other 2 vectors (matrices with one column or row of data) consist of experiment results and unknown coefficients before the coded variables. In the so-called <strong>“analytical” form</strong> (i.e. which has a strict mathematical justification) such matrix system has a solution:</p>
<div class="math">$$
b = (X^T \cdot X)^{-1} \cdot (X^T \cdot y)
$$</div>
<p>where <span class="math">\(b\)</span> and <span class="math">\(y\)</span> are vector with unknown coefficients and vector with tests results. The <span class="math">\(X\)</span> is matrix with coded factors.</p>
<blockquote>
<p><strong>Note.</strong> Factors should not always be coded (normal, “real” values can also be used). However, then we may face a number of problems (unbalanced values, solution instability, etc.). So it is better to always use encoded values (or at least normalized for mean and variance).</p>
</blockquote>
<p>It is also possible to find the described solution of matrix equation manually (if the rules of linear algebra are used). However, it is better to use computer programs that will solve these equations very effectively for you. All we need is a <span class="math">\(X\)</span> matrix and a <span class="math">\(y\)</span> vector. And we have everything we need: the <span class="math">\(X\)</span> matrix is the result of the experiment table, and the <span class="math">\(y\)</span> vector is the results of four tests.</p>
<p>For computer calculations, we can use a number of programs. For me, the main ones are: MS Exel, R and Python. As you can see, 2 of the 3 listed programs are programming languages. But you should not fear them. For example, R is a very common and simple language for statistics and data analysis. It is rather easy to install and use while the result is clear. On the other hand, modern Exel provides a very wide range of functions to work with data (including working with models and databases, pivot tables, etc.). In addition, there are many paid and free programs for experiment planning and data analysis. You can search them in the Internet. But in our short course we will consider quite simple examples on R. Besides, you can study R in more detail in <a href="https://www.coursera.org/learn/experimentation/">this course</a> or <a href="https://stepik.org/course/129/promo">this one in Russ.</a>.</p>
<h3>2.7 RStudio for analyzing results of factors experiments</h3>
<p>On the previous examples, you have learned to perform the necessary calculations and analysis of the experiment results by hand. However, using such approach our capabilities are very limited, and the risk of error is very high. It is time to switch to digital technologies. To do this, you will need to choose software to design the experiment and analyze the data. And in my opinion, <strong>the R programming language and RStudio</strong> programming environment are perfect for it.</p>
<p>R language and software to work with it are free, have an intuitive interface, but most importantly - R is widely used by various companies and researchers. R is so flexible, that you can even use it in <a href="http://yint.org/Rweb">a browser</a>. You can take advantage of this feature if you don’t want to install software or cannot do it (for example, while using a work computer). However, if you are serious and want to work on your computer, you will need to download two programs: <a href="https://cran.r-project.org/mirrors.html">R itself</a> and <a href="https://rstudio.com/products/rstudio/download/">RStudio</a>. In the first case, you will need to choose the fastest or closest download location (Russia or Germany in my case). Install both software packages on your computer and run RStudio (it will launch R in the background).</p>
<p>Create a new R-script from the “File” menu. In the opened window, we will write our simple commands and design the experiments.</p>
<p>I want to highlight follows:</p>
<ul>
<li>first of all, users are often mistaken, because <strong>commands in R are case-sensitive</strong> (e.g. command <code>c(1, 2, 3, 4)</code> will create a list with 4 entries, but if you use capital <code>C(1, 2, 3, 4)</code>, nothing will work);</li>
<li>secondly, if you need help, use <strong><code>help()</code> command</strong>.</li>
</ul>
<p>For example, our “popcorn-experiment” and work areas in RStudio are shown on Figure 7.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_7.png" alt="popcorn-experiment in R" width="900px"/>
</td>
<td>
<i>
Fig. 7. "Popcorn-experiment" in RStudio. Windows are (from lest to right and upside down): window for script, variables in computer memory, console with results, help windows.
</i>
</td>
</tr>
</table>
</div>
<p>In the future, instead of screenshots, we will use just code that you can copy and execute in your RStudio:</p>
<div class="highlight"><pre><span></span><code><span class="n">A</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">B</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">52</span><span class="p">,</span> <span class="m">74</span><span class="p">,</span> <span class="m">62</span><span class="p">,</span> <span class="m">80</span><span class="p">)</span>
<span class="n">popped_corn</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">A</span> <span class="o">+</span> <span class="n">B</span> <span class="o">+</span> <span class="n">A</span><span class="o">*</span><span class="n">B</span><span class="p">)</span>
<span class="n">popped_corn</span>
</code></pre></div>
<p>Attentive students could notice that the recording of the experiment in the picture and in the code is different and we will soon find out why.</p>
<p>We will start at the end. <strong>Variable</strong> <code>popped_corn</code> contains the calculated coefficients of the model and simply outputs them to the console (this is the meaning of variables, they are references to certain values or operations, which we have assigned to them). Above, we declare the predicted model, which is called <code>popped_corn</code>. If this is your first time with R, you may be a little scared - I encourage you to be brave and believe in your abilities!</p>
<p>Let’s take a look at everything one by one. Let’s start with the reverse arrow (<code><-</code>). It is symbols less (<code><</code>) and dashes (<code>-</code>), which together look like an arrow. In the R language, this is the <strong>assign</strong> operation (i.e., we pass a value to a variable and then we can just write a variable to use that value). In other words, we create a variable with the name <code>popped_corn</code> and everything to the right of the arrow are assigned to it (the results of the linear model calculation). <code>lm</code> to the right of the arrow means “linear model” and indicate that we want to use least square methods to build a line. Finally, the tilde symbol (<code>~</code>) in the middle is interpreted as “predicted …” or “described …”.</p>
<blockquote>
<p><strong>Note.</strong> <code><-</code> and <code>=</code> symbols are almost equivalent in R. However, I recommend to use <code><-</code> as an assignment operation to avoid confusion. For more information, please read <a href="https://stackoverflow.com/questions/2271575/whats-the-difference-between-and-in-r">here</a>.</p>
</blockquote>
<p>Select all the commands and press <code>Run</code> to run the code. Alternatively, press the <code>Source</code> button (in the modification <code>Source with Echo</code>) without code selection. If we do not get an error message in <code>Console</code>, you will see the result (also in the console) and the existing variables (<code>Environment</code> tab). The output of this small code shows the coefficients for the constructed linear model. We got the 67 for intercept; 10 for the main effect of A; 4 for B and 1 for the two-factor interaction AB. Note, that these numbers exactly match our manual calculations.</p>
<p>This is the whole programming magic. It is really the fastest and most convenient way to get a model with computer help.</p>
<blockquote>
<p><strong>Note.</strong> The formula that describes the linear model has values for A, for B and for the AB interaction. But there is no variable for intercept (constants). R creates it automatically and when you enter only three parameters, R will show you four.</p>
</blockquote>
<p>In Figure 7 you can see the command <code>summary(popped_corn)</code> instead of just calling <code>popped_corn</code>. This command provides you more statistical data for calculated parameters: coefficient errors, average square deviation, etc.. We will learn more about these parameters in 2 and 3 parts of our course.</p>
<blockquote>
<p><strong>Note.</strong> In any calculation program you should get exactly the same parameters for “popcorn-experiment”. This is a good check of software and calculation quality.</p>
<p><strong>The challenge.</strong> Try to find instructions on the Internet about “how to calculate coefficients using the least squares method in MS Exel”. Use “popcorn experiment” data as an example.</p>
</blockquote>
<p>Let’s continue our introduction to R. The next example is <strong>calculation of a three-factor experiment</strong> in water purification.</p>
<p>Open RStudio and create a new file for the example of wastewater treatment. It is very useful to specify our model at once and then declare all necessary variables.</p>
<div class="highlight"><pre><span></span><code><span class="n">water</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">C</span> <span class="o">+</span> <span class="bp">T</span> <span class="o">+</span> <span class="n">S</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="bp">T</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="n">S</span> <span class="o">+</span> <span class="n">S</span><span class="o">*</span><span class="bp">T</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="bp">T</span><span class="o">*</span><span class="n">S</span><span class="p">)</span>
</code></pre></div>
<p>Remember that in the example of water treatment we considered <strong>three factors: C (chemical), T (temperature) and S (mixing speed)</strong>. We also have three two factor interactions (C<em>T, C</em>S and S<em>T) and one three factor interaction (C</em>T*S). At the same time, we have the results of eight experiments.</p>
<blockquote>
<p><strong>Note.</strong> When conducting an experiment and analyzing the results, keep in mind that we will always need to conduct at least as many experiments as the unknown parameters in our model. For example, the “popcorn-experiment” have 4 parameters (2 single, 1 interaction and 1 intercept point) and 4 experiments. In the example with water treatment we have 8 experiments, so we can estimate 8 parameters (with interaction and intercept).</p>
</blockquote>
<p>Notice that we can let R automatically set the encoded values C, T and S using the following code:</p>
<div class="highlight"><pre><span></span><code><span class="n">C</span> <span class="o"><-</span> <span class="bp">T</span> <span class="o"><-</span> <span class="n">S</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">design</span> <span class="o"><-</span> <span class="nf">expand.grid</span><span class="p">(</span><span class="n">C</span><span class="o">=</span><span class="n">C</span><span class="p">,</span> <span class="bp">T</span><span class="o">=</span><span class="bp">T</span><span class="p">,</span> <span class="n">S</span><span class="o">=</span><span class="n">S</span><span class="p">)</span>
<span class="n">C</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">C</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="bp">T</span>
<span class="n">S</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">S</span>
<span class="n">water</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">C</span> <span class="o">+</span> <span class="bp">T</span> <span class="o">+</span> <span class="n">S</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="bp">T</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="n">S</span> <span class="o">+</span> <span class="n">S</span><span class="o">*</span><span class="bp">T</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="bp">T</span><span class="o">*</span><span class="n">S</span><span class="p">)</span>
</code></pre></div>
<p>Run this code to create a linear model. To output the calculated coefficients to the console, use <code>summary(water)</code> command. Please note that the obtained parameters match our manual calculated values: 11.25, 6.25, 0.75, etc.</p>
<blockquote>
<p><strong>Note</strong>. We can add a little trick to set our model (this reduces the possibility of error). The results of the model will be similar (please check).</p>
</blockquote>
<div class="highlight"><pre><span></span><code><span class="c1"># We use a simplified model mode</span>
<span class="n">water</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">C</span><span class="o">*</span><span class="bp">T</span><span class="o">*</span><span class="n">S</span><span class="p">)</span>
</code></pre></div>
<blockquote>
<p><strong>Note</strong>. When planning each experiment, always create a new code yourself. In this way, you will have some “outline” of the work, and it will be especially useful if you use <strong>comments</strong> (# strings, that are not accepted as code by R). This will solve the frequent problem of losing the results and description of the experiment. For example, you’ve done the work, and in a few months you need to go back to it and answer your boss’ questions or pass the project on to your colleague. If you give them only an Excel file or a set of documents that do not have a step-by-step description, it will be very difficult to reproduce your actions and thoughts. I come across this very often in my practice and urge you to avoid repeating both my and others’ mistakes!</p>
<p>Writing well commented and consistent code creates a well tracked and reproducible record of your work. This is a very important criterion for many companies and laboratories (some even have special requirements for traceability of work, for example <a href="https://www.iso.org/standard/62085.html">ISO 9001-2015</a>).</p>
</blockquote>
<p>Here is one more code fragment that will help us interpret the results of the experiment. It allows us to visualize the influence of each effects within the obtained model (the greater is the absolute value of a parameter, the greater is its influence).</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Estimation of factor influence. Firstly, setup "pid" package: Tools -> Install Packages -> pid</span>
<span class="nf">library</span><span class="p">(</span><span class="n">pid</span><span class="p">)</span>
<span class="nf">paretoPlot</span><span class="p">(</span><span class="n">water</span><span class="p">)</span>
</code></pre></div>
<p>The result is shown on Figure 8.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_8.png" alt="pareto plot" width="900px"/>
</td>
<td>
<i>
Fig. 8. Example of factor comparison, using the Pareto plot in RStudio.
</i>
</td>
</tr>
</table>
</div>
<p>The histogram shows the absolute value of each of the model parameters (this allows to estimate the scale of influence of each of the coded features). The parameters sign is also important, it shows the directions of the factor’s influence. But for better visual comparison it is more correct to use absolute values (the sign is highlighted in a different color). Such diagrams are often used to identify variables, that are not relevant for model and can be removed from the model. A histogram shows sorted values from the highest to the lowest absolute value. This allows us to quickly find the most important factors of the system. The longest bars correspond to the factors that most significantly affect the result.</p>
<blockquote>
<p><strong>Note</strong>. It is often important to use a clear black and white comparison, as not all people distinguish colors. In addition, sometimes it is necessary to print the report on a black and white printer.</p>
</blockquote>
<p>Let’s analyze the plot. You will immediately notice that the <span class="math">\(C \times T \times S\)</span>, <span class="math">\(C \times T\)</span> and <span class="math">\(T \times S\)</span> interactions are small, when compared to other parameters. The most significant factor is S. The color of the band indicates that S has a negative effect on the result. As you will remember, our goal was to minimize the pollution, so we immediately realize that increasing S will reduce the pollution, which is good. Another important factor is the effect of the chemical, C. Its effect is positive, i.e. if we choose the positive coded value of this categorical feature, we will get an increase in pollution.</p>
<p>Let us consider an even <strong>more complicated example - a four factor experiment</strong> with 2 measured parameters. This is a good problem from <a href="https://www.amazon.com/Statistics-Experimenters-Design-Innovation-Discovery/dp/0471718130">Box, Hunter and Hunter’s textbook</a>. In this experiment, we use solar collectors and heat accumulators. Values of result of experiment are received from computer simulation (see the <a href="https://docs.google.com/document/d/1g5blmWpYYJSoFMeFuE_RORrwPtfLhL1yIN7BeylW0Kg/pub">site</a>).</p>
<blockquote>
<p><strong>Note.</strong> A little advice related to the simulations. Usually it is very simple to perform a simulation and there is a temptation to investigate it ineffectively. Often you will meet people who just play with the software by entering different values until they get the right answer. But the simulation should be taken as seriously as the real model. Always use a systematic approach and conduct factor experiments on it.</p>
<p><strong>Note.</strong> There are two key advantages to using computer simulations:
* fast results with sufficient computational power of the computer (or running in parallel mode);
* it is possible to not randomize the order of experiments. The reason for this is quite simple - there are usually no random and systematic errors in the simulations, which depend on the time and external parameters of the experiment. When you repeat the simulation by entering the same initial values, usually you get the same answer. But be careful: some computer experiments do not give identical results when you repeat them, and in any case it is better to always use a random order. The cost of doing this is minimal, but it will protect you from a number of problems.</p>
</blockquote>
<p>So, back to the solar water heater. We’re looking at four factors:
* A - the amount of sunlight (insolation);
* B - heat storage capacity (tank volume);
* C - the water flow through the absorber;
* D - interruption of sunlight (cloudiness).</p>
<p>In terms of the influence of these factors, two outputs are considered:
* <span class="math">\(y_1\)</span> - energy collection efficiency;
* <span class="math">\(y_2\)</span> - energy transfer efficiency.</p>
<p>You can immediately determine how many experiments will be conducted. It is <span class="math">\(2^4 = 16\)</span> tests if each factor has two levels (low and high).</p>
<p>So, there have been 16 tests and it is time to make up the code for model calculation:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Solar panel case study, from BHH2, p 230</span>
<span class="c1"># ----------------------------------------</span>
<span class="n">A</span> <span class="o"><-</span> <span class="n">B</span> <span class="o"><-</span> <span class="n">C</span> <span class="o"><-</span> <span class="n">D</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">design</span> <span class="o"><-</span> <span class="nf">expand.grid</span><span class="p">(</span><span class="n">A</span><span class="o">=</span><span class="n">A</span><span class="p">,</span> <span class="n">B</span><span class="o">=</span><span class="n">B</span><span class="p">,</span> <span class="n">C</span><span class="o">=</span><span class="n">C</span><span class="p">,</span> <span class="n">D</span><span class="o">=</span><span class="n">D</span><span class="p">)</span>
<span class="n">A</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">A</span>
<span class="n">B</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">B</span>
<span class="n">C</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">C</span>
<span class="n">D</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">D</span>
<span class="c1"># y1 - collection efficiently</span>
<span class="n">y1</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">43.5</span><span class="p">,</span> <span class="m">51.3</span><span class="p">,</span> <span class="m">35.0</span><span class="p">,</span> <span class="m">38.4</span><span class="p">,</span> <span class="m">44.9</span><span class="p">,</span> <span class="m">52.4</span><span class="p">,</span> <span class="m">39.7</span><span class="p">,</span> <span class="m">41.3</span><span class="p">,</span> <span class="m">41.3</span><span class="p">,</span> <span class="m">50.2</span><span class="p">,</span> <span class="m">37.5</span><span class="p">,</span> <span class="m">39.2</span><span class="p">,</span> <span class="m">43.0</span><span class="p">,</span> <span class="m">51.9</span><span class="p">,</span> <span class="m">39.9</span><span class="p">,</span> <span class="m">41.6</span><span class="p">)</span>
<span class="c1"># y2 - energy delivery efficiency</span>
<span class="n">y2</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">82</span><span class="p">,</span> <span class="m">83.7</span><span class="p">,</span> <span class="m">61.7</span><span class="p">,</span> <span class="m">100</span><span class="p">,</span> <span class="m">82.1</span><span class="p">,</span> <span class="m">84.1</span><span class="p">,</span> <span class="m">67.7</span><span class="p">,</span> <span class="m">100</span><span class="p">,</span> <span class="m">82</span><span class="p">,</span> <span class="m">86.3</span><span class="p">,</span> <span class="m">66</span><span class="p">,</span> <span class="m">100</span><span class="p">,</span> <span class="m">82.2</span><span class="p">,</span> <span class="m">89.8</span><span class="p">,</span> <span class="m">68.6</span><span class="p">,</span> <span class="m">100</span><span class="p">)</span>
<span class="n">model.y1</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y1</span> <span class="o">~</span> <span class="n">A</span><span class="o">*</span><span class="n">B</span><span class="o">*</span><span class="n">C</span><span class="o">*</span><span class="n">D</span><span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">model.y1</span><span class="p">)</span>
<span class="nf">paretoPlot</span><span class="p">(</span><span class="n">model.y1</span><span class="p">)</span>
<span class="n">model.y2</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y2</span> <span class="o">~</span> <span class="n">A</span><span class="o">*</span><span class="n">B</span><span class="o">*</span><span class="n">C</span><span class="o">*</span><span class="n">D</span><span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">model.y2</span><span class="p">)</span>
<span class="nf">paretoPlot</span><span class="p">(</span><span class="n">model.y2</span><span class="p">)</span>
</code></pre></div>
<blockquote>
<p><strong>Note.</strong> The reason why the <span class="math">\(A \times B \times C \times D\)</span> record works is because of the model hierarchy principle for R. Let’s look at a simple example. If you wrote only <span class="math">\(A \times B\)</span>, R will automatically include factor A and factor B in the model. After all, there can be no two-factor interaction of <span class="math">\(A \times B\)</span> if there is no factor A and factor B.</p>
</blockquote>
<p>After the code is executed, you should study the obtained results. For this purpose, let’s build two separate linear models and Pareto diagrams (Figure 9): for the efficiency of energy collection y1 and for the efficiency of energy transfer y2.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_9.png" alt="factors comparison" width="900px"/>
</td>
<td>
<i>
Fig. 9. Example for factor importance calculate with Pareto plots.
</i>
</td>
</tr>
</table>
</div>
<p>As you remember, gray bars indicate a negative factor influence on the output, and black bars indicate a positive factor influence. According to the obtained model <strong>for energy collection efficiency (<span class="math">\(y_1\)</span>)</strong> the biggest influence belongs to factors B and A, interaction <span class="math">\(A \times B\)</span> and factor C. Other interactions have a lower impact on the result.</p>
<ol>
<li>We can observe a decrease in system response when factor B increases. In other words, when the tank volume increases, the collection efficiency decreases. This is the most important variable in the system.</li>
<li>Further, factor A (amount of sunlight) has a positive effect on the collection efficiency.</li>
<li>What kind of interaction do you think <span class="math">\(A \times B\)</span> will have? The correct answer is a high level for factor A and a low level for factor B. We can see it from the equation and the Pareto diagram. In this case, result increase from factor B and simultaneously makes the two-factor interaction work for us.</li>
<li>factor D has little effect on the result. This is a useful conclusion because it shows that cloud didn’t bother us. If we had to do more experiments in the future, we could no longer include factor D.</li>
</ol>
<p>Thus, A, B and interaction A*B are the three most influential parameters of the model. Try to explain the influence of other factors by yourself.</p>
<p>Now let’s look at the second output variable - <strong>energy transfer efficiency <span class="math">\(y_2\)</span></strong>. If you study the corresponding Pareto diagram, you will see the following.</p>
<ol>
<li>Huge influence of factor A.</li>
<li>Big influence of two-factor interaction <span class="math">\(A \times B\)</span>.</li>
<li>Influence of C and D factors is insignificant.</li>
</ol>
<p>The explanation is yours.</p>
<blockquote>
<p><strong>Note.</strong> You may have noticed that many high-level interactions (three-, four-factor and more) are small or equal to zero. This happens quite often and we will see how this can be used.</p>
<p><strong>Note.</strong> I would like to mention an important thing on the analyzed data. In case of the <span class="math">\(y_2\)</span> model, the influence of factor B is small and you can conclude that factor B is not important. But this is not quite true. We cannot exclude factor B from the model because the <span class="math">\(A \times B\)</span> interaction is very important. This means that the influence of factor A depends on the level of factor B and vice versa. Therefore, we cannot ignore factor B.</p>
</blockquote>
<p>Considering such an example, we come to the key question of experiment planning: can we simultaneously optimize both <span class="math">\(y_1\)</span> and <span class="math">\(y_2\)</span>? What would be the best combination of factor levels that gives this maximum?</p>
<h3>2.8 Reduce experiments expenses</h3>
<p>Before answering the question about the model variable optimization, you should understand how to optimize the cost factor.</p>
<p>As you can see, the number of experiments (and thus time and cost) increases in degree depending on the number of factors. Let’s try to get rid of this limitation.</p>
<p>So far, we have considered so-called <strong>full-scale experiments</strong>, when the influence of each factor was fully studied for the model creation. In other words, we studied every change in every factor. But how can we reduce the number of experiments? This is possible by using half, quadro and etc. (by 2 times) experiment scheme. For example, using <strong>half-factor experiments</strong> involves cutting the number of experiments by half.</p>
<p>Of course, everything has a price and such actions will lead to information reduction. But there are 2 significant <strong>reasons</strong> for that:</p>
<ol>
<li>The cost of each experiment can be high.</li>
<li>There is no confidence in the obtained results. What factors will be significant? Will the obtained data be optimal, etc.?</li>
</ol>
<p>According to the famous scientist George Box <strong> for the first experiments and works should be allocated about 25 \% of the total budget and no more</strong>. We will need the rest in the further research process. Therefore, we need to understand that our initial assumptions are not absolute and may be quite wrong. This means we need insurance and the possibility of additional experiments.</p>
<p>Let’s study what result will we have in half-factor experiment and how to do such tests.</p>
<p>There is <strong>special scheme for choosing</strong> meaningful tests from our ideal full-factor experiment: open or closed loop selection. Let’s consider a familiar example of water treatment in terms of half-factor experiments (Figure 10).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_10.png" alt="half-factor" width="900px"/>
</td>
<td>
<i>
Fig. 10. Selection of meaningful combination of factors for half-factor experiment.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Note.</strong> Feature values have changed to A, B, C for better convenience.</p>
</blockquote>
<p>Note that this choice of experiments implies a complete change of factors A and B, while factor C is chosen as a result of the multiplication of the first encoded factors (keeping the sign as in Figure 10).</p>
<p>This approach to the experiment allows us to win <strong>jackpot</strong> if one of the factors turns out to be unimportant for the model. Then one of the directions of the cube will disappear and we will reduce the necessary number of experiments by half, and with earlier carried out tests we will have a full-factor experiment… Profit!</p>
<p>But that’s only one side of the coin. Let’s see what model we can get if we do a half-factor experiment:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Half-factor experiment</span>
<span class="c1"># ----------------------------------------</span>
<span class="c1"># full-factors for A and B</span>
<span class="n">A</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">B</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="c1"># C = AB</span>
<span class="n">C</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="c1"># y - purify efficiently</span>
<span class="n">y1</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">30</span><span class="p">,</span> <span class="m">6</span><span class="p">,</span> <span class="m">4</span><span class="p">,</span> <span class="m">4</span><span class="p">)</span>
<span class="n">water</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y1</span> <span class="o">~</span> <span class="n">A</span><span class="o">*</span><span class="n">B</span><span class="o">*</span><span class="n">C</span><span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">water</span><span class="p">)</span>
</code></pre></div>
<p>You can see a lot of <code>NA</code> (not applicable) for interaction coefficients and these are normal. The model doesn’t have enough data. But we don’t need these factors. Let’s compare the resulting equation to the original one:</p>
<div class="math">$$
\hat{y} = 11.25 + 6.25x_A + 0.75 x_B - 7.25 x_C + 0.25 x_A x_B - 6.75 x_A x_C - 0.25 x_B x_C - 0.25 x_A x_B a_C
$$</div>
<div class="math">$$
\hat{y} = 11.0 + 6.0 x_A - 6.0 x_B - 7.0 x_C
$$</div>
<p>We have <strong>very similar coefficients</strong> (3 from 4 are very close to each other)! In other hand, the B coefficient is wrong and we don’t have the factors interaction.</p>
<p>Let’s take a closer look at what happens in a half-factorial experiment.</p>
<p>We have already described the logic of choosing necessary combinations of factors. However, we can get a generalized view of the selection of factors for half-factor and other type of experiments from a special table (<strong>trade-of-table</strong>, Figure 11).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_11.png" alt="trade-of-table" width="900px"/>
</td>
<td>
<i>
Fig. 11. Trade-of-table for experiment schemes.
</i>
</td>
</tr>
</table>
</div>
<p>Or you can use R:</p>
<div class="highlight"><pre><span></span><code><span class="nf">library</span><span class="p">(</span><span class="n">pid</span><span class="p">)</span>
<span class="nf">help</span><span class="p">(</span><span class="n">tradeOffTable</span><span class="p">)</span>
</code></pre></div>
<p>Further on, we will return to studying this table, and for now we will look into it to choose how to encode our factors.</p>
<p>The next interesting question is <strong>what are the new coefficients</strong> and why do they differ from the full-factor experiment? That’s the key point to understanding. Actually, the coefficients in a half-factor experiment <strong> are a combination of elements from a full-factor experiment</strong>. Consider this in the example of water purification.</p>
<p>In a full-factor experiment, we have the following system of equations:</p>
<div class="math">$$
\begin{pmatrix}
y_1 \\
y_2 \\
y_3 \\
y_4 \\
y_5 \\
y_6 \\
y_7 \\
y_8 \\
\end{pmatrix} =
\begin{pmatrix}
+1 & -1 & -1 & -1 & +1 & +1 & +1 & -1\\
+1 & +1 & -1 & -1 & -1 & -1 & +1 & +1\\
+1 & -1 & +1 & -1 & -1 & +1 & -1 & +1\\
+1 & +1 & +1 & -1 & +1 & -1 & -1 & -1\\
+1 & -1 & -1 & +1 & +1 & -1 & -1 & +1\\
+1 & +1 & -1 & +1 & -1 & +1 & -1 & -1\\
+1 & -1 & +1 & +1 & -1 & -1 & +1 & -1\\
+1 & +1 & +1 & +1 & +1 & +1 & +1 & +1\\
\end{pmatrix}
\begin{pmatrix}
b_0 \\
b_A \\
b_B \\
b_C \\
b_{AB} \\
b_{AC} \\
b_{CB} \\
b_{ABC} \\
\end{pmatrix}
$$</div>
<p>Use only selected features we can write equations as follow:</p>
<div class="math">$$
\begin{pmatrix}
\\
y_2 \\
y_3 \\
\\
y_5 \\
\\
\\
y_8 \\
\end{pmatrix} =
\begin{pmatrix}
\\
+1 & +1 & -1 & -1 & -1 & -1 & +1 & +1\\
+1 & -1 & +1 & -1 & -1 & +1 & -1 & +1\\
\\
+1 & -1 & -1 & +1 & +1 & -1 & -1 & +1\\
\\
\\
+1 & +1 & +1 & +1 & +1 & +1 & +1 & +1\\
\end{pmatrix}
\begin{pmatrix}
b_0 \\
b_A \\
b_B \\
b_C \\
b_{AB} \\
b_{AC} \\
b_{CB} \\
b_{ABC} \\
\end{pmatrix}
$$</div>
<p>I pointed out, that these are not mathematical justification, but only the logic of half-factor experiment.</p>
<p>We cannot remove any of the last vectors with coefficients as each of them corresponds to the change of the factor, i.e. the length of matrix X, which remains unchanged. However, such a matrix record of multiplication makes no sense - it is necessary that the matrix dimension of <span class="math">\(X\)</span> corresponds to the dimensions of vectors <span class="math">\(y\)</span> and <span class="math">\(b\)</span>. To make the matrix multiplication (and the system of linear equations itself) look correct, it is necessary to reduce the matrix dimension of <span class="math">\(X\)</span>. For this purpose, note that the columns of this matrix are actually duplicated. In other words, parts of the coefficients correspond to the same coding of the remaining factors. Behind this lies the same influence of the investigated factors, which we will not be able to distinguish from each other in our experiment (from the mathematical point of view they will be identical).</p>
<p>Thus, if we record a real <strong>matrix system for a half-fraction experiment, the obtained coefficients will actually be a linear combination (aliasing, confounding) of the coefficients of a full-factor experiment</strong>:</p>
<div class="math">$$
\begin{pmatrix}
y_2 \\
y_3 \\
y_5 \\
y_8 \\
\end{pmatrix} =
\begin{pmatrix}
+1 & +1 & -1 & -1 & -1 & -1 & +1 & +1\\
+1 & -1 & +1 & -1 & -1 & +1 & -1 & +1\\
+1 & -1 & -1 & +1 & +1 & -1 & -1 & +1\\
+1 & +1 & +1 & +1 & +1 & +1 & +1 & +1\\
\end{pmatrix}
\begin{pmatrix}
b_0 = b_0 + b_{ABC} \\
b_A = b_A + b_{BC} \\
b_B = b_B + b_{AC}\\
b_C = b_C + b_{AB}\\
\end{pmatrix}
$$</div>
<p>In other words, our new coefficients contain the influence of interaction of these factors besides the influence of “pure” factors A, B, C. This explains that the program outputs us only 4 factors and they differ from the initial factors of a full-factor experiment.</p>
<blockquote>
<p><strong>Note.</strong> Return to the comparison of the equations of a full-factor experiment and half-factor experiment and make sure that the new coefficients are actually linear combinations of the true ones.</p>
</blockquote>
<p><strong>This is how we have reduced the number of factors by eliminating the interaction, but have taken it into account in our new coefficients!</strong></p>
<p>After we have learned about full-factor and half-factor experiments, we can suggest <strong>2 possible goals of the experiment (and ways of its planning)</strong>:</p>
<ul>
<li><strong>scanning (screening)</strong> - when we allow reduction of information about the system (for example, do not take into account interactions or get some incorrect parameter estimates) and carry out reduced factor experiments. This is done in order to get a general idea of the interactions in the system.</li>
<li><strong>optimization</strong> - searches for the optimal response value. At such scheme reduction of experiments is not allowed and carrying out of full-factor experiment is required.</li>
</ul>
<p>Thus, it is always necessary to plan and evaluate the effect of each factor and their interactions (scanning experiments) before optimization experimental work. Here are some useful preliminary conclusions on an example of water purification (a full-factor experiment require 16 very costly tests, and we consider 3 factors: A - temperature, B - mixing speed and C - chemical).</p>
<ul>
<li>It is important to <strong>code your factors</strong> correctly when conducting a half-factor experiment. This will allow to get coefficients that are close to reality. For example, in the above encoding we can conclude that <span class="math">\(\hat{b_C} = b_C + b_{AB} \approx b_C\)</span> because we know, that there is no interaction between mixing and water temperature. In this way, we get a clear understanding of the impact of chemical choice on water purification.</li>
<li><strong>We should use several encodings and look</strong> at the expected results of half-factor experiments. Choose the most interesting ones.</li>
<li>Always <strong>make half-factor experiments first</strong>, evaluate the results and only then “finish” the full-factor experiment (if everything is okay and you need more information).</li>
</ul>
<p>So far, we had considered a lot of experiment and its results. There are a lot of themes, that I want to translate from my course (in Russ.), but it will cost me a lot of time. Further, you find only the table of contents of remain themes and Figures and Tables, which are related to them. If you interested in this course, please contact me via e-mail (or use “Comment” button) and I sent you the material or post it here as fast, as possible.</p>
<h3>2.9 Experiment map construction</h3>
<h4>2.9.1 Disturbances</h4>
<h4>2.9.2 Blocking the interfering factor in the model calculation</h4>
<p><em>Table 5. Examined factors when introducing an mobile application to the market.</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-wa1i{font-weight:bold;text-align:center;vertical-align:middle}
.tg .tg-yla0{font-weight:bold;text-align:left;vertical-align:middle}
.tg .tg-nrix{text-align:center;vertical-align:middle}
</style>
<table class="tg">
<thead>
<tr>
<th class="tg-yla0"></th>
<th class="tg-wa1i">Low level<br>(-)</th>
<th class="tg-wa1i">Hight level<br>(+)</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-yla0">A "Promotion"</td>
<td class="tg-nrix">1 free-in-app upgrade</td>
<td class="tg-nrix">30 days trial of all features</td>
</tr>
<tr>
<td class="tg-yla0">B "Message"</td>
<td class="tg-nrix">"CallApp" has your schedule available at your fingertips, on any device</td>
<td class="tg-nrix">"CallApp" features are configurable; only pay for the features you want</td>
</tr>
<tr>
<td class="tg-yla0">C "Price"</td>
<td class="tg-nrix">in-app purchase price is 89 $</td>
<td class="tg-nrix">in-app purchase price is 99 $</td>
</tr>
</tbody>
</table>
</div>
<p><em>Table 6. Blocking of interfering factor, when introducing an mobile application to the market.</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-baqh{text-align:center;vertical-align:top}
.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
</style>
<table class="tg">
<thead>
<tr>
<th class="tg-baqh"></th>
<th class="tg-amwm">A "Promotion"</th>
<th class="tg-amwm">B "Message"</th>
<th class="tg-amwm">C "Price"</th>
<th class="tg-amwm">D = ABC "OS"</th>
<th class="tg-amwm">Outcome</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-amwm">1</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">- (Android)</td>
<td class="tg-baqh">y_1* = y_1 + g</td>
</tr>
<tr>
<td class="tg-amwm">2</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">+ (iOS)</td>
<td class="tg-baqh">y_2' = y_2 - h</td>
</tr>
<tr>
<td class="tg-amwm">3</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">y_3* = y_3 - h</td>
</tr>
<tr>
<td class="tg-amwm">4</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">y_4' = y_4 + g</td>
</tr>
<tr>
<td class="tg-amwm">5</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">y_5* = y_5 - h</td>
</tr>
<tr>
<td class="tg-amwm">6</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">y_6' = y_6 + g</td>
</tr>
<tr>
<td class="tg-amwm">7</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">y_7' = y_7 + g</td>
</tr>
<tr>
<td class="tg-amwm">8</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">y_8* = y_8 - h</td>
</tr>
</tbody>
</table>
</div>
<h4>2.9.3 Analysis of linear combination of factors (aliasing) and planning of scanning experiments</h4>
<p><em>Table 7. Conducting a quarter-factor experiment with an additional test experiment (9th).</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-baqh{text-align:center;vertical-align:top}
.tg .tg-c3ow{border-color:inherit;text-align:center;vertical-align:top}
.tg .tg-7btt{border-color:inherit;font-weight:bold;text-align:center;vertical-align:top}
</style>
<table class="tg">
<thead>
<tr>
<th class="tg-c3ow"><span style="font-weight:bold">Experiments</span></th>
<th class="tg-7btt">A "temperatire"</th>
<th class="tg-7btt">B "dissolved oxigen"</th>
<th class="tg-7btt">C "substrate type"</th>
<th class="tg-7btt">D = AB "agitation rate"</th>
<th class="tg-7btt">E = AC "pH"</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-7btt">1</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
</tr>
<tr>
<td class="tg-7btt">2</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
</tr>
<tr>
<td class="tg-7btt">3</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
</tr>
<tr>
<td class="tg-7btt">4</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
</tr>
<tr>
<td class="tg-7btt">5</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
</tr>
<tr>
<td class="tg-7btt">6</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
</tr>
<tr>
<td class="tg-7btt">7</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
</tr>
<tr>
<td class="tg-7btt">8</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
</tr>
<tr>
<td class="tg-baqh">9</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">0</td>
<td class="tg-baqh">0</td>
<td class="tg-baqh">0</td>
<td class="tg-baqh">+</td>
</tr>
</tbody>
</table>
</div>
<p><em>Table 8. Conducting a scanning quarter-factor experiment with an additional test experiment (9th)..</em></p>
<div>
<table>
<thead>
<tr>
<th>Experiments</th>
<th>A</th>
<th>B</th>
<th>C </th>
<th>D=AB</th>
<th>E=AC</th>
<th>F=BC</th>
<th>G=ABC</th>
<th>y</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>-</td>
<td>320</td>
</tr>
<tr>
<td>2</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>276</td>
</tr>
<tr>
<td>3</td>
<td>-</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>-</td>
<td>+</td>
<td>306</td>
</tr>
<tr>
<td>4</td>
<td>+</td>
<td>+</td>
<td>-</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>290</td>
</tr>
<tr>
<td>5</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>272</td>
</tr>
<tr>
<td>6</td>
<td>+</td>
<td>-</td>
<td>+</td>
<td>-</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>274</td>
</tr>
<tr>
<td>7</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>-</td>
<td>290</td>
</tr>
<tr>
<td>8</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>255</td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_12.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 12. Results of conducted experiment.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_13.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 13. The result of the experiment after removing insignificant factors.
</i>
</td>
</tr>
</table>
</div>
<h4>2.9.4 Response Surface Methods (RSM)</h4>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_14.png" alt="popcorn-example" width="900px"/>
</td>
<td>
<i>
Fig. 14. The result of full-factor "popcorn-experiment".
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_15.png" alt="Example" width="900px"/>
</td>
<td>
<i>
Fig. 15. Obtained model for one-factor "popcorn experiment".
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_16.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 16. Next experiment outside the model definition area. Evaluation of usability.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_17.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 17. Complication of the model.
</i>
</td>
</tr>
</table>
</div>
<h4>2.9.5 Response Surface Methods (RSM). Complication of the model.</h4>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_18.png" alt="2 factor example" width="900px"/>
</td>
<td>
<i>
Fig. 18. Optimization surface and contour lines.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_19.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 19. Initial full-factor experiment.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_20.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 20. A response surface methods (RSM) to maximize production profits. Comparison of contour lines.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_21.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 21. A response surface methods (RSM) to maximize production profits. The next factors experiment.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_22.png" alt="Example" width="900px"/>
</td>
<td>
<i>
Fig. 22. A response surface methods (RSM) to maximize production profits. The next factors experiment.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_23.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 23. An example of limitations in a system that provide asymmetry.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_24.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 24. A response surface methods (RSM) to maximize production profits. The next factors experiment (assume that contour lines are linear).
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_25.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 25. Type of contour lines depending on the interaction of factors.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_26.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 26. Spread depending of optimum distance.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_27.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 27. "Lack of fit" effect. The last full-factor experiment shows 3 additional experiments to determine the noise level.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_28.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 28. Nonlinear model.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_29.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 29. Nonlinear model. Contours lines of optimum (calculated and real).
</i>
</td>
</tr>
</table>
</div>
<h3>2.10 Conclusion</h3>
<h3>2.11 Questions</h3>
<h2>3. Comparison experiments. Statistical practice</h2>
<h3>3.1 Introduction</h3>
<h3>3.2 Type of representation of sample or general population</h3>
<div>
<table>
<tr>
<td style="width:30%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_30-1.png" alt="histograms" width="900px"/>
</td>
<td style="width:30%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_30-2.png" alt="histograms" width="900px"/>
</td>
<td>
<i>
Fig. 30. Histograms for quantitative (numerical) (a) or qualitative (categorical) (b) features.
</i>
</td>
</tr>
</table>
</div>
<h4>3.2.1 Representation of central tendency</h4>
<p>div>
<br>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_31.png" alt="center tendency" width="900px"/>
</td>
<td>
<i>
Fig. 31. Example of distributions at different values of mode, median and average (taken from <a href="https://stats.stackexchange.com/">https://stats.stackexchange.com/</a>).
</i>
</td>
</tr>
</table></p>
</div>
<h4>3.2.2 Representation of variability</h4>
<h4>3.2.3 Quantiles of distribution</h4>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_32-1.png" alt="box plot" width="900px"/>
</td>
<td>
<i>
Fig. 32 (a). Anatomy of <a href="https://www.r-graph-gallery.com/boxplot.html">box plot</a> (a).
</i>
</td>
</tr>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_32-2.jpg" alt="box plot" width="900px"/>
</td>
<td>
<i>
Fig. 32 (b). Examples of box plot from <a href="https://media.nature.com"> https://media.nature.com </a> site and distributions, which are related to them.
</i>
</td>
</tr>
</table>
</div>
<h3>3.3 Statistics and data comparison</h3>
<h4>3.3.1 Normal distribution</h4>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_33.png" alt="normal distribution" width="900px"/>
</td>
<td>
<i>
Fig. 33. Normal distribution.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_34.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. 34. Example for calculating the percentage of observations.
</i>
</td>
</tr>
</table>
</div>
<h4>3.3.2 Central limit theorem</h4>
<h4>3.3.3 Confidence intervals</h4>
<h4>3.3.4 The idea of statistical conclusion, p-value of significance</h4>
<h4>3.3.5 Practice of using statistics to compare data</h4>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_35.png" alt="t distribution" width="900px"/>
</td>
<td>
<i>
Fig. 35. t-distribution (Student's).
</i>
</td>
</tr>
</table>
</div>
<h4>3.3.6 Graphical comparison of distributions</h4>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_36.png" alt="histogram" width="900px"/>
</td>
<td>
<i>
Fig. 36. Example of data representation in <a href="https://www.r-graph-gallery.com/4-barplot-with-error-bar.html">histogram form</a>.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_37.png" alt="box plot" width="900px"/>
</td>
<td>
<i>
Fig. 37. Example of data representation as <a href="https://www.datamentor.io/r-programming/box-plot/">box plot</a>.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_38.png" alt="box plot" width="900px"/>
</td>
<td>
<i>
Fig. 38. Example of data representation as box plot with average value and confident interval for normalize data.
</i>
</td>
</tr>
</table>
</div>
<h4>3.3.7 Normality data check</h4>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_39.png" alt="qq-plot" width="900px"/>
</td>
<td>
<i>
Fig. 39. Example of normality check with qq plot (more examples you can find in internet with "qq plot with distribution example" search)
</i>
</td>
</tr>
</table>
</div>
<h4>3.3.8 Samples analysis</h4>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_40.png" alt="F-distribution" width="900px"/>
</td>
<td>
<i>
Fig. 40. F-distribution (picture is taken from en.wikipedia.org)
</i>
</td>
</tr>
</table>
</div>
<h4>3.3.9 Multiple comparison</h4>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_41.png" alt="xkcd" width="900px"/>
</td>
<td>
<i>
Fig. 41. Example of multiple comparison effect from <a href="https://xkcd.com">https://xkcd.com</a>.
</i>
</td>
</tr>
</table>
</div>
<h3>3.4 Questions</h3>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig-q_1.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. q-1.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig-q_2.png" alt="example" width="900px"/>
</td>
<td>
<i>
Fig. q-2.
</i>
</td>
</tr>
</table>
</div>
<h2>4. Making accurate models. Analytical practice.</h2>
<h3>4.1 Correlation</h3>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_42.png" alt="correlation" width="900px"/>
</td>
<td>
<i>
Fig. 42. Correlation examples of 2 values from <a href="http://www.cqeacademy.com/cqe-body-of-knowledge/continuous-improvement/quality-control-tools/the-scatter-plot-linear-regression/">CQE Academy</a>.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_43.png" alt="binary correlation" width="900px"/>
</td>
<td>
<i>
Fig. 43. <a href="https://www.zldm.ru/jour/article/view/526#">Example</a> of features binary comparison for 3 type of objects in data science practice.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_44.png" alt="r" width="900px"/>
</td>
<td>
<i>
Fig. 44. Correlation coefficient calculation.
</i>
</td>
</tr>
</table>
</div>
<h3>4.2 One variable regression</h3>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_44.png" alt="regression" width="900px"/>
</td>
<td>
<i>
Fig. 44. Working principle of Least Square Methods for Linear Regression.
</i>
</td>
</tr>
</table>
</div>
<h3>4.3 Coefficient of determination</h3>
<h3>4.4 Conclusion</h3>
<h3>4.5 Questions</h3>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig-q_3.png" alt="question" width="900px"/>
</td>
<td>
<i>
Fig. q-3.
</i>
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig-q_4.png" alt="question" width="900px"/>
</td>
<td>
<i>
Fig. q-4.
</i>
</td>
</tr>
</table>
</div>
<h2>References</h2>
<ol>
<li><a href="https://www.coursera.org/learn/experimentation/">Course Experimentation for Improvement from coursera.org</a>.</li>
<li><a href="https://www.amazon.com/Optimal-Design-Experiments-Study-Approach-ebook/dp/B005DIAPC2">Peter Goos, Bradley Jones. Optimal Design of Experiments. A Case Study Approach</a>.</li>
<li><a href="https://learnche.org/pid/">Book for course Experimentation for Improvement from coursera.org</a>.</li>
<li><a href="http://www1.beuth-hochschule.de/FB_II/reports/Report-2011-004.pdf">Tutorial for designing experiments using the R package</a>.</li>
<li><a href="http://yint.org/Rcourse">Learning R on simple examples</a>.</li>
<li><a href="bek.sibadi.org/fulltext/EPD38.pdf">I.A. Rebrova. Experiment planning (in Russ.). 2017. 107 p.</a>.</li>
<li><a href="https://stepik.org/course/76">Course “Basic os Statistic. Part 1” from stepic.org (in Russ.)</a>.</li>
<li><a href="https://ru.coursera.org/specializations/machine-learning-data-analysis">Specialization “Machine Learning and Data Analysis” from coursera.org (in Russ.)</a>.</li>
<li><a href="https://online.stat.psu.edu/stat503/lesson/1">Course STAT 503 Design of Experiments. Department of Statistics. PennState Eberly College of Science</a>.</li>
<li><a href="https://influentialpoints.com/Training/quantiles_as_summary_statistics-principles-properties-assumptions.htm">Some information about quantiles and ranks</a>.</li>
<li><a href="http://www.real-statistics.com/regression/least-squares-method/">Good linear regression explanation with MS Exel example</a>.</li>
<li><a href="http://tcts.cogitoergo.ru/blog/golova-professora-bambldorfa/">Confidence interval</a>.</li>
<li><a href="https://www.amazon.com/Analytical-Chemistry-7th-Gary-Christian-ebook/dp/B00I8XF5JC">Christian, Gary D. Analytical chemistry</a>.</li>
<li><a href="http://chembaby.com/uchebnye-materialy/xim/2-kurs/analiticheskaya-ximiya/">A lot of interesting materials from MSU Chemistry department (in Russ.)</a>.</li>
<li><a href="https://yint.org/static/stats-mooc/run-experiments.html">Models of experiments from 2nd part of this course</a>.</li>
</ol>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>Планирование эксперимента и анализ данных2019-12-09T10:00:00+03:002020-06-24T12:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2019-12-09:/ru/blog/education-ChSU-technology-experiment_data.html<p>Приветствую всех заинтересованных!</p>
<p>Данный раздел посвящен основам планирования эксперимента и анализу полученных данных. Это является основной любой научной и аналитической работы. При этом я не вижу больших различий в том, какая это будет наука или дисциплина. По сути мы проводим эксперименты и обрабатываем данные постоянно в нашей жизни. Так что …</p><p>Приветствую всех заинтересованных!</p>
<p>Данный раздел посвящен основам планирования эксперимента и анализу полученных данных. Это является основной любой научной и аналитической работы. При этом я не вижу больших различий в том, какая это будет наука или дисциплина. По сути мы проводим эксперименты и обрабатываем данные постоянно в нашей жизни. Так что постараюсь сделать этот курс максимально полезным и осмысленным вне зависимости от области применения. Ведь все мы в той или иной мере являемся учеными и инженерами и в обычной жизни (вопрос в том: хорошими или плохими?). Мы решаем различные оптимизационные задачи (например, как получать бОльшую зарплату), накапливаем данные через наблюдения и строим выводы, опираясь на собственный опыт.</p>
<p><strong>Целью</strong> курса является формирование общих теоретических и практических представлений о том, что такое наука, данные и эксперимент.</p>
<p><strong>Основные задачи:</strong></p>
<ol>
<li>Показать терминологию и логику построения экспериментов в науке.</li>
<li>Описать особенности проведения эксперимента с точки зрения исследуемых факторов.</li>
<li>Определить эффективные пути проведения эксперимента и получения информации с целью оптимизации отклика системы.</li>
<li>Дать введение в статистику и обработку результатов.</li>
<li>Познакомить с построением линейных регрессионных моделей со статистической точки зрения.</li>
<li>Рассмотреть и решить некоторые примеры и задачи по теме курса.</li>
</ol>
<p>Многие задачи и определения взяты с прекрасных курсов <a href="https://www.coursera.org/">coursera.org</a> и <a href="https://stepik.org/">stepic.org</a> (подробнее в списке литературы), а также из различных учебников и пособий по аналитической химии. Категорически рекомендую вам эти платформы дистанционного обучения.</p>
<p>Весь представленный здесь материал исследован, структурирован и переработан исходя из собственного опыта работы и отражает мой субъективный взгляд на вещи.</p>
<h2 id="0-TOC">0. Оглавление</h2>
<ol>
<li><a href="#1">Введение. Наука и научный подход</a></li>
<li><a href="#2">Эксперимент. Система и факторы</a><ol>
<li><a href="#2-1">Введение и терминология</a><ul>
<li><a href="#2-1-1">Точность и воспроизводимость</a></li>
<li><a href="#2-1-2">Немного о правилах представления результата</a></li>
</ul>
</li>
<li><a href="#2-2">Анализ двухфакторного эксперимента</a></li>
<li><a href="#2-3">Построение прогнозов</a></li>
<li><a href="#2-4">Взаимодействие между факторами</a></li>
<li><a href="#2-5">Трехфакторный эксперимент</a></li>
<li><a href="#2-6">Построение модели методом наименьших квадратов (МНК) для 2 факторного эксперимента</a></li>
<li><a href="#2-7">Анализ факторного эксперимента с использованием RStudio</a></li>
<li><a href="#2-8">Сокращение затрат на эксперименты</a></li>
<li><a href="#2-9">Построение карты эксперимента</a><ul>
<li><a href="#2-9-1">Мешающие факторы (disturbances)</a></li>
<li><a href="#2-9-2">Блокировка мешающего фактора при расчете модели</a></li>
<li><a href="#2-9-3">Разбор линейных комбинаций признаков и планирование сканирующих экспериментов</a></li>
<li><a href="#2-9-4">Метод оптимизации поверхности отклика (response surface methods, RSM)</a></li>
<li><a href="#2-9-5">Метод оптимизации поверхности отклика. Усложнение модели</a></li>
</ul>
</li>
<li><a href="#2-10">Заключение</a></li>
<li><a href="#2-11">Вопросы по разделу</a></li>
</ol>
</li>
<li><a href="#3">Сравнительные эксперименты. Статистическая практика</a><ol>
<li><a href="#3-1">Некоторые вводные определения</a></li>
<li><a href="#3-2">Меры представления значений выборки или генеральной совокупности</a><ul>
<li><a href="#3-2-1">Меры центральной тенденции</a></li>
<li><a href="#3-2-2">Меры изменчивости</a></li>
<li><a href="#3-2-3">Квантили распределения</a></li>
</ul>
</li>
<li><a href="#3-3">Статистика и сравнение данных</a><ul>
<li><a href="#3-3-1">Нормальное распределение</a></li>
<li><a href="#3-3-2">Центральная предельная теорема</a></li>
<li><a href="#3-3-3">Доверительные интервалы</a></li>
<li><a href="#3-3-4">Идея статистического вывода, р-уровень значимости</a></li>
<li><a href="#3-3-5">Практика использования статистики для сравнения данных</a></li>
<li><a href="#3-3-6">Графическое сравнение распределений</a></li>
<li><a href="#3-3-7">Проверка данных на нормальность</a></li>
<li><a href="#3-3-8">Анализ выборок</a></li>
<li><a href="#3-3-9">Множественное сравнение</a></li>
</ul>
</li>
<li><a href="#3-4">Вопросы по разделу</a></li>
</ol>
</li>
<li><a href="#4">Построение точных моделей. Аналитическая практика</a><ol>
<li><a href="#4-1">Корреляция</a></li>
<li><a href="#4-2">Регрессия с одной независимой переменной</a></li>
<li><a href="#4-3">Коэффициент детерминации</a></li>
<li><a href="#4-4">Заключение</a></li>
<li><a href="#4-5">Вопросы по разделу</a></li>
</ol>
</li>
</ol>
<h2 id="1">1. Введение. Наука и научный подход</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Итак, наука и научный подход — что это такое?</p>
<p><strong>Наука</strong> (от лат. scientia — знания) — системное представление о строении и организации знаний (информации) о вселенной с возможностью <strong>проверки и предсказания</strong>.</p>
<p>Вообще, как известно из древнегреческой философии, для изучения окружающего мира человеку доступно лишь две возможности: <strong>наблюдение и эксперимент</strong>. Данное утверждение можно принять за аксиому (по крайней мере я не встречал противоречий и в современном мире).</p>
<p>При этом <strong>научную деятельность</strong> можно охарактеризовать следующим образом - это <strong>сбор данных через наблюдения и эксперименты</strong>. Их постоянное обновление, систематизация и анализ. Следствием всего этого является получение (синтез) новых знаний и законов нашего мира.</p>
<p>Другими словами: <strong>на основе данных, мы создаем теории и гипотезы, которые подтверждаются/опровергаются наблюдениями или экспериментами</strong>. Это и есть наука. Таким образом можно предположить следующий цикл научного познания (рис. 1, табл. 1).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_1.png" alt="science cycle" width="900px"/>
</td>
<td>
<i>
Рис. 1. Взаимосвязь научных понятий.
</i>
</td>
</tr>
</table>
</div>
<p><em>Таблица 1. Термины научного познания</em></p>
<div>
<table>
<tr>
<th></th>
<th>применимо к единице или малому количеству</th>
<th>применимо ко всем случаем</th>
</tr>
<tr>
<td>описывает <b>что</b> происходит</td>
<td>наблюдение</td>
<td>закон</td>
</tr>
<tr>
<td>объясняет <b>почему</b> явление происходит</td>
<td>гипотеза</td>
<td>теория</td>
</tr>
</table>
</div>
<p>Как правило в любой науке мы с вами будем <strong>работать над гипотезами и теориями, оперируя законами и наблюдениями (все на основе данных)</strong>.</p>
<p>При этом не стоит забывать, что основным инструментом описания и классификации любого явления является математика. Для эффективной же работы в современном мире нам требуется еще один инструмент — программирование. Советую не забывать об этом и тогда ваша конкурентоспособность будет высокой.</p>
<p>Сам же эксперимент - это неотрывная частью науки и нашей жизни. Это <strong>запланированное наблюдение (проводимое с какой-либо целью)</strong>. Все мы проводим эксперименты в повседневной жизни. Как сказал один преподаватель, если вы перестали экспериментировать - вы разочаровались в жизни. А это значит, что пора начать любое движение и снова экспериментировать.</p>
<blockquote>
<p><strong>Задача.</strong> Подумайте, какие эксперименты вы проводили в недавнее время? Что значит эксперимент для вас?</p>
</blockquote>
<p>Вот хороший пример эксперимента. Допусти, мы выращиваем растение у себя перед монитором и поставили себе цель - оптимизировать его рост. В первую очередь, стоит проанализировать в чем выражается рост: длинна, количество листьев, вес и т.д.. Затем, нужно определить параметры, которые могут влиять на длину растения: количество воды для полива, частота полива, тип почвы, тип горшка для растения, тип удобрения, количество удобрения, свет, температура и т.д..</p>
<p>Таким образом, мы получили довольно много факторов, для которых нужно провести эксперименты, что бы узнать, какой фактор (или комбинация факторов) позволит нам добиться цели.</p>
<blockquote>
<p><strong>Примечание.</strong> Предлагаю запомнить последовательность: цель - факторы в которых выражается цель - влияющие на факторы параметры - эксперимент.</p>
</blockquote>
<p>Из этого примера мы можем понять, с чем столкнемся дальше. <strong>Нам предстоит планировать и описывать эксперименты, а также обрабатывать данные и доказывать их правоту (представительность) с точки зрения статистики</strong>.</p>
<p>Для планирования эксперимента важно знать теорию соответствующей ему области знаний (в которой мы проводим этот эксперимент) и терминологию (что бы правильно ставить цели и определять параметры). Помимо этого, важно пользоваться обозначенным ранее научным циклом. А теперь, непосредственно к делу.</p>
<h2 id="2">2. Эксперимент. Система и факторы</h2>
<h3 id="2-1">2.1 Введение и терминология</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>При проведении эксперимента, нашей целью является <strong>результат (outcome)</strong> - то, что мы хотим узнать/оптимизировать/представить в <strong>численном виде</strong> (т.е. то, что можно измерить). Синонимами результата являются <strong>реакция/оклик</strong> системы.</p>
<p><strong>Факторы (factors, features)</strong> - изменяемые свойства, от которых предположительно зависит результат эксперимента (на них влияют соответствующие <strong>переменные (variables)</strong>, но часто данные термины используют как синонимы).</p>
<p>Все эксперименты должны иметь хотя бы 1 изменяемый (и измеряемый) фактор. И чем больше факторов мы примем к рассмотрению, тем лучше (в общем случае).</p>
<p>Сами <strong>факторы делятся на</strong>:</p>
<ul>
<li><strong>количественные (quantitative)</strong> - которые можно измерить и сравнить (упорядочить по возрастанию/убыванию);</li>
<li><strong>качественные (категориальные, номинативные, qualitative)</strong> - определяющие тип, но которые нельзя сравнить.</li>
</ul>
<p>Иногда выделяют еще и ранговые факторы - определяющие тип, но которые можно сравнить (например, место в соревновании и т.п.). Но для анализа результатов в подавляющем случае используют только количественные или качественные величины. Ранговые величины используются при расчете различных статистических критериев.</p>
<blockquote>
<p><strong>Пример</strong>. Давайте рассмотрим классический пример построения эксперимента и обработки его результатов. Мы хотим увеличить прибыль магазина (<span class="math">\(= \text{доход} - \text{расходы}\)</span>) и считаем, что на это будут влиять 2 фактора: освещенность помещения (можем выставить диммер освещения на 50% и 75%) и цена товара (допустим 7.79 $ или 8.49 $). Вот мы и столкнулись с <strong>двухфакторным экспериментом</strong>.</p>
<p>Отметим, что такой эксперимент нужно проводить 4 раза (например, каждый понедельник). <strong>Недостаточно просто менять по одному признаку (3 эксперимента), нужно добавить еще один - когда меняются оба признака сразу</strong>. Это увеличит количество полученной информации в 2 раза и позволит провести сравнение влияния обоих признаков на результат эксперимента. Дальше мы увидим почему это так.</p>
<p>При планировании эксперимента составляют специальную таблицу (табл. 2). Порядок записи данных в таблице называется стандартным порядком испытаний.</p>
<p><em>Таблица 2. Пример записи результатов эксперимента.</em></p>
</blockquote>
<div>
<table>
<thead>
<tr>
<th>No</th>
<th>real No</th>
<th>Dimmer, %</th>
<th>Price</th>
<th>Profit, $</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>3</td>
<td>50</td>
<td>Low</td>
<td>490</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td>75</td>
<td>Low</td>
<td>570</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
<td>50</td>
<td>High</td>
<td>370</td>
</tr>
<tr>
<td>4</td>
<td>2</td>
<td>75</td>
<td>High</td>
<td>450</td>
</tr>
</tbody>
</table>
</div>
<blockquote>
<p>Даже просто записав получившиеся результаты, мы можем начать их анализ. Например, эффект яркости света при низкой цене составляет 80 $ (разница между тусклым и ярким светом). Тот же эффект при высокой цене будет 80 $. Таким образом, мы <strong>наблюдаем</strong> увеличение прибыли на 80 $ от эффекта освещения. Можно заметить, что эффект сохраняется при разных уровнях цены.</p>
<p>Аналогично для эффекта цены: при слабой освещенности он составит 120 $, при ярком свете - тоже 120 $. Таким образом, при увеличении цены на товар, прибыль падает (для нашего случая).</p>
<p><strong>Задача.</strong> Как Вы думаете, что могло пойти не так? Какие факторы мы не учли и что еще может оказывать влияние на прибыль? Является ли наш эксперимент воспроизводимым (получим ли мы те же результаты при изменении прочих факторов)?</p>
</blockquote>
<p>Интересно, что для рассмотренного примера многие люди провели бы не 4, а 3 опыта в рамках эксперимента. В качестве первого опыта они выбрали бы слабую освещенность и низкую цену. Далее, они бы проведи второй опыт - увеличили яркость света (оставив неизменной цену). Затем, они вернулись бы к начальной точке и провели бы третий опыт, увеличив только цену.</p>
<p>Многие посчитают, что так и надо проводить эксперименты (потому что каждый раз вы меняете только один фактор). Вас учили этому в школе и университете. Менять только один параметр за раз. Но в общем случае <strong>так делать не надо!</strong></p>
<p>Если вы ограничитесь тремя экспериментами, вы получите только одну оценку эффекта от освещенности и только одну оценку эффекта от цены. Однако, всего один дополнительный опыт при увеличении обоих факторов позволит нам оценить оба эффекта дважды. Мы получаем две оценки влияния освещенности и две оценки влияния цены на прибыль. Поэтому, добавив всего один дополнительный опыт, мы фактически удвоили количество полученной информации.</p>
<p>Во многих случаях, этот дополнительный опыт стоит затраченных усилий.</p>
<blockquote>
<p><strong>Примечание</strong>. Мы описали так называемый <strong>“полнофакторный” эксперимент (full factor experiment)</strong>. при этом мы изменяли сразу оба параметра. Однако пример “фиксированного” подхода к эксперименту (когда мы меняем только один фактор при фиксированных прочих факторах) очень распространен в аналитической химии. В случае построения градуировочной прямой мы меняем обычно только одну переменную (аналитический сигнал) в фиксированных условиях и измеряем только один отклик (концентрацию). Как Вы думаете почему? Какую дополнительную экспериментальную работу необходимо сделать, прежде чем станет возможно зафиксировать остальные факторы?</p>
</blockquote>
<p>Немного терминов для словарного запаса. Множество наших наблюдений за объектом есть <strong>процесс измерения</strong>. В свою очередь запись измерения в определенных величинах — это <strong>количественный анализ/измерение</strong> (сравнение с установленным стандартом, например, измерение линейкой). Таким образом, количественное измерение — записанный результат сравнения в определенной размерности. <strong>Качественный анализ</strong> — просто результат сравнения (больше или меньше, есть объект или нет, как правило без размерности). Иногда говорят о полуколичественном анализе, подразумевая не очень точный количественный анализ (но лучше, чем ничего).</p>
<h4 id="2-1-1">2.1.1 Точность и воспроизводимость</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Мы подошли к основным понятиям обработки результатов эксперимента: <strong>точность (прецизионность, accuracy) и воспроизводимость (precision)</strong>. Лучше всего эти понятия объясняет аналогия с мишенями для стрельбы (рис. 2).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_2.png" alt="accuracy and repeatability (variance)" width="900px"/>
</td>
<td>
<i>
Рис. 2. Примеры с точностью и воспроизводимостью стрельбы. Точно и воспроизводимо, не точно и воспроизводимо и "точно" и не воспроизводимо (когда среднее значение не точных результатов оказывается случайно близким к истинному значению).
</i>
</td>
</tr>
</table>
</div>
<p><strong>Точность</strong> определяет близость полученного результата к абсолютному значению, а <strong>воспроизводимость</strong> — насколько близко от предыдущего полученного результата будет лежать следующее такое же измерение. Воспроизводимость и точность оцениваются с помощью очень важного и полезного инструмента — <strong>статистики</strong> (область математики).</p>
<p>Для оценки точности полученного результата мы можем использовать понятие <strong>абсолютной и относительной погрешности</strong>.</p>
<p><strong>Абсолютная погрешность (absolute error)</strong>: <span class="math">\(a = x_{true} − x_{our}\)</span>, где: <span class="math">\(x_{true}\)</span> — истинное значение (как правило никогда не известно, поэтому за него обычно принимаем значение референтного метода анализа или среднее), <span class="math">\(x_{our}\)</span> — полученное нами значение. Как можно заметить по формуле, <em>абсолютная погрешность измеряется в тех же величинах что и само измерение</em>.</p>
<p><strong>Относительная погрешность (relative error)</strong>: <span class="math">\(\Delta = \frac{x_{true} - x_{our}}{x_{true}}\)</span>. <em>Относительная погрешность измеряется в процентах (на то она и относительная).</em></p>
<p>Воспроизводимость в свою очередь определяется немного сложнее и к ней мы вернемся в 3 части курса, посвященной статистической обработке результатов.</p>
<p>Стоит сказать, что существует всего <strong>2 природы погрешности</strong>: <strong>случайная</strong> (random, обусловленная статистической природой измерений, всегда присутствует в нашем несовершенном мире) и <strong>систематическая (systematic)</strong>, обусловленная действием какой-либо постоянной возмущающей силы, которую можно вычислить или учесть (например, гравитация, плохо откалиброванный прибор и т.д.).</p>
<blockquote>
<p><strong>Примечание.</strong> Распространенность “фиксированного” подход в аналитической химии вызвано тем, что он обеспечивает большую точность и достоверность полученных результатов. Однако, прежде чем выбрать наиболее значимый фактор и зафиксировать все остальные, необходимо тщательно изучить систему. Для этого и используется факторный эксперимент. Кроме того, факторный эксперимент доминирует в остальных областях знаний, включая химическую технологию.</p>
</blockquote>
<h4 id="2-1-2">2.1.2 Немного о правилах представления результата</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Важным понятием любой естественной науки является понятие <strong>значащих цифр и правил округления</strong>. Помимо размерности, точности и воспроизводимости, нужно правильно оценить количество <strong>значащих цифр</strong> для полученных экспериментальных данных. Другими словами, нужно показать сколько цифр в полученном результате имеют реальное физическое обоснование (физический смысл). Прочие цифры нужно отбросить (точности мы не потеряем, но цифры станут достоверными).</p>
<p><strong>Количество значащих цифр определяет погрешность эксперимента</strong> (и наоборот, результат измерения округляется до того же знака, что и абсолютная погрешность с одной значащей цифрой).</p>
<blockquote>
<p><strong>Пример.</strong> Если в ходе повторения эксперимента по измерению концентрации стандартного образца с установленной концентрацией в 100.0 моль/л мы получили значение 100.1, 99.8, 100.2, то средняя абсолютная погрешность составит <span class="math">\(\frac{\sum |x_i - 100|}{3} = \frac{0.1 + 0.2 + 0.2}{3} = 0.16666.. \approx 0.2\)</span>. Тогда средний результат измерения будет <span class="math">\(\frac{100.1 + 99.8 + 100.2}{3} = 100.0333... \approx 100.0\)</span>.</p>
<p>Обычно такой результат записывают в виде <span class="math">\(100.0 \pm 0.2\)</span>. Последняя цифра при такой записи получается как бы не точно определена и может принимать любое значение в пределах экспериментальной погрешности <span class="math">\(x \in [99.8; 100.2]\)</span>.</p>
</blockquote>
<p>Значащие цифры очень полезны для естественных наук. Они позволяют упростить некоторые стадии эксперимента и сделать его более воспроизводимым, показать коллегам с какой точностью мы проводили исследования. Например, <strong>зная необходимую точность эксперимента и значащие цифры, можно рассчитать с какой точностью нужно взвешивать</strong> реактивы (если точность эксперимента ограничена 2 значащими цифрами, то взвешивать с 4 значащими цифрами нет смысла).</p>
<p>Далее мы приведем наборы правил для значащих цифр. Чтобы их понять и запомнить нужно <strong>мыслить категориями погрешности</strong>. Всегда помните, что <strong>последняя значащая цифра несет в себе неопределенность</strong> от абсолютной погрешности.</p>
<p>Для записи значащих цифр есть несколько <strong>правил</strong>.</p>
<ul>
<li>Каждая цифра, отличная от 0 - значащая (например, 237 — 3 значащих цифры, 129.7 - 4 значащие цифры).</li>
<li>0 перед не 0-ми числами — не значащий (0.0165 — 3 значащие цифры). В таком случае лучше применять <strong>“научную” запись числа</strong>: <span class="math">\(1.65 \cdot 10^{-1}\)</span>.</li>
<li>0 до десятичной точки — нельзя сказать наверняка, так ученый писать не должен (10 писать нельзя, записывать нужно как <span class="math">\(1.0 \cdot 10\)</span>. Однако к сожалению, такая запись очень часто встречалась в моей практике. Если вы встретили запись эксперимента в виде 3700 единиц, то скорее всего человек не знаком с практикой значащих цифр и просто округлил до целого. Лучше проанализировать эксперимент и установить количество значащих цифр (например, точность взвешивания или абсолютную погрешность).</li>
<li>В остальных случаях 0 - значим (85.950 — 5 значащих цифр, 12.06 — 4 значащих цифры).</li>
</ul>
<blockquote>
<p><strong>Примечание.</strong> <strong>Научная (экспоненциальная) запись числа</strong> всегда подразумевает одну цифру до десятичной точки и точное указание значащих цифр, например, <span class="math">\(1.650 \cdot 10^{-10}\)</span> или <span class="math">\(2.740 \cdot 10^{5}\)</span>. Настоятельно рекомендую всегда пользоваться ею в экспериментальной практике.</p>
<p><strong>Пример.</strong> Масса образца равна 0.1 г. Если взвешивание проводили на аналитических весах с погрешностью <span class="math">\(\pm 0.0001\)</span> г, то правильное представление результата будет 0.1000 г или <span class="math">\(1.000 \cdot 10^{-1}\)</span> г.</p>
</blockquote>
<p>Также есть правила для <strong>арифметических действий со значащими цифрами</strong>, которые позволяют нам сохранить физический смысл величин при математических вычислениях в естественных науках.</p>
<ul>
<li>Сложение/вычитание — мыслите абсолютными категориями (важен порядок числа). Оставляют столько цифр после запятой, сколько их содержится в слагаемом с наименьшим числом десятичных знаков (т.е. точность лимитируется числом, имеющим <strong>наибольшую абсолютную недостоверность</strong>). Помните, что последняя цифра несет неопределенность, которая ограничивает все остальное, но при сложении ее влияние будет пропорционально ее порядку.</li>
<li>Умножение/деление — мыслите относительными категориями (при умножении или делении недостоверность лимитирующего числа пропорционально переноситься на результат). Количество значащих цифр результата будет равно минимальному количеству значащих цифр участников (т.е. точность лимитируется числом, имеющим <strong>наибольшую относительную недостоверность</strong>). Если число значащих цифр одинаково, то лимитирует точность то, у которого <strong>мантисса</strong> меньше (абсолютная величина, равная всем выписанным подряд числам).</li>
</ul>
<blockquote>
<p><strong>Пример.</strong> При <span class="math">\(0.0304 \times 5.43\)</span> точность лимитирует первое (мантисса 1-ого 304, мантисса 2-ого 543). Это работает, поскольку относительная погрешность у меньшего числа будет больше.</p>
</blockquote>
<ul>
<li>Логарифмирование - логарифмируемое число и мантисса (в случае логарифмирования - результат логарифма) содержат одинаковое количество значащих цифр.</li>
</ul>
<blockquote>
<p><strong>Пример.</strong> Рассчитаем значение pH <span class="math">\(2.0 \cdot 10^{-3}\)</span> М раствора HCl. Учтем, что основание логарифма и степени 10 в экспоненциальной записи числа - точные величины. Тогда результат:</p>
<p>
<div class="math">$$
pH(2.0 \cdot 10^{-3}) = -lg(2.0 \cdot 10^{-3}) = -(lg(2.0) -3) = -(0.30 - 3) = 2.70
$$</div>
</p>
<p>Обратите внимание, что за счет сложения с абсолютно точной величиной 3, точность конечного результата составила 3 значащих цифры (абсолютная погрешность измерения осталась прежней, а вот относительная погрешность уменьшилась).</p>
</blockquote>
<ul>
<li>Возведение в степень - множественное умножение чисел, с одинаковым количеством значащих цифр и число значащих цифр результата будет таким же.</li>
<li>Корень числа - можно представить как результат в абсолютной степени, т.е. множественное умножение результата, которое даст число, возводимое в корень. Таким образом число значащих цифр останется неизменным.</li>
</ul>
<div class="math">$$
\sqrt{x} = a \\
x = a^2
$$</div>
<ul>
<li>Соблюдаем арифметический порядок действий как в математике.</li>
<li>Во избежание накопления ошибки, округление результата делается только в конце всего вычисления. В промежуточных расчетах оставляем количество значащих цифр + 1. В конечном результате эта дополнительная цифра округляется.</li>
</ul>
<blockquote>
<p><strong>Примечание.</strong> Приведенные правила вычислений со значащими цифрами есть не что иное, как приближение для погрешности результата. По этой причине чрезвычайно не желательно производить много расчетов для величин с погрешностями (особенно возведение в степень, взятие корня и логарифмирование) - чем больше таких операций, тем более не определен наш конечный результат в действительности. Правила обращения со значащими цифрами при математических операциях можно строго обосновать на основе закона распространения погрешностей (но делать так мы конечно же не будем).</p>
<p><strong>Примечание.</strong> Результаты грави- и титриметрических определений в большинстве случаев записывают в виде чисел, содержащих 4 или 2 значащие цифры, что связано с погрешностью измерения массы веществ (например, <span class="math">\(\pm 0.0001\)</span> г) и объемов (например, <span class="math">\(\pm 0.03\)</span> мл) растворов. Но количество значащих цифр сильно зависит от исходной массы навески.</p>
<p><strong>Примечание.</strong> Результат анализа и его погрешность должны содержать одинаковое число знаков после запятой (например, <span class="math">\(10.1 \pm 0.1\)</span>).</p>
</blockquote>
<p><strong>Правила округления</strong>:</p>
<ul>
<li>округляем до количества значащих цифр (последняя несет в себе неопределенность);</li>
<li>если отбрасываемая цифра больше пяти или меньше — округляем в соответствующую сторону;</li>
<li>если отбрасываемая цифра 5 — округляем до ближайшего четного (если нужно округлить только одну цифру 5: <span class="math">\(10.5 \approx 10\)</span>, но это не так, если округляем 2 цифры <span class="math">\(10.51 \approx 11\)</span>);</li>
<li>не округляем промежуточные вычисления или оставляем нужное количество значащих цифр + 1.</li>
<li>всегда помните, что <strong>значащие цифры это показатель абсолютной погрешности измерения величины</strong> и работать с ними нужно соответственно.</li>
</ul>
<p>Подводя итог еще раз рассмотрим <strong>зачем нам нужно всегда использовать значащие цифры</strong>, а не писать все что выводит нам калькулятор.</p>
<ul>
<li>
<p>Являются достоверными и позволяют определять точность операций.</p>
</li>
<li>
<p>Можем определить лимитирующую стадию эксперимента (где наш эксперимент наименее точен и что в эксперименте стоит улучшить).</p>
</li>
<li>
<p>Показывают физический смысл округления чисел.</p>
</li>
</ul>
<blockquote>
<p><strong>Пример.</strong> Необходимо рассчитать результат вычисления:</p>
</blockquote>
<div class="math">$$
\frac{(\frac{97.7}{32.42} \cdot 100.0) + 36.04}{687} = \\
\frac{301_{.4} + 36.04}{687} = \frac{337_{.4}}{687} = 0.0491_1 \approx 0.0491
$$</div>
<h3 id="2-2">2.2 Анализ двухфакторного эксперимента</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Я надеюсь, что смог показать вам как нужно записывать результаты экспериментов и убедил вас в значимости факторных экспериментов в нашей жизни. Время перейти к их изучению и анализу.</p>
<p>В качестве примера рассмотрим попкорн. Мы будем стараться оптимизировать количество лопнувших зерен. Этот эксперимент хорош тем, что вы можете повторить его у себя дома.</p>
<blockquote>
<p><strong>Примечание</strong>. Если что-то будет непонятно, то можете смело писать мне или посмотреть <a href="https://www.coursera.org/learn/experimentation">курс</a>, где данный эксперимент разобран более подробно.</p>
</blockquote>
<p>В самом эксперименте у нас будут 2 исследуемых фактора, которые принимают по 2 значения: А - время нагрева (160 и 200 с) и В - тип попкорна (желтый и белый). Можно легко посчитать, что число экспериментов будет 4.</p>
<blockquote>
<p><strong>Примечание.</strong> В общем случае для расчета количества экспериментов используют следующую формулу: <span class="math">\(f^v = 2^2 = 4\)</span>, где <span class="math">\(f\)</span> - число факторов, а <span class="math">\(v\)</span> - число значений, принимаемых фактором (согласно еще одной области математике - комбинаторике). В нашем случае мы всегда будем рассматривать одинаковое число уровней у факторов, считайте это своего рода требованием для подобных планов экспериментов.</p>
</blockquote>
<p>Составим таблицу эксперимента (табл. 3). Обозначим низкое и высокое значение фактора как - и + соответственно (для категориального - не важно, выбираем любой). Тогда для А: <em>- = 160, + = 200</em>, для В: <em>- = белый, + = желтый</em>.</p>
<blockquote>
<p><strong>Примечание</strong>. Для получения информативных результатов важно:</p>
<ul>
<li><strong>не использовать экстремальных значений</strong> для факторов (иначе на них оказывается множество влияний и они слишком сильно будут отличаться друг от друга, что увеличит погрешности);</li>
<li><strong>всегда проводить эксперименты в случайном порядке!</strong> Только так мы сможем избавиться от систематической погрешности и возникающих дополнительных связях между величинами.</li>
</ul>
</blockquote>
<p><em>Таблица 3. Результаты двухфакторного “попкорн-эксперимента”.</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-baqh{text-align:center;vertical-align:top}
.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
</style>
<table class="tg">
<thead>
<tr>
<th class="tg-amwm">Standard order</th>
<th class="tg-amwm">Random order (real)</th>
<th class="tg-amwm">A - time *</th>
<th class="tg-amwm">B - corn</th>
<th class="tg-amwm">Results</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-baqh">1<br>2<br>3<br>4</td>
<td class="tg-baqh">3<br>1<br>4<br>2</td>
<td class="tg-baqh">-<br>+<br>-<br>+</td>
<td class="tg-baqh">-<br>-<br>+<br>+</td>
<td class="tg-baqh">52<br>74<br>62<br>80</td>
</tr>
</tbody>
</table>
</div>
<p>* используем стандартный подход: сначала все время изменяем 1-ый фактор, а 2-ой ставим ему в соответствие.</p>
<p>Итак, результаты получены. Само время проводить анализ. Начинать всегда лучше всего с визуализации (так уж устроено наше мышление). Визуализация факторного эксперимента называется <strong>кубической диаграммой (графиком/планом, cube plot)</strong>. Она приведен на рис. 3.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_3.png" alt="cube plot" width="900px"/>
</td>
<td>
<i>
Рис. 3. Кубическая диаграмма 2-ух факторного эксперимента с попкорном. На диаграмме изображены изолинии.
</i>
</td>
</tr>
</table>
</div>
<p>Эта диаграмма показывает эффект от каждого фактора в соответствующем углу квадрата или куба (2 или 3 факторные эксперименты).</p>
<p>Начнем с <strong>оценки эффекта от времени</strong>. При увеличении времени готовки для желтого попкорна, результат увеличивается с 62 до 80 лопнувших зерен (ЛЗ). Мы видим рост на 18 единиц. Для белого попкорна мы видим изменение с 52 до 74 ЛЗ, то есть рост на 22 единицы. Итак, в среднем мы видим увеличение на 20 единиц при увеличении продолжительности нагрева со 160 до 200 секунд.</p>
<p>Далее давайте оценим разницу между двумя типами попкорна. Зафиксируем время нагрева и посмотрим на эффект от перехода от белого к желтому попкорну: с 74 до 80 для 200 с и с 52 до 62 для 160 с. В среднем мы видим увеличение на 8 единиц при переходе от белого к желтому попкорну. Убедитесь, что ваша интерпретация соответствует кубической диаграмме. Эта визуализация очень важна для самопроверки результатов анализа.</p>
<p>Но помимо результатов, на кубической диаграмме отображены еще и <strong>контурные линии</strong> (contour plot, их еще называют <strong>изолиниями</strong>, isolines). Они обозначают область, в которой значение измеряемого признака остается постоянным (на 1 линии количество лопнувших зерен будет постоянным). Их рисуют начиная с любого угла кубической диаграммы, значение в котором не является максимальным или минимальным. Затем ищут это же значение на противоположенной стороне квадрата и проводят линию в соответствии с предполагаемым уровнем результата. <strong>Для проверки кривизны линии нужно рассчитать наше фиксированное значение для середины шкалы.</strong></p>
<p>Затем рисуем вторую линию аналогично для значения в 74. Остальные рисуем параллельно полученным линиям.</p>
<p>Благодаря изолиниям можно быстро понять, куда начинать движение для оптимизации результата, т.е. по направлению к нашей цели. Например, если цель — максимизировать количество лопнувших зерен, то двигаться нужно перпендикулярно изолиниям в верхний правый угол. В данном случае это означает, что мы должны взять желтый попкорн и увеличить время приготовления (что вполне интуитивно понятно из кубической диаграммы).</p>
<p>Такой подход к оптимизации (с использованием изолиний) помогает нам определиться с метом проведения следующего эксперимента. Контурная диаграмма - это наш <strong>градиент</strong> (gradient, путь, по которому пройдут наши эксперименты для подтверждения/опровержения закона или теории).</p>
<p>Отмечу, что есть еще один способ визуализации - <strong>диаграмма взаимодействия (interaction plot)</strong> (рис. 4).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_4.png" alt="interaction plot" width="900px"/>
</td>
<td>
<i>
Рис. 4. Диаграмма взаимодействия для 2 факторного эксперимента с попкорном.
</i>
</td>
</tr>
</table>
</div>
<p>Обратите внимание, что эти две линии практически параллельны, что означает, что в исследуемой системе практически отсутствует взаимодействие. Выбор переменной для диаграммы взаимодействия не играет большой роли и мы могли бы выбрать другую переменную для обозначения на горизонтальной оси.</p>
<p>Для всех описанных методов визуализации не требуется какое-либо программное обеспечение. Вы можете использовать эти методы визуализации как для числовых, так и для категориальных факторов. Все это демонстрирует явное преимущество такого подхода к эксперименту: мы можем быстро интерпретировать результаты, используя простые графические инструменты, элементарную математику и лист бумаги.</p>
<p>Тот факт, что все так просто, означает, что результатами будет легко поделиться с менеджерами или коллегами на работе.</p>
<h3 id="2-3">2.3 Построение прогнозов</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Мы рассмотрели пример планирования, проведения и анализа эксперимента. Но что это нам дает? Как мы можем представить и использовать полученные данные? Ответ - построить <strong>прогноз (модель, уравнение регрессии)</strong>. В рамках нашего курса мы будем рассматривать только линейные модели (за небольшим исключением). Такие модели наиболее универсальные (любую гладкую и монотонную функцию можно представить как набор линейных отрезков).</p>
<p>В случае нашего “попкорн-эксперимента” (2-ух факторный эксперимент), полученная модель состоит из 3 частей:</p>
<div class="math">$$
\hat{y} = a_0 + a_1 \cdot x_A + a_2 \cdot x_B
$$</div>
<p>где,</p>
<ol>
<li><span class="math">\(a_0\)</span> - <strong>базовый результат (intercept)</strong>, который мы ожидаем увидеть при отсутствии влияния (когда закодированные значения факторов = 0). Этот коэффициент рассчитывается как среднее из 4 значений на кубической диаграмме (т.е. ее центр).</li>
<li><span class="math">\(a_1\)</span> - <strong>коэффициент влияния</strong> фактора А (его закодированного значения), зависит от времени приготовления. Рассчитывается как средняя нормированная разница между высоким и низким значением фактора: <span class="math">\(a_1 = \frac{\frac{(80-62) + (74-52)}{2}}{2}\)</span>. Обратите внимание, нормировка подразумевает расчет коэффициента для единичного изменения фактора (т.е. с -1 до 0 или от 0 до +1), поэтому мы должны разделить усредненное значение на 2.</li>
<li><span class="math">\(a_2\)</span> - <strong>коэффициент влияния</strong> фактора В, зависящий от типа зерен. Рассчитывается аналогично пункту 2.</li>
</ol>
<p>Учитывая приведенное описание наша модель будет:</p>
<div class="math">$$\hat{y} = 67 + 10 \cdot x_A + 4 \cdot x_B$$</div>
<blockquote>
<p><strong>Задача</strong>. Проверьте корректность прогнозов этого уравнения для различных значений переменных A и B. Обращайте внимание на изолинии!</p>
</blockquote>
<h3 id="2-4">2.4 Взаимодействие между факторами</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>До сих пор мы рассматривали весьма идеальные случаи где нет взаимного влияния факторов друг на друга и на целевую переменную. Однако зачастую это не так.</p>
<blockquote>
<p><strong>Пример</strong>. Мы пытаемся отмыть руки и проводим 2-ух факторный эксперимент: есть/нет мыла и теплая/холодная вода. Можно заметить, что эффект теплой воды усилится при использовании мыла. И наоборот, эффект мыла усилится при использовании теплой воды. То есть “взаимодействие” говорит о том, что эффект одного фактора зависит от уровня другого фактора.</p>
<p>Кроме этого, эти взаимодействия обычно симметричны (не не всегда!). Т.е. нет разницы будем ли мыть руки в теплой воде с мылом или с мылом в теплой воде, результат будет одинаков.</p>
</blockquote>
<p>Первым показателем наличия взаимосвязи является несимметричность линий на диаграмме взаимодействия или изогнутость изолинии на кубической диаграмме. Если вы наблюдаете такие эффекты, то это проявляется <strong>двухфакторное взаимодействие</strong> (когда поведение одной переменной сильно отличается в зависимости от уровня другой переменной).</p>
<p>Рассмотрим эксперимент на рис. 5 и рассчитаем все коэффициенты. Эксперимент заключался в анализе влияния времени выпечки (фактор А) и типа подсластителя (фактор В) на вкус печенья (по шкале от 1 до 10).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_5.png" alt="cube plot" width="900px"/>
</td>
<td>
<i>
Рис. 5. Кубическая диаграмма эксперимента со взаимодействием признаков.
</i>
</td>
</tr>
</table>
</div>
<p>Обратите внимание, что изолинии уже не параллельные и изображать их нужно в изогнутом виде (еще раз напомню, на изолинии должно быть одинаковое значение результата). Для этого рекомендую провести вспомогательную линию по центру кубической диаграммы.</p>
<p>Выраженная не параллельность линий сигнализирует о наличии взаимного влияние факторов друг на друга. <strong>Строго говоря, при анализе эксперимента нужно всегда строить модель с учетом взаимного влияния и исключать его только если коэффициент перед этим фактором в модели очень мал</strong>. Рассчитаем получившуюся модель.</p>
<p>Для начала рассчитаем влияние каждого фактора на эксперимент в отдельности (без учета взаимного влияния, аналогично предыдущему примеру).</p>
<p>Затем, учтем фактор взаимного влияния, рассчитав изменения при одном фиксированном факторе (тип подсластителя). Тогда, математически, взаимодействие рассчитывается как усредненная разница при высоком и низком значении признака:</p>
<div class="math">$$interaction = \frac{(9-4) - (5-3)}{2} = 1.5$$</div>
<p>Это значение нормируется на единицу изменчивости фактора (уже классический прием).</p>
<p>Проверим симметричность влияния, зафиксировав другой фактор:</p>
<div class="math">$$interaction = \frac{(9-5)(4-3)}{2} = 1.5$$</div>
<p>Таким образом влияние действительно симметрично и равнозначно. В итоге, наша модель запишется в виде:</p>
<div class="math">$$
\hat{y} = \frac{3+5+4+9}{4} + \frac{(5-3) + (9-4)}{2} \cdot \frac{1}{2} \cdot x_A +\\
\frac{(4-3) + (9-5)}{2} \cdot \frac{1}{2} \cdot x_B + \frac{1.5}{2} \cdot x_A x_B
$$</div>
<div class="math">$$
\hat{y} = 5.25 + 1.75 x_A + 1.25 x_B + 0.75 x_A x_B
$$</div>
<blockquote>
<p><strong>Задача</strong>. Постройте диаграмму взаимодействия факторов и убедитесь в наличие взаимодействия. Проверьте точность предсказания нашей модели для краевых значений и различной времени готовки без учета взаимного влияния и с учетом взаимного влияния.</p>
</blockquote>
<h3 id="2-5">2.5 Трехфакторный эксперимент</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>После того, как мы освоили азы анализа результатов эксперимента, мы можем усложнить исходные условия.</p>
<p>Новый пример взят из учебника Бокса, Хантера и Хантера, которая называется <a href="https://www.amazon.com/Statistics-Experimenters-Design-Innovation-Discovery/dp/0471718130">“Статистика для экспериментаторов”</a>. В этом эксперименте проводится поиск оптимальной комбинации параметров для уменьшения количества загрязнителя в сточных водах очистных сооружений.</p>
<p>Рассматривается <strong>три фактора с 2 уровнями</strong>.</p>
<ul>
<li>Первый фактор — С (chemical), химическое соединение (два соединения P и Q).</li>
<li>Следующий фактор - T (temperature), температура очистки воды (<span class="math">\(72^o F, $100^o F\)</span>).</li>
<li>Последний фактор - S (stirring speed), это скорость перемешивания (200 или 400 оборотов в минуту).</li>
</ul>
<p>Тогда количество необходимых экспериментов составит:</p>
<div class="math">$$
f^v = 3^2 = 8
$$</div>
<p>где <span class="math">\(f\)</span> - число факторов, а <span class="math">\(v\)</span> - число значений, принимаемых фактором.</p>
<p>Результатом эксперимента будет количество загрязняющих веществ, измеренное в фунтах.</p>
<p>Используя стандартный порядок проведения эксперимента, составим таблицу эксперимента (табл. 4).</p>
<p><em>Таблица 4. Результаты трехфакторного эксперимента.</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-baqh{text-align:center;vertical-align:top}
.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
</style>
<table class="tg">
<thead>
<tr>
<th class="tg-amwm">Standard order</th>
<th class="tg-amwm">Random order (real)</th>
<th class="tg-amwm">C - chemical</th>
<th class="tg-amwm">T - time</th>
<th class="tg-amwm">S - stirring speed</th>
<th class="tg-baqh"><span style="font-weight:bold">Outcome</span></th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-baqh">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8</td>
<td class="tg-baqh">6<br>2<br>5<br>3<br>7<br>1<br>8<br>4</td>
<td class="tg-baqh">-<br>+<br>-<br>+<br>-<br>+<br>-<br>+</td>
<td class="tg-baqh">-<br>-<br>+<br>+<br>-<br>-<br>+<br>+</td>
<td class="tg-baqh">-<br>-<br>-<br>-<br>+<br>+<br>+<br>+</td>
<td class="tg-baqh">5<br>30<br>6<br>33<br>4<br>3<br>5<br>4</td>
</tr>
</tbody>
</table>
</div>
<p>Одно из преимуществ такой таблицы заключается в том, что мы можем быстро получить общее представление о влиянии фактора на результат. Например, оцените как изменяется количество загрязняющих веществ, когда мы меняем фактор химического соединения C? Уровень фактора меняется с низкого на высокий и мы видим ту же самую картину с количеством загрязняющих веществ. Посмотрите на эффект фактора S. Первые четыре эксперимента в среднем показали очень высокий уровень загрязнения, а последние четыре эксперимента — низкий уровень загрязнения.</p>
<p>Просто глядя на таблицу, мы можем сказать, что факторы C и S скорее всего важны для понимания полученных результатов.</p>
<p>На основании таблицы эксперимента составим кубическую диаграмму (рис. 6.)</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_6.png" alt="cube plot" width="900px"/>
</td>
<td>
<i>
Рис. 6. Кубическая диаграмма трехфакторного эксперимента.
</i>
</td>
</tr>
</table>
</div>
<p><strong>Общий вывод</strong>. Согласно полученным результатам, нам нужно взять химикат Q, проводить очистку при низкой температуре и на высокой скорости перемешивания (400 оборотов в минуту).</p>
<p><strong>Проанализируем основные эффекты и взаимодействия</strong>.</p>
<p>Начнем с первого фактора C (выбора между химическими соединениями P и Q, где Q — высокий уровень фактора). Из кубической диаграммы мы можем получить четыре оценки эффекта С (вдоль каждого из четырех горизонтальных ребер). При высокой температуре и высокой скорости перемешивания (т.е. высокий уровень T и высокий уровень S) эффект от этого фактора равен 4-5 фунтов загрязнения. При высокой температуре и низкой скорости: 33-6. При низкой температуре и высокой скорости (т.е. Т - и S +), эффект равен: 3-4. И, наконец, при низкой температуре и низкой скорости: 30 и 5.</p>
<p>Мы можем проанализировать полученную информацию с точки зрения каждого фактора и их возможного взаимодействия.</p>
<ol>
<li>
<p>В ходе опытов, химическое соединение показало четыре результата. Среднее для этих четырех чисел равно <span class="math">\(\frac{50}{4} = 12.5\)</span>. Но что на самом деле означает полученное число 12.5? Как бы вы объяснили это значение своему менеджеру, который ничего не смыслит в статистике и экспериментах?</p>
<ul>
<li>
<p>Значение в 12.5 говорит о том, что в среднем мы ожидаем увидеть увеличение количества загрязняющих веществ на 12.5 фунтов на тонну при переходе от химического соединения P к Q (хотя для модели используется коэффициент 6.25 - половина). <strong>Таким образом для категориальных признаков в модели мы пишем половину от эффекта (учитываем нормировку)</strong>.</p>
</li>
<li>
<p>Еще одна вещь, на которую следует обратить внимание, это расхождение эффектов химиката при высоком и низком уровне перемешивания (S). Обратите внимание на огромную разницу, которая говорит о том, что существует явное взаимодействие между фактором C и фактором S.</p>
</li>
</ul>
</li>
<li>
<p>Прежде чем мы перейдем к взаимодействиям, давайте рассмотрим температуру (T). Заметное влияние температуры на отклик системы в таблице отсутствует. Это же подтверждает рассчитанный коэффициент в модели = 1.5 единицы (или 0.75 при нормировании эффекта). Это действительно слабый эффект.</p>
</li>
<li>
<p>Наконец, рассмотрим эффект скорости перемешивания (S). Среднее для эффекта равно -14.5 (или -7.25 при нормировке). Другими словами, мы ожидаем среднее снижение количества загрязняющих веществ на 14.5 фунтов при переходе от низкой скорости перемешивания к высокой.</p>
</li>
</ol>
<div class="math">$$
\hat{y} = 11.25 + 6.25 x_C + 0.75 x_T - 7.25 x_S \dots
$$</div>
<p>На этом этапе вам всегда надо делать паузу, чтобы <strong>убедиться, что полученные результаты имеют смысл</strong>. По горизонтальной оси мы видим, что переход от химиката P к Q увеличивает загрязнение (рис. 6). Поэтому значение 6.25 выглядит адекватно. Небольшое значение 0,75 для температуры также выглядит логично, потому что она действительно имеет очень слабый эффект. И, наконец, увеличение скорости перемешивания приводит к наиболее существенному снижению загрязнения: на 7.25 единиц.</p>
<blockquote>
<p><strong>Примечание</strong>. Всегда проверяйте полученные коэффициенты модели на разумность!</p>
</blockquote>
<p><strong>Как только мы закончили с интерпретацией факторов по отдельности, можно перейти к взаимодействиям</strong>. Ранее мы отметили, что эффект химиката сильно меняется при низкой скорости перемешивания. Однако на задней грани куба (при высоких скоростях перемешивания) эффект от выбора химиката практически равен нулю. Очевидно, что скорость перемешивания изменяет эффект от химического соединения. Таким образом мы наблюдаем взаимодействие между 2 факторами S и C. Для численной оценки воспользуемся уже знакомым нам приемом - добавим новый член в уравнение.</p>
<p>У нас есть две возможности его рассчитать, фиксируя разные уровни переменной:</p>
<ol>
<li>при высокой температуре;</li>
<li>вторая — при низкой температуре.</li>
</ol>
<p><strong>Нет гарантии, что эффект будет симметричен, поэтому произведем оба расчета, а затем возьмем среднее</strong> (даже если эффект будет симметричен мы ничего не потеряем, а в противном случае - учтем оба влияния). А потом, как и всегда, нормируем на количество уровней признака (запишем половину).</p>
<p>Пока что, мы учли только взаимодействие между факторами С-S. По остальным двухфакторным взаимодействиям не наблюдается видимого значимого влияния (одна из возможных причин - температура слабо влияет на модель). На самом деле, есть еще и <strong>трехфакторное взаимодействие C-T-S</strong>. Но пытаться все это учесть в ручную весьма утомительно и велик шанс наделать при этом ошибок. Далее мы будем использовать для этого компьютер. Поэтому пока остановимся на полученных результатов и проанализируем их.</p>
<p><strong>Общий анализ результатов</strong>. Основное заключение - при низких скоростях перемешивания химикат Q не эффективен, но при высоких оба химических соединения одинаково эффективны. Начиная с этого момента эксперименты становятся действительно мощным инструментом. Мы увидели, что самый низкий уровень загрязнений был при использовании химиката Q с высокой S и низкой T (найдите это значение на кубической диаграмме). Но что если, согласно требованиям правительства, загрязнение должно быть меньше 10? И при этом, допустим, химикат Q стоит вдвое дороже, чем P…</p>
<p>На самом деле мы сейчас мысленно оценили <strong>дополнительный результат — прибыль</strong>. Не забывайте, что прибыль (или расходы) часто играют важную роль во всех системах. Поэтому вы всегда должны иметь в виду экономическую составляющую каждого угла куба.</p>
<p>При этом мы убедились в малом эффекте температуры. И вот в чем вопрос: значит ли это, что рассматривать температуру в качестве фактора бессмысленно? И ответ - нет. Важно понимать, что даже незначительные эффекты представляют для нас важную информацию для изучения системы. Так, в нашем примере мы видим, что в диапазоне температур <span class="math">\([70; 100]^o F\)</span> температура оказывает незначительное влияние на количество загрязняющих веществ. И это важно, потому что на основании этой информации инженер или оператор может подобрать наиболее экономически выгодные условия работы. И, опять-таки, все сводится к прибыли. Вполне вероятно, что работа при более низкой температуре позволит сэкономить энергию. А поскольку температура оказывает лишь незначительное влияние на систему в целом, мы не окажем существенного влияния на уровень загрязнения если решим работать при низкой температуре. И это отличный результат.</p>
<blockquote>
<p><strong>Задание.</strong> Постройте прогноз для любого случая из кубической диаграммы и проверьте его для модели без учета влияний и с учетом влияний. В какую сторону работают взаимодействия (увеличивают или уменьшают количество загрязняющих веществ)?</p>
<p><strong>Задача.</strong> Как Вы думаете, почему химическое соединение Q оказывается менее эффективным при низкой скорости перемешивания, но при высокой работает очень хорошо?</p>
</blockquote>
<h3 id="2-6">2.6 Построение модели методом наименьших квадратов (МНК) для 2 факторного эксперимента</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Дойдя до этого раздела, мы рассмотрели несколько важных примеров того, как нужно строить и анализировать эксперимент. Более того, мы научились рассчитывать модель, которая позволяет связать закодированные факторы с целевой переменной. Однако, коэффициенты для модели мы подбирали интуитивно, основываясь на вполне логичных представлениях об усреднении влияний признаков. Настало время более формального описания модели по результатам экспериментов.</p>
<p>Для построения <strong>математически обоснованной прогнозной модели мы воспользуемся</strong> наиболее распространенным подходом - <strong>методом наименьших квадратов (МНК)</strong>. Мы еще затронем статистическое обоснование данного метода в 3 главе, а пока сосредоточимся на его общих особенностях и экспериментальном применении. В качестве примера, мы будем рассматривать наш “попкорн-эксперимент”. Напомню, что линейная модель для двухфакторного эксперимента в общем случае выглядит как:</p>
<div class="math">$$
\hat{y} = b_0 + b_A x_A + b_B x_B + b_{AB} x_A x_B
$$</div>
<p>при этом <span class="math">\(x_A\)</span> и <span class="math">\(x_B\)</span> - кодированные переменные (через значения -1 и +1 мы кодируем реальные физические величины: для А - время, а для В - тип зерен).</p>
<p>В нашем случае проводилось 4 опыта, для каждого из которых должна быть справедлива предложенная модель. Тогда мы можем составить систему уравнений:</p>
<div class="math">$$
\begin{cases}
\hat{y_1} = b_0 + b_A x_{A-} + b_B {x_B-} + b_{AB} {x_A-} {x_B-} \\[2ex]
\hat{y_2} = b_0 + b_A x_{A+} + b_B {x_B-} + b_{AB} {x_A+} {x_B-} \\[2ex]
\hat{y_3} = b_0 + b_A x_{A-} + b_B {x_B+} + b_{AB} {x_A-} {x_B+} \\[2ex]
\hat{y_4} = b_0 + b_A x_{A+} + b_B {x_B+} + b_{AB} {x_A+} {x_B+}
\end{cases}
$$</div>
<p>Таким образом, проведя эксперимент мы имеем 4 уравнения с 4 неизвестными, а значит - можем решить их!</p>
<p>Эти уравнения — линейные, поэтому система уравнений достаточно просто решается с использованием матричных методов. Не стоит пугаться, это просто более удобная форма записи и метод расчета. Давайте я покажу вам, как это сделать.</p>
<p>В матричной форме наши уравнения записываются следующим образом:</p>
<div class="math">$$
\begin{pmatrix}
y_1 \\
y_2 \\
y_3 \\
y_4 \\
\end{pmatrix} =
\begin{pmatrix}
1 & -1 & -1 & -1 \cdot -1 \\
1 & +1 & -1 & +1 \cdot -1 \\
1 & -1 & +1 & -1 \cdot +1 \\
1 & +1 & +1 & +1 \cdot +1 \\
\end{pmatrix}
\begin{pmatrix}
b_0 \\
b_A \\
b_B \\
b_{AB} \\
\end{pmatrix}
$$</div>
<p>Значения в матрице <span class="math">\(4 \times 4\)</span> состоят из кодированных переменных. Остальные 2 вектора (матрицы с одним столбцом или строкой данных) состоят из результатов опытов и неизвестных нам коэффициентов перед кодированными переменными.</p>
<p>В так называемом <strong>“аналитическом” виде</strong> (т.е. который имеет строгое математическое обоснование), такая матричная система имеет решение:</p>
<div class="math">$$
b = (X^T \cdot X)^{-1} \cdot (X^T \cdot y)
$$</div>
<p>где <span class="math">\(b\)</span> и <span class="math">\(y\)</span> - векторы неизвестных коэффициентов и результатов эксперимента соответственно, а <span class="math">\(X\)</span> - матрица кодированных переменных (<span class="math">\(X^T\)</span> - транспонированная матрица, <span class="math">\((X)^{-1}\)</span> - обратная матрица).</p>
<blockquote>
<p><strong>Примечание.</strong> Факторы не всегда должны быть кодированными (могут использоваться и обычные, “реальные” значения). Однако тогда мы можем столкнуться с рядом проблем (несбалансированность величин, неустойчивость решения и т.д.). Так что лучше всегда использовать кодированные значения (или хотя бы нормированные на среднее и дисперсию).</p>
</blockquote>
<p>Найти описанное решение можно и в ручную (если использовать правила линейной алгебры). Однако <strong>лучше использовать компьютерные программы</strong>, которые очень эффективно решат за вас эти уравнения. Все, что нам нужно, это матрица <span class="math">\(X\)</span> и вектор <span class="math">\(y\)</span>. И у нас есть все необходимое: матрица <span class="math">\(X\)</span> получилась из таблицы эксперимента, а вектор <span class="math">\(y\)</span> — это просто результаты четырех экспериментов.</p>
<p>Для компьютерных расчетов мы можем использовать ряд программ. Основные из них: MS Exel, R, Python и др. Как можно заметить, 2 из 3 перечисленных мною программ - языки программирования. Но не стоит их боятся. Например R - это очень распространенный и простой язык для статистики и анализа данных. Установить и использовать его довольно легко, а результат получается наглядным. С другой стороны современный Exel предоставляет весьма широкий набор функций работы с данными (в том числе работа с моделями и базами данных, pivot tables и т.д.). Помимо этого доступно множество платных и бесплатных программ для планирования эксперимента и анализа данных. Вы можете провести их поиск в интернете. Но в рамках нашего небольшого курса мы рассмотрим довольно простые примеры на R. Кроме того, более подробно работа с R рассмотрена в <a href="https://www.coursera.org/learn/experimentation/">этом курсе с русскими субтитрами</a> или <a href="https://stepik.org/course/129/promo">другом, русскоязычном курсе</a>.</p>
<h3 id="2-7">2.7 Анализ факторного эксперимента с использованием RStudio</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>На предыдущих примерах вы научились выполнять необходимые расчеты и анализ результатов эксперимента в ручную. Однако при таком подходе наши возможности сильно ограничены, а риск ошибки очень высок. Время переходить на цифровые технологии! Для этого понадобится выбрать программное обеспечение для построения эксперимента и анализа данных. И на мой взгляд для этого отлично подходит <strong>язык программирования R и среда разработки RStudio</strong>.</p>
<p>Язык R и ПО для работы с ним бесплатны, имеют интуитивно понятный интерфейс, но самое главное, что R широко используется различными компаниями и исследователями. R настолько универсален, что вы можете использовать его даже в <a href="http://yint.org/Rweb">браузере</a>. Можете воспользоваться этой возможностью, если не хотите устанавливать ПО или не можете им воспользоваться (например, потому что пользуетесь рабочим компьютером). Если все же Вы настроены серьезно и хотите работать на своем компьютере, то вам потребуется загрузить две программы: <a href="https://cran.r-project.org/mirrors.html">сам R</a> и <a href="https://rstudio.com/products/rstudio/download/">RStudio</a>. В первом случае нужно будет выбрать место скачивания, наиболее быстрое или близкое к вам (Россия или Германия). Установите оба пакета программного обеспечения на компьютер и запустите RStudio (она уже сама будет запускать R в фоновом режиме).</p>
<p>Создайте новый R-скрипт через меню <code>File</code>. В открывшемся окне мы будем писать свои простые команды и планировать эксперименты с последующим их анализом.</p>
<p>Я хочу обратить внимание на 2 вещи:</p>
<ul>
<li>во-первых, пользователи часто ошибаются, потому что <strong>команды в R чувствительны к регистру</strong> (например, команда <code>c(1, 2, 3, 4)</code> создаст список с 4 записями, но если вы используете заглавную <code>C(1, 2, 3, 4)</code>, то ничего не получится);</li>
<li>во-вторых, если вам понадобилась помощь, используйте <strong>команду справки <code>help()</code></strong>.</li>
</ul>
<p>Пример, “попкорн-эксперимент” и рабочие области в RStudio показаны на рис. 7.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_7.png" alt="popcorn-experiment in R" width="900px"/>
</td>
<td>
<i>
Рис. 7. "Попкорн-эксперимент" в RStudio. Изображены окна (слева на право и сверху в низ): написания скриптов, отображения переменных в памяти компьютера, консоль для вывода результата скрипта, окно справки по командам.
</i>
</td>
</tr>
</table>
</div>
<p>В дальнейшем, вместо скриншотов, мы будем использовать просто код, который вы можете скопировать и выполнить у себя в RStudio:</p>
<div class="highlight"><pre><span></span><code><span class="n">A</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">B</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">52</span><span class="p">,</span> <span class="m">74</span><span class="p">,</span> <span class="m">62</span><span class="p">,</span> <span class="m">80</span><span class="p">)</span>
<span class="n">popped_corn</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">A</span> <span class="o">+</span> <span class="n">B</span> <span class="o">+</span> <span class="n">A</span><span class="o">*</span><span class="n">B</span><span class="p">)</span>
<span class="n">popped_corn</span>
</code></pre></div>
<p>Внимательные ученики могли обратить внимание, что запись эксперимента на картинке и в коде отличается и скоро мы узнаем почему.</p>
<p>Мы начнем с конца (своего рода обратная задача). <strong>Переменная</strong> <code>popped_corn</code> содержит в себе рассчитанные коэффициенты модели и просто выводит их в консоль (в этом и состоит смысл переменных, они являются ссылками на определенные значения или операции, которые мы присвоили им). Выше мы объявляем саму прогнозную модель под названием <code>popped_corn</code>. Если это ваше первое знакомство с R, вам может стать немного страшно - призываю быть мужественными и верь в свои силы!</p>
<p>Рассмотрим все по очереди. Начнем с обратной стрелки (<code><-</code>). Это символы меньше (<) и тире (-), которые вместе похожи на стрелку. На языке R так выглядит операция <strong>присваивания</strong> (т.е. мы передаем переменной какое-либо значение и дальше можем просто писать переменную для использования этого значения). Другими словами, мы создаем переменную с именем <code>popped_corn</code> и присваиваем ей все, что находится справа от стрелки, в данном случае — линейную модель (точнее, результаты расчета линейной модели). <code>lm</code> справа от стрелки означает “линейная модель”, указывая на то, что мы хотим получить линию методом наименьших квадратов. И наконец, символ в середине — тильду (<code>~</code>) — можно интерпретировать как “предсказывается …” или “описывается …”.</p>
<blockquote>
<p><strong>Примечание.</strong> В R использование <code><-</code> и <code>=</code> практически эквивалентно, но я рекомендую использовать <code><-</code> в качестве операции присвоения, чтобы избежать путаницы. Подробнее, можете почитать <a href="https://stackoverflow.com/questions/2271575/whats-the-difference-between-and-in-r">здесь</a>.</p>
</blockquote>
<p>Для запуска кода выделите все команды и нажмите <code>Run</code> или без выделения - кнопку <code>Source</code> (в модификации <code>Source with Echo</code>). Если мы не получили сообщение об ошибке в <code>Console</code>, то Вы увидите результат (тоже в консоли) и существующие переменные справа (<code>Environment</code>). Выходные данные этого небольшого кода показывают коэффициенты для построенной линейной модели.</p>
<p>Мы должны получить центральную точку (intercept) 67; основной эффект для А: 10 единиц; для B: 4 и эффект двухфакторного взаимодействия AB: -1. Обратите внимание, что эти числа точно соответствуют нашим расчетам вручную.</p>
<p>Вот и вся магия программирования. Это действительно самый быстрый и удобный способ получить модель с помощью компьютера.</p>
<blockquote>
<p><strong>Примечание.</strong> В формуле, описывающей линейную модель есть члены для A, для B и взаимодействия AB. Но, как вы могли заметить, в ней нет члена, отражающего центральную точку (константы). R создает его автоматически. Т.е. при вводе только трех параметров R покажет вам четыре.</p>
</blockquote>
<p>На рис. 7 вы можете заметить команду <code>summary(popped_corn)</code>, вместо простого вызова <code>popped_corn</code>. Эта команда позволяет получить расширенные данные по расчету параметров: погрешности определения коэффициентов, среднее квадратичное отклонение модели от экспериментов и т.д.. Более подробно с этими параметрами мы познакомимся во 2 и 3 частях нашего курса.</p>
<blockquote>
<p><strong>Примечание.</strong> В любой программе для расчетов вы должны получить точно такие же параметры для нашего эксперимента. Это хорошая проверка качества программного обеспечения и расчетов.</p>
<p><strong>Задача.</strong> Попробуйте найти инструкцию в интернете как считать коэффициенты методом наименьших квадратов в MS Exel. В качестве примера используйте данные “попкорн-эксперимента”.</p>
</blockquote>
<p>Продолжим наше знакомство с R. Следующим примером будет <strong>расчет трехфакторного эксперимента</strong> по очистке воды.</p>
<p>Откройте RStudio и создайте новый файл для примера с очисткой сточных вод. Весьма логичным будет сразу задать нашу модель и затем объявить все необходимые переменные.</p>
<div class="highlight"><pre><span></span><code><span class="n">water</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">C</span> <span class="o">+</span> <span class="bp">T</span> <span class="o">+</span> <span class="n">S</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="bp">T</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="n">S</span> <span class="o">+</span> <span class="n">S</span><span class="o">*</span><span class="bp">T</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="bp">T</span><span class="o">*</span><span class="n">S</span><span class="p">)</span>
</code></pre></div>
<p>Помните, что в примере с очисткой воды мы рассматривали <strong>три фактора: C (фактор “химиката”), T (фактор температуры) и S (фактор скорости перемешивания)</strong>. Также у нас есть три двухфакторных взаимодействия (C*T, C*S и S*T) и одно трехфакторное взаимодействие (C*T*S). При этом у нас имеются результаты восьми экспериментов.</p>
<blockquote>
<p><strong>Примечание.</strong> При проведении эксперимента и анализе результатов следует помнить, что нам всегда потребуется провести как минимум столько же экспериментов, сколько неизвестных в нашей модели (сколько мы оцениваем параметров). Например, в “попкорн-эксперименте” было 4 параметра (2 единичных, 1 взаимодействие и один базовый) и 4 эксперимента. В примере с очисткой воды у нас есть 8 экспериментов, поэтому мы можем оценить 8 параметров (с учетом взаимодействия и базового значения).</p>
</blockquote>
<p>Обратите внимание, что мы можем позволить R автоматически задать закодированные значения C, T и S, используя следующий код:</p>
<div class="highlight"><pre><span></span><code><span class="n">C</span> <span class="o"><-</span> <span class="bp">T</span> <span class="o"><-</span> <span class="n">S</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">design</span> <span class="o"><-</span> <span class="nf">expand.grid</span><span class="p">(</span><span class="n">C</span><span class="o">=</span><span class="n">C</span><span class="p">,</span> <span class="bp">T</span><span class="o">=</span><span class="bp">T</span><span class="p">,</span> <span class="n">S</span><span class="o">=</span><span class="n">S</span><span class="p">)</span>
<span class="n">C</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">C</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="bp">T</span>
<span class="n">S</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">S</span>
<span class="n">water</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">C</span> <span class="o">+</span> <span class="bp">T</span> <span class="o">+</span> <span class="n">S</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="bp">T</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="n">S</span> <span class="o">+</span> <span class="n">S</span><span class="o">*</span><span class="bp">T</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="bp">T</span><span class="o">*</span><span class="n">S</span><span class="p">)</span>
</code></pre></div>
<p>Первая строка задает три переменные сразу. Если мы проверим переменные, то увидим, что их значения -1 и +1. Далее, составим из них таблицу стандартного порядка для эксперимента, и извлечем столбцы значений C, T и S. Можете сравнить полученные значения с табл. 4 при ручном планировании эксперимента.</p>
<p>Теперь вы для каждого эксперимента можете пользоваться описанным подходом.</p>
<p>Последнее - нужно задать вектор результатов эксперимента (берем также из нашей таблицы 4):</p>
<div class="highlight"><pre><span></span><code><span class="n">C</span> <span class="o"><-</span> <span class="bp">T</span> <span class="o"><-</span> <span class="n">S</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">design</span> <span class="o"><-</span> <span class="nf">expand.grid</span><span class="p">(</span><span class="n">C</span><span class="o">=</span><span class="n">C</span><span class="p">,</span> <span class="bp">T</span><span class="o">=</span><span class="bp">T</span><span class="p">,</span> <span class="n">S</span><span class="o">=</span><span class="n">S</span><span class="p">)</span>
<span class="n">C</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">C</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="bp">T</span>
<span class="n">S</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">S</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">5</span><span class="p">,</span> <span class="m">30</span><span class="p">,</span> <span class="m">6</span><span class="p">,</span> <span class="m">33</span><span class="p">,</span> <span class="m">4</span><span class="p">,</span> <span class="m">3</span><span class="p">,</span> <span class="m">5</span><span class="p">,</span> <span class="m">4</span><span class="p">)</span>
<span class="n">water</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">C</span> <span class="o">+</span> <span class="bp">T</span> <span class="o">+</span> <span class="n">S</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="bp">T</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="n">S</span> <span class="o">+</span> <span class="n">S</span><span class="o">*</span><span class="bp">T</span> <span class="o">+</span> <span class="n">C</span><span class="o">*</span><span class="bp">T</span><span class="o">*</span><span class="n">S</span><span class="p">)</span>
</code></pre></div>
<p>Запустите этот код, чтобы создать линейную модель. Для вывода рассчитанных коэффициентов в консоль используйте команду <code>summary(water)</code>. Обратите внимание, что полученные значения параметров совпали с нашими расчетами вручную: 11.25, 6.25, 0.75 и т.д.</p>
<blockquote>
<p><strong>Примечание</strong>. Мы можем добавить небольшую хитрость, что бы задать нашу модель (это уменьшает возможность ошибки). Результаты модели будут аналогичны (прошу проверить).</p>
</blockquote>
<div class="highlight"><pre><span></span><code><span class="c1"># Используем упрощенную форму задания модели</span>
<span class="n">water</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">C</span><span class="o">*</span><span class="bp">T</span><span class="o">*</span><span class="n">S</span><span class="p">)</span>
</code></pre></div>
<blockquote>
<p><strong>Примечание</strong>. При планировании каждого эксперимента всегда сами составляйте новый код и сохраняйте его. Так у вас останется некий “конспект” проделанной вами работы, и он будет особенно полезен, если вы будете использовать <strong>комментарии</strong> (строки, которые не воспринимаются программой как код, для R - начинаются с #). Это решит частую проблему потерю результатов и описания эксперимента. Например, вы провели работу, а через несколько месяцев вам нужно вернуться к ней и ответить на вопросы начальника или передать этот проект вашему коллеге. Если вы дадите им только файл Excel или набор документов, в которых нет пошагового описания, то будет очень сложно воспроизвести ваши действия и ход ваших мыслей. Я очень часто с этим сталкиваюсь в своей практике и призываю вас не повторять моих и чужих ошибок!</p>
<p>Написание хорошо закомментированного и последовательного кода создает хорошо прослеживаемую и воспроизводимую запись вашей работы. Это очень важный критерий для многих компаний и лабораторий (в некоторых даже существуют специальные требования к прослеживаемости результатов работы, например <a href="https://www.iso.org/standard/62085.html">ISO 9001-2015</a>).</p>
</blockquote>
<p>Вот еще один фрагмент кода, который поможет нам в интерпретации результатов эксперимента. Он позволяет визуализировать влияние каждого из эффектов в полученной модели (чем больше абсолютное значение параметра перед кодированным фактором, тем больше его влияние).</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Оценка значимости факторов. Предварительно установите пакет "pid" Tools -> Install Packages -> pid</span>
<span class="nf">library</span><span class="p">(</span><span class="n">pid</span><span class="p">)</span>
<span class="nf">paretoPlot</span><span class="p">(</span><span class="n">water</span><span class="p">)</span>
</code></pre></div>
<p>Результаты выполнения кода приведены на рис. 8.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_8.png" alt="pareto plot" width="900px"/>
</td>
<td>
<i>
Рис. 8. Пример сравнения факторов по диаграмме Парето (Pareto plot) в RStudio.
</i>
</td>
</tr>
</table>
</div>
<p>Гистограмма показывает абсолютное значение каждого из параметров модели (это позволяет оценить масштаб влияния каждого из признаков). Знак коэффициента перед признаком тоже важен, он показывает направления влияния признака. Но для лучшего визуального сравнения правильнее использовать абсолютные значения (знак при этом выделен другим цветом). Такие диаграммы часто используются для определения неинтересных для нас переменных, которые потом можно удалить из модели. Гистограмма показывает параметры, отсортированные от наибольшего до наименьшего абсолютного значения. Это позволяет быстро находить наиболее важные факторы системы. Самые длинные полосы соответствуют факторам, наиболее значительно влияющим на результат.</p>
<blockquote>
<p><strong>Примечание</strong>. Часто важно использовать наглядное черно-белое сравнение, поскольку не все люди различают цвета. Кроме этого, иногда приходится печатать отчет на черно-белом принтере.</p>
</blockquote>
<p>Проведем анализ построенной диаграммы. Сразу можно заметить, что взаимодействие <span class="math">\(C \times T \times S\)</span> и взаимодействия <span class="math">\(C \times T\)</span> и <span class="math">\(T \times S\)</span> малы по сравнению с другими параметрами. Наиболее значимым является фактор S. Цвет полосы указывает на то, что S оказывает на результат отрицательное влияние. Как вы помните, наша цель заключалась в минимизации загрязнения, поэтому мы сразу понимаем, что увеличение S приведет к уменьшению загрязнения, что хорошо. Другим значимым фактором является эффект от химиката, C. Его влияние уже положительно, т.е. если мы выберем положительное кодированное значение этого категориального признака, то получим увеличение загрязнения.</p>
<p>Рассмотрим еще <strong>более сложный пример - четырехфакторный эксперимент</strong> с 2 измеряемыми параметрами. Это хорошая задачка из <a href="https://www.amazon.com/Statistics-Experimenters-Design-Innovation-Discovery/dp/0471718130">учебника Бокса, Хантера и Хантера</a>. В этом эксперименте мы используем солнечные коллекторы и теплоаккумуляторы. Значения результата эксперимента получены из компьютерной симуляции и приведены на <a href="https://docs.google.com/document/d/1g5blmWpYYJSoFMeFuE_RORrwPtfLhL1yIN7BeylW0Kg/pub">сайте</a>.</p>
<blockquote>
<p><strong>Примечание.</strong> Небольшой совет, относящийся к симуляциям. Обычно проводить симуляцию очень просто и возникает искушение исследовать ее неэффективно. Часто можно встретить людей, которые просто играют с ПО, вводя разные значения, пока не получат нужный ответ. Но к симуляции следует относиться так же серьезно, как и к реальной модели. Всегда используйте систематический подход и проводите факторные эксперименты.</p>
<p><strong>Примечание.</strong> Есть два ключевых преимущества использования компьютерных симуляций:</p>
<ul>
<li>быстрый результат при достаточной вычислительной мощности компьютера (или запуска в параллельном режиме);</li>
<li>можно не рандомизировать порядок экспериментов. И причина этого довольно проста - как правило в симуляциях отсутствуют случайные и систематические ошибки, которые зависят от времени проведения эксперимента. Когда вы повторяете симуляцию при вводе одинаковых начальных значений вы получаете одинаковый ответ. Но будьте осторожны: некоторые компьютерные эксперименты при повторении не дают идентичные результаты и в любом случае - лучше всегда использовать случайный порядок. Затраты на это минимальны, но это защитит вас от ряда проблем.</li>
</ul>
</blockquote>
<p>Итак, вернемся к солнечному водонагревателю. Рассматриваем четыре фактора:</p>
<ul>
<li>A — количество солнечного света (инсоляция);</li>
<li>B — емкость теплоаккумулятора (объем бака);</li>
<li>C — расход воды через абсорбер;</li>
<li>D — прерывистость солнечного света (облачность).</li>
</ul>
<p>С точки зрения влияние данных факторов рассматриваются две переменные результата:</p>
<ul>
<li><span class="math">\(y_1\)</span> — эффективность сбора энергии;</li>
<li><span class="math">\(y_2\)</span> — эффективность передачи энергии.</li>
</ul>
<p>Вы можете сразу определить, сколько будет проведено тестов, если у каждого фактора есть два уровня: низкий и высокий, то <span class="math">\(2^4 = 16\)</span>.</p>
<p>Итак, было проведено 16 тестов, время составить код для расчета модели:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Solar panel case study, from BHH2, p 230</span>
<span class="c1"># ----------------------------------------</span>
<span class="n">A</span> <span class="o"><-</span> <span class="n">B</span> <span class="o"><-</span> <span class="n">C</span> <span class="o"><-</span> <span class="n">D</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">design</span> <span class="o"><-</span> <span class="nf">expand.grid</span><span class="p">(</span><span class="n">A</span><span class="o">=</span><span class="n">A</span><span class="p">,</span> <span class="n">B</span><span class="o">=</span><span class="n">B</span><span class="p">,</span> <span class="n">C</span><span class="o">=</span><span class="n">C</span><span class="p">,</span> <span class="n">D</span><span class="o">=</span><span class="n">D</span><span class="p">)</span>
<span class="n">A</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">A</span>
<span class="n">B</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">B</span>
<span class="n">C</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">C</span>
<span class="n">D</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">D</span>
<span class="c1"># y1 - collection efficiently</span>
<span class="n">y1</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">43.5</span><span class="p">,</span> <span class="m">51.3</span><span class="p">,</span> <span class="m">35.0</span><span class="p">,</span> <span class="m">38.4</span><span class="p">,</span> <span class="m">44.9</span><span class="p">,</span> <span class="m">52.4</span><span class="p">,</span> <span class="m">39.7</span><span class="p">,</span> <span class="m">41.3</span><span class="p">,</span> <span class="m">41.3</span><span class="p">,</span> <span class="m">50.2</span><span class="p">,</span> <span class="m">37.5</span><span class="p">,</span> <span class="m">39.2</span><span class="p">,</span> <span class="m">43.0</span><span class="p">,</span> <span class="m">51.9</span><span class="p">,</span> <span class="m">39.9</span><span class="p">,</span> <span class="m">41.6</span><span class="p">)</span>
<span class="c1"># y2 - energy delivery efficiency</span>
<span class="n">y2</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">82</span><span class="p">,</span> <span class="m">83.7</span><span class="p">,</span> <span class="m">61.7</span><span class="p">,</span> <span class="m">100</span><span class="p">,</span> <span class="m">82.1</span><span class="p">,</span> <span class="m">84.1</span><span class="p">,</span> <span class="m">67.7</span><span class="p">,</span> <span class="m">100</span><span class="p">,</span> <span class="m">82</span><span class="p">,</span> <span class="m">86.3</span><span class="p">,</span> <span class="m">66</span><span class="p">,</span> <span class="m">100</span><span class="p">,</span> <span class="m">82.2</span><span class="p">,</span> <span class="m">89.8</span><span class="p">,</span> <span class="m">68.6</span><span class="p">,</span> <span class="m">100</span><span class="p">)</span>
<span class="n">model.y1</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y1</span> <span class="o">~</span> <span class="n">A</span><span class="o">*</span><span class="n">B</span><span class="o">*</span><span class="n">C</span><span class="o">*</span><span class="n">D</span><span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">model.y1</span><span class="p">)</span>
<span class="nf">paretoPlot</span><span class="p">(</span><span class="n">model.y1</span><span class="p">)</span>
<span class="n">model.y2</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y2</span> <span class="o">~</span> <span class="n">A</span><span class="o">*</span><span class="n">B</span><span class="o">*</span><span class="n">C</span><span class="o">*</span><span class="n">D</span><span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">model.y2</span><span class="p">)</span>
<span class="nf">paretoPlot</span><span class="p">(</span><span class="n">model.y2</span><span class="p">)</span>
</code></pre></div>
<blockquote>
<p><strong>Примечание.</strong> Причина, по которой запись <span class="math">\(A \times B \times C \times D\)</span> работает, заключается в принципе иерархии модели для R. Давайте рассмотрим простой пример: если вы написали только <span class="math">\(A \times B\)</span>, то R автоматически включит в модель фактор A и фактор B. В конце концов, не может быть двухфакторного взаимодействия <span class="math">\(A \times B\)</span>, если нет факторов A и B.</p>
</blockquote>
<p>После исполнения кода нужно изучить полученные результаты. Для этого построим две отдельные линейные модели и диаграммы Парето (рис. 9): для эффективности сбора энергии y1 и для эффективности передачи энергии y2.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_9.png" alt="factors comparison" width="900px"/>
</td>
<td>
<i>
Рис. 9. Пример сравнения значимости факторов для рассчитанных моделей по диаграммам Парето.
</i>
</td>
</tr>
</table>
</div>
<p>Как вы помните, серые полосы обозначают отрицательное влияние факторв на отклик, а черные полосы — положительное влияние. Согласно полученной модели <strong>для эффективности сбора энергии (<span class="math">\(y_1\)</span>)</strong> наибольшее влияние у факторов <em>B</em> и <em>A</em>, взаимодействия <span class="math">\(A \times B\)</span> и фактора <em>C</em>. Другие взаимодействия оказывают на результат более слабое влияние.</p>
<ol>
<li>Мы можем наблюдать уменьшение отклика при увеличении фактора <em>B</em>. То есть, когда объем бака увеличивается, эффективность сбора снижается. Это самая важная переменная в системе.</li>
<li>Далее, фактор <em>А</em> (количество солнечного света), положительно влияет на эффективность сбора.</li>
<li>Как вы думаете, какого рода будет эффективное взаимодействие <span class="math">\(A \times B\)</span>? Правильный ответ — высокий уровень для фактора <em>A</em> и низкий — для фактора <em>B</em>. Мы видим это из уравнения и диаграммы Парето. В этом случае выбор низкого уровня фактора <em>B</em> повышает результат и одновременно заставляет двухфакторное взаимодействие работать в нашу пользу.</li>
<li>фактор <em>D</em> слабо влияет на результат. Это полезный вывод, поскольку он показывает относительную нечувствительность к изменению облачности. Если бы в будущем нам предстояло провести дополнительные эксперименты, мы могли перестать учитывать фактор <em>D</em>. Аналогично, стремясь повысить эффективность сбора солнечной энергии <em>y1</em>, мы можем быть уверены, что облачность не будет играть значительную роль, по крайней мере, исходя из результатов анализа данной модели.</li>
</ol>
<p>Таким образом, <em>A</em>, <em>B</em> и взаимодействие <span class="math">\(A \times B\)</span> — три наиболее влиятельных параметре модели. Попробуйте объяснить влияние других факторов для этой модели самостоятельно.</p>
<p>Теперь посмотрим на вторую переменную результата — <strong>эффективность передачи энергии <span class="math">\(y_2\)</span></strong>. Если изучить соответствующую диаграмму Парето, мы увидим следующее.</p>
<ol>
<li>Огромное влияние фактора <em>A</em>.</li>
<li>Большое влияние двухфакторного взаимодействия <span class="math">\(A \times B\)</span>.</li>
<li>Влияние факторов <em>C</em> и <em>D</em> не велико.</li>
</ol>
<p>Объяснение - за вами.</p>
<blockquote>
<p><strong>Примечание.</strong> Вы могли заметить, что многие высокоуровневые взаимодействия (трех-, четырех- факторные и более) малы или равны нулю. Так бывает довольно часто и далее мы увидим как это можно использовать.</p>
<p><strong>Примечание.</strong> На разобранном примере хотелось бы отметить важный момент. В случае модели <span class="math">\(y_2\)</span> влияние фактора <em>B</em> мало и вы можете прийти к выводу, что фактор <em>B</em> не важен. Но это не совсем верно. Мы не можем исключить из модели этот фактор, потому что взаимодействие <span class="math">\(A \times B\)</span> очень важно. Это означает, что влияние фактора <em>A</em> зависит от уровня фактора <em>B</em> и наоборот. Поэтому мы не можем игнорировать сам по себе мало значимый фактор <em>B</em>.</p>
</blockquote>
<p>При рассмотрении подобного примера мы подходим к ключевому вопросу планирования экспериментов: можем ли мы одновременно оптимизировать оба результата <span class="math">\(y_1\)</span> и <span class="math">\(y_2\)</span>? Каково было бы лучшее сочетание уровней факторов, дающее этот максимум?</p>
<h3 id="2-8">2.8 Сокращение затрат на эксперименты</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Прежде чем ответить на вопрос об оптимизации модели, нужно понимать как оптимизировать фактор затрат на сами эксперименты.</p>
<p>Как можно заметить, в зависимости от количества факторов количество экспериментов (а значит время и стоимость) увеличиваются в степенной зависимости. Давайте попробуем избавиться от этого ограничения.</p>
<p>До сих пор мы рассматривали так называемые <strong>полнофакторноые эксперименты</strong>, когда для построения модели проводилось изучения влияния каждого фактора. Другими словами, мы исследовали каждое изменение каждого фактора. Но как можно сократить количество экспериментов?</p>
<p>Это возможно с использование кратного 2 сокращения числа экспериментов - например, использование <strong>half-factor (полуфакторного) эксперимента</strong>. Это подразумевает сокращение количество проводимых экспериментов вдвое!</p>
<p>Естественно, у всего есть цена, и подобные действия приведут к сокращению информации. Но для выбора этого пути есть 2 значимые <strong>причины</strong>:</p>
<ol>
<li>Стоимость каждого эксперимента может быть высока.</li>
<li>Нет уверенности в результатах эксперимента, которые мы получим (какие факторы окажутся значимыми, будут ли полученные данные оптимальными и т.д.).</li>
</ol>
<p>Согласно мнению известного ученого George Box <strong>для первых экспериментов и работ должно быть выделено около 25 % общего бюджета и не более</strong>. Остальное понадобиться нам в процессе последующего исследования. Таким образом необходимо понимать, что наши первоначальные предположения не абсолютны и вполне могут оказаться ошибочными. А значит нужна страховка и возможность дополнительного проведения новых экспериментов.</p>
<p>Давайте изучим, к чему приведет сокращение проводимых опытов вдвое (half-factor) и как это сделать.</p>
<p>Существует <strong>специальная схема выбора</strong> значимых опытов (тестов) из нашего идеального полнофакторного эксперимента: <strong>выбор по открытому или закрытому контуру</strong>. Рассмотрим знакомый нам пример по очистке воды с точки зрения выбора половины тестов (рис. 10).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_10.png" alt="half-factor" width="900px"/>
</td>
<td>
<i>
Рис. 10. Выбор значимых комбинаций для проведения half-factor эксперимента по одному из контуров (можно выбрать симметричный).
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Примечание.</strong> Значения признаков изменены на <em>A</em>, <em>B</em>, <em>C</em> для большего удобства.</p>
</blockquote>
<p>Обратите внимание, что такой выбор экспериментов подразумевает полное изменение факторов <em>А</em> и <em>В</em>, а фактор <em>С</em> выбирается как результат перемножения первых кодированных факторов (с сохранением знака, как на рис. 10).</p>
<p>Такой подход к проведению эксперимента позволяет нам выиграть <strong>джекпот</strong>, если один из факторов окажется не важным для модели. Тогда одно из направлений куба исчезнет и мы вдвое сократим необходимое количество экспериментов, а с проведенными ранее у нас получиться полнофакторный эксперимент… Профит!</p>
<p>Но это только одна сторона медали. Давайте посмотрим, какая модель у нас получится, если мы проводим полуфакторный эксперимент:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Half-factor experiment</span>
<span class="c1"># ----------------------------------------</span>
<span class="c1"># full-factors for A and B</span>
<span class="n">A</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">B</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="c1"># C = AB</span>
<span class="n">C</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="c1"># y - purify efficiently</span>
<span class="n">y1</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">30</span><span class="p">,</span> <span class="m">6</span><span class="p">,</span> <span class="m">4</span><span class="p">,</span> <span class="m">4</span><span class="p">)</span>
<span class="n">water</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y1</span> <span class="o">~</span> <span class="n">A</span><span class="o">*</span><span class="n">B</span><span class="o">*</span><span class="n">C</span><span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">water</span><span class="p">)</span>
</code></pre></div>
<p>При выполнении можно обратить внимание, что все взаимодействия признаков обозначены как <code>NA</code> (not applicable) - это предсказуемый результат. Модели не хватает данных. Но и нам не понадобятся данные факторы. Сравним полученное уравнение с исходным:</p>
<div class="math">$$
\hat{y} = 11.25 + 6.25x_A + 0.75 x_B - 7.25 x_C + 0.25 x_A x_B - 6.75 x_A x_C - 0.25 x_B x_C - 0.25 x_A x_B a_C
$$</div>
<div class="math">$$
\hat{y} = 11.0 + 6.0 x_A - 6.0 x_B - 7.0 x_C
$$</div>
<p>Обратите внимание, что <strong>3 из 4 коэффициентов весьма близки по значению</strong>, хотя коэффициент <em>В</em> предсказан неверно и у нас нет информации по взаимодействиям факторов.</p>
<p>Разберем подробнее, что же происходит при half-factorial эксперименте.</p>
<p>Мы уже описали логику выбора необходимых сочетаний факторов. Однако обобщенное представление о выборе коэффициентов для проведения half-factor или еще более сокращенных экспериментов мы можем получить из специальной таблицы (<strong>trade-of-table</strong>, рис. 11).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_11.png" alt="trade-of-table" width="900px"/>
</td>
<td>
<i>
Рис. 11. Trade-of-table для выбора необходимых факторов при проведении half-factor эксперимента.
</i>
</td>
</tr>
</table>
</div>
<p>Или используя следующий вызов в R:</p>
<div class="highlight"><pre><span></span><code><span class="nf">library</span><span class="p">(</span><span class="n">pid</span><span class="p">)</span>
<span class="nf">help</span><span class="p">(</span><span class="n">tradeOffTable</span><span class="p">)</span>
</code></pre></div>
<p>Далее мы еще вернемся к изучению этой таблицы, а пока будем подсматривать в нее, чтобы выбирать как кодировать наши факторы.</p>
<p>Следующий интересный вопрос - <strong>что же представляют собой новые коэффициенты</strong> и почему они отличаются от полнофакторного эксперимента? Это ключевой момент для понимания. На самом деле - коэффициенты в half-factor эксперимента <strong>являются комбинацией элементов из полнофакторного эксперимента</strong>! Рассмотрим это на примере очистки воды.</p>
<p>При полнофакторном эксперименте мы имеем следующую систему уравнений:</p>
<div class="math">$$
\begin{pmatrix}
y_1 \\
y_2 \\
y_3 \\
y_4 \\
y_5 \\
y_6 \\
y_7 \\
y_8 \\
\end{pmatrix} =
\begin{pmatrix}
+1 & -1 & -1 & -1 & +1 & +1 & +1 & -1\\
+1 & +1 & -1 & -1 & -1 & -1 & +1 & +1\\
+1 & -1 & +1 & -1 & -1 & +1 & -1 & +1\\
+1 & +1 & +1 & -1 & +1 & -1 & -1 & -1\\
+1 & -1 & -1 & +1 & +1 & -1 & -1 & +1\\
+1 & +1 & -1 & +1 & -1 & +1 & -1 & -1\\
+1 & -1 & +1 & +1 & -1 & -1 & +1 & -1\\
+1 & +1 & +1 & +1 & +1 & +1 & +1 & +1\\
\end{pmatrix}
\begin{pmatrix}
b_0 \\
b_A \\
b_B \\
b_C \\
b_{AB} \\
b_{AC} \\
b_{CB} \\
b_{ABC} \\
\end{pmatrix}
$$</div>
<p>Теперь проведем математические рассуждения и оставим только выбранные эксперименты:</p>
<div class="math">$$
\begin{pmatrix}
\\
y_2 \\
y_3 \\
\\
y_5 \\
\\
\\
y_8 \\
\end{pmatrix} =
\begin{pmatrix}
\\
+1 & +1 & -1 & -1 & -1 & -1 & +1 & +1\\
+1 & -1 & +1 & -1 & -1 & +1 & -1 & +1\\
\\
+1 & -1 & -1 & +1 & +1 & -1 & -1 & +1\\
\\
\\
+1 & +1 & +1 & +1 & +1 & +1 & +1 & +1\\
\end{pmatrix}
\begin{pmatrix}
b_0 \\
b_A \\
b_B \\
b_C \\
b_{AB} \\
b_{AC} \\
b_{CB} \\
b_{ABC} \\
\end{pmatrix}
$$</div>
<p>Еще раз повторю - это не строгое математическое доказательство, данные рассуждения нужны нам, чтобы показать логику.</p>
<p>Из последнего вектора с коэффициентами мы не можем убрать ни один, поскольку каждый из них соответствует изменению фактора, т.е. длине матрицы X, которая остается неизменной. Отмечу, что такая матричная запись умножения не имеет смысла (необходимо, чтобы размерность матрицы <span class="math">\(X\)</span> соответствовала размерностям векторов <span class="math">\(y\)</span> и <span class="math">\(b\)</span>). Однако она поможет нам с логикой рассуждений, ведь для приведения к корректному виду матричного умножения (и самой системы линейных уравнений) необходимо сократить размерность матрицы <span class="math">\(Х\)</span>. Для этого обратим внимание, то <strong>столбцы этой матрицы на самом деле дублируются</strong>. Иными словами, части коэффициентов соответствует одинаковая кодировка оставшихся факторов. За этим скрывается одинаковое влияние исследуемых факторов, которое мы не сможем отличить друг от друга в нашем эксперименте (с математической точки зрения они будут идентичны).</p>
<p>Таким образом, если мы запишем реальную <strong>матричную систему для half-fraction эксперимента, то полученные коэффициенты на самом деле будут линейной комбинацией (aliasing, confounding) коэффициентов полнофакторного эксперимента</strong>:</p>
<div class="math">$$
\begin{pmatrix}
y_2 \\
y_3 \\
y_5 \\
y_8 \\
\end{pmatrix} =
\begin{pmatrix}
+1 & +1 & -1 & -1 & -1 & -1 & +1 & +1\\
+1 & -1 & +1 & -1 & -1 & +1 & -1 & +1\\
+1 & -1 & -1 & +1 & +1 & -1 & -1 & +1\\
+1 & +1 & +1 & +1 & +1 & +1 & +1 & +1\\
\end{pmatrix}
\begin{pmatrix}
b_0 = b_0 + b_{ABC} \\
b_A = b_A + b_{BC} \\
b_B = b_B + b_{AC}\\
b_C = b_C + b_{AB}\\
\end{pmatrix}
$$</div>
<div class="math">$$
\begin{pmatrix}
y_2 \\
y_3 \\
y_5 \\
y_8 \\
\end{pmatrix} =
\begin{pmatrix}
+1 & +1 & -1 & -1 \\
+1 & -1 & +1 & -1 \\
+1 & -1 & -1 & +1 \\
+1 & +1 & +1 & +1 \\
\end{pmatrix}
\begin{pmatrix}
b_0 = b_0 + b_{ABC} \\
b_A = b_A + b_{BC} \\
b_B = b_B + b_{AC}\\
b_C = b_C + b_{AB}\\
\end{pmatrix}
$$</div>
<p>Иными словами, <strong>в наших новых коэффициентах помимо влияния “чистых” факторов <em>A</em>, <em>B</em>, <em>C</em> содержится влияние взаимодействия этих факторов</strong>. Этим и объясняется то, что программа выводит нам только 4 коэффициента и они отличаются от исходных коэффициентов полнофакторного эксперимента.</p>
<blockquote>
<p><strong>Примечание.</strong> Вернитесь к сравнению уравнений полнофакторного эксперимента и half-factor эксперимента и убедитесь, что новые коэффициенты на самом деле линейные комбинации истинных.</p>
</blockquote>
<p><strong>Таким образом мы сократили количество факторов, исключив из рассмотрения взаимодействия, но учли его в наших новых коэффициентах!</strong></p>
<p>После того, как мы познакомились с full-factor и half-factor экспериментами, можно предложить <strong>2 возможные цели эксперимента (и пути его планирования)</strong>:</p>
<ul>
<li><strong>сканирование (screening)</strong> - когда мы допускаем сокращения информации о системе (например, не учитываем взаимодействия или получаем некоторые некорректные оценки параметров) и проводим сокращенные факторные эксперименты. Это делается с целью получения общих представлений о взаимодействиях в системе.</li>
<li><strong>оптимизация (optimization)</strong> - проводит поиск оптимального значения отклика. При такой схеме не допускаются сокращения экспериментов и требуется проведение полнофакторного эксперимента (обычно базируется на сканирующем эксперименте).</li>
</ul>
<p>Учитывая вышесказанное, перед оптимизацией всегда нужно проводить планирование и оценивать эффект от каждого фактора и их взаимодействия (сканирующие эксперименты). Вот несколько полезных предварительных умозаключений на примере очистки воды (полнофакторный эксперимент потребует 16 повторений, каждое из которые весьма затратно по средствам, при этом исследуются 3 фактора: <em>A</em> - температура, <em>B</em> - скорость перемешивания и <em>C</em> - химикат).</p>
<ul>
<li>Важно <strong>правильно кодировать свои факторы</strong> при проведении half-factor эксперимента. Это позволит получать максимально приближенные к реальности коэффициенты. Например при приведенном кодировании можно сделать вывод, что <span class="math">\(\hat{b_C} = b_C + b_{AB} \approx b_C\)</span> поскольку можно предположить отсутствие взаимодействия между перемешиванием и температурой воды. Таким образом мы получаем четкое представление о влиянии выбора химиката на очистку воды.</li>
<li><strong>Стоит использовать несколько кодировок и посмотреть</strong> на предполагаемые результаты half-factor экспериментов (выбрать наиболее интересные).</li>
<li>Всегда <strong>стоит сначала проводить half-factor эксперименты</strong>, оценить результаты, и только потом “допровести” полнофакторный эксперимент (если все устроит и понадобится дополнительная информация).</li>
</ul>
<h3 id="2-9">2.9 Построение карты эксперимента</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>На данном этапе мы рассмотрели все основные подходы к планированию эксперимента и научились оптимизировать трудозатраты. Теперь можно приступить <strong>к достижению основной цели данного курса - научиться оптимизировать эксперимент и построить полную карту планирования эксперимента</strong>. Но для этого необходимо разобрать еще несколько понятий.</p>
<h4 id="2-9-1">2.9.1 Мешающие факторы (disturbances)</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Я думаю все мы подсознательно понимаем значения данного термина. До сих пор мы рассматривали идеализированное представление об эксперименте и предполагали, что на результат влияют только учтенные факторы или их взаимодействие. Однако помимо этого существуют различные мешающие факторы - некоторые погрешности.</p>
<p>Можно <strong>классифицировать мешающие переменные</strong> по нескольким критериям:</p>
<ul>
<li>известные или неизвестные нам;</li>
<li>которые мы можем контролировать и не можем контролировать;</li>
<li>которые мы можем измерить или не можем измерить.</li>
</ul>
<blockquote>
<p><strong>Задача.</strong> Придумайте примеры для каждого из перечисленных случаев.</p>
</blockquote>
<p>Во многих случаях мы не можем контролировать или измерить мешающее влияние. В таком случае нужно использовать методы статистической обработки данных (о них мы подробно поговорим в 3 главе). На данном этапе важно понимать, что <strong>для минимизации влияния мешающих факторов необходимо следовать 2 правилам</strong>.</p>
<ul>
<li>Всегда <strong>проводите свои эксперименты в случайном порядке</strong> (обратите внимание, как мы составляем таблицы экспериментов). Это позволить обеспечить случайное влияние неучтенных факторов, а значит с ними можно будет работать как со случайными величинами и <strong>они не сместят наши измерения</strong> (хотя и добавят им разброса или другими словами - дисперсии).</li>
<li>Всегда <strong>записывайте дополнительные факторы, которые можете измерить</strong>.</li>
</ul>
<p>Важным понятием является мешающее влияние, которое можно измерить, но нельзя контролировать - <strong>ковариации (covariates)</strong>. Эти ковариации вполне могут влиять либо на измеряемый параметр, либо на один из учитываемых факторов. С такими мешающими факторами можно работать 2 путями:</p>
<ul>
<li>Провести визуальный анализ влияния ковариаций на потенциальные выбросы в измеряемых величинах.</li>
<li>Добавить ковариации в модель в качестве фактора.</li>
</ul>
<p>Другим типом мешающих факторов являются <strong>помехи</strong> (noise) - не измеримые и не контролируемые, но вносящие вклад в измерения.</p>
<p>О том, как обрабатывать помехи и случайные погрешности мы поговорим в главе № 3 (основы статистики). На данном этапе мы рассмотрим только ковариации и общие пути учета возможных погрешностей в экспериментах.</p>
<h4 id="2-9-2">2.9.2 Блокировка мешающего фактора при расчете модели</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>В предыдущем разделе мы разобрали основные мешающие факторы и описали их поведение. Теперь нужно разобраться как работать с мешающими факторами при построении модели.</p>
<p>В качестве примера рассмотрим разработку мобильного приложения. У нас есть приложение, которое нужно разместить на рынке. Для этого, нужно провести эксперимент и понять, в каком случае оно будет иметь наибольший спрос. Руководством выделены следующие ресурсы:</p>
<ul>
<li>тестовые группы из 2000 человек;</li>
<li>процент использующих приложение после 60 дней (наша измеряемая переменная <span class="math">\(y\)</span>).</li>
</ul>
<p><strong>Факторы, которые мы планируем исследовать</strong>, приведены в табл. 5.</p>
<p><em>Таблица 5. Исследуемые факторы при выводе приложения на рынок.</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-wa1i{font-weight:bold;text-align:center;vertical-align:middle}
.tg .tg-yla0{font-weight:bold;text-align:left;vertical-align:middle}
.tg .tg-nrix{text-align:center;vertical-align:middle}
</style>
<table class="tg">
<thead>
<tr>
<th class="tg-yla0"></th>
<th class="tg-wa1i">Low level<br>(-)</th>
<th class="tg-wa1i">Hight level<br>(+)</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-yla0">A "Promotion"</td>
<td class="tg-nrix">1 free-in-app upgrade</td>
<td class="tg-nrix">30 days trial of all features</td>
</tr>
<tr>
<td class="tg-yla0">B "Message"</td>
<td class="tg-nrix">"CallApp" has your schedule available at your fingertips, on any device</td>
<td class="tg-nrix">"CallApp" features are configurable; only pay for the features you want</td>
</tr>
<tr>
<td class="tg-yla0">C "Price"</td>
<td class="tg-nrix">in-app purchase price is 89 $</td>
<td class="tg-nrix">in-app purchase price is 99 $</td>
</tr>
</tbody>
</table>
</div>
<p>Но если провести мозговой штурм поставленной задачи, то можно выделить <strong>возможные мешающие факторы</strong>:</p>
<ul>
<li>E: возраст пользователя</li>
<li>N: пол пользователя</li>
<li>S: тип интернет соединения пользователя (мобильный или wifi)</li>
<li>R: количество свободной оперативной памяти</li>
<li>F: доставляется ли рекламные сообщения рекламной сетью G или H</li>
<li>D: тип телефона (Android/Apple)</li>
</ul>
<p>Как вы думаете, какие из приведенных факторов являются помехами (не измеримые и не контролируемые), какие ковариациями (измеримые, но не контролируемые), а какие - ни то ни другое?</p>
<p>При построении точно модели действует <strong>общее правило - фиксировать все, что возможно, и изменять только выбранные факторы</strong>. Но как тогда быть с факторами, которые мы можем контролировать, но у нас нет средств для проведения всех экспериментов или они кажутся нам не значимыми (nuisance factor)?</p>
<p>В случае случайных фактором (ковариаций или шума) мы должны использовать алгоритмы статистики (глава 3) и рандомизировать проведение эксперимента. Но если в нашей системе есть систематически мешающий фактор, который мы можем измерить и контролировать, то <strong>мы можем построить модель с минимальным влиянием данного фактора</strong>.</p>
<p>Например, в нашем случае одним из таких факторов предположительно является тип ОС - мы можем его измерить и контролировать. Здесь все зависит от того, имеет ли значение данный фактор для экспериментатора. Например, если мы хотим использовать приложение только на конкретной ОС - то фактор точно не имеет значения и стоит его просто зафиксировать. Но если мы хотим распространять приложение вне зависимости от ОС, то фиксировать данный фактор мы не можем - нужно обеспечить рандомизацию экспериментов и оценить влияние данного фактора на модель. Такая процедура называется <strong>“блокировкой” (blocking)</strong>.</p>
<blockquote>
<p><strong>Примечание</strong>. Чтобы понять, нужно ли блокировать фактор, достаточно ответить себе на вопрос: “должна ли моя система или процесс успешно работать с разными значениями мешающего фактора в будущем”? Если да - нужно планировать эксперимент с блокировкой данного фактора. Ели нет - то у нас хорошая степень контроля над системой и мы можем избежать мешающей переменной.</p>
</blockquote>
<p>Если необходимо изучить фактор и провести его блокировку, то основное правило для планирования эксперимента - <strong>рассматривать блокируемую переменную как дополнительный фактор.</strong> Допусти у нас имеется 3 фактора <em>A</em>, <em>B</em>, <em>C</em> и мы проводим полнофакторный эксперимент (8 экспериментов). Теперь добавим к нему мешающую переменную также с 2 возможными значениями (-1 и +1) - тогда мы получим half-factor эксперимент.</p>
<p>Вернемся к нашему примеру и проведем эксперимент по блокировки мешающей переменной - типом ОС. В результате мы получили, что Android пользователи дольше используют приложение, а Apple - меньше и наши результаты можно свести в табл. 6. Обратите внимание на выбор кодировки для блокируемой переменной.</p>
<p><em>Таблица 6. Блокировка мешающего фактора при выводе приложения на рынок.</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-baqh{text-align:center;vertical-align:top}
.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
</style>
<table class="tg">
<thead>
<tr>
<th class="tg-baqh"></th>
<th class="tg-amwm">A "Promotion"</th>
<th class="tg-amwm">B "Message"</th>
<th class="tg-amwm">C "Price"</th>
<th class="tg-amwm">D = ABC "OS"</th>
<th class="tg-amwm">Outcome</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-amwm">1</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">- (Android)</td>
<td class="tg-baqh">y_1* = y_1 + g</td>
</tr>
<tr>
<td class="tg-amwm">2</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">+ (iOS)</td>
<td class="tg-baqh">y_2' = y_2 - h</td>
</tr>
<tr>
<td class="tg-amwm">3</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">y_3* = y_3 - h</td>
</tr>
<tr>
<td class="tg-amwm">4</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">y_4' = y_4 + g</td>
</tr>
<tr>
<td class="tg-amwm">5</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">y_5* = y_5 - h</td>
</tr>
<tr>
<td class="tg-amwm">6</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">y_6' = y_6 + g</td>
</tr>
<tr>
<td class="tg-amwm">7</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">-</td>
<td class="tg-baqh">y_7' = y_7 + g</td>
</tr>
<tr>
<td class="tg-amwm">8</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">y_8* = y_8 - h</td>
</tr>
</tbody>
</table>
</div>
<p>А теперь <strong>немного математической магии</strong>! Исследуем проведенный эксперимент и <strong>убедимся, что у нас получилось заблокировать мешающую переменную при проведении half-factor эксперимента</strong>. Рассчитаем эффект от фактора А как среднюю абсолютную разность:</p>
<div class="math">$$
A = \frac{1}{2} [\frac{(y_8^* - y_7') + (y_4' - y_3^*) + (y_6' - y_5^*) + (y_2^* - y_1')}{4}]
$$</div>
<p>Заметим, что <strong>если раскрыть скобки в числителе, то эффекты от мешающего фактора (ОС) сократятся - а значит, мы учли в модели “чистое” влияние фактора А</strong>.</p>
<p><strong>Это же будет работать и для других параметров и их взаимных влияний</strong> за исключением совокупного влияния ABC:</p>
<div class="math">$$
ABC = \frac{1}{8} [-y_1 + y_2 + y_3 - y_4 + y_5 - y_6 - y_7 + y_8 -4g + 4h]
$$</div>
<p>Мы только что разобрали <strong>наилучшую стратегию действия при блокировке мешающей переменной</strong>. В данном случае - это лучший из вариантов. Часто трехфакторное взаимодействие выражено слабо и мы можем им пожертвовать, чтобы свести влияние мешающей переменной на систему к минимуму.</p>
<h4 id="2-9-3">2.9.3 Разбор линейных комбинация признаков и планирование сканирующих экспериментов</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Казалось бы блокирование - частный случай планирования эксперимента, который нужно просто запомнить. Но это не так. Мы уже сталкивались с изучением проведения half-factor экспериментов и линейной комбинацией признаков и я надеюсь теперь вы убедились, что это очень полезный навык при изучении системы! Он позволяет нам экономить время и ресурсы при исследованиях. Для такого планирования существует системный подход и сейчас мы постараемся разобрать его.</p>
<p>Для этого <strong>нужно понимать как работают линейные комбинации признаков (в иностранной литературе это явление называется “псевдонимы”, aliasing)</strong>. Лучше всего делать это на реальном примере.</p>
<p>Допустим, вы управляете автоклавом для выращивания бактерий. Такие системы часто используются для различных отраслей промышленности, в том числе и при создании современных минеральных удобрений с биологическим эффектом для почвы. Подобная система работает продолжительное время и дорога в обслуживании. Если вы обслуживаете данную систему, то для исследования 5 факторов может потребоваться до года (всего 32 эксперимента)! Допустим, наш бюджет может покрыть три месяца работы с установкой, а это 9 экспериментов. Для полнофакторного эксперимента это всего ли 3 фактора. Однако вовсе не обязательно сокращать количество факторов при таком количестве экспериментов. Мы можем провести исследование гораздо большего их количества (до 7)!</p>
<p>Это так называемое <strong>планирование сканирующего эксперимента (screening design)</strong>. При этом мы не планируем построить точную модель или оптимизировать систему. Нам нужно лишь оценить значимость каждого из факторов для системы и понять как она работает. Какие факторы стоит исследовать для дальнейшей оптимизации.</p>
<p>Сократить количество экспериментов нам поможет <strong>стратегия частичного факторного эксперимента (part-factor experiment)</strong>. В нашем случае для не более 9 экспериментов и 5 факторов - четвертичного факторного эксперимента (quarter-factor). Мы рассмотрим 5 факторов для 8 экспериментов (табл. 7).</p>
<blockquote>
<p><strong>Примечание.</strong> Если есть возможность, то можно провести 9 эксперимент для более точного анализа. Его рекомендуется проводить первым (своего рода базовая линия). Все численные факторы нужно принять в 0 положении (между -1 и +1), в случае категориальных - выбрать одно значение для всех (-1 или +1). Этот первый (пробный) эксперимент - отличный способ найти все подводные камни при проведении практической работы (ведь сложно сразу реализовать качественный эксперимент на практике). Если эксперимент будет неудачен - его можно выбросить, но если он получиться - он улучшит модель.</p>
</blockquote>
<p><em>Таблица 7. Проведение quarter-factor эксперимента с дополнительным пробным экспериментом (9-ым).</em></p>
<div>
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-baqh{text-align:center;vertical-align:top}
.tg .tg-c3ow{border-color:inherit;text-align:center;vertical-align:top}
.tg .tg-7btt{border-color:inherit;font-weight:bold;text-align:center;vertical-align:top}
</style>
<table class="tg">
<thead>
<tr>
<th class="tg-c3ow"><span style="font-weight:bold">Experiments</span></th>
<th class="tg-7btt">A "temperatire"</th>
<th class="tg-7btt">B "dissolved oxigen"</th>
<th class="tg-7btt">C "substrate type"</th>
<th class="tg-7btt">D = AB "agitation rate"</th>
<th class="tg-7btt">E = AC "pH"</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-7btt">1</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
</tr>
<tr>
<td class="tg-7btt">2</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
</tr>
<tr>
<td class="tg-7btt">3</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
</tr>
<tr>
<td class="tg-7btt">4</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
</tr>
<tr>
<td class="tg-7btt">5</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
</tr>
<tr>
<td class="tg-7btt">6</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
</tr>
<tr>
<td class="tg-7btt">7</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">-</td>
<td class="tg-c3ow">-</td>
</tr>
<tr>
<td class="tg-7btt">8</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
<td class="tg-c3ow">+</td>
</tr>
<tr>
<td class="tg-baqh">9</td>
<td class="tg-baqh">+</td>
<td class="tg-baqh">0</td>
<td class="tg-baqh">0</td>
<td class="tg-baqh">0</td>
<td class="tg-baqh">+</td>
</tr>
</tbody>
</table>
</div>
<p>После проведения практических работ и получения результатов, останется разобраться со значениями полученных коэффициентов: какие линейные комбинации реальных параметров полнофакторной модели в них зашифрованы (aliasing). Однако, если для half-fraction эксперимента данные коэффициенты можно было легко разобрать, то здесь понадобится определенный системный подход (чтобы понять, что же скрыто в коэффициентах).</p>
<p>Итак, исходя из trade-off-table (рис. 11), мы можем представить значения факторов <em>D</em> и <em>E</em> в соответствии со значениями других факторов для quarter-factor эксперимента (8 экспериментов для 5 признаков). Например для признака <em>D</em>:</p>
<div class="math">$$
D = AB
$$</div>
<p>Тогда мы можем работать с этим представлением как с матричной формой (перемножаются соответствующие вектора):</p>
<div class="math">$$
\begin{pmatrix}
+ \\
- \\
- \\
+ \\
+ \\
- \\
- \\
+ \\
\end{pmatrix} =
\begin{pmatrix}
- \\
+ \\
- \\
+ \\
- \\
+ \\
- \\
+ \\
\end{pmatrix}
\begin{pmatrix}
- \\
- \\
+ \\
+ \\
- \\
- \\
+ \\
+ \\
\end{pmatrix}
$$</div>
<p>Умножим обе части уравнения на вектор D:</p>
<div class="math">$$
DD = ABD
$$</div>
<p>При этом</p>
<div class="math">$$
DD =
\begin{pmatrix}
+ \\
- \\
- \\
+ \\
+ \\
- \\
- \\
+ \\
\end{pmatrix}
\begin{pmatrix}
+ \\
- \\
- \\
+ \\
+ \\
- \\
- \\
+ \\
\end{pmatrix} =
\begin{pmatrix}
+ \\
+ \\
+ \\
+ \\
+ \\
+ \\
+ \\
+ \\
\end{pmatrix} =
I (identity)
$$</div>
<p>Тогда:</p>
<div class="math">$$
I = ABD
$$</div>
<p>Аналогично мы можем получить формулу и для признака <em>E</em>: <span class="math">\(E = AC => I = ACE\)</span>.</p>
<p>На основании полученных результатов и формируется наш <strong>систематический подход для анализа линейных комбинаций</strong>.</p>
<ol>
<li>Прочитать генераторы для дополнительных факторов из таблицы: <span class="math">\(D = AB\)</span>, <span class="math">\(E = AC\)</span>.</li>
<li>Преобразовать генераторы к вектору идентичного вида: <span class="math">\(I = ABD\)</span> <span class="math">\(I = ACE\)</span>.</li>
<li>Приравнять все полученные значения: <span class="math">\(I = \dots\)</span> для всех генераторов. В нашем примере мы получим: <span class="math">\(I = ABD = ACE = (ABD)(ACE) = BCDE\)</span>.</li>
<li>Убедиться, что в уравнении <span class="math">\(2^p\)</span> сочетаний (где <span class="math">\(p\)</span> - степень изменчивости признака). В нашем случае это <span class="math">\(2^2 = 4\)</span> - верно (<span class="math">\(I\)</span> тоже считается).</li>
</ol>
<p>Докажем уравнение в п. 3: <span class="math">\(I = II = (ABD)(ACE) = AABCDE = (AA)BCDE = IBCDE = BCDE\)</span></p>
<blockquote>
<p><strong>Задание.</strong> Повторите описанный вывод и план эксперимента для 6 факторов и бюджете для 15-20 экспериментов.</p>
</blockquote>
<p>Настало время <strong>рассмотреть, как данные вычисления помогут нам понять линейные комбинации и “псевдонимы” на практике</strong>.</p>
<p>Допустим, мы построили модель для quarter-factor эксперимента и хотим узнать, какие взаимодействия содержатся в коэффициенте перед фактором <em>B</em> в полученной модели. Для этого нужно провести ряд нехитрых вычислений:</p>
<ul>
<li>взять рассчитанное выражение для генераторов</li>
<li>умножить каждую из частей равенства на фактор <em>B</em></li>
<li>упростить выражение, используя перестановки и правило идентичности (<span class="math">\(AA = I, BB=I, \dots\)</span>)</li>
</ul>
<div class="math">$$
I = ABD = ACE = BCDE \\
IB = ABDB = ACEB = BCDEB \\
B = A(BB)D = ABCE = (BB)CDE \\
B = AID = ABCE = ICDE \\
B = AD = ABCE = CDE
$$</div>
<p>Проведем <strong>анализ полученного выражения</strong>. Согласно полученным данным, <strong>фактор <em>B</em> будет связан (confounded, aliasing) со взаимодействиями между 2, 3 и 4 соответствующими факторами</strong>. Однако, учитывая малый вклад взаимодействий 3 порядка и выше можно упростить систему до:</p>
<div class="math">$$
B = AD
$$</div>
<blockquote>
<p><strong>Задание.</strong> Рассчитайте самостоятельно с какими факторами будут связаны новые факторы <em>C</em>, <em>D</em> и <em>А</em>?</p>
</blockquote>
<p>Проведя аналогичные расчеты для прочих факторов нашего эксперимента, можно получить следующую <strong>таблицу линейных комбинаций для нашего quarter-factorial эксперимента с 5 факторами</strong>:</p>
<div class="math">$$
A = BD = CE\\
B = AD \\
C = AE \\
D = AB \\
E = AC
$$</div>
<p><strong>Наиболее неявным будет результат для фактора <em>А</em></strong>, поскольку он связан с 2 взаимодействиями сразу. Обычно за данный фактор принимают наименее важный параметр системы (от которого ожидают наименьшего влияния или который легко зафиксировать в будущем). Дополнительно, <strong>если фактор <em>А</em> оказывает слабое влияние на какой-либо из факторов, их взаимодействие будет мало и позволит нам явно оценивать какой-либо другой фактор</strong>.</p>
<p>Отсюда вытекает важное понятие - <strong>разрешение эксперимента (resolution of the design)</strong>. Это наиболее точный уровень взаимосвязи факторов для данного плана эксперимента. В нашем случае разрешение равно 3 (т.е. признаки всегда связаны с двухфакторным взаимодействием).</p>
<p>Закономерный вопрос - можно ли получить лучшее разрешение для нашего эксперимента (т.е. получить линейную комбинацию не с двухфакторным взаимодействием, а с использованием взаимодействия в 3 и более факторов, чтобы можно было пренебречь данным влиянием)? И ответ - естественно! Но чтобы узнать сколько факторов и экспериментов должно быть в таких экспериментах, нужно воспользоваться <strong>римской цифрой в trade-of-table (рис. 11). Именно в данной таблице приведено обозначение разрешения и пути увеличения чувствительности эксперимента</strong>.</p>
<p>Для закрепления материала рассмотрим задачу по проведению эксперимента с 6 факторами в количестве от 15 до 20 экспериментов. Вот план действий:</p>
<ol>
<li>Взять из таблицы значение генераторов для факторов при k=6 и 16 экспериментах (quarter-factoial эксперимент).</li>
<li>Преобразовать генераторы к виду <span class="math">\(I = ABCE\)</span> и <span class="math">\(I = BCDF\)</span>.</li>
<li>Выписать уравнение для идентичности, исходя из правила <span class="math">\(2^p = 2^2 = 4\)</span> члена: <span class="math">\(I = ABCE = BCDF = A(BB)(CC)DEF = ADEF\)</span></li>
<li>Рассчитать взаимосвязи для каждого фактора quarter-factoial эксперимента:</li>
</ol>
<div class="math">$$
A = BCE = ABCDF = DEF \\
CD = ABDE = BF = ACEF \\
\dots
$$</div>
<p>Обратите внимание, что для данного эксперимента наиболее точная линейная комбинация с 3ех факторным взаимодействием, и это отличный план эксперимента! Мы сможем получить точное определение влияния фактора A на систему.</p>
<p><strong>Простой способ запомнить связь разрешения с факторным взаимодействием:</strong></p>
<ol>
<li>Если у вас разрешение 3, то 1 фактор VS 2ух факторное взаимодействие.</li>
<li>Если разрешение 4, то 1 фактор VS 3ех факторное взаимодействие и 2ух факторное VS 2ух факторное.</li>
<li>Разрешение 5 - 1 фактор VS 4х факторное взаимодействие, 3ех факторное взаимодействие VS 2ух факторное взаимодействие, 2ух факторное VS 3ех факторное.</li>
</ol>
<blockquote>
<p><strong>Примечание.</strong> Небольшие практические советы. Как вы могли заметить, разрешение будет связано с точность информации о влиянии факторов на систему.</p>
<ol>
<li>Разрешение 3: отлично подходит для проведения сканирования (screening). Например, при разработке нового продукта, выявления неполадок в процессе (при изменении цеха/производственной линии и т.п.).</li>
<li>Разрешение 4: используется для изучения и понимания системы.</li>
<li>Разрешение 5 и выше: используются для оптимизации процессов, изучения сложных эффектов, разработке высокоточных моделей. Весьма дороги!</li>
</ol>
</blockquote>
<p>Таким образом, <strong>при планировании начального эксперимента стоит придерживаться следующего алгоритма действия</strong>:</p>
<ol>
<li>Определить количество исследуемых факторов и количество экспериментов (исходя из бюджета).</li>
<li>Взять вид генераторов из таблицы.</li>
<li>Выписать все уравнения для идентичности.</li>
<li>Убедиться, что уравнение идентичности содержит <span class="math">\(2^p\)</span> членов.</li>
<li>Рассчитать вид линейных комбинаций (aliasing pattern).</li>
<li>Являются ли выявленные взаимосвязи проблемой для системы?
* Если да: переназначить названия факторов или выбрать другую схему эксперимента (начать планирование заново).
* Если нет: можно начинать эксперимент.</li>
</ol>
<p>Для начала исследования системы всегда используйте наибольшее число факторов при меньшем разрешении. <strong>Сканируйте систему и только потом отсеивайте факторы!</strong> Всегда используйте численное подтверждение незначимости фактора, а не просто догадки!</p>
<blockquote>
<p><strong>Пример</strong>. Рассмотрим сканирующий эксперимент для 7 факторов при 8 экспериментах (trade-of-table в помощь). Составим стандартную таблицу (табл. 8).</p>
<p><em>Таблица 8. Проведение сканирующего четверть-факторного эксперимента с дополнительным пробным экспериментом (9-ым).</em></p>
</blockquote>
<div>
<table>
<thead>
<tr>
<th>Experiments</th>
<th>A</th>
<th>B</th>
<th>C </th>
<th>D=AB</th>
<th>E=AC</th>
<th>F=BC</th>
<th>G=ABC</th>
<th>y</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>-</td>
<td>320</td>
</tr>
<tr>
<td>2</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>276</td>
</tr>
<tr>
<td>3</td>
<td>-</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>-</td>
<td>+</td>
<td>306</td>
</tr>
<tr>
<td>4</td>
<td>+</td>
<td>+</td>
<td>-</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>290</td>
</tr>
<tr>
<td>5</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>272</td>
</tr>
<tr>
<td>6</td>
<td>+</td>
<td>-</td>
<td>+</td>
<td>-</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>274</td>
</tr>
<tr>
<td>7</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>-</td>
<td>290</td>
</tr>
<tr>
<td>8</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>255</td>
</tr>
</tbody>
</table>
</div>
<blockquote>
<p>Пройдем наш алгоритм:</p>
<ol>
<li>Определить количество исследуемых факторов и количество экспериментов (исходя из бюджета) - сделано.</li>
<li>Взять вид генераторов из таблицы - сделано.</li>
<li>Выписать все уравнения для идентичности:</li>
</ol>
</blockquote>
<div class="math">$$
I = ABD \\
I = ACE \\
I = BCF \\
I = ABCG
$$</div>
<div class="math">$$
I = ABD = ACE = BCF = ABCG = \\
BDCE = ACDF = CDG = ABEF = BEG = AFG = \\
DEF = ADEG = CEFG = BDFG = \\
ABCDEFG
$$</div>
<blockquote>
<ol start="4">
<li>Убедиться, что уравнение идентичности содержит <span class="math">\(2^p = 2^4 = 16\)</span> членов - сделано.</li>
<li>Рассчитать вид взаимосвязей (aliasing pattern). Разрешение нашего эксперимента = 3.</li>
</ol>
</blockquote>
<div class="math">$$
A = BD = CE = FG \\
B = AD = CF = EG \\
C = AE = BF = DG \\
D = AB = CG = EF \\
E = AC = BG = DF \\
F = BC = AG = DE \\
G = CD = BE = AF
$$</div>
<blockquote>
<ol start="6">
<li>Является ли взаимосвязь приемлемой?</li>
</ol>
<p>Для этого используем <a href="https://yint.org/static/stats-mooc/4H.R">код</a> RStudio:</p>
</blockquote>
<div class="highlight"><pre><span></span><code><span class="n">A</span> <span class="o"><-</span> <span class="n">B</span> <span class="o"><-</span> <span class="n">C</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">design</span> <span class="o"><-</span> <span class="nf">expand.grid</span><span class="p">(</span><span class="n">A</span><span class="o">=</span><span class="n">A</span><span class="p">,</span> <span class="n">B</span><span class="o">=</span><span class="n">B</span><span class="p">,</span> <span class="n">C</span><span class="o">=</span><span class="n">C</span><span class="p">)</span>
<span class="c1"># The 3 factors that form the base of our design</span>
<span class="n">A</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">A</span>
<span class="n">B</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">B</span>
<span class="n">C</span> <span class="o"><-</span> <span class="n">design</span><span class="o">$</span><span class="n">C</span>
<span class="c1"># These 4 factors are generated, using the trade-off table relationships</span>
<span class="n">D</span> <span class="o"><-</span> <span class="n">A</span><span class="o">*</span><span class="n">B</span>
<span class="n">E</span> <span class="o"><-</span> <span class="n">A</span><span class="o">*</span><span class="n">C</span>
<span class="bp">F</span> <span class="o"><-</span> <span class="n">B</span><span class="o">*</span><span class="n">C</span>
<span class="n">G</span> <span class="o"><-</span> <span class="n">A</span><span class="o">*</span><span class="n">B</span><span class="o">*</span><span class="n">C</span>
<span class="c1"># These are the 8 experimental outcomes, corresponding to the 8 entries</span>
<span class="c1"># in each of the vectors above</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">320</span><span class="p">,</span> <span class="m">276</span><span class="p">,</span> <span class="m">306</span><span class="p">,</span> <span class="m">290</span><span class="p">,</span> <span class="m">272</span><span class="p">,</span> <span class="m">274</span><span class="p">,</span> <span class="m">290</span><span class="p">,</span> <span class="m">255</span><span class="p">)</span>
<span class="c1"># And finally, the linear model</span>
<span class="n">mod_ff</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">A</span><span class="o">*</span><span class="n">B</span><span class="o">*</span><span class="n">C</span><span class="o">*</span><span class="n">D</span><span class="o">*</span><span class="n">E</span><span class="o">*</span><span class="bp">F</span><span class="o">*</span><span class="n">G</span><span class="p">)</span>
<span class="c1"># It is better to uncomment and use this line instead:</span>
<span class="c1"># library(pid) <-- best to use this!</span>
<span class="c1"># But this embedded R script does not have the "pid" library.</span>
<span class="c1"># So we will load the required function from an external server instead:</span>
<span class="nf">source</span><span class="p">(</span><span class="s">'https://yint.org/paretoPlot.R'</span><span class="p">)</span>
<span class="nf">paretoPlot</span><span class="p">(</span><span class="n">mod_ff</span><span class="p">)</span>
<span class="c1"># Now rebuild the linear model with only the 4 important terms</span>
<span class="n">mod_res4</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">A</span><span class="o">*</span><span class="n">C</span><span class="o">*</span><span class="n">E</span><span class="o">*</span><span class="n">G</span><span class="p">)</span>
<span class="nf">paretoPlot</span><span class="p">(</span><span class="n">mod_res4</span><span class="p">)</span>
</code></pre></div>
<blockquote>
<p>Результат построения модели приведен на рис. 12.</p>
</blockquote>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_12.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 12. Результат проведенного эксперимента.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p>Как можно заметить, факторы <em>C</em>, <em>A</em>, <em>G</em> - значимы (отрицательный знак), чуть менее значим фактор <em>E</em> (положительный знак). Факторы <em>D</em>, <em>F</em>, <em>B</em> - незначимы и их можно удалить (<strong>при условии, что вы достаточно сильно варьировали их, чтобы оказать влияние на результат</strong>). При этом, мы понимаем, что каждый фактор на самом деле дополнительно включает в себя линейные комбинации.</p>
<p>Таким образом мы можем удалить из рассмотрения 3 фактора <em>B</em>, <em>D</em>, <em>F</em>, поскольку их влияние весьма мало (даже с учетом дополнительных взаимодействий). Мы можем перестроить модель без учета этих факторов и не проводя дополнительных экспериментов (рис. 13).</p>
</blockquote>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_13.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 13. Результат проведенного эксперимента после удаления незначимых факторов.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p>Как мы можем убедиться, мы получили те же коэффициенты, что и до этого (из-за независимости столбцов матрицы факторов). Таким образом, мы можем удалить эти 3 фактора из рассмотрения. При этом мы сохранили 4 важных фактора которые предположительно влияют на модель и оценили двухфакторные взаимодействия, которые тоже оказывают влияние.</p>
<p><strong>Примечание.</strong> Для тех, кто заинтересовался подобным планированием могу порекомендовать ознакомиться с дополнительными способами оптимизации экспериментов:</p>
<ol>
<li>Plackett-Burman design (для проведения экспериментов, количество которых кратно 4).</li>
<li>“Definitive Screening Design” (тип оптимизационных критериев, например D-optimal designs). Могут быть очень гибкими.</li>
</ol>
</blockquote>
<h4 id="2-9-4">2.9.4 Метод оптимизации поверхности отклика (response surface methods, RSM)</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Мы достаточно подробно рассмотрели как можно блокировать мешающие и отсеивать не значимые признаки через правильное планирование и проведение сканирующих экспериментов. Время заглянуть за горизонт и понять, куда нужно двигаться после планирования и проведения факторного эксперимента. Именно за это отвечает <strong>метод поверхности отклика</strong>.</p>
<p>Но для начало нужно четко представлять <strong>зачем мы проводим свой эксперимент</strong>. В общем случае на это <strong>есть 5 причин</strong>:</p>
<ol>
<li>Получение дополнительной информации и изучение системы - разобрали.</li>
<li>Выявления проблем - разобрали.</li>
<li>Построение предсказания (модели) - разобрали.</li>
<li>Оптимизация процесса - ?.</li>
<li>Наблюдение за системой чтобы убедиться, что сохраняется прирост производительности - догадались.</li>
</ol>
<p>До этого, мы рассматривали первые 3 пункта и немного затронули 4-ый (как вы думаете, когда?). Для этого мы исследовали систему, чтобы выявить значимые факторы и исключить не значимые (проводили скрининг). Это способствовало лучшему пониманию системы. Цитируя George Box:</p>
<blockquote>
<p>“Discovering the unexpected is more important than confirming the unknown” (обнаружить неожиданное важнее, чем подтвердить неизвестное).</p>
</blockquote>
<p>Можно сказать, что мы сможем решить примерно следующую задачу босса: <strong>“как работает данная система”?</strong> Вы устраиваете мозговой штурм и определяете 5-6 факторов, которые связаны с данной задачей (проблемой). Используя факторное планирование эксперимента вы можете быстро определить значимые и не значимые факторы и в принципе построить модель, которая предсказывает результат.</p>
<p>И <strong>в настоящей главе мы пойдем дальше и научимся решать следующую задачу босса: “теперь понято, как работает система, а как мы можем ее оптимизировать”?</strong> Для этого, после изучения системы нам понадобится расширить диапазон изменения факторов.</p>
<p>Для простоты рассмотрим немного измененный и ставший классическим <strong>эксперимент с попкорном</strong>. Рассмотрим 2 фактора: <em>А</em> - время готовки и <em>В</em> - тип масла. Откликом будет количество не сгоревших, но лопнувших зерен (далее вы увидите почему важно правильно выбирать отклик). Наша <strong>задача - максимизировать отклик</strong>. Результаты полнофакторного эксперимента приведены на рис. 14.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_14.png" alt="popcorn-example" width="900px"/>
</td>
<td>
<i>
Рис. 14. Результат полнофакторного эксперимента.
</i>
</td>
</tr>
</table>
</div>
<p>Как можно заметить, в нашем случае влияние масла практически не значимо по сравнению с влиянием времени. Таким образом мы можем свернуть наш квадрат до отрезка и модель будет чрезвычайно простой (фактор <em>В</em> и взаимодействие <em>ВА</em> приняты не значимыми):</p>
<div class="math">$$
y = 90 + 15 x_A
$$</div>
<blockquote>
<p><strong>Примечание.</strong> Отмечу, что все в мире относительно и масло конечно же влияет на наш отклик, но по сравнению со временем - влияет крайне не значимо.</p>
<p><strong>Задача.</strong> Проведите данный расчет в RStudio самостоятельно с учетом обоих факторов и убедитесь в правильности предложенного упрощения.</p>
</blockquote>
<p>Модель говорит нам, что при увеличении времени на 1 (т.е. от -1 до 0 и от 0 до +1, мы ведь кодируем время), количество не сожженных зерен увеличится на 15. И основная идея анонсированного метода оптимизационной поверхности как раз заключается в том, что эта модель говорит нам куда двигаться дальше. В нашем случае в сторону увеличения времени (рис. 15).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_15.png" alt="Example" width="900px"/>
</td>
<td>
<i>
Рис. 15. Полученная модель для однофакторного "попкорн-эксперимента".
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Примечание.</strong> Данный метод оптимизации используется только после исключения всех незначимых факторов! Это важно. Никогда не включайте в оптимизацию незначимые факторы.</p>
<p><strong>Примечание.</strong> Построенная модель (эмпирическая модель) никогда не скажет нам что произойдет за пределами граничных значений (за пределами рассматриваемого диапазона факторов)! Нет никаких математических и логических оснований для этого. Чтобы получить прогноз, нам нужно использовать метод оптимизационной поверхности и только после проведения сканирующего эксперимента.</p>
</blockquote>
<p>Для проведения дальнейшего исследования нам <strong>понадобиться учесть следующие задачи</strong>:</p>
<ol>
<li>Разобраться как кодировать/декодировать физические единицы</li>
<li>Определиться с линейными и нелинейными моделями</li>
<li>Разобраться в степени доверия к моделями</li>
<li>Ввести понятие шума и ошибки для эксперимента</li>
<li>Понять как двигаться в сторону оптимума</li>
<li>Обосновать выбор каждого дополнительного теста</li>
</ol>
<p>Итак, мы часто говорили о кодировании и использовали кодовые значения переменных (-1, 0 и +1). Время ввести формальные формулы для расчета.</p>
<p>При кодировании:</p>
<div class="math">$$
\text{coded value} = \frac{\text{real value} - \text{center value}}{\frac{1}{2} range} \\
\text{center value} = \frac{\text{low value} + \text{high value}}{2} \\
\text{range} = \text{high value} - \text{low value}
$$</div>
<p>При декодировании:</p>
<div class="math">$$
\text{real value} = (coded value) \cdot \frac{1}{2} \text{range} + \text{center value}
$$</div>
<blockquote>
<p><strong>Примечание.</strong> Советую вывести данные формулы самим с использованием кубических диаграмм. Все довольно наглядно и один раз попробовав, всегда сможете вывести заново при необходимости.</p>
</blockquote>
<p>Следующей задачей стоит разбор линейных и нелинейных моделей. Существует множество факторов выбора вида модели и критериев их выбора для каждого конкретного случая. Однако правило одно и оно было прекрасно сформулировано by George Box:</p>
<blockquote>
<p>all models are wrong, but some are useful… the practical question is, how wrong do they have to be, before they are not useful? (перевод за вами)</p>
</blockquote>
<p>Таким образом неважно, какую модель мы выбираем, важно - с каким диапазоном и с какими допущениями (ошибками) мы работаем. Любая гладкая функция может быть представлена в линейном виде в достаточно коротком диапазоне.</p>
<p>Но тут мы сталкиваемся с <strong>критерием оценки “полезности” модели</strong> - ошибкой (погрешностью). Причиной данного явления является шум (noise). Это те факторы, которые мы не контролируем и не можем измерить в данном конкретном случае. Простым подтверждением является проведение нескольких экспериментов при одинаковых условиях - мы получим разные значения отклика. Более подробно о погрешностях и методах их учета (статистике) мы поговорим в отдельной главе данного курса. А необходимый минимум мы уже рассмотрели ранее. Сейчас вернемся к основному вопросу: <strong>когда модель перестает быть нам полезной? Предлагаю ответ - когда она становиться не точной</strong>, другими словами когда ее предсказания начинают сильно отклоняться от эксперимента и это отклонение превышает допустимую погрешность.</p>
<p>На приведенном примере с попкорном, мы первоначально предположили линейную модель для кодированных значений -1 и +1 и определили направления оптимизации. Время провести следующий эксперимент. Двигаемся в сторону максимизации отклика и проведем новый эксперимент для закодированного значения фактора +2 (рис. 16).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_16.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 16. Следующий эксперимент за пределами области определения модели. Оценка полезности.
</i>
</td>
</tr>
</table>
</div>
<p>Предсказанное нашей моделью значение составит 120 зерен (предполагаемое значение), а в результате эксперимента мы получили 113 зерен… Полезна ли наша модель? Чтобы ответить на данный вопрос рассчитаем полученную погрешность:</p>
<div class="math">$$
error = \frac{120-113}{113} \cdot 100 \% = 6.2 \%
$$</div>
<p>Таким образом, если мы допускаем погрешность в 6.2 %, то полезна. Но это довольно большая погрешность, сравним ее с изначальной принятой нами погрешностью (когда исключили фактор масла):</p>
<div class="math">$$
error_{ref} = \frac{\frac{76-74}{75} + \frac{106-104}{105}}{2} \cdot 100 \% = 2.3 \%
$$</div>
<blockquote>
<p><strong>Примечание.</strong> В первом случае мы рассчитали погрешность от экспериментального значения, поскольку считаем его более правильным. Во втором случае у нас нет наиболее верного значения, поэтому рассчитываем погрешность от среднего.</p>
</blockquote>
<p>При сравнении с принятой погрешностью в 2.3 %, полученная погрешность в 6.2 % нас не устраивает. Время изменить модель.</p>
<p><strong>Раз наша линейная модель перестала быть полезной - время разработать новую</strong>. Пойдем по одному из <strong>2 возможных путей</strong>.</p>
<ul>
<li>Провести в точке расхождения новый полнофакторный эксперимент;</li>
<li>Перейти к более сложной, нелинейной модели.</li>
</ul>
<p>В нашем случае попробуем использовать более простой метод - модифицируем модель. Полный код с построением графиков приведен ниже</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Model for the popcorn system, ignoring factor B (oil type)</span>
<span class="n">xA</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">y0</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">74</span><span class="p">,</span> <span class="m">76</span><span class="p">,</span> <span class="m">104</span><span class="p">,</span> <span class="m">106</span><span class="p">)</span>
<span class="n">model.0</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y0</span> <span class="o">~</span> <span class="n">xA</span><span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">model.0</span><span class="p">)</span>
<span class="c1"># Plotting code: copy/paste and reuse this code as required</span>
<span class="nf">require</span><span class="p">(</span><span class="s">"ggplot2"</span><span class="p">)</span>
<span class="n">raw_data</span> <span class="o"><-</span> <span class="nf">data.frame</span><span class="p">(</span><span class="n">xA</span> <span class="o">=</span> <span class="n">xA</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">y0</span><span class="p">)</span>
<span class="n">plot_data</span> <span class="o"><-</span> <span class="nf">data.frame</span><span class="p">(</span><span class="n">xA</span> <span class="o">=</span> <span class="nf">seq</span><span class="p">(</span><span class="m">-2</span><span class="p">,</span> <span class="m">+5</span><span class="p">,</span> <span class="m">0.1</span><span class="p">))</span>
<span class="n">plot_data</span><span class="o">$</span><span class="n">y</span> <span class="o"><-</span> <span class="nf">predict</span><span class="p">(</span><span class="n">model.0</span><span class="p">,</span> <span class="n">newdata</span><span class="o">=</span><span class="n">plot_data</span><span class="p">)</span>
<span class="n">p</span> <span class="o"><-</span> <span class="nf">ggplot</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">raw_data</span><span class="p">,</span> <span class="nf">aes</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">xA</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">y</span><span class="p">))</span> <span class="o">+</span>
<span class="nf">geom_point</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="m">10</span><span class="p">)</span> <span class="o">+</span>
<span class="nf">xlab</span><span class="p">(</span><span class="s">"Coded value for x_A"</span><span class="p">)</span> <span class="o">+</span>
<span class="nf">scale_x_continuous</span><span class="p">(</span><span class="n">breaks</span><span class="o">=</span><span class="nf">seq</span><span class="p">(</span><span class="m">-2</span><span class="p">,</span><span class="m">5</span><span class="p">,</span><span class="m">1</span><span class="p">))</span> <span class="o">+</span>
<span class="nf">ylab</span><span class="p">(</span><span class="s">"Outcome variable (number of unburned popcorn)"</span><span class="p">)</span> <span class="o">+</span>
<span class="nf">scale_y_continuous</span><span class="p">(</span><span class="n">breaks</span><span class="o">=</span><span class="nf">seq</span><span class="p">(</span><span class="m">60</span><span class="p">,</span><span class="m">170</span><span class="p">,</span><span class="m">10</span><span class="p">))</span> <span class="o">+</span>
<span class="nf">theme_bw</span><span class="p">()</span> <span class="o">+</span>
<span class="nf">theme</span><span class="p">(</span><span class="n">axis.text</span><span class="o">=</span><span class="nf">element_text</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="m">26</span><span class="p">),</span> <span class="n">legend.position</span> <span class="o">=</span> <span class="s">"none"</span><span class="p">)</span> <span class="o">+</span>
<span class="nf">theme</span><span class="p">(</span><span class="n">axis.title</span><span class="o">=</span><span class="nf">element_text</span><span class="p">(</span><span class="n">face</span><span class="o">=</span><span class="s">"bold"</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="m">26</span><span class="p">))</span>
<span class="n">p</span> <span class="o"><-</span> <span class="n">p</span> <span class="o">+</span> <span class="nf">geom_line</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">plot_data</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">"blue"</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="m">1</span><span class="p">)</span>
<span class="n">p</span>
<span class="c1">#ggsave("popcorn-linear-only.pdf", width=19.2, height=10.8, units="in")</span>
<span class="c1"># Now build the next model, model 1: y = 91.8 + 14.9 xA - 2xA^2</span>
<span class="n">xA</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">+2</span><span class="p">)</span>
<span class="n">y1</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">74</span><span class="p">,</span> <span class="m">76</span><span class="p">,</span> <span class="m">104</span><span class="p">,</span> <span class="m">106</span><span class="p">,</span> <span class="m">91</span><span class="p">,</span> <span class="m">113</span><span class="p">)</span>
<span class="n">model.1</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y1</span> <span class="o">~</span> <span class="n">xA</span> <span class="o">+</span> <span class="nf">I</span><span class="p">(</span><span class="n">xA</span><span class="o">^</span><span class="m">2</span><span class="p">)</span> <span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">model.1</span><span class="p">)</span>
<span class="nf">predict</span><span class="p">(</span><span class="n">model.1</span><span class="p">,</span> <span class="nf">data.frame</span><span class="p">(</span><span class="n">xA</span><span class="o">=</span><span class="m">+1</span><span class="p">))</span>
<span class="c1"># Add these new model to the plot as a red line</span>
<span class="n">plot_data</span> <span class="o"><-</span> <span class="nf">data.frame</span><span class="p">(</span><span class="n">xA</span> <span class="o">=</span> <span class="nf">seq</span><span class="p">(</span><span class="m">-1.5</span><span class="p">,</span> <span class="m">+5</span><span class="p">,</span> <span class="m">0.1</span><span class="p">))</span>
<span class="n">plot_data</span><span class="o">$</span><span class="n">y</span> <span class="o"><-</span> <span class="nf">predict</span><span class="p">(</span><span class="n">model.1</span><span class="p">,</span> <span class="n">newdata</span><span class="o">=</span><span class="n">plot_data</span><span class="p">)</span>
<span class="n">p</span> <span class="o"><-</span> <span class="n">p</span> <span class="o">+</span> <span class="nf">geom_point</span><span class="p">(</span><span class="nf">aes</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">0</span><span class="p">),</span> <span class="n">y</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">91</span><span class="p">)),</span> <span class="n">shape</span><span class="o">=</span><span class="m">15</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="m">6</span><span class="p">)</span>
<span class="n">p</span> <span class="o"><-</span> <span class="n">p</span> <span class="o">+</span> <span class="nf">geom_point</span><span class="p">(</span><span class="nf">aes</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">+2</span><span class="p">),</span> <span class="n">y</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">113</span><span class="p">)),</span> <span class="n">shape</span><span class="o">=</span><span class="m">17</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="m">6</span><span class="p">)</span>
<span class="n">p</span> <span class="o"><-</span> <span class="n">p</span> <span class="o">+</span> <span class="nf">geom_line</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">plot_data</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">"red"</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="m">1</span><span class="p">)</span>
<span class="n">p</span>
<span class="c1">#ggsave("popcorn-linear-with-quadratic.pdf", units="in")</span>
<span class="c1"># Add the 7th and 8th point, and rebuild the model</span>
<span class="n">xA</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">+2</span><span class="p">,</span> <span class="m">+3.7</span><span class="p">,</span> <span class="m">+5</span><span class="p">)</span>
<span class="n">y2</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">74</span><span class="p">,</span> <span class="m">76</span><span class="p">,</span> <span class="m">104</span><span class="p">,</span> <span class="m">106</span><span class="p">,</span> <span class="m">91</span><span class="p">,</span> <span class="m">113</span><span class="p">,</span> <span class="m">116</span><span class="p">,</span> <span class="m">109</span><span class="p">)</span>
<span class="n">model.2</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y2</span> <span class="o">~</span> <span class="n">xA</span> <span class="o">+</span> <span class="nf">I</span><span class="p">(</span><span class="n">xA</span><span class="o">^</span><span class="m">2</span><span class="p">))</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">model.2</span><span class="p">)</span>
<span class="n">plot_data</span> <span class="o"><-</span> <span class="nf">data.frame</span><span class="p">(</span><span class="n">xA</span> <span class="o">=</span> <span class="nf">seq</span><span class="p">(</span><span class="m">-1.5</span><span class="p">,</span> <span class="m">+5</span><span class="p">,</span> <span class="m">0.1</span><span class="p">))</span>
<span class="n">plot_data</span><span class="o">$</span><span class="n">y</span> <span class="o"><-</span> <span class="nf">predict</span><span class="p">(</span><span class="n">model.2</span><span class="p">,</span> <span class="n">newdata</span><span class="o">=</span><span class="n">plot_data</span><span class="p">)</span>
<span class="n">p</span> <span class="o"><-</span> <span class="n">p</span> <span class="o">+</span> <span class="nf">geom_point</span><span class="p">(</span><span class="nf">aes</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">3.7</span><span class="p">),</span> <span class="n">y</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">116</span><span class="p">)),</span> <span class="n">shape</span><span class="o">=</span><span class="m">9</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="m">6</span><span class="p">)</span>
<span class="n">p</span> <span class="o"><-</span> <span class="n">p</span> <span class="o">+</span> <span class="nf">geom_point</span><span class="p">(</span><span class="nf">aes</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">5.0</span><span class="p">),</span> <span class="n">y</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">108</span><span class="p">)),</span> <span class="n">shape</span><span class="o">=</span><span class="m">18</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="m">6</span><span class="p">)</span>
<span class="n">p</span> <span class="o"><-</span> <span class="n">p</span> <span class="o">+</span> <span class="nf">geom_line</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">plot_data</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">"darkgreen"</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="m">1</span><span class="p">)</span>
<span class="n">p</span>
</code></pre></div>
<p>Я специально привел довольно сложный код в котором рассмотрено несколько моделей и способ построения графика. Предлагаю Вам немножко потренироваться и разобраться что к чему (используйте RStudio или помощь в <a href="https://www.coursera.org/learn/experimentation/lecture/Umhom/5b-response-surface-methods-rsm-one-variable">лекции №5В</a> курса по планированию эксперимента).</p>
<p>В общем случае, <strong>при изменении модели на нелинейную мы добавили квадратичный член и получили новое представление общей модели (рис. 17)</strong>.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_17.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 17. Усложнение модели.
</i>
</td>
</tr>
</table>
</div>
<p>Теперь погрешность нас устраивает и мы можем перейти к проведению следующего эксперимента. Для этого посчитаем, где должен находиться максимум (около 3.6 кодированных единиц, на реальные единица посчитайте сами).</p>
<p>При проведении нового эксперимента в предполагаемой точке максимума результат будет вполне удовлетворительный: 116 зерен против 118 по модели. Можно взять это значение за максимум.</p>
<p>Для подтверждения нашего предположения стоит провести дополнительный эксперимент около 5 кодированных единиц. При ожидаемом значении в 116, мы получили 109. Расхождение увеличилось, но тренд соответствует ожиданиям - максимум мы определили верно. Если хотите подстраховаться - <strong>можно перестроить модель по всем имеющимся данных</strong> (в коде это представлено) и посмотреть, как изменится положение максимума.</p>
<p>Таким образом мы рассмотрели простой пример оптимизации модели через последовательно проводимы эксперименты. Важно понимать, что <strong>перед проведением каждого последующего эксперимента мы должны понимать допустимую погрешность, выбрать шаг, рассчитать предполагаемое значение для выбранного шага и затем сравнить его с экспериментально полученным результатом</strong>. Затем - повторить цикл рассуждений.</p>
<h4 id="2-9-5">2.9.5 Метод оптимизации поверхности отклика. Усложнение модели</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Теперь, когда мы познакомились с основными понятиями и способами метода оптимизации поверхности отклика, можно двигаться в сторону усложнения и более реальных кейсов.</p>
<p>До сих пор, для метода оптимизационной поверхности мы использовали только один фактор. Такой подход называется <strong>COST (change one single thing) or OFAT (one factor at a time)</strong>. Он прост, но абсолютно <strong>не дает представления о реальной картине</strong>.</p>
<ul>
<li>Он дает ложное представление об оптимуме, поскольку не учитывает другие факторы и их взаимодействия.</li>
<li>Чем выше размерность эксперимента (количество факторов), тем больше шансов не приблизиться к реальному оптимуму.</li>
</ul>
<p>Пример метода оптимизационной поверхности для случая с 2 факторами приведен на рис. 18.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_18.png" alt="2 factor example" width="900px"/>
</td>
<td>
<i>
Рис. 18. Оптимизационная поверхность и контурные линии.
</i>
</td>
</tr>
</table>
</div>
<p>В данном случае рассматривается прибыль в зависимости от цены на товар и высоты полки. Обратите внимание, что <strong>даже последовательное варьирование 2 факторов дало нам ложное представление об оптимуме для прибыли</strong>. Само же значение прибыли обозначено контурными линиями (линии при которые прибыль остается неизменной).</p>
<p>Проблема заключается в том, что <strong>установить контурную поверхность для отклика крайне затратно</strong>.</p>
<p>Для дальнейшего изучения мы будем использовать следующий случай. Нам нужно оптимизировать производство промышленной продукции. Наши факторы:</p>
<ol>
<li>количество продукции в час (T, throughput);</li>
<li>цена единицы продукции (P, price).</li>
</ol>
<p>Откликом будет прибыль (<span class="math">\(profit = \text{all income} - \text{all expenses}\)</span>).</p>
<p>Допустим у нас есть некая точка отсчета (то, как работает цех сейчас) и мы проводим полнофакторный эксперимент вокруг нее (рис. 19).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_19.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 19. Первоначальный полнофакторный эксперимент.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Примечание</strong>. В рамках этой главы мы обсуждаем с вами множество параметров планирования эксперимента. Но довольно мало времени уделяем выбору диапазона для изменения фактора. Обычно эта задача является специфично для того или иного типа факторов. Но все же есть <strong>несколько общих рекомендаций для выбора диапазона изменений признаков</strong>.</p>
<ol>
<li>Вы должны иметь возможность экспериментально определять разницу между высоким и низким уровнем фактора:
* слишком узкий диапазон - вы будете измерять шум;
* слишком широкий - высока вероятность нелинейности.</li>
<li>Не используйте значения близкие к экстремальным (исходное полотно на рис. 19, где цена ограничена здравым смыслом и рынком, а производительность - характеристиками системы).</li>
<li>Если совсем нет идей - берите 25% от экстремального размаха (абсолютный максимум - абсолютный минимум фактора). В нашем случае - это 10 единиц продукта в час (если считать от 300 до 350).</li>
</ol>
</blockquote>
<p>После проведения факторного эксперимента нам понадобятся изолинии, которыми мы пользовались для кубических диаграмм (<a href="https://docs.google.com/document/d/1HbQF94ovmWfJVsBD2XSYQSzowI1-Fy6ztIhExRHedU8/pub">исходный код</a>):</p>
<div class="highlight"><pre><span></span><code><span class="nf">library</span><span class="p">(</span><span class="n">pid</span><span class="p">)</span>
<span class="nf">manufacture</span><span class="p">(</span><span class="n">P</span><span class="o">=</span><span class="m">1.05</span><span class="p">,</span> <span class="bp">T</span><span class="o">=</span><span class="m">325</span><span class="p">)</span> <span class="c1"># simulates a price of $1.05,</span>
<span class="c1"># and a throughput of 325 parts per hour</span>
<span class="nf">help</span><span class="p">(</span><span class="n">manufacture</span><span class="p">)</span> <span class="c1"># Gives you more details</span>
<span class="nf">rm</span><span class="p">(</span><span class="n">list</span> <span class="o">=</span> <span class="nf">ls</span><span class="p">())</span> <span class="c1"># clear the workspace of all prior variables</span>
<span class="n">P</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">407</span><span class="p">,</span> <span class="m">193</span><span class="p">,</span> <span class="m">468</span><span class="p">,</span> <span class="m">310</span><span class="p">,</span> <span class="m">571</span><span class="p">)</span>
<span class="n">mod.base.1</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">P</span><span class="o">*</span><span class="bp">T</span><span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">mod.base.1</span><span class="p">)</span>
<span class="c1"># You will need the PID package to run this code.</span>
<span class="c1"># Run the following command once, then you can comment this out again</span>
<span class="nf">install.packages</span><span class="p">(</span><span class="s">"pid"</span><span class="p">)</span>
<span class="c1"># Load the PID package in R.</span>
<span class="nf">library</span><span class="p">(</span><span class="n">pid</span><span class="p">)</span>
<span class="nf">contourPlot</span><span class="p">(</span><span class="n">mod.base.1</span><span class="p">,</span> <span class="s">"P"</span><span class="p">,</span> <span class="s">"T"</span><span class="p">)</span>
<span class="c1"># predict the points, using the model:</span>
<span class="nf">predict</span><span class="p">(</span><span class="n">mod.base.1</span><span class="p">,</span> <span class="nf">data.frame</span><span class="p">(</span><span class="n">P</span><span class="o">=</span><span class="n">P</span><span class="p">,</span> <span class="bp">T</span><span class="o">=</span><span class="bp">T</span><span class="p">))</span>
<span class="c1"># Second factorial: points 4, 5, 6, 7 and 8 (baseline)</span>
<span class="c1"># ----------------</span>
<span class="n">P</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">657</span><span class="p">,</span> <span class="m">571</span><span class="p">,</span> <span class="m">669</span><span class="p">,</span> <span class="m">620</span><span class="p">,</span> <span class="m">710</span><span class="p">)</span>
<span class="n">mod.base.2</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">P</span><span class="o">*</span><span class="bp">T</span><span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">mod.base.2</span><span class="p">)</span>
<span class="nf">contourPlot</span><span class="p">(</span><span class="n">mod.base.2</span><span class="p">,</span> <span class="s">"P"</span><span class="p">,</span> <span class="s">"T"</span><span class="p">)</span>
<span class="c1"># Predict directly from least squares model, for experiment 9</span>
<span class="nf">predict</span><span class="p">(</span><span class="n">mod.base.2</span><span class="p">,</span> <span class="nf">data.frame</span><span class="p">(</span><span class="bp">T</span><span class="o">=</span><span class="m">0.75</span><span class="p">,</span> <span class="n">P</span><span class="o">=</span><span class="m">1.5</span><span class="p">))</span>
<span class="c1"># Step further, out to point number 10</span>
<span class="n">P_coded</span> <span class="o">=</span> <span class="p">(</span><span class="m">1.63</span> <span class="o">-</span> <span class="m">1.18</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="m">0.5</span><span class="o">*</span><span class="m">0.36</span><span class="p">)</span>
<span class="n">T_coded</span> <span class="o">=</span> <span class="p">(</span><span class="m">339</span> <span class="o">-</span> <span class="m">334</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="m">0.5</span><span class="o">*</span><span class="m">8</span><span class="p">)</span>
<span class="nf">predict</span><span class="p">(</span><span class="n">mod.base.2</span><span class="p">,</span> <span class="nf">data.frame</span><span class="p">(</span><span class="n">P</span><span class="o">=</span><span class="n">P_coded</span><span class="p">,</span> <span class="bp">T</span><span class="o">=</span><span class="n">T_coded</span><span class="p">))</span>
<span class="c1"># Third factorial: around baseline of point 10; cp(1.63, 339) and range(0.36, 6)</span>
<span class="c1"># Add runs 11, 12, 13, and 14 around the baseline [video 5F uses this code]</span>
<span class="n">P</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">732</span><span class="p">,</span> <span class="m">715</span><span class="p">,</span> <span class="m">713</span><span class="p">,</span> <span class="m">733</span><span class="p">,</span> <span class="m">725</span><span class="p">)</span>
<span class="n">mod.base.3</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">P</span><span class="o">*</span><span class="bp">T</span><span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">mod.base.3</span><span class="p">)</span>
<span class="nf">contourPlot</span><span class="p">(</span><span class="n">mod.base.3</span><span class="p">,</span> <span class="s">"P"</span><span class="p">,</span> <span class="s">"T"</span><span class="p">,</span> <span class="n">main</span><span class="o">=</span><span class="s">"Regular design"</span><span class="p">)</span>
<span class="c1"># Use only point 9 (and not run point 11): points 9, 10, 12, 13, and 14</span>
<span class="c1"># This could also have been considered a "botched design".</span>
<span class="n">P</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-2</span><span class="o">/</span><span class="m">3</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">732</span><span class="p">,</span> <span class="m">717</span><span class="p">,</span> <span class="m">713</span><span class="p">,</span> <span class="m">733</span><span class="p">,</span> <span class="m">725</span><span class="p">)</span>
<span class="n">mod.base.4</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">P</span><span class="o">*</span><span class="bp">T</span><span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">mod.base.4</span><span class="p">)</span>
<span class="nf">contourPlot</span><span class="p">(</span><span class="n">mod.base.4</span><span class="p">,</span> <span class="s">"P"</span><span class="p">,</span> <span class="s">"T"</span><span class="p">,</span>
<span class="n">main</span><span class="o">=</span><span class="s">"Botched design (with run 9, instead of 11)"</span><span class="p">)</span>
<span class="c1"># You may absolutely include point 9, into the rest of the factorial</span>
<span class="c1"># to gain an extra degree of freedom.</span>
<span class="n">P</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">)</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span><span class="m">-2</span><span class="o">/</span><span class="m">3</span><span class="p">)</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">732</span><span class="p">,</span> <span class="m">715</span><span class="p">,</span> <span class="m">713</span><span class="p">,</span> <span class="m">733</span><span class="p">,</span> <span class="m">725</span><span class="p">,</span> <span class="m">717</span><span class="p">)</span>
<span class="n">mod.base.4.extra</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">P</span><span class="o">*</span><span class="bp">T</span><span class="p">)</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">mod.base.4.extra</span><span class="p">)</span>
<span class="nf">contourPlot</span><span class="p">(</span><span class="n">mod.base.4.extra</span><span class="p">,</span> <span class="s">"P"</span><span class="p">,</span> <span class="s">"T"</span><span class="p">,</span>
<span class="n">main</span><span class="o">=</span><span class="s">"With an extra degree of freedom"</span><span class="p">)</span>
<span class="c1"># Back to model 3: points 10, 11, 12, 13, 14</span>
<span class="n">P</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">732</span><span class="p">,</span> <span class="m">715</span><span class="p">,</span> <span class="m">713</span><span class="p">,</span> <span class="m">733</span><span class="p">,</span> <span class="m">725</span><span class="p">)</span>
<span class="n">model.3</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">P</span><span class="o">*</span><span class="bp">T</span><span class="p">)</span>
<span class="nf">contourPlot</span><span class="p">(</span><span class="n">model.3</span><span class="p">,</span><span class="s">"P"</span><span class="p">,</span> <span class="s">"T"</span><span class="p">,</span> <span class="n">main</span><span class="o">=</span><span class="s">"Factorial 3: using points 10 to 14"</span><span class="p">)</span>
<span class="c1"># Let's use model.3: y = 723.6 - 2.5 x_P + 7.5 x_T -1.5 x_T x_P</span>
<span class="c1"># and predict operation at point 15</span>
<span class="nf">predict</span><span class="p">(</span><span class="n">model.3</span><span class="p">,</span> <span class="nf">data.frame</span><span class="p">(</span><span class="n">P</span><span class="o">=</span><span class="m">-2</span><span class="o">/</span><span class="m">3</span><span class="p">,</span> <span class="bp">T</span><span class="o">=</span><span class="m">+2</span><span class="p">))</span>
<span class="c1"># Demonstrate curvature effects due to omitting the interaction term</span>
<span class="n">P</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">732</span><span class="p">,</span> <span class="m">715</span><span class="p">,</span> <span class="m">713</span><span class="p">,</span> <span class="m">733</span><span class="p">,</span> <span class="m">725</span><span class="p">)</span>
<span class="n">model.5</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">P</span> <span class="o">+</span> <span class="bp">T</span><span class="p">)</span> <span class="c1"># notice the model is different, but the</span>
<span class="c1"># coefficients are the same.</span>
<span class="nf">contourPlot</span><span class="p">(</span><span class="n">model.3</span><span class="p">,</span> <span class="s">"P"</span><span class="p">,</span> <span class="s">"T"</span><span class="p">,</span> <span class="n">main</span><span class="o">=</span><span class="s">"Contour plot WITH interaction term"</span><span class="p">)</span>
<span class="nf">contourPlot</span><span class="p">(</span><span class="n">model.5</span><span class="p">,</span> <span class="s">"P"</span><span class="p">,</span> <span class="s">"T"</span><span class="p">,</span> <span class="n">main</span><span class="o">=</span><span class="s">"Contour plot with NO interaction term"</span><span class="p">)</span>
<span class="c1"># This fictitious data forms a saddle (saddles do occur in practice!)</span>
<span class="c1"># Which side do you climb up? Top left, or bottom right? [answer: both!]</span>
<span class="n">P</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">y.fake</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">722</span><span class="p">,</span> <span class="m">715</span><span class="p">,</span> <span class="m">725</span><span class="p">,</span> <span class="m">740</span><span class="p">,</span> <span class="m">721</span><span class="p">)</span>
<span class="n">model.6</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y.fake</span> <span class="o">~</span> <span class="n">P</span><span class="o">*</span><span class="bp">T</span><span class="p">)</span>
<span class="nf">contourPlot</span><span class="p">(</span><span class="n">model.6</span><span class="p">,</span> <span class="s">"P"</span><span class="p">,</span> <span class="s">"T"</span><span class="p">,</span> <span class="n">main</span><span class="o">=</span><span class="s">"System with much stronger interaction"</span><span class="p">)</span>
<span class="c1"># Create the central composite design quadratic model</span>
<span class="c1"># Start with the factorial points: 11, 12, 13, 14</span>
<span class="n">P</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span> <span class="m">-1</span><span class="p">,</span> <span class="m">+1</span><span class="p">,</span> <span class="m">+1</span><span class="p">)</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="m">715</span><span class="p">,</span> <span class="m">713</span><span class="p">,</span> <span class="m">733</span><span class="p">,</span> <span class="m">725</span><span class="p">)</span>
<span class="c1"># Now append the 4 center points: 10, 16, 17, 22</span>
<span class="n">P</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="n">P</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">)</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="bp">T</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">)</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="m">732</span><span class="p">,</span> <span class="m">733</span><span class="p">,</span> <span class="m">737</span><span class="p">,</span> <span class="m">735</span><span class="p">)</span>
<span class="c1"># Then add the star (axial) points: 18, 19, 20, 21</span>
<span class="n">P.exact</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="n">P</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1.41</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">+1.41</span><span class="p">)</span>
<span class="bp">T</span><span class="n">.exact</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="bp">T</span><span class="p">,</span> <span class="m">+1.41</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">-1.41</span><span class="p">,</span> <span class="m">0</span><span class="p">)</span>
<span class="c1"># Now, the true location of the axial points isn't quite at +/- 1.41</span>
<span class="c1"># Let's be a little more precise (using the idea of "botched designs")</span>
<span class="n">P.star.low</span> <span class="o"><-</span> <span class="p">(</span><span class="m">1.38</span> <span class="o">-</span> <span class="m">1.63</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="m">0.5</span><span class="o">*</span><span class="m">0.36</span><span class="p">)</span>
<span class="n">P.star.high</span> <span class="o"><-</span> <span class="p">(</span><span class="m">1.88</span> <span class="o">-</span> <span class="m">1.63</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="m">0.5</span><span class="o">*</span><span class="m">0.36</span><span class="p">)</span>
<span class="bp">T</span><span class="n">.star.low</span> <span class="o"><-</span> <span class="p">(</span><span class="m">335</span> <span class="o">-</span> <span class="m">339</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="m">0.5</span><span class="o">*</span><span class="m">6</span><span class="p">)</span>
<span class="bp">T</span><span class="n">.star.high</span> <span class="o"><-</span> <span class="p">(</span><span class="m">343</span> <span class="o">-</span> <span class="m">339</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="m">0.5</span><span class="o">*</span><span class="m">6</span><span class="p">)</span>
<span class="n">P</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="n">P</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="n">P.star.low</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="n">P.star.high</span><span class="p">)</span>
<span class="bp">T</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="bp">T</span><span class="p">,</span> <span class="bp">T</span><span class="n">.star.high</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="bp">T</span><span class="n">.star.low</span><span class="p">,</span> <span class="m">0</span><span class="p">)</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">c</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="m">738</span><span class="p">,</span> <span class="m">717</span><span class="p">,</span> <span class="m">721</span><span class="p">,</span> <span class="m">710</span><span class="p">)</span>
<span class="c1"># Go fit the model with quadratic terms</span>
<span class="n">model.7</span> <span class="o"><-</span> <span class="nf">lm</span><span class="p">(</span><span class="n">y</span> <span class="o">~</span> <span class="n">P</span><span class="o">*</span><span class="bp">T</span> <span class="o">+</span> <span class="nf">I</span><span class="p">(</span><span class="n">P</span><span class="o">^</span><span class="m">2</span><span class="p">)</span> <span class="o">+</span> <span class="nf">I</span><span class="p">(</span><span class="bp">T</span><span class="o">^</span><span class="m">2</span><span class="p">))</span>
<span class="nf">summary</span><span class="p">(</span><span class="n">model.7</span><span class="p">)</span>
<span class="nf">contourPlot</span><span class="p">(</span><span class="n">model.7</span><span class="p">,</span> <span class="s">"P"</span><span class="p">,</span> <span class="s">"T"</span><span class="p">)</span>
<span class="c1"># Predict value of point 15 (actual value was $735)</span>
<span class="nf">predict</span><span class="p">(</span><span class="n">model.7</span><span class="p">,</span> <span class="nf">data.frame</span><span class="p">(</span><span class="n">P</span><span class="o">=</span><span class="m">-2</span><span class="o">/</span><span class="m">3</span><span class="p">,</span> <span class="bp">T</span><span class="o">=</span><span class="m">2</span><span class="p">))</span>
<span class="c1"># Predict the value of optimum</span>
<span class="nf">predict</span><span class="p">(</span><span class="n">model.7</span><span class="p">,</span> <span class="nf">data.frame</span><span class="p">(</span><span class="n">P</span><span class="o">=</span><span class="m">-0.22</span><span class="p">,</span> <span class="bp">T</span><span class="o">=</span><span class="m">+1.46</span><span class="p">))</span>
</code></pre></div>
<p>Рекомендую разбить данный код на блоки и исполнить его (можете воспользоваться <a href="https://yint.org/static/stats-mooc/module5.R">онлайн версией R</a>).</p>
<p>Как уже говорилось, мы ввели дополнительную возможность - отрисовку контурных линий:</p>
<div class="highlight"><pre><span></span><code><span class="nf">library</span><span class="p">(</span><span class="n">pid</span><span class="p">)</span>
<span class="nf">contourPlot</span><span class="p">(</span><span class="n">mod.base.1</span><span class="p">,</span> <span class="s">"P"</span><span class="p">,</span> <span class="s">"T"</span><span class="p">)</span>
</code></pre></div>
<p>Полученные график с контурными линиями поможет нам <strong>выбрать направления для скорейшей оптимизации - перпендикулярно контурным линиям</strong>. Вот пример того, как выглядят реальные линии в нашем случае и построенные нами (рис. 20, редкий пример того, когда мы можем сравнить истинные и предполагаемые контурные линии - в реальной практике такого не встретишь).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_20.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 20. Метод построения поверхности отклика для максимизации прибыли производства. Сравнение контурных линий.
</i>
</td>
</tr>
</table>
</div>
<p>Итак, направление действительно выбрано верно. <strong>Всегда важно проверять экспериментальные значения на соответствие построенной модели</strong>. В крайнем случае, важно проверить хотя бы центральную точку. В идеале каждый из экспериментов следует повторить несколько раз, чтобы иметь представление об уровне шумов и повторяемости (но подробнее об этом в 3 главе).</p>
<blockquote>
<p><strong>Задание</strong>. Посчитайте относительные и абсолютные отклонения между построенной модели и экспериментальными данными.</p>
</blockquote>
<p><strong>После выбора направления нужно определиться с шагом для обоих факторов</strong>. Согласно нашей модели мы имеем уравнение:</p>
<div class="math">$$
y = b_0 + b_P x_P + b_T x_T + b_{PT} x_P x_T \\
y = 390 + 134 x_P + 55 x_T + (-3.5) x_P x_T
$$</div>
<p>Это значит, что при увеличении фактора P на 1 закодированную величину, профит увеличится на 134 единицы. В случае второго фактор - на 55 единиц. Тогда при одинаковом количестве шагов для факторов:</p>
<div class="math">$$
\frac{b_T}{\Delta x_T} = \frac{b_P}{\Delta x_P} \\
\frac{\Delta x_P}{\Delta x_T} = \frac{b_P}{b_T}
$$</div>
<p>Таким образом в общем случае, <strong>для нахождения оптимума необходимо</strong>:</p>
<ol>
<li>Выбрать шаг для одного кодированного фактора (<span class="math">\(\Delta x_T = 1\)</span>).</li>
<li>Найти соответствующее изменение для другого фактора (<span class="math">\(\Delta x_P = \frac{b_P}{b_T} \cdot \Delta x_T = \frac{134}{55} \cdot 1 = 2.44\)</span>).</li>
<li>Преобразовать закодированные значения в реальные:</li>
</ol>
<div class="math">$$
\Delta P = \Delta x_P \cdot \frac{1}{2}(0.50) = 0.61 \$ \\
\Delta T = \Delta x_T \cdot \frac{1}{2}(10) = 5 \frac{parts}{hour}
$$</div>
<ol start="4">
<li>Сделать шаги и установить место проведения следующего эксперимента:</li>
</ol>
<div class="math">$$
P^{(5)} = P^{(0)} + \Delta P = 0.75 + 0.61 = 1.36 \\
T^{(5)} = T^{(0)} + \Delta T = 325 +5 = 330
$$</div>
<ol start="5">
<li>Посчитать предполагаемое значение согласно модели:</li>
</ol>
<div class="math">$$
\hat{y} = 390 + 134x_P + 55x_T - 3.5 x_P x_T \\
\hat{y}^{(5)} = 390 + 134 \cdot 2.44 + 55 \cdot 1.0 - 3.5 \cdot 2.44 \cdot 1.0 = 765
$$</div>
<p>Однако при проведении эксперимента получилось значение в 669 долларов/час. <strong>Это сильное расхождение по обоим факторам (посчитайте, какое). Поэтому нужно спланировать новый факторный эксперимент в этой области</strong>, чтобы скорректировать направление. Есть несколько способов сделать это, основываясь на том где будет находиться полученная точка (эксперимент № 5).</p>
<p>Но <strong>наиболее экономичным является выбор, представленный на рис. 21</strong>.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_21.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 21. Метод построения поверхности отклика для максимизации прибыли производства. Следующий факторный эксперимент
</i>
</td>
</tr>
</table>
</div>
<p>Предлагаю вам самим подумать почему и продолжить логику рассуждения… Вы можете найти <a href="https://yint.org/run-expt">модель</a> для данного эксперимента в интернете и реализовать любые свои задумки.</p>
<p>Итак, повторив рассуждения мы пришли к 9 эксперименту и выяснили, что расхождение с моделью составило: <span class="math">\(\Delta = 732 - 717 = 15\)</span> \$ и это вполне приемлемый результат (строго говоря для этого нам нужно иметь представление о допустимой погрешности, но пока можем действовать интуитивно).</p>
<p>Таким образом, мы можем продолжить путь в выбранном направлении. Выберем шаг для 10 эксперимента, используя нашу <strong>последовательность действий</strong>.</p>
<ol>
<li>Выбрать шаг для одного кодированного фактора (<span class="math">\(\Delta x_P = 2.5\)</span>).</li>
<li>Найти соответствующее изменение для другого фактора (<span class="math">\(\Delta x_T = \frac{b_T}{b_P} \cdot \Delta x_P = \frac{22.5}{47} \cdot 2.5 = 1.2\)</span>).</li>
<li>Преобразовать закодированные значения в реальные:</li>
</ol>
<div class="math">$$
\Delta P = \Delta x_P \cdot \frac{1}{2}(0.50) = 0.45 \$ \\
\Delta T = \Delta x_T \cdot \frac{1}{2}(10) \approx 5 \frac{parts}{hour}
$$</div>
<ol start="4">
<li>Сделать шаги и установить место проведения следующего эксперимента:</li>
</ol>
<div class="math">$$
P^{(10)} = 1.63 \\
T^{(10)} = 339
$$</div>
<ol start="5">
<li>Посчитать предполагаемое значение согласно модели:</li>
</ol>
<div class="math">$$
\hat{y} = 645 + 47x_P + 22.5 x_T - 2 x_P x_T \\
\hat{y}^{(5)} \approx 785
$$</div>
<p>Сравним с <a href="https://yint.org/run-expt">экспериментом</a> (732). Это уже значимо, время перестроить модель.</p>
<p>Выберем 10 эксперимент в качестве новой базовой точки (0, 0). Диапазон для T возьмем немного меньше чем в предыдущем случае, поскольку:</p>
<ol>
<li>мы приближаемся к оптимуму и важно не перейти через него;</li>
<li>предыдущие эксперименты говорят от уменьшении размаха, что также говорит о приближении к оптимуму.</li>
</ol>
<p>Для фактора <em>P</em> оставим диапазон прежним, он не так велик, если сравнивать с общим размахом.</p>
<p>Отмечу, что выбор точного диапазона не так важен на практике, пока от позволяет приближаться к оптимуму. Это связано со статистической природой результатов эксперимента и тем, что в конце-концов, оптимум у нас один.</p>
<p>В результате новых экспериментов получим следующую картину (рис. 22).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_22.png" alt="Example" width="900px"/>
</td>
<td>
<i>
Рис. 22. Метод построения поверхности отклика для максимизации прибыли производства. Следующий факторный эксперимент.
</i>
</td>
</tr>
</table>
</div>
<p>Не забывайте - <strong>все эксперименты в рамках факторного эксперимента проводятся в случайном порядке!</strong></p>
<p>Если вы построите кубическую диаграмму с контурными линиями в RStudio, то заметите, что характер контурных линий изменился. Это явный признак изменения во влиянии признаков на отклик - сильно проявляется взаимодействие.</p>
<p>При этом вместо 11 эксперимента, мы могли бы использовать значение 9-ого, но с поправкой на кодировку (в данном случае не -1, а -2/3). Это называется <strong>планирование Боше (Botched design)</strong>.</p>
<blockquote>
<p><strong>Задача.</strong> Используйте в коде расчет для полнофакторного эксперимента с 9 экспериментов вместо 11. Проверьте, получили ли вы ту же модель (не забудьте исправить значение кодировок)? Как Вы думаете, почему?</p>
</blockquote>
<p>Кроме того, сама система координат часто имеет ограничения из-за которых приходится проводить несимметричные факторные эксперименты (поскольку оптимум часто находится на границе ограничений, рис. 23).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_23.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 23. Пример ограничений в системе, обеспечивающих ее несимметричность.
</i>
</td>
</tr>
</table>
</div>
<p>Но вернемся к нашему эксперименту. Взаимодействие факторов меняет форму контурных линий, но направление нам известно. Давайте сделаем следующий шаг из предположения, что изолинии линейны (эксперимент № 15, рис. 24).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_24.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 24. Метод построения поверхности отклика для максимизации прибыли производства. Следующий факторный эксперимент в предположении, что контурные линии линейны.
</i>
</td>
</tr>
</table>
</div>
<p>После проведения наших расчетов и получения экспериментальных данных разница составит: <span class="math">\(\Delta = 742 - 735\)</span>. Это больше нашего порога в 7 \$. Предположение игнорировать нелинейность контурных линий провалилось. Нам нужна другая стратегия.</p>
<p>Отметим, что <strong>приближаясь к оптимуму контурные линии вероятно будут изменяться и могут иметь разный вид в зависимости от силы взаимодействия (рис. 25)</strong>.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_25.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 25. Тип контурных линий в зависимости от взаимодействия факторов.
</i>
</td>
</tr>
</table>
</div>
<p><strong>Другим критерием приближения к оптимуму является уменьшение спреда отклика</strong> (<span class="math">\( \approx \text{размах}\)</span>) между кодированными переменными в факторных экспериментах, даже если шаг выбирается адекватным (рис. 26).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_26.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 26. Зависимость спреда от приближения к оптимуму.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Примечание.</strong> Строго говоря, в случае сперда важно понимание статистики и уровня шумов в нашей системе. Мы должны быть уверены, что разница в спреде обусловлена не шумом.</p>
<p>Для установления уровня шумов в системе необходимо несколько раз повторить один и тот же эксперимент. Допустим мы повторили 10 эксперимент 3 раза и получили значения в 732, 733, 737, что даст нам спред в 5 $. Что меньше, чем 20 $. Это говорит о том, что мы все еще видим сигнал, а не шум.</p>
</blockquote>
<p><strong>Третьим параметром приближения к оптимуму является величина расхождение модели с экспериментом</strong>. Если изменения значимы - мы все-еще можем улучшать модель и двигаться к оптимуму.</p>
<p><strong>Четвертым фактором, указывающим на близость к оптимуму является проявление невозможности аппроксимации линейной моделью “lack of fit”</strong>. Оптимум подразумевает точку перегиба.</p>
<p>Например, сравним различия для наших 3 факторных экспериментов.</p>
<ol>
<li>Модель: <span class="math">\(y = 390 + 134 x_P + 55 x_T - 3.5 x_P x_T\)</span>. Разница в базовой точке составила <span class="math">\(\Delta = 407 - 390 = 17\)</span>. В сравнении с коэффициентами модели довольно не много (что говорит о маленькой степени “lack of fit”).</li>
<li>Модель: <span class="math">\(y = 645 + 47 x_P + 22.5 x_T - 2.0 x_P x_T\)</span>. Разница в базовой точке составила <span class="math">\(\Delta = 657 - 645 = 12\)</span>. Меньше, но уже ближе к коэффициентам модели (что говорит об усилении “lack of fit”).</li>
<li>Модель: <span class="math">\(y = 724 - 2.5 x_P + 7.5 x_T - 1.5 x_P x_T\)</span>. Разница в базовой точке составила <span class="math">\(\Delta = 734 - 724 = 10\)</span>. Уже сравнимо с коэффициентами модели, при этом уровень шума в 5 \$ говорит о том, что это все еще сигнал, хоть и весьма зашумленный (сильный эффект “lack of fit”).</li>
</ol>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_27.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 27. Демонстрация эффекта "lack of fit". На последнем полнофакторном эксперименте показаны 3 дополнительных эксперимента для определения уровня шумов.
</i>
</td>
</tr>
</table>
</div>
<p>В случае нашего эксперимента все говорит о том, что пора <strong>сделать модель нелинейной</strong> (добавить квадратный член). Для этого есть 2 варианта:</p>
<ol>
<li>Добавить тест на стороне куба (face centered design, FCD) - применяется, когда мы не можем покинуть область куба.</li>
<li>Добавить тест за рамками куб (the “original” central composite design, CCD) - предпочтительней со статистической точки зрения.</li>
</ol>
<p>Мы же с вами ограничимся <strong>общими правилами</strong>:</p>
<ol>
<li>Провести последний полнофакторный эксперимент.</li>
<li>Провести дополнительный тест на расстоянии <span class="math">\(\alpha = (2^k)^{0.25}\)</span>, где k - количество факторов.</li>
<li>Провести несколько измерений базовой точки (максимально варьируя условия, включая время начала анализа).</li>
</ol>
<p>С точки зрения 2 факторов в нашем случае получится <strong>5 дополнительных экспериментов “вокруг” полнофакторного</strong>, что позволит нам построить точную нелинейную модель (рис. 28).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_28.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 28. Построение нелинейной модели.
</i>
</td>
</tr>
</table>
</div>
<p>Теперь построим модель на основании полученных данных (время кода!) и рассчитаем отклонение. Предлагаю проделать это самостоятельно.</p>
<p><strong>В результате 12 тестов: (4 факторных + 4 базовых точек + 4 дополнительных точек)</strong>.</p>
<ol>
<li>Модель: <span class="math">\(y = 734.23 - 2.5 x_P + 6.97 x_T - 10.6 x_P^2 - 2.5 x_T^2 - 1.5 x_P x_T\)</span></li>
<li>Мы получили хорошее предсказание в центре, которое говорит о малом эффекте “lack of fit”: <span class="math">\(\Delta = 734.25 - 734 = 0.25\)</span>.</li>
<li>Мы получили хорошие предсказания для прочих точек.</li>
</ol>
<p>Теперь представим полученные результаты в виде контурных линий и убедимся, что мы действительно рядом с оптимумом.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_29.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 29. Построение нелинейной модели. Контурные линии оптимума (рассчитанные и реальные).
</i>
</td>
</tr>
</table>
</div>
<p><strong>Эксперимент № 18 находится практически в оптимуме и на этом можно закончить оптимизацию</strong>. Но если бы мы не попали в оптимум - надо было провести дополнительные эксперименты по построению нелинейной модели в предполагаемом центре оптимума.</p>
<blockquote>
<p><strong>Примечание.</strong> Оптимум может меняться со временем (это зависит от исследуемой системы). Поэтому есть специальные системы, которые отслеживают такие передвижения. Если вам интересно - почитайте про “Evolutionary Operation (EVOP)”.</p>
</blockquote>
<p>Мы подошли к концу основной части данной статьи. Надеюсь мы узнали как планировать и проводить эксперименты с целью изучения и оптимизации системы. В следующих частях нас ждет более детальное знакомство со статистикой и линейной регрессией - основными инструментами анализа данных и построения моделей.</p>
<h3 id="2-10">2.10 Заключение</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>В рамках настоящей главы мы познакомились с экспериментами, способами их планирования, проведения, построения моделей, анализа результатов и проведения оптимизации.</p>
<p>Подведем небольшое формальное заключение пройденного материала.</p>
<p>Существуют следующие <strong>задачи эксперимента</strong>:</p>
<ol>
<li>
<p><strong>Сканирование и изучение системы (измерительный процесс)</strong>. Оценка значимых факторов изучаемого объекта, а также проверка некоторых гипотез, касающихся этих характеристик (например, влияет ли добавка некоторого компонента на прочность бетона и т.п.).</p>
</li>
<li>
<p><strong>Задача регрессионного анализа</strong>. Установление функции отклика, т.е. статистически достоверной зависимости, связывающей отклик с факторами (построение математической модели изучаемого объекта). Это процесс разработки методики для анализа.</p>
</li>
<li>
<p><strong>Корреляционный анализ</strong>. Определение степени взаимной статистической связи двух величин. Например, это оценка линейности градуировочного графика и т.д..</p>
</li>
<li>
<p><strong>Экстремальный (оптимизационный) эксперимент</strong>. Нахождение оптимальных условий протекания процесса, т.е. определение значений факторов, при которых отклик является максимальным (или минимальным).</p>
</li>
</ol>
<p><strong>Основные стадии эксперимента</strong> на примере оптимизации системы (включает в себя большее количество стадий).</p>
<ol>
<li>Постановка задачи (определение цели и задач эксперимента, оценка допустимых затрат времени и средств, установление типа задачи).
</li>
<li>
<p>Мозговой штурм задачи: оценка измеряемых и мешающих факторов, выбор переменной отклика системы (изучение литературы, опрос специалистов и т.п.).</p>
</li>
<li>
<p>Выбор способа решения и стратегии его реализации (типа факторного эксперимента). Корректирование сроков и бюджета.</p>
</li>
<li>
<p>Проведение сканирующего эксперимента при стандартных условиях эксплуатации системы. Обеспечение блокировки мешающих факторов. Оценка значимых и не значимых для модели факторов. Критическая оценка методики проведения экспериментов и полученной модели.</p>
</li>
<li>
<p>Реализация выбранного способа решения задачи (факторы, граничные условия, отклик и тип оптимизации, объем выборки, кратности повторения опытов и т. д.).</p>
</li>
<li>
<p>Проведение оптимизации методом оптимизационной поверхности. Анализ и интерпретация результатов, их представление для менеджеров и руководства (получение оценок интересующих экспериментатора величин и определение степени достоверности этих оценок, выражение результатов в конкретных и необходимых терминах).</p>
</li>
</ol>
<p><strong>Требования к фактору</strong>.</p>
<ol>
<li>
<p><strong>Управляемость</strong> - возможность придавать фактору любой уровень в области его определения и поддерживать этот уровень постоянным в течение всего эксперимента.</p>
</li>
<li>
<p><strong>Однозначность</strong> - фактор не должен быть функцией других факторов (т.е. должен быть линейно независим).</p>
</li>
<li>
<p><strong>Должен быть закодирован</strong> для правильной интерпретации полученной линейной модели. Выбранные для эксперимента количественные или качественные состояния фактора называются <strong>уровнями фактора</strong> (-1 и +1 в наших случаях). От числа уровней зависят объем эксперимента и эффективность оптимизации.</p>
</li>
</ol>
<p><strong>Зависимость числа экспериментов от числа факторов</strong> и количества их уровней имеет вид <span class="math">\(N = p^k\)</span>, где <span class="math">\(N\)</span> – число опытов; <span class="math">\(p\)</span> – число уровней факторов; <span class="math">\(k\)</span> – число факторов.</p>
<p>Пространство, в котором строится поверхность отклика, называется <strong>факторным пространством</strong>. Оно задается координатными осями, по которым откладываются значения факторов и параметров оптимизации.</p>
<p><strong>Истинным значением</strong> физической величины называется значение, которое идеальным образом отражало бы свойство объекта. Определить экспериментально его невозможно вследствие неизбежных погрешностей измерения.</p>
<p><strong>Действительным значением</strong> физической величины называется значение, найденное экспериментальным путем и максимально близкое к истинному значению.</p>
<p><strong>Измерением</strong> называется процесс нахождения значения физической величины опытным путем с помощью специальных технических средств.</p>
<p><strong>Принцип измерений</strong> – совокупность физических явлений, на которых основано конкретное измерение.</p>
<p><strong>Средство измерений</strong> – это техническое средство, предназначенное для измерений. Как правило с утвержденными метрологическими характеристиками (т.е. с данными, позволяющими оценить погрешность измерения).</p>
<p><strong>Метод измерений</strong> – совокупность принципов использования определенного средства измерения.</p>
<p><strong>Методика</strong> - конкретная последовательность действий (совокупность приемов) для измерения с использованием конкретного метода.</p>
<p><strong>Погрешностью</strong> называется отклонение результата от истинного значения измеряемой величины. Т.к. истинное значение измеряемой величины неизвестно, то опираются на статистику. (при количественной оценке погрешности пользуются действительным значением физической величины).</p>
<h3 id="2-11">2.11 Вопросы по разделу</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<ol>
<li>Ваша компания изучает влияние рекламны сообщений для своего мобильного приложения (например, рассылка SMS, отображение рекламных сообщений в приложении). Вы должны возглавить это исследование. Выберите все категориальные переменные.<ul>
<li>Использование 120 или 140 знаков в сообщении.</li>
<li>Отображение рекламы утром или вечером.</li>
<li>Использовать синий фон с белым текстом или черный фон с желтым текстом.</li>
<li>Отображение рекламы только людям в городской области или людям в загородной области.</li>
</ul>
</li>
<li>
<p>В клиническом исследовании больных раком для выявления необходимой концентрации лекарства для химиотерапии исследователи варьируют:</p>
<ul>
<li>тип лекарства: А или В;</li>
<li>недельная доза лекарства: 5 единиц/кг или 10 единиц/кг;</li>
<li>частота применения: один раз в неделю или 3 раза в неделю.</li>
</ul>
<p>Выберите все верные ответы.</p>
<ul>
<li>Тип лекарства - категориальный признак.</li>
<li>Исследователи могли бы измерять количество пациентов, испытывающих побочные эффекты (например, тошноту). Это было бы дополнительным фактором.</li>
<li>Недельная доза лекарства - количественная переменная.</li>
<li>Если бы исследователи варьировали дозу дополнительной терапии, это также было бы фактором.</li>
<li>Недельная доза - категориальный фактор.</li>
</ul>
</li>
<li>
<p>Бегун на короткие дистанции тренируется на трассе 200 м. Тренировки проходят регулярно: иногда утром, иногда вечером. Спортсменка решает варьировать разный тип обуви: с шипами и без. При беге она также варьирует положения рук: высокое или низкое. Выберите правильные варианты ответов:</p>
<ul>
<li>Спортсменка должна провести 6 (2+2+2) эксперимента для полнофакторного исследования.</li>
<li>В ее исследовании используется 3 фактора.</li>
<li>Ботинки с шипами могут быть отрицательным значением фактора, а без шипов - положительным.</li>
<li>Измеряемым откликом системы будет тип обуви для бега.</li>
</ul>
</li>
<li>
<p>При проведении полнофакторного эксперимента с 2 факторами и 2 уровнями варьирования была построена модель: <span class="math">\(\hat{y}=7+3x_A−4x_B+2x_Ax_B\)</span>. Факторами являются:</p>
<ul>
<li>А - поставщик сырья (низкий уровень - BASF, высокий уровень - DOW);</li>
<li>B - температура плавления (низкий уровень <span class="math">\(320^o C\)</span>, высокий: <span class="math">\(340^o C\)</span>).</li>
</ul>
<p>Откликом системы является шероховатость поверхности произведенного пластика, который хотят минимизировать. Какова будет предсказанная моделью шероховатость для сырья от BASF при <span class="math">\(330^o\)</span>?</p>
</li>
<li>
<p>Укажите сколько значащих цифр при следующей записи чисел: 3700, 0.0708, 2.540, 4.0, 0.80, 290.</p>
</li>
<li>
<p>Записать:</p>
<ul>
<li>результат сложения 2.3 и 1.26;</li>
<li>результат сложения 507 и 1.2 в научной форме;</li>
<li>результат умножения 2.65 на 1.9;</li>
<li>результат возведения в степень <span class="math">\(35.3^2\)</span>.</li>
</ul>
</li>
<li>
<p>Если экспериментально требуется определить сколько процентов вещества содержит раствор: 13 или 12 %, с какой точностью (в значащих цифрах) надо взвешивать?</p>
</li>
<li>
<p>Приведите результат вычислений с учетом значащих цифр. Для какого варианта Вы бы наименее доверяли точности результата (с учетом того, что последняя значащая цифра любого числа в формуле содержит его абсолютную величину)?</p>
<ul>
<li><span class="math">\(\frac{\frac{90.7 + 100.5}{62.42} + 5.04}{10.0}\\\)</span></li>
<li><span class="math">\(\frac{9.7 + 100.5}{100.42} \cdot 5.4\\\)</span></li>
<li><span class="math">\((115 + 0.059) \cdot 0.05\)</span></li>
</ul>
</li>
</ol>
<h2 id="3">3. Сравнительные эксперименты. Статистическая практика</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Мы рассмотрели наиболее важную часть настоящего курса - планирование эксперимента и анализ его результатов. Следующие два раздела будут посвящены более узкоспециализированным темам, которые являются областью статистики (раздел математики). Приведенные далее рассуждения и примеры будут нужны <strong>для понимания природы данных и степени достоверности полученных результатов</strong>. Без понимания основ статистического анализа невозможно работать в аналитической лаборатории и анализировать любые численные результаты. Эта и следующая части настоящей работы относятся скорее к области аналитики (с отсылками к аналитической химии) и в большей мере применимы для сравнения полученных результатов и оценки точности построенных моделей.</p>
<p>В настоящей главе “Сравнительные эксперименты. Статистическая практика” мы рассмотрим что же такое статистика, полученные нами результаты и как мы действительно можем сравнить их друг с другом.</p>
<p>Если говорить кратко, <strong>статистика</strong> - это наука о работе с данными (как числовыми, так и категориальными). Она обладает обширным математическим аппаратом и позволяет реально взглянуть на окружающие нас вещи, понять, что все в окружающем нас мире относительно и обладает <strong>измеримой достоверностью</strong>. Осознать это и принять статистику я считаю наиболее важной задачей любого ученого. <strong>Вы не сможете ее избежать</strong>).</p>
<p>По своей сути, все окружающие нас явления не являются постоянными и абсолютными. Даже проводя измерение одной и той же величины в одинаковых условиях мы получим немного отличающиеся значения. Шанс, получить то или иное значение называется <strong>вероятностью</strong>.</p>
<p>Понятие вероятности является ключевым понятием вообще для всего, что нас окружает. Особенно это значимо для науки и экспериментов. <strong>Любое явление и любой результат обладают вероятностью - возможностью возникновения того или иного события</strong>. И эта вероятность - измерима.</p>
<p>Проводя исследования, рассчитывая результат эксперимента или просто планируя свою деятельность, мы всегда работаем с вероятностью. Неважно насколько мы уверены в своем результате/поступке - он будет обладать вероятностными характеристиками. И <strong>одной из основных задач исследователя является установление вероятности с которой он получил те или иные результаты</strong>, расчет вероятности того, что эти результаты значимо или не значимо отличаются от предыдущих и т.д..</p>
<p>Все в окружающем нас мире работает по статистическим законам и представляет из себя вероятностные величины. Так давайте же познакомимся с реальным миром!</p>
<blockquote>
<p><strong>Примечание.</strong> Данный курс является вводным и многие понятия в нем сформулированы и доказаны “не строго” (с математической точки зрения), а так, чтобы вы могли их легче запомнить и использовать в повседневных научных исследованиях. Но если рассказанное вам понравится и будет полезным, прошу исследовать приведенную в конце курса литературу.</p>
</blockquote>
<h3 id="3-1">3.1 Некоторые вводные определения</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Начнем мы наше знакомство с <strong>основных понятий статистики: генеральная совокупность (ГС) и выборка</strong>. Именно они являются основой дальнейшего изучения.</p>
<p><strong>Генеральная совокупность</strong> - множество всех объектом (или значений измеряемых величин), в рамках которых мы хотели бы сделать тот или иной вывод (сравнить их с другой генеральной совокупностью, рассчитать истинное значение и т.д.). В нашем случае, это, например, все возможное количество измерений отклика системы при фиксированном значении факторов.</p>
<p>Для определения ГС хорошим подходом является задать себе вопрос: <strong>“на какое множество объектов вы бы хотели обобщить ваши результаты исследования?”</strong> - это и будет вашей генеральной совокупностью.</p>
<p>И все бы хорошо, но как правило, объем такого множества крайне большой и нельзя провести измерение/исследование всех объектов в нем. На этот случай надо специальным образом “взять” из ГС определенное количество объектов - <strong>выборку</strong>.</p>
<p>При таком подходе, мы можем <strong>исследовать выборку и обобщить наши результаты на генеральную совокупность (с определенной достоверностью)</strong>.</p>
<p>Ключевым условием выборки является ее <strong>репрезентативность (представительность)</strong> - она должна быть как можно более точной моделью генеральной совокупности (отражала ее свойства). В основном, репрезентативность зависит от количества объектов в выборке и от способа получения данных объектов (помните, мы всегда готовили, что нужно рандомизировать проведение экспериментов? Только в этом случае полученные измерения, формирующие нашу выборку, будут представлять ГС). Для обеспечения репрезентативности <strong>существует несколько подходов</strong>:</p>
<ol>
<li>Простая случайная выборка (simple random sample) - элементы ГС выбраны случайным образом.</li>
<li>Стратифицированная выборка (stratified sample) - элементы выборки берутся случайным образом из областей генеральной совокупности (страт). Сами области соответствуют каким-либо свойствам выборки (например пол участника, поставщик реагента и т.д.). Такой подход позволяет сохранить точное количественное распределение объектов с разными свойствами в ГС.</li>
<li>Групповая выборка (cluster sample). ГС делится на кластеры, которые по свойствам похожи между собой. Часто используется для экономии ресурсов и времени при формировании выборок (значения можно отбирать случайным образом не из всей ГС, а только из некоторых кластеров).</li>
</ol>
<blockquote>
<p><strong>Примечание.</strong> В данном разделе мы принимаем тот факт, что выборка всегда отбирается из генеральной совокупности, но это не значит что мы всегда знаем какая это ГС. Например, если мы проведем 5 измерений одной и той же величины в нашем эксперименте, то мы получим выборку из ГС всех возможных измерений при наших условиях. Все условия для формирования выборок остаются действующими. Но в случае, когда мы не знаем ничего о ГС, будет работать только 1 подход (случайный выбор). Это как раз та причина, по которой эксперименты должны проводиться в случайном порядке и варьирование любых параметров должно также быть максимально случайным (спланированным, но случайным).</p>
</blockquote>
<p>Но из чего в принципе может состоять выборка и генеральная совокупность, что такое <strong>объекты</strong>? С точки зрения статистики это <strong>просто набор свойств</strong> (скорее даже просто набор чисел). Т.е. говоря объект, мы подразумеваем то или иное свойство (или совокупность свойств). Синонимом свойства является <strong>фактор</strong>. Проблема в том, что не все эти свойства мы можем измерить и учесть (отсюда и появляется погрешность, зачастую мы даже не догадываемся о каком-либо влиянии). Но <strong>измеримые свойства бывают 2 видов</strong>.</p>
<ol>
<li><strong>Количественные (numeric)</strong> - которые можем измерить в численном виде и сравнит друг с другом. Они в свою очередь делятся на:</li>
</ol>
<ul>
<li>непрерывные (могут принимать любое значение в промежутке, например рост);</li>
<li>дискретные (принимают только определенные значения, например число детей в семье).</li>
</ul>
<ol start="2">
<li><strong>Качественные (категориальные, номинативные, categorical)</strong> - это те или иные свойства, которые на попали в 1-ую категорию (например цвет, пол, место жительство и т.д.). Обычно используются для разделения на группы и кодируются цифрами (но за этими цифрами нет физического смысла, нельзя применить математические операции).</li>
</ol>
<blockquote>
<p><strong>Примечание.</strong> Иногда выделяют еще и 3 группу - ранговые (которые мы не можем измерить, но можем сравнить друг с другом, например, финалисты марафона). В основном ранги используются для расчета некоторых статистических параметров, а в практике работы с данными и интерпретации результатов используются крайне редко.</p>
<p>Стоит держать в голове, что из количественных переменных можно получить ранговые или категориальные (которые потом использовать, например, как качественные переменные для разбиения выборки на группы).</p>
<p><strong>Задача.</strong> Предложите формулу для перевода количественной переменной “рост испытуемого” в ранговую и в категориальную.</p>
</blockquote>
<p>С основным понятиями мы познакомились. Самое время перейти непосредственно к статистике и ее определениям.</p>
<h3 id="3-2">3.2 Меры представления значений выборки или генеральной совокупности</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>За этим сложным термином скрывается <strong>всего лишь способ представления информации о выборке в виде одного числа</strong>. Именно этим занимается так называемая <strong>“описательная” статистика</strong>. На самом деле таких числе несколько, но благодаря им, мы можем получить представление обо всех данных в выборке и более того, в ГС.</p>
<p>Допустим, мы определились с нашим экспериментом, выбрали генеральную совокупность, провели эксперимент несколько раз и подготовили выборку. И что теперь?</p>
<p><strong>Самое первое, что имеет смысл сделать - построить распределение измеренных величин в зависимости от объекта выборки - гистограмму</strong>. Визуализация - ключевая стадия понимания любых данных. Вспомните, мы строили графики Пито - тоже гистограмму, чтобы наглядно оценить влияние факторов на результат. Здесь примерно тоже самое, но строим мы <strong>гистограмму частот</strong> - как часто встречается тот или иной признак для выборки (рис. 30).</p>
<div>
<table>
<tr>
<td style="width:30%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_30-1.png" alt="histograms" width="900px"/>
</td>
<td style="width:30%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_30-2.png" alt="histograms" width="900px"/>
</td>
<td>
<i>
Рис. 30. Гистограммы для количественных (a) и качественных (b) переменных.
</i>
</td>
</tr>
</table>
</div>
<p>Код для генерации данных:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Generate random normal disturbed numbers</span>
<span class="n">x</span> <span class="o"><-</span> <span class="m">50</span> <span class="o">+</span> <span class="nf">rnorm</span><span class="p">(</span><span class="m">200</span><span class="p">)</span>
<span class="c1"># Create Frequency Table Using the Random Numbers</span>
<span class="n">h</span> <span class="o"><-</span> <span class="nf">hist</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">breaks</span><span class="o">=</span><span class="m">20</span><span class="p">,</span> <span class="n">plot</span><span class="o">=</span><span class="kc">FALSE</span><span class="p">)</span>
<span class="c1"># Plot the Distribution, with its tails highlighted in a different color</span>
<span class="nf">plot</span><span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="n">col</span><span class="o">=</span><span class="m">3</span><span class="p">,</span> <span class="n">main</span><span class="o">=</span><span class="s">'test normal data'</span><span class="p">)</span>
<span class="c1"># Generate binary data</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">rbinom</span><span class="p">(</span><span class="n">n</span><span class="o">=</span><span class="m">200</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="m">1</span><span class="p">,</span> <span class="n">prob</span><span class="o">=</span><span class="m">0.3</span><span class="p">)</span>
<span class="n">h2</span> <span class="o"><-</span> <span class="nf">hist</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">breaks</span><span class="o">=</span><span class="m">2</span><span class="p">,</span> <span class="n">plot</span><span class="o">=</span><span class="kc">FALSE</span><span class="p">)</span>
<span class="nf">plot</span><span class="p">(</span><span class="n">h2</span><span class="p">,</span> <span class="n">col</span><span class="o">=</span><span class="m">4</span><span class="p">,</span> <span class="n">main</span><span class="o">=</span><span class="s">'test binary data'</span><span class="p">)</span>
</code></pre></div>
<p>И вот ведь удивительная штука, но <strong>если нет систематического воздействия на систему (т.е. все воздействия происходят случайным образом), то гистограмма численных свойств всегда будет иметь вид нормального распределения</strong> (как на рисунке 30 (a)). Это своего рода <strong>ключевое распределение для статистики</strong>. И важно всегда проверять действительно ли у вас получилось нормальное распределение, если хотите использовать стандартные способы описательной и сравнительной статистики.</p>
<blockquote>
<p><strong>Примечание.</strong> Как вы можете видеть, чем более сильно величина отклоняется от центра, тем реже встречаются такие значения. Или другими словами - тем меньше вероятность получить такое значение при проведении эксперимента.</p>
</blockquote>
<p>Стоит помнить, что на практике мы можем получить распределение любого вида - все зависит от эксперимента и типа данных (можете поискать в интернете различные примеры распределений). <strong>Описательная статистика как раз и занимается нахождением величин, которые могут описать тип распределения</strong>.</p>
<h4 id="3-2-1">3.2.1 Меры центральной тенденции</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Если мы посмотрим на приведенные распределения данных и заходим описать их одним числом, то вероятно, это будет число, при котором у нас наибольшее количество результатов (т.е. центр). Сделать мы это можем <strong>3 способами (меры центральной тенденции)</strong>.</p>
<ol>
<li><strong>Мода (mode)</strong> - значение измеряемого признака, которое встречается максимально часто.</li>
<li><strong>Медиана (median)</strong> - значение признака, которое делит упорядоченное множество данных пополам (или среднее двух центральных значений, если количество элементов четное).</li>
<li><strong>Среднее (mean - среднее арифметическое)</strong> - сумма всех значений признака, деленная на количество измерений. Для выборки используется обозначение с подчеркиванием сверху (<span class="math">\(\overline{x}\)</span>), а для генеральной совокупности - <span class="math">\(\mu\)</span>.</li>
</ol>
<p><strong>На основании этих величин можно представить себе вид распределения и сравнить его с другими распределениями</strong>. Таким образом, у нас появилось первое конкретное число, с которым мы можем работать (описывать наш эксперимент и полученные результаты, а также сравнить их с прочими результатами).</p>
<p>Более того, описанные способы расчета центральной тенденции позволяют нам представить вид распределения (рис. 31).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_31.png" alt="center tendency" width="900px"/>
</td>
<td>
<i>
Рис. 31. Пример распределений при разных значениях моды, медианы и среднего (взято с <a href="https://stats.stackexchange.com/">https://stats.stackexchange.com/</a>).
</i>
</td>
</tr>
</table>
</div>
<p>Выводы попробуйте сделать сами. Но основной вывод: “<strong>если распределение симметрично, унимодально и не имеет выбросов - можем использовать любой вид представления центра</strong>”. И обычно это среднее (поскольку нормальное распределение встречается чаще всего, а среднее удобнее для математических расчетов и более информативно). Но всегда нужно проверять вид распределения, прежде чем использовать среднее как меру степени выраженности некоторого значения, иначе это может привести нас к неверным выводам (вот <a href="http://www.ted.com/talks/hans_rosling_shows_the_best_stats_you_ve_ever_seen">тут</a> есть пару интересных примеров).</p>
<blockquote>
<p><strong>Задача.</strong> Подумайте, почему в среднем арифметическом значении содержится больше информации об объектах выборки. Для этого нужно вспомнить/найти/подумать над формулы расчета каждого из мер центральной тенденции.</p>
</blockquote>
<p>В нашем случае мы ограничимся рассмотрением только среднего значения. <strong>Основные свойства среднего</strong> приведены ниже.</p>
<ol>
<li><span class="math">\(M_{x+c} = M_x + c\)</span>. Если к каждому значению выборки прибавить константу, то среднее также увеличится на значение данной константы.</li>
<li><span class="math">\(M_{x \cdot c} = M_x \cdot c\)</span>. Аналогично 1-ому, но с умножением.</li>
<li><span class="math">\(\sum(x_i - M_x) = 0\)</span>. Сумма отклонений всех значений от среднего арифметического будет равна 0 (легко представить графически - т.к. среднее находиться посередине всех значений выборки).</li>
</ol>
<blockquote>
<p><strong>Задача.</strong> Нарисуйте, как будет меняться вид распределения для 1-ого и 2-ого случая.</p>
</blockquote>
<h4 id="3-2-2">3.2.2 Меры изменчивости</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Следующее, что приходит на ум при анализе распределения - <strong>ширина гистограммы или мера ее изменчивости</strong>. Вот некоторые примеры, как можно численно охарактеризовать данное свойство.</p>
<ol>
<li><strong>Размах (range)</strong> - расстояние между максимальным и минимальным значением. <span class="math">\(R = X_{max} - X_{min}\)</span>. Несмотря на простоту, эта мера опирается только на 2 значения из всей выборки, что не очень представительно и информативно. К выбросам он не устойчив.</li>
<li><strong>Дисперсия (variance) или средне квадратичное отклонение</strong> - насколько в среднем наши значения отклоняются от среднего по выборке. <span class="math">\(D = \frac{\sum (x_i - \overline{x})^2}{N}\)</span>. Чтобы понять зачем нам тут нужен квадрат (избавились от отрицательных значений) - посмотрите на 3 свойство среднего. К тому же квадратичные функции гладкие и с ними очень удобно работать в математике. Однако квадрат величины не имеет для нас большого смысла - сложно сравнивать с реальными значениями.</li>
<li><strong>Стандартное отклонение (СО, standard deviation, STD)</strong> - корень из дисперсии: <span class="math">\(\sigma = \sqrt{D}\)</span>. Он показывает реальное среднее отклонение от среднего по выборке (в тех же единицах измерения). В основном используется именно СО.</li>
</ol>
<p>При этом <strong>стандартное отклонение для выборки</strong> обозначается как <span class="math">\(sd\)</span>, а для ГС: <span class="math">\(\sigma\)</span>, и это неспроста. Дисперсии тоже отличаются: для выборки <span class="math">\(D = \frac{\sum (x_i - \overline{x})^2}{n - 1}\)</span>, для ГС: <span class="math">\(D = \frac{\sum (x_i - \overline{x})^2}{N}\)</span>. Число <span class="math">\(n\)</span> в знаменателе называется <strong>числом степеней свободы</strong>, т.е. количество независимых переменных в выборке, и оно меньше на единицу чем в ГС. Это вызвано тем, что выборка зависит от ГС и ее показателей (формальное обоснование оставим за сценой). Ведь по сути само понятие выборки нам нужно, чтобы на основании малого количества данных представить, что происходит на самом деле в генеральной совокупности.</p>
<blockquote>
<p><strong>Примечание.</strong> Число степеней свободы - значимый параметр в статистике и он не раз нам еще понадобится. Строго говоря - это количество факторов (элементов информации), которые могут варьироваться (которые мы можем изменять), при расчете того или иного параметра (в случае со СО выборки мы не можем варьировать среднее, поскольку оно связано с ГС, поэтому из количества переменных, мы вычитаем 1 значение, которое “можно найти, вычитанием остальных независимых элементов из среднего”).</p>
</blockquote>
<p><strong>Свойства дисперсии</strong>.</p>
<ol>
<li>
<p>Не изменчивость формы распределения при добавлении константы:</p>
<ul>
<li><span class="math">\(D_{x+c} = D_x\)</span></li>
<li><span class="math">\(sd_{x+c} = sd_x\)</span></li>
</ul>
</li>
<li>
<p>Изменчивость данных увеличится при умножении данных на константу:</p>
</li>
</ol>
<ul>
<li><span class="math">\(D_{x \cdot c} = D_x \cdot c^2\)</span></li>
<li><span class="math">\(sd_{x \cdot c} = sd_x \cdot c\)</span></li>
</ul>
<p>Опять же - всегда рекомендую строить графические примеры, чтобы понять почему так происходит.</p>
<p>Вот собственно и все основные численные характеристики распределения величин в выборках. Далее мы будем рассматривать вытекающие из них свойства и параметры, которые широко применяются в экспериментальной практике. Однако <strong>заключительной числовой характеристикой распределения являются его квантили</strong>.</p>
<h4 id="3-2-3">3.2.3 Квантили распределения</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p><strong>Квантили - значения признаков, которые делят упорядоченные данные выборки на равное число частей</strong>. И да, медиана это один из квантилей - половинный квантиль (делит выборку на 2 равные части). Еще один частый пример квантилей - <strong>квартили</strong>. Это значения (3 точки), которые делят упорядоченные данные выборки на 4 части. Находятся аналогично медиане для разбитых ее участков.</p>
<p>А нужны нам эти точки для того, чтобы охарактеризовать распределение визуально. Они позволяют построит очень распространенный в статистике <strong>график представления результатов - box plot (ящик с усами), рис 32.</strong></p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_32-1.png" alt="box plot" width="900px"/>
</td>
<td>
<i>
Рис. 32 (a). Анатомия <a href="https://www.r-graph-gallery.com/boxplot.html">box plot</a>.
</i>
</td>
</tr>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_32-2.jpg" alt="box plot" width="900px"/>
</td>
<td>
<i>
Рис. 32 (b). Примеры box plot с сайта <a href="https://media.nature.com"> https://media.nature.com </a> и соответствующие им распределения.
</i>
</td>
</tr>
</table>
</div>
<p>С помощью данных графиком очень удобно сравнивать различные наборы экспериментальных данных. Вот пример кода на R для построения простого box plot:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Generate random numbers</span>
<span class="n">x</span> <span class="o"><-</span> <span class="m">50</span> <span class="o">+</span> <span class="nf">rnorm</span><span class="p">(</span><span class="m">200</span><span class="p">)</span>
<span class="c1"># Boxplot</span>
<span class="nf">boxplot</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</code></pre></div>
<p><strong>Поясним анатомию box plot</strong>. Линия внутри прямоугольника - медиана, верх и низ прямоугольника - 3 и 1 квартиль соответственно. Чем больше расстояние между 3 и 1 квартилем, тем больше вариативность нашего признака. При этом если медиана не по центр - распределение скошено. В свою очередь усы - это 1.5 межквартильных размаха (в них будет 50 % наблюдений). И если значения выходят за рамки этих усов, то они отображаются точками. Особо выбивающиеся значения стоит проверить на возможные выбросы.</p>
<p>Иногда усы на графике соответствуют максимальному и минимальному значению (другой способ отображения box plot, используется реже).</p>
<p>На этом действительно все с описанием распределений и время перейти к самой статистике. И основой ее являются нормальное распределение и центральная предельная теорема.</p>
<h3 id="3-3">3.3 Статистика и сравнение данных</h3>
<h4 id="3-3-1">3.3.1 Нормальное распределение</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Мы уже сталкивались с термином “нормальное распределение” и успели узнать, что это основное распределение в статистике. <strong>Большинство экспериментальных данных со случайной погрешностью подчиняется данному закону распределения (рис. 33)</strong>. Но что значит распределение, помимо частотной гистограммы и числовых характеристик? В первую очередь - это закон, по которому распределяется вероятность получения тех или иных величин. Раз это закон, то существует выверенная математическая формула (формула Гаусса), согласно которой наши наблюдаемые значения отклоняются от среднего.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_33.png" alt="normal distribution" width="900px"/>
</td>
<td>
<i>
Рис. 33. Нормальное распределение.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Примечание.</strong> Прошу вас ненадолго задуматься, что практически все величины в нашем мире подчиняются нормальному распределению. Это удивительно! И объяснимо.</p>
</blockquote>
<p><strong>Свойства нормального распределения</strong>:</p>
<ul>
<li>симметрично;</li>
<li>унимодально.</li>
</ul>
<p>Как уже отмечалось, поскольку распределение подчиняется строгому закону, мы можем рассчитать сколько наблюдений будет соответствовать тем или иным участкам гистограммы (наше распределение). Кроме того, мы сможем проводить и обратную операцию: определять вероятность получения того или иного значения эксперимента на основании его нормального распределения. Это позволит нам понять, стоит ли доверять полученному результату и насколько вероятно, что полученное значение (или сет значений) принадлежит той или иной системе (т.е. тому или иному распределению).</p>
<p>В частности, вероятность встретить значение, которое бы отклонилось от среднего на <span class="math">\(\pm 3 \sigma\)</span> равняется 0.01 %, что очень маловероятно. Или другими словами 99 % наблюдений будут находиться в диапазоне <span class="math">\(\pm 3 \sigma\)</span> (на графике это выражается соответствующей площадью под кривой).</p>
<p>С определением нормального распределения мы разобрались. Осталось понять <strong>как мы будем сравнивать различные распределения друг с другом</strong>, ведь несмотря на описательную статистику, <strong>измеряемые величины могут отличаться на порядки - на одной шкале их не представишь</strong>…</p>
<p>Для этого нам понадобиться <strong>стандартизация</strong>. Мы будем использовать так называемое <strong>Z-преобразование</strong> (Z-score). В результате такого преобразования мы получим <strong>Z-распределение</strong>, где среднее = 0, а стандартное отклонение = 1.</p>
<p>Приведения нашего нормального распределения к стандартному виду (Z-score) осуществляется по формуле:</p>
<div class="math">$$
Z_i = \frac{x_i - \overline{x}}{\sigma_x}
$$</div>
<blockquote>
<p><strong>Задача.</strong> Используя свойства среднего и дисперсии, рассчитайте новые характеристики полученного распределения и убедитесь, что они действительно равны 0 и 1.</p>
</blockquote>
<p>При таком преобразовании форма распределения не изменится, а значит важную информации о нем мы не потеряем (если не используем дисперсию как признак).</p>
<p>Z - преобразование часто используется, чтобы <strong>все наблюдения перевести в z - шкалу (M = 0, sd = 1)</strong> для упрощения работы с данными. Однако <strong>процедура стандартизации часто используется и при расчете вероятности отклонения измеренного значения от среднего в единицах стандартного отклонения</strong> (запомните этот подход, он нам еще пригодится).</p>
<p>С использованием стандартизации, были установлены одни из широко используемых практических правил статистики: <strong>правила двух и трех сигм.</strong></p>
<ul>
<li><span class="math">\(M_x \pm \sigma \approx 68 \%\)</span> наблюдений;</li>
<li><span class="math">\(M_x \pm 2\sigma \approx 95 \%\)</span> наблюдений;</li>
<li><span class="math">\(M_x \pm 3\sigma \approx 100 \%\)</span> наблюдений.</li>
</ul>
<p>Однако Z-score позволяет нам рассчитать вероятность для любого отклонения, что позволит нам не использовать данные приближенные правила, а непосредственно рассчитывать вероятности появления того или иного значения.</p>
<p>Допустим среднее выборки <span class="math">\(\overline X = 150\)</span>, а стандартное отклонение <span class="math">\(sd = 8\)</span>. Какой процент наблюдений превосходит значение в 154 (рис. 34)?</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_34.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. 34. Пример расчета процента наблюдений.
</i>
</td>
</tr>
</table>
</div>
<p>Для начала сделаем Z-преобразование для исследуемого значения: <span class="math">\(Z = \frac{154-150}{8} = 0.5\)</span>. После этого мы можем воспользоваться специальным <a href="https://gallery.shinyapps.io/dist_calc/">сайтом</a> и найти интересующий процент такого или еще более экстремального значения (рис. 34).</p>
<p>Ответ: 30.9 % наблюдений.</p>
<blockquote>
<p><strong>Примечание.</strong> Будьте аккуратны при использовании таблиц для работы с z-значениями: часто для интересующего нас z-значения указывается процент наблюдений, который <strong>не превосходит</strong> указанное z-значение.</p>
</blockquote>
<p>Для нахождения вероятности и решения собственных задач используйте следующие ресурсы:</p>
<ol>
<li>
<p>таблицы z-значений:</p>
<ul>
<li><a href="https://web.archive.org/web/20180729102938/http://users.stat.ufl.edu/~athienit/Tables/Ztable.pdf">процент наблюдений, не превышающий указанное z-значение</a>;</li>
<li><a href="http://www.normaltable.com/">процент наблюдений, превышающий указанное z-значение</a>;</li>
</ul>
</li>
<li>
<p>специальный <a href="https://gallery.shinyapps.io/dist_calc/">сайт</a>, позволяющим вычислить процент наблюдений в интересующем нас диапазоне (по умолчанию выставлено стандартное нормальное распределение M=0, sd=1).</p>
</li>
<li>
<p>Язык программирования R или Python (предлагаю самим найти в них соответствующие функции).</p>
</li>
</ol>
<blockquote>
<p><strong>Примечание.</strong> При проведении ответственных вычислений используйте любые 2 источника, чтоб сверить свои ответы.</p>
<p><strong>Примечание.</strong> Наиболее распространенные распределение непрерывных или псевдо-непрерывных величин:</p>
<ol>
<li>распределение Гаусса (нормальный закон распределения случайной величины, наиболее широко распространено);</li>
<li>хи-квадрат (<span class="math">\(\chi^2\)</span>);</li>
<li>распределение Фишера (<span class="math">\(F\)</span>);</li>
<li>Распределение Стьюдента (<span class="math">\(t\)</span>).</li>
</ol>
<p>Наиболее распространенные распределения дискретных величин:</p>
<ol>
<li>Бернулли (бинарное);</li>
<li>Пуассона.</li>
</ol>
<p>Больше примеров и описаний можно найти <a href="https://habr.com/ru/post/311092/">здесь</a>.</p>
</blockquote>
<h4 id="3-3-2">3.3.2 Центральная предельная теорема</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Мы разобрались с характеристиками нормального распределения и как с ним работать. Действительно, наш мир - удивителен! И то, что нормальное распределение встречается в нем очень часто в любых проявлениях лишний раз подтверждает это утверждение. Но что действительно может “взорвать мозг”, так это основа основ статистики - <strong>центральная предельная теорема (ЦПТ)</strong>:</p>
<blockquote>
<p><strong>Распределение средних значений выборок одинакового размера из одной генеральной совокупности будет всегда стремиться к нормальному распределению! (при достаточно большом объеме выборки)</strong></p>
</blockquote>
<p>Более строгая формулировка теоремы выглядит примерно так:</p>
<div class="math">$$
X \sim F(x), \text{ } X^n = (X_1, X_2, ..., X_m) \Rightarrow \overline{X^m} \sim N(\mu_X, \frac{D_X}{n})
$$</div>
<p>где <span class="math">\(X\)</span> - ГС исходной величины <span class="math">\(x\)</span>, с распределением <span class="math">\(F(x)\)</span>, <span class="math">\(X^n\)</span> - множество из <span class="math">\(m\)</span> выборок c размером <span class="math">\(n\)</span>, <span class="math">\(N\)</span> - нормальное распределение, <span class="math">\(\mu_X\)</span> - среднее ГС, <span class="math">\(D_X\)</span> - дисперсия ГС.</p>
<blockquote>
<p><strong>Примечание.</strong> Математическая формулировку можно озвучить следующим образом. При многократном извлечении <span class="math">\(m\)</span> выборок размером <span class="math">\(n\)</span> из генеральной совокупности <span class="math">\(X\)</span> с распределением <span class="math">\(F(x)\)</span>, средним <span class="math">\(\mu_X\)</span> и дисперсией <span class="math">\(D_X\)</span>, распределение выборочных средних <span class="math">\(X^n = (X_1, X_2, ..., X_m)\)</span> будет являться приблизительно нормальным со средним, равным среднему генеральной совокупности и с дисперсией, равной <span class="math">\(\frac{D_X}{n}\)</span>.</p>
</blockquote>
<p>Поскольку мы чаще будем пользоваться величиной стандартного отклонения:</p>
<div class="math">$$
se = \sqrt{\frac{D_X}{n}} = \frac{\sigma_X}{\sqrt{n}}
$$</div>
<p>Полученная величина называется <strong>стандартной ошибкой среднего (standard error)</strong>.</p>
<p><strong>Суть ЦПТ</strong> в том, что сумма достаточно большого количества слабо зависимых случайных величин, имеющих примерно одинаковые масштабы (ни одно из слагаемых не доминирует, т.е. не вносит в сумму определяющего вклада), имеет распределение, близкое к нормальному!</p>
<p>И как частный случай, если мы будем извлекать выборки из генеральной совокупности (неважно с каким распределением, при очень большом количестве выборок) и рассчитывать для них средние, то они распределятся нормально относительно среднего генеральной совокупности. И отклонение от среднего будет тем меньше, чем больше размеры извлекаемых выборок (<span class="math">\(n\)</span>) или чем меньше изменчивость исходного признака (<span class="math">\(\sigma_X\)</span>).</p>
<p>Проверить это вы можете на сайте с соответствующей <a href="https://gallery.shinyapps.io/CLT_mean/">моделью</a>.</p>
<blockquote>
<p><strong>Примечание.</strong> Теорема Ляпунова объясняет широкое распространение нормального закона распределения и поясняет механизм его образования. Теорема позволяет утверждать, что всегда, когда случайная величина образуется в результате сложения большого числа независимых случайных величин (а наш мир так и устроен), дисперсии которых малы по сравнению с дисперсией суммы, закон распределения этой случайной величины оказывается практически нормальным законом распределения. А поскольку случайные величины всегда порождаются бесконечным количеством причин и чаще всего ни одна из них не имеет дисперсии, сравнимой с дисперсией самой случайной величины, то большинство встречающихся в практике случайных величин подчинено именно нормальному закону распределения.</p>
</blockquote>
<p>Но самое приятное применение ЦПТ в том, что <strong>мы можем получить оценку истинного значения измеряемой величины</strong> по относительно небольшой выборке значений:</p>
<ul>
<li>среднее генеральной совокупности - приближенное истинное значение;</li>
<li>среднее выборок - приближенное значение генеральной совокупности (по ЦПТ).</li>
</ul>
<p>Таким образом, зная формулу распределения случайных величин в нормальном распределении и понимая, что все стремится к нормальному распределению (по ЦПТ), мы способны оценить насколько сильно новое измеренное значение отклонится от истинного (т.е. можем проводить измерения и сравнивать полученные результаты между собой действительно достоверно). На основании вероятности получить такое или еще более экстремальное значение, мы можем проводить статистическую проверку гипотез - основную операцию сравнения в статистике и выявлять статистически значимые различия.</p>
<p>Ограничивающим условием для ЦПТ в представленном виде является то, что в выборке должно быть более 30 значений, а сами выборки должны быть репрезентативны.</p>
<blockquote>
<p><strong>Пример.</strong> Используем на практике положения ЦПТ. Допустим, мы отобрали из генеральной совокупности только одну выборку размером 100 значений, характеристики выборки: среднее <span class="math">\(\overline{X} = 3\)</span> и СО <span class="math">\(sd = 5\)</span>. Даже в таком случае мы можем оценить истинное значение через среднее всей генеральной совокупности, которое будет находиться в диапазоне среднего выборки со стандартной ошибкой среднего (мера изменчивости среднего):</p>
<p>
<div class="math">$$
se = \frac{sd}{\sqrt{n}} = \frac{5}{\sqrt{100}} = 0.5
$$</div>
</p>
<p>Истинное значение c 99% процентной вероятностью находится в диапазоне <span class="math">\(\overline{X} \pm 3\cdot se = 3 \pm 3 \cdot 0.5 = 3 \pm 1.5\)</span>. (см. правило 3 сигм). Более строгое обоснование будет дано далее.</p>
<p><strong>Примечание.</strong> Если генеральная совокупность сильно отличается от нормального распределения, то чтобы получить нормальное распределение, хорошо описывающее распределение выборочного среднего, необходим размер выборки намного больше 30.</p>
</blockquote>
<h4 id="3-3-3">3.3.3 Доверительные интервалы</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Говоря о ЦПТ мы уже немного коснулись сравнения данных. Однако для более строго понимания этого процесса необходимо понимать <strong>доверительные интервалы</strong>.</p>
<p>Мы уже рассмотрели пример, когда можно в определенной вероятностью предположить среднее ГС по одной выборки. И вы увидели, что в статистике (как и в реальном мире) нет абсолютных величин. Только интервалы и вероятность. Мы можем лишь оценить интервал, в который с определенной вероятностью попадет истинное значение - это и есть <strong>доверительный интервал среднего</strong> (для генеральной совокупности). А рассчитать такой интервал нам поможет ЦПТ и понятие квантилей с точки зрения стандартного Z-распределения.</p>
<blockquote>
<p><strong>Примечание.</strong> По своей сути Z-распределение показывает нам силу отклонения той или иной полученной величины от среднего в единицах стандартного отклонения выборки (внимательно изучите формулу для Z-score). А для оценки такого отклонения очень удобно использовать квантили, поскольку они делят шкалу распределения на равные отрезки относительно медианы (которая в случае нормального распределения совпадает со средним).</p>
</blockquote>
<p>К настоящему моменту у нас на вооружение имеется 2 необходимых свойства:</p>
<ol>
<li>Согласно ЦПТ распределения выборочных средних СО будет равно <span class="math">\(se = \frac{sd_x}{\sqrt{n}}\)</span>.</li>
<li>При этом из понятий о квантилях и Z-распределения мы можем рассчитать, какой процент наблюдений окажется в том или ином интервале от среднего ГС. Для упрощения воспользуемся правилом сигм и предположим, что 95% объектов будут находиться в диапазоне <span class="math">\(\mu \pm 1.96 se\)</span>.</li>
</ol>
<p>Если взглянуть на это с другой стороны - со стороны выборочного среднего <span class="math">\(\overline{X}\)</span>, то c 95 % вероятностью оно находиться в интервале <span class="math">\(\mu \pm 1.96 se\)</span>. Это значит, что если бы мы взяли 100 выборок из ГС и рассчитали их средние, то для 95 выборок, эти средние также бы попали в данный интервал и если отложить от их среднего интервал <span class="math">\(\pm 1.96 se\)</span>, то он включили бы в себя среднее генеральной совокупности.</p>
<blockquote>
<p><strong>Примечание.</strong> Для лучшего восприятия возьмите листочек бумаги, нарисуйте распредлеение ГС, доверительный интервал для 95 % вероятности и убедитесь в сделанных предположениях (отложив соответствующие интервалы от выборочных средних и наблюдая, попадает ли в них среднее ГС).</p>
</blockquote>
<p><strong>Вот и ответ</strong> как нам использовать доверительные интервалы для оценки среднего ГС (нашего “реального значения”). Использовав обратный подход к рассуждению о доверительном интервале мы показали, что среднее ГС будет с той же вероятностью находиться в диапазоне <span class="math">\(\overline{X} \pm 1.96 se\)</span>, что и среднее выборки, находящееся в интервале <span class="math">\(\mu \pm 1.96 se\)</span> (для такого доверительного интервала вероятность составит 95 %).</p>
<blockquote>
<p><strong>Пример.</strong> Рассчитаем доверительный интервал, для выборки с <span class="math">\(\overline{X} = 100\)</span>, <span class="math">\(sd = 4\)</span>, <span class="math">\(n=64\)</span> в котором с 95 \% вероятностью находится среднее ГС.</p>
</blockquote>
<div class="math">$$
s = \frac{sd_X}{\sqrt{n}} = \frac{4}{\sqrt{64}} = 0.5\\
(\overline{X} - 1.96 se; \overline{X} + 1.96 se)\\
(100 - 0.98; 100 + 0.98)
$$</div>
<blockquote>
<p>Рассчитав такой интервал, <strong>мы можем быть на 95 % уверены, что он содержит в себе среднее генеральной совокупности (и предположительно, истинное значение)</strong>. Это основная идея доверительных интервалов.</p>
<p><strong>Примечание.</strong> Для большей уверенности мы могли бы использовать более широкий интервал, например <span class="math">\(\pm 2.58 se\)</span> для 99 % вероятности.</p>
</blockquote>
<h4 id="3-3-4">3.3.4 Идея статистического вывода, р-уровень значимости</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>До сих пор мы работали по сути с результатами одного эксперимента. Настало время расширить горизонты.</p>
<p>Помимо представления об истинном результате, в экспериментальной практике нас интересует возможность сравнить результаты двух и более экспериментов (установить, действительно ли две выборки отличаются между собой).</p>
<p>Для статистически обоснованного ответа на такие вопросы нам потребуется разобрать идею <strong>статистического вывода</strong>. И сделаем мы это на примере.</p>
<blockquote>
<p><strong>Пример.</strong> Допустим, срок выздоровления пациентов при лекарстве <em>А</em> составляет в среднем 20 дней. Мы испытываем новое лекарство <em>В</em> и получили выборку со следующими характеристиками: <span class="math">\(N = 64\)</span>, <span class="math">\(\overline{X} = 18.5\)</span>, <span class="math">\(sd=4\)</span>. Действительно ли новое лекарство <em>В</em> работает лучше? Или мы получили просто допустимое отклонение от среднего одной ГС?</p>
<p>С одной стороны, среднее выборок отличается. Но мы теперь понимаем, что такой результат вполне мог быть получен случайно. Нам нужно оценить вероятность такого события и на основании полученных значений принять решение - отличается или нет.</p>
<p>В статистике для этого используется стандартный подход <strong>оценки статистических гипотез</strong> (названия гипотез всегда фиксированы).</p>
<ol>
<li><strong><span class="math">\(H_0\)</span> - нулевая гипотеза</strong>. Всегда предполагает, что никакого воздействия нет. В нашем случае, предполагает, что новое средне принадлежат ГС (с <span class="math">\(\mu = 20\)</span> дней).</li>
<li><strong><span class="math">\(H_1\)</span> - альтернативная гипотеза</strong>. Всегда предполагает, что нулевая гипотеза не верна (в нашем случае это то, что мы хотим доказать).</li>
</ol>
<p>Решение:</p>
<p>Предположим, что верна нулевая гипотеза <span class="math">\(H_0\)</span>. Тогда, согласно ЦПТ, значение среднего исследуемой выборки (18.5) принадлежало бы ГС со средним 20 и ошибкой среднего <span class="math">\(se = \frac{sd}{\sqrt{n}} = \frac{4}{\sqrt{64}} = 0.5\)</span>. Тогда нам нужно ответить на вопрос <strong>насколько далеко отклонилось выборочное среднее 18.5 от среднего ГС 20, в единицах стандартного отклонения (ошибки среднего в данном случае)</strong> - для этого вспоминаем Z-распределение.</p>
</blockquote>
<div class="math">$$
Z = \frac{\overline{X} - \mu}{se} = \frac{18.5 - 20}{0.5} = -3
$$</div>
<blockquote>
<p>Это означает, что среднее выборки отклонилось от общего среднего на <span class="math">\(-3\)</span> сигмы. Вероятность такого или еще более экстремального отклонения можно посмотреть из таблиц для z-преобразования, или воспользоваться этим <a href="https://gallery.shinyapps.io/dist_calc/">сайтом</a>. В нашем случае <strong>вероятность составит <span class="math">\(p = 0.003\)</span>, или 0.3 %</strong>.</p>
</blockquote>
<p>В результате рассмотренного примера, мы установили, что 0 гипотеза верна с вероятность в 0.3 %. Тогда альтернативная гипотеза верна с вероятностью 99.7 %. Таким образом, мы можем отклонить нулевую гипотезу и завить, что наше лекарство действительно работает (но это не точно).</p>
<p>Величина достоверность 0 гипотезы (т.е. вероятность получить исследуемое значение как случайное отклонение от среднего ГС) обозначается как <strong><span class="math">\(p\)</span> и называется уровнем значимости</strong>. По своей сути это такой уровень вероятности, при котором можно получить такие, или еще более экстремальные значения. <strong>Считается, что при <span class="math">\(p < 0.05\)</span> можно отклонять нулевую гипотезу и результат является статистически значимым</strong> (в некоторых случаях используют значение в 0.01).</p>
<blockquote>
<p><strong>Примечание.</strong> Существует понятие <strong>одностороннего и двустороннего p уровня значимости</strong>. Принято <strong>всегда рассматривать двусторонний уровень значимости</strong>, поскольку он позволяет дополнительно “застраховаться” от ложного результата (учитывает возможность отклонений в обе стороны). Однако, если сравниваемое значение физически не может существовать по другую сторону от среднего, тогда допускается использовать односторонний уровень значимости.</p>
</blockquote>
<p>Расчет уровня значимости того или иного события, которое лежит в основе 0 статистической гипотезы является <strong>основой основ статистического анализа</strong>. Именно расчет уровня значимости для того или иного распределения (р-уровень значимости) лежит в основе различных статистических критериев, тестов и сравнений (поскольку p-уровень значимости является результатом этих действий). Благодаря этому показателю мы будем принимать те или иные статистические решения (отвергать или нет 0 гипотезу).</p>
<p>Обычно, нулевая гипотеза отклоняется, и различия считаются статистически достоверными, если p < 0,05. Однако часто в статистике используется более жесткий критерий достоверности различий (например, p < 0.01). <strong>Значение p-уровня значимости, которое выбирается, в качестве порога обозначается буквой <span class="math">\(\alpha\)</span></strong>. Например, если исследователь решил, что <span class="math">\(\alpha = 0.05\)</span>, то и нулевая гипотеза будет отклоняться при условии, что p < 0,05. На протяжении курса мы будем отклонять нулевую гипотезу при условии, что p < 0,05 (кроме отдельно оговоренных случаев).</p>
<blockquote>
<p><strong>Примечание.</strong> Рекомендую ознакомиться с дополнительным материалом по р-уровню значимости: <a href="http://www.perfendo.org/docs/BayesProbability/twelvePvaluemisconceptions.pdf">оригинал</a> или <a href="http://habrahabr.ru/post/250527/">интерпретация на русском</a>.</p>
</blockquote>
<p>Важно понимать, что любой статистический вывод подразумевает, что мы будем ошибаться. Существуют <strong>2 типа ошибок</strong>:</p>
<ol>
<li>Ошибки I рода: отклонили 0 гипотезу, хотя она была верна (т.е. наш результат - случаен).</li>
<li>Ошибки II рода: не отклонили 0 гипотезу, хотя была верна альтернативная.</li>
</ol>
<p>Очень часто p-уровень значимости может выбираться чтобы минимизировать тот или иной вид ошибки.</p>
<blockquote>
<p><strong>Примечание.</strong> Использование доверительных интервалов зачастую рассматривают, как <strong>альтернативный способ проверки гипотез</strong>. В нашем случае, если значение 20 (предполагаемое среднее значение в генеральной совокупности) не будет принадлежать 95% доверительному интервалу, рассчитанному по выборочным данным, у нас будет достаточно оснований отклонить нулевую гипотезу. Проверьте, согласуются ли результаты двух этих подходов: рассчитайте 95% доверительный интервал для среднего значения, на примере с тестированием нового препарата.</p>
</blockquote>
<h4 id="3-3-5">3.3.5 Практика использования статистики для сравнения данных</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Итак, мы разобрали с вами основные подходы к статистическому анализу данных и даже научились сравнивать среднее выборки и генеральной совокупности между собой.</p>
<p>Время разобрать несколько подводных камней, с которыми вы столкнетесь на практике, а также формальный подход к проведению сравнения выборок.</p>
<p>Первый закономерный вопрос: а что делать, если <strong>данных в нашей выборке меньше 30</strong>? Размер выборки очень важен, поскольку при недостатке значений ЦПТ перестает работать в том виде в котором мы ее изучили.</p>
<ol>
<li>Стандартное отклонение выборки уже плохо представляет СО генеральной совокупности.</li>
<li>Средние значения наших выборок перестают формировать нормальное распределение.</li>
</ol>
<p>Однако, сама форма распределения средних изменится не сильно. Оно продолжает быть симметричным и унимодальным колоколом. Но это распределение уже плохо описывается формулой Гаусса. Для него введено новое понятие - <strong>распределение Стьюдента” (t-распределение, рис. 35)</strong>.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_35.png" alt="t distribution" width="900px"/>
</td>
<td>
<i>
Рис. 35. t-распределение (Стьюдента).
</i>
</td>
</tr>
</table>
</div>
<p>У такого распределения характерны более “высокие хвосты”. Т.е. отклонения от среднего будут встречаться чаще. Именно такое распределение используется, когда число наблюдений в выборке невелико и/или <span class="math">\(\sigma\)</span> (СО ГС) нам неизвестно (а это почти всегда). Обобщая сказанное: <strong>t-распределение используется всегда</strong>, когда есть сомнения в нормальности распределения ГС. Или проще - почти всегда нужно использовать t-распределение.</p>
<p>Поскольку данное распределение работает с малым количеством измерений, для него крайне <strong>важно понятие степеней свободы (<span class="math">\(df\)</span>)</strong>, которое зависит от наблюдений в выборке (<span class="math">\(n\)</span>).</p>
<div class="math">$$
df = n - 1
$$</div>
<p>Чем больше количество степеней свободы (т.е. данных в выборке), тем больше t-распределение становиться похоже на нормальное. И это интересная особенность данного распределения - <strong>оно зависит от числа степеней свободы!</strong> Т.е. в отличие от жестко заданного нормального распределения (форма зависит только от <span class="math">\(\overline{X}\)</span> и <span class="math">\(sd\)</span>), для t-распределения вероятности встретить те или иные значения будут меняться в зависимости от количества данных в выборке (форма зависит от <span class="math">\(\overline{X}\)</span>, <span class="math">\(sd\)</span> и <span class="math">\(df = n-1\)</span>).</p>
<p>Т.е., по сути, при одинаковом с Z-критерием расчете:</p>
<div class="math">$$
t = \frac{\overline{X} - \mu}{\frac{sd}{\sqrt{n}}}
$$</div>
<p>р-уровень значимости для этого значения будет другой (чтобы рассчитать данный уровень нужно также воспользоваться таблицами или <a href="https://gallery.shinyapps.io/dist_calc/">сайтом</a>)</p>
<blockquote>
<p><strong>Примечание.</strong> Важно! До настоящего момента мы использовали упрощенное представление о распределении средних по ЦПТ. С определенным допущением мы полагали, что оно подчиняется нормальному распределения при выборках с более чем 30 значениями и отклонение от среднего в единицах СО рассчитывали как:</p>
</blockquote>
<div class="math">$$
Z = \frac{\overline{X} - \mu}{\frac{\sigma}{\sqrt{n}}}
$$</div>
<blockquote>
<p>Строго говоря, это не так, поскольку в большинстве случаев нам не известна дисперсия ГС и сделать вывод о нормальности ГС мы не можем. В таком случае, мы обязаны всегда использовать t-распределение Стьюдента и рассчитывать p-уровень значимости для t критерия:</p>
</blockquote>
<div class="math">$$
t = \frac{\overline{X} - \mu}{\frac{sd}{\sqrt{n}}}
$$</div>
<blockquote>
<p>Для расчета вероятности получить такое отклонение случайно по t-распределению, нужно использовать <a href="https://gallery.shinyapps.io/dist_calc/">специальные ресурсы</a>.</p>
<p>Поэтому, правильнее будет сказать, что <strong>мы используем t - распределение не потому что у нас маленькие выборки, а потому что мы не знаем стандартное отклонение в генеральной совокупности</strong>. И в дальнейшем, на практике, мы всегда будем использовать t - распределение для проверки гипотез, если нам неизвестно стандартное отклонение в генеральной совокупности, необходимое для расчета стандартной ошибки (даже если объем выборки больше 30).</p>
<p><strong>Пример.</strong> Время перейти к конкретным практическим примерам и посмотреть, как понимание ЦПТ и t-распредления поможет нам сравнить средние значения двух выборок с параметрами:</p>
</blockquote>
<div class="math">$$
\overline{X_1}, sd_1, n_1 \\
\overline{X_2}, sd_2, n_2 \\
$$</div>
<blockquote>
<p>Подводный камень здесь заключается в том, что у нас нет ГС. Мы сравниваем 2 выборки из данной ГС. Поэтому для расчета нам понадобится так называемый парный t-тест (т.е. мы по сути проверяем, насколько сильно пересекаются доверительные интервалы исследуемых средних). Уже классический подход с гипотезами:</p>
</blockquote>
<div class="math">$$
H_0: \mu_1 = \mu_2 \\
H_1: \mu_1 \neq \mu_2
$$</div>
<blockquote>
<p>Допустим, верна 0 гипотеза. Тогда, при многократном повторении эксперимента мы бы извлекали по 2 выборки из одной ГС и величина:</p>
</blockquote>
<div class="math">$$
\overline{X_1} - \overline{X_2} = 0
$$</div>
<blockquote>
<p>При этом само распределение такой разности было бы t-распределением со средним = 0, а стандартное отклонение было бы равно:</p>
</blockquote>
<div class="math">$$
se = \sqrt{\frac{sd_1^2}{n_1} + \frac{sd_2^2}{n_2}}
$$</div>
<blockquote>
<p>т.е. вклад в общую ошибку среднего от средних 1 и 2 выборки был бы одинаков. Это разумно, поскольку мы предполагаем, что эти выборки принадлежат одной ГС.</p>
<p>При этом число степеней свобод для такого распределения будет равно:</p>
</blockquote>
<div class="math">$$
dF = n_1 + n_2 - 2
$$</div>
<blockquote>
<p>что тоже весьма разумно, поскольку используются 2 выборки со своими степенями свободы.</p>
<p>Осталось <strong>рассчитать вероятность отклонения нашей разности, от предполагаемого 0</strong> (аналогично расчету любого квантиля). Это и есть t-критерий:</p>
</blockquote>
<div class="math">$$
t = \frac{(\overline{X_1} - \overline{X_2}) - (\mu_1 - \mu_2)}{se} = \frac{(\overline{X_1} - \overline{X_2}) - 0}{\sqrt{\frac{sd_1^2}{n_1} + \frac{sd_2^2}{n_2}}}
$$</div>
<blockquote>
<p>Рассчитав соответствующее t-значение (т.е. насколько сильно отклоняется наш результат от предполагаемого среднего в единицах стандартного отклонения для t-распределения) и зная общее число степеней свободы, мы можем сравнить полученный результат с допустимым крайним значением (используем <a href="http://www.medcalc.org/manual/t-distribution.php">таблицы</a>) или рассчитать p-уровень значимости для такого значения используя <a href="https://gallery.shinyapps.io/dist_calc/">специальный сайт</a>). Помним, что считаем вероятность получить такое отклонение в обе стороны!</p>
</blockquote>
<p>Отметим, что при использовании критерия t-Cтьюдента <strong>необходимо учитывать соблюдение следующих требований</strong>:</p>
<ol>
<li><strong>Гомогенности дисперсий</strong>. Дисперсии сравниваемых выборок должны быть приблизительно одинаковы (иначе наше допущение об их равном вкладе не имеет смысла). Для проверки данного требования используются критерий Ильина или критерий Фишера.</li>
<li>При маленьком размере выборки (меньше 30) важно, чтобы распределение внутри выборки было нормальным (иначе не факт, что будет соблюдаться ЦПТ).</li>
</ol>
<h4 id="3-3-6">3.3.6 Графическое сравнение распределений</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Помимо приведенных расчетов, мы можем использовать и графическое сравнение данных. Зачастую это удобно когда данных много и нужны быстрые выводы (наглядно, но вероятность совершить ошибку выше).</p>
<p>В начале остановимся на <strong>общих правилах представления результатов</strong> в статистике (да и в любой науке в принципе, рис. 36).</p>
<ol>
<li>Всегда добавлять название (хотя бы в подписи к рисунку).</li>
<li>Подписывать оси.</li>
<li>Указывать меру изменчивости данных (другими словами - погрешность).</li>
</ol>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_36.png" alt="histogram" width="900px"/>
</td>
<td>
<i>
Рис. 36. Пример представления данных в <a href="https://www.r-graph-gallery.com/4-barplot-with-error-bar.html">виде гистограммы</a>.
</i>
</td>
</tr>
</table>
</div>
<div class="highlight"><pre><span></span><code><span class="c1"># Load ggplot2</span>
<span class="nf">library</span><span class="p">(</span><span class="n">ggplot2</span><span class="p">)</span>
<span class="c1"># create dummy data</span>
<span class="n">data</span> <span class="o"><-</span> <span class="nf">data.frame</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="kc">letters</span><span class="p">[</span><span class="m">1</span><span class="o">:</span><span class="m">5</span><span class="p">],</span>
<span class="n">value</span><span class="o">=</span><span class="nf">sample</span><span class="p">(</span><span class="nf">seq</span><span class="p">(</span><span class="m">4</span><span class="p">,</span><span class="m">15</span><span class="p">),</span><span class="m">5</span><span class="p">),</span>
<span class="n">sd</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="m">0.2</span><span class="p">,</span><span class="m">3</span><span class="p">,</span><span class="m">2</span><span class="p">,</span><span class="m">4</span><span class="p">)</span>
<span class="p">)</span>
<span class="c1"># Most basic error bar</span>
<span class="nf">ggplot</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">+</span>
<span class="nf">geom_bar</span><span class="p">(</span> <span class="nf">aes</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">value</span><span class="p">),</span> <span class="n">stat</span><span class="o">=</span><span class="s">"identity"</span><span class="p">,</span> <span class="n">fill</span><span class="o">=</span><span class="s">"skyblue"</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="m">0.7</span><span class="p">)</span> <span class="o">+</span>
<span class="nf">geom_errorbar</span><span class="p">(</span> <span class="nf">aes</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">ymin</span><span class="o">=</span><span class="n">value</span><span class="o">-</span><span class="n">sd</span><span class="p">,</span> <span class="n">ymax</span><span class="o">=</span><span class="n">value</span><span class="o">+</span><span class="n">sd</span><span class="p">),</span> <span class="n">width</span><span class="o">=</span><span class="m">0.4</span><span class="p">,</span> <span class="n">colour</span><span class="o">=</span><span class="s">"orange"</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="m">0.9</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="m">1.3</span><span class="p">)</span>
</code></pre></div>
<p>Но признанным стандартом для статистики является box plot или его вариации (рис. 37).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_37.png" alt="box plot" width="900px"/>
</td>
<td>
<i>
Рис. 37. Пример представления данных в виде <a href="https://www.datamentor.io/r-programming/box-plot/">box plot</a>.
</i>
</td>
</tr>
</table>
</div>
<div class="highlight"><pre><span></span><code><span class="c1"># prepare the data from build in dataset</span>
<span class="n">ozone</span> <span class="o"><-</span> <span class="n">airquality</span><span class="o">$</span><span class="n">Ozone</span>
<span class="n">temp</span> <span class="o"><-</span> <span class="n">airquality</span><span class="o">$</span><span class="n">Temp</span>
<span class="c1"># gererate normal distribution with same mean and sd</span>
<span class="n">ozone_norm</span> <span class="o"><-</span> <span class="nf">rnorm</span><span class="p">(</span><span class="m">200</span><span class="p">,</span><span class="n">mean</span><span class="o">=</span><span class="nf">mean</span><span class="p">(</span><span class="n">ozone</span><span class="p">,</span> <span class="n">na.rm</span><span class="o">=</span><span class="kc">TRUE</span><span class="p">),</span> <span class="n">sd</span><span class="o">=</span><span class="nf">sd</span><span class="p">(</span><span class="n">ozone</span><span class="p">,</span> <span class="n">na.rm</span><span class="o">=</span><span class="kc">TRUE</span><span class="p">))</span>
<span class="n">temp_norm</span> <span class="o"><-</span> <span class="nf">rnorm</span><span class="p">(</span><span class="m">200</span><span class="p">,</span><span class="n">mean</span><span class="o">=</span><span class="nf">mean</span><span class="p">(</span><span class="n">temp</span><span class="p">,</span> <span class="n">na.rm</span><span class="o">=</span><span class="kc">TRUE</span><span class="p">),</span> <span class="n">sd</span><span class="o">=</span><span class="nf">sd</span><span class="p">(</span><span class="n">temp</span><span class="p">,</span> <span class="n">na.rm</span><span class="o">=</span><span class="kc">TRUE</span><span class="p">))</span>
<span class="c1"># You can read about them in the help section ?boxplot.</span>
<span class="c1"># Some of the frequently used ones are, main-to give the title, xlab and ylab-to provide labels for the axes, col to define color etc.</span>
<span class="c1"># Additionally, with the argument horizontal = TRUE we can plot it horizontally and with notch = TRUE we can add a notch to the box.</span>
<span class="nf">boxplot</span><span class="p">(</span><span class="n">ozone</span><span class="p">,</span> <span class="n">ozone_norm</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="n">temp_norm</span><span class="p">,</span>
<span class="n">main</span> <span class="o">=</span> <span class="s">"Multiple boxplots for comparision"</span><span class="p">,</span>
<span class="n">at</span> <span class="o">=</span> <span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="m">2</span><span class="p">,</span><span class="m">4</span><span class="p">,</span><span class="m">5</span><span class="p">),</span>
<span class="n">names</span> <span class="o">=</span> <span class="nf">c</span><span class="p">(</span><span class="s">"ozone"</span><span class="p">,</span> <span class="s">"normal"</span><span class="p">,</span> <span class="s">"temp"</span><span class="p">,</span> <span class="s">"normal"</span><span class="p">),</span>
<span class="n">las</span> <span class="o">=</span> <span class="m">2</span><span class="p">,</span>
<span class="n">col</span> <span class="o">=</span> <span class="nf">c</span><span class="p">(</span><span class="s">"orange"</span><span class="p">,</span><span class="s">"red"</span><span class="p">),</span>
<span class="n">border</span> <span class="o">=</span> <span class="s">"brown"</span><span class="p">,</span>
<span class="n">horizontal</span> <span class="o">=</span> <span class="kc">TRUE</span>
<span class="p">)</span>
</code></pre></div>
<p>Лично мне нравится обозначать на графике box plot доверительный интервал и среднее (рис. 38).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_38.png" alt="box plot" width="900px"/>
</td>
<td>
<i>
Рис. 38. Пример представления данных в виде box plot со средним и доверительным интервалом для нормализованных данных.
</i>
</td>
</tr>
</table>
</div>
<div class="highlight"><pre><span></span><code><span class="c1"># scale the data</span>
<span class="n">ozone</span> <span class="o"><-</span> <span class="nf">scale</span><span class="p">(</span><span class="n">airquality</span><span class="o">$</span><span class="n">Ozone</span><span class="p">)</span>
<span class="n">temp</span> <span class="o"><-</span> <span class="nf">scale</span><span class="p">(</span><span class="n">airquality</span><span class="o">$</span><span class="n">Temp</span><span class="p">)</span>
<span class="c1"># drop NA values</span>
<span class="n">ozone</span> <span class="o"><-</span> <span class="n">ozone</span><span class="p">[</span><span class="nf">complete.cases</span><span class="p">(</span><span class="n">ozone</span><span class="p">),</span> <span class="p">]</span>
<span class="n">temp</span> <span class="o"><-</span> <span class="n">temp</span><span class="p">[</span><span class="nf">complete.cases</span><span class="p">(</span><span class="n">temp</span><span class="p">),</span> <span class="p">]</span>
<span class="c1"># calculate statistics</span>
<span class="n">n_o</span><span class="o">=</span><span class="nf">length</span><span class="p">(</span><span class="n">ozone</span><span class="p">)</span>
<span class="n">mm_o</span><span class="o">=</span><span class="nf">mean</span><span class="p">(</span><span class="n">ozone</span><span class="p">)</span>
<span class="n">dd_o</span><span class="o">=</span><span class="nf">sd</span><span class="p">(</span><span class="n">ozone</span><span class="p">)</span>
<span class="n">error_o</span> <span class="o"><-</span> <span class="nf">qnorm</span><span class="p">(</span><span class="m">0.950</span><span class="p">)</span><span class="o">*</span><span class="n">dd_o</span><span class="o">/</span><span class="nf">sqrt</span><span class="p">(</span><span class="n">n_o</span><span class="p">)</span>
<span class="n">n_t</span><span class="o">=</span><span class="nf">length</span><span class="p">(</span><span class="n">temp</span><span class="p">)</span>
<span class="n">mm_t</span><span class="o">=</span><span class="nf">mean</span><span class="p">(</span><span class="n">temp</span><span class="p">)</span>
<span class="n">dd_t</span><span class="o">=</span><span class="nf">sd</span><span class="p">(</span><span class="n">temp</span><span class="p">)</span>
<span class="n">error_t</span> <span class="o"><-</span> <span class="nf">qnorm</span><span class="p">(</span><span class="m">0.950</span><span class="p">)</span><span class="o">*</span><span class="n">dd_t</span><span class="o">/</span><span class="nf">sqrt</span><span class="p">(</span><span class="n">n_t</span><span class="p">)</span>
<span class="c1"># calculate confidence interval</span>
<span class="n">inf_o</span> <span class="o"><-</span> <span class="n">mm_o</span> <span class="o">-</span> <span class="n">error_o</span>
<span class="n">sup_o</span> <span class="o"><-</span> <span class="n">mm_o</span> <span class="o">+</span> <span class="n">error_o</span>
<span class="n">inf_t</span> <span class="o"><-</span> <span class="n">mm_t</span> <span class="o">-</span> <span class="n">error_t</span>
<span class="n">sup_t</span> <span class="o"><-</span> <span class="n">mm_t</span> <span class="o">+</span> <span class="n">error_t</span>
<span class="c1"># draw boxplot</span>
<span class="nf">boxplot</span><span class="p">(</span><span class="n">ozone</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span>
<span class="n">main</span> <span class="o">=</span> <span class="s">"Multiple boxplots with conf.int."</span><span class="p">,</span>
<span class="n">at</span> <span class="o">=</span> <span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="m">2</span><span class="p">),</span>
<span class="n">names</span> <span class="o">=</span> <span class="nf">c</span><span class="p">(</span><span class="s">"ozone"</span><span class="p">,</span> <span class="s">"temp"</span><span class="p">),</span>
<span class="n">las</span> <span class="o">=</span> <span class="m">2</span><span class="p">,</span>
<span class="c1"># col = c("orange","red"),</span>
<span class="n">border</span> <span class="o">=</span> <span class="s">"brown"</span>
<span class="p">)</span>
<span class="c1"># draw mean and CI</span>
<span class="nf">lines</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="m">0.75</span><span class="p">,</span><span class="m">1.25</span><span class="p">),</span> <span class="nf">c</span><span class="p">(</span><span class="n">inf_o</span><span class="p">,</span> <span class="n">inf_o</span><span class="p">),</span> <span class="n">col</span><span class="o">=</span><span class="m">4</span><span class="p">)</span>
<span class="nf">lines</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="m">0.75</span><span class="p">,</span><span class="m">1.25</span><span class="p">),</span> <span class="nf">c</span><span class="p">(</span><span class="n">mm_o</span><span class="p">,</span> <span class="n">mm_o</span><span class="p">),</span> <span class="n">col</span><span class="o">=</span><span class="m">2</span><span class="p">,</span> <span class="n">lwd</span><span class="o">=</span><span class="m">2</span><span class="p">)</span>
<span class="nf">lines</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="m">0.75</span><span class="p">,</span><span class="m">1.25</span><span class="p">),</span> <span class="nf">c</span><span class="p">(</span><span class="n">sup_o</span><span class="p">,</span> <span class="n">sup_o</span><span class="p">),</span> <span class="n">col</span><span class="o">=</span><span class="m">4</span><span class="p">)</span>
<span class="nf">lines</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="m">1.75</span><span class="p">,</span><span class="m">2.25</span><span class="p">),</span> <span class="nf">c</span><span class="p">(</span><span class="n">inf_t</span><span class="p">,</span> <span class="n">inf_t</span><span class="p">),</span> <span class="n">col</span><span class="o">=</span><span class="m">4</span><span class="p">)</span>
<span class="nf">lines</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="m">1.75</span><span class="p">,</span><span class="m">2.25</span><span class="p">),</span> <span class="nf">c</span><span class="p">(</span><span class="n">mm_t</span><span class="p">,</span> <span class="n">mm_t</span><span class="p">),</span> <span class="n">col</span><span class="o">=</span><span class="m">2</span><span class="p">,</span> <span class="n">lwd</span><span class="o">=</span><span class="m">2</span><span class="p">)</span>
<span class="nf">lines</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="m">1.75</span><span class="p">,</span><span class="m">2.25</span><span class="p">),</span> <span class="nf">c</span><span class="p">(</span><span class="n">sup_t</span><span class="p">,</span> <span class="n">sup_t</span><span class="p">),</span> <span class="n">col</span><span class="o">=</span><span class="m">4</span><span class="p">)</span>
<span class="nf">legend</span><span class="p">(</span><span class="s">"topleft"</span><span class="p">,</span> <span class="nf">c</span><span class="p">(</span><span class="s">"95% CI"</span><span class="p">,</span> <span class="s">"Mean"</span><span class="p">),</span> <span class="n">lty</span><span class="o">=</span><span class="m">1</span><span class="p">,</span> <span class="n">col</span> <span class="o">=</span> <span class="nf">c</span><span class="p">(</span><span class="m">4</span><span class="p">,</span> <span class="m">2</span><span class="p">),</span><span class="n">bty</span> <span class="o">=</span><span class="s">"n"</span><span class="p">)</span>
</code></pre></div>
<p>Анализируя подобные графики можно составить мнение об изменчивости данных и об их различии. Вы уже убедились, что именно на основе информации о распределении, можно провести сравнение полученных результатов. Особенно это полезно в случае доверительных интервалов - если средние в данные интервалы не попадают (одно в интервал другого), то можно уверенно сказать, что выборки значимо отличаются.</p>
<h4 id="3-3-7">3.3.7 Проверка данных на нормальность</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Проверка экспериментально полученных данных на соответствие нормальному распределению очень часто встречается в статистических задачах (мы уже сталкивались с вами с таким требованием при разборе t-теста). Это необходимо, чтобы мы могли работать с арифметическим средним как с мерой центральной тенденции (иначе мы не сможем использовать изученные ранее подходы).</p>
<p>Один из <strong>самых простых способов</strong> проверки - просто построить гистограмму частот и сравнить ее вид с нормальным распределением при том же среднем и дисперсии. Однако, у такого подхода есть существенный недостаток - у нас нет числового критерия, а значит мы не можем доверять нашим выводам.</p>
<p><strong>Другой способ</strong> - сравнить p-уровни значимости (или соответствующие им квантили) для полученного экспериментально распределения и для нормального распределения с такими же параметрами (средним и СО). Такой график называется квантиль-квантиль графиком (qq plot, рис. 39). Особенно это удобно, когда в выборках мало данных и мы можем отобразить на графике каждое из них.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_39.png" alt="qq-plot" width="900px"/>
</td>
<td>
<i>
Рис. 39. Пример проверки на нормальность с помощью qq plot (больше примеров вы можете найти в интернете по запросу "qq plot with distribution example")
</i>
</td>
</tr>
</table>
</div>
<p>Вы можете построить данный график <a href="https://www.statology.org/q-q-plot-excel/">сами в MS Excel</a>. В приведенной ссылке дано немного некорректное приближение для квантиля, но хорошее описание процедуры построения графика. Для более корректного <strong>приближенного расчета квантиля</strong> из ранга переменной используйте формулу: <span class="math">\(\alpha = \frac{r - 1}{n - 1}\)</span> (где <span class="math">\(\alpha\)</span> - квантиль в долях от 1, <span class="math">\(r\)</span> - ранг экспериментального значения в выборке, <span class="math">\(n\)</span> - общее количество значений.).</p>
<blockquote>
<p><strong>Примечание.</strong> Чтобы исключить путаницу, разберем процедуру построения qq plot:</p>
<ol>
<li>Записываете все полученные данные для вашей выборки.</li>
<li>Упорядочиваете их по возрастанию.</li>
<li>Считаете для каждого значения его ранг (т.е. порядковый номер в зависимости от значения).</li>
<li>Используете ранг, чтобы вычислить квантиль в долях единицы для каждого значения (мы не будем вдаваться в подробности, но <span class="math">\(\alpha\)</span> - квантиль равен такому числу из распределения, что любая случайно взятая из выборки величина попадает левее этого числа с вероятностью <span class="math">\(\le \alpha\)</span>). По сути ранг это и есть квантиль, поскольку ранг величины показывает насколько она сдвинута в распределении влево или вправо. Но чтобы получить квантиль, нужно абсолютное значение ранга перевести в относительную величину. Для этого нужно вычесть из ранга 1 (поскольку <span class="math">\(\alpha \in [0, 1]\)</span> и разделить все на общее количество значений - 1 (для нормировки самого высокого ранга на 100 %). Таким образом, <span class="math">\(\alpha = \frac{r - 1}{n - 1}\)</span>.</li>
<li>Используя полученные значения квантилей рассчитать значение, соответствующие Z-распределению для данного квантиля.</li>
<li>Построить точечный график (scatterplot) “значения Z-распределения VS значения выборки” для каждого конкретного квантиля.</li>
</ol>
</blockquote>
<p>Таким образом, данные по оси 0Y соответствуют значениям экспериментального распределения без стандартизации (хотя можно встретить и стандартизованное представление). Данные по оси 0X соответствуют значениям стандартизованного нормального распределения (Z-распределения) с такими же средним и дисперсией. И каждое из данных по осям соответствует своему квантилю.</p>
<p><strong>Интерпретировать график qq plot</strong> можно следующим образом:</p>
<ol>
<li>Если точки находятся на прямой линии под <span class="math">\(45^o\)</span> (соответствует сравнению нормального распределения с нормальным), то наше распределение полностью соответствует нормальному.</li>
<li>Если точки выше или ниже линии - частота экспериментальных данных больше или меньше, чем у нормального распределения для данного квантиля (часть гистограммы будет выше или ниже, чем у нормального распределения в данной области, рис. 39 - обращайте внимание на знак значений для вашего распределения и Z-распределения).</li>
<li>0 на 0X qq-plot означает среднее значение и медиану (совпадают для Z-распределения).</li>
</ol>
<p>Пример кода на R. Рекомендую запустить и изучить как t-распределение отличается от нормального</p>
<div class="highlight"><pre><span></span><code><span class="c1"># random t-distribution data</span>
<span class="n">x</span> <span class="o"><-</span> <span class="nf">rt</span><span class="p">(</span><span class="m">100</span><span class="p">,</span> <span class="n">df</span><span class="o">=</span><span class="m">4</span><span class="p">)</span> <span class="o">+</span> <span class="m">20</span>
<span class="c1"># qq plot with comparison line</span>
<span class="nf">qqnorm</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">pch</span> <span class="o">=</span> <span class="m">1</span><span class="p">,</span> <span class="n">frame</span> <span class="o">=</span> <span class="kc">FALSE</span><span class="p">)</span>
<span class="nf">qqline</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">col</span> <span class="o">=</span> <span class="s">"steelblue"</span><span class="p">,</span> <span class="n">lwd</span> <span class="o">=</span> <span class="m">2</span><span class="p">)</span>
</code></pre></div>
<p>Еще одно <strong>важное применение графического подхода - проверка на выбросы</strong>.</p>
<p><strong>Выброс</strong> - это явно отклоняющееся значение, которое не принадлежит исследуемой выборке, но почему-то включено в нее (обычно экстремально большое или маленькое). Обычно, выбросы появляются вследствие человеческого фактора или грубой ошибке в эксперименте (например, забыли нагреть).</p>
<p>Такие значения нужно убирать из расчетов, иначе формулы начнут работать неверно (ведь они основаны на среднем значении, а оно очень чувствительно к выбросам).</p>
<p><strong>Третьим способом проверки на нормальность распределения</strong> является специальные тесты (считаются более достоверными, чем графический способ):</p>
<ul>
<li>Шапиро-Вилка;</li>
<li>Колмогорова-Смирнова.</li>
</ul>
<p>Они также работают по принципу расчета р-уровня значимости и проверки статистических гипотез (0-ая - исследуемое распределение не отличается от нормального, альтернативная - отличается). Это как раз тот редкий случай, когда полученный маленький р-уровень значимости сообщает нам плохую новость (что исследуемое распределение значимо отличается от нормального).</p>
<p>В любом статистическом пакете (включая MS Exel или RStudio) эти тесты уже реализованы. Можете смело их применять и сравнивать полученный р-уровень значимости с выбранным вами критическим значением (например, 0.05).</p>
<p>Если же мы получили свидетельство того, что <strong>наше распределение значимо отличается от нормального</strong>, то сравнить средние мы все еще можем, но уже по другому критерию: <strong>критерию Манна-Уитни (Whitney U-test)</strong>. Этот критерий переводит все наши данные в ранговую шкалу (как при расчете медианы) и сравнивает уже не средние, а средние ранги (по сути мы используем медиану для оценки, а не среднее). Такой критерий гораздо менее чувствителен к наличию отклонений от нормальности и к выбросам. Но он менее точен, чем t-критерий для нормальных распределений. Предлагаю вам самим поискать в интернете как применять эти тесты, поскольку в экспериментальной и лабораторной практике встречаться с ними вы будете крайне редко.</p>
<h4 id="3-3-8">3.3.8 Анализ выборок</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Помимо простого сравнения двух средних (с помощью t-критерия), часто необходимо провести анализ нескольких выборок. Просто применять попарное сравнением с помощью t-теста будет неверно, поскольку это приведет к так называемому <strong>эффекту множественных сравнений</strong> (но об этом мы поговорим позже).</p>
<p>В случае анализа 3 и более выборок мы должны применять <strong>дисперсионный анализ</strong>. В рамках этого курса мы разберем простейший случай <strong>однофакторного дисперсионного анализа</strong>, чтобы понять как он работает.</p>
<p>Довольно часто в практических задачах выборки для сравнения получаются при исследовании какого-либо категориального признака. Например, мы исследуем гранулометрический состав 3 типов промышленно производимых удобрений и пытаемся понять, влияет ли фактор типа удобрения на процент фракции менее 2 мм. Та переменная, которая будет разделять наши объекты на выборки (категориальная переменная с нескольким градациями) называется <strong>независимой переменной</strong>. А та количественная переменная, по которой мы сравниваем выборки, называется <strong>зависимая переменная</strong>. Другими словами мы сравниваем несколько распределений в зависимости от одного категориального фактора.</p>
<p>Допустим, у нас есть три группы измерений:</p>
<div class="math">$$
\begin{matrix}
No 1 & No 2 & No 3 \\
\hline
3 & 5 & 7 \\
1 & 3 & 6 \\
2 & 4 & 5 \\
\end{matrix}
$$</div>
<p>Сформулируем гипотезы:</p>
<div class="math">$$
H_0: \mu_1 = \mu_2 = \mu_3 \\
H_1: \text{ } !H_0
$$</div>
<blockquote>
<p><strong>Примечание.</strong> Математическая запись <span class="math">\(!H_0\)</span> говорит о том, что мы отрицаем нулевую гипотезу, т.е. хотя бы два средних из 3 не равны между собой (но мы ничего не говорим о том, какие это средние и т.д.). Обратите внимание, что 0 гипотеза говорит о средних ГС, т.е. предполагает, что все 3 выборки принадлежат одной ГС.</p>
</blockquote>
<p>Для решения задачи, <strong>предположим, что верна 0 гипотеза</strong>. Тогда мы можем найти общее среднее для всех групп:</p>
<div class="math">$$
\overline{\overline{X}} = \frac{3+1+2+5+3+4+7+6+5}{9} = \frac{36}{9} = 4
$$</div>
<p>и общую сумму квадратов (характеризует насколько высока изменчивость наших данных без учета разделения их на группы, Square Sum Total):</p>
<div class="math">$$
SST = (3-4)^2 + (1-4)^2 + ... + (6-4)^2 + (5-4)^2 = 30
$$</div>
<p>Общее количество степеней свободы (исходя из предположения, что это одна выборка) составит:</p>
<div class="math">$$
dF = N - 1 = 8
$$</div>
<p>Время задуматься <strong>из чего состоит общая изменчивость наших данных</strong>. Это всего 2 слагаемых.</p>
<ul>
<li>Межгрупповые изменчивость и степень свободы, т.е. насколько сильно значения разнесены друг от друга если сравнивать между группами (Square Sum Between).</li>
</ul>
<div class="math">$$
SSB = \sum_m n_m \cdot (\overline{X_m} - \overline{\overline{X}})^2 =
3(2-4)^2 + 3(4-4)^2 + 3(6-4)^2 = 24
$$</div>
<div class="math">$$
dF_B = c - 1 = 3-1 = 2
$$</div>
<p>где <span class="math">\(m\)</span> - номер группы, <span class="math">\(c\)</span> - количество групп.</p>
<ul>
<li>Внутригрупповые изменчивость и степени свободы, т.е. насколько сильно значения разнесены внутри групп (Square Sum Within).</li>
</ul>
<div class="math">$$
SSW = \sum_m \sum_n (x_n - \overline{X}) =\\
[(3-2)^2 + (1-2)^2 + (2-2)^2] +\\
[(5-4)^2 + (3-4)^2 + (4-4)^2] +\\
[(7-6)^2 + (6-6)^2 + (5-6)^2] = \\
2 + 2+ 2 = 6
$$</div>
<div class="math">$$
dF_W = N - c = 9 - 3 = 6
$$</div>
<p>где <span class="math">\(N\)</span> - количество данных во всех 3 группах, <span class="math">\(m\)</span> - номер группы, <span class="math">\(c\)</span> - количество групп, <span class="math">\(n\)</span> - количество данных в одной группе.</p>
<p>Проанализируем рассчитанные результаты. Общегрупповая изменчивость <span class="math">\(SST = SSB + SSW = 24 + 6 = 30\)</span> и основная ее часть обусловлена межгрупповой изменчивостью. Можно предположить, что наши группы значительно различаются.</p>
<p>Рассчитаем формальный показатель, который позволит нам получить вероятность такого вывода: <strong>F критерий</strong>.</p>
<div class="math">$$
F = \frac{\frac{SSB}{m-1}}{\frac{SSW}{N-m}} = \frac{\frac{24}{2}}{\frac{6}{6}} = 12
$$</div>
<blockquote>
<p><strong>Задача.</strong> Интерпретируйте значение F критерия на основании приведенной формулы.</p>
</blockquote>
<p>Теперь нужно рассчитать вероятность такого события и подтвердить / опровергнуть 0 гипотезу. Если верна 0 гипотеза и наши выборки берутся из одного распределения, то их средние отличались бы от среднего ГС (а значит и друг от друга) случайно и крайне не значительно (согласно ЦПТ). При этом внутри выборок была бы своя изменчивость, которая больше в <span class="math">\(\sqrt{n}\)</span> раз, чем изменчивость между средними (согласно все той же ЦПТ).</p>
<p>Другими словами, <strong><span class="math">\(F\)</span> критерий был бы меньше 1</strong>, а распределение (названное F-распределением или распределением Фишера) имело форму, представленную на рис. 40.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_40.png" alt="F-distribution" width="900px"/>
</td>
<td>
<i>
Рис. 40. F-распределение (изображение взято с en.wikipedia.org)
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Примечание.</strong> Такая форма распределения вызвана тем, что большинство F-значений при соблюдении 0 гипотезы были бы очень маленькими.</p>
</blockquote>
<p>Для нашего значения в 12 единиц, мы можем рассчитать вероятность по F-распределению аналогично предыдущим задачам с t-критерием. Используем <a href="https://www.medcalc.org/manual/f-table.php">таблицу</a> или <a href="https://gallery.shinyapps.io/dist_calc/">сайт с распределением</a>.</p>
<p>Если вы воспользуетесь сайтом, то обратите внимание, что там используют одностороннее распределение, поскольку F не может принимать отрицательные значения (т.е. двусторонний критерий физически не существует).</p>
<p>И <strong>ответ</strong>. Вероятность получить отклонение в 12 единиц или более составляет 0.008, что значительно меньше порогового значения доверительной вероятности в <span class="math">\(p=0.05\)</span>, а значит 0-ую гипотезу можно отклонить.</p>
<blockquote>
<p><strong>Примечание.</strong> Немного об обозначениях в дисперсионном анализе. Когда мы делим значение межгрупповой суммы квадратов на соответствующее число степеней свободы (число групп минус один), мы тем самым усредняем полученный показатель. Усредненное значение межгрупповой суммы квадратов называется <strong>межгрупповым средним квадратом</strong>.</p>
</blockquote>
<div class="math">$$
MS_{bg} = \frac{SSB}{df_{bg}} \\
df_{bg} = m - 1
$$</div>
<blockquote>
<p>Отношение внутригрупповой суммы квадратов к соответствующему числу степеней свободы (число всех наблюдений минус число групп) — это <strong>внутригрупповой средний квадрат</strong></p>
</blockquote>
<div class="math">$$
MS_{wg} = \frac{SSW}{df_{wg}} \\
df_{wg} = N - m
$$</div>
<blockquote>
<p>Поэтому <strong>формула F-значения (F-отношение) часто записывается как</strong>:</p>
</blockquote>
<div class="math">$$
F = \frac{MS_{bg}}{MS_{wg}}
$$</div>
<blockquote>
<p><strong>Примечание.</strong> По своей сути дисперсионный анализ делает ту же работу, что и t-критерий - сравнивает 2 выборки с точки зрения их средних. Но его преимуществом является то, что сравнивать мы можем сразу несколько групп и как вы увидите далее, не только по одному фактору.</p>
</blockquote>
<h4 id="3-3-9">3.3.9 Множественное сравнение</h4>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Мы уже разобрали 2 основных критерия сравнений выборок: t и F критерии. И казалось бы, они выполняют одну и ту же работу: сравнивают выборки. Почему же нельзя использовать просто попарное сравнение и ограничиться этим? Поскольку такой подход вызовет <strong>эффект множественного сравнения</strong>. Именно по этой причине мы не можем взять t-критерий и начать просто сравнивать результаты (по парно).</p>
<p>Давайте смоделируем ситуацию, когда у нас есть генеральная совокупность и мы случайным образом извлекаем из нее выборки и попарно сравниваем их средние между собой.</p>
<div class="highlight"><pre><span></span><code><span class="n">false_alarm1</span> <span class="o"><-</span> <span class="nf">function</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span> <span class="p">{</span>
<span class="c1"># Создаем пустой дата фрейм с n наблюдениями (строками) и m выборками (столбцами)</span>
<span class="n">d</span> <span class="o"><-</span> <span class="nf">data.frame</span><span class="p">(</span><span class="nf">matrix</span><span class="p">(</span><span class="m">0</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">))</span>
<span class="c1"># Создаем матрицу возможных сочетаний переменных для будущего t-теста</span>
<span class="n">s</span> <span class="o"><-</span> <span class="nf">combn</span><span class="p">(</span><span class="m">1</span><span class="o">:</span><span class="n">m</span><span class="p">,</span> <span class="m">2</span><span class="p">)</span>
<span class="c1"># Создаем вектор с длинной 1000 для последующей записи 1000 извлечений выборок</span>
<span class="n">x</span> <span class="o"><-</span> <span class="nf">vector</span><span class="p">(</span><span class="s">"numeric"</span><span class="p">,</span> <span class="m">1000</span><span class="p">)</span>
<span class="c1"># Создаем собственную упрощенную версию t теста, которая возвращает только</span>
<span class="c1"># p value (значительно ускоряет всю функцию), но можете воспользоваться и встроенной функцией</span>
<span class="n">t_test_pval</span> <span class="o"><-</span> <span class="nf">function</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="p">{</span>
<span class="n">se</span> <span class="o"><-</span> <span class="nf">sqrt</span><span class="p">((</span><span class="nf">var</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">+</span> <span class="nf">var</span><span class="p">(</span><span class="n">y</span><span class="p">))</span><span class="o">/</span><span class="n">n</span><span class="p">)</span>
<span class="n">t_stat</span> <span class="o"><-</span> <span class="p">(</span><span class="nf">mean</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">-</span> <span class="nf">mean</span><span class="p">(</span><span class="n">y</span><span class="p">))</span><span class="o">/</span><span class="n">se</span>
<span class="n">df</span> <span class="o"><-</span> <span class="n">n</span> <span class="o">+</span> <span class="n">n</span> <span class="o">-</span> <span class="m">2</span>
<span class="n">pval</span> <span class="o"><-</span> <span class="m">2</span><span class="o">*</span><span class="nf">pt</span><span class="p">(</span><span class="nf">abs</span><span class="p">(</span><span class="n">t_stat</span><span class="p">),</span> <span class="n">df</span><span class="p">,</span> <span class="n">lower.tail</span> <span class="o">=</span> <span class="bp">F</span><span class="p">)</span>
<span class="n">pval</span>
<span class="p">}</span>
<span class="nf">for </span><span class="p">(</span><span class="n">q</span> <span class="n">in</span> <span class="m">1</span><span class="o">:</span><span class="m">1000</span><span class="p">)</span> <span class="p">{</span>
<span class="n">d</span> <span class="o"><-</span> <span class="nf">data.frame</span><span class="p">(</span><span class="nf">apply</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="m">2</span><span class="p">,</span> <span class="nf">function</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="nf">rnorm</span><span class="p">(</span><span class="n">n</span><span class="p">)))</span>
<span class="c1"># Заполняем пустой дата фрейм случайными выборками,</span>
<span class="c1"># т.е. извлекаем из г.с. m-выборок</span>
<span class="nf">for </span><span class="p">(</span><span class="n">i</span> <span class="n">in</span> <span class="m">1</span><span class="o">:</span><span class="nf">ncol</span><span class="p">(</span><span class="n">s</span><span class="p">))</span> <span class="p">{</span>
<span class="n">TEST</span> <span class="o"><-</span> <span class="nf">t_test_pval</span><span class="p">(</span><span class="n">d</span><span class="p">[,</span> <span class="n">s</span><span class="p">[</span><span class="m">1</span><span class="p">,</span> <span class="n">i</span><span class="p">]],</span> <span class="n">d</span><span class="p">[,</span> <span class="n">s</span><span class="p">[</span><span class="m">2</span><span class="p">,</span> <span class="n">i</span><span class="p">]])</span>
<span class="nf">if</span><span class="p">(</span><span class="n">TEST</span> <span class="o"><</span> <span class="n">a</span><span class="p">)</span> <span class="n">x</span><span class="p">[</span><span class="n">q</span><span class="p">]</span> <span class="o"><-</span> <span class="m">1</span>
<span class="nf">if</span><span class="p">(</span><span class="n">TEST</span> <span class="o"><</span> <span class="n">a</span><span class="p">)</span> <span class="n">break</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">x</span> <span class="o"><-</span> <span class="nf">as.data.frame</span><span class="p">(</span><span class="nf">table</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
<span class="nf">barplot</span><span class="p">(</span><span class="n">x</span><span class="o">$</span><span class="n">Freq</span><span class="p">,</span> <span class="n">names.arg</span> <span class="o">=</span> <span class="nf">c</span><span class="p">(</span><span class="s">"No"</span><span class="p">,</span> <span class="s">"Yes"</span><span class="p">),</span>
<span class="n">col</span> <span class="o">=</span> <span class="nf">c</span><span class="p">(</span><span class="s">"Red"</span><span class="p">,</span> <span class="s">"Blue"</span><span class="p">),</span>
<span class="n">main</span> <span class="o">=</span> <span class="n">x</span><span class="o">$</span><span class="n">Freq</span><span class="p">[</span><span class="m">2</span><span class="p">]</span><span class="o">/</span><span class="m">1000</span><span class="o">*</span><span class="m">100</span><span class="p">,</span>
<span class="n">ylab</span> <span class="o">=</span> <span class="s">"Quantity"</span><span class="p">,</span>
<span class="n">xlab</span> <span class="o">=</span> <span class="s">"significant differences"</span><span class="p">,</span>
<span class="n">ylim</span> <span class="o">=</span> <span class="nf">c</span><span class="p">(</span><span class="m">0</span><span class="p">,</span><span class="m">1000</span><span class="p">))</span>
<span class="p">}</span>
<span class="nf">false_alarm1</span><span class="p">(</span><span class="m">2</span><span class="p">,</span> <span class="m">20</span><span class="p">,</span> <span class="m">0.05</span><span class="p">)</span>
</code></pre></div>
<p>В результате 1000 кратного извлечения по 2 выборки из одной ГС при попарном сравнении средних <strong>мы получаем статистически значимое различие между 2 выборками из одной ГС в <span class="math">\(\approx 5 %\)</span> случаях совершенно случайно</strong>! И это при малом количестве извлекаемых выборок. Для 8 выборок потребуется произвести по <span class="math">\(\frac{8 * (8-1)}{2} = 28\)</span> сравнений. И если мы проведем эксперимент с попарным сравнением, то мы получим ложное статистически значимое различие уже в <span class="math">\(\approx 52 %\)</span> случаев! Проверьте это с помощью кода.</p>
<p>И <strong>чем больше попарных сравнений, тем больше ложных срабатываний</strong>!</p>
<p>Происходит это по тому, что чем больше попарных сравнений, тем больше шанс ошибиться. И тогда для каждого извлечения выборок с их попарным сравнением хотя бы одна ошибка, но произойдет, что приведет нас к ложному выводу для всей совокупности выборок.</p>
<p>Таким образом <strong>вредный совет</strong>: если вы ходите получить значимое различие - проведите один и тот же эксперимент 1000 раз и вы получите хотя бы одно значимое различие между данными разных подходов (рис. 41)…</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_41.png" alt="xkcd" width="900px"/>
</td>
<td>
<i>
Рис. 41. Пример эффекта множественного сравнения с <a href="https://xkcd.com">https://xkcd.com</a>.
</i>
</td>
</tr>
</table>
</div>
<p>Таким образом, при множественном сравнении нам <strong>необходимо корректировать порог р-уровня значимости</strong>, при котором мы принимаем решения. Это важно не только при попарном сравнении, но и в случае дисперсионного анализа при исследовании разных категориальных факторов. Поправки на множественное сравнение можно ввести разными путями.</p>
<ul>
<li>Поправка Бонферони (популярная, но ее никто не любит) - предлагает пропорционально корректировать уровень значимости <span class="math">\(\alpha\)</span>, при котором мы отвергаем 0 гипотезу пропорционально количеству парных сравнений <span class="math">\(\alpha = \frac{\alpha}{n}\)</span>. Но проблема в том, что она очень грубая и мы можем очень сильно снизить порог отклонения 0 гипотезы (т.е. упустить реальные открытия).</li>
<li>Поправка Тьюки (Tukey HSD) - модифицирует t-критерий.</li>
<li>False Discovery Rate, etc.</li>
</ul>
<p>Не стоит забывать и о ключевом приеме - грамотной обработке данных и планировании эксперимента. Нужно в 1-ую очередь правильно формулировать гипотезу и повторять сравнительные эксперименты для нее. Если она верна, то в большинстве случаем, вы найдете различия.</p>
<p>Более подробно о различных поправках предлагаю Вам посмотреть самим. Также за бортом осталась тема многофакторного сравнения и ANalysis Of VAriance (ANOVA), которая является логическим продолжением нашего подхода (неплохо написано в <a href="https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BF%D0%B5%D1%80%D1%81%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7">wiki</a>). Если вам интересны эти темы и статистика в целом, предлагаю начать самостоятельное ознакомление с этих курсов на stepic.org:</p>
<ol>
<li><a href="https://stepik.org/course/76/syllabus">Основы статистики</a>;</li>
<li><a href="https://stepik.org/course/524/syllabus">Основы статистики. Часть 2.</a>;</li>
<li><a href="https://stepik.org/course/2152/promo">Основы статистики. Часть 3.</a>.</li>
</ol>
<h3 id="3-4">3.4 Вопросы по разделу</h3>
<p><a href="#0-TOC">К оглавлению</a></p>
<ol>
<li>Если мы провели исследование с целью выявить уровень знаний в области планирования эксперимента на 100 студентах кафедры химических технологий ЧГУ, то на какую совокупность мы можем распространить наши выводы?</li>
<li>Если объем выборки достаточно велик (больше 100), то является ли такая выборка репрезентативной.</li>
<li>Предположим, после лекции по статистике, один студент решил выяснить, как хорошо студенты психологического факультета разбираются в этом предмете. Он подготовил серию заданий и пригласил 30 своих друзей с факультета принять участие в тестировании. Исследователь утверждает, что он сформировал простую случайную выборку. Так ли это?</li>
<li>В каких случаях вместо среднего значения лучше использовать моду или медиану в качестве центральной тенденции?</li>
<li>
<p>Укажите, в какой из выборок наибольшее стандартное отклонение (задание решить без расчетов):</p>
<ol>
<li>1 3 2 4 5 7 1 8</li>
<li>100 300 250 400 230 280 320 112</li>
<li>15 10 13 7 28 31 20 32</li>
</ol>
</li>
<li>
<p>Как соотносятся дисперсии двух выборок (постарайтесь решить данное задание не рассчитывая значения дисперсии, а ее свойствами):</p>
<ul>
<li>1 3 5 6 6 7 9 11</li>
<li>5 7 9 10 10 11 13 15</li>
</ul>
</li>
<li>
<p>Может ли стандартное отклонение принимать отрицательные значения?</p>
</li>
<li>Соотнесите распределения и ящики с усами (рис. q-1).</li>
</ol>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig-q_1.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. q-1.
</i>
</td>
</tr>
</table>
</div>
<ol start="9">
<li>
<p>Если отдельное наблюдение в нашей выборке равняется 1000, при условии, что выборочное среднее равняется 10, то:</p>
<ul>
<li>такое наблюдение в принципе не может принадлежать выборке со средним значением равным 10, так как в 100 раз больше, чем выборочное среднее, а вероятность такого события стремится к нулю;</li>
<li>можно рассматривать как необычное (выброс), т.к. оно очень далеко отклоняется от среднего значения;</li>
<li>чтобы судить о том, насколько необычным является это наблюдение для выборки, необходимо знать, чему равняется стандартное отклонение.</li>
</ul>
</li>
<li>
<p>Считается, что значение IQ (уровень интеллекта) у людей имеет нормальное распределение со средним значением равным 100 и стандартным отклонением равным 15 (M = 100, sd = 15). Приблизительно рассчитайте какой процент людей обладает <span class="math">\(IQ \ge 125\)</span>? А какой процент людей обладает <span class="math">\(70 \ge IQ \le 112\)</span>?</p>
</li>
<li>Рассчитайте стандартную ошибку среднего при N = 100, если выборочное среднее равняется 10, а дисперсия 4.</li>
<li>
<p>Если мы рассчитали 95% доверительный интервал для среднего значения, то какие из следующих утверждений являются верными?</p>
<ul>
<li>Мы можем быть на 95% уверены, что истинное среднее значение принадлежит рассчитанному доверительному интервалу.</li>
<li>Истинное среднее значение точно принадлежит рассчитанному доверительному интервалу.</li>
<li>Истинное среднее значение точно превышает нижнюю границу 95% доверительного интервала.</li>
<li>Если многократно повторять эксперимент, для каждой выборки рассчитывать свой доверительный интервал, то в 95 % случаев истинное среднее будет находится внутри доверительного интервала.</li>
<li>Если многократно повторять эксперимент, то 95 % выборочных средних значений будут принадлежать рассчитанному нами доверительному интервалу.</li>
</ul>
</li>
<li>
<p>Рассчитайте 99% доверительный интервал для следующего примера: <span class="math">\(\bar{x}=10, sd=5, n=100\)</span>.</p>
</li>
<li>
<p>Выберете верные утверждения</p>
<ul>
<li>Чем меньше p уровень значимости, тем сильнее полученные различия.</li>
<li>Если бы в исследовании мы получили p = 0.9, это означало бы, что верна нулевая гипотеза.</li>
<li>Все утверждения неверны.</li>
<li>Статистически значимый результат, всегда означает ценный и осмысленный результат.</li>
<li>Если p уровень значимости равен 0.003, то вероятность того, что верна нулевая гипотеза (новый препарат не влияет на скорость выздоровления) также равняется 0.003.</li>
</ul>
</li>
<li>
<p>Если в определенной ситуации весьма рискованно отклонить нулевую гипотезу, когда она на самом деле верна, то лучше использовать показатель <span class="math">\(\alpha\)</span>:</p>
<ul>
<li>0.001,</li>
<li>0.05,</li>
<li>0.1,</li>
<li>0.5?</li>
</ul>
</li>
<li>
<p>Для выборки в 15 наблюдений при помощи t-теста проверяется нулевая гипотеза, что <span class="math">\(\mu=10\)</span>. Рассчитанное t-значение = -2 (t = -2). Рассчитайте p-уровень значимости для такого события (можете использовать уже знакомый нам <a href="https://gallery.shinyapps.io/dist_calc/">сайт</a>, укажите в настройках, что вы работаете с t - распределением и выберите нужное число степеней свободы).</p>
</li>
<li>
<p>В первом эксперименте для сравнения двух средних <span class="math">\(\bar{X_{1}}=17, \bar{X_{2}}=16\)</span> применялся t-критерий Стьюдента, и эти различия оказались значимы (p = 0.001). Во втором исследовании, также при помощи t - критерия, сравнивались два средних <span class="math">\(\bar{X_{1}}=17, \bar{X_{2}}=36\)</span> и эти различия не значимы при p = 0.8. В чем может быть причина таких результатов?</p>
<ul>
<li>Возможно, во втором эксперименте больше объем выборок и меньше изменчивость исследуемого признака.</li>
<li>Возможно, в первом эксперименте больше объем выборок и меньше изменчивость исследуемого признака.</li>
<li>Ни размер выборки, ни изменчивость исследуемого признака не может быть причиной таких результатов.</li>
</ul>
</li>
<li>
<p>Соотнесите распределения и qq-plot.</p>
</li>
</ol>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig-q_2.png" alt="example" width="900px"/>
</td>
<td>
<i>
Рис. q-2.
</i>
</td>
</tr>
</table>
</div>
<ol start="19">
<li>Если для проверки нормальности распределения на выборке в 100 наблюдений мы применили Shapiro-Wilk test и получили p-уровень значимости, равный 0.001, то:<ul>
<li>распределение является бимодальным;</li>
<li>распределение значимо отклоняется от нормального.</li>
</ul>
</li>
</ol>
<h2 id="4">4. Построение точных моделей. Аналитическая практика</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Пришло время заключительной части нашего курса - применение полученных знаний для построения точных моделей и градуировочных зависимостей, которые часто используются в аналитической химии. Однако для этого нам понадобится понимание новых тем статистического анализа: <strong>корреляции и регрессии</strong>.</p>
<h2 id="4-1">4.1 Корреляция</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p><strong>Корреляция</strong> - степень взаимосвязи переменных. Насколько одна переменная статистически связана с другой. В нашем случае мы рассмотрим две переменный и разберемся что такое положительная и отрицательная корреляция и о чем нам может сказать коэффициент корреляции.</p>
<p>Надеюсь что смог вас убедить, что одним из самых простых способов что-либо понять является визуализация. Давайте рассмотрим следующие примеры взаимосвязи 2 величин (рис. 42).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_42.png" alt="correlation" width="900px"/>
</td>
<td>
<i>
Рис. 42. Примеры корреляции 2 величин (взято с <a href="http://www.cqeacademy.com/cqe-body-of-knowledge/continuous-improvement/quality-control-tools/the-scatter-plot-linear-regression/">сайта CQE Academy</a>).
</i>
</td>
</tr>
</table>
</div>
<p>На осях графика обычно откладывают значения соответствующих переменных и оценивают их вид взаимосвязи (как изменение одной переменной будет сказываться на изменении другой переменной).</p>
<p>Например, на подобном визуальном анализе взаимосвязей основан довольно широко используемый в анализе больших массивов данных метод попарного сравнения признаков (рис 43).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_43.png" alt="binary correlation" width="900px"/>
</td>
<td>
<i>
Рис. 43. <a href="https://www.zldm.ru/jour/article/view/526#">Пример</a> использования попарного сравнения признаков для 3 типов объектов в data science.
</i>
</td>
</tr>
</table>
</div>
<p>Такой тип графиков называется <strong>диаграмма рассеяния (scetterplot)</strong> и многие статистические пакеты (включая R и MS Exel) обладают удобными механизмами их построения и показывают значения 2 переменных для каждого из исследованных объектов.</p>
<p>После того, как мы поняли и увидели корреляцию, нужно добавить объективности - ввести некий <strong>показатель, который оценивал бы в численном виде степень и вид взаимосвязи наших величин</strong>. И такой показатель есть - это <strong>коэффициент корреляции (<span class="math">\(r\)</span>)</strong>.</p>
<p>Давайте попробуем логически вывести данный коэффициент. Воспользуемся для этого связью 2 переменных (рис 44).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_44.png" alt="r" width="900px"/>
</td>
<td>
<i>
Рис. 44. Вывод коэффициента корреляции.
</i>
</td>
</tr>
</table>
</div>
<p>Обозначим на графике средние 2 признаков. Наша диаграмма рассеивания разбилась на 4 области, которые обозначают тип взаимосвязи в зависимости от кодированного значения признака (положительная или отрицательная). Анализируя количество данных в каждом квадрате мы можем выяснить <strong>знак корреляции</strong>.</p>
<p>Следующий шаг - рассчитаем отклонение каждого значения от среднего, сложим и усредним эти отклонения с учетом степеней свобод:</p>
<div class="math">$$
(x_i - \overline{X})(y_i - \overline{Y}) \\
\sum_i (x_i - \overline{X})(y_i - \overline{Y}) \\
cov = \frac{\sum_i (x_i - \overline{X})(y_i - \overline{Y})}{N-1}
$$</div>
<p>Полученный показатель называется <strong>ковариацией</strong>.</p>
<p>Обратите внимание, что знак этого произведения будет зависеть от того, в каком из 4 квадратов находятся наши данные. В нашем случае большинство из рассчитанных отклонений положительные, поскольку большая часть точек находится в I или III квадрате.</p>
<p>Полученный параметр <strong>показывает нам силу и тип взаимосвязи переменных</strong>: чем он больше, тем сильнее связаны переменные, а знак ковариации показывает нам направление связи.</p>
<p>Осталось добавить последний штрих: <strong>сделать нашу ковариацию универсальной для сравнения различных величин</strong>. Для этого нужна нормировка (чтобы уйти от абсолютных величин). Полученную ковариацию нужно разделить на величину изменчивости обоих признаков, т.е. на их стандартные отклонения:</p>
<div class="math">$$
r_{xy} = \frac{cov}{\sigma_x \sigma_y} \in [-1; 1]
$$</div>
<blockquote>
<p><strong>Задача.</strong> Как вы думаете, почему нужно уходить от абсолютных величин, чем это мешает нам в случае сравнения?</p>
</blockquote>
<p>Таким образом мы получили <strong>коэффициент корреляции (или коэффициент корреляции Пирсона)</strong>. Многие из вас знакомы с коэффициентом корреляции и представляли его слегка по другому, давайте произведем некоторые дополнительные вычисления:</p>
<div class="math">$$
r_{xy} = \frac{cov_{xy}}{\sigma_x \sigma_y} = \\
\frac{\sum (x_i - \overline{X})(y_i - \overline{Y})}{(N-1)\sigma_x \sigma_y} = \\
\frac{\sum (x_i - \overline{X})(y_i - \overline{Y})}{(N-1)\sqrt{\frac{\sum (x_i - \overline{X})^2}{N-1}}\sqrt{\frac{\sum (y_i - \overline{Y})^2}{N-1}}} = \\
\frac{\sum (x_i - \overline{X})(y_i - \overline{Y})}{\sqrt{\sum (x_i - \overline{X})^2}\sqrt{\sum (y_i - \overline{Y})^2}}
$$</div>
<p>Я думаю именно в таком виде вы могли быть знакомы с коэффициентом корреляции.</p>
<p>Посмотреть, как коэффициент корреляции влияет на связь величин вы можете на <a href="http://rpsychologist.com/d3/correlation/">сайте</a>.</p>
<p>На том же сайте приведена еще одна важная величина - <strong>коэффициент детерминации</strong> (или общей дисперсии, shared variance), который равен квадрату коэффициента корреляции и показывает какая часть изменчивости одной переменной может быть объяснена другой переменной (т.е. насколько сильно одна дисперсия зависит от другой): <span class="math">\(R^2 \in [0; 1]\)</span>. Более подробны мы рассмотрим его в случае линейной регрессии.</p>
<blockquote>
<p><strong>Пример.</strong> Давайте используем коэффициент корреляции для проверки статистических гипотез на примере случайно сгенерированных данных. Пусть</p>
</blockquote>
<div class="math">$$
H_0: r_{xy}=0 \\
H_1: r_{xy} \neq 0
$$</div>
<blockquote>
<p>Обратите внимание - мы сформулировали двунаправленную альтернативную гипотезу (т.е. не говорим в какую сторону направлена зависимость, просто говорим, что ее нет и выборки не связаны).</p>
<p>Рассчитаем р-уровень значимости на основании t-критерия для <span class="math">\(dF = N-2\)</span> степеней свобод (т.к. работаем с 2 переменными). Мы не будем подробно останавливаться на расчете, для него я рекомендую использовать специализированное ПО (в нашем случае RStudio):</p>
</blockquote>
<div class="highlight"><pre><span></span><code><span class="n">N</span> <span class="o"><-</span> <span class="m">50</span>
<span class="n">x</span> <span class="o"><-</span> <span class="nf">rnorm</span><span class="p">(</span><span class="n">n</span> <span class="o">=</span> <span class="n">N</span><span class="p">,</span> <span class="n">mean</span> <span class="o">=</span> <span class="m">0</span><span class="p">,</span> <span class="n">sd</span> <span class="o">=</span> <span class="m">1</span><span class="p">)</span> <span class="c1"># генерируем данные</span>
<span class="n">y</span> <span class="o"><-</span> <span class="nf">rnorm</span><span class="p">(</span><span class="n">n</span> <span class="o">=</span> <span class="n">N</span><span class="p">,</span> <span class="n">mean</span> <span class="o">=</span> <span class="m">0</span><span class="p">,</span> <span class="n">sd</span> <span class="o">=</span> <span class="m">1</span><span class="p">)</span> <span class="c1"># генерируем данные</span>
<span class="nf">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">lwd</span><span class="o">=</span><span class="m">5</span><span class="p">)</span>
<span class="nf">cor.test</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
</code></pre></div>
<blockquote>
<p>Результатом будет примерно следующее (график изучите сами в RStudio):</p>
</blockquote>
<div class="highlight"><pre><span></span><code><span class="n">data</span><span class="o">:</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="n">and</span><span class="w"> </span><span class="n">y</span><span class="w"></span>
<span class="n">t</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1.2265</span><span class="o">,</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">48</span><span class="o">,</span><span class="w"> </span><span class="n">p</span><span class="o">-</span><span class="n">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.226</span><span class="w"></span>
<span class="n">alternative</span><span class="w"> </span><span class="n">hypothesis</span><span class="o">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="n">correlation</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">not</span><span class="w"> </span><span class="n">equal</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="mi">0</span><span class="w"></span>
<span class="mi">95</span><span class="w"> </span><span class="n">percent</span><span class="w"> </span><span class="n">confidence</span><span class="w"> </span><span class="n">interval</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="o">-</span><span class="mf">0.1093331</span><span class="w"> </span><span class="mf">0.4317197</span><span class="w"></span>
<span class="n">sample</span><span class="w"> </span><span class="n">estimates</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">cor</span><span class="w"></span>
<span class="mf">0.1743197</span><span class="w"></span>
</code></pre></div>
<blockquote>
<p>Обратите внимание, что мы рассчитали коэффициент корреляции, t-статистику и р-уровень значимости для нее. На основании полученных данных нельзя отвергнуть 0 гипотезу, а значит данные действительно случайны (что и требовалось доказать).</p>
</blockquote>
<p>Как вы думаете, если коэффициент корреляции равен 0,7, то такая взаимосвязь всегда будет статистически достоверна (p - уровень значимости обязательно будет меньше 0.05)?</p>
<p>Так вот нет. <strong>Высокая корреляция не обязательно означает статистически значимую взаимосвязь</strong>. Чтобы говорить о взаимосвязи, нужно иметь представление о степенях свободы (т.е. на скольких измерениях сделан подобный вывод). <strong>Если у нас df = 3, то есть, всего 5 наблюдений в каждой из выборок, то мы должны получить коэффициент корреляции, равный или больший, чем 0.98769, чтобы p-value стал меньше 0.05 и мы смогли утверждать о том, в ГС коэффициент корреляции не равен нулю (данные взяты из <a href="http://tehtab.ru/Guide/GuideMathematics/TheTheoryOfProbabilityAndStatistics/PirsonVsSignificance/">таблиц</a>)</strong>! Того же вывода можно добиться изменяя число степеней свобод в коде R, приведенном выше. В любом случае, нам нужно рассчитывать р-уровень значимости и анализировать статистические гипотезы, чтобы быть уверенными в наличии взаимосвязи в ГС.</p>
<blockquote>
<p><strong>Примечание.</strong> Именно по этому в аналитической химии всегда требуются высокие коэффициенты корреляции. На основании малого количества данных (обычно 5 точек для градуировки) нам нужно сделать вывод обо всей генеральной совокупности (все возможные подобные эксперименты при данных условиях).</p>
</blockquote>
<h5><strong>Условия применения коэффициента корреляции Пирсона.</strong></h5>
<p>Как и у любого другого статистического критерия, в нашем случае есть некоторые особенности и ограничения в применении критерия корреляции.</p>
<ol>
<li>Характер взаимосвязи данных должен быть линейный и монотонный (можете подробнее поискать определения данных слов в википедии). Возможно, для этого придется разбивать вашу выборки на отдельные диапазоны - подвыборки (частый прием в аналитической химии).</li>
<li>Должны быть соблюдены следующие характеристики переменных: отсутствие выбросов и нормальность распределения (поскольку идея коэффициента корреляции связана со средним значением, а его представительность как центра очень чувствительна к этим условиям).</li>
<li>Всегда помните: <strong>корреляция не доказывает причинно-следственную связь</strong>! Выявление такой связи - задача не метода, а экспериментатора. Никакой статистический метод не установит причины. Он лишь покажет как факторы связаны друг с другом и может подтвердить значимость различий, а выводы - делайте сами.</li>
<li>Всегда помните о возможном наличии 3-ей переменной. Это такая переменна, которую мы не рассматриваем, но которая связана с 1 и 2 рассматриваемым признаком и обеспечивает их корреляцию (поищите в интернете <a href="https://duckduckgo.com/?q=%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B5%D1%81%D0%BD%D1%8B%D0%B5+%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%B8&t=ffab&ia=web">“интересные корреляции”</a> и подумайте, какая там может быть третья переменная. Или вот, статья на <a href="https://habr.com/ru/post/236503/">хабре</a>).</li>
</ol>
<p>Если с выполнением необходимых условий у нас проблемы, можем использовать некоторые непараметрические аналоги, например <strong>коэффициент корреляции Спирмана или тау Кендалла</strong> (переходят от реальных значений к ранжированным, т.е. к медиане, как мере центральной тенденции).</p>
<p><strong>Коэффициент корреляции Спирмана:</strong></p>
<div class="math">$$
r_s = 1 - \frac{6 \sum_i d_i^2}{N(N^2-1)}
$$</div>
<p>где <span class="math">\(d\)</span> - разность рангов.</p>
<blockquote>
<p><strong>Пример.</strong> Рассчитаем коэффициент корреляции Спирмана для следующих данных:</p>
</blockquote>
<div>
<table>
<thead>
<tr>
<th>X</th>
<th>Y</th>
<th>rank X</th>
<th>rank Y</th>
<th>d^2</th>
</tr>
</thead>
<tbody>
<tr>
<td>3</td>
<td>-1</td>
<td>1</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>5</td>
<td>4</td>
<td>2</td>
<td>4</td>
<td>4</td>
</tr>
<tr>
<td>7</td>
<td>4.5</td>
<td>3</td>
<td>5</td>
<td>4</td>
</tr>
<tr>
<td>9</td>
<td>8.5</td>
<td>4</td>
<td>7</td>
<td>9</td>
</tr>
<tr>
<td>10</td>
<td>12</td>
<td>5</td>
<td>10</td>
<td>25</td>
</tr>
<tr>
<td>11</td>
<td>8</td>
<td>6</td>
<td>6</td>
<td>0</td>
</tr>
<tr>
<td>11.5</td>
<td>9</td>
<td>7</td>
<td>9</td>
<td>4</td>
</tr>
<tr>
<td>12</td>
<td>9</td>
<td>8</td>
<td>8</td>
<td>0</td>
</tr>
<tr>
<td>14</td>
<td>18</td>
<td>9</td>
<td>12</td>
<td>9</td>
</tr>
<tr>
<td>17</td>
<td>17</td>
<td>10</td>
<td>11</td>
<td>1</td>
</tr>
<tr>
<td>30</td>
<td>1</td>
<td>11</td>
<td>2</td>
<td>81</td>
</tr>
<tr>
<td>32</td>
<td>2</td>
<td>12</td>
<td>3</td>
<td>81</td>
</tr>
</tbody>
</table>
</div>
<blockquote>
<p>Тогда <span class="math">\(r_s = 0.23\)</span>, при <span class="math">\(r = -0.1\)</span>, что все-таки лучше, чем ничего.</p>
</blockquote>
<h2 id="4-2">4.2 Регрессия с одной независимой переменной</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Следующим шагом является построение линейной модели и оценка ее статистической значимости. Мы уже сталкивались с таким заданием при планировании и анализе эксперимента. Здесь мы приведем некоторые статистические особенности таких моделей и способа их построения. Для этого мы рассмотрим <strong>одномерный регрессионным анализ</strong>, который позволяет проверять гипотезы о взаимосвязи одной количественной зависимой переменной (отклик) и несколькими независимыми переменными (измеряемые значения). Но в нашем случае мы разберем <strong>самый простой и наиболее часто встречающийся вариант - простой линейной регрессией</strong>. С помощью этого метода можно исследовать взаимосвязь только двух переменных, но принцип работы и интерпретация результата будут аналогичны любой регрессии. Частным примером являются градиуровочные кривые (или уравнения связи) для аналитических методов (когда мы пытаемся найти концентрацию в зависимости от аналитического сигнала).</p>
<p>Вот несколько <strong>важных терминов</strong>:</p>
<ul>
<li>зависимая переменная (отклик, располагается на оси 0Y) - для которой ищем уравнение (т.е. пытаемся рассчитать ее из эксперимента).</li>
<li>независимая переменная (фактор, предиктор, располагается на 0X) - та, которую измеряем в ходе эксперимента.</li>
<li>линия регрессии - линия, отображающая направление взаимосвязи и описывающая распределение данных (т.е., чтобы каждая точка была максимально близко к нашей линии при прохождение ее через центр облака точек).</li>
</ul>
<p>Давайте попробуем рассчитать положение интересующей нас линии, которая покажет нам взаимосвязь 2 переменных. Общее уравнение прямой:</p>
<div class="math">$$
y = b_0 + b_1 x
$$</div>
<p>где <span class="math">\(b_0\)</span> - свободный член (intercept, отвечает за то место, где наша линия пересекает ось 0Y); <span class="math">\(b_1\)</span> - наклон, чувствительность (slope, отвечает за направление линии (верх/низ) и угол наклона линии).</p>
<blockquote>
<p><strong>Примечание</strong>. Рекомендую вернуться к 1 части планирования эксперимента и соотнести модели экспериментов с материалом по линейной регрессии.</p>
</blockquote>
<p>Для нахождения коэффициентов (параметры линейной регрессии) используется уже упоминавшийся метод наименьших квадратов (МНК). Из названия следует, что этот метод минимизирует сумму квадратов отклонений (<strong>остатков</strong>) каждой точки от прямой.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig_44.png" alt="regression" width="900px"/>
</td>
<td>
<i>
Рис. 44. Принцип работы МНК для построения линейной регрессии.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Задача.</strong> Вспомните/подумайте почему мы используем квадрат остатков с точки зрения статистики?</p>
</blockquote>
<p>Вывод формул мы оставим за кадров и напишем только конечные формулы для коэффициентов:</p>
<div class="math">$$
b_1 = \frac{sd_y}{sd_x} \cdot r_{xy} \\
b_0 = \overline{Y} - b_1 \cdot \overline{X}
$$</div>
<blockquote>
<p><strong>Задача.</strong> Проанализируйте коэффициенты с точки зрения входящих в них компонентов. Какой коэффициент и как отвечает за направление прямой и почему?</p>
</blockquote>
<p>Таким образом, с использованием регрессии мы можем не только определить направление и силу взаимосвязи (это нам позволяет сделать и коэффициент корреляции), но и получить <strong>математическую модель, по которой потом будем строить предположения (<span class="math">\(\hat{y}\)</span>)</strong> и сравнивать их с реальными данными (<span class="math">\(y\)</span>).</p>
<p>Однако мы ведь все оцениваем критически, помните? Поэтому следующим логичным вопросом, после построения модели будет: <strong>“а на сколько статистически значимым будет взаимосвязь 2 наших величин?”</strong></p>
<p>Как вы думаете, какой коэффициент отвечает за это? Правильно, <span class="math">\(b_1\)</span>. Именно он отвечает за направление и угол наклона прямой (и в его формулу входит коэффициент корреляции).</p>
<p>Подтвердить это поможет простой мысленный эксперимент. Представим, что связь между величинами отсутствует (можете воспользоваться <a href="http://rpsychologist.com/d3/correlation/">сайтом с моделью</a>, чтобы проверить свои предположения). Тогда коэффициент корреляции будет равняться 0, а <span class="math">\(b_0 = \overline{Y}\)</span>. И наша прямая пройдет параллельно оси 0Х.</p>
<p>Таким образом мы можем сформулировать статистическую гипотезу для проверки:</p>
<div class="math">$$
H_0: b_1 = 0\\
H_1: b_1 \neq 0
$$</div>
<p>И снова мы можем использовать t-критерий, который говорит, что если верна 0 гипотеза, то при многократном выборе нашей выборки с 2 переменными из ГС полученные коэффициенты <span class="math">\(b_1\)</span> распределились бы относительно 0 по t-виду.</p>
<p>Таким образом: <span class="math">\(t = \frac{b_1 - 0}{se(b_1)}\)</span>, а число степеней свобод будет <span class="math">\(dF = n-2\)</span> (как и в случае с коэффициентом корреляции). При этом, <span class="math">\(se(b_1) = \sqrt{\frac{1}{n-2} \frac{\sum (y_i - \hat{y_i})^2}{\sum (x_i - \overline{x})^2}}\)</span>. Таким образом мы сможем рассчитать вероятность, зная коэффициент <span class="math">\(b_1, se(b_1), dF\)</span>.</p>
<blockquote>
<p><strong>Примечание.</strong> При построении линейных моделей на практике обычно принимается, что переменные взаимосвязаны и зная одну, можно вычислить другую. В таком случае можно не проверять статистические гипотезы. Для этого мы используем сканирующие эксперименты.</p>
<p><strong>Примечание.</strong> Приведу разбор формулы для расчета стандартной ошибки наклона (standard error of slope) поскольку найти его оказалось довольно сложно. Чтобы лучше понимать почему формула имеет именно такой вид, нужно ее преобразовать:</p>
</blockquote>
<div class="math">$$
se(b_1) = \sqrt{\frac{1}{n-2} \frac{\sum (y_i - \hat{y_i})^2}{\sum (x_i - \overline{x})^2}} =\\
\sqrt{\frac{1}{n-2} \frac{\sum (y_i - \overline{y})^2}{\sum (x_i - \overline{x})^2} \frac{\sum (y_i - \hat{y_i})^2}{\sum (y_i - \overline{y_i})^2}} = \\
\sqrt{\frac{1}{n-2}} \sqrt{\frac{\frac{1}{n-1} \sum (y_i - \overline{y})^2}{\frac{1}{n-1} \sum (x_i - \overline{x})^2 }} \sqrt{\frac{SS_{error}}{SS_{total}}} = \\
\sqrt{\frac{1}{n-2}} \sqrt{\frac{sd(y)^2}{sd(x)^2}} \sqrt{\frac{SS_{total} - SS_{model}}{SS_{total}}} = \\
\sqrt{\frac{1}{n-2}} \frac{sd_y}{sd_x} \sqrt{1- R^2}
$$</div>
<blockquote>
<p>Другими словами, стандартная ошибка для коэффициента наклона включает в себя отношение стандартных ошибок поеременных с учетом корня из степеней свободы, с поправкой на степень “объясненного отклонения”: <span class="math">\(\sqrt{\frac{SS_{error}}{SS_{total}}}\)</span> (какое количество отклонения от общей дисперсии данных наша модель смогла объяснить).</p>
</blockquote>
<h2 id="4-3">4.3 Коэффициент детерминации</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>В предыдущем разделе мы напрямую столкнулись с понятием “объясненной ошибки”. Кроме того, мы сталкивались с ним, когда изучали коэффициент корреляции.</p>
<p>Это понятие выражается коэффициентом <strong><span class="math">\(R^2\)</span> - доля дисперсии зависимой переменной (Y), объясняемая регрессионной моделью</strong> и формула для его расчета:</p>
<div class="math">$$
R^2 = 1 - \frac{SS_{res}}{SS_{total}}
$$</div>
<p>где <span class="math">\(SS_{res}\)</span> - сумма квадратов остатков, а <span class="math">\(SS_{total}\)</span> - сумма квадратов общая (расстояние от наблюдения до среднего значения). Можете попробовать математически сравнить эту формулу и формулу для коэффициента корреляции.</p>
<p>По своей сути, <strong>коэффициент детерминации определяет отличие получившейся прямой от линии среднего значения</strong> (когда верна наша 0-ая гипотеза).</p>
<p>Тогда, если <span class="math">\(R^2 \approx 1\)</span>, т.е. <span class="math">\(SS_{total} >> SS_{res}\)</span>, то можно сказать, что практически 100% изменчивости нашей зависимой переменной (Y) обусловлены связью с независимой переменной X.</p>
<blockquote>
<p><strong>Примечание.</strong> Коэффициент детерминации и коэффициент корреляции не взаимосвязаны на логическом уровне. Каждый из них выполняет свою задачу, но в определенных условиях они связаны математически.</p>
</blockquote>
<p>Не стоит забывать об <strong>ограничениях для применения одномерного регрессионного анализа</strong>:</p>
<ul>
<li>линейная взаимосвязь X и Y;</li>
<li>нормальное распределение остатков;</li>
<li>гомоскадестичность - постоянная изменчивость остатков на всех уровнях независимой переменной. Другими словами - наши отклонения должны быть случайны и не содержать никакой систематической погрешности.</li>
</ul>
<p>Вот <a href="https://gallery.shinyapps.io/slr_diag/">примеры</a> подобных проверок для регрессионной модели. Настоятельно рекомендую изучить все приведенные там случаи и повторить все у себя в RStudio (возьмите код на вооружение для собственных проектов).</p>
<p>Рекомендую поискать различные примеры применение регрессионного анализа и интерпретация результатов , например на курсах в ссылках.</p>
<h2 id="4-4">4.4 Заключение</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<p>Итак, мы научились строить статистически обоснованную математическую модель и даже оценивать ее достоверность. <strong>Но какая же практическая польза от всего этого?</strong> Довольно простая - предсказание значений зависимой переменной внутри области работы модели.</p>
<p>Саму модель часто называют <strong>линией тренда</strong>, что говорит само за себя. И чтобы рассчитать предсказанное значение - нужно просто решить уравнение, при подстановке экспериментально полученного <span class="math">\(x\)</span>.</p>
<p>Однако не стоит забывать о существующих <strong>ограничениях для линейного регрессионного метода</strong>.</p>
<ul>
<li>Модель не несет в себе физического смысла и поэтому может выдавать абсолютно некорректные значения при определенных признаках X.</li>
<li>Линейность системы обычно сохраняется на небольших интервалах и за пределами их часто ведет себя по другому (именно по этому важно перестраивать модель и проводить новые эксперименты - смотри первую часть курса).</li>
<li>Модель определена только в диапазоне данных, по которым она строилась, и выходить за пределы этих данных крайне опасно.</li>
<li>Требование к исходным данным, перечисленные ранее.</li>
</ul>
<p>Развитием рассмотренной линейной регрессии является множественная линейная регрессия, которая позволяет исследовать взаимосвязь одной зависимой и нескольких независимых переменных (как они влияют на нее и какой вклад вносят в модель). По факту - мы уже работали с этими моделями при планировании и анализе факторного эксперимента. На всякий случай освежим в памяти <strong>некоторые аспекты множественной регрессии</strong>.</p>
<ul>
<li>Общий вид уравнения линейной множественной регрессии: <span class="math">\(\hat{y} = b_0 + b_1 x_1 + b_2 x_2 + \dots\)</span>.</li>
<li>Метод наименьших квадратов также позволяет строить модели в n-мерном пространстве признаков. Но теперь остатки - это не расстояние до линии модели, а расстояние до плоскости модели или просто отклонение от n-1 мерной модели.</li>
<li>Необходимо предварительная проверка на мультиколлинеарность (мы должны использовать только независимые друг от друга признаки, иначе МНК не сможет работать по законам линейной алгебры). Для этого часто оценивают попарную взаимосвязь признаков (рис. 43).</li>
<li>Прочие требования для одномерной регрессии.</li>
<li>Для аналитически точных моделей нужно использовать число данных в общем случае в 3 раза больше, чем исследуемых факторов. Если этого не сделать - модель “переобучится”, т.е. она слишком хорошо настроится на тестовые данные, но предсказывать реальные данные будет плохо.</li>
<li>Важно использовать исправленный коэффициент детерминации <span class="math">\(R^2\)</span> (причина аналогична попарному сравнению).</li>
</ul>
<p>Мы не будем подробно рассматривать данный подход со статистических позиций в настоящем курсе. Если вам интересно разобраться в этой и прочих не освещенных, но упомянутых темах - рекомендую вам изучить курсы, приведенные в списке литературы.</p>
<h2 id="4-5">4.5 Вопросы по разделу</h2>
<p><a href="#0-TOC">К оглавлению</a></p>
<ol>
<li>
<p>Если при исследовании взаимосвязи двух переменных коэффициент детерминации оказался равен 0.25 то</p>
<ul>
<li>Коэффициент корреляции равен 0.0625</li>
<li>Коэффициент корреляции равен - 0.5</li>
<li>Коэффициент корреляции равен 0.5</li>
<li>Коэффициент корреляции равен 0.5 или -0.5</li>
</ul>
</li>
<li>
<p>Укажите, на каких графиках значение коэффициента корреляции Пирсона приблизительно равняется нулю.</p>
<p><div>
<br>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig-q_3.png" alt="question" width="900px"/>
</td>
<td>
<i>
Рис. q-3.
</i>
</td>
</tr>
</table></p>
</div>
</li>
<li>
<p>Если по результатам исследования мы обнаружили значимую положительную корреляцию уровня преступности и уровня безработицы, то это означает, что:</p>
<ul>
<li>Результаты только корреляционного исследования не позволяют нам делать вывод о причинно - следственной связи.</li>
<li>Безработица - причина преступности.</li>
<li>Преступность - причина безработицы.</li>
</ul>
</li>
<li>
<p>Исследователь решил выяснить, существует ли значимая корреляция между словарным запасом школьников и их физическими особенностями. В исследовании приняло участие 11 классов (с 1 по 11 класс, по 30 человек в каждом классе) некоторой школы. Оказалось, что существует значимая положительная корреляция этих двух показателей (r = 0.7, p < 0.05). Исследователь размышляет, какой вывод он может сделать, основываясь на этих данных:</p>
<ul>
<li>Доказано влияние роста на словарный запас.</li>
<li>Доказано влияние словарного запаса на рост.</li>
<li>Причиной данных результатов, вероятнее всего, является влияние третьей переменной (в каком классе учится школьник), если учесть этот показатель, то значимая взаимосвязь между ростом и словарным запасом не будет обнаружена.</li>
</ul>
</li>
<li>
<p>Соотнесите графики, на которых изображена регрессионная прямая, и значения коэффициентов <span class="math">\(b_1\)</span> и <span class="math">\(b_0\)</span> в уравнении регрессии:
<span class="math">\(\hat{y} = b_{0} + b_{1} \cdot x\)</span>. (<span class="math">\(b_1 > 0; b_0 > 0\)</span>, <span class="math">\(b_1 > 0; b_0 < 0\)</span>, <span class="math">\(b_1 < 0; b_0 > 0\)</span>).</p>
<p><div>
<br>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Exper_Data/chsu_chemt_how-to-test_fig-q_4.png" alt="question" width="900px"/>
</td>
<td>
<i>
Рис. q-4.
</i>
</td>
</tr>
</table></p>
</div>
</li>
<li>
<p>Укажите верные высказывания:</p>
<ul>
<li>Чем больше коэффициент детерминации, тем большая часть дисперсии зависимой переменной обусловлена взаимосвязью с независимой переменной.</li>
<li>Если коэффициент детерминации равен нулю, то и коэффициент <span class="math">\(b_0\)</span> (intercept) также равен нулю.</li>
<li>Если коэффициент детерминации равен нулю, то и коэффициент <span class="math">\(b_1\)</span> (slope) также равен нулю.</li>
<li>Коэффициент детерминации может быть равен единице только в том случае, если корреляция между переменными положительная и равна 1.</li>
</ul>
</li>
<li>
<p>В случае линейной взаимосвязи двух переменных распределение остатков:</p>
<ul>
<li>будет стремиться к нормальному со средним значением, приблизительно равным нулю;</li>
<li>будет иметь несколько мод;</li>
<li>будет обладать явно выраженной ассиметрией.</li>
</ul>
</li>
<li>
<p>Если в нашей модели коэффициент <span class="math">\(b_{1}\)</span> оказался не равен нулю, означает ли это, что обнаружена статистически значимая взаимосвязь (p < 0.05) между исследуемыми переменными?</p>
<ul>
<li>Да, коэффициент <span class="math">\(b_1\)</span>, не равный нулю, всегда означает, что мы отклоняем нулевую гипотезу</li>
<li>Нет, коэффициент <span class="math">\(b_1\)</span>, не равный нулю, не всегда означает, что мы отклоняем нулевую гипотезу</li>
<li>Нет, коэффициент <span class="math">\(b_1\)</span> не отвечает за угол наклона регрессионной прямой, его значение никак не влияет на направление взаимосвязи</li>
</ul>
</li>
<li>
<p>Основываясь на результатах исследования, укажите верные утверждения.</p>
</li>
</ol>
<div>
<table>
<thead>
<tr>
<th> </th>
<th>Estimate</th>
<th>Std. Error</th>
<th>t value</th>
<th>p value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Intercept</td>
<td>58.70</td>
<td>6.452</td>
<td>9.100</td>
<td>0.000</td>
</tr>
<tr>
<td>Age</td>
<td>1.463</td>
<td>0.1023</td>
<td>14.30</td>
<td>0.000</td>
</tr>
</tbody>
</table>
</div>
<p>В таблице представлены результаты исследования, посвященного взаимосвязи кровяного давления и возраста у людей в возрасте от 45 до 70 лет. Исследователи применили регрессионный анализ, где в качестве зависимой переменной выступало кровяное давление (pressure), а в качестве независимой переменной - возраст пациентов (age). Согласно полученным результатам, уравнение регрессии будет выглядеть следующим образом:</p>
<ul>
<li>Pressure = 58.7 - 1.46*Age</li>
<li>Pressure = 1.46 - 58.7*Age;</li>
<li>Pressure = 1.46 + 58.7*Age;</li>
<li>Pressure = 58.7 + 1.46*Age.</li>
</ul>
<p>Выберите все подходящие ответы из списка.</p>
<ul>
<li>Обнаружена статистически значимая отрицательная взаимосвязь исследуемых переменных.</li>
<li>С каждым единичным положительным изменением независимой переменной (возраста), ожидаемые значения зависимой переменной (давления) уменьшаются на 58.7.</li>
<li>Обнаружена статистически значимая положительная взаимосвязь исследуемых переменных.</li>
<li>С каждым единичным положительным изменением независимой переменной (возраста), ожидаемые значения зависимой переменной (давления) увеличиваются на 1.46.</li>
</ul>
<p>В данном исследовании коэффициент детерминации оказался равен 0.95. Как мы можем проинтерпретировать этот результат? Укажите все верные высказывания.</p>
<ul>
<li>Коэффициент корреляции между нашими переменными близок к 1.</li>
<li>Коэффициент корреляции между переменными близок к 1 или к -1 (но для однозначного ответа недостаточно данных).</li>
<li>Коэффициент корреляции между нашими переменными близок к -1.</li>
<li>Все точки лежат практически на регрессионной прямой.</li>
<li>95 % изменчивости зависимой переменной (давление) объясняется нашей моделью.</li>
</ul>
<ol>
<li>Вообразим мысленный эксперимент. Мы решили исследовать взаимосвязь стоимости (зависимая переменная) и площади квартир (независимая) в городе N. Для этого сформировали выборку из 30 наблюдений и получили, что коэффициент детерминации равен 1 (все наши наблюдения лежат на регрессионной прямой). Означает ли это, что при помощи нашей модели мы можем абсолютно точно предсказывать любые значения стоимости не вошедших в наш анализ квартир, основываясь на их площади?<ul>
<li>Да, коэффициент детерминации, равный единице означает 100 \% по точности прогноз.</li>
<li>Нет, столь сильная взаимосвязь наших переменных в выборке не означает, что все не включенные в анализ наблюдения также лягут на регрессионную прямую.</li>
<li>Да, так это означает, что и в генеральной совокупности коэффициент корреляции между стоимостью и площади квартир равен 1.</li>
</ul>
</li>
</ol>
<h2>Литература</h2>
<ol>
<li><a href="https://www.coursera.org/learn/experimentation/">Ресурсы курса Experimentation for Improvement from coursera.org</a>.</li>
<li><a href="https://www.amazon.com/Optimal-Design-Experiments-Study-Approach-ebook/dp/B005DIAPC2">Peter Goos, Bradley Jones. Optimal Design of Experiments. A Case Study Approach</a>.</li>
<li><a href="https://learnche.org/pid/">Книга к курсу Experimentation for Improvement from coursera.org</a>.</li>
<li><a href="http://www1.beuth-hochschule.de/FB_II/reports/Report-2011-004.pdf">Tutorial for designing experiments using the R package</a>.</li>
<li><a href="http://yint.org/Rcourse">Изучение R на примере простых инструкций</a>.</li>
<li><a href="bek.sibadi.org/fulltext/EPD38.pdf">И.А. Реброва. Планирование эксперимента. Омск «СибАДИ» 2010. 107 с.</a>.</li>
<li><a href="https://stepik.org/course/76">Курс “Основы статистики. Часть 1” на stepic.org</a></li>
<li><a href="https://ru.coursera.org/specializations/machine-learning-data-analysis">Специализация “Машинное обучение и анализ данных” на coursera.org</a>.</li>
<li><a href="https://online.stat.psu.edu/stat503/lesson/1">Курс STAT 503 Design of Experiments. Department of Statistics. PennState Eberly College of Science</a>.</li>
<li><a href="https://influentialpoints.com/Training/quantiles_as_summary_statistics-principles-properties-assumptions.htm">Неплохая информация по квантилям и как они соотносятся с рангами</a>.</li>
<li><a href="http://www.real-statistics.com/regression/least-squares-method/">Неплохое объяснение линейной регрессии с примерами из MS Exel</a>.</li>
<li><a href="http://tcts.cogitoergo.ru/blog/golova-professora-bambldorfa/">Пост об интерпретации доверительных интервалов.</a>.</li>
<li><a href="https://search.rsl.ru/ru/record/01004326137">Г. Кристиан. Аналитическая химия 1 и 2 том</a>.</li>
<li><a href="http://chembaby.com/uchebnye-materialy/xim/2-kurs/analiticheskaya-ximiya/">Много полезного материала с неофициального сайта химического факультета МГУ</a>.</li>
<li><a href="https://yint.org/static/stats-mooc/run-experiments.html">Модели основных экспериментов, разобранных во 2 части</a>.</li>
<li><a href="https://www.ozon.ru/context/detail/id/2200840/">К. Дерффель. Статистика в аналитической химии</a>.</li>
</ol>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>Wordcloud of news or dialog from vk.com social network2018-08-12T12:23:00+03:002020-05-13T11:24:00+03:00Юновидов Дмитрийtag:dimyun.space,2018-08-12:/blog/education-it-vk-wordcloud.html<p>Greetings!</p>
<p>Let’s do a job like <a href="dimyun.space/education-it-reddit">parsing reddit.com</a>. It is devoted to accumulating and analyzing a news feed or dialogues in <a href="https://www.vk.com">vk.com</a> social network. The obtained information is used to create a database. In my case there are 2 goals:</p>
<ul>
<li>to perform a one-time analysis of all …</li></ul><p>Greetings!</p>
<p>Let’s do a job like <a href="dimyun.space/education-it-reddit">parsing reddit.com</a>. It is devoted to accumulating and analyzing a news feed or dialogues in <a href="https://www.vk.com">vk.com</a> social network. The obtained information is used to create a database. In my case there are 2 goals:</p>
<ul>
<li>to perform a one-time analysis of all my dialogues in the social network vk.com;</li>
<li>to analyze 200 news posts from my news feed every time I turn on my computer.</li>
</ul>
<p>The goals set include a set of tasks:</p>
<ul>
<li>to choose necessary libraries;</li>
<li>to find addresses for parsing and understand its logic;</li>
<li>to create a function for parsing the necessary information;</li>
<li>to organize accumulation of information;</li>
<li>offer a way of processing the received information and any useful result.</li>
</ul>
<p>This theme is actual because of global distribution of algorithms of accumulation and analysis of big data. The received information can be used for surface analysis of own behavior and interests and also as an interesting avatar.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/IT/IT__vk-words_fig_1.png" alt="example" width="600px"/>
</td>
<td>
<i>
Fig. 1. Example of script result for my dialogues.
</i>
</td>
</tr>
</table>
</div>
<p>This work was supported by personal interest and excellent documentation <a href="https://vk.com/dev/manuals">vk.com</a>, and do not forget about Google.</p>
<p>I shall specify some features:</p>
<ul>
<li>the code is written, tested and works in Linux system Ubuntu 18.04 x64;</li>
<li>Python 2.7 and vk API are used.</li>
</ul>
<p>At the beginning of each chapter you will find the code with comments. Some explanations also will be provided if necessary. Thus, let’s get down to business.</p>
<h2>1. News feed analysis</h2>
<h3>1.1 Select of required libraries</h3>
<div class="highlight"><pre><span></span><code> <span class="c1">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span>
<span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">path</span>
<span class="kn">from</span> <span class="nn">wordcloud</span> <span class="kn">import</span> <span class="n">WordCloud</span>
<span class="kn">import</span> <span class="nn">pymorphy2</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">random</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
<span class="kn">from</span> <span class="nn">nltk.corpus</span> <span class="kn">import</span> <span class="n">stopwords</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Counter</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">vk</span>
<span class="c1"># -31480508 pikabu - You can see it as group id in browser bar</span>
<span class="c1"># -20629724 habrahabr</span>
<span class="c1"># -34274053 moscow</span>
<span class="c1"># -129636704 space (#ВКосмосе)</span>
<span class="c1"># -77270571 geektimes</span>
<span class="c1"># -46252034 naked science</span>
<span class="c1"># -227 MSU</span>
</code></pre></div>
<p>The absence of libraries for requesting web information (<code>request</code>, <code>fake_user</code>) is caused by the presence of a special “language” of communication with vk.com - API and its framework for python (i.e. adapted library).</p>
<p>As a useful action it is proposed to build <strong>cloud of the most frequently occurring words</strong> - for this purpose you also need python libraries (<code>wordcloud</code>, <code>numpy</code>), including for work with text (<code>nltk</code>, <code>collection</code>, <code>pymorphy</code>). <strong>Logic of work</strong>: you need to get information from the vk.com (through API), process it, add it to the database, save the database on disk, calculate the frequency of words in the database, build a cloud of words (useful result).</p>
<p>It should be pointed out that this code can be run directly from the command line without specifying an interpreter (because of <code>#!/usr/bin/env python</code> line). The second part of the header is necessary for correct work with the utf-8 and unicode (<code># -*- coding: utf-8 -*-</code>).</p>
<h3>1.2 Initializing API</h3>
<p>To work with the API, we will need access, which is provided by vk.com. The token (a long and unique set of numbers and letters) is responsible for access. We will also need to initialize the session.</p>
<div class="highlight"><pre><span></span><code> <span class="n">access_token</span> <span class="o">=</span> <span class="s2">"you_token_hear"</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">vk</span><span class="o">.</span><span class="n">Session</span><span class="p">(</span><span class="n">access_token</span><span class="o">=</span><span class="n">access_token</span><span class="p">)</span>
<span class="n">vkapi</span> <span class="o">=</span> <span class="n">vk</span><span class="o">.</span><span class="n">API</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="s1">'5.71'</span><span class="p">)</span>
</code></pre></div>
<p>Note that you need to pay attention to the version of the API and what commands are present or changed in it (but this is on the future or if something breaks). And while it works - do not touch).</p>
<p>You can get a token by registering the application in the VK and sending a specific request in the browser address bar. You can find more information about this in <a href="https://vk.com/dev/first_guide">official documentation</a>. It is important to pay attention to the token validity period, user ID and access rights for the application.</p>
<p><strong>Be careful! Do not allow other people’s applications to access your personal data!</strong></p>
<h3>1.3 Take information and make logs</h3>
<div class="highlight"><pre><span></span><code> <span class="k">def</span> <span class="nf">log_write</span><span class="p">(</span><span class="n">feature</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">'''</span>
<span class="sd"> :param feature: name of logging feature</span>
<span class="sd"> :param value: the value of logging feature</span>
<span class="sd"> :return: None</span>
<span class="sd"> '''</span>
<span class="c1"># Write data to log file</span>
<span class="n">f_log</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'/home/username/scripts/vk_log.txt'</span><span class="p">,</span> <span class="s1">'a'</span><span class="p">)</span>
<span class="n">f_log</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">feature</span> <span class="o">+</span> <span class="n">value</span><span class="p">)</span>
<span class="n">f_log</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">getLikes</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="n">cnt</span><span class="p">,</span> <span class="n">vkapi</span><span class="p">):</span>
<span class="sd">'''</span>
<span class="sd"> :param user_id: vk user id</span>
<span class="sd"> :param cnt: number of post in thousand</span>
<span class="sd"> :param vkapi: vk API object</span>
<span class="sd"> :return: posts data dictionary</span>
<span class="sd"> '''</span>
<span class="n">subscriptions_list</span> <span class="o">=</span> <span class="n">vkapi</span><span class="o">.</span><span class="n">users</span><span class="o">.</span><span class="n">getSubscriptions</span><span class="p">(</span><span class="n">user_id</span><span class="o">=</span><span class="n">user_id</span><span class="p">,</span><span class="n">extended</span><span class="o">=</span><span class="mi">0</span><span class="p">)[</span><span class="s1">'groups'</span><span class="p">][</span><span class="s1">'items'</span><span class="p">]</span>
<span class="c1"># we form the list of id, which needs to be passed in the following method</span>
<span class="n">groups_list</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'-'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">subscriptions_list</span><span class="p">]</span>
<span class="c1"># we form newsfeed</span>
<span class="n">all_newsfeeds</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">newsfeed</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">cnt</span><span class="p">):</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">'filters'</span><span class="p">:</span> <span class="s1">'post'</span><span class="p">,</span>
<span class="s1">'source_ids'</span><span class="p">:</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">groups_list</span><span class="p">),</span>
<span class="s1">'count'</span><span class="p">:</span> <span class="mi">100</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">newsfeed</span> <span class="o">=</span> <span class="n">vkapi</span><span class="o">.</span><span class="n">newsfeed</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">next_from</span> <span class="o">=</span> <span class="n">newsfeed</span><span class="p">[</span><span class="s1">'next_from'</span><span class="p">]</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">'start_from'</span><span class="p">:</span> <span class="n">next_from</span><span class="p">,</span>
<span class="s1">'filters'</span><span class="p">:</span> <span class="s1">'post'</span><span class="p">,</span>
<span class="s1">'source_ids'</span><span class="p">:</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">groups_list</span><span class="p">),</span>
<span class="s1">'count'</span><span class="p">:</span> <span class="mi">100</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">newsfeed</span> <span class="o">=</span> <span class="n">vkapi</span><span class="o">.</span><span class="n">newsfeed</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="n">all_newsfeeds</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newsfeed</span><span class="p">[</span><span class="s1">'items'</span><span class="p">])</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="c1"># Process all news with its keys (json structure)</span>
<span class="n">all_keys</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">portion</span> <span class="ow">in</span> <span class="n">all_newsfeeds</span><span class="p">:</span> <span class="c1"># portion of news (100)</span>
<span class="k">for</span> <span class="n">post</span> <span class="ow">in</span> <span class="n">portion</span><span class="p">:</span> <span class="c1"># each news in portion</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">post</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">all_keys</span><span class="p">:</span> <span class="n">all_keys</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="c1"># set output dictionary structure</span>
<span class="n">post_data</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">all_keys</span><span class="p">:</span>
<span class="n">post_data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c1"># Collect data from newsfeeds</span>
<span class="k">for</span> <span class="n">portion</span> <span class="ow">in</span> <span class="n">all_newsfeeds</span><span class="p">:</span>
<span class="k">for</span> <span class="n">post</span> <span class="ow">in</span> <span class="n">portion</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">post_data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">post</span><span class="p">:</span>
<span class="n">post_data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">+=</span> <span class="p">[</span><span class="n">post</span><span class="p">[</span><span class="n">key</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">post</span><span class="p">:</span>
<span class="n">post_data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">+=</span> <span class="p">[</span><span class="s1">'None'</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">KeyError</span> <span class="k">as</span> <span class="n">var</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">return</span> <span class="n">post_data</span>
</code></pre></div>
<p>Thus, we wrote a function to get information about the last <code>cnt*100</code> posts of <code>%%username</code>. And we made up a simple function for logging to know the status of program execution.</p>
<p>Now it’s a small thing to save the obtained information in the form of a matrix of “object-features” and process the texts.</p>
<h3>1.4 Working with functions and accumulate the information</h3>
<div class="highlight"><pre><span></span><code> <span class="c1"># Start log file</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">asctime</span><span class="p">())</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\t</span><span class="s1">'</span><span class="p">)</span>
<span class="n">user_id</span> <span class="o">=</span> <span class="c1"># your id (int)</span>
<span class="n">all_data</span> <span class="o">=</span> <span class="n">getLikes</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">vkapi</span><span class="p">)</span> <span class="c1"># Scan 2 * 100 = 200 news posts</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1"> message download: '</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">all_data</span><span class="p">[</span><span class="s1">'text'</span><span class="p">])))</span>
<span class="c1"># If need human-readable data</span>
<span class="c1"># import datetime</span>
<span class="c1"># for data in all_data['date']:</span>
<span class="c1"># print datetime.datetime.fromtimestamp(</span>
<span class="c1"># int(data)</span>
<span class="c1"># ).strftime('%Y-%m-%d %H:%M:%S')</span>
<span class="c1"># Add data to exist df and save it</span>
<span class="n">len_old</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">len_new</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">final_df_new</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">all_data</span><span class="p">,</span> <span class="n">orient</span><span class="o">=</span><span class="s1">'columns'</span><span class="p">)</span>
<span class="n">final_df_old</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_pickle</span><span class="p">(</span><span class="s1">'/home/username/scripts/vk_news_df'</span><span class="p">)</span>
<span class="n">len_old</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">final_df_old</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
<span class="n">final_df_old</span> <span class="o">=</span> <span class="n">final_df_old</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">final_df_new</span><span class="p">,</span> <span class="n">ignore_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">final_df_old</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="p">[</span><span class="s1">'post_id'</span><span class="p">],</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">final_df</span> <span class="o">=</span> <span class="n">final_df_old</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">len_new</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">final_df</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
<span class="c1"># write number of new mwssage into log file</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1"> new news message: '</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">len_new</span> <span class="o">-</span> <span class="n">len_old</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
<span class="c1"># Create new file</span>
<span class="n">final_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">all_data</span><span class="p">,</span> <span class="n">orient</span><span class="o">=</span><span class="s1">'columns'</span><span class="p">)</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1"> new news message: '</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">final_df</span><span class="o">.</span><span class="n">index</span><span class="p">)))</span>
<span class="c1"># Save df to file</span>
<span class="n">final_df</span><span class="o">.</span><span class="n">to_pickle</span><span class="p">(</span><span class="s1">'/home/username/scripts/vk_news_df'</span><span class="p">)</span>
</code></pre></div>
<p>The logic of the work on creation and replenishment of the database is similar to the article about <a href="dimyun.space/education-it-reddit">scientific news</a>: <em>get new information - check the possibility of open the save database - create a new Data Frame - merge two Data Frames - delete duplicated rows (by the id=news column) - save the updated database</em>.</p>
<h3>1.5 Processing and output of information</h3>
<p>We are moving to the final stage - processing and output of information. We will process the last 200 news posts and output a cloud of the most frequently occurring words.</p>
<div class="highlight"><pre><span></span><code> <span class="n">news_to_process</span> <span class="o">=</span> <span class="mi">200</span>
<span class="n">ind_all</span> <span class="o">=</span> <span class="n">final_df</span><span class="o">.</span><span class="n">index</span>
<span class="n">all_text</span> <span class="o">=</span> <span class="n">final_df</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">ind_all</span><span class="p">[</span><span class="o">-</span><span class="n">news_to_process</span><span class="p">:],</span> <span class="p">[</span><span class="s1">'text'</span><span class="p">]]</span>
<span class="n">tag_re</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'(<!--.*?-->|<[^>]*>)'</span><span class="p">)</span>
<span class="c1"># Remove well-formed tags, fixing mistakes by legitimate users</span>
<span class="c1"># clear each post from tag and whitespaces</span>
<span class="n">all_text</span> <span class="o">=</span> <span class="p">[</span><span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' +'</span><span class="p">,</span><span class="s1">' '</span><span class="p">,</span><span class="n">tag_re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' '</span><span class="p">,</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">all_text</span><span class="o">.</span><span class="n">values</span><span class="p">]</span>
<span class="n">list_in</span> <span class="o">=</span> <span class="p">[</span><span class="n">all_text</span><span class="p">]</span>
<span class="n">list_out</span> <span class="o">=</span> <span class="p">[</span><span class="s1">''</span><span class="p">]</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">list_in</span><span class="p">)):</span>
<span class="n">self_messages</span> <span class="o">=</span> <span class="n">list_in</span><span class="p">[</span><span class="n">t</span><span class="p">]</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">self_messages</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">str_data</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">checkGood</span><span class="p">(</span><span class="n">symb</span><span class="p">):</span>
<span class="n">good1</span> <span class="o">=</span> <span class="s1">'ёйцукенгшщзхъэждлорпавыфячсмитьбю'</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">)</span>
<span class="n">good2</span> <span class="o">=</span> <span class="sa">u</span><span class="s1">'ёйцукенгшщзхъэждлорпавыфячсмитьбю'</span>
<span class="k">if</span> <span class="n">symb</span> <span class="ow">in</span> <span class="n">good1</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">elif</span> <span class="n">symb</span> <span class="ow">in</span> <span class="n">good2</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">str_data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">' '</span> <span class="ow">or</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">:</span>
<span class="n">text</span> <span class="o">+=</span> <span class="s1">' '</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">checkGood</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
<span class="n">text</span> <span class="o">+=</span> <span class="n">i</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">text</span> <span class="o">+=</span> <span class="s1">''</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' +'</span><span class="p">,</span><span class="s1">' '</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">text</span><span class="p">[:]</span>
<span class="c1"># Normalize of word form</span>
<span class="n">morph</span> <span class="o">=</span> <span class="n">pymorphy2</span><span class="o">.</span><span class="n">MorphAnalyzer</span><span class="p">()</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">):</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">morph</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">i</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">text</span> <span class="o">+=</span> <span class="n">p</span><span class="o">.</span><span class="n">normal_form</span> <span class="o">+</span> <span class="s1">' '</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">text</span><span class="p">[:]</span>
<span class="c1"># Stop words check</span>
<span class="n">stop_words</span> <span class="o">=</span> <span class="n">stopwords</span><span class="o">.</span><span class="n">words</span><span class="p">(</span><span class="s1">'russian'</span><span class="p">)</span>
<span class="n">stop_words</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="sa">u</span><span class="s1">'что'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'это'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'так'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'вот'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'быть'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'как'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'в'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'—'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'к'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'на'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'ок'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'кстати'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'который'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'мочь'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'весь'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'еще'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'также'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'свой'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'ещё'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'самый'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'ул'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'комментарий'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'английский'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'язык'</span><span class="p">])</span>
<span class="n">words</span> <span class="o">=</span> <span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span>
<span class="n">w_before</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">words</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">words</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">stop_words</span><span class="p">]</span>
<span class="n">w_after</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1"> raw and tidy words: '</span><span class="p">,</span> <span class="nb">str</span><span class="p">([</span><span class="n">w_before</span><span class="p">,</span> <span class="n">w_after</span><span class="p">])</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">list_out</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">=</span> <span class="n">str_data</span><span class="p">[:]</span>
<span class="n">str_news</span> <span class="o">=</span> <span class="n">list_out</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># Create wordcloud</span>
<span class="n">alice_mask</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">"/home/username/scripts/gear2.png"</span><span class="p">))</span>
<span class="n">wc</span> <span class="o">=</span> <span class="n">WordCloud</span><span class="p">(</span><span class="n">background_color</span><span class="o">=</span><span class="s2">"white"</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="n">alice_mask</span><span class="p">,</span> <span class="n">collocations</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="n">wc</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">str_news</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">grey_color_func</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">font_size</span><span class="p">,</span> <span class="n">position</span><span class="p">,</span> <span class="n">orientation</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="c1">#50 shades of white</span>
<span class="k">return</span> <span class="s2">"hsl(0, 0</span><span class="si">%%</span><span class="s2">, </span><span class="si">%d%%</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">60</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
<span class="n">default_colors</span> <span class="o">=</span> <span class="n">wc</span><span class="o">.</span><span class="n">to_array</span><span class="p">()</span>
<span class="n">wc2</span> <span class="o">=</span> <span class="n">wc</span><span class="o">.</span><span class="n">recolor</span><span class="p">(</span><span class="n">color_func</span><span class="o">=</span><span class="n">grey_color_func</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="c1"># store to file</span>
<span class="n">wc2</span><span class="o">.</span><span class="n">to_file</span><span class="p">(</span><span class="s2">"/home/username/conky/scripts/news_raw.png"</span><span class="p">)</span>
</code></pre></div>
<p>The logic of the code is as follows: <em>Selection of all headings from the database - clearing text from html tags and extra spaces - processing of all text in a cycle - removal of all that is not letter* - repeated removal of extra spaces - morphologization of words (set it to “normal” form) - removal of “stop” words (most frequently occurring, such as articles, pronouns, etc.) - output of one big line of words and spaces between them</em>.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/IT/IT__vk-words_fig_2.png" alt="example2" width="600px"/>
</td>
<td>
<i>
Fig. 2. Example of the news analysis.
</i>
</td>
</tr>
</table>
</div>
<p>Finally, a small gift for Ubuntu users (and maybe not just for them, if you think about it). The resulting image can be translated into an image with a transparent background by a simple terminal command:</p>
<p><code>convert ~/news_raw.png -transparent black ~/news_ready.png</code></p>
<p>In the same way, you can organize automatic parsing of the site through the Autostart application:</p>
<div class="highlight"><pre><span></span><code> Menu — Startup Application — Add:
Name: vk_news_reader
Command: sh -c «sleep <span class="m">600</span> <span class="o">&&</span> /FULL_PATH/vk_news.py»
</code></pre></div>
<p>Set a delay for execution in seconds, so that the system could connect to the Internet and execute the script (for execution you can specify <code>«python /FULL_PATH/vk_news.py»</code>).</p>
<h2>2. Dialog analysis at vk.com</h2>
<p>I think we’ve dealt with the first part. Now let’s move on to dialogue analysis. The general essence remains the same: <em>vk API for information extraction - saving information on the hard disk - processing</em>. All the logic and ideology remains the same, so I will give you the full code without any unnecessary explanations.</p>
<div class="highlight"><pre><span></span><code> <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">scipy</span>
<span class="kn">import</span> <span class="nn">nltk</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
<span class="kn">import</span> <span class="nn">seaborn</span>
<span class="kn">import</span> <span class="nn">matplotlib</span> <span class="k">as</span> <span class="nn">mpl</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span>
<span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">path</span>
<span class="kn">from</span> <span class="nn">wordcloud</span> <span class="kn">import</span> <span class="n">WordCloud</span>
<span class="kn">import</span> <span class="nn">pymorphy2</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">vk_log</span>
<span class="kn">import</span> <span class="nn">pickle</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Counter</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">vk</span><span class="o">.</span><span class="n">Session</span><span class="p">(</span><span class="n">access_token</span><span class="o">=</span><span class="s1">'you_token'</span><span class="p">)</span>
<span class="n">vkapi</span> <span class="o">=</span> <span class="n">vk</span><span class="o">.</span><span class="n">API</span><span class="p">(</span><span class="n">session</span><span class="p">)</span>
<span class="n">friends</span> <span class="o">=</span> <span class="n">vkapi</span><span class="p">(</span><span class="s1">'friends.get'</span><span class="p">)</span> <span class="c1"># take list of all friends of user</span>
<span class="c1"># friends = [1111111, 2222222, 33333333] # also, we can manual set list of friends use they ID</span>
<span class="k">def</span> <span class="nf">get_dialogs</span><span class="p">(</span><span class="n">user_id</span><span class="p">):</span>
<span class="c1"># Get dialog with user</span>
<span class="n">dialogs</span> <span class="o">=</span> <span class="n">vkapi</span><span class="p">(</span><span class="s1">'messages.getDialogs'</span><span class="p">,</span> <span class="n">user_id</span><span class="o">=</span><span class="n">user_id</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dialogs</span>
<span class="k">def</span> <span class="nf">get_history</span><span class="p">(</span><span class="n">friends</span><span class="p">,</span> <span class="n">sleep_time</span><span class="o">=</span><span class="mf">0.4</span><span class="p">):</span>
<span class="c1"># Get all dialogues history</span>
<span class="n">all_history</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">friend</span> <span class="ow">in</span> <span class="n">friends</span><span class="p">:</span>
<span class="n">friend_dialog</span> <span class="o">=</span> <span class="n">get_dialogs</span><span class="p">(</span><span class="n">friend</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">sleep_time</span><span class="p">)</span>
<span class="n">dialog_len</span> <span class="o">=</span> <span class="n">friend_dialog</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">friend_history</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">dialog_len</span> <span class="o">></span> <span class="mi">200</span><span class="p">:</span>
<span class="c1"># vk API condition: len <= 200</span>
<span class="n">resid</span> <span class="o">=</span> <span class="n">dialog_len</span>
<span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">resid</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">friend_history</span> <span class="o">+=</span> <span class="n">vkapi</span><span class="p">(</span><span class="s1">'messages.getHistory'</span><span class="p">,</span>
<span class="n">user_id</span><span class="o">=</span><span class="n">friend</span><span class="p">,</span>
<span class="n">count</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
<span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">sleep_time</span><span class="p">)</span>
<span class="n">resid</span> <span class="o">-=</span> <span class="mi">200</span>
<span class="n">offset</span> <span class="o">+=</span> <span class="mi">200</span>
<span class="k">if</span> <span class="n">resid</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'--processing '</span><span class="p">,</span> <span class="n">friend</span><span class="p">,</span> <span class="s1">': '</span><span class="p">,</span> <span class="n">resid</span><span class="p">,</span>
<span class="s1">' of '</span><span class="p">,</span> <span class="n">dialog_len</span><span class="p">,</span> <span class="s1">' messages left'</span><span class="p">)</span>
<span class="n">all_history</span> <span class="o">+=</span> <span class="n">friend_history</span>
<span class="n">i</span> <span class="o">+=</span><span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'processed '</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="s1">' friends of '</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">friends</span><span class="p">))</span>
<span class="k">return</span> <span class="n">all_history</span>
<span class="n">all_history</span> <span class="o">=</span> <span class="n">get_history</span><span class="p">(</span><span class="n">friends</span><span class="p">)</span>
<span class="c1"># Save or load data</span>
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">all_history</span><span class="p">,</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"all_vk_history.p"</span><span class="p">,</span> <span class="s2">"wb"</span><span class="p">))</span>
<span class="c1"># all_history = pickle.load(open("all_vk_history.p", "rb"))</span>
<span class="n">interesting_id</span> <span class="o">=</span> <span class="n">user_id</span> <span class="c1"># set interesting user id</span>
<span class="k">def</span> <span class="nf">get_messages_for_user</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">user_id</span><span class="p">):</span>
<span class="c1"># Extract all message for set user</span>
<span class="n">user_messages</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">my_messages</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">dialog</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">dialog</span><span class="p">)</span> <span class="o">==</span> <span class="nb">dict</span><span class="p">:</span>
<span class="k">if</span> <span class="n">dialog</span><span class="p">[</span><span class="s1">'from_id'</span><span class="p">]</span> <span class="o">==</span> <span class="n">user_id</span><span class="p">:</span>
<span class="n">m_text</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">"<br>"</span><span class="p">,</span> <span class="s2">" "</span><span class="p">,</span> <span class="n">dialog</span><span class="p">[</span><span class="s1">'body'</span><span class="p">])</span>
<span class="n">user_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">m_text</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">dialog</span><span class="p">[</span><span class="s1">'from_id'</span><span class="p">]</span> <span class="o">==</span> <span class="n">YOUR_ID</span><span class="p">:</span>
<span class="n">m_text</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">"<br>"</span><span class="p">,</span> <span class="s2">" "</span><span class="p">,</span> <span class="n">dialog</span><span class="p">[</span><span class="s1">'body'</span><span class="p">])</span>
<span class="n">my_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">m_text</span><span class="p">)</span>
<span class="nb">print</span> <span class="s1">'Extracted'</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">user_messages</span><span class="p">),</span> <span class="s1">' user messages in total'</span>
<span class="nb">print</span> <span class="s1">'Extracted'</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">my_messages</span><span class="p">),</span> <span class="s1">' my messages in total'</span>
<span class="k">return</span> <span class="n">user_messages</span><span class="p">,</span> <span class="n">my_messages</span>
<span class="n">user_messages</span><span class="p">,</span> <span class="n">my_messages</span> <span class="o">=</span> <span class="n">get_messages_for_user</span><span class="p">(</span><span class="n">all_history</span><span class="p">,</span> <span class="n">interesting_id</span><span class="p">)</span>
<span class="n">list_in</span> <span class="o">=</span> <span class="p">[</span><span class="n">user_messages</span><span class="p">,</span> <span class="n">my_messages</span><span class="p">]</span>
<span class="n">list_out</span> <span class="o">=</span> <span class="p">[</span><span class="s1">''</span><span class="p">,</span><span class="s1">''</span><span class="p">]</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">list_in</span><span class="p">)):</span>
<span class="n">self_messages</span> <span class="o">=</span> <span class="n">list_in</span><span class="p">[</span><span class="n">t</span><span class="p">]</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">self_messages</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">str_data</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">checkGood</span><span class="p">(</span><span class="n">symb</span><span class="p">):</span>
<span class="n">good1</span> <span class="o">=</span> <span class="s1">'ёйцукенгшщзхъэждлорпавыфячсмитьбю'</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">)</span>
<span class="n">good2</span> <span class="o">=</span> <span class="sa">u</span><span class="s1">'ёйцукенгшщзхъэждлорпавыфячсмитьбю'</span>
<span class="k">if</span> <span class="n">symb</span> <span class="ow">in</span> <span class="n">good1</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">elif</span> <span class="n">symb</span> <span class="ow">in</span> <span class="n">good2</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">str_data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">' '</span> <span class="ow">or</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">:</span>
<span class="n">text</span> <span class="o">+=</span> <span class="s1">' '</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">checkGood</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
<span class="n">text</span> <span class="o">+=</span> <span class="n">i</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">text</span> <span class="o">+=</span> <span class="s1">''</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">text</span><span class="p">[:]</span>
<span class="n">morph</span> <span class="o">=</span> <span class="n">pymorphy2</span><span class="o">.</span><span class="n">MorphAnalyzer</span><span class="p">()</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">):</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">morph</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">i</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">text</span> <span class="o">+=</span> <span class="n">p</span><span class="o">.</span><span class="n">normal_form</span> <span class="o">+</span> <span class="s1">' '</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">text</span><span class="p">[:]</span>
<span class="c1"># Stop words check</span>
<span class="kn">from</span> <span class="nn">nltk.corpus</span> <span class="kn">import</span> <span class="n">stopwords</span>
<span class="n">stop_words</span> <span class="o">=</span> <span class="n">stopwords</span><span class="o">.</span><span class="n">words</span><span class="p">(</span><span class="s1">'russian'</span><span class="p">)</span>
<span class="n">stop_words</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="sa">u</span><span class="s1">'что'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'это'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'так'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'вот'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'быть'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'как'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'в'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'—'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'к'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'на'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'ок'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'кстати'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'ещё'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'вообще'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'мб'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'чтоть'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'весь'</span><span class="p">])</span>
<span class="n">words</span> <span class="o">=</span> <span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span>
<span class="n">words</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">words</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">stop_words</span><span class="p">]</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">list_out</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">=</span> <span class="n">str_data</span>
<span class="nb">print</span> <span class="nb">len</span><span class="p">(</span><span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">))</span>
<span class="n">str_user</span> <span class="o">=</span> <span class="n">list_out</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">str_my</span> <span class="o">=</span> <span class="n">list_out</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="nb">print</span> <span class="s1">'Dict strong user: '</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">str_lisa</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)))</span> <span class="o">/</span> <span class="nb">float</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">str_user</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)))</span> <span class="o">*</span> <span class="mf">100.0</span>
<span class="nb">print</span> <span class="s1">'Dict strong my: '</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">str_my</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)))</span> <span class="o">/</span> <span class="nb">float</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">str_my</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)))</span> <span class="o">*</span> <span class="mf">100.0</span>
<span class="n">alice_mask</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">"IMAGE.jpg"</span><span class="p">))</span>
<span class="n">wc</span> <span class="o">=</span> <span class="n">WordCloud</span><span class="p">(</span><span class="n">background_color</span><span class="o">=</span><span class="s2">"black"</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="n">alice_mask</span><span class="p">)</span>
<span class="c1"># generate word cloud</span>
<span class="n">wc</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">str_lisa</span><span class="p">)</span>
<span class="c1"># store to file</span>
<span class="n">wc</span><span class="o">.</span><span class="n">to_file</span><span class="p">(</span><span class="s2">"User.png"</span><span class="p">)</span>
<span class="n">alice_mask</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">"IMAGE.jpg"</span><span class="p">))</span>
<span class="n">wc</span> <span class="o">=</span> <span class="n">WordCloud</span><span class="p">(</span><span class="n">background_color</span><span class="o">=</span><span class="s2">"black"</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="n">alice_mask</span><span class="p">)</span>
<span class="c1"># generate word cloud</span>
<span class="n">wc</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">str_my</span><span class="p">)</span>
<span class="c1"># store to file</span>
<span class="n">wc</span><span class="o">.</span><span class="n">to_file</span><span class="p">(</span><span class="s2">"Me.png"</span><span class="p">)</span>
</code></pre></div>
<h2>3. Conclusion.</h2>
<p>I hope that as a result of reading you have skills of working with vk.com API, as well as with the processing of text information.</p>
<p>According to the presented code, all set tasks are solved and goals are achieved.</p>
<p>I hope that you will see ways to improve the shown solution and my solution will be useful for you. Thank you for being with us and have a nice day!</p>Облако слов из новостей или диалогов vk.com2018-08-12T12:23:00+03:002020-05-13T11:23:00+03:00Юновидов Дмитрийtag:dimyun.space,2018-08-12:/ru/blog/education-it-vk-wordcloud.html<p>Приветствую!</p>
<p>Проведем похожую на <a href="dimyun.space/ru/education-it-reddit">парсинг reddit.com</a> работу. Она посвящена накоплению и анализу новостной ленты или диалогов в <a href="https://www.vk.com">vk.com</a>. Полученная информация используется для создания базы данных. В моем случае поставлено 2 цели:</p>
<ul>
<li>провести единовременный анализ всех моих диалогов в социальной сети vk.com;</li>
<li>анализировать 200 новостных постов из моей …</li></ul><p>Приветствую!</p>
<p>Проведем похожую на <a href="dimyun.space/ru/education-it-reddit">парсинг reddit.com</a> работу. Она посвящена накоплению и анализу новостной ленты или диалогов в <a href="https://www.vk.com">vk.com</a>. Полученная информация используется для создания базы данных. В моем случае поставлено 2 цели:</p>
<ul>
<li>провести единовременный анализ всех моих диалогов в социальной сети vk.com;</li>
<li>анализировать 200 новостных постов из моей ленты при каждом включении компьютера.</li>
</ul>
<p>Поставленные цели включают в себя набор задач:</p>
<ul>
<li>выбрать необходимые библиотеки;</li>
<li>найти средства для получения информации и определиться с их логикой;</li>
<li>создать функцию для парсинга нужного количества информации;</li>
<li>организовать накопление информации;</li>
<li>предложить способ обработки полученной информации и какой-либо полезный результат.</li>
</ul>
<p>Предложенная тема актуальна в связи с глобальным распространение науки накопления и анализа больших данных. Полученную информацию можно использовать для небольшого и поверхностного анализа собственного поведения и интересов, а так же в качестве интересного аватара.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/IT/IT__vk-words_fig_1.png" alt="example" width="600px"/>
</td>
<td>
<i>
Рис. 1. Пример выполнения скрипта для моих диалогов.
</i>
</td>
</tr>
</table>
</div>
<p>Подспорьем для данной работы послужил личный интерес и отличная документация <a href="https://vk.com/dev/manuals">vk.com</a>, и не забываем про Google.</p>
<p>Обозначу еще несколько особенностей:</p>
<ul>
<li>код написан, тестирован и работает в системе Linux Ubuntu 18.04 x64;</li>
<li>используются Python 2.7 и vk API.</li>
</ul>
<p>В начале каждой главы будет приведен код с комментариями. В дальнейшем, если это необходимо - пояснения. Таким образом, перейдем непосредственно к делу.</p>
<h2>1. Анализ новостной ленты</h2>
<h3>1.1 Выбор необходимых библиотек</h3>
<div class="highlight"><pre><span></span><code><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span>
<span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">path</span>
<span class="kn">from</span> <span class="nn">wordcloud</span> <span class="kn">import</span> <span class="n">WordCloud</span>
<span class="kn">import</span> <span class="nn">pymorphy2</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">random</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
<span class="kn">from</span> <span class="nn">nltk.corpus</span> <span class="kn">import</span> <span class="n">stopwords</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Counter</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">vk</span>
<span class="c1"># -31480508 pikabu - You can see it as group id in browser bar</span>
<span class="c1"># -20629724 habrahabr</span>
<span class="c1"># -34274053 moscow</span>
<span class="c1"># -129636704 space (#ВКосмосе)</span>
<span class="c1"># -77270571 geektimes</span>
<span class="c1"># -46252034 naked science</span>
<span class="c1"># -227 MSU</span>
</code></pre></div>
<p>Отсутствие библиотек для запроса веб информации (<em>request, fake_user</em>) вызвано наличием специального “языка” общения с vk.com - API и ее фреймворком для python (т.е. адаптированной библиотекой). В качестве полезного действия предлагается построить облако наиболее часто встречающихся слов — для этого тоже нужны свои библиотеки (<em>wordcloud, numpy</em>), в том числе и для работы с текстом (<em>nltk, collection, pymorphy</em>). Логика работы: необходимо получить информацию с сайта (через API), обработать ее и добавить в базу данных, сохраненную на диске, получить полезный результат.</p>
<p>Запуска кода возможен непосредственно из командной строки без указания интерпретатора (за счет явного указания <code>#!/usr/bin/env python</code>). Напомню, что вторая часть заголовка (<code># -*- coding: utf-8 -*-</code>) нужна для корректной работы с форматом utf-8 и unicode.</p>
<h3>1.2 Инициализируем API.</h3>
<p>Для работы с API нам потребуется доступ, предоставленный сайтом vk.com. За доступ отвечает токен (длинный и уникальный набор цифр и букв). Также понадобится инициализация сессии.</p>
<div class="highlight"><pre><span></span><code><span class="n">access_token</span> <span class="o">=</span> <span class="s2">"you_token_hear"</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">vk</span><span class="o">.</span><span class="n">Session</span><span class="p">(</span><span class="n">access_token</span><span class="o">=</span><span class="n">access_token</span><span class="p">)</span>
<span class="n">vkapi</span> <span class="o">=</span> <span class="n">vk</span><span class="o">.</span><span class="n">API</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="s1">'5.71'</span><span class="p">)</span>
</code></pre></div>
<p>Отмечу, что нужно обращать внимание на версию API и какие команды в ней присутствуют или изменены (но это на будущей или если что-то сломается). А пока работает- не трогаем)</p>
<p>Получить токен можно зарегистрировав приложение в ВК и послав определенный запрос в адресной строке браузера. Подробнее об этом написано в <a href="https://vk.com/dev/first_guide">официальной документации</a>. Важно обращать внимание на срок действия токена, ID пользователя и права доступа для приложения.</p>
<p><strong>Будьте внимательны! Не разрешайте чужим приложениям доступ к Вашим персональным данным!</strong></p>
<h3>1.3 Получение информации и создание логов.</h3>
<p>Напишем функцию, для ведения логов и получения информации через API.</p>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">log_write</span><span class="p">(</span><span class="n">feature</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">'''</span>
<span class="sd"> :param feature: name of logging feature</span>
<span class="sd"> :param value: the value of logging feature</span>
<span class="sd"> :return: None</span>
<span class="sd"> '''</span>
<span class="c1"># Write data to log file</span>
<span class="n">f_log</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'/home/username/scripts/vk_log.txt'</span><span class="p">,</span> <span class="s1">'a'</span><span class="p">)</span>
<span class="n">f_log</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">feature</span> <span class="o">+</span> <span class="n">value</span><span class="p">)</span>
<span class="n">f_log</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">getLikes</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="n">cnt</span><span class="p">,</span> <span class="n">vkapi</span><span class="p">):</span>
<span class="sd">'''</span>
<span class="sd"> :param user_id: vk user id</span>
<span class="sd"> :param cnt: number of post in thousand</span>
<span class="sd"> :param vkapi: vk API object</span>
<span class="sd"> :return: posts data dictionary</span>
<span class="sd"> '''</span>
<span class="n">subscriptions_list</span> <span class="o">=</span> <span class="n">vkapi</span><span class="o">.</span><span class="n">users</span><span class="o">.</span><span class="n">getSubscriptions</span><span class="p">(</span><span class="n">user_id</span><span class="o">=</span><span class="n">user_id</span><span class="p">,</span><span class="n">extended</span><span class="o">=</span><span class="mi">0</span><span class="p">)[</span><span class="s1">'groups'</span><span class="p">][</span><span class="s1">'items'</span><span class="p">]</span>
<span class="c1"># we form the list of id, which needs to be passed in the following method</span>
<span class="n">groups_list</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'-'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">subscriptions_list</span><span class="p">]</span>
<span class="c1"># we form newsfeed</span>
<span class="n">all_newsfeeds</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">newsfeed</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">cnt</span><span class="p">):</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">'filters'</span><span class="p">:</span> <span class="s1">'post'</span><span class="p">,</span>
<span class="s1">'source_ids'</span><span class="p">:</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">groups_list</span><span class="p">),</span>
<span class="s1">'count'</span><span class="p">:</span> <span class="mi">100</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">newsfeed</span> <span class="o">=</span> <span class="n">vkapi</span><span class="o">.</span><span class="n">newsfeed</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">next_from</span> <span class="o">=</span> <span class="n">newsfeed</span><span class="p">[</span><span class="s1">'next_from'</span><span class="p">]</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">'start_from'</span><span class="p">:</span> <span class="n">next_from</span><span class="p">,</span>
<span class="s1">'filters'</span><span class="p">:</span> <span class="s1">'post'</span><span class="p">,</span>
<span class="s1">'source_ids'</span><span class="p">:</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">groups_list</span><span class="p">),</span>
<span class="s1">'count'</span><span class="p">:</span> <span class="mi">100</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">newsfeed</span> <span class="o">=</span> <span class="n">vkapi</span><span class="o">.</span><span class="n">newsfeed</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="n">all_newsfeeds</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newsfeed</span><span class="p">[</span><span class="s1">'items'</span><span class="p">])</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="c1"># Process all news with its keys (json structure)</span>
<span class="n">all_keys</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">portion</span> <span class="ow">in</span> <span class="n">all_newsfeeds</span><span class="p">:</span> <span class="c1"># portion of news (100)</span>
<span class="k">for</span> <span class="n">post</span> <span class="ow">in</span> <span class="n">portion</span><span class="p">:</span> <span class="c1"># each news in portion</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">post</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">all_keys</span><span class="p">:</span> <span class="n">all_keys</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="c1"># set output dictionary structure</span>
<span class="n">post_data</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">all_keys</span><span class="p">:</span>
<span class="n">post_data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c1"># Collect data from newsfeeds</span>
<span class="k">for</span> <span class="n">portion</span> <span class="ow">in</span> <span class="n">all_newsfeeds</span><span class="p">:</span>
<span class="k">for</span> <span class="n">post</span> <span class="ow">in</span> <span class="n">portion</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">post_data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">post</span><span class="p">:</span>
<span class="n">post_data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">+=</span> <span class="p">[</span><span class="n">post</span><span class="p">[</span><span class="n">key</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">post</span><span class="p">:</span>
<span class="n">post_data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">+=</span> <span class="p">[</span><span class="s1">'None'</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">KeyError</span> <span class="k">as</span> <span class="n">var</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">return</span> <span class="n">post_data</span>
</code></pre></div>
<p>Таким образом мы написали функцию для получения информации о последних <code>cnt*100</code> постов <code>%%username</code>. Ну и составили простенькую функцию для ведения лога, что бы знать статус выполнения программы.</p>
<p>Теперь дело за малым — сохранить полученную информацию в виде матрицы «объекты-признаки» и обработать тексты.</p>
<h3>1.4 Работа с функциями, накопление и обработка информации</h3>
<div class="highlight"><pre><span></span><code><span class="c1"># Start log file</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">asctime</span><span class="p">())</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\t</span><span class="s1">'</span><span class="p">)</span>
<span class="n">user_id</span> <span class="o">=</span> <span class="c1"># your id (int)</span>
<span class="n">all_data</span> <span class="o">=</span> <span class="n">getLikes</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">vkapi</span><span class="p">)</span> <span class="c1"># Scan 2 * 100 = 200 news posts</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1"> message download: '</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">all_data</span><span class="p">[</span><span class="s1">'text'</span><span class="p">])))</span>
<span class="c1"># If need human-readable data</span>
<span class="c1"># import datetime</span>
<span class="c1"># for data in all_data['date']:</span>
<span class="c1"># print datetime.datetime.fromtimestamp(</span>
<span class="c1"># int(data)</span>
<span class="c1"># ).strftime('%Y-%m-%d %H:%M:%S')</span>
<span class="c1"># Add data to exist df and save it</span>
<span class="n">len_old</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">len_new</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">final_df_new</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">all_data</span><span class="p">,</span> <span class="n">orient</span><span class="o">=</span><span class="s1">'columns'</span><span class="p">)</span>
<span class="n">final_df_old</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_pickle</span><span class="p">(</span><span class="s1">'/home/username/scripts/vk_news_df'</span><span class="p">)</span>
<span class="n">len_old</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">final_df_old</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
<span class="n">final_df_old</span> <span class="o">=</span> <span class="n">final_df_old</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">final_df_new</span><span class="p">,</span> <span class="n">ignore_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">final_df_old</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="p">[</span><span class="s1">'post_id'</span><span class="p">],</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">final_df</span> <span class="o">=</span> <span class="n">final_df_old</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">len_new</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">final_df</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
<span class="c1"># write number of new mwssage into log file</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1"> new news message: '</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">len_new</span> <span class="o">-</span> <span class="n">len_old</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
<span class="c1"># Create new file</span>
<span class="n">final_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">all_data</span><span class="p">,</span> <span class="n">orient</span><span class="o">=</span><span class="s1">'columns'</span><span class="p">)</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1"> new news message: '</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">final_df</span><span class="o">.</span><span class="n">index</span><span class="p">)))</span>
<span class="c1"># Save df to file</span>
<span class="n">final_df</span><span class="o">.</span><span class="n">to_pickle</span><span class="p">(</span><span class="s1">'/home/username/scripts/vk_news_df'</span><span class="p">)</span>
</code></pre></div>
<p>Логика работы по созданию и пополнению базы данных аналогично статье про <a href="dimyun.space/ru/education-it-reddit">научные новости</a>: «получение новой информации — проверка возможности открытия сохраненной базы данных — создание нового Data Frame — объединение двух Data Frames — удаление дублирующихся строк (по столбу id-новости) — сохранение обновленной базы данных».</p>
<h3>1.5 Обработка и вывод информации</h3>
<p>Переходим к завершающему этапу - обработке и выводу информации. Будем обрабатывать последние 200 новостных постов и выводить облако наиболее часто встречающихся слов.</p>
<div class="highlight"><pre><span></span><code><span class="n">news_to_process</span> <span class="o">=</span> <span class="mi">200</span>
<span class="n">ind_all</span> <span class="o">=</span> <span class="n">final_df</span><span class="o">.</span><span class="n">index</span>
<span class="n">all_text</span> <span class="o">=</span> <span class="n">final_df</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">ind_all</span><span class="p">[</span><span class="o">-</span><span class="n">news_to_process</span><span class="p">:],</span> <span class="p">[</span><span class="s1">'text'</span><span class="p">]]</span>
<span class="n">tag_re</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'(<!--.*?-->|<[^>]*>)'</span><span class="p">)</span>
<span class="c1"># Remove well-formed tags, fixing mistakes by legitimate users</span>
<span class="c1"># clear each post from tag and whitespaces</span>
<span class="n">all_text</span> <span class="o">=</span> <span class="p">[</span><span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' +'</span><span class="p">,</span><span class="s1">' '</span><span class="p">,</span><span class="n">tag_re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' '</span><span class="p">,</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">all_text</span><span class="o">.</span><span class="n">values</span><span class="p">]</span>
<span class="n">list_in</span> <span class="o">=</span> <span class="p">[</span><span class="n">all_text</span><span class="p">]</span>
<span class="n">list_out</span> <span class="o">=</span> <span class="p">[</span><span class="s1">''</span><span class="p">]</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">list_in</span><span class="p">)):</span>
<span class="n">self_messages</span> <span class="o">=</span> <span class="n">list_in</span><span class="p">[</span><span class="n">t</span><span class="p">]</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">self_messages</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">str_data</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">checkGood</span><span class="p">(</span><span class="n">symb</span><span class="p">):</span>
<span class="n">good1</span> <span class="o">=</span> <span class="s1">'ёйцукенгшщзхъэждлорпавыфячсмитьбю'</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">)</span>
<span class="n">good2</span> <span class="o">=</span> <span class="sa">u</span><span class="s1">'ёйцукенгшщзхъэждлорпавыфячсмитьбю'</span>
<span class="k">if</span> <span class="n">symb</span> <span class="ow">in</span> <span class="n">good1</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">elif</span> <span class="n">symb</span> <span class="ow">in</span> <span class="n">good2</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">str_data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">' '</span> <span class="ow">or</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">:</span>
<span class="n">text</span> <span class="o">+=</span> <span class="s1">' '</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">checkGood</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
<span class="n">text</span> <span class="o">+=</span> <span class="n">i</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">text</span> <span class="o">+=</span> <span class="s1">''</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' +'</span><span class="p">,</span><span class="s1">' '</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">text</span><span class="p">[:]</span>
<span class="c1"># Normalize of word form</span>
<span class="n">morph</span> <span class="o">=</span> <span class="n">pymorphy2</span><span class="o">.</span><span class="n">MorphAnalyzer</span><span class="p">()</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">):</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">morph</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">i</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">text</span> <span class="o">+=</span> <span class="n">p</span><span class="o">.</span><span class="n">normal_form</span> <span class="o">+</span> <span class="s1">' '</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">text</span><span class="p">[:]</span>
<span class="c1"># Stop words check</span>
<span class="n">stop_words</span> <span class="o">=</span> <span class="n">stopwords</span><span class="o">.</span><span class="n">words</span><span class="p">(</span><span class="s1">'russian'</span><span class="p">)</span>
<span class="n">stop_words</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="sa">u</span><span class="s1">'что'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'это'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'так'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'вот'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'быть'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'как'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'в'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'—'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'к'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'на'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'ок'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'кстати'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'который'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'мочь'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'весь'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'еще'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'также'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'свой'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'ещё'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'самый'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'ул'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'комментарий'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'английский'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'язык'</span><span class="p">])</span>
<span class="n">words</span> <span class="o">=</span> <span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span>
<span class="n">w_before</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">words</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">words</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">stop_words</span><span class="p">]</span>
<span class="n">w_after</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1"> raw and tidy words: '</span><span class="p">,</span> <span class="nb">str</span><span class="p">([</span><span class="n">w_before</span><span class="p">,</span> <span class="n">w_after</span><span class="p">])</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">list_out</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">=</span> <span class="n">str_data</span><span class="p">[:]</span>
<span class="n">str_news</span> <span class="o">=</span> <span class="n">list_out</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># Create wordcloud</span>
<span class="n">alice_mask</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">"/home/username/scripts/gear2.png"</span><span class="p">))</span>
<span class="n">wc</span> <span class="o">=</span> <span class="n">WordCloud</span><span class="p">(</span><span class="n">background_color</span><span class="o">=</span><span class="s2">"white"</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="n">alice_mask</span><span class="p">,</span> <span class="n">collocations</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="n">wc</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">str_news</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">grey_color_func</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">font_size</span><span class="p">,</span> <span class="n">position</span><span class="p">,</span> <span class="n">orientation</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="c1">#50 shades of white</span>
<span class="k">return</span> <span class="s2">"hsl(0, 0</span><span class="si">%%</span><span class="s2">, </span><span class="si">%d%%</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">60</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
<span class="n">default_colors</span> <span class="o">=</span> <span class="n">wc</span><span class="o">.</span><span class="n">to_array</span><span class="p">()</span>
<span class="n">wc2</span> <span class="o">=</span> <span class="n">wc</span><span class="o">.</span><span class="n">recolor</span><span class="p">(</span><span class="n">color_func</span><span class="o">=</span><span class="n">grey_color_func</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="c1"># store to file</span>
<span class="n">wc2</span><span class="o">.</span><span class="n">to_file</span><span class="p">(</span><span class="s2">"/home/username/conky/scripts/news_raw.png"</span><span class="p">)</span>
</code></pre></div>
<p>Логика кода такая же, что и в статье про reddit, с той лишь разницей, что мы выбираем текст новостей и работаем с ним: <em>очистка текстов от html-тэгов и лишних пробелов — удаление всего, что не буква - повторное удаление лишних пробелов — морфологизация слов (приведение к «нормальному» виду) — удаление стоп слов (наиболее часто встречающихся, таких как артикли, местоимения и т.д.) - построение одной большой строки из слов и пробелов и ее выдача - построение облака слов</em>.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/IT/IT__vk-words_fig_2.png" alt="example2" width="600px"/>
</td>
<td>
<i>
Рис. 2. Пример выполнения скрипта (анализ новостей).
</i>
</td>
</tr>
</table>
</div>
<p>Напоследок, маленький презент, для пользователей Ubuntu (а может и не только для них, если подумать) — полученное изображение можно перевести в изображение с прозрачным фоном, простой терминальной командой:</p>
<p><code>convert ~/news_raw.png -transparent black ~/news_ready.png</code></p>
<p>Так же, можно организовать автоматическое поступление новой информации, через автозапуск:</p>
<div class="highlight"><pre><span></span><code>Menu — Startup Application — Add:
Name: vk_news_reader
Command: sh -c «sleep <span class="m">600</span> <span class="o">&&</span> /FULL_PATH/vk_news.py»
</code></pre></div>
<p>Выставляем задержку на исполнение в секундах, что бы система успела подключиться к интернету и выполняем скрипт (для выполнения можно указать <code>«python /FULL_PATH/vk_news.py»</code>).</p>
<h2>2. Анализ диалогов в vk.com</h2>
<p>Думаю, с первой частью мы разобрались. Теперь перейдем к анализу диалогов. Общая суть остается прежней: <em>vk API для добычи информации - сохранение информации на жестком диске - обработка</em>. Вся логика и идеология остается прежней, так что приведу полный код без лишних пояснений.</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">scipy</span>
<span class="kn">import</span> <span class="nn">nltk</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
<span class="kn">import</span> <span class="nn">seaborn</span>
<span class="kn">import</span> <span class="nn">matplotlib</span> <span class="k">as</span> <span class="nn">mpl</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span>
<span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">path</span>
<span class="kn">from</span> <span class="nn">wordcloud</span> <span class="kn">import</span> <span class="n">WordCloud</span>
<span class="kn">import</span> <span class="nn">pymorphy2</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">vk_log</span>
<span class="kn">import</span> <span class="nn">pickle</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Counter</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">vk</span><span class="o">.</span><span class="n">Session</span><span class="p">(</span><span class="n">access_token</span><span class="o">=</span><span class="s1">'you_token'</span><span class="p">)</span>
<span class="n">vkapi</span> <span class="o">=</span> <span class="n">vk</span><span class="o">.</span><span class="n">API</span><span class="p">(</span><span class="n">session</span><span class="p">)</span>
<span class="n">friends</span> <span class="o">=</span> <span class="n">vkapi</span><span class="p">(</span><span class="s1">'friends.get'</span><span class="p">)</span> <span class="c1"># take list of all friends of user</span>
<span class="c1"># friends = [1111111, 2222222, 33333333] # also, we can manual set list of friends use they ID</span>
<span class="k">def</span> <span class="nf">get_dialogs</span><span class="p">(</span><span class="n">user_id</span><span class="p">):</span>
<span class="c1"># Get dialog with user</span>
<span class="n">dialogs</span> <span class="o">=</span> <span class="n">vkapi</span><span class="p">(</span><span class="s1">'messages.getDialogs'</span><span class="p">,</span> <span class="n">user_id</span><span class="o">=</span><span class="n">user_id</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dialogs</span>
<span class="k">def</span> <span class="nf">get_history</span><span class="p">(</span><span class="n">friends</span><span class="p">,</span> <span class="n">sleep_time</span><span class="o">=</span><span class="mf">0.4</span><span class="p">):</span>
<span class="c1"># Get all dialogues history</span>
<span class="n">all_history</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">friend</span> <span class="ow">in</span> <span class="n">friends</span><span class="p">:</span>
<span class="n">friend_dialog</span> <span class="o">=</span> <span class="n">get_dialogs</span><span class="p">(</span><span class="n">friend</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">sleep_time</span><span class="p">)</span>
<span class="n">dialog_len</span> <span class="o">=</span> <span class="n">friend_dialog</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">friend_history</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">dialog_len</span> <span class="o">></span> <span class="mi">200</span><span class="p">:</span>
<span class="c1"># vk API condition: len <= 200</span>
<span class="n">resid</span> <span class="o">=</span> <span class="n">dialog_len</span>
<span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">resid</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">friend_history</span> <span class="o">+=</span> <span class="n">vkapi</span><span class="p">(</span><span class="s1">'messages.getHistory'</span><span class="p">,</span>
<span class="n">user_id</span><span class="o">=</span><span class="n">friend</span><span class="p">,</span>
<span class="n">count</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
<span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">sleep_time</span><span class="p">)</span>
<span class="n">resid</span> <span class="o">-=</span> <span class="mi">200</span>
<span class="n">offset</span> <span class="o">+=</span> <span class="mi">200</span>
<span class="k">if</span> <span class="n">resid</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'--processing '</span><span class="p">,</span> <span class="n">friend</span><span class="p">,</span> <span class="s1">': '</span><span class="p">,</span> <span class="n">resid</span><span class="p">,</span>
<span class="s1">' of '</span><span class="p">,</span> <span class="n">dialog_len</span><span class="p">,</span> <span class="s1">' messages left'</span><span class="p">)</span>
<span class="n">all_history</span> <span class="o">+=</span> <span class="n">friend_history</span>
<span class="n">i</span> <span class="o">+=</span><span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'processed '</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="s1">' friends of '</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">friends</span><span class="p">))</span>
<span class="k">return</span> <span class="n">all_history</span>
<span class="n">all_history</span> <span class="o">=</span> <span class="n">get_history</span><span class="p">(</span><span class="n">friends</span><span class="p">)</span>
<span class="c1"># Save or load data</span>
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">all_history</span><span class="p">,</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"all_vk_history.p"</span><span class="p">,</span> <span class="s2">"wb"</span><span class="p">))</span>
<span class="c1"># all_history = pickle.load(open("all_vk_history.p", "rb"))</span>
<span class="n">interesting_id</span> <span class="o">=</span> <span class="n">user_id</span> <span class="c1"># set interesting user id</span>
<span class="k">def</span> <span class="nf">get_messages_for_user</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">user_id</span><span class="p">):</span>
<span class="c1"># Extract all message for set user</span>
<span class="n">user_messages</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">my_messages</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">dialog</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">dialog</span><span class="p">)</span> <span class="o">==</span> <span class="nb">dict</span><span class="p">:</span>
<span class="k">if</span> <span class="n">dialog</span><span class="p">[</span><span class="s1">'from_id'</span><span class="p">]</span> <span class="o">==</span> <span class="n">user_id</span><span class="p">:</span>
<span class="n">m_text</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">"<br>"</span><span class="p">,</span> <span class="s2">" "</span><span class="p">,</span> <span class="n">dialog</span><span class="p">[</span><span class="s1">'body'</span><span class="p">])</span>
<span class="n">user_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">m_text</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">dialog</span><span class="p">[</span><span class="s1">'from_id'</span><span class="p">]</span> <span class="o">==</span> <span class="n">YOUR_ID</span><span class="p">:</span>
<span class="n">m_text</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">"<br>"</span><span class="p">,</span> <span class="s2">" "</span><span class="p">,</span> <span class="n">dialog</span><span class="p">[</span><span class="s1">'body'</span><span class="p">])</span>
<span class="n">my_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">m_text</span><span class="p">)</span>
<span class="nb">print</span> <span class="s1">'Extracted'</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">user_messages</span><span class="p">),</span> <span class="s1">' user messages in total'</span>
<span class="nb">print</span> <span class="s1">'Extracted'</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">my_messages</span><span class="p">),</span> <span class="s1">' my messages in total'</span>
<span class="k">return</span> <span class="n">user_messages</span><span class="p">,</span> <span class="n">my_messages</span>
<span class="n">user_messages</span><span class="p">,</span> <span class="n">my_messages</span> <span class="o">=</span> <span class="n">get_messages_for_user</span><span class="p">(</span><span class="n">all_history</span><span class="p">,</span> <span class="n">interesting_id</span><span class="p">)</span>
<span class="n">list_in</span> <span class="o">=</span> <span class="p">[</span><span class="n">user_messages</span><span class="p">,</span> <span class="n">my_messages</span><span class="p">]</span>
<span class="n">list_out</span> <span class="o">=</span> <span class="p">[</span><span class="s1">''</span><span class="p">,</span><span class="s1">''</span><span class="p">]</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">list_in</span><span class="p">)):</span>
<span class="n">self_messages</span> <span class="o">=</span> <span class="n">list_in</span><span class="p">[</span><span class="n">t</span><span class="p">]</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">self_messages</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">str_data</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">checkGood</span><span class="p">(</span><span class="n">symb</span><span class="p">):</span>
<span class="n">good1</span> <span class="o">=</span> <span class="s1">'ёйцукенгшщзхъэждлорпавыфячсмитьбю'</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">)</span>
<span class="n">good2</span> <span class="o">=</span> <span class="sa">u</span><span class="s1">'ёйцукенгшщзхъэждлорпавыфячсмитьбю'</span>
<span class="k">if</span> <span class="n">symb</span> <span class="ow">in</span> <span class="n">good1</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">elif</span> <span class="n">symb</span> <span class="ow">in</span> <span class="n">good2</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">str_data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">' '</span> <span class="ow">or</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">:</span>
<span class="n">text</span> <span class="o">+=</span> <span class="s1">' '</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">checkGood</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
<span class="n">text</span> <span class="o">+=</span> <span class="n">i</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">text</span> <span class="o">+=</span> <span class="s1">''</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">text</span><span class="p">[:]</span>
<span class="n">morph</span> <span class="o">=</span> <span class="n">pymorphy2</span><span class="o">.</span><span class="n">MorphAnalyzer</span><span class="p">()</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">):</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">morph</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">i</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">text</span> <span class="o">+=</span> <span class="n">p</span><span class="o">.</span><span class="n">normal_form</span> <span class="o">+</span> <span class="s1">' '</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">text</span><span class="p">[:]</span>
<span class="c1"># Stop words check</span>
<span class="kn">from</span> <span class="nn">nltk.corpus</span> <span class="kn">import</span> <span class="n">stopwords</span>
<span class="n">stop_words</span> <span class="o">=</span> <span class="n">stopwords</span><span class="o">.</span><span class="n">words</span><span class="p">(</span><span class="s1">'russian'</span><span class="p">)</span>
<span class="n">stop_words</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="sa">u</span><span class="s1">'что'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'это'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'так'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'вот'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'быть'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'как'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'в'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'—'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'к'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'на'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'ок'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'кстати'</span><span class="p">,</span>
<span class="sa">u</span><span class="s1">'ещё'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'вообще'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'мб'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'чтоть'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'весь'</span><span class="p">])</span>
<span class="n">words</span> <span class="o">=</span> <span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span>
<span class="n">words</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">words</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">stop_words</span><span class="p">]</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">list_out</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">=</span> <span class="n">str_data</span>
<span class="nb">print</span> <span class="nb">len</span><span class="p">(</span><span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">))</span>
<span class="n">str_user</span> <span class="o">=</span> <span class="n">list_out</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">str_my</span> <span class="o">=</span> <span class="n">list_out</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="nb">print</span> <span class="s1">'Dict strong user: '</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">str_lisa</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)))</span> <span class="o">/</span> <span class="nb">float</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">str_user</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)))</span> <span class="o">*</span> <span class="mf">100.0</span>
<span class="nb">print</span> <span class="s1">'Dict strong my: '</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">str_my</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)))</span> <span class="o">/</span> <span class="nb">float</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">str_my</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)))</span> <span class="o">*</span> <span class="mf">100.0</span>
<span class="n">alice_mask</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">"IMAGE.jpg"</span><span class="p">))</span>
<span class="n">wc</span> <span class="o">=</span> <span class="n">WordCloud</span><span class="p">(</span><span class="n">background_color</span><span class="o">=</span><span class="s2">"black"</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="n">alice_mask</span><span class="p">)</span>
<span class="c1"># generate word cloud</span>
<span class="n">wc</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">str_lisa</span><span class="p">)</span>
<span class="c1"># store to file</span>
<span class="n">wc</span><span class="o">.</span><span class="n">to_file</span><span class="p">(</span><span class="s2">"User.png"</span><span class="p">)</span>
<span class="n">alice_mask</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">"IMAGE.jpg"</span><span class="p">))</span>
<span class="n">wc</span> <span class="o">=</span> <span class="n">WordCloud</span><span class="p">(</span><span class="n">background_color</span><span class="o">=</span><span class="s2">"black"</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="n">alice_mask</span><span class="p">)</span>
<span class="c1"># generate word cloud</span>
<span class="n">wc</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">str_my</span><span class="p">)</span>
<span class="c1"># store to file</span>
<span class="n">wc</span><span class="o">.</span><span class="n">to_file</span><span class="p">(</span><span class="s2">"Me.png"</span><span class="p">)</span>
</code></pre></div>
<h2>3. Заключение</h2>
<p>Надеюсь, что в результате прочтения вы обрели навыки работы с vk.com API, а также с обработкой текстовой информации.</p>
<p>Согласно представленному коду, все поставленные задачи решены и цели достигнуты.</p>
<p>Надеюсь, что Вы увидите пути для доработки показанного решения и мое решение будет вам полезно. Спасибо, что были с нами и приятного дня!</p>Создаем свой рукописный шрифт2018-10-13T12:00:00+03:002020-05-12T12:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2018-10-13:/ru/blog/education-it-handwriting.html<p>Данная небольшая заметка расскажет об опыте создания рукописного шрифта. Его необходимость была обусловлена следующим личными фактором:</p>
<ul>
<li>один очень важный мне человек попросил помочь с написанием конспектов (в 2018 году все еще остаются преподаватели, требующие рукописный конспект).</li>
</ul>
<p>Далее включилось подсознание (что бы заставить себя работать) и появились следующие идеи:</p>
<ul>
<li>захотелось создать …</li></ul><p>Данная небольшая заметка расскажет об опыте создания рукописного шрифта. Его необходимость была обусловлена следующим личными фактором:</p>
<ul>
<li>один очень важный мне человек попросил помочь с написанием конспектов (в 2018 году все еще остаются преподаватели, требующие рукописный конспект).</li>
</ul>
<p>Далее включилось подсознание (что бы заставить себя работать) и появились следующие идеи:</p>
<ul>
<li>захотелось создать такой шрифт для сохранения информации о людях;</li>
<li>шрифт для ведения личных заметок (придания большей персональности сайту или электронным письмам);</li>
<li>проверить, будет ли влиять такой шрифт на лучшее запоминание текстов и лучшему восприятию материала.</li>
</ul>
<p>Итак, по тем или иным причинам, приступим. Основанием для работы послужила отличная <a href="https://gordonlesti.com/creating-a-handwritten-truetype-font-in-linux/">заметка</a>. Все работы проводились в операционной системе Ubuntu 18.04, за работоспособность в прочих системах не ручаюсь, хотя не вижу преград или сложностей чтобы попробовать (если это необходимо).</p>
<p>Для выполнения работы нам потребуется:</p>
<ul>
<li>сканер;</li>
<li>принтер;</li>
<li>лист или два листа бумаги А4;</li>
<li>черная ручка или маркер;</li>
<li>программы:</li>
<li><a href="https://www.gimp.org/">GIMP</a>;</li>
<li><a href="https://inkscape.org">Inskape</a>;</li>
<li><a href="https://fontforge.github.io">FontForge</a></li>
<li>порядка 3 часов свободного времени.</li>
</ul>
<h2>1. Подготовка шаблона</h2>
<p>В начале необходимо подготовить шаблон почерка для шрифта. Удобно использовать или миллиметровую бумагу или просто разлинованный с обратной стороны А4 (чтобы в дальнейшем линии не мешали работать с символами, но сами символы были структурированы, как будто в строке рукописного текста). Черной ручкой пишутся все необходимые символы для шрифта. Полученный материал сканируется в графическом формате (предположительно <em>*.png</em> или <em>*.jpg</em>), обрезается все лишнее и файл сохраняется для дальнейшей работы. Должно получиться что-то похожее не рис. 1.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/IT/IT__handwriting_fig_2.jpg" alt="Пример рукописного шаблона для шрифта" width="600px"/>
</td>
<td>
<i>
Рис. 1. Пример рукописного шаблона для шрифта.
</i>
</td>
</tr>
</table>
</div>
<h2>2. Предварительная обработка шаблона</h2>
<p>Сканированное изображение открываем в графическом редакторе <strong>GIMP</strong> и изменяем его параметры контраста и яркости (Пункт меню <code>Colors -> Brightness and Contrast</code>). Стараемся получить наиболее контрастное и не зашумленное изображение. Для меня хорошо работали параметры яркости <em>-50</em>, контраст - <em>максимум</em>.</p>
<p>Копируем полученное изображение в <strong>Inskape</strong>. Далее, необходимо преобразовать его в векторный формат. Для этого используем функцию <code>Path -> Trace Bitmap</code> (при этом изображение должно быть выделено). Используем параметр <em>Grays</em> в области <code>Multiple scans</code>, выставляем количество <em>Scans = 2</em>, выбираем галочку <em>remove background</em> и нажимаем <code>Ok</code>. После преобразования (шрифт станет более “плавным”) закрываем это окошко. Теперь мы можем работать с изображением в векторном формате. Визуально должны отобразиться <em>Nodes</em> на изображении, так же с ними можно работать выбрав курсор с левого меню <code>Edit paths by nodes (F2)</code>. В дальнейшем так мы и будем делать.</p>
<h2>3. Копирование информации из шаблона</h2>
<p>Для дальнейшей корректной работы нам потребуется выделить один символ. Для этого выделяем все ноды (<code>F2</code> или обозначенный ранее курсор), после этого выделяем лишние (выделение стандартное, мышкой) и удаляем их (клавиша <code>Del</code>). Выделенными должны остаться только ноды одного символа. После этого нажимаем <code>Ctrl+L</code> (упрощаем и сглаживаем векторное отображение символа) и <code>Ctrl+C</code> - копируем его в буфер обмена.</p>
<h2>4. Создание шрифта</h2>
<p>Скопированный символ требуется добавить в маску шрифта, который мы будем создавать в программе <strong>FontForge</strong>. Открываем программу, выбираем <code>New</code> - появляется окно шрифта. Скопированный символ (в векторном формате) помещаем в соответствующую ячейку. Делается это двойным кликом на ячейке и <code>Ctrl+V</code>. На открывшемся полотне должен появится контур векторного символа. Теперь нужно привести его к нужному размеру и указать ширину.</p>
<p>В открывшемся окне <code>Element -> Transformation (Ctrl+\\)</code> указываем <em>Scale X 1000 %</em>, <em>Y 1000 %</em> (работало для меня, можете импровизировать). Далее выделяем мышкой весь символ и зажав желтый кружок перетаскиваем его в угол 0,0. Символ должен получиться ограниченным слева и снизу, иметь небольшое расстояние вверху (до линии). Как Вы уже возможно догадались, эти линии - границы отображения символа при печати. Дополнительная граница внизу - место для “хвостика” буквы. Если они уходит за дополнительную нижнюю границу при создании нового абзаца символ будет обрезан по эту границу (но просто при переходе на новую строку символы обрезаться не будут). Далее <code>Metrics - Set Wight</code> и устанавливаем ширину буквы (у меня около 400). Теперь наш символ готов и таким же образом нужно внести все остальные. Заполняем новыми символами столько ячеек, сколько нам необходимо для полноценного шрифта.</p>
<p>Не забываем периодически сохраняться (внутренний формат программы <em>*.sfd</em>)!</p>
<h2>5. Генерирование шрифта</h2>
<p>Программа <strong>FontForge</strong> предлагает множество возможных вариантов шрифтов и типов их сохранения. Наиболее полным является <em>Unicode Full</em> (типы выбираются во вкладке <code>Encoding</code>). Для меня вполне хватило типа <em>ISO 8859-5 (Cyrillic)</em>. После заполнения необходимых символов, достаточно сгенерировать шрифт: <code>File -> Generate Font</code> (я выбирал более сглаженный тип шрифта <em>ClearType *.ttf</em>).</p>
<p>Все, получился файл с вашим собственным шрифтом. Осталось испытать его и получить желаемые результаты.</p>
<blockquote>
<p>В системе Ubuntu шрифт нужно положить в папку <em>~/.local/share/fonts</em> (или создать ее, если она отсутствует) и он станет доступным в окружении пользователя, например, в <strong>LibreOffice</strong>.</p>
</blockquote>Create your own handwritten font2018-10-13T12:00:00+03:002020-05-12T12:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2018-10-13:/blog/education-it-handwriting.html<p>This short note tell you about creation of handwritten font (tested by myself). The necessity of this task was caused by the following personal factor:</p>
<ul>
<li>one very good person asked my help with notes writing (yes, there are some university teachers who ask handwritten notes in Russia in 2018).</li>
</ul>
<p>Further …</p><p>This short note tell you about creation of handwritten font (tested by myself). The necessity of this task was caused by the following personal factor:</p>
<ul>
<li>one very good person asked my help with notes writing (yes, there are some university teachers who ask handwritten notes in Russia in 2018).</li>
</ul>
<p>Further, subconscious mind was <em>On</em> and next ideas was come up:</p>
<ul>
<li>I want to create such fonts to preserve information about living people;</li>
<li>It will be a good font for myself notes (to make my site or e-mails more personally);</li>
<li>I want to test, if such a font will affect the best memorization of texts and a better perception of the material.</li>
</ul>
<p>One way or another, shall we start? The basic article for this work is this <a href="https://gordonlesti.com/creating-a-handwritten-truetype-font-in-linux/">note</a>. Furthermore, all further works are doing in Ubuntu 18.04 OS (I didn’t test this approach is other OS, although I do not see any obstacles or difficulties to try it if necessary).</p>
<p>For this work we will need:</p>
<ul>
<li>scanner;</li>
<li>printer;</li>
<li>one or two sheets of papers (Letter or A4);</li>
<li>black pen or marker;</li>
<li>programs:</li>
<li><a href="https://www.gimp.org/">GIMP</a>,</li>
<li><a href="https://inkscape.org">Inskape</a>,</li>
<li><a href="https://fontforge.github.io">FontForge</a>;</li>
<li>about 3 hours of free time.</li>
</ul>
<h2>1. Template preparation</h2>
<p>First, you should prepare a handwriting template for the font. It is handy to use either millimeter paper or simply the A4/Letter sheet (with lines on the back side, so that lines do not interfere with the characters). Next, a black pen is used to write all the necessary symbols for the font. The resulting material is scanned in graphical format (<em>*.png</em> or <em>*.jpg</em> for example). Unnecessary blank space is cut off and the file is saved for further work. Something similar to Fig. 1 should appear.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/IT/IT__handwriting_fig_2.jpg" alt="handwritten template" width="600px"/>
</td>
<td>
<i>
Fig. 1. Example of handwritten template.
</i>
</td>
</tr>
</table>
</div>
<h2>2. Preliminary work with template</h2>
<p>Scanned image is opened in graphical redactor <strong>GIMP</strong> and its contrast and brightness are modified (Menu bar <code>Colors -> Brightness and Contrast</code>). Try to prepare the most contrast and low-noises image (for me the <em>-50</em> of brightness and <em>maximum</em> of contrast works good).</p>
<p>Further, copy resulting image to <strong>Inskape</strong>. First of all, our image need to convert to vector form. We can use function <code>Path -> Trace Bitmap</code> for it (and our image should be selected). Use <em>Grays</em> parameter in <em>Multiple scans</em> area and set <em>Scans = 2</em>. Next, set <em>remove background</em> checkbox and press <code>Ok</code>. After such iterations our font will be more smooth. Also, the <em>Nodes</em> must appear for image (you can work with them with select <code>Edit path by nodes (F2)</code> from left menu).</p>
<h2>3. Copy information from template</h2>
<p>For further working, we need to select only one symbol from our handwritten template (section No 1). For that, we need to select all nodes from section No 2 (<code>F2</code>), then select all unnecessary nodes with help of the mouse, and delete them (<code>Del</code>). Then, we must see, that only one symbol has nodes. Next, use <code>Ctrl+L</code> (for simplify and smooth the symbol image) and <code>Ctrl+C</code> for copy it to clipboard.</p>
<h2>4. Font creation</h2>
<p>Previously copied symbol is added to computer font template, which is created in <strong>FontForge</strong> program. Open the program and click <code>New</code>, which open the fonts window. Then, input copied vector character to its cell. Such action can be done with double click on cell and <code>Ctrl-V</code> magic. Further, the new symbol’s shape must appear inside computer font template. Now, we need to resize it and set width.</p>
<p>Open proper window (<code>Element -> Transformation (Ctrl+\\)</code>) and set <em>Scale X 1000 %</em>, <em>Y 1000 %</em> (its worked in my case, but you can improvise). Next, select the whole symbol with mouse and, with clicked Yellow circle, drag it to 0,0 angle (left bottom). So, the symbol should be limited to the left and the bottom, and have a small distance to the top line. As you probably have guessed, this lines is symbol borders for printing. Additional border at the bottom is the space for the “tail” of the letter. If it lower than this border, the letter will cut when the new paragraph is started (but for simple new line letter will not be cut). Further, select <em>Metrics - Set Wight</em> and set letter width (I set about 400). Well, we finished our first symbol, and next, we need to process others. Fill cells of computer font template as full, as you needed it.</p>
<p>Do not forget to saved your file time to time (to <em>*.sfd</em> inner format)!</p>
<h2>5. Font generating</h2>
<p>The <strong>FontForge</strong> program have a lot of fonts types (you can select type in <code>Encoding</code> menu). The <em>Unicode Full</em> is the most complete font type (and enormously big). As for me, the <em>ISO 8859-5 (Cyrillic)</em> font was good enough. After you filled all needed symbols to computer font template, we can generate our handwriting font with <code>File -> Generate Font</code> (also, I used additional option <em>ClearType *.ttf</em>).</p>
<p>Well, that’s it! You have your file with handwritten font and you can test it already!</p>
<blockquote>
<p>For Ubuntu system you need to put this font to <em>~/.local/share/fonts</em> folder (or create this folder first). Next, you can use your font in user environment (in <strong>LibreOffice</strong> for example).</p>
</blockquote>Automation system of industrial control2019-12-09T00:00:00+03:002020-05-06T00:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2019-12-09:/blog/education-ChSU-automation-system.html<h2>Automated and nondestructive industrial control</h2>
<p>Warm greetings to all of you in this little blog article, which is tell about levels of automation system and control in industry. Some common words about automation and industry of mineral fertilizer will also be considered.</p>
<p>This short article represents a little translation of …</p><h2>Automated and nondestructive industrial control</h2>
<p>Warm greetings to all of you in this little blog article, which is tell about levels of automation system and control in industry. Some common words about automation and industry of mineral fertilizer will also be considered.</p>
<p>This short article represents a little translation of more detailed Russian version about sensors and nondestructive control. Time after time I will try to add more details and practice examples in this paper.</p>
<p>Also, I will be very grateful for any reviews and opinions about this theme and my style of writing. Please, do not hesitate to contact me with e-mails (Dm.Yunovidov@gmail.com) or comment button below.</p>
<p>So, shall we start?</p>
<h2>1. Introduction</h2>
<h3>1.1 Intro and objectives</h3>
<p>In this part of the article some main principles and determination in automation is presented. By the end of the chapter I’d like you to understand next:</p>
<ul>
<li>definition of automation, control and information technology (IT);</li>
<li>connection between such things;</li>
<li>conception of ‘products life cycle’ and role of automation in it;</li>
<li>classification of industry facilities and automation system.</li>
</ul>
<h3>1.2 Engineer science and terminology</h3>
<p>The engineer science is the discrete discipline with its own language, tasks and instruments (as well, as the other science like art, social, natural science, etc.). The <strong>main question</strong> for engineer is:</p>
<blockquote>
<p>how can I solve this problem?</p>
</blockquote>
<p>Such question lead us to the typical engineer definition of system as <strong>the black box</strong> (we do not now what inside and it did not bothered us, what is important - how we put it in work). The main subjects for us are input and output flow of this black box and how this flows relay to each other. It is very similar to programming. Each devise will give direct output from concrete input (fig. 1.1).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_1-1.png" alt="Black box" width="600px"/>
</td>
<td>
<i>
Fig. 1.1. The black box concept.
</i>
</td>
</tr>
</table>
</div>
<p>The other important feature of engineer science are special instruments (mainly for the visualization):</p>
<ul>
<li>technical draws and specifications;</li>
<li>schemes;</li>
<li>block diagrams and programs;</li>
<li>technical and principal papers, etc..</li>
</ul>
<p>I think, that you already know it and see it a lot…</p>
<p>Control, automation, robotization and sensors are the most important things for modern industry. Especially it is relevant for <strong>Industry 4.0</strong> - yet another industry revolutions, which are newer stop (and it is amazing)! So, us you can see, the automation is always actual (beginning from the 18th century and uncle Ford).</p>
<p>Main problems of automation and control relay to mechanical system, automatic perception, navigation and design making system.</p>
<p>The separate problem is <strong>‘chaos’ systems interpretation</strong>, which include a lot of non linear dynamic systems. In spite of linear dynamic systems (which we can interpreted with differential equations), the ‘chaotic’ dynamic system highly sensitive for external conditions and variations of system parameters. For such system interpretation widely use statistical methods: nonlinear multidimensional analysis, machine learning and other ‘big data analysis’. But, it is not the theme of this little course.</p>
<p>We studies automation system classification and the <strong>control</strong>, which is broadly speaking a simple check between set (desire) and real parameters in different industrial process. And when we see one, we say about <strong>defect</strong> in process or product. The process of search of defects itself name <strong>diagnostics</strong>.</p>
<p>For this purpose widely use a non destructive methods of control: visual (color, odor, shape, etc.), spectrophotometry (UV, Infrared, visible light or X-ray), ultrasound analysis, etc. But all of this complicated and hard-to-speak methods are based on <strong>sensors</strong>.</p>
<p>All of this sensors and methods of control are used for acquire information. There are a lot of date there, and we swim in big sea of different data, which we can use for control and diagnostics. Well, we are ourselves are data, which we can’t calculate properly.</p>
<p><strong>Analyzed parameters (parameters of diagnostics)</strong> of object contain information about object condition and there are 3 types:</p>
<ol>
<li>
<p><strong>functional parameters of product</strong> - which characterize the exploitation of the product (maximum force, liquid pressure, acceleration/deceleration time, specific energy consumption, ets.);</p>
</li>
<li>
<p><strong>structure parameters</strong> - which directly characterize the condition of specific part of the product (element position coordinates, corrosion, etc.);</p>
</li>
<li>
<p><strong>associated process parameters</strong> - defined from external conditions and the processes which accompany a product (temperature, vibration, acoustic signals, level and a spectrum of noises, an error of processing, etc.) - <em>are more widespread, our stop</em>.</p>
</li>
</ol>
<p>The control results are usually presented in the form of continuous functions from time (<span class="math">\(K_J(t)\)</span>) with indication of permissible deviations (errors). The concept of <strong>sensitivity</strong> of the diagnostic parameter (<span class="math">\(K\)</span>) to the state parameter (<span class="math">\(Q\)</span>) is also important: <span class="math">\(\frac{dK}{dQ}\)</span>.</p>
<blockquote>
<p>Task. Let’s think how we can ‘see’ the sensitivity? Plot the figure <span class="math">\(K_J(t) = aQ_J(t) + b\)</span> (with random selected a, b and other parameters) and find the sensitivity.</p>
</blockquote>
<p>There are also some <strong>type of control</strong>: hardware, software, manual or automated, specialized or universal. The very beginning of the concept of non-destructive testing and diagnostics usually refers to the time of X-rays discovery (November 1895), which allowed to detect a bones under the skin and metal object in a closed wooden box.</p>
<p>The <strong>accuracy of control system</strong> depends on <em>the sensitivity and resolution of its components (incoming information channels) and the accuracy of statistical calculation (and algorithms)</em>. In addition, it depends on the calibration (the quality of used reference samples).</p>
<p>Furthermore, <strong>operator functions</strong> (peoples work) in many systems are main part of the process control and too complex for automation, and decision-making systems have not yet become widespread.</p>
<p>Thus, there are <strong>four important directions of development of automated control methods</strong>:</p>
<ol>
<li>
<p>Training of methods and tools of analysis (intellectualization), as well as search for quality metrics.</p>
</li>
<li>
<p>Development of the unified system of quality control (standardization).</p>
</li>
<li>
<p>Improvement of diagnostics (hardware and software).</p>
</li>
<li>
<p>Standardization and implementation of control systems in the field (regulatory documentation).</p>
</li>
</ol>
<p>The main idea of this article is research the 3rd part of this list. But for now, we concentrate about classification and terminology.</p>
<p>First of all, each system of control build on <strong>measuring</strong> - it is process of quantity determination in special units (and we need to compare it with something).</p>
<p><strong>The industry</strong> - systematic activity that could be related to manufacture, service or trade (for this article we certainly use manufacture).</p>
<p><strong>Automation</strong> - a set of technologies that provide the operation of machines and systems without significant human intervention (with some performance compare to manual operation).</p>
<p><strong>Management and Control</strong> - a set of technologies that achieves desired outputs from set input for systems and machines.</p>
<p><strong>Sensors</strong> - devices that provide information about process by measure, count, track, etc.</p>
<p>In this article we will mainly focus on the general concepts of automation in today’s industry and next, try to understand some instrumentation implementation of non-destructive testing. My area of professional activity includes providing control in the production of mineral fertilizers, and I will try to give more concrete examples from this industrial area (Fig. 1.2).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_1-2.jpg" alt="Mineral fertilizer production" width="600px"/>
</td>
<td>
<i>
Fig. 1.2. Structure of mineral fertilizer production.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Task</strong>. For better understanding of terminology, try to explain all previous given statements (industry, automation, management and control and sensors) with your own example (like, in case of temperature control in ceramic furnace).</p>
</blockquote>
<p>From the other hand, it is highly important to understand differences in automation system and control system:</p>
<ol>
<li>
<p>Automation Systems may include Control Systems but the reverse is not true.</p>
</li>
<li>
<p>The main function of control systems is to ensure that outputs follow the set input (in number of set points). However, automation systems may have much more functionality (such as computing set points, monitoring, startup or shutdown the process, scheduling etc).</p>
</li>
</ol>
<p>Furthermore, industrial automation systems makes extensive use of information technology (IT, Fig. 1.3). In the contrary, control system use IT much less.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_1-3.png" alt="IT in Industrial Automation" width="600px"/>
</td>
<td>
<i>
Fig. 1.3. Major areas of IT in industrial automation systems.
</i>
</td>
</tr>
</table>
</div>
<blockquote>
<p><strong>Task</strong>. Try to find an practical example of using IT in automated system (Hint: Try using the internet)</p>
</blockquote>
<p>However, industrial automation systems are different from IT:</p>
<ol>
<li>Industrial automation systems involves a significant number of hardware technologies (instruments, sensors, motors, circuits for signal processing, etc.).</li>
<li>Low level automation systems use IT much less, working more with hardware, electronics and embedded computing (e.g. sensors and actuators).</li>
</ol>
<h3>1.3 Role and types of automation in industry</h3>
<p>It is generally assumed that the main goals of using automation in industry are:</p>
<ul>
<li>Reduction of manual control (minimization of error due to human factor);</li>
<li>increase of the economic effect of production (… profit).</li>
</ul>
<p>The economic effect itself may express as:</p>
<div class="math">$$Profit = (\frac{Price}{Unit} - \frac{Cost}{Unit}) \times Production\_Volume$$</div>
<p>Automation affects to the ratio of cost/unit (decrease the cost) and to the price/unit (increase the quantity). Thus, automation affects the economy from a position:</p>
<ul>
<li><strong>of scale (economy of scale)</strong> - reduction of costs per unit of production (because automation increase production volume and operational and time efficiency);</li>
<li><strong>of objective (application, economy of scope)</strong> - when automation can provide ability to produce a wider range of products.</li>
</ul>
<p>Typical product life cycle is shown in Fig. 1.4.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_1-4.png" alt="Products Life Cycle" width="600px"/>
</td>
<td>
<i>
Fig. 1.4. Typical life cycle of the product.
</i>
</td>
</tr>
</table>
</div>
<p>At the first stage the idea of products is created on the base of research of the market, demands and assets. Then a manufacturing model is created, and the prototype of the product is made. After checking the performance and suitability of the prototype, the production is scaled up and assembled to ensure that the necessary resources and technologies are available for mass production. Next, direct mass production and product quality control are carried out. The produced product enters the market, from which comes the corresponding response (feedback); on the basis of which the production evolves (increases capacity or changes the product).</p>
<blockquote>
<p><strong>Task</strong>. Where can automation be used in this scheme and what advantages does it provide?</p>
<p><strong>Tasks</strong>. Give examples of industries: where 1 - economy of scale is more important than economy of scope; 2 - the opposite and 3 - they are equal.</p>
</blockquote>
<h4>1.3.1 Type of production systems</h4>
<p>Based on the previous determined scale and scope we can determined major type of production (fig. 1.5).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_1-5.png" alt="Type of Production Systems" width="600px"/>
</td>
<td>
<i>
Fig. 1.5. Classification of production system.
</i>
</td>
</tr>
</table>
</div>
<ul>
<li>
<p><strong>Continuous flow process</strong> - the product produced “continuously” (it is not a discrete object). Volumes are large, the difference in products is relatively small (oil refining, cement production, steel industry, etc.).</p>
</li>
<li>
<p><strong>Mass manufacturing of discrete production</strong> - large volumes of discrete objects, variation of products is rather limited (instrument making, automotive, frying pans production, etc.).</p>
</li>
<li>
<p><strong>Series production (batch production)</strong> - produces a series of discrete or continuous products, differences between products are bigger then in previous one. The same set of equipment produces many types of products (but for each series/party a separate parameters are set - it is “recipe” of the batch) (pharmaceuticals, foundry, plastic molding, printing, etc.). This type also includes the production of mineral fertilizers (although for some technological schemes and facilities we can assume the mass production of discrete products).</p>
</li>
<li>
<p><strong>Job shops (workshops)</strong> - a small number of discrete products, usually to order, any changes in the product are possible (prototyping, 3D printing, various workshops, etc.).</p>
</li>
</ul>
<h4>1.3.2 Type of automation system</h4>
<p>Automatic systems can be categorized according to the flexibility and degree of integration into the manufacturing process.</p>
<ul>
<li>
<p><strong>Fixed automation</strong> - a fixed set of operating parameters for mechanized equipment. It is used to perform fixed and repetitive operations in order to produce more identical parts (used in continuous and mass production types, e.g.: paint shop conveyors, distillation, sample feed lines, etc.).</p>
</li>
<li>
<p><strong>Programmable automation</strong> - change of operation sequence and configuration of machines by electronic controls. This scheme may require non-trivial programming (e.g. for different PLCs, usually used in batch production where the variety of working equipment is low and the variation of products is high; e.g. paper or steel mills, etc.).</p>
</li>
<li>
<p><strong>Flexible automation</strong> - used in flexible manufacturing systems (FMS) that are constantly controlled by the computer (operators enter high level commands and lower level changes are made automatically; usually implement in batch and job shop production where there are many varieties of product and the workload varies from medium to low). Such systems usually use multi-purpose computers with numerical control (CNC), automobiles with automatic guidance (AGV, robotic systems) and others.</p>
</li>
<li>
<p><strong>Integrated automation</strong> - complete automation of production where all processes are performed and coordinated by computer (Computer Integrated Manufacturing - CIM). In other words, it is full integration of technological and management operations using IT. Often it can also include a business management system too. So far, successful examples of such systems are very small and it is difficult to examine it (according to type of production).</p>
</li>
</ul>
<p>Note that the scale and complexity of automated systems is growing from fixed to integrated automation. But remember that the type of automation must be chosen for each particular production and task (and investments in it must be justified economically).</p>
<p>For example, fixed automation is appropriate when:</p>
<ul>
<li>The differences in product type are small (size, shape, number of parts, material).</li>
<li>There is a predictable and stable demand for a product within 2-5 years (and the production capacity is also stable).</li>
<li>The production volume per time is high.</li>
<li>Optimum productivity due to competition is required.</li>
</ul>
<p>Flexible automation, on the other hand, is used in the following situations:</p>
<ul>
<li>There are significant differences in product types (for one production system).</li>
<li>The product model life cycle is small (frequent improvements and design modifications that change production is required).</li>
<li>Production volumes are moderate and market demand is not so predictable.</li>
</ul>
<p>Nevertheless, within the framework of nowadays industrial revolve ‘Industry 4.0’, productions are increasingly inclined to use serial production and to upgrade continuous and mass production for these purposes. As a result, flexible automation is becoming more and more popular.</p>
<blockquote>
<p><strong>Tasks</strong>. How we can determine which type of automation prevails in manufactures due to a technical inspection of it? For which factory would you recommend computer integrated manufacturing and why? Which type of automation would you recommend for production:
* incandescent bulbs;
* clothes;
* textiles;
* mineral fertilizers;
* printing;
* pharmaceuticals;
* toys.</p>
</blockquote>
<h3>1.4 Exercises</h3>
<ol>
<li>
<p>Describe the role of automation in the overall profitability of the production system.</p>
</li>
<li>
<p>How does industrial automation help to save money and what types of savings it is?</p>
</li>
<li>
<p>Enter the query “automation history” on the Internet and read the links you like.</p>
</li>
<li>
<p>Study ISO 9001 “Quality management systems”. Which main criteria of quality management system you can find?</p>
</li>
<li>
<p>What are the alternative definitions for industry, automation and control?</p>
</li>
</ol>
<h2>2. Architecture of automation system in Industry</h2>
<h3>2.1 Intro & objections</h3>
<p>In this section we try to understand main structure of automation control in industry. For the end of the section I wish you can:</p>
<ul>
<li>
<p>show elements of industrial automation systems and its structure (levels of organization);</p>
</li>
<li>
<p>describe of connection between levels of organization (as well as name main technology of it);</p>
</li>
<li>
<p>give industrial examples for each of described levels;</p>
</li>
<li>
<p>can describe information flow between levels.</p>
</li>
</ul>
<h3>2.2 Architecture of automation system in Industry</h3>
<p>Let’s view the structure of typical industries (fig. 2.1) and try to understand our place in it. Just image one of the typical facilities (JSC “Horns and Hooves” for example). </p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-1.png" alt="Industrial control stages" width="600px"/>
</td>
<td>
<i>
Fig. 2.1. Architecture of industry production. Pay attention for level markers.
</i>
</td>
</tr>
</table>
</div>
<p>The management (or product enterprise system) is placed on the <strong>4th level</strong> (the upper one). This level include determined of economical, usability and other ‘high-level’ features of production and product. And it is not where we implement automation yet.</p>
<p>The next level is quality control of produced product (<strong>level 3</strong>) where it compare with regulatory documentations. It’s also done while people do it.</p>
<p>The supervisory control is on the <strong>2nd level</strong>. We can say that this level connect people command with machinery instruction. This function is taken over by production operators together with the automatic process control system (room with large monitors in the factory). This level is also called an ‘supervisory control and data acquisition’ (SCADA) system.</p>
<p>Systems of automatic control, more precisely, systems of maintenance of the set parameters of quality (which are set by the control system and operators in level 2) occupy <strong>level 1</strong>. At this level, computers or logic controllers are often used. The automation by itself.</p>
<p>At the last, <strong>0 level</strong>, there are sensors and actuators - devices for receiving and transmitting physical information about the process, which they provide to higher control levels.</p>
<p>Interaction between levels is provided by the integrated information-communication system of the plant or SCADA (for JSC “Apatit” it is the ‘PI System’).</p>
<p>Nowadays, robotic control systems are widespread (the system of 0 - 2 levels, interacting directly with the SCADA). Some example of the level communication in such system are shown on the fig. 2.2.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-2.png" alt="Robotic control stages" width="600px"/>
</td>
<td>
<i>
Fig. 2.2. Architecture of robotic system of granules size control in the mineral fertilizer facility.
</i>
</td>
</tr>
</table>
</div>
<p>This system was developed by me and my colleagues and is used to control the particle size distribution. A more detailed worked principle and signals are shown in Fig. 2.3.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-3.png" alt="Robotic control flow" width="600px"/>
</td>
<td>
<i>
Fig. 2.3. Signal and data flows for a robotic control system of particle size distribution. Dotted lines represent digital signals, the others represent analogue signals.
</i>
</td>
</tr>
</table>
</div>
<p>Note that the decision-making time and the amount of information embedded in a particular decision increases from 0 to 4 levels. In other words, the higher the level - the more common control terms are used (which means that it takes time and experience/database to decode them). Managers speak “make quality for the market”; the technical department transfers “make quality according to standard ISO 2х2”; quality management carry out analyses and transfer parameters to operators; they give commands to control system/facilities personal “to twist handles 1-2-3 in positions 3-2-1”; automatic control system (with the help of facilities personal) “twists the handles and keeps set parameters”; sensors and actuators “spin, measure and rumble” with transferring new information backwards. Something like that.</p>
<p>At first glance, our place is on the 0 and 1 levels of this system. However, the automation often include the 2nd level too (see the note about robotic systems, Fig. 2.2). However, this short article review the basic principle of it.</p>
<h3>2.3 Level 0. Sensors and Actuators</h3>
<p>The first control system is the <strong>sensor system</strong> (level 0, which is directly responsible for automation). It should give us accurate and sensitive information (<strong>signal</strong>) related to a physical value (e.g. temperature) (Figure 2.4). Special devices are responsible for that - <strong>sensors</strong> (gages). All this is necessary to make the required calculations at level 2 and to produce the new input (set new value) for technological process within the framework (to ensure, that overall quality if belong to ISO). The signal from/to level 0 is transmitted in the form of <strong>electric or pneumatic</strong> information and further is converted into an input parameter of the technological process if needed (heat, force, etc.). Thus, the functions of the sensor is to transmit the process signal and the functions of <strong>actuator</strong> is to receive the control signal and change the technological process.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-4.png" alt="Sensors (level 0)" width="600px"/>
</td>
<td>
<i>
Fig. 2.4. Sensors system (level 0).
</i>
</td>
</tr>
</table>
</div>
<p><strong>sensing element</strong> - an element, whose physical/chemical/biological properties depend on the physical environment (direct or indirect contact). A typical example is the change in resistivity due to the heating of a resistance temperature detector (RTD).</p>
<p>Next comes the <strong>signal conditioning module (signal-conditioning element)</strong> which changes the character of the signal from the sensor (usually to electrical form: voltage, current, capacitance or inductance). This transformation depends mainly on the sensor (hence, this element is specific to the type of sensor). For example, for a RTD, a resistance change can be easily converted to voltage by including the RTD in Wheatstone’s bridge. Therefore, the bridge serves as a signal conditioning module. Such module can also be used for special functions not related to signal conversion (e.g. “ambient referencing” of thermocouples). Typically, analogue electronic circuits are used for these modules, which eventually produce electrical signals in the form of voltage or current over specific ranges.</p>
<p>The following module is the <strong>signal processing element</strong>, which is used to handle the electrical signal (generated by the first cascade) for filtration (noise elimination), diagnostics (sensor evaluation), linearisation (output linearly associated with the physical parameters of the medium), etc.. Therefore, the signal processing elements are usually more general in purpose.</p>
<p>The last module, the <strong>target signal-handling element</strong>, is usually universal too. It can perform various functions: data/signal display, recording, storage, process control feedback, etc.. Examples are temperature chart recorder, instrumentation tape recorder, digital display or analog-to-digital converter (ADC) etc.</p>
<p>Modern sensors also typically have the ability to digitally transmit data using serial, parallel or network protocols (RS 432, USB, Ethernet, etc.). These sensors are called “smart” and contain the embedded digital electronic signal processing circuits.</p>
<p>So, make the conclusion, the sensor converts physical signals (temperature, pressure, speed, etc.) into electrical or pneumatic forms of information, forming our input signals for hight level systems. But in order to make the control action (or implement the control signal), we need to convert it back to physical form. To do this we use <strong>actuator system</strong> (we are still at level 0).</p>
<p>These systems characterize the response of the devices, depending on the sensory signal received and the set points from higher levels (such as level 1 or 2).</p>
<p><strong>Actuator</strong> - The switch of the logic signal to the physical signal. This systems are required to control production process (e.g. by regulating flows, product mass, etc.). Once again, these are systems, which inverse to sensors (actuators catch control signal, which is usually weak voltage and current and convert it). There are two ways to do such transformation. First, an actuator can convert a weak current into a physical phenomenon (torque, heat, flow). Secondly, it can amplify the energy of an incoming electrical signal and this signal can directly influence the production process. Thus, sensors and actuators are different devices: actuators are power devices, while sensors are mostly work with low current. Actuators are usually more energy-intensive and in most cases produces a movement (which is then converted into other forms of physical action). Nevertheless, the logic of work of actuators approximately corresponds to sensors (fig. 2.5). Similar to sensors, there are “smart actuators”.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-5.png" alt="actuator system (level 0)" width="600px"/>
</td>
<td>
<i>
Fig. 2.5. Main configuration of actuator system.
</i>
</td>
</tr>
</table>
</div>
<p><strong>The signal processing element</strong> receives the command from the control system in electric form. This command can be processed in several ways. For example, filtering (to remove an incoming signal of a certain frequency, which may cause resonance) or amplification can be performed. Many actuators are closed loop control units with feedback (to ensure accurate triggering), and for this reason, the electronic signal processing module often contains the control system for the drive itself.</p>
<p>Next, <strong>the power amplifying element</strong> sometimes contains linear power amplification stages called “servo amplifiers”. In other cases, it may consist of motor power electronic circuits (for example, for motor driven actuators).</p>
<p><strong>Variable conversion element</strong> performs the function of changing the nature of the signal generated by the electronic power amplification element (from electric to non-electrical form, usually in motion). Examples are hydroelectrically servo valves, stepper/servo motors, Current to Pneumatic Pressure converters, etc.</p>
<p><strong>Energy conversion element</strong> which generally includes <strong>non-electrical power conversion elements</strong> are used to further increase power (usually by hydraulic or pneumatic mechanisms). <strong>Non-electrical variable conversion elements</strong> can then be used to convert a controlled variable to the desired form, often in several stages. Typical examples include conversion of movement to flow rate (flow valves), rotary to linear movement, flow rate to heat (using steam or hot liquids), etc.</p>
<p>Finally, actuators can be equipped with various <strong>supporting elements</strong> for lubrication/cooling/filtration, tanks, feedback sensors, display components, remote control as well as safety mechanisms and etc.</p>
<p>Summing up this section, level 0 systems can be displayed in general terms by an example of steam valve control (Fig. 2.6).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-6.png" alt="0 level" width="600px"/>
</td>
<td>
<i>
Fig. 2.6. Level 0 control system.
</i>
</td>
</tr>
</table>
</div>
<h3>2.4 Level 1. System of automation control</h3>
<p>Now we have the opportunity to go up to a higher level and consider the automatic control system (level 1). By such industrial control systems we mean the use of <strong>controller</strong>. This is a new element (usually electronic or pneumatic), which receives signals from operators (SCADA) and feedback from the industrial process (sensor), and sent new outputs signals for actuators (Fig. 2.7).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-7.png" alt="Typical control loop" width="600px"/>
</td>
<td>
<i>
Fig. 2.7. Loop of automation control system (level 1).
</i>
</td>
</tr>
</table>
</div>
<p>This loop is also often called <strong>Automatic Control, Process Control, Feedback Control</strong>, etc. In this case, the purpose of the controller is to provide such input signals to the actuator, that the output signal (process parameter y(t)) follows the operator command r(t) as close as possible (both in value and time). Fig. 2.7 shows the general structure of the control loop with its components: the controller, drive, sensor and the process itself (the environment in which the process takes place). In addition, the signals are marked (existing at different points of the system). Described action include two main steps: a command (set point or reference signal) and external interference (noise).</p>
<p>Difficulties in achieving the set point are due to internal unavoidable noise (changing loads, induced currents, sensor noise) and external production factors (instability, uncertainty and variability in process dynamics).</p>
<p>Once again, pay attention to the new element - <strong>controller</strong>. Essentially it <strong>is</strong> an industrial automatic control system of level 1 (it is a <strong>link</strong>, which provides direct and feedback connection between levels 0 and 1).</p>
<p>Most industrial command signals for the controller are point signals (bite-sized) that indicate the desired process parameter (temperature, pressure, flow, level, etc.) and provide product quality. But the manufacturing process is a continuous process and time to time it is deviate from the set parameters, which may leads to a constant change in the feedback and then, to change in discrete control signal (e.g. in motion control the signal may constantly change depending on the size of the product). For this reason, the choice of feedback signals for the controller (e.g. P, PI or PID), the choice of control loop structure (normal feedback loop, cascade loop or feedforward) and the choice of controller gains are strictly necessary. Usually such controller configurations are well known for a particular class of processes, but some of them need to be calibrated from time to time. This is called <strong>controller tuning</strong>.</p>
<blockquote>
<p><strong>Note</strong>. A PID controller continuously calculates an error value <span class="math">\(e(t)\)</span> as the difference between a desired setpoint and a measured process variable and applies a correction based on proportional, integral, and derivative terms (denoted P, I, and D respectively), hence the name.</p>
</blockquote>
<p>One device can operate as a controller in one or more control cycles (single-loop/multi-loop controller). Today, many loop controllers complement typical control concepts (such as PID) by offering adaptive control and fuzzy logic algorithms to improve controller response and performance. PID-controls and self-tuning at startup are among the most important features. Other required and common features include the ability to interact with a decision making system or SCADA, peer-to-peer networks (such as Fieldbus, DeviceNet), and support for manual control if automation failure.</p>
<p>The software is also an important factor, and it is used to configure, monitor and auto-tune controllers. The controllers are also commonly directly paired with process sensors (thermocouples, thermistors, etc.). While most modern complex controllers are electronic, there are also pneumatic options.</p>
<p>In many cases, the control does not affect analogue variables: switches (on/off switches), motors, valves, etc and this is the <strong>sequential/logic control</strong> (e.g. in the control of supply and assembly machinery lines to coordinate the supply of parts, equipment change, trimmer of metal, etc.).</p>
<p>Moreover, there are many industrial actuators that operate on a similar scheme (have a limited set of commands). For example, conveyor belt motors does not use the analog control, instead the motor-starter actuation system use three modes: start, stop and production is used.</p>
<p>Similarly, there are many sensors operating in a discrete mode too (limit switch, pressure switch, photo switch etc.). These sensors do not reflect a specific process variable, but rather a finite range of values into which the variable falls.</p>
<p>In the conclusion, modern controllers, which are widely used for sequence control in transmission lines, robotics, process control and many other automation systems are <strong>programmable logic controllers</strong> (PLC). The PLC is a specialized industrial microprocessor-based real-time computing system (mini-computer).</p>
<blockquote>
<p><strong>Note</strong>. Regular programmable logic controller consists of:\
* a processor unit (CPU) which interprets inputs, executes the control program stored in memory and sends output signals,
* a power supply unit which converts AC voltage to DC (12 or 24 V commonly),
* a memory unit storing data (8 bits, 64 bits etc.),
* an input and output interfaces to receives/sends data from/to external devices (digital or analogue),
* a communications interface to receive and transmit data from/to PLCs.</p>
<p>PLCs require programming device which is used to develop and later download the created program into the memory of the controller (sometimes it’s computer).</p>
<p>Modern PLCs even contain a real-time operating system, such as OS-9 or VxWorks.</p>
<p><strong>Task</strong>. Is the Arduino is ‘pure’ PLC. Why, or why not?</p>
</blockquote>
<h3>2.5 Level 2. Supervisory controls</h3>
<p>That leaves the last of the levels, which is partly in our area of responsibility. Level 2 - Supervisory Control (Figure 2.8). This level of control is higher than the automatic controllers of level 1 (which control only a small subsystem).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/ChSU/Automation/chsu_auto_control_fig_2-8.png" alt="Level 2)" width="600px"/>
</td>
<td>
<i>
Fig. 2.8. Facilities control system from SCADA point of view (level 2).
</i>
</td>
</tr>
</table>
</div>
<p>Decision-making control usually takes on the following functions:</p>
<ul>
<li>Sets control points for important process variables (depending on the nature of the product, volume and type of production) - it has a strong influence on process control, energy, quality and efficiency.</li>
<li>Performance monitoring/diagnostics - checks sensors, actuators and process parameters for errors (results are saved).</li>
<li>Start/stop/emergency - special discrete and continuous control models designed to respond to operator commands and diagnostic events (such as detected errors).</li>
<li>Reconfiguration/settings monitoring - structural or parametric adjustment of the control loops. This is performed either in response to operator commands or in response to diagnostic events.</li>
<li>Graphical interface - operator interface for manual operation and correction.</li>
</ul>
<p>These systems are dependent on the type of controlled process (as opposed to Level 1, which is usually unified). Usually such systems are mix of hardware and software algorithms and they are very expensive.</p>
<blockquote>
<p>Consider CNC machine driver control system. Find out possible set points and describe functionalities according to level 2.</p>
</blockquote>
<h3>2.6 Other control levels</h3>
<p>Let us briefly consider the functions of Level 3 (production control):</p>
<ul>
<li>Process planning: availability of resources, their optimal use and processing.</li>
<li>Maintenance management: the decision-making processes associated with the detection and deployment of complicated operations.</li>
<li>Inventory management: decision-making processes related to the monitoring and deployment of raw materials, finished goods, etc.</li>
<li>Quality management: assessment, documentation and quality management.</li>
</ul>
<p>In the factory, this level is the responsibility of the chief technologist department and the quality control management (laboratories).</p>
<h3>2.7. Conclusion</h3>
<p>In this chapter we have considered the general features of the production management system. We have briefly described each of the levels and made basic diagrams.</p>
<p>The time and informativeness of the solutions increase as the level increases. At the lowest level, the control system is faster (one sensor) and at the higher levels - is slower (many sensors and processes). Over the management level, the information is aggregated over a certain period of time (days or week, maybe even slower). Each of describe levels is connected via a communication protocol (for low level this is CANBus, Fieldbus, etc. network), and all this communications forms a single SCADA system.</p>
<h3>2.8 Section Tasks</h3>
<ol>
<li>Draw the block diagram of a typical sensor.</li>
<li>Draw the block diagram of a typical actuator.</li>
<li>Consider the electro-hydraulic actuator of the valve. Examine and identify the actuator subsystems and describe it.</li>
<li>Draw a block diagram of the level 1 of industrial control system.</li>
<li>Consider a position control system with motor drive in CNC machine. Determine the main feedback encoders in the system. Identify the main sources of noises. What main differences between this system and conveyor drive system?</li>
<li>Identify the main difference between the serial/logic control system and analogue control systems.</li>
<li>Provide an example of industrial discrete sensors and industrial discrete actuators.</li>
<li>State the three main functions of the supervisory control system.</li>
<li>Describe the three main functions of the production control system.</li>
<li>Examine and clarify specific activities to control production at any typical plant.
Draw an automation pyramid and define levels.</li>
</ol>
<h2>3. References</h2>
<ol>
<li><a href="https://nptel.ac.in/courses/108105062/">Industrial Automation and Control course from NPTEL</a></li>
<li><a href="http://www.instrumentationtoday.com/strain-gauge/2011/08/">Instrumentation today</a></li>
<li><a href="https://www.idc-online.com/resources/technical-references/instrumentation-technical-references.html">IDC Technologies</a></li>
<li><a href="https://doi.org/10.1016/C2013-0-15387-1">Measurement and Instrumentation. Theory and Application. Book. 2nd Edition • 2016</a></li>
<li><a href="https://doi.org/10.1016/C2009-0-25186-5">Instrumentation Reference Book. Book. 4th Edition. 2010</a></li>
<li><a href="https://www.cds.caltech.edu/~murray/courses/cds101/fa04/reading.html">Caltech course CDS 101/110, Fall 2004, Analysis and Design of Feedback Systems</a></li>
<li><a href="https://www.deepl.com/">Help in translate: Deepl.com</a></li>
<li><a href="https://www.tablesgenerator.com">Help with HTML table</a></li>
<li><a href="https://app.diagrams.net/">Perfect tools for construct diagrams: draw.io</a></li>
</ol>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>My conferences2018-08-02T00:00:00+03:002019-11-17T00:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2018-08-02:/blog/science-conference.html<p>This note brings together the main conferences in which I participated. The names of works and materials to them are given.</p>
<h2 id="0-TOC">Table of Contents (TOC)</h2>
<ol>
<li><a href="#1">2nd Congress of Analysts of Russia, 2013, Moscow, Russia</a></li>
<li><a href="#2">VIII All-Russian Conference on X-ray spectral analysis, 2014, Irkutsk, Russia</a></li>
<li><a href="#3">3rd Congress of Analysts of Russia …</a></li></ol><p>This note brings together the main conferences in which I participated. The names of works and materials to them are given.</p>
<h2 id="0-TOC">Table of Contents (TOC)</h2>
<ol>
<li><a href="#1">2nd Congress of Analysts of Russia, 2013, Moscow, Russia</a></li>
<li><a href="#2">VIII All-Russian Conference on X-ray spectral analysis, 2014, Irkutsk, Russia</a></li>
<li><a href="#3">3rd Congress of Analysts of Russia, 2017, Moscow, Russia</a></li>
<li><a href="#4">11th Winter symposium on chemometrics (WSC11), 2018, Saint Petersburg, Russia</a></li>
<li><a href="#5">5th International Congress on Microscopy & Spectroscopy (INTERM), 2018, Oludeniz, Turkey</a></li>
<li><a href="#6">I All-Russian Conference with International Participation “Mathematical and Computer Modeling in Materials Science”, 2019, Cherepovets, Russia</a></li>
<li><a href="#7">3rd International Conference on Information Processing and Control Engineering (ICIPCE), 2019, Moscow, Russia</a></li>
<li><a href="#8">International Scientific and Practical Conference of NIUIF JSC: 100 years of development of science and production, 2019, Cherepovets, Russia</a></li>
<li><a href="#9">III All-Russian Conference on Analytical Spectroscopy with International Participation, 2019, Tuapse, Russia</a></li>
<li><a href="#10">3rd International Conference on Automation, Control and Robots (ICACR), 2019, Prague, Czech Republic</a></li>
<li><a href="#11">Night of the Science, 2019, Kirovsk, Russia</a></li>
<li><a href="#12">The 4th International Conference on Mechanical, System and Control Engineering (ICMSC), 2020, Kazan, Russia</a></li>
</ol>
<h2 id="1">1. 2nd Congress of Analysts of Russia, 2013, Moscow, Russia</h2>
<p><a href="#0-TOC">Back to TOC</a></p>
<p><strong>1.1</strong> Poster report.</p>
<p>D.V. Yunovidov, A.T. Rebrikova, K.V. Oskolok, V.V. Sokolov X-ray fluorescence determination of technologically important elements in extraction phosphoric acid // The Second Congress of Russian Analysts. Moscow. Russia. 2013. Thesis. P. 289. (In Russ.)</p>
<p><strong>1.2</strong> Poster report.</p>
<p>D.V. Yunovidov, A.T. Rebrikova, K.V. Oskolok, V.V. Sokolov The technique of a virtual experiment for quantitative X-ray fluorescence analysis of extraction phosphoric acid // The Second Congress of Russian Analysts. Moscow. Russia. 2013. Thesis. P. 290. (In Russ.)</p>
<h2 id="2">2. VIII All-Russian Conference on X-ray spectral analysis, 2014, Irkutsk, Russia</h2>
<p><a href="#0-TOC">Back to TOC</a></p>
<p><strong>2.1</strong> <a href="../../extra/blog/science/site_science_conf-irkutsk-stend.pdf">Poster (in Russ.)</a>.</p>
<p>D.V. Yunovidov, S.Z. El-Salim, K.V. Oskolok The technique of virtual experiment and its application for quantitative X-ray fluorescence analysis of extraction phosphoric acid // VIII All-Russian Conference on X-ray Spectroscopy. Irkutsk. Russia. 2014. Thesis. P. 140. (In Russ.)</p>
<p><strong>2.2</strong> <a href="../../extra/blog/science/site_science_conf-irkutsk-speech.pdf">Report (in Russ.)</a>.</p>
<p>D.V. Yunovidov, S.Z. El-Salim, K.V. Oskolok Reconstruction of the spectrum of a homogeneous system from time dependences of line intensities in the nascent and developing heterogeneous system using the example of extraction phosphoric acid // VIII All-Russian Conference on X-ray Spectroscopy. Irkutsk. Russia. 2014. Thesis. P. 139. (In Russ., presentation style are removed on purpose).</p>
<h2 id="3">3. 3rd Congress of Analysts of Russia, 2017, Moscow, Russia</h2>
<p><a href="#0-TOC">Back to TOC</a></p>
<p><strong>3.1</strong> <a href="../../extra/blog/science/site_science_conf-3-an-congress_poster.pdf">Poster (in Russ.)</a>.</p>
<p>D.V. Yunovidov, V.V. Sokolov, A.S. Bakhvalov Use of the NPKS spectrum of fertilizers to assess the significance of the stages of sample preparation for X-ray fluorescence analysis // Third Congress of Russian Analysts. Moscow. Russia. 2017. <a href="http://www.wssanalytchem.org/car2017/Publications/2017-Abstracts.pdf">Thesis</a>. P. 243. (In Russ.)</p>
<h2 id="4">4. 11th Winter symposium on chemometrics (WSC11), 2018, Saint Petersburg, Russia</h2>
<p><a href="#0-TOC">Back to TOC</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<embed src="../../extra/certificates-awards/aw_certif-WSC11_2018.pdf" width="600px" />
</td>
<td>
<i>
Fig. 1. Certificate.
</i>
</td>
</tr>
</table>
</div>
<p><strong>4.1</strong> <a href="../../extra/blog/science/site_science_conf-wsc11-poster.pdf">Poster</a>.</p>
<p>D. Yunovidov, V. Sokolov, A. Bahvalov Big data analysis and comprehensive analytical control of fertilizers // 11 Winter School of Chemometrics (WSC 11). Saint Petersburg. Russia. 2018. <a href="http://wsc.chemometrics.ru/media/files/conferences/wsc11/abstracts/abstract__yunovidov_dmitry.pdf">Thesis</a>.</p>
<h2 id="5">5. 5th International Congress on Microscopy & Spectroscopy (INTERM), 2018, Oludeniz, Turkey</h2>
<p><a href="#0-TOC">Back to TOC</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<embed src="../../extra/certificates-awards/aw_certif-INTERM_2018.PDF" width="600px">
</td>
<td>
<i>
Fig. 2. Certificate.
</i>
</td>
</tr>
</table>
</div>
<p><strong>5.1</strong> <a href="../../extra/blog/science/site_science_conf-interm-poster.pdf">Poster</a>.</p>
<p>Yunovidov D., Sokolov V., Bahvalov A. Optical addition to X-ray Fluorescence Analysis of Mineral Fertilizers // INTERM 2018. 5th International Congress on Microscopy & Spectroscopy. Oludeniz. Turkey. April 24 - 30. 2018. Thesis.</p>
<p><a href="http://przyrbwn.icm.edu.pl/APP/PDF/135/app135z5p69.pdf">Article</a>.</p>
<h2 id="6">6. I All-Russian Conference with International Participation "Mathematical and Computer Modeling in Materials Science", 2019, Cherepovets, Russia</h2>
<p><a href="#0-TOC">Back to TOC</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../extra/certificates-awards/aw_certif-conf-chsu_2019.jpg" alt="certificate" wight="600px"/>
</td>
<td>
<i>Fig. 3. Certificate</i>
</td>
</tr>
</table>
</div>
<p><strong>6.1</strong> <a href="../../extra/blog/science/site_science_conf-chsu-speech.pdf">Report (in Russ.)</a>.</p>
<p>D.V. Yunovidov Multidimensional classification method of industrially produced mineral fertilizers for the representation of the “manufacturer–quality” model // Mathematical and computer modeling in material science. Cherepovets. Russia. 2019. Theses.</p>
<p><strong>6.2</strong> <a href="../../extra/blog/science/site_science_conf-chsu-poster-1.pdf">Poster (in Russ.)</a>.</p>
<p>M.N. Nadezhin, D.V. Yunovidov, V.A. Shabalov, V.V. Sokolov Modeling and estimation of the relation between the granulometric composition and various parameters of the mineral fertilizer production according to the scheme of the drum-granulator-dryer (on the example of di ammonium phosphate) // Mathematical and computer modeling in the materials science. Cherepovets. Russia. 2019. Theses.</p>
<p><strong>6.3</strong> <a href="../../extra/blog/science/site_science_conf-chsu-poster-2.pdf">Poster (in Russ.)</a>.</p>
<p>E.E. Sidorova, D.V. Yunovidov, V.V. Sokolov Granulometric composition as a parameter of modeling the technological process of mineral fertilizers production according to the scheme drum-granulator-dryer // Mathematical and computer modeling in materials science. Cherepovets. Russia. 2019. Theses.</p>
<h2 id="7">7. 3rd International Conference on Information Processing and Control Engineering (ICIPCE), 2019, Moscow, Russia</h2>
<p><a href="#0-TOC">Back to TOC</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<embed src="../../extra/certificates-awards/aw_certif-ICIPCE_2019.PDF" width="600px" />
</td>
</tr>
<tr>
<td>
<embed src="../../extra/certificates-awards/aw_certif-ICIPCE-exellent_2019.PDF" width="600px" />
</td>
</tr>
<tr>
<td>
<i>
Fig. 4. Certificates.
</i>
</td>
</tr>
</table>
</div>
<p><strong>7.1</strong> <a href="../../extra/blog/science/site_science_conf-icipce_2019.pdf">Report</a>.</p>
<p>D.V. Yunovidov, M.N. Nadezhin, V.A. Shabalov Pattern recognition in the differentiated image for the powder and granulated materials particle size classification // 3rd International Conference on Information Processing and Control Engineering. Moscow. Russia. 2019. Thesis.</p>
<p><a href="../../extra/blog/science/site_science_conf-icipce-speech_2019.pdf">Speech</a>.</p>
<p><a href="https://iopscience.iop.org/article/10.1088/1757-899X/630/1/012026/pdf">Article</a>.</p>
<h2 id="8">8. International Scientific and Practical Conference of NIUIF JSC: 100 years of development of science and production, 2019, Cherepovets, Russia</h2>
<p><a href="#0-TOC">Back to TOC</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<embed src="../../extra/certificates-awards/aw_certif-NIUIF100_2019.PDF" width="600px" />
</td>
<td>
<i>
Fig. 5. Certificate.
</i>
</td>
</tr>
</table>
</div>
<p><strong>8.1</strong> <a href="../../extra/blog/science/site_science_conf-niuif-100-speech-1_2019.pdf">Report (in Russ.)</a>.</p>
<p>D.V. Yunovidov Modern methods of the automated express control at the analysis of quality of mineral fertilizers // International scientific-practical conference of JSC “NIUIF”: 100 years of development of science and production. Cherepovets. Russia. 2019. Theses.</p>
<p><strong>8.2</strong> <a href="../../extra/blog/science/site_science_conf-niuif-100-speech-2_2019.pdf">Report (in Russ.)</a>.</p>
<p>D.V. Yunovidov Modern methods of analysis of mineral fertilizers, raw materials and semi-products // International scientific-practical conference of JSC “NIUIF”: 100 years of development of science and production. Section of Analytical Chemistry. Cherepovets. Russia. 2019. Theses.</p>
<h2 id="9">9. III All-Russian Conference on Analytical Spectroscopy with International Participation, 2019, Tuapse, Russia</h2>
<p><a href="#0-TOC">Back to TOC</a></p>
<p><strong>9.1</strong> <a href="../../extra/blog/science/site_science_conf-tuapse-poster_2019.pdf">Poster (in Russ.)</a>.</p>
<p>D.V. Yunovidov, E.E. Sidorova, M.N. Nadezhin, V.V. Sokolov Optical quality control of industrial processing of mineral fertilizers with conditioning additives // III All-Russian Conference on Analytical Spectroscopy with international participation. Krasnodar. Russia. 2019. Theses.</p>
<p><strong>9.2</strong> <a href="../../extra/blog/science/site_science_conf-tuapse-poster-2_2019.pdf">Poster (in Russ.)</a>.</p>
<p>D.V. Yunovidov Classification and regression analysis of mineral fertilizer brands // III All-Russian Conference on Analytical Spectroscopy with International Participation. Krasnodar. Russia. 2019. Theses.</p>
<h2 id="10">10. 3rd International Conference on Automation, Control and Robots (ICACR), 2019, Prague, Czech Republic</h2>
<p><a href="#0-TOC">Back to TOC</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<embed src="../../extra/certificates-awards/" width="600px">
</td>
<td>
<i>
Fig. 6. Certificate.
</i>
</td>
</tr>
</table>
</div>
<p><strong>10.1</strong> <a href="../../extra/blog/science/site_science_conf-icacr_2019.pdf">Report</a>.</p>
<p>D.V. Yunovidov, V.A. Shabalov, V.V. Sokolov Method of Industrial Automated Optical-electronic Control of Granulometric Composition of Mineral Fertilizers // 3rd International Conference on Automation, Control and Robots. Prague. Czech Republic. 2019. Thesis.</p>
<p><a href="../../extra/blog/science/site_science_conf-icacr-speech_2019.pdf">Speech</a>.</p>
<p><a href="https://dl.acm.org/doi/abs/10.1145/3365265.3365268">Article</a>.</p>
<h2 id="11">11. Night of the Science, 2019, Kirovsk, Russia</h2>
<p><a href="#0-TOC">Back to TOC</a></p>
<p><strong>11.1</strong> <a href="../../extra/blog/science/site_science_conf-night-science-speech.pdf">Report (in Russ.)</a>.</p>
<p>D.V. Yunovidov History and modern times of NIUIF // Night of the Science, Kirovsk, Russia. 2019.</p>
<h2 id="12">12. The 4th International Conference on Mechanical, System and Control Engineering (ICMSC), 2020, Kazan, Russia</h2>
<p><a href="#0-TOC">Back to TOC</a></p>
<div>
<table>
<tr>
<td style="width:80%">
<embed src="../../extra/certificates-awards/aw_certif-ICMSC_2020.pdf" width="600px">
</td>
</tr>
<tr>
<td>
<embed src="../../extra/certificates-awards/aw_certif-ICMSC-SC_2020.pdf" width="600px">
</td>
</tr>
<tr>
<td>
<i>
Fig. 7. Certificates.
</i>
</td>
</tr>
</table>
</div>
<p><strong>12.1</strong> <a href="../../extra/blog/science/site_science_conf-icmsc_2020.pdf">Report</a></p>
<p>D.V. Yunovidov, K.A. Menshikov, E.E. Sidorova Robotic control system for particle size distribution of industrially produced mineral fertilizers // The 4th International Conference on Mechanical, System and Control Engineering. Kazan. Russia. 2020. Theses.</p>
<p><a href="../../extra/blog/science/site_science_conf-icmsc-speech_2020.pdf">Speech</a>.</p>
<p>Article is in print in IJMERR (International Journal of Mechanical Engineering and Robotics Research | http://www.ijmerr.com/).</p>Кандидатская диссертация2018-06-28T00:00:00+03:002019-10-22T00:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2018-06-28:/ru/blog/science-phd.html<p>В данной заметке приведено сокращенное содержание моей диссертации на соискание кандидата технических наук по специальности 01.04.01 “Приборы и методы экспериментальной физики”. Дополнительно выложена <a href="../../extra/blog/science/site_science_phd.pdf">презентация</a> моей работы (стиль изменен специально, согласно политике компании АО “НИУИФ”).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_phd.png" alt="Графическое введение" wight="900px"/>
</td>
<td>
<i>Графическое введение</i>
</td>
</tr>
</table>
</div>
<h2>Программно-аппаратный рентгенофлуоресцентно–оптический комплекс для анализа сложных фосфорсодержащих удобрений</h2>
<p>Работа выполнена в …</p><p>В данной заметке приведено сокращенное содержание моей диссертации на соискание кандидата технических наук по специальности 01.04.01 “Приборы и методы экспериментальной физики”. Дополнительно выложена <a href="../../extra/blog/science/site_science_phd.pdf">презентация</a> моей работы (стиль изменен специально, согласно политике компании АО “НИУИФ”).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_phd.png" alt="Графическое введение" wight="900px"/>
</td>
<td>
<i>Графическое введение</i>
</td>
</tr>
</table>
</div>
<h2>Программно-аппаратный рентгенофлуоресцентно–оптический комплекс для анализа сложных фосфорсодержащих удобрений</h2>
<p>Работа выполнена в АО “Научно-исследовательский институт по удобрениям и инсектофунгицидам имени профессора Я.В. Самойлова” (АО “НИУИФ”).</p>
<div>
<table>
<tr>
<td><b>Научный руководитель:</b> </td>
<td>к.т.н., начальник отдела качества и стандартизации АО "НИУИФ" Соколов Валерий Васильевич. </td>
</tr>
<tr>
<td rowspan="2"><b>Официальные оппоненты: </b></td>
<td>Еременко Юрий Иванович, доктор технических наук, профессор, заведующий кафедрой автоматизированных и информационных систем управления Старооскольского технологического института им. А.А.Угарова (филиал) федерального государственного автономного образовательного учреждения высшего образования "Национальный исследовательский технологический университет "МИСиС". </td>
</tr>
<tr>
<td>Багаев Кирилл Александрович, кандидат физико-математических наук, технический директор ООО "Ньюком-НДТ". </td>
</tr>
<tr>
<td><b>Ведущая организация: </b></td>
<td>Санкт-Петербургский государственный технологический институт (технический университет), кафедра автоматизации процессов химической промышленности. </td>
</tr>
</table>
</div>
<p>Защита диссертации состоялась 22 декабря 2017 года в 16.00 часов в конференц-зале на заседании диссертационного совета Д002.034.01 при Институте аналитического приборостроения по адресу: 198095, Санкт-Петербург, ул. Ивана Черных, 31-33, лит. А. С диссертацией можно ознакомиться в библиотеке и на сайте <a href="http://iairas.ru/">Института аналитического приборостроения</a>.</p>
<h2>Общая характеристика работы</h2>
<p><strong>Актуальность темы.</strong> Современное промышленное производство минеральных удобрений представляет многофакторный процесс, в котором участвуют три ключевых объекта: <em>входящее сырье, промежуточные объекты (фосфорная кислота, серная кислота, аммиак и т.д.) и готовая продукция</em>. Практика показывает, что без комплексного учета параметров производства невозможно добиться воспроизводимо качественной готовой продукции. Для этого отлично подходит рентгенофлуоресцентный анализ (РФА), который является одним из наиболее информативных методов аналитического контроля.</p>
<p>В то же время, несмотря на развитость математического аппарата и приборного парка, метод не нашел широкого применения при производстве минеральных удобрений. Одна из возможных причин этого кроется в сложности промышленных объектов. Такие продукты обладают комплексной матрицей, что значительно увеличивает погрешность прямого анализа.</p>
<p>Однако развитие компьютерной техники, математического аппарата и аналитических методов позволяет решить эту проблему: накапливать и обрабатывать практически любые объемы информации для получения более подробного, точного и воспроизводимого представления о протекающих процессах.</p>
<p><strong>Объект исследования:</strong> сложные фосфорсодержащие минеральные удобрения и их параметры качества (крупность частиц, наличие предварительной сушки, химический состав и т.д.).</p>
<p><strong>Цель работы:</strong> создание программно-аппаратного комплекса на основе энергодисперсионного рентгенофлуоресцентного спектрометра и оптического регистратора для повышения эффективности, экспрессности и надежности контроля промышленно выпускаемых сложных фосфорсодержащих удобрений. Для достижения поставленной цели необходимо решить следующие <strong>задачи:</strong></p>
<ol>
<li>Выделить значимые химические и физические параметры для эффективного учета сложной матрицы удобрений.</li>
<li>Разработать аппаратную систему получения физической и химической информации об объектах анализа.</li>
<li>Разработать и автоматизировать алгоритмы выделения и расчета информативных признаков при контроле качества производимой продукции.</li>
<li>Создать прототип единой аналитической базы исследуемых объектов и обеспечить возможность использования методов машинного обучения и анализа больших данных (АБД).</li>
<li>Теоретически обосновать и разработать схему комплексного анализа минеральных удобрений для минимизации потерь сырья и энергоресурсов при переходе с одного производимого брэнда на другой.</li>
<li>Обеспечить удобство пользования данным методом в заводских лабораториях (упрощение программной и аппаратной части комплекса).</li>
</ol>
<p><strong>Научная новизна.</strong> В результате выполнения диссертационной работы:</p>
<ol>
<li>На основании экспериментальных данных разработана ранее не применявшаяся программно-аппаратная схема оптического анализатора с ЭД рентгенофлуоресцентным (РФ) спектрометром для многофакторного экспрессного анализа сложных фосфорсодержащих удобрений.</li>
<li>Разработаны и автоматизированы методы определения физических и химических параметров качества минеральных удобрений (содержание различных химических элементов, тип, марка, фракционный состав и степени обработки кондиционирующими добавками (КД)).</li>
<li>На основании данных разработанного комплекса создана оригинальная аналитическая база данных физических и химических свойств исследуемых объектов, позволяющая увеличить точность и быстродействие измерений.</li>
<li>Показана возможность проведения регрессионного и классификационного анализа брэндов выпускаемых удобрений по всем основным питательным элементам (N, P, K) и серы в широком концентрационном диапазоне.</li>
<li>На основе ЭД РФА и составленной базы данных предложен способ определения азота в минеральных удобрениях, прямое детектирование которого методом ЭД РФА невозможно.</li>
<li>Создано алгоритмическое и программное обеспечение для разработанного аппаратного комплекса, обеспечивающее автоматический расчет аналитических сигналов, поиск корреляций и статистический анализ больших массивов данных.</li>
<li>Разработан способ определения фракционного состава запрессованных проб для ЭД РФА с использованием системы оптического контроля.</li>
</ol>
<p><strong>Практическая значимость.</strong></p>
<p>Разработанные методы и приборы используются при производстве сложных фосфорсодержащих удобрений на предприятиях холдинга “ФосАгро”. Разработанные алгоритмы обработки данных используются в отечественных ЭД РФ спектрометрах (АО “Научные приборы”).</p>
<ol>
<li>Для реализации метода измерения физических и химических свойств готовой продукции разработан программно-аппаратный комплекс, который увеличил чувствительность, точность и быстродействие измерения параметров качества промышленно выпускаемых сложных фосфорсодержащих удобрений.</li>
<li>Создан и автоматизирован ранее не применявшийся прототип устройства для оценки качества производимой продукции и ее экспресс-анализу на химический состав по всем основным питательным элементам, сере и фракционному составу. Предложенное оборудование имеет широкие перспективы для анализа промышленных объектов как в лаборатории, так и непосредственно в производственных условиях.</li>
<li>Разработана и реализована оригинальная методика контроля таких физических свойств гранулированных минеральных удобрений, так гранулометрический состав и качество обработки КД.</li>
<li>Предложена схема комплексного анализа сложных фосфорсодержащих удобрений для минимизации потерь сырья и энергоресурсов при переходе с одного производимого брэнда на другой.</li>
</ol>
<p><strong>Положения, выносимые на защиту.</strong></p>
<ul>
<li>Программно-аппаратный комплекс на основе ЭД РФ спектрометра и оптического регистратора (для распознавания поверхности), позволяющий проводить многофакторный экспрессный анализ минеральных удобрений.</li>
<li>Алгоритм создания базы данных физических и химических свойств промышленных объектов (содержание различных химических элементов, тип, марка, фракционный состав и степень обработки КД).</li>
<li>Оригинальная математическая модель экспрессного комплексного анализа пробы для определения:<ul>
<li>физических свойств: тип, максимальная фракция и наличие кондиционирующей добавки.</li>
<li>химического состава и марки выпускаемых удобрений по всем основным питательным элементам и сере, включая азот, прямое определение которого методом ЭД РФА невозможно.</li>
</ul>
</li>
<li>Алгоритмическое и программное обеспечение “DSpectra”, обеспечивающее автоматизированный расчет аналитических сигналов, поиск корреляций и статистический анализ больших массивов данных.</li>
</ul>
<p><strong>В соответствии с паспортом специальности</strong> (01.04.01 – “Приборы и методы экспериментальной физики”) в диссертационной работе проведена разработка методов измерений физических величин, позволяющих существенно увеличить точность, чувствительность и быстродействие измерений для систем контроля качества выпускаемой продукции. Реализована автоматизация физического эксперимента. Разработан малогабаритный и эффективный прибор для получения комплексной физической и химической информации о качестве минеральных удобрений.</p>
<p><strong>Публикации.</strong> По материалам диссертации опубликовано 8 печатных работ, из них 2 в журналах, входящих в Перечень ведущих рецензируемых научных журналов и изданий ВАК Российской Федерации, 4 тезиса докладов на всероссийских и международных конференциях и семинарах, 1 свидетельство о государственной регистрации программы для ЭВМ. Список печатных работ приведен в конце заметки.</p>
<p><strong>Структура и объем работы.</strong> Содержание диссертации изложено на 187 страницах и состоит из введения, шести глав, заключения, приложения и списка литературы, содержащего 116 наименований. Работа содержит 50 таблиц и иллюстрирована 65 рисунками.</p>
<h2>Краткое содержание работы</h2>
<p><strong>Введение (первая глава)</strong> посвящено обоснованию актуальности темы диссертации. Сформулированы цели и задачи, определены научная новизна и практическая значимость работы. Выделены основные положения, выносимые на защиту.</p>
<p><strong>Во второй главе</strong> дан обзор отечественной и зарубежной литературы, связанной с темой диссертации. Приведены характеристики современного промышленного производства сложных фосфорсодержащих удобрений. Выделены основные продукты, от которых зависит качество производственного процесса: исходное сырье (апатит), экстракционная фосфорная кислота (ЭФК) и различные типы и марки агрохимикатов. Так, тип удобрения отражает наличие тех или иных макро- и микрокомпонентов (МАФ – моноаммонийфосфат (NP), NPK, NPK(S), NP(S+S)+Zn – содержит в дополнении к общей еще и элементную серу и цинк). В свою очередь марка отражает количественное содержание компонентов, обозначенных в типе (12-52, 15-15-15, 4-30-15(16), 12-40(6+3)+1 соответственно). Понятие брэнд отражает и марку и тип минеральных удобрений. Описан основной объект исследования – сложные фосфорсодержащие минеральные удобрения. Рассмотрены физические и химические параметры матриц объектов и выделены маркеры качества готовой продукции. Исследованы способы обработки аналитической информации. Проведен обзор методов аналитического контроля в производственной и экологической практике, оценены динамика их развития и критерии применимости. Обосновано использование ЭД РФ анализа (рис. 1) как наиболее информативного и экспрессного. Выделены необходимые пути программной и аппаратной доработки метода для охвата основных химических и физических параметров исследуемых объектов. Поставлены задачи исследования.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_an-methods.png" alt="Аналитические методы" width="900px"/>
</td>
</tr>
<tr>
<td>
<i>
Рис. 1. Динамика количества статей, посвященных тому или иному аналитическому методу, нормированных на среднее количество статей в год. Выборка состоит из статей, опубликованных за последние 10 лет по результатам "Scopus". В "РФА" объединены ЭД и волновой методы РФ анализа; "ИСП" - различные виды спектроскопии с индуктивно связанной плазмой (ИСП); "Спектроскопии" - методы спектроскопии без использования ИСП; "классических" - титрование и гравиметрия.
</i>
</td>
</tr>
</table>
</div>
<p><strong>Третья глава</strong> посвящена теоретическому обоснованию многофакторного контроля сложных фосфорсодержащих удобрений. Рассмотрены способы классификации, регрессии и кластеризации. Описан математический и статистический учет свойств объектов. Приведены использованные в работе математические алгоритмы. Чтобы добиться полноты и качества анализа промышленных объектов, сопоставимого с количественным анализом в аналитической химии, необходимо минимизировать шумовые составляющие спектров исследуемых объектов. Для этого проведен анализ существующих алгоритмов начальных математических преобразований данных:</p>
<ul>
<li>нормализация, балансировка и кодирование данных;</li>
<li>сглаживание и расчет аномалий на изображениях с оптического регистратора;</li>
<li>сглаживание РФ спектра различными алгоритмами (средний и медианный фильтры, Савицкого-Голея или Фурье-преобразование с отсечением шумовых частот);</li>
<li>использование различных алгоритмов выявления и расчета интенсивностей характеристических линий (дифференцирование и алгоритм “нулевого фильтра”).</li>
</ul>
<p>Основные признаки промышленных матриц и их типы, необходимые для построения общей базы данных “объекты-признаки”, приведены в табл. 1.</p>
<p>Таблица 1. Основные признаки и типы данных, используемые в работе</p>
<table>
<thead>
<tr>
<th>Признак</th>
<th>Тип принимаемых значений</th>
</tr>
</thead>
<tbody>
<tr>
<td>интенсивности химических элементов в спектре</td>
<td>вещественный</td>
</tr>
<tr>
<td>максимальная фракция</td>
<td>категориальный*</td>
</tr>
<tr>
<td>предварительная сушка</td>
<td>бинарный</td>
</tr>
<tr>
<td>удельное количество артефактов карты поверхности</td>
<td>вещественный</td>
</tr>
<tr>
<td>удельная площадь артефактов карты поверхности</td>
<td>вещественный</td>
</tr>
<tr>
<td>тип пробы</td>
<td>категориальный</td>
</tr>
<tr>
<td>марка удобрения по основным питательным элементам</td>
<td>вещественный</td>
</tr>
</tbody>
</table>
<p>* признаки, значения которых определяют факт принадлежности к какой-то категории (так же известны как факторные или номинальные)</p>
<p>Для выявления недостающих бинарных и категориальных данных используются различные модели классификации (логистическая регрессия, регрессия с регуляризацией, случайный лес и наивный Байес). Также классификация используется для отслеживания качества выпускаемого продукта и близости его химических и физических свойств к требуемым. Данная информация особенно актуальна при контроле перехода производства с одной марки удобрений на другую. Точная и воспроизводимая классификация позволяет обеспечить быстрый и оптимальный выход промышленного комплекса на требуемый режим.</p>
<p>После классификации рассмотрены варианты регрессионного анализа для определения химических свойств объектов: марки и химического состава. Коэффициенты регрессии оптимизируются с использованием регуляризаторов:</p>
<ul>
<li>
<p>L1 (гребневый, Ridge): <span class="math">\(w=argmin_w(\frac{1}{l}\sum_{i=1}^l (\langle w, x_i \rangle − y_i)^2 + \lambda \sum_{i=1}^d w_j^2)\)</span>;</p>
</li>
<li>
<p>L2 (лассо, Lasso): <span class="math">\(w=argmin_w(\frac{1}{l}\sum_{i=1}^l (\langle w, x_i \rangle − y_i)^2 + \lambda \sum_{i=1}^d |w_j|\)</span>;</p>
</li>
</ul>
<p>тогда как коэффициенты для метода наименьших квадратов без регуляризации:</p>
<ul>
<li><span class="math">\(w=argmin_w(\frac{1}{l}\sum_{i=1}^l (\langle w, x_i \rangle − y_i)^2)\)</span>.</li>
</ul>
<p>где: <span class="math">\(w\)</span> - коэффициент перед параметром, <span class="math">\(x_i\)</span> – параметр, <span class="math">\(\langle w, x_i \rangle\)</span> – скалярное произведение вектора коэффициентов на вектор параметров, <span class="math">\(y_i\)</span> – искомая величина (отклик), <span class="math">\(l\)</span> – количество параметров, <span class="math">\(d\)</span> и <span class="math">\(\lambda\)</span> – оптимизационные параметры.</p>
<p>По результатам главы обоснован выбор алгоритмов АБД и приведены формулы расчета их метрик качества: точности, полноты и F-меры для классификации и среднего квадратичного отклонения (СКО) и коэффициентов корреляции Пирсона и Спирмана для регрессии. По каждому из представленных алгоритмов описана процедура подбора оптимальных параметров методом “поиска по сетке” (перебор всех возможных комбинаций с определенным шагом). Дополнительно приведены различные способы понижения размерности данных и визуализации кластеров на плоскости.</p>
<p>В <strong>четвертой главе</strong> описана постановка экспериментальной работы. Приведена принципиальная схема разработанного оборудования и перечислены использованные ресурсы: приборы, реактивы и рабочие пробы.</p>
<p>Приведен план многофакторного эксперимента с использованием АБД для контроля перехода производственной линии с производства NP(S) удобрений марки 12-40(10) на производство NP(S+S)+Zn удобрений марки 12-40(6+3)+1 в промышленных условиях. Описаны основные процедуры подготовки проб для классификационного и регрессионного анализа. Составлены общие таблицы использованных в работе проб (7 типов объектов, порядка 170 проб в 3 параллелях). Описан алгоритм подбора оптимальных режимов работы оборудования для обеспечения наиболее информативного анализа.</p>
<p>Составлена общая процедура подготовки проб (излучателей), которая включает в себя следующие стадии: отбор представительной пробы из массы готового продукта и пробоподготовка аналитической пробы. Для анализа пробу перетирали до различной крупности фракций и прессовали в таблетки диаметром 20 мм в виде “сандвич-структуры” на подложке из борной кислоты. Далее описан общий алгоритм измерения оптических и физических свойств прессованных и гранулированных проб с помощью разработанного программно-аппаратного комплекса.</p>
<p>В результате составлен экспериментальный план для набора данных и их последующего анализа с использованием ранее выбранных алгоритмов.</p>
<p><strong>Пятая глава</strong> посвящена процедуре доработке устройств и настройке алгоритмов для РФА-оптического комплекса. Также, создана единая база данных исследуемых образцов. Приведена процедура оценки физических параметров проб (максимальная фракция и наличие КД) с помощью оптического анализатора. Подобраны характеристики его работы. Стоит отметить, что кондиционирующие добавки - это органические соединения, флуоресцирующие в УФ диапазоне. Они являются самым дорогим реагентом при производстве минеральных удобрений.</p>
<p>Для получения признаков используется фотография поверхности пробы (в обычном и УФ свете), разрешением не менее 640×420 пикселей. Из него выделяется только область поверхности пробы, размером не менее 100×100 пикселей. По выделенной области строится “карта поверхности” (рис. 2) – интенсивность (яркость) каждого пикселя, рассчитанная по формуле:</p>
<div class="math">$$I = \frac {I_R + I_G + I_B}{3} $$</div>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_surf-map.png" alt="Карта поверхности" width="500px"/>
</td>
</tr>
<tr>
<td>
<i>
Рис. 2. Пример работы алгоритма обработки фотографий поверхности излучателей. По осям отложена ширина и длинна изображения в пикселях. а) – запрессованные гранулы, б) – запрессованный порошок фракции менее 500 мкм, в) – запрессованный порошок фракции менее 100 мкм. Первый ряд – необработанное изображение, второй ряд – продифференцированное изображение, третий ряд – продифференцированное и сглаженное изображение, формирующее "карту поверхности".
</i>
</td>
</tr>
</table>
</div>
<p>По сглаженной карте поверхности выделяется удельная площадь артефактов. Теоретические расчеты, выполненные для целого ряда исследуемых объектов, показали хорошую корреляцию данного параметра с признаками: обработки к.д. (УФ свет, бинарный признак - 0 и 1) и максимальной фракцией порошка (видимый свет, категориальный признак: гранулы, 500 мкм и 100 мкм). Проведен подбор параметров работы алгоритмов корреляции с фракцией объекта (рис. 3). Таким образом выделены оптимальные параметры работы предложенных алгоритма по карте поверхности (окно медианного фильтра 10 пикселей и константа <a href="https://ru.wikipedia.org/wiki/Marching_squares">поиска контуров</a> 0.5).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_corr-surface.png" alt="Корреляции"/>
</td>
</tr>
<tr>
<td>
<i>
Рис. 3. Корреляционная поверхность для удельного среднего размера и количества распознанных аномалий на карте поверхности. По оси х – величина окна сглаживания, по оси у – величина константы контуров – используется для алгоритма поиска контура, по оси z – коэффициент корреляции Спирмана (сила монотонной связи).
</i>
</td>
</tr>
</table>
</div>
<p>Затем проводился подбор параметров выделения признаков из РФ спектров исследуемых объектов для уменьшения уровня шумовых компонент. По каждому исследованному типу минерального удобрения при разных условиях работы алгоритмов оценены сила сглаживания, удельное СКО сигналов в спектре, величина сдвига характеристической линии по шкале энергий, количество автоматически найденных линий (метрики качества). Обоснован выбор следующих алгоритмов:</p>
<ol>
<li>Сглаживания спектра по Савицкому-Голею (наиболее быстрый и не изменяющий форму и положения характеристической линии), с шириной окна в 10 точек и аппроксимацией полиномом 4 степени.</li>
<li>Автоматический поиск характеристических линий и выделение фоновой составляющей алгоритмом “нулевого фильтра” с шириной окна (v) в 10 единиц и шириной сдвига (w) в 10 единиц, который является наиболее гибким и точным.</li>
</ol>
<p>Результат работы описанных алгоритмов в полностью автоматическом режиме приведен на рис. 4.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_alg-spec.png" alt="Обработка спектров"/>
</td>
</tr>
<tr>
<td>
<i>
Рис. 4. Работа алгоритма преподготовки и выделения аналитического сигнала из РФ спектров исследуемых объектов.
</i>
</td>
</tr>
</table>
</div>
<p>По оптимизированным параметрам выделена значимая информация из сигналов рентгено-оптического комплекса и проведена ее первоначальная обработка (балансировка, нормализация и кодирование). С использованием полученной информации составлена единая база данных “объекты-признаки”.</p>
<p><strong>Шестая глава</strong> посвящена работе с полученной базой данных и преобразованию выделенных свойств в аналитическую информацию. Проводился анализ различных моделей классификации, регрессии и кластеризации для расчета параметров качества сложных фосфорсодержащих удобрений. Приведены оценки этих моделей на основании метрик точности, полноты, F-меры, СКО и коэффициента корреляции Пирсона.</p>
<p>Проведен поиск оптимальных параметров работы пяти классификационных алгоритмов: регрессии и регрессии с регуляризацией (L1 и L2), случайного леса и наивного Байеса. Описанные алгоритмы использованы для определения брэнда пробы, фракционного состава и наличия предварительной сушки. Для этого проведено сравнение качества работы алгоритмов по каждой из частей аппаратного комплекса (оптической и ЭД РФ) и обосновано использование общих данных. С помощью F-меры (гармоническое среднее точности и полноты, наиболее универсальная оценка качества классификации) проведено сравнение качества классификации (табл. 2):</p>
<div class="math">$$ F = \frac{2 \times точность \times полнота}{точность + полнота} $$</div>
<p>Показано, что алгоритм случайного леса является более точным и полным, этим обосновано его дальнейшее использование.</p>
<p>Таблица 2. Качество работы классификаторов по F-мере (%).</p>
<div>
<table>
<tr>
<td><b>Классификатор </b></td>
<td><b>Марка по азоту </b></td>
<td><b>Марка по фосфору </b></td>
<td><b>Марка по калию </b></td>
<td><b>Марка по сере </b></td>
<td><b>Фракция </b></td>
<td><b>Наличие предварительной сушки </b></td>
</tr>
<tr>
<td>Регрессия </td>
<td>99.31 </td>
<td>99.78 </td>
<td>99.59 </td>
<td>99.56 </td>
<td>92.40 </td>
<td>72.94 </td>
</tr>
<tr>
<td>Регрессия с L1 регуляризацией </td>
<td>99.65 </td>
<td>99.78 </td>
<td>99.57 </td>
<td>98.87 </td>
<td>92.51 </td>
<td>73.08 </td>
</tr>
<tr>
<td>Регрессия с L2 регуляризацией </td>
<td>99.65 </td>
<td>99.78 </td>
<td>100.0 </td>
<td>98.99 </td>
<td>91.33 </td>
<td>68.46 </td>
</tr>
<tr>
<td>Случайный лес </td>
<td>100.0 </td>
<td>100.0 </td>
<td>100.0 </td>
<td>98.99 </td>
<td>98.40 </td>
<td>73.37 </td>
</tr>
<tr>
<td>Наивный Байес </td>
<td>71.12 </td>
<td>60.71 </td>
<td>66.84 </td>
<td>73.72 </td>
<td>53.32 </td>
<td>73.04 </td>
</tr>
</table>
</div>
<p>По обобщенным данным проведен поиск оптимальных параметров алгоритмов регрессии для определения химического состава исследуемых удобрений. В качестве метрик качества выбраны СКО и коэффициент детерминации (табл. 3).</p>
<p>С использованием классификации заполнены все недостающие физические параметры в исходной матрице. Далее, по всему набору признаков, строилась модель регрессии для расчета содержания основных питательных элементов. В результате появилась возможность непрямого определения содержания азота методом ЭД РФА.</p>
<p>Таблица 3. Качество работы алгоритмов регрессии по <span class="math">\(R^2\)</span>, %</p>
<div>
<table>
<tr>
<td>Регрессия </td>
<td>Концентрация азота, % </td>
<td>Концентрация фосфора, % </td>
<td>Концентрация калия, % </td>
<td>Концентрация серы, % </td>
</tr>
<tr>
<td>Диапазон концентраций, мас. % </td>
<td>[0; 16] </td>
<td>[15; 52] </td>
<td>[0; 20] </td>
<td>[0; 20] </td>
</tr>
<tr>
<td>Линейная регрессия </td>
<td>98.78 </td>
<td>98.00 </td>
<td>99.61 </td>
<td>98.17 </td>
</tr>
<tr>
<td>Линейная регрессия с L1 регуляризацией </td>
<td>97.04 </td>
<td>97.10 </td>
<td>99.26 </td>
<td>95.79 </td>
</tr>
<tr>
<td>Линейная регрессия с L2 регуляризацией </td>
<td>98.78 </td>
<td>97.70 </td>
<td>99.61 </td>
<td>98.17 </td>
</tr>
</table>
</div>
<p>Таким образом предложенные алгоритмы классификации и регрессии работают с достаточной точностью (в общем случае более 98% по выбранным метрикам качества). Они автоматизированы и обеспечивают быструю оценку качества промышленно производимых минеральных удобрений.</p>
<p>В заключительной части главы проведена процедура кластеризации данных для их более наглядного визуального представления. Использованы алгоритмы линейного и нелинейного понижения размерности для построения “карты типов” - двумерного представления исследуемых объектов по типу и марке (бренду) удобрения. Установлено, что использование линейного алгоритма проекции на главные компоненты дает точные и наиболее интерпретируемые результаты (рис. 5).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_PCA.png" alt="PCA" width="500px"/>
</td>
<td>
<i>
Рис. 5. Проекция найденных свойств основных марок удобрений на главные компоненты и кластеризация по марке. Звездочками отмечены центры кластеров, рассчитанные по алгоритму к-средних.
</i>
</td>
</tr>
</table>
</div>
<p>Результатом данной части работы является выбор и оптимизация способов расчета аналитической информации с использованием базы данных “объекты-признаки” (с необходимой точностью для промышленного контроля). Так в качестве наиболее точного алгоритма классификации выбран алгоритм случайного леса, для алгоритмов регрессии – линейная или L2 регуляризация, в качестве алгоритма понижения размерности данных – проекция на главные компоненты. Предложена схема расчета расстояния между классами объектов в пространстве двух компонент.</p>
<p><strong>Седьмая глава</strong> описывает работу программного обеспечения (ПО) аналитического комплекса, а также проведение различных опытно-промышленных испытаний (на предприятиях холдинга “ФосАгро”). Рассмотрено использование описанных подходов для решения различных задач промышленного производства минеральных удобрений:</p>
<ul>
<li>расчет физических и химических параметров качества минеральных удобрений;</li>
<li>оптимизация условий пробоподготовки;</li>
<li>расчет и мониторинг оптимального пути перехода промышленного производства на выпуск новых брендов удобрений;</li>
<li>расчет зависимостей дополнительных признаков качества по составленной базе данных.</li>
</ul>
<p>Структура ПО, основанная на ранее выбранных алгоритмах (глава 6) приведена на рис. 6. Особенностью программного обеспечения является возможность отслеживания качества работы лаборанта при подготовки проб к анализу. Мониторинг осуществляется по показателю максимальной фракции и качеству классификации типа удобрения (глава 6).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_dspectra-alg.png" alt="DSpectra" width="500px"/>
</td>
<td>
<i>
Рис. 6. Структура ПО "DSpectra"
</i>
</td>
</tr>
</table>
</div>
<p>С использованием разработанного ПО решена задача оптимизации времени пробоподготовки минеральных удобрений для РФ анализа. Для этого проводилась оценка статистических параметров (СКО, размах, однородность средних) для каждой из возможных стадии пробоподготовки (табл. 4).</p>
<p>Таблица 4. Стадии пробоподготовки, нуждающиеся в оптимизации.</p>
<div>
<table>
<tr>
<td><b>Тип пробоподготовки </b></td>
<td><b>Истирание до < 500 мкм </b></td>
<td><b>Истирание до < 100 мкм </b></td>
<td><b>Сушка </b></td>
<td><b>Затраченное время * </b></td>
</tr>
<tr>
<td>1** </td>
<td>- </td>
<td>- </td>
<td>- </td>
<td>- </td>
</tr>
<tr>
<td>2</td>
<td>+ </td>
<td>- </td>
<td>- </td>
<td>15 </td>
</tr>
<tr>
<td>3 </td>
<td>+ </td>
<td>+ </td>
<td>- </td>
<td>40 </td>
</tr>
<tr>
<td>4 </td>
<td>+ </td>
<td>- </td>
<td>+ </td>
<td>30 </td>
</tr>
<tr>
<td>5 </td>
<td>+ </td>
<td>+ </td>
<td>+ </td>
<td>45 </td>
</tr>
</table>
</div>
<p>* ориентировочное время для приготовления 20 г продукта</p>
<p>** запрессованные гранулы</p>
<p>Установлено, что предварительная сушка объектов и их перетирание до 100 мкм незначительно влияют на качество работы разработанного комплекса. Для этого были исследованы статистические показатели интенсивностей различных характеристических линий при разной пробоподготовке на примере самого неоднородного исследованного удобрения – NPK(S) 4-30-15(16).</p>
<p>По установленным показателям размаха и среднеквадратичного отклонения имеется некоторые различия между высушенными и не высушенными объектами. С другой стороны наблюдается аномальное уменьшение статистических показателей (улучшение качества РФА анализа) для фракции 500 мкм по сравнению с фракцией 100 мкм. Данный эффект можно объяснить большей неустойчивостью поверхности 100 мкм таблеток к внешним факторам (более быстрый набор влаги и меньшая физическая прочность). Исходя из полученных данных для каждого типа удобрения предложена процедура пробоподготовки (перетирание до 500 мкм без предварительной сушки). Данный метод позволил сократить время анализа с 45 до 10 минут.</p>
<p>Далее приведены результаты промышленного эксперимента по мониторингу перехода производства с марки NP(S) 12-40(10) на марку NP(S+S)+Zn 12-40(6+3)+1 с элементной серой. Эксперимент был проведен в Балаковском филиале АО “Апатит”. Процесс перехода занял трое суток, отбор пробы проводился каждые 60 минут. Разработанный комплекс выдавал информацию уже через 10 минут после отбора пробы (для сравнения, классический химический анализ занимал около 4 часов). Для визуализации аналитической информации использовалась автоматическая кластеризация в проекциях на две главные компоненты (рис. 8).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_brand-switch.png" alt="Мониторинг процесса" width="500px"/>
</td>
<td>
<i>
Рис. 8. Пример понижения размерности и автоматической кластеризации переходного процесса. 0 – конечный продукт, 1 – исходный продукт, 2 – значимые выбросы, проблемы в технологии, 3 – процесс перехода.
</i>
</td>
</tr>
</table>
</div>
<p>В заключении седьмой главы приведены варианты использование разработанного комплекса для решения “нетривиальных” задач анализа качества. Исследованы различные марки минеральных удобрений, для которых определялся гранулометрический состав, фактор формы, степень обработки кондиционирующими добавками и проводимость разбавленных растворов (солевой индекс). Эти параметры также являются важными показателями качества производимой продукции.</p>
<p>Предложена методика работы оптического анализатора как самостоятельного прибора контроля качества. Проведено сравнение точности расчета гранулометрического состава удобрений с наиболее распространенными альтернативными методами (табл. 5). Видно, что предложенная техника анализа хорошо согласуется с результатами анализа на плетеных ситах по европейским стандартам.</p>
<p>Таблица 5. Сравнение данных разных методов по определению гранулометрического состава. Продукт МАФ 12-52, Балаковский филиал АО “Апатит”.</p>
<div>
<table>
<tr>
<td><b>Фракция, мм </b></td>
<td><b>Прибор Camsizer, % </b></td>
<td><b>Круглые сита, % </b></td>
<td><b>Плетеные сита, % </b></td>
<td><b>Оптический, % </b></td>
<td><b>разность "Camsizer-оптический", % </b></td>
<td><b>разность "круглые сита-оптический", % </b></td>
<td><b>разность "плетеные сита-оптический", % </b></td>
</tr>
<tr>
<td>0-1 </td>
<td>0.00 </td>
<td>0.02 </td>
<td>0.03 </td>
<td>0.00 </td>
<td>0.00 </td>
<td>0.02 </td>
<td>0.03 </td>
</tr>
<tr>
<td>1-2 </td>
<td>0.27 </td>
<td>0.09 </td>
<td>0.16 </td>
<td>0.00 </td>
<td>0.27 </td>
<td>0.09 </td>
<td>0.16 </td>
</tr>
<tr>
<td>2-3 </td>
<td>20.57 </td>
<td>11.05 </td>
<td>40.29 </td>
<td>27.35 </td>
<td>6.78 </td>
<td>16.30 </td>
<td>12.94 </td>
</tr>
<tr>
<td>3-4 </td>
<td>75.13 </td>
<td>81.14 </td>
<td>56.12 </td>
<td>56.50 </td>
<td>18.63 </td>
<td>24.64 </td>
<td>0.38 </td>
</tr>
<tr>
<td>4-5 </td>
<td>3.93 </td>
<td>7.52 </td>
<td>3.35 </td>
<td>15.31 </td>
<td>11.38 </td>
<td>7.79 </td>
<td>11.96 </td>
</tr>
<tr>
<td>\>5 </td>
<td>0.10 </td>
<td>0.19 </td>
<td>0.05 </td>
<td>0.84 </td>
<td>0.74 </td>
<td>0.65 </td>
<td>0.79 </td>
</tr>
</table>
</div>
<p>Составлены “карты качества” выпускаемых гранулированных продуктов, характеризующие удобрения по гранулометрическому составу и фактору формы. Примеры карт приведены на рис. 9. Видно, что технология производства в случае МАФ дает удовлетворительный результат, в то время как для ДАФК возможно требуется доработка существующего подхода гранулирования.</p>
<div>
<table>
<tr>
<td>
<img src="../../images/blog/science/site_science_qual-map-1.png" alt="Карта качества МАФ" width="500px"/>
</td>
</tr>
<tr>
<td>
<img src="../../images/blog/science/site_science_qual-map-2.png" alt="Карта качества ДАФК" width="500px"/>
</td>
</tr>
<tr>
<td>
<i>
Рис. 9. Карты качества гранулированных продуктов: зависимость фактора формы от гранулометрического состава, а) – МАФ, производства Балаковский филиал АО "Апатит", б) – ДАФК, производства АО "Апатит". Область качественного продукта отмечена прямоугольником.
</i>
</td>
</tr>
</table>
</div>
<p>При работе в УФ диапазоне описана возможность определения количества кондиционирующей добавки на гранулах. На рис. 10 представлены результаты анализа количества КД в разных удобрениях (в зависимости от их марки и места производства). Можно обратить внимание, что количество кондиционера на гранулах (прямо пропорциональное удельной площади свечения) зависит не только от количества вводимой КД, но и от типа удобрения и способа нанесения КД.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_ca.png" alt="CA" width="500px"/>
</td>
<td>
<i>
Рис. 10. Удельная площадь артефактов (контуров) на карте поверхности в зависимости от количества кондиционера, типа объекта и способа обработки.
</i>
</td>
</tr>
</table>
</div>
<p>Еще один параметр качества производимой продукции, известный как “солевой индекс” (величина проводимости 0,1 % раствора удобрения). Он может быть выражен через химический состав удобрения. Для его определения построена множественная регрессия для различных спектров удобрений (рис. 11). Коэффициент корреляции между параметрами спектра и проводимостью разбавленных растворов составляет 95,9% что является хорошим показателем для анализа физических свойств сложных химических систем.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_si.png" alt="SI" width="500px"/>
</td>
<td>
<i>
Рис. 11. Регрессионная кривая для определения проводимости разбавленных растворов минеральных удобрений по их РФ спектру.
</i>
</td>
</tr>
</table>
</div>
<p>Результаты применения разработанного метода и оборудования представлены в работах [1] – анализ сложных фосфорсодержащих удобрения, [2] – анализ апатитового концентрата с использованием методов АБД, [3] – свидетельстве о регистрации программы для ЭВМ [4] – [9] – построение регрессионных моделей и математический аппарат для работы с РФ спектрами.</p>
<p><strong>Результаты и выводы</strong></p>
<p>Основные результаты диссертационной работы:</p>
<ol>
<li>
<p>Выделены значимые химические и физические параметры для эффективного учета сложной матрицы исследуемых объектов (аномалии на карте поверхности (оптический регистратор), интенсивности линий химических элементов, площадь фона и интенсивность когерентного и не когерентного рассеяния рентгеновской трубки (рентгенофлуоресцентный анализ)).</p>
</li>
<li>
<p>Доказана возможность определения содержания азота в сложных фосфорсодержащих удобрениях по косвенным признакам.</p>
</li>
<li>
<p>Обоснована и разработана экспрессная и мало затратная система получения информации о минеральных удобрениях. Оптимизирована их пробоподготовка.</p>
</li>
<li>
<p>Разработан автоматический алгоритм выделения и расчета информативных признаков при контроле качества производимой продукции.</p>
</li>
<li>
<p>Создан прототип единой аналитической базы исследуемых объектов с возможностью использования методов анализа больших данных.</p>
</li>
<li>
<p>Доказана возможность решения более широкого спектра задач с использованием разработанного аппаратно-программного комплекса, чем классическим методом РФА.</p>
</li>
<li>
<p>Показана возможность расчета неявных значимых признаков качества минеральных удобрений (“карты качества”, наличие предварительной сушки, солевой индекс и т.д.).</p>
</li>
<li>
<p>Создано и внедрено в производственную практику программное обеспечение, обеспечивающее удобную и простую реализацию всех разработанных алгоритмов.</p>
</li>
</ol>
<h2>Публикации по теме диссертации</h2>
<p>Публикации в журналах, включенных в перечень ВАК РФ.</p>
<ol>
<li>
<p>Юновидов Д.В., Соколов В.В., Бахвалов А.С.. Метод оценки влияния стадий пробоподготовки NPKS удобрений на результаты рентгенофлуоресцентного анализа по спектру пробы // Заводская лаборатория. Диагностика материалов. 2017. Т. 83, No 9 с. 15-21.</p>
</li>
<li>
<p>Юновидов Д.В., Соколов В.В., Бахвалова Е.В, Донских В.А. Разработка стандартного образца апатитового концентрата. Эффективный контроль однородности с помощью рентгенофлуоресцентных методов анализа // ГИАБ. 2016. No 7. с. 131-144.</p>
<p>Свидетельства на программы для электронных вычислительных машин.</p>
</li>
<li>
<p>Свидетельство No 2017617704 Российская Федерация. Программа “DSpectra” / Юновидов Д.В.; заявитель и правообладатель Юновидов Д.В. - No 2017614722; заявл. 19.05.2017; зарегистрировано в Реестре программ для ЭВМ 11.07.2017 – 1 с.</p>
</li>
</ol>
<p>Статьи и материалы конференций.</p>
<ol start="4">
<li>
<p>Юновидов Д.В., Соколов В.В., Осколок К.В., Болотоков А.А.. Рентгенофлуоресцентное определение церия в экстракционной фосфорной кислоте и фосфатных концентратах // Мир серы, N, P и K. 2012. No4. с. 10-13.</p>
</li>
<li>
<p>Юновидов Д.В., Соколов В.В., Осколок К.В., Болотоков А.А.. Рентгенофлуоресцентное определение редкоземельных элементов после сорбционного выделения и концентрирования из экстракционной фосфорной кислоты // Фосфатное сырье: производство и переработка. 2013. с. 147 – 151.</p>
</li>
<li>
<p>Юновидов Д. В., Эль-Салим С.З., Осколок К.В. Восстановление спектра гомогенной системы по временным зависимостям интенсивностей линий в зарождающейся и развивающейся гетерогенной системе на примере экстракционной фосфорной кислоты // VIII Всероссийская конференция по рентгеноспектральному анализу. Иркутск, 22 - 26 сентября 2014 г. Тезисы докладов. — Иркутск. Институт земной коры СО РАН, 2014. - С. 139–139.</p>
</li>
<li>
<p>Юновидов Д. В., Эль-Салим С. З., Осколок К. В. Техника виртуального эксперимента и её применение для количественного рентгенофлуоресцентного анализа экстракционной фосфорной кислоты // VIII Всероссийская конференция по рентгеноспектральному анализу. Иркутск, 22 - 26 сентября 2014 г. Тезисы докладов. — Иркутск. Институт земной коры СО РАН, 2014. - С. 140–140.</p>
</li>
<li>
<p>Юновидов Д.В., Ребрикова А.Т., Осколок К.В., Соколов В.В. Рентгенофлуоресцентное определение технологически важных элементов в экстракционной фосфорной кислоте // Второй съезд аналитиков России. Москва, 23 - 27 сентября 2013 г. Тезисы докладов. - Москва. - С. 289–289.</p>
</li>
<li>
<p>Юновидов Д.В., Ребрикова А.Т., Осколок К.В., Соколов В.В. Техника виртуального эксперимента для количественного рентгенофлуоресцентного анализа экстракционной фосфорной кислоты // Второй съезд аналитиков России. Москва, 23 - .27 сентября 2013 г. Тезисы докладов. - Москва. - С. 290–290.</p>
</li>
<li>
<p>Yunovidov, V. Sokolov, A. Bahvalov, Big data analysis and comprehensive analytical control of fertilizers, 11 Winter School of Chemometrics (WSC 11). Saint Petersburg, Russia, 2018. Thesis. http://wsc.chemometrics.ru/media/files/conferences/wsc11/abstracts/abstract__yunovidov_dmitry.pdf</p>
</li>
</ol>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>Описание программы Salt Index Calculator2019-10-22T00:00:00+03:002019-10-22T00:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2019-10-22:/ru/blog/soft-SI.html<p><strong>Авторы:</strong> Юновидов Д.В., Надежин М.Н.</p>
<p><strong>Правообладатель:</strong> Акционерное общество «Научно исследовательский институт по удобрениям и инсектофунгицидам имени профессора Я.В.Самойлова» (АО «НИУИФ»).</p>
<p><strong>Программа:</strong> “Salt Index Calculator”.</p>
<p><strong>Аннотация:</strong></p>
<p>Программное обеспечение разработано для расчета солевого индекса различных минеральных удобрений. В основе расчетов лежит информация о фазовом составе удобрений (по основным …</p><p><strong>Авторы:</strong> Юновидов Д.В., Надежин М.Н.</p>
<p><strong>Правообладатель:</strong> Акционерное общество «Научно исследовательский институт по удобрениям и инсектофунгицидам имени профессора Я.В.Самойлова» (АО «НИУИФ»).</p>
<p><strong>Программа:</strong> “Salt Index Calculator”.</p>
<p><strong>Аннотация:</strong></p>
<p>Программное обеспечение разработано для расчета солевого индекса различных минеральных удобрений. В основе расчетов лежит информация о фазовом составе удобрений (по основным фазам) и табличных данных о проводимости (солевых индексах) исходных компонентов удобрений (фаз).</p>
<p>Программное обеспечение работает с русским и английским языком и позволяет:</p>
<ol>
<li>Задавать тип и марку удобрений:
* указывать содержание основных питательных элементов и серы;
* указывать основные компоненты из которых состоит удобрений (основные фазы).</li>
<li>Проводить уточнение и дополнение базы данных проводимости разбавленных растворов исходных компонентов удобрений (солевые индексы).</li>
<li>Дополнять основные компоненты удобрений.</li>
<li>Экспортировать полученную информацию в виде <em>.txt, </em>.csv, *.xls файлов.</li>
<li>Строить отчеты о проделанной работе.</li>
</ol>
<p><strong>Вклад авторов</strong></p>
<ul>
<li>Юновидов Дмитрий Валерьевич – разработка логики программного обеспечения, логики расчетов и реализация первичного интерфейса программы.</li>
<li>Надежин Миксим Николаевич – программная реализация расчета солевого индекса, доработка пользовательского интерфейса, тестирование.</li>
</ul>
<p><strong>Тип ЭВМ:</strong> IBM PC-совмест. ПК</p>
<p><strong>Язык:</strong> Python 2.7</p>
<p><strong>ОС:</strong> 32 и 64 разрядные Windows любой версии, Linux, MacOS</p>
<p><strong>Объём программы:</strong> 1.32 MБ (1320000 байт)</p>Описание программы "Granules Calculator by Yunovidov D.V."2019-10-22T00:00:00+03:002019-10-22T00:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2019-10-22:/ru/blog/soft-granule-optic.html<p>В данной небольшой заметке описано программное обеспечение для решения задачи подсчета количества и размера гранул минеральных удобрений на оптическом изображении (фотографии).</p>
<p><strong>Автор:</strong> Юновидов Д.В.</p>
<p><strong>Правообладатель:</strong> Акционерное общество «Научно исследовательский институт по удобрениям и инсектофунгицидам имени профессора Я.В.Самойлова» (АО «НИУИФ»)</p>
<p><strong>Аннотация</strong></p>
<p>Программное обеспечение разработано для расчета гранулометрического состава …</p><p>В данной небольшой заметке описано программное обеспечение для решения задачи подсчета количества и размера гранул минеральных удобрений на оптическом изображении (фотографии).</p>
<p><strong>Автор:</strong> Юновидов Д.В.</p>
<p><strong>Правообладатель:</strong> Акционерное общество «Научно исследовательский институт по удобрениям и инсектофунгицидам имени профессора Я.В.Самойлова» (АО «НИУИФ»)</p>
<p><strong>Аннотация</strong></p>
<p>Программное обеспечение разработано для расчета гранулометрического состава минеральных удобрений на оптико-электронном цветном изображении. В основе расчетов лежат алгоритмы получения и обработки цифрового изображения для расчета замкнутых контуров с последующей аппроксимацией эллипсами. Программное обеспечение работает с русским и английским языком и позволяет:</p>
<ol>
<li>Получать оптико-электронное изображение с цифровых USB-камер и Nikon 1V3.</li>
<li>Начинать работу по внешнему сигналу, полученному по КОМ-протоколу с микроконтроллера.</li>
<li>Проводить предварительную обработку изображения:</li>
</ol>
<ul>
<li>преобразовывать изображение в градации серого;</li>
<li>корректировать яркость и резкость;</li>
<li>проводить выравнивание уровней яркости (эквализацию) изображения в градациях серого;</li>
<li>сглаживать изображение в градациях серого Гауссовым фильтром.</li>
</ul>
<ol start="4">
<li>Бинаризовать изображение по стандартному и адаптивному алгоритму и проводить его математическую морфологию.</li>
<li>Использовать алгоритм поиска и аппроксимации эллипсами замкнутых контуров.</li>
<li>Рассчитывать оси эллипсов и гранулометрический состав на их основе.</li>
<li>Калибровать рассчитанный гранулометрический состав по известным пробам.</li>
<li>Экспортировать полученную информацию в виде *.txt файлов в формате, необходимом для интеграции в заводскую информационную систему на базе программного обеспечения PI System.</li>
</ol>
<p>На данный момент разработка программы закончена и базовая версия программы зарегистрирована в федеральном реестре программ для ЭВМ (Российская Федерация).</p>
<p><strong>Тип ЭВМ:</strong> IBM PC-совмест. ПК</p>
<p><strong>Язык:</strong> Python 2.7</p>
<p><strong>ОС:</strong> 32 и 64 разрядные Windows и Linux</p>
<p><strong>Объём программы:</strong> 922.5 Кбайт (922500 байт)</p>Описание программы DSpectra (обработка рентгенофлуоресцентных спектров)2018-08-02T00:00:00+03:002019-10-22T00:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2018-08-02:/ru/blog/soft-spectra-xrf.html<p>В данной небольшой заметке описано программное обеспечение для решения задачи комплексной обработки рентгенофлуоресцентных спектров. </p>
<p><strong>Программа была разработана для решения ряда задач:</strong></p>
<ol>
<li>Получения информации с рентгенофлуоресцентных спектрометров, производства АО “Научные приборы”, с возможностью напрямую задавать реальное время измерения, ток и экспозицию.</li>
<li>Получение информации со любого спектрометра в виде текстового фала.</li>
<li>Реализация …</li></ol><p>В данной небольшой заметке описано программное обеспечение для решения задачи комплексной обработки рентгенофлуоресцентных спектров. </p>
<p><strong>Программа была разработана для решения ряда задач:</strong></p>
<ol>
<li>Получения информации с рентгенофлуоресцентных спектрометров, производства АО “Научные приборы”, с возможностью напрямую задавать реальное время измерения, ток и экспозицию.</li>
<li>Получение информации со любого спектрометра в виде текстового фала.</li>
<li>Реализация различной математической обработки спектров:<ul>
<li>сглаживание;</li>
<li>дифференцирование;</li>
<li>выделение характеристических линий;</li>
<li>расчет параметров характеристических линий и фонового сигнала;</li>
<li>аппроксимация сигнала различными функциями.</li>
</ul>
</li>
<li>Сохранение информации, полученной из спектров в виде матрицы “объекты-признаки”.</li>
<li>Реализация алгоритмов машинного обучения и работы с большими массивами данных для классификации и регрессии.</li>
</ol>
<p>На данный момент разработка программы продолжается, часть алгоритмов выложена на <a href="https://github.com/DimYun/DSpectra">Гитхабе</a>, а базовая версия программы зарегистрирована в федеральном реестре программ для ЭВМ (Российская Федерация).</p>
<div>
<table>
<tr>
<td style="width:50%">
<img src="../../images/blog/soft/site_soft_dspectra-alg_en.jpg" alt="DSpectra"/>
</td>
<td>
<img src="../../images/blog/soft/site_soft_dspectra-doc.png" alt="DSpectra"/>
</td>
</tr>
</table>
</div>
<p><strong>Реферат программы.</strong></p>
<p>Программное обеспечение разработано для обработки и преобразования спектральной информации, полученной от энергодисперсионных рентгеновских спектрометров любого производителя при наличии возможности экспорта спектра в виде вектора интенсивностей или матрицы энергия-интенсивность в любой файловый формат. Позволяет проводить:</p>
<ol>
<li>Математическую обработку спектров:<ol>
<li>Сглаживание по алгоритмам среднего и медианного фильтра, Савицкого-Голея и Фурье-преобразования;</li>
<li>Приведения исходного спектра к дифференциальной, нормализованной и частотной форме.</li>
</ol>
</li>
<li>Получение аналитической информации:<ol>
<li>Ручное выделение и маркировка характеристических линий (далее – пики);</li>
<li>Расчет интенсивности, площади и отношения сигнал-шум для пика;</li>
<li>Вычисление и нивелирование базовой линии;</li>
<li>Автоматическое проведение всех вышеперечисленных стадий.</li>
</ol>
</li>
<li>Работу с аналитической информацией, выделенной из спектра:<ol>
<li>Создание библиотеки полученной информации;</li>
<li>Построение матриц «объекты-признаки»;</li>
<li>Классификация по алгоритмам случайного леса;</li>
<li>Множественная регрессия, создание пользовательских методов регрессионного анализа;</li>
<li>Сохранение пользовательских схем анализа.</li>
</ol>
</li>
<li>Возможность поточной обработки спектров по каждой представленной стадии.</li>
<li>Экспорт полученной информации в виде <em>.txt, </em>.csv, *.xls файлов.</li>
<li>Построение отчетов о проделанной работе.</li>
</ol>PhD thesis2018-06-28T00:00:00+03:002019-10-22T00:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2018-06-28:/blog/science-phd.html<p>In this note the short content of my PhD work (candidate dissertation) are given (PhD of technical science; specialty 01.04.01 devises and methods of experimental physics).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_phd.png" alt="Grafical Abstract" wight="900px"/>
</td>
<td>
<i>Graphical Abstract</i>
</td>
</tr>
</table>
</div>
<h2>Software and hardware for combine X-ray fluorescence and optical system for analysis of complex phosphorus-containing mineral fertilizers</h2>
<p>The presented work …</p><p>In this note the short content of my PhD work (candidate dissertation) are given (PhD of technical science; specialty 01.04.01 devises and methods of experimental physics).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_phd.png" alt="Grafical Abstract" wight="900px"/>
</td>
<td>
<i>Graphical Abstract</i>
</td>
</tr>
</table>
</div>
<h2>Software and hardware for combine X-ray fluorescence and optical system for analysis of complex phosphorus-containing mineral fertilizers</h2>
<p>The presented work was carried out in the JSC “The Research Institute for Fertilizers and Insecto-fungicides named after Professor Y.V.Samoilov” (JSC “NIUIF”).</p>
<div>
<table>
<tr>
<td><b>Scientific adviser:</b> </td>
<td><i>Sokolov Valery Vasilievich</i>, PhD of technical science, Head of Quality and Standardization Department of JSC "NIUIF" </td>
</tr>
<tr>
<td rowspan="2"><b>Official opponents:</b> </td>
<td><i>Eremenko Yuri Ivanovich</i>, Doctor of Technical Sciences, Professor, Head of the Department of Automated and Information Control System of the Starooskolsky Technological Institute named after A.A.Ugarov (branch) of the federal state autonomous education institution "National Research Technological University MISiS" </td>
</tr>
<tr>
<td><i>Bagaev Kirill Alexandrovich</i>, PhD of physical and mathematical sciences, technical director of JSC "Newcom-NDT" </td>
</tr>
<tr>
<td><b>Lead organization</b></td>
<td>St. Petersburg State Technological Institute (Technical University), Department of Automation of Chemical Processes</td>
</tr>
</table>
</div>
<p>Defense of the PhD thesis took place on December 22, 2017 at 4:00 pm in the conference hall at the meeting of the dissertation council D002.034.01 at the Institute of Analytical Instrumentation at the address: 198095, St.Petersburg, Ivan Chernykh street, 31-33, lit. A. The thesis can be found in the library and on the site of the <a href="http://iairas.ru/">Insitute of Analytical Instrumentation</a>.</p>
<h2>General description of the work</h2>
<p><strong>The relevance of the work.</strong> Modern industrial production of mineral fertilizers is a complex and multi-factorial process in which three key objects are presented: <em>incoming raw materials, intermediate objects (phosphoric acid, sulfuric acid, ammonia, etc.) and products</em>. Practice shows, that without complex accounting of production parameters it is impossible to achieve reproducible and height-quality industrially produced products. For this purpose, the X-ray fluorescence analysis (XRF), which is one of the most informative methods of analytical control, is very suitable.</p>
<p>At the same time, this method is seldom used in the quality control of industrial produced mineral fertilizers (despite the significant development of mathematical approaches and instrumental park in last 20 years). One of the possible reasons is complexity of industrial objects. Such products have a lot of elements in base substance, which greatly increases the error of the direct XRF analysis.</p>
<p>However, the modern computer technology and analytical methods allows to solved these problems. They allows to accumulate and process a great amount of information in order to obtain a more detailed, accurate and reproducible research of the continuous industrial processes.</p>
<p><strong>Objects of the research.</strong> The complex phosphorus-containing mineral fertilizers and their quality parameters (particles size, preliminary condition of drying, chemical composition etc.).</p>
<p><strong>Purpose of the work.</strong> To create software and hardware for complex quality control device, which is based on an energy-dispersion (ED) X-ray fluorescence spectrometer and optical system. Developed device increase the efficiency, speed and reliability of quality control of industrially produced mineral fertilizers. It is necessary to solve the following <strong>tasks</strong> to achieve such goal:</p>
<ol>
<li>To identify meaningful chemical and physical parameters for effective X-ray and optical research of complex fertilizers matrix.</li>
<li>To develop a hardware system for obtaining physical and chemical information.</li>
<li>To develop an automatic algorithm for the allocation and calculation of informative features of quality of industrial produced mineral fertilizers.</li>
<li>To create a prototype of a single analytical database for using big data analysis (BDA) and machine learning methods.</li>
<li>To justify and develop a scheme for the complex analysis of mineral fertilizers for created device (which will minimize losses of raw materials and energy resources when facility switch from one industrially produced brand to another).</li>
<li>To ensure, that the developed method can be used in industrial laboratories (provide simple and stable software and hardware).</li>
</ol>
<p><strong>Scientific novelty.</strong></p>
<ol>
<li>The new software and hardware scheme of combine ED X-ray fluorescence spectrometer with optical surface recognition system was developed for a multi-factor express analysis of mineral fertilizers (with experimental approval).</li>
<li>Techniques for determining physical and chemical parameters of mineral fertilizers were developed (concentration of various chemical elements, type, brand, fraction composition and value of conditioning additives (CA)).</li>
<li>Based on the experimental results, an original analytical database of physical and chemical properties was created, which makes it possible to increase the accuracy and speed of measurements.</li>
<li>The schemes of regression and classification analysis, which is based on fertilizers brand (nutrients (N, P, K) and sulfur) and physical properties was developed.</li>
<li>On the basis of ED XRF and the compiled database, the technique for determining nitrogen in mineral fertilizers was proposed (direct detection of which by the ED XRF method is impossible).</li>
<li>The developed software for the device, which provides automatic calculation and big data analysis for mineral fertilizers was created and registered.</li>
<li>A technique for determining the fraction of pressed samples for ED XRF with an optical surface recognition was developed.</li>
</ol>
<p><strong>Practical significance.</strong></p>
<p>The developed techniques and device are used in the “PosAgro” corporation mineral fertilizers facilities. The developed algorithms for data processing are used in the some ED XRF spectrometers, which is produced by JSC “Scientific Instruments”.</p>
<ol>
<li>To implement presented techniques, a software and hardware complex was developed which allowed to increase the sensitivity, accuracy and speed of mineral fertilizers quality control.</li>
<li>A new prototype of devise with ED XRF and optical recognition was created and tested for analysis of the chemical composition (all nutrients and sulfur) and particle size of objects. The proposed equipment have broad prospective both in the laboratory and in the industrial automated control.</li>
<li>An original techniques for control of granules size and conditioning quality were implemented.</li>
<li>A scheme of the multi-factors control was developed for minimize losses of raw materials and energy resources when industrial production switch from one fertilizers brand to another.</li>
</ol>
<p><strong>Main theses.</strong></p>
<ul>
<li>Software and hardware for device, which is based on the ED XRF spectrometer and optical system (for surface recognition and multi-factor express analysis of mineral fertilizers).</li>
<li>Algorithms for features preparations for database of physical and chemical properties of industrial produced mineral fertilizers (concentration of various chemical elements, type, brand, fraction composition and presence of CA).</li>
<li>The original mathematical model of the rapid and complex analysis of the investigating objects, which is used for determine:<ul>
<li>physical properties (brand, maximum size of particles, preliminary condition of drying and presence of conditioning additive);</li>
<li>chemical properties (concentration of nutrient and sulfur, type and brand, including concentration of nitrogen, which is not determined directly by the ED XRF).</li>
</ul>
</li>
<li>Algorithms and software (“DSpectra”), which provide automated calculation of analytical signals, features for big data analysis, regression and correlation models.</li>
</ul>
<p><strong>In accordance with the passport of specialization</strong> (01.04.01 - “Devices and methods of experimental physics”) the presented work describe the development of technique for significantly increasing the accuracy, sensitivity and speed of measurements of physical properties. It is used for quality control of industrially produced mineral fertilizers. Moreover, the automated physical experiment was implemented. A small sized and efficient device for obtaining complex physical and chemical information was developed as well.</p>
<p><strong>Publication.</strong> Eight article were published, including two in the journals, which are recommended by the Higher Attestation Commission of the Russian Federation. Four reports at Russian and international conferences and seminars and one certificate of software registration were published as well. A list of works is given at the end of this note.</p>
<p><strong>The structure and volume of the work.</strong> Current research (in Russ.) is presented at 187 pages and consist of an introduction, six chapters, conclusion, appendix and list of references with 116 titles. The work contains 50 tables and 65 figures.</p>
<h2>The summary of the work</h2>
<p><strong>Introduction (the first chapter)</strong> is devoted to the dissertation aim. The aim, tasks and relevance are formulated. The scientific novelty, practical significance and main theses are determined.</p>
<p><strong>The second chapter</strong> gives an overview of Russian and foreign literature, which is related to the topic of the work. The characteristics of modern industrial production of complex phosphorus-containing mineral fertilizers were given. The main products, which determine the quality of all technology were highlighted (ore (apatite), extraction phosphoric acid (EPhA) and various types and brands of fertilizers). The type of fertilizer represent the macro- and micro-components composition (MAF - mono-ammonium phosphate (NP), NPK, NPK(S), NP(S+S)+Zn, which contains the elemental sulfur and zinc as additions). In the other hand, the mark of fertilizers represents the quantitative content of components, which is mentioned in type (12-52, 15-15-15, 4-30-15 (16), 12-40(6+3)+1 respectively). The brand represents both type and mark of fertilizers. Furthermore, the main object of the research was described (the phosphorus-containing mineral fertilizers). The physical and chemical parameters of the fertilizers base were examined and the quality markers were identified. The various techniques for process and obtain of analytical information were investigated. Moreover, the different methods of analytical control in industrial and environmental practice were reviewed, and their properties and applicability were estimated. It was established, that the XRF-analysis is the most informative and express methods of quality control (Figure 1). As the result, the software and hardware properties of express and informative analysis for industrially produced mineral fertilizers were identified. The tasks were set.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_an-methods.png" alt="AM" width="900px"/>
</td>
</tr>
<tr>
<td>
<i>
Fig. 1. Number of articles devoted to one or another analytical method, normalized to the average number of articles per year. The figure consists of articles, which were published over the past 10 years (based on the Scopus search results). The "XRF" is the combination of energy disperse and wave technique; "ICP" - various types of spectroscopy with inductively coupled plasma; "Spectroscopy" - methods of spectroscopy without ICP; "classical" - titration and gravimetry.
</i>
</td>
</tr>
</table>
</div>
<p><strong>The third chapter</strong> is devoted to the theoretical basis of multi-factor control of fertilizers. Methods of classification, regression and clusterization were examined. Mathematical and statistical approaches to accumulation and processing of objects features are considered. All mathematical algorithms for this work are presented. Necessity of noise reduction is established (for achieve the completeness and quality of analysis of industrially produced objects). Various algorithms of the data transformations was carried out for such purpose:</p>
<ul>
<li>normalization, balancing and coding of data;</li>
<li>smoothing and calculation of anomalies in images from the optical system;</li>
<li>smoothing the XRF spectrum with different filters (middle and median filters, Savitsky-Golay, Fourier transform with cutting of noise frequencies);</li>
<li>use of various automated algorithms for identifying and calculating the intensities of characteristic lines (differentiation and “zero filter”).</li>
</ul>
<p>Furthermore, the required features for building a database “objects-features” for statistical analysis are given (Table 1).</p>
<p><strong>Table 1. Main features of objects and its types.</strong></p>
<table>
<thead>
<tr>
<th>Features</th>
<th>Type of values</th>
</tr>
</thead>
<tbody>
<tr>
<td>intensity of chemical elements in the spectrum</td>
<td>numeric</td>
</tr>
<tr>
<td>maximum size of particles (fraction)</td>
<td>categorical*</td>
</tr>
<tr>
<td>preliminary condition of drying</td>
<td>binary</td>
</tr>
<tr>
<td>number of artifacts in “surface map”</td>
<td>numeric</td>
</tr>
<tr>
<td>area of artifacts in “surface map”</td>
<td>numeric</td>
</tr>
<tr>
<td>fertilizer type</td>
<td>categorical*</td>
</tr>
<tr>
<td>fertilizer mark</td>
<td>numeric</td>
</tr>
</tbody>
</table>
<p>* features, which belong to certain category and can’t be compare to each other (also known as nominal)</p>
<p>To identify the missing binary and categorical data various classification models were describe (logistic regression, regression with regularization, random forest and naive Bayes). Moreover, classification was used to monitor the proximity of products quality to required ones. Such information are especially relevant when facility switch production from one fertilizer brand to another. Accurate and reproducible classification allows resources and energy saving in such processes.</p>
<p>Variants regression algorithms were considered after the classification (for determining the chemical properties of fertilizers). Regression coefficients use different regularization type:</p>
<ul>
<li>
<p>L1 (Ridge): <span class="math">\(w=argmin_w(\frac{1}{l}\sum_{i=1}^l (\langle w, x_i \rangle − y_i)^2 + \lambda \sum_{i=1}^d w_j^2)\)</span>;</p>
</li>
<li>
<p>L2 (Lasso): <span class="math">\(w=argmin_w(\frac{1}{l}\sum_{i=1}^l (\langle w, x_i \rangle − y_i)^2 + \lambda \sum_{i=1}^d |w_j|\)</span>;</p>
</li>
</ul>
<p>while the coefficients without regularization are:</p>
<ul>
<li><span class="math">\(w=argmin_w(\frac{1}{l}\sum_{i=1}^l (\langle w, x_i \rangle − y_i)^2)\)</span>.</li>
</ul>
<p>where <span class="math">\(w\)</span> is the coefficient in front of the feature, <span class="math">\(x_i\)</span> - the i feature, <span class="math">\(\langle w, x_i \rangle\)</span> - the scalar product of the vector (coefficients and features), <span class="math">\(y_i\)</span> - the response, <span class="math">\(l\)</span> - parameters quantity, <span class="math">\(d\)</span> and <span class="math">\(\lambda\)</span> - optimization parameters.</p>
<p>Finally, the several techniques for big data analysis were justified for further using as a result of this chapter. They quality metrics are describe (precision, recall and F-metrics for classification and standard deviation (STD), Pearson’s coefficient of correlation and Spearman’s coefficient of correlation for regression). The “grid search” method for optimal parameters detection was described for each of the presented algorithms. In addition, various techniques for data dimension reduce and visualize were presented.</p>
<p>The schemes of experiments are describe in <strong>the fourth chapter</strong>. The list of developed device and equipment include diagrams and detailed instructions. The other list is the used resources (instruments, reagents and working samples).</p>
<p>The scheme of a multi-factorial experiment for controlling the fertilizers quality when production switch from NP(S) 12-40(10) to the NP(S+S)+Zn 12-40(6+3)+1 is given. The main procedures of sample preparation for classification and regression analysis are described. Table of used samples are compiled (7 types of objects, about 170 samples in 3 parallel measurements). The algorithm for optimal parameters determination for X-ray device with optical system is describe.</p>
<p>The general sample preparation procedure includes select of a representative sample from the mass of the product and it preparation for analysis. The crumbled (with various particle size) samples are pressed into pellets with 20 mm diameters as a “sandwich structure” on a boric acid substrate. Next, with developed hardware and software the general algorithm for measuring properties of mineral fertilizer was proposed.</p>
<p>The main chapter result is the total experimental plan for collect and analyze data.</p>
<p><strong>The fifth chapter</strong> include tuning the developed device and its working algorithm (XRF and optical analysis). Moreover, the chapter describe creation of single database of studied samples. The optical procedure of samples’ physical parameters estimation is performed (including conditioning additives, which are the most expensive raw material for mineral fertilizers). It’s working parameters were tuned up and selected.</p>
<p>A photograph of the sample’s surface (in normal and UV light) was used to obtain the optical features. The resolution of photo is at least 640 × 480 pixels. Next, surface area with at least 100 × 100 pixels was allocated from photo. Finally, from the selected area the “surface map” was constructed (Figure 2). The “surface map” is the intensity (brightness) of each pixel in range [0; 250], which calculated as follow:</p>
<div class="math">$$I = \frac {I_R + I_G + I_B}{3} $$</div>
<p>where <span class="math">\(I_R\)</span>, <span class="math">\(I_G\)</span>, <span class="math">\(I_B\)</span> are the intensity of red, green and blue pixels respectively.</p>
<div>
<table>
<thead>
<tr>
<th colspan="3">
<img src="../../images/blog/science/site_science_surf-map.png" alt="Surface Map" width="500px"/>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>(a)</td>
<td>(b)</td>
<td>(c)</td>
</tr>
<tr>
<td colspan="3">
<i>
Fig. 2. An example of the photo processing. The width and length of the image are number of pixels. (a) - pressed granules, (b) - pressed powder with grains < 500 μm, (c) - pressed powder with grains < 100 μm. The first row is an unprocessed "surface map", the second row is a differentiated image, the third row is a differentiated and smoothed image that forms a final "surface map".
</i>
</td>
</tr>
</tbody>
</table>
</div>
<p>The area of total “artifacts” pixels (which is difference from 0) is calculated from the smoothed “surface map”. It has been established, that this parameter is in good agreement with containing CA (as binary feature, in case of UV illumination) and type of particle size (as categorical feature for granules, 500 μm and 100 μm powders, in case of visible light illumination). Moreover, the classification algorithm parameters were carried out (Figure 3). Thus, the optimal parameters of classification were distinguished (median filter window is 10 pixels and constant of <a href="https://ru.wikipedia.org/wiki/Marching_squares">contour search</a> is 0.5), which were based on the “surface map”.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_corr-surface.png" alt="Correlation"/>
</td>
</tr>
<tr>
<td>
<i>
Fig. 3. Surface of correlation coefficient values (between find artifacts on "surface map" and size of pressed grains as numeric features 100, 500 and 5000 μm). On XYZ axes are smoothing window, contour constant value and Spearman correlation coefficient (the strength of the monotonic relationship) respectively.
</i>
</td>
</tr>
</table>
</div>
<p>Furthermore, the tuning of XRF analysis parameters was carried out. Main aims are reduce the noise level and automate features selection for spectra. For each type of mineral fertilizer several quality metrics were estimated under various operating conditions (smoothing force, STD of signals in the spectrum, the magnitude of the characteristic lines shift and the number of automatically detected lines). As the result, the following stages of algorithm are justified (Figure 4).</p>
<ol>
<li>Smooth with Savitsky-Golya filter (fast and did not change the shape and position of characteristic lines) with 10 units window width and 4th degree of equation.</li>
<li>Automatic search of characteristic lines and selection of the background component by the “zero filter” algorithm with a window width (v) of 10 units and a width of the shift (w) of 10 units, which is the most flexible and accurate.</li>
</ol>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_alg-spec.png" alt="Spec"/>
</td>
</tr>
<tr>
<td>
<i>
Fig. 4. Example of the proposed algorithm's results.
</i>
</td>
</tr>
</table>
</div>
<p>On the basis of found optimal parameters the clear and significant information for the developed X-ray and optical combined devise was identified. Preprocess of selected features were carried out (balancing, normalization and coding). The single database “objects-features” was compiled as the result.</p>
<p><strong>The sixth chapter</strong> is devoted to work with the obtained database and to transform selected features into useful analytical information. The various machine learning models of classification, regression and clusterization was studied to calculate the parameters of mineral fertilizers quality (based on quality metrics, which was selected in chapter 3).</p>
<p>Five classification algorithms were examined (regression, regression with regularization (L1 and L2), random forest and naive Bayes). The described algorithms are used to determine not numeric features (the brand of sample, the type of particles size and the pre-drying condition). Fist, the quality of the proposed algorithms were compared for each part of the developed devise separate (optical and ED XRF). Next, the use of combined device was justified. The F-metric (harmonic mean of precision and recall) characteristic for described machine learning classifications algorithms is shown on Table 2. The Random Forest algorithm is the best.</p>
<div class="math">$$ F = \frac{2 \times precision \times recall}{precision + recall} $$</div>
<p><em>Table 2. F-metric (%) quality of work of classifiers.</em></p>
<div>
<table>
<tr>
<td><b>Classifier </b></td>
<td><b>N mark</b></td>
<td><b>P mark </b></td>
<td><b>K mark </b></td>
<td><b>S mark </b></td>
<td><b>Fraction </b></td>
<td><b>Pre-drying condition </b></td>
</tr>
<tr>
<td>Regression </td>
<td>99.31 </td>
<td>99.78 </td>
<td>99.59 </td>
<td>99.56 </td>
<td>92.40 </td>
<td>72.94 </td>
</tr>
<tr>
<td>Regression with L1 regularization </td>
<td>99.65 </td>
<td>99.78 </td>
<td>99.57 </td>
<td>98.87 </td>
<td>92.51 </td>
<td>73.08 </td>
</tr>
<tr>
<td>Regression with L2 regularization </td>
<td>99.65 </td>
<td>99.78 </td>
<td>100.0 </td>
<td>98.99 </td>
<td>91.33 </td>
<td>68.46 </td>
</tr>
<tr>
<td>Random Forest </td>
<td>100.0 </td>
<td>100.0 </td>
<td>100.0 </td>
<td>98.99 </td>
<td>98.40 </td>
<td>73.37 </td>
</tr>
<tr>
<td>Naive Bayes </td>
<td>71.12 </td>
<td>60.71 </td>
<td>66.84 </td>
<td>73.72 </td>
<td>53.32 </td>
<td>73.04 </td>
</tr>
</table>
</div>
<p>Similarly, optimal parameters for the regression algorithms were searched as well (for determining the chemical composition of the fertilizers). The STD and coefficient of determination were chosen as quality metrics (Table 3).</p>
<p>All the missing physical parameters (categorical) in the original matrix were filled with selected classification approach. Further, the regression model was constructed to calculate the concentration of the main nutrient elements in fertilizers. As the result, the possibility of indirect determination of the nitrogen content were shown.</p>
<p><em>Table 3. <span class="math">\(R^2\)</span> (%) quality of regression algorithms</em></p>
<div>
<table>
<tr>
<td></td>
<td><b>N % </b></td>
<td><b>P % </b></td>
<td><b>K % </b></td>
<td><b>S % </b></td>
</tr>
<tr>
<td>Range of concentration, mas. % </td>
<td><pre>[0; 16] </pre></td>
<td><pre>[15; 52] </pre></td>
<td><pre>[0; 20] </pre></td>
<td><pre>[0; 20] </pre></td>
</tr>
<tr>
<td>Linear regression </td>
<td>98.78 </td>
<td>98.00 </td>
<td>99.61 </td>
<td>98.17 </td>
</tr>
<tr>
<td>Linear regression with L1 regularization </td>
<td>97.04 </td>
<td>97.10 </td>
<td>99.26 </td>
<td>95.79 </td>
</tr>
<tr>
<td>Linear regression with L2 regularization </td>
<td>98.78 </td>
<td>97.70 </td>
<td>99.61 </td>
<td>98.17 </td>
</tr>
</table>
</div>
<p>Thus, the proposed classification and regression algorithms works with sufficient accuracy (more than 98% for the selected quality metrics in general). They provide a quick estimate of the quality of industrially produced mineral fertilizers and work in automate mode.</p>
<p>A procedure for clustering data for their visual representation was also performed. Algorithms for linear and nonlinear reduction of the dimensions are used to construct a “type map”. It is two-dimensional representation of the whole fertilizers properties. It is shown, that the use of a linear principal component analysis (PCA) gives the best results (Figure 5).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_PCA.png" alt="PCA" width="500px"/>
</td>
</tr>
<tr>
<td>
<i>
Fig. 5. Two components projection analysis (PCA) of fertilizers properties. Green stars indicates centers of clusters (calculated by the k-means algorithm).
</i>
</td>
</tr>
</table>
</div>
<p>Methods for calculating the necessary analytical information with database “objects-features” and machine learning techniques are the results of sixth chapter. The Random Forest is the best algorithm for classification (according to F-measure). Linear regression with L2 regularization is the best algorithm for determine numerical properties. And the linear PCA with 2 components is sufficient for represent the whole researched properties of fertilizers. In addition, a scheme for calculating the distance between classes of objects in PCA is proposed for fast determine they similarity.</p>
<p><strong>The seventh chapter</strong> describes the software algorithm of the developed device as well as shows various industrial tests (inside “PhosAgro” corporation facilities). It is consider several approaches:</p>
<ul>
<li>calculate physical and chemical properties of mineral fertilizers;</li>
<li>optimizing sample preparation conditions;</li>
<li>control products, when production switch to new types or brands of fertilizers;</li>
<li>calculate some additional quality parameters for fertilizers (granulometric composition and sphericity).</li>
</ul>
<p>The structure of the software, based on previously chosen algorithms (Chapter 6) is shown in Figure 6. An additional feature of the software is the ability to monitor the quality of the lab technician’s work. Monitoring is performed on the basis of the maximum allowed fraction (calculated with Chapter 6 classification algorithm).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_dspectra-alg_en.jpg" alt="DSpectra" width="500px"/>
</td>
</tr>
<tr>
<td>
<i>
Fig. 6. Structure of "DSpectra" software
</i>
</td>
</table>
</div>
<p>With the developed software and classification approach some of the optimizing sample preparation tasks is solved. In other hand, statistical parameters were evaluated for different stage of samples preparation for possibility of its elimination (Table 4).</p>
<p><em>Table 4. Stages of sample preparation, which optimization is needed.</em></p>
<div>
<table>
<tr>
<td><b>Type of sample preparation </b></td>
<td><b>Crushing to < 500 μm </b></td>
<td><b>Crushing to < 100 μm </b></td>
<td><b>Is dryed</b></td>
<td><b>Spend time * </b></td>
</tr>
<tr>
<td>1** </td>
<td>- </td>
<td>- </td>
<td>- </td>
<td>- </td>
</tr>
<tr>
<td>2</td>
<td>+ </td>
<td>- </td>
<td>- </td>
<td>15 </td>
</tr>
<tr>
<td>3 </td>
<td>+ </td>
<td>+ </td>
<td>- </td>
<td>40 </td>
</tr>
<tr>
<td>4 </td>
<td>+ </td>
<td>- </td>
<td>+ </td>
<td>30 </td>
</tr>
<tr>
<td>5 </td>
<td>+ </td>
<td>+ </td>
<td>+ </td>
<td>45 </td>
</tr>
</table>
</div>
<p>* approximate preparation time for 20 g product</p>
<p>** pressed granules of fertilizer</p>
<p>It was established, that preliminary drying of objects as well as their crushing to 100 microns insignificantly affect to the result of the XRF-optical combined devise (because of to multi-factorial algorithms). To ensure, we studied differences in characteristic lines of most inhomogeneous fertilizer NPK(S) 4-30-15(16).</p>
<p>According to obtained results, there are some differences in standard deviation between dried and not dried objects, which is not affect the average value and statistically insignificant. According to t-test we can eliminate this stage of sample preparation.</p>
<p>On the other hand, there is an abnormal decrease in variability for the 500 μm fraction, compare to 100 μm fraction. Such result indicate improvement in the quality of XRF analysis for the 500 μm fraction (abnormal effect)! We explain this effect by instability of some fertilizers powders in air condition. Such instability is greater for 100 μm tablets (faster moisturing and surface swelling). Based on the obtained data the fast sample preparation procedure is proposed (grinding up to 500 μm without preliminary drying). This method allow to reduce the analysis time from 45 to 10 minutes and preserve accuracy of used machine learning algorithms.</p>
<p>Next step is results of an industrial tests to monitor the quality of product for production switch from fertilizer NP(S) 12-40(10) to NP(S+S)+Zn 12-40(6+3)+1 (with elemental sulfur, Balakovo facility of JSC “Apatite”). The transition process took three days, sampling was carried out every 60 minutes. The developed combined device gave out information in 10 minutes after sampling (the classical chemical analysis of N, P and <span class="math">\(SO_4\)</span> + S took about 4 hours). To visualize the process we use automatic clustering into two main components (Figure 8).</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_brand-switch.png" alt="BS" width="500px"/>
</td>
</tr>
<tr>
<td>
<i>
Fig. 8. An automatic PCA of transition process for developed combined device. 0 - final product, 1 - initial product, 2 - significant emissions, problems in technology, 3 - the transition process.
</i>
</td>
</tr>
</table>
</div>
<p>Finally, some “non-trivial” quality analysis with developed device are described. Various brands of mineral fertilizers were studied for particle size, form factor, degree of treatment with CA and conductivity of dilute solutions (salt index).</p>
<p>We shown, that developed combined devise can use each of type of analysis in separate ways. The optical block can determine granules size, shape and color. The accuracy of particle size calculation was compare with the most common alternative methods (Table 5). The proposed device well agree with the “woven” sieves (sieve with square cells, European standards). But each of methods is deviate from each other.</p>
<p><em>Table 5. Data comparison for different particle size determination methods (for MAP (NP) 12-52, Balakovo facilities of JSC “Apatite”).</em></p>
<div>
<table>
<tr>
<td><b>Fraction, mm </b></td>
<td><b>Camsizer, % </b></td>
<td><b>Sieve with round cell, % </b></td>
<td><b>Sieve with square cells, % </b></td>
<td><b>Developed, % </b></td>
<td><b>delta "Camsizer-Developed", % </b></td>
<td><b>delta "Round cells-Developed", % </b></td>
<td><b>delta "Square cells-Developed", % </b></td>
</tr>
<tr>
<td>0-1 </td>
<td>0.00 </td>
<td>0.02 </td>
<td>0.03 </td>
<td>0.00 </td>
<td>0.00 </td>
<td>0.02 </td>
<td>0.03 </td>
</tr>
<tr>
<td>1-2 </td>
<td>0.27 </td>
<td>0.09 </td>
<td>0.16 </td>
<td>0.00 </td>
<td>0.27 </td>
<td>0.09 </td>
<td>0.16 </td>
</tr>
<tr>
<td>2-3 </td>
<td>20.57 </td>
<td>11.05 </td>
<td>40.29 </td>
<td>27.35 </td>
<td>6.78 </td>
<td>16.30 </td>
<td>12.94 </td>
</tr>
<tr>
<td>3-4 </td>
<td>75.13 </td>
<td>81.14 </td>
<td>56.12 </td>
<td>56.50 </td>
<td>18.63 </td>
<td>24.64 </td>
<td>0.38 </td>
</tr>
<tr>
<td>4-5 </td>
<td>3.93 </td>
<td>7.52 </td>
<td>3.35 </td>
<td>15.31 </td>
<td>11.38 </td>
<td>7.79 </td>
<td>11.96 </td>
</tr>
<tr>
<td>\>5 </td>
<td>0.10 </td>
<td>0.19 </td>
<td>0.05 </td>
<td>0.84 </td>
<td>0.74 </td>
<td>0.65 </td>
<td>0.79 </td>
</tr>
</table>
</div>
<p>In addition, we can build the “quality maps” of the granulated industrially produced fertilizers with developed technique (characterize the fertilizers by its particles size and particles shape). Examples of such maps are shown in Figure 9. Industrially produced MAP (NP 12-52) is better then NPK 9-25-25 (more spherical for each granules size).</p>
<div>
<table>
<tr>
<td>
<img src="../../images/blog/science/site_science_qual-map-1.png" alt="Карта качества МАФ" width="500px"/>
</td>
</tr>
<tr>
<td>
<img src="../../images/blog/science/site_science_qual-map-2.png" alt="quality maps" width="500px"/>
</td>
</tr>
<tr>
<td>
<i>
Fig. 9. "Quality maps" of granulated industrially produced fertilizers (particles sphericity VS size), a) - MAP (NP 12-52), which produced by the Balakovo facilitie of JSC "Apatit" (Balacovo city, Russia), b) - NPK 9-25-25, which produced by the JSC "Apatit" (Cherepovets city, Russia). The green area is theoretical area of quality products.
</i>
</td>
</tr>
</table>
</div>
<p>Next part is calculation of amount of conditioning additive on the granules (with using UV light for optical part of combined device, Figure 10). The amount of CA (which is directly proportional to fluorescing area) depends not only of the quantity of the CA, but also of type of fertilizer and method of applying the CA. Using this fact and numeric representation of area of fluorescing contours on image, we can improve laboratory control of industrial process of conditioning of fertilizers.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_ca.png" alt="CA" width="500px"/>
</td>
<td>
<i>
Fig. 10. The specific area of fluorescing area (contours) on the surface map VS the amount of CA.
</i>
</td>
</tr>
</table>
</div>
<p>The “Salt Index” is another parameter of mineral fertilizers quality (sometimes it is approximated as the value of the conductivity of 0.1% fertilizer solution in distill water). Salt index depends of the chemical composition of fertilizers. We propose XRF method to determine it (base on the spectral lines of elements with multiple-factors regression, Figure 11). The correlation coefficient between the spectra features and the conductivity of dilute solutions is 95.9\%.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../images/blog/science/site_science_si.png" alt="SI" width="500px"/>
</td>
</tr>
<tr>
<td>
<i>
Fig. 11. Regression line conductivity of dilute solutions of mineral fertilizers VS XRF features.
</i>
</td>
</tr>
</table>
</div>
<p>Results of the work are presented in scientific literature: [1] (analysis of complex phosphorus-containing fertilizers), [2] (analysis of apatite concentrate with machine learning algorithms), [3] (software registration certificate), [4] - [9] (construction of regression models and a mathematical features for XRF spectra).</p>
<p><strong>Results and conclusions</strong></p>
<p>The main results are listed below.</p>
<ol>
<li>
<p>Significant chemical and physical parameters for the complex matrix of mineral fertilizers are highlighted (anomalies on the surface map (optical recorder), intensity of lines of chemical elements, background area and intensity of coherent and incoherent scattering of X-ray fluorescent analysis).</p>
</li>
<li>
<p>Possibility of nitrogen content determination in complex phosphorus-containing fertilizers by indirect features was proved.</p>
</li>
<li>
<p>An express and low cost device for combine analysis mineral fertilizers was developed (optical system and XRF analysis). Sample preparation for it was optimized.</p>
</li>
<li>
<p>The automatic algorithm of selection and calculation of informative features at quality control of industrially production was developed.</p>
</li>
<li>
<p>The prototype of unified database of “object-features” of mineral fertilizer for machine learning algorithms was created.</p>
</li>
<li>
<p>The possibility of solving a wider range of tasks with the use of the developed software and hardware device was proved (compare to classical XRF).</p>
</li>
<li>
<p>Possibility of calculation of other significant features of mineral fertilizers quality was shown (“quality maps”, presence of pre-drying, salt index, etc.).</p>
</li>
<li>
<p>The software, which provides convenient and simple implementation of all developed algorithms was created and applied in production practice.</p>
</li>
</ol>
<h2>Publications</h2>
<ol>
<li><a href="http://www.zldm.ru/jour/article/view/526">Yunovidov D.V., Sokolov V.V., Bakhvalov A.S. The Use of the Sample Spectrum for Assessing the Impact of Different Stages of the NPKS Fertilizer Preparation on the Results of X-Ray Fluorescence Analysis // Industrial laboratory. Diagnostics of materials, 83 (9), 15-21 (2017). (In Russ.)</a></li>
<li><a href="http://eng.giab-online.ru/catalog/11499">Yunovidov D.V., Sokolov V.V., Bakhvalova E.V, Donskikh V.A. Development of a standard sample of apatite concentrate. Effective control of homogeneity by XRF analysis methods, GIAB, 7, 131-144 (2016). (In Russ.)</a></li>
<li>
<p><a href="extra/doc-oficial/doc_soft-reg-DSpectra_2017.pdf">Certificate No. 2017617704</a> Russian Federation. Program “DSpectra” /
Yunovidov D.V.; applicant and rights holder Yunovidov D.V. - No 2017614722; declared
19.05.2017; registered in the Register of computer programs 11.07.2017 - [1] p.</p>
<p>Other articles and conference materials.</p>
</li>
<li>
<p>Yunovidov D.V., Sokolov V.V., Oskolok K.V., Bolotokov A.A. X-ray fluorescent determination of cerium in extraction phosphoric acid and phosphate concentrates // World of sulfur, N, P and K. 2012. No 4. p. 10-13. (In Russ.)</p>
</li>
<li>
<p>Yunovidov D.V., Sokolov V.V., Oskolok K.V., Bolotokov A.A. X-ray fluorescence determination of rare earth elements after sorption extraction and concentration from extraction phosphoric acid // Phosphate raw materials: production and processing. 2013. p. 147-151. (In Russ.)</p>
</li>
<li>
<p>Yunovidov D.V., El-Salim S.Z., Oskolok K.V. Restoration of homogeneous system spectrum according to time dependencies of line intensities in nascent and developing heterogeneous system on the example of extraction phosphoric acid // VIII All-Russian Conference on X-ray Spectroscopy. Irkutsk, September 22 - 26, 2014 Abstracts of the reports. - Irkutsk. Institute of the Earth’s Crust, SB RAS, 2014. p. 139-139. (In Russ.)</p>
</li>
<li>
<p>Yunovidov D.V., El-Salim S.Z., Oskolok K.V. Virtual experiment technique and its application for quantitative X-ray fluorescence analysis of phosphoric acid extraction. // VIII All-Russian Conference on X-ray Spectroscopy. Irkutsk, September 22 - 26, 2014 Abstracts of the reports. - Irkutsk. Institute of the Earth’s Crust, SB RAS, 2014. p. 140-140. (In Russ.)</p>
</li>
<li>
<p>Yunovidov D.V., Rebrikova A.T., Oskolok K.V., Sokolov V.V. X-ray fluorescence determination of technologically important elements in extraction phosphoric acid // The Second Congress of Russian Analysts. Moscow, September 23 - 27, 2013 Abstracts of the reports. Moscow. p. 289-289. (In Russ.)</p>
</li>
<li>
<p>Yunovidov D.V., Rebrikova A.T., Oskolok K.V., Sokolov V.V. The technique of a virtual experiment for quantitative X-ray fluorescence analysis of extracted phosphoric acid // The Second Congress of Russian Analysts. Moscow, 23 - 27 September 2013 Abstracts. Moscow. p. 290-290. (In Russ.)</p>
</li>
<li>
<p>Yunovidov D., Sokolov V., Bahvalov A. Big data analysis and comprehensive analytical control of fertilizers, 11 Winter School of Chemometrics (WSC 11). St. Petersburg, Russia, 2018. <a href="http://wsc.chemometrics.ru/media/files/conferences/wsc11/abstracts/abstract__yunovidov_dmitry.pdf">Thesis</a> (In Russ.).</p>
</li>
</ol>
<p>Further development of this work you can see on this site. The show is still go on!</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>The "Salt Index Calculator" software description2019-10-22T00:00:00+03:002019-10-22T00:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2019-10-22:/blog/soft-SI.html<p><strong>Authors:</strong> Yunovidov D.V., Nadezhin M.N.</p>
<p><strong>Rights holder:</strong> Research Institute for Fertilizers and Insect Fungicides named after Professor Y.V.Samoilov (JSC NIUIF).</p>
<p><strong>Program:</strong> “Salt Index Calculator”.</p>
<p><strong>Annotation:</strong></p>
<p>The software is designed to calculate the salt index of various mineral fertilizers. The calculations are based on the information on …</p><p><strong>Authors:</strong> Yunovidov D.V., Nadezhin M.N.</p>
<p><strong>Rights holder:</strong> Research Institute for Fertilizers and Insect Fungicides named after Professor Y.V.Samoilov (JSC NIUIF).</p>
<p><strong>Program:</strong> “Salt Index Calculator”.</p>
<p><strong>Annotation:</strong></p>
<p>The software is designed to calculate the salt index of various mineral fertilizers. The calculations are based on the information on the phase composition of fertilizers (by main phases) and tabular data on the conductivity (salt indices) of the initial components of fertilizers (phases).</p>
<p>The software works with Russian and English languages and allows:</p>
<ol>
<li>Set the type and brand of fertilizer:
* to specify the content of basic nutrients and sulphur;
* to specify the main components of fertilizers (main phases).</li>
<li>To clarify and supplement the database of conductivity of diluted solutions of initial fertilizer components (salt indexes).</li>
<li>Supplement basic fertilizer components.</li>
<li>Export the obtained information as <em>.txt, </em>.csv, *.xls files.</li>
<li>Build the report.</li>
</ol>
<p><strong>Contribution of authors</strong></p>
<ul>
<li>Dmitry Yunovidov - development of software and calculation logic, implement the primary interface of the program.</li>
<li>Nadezhin Miksim - software implementation of salt index calculation, improvement of user interface, testing.</li>
</ul>
<p><strong>Computer type:</strong> IBM PC-complex. PC</p>
<p><strong>” Language:</strong> Python 2.7</p>
<p><strong>OS:</strong> 32 and 64 bit Windows any version, Linux, MacOS</p>
<p><strong>Program size:</strong> 1.32 MB (1320000 bytes)</p>The "Granules Calculator by Yunovidov D.V." software description2019-10-22T00:00:00+03:002019-10-22T00:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2019-10-22:/blog/soft-granule-optic.html<p>This short article describes the software for calculating the quantity and size of mineral fertilizer granules in an optical image (photo).</p>
<p><strong>Author:</strong> Yunovidov D.V.</p>
<p><strong>Rightseereholder:</strong> Joint Stock Company Scientific Research Institute for Fertilizers and Insect Fungicides named after Professor Y.V.Samoilov (JSC “NIUIF”).</p>
<p><strong>Annotation</strong></p>
<p>The software is developed …</p><p>This short article describes the software for calculating the quantity and size of mineral fertilizer granules in an optical image (photo).</p>
<p><strong>Author:</strong> Yunovidov D.V.</p>
<p><strong>Rightseereholder:</strong> Joint Stock Company Scientific Research Institute for Fertilizers and Insect Fungicides named after Professor Y.V.Samoilov (JSC “NIUIF”).</p>
<p><strong>Annotation</strong></p>
<p>The software is developed for calculation of granulometric composition of mineral fertilizers on the opto-electronic color image. Calculations are based on algorithms of obtaining and processing of digital image for calculation of closed contours with further approximation by ellipses. The software works with Russian and English languages and allows:</p>
<ol>
<li>Receive opto-electronic image from digital USB-cameras and Nikon 1V3 camera.</li>
<li>To start work on an external signal received on the COM-protocol from the microcontroller.</li>
<li>Preprocess the image:</li>
</ol>
<ul>
<li>convert the image into grayscale;</li>
<li>adjust the brightness and sharpness;</li>
<li>equalize the brightness (equalization) of the image in grayscale;</li>
<li>smooth the image in grayscale with the Gaussian filter.</li>
</ul>
<ol start="4">
<li>Binarize the image according to the standard and adaptive algorithm and perform its mathematical morphology.</li>
<li>Use the algorithm of search and approximation of closed contours as ellipses.</li>
<li>Calculate the axes of ellipses (and granulometric composition base on them).</li>
<li>Calibrate the calculated granulometric composition by known samples.</li>
<li>Export the obtained information in the form of *.txt files in the format necessary for integration into the factory information system based on PI System software.</li>
</ol>
<p>At the moment the development of the program is finished and the basic version of the program is registered in the federal register of computer programs (Russian Federation).</p>
<p><strong>Computer type:</strong> IBM PC-compatible. PC</p>
<p><strong>Programming language:</strong> Python 2.7</p>
<p><strong>OS:</strong> 32 and 64 bit Windows and Linux</p>
<p><strong>Program size:</strong> 922.5 Kbytes (922500 bytes)</p>The DSpectra software description (X-ray fluorescence spectra processing)2018-08-02T00:00:00+03:002019-10-22T00:00:00+03:00Юновидов Дмитрийtag:dimyun.space,2018-08-02:/blog/soft-spectra-xrf.html<p>This short note describes the software for solving the problem of complex processing of X-ray fluorescence spectra.</p>
<p><strong>The program was developed to solve a number of problems:</strong></p>
<ol>
<li>Obtaining information from X-ray fluorescence spectrometers manufactured by JSC “Scientific Instruments”, with the ability to directly specify the actual measurement time, current and …</li></ol><p>This short note describes the software for solving the problem of complex processing of X-ray fluorescence spectra.</p>
<p><strong>The program was developed to solve a number of problems:</strong></p>
<ol>
<li>Obtaining information from X-ray fluorescence spectrometers manufactured by JSC “Scientific Instruments”, with the ability to directly specify the actual measurement time, current and exposure.</li>
<li>Obtaining information from any spectrometer from the *.txt file.</li>
<li>Realization of various mathematical processing of spectra:<ul>
<li>smoothing;</li>
<li>differentiation;</li>
<li>selection of characteristic lines;</li>
<li>calculation of the parameters of the characteristic lines and the background signal;</li>
<li>Approximation of the signal by various functions.</li>
</ul>
</li>
<li>Save obtained information in the form of a “objects-features” matrix.</li>
<li>Implementation of machine learning algorithms and work with large data sets for classification and regression techniques.</li>
</ol>
<p>At the moment the development of the program continues, some of the algorithms are laid out on <a href="https://github.com/DimYun/DSpectra">GitHab</a>, and the basic version of the program is registered in the Federal registry of computer programs (Russian Federation).</p>
<div>
<table>
<tr>
<td style="width:50%">
<img src="../../images/blog/soft/site_soft_dspectra-alg_en.jpg" alt="DSpectra"/>
</td>
<td>
<img src="../../images/blog/soft/site_soft_dspectra-doc.png" alt="DSpectra"/>
</td>
</tr>
</table>
</div>
<p><strong>The summary of the program.</strong></p>
<p>The software is designed for processing and converting spectral information obtained from energy dispersive x-ray spectrometers of any manufacturer (if it possible to export the spectrum in the form of an intensity vector or an energy-intensity matrix in any file format). Software allows you to:</p>
<ol>
<li>Mathematical processing of spectra:<ol>
<li>Smoothing according to middle and median filter algorithms, Savitsky-Golay and Fourier transforms;</li>
<li>Reduction of the original spectrum to differential, normalized and frequency form.</li>
</ol>
</li>
<li>Obtaining analytical information:<ol>
<li>Manual selection and marking of characteristic lines (hereinafter - peaks);</li>
<li>Calculation of intensity, area and signal-to-noise ratio for the peak;</li>
<li>Calculation and leveling of the baseline;</li>
<li>Automatic carrying out of all the above stages.</li>
</ol>
</li>
<li>Work with analytical information extracted from the spectrum:<ol>
<li>Creation of a library of information received;</li>
<li>Construction of matrices “objects-features”;</li>
<li>Classification by random forest algorithms;</li>
<li>Multiple regression, creating custom regression analysis methods;</li>
<li>Saving custom analysis schemes.</li>
</ol>
</li>
<li>Possibility of line processing of spectra for each presented stage.</li>
<li>Export of received information in the form of * .txt, * .csv, * .xls files.</li>
<li>Construction of reports.</li>
</ol>Парсим раздел science на reddit.com v 1.02018-08-01T12:00:00+03:002019-05-12T17:19:00+03:00Юновидов Дмитрийtag:dimyun.space,2018-08-01:/ru/blog/education-it-reddit.html<p>Данная работа посвящена парсингу сайта <a href="https://www.reddit.com/r/science/">reddit.com, секция - science</a> для создания базы данных постов. Цель работы - накопление информации. Полученную информацию можно в дальнейшем использовать для проведения семантического анализа и практике в анализе Big Data. Поставленная цель включает в себя набор задач:</p>
<ul>
<li>выбрать необходимые библиотеки;</li>
<li>найти адреса для парсинга и определиться …</li></ul><p>Данная работа посвящена парсингу сайта <a href="https://www.reddit.com/r/science/">reddit.com, секция - science</a> для создания базы данных постов. Цель работы - накопление информации. Полученную информацию можно в дальнейшем использовать для проведения семантического анализа и практике в анализе Big Data. Поставленная цель включает в себя набор задач:</p>
<ul>
<li>выбрать необходимые библиотеки;</li>
<li>найти адреса для парсинга и определиться с их логикой;</li>
<li>создать функцию для парсинга нужной информации;</li>
<li>организовать накопление информации;</li>
<li>предложить способ обработки полученной информации и какой-либо полезный результат.</li>
</ul>
<p>Эта тема актуальна в связи с глобальным распространение алгоритмов накопления и анализа больших данных. Полученную информацию можно использовать для слежения за актуальными направлениями науки и просто учить английский язык по наиболее распространенным словам (увеличивать свой словарный запас). Да и кроме того, просто как инструмент личного развития.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/IT/IT__reddit_science_fig_1.png" alt="example" width="600px"/>
</td>
<td>
<i>
Рис. 1. Пример выполнения скрипта.
</i>
</td>
</tr>
</table>
</div>
<h2>1. Среда разработки и библиотеки</h2>
<p>Основным этапом подобного рода работ является создание среды разработки и нужного окружения. Однако эта тема достаточно обширна и, что более важно, сугубо индивидуальна для каждого разумного существа. Мои наработки: использование <a href="https://www.python.org/downloads/">python</a>, среды разработки <a href="https://www.jetbrains.com/pycharm/">PyCharm IDE</a> или <a href="https://jupyter.org/">Jupyter notebook</a>. Для ведения заметок - редактор <a href="https://atom.io/">atom</a>. Хотя в конце-концов, рабочим окружением может служить и обычный блокнот с командной строкой.</p>
<p>Основой для данной работы, послужили интересные и полезные статьи: <a href="ttps://habrahabr.ru/company/ods/blog/346632/">1</a>, <a href="http://www.learndatasci.com/sentiment-analysis-reddit-headlines-pythons-nltk/">2</a> и, конечно же, Google.</p>
<p>Обозначу еще несколько авторских особенностей:</p>
<ul>
<li>код написан, тестирован и работал в системе Linux Ubuntu 16.04 x64;</li>
<li>сейчас код используется в Arch Linux и модернизирован для python 3.8;</li>
<li>используются Python 2.7 и Firefox Quantum 58.0.1 (64 bit).</li>
</ul>
<p>В начале каждой главы будет приведен код с комментариями. В дальнейшем, если это необходимо - пояснения. Таким образом, перейдем непосредственно к делу.</p>
<p><strong>Выбор необходимых библиотек</strong></p>
<div class="highlight"><pre><span></span><code> <span class="c1">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">import</span> <span class="nn">json</span>
<span class="kn">from</span> <span class="nn">fake_useragent</span> <span class="kn">import</span> <span class="n">UserAgent</span> <span class="c1"># маскировка под пользователя</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span> <span class="c1"># создание базы данных</span>
<span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span> <span class="c1"># для корректного сохранения картинки облака слов на жесткий диск</span>
<span class="kn">from</span> <span class="nn">wordcloud</span> <span class="kn">import</span> <span class="n">WordCloud</span> <span class="c1"># для построения облака слов</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">path</span>
<span class="kn">import</span> <span class="nn">pymorphy2</span> <span class="c1"># нормализация слов</span>
<span class="kn">from</span> <span class="nn">nltk.corpus</span> <span class="kn">import</span> <span class="n">stopwords</span> <span class="c1">#</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Counter</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">random</span>
</code></pre></div>
<p>Это - своеобразная “подготовка оборудования и реактивов”. Основными <strong>объектами</strong> исследования являются: сайт и набор данных (для чего нужны библиотеки <code>request</code>, <code>json</code>, <code>fake_user</code>). В качестве полезного действия предлагается построить <strong>облако наиболее часто встречающихся слов</strong> — для этого так же нужны свои библиотеки (<code>wordcloud</code>, <code>numpy</code>), в том числе и для работы с текстом (<code>nltk</code>, <code>collection</code>, <code>pymorphy</code>). <strong>Логика работы</strong>: необходимо получить информацию с сайта (парсинг), обработать ее, добавить ее в базу данных, сохранить базу данных на диске, рассчитать частоту слов в базе данных, построить облако слов (полезный результат).</p>
<p>Стоит отдельно отметить возможность запуска данного кода непосредственно из командной строки без указания интерпретатора (<code>#!/usr/bin/env python</code>). При этом вторая часть заголовка нужна для корректной работы с форматом utf-8 и unicode (<code># -*- coding: utf-8 -*-</code>).</p>
<h2>2. Парсинг сайта</h2>
<p>Мы выбрали объекта исследования и подготовили все необходимое для нашей экспериментальной работы (раздел 1). Теперь нужно разобраться с идеологией получения и загрузки данных. Одним из самых очевидных и универсальных способов является непосредственный парсинг html-кода страницы — для чего необходимо указать адрес самой страницы и получить ее код. Однако так мы получим информацию, лежащую на поверхности (видимую пользователю). Этого обычно достаточно, но нередко бывает полезно почитать о дополнительных возможностях сайта.</p>
<p>Немного поискав в интернете, обнаруживаем статью <a href="http://www.learndatasci.com/sentiment-analysis-reddit-headlines-pythons-nltk/">2</a>. В этой работе указан интересный способ загрузки страниц reddit в json формате. Что весьма удобно для дальнейшей обработки.</p>
<p>Проверим это на практике. Попробуем открыть интересующую страницу в json формате в браузере (например, https://www.reddit.com/r/science/new/.json). Стоит обратить внимание на более четкую структуры и наличие дополнительной информации о новостях, расположенных на странице. Таким образом, имеет смысл выбрать наиболее информативный подход и парсить json версии страниц.</p>
<p><strong>Для начала. Загрузим данные:</strong></p>
<div class="highlight"><pre><span></span><code> <span class="c1"># For all news</span>
<span class="k">def</span> <span class="nf">read_js</span><span class="p">(</span><span class="n">req</span><span class="p">):</span>
<span class="n">data</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">req</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="nb">print</span> <span class="s1">'error in js'</span>
<span class="c1"># TODO: if rise this error — json hame a errors itself, need to hand-parsing</span>
<span class="k">return</span> <span class="n">data</span>
<span class="k">def</span> <span class="nf">collect_news</span><span class="p">(</span><span class="n">num_news</span><span class="o">=</span><span class="mi">100</span><span class="p">):</span>
<span class="n">url</span> <span class="o">=</span> <span class="s1">'https://www.reddit.com/r/science/new/.json'</span>
<span class="n">data_all</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_all</span><span class="p">)</span> <span class="o"><</span> <span class="n">num_news</span><span class="p">:</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="n">url</span> <span class="o">=</span> <span class="s1">'https://www.reddit.com/r/science/new/.json'</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_all</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">last</span> <span class="o">=</span> <span class="n">data_all</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="s1">'data'</span><span class="p">][</span><span class="s1">'name'</span><span class="p">]</span>
<span class="n">url</span> <span class="o">=</span> <span class="s1">'https://www.reddit.com/r/science/new/.json?after='</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">last</span><span class="p">)</span>
<span class="n">req</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s1">'User-Agent'</span><span class="p">:</span> <span class="n">UserAgent</span><span class="p">()</span><span class="o">.</span><span class="n">chrome</span><span class="p">})</span>
<span class="n">json_data</span> <span class="o">=</span> <span class="n">read_js</span><span class="p">(</span><span class="n">req</span><span class="p">)</span>
<span class="n">data_all</span> <span class="o">+=</span> <span class="n">json_data</span><span class="p">[</span><span class="s1">'data'</span><span class="p">][</span><span class="s1">'children'</span><span class="p">]</span>
<span class="n">keys_all</span> <span class="o">=</span> <span class="n">data_all</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="s1">'data'</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
<span class="n">tidy_data</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">keys_all</span><span class="p">:</span>
<span class="n">tidy_data</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data_all</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s1">'data'</span><span class="p">]</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">tidy_data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">tidy_data</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">+=</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">tidy_data</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">+=</span> <span class="p">[</span><span class="n">data</span><span class="p">[</span><span class="n">k</span><span class="p">]]</span>
<span class="k">return</span> <span class="n">tidy_data</span>
<span class="n">num_post</span> <span class="o">=</span> <span class="mi">200</span>
<span class="n">tidy_data</span> <span class="o">=</span> <span class="n">collect_news</span><span class="p">(</span><span class="n">num_post</span><span class="p">)</span>
<span class="c1"># print "raw new data len: ", len(tidy_data['title'])</span>
</code></pre></div>
<p>В рамках небольших проектов мы будем стараться использовать функциональный подход к программированию, как более наглядный и понятный на первых порах. Таким образом, основные действия реализованы в функциях.</p>
<p>На выходе функции <code>collect_news</code> получаем словарь для хранения характеристических данных всех новостей. Ключами словаря являются общие свойства последнего найденного поста (предполагаем, что свойства всех постов одинаковы). Каждому ключу соответствует список. Длина списка определяется количеством выгружаемых новостных постов (по умолчанию 100). Каждый такой список состоит из списков, в которых хранится информация по данному ключу из одного поста. Если для какого либо поста нет такого свойства, то в список заноситься список с None. Такая логика выбрана для того, чтобы в списке были одинаковые объекты (list), а каждый список ключа имел одинаковый размер (это понадобится нам для дальнейшего создания Data Frame).</p>
<p>Второй функцией <code>read_js</code> является парсинг json формата с помощью соответствующей библиотеки.</p>
<p>Стоит обратить внимание, что при парсинге json подразумевается, что формат файла правильный. Если это не так, то функция вернет None и код перестанет работать. Это отличная возможность проявить свои навыки, username, и переписать код так, что бы он работал и при возникновении данного исключения.</p>
<p>Рассмотрим получение информации с сайта более подробно. Для предотвращения бана (запрета на посещение сайта) — используем подпись запроса, стандартную для обычного пользователя. Для этого и нужна библиотека <code>fake_useragent</code>. Для начала, при достаточно больших интервалах между запросами (около 1 с, их можно рандомизировать) и относительно небольшим объемом скачиваемых страниц, этого будет достаточно.</p>
<p>Далее дело за малым — сохранить полученную информацию в виде матрицы <strong>“объекты-признаки”</strong> для дальнейшего использования.</p>
<h2>3. Преобразование и сохранение данных</h2>
<p>Основная часть написана, остается заняться накоплением данных, для чего отлично подойдет библиотека <code>pandas</code>.</p>
<div class="highlight"><pre><span></span><code> <span class="c1"># Add data to exist df and save it</span>
<span class="k">def</span> <span class="nf">log_write</span><span class="p">(</span><span class="n">feature</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="c1"># Write data to log file</span>
<span class="n">f_log</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'/home/username/scripts/reddit_science_log.txt'</span><span class="p">,</span> <span class="s1">'a'</span><span class="p">)</span>
<span class="n">f_log</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">feature</span> <span class="o">+</span> <span class="n">value</span><span class="p">)</span>
<span class="n">f_log</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="c1"># Start log file</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">asctime</span><span class="p">())</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\t</span><span class="s1">'</span><span class="p">)</span>
<span class="n">len_old</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">len_new</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">final_df_new</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">tidy_data</span><span class="p">,</span> <span class="n">orient</span><span class="o">=</span><span class="s1">'columns'</span><span class="p">)</span>
<span class="n">final_df_old</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_pickle</span><span class="p">(</span><span class="s1">'/home/username/scripts/science_reddit_df'</span><span class="p">)</span> <span class="c1"># load</span>
<span class="n">len_old</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">final_df_old</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
<span class="c1"># print 'old len: ', len_old, ' new df len: ', len(final_df_new.index)</span>
<span class="n">final_df_old</span> <span class="o">=</span> <span class="n">final_df_old</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">final_df_new</span><span class="p">,</span> <span class="n">ignore_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">final_df_old</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="p">[</span><span class="s1">'id'</span><span class="p">],</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">final_df</span> <span class="o">=</span> <span class="n">final_df_old</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">len_new</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">final_df</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
<span class="c1"># print 'final df len: ', len_new, '; len added: ', len_new-len_old</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1"> new news message: '</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">len_new</span> <span class="o">-</span> <span class="n">len_old</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
<span class="c1"># Create new file</span>
<span class="n">final_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">tidy_data</span><span class="p">,</span> <span class="n">orient</span><span class="o">=</span><span class="s1">'columns'</span><span class="p">)</span>
<span class="c1"># Save df to file</span>
<span class="n">final_df</span><span class="o">.</span><span class="n">to_pickle</span><span class="p">(</span><span class="s1">'/home/username/scripts/science_reddit_df'</span><span class="p">)</span> <span class="c1"># save</span>
</code></pre></div>
<p>Вместе с проверкой существования базы данных (<code>science_reddit_df</code>) мы прописали простую функцию ведения логов <code>log_write</code>, которая позволит нам наблюдать за поведением нашего кода. Вид файла с логами:</p>
<p><code>Tue Jan 23 09:35:56 2018 new news message: 155</code></p>
<p><code>Tue Jan 23 09:39:21 2018 new news message: 0</code></p>
<p><code>Tue Jan 23 22:41:39 2018 new news message: 33</code></p>
<p><code>Wed Jan 24 09:23:09 2018 new news message: 11</code></p>
<p>Думаю, тут все понятно.</p>
<p>Логика работы по созданию базы данных научных новостей выглядит как: <em>получение новой информации — проверка возможности открытия сохраненной базы данных — создание новой базы данных — объединение двух Data Frames — удаление дублирующихся строк (по столбу id-новости) — сохранение обновленной базы данных</em>.</p>
<h2>4. Построение облака слова</h2>
<p>Для генерации полезного выхода кода я предлагаю построить облако наиболее часто встречающихся слов. Для этого нужно соответствующим образом выделить релевантные текстовые данные из базы данных и провести предварительную обработку.</p>
<div class="highlight"><pre><span></span><code> <span class="n">ind_all</span> <span class="o">=</span> <span class="n">final_df</span><span class="o">.</span><span class="n">index</span>
<span class="n">all_text</span> <span class="o">=</span> <span class="n">final_df</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">ind_all</span><span class="p">[</span><span class="o">-</span><span class="n">num_post</span><span class="p">:],</span> <span class="p">[</span><span class="s1">'title'</span><span class="p">]]</span>
<span class="n">tag_re</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'(<!--.*?-->|<[^>]*>)'</span><span class="p">)</span>
<span class="c1"># clear each post from tag and whitespace</span>
<span class="n">all_text</span> <span class="o">=</span> <span class="p">[</span><span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' +'</span><span class="p">,</span><span class="s1">' '</span><span class="p">,</span><span class="n">tag_re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' '</span><span class="p">,</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">all_text</span><span class="o">.</span><span class="n">values</span><span class="p">]</span>
<span class="n">list_in</span> <span class="o">=</span> <span class="p">[</span><span class="n">all_text</span><span class="p">]</span>
<span class="n">list_out</span> <span class="o">=</span> <span class="p">[</span><span class="s1">''</span><span class="p">]</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">list_in</span><span class="p">)):</span>
<span class="n">self_messages</span> <span class="o">=</span> <span class="n">list_in</span><span class="p">[</span><span class="n">t</span><span class="p">]</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">self_messages</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">str_data</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="c1"># clear from "bad" symbols and numbers</span>
<span class="k">def</span> <span class="nf">checkGood</span><span class="p">(</span><span class="n">symb</span><span class="p">):</span>
<span class="n">good1</span> <span class="o">=</span> <span class="s1">'qwertyuiopasdfghjklzxcvbnm1234567890'</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">)</span>
<span class="n">good2</span> <span class="o">=</span> <span class="sa">u</span><span class="s1">'qwertyuiopasdfghjklzxcvbnm1234567890'</span>
<span class="k">if</span> <span class="n">symb</span> <span class="ow">in</span> <span class="n">good1</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">elif</span> <span class="n">symb</span> <span class="ow">in</span> <span class="n">good2</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">str_data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">' '</span> <span class="ow">or</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">:</span>
<span class="n">text</span> <span class="o">+=</span> <span class="s1">' '</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">checkGood</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
<span class="n">text</span> <span class="o">+=</span> <span class="n">i</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">text</span> <span class="o">+=</span> <span class="s1">''</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' +'</span><span class="p">,</span><span class="s1">' '</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">text</span><span class="p">[:]</span>
<span class="c1"># normalize of words</span>
<span class="n">morph</span> <span class="o">=</span> <span class="n">pymorphy2</span><span class="o">.</span><span class="n">MorphAnalyzer</span><span class="p">()</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">):</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">morph</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">i</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">text</span> <span class="o">+=</span> <span class="n">p</span><span class="o">.</span><span class="n">normal_form</span> <span class="o">+</span> <span class="s1">' '</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">text</span><span class="p">[:]</span>
<span class="c1"># stop words check</span>
<span class="n">stop_words</span> <span class="o">=</span> <span class="n">stopwords</span><span class="o">.</span><span class="n">words</span><span class="p">(</span><span class="s1">'english'</span><span class="p">)</span>
<span class="n">stop_words</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span>
<span class="sa">u</span><span class="s1">'new'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'study'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'may'</span>
<span class="p">])</span>
<span class="n">words</span> <span class="o">=</span> <span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span>
<span class="n">w_before</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">words</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">words</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">stop_words</span><span class="p">]</span>
<span class="n">w_after</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1"> raw and tidy words: '</span><span class="p">,</span> <span class="nb">str</span><span class="p">([</span><span class="n">w_before</span><span class="p">,</span> <span class="n">w_after</span><span class="p">])</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">list_out</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">=</span> <span class="n">str_data</span><span class="p">[:]</span>
<span class="n">str_news</span> <span class="o">=</span> <span class="n">list_out</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">gear_mask</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">"/home/username/scripts/gear2.png"</span><span class="p">))</span>
<span class="n">wc</span> <span class="o">=</span> <span class="n">WordCloud</span><span class="p">(</span><span class="n">background_color</span><span class="o">=</span><span class="s2">"black"</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="n">gear_mask</span><span class="p">,</span> <span class="n">collocations</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="c1"># generate word cloud</span>
<span class="n">wc</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">str_news</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">grey_color_func</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">font_size</span><span class="p">,</span> <span class="n">position</span><span class="p">,</span> <span class="n">orientation</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">"hsl(0, 0</span><span class="si">%%</span><span class="s2">, </span><span class="si">%d%%</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">60</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
<span class="n">default_colors</span> <span class="o">=</span> <span class="n">wc</span><span class="o">.</span><span class="n">to_array</span><span class="p">()</span>
<span class="n">wc2</span> <span class="o">=</span> <span class="n">wc</span><span class="o">.</span><span class="n">recolor</span><span class="p">(</span><span class="n">color_func</span><span class="o">=</span><span class="n">grey_color_func</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="c1"># store to file</span>
<span class="n">wc2</span><span class="o">.</span><span class="n">to_file</span><span class="p">(</span><span class="s2">"/home/username/scripts/science_reddit_raw.png"</span><span class="p">)</span>
</code></pre></div>
<p>Логика кода следующая: <em>выбор всех заголовков из базы данных - очистка текстов от html-тэгов и лишних пробелов — обработка всего текста в цикле — удаление всего, что не буква* - повторное удаление лишних пробелов — морфологизация слов (приведение к “нормальному” виду) — удаление “стоп” слов (наиболее часто встречающихся, таких как артикли, местоимения и т.д.) - построение и выдача одной большой строки из слов и пробелов между ними</em>.</p>
<p>* - поскольку в Python 2.7 есть определенные проблемы с кодировками, используем на всякий случай два способа задания кодировки.</p>
<p>Полученную строку можно использовать для построения облака слов с помощью библиотеки <code>wordcloud</code>. После построения облака, перекрашиваем его в нужный цвет (в моем случае - это 50 оттенков белого). Красиво оформленное облако можно наложить на определенную маску (изображение). При этом маска должна быть бинаризованной (черно-белый формат из двух типов пикселей: 0 и 255). Для этого есть несколько сайтов, которые легко нагуглить. Я использовал этот: <a href="https://pinetools.com/threshold-image">3</a>, операция называется threshold.</p>
<p>Напоследок, маленький подарок для пользователей Ubuntu (а может и не только для них, если подумать). Полученное изображение можно перевести в изображение с прозрачным фоном простой терминальной командой:</p>
<p><code>convert ~/news_raw.png -transparent black ~/news_ready.png</code></p>
<p>Так же, можно организовать автоматический парсинг сайта через автозапуск:</p>
<div class="highlight"><pre><span></span><code> Menu — Startup Application — Add:
Name: reddit_science_reaser
Command: sh -c «sleep <span class="m">600</span> <span class="o">&&</span> /FULL_PATH/science_reddit.py»
</code></pre></div>
<p>Выставляем задержку на исполнение в секундах, что бы система успела подключиться к интернету и выполняем скрипт (для выполнения можно указать <code>«python /FULL_PATH/science_reddit.py»</code>).</p>
<h2>5. Заключение</h2>
<p>Подведем небольшой итог. Основной целью было накопление информации о научных новостях, которые появляются на сайте reddit.com. Для этого необходимо было решить ряд приведенных выше задач:</p>
<ul>
<li>получение информации с сайта;</li>
<li>парсинг информации и выделение ключевых свойств для каждой новости;</li>
<li>сохранение каждой новости в матрице “объекты-признаки”.</li>
</ul>
<p>Согласно написанному коду, данные задачи решены и цель достигнута. На нашем жестком диске лежит файл <code>science_reddit_df</code>, который постоянно растет и накапливают информацию (при каждом запуске скрипта). Дополнительно решена задача использования данной информации (по заголовкам новостей строиться облако наиболее часто используемых слов).</p>
<h3>5.1 Пути улучшения (задачи для самостоятельного решения)</h3>
<p>Любой проект подлежит оптимизации и апдейту. Я надеюсь, что мои читатели так же постараются адаптировать полученную информацию для себя и своих нужд. Так, на первый взгляд, можно реализовать следующее:</p>
<ul>
<li>написание обработчика ошибок (проверка значений, возвращаемых функциями и реакция, если это None или не целевое значение);</li>
<li>обработка текста в виде отдельной функции;</li>
<li>использовать объектно-ориентированный подход (использовать классы для новостей);</li>
<li>реализация html-парсинга с библиотекой <code>beautiful soup</code>;</li>
<li>написание пользовательского интерфейса (GUI);</li>
<li>переписать код на python 3.</li>
</ul>
<p>Спасибо, что были с нами и приятного дня!</p>Prase science on reddit.com v0.12018-08-01T12:23:00+03:002018-08-01T21:24:00+03:00Юновидов Дмитрийtag:dimyun.space,2018-08-01:/blog/education-it-reddit.html<p>This work is devoted to parsing the site <a href="https://www.reddit.com/r/science/">reddit.com, section - science</a> to create a database of posts. The main purpose of this work is to accumulate information. The obtained information can be further used for semantic analysis and practice in Big Data. The goal includes a set of tasks …</p><p>This work is devoted to parsing the site <a href="https://www.reddit.com/r/science/">reddit.com, section - science</a> to create a database of posts. The main purpose of this work is to accumulate information. The obtained information can be further used for semantic analysis and practice in Big Data. The goal includes a set of tasks:</p>
<ul>
<li>to choose necessary libraries;</li>
<li>to find addresses for parsing and understand its logic;</li>
<li>to create a function for parsing the necessary information;</li>
<li>to organize accumulation of information;</li>
<li>offer a way of processing the received information and any useful result.</li>
</ul>
<p>This theme is actual because of global distribution of algorithms of accumulation and analysis of big data. The received information can be used for monitoring of actual directions of a science and simply to learn English on the most widespread words (to expand the vocabulary). And besides, simply as a tool for personal development.</p>
<div>
<table>
<tr>
<td style="width:80%">
<img src="../../../images/blog/education/IT/IT__reddit_science_fig_1.png" alt="example" width="600px"/>
</td>
<td>
<i>
Fig. 1. Example of script implementation.
</i>
</td>
</tr>
</table>
</div>
<h2>1. Development environment and libraries</h2>
<p>The main stage of such work is to create the development environment and the right settings. However, this topic is quite extensive and, more importantly, it is strictly individual for each individual. My experiences are using <a href="https://www.python.org/downloads/">python</a> and the development environment <a href="https://www.jetbrains.com/pycharm/">PyCharm IDE</a> or <a href="https://jupyter.org/">Jupyter notebook</a>. To write notes - editor <a href="https://atom.io/">atom</a>. Although in the end, the working environment can be a usual notebook with a command line.</p>
<p>The basis for this work is interesting and useful articles: <a href="ttps://habrahabr.ru/company/ods/blog/346632/">1</a>, <a href="http://www.learndatasci.com/sentiment-analysis-reddit-headlines-pythons-nltk/">2</a> and of course Google.</p>
<p>I will denote some more features of this work:</p>
<ul>
<li>the code was written, tested and run in Ubuntu 16.04 x64;</li>
<li>the code is now used in Arch Linux and has been upgraded for python 3.8;</li>
<li>Python 2.7 and Firefox Quantum 58.0.1 (64 bit) are used.</li>
</ul>
<p>At the beginning of each chapter you will find the code with comments. Some explanations also will be provided if necessary. Thus, let’s get down to business.</p>
<p><strong>The necessary libraries:</strong></p>
<div class="highlight"><pre><span></span><code> <span class="c1">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">import</span> <span class="nn">json</span>
<span class="kn">from</span> <span class="nn">fake_useragent</span> <span class="kn">import</span> <span class="n">UserAgent</span> <span class="c1"># user camouflage</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span> <span class="c1"># our "database"</span>
<span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span> <span class="c1"># for correct saving the image</span>
<span class="kn">from</span> <span class="nn">wordcloud</span> <span class="kn">import</span> <span class="n">WordCloud</span> <span class="c1"># for word cloud creation</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">path</span>
<span class="kn">import</span> <span class="nn">pymorphy2</span> <span class="c1"># for words normalization</span>
<span class="kn">from</span> <span class="nn">nltk.corpus</span> <span class="kn">import</span> <span class="n">stopwords</span> <span class="c1">#</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Counter</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">random</span>
</code></pre></div>
<p>This is a kind of “equipment and reagent preparation”. The main <strong>objects</strong> of the research are: the site and the data set (for which we need the <code>request</code>, <code>json</code> and <code>fake_user</code> libraries). As a useful action it is proposed to build <strong>cloud of the most frequently occurring words</strong> - for this purpose you also need python libraries (<code>wordcloud</code>, <code>numpy</code>), including for work with text (<code>nltk</code>, <code>collection</code>, <code>pymorphy</code>). <strong>Logic of work</strong>: you need to get information from the site (parsing), process it, add it to the database, save the database on disk, calculate the frequency of words in the database, build a cloud of words (useful result).</p>
<p>It should be pointed out that this code can be run directly from the command line without specifying an interpreter (<code>#!/usr/bin/env python</code>). The second part of the header is necessary for correct work with the utf-8 and unicode (<code># -*- coding: utf-8 -*-</code>).</p>
<h2>2. Parsing the site</h2>
<p>We selected the object of study and prepared everything necessary for our experimental work (section 1). Now we need to deal with the ideology of receiving and downloading data. One of the most obvious and universal ways is direct parsing of the html code of a page. You need to specify the address of the page itself and get its html code. However, this way gives us only visible information. This is usually enough, but it is often useful to read about additional site features.</p>
<p>Having searched a bit on the Internet, we cam find the article <a href="http://www.learndatasci.com/sentiment-analysis-reddit-headlines-pythons-nltk/">2</a>. In this work, an interesting way of loading reddit pages in json format is specified. It is very convenient for further processing.</p>
<p>Let’s check it in practice. Let’s try to open a page of reddit in json format in a browser (for example, https://www.reddit.com/r/science/new/.json). Let’s pay attention to clearer structure and availability of additional information about news located on the page. Thus, it makes sense to choose the most informative approach and parse json versions of pages.</p>
<p><strong>For the beginning. Download data:</strong></p>
<div class="highlight"><pre><span></span><code> <span class="c1"># For all news</span>
<span class="k">def</span> <span class="nf">read_js</span><span class="p">(</span><span class="n">req</span><span class="p">):</span>
<span class="n">data</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">req</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="nb">print</span> <span class="s1">'error in js'</span>
<span class="c1"># TODO: if rise this error — json hame a errors itself, need to hand-parsing</span>
<span class="k">return</span> <span class="n">data</span>
<span class="k">def</span> <span class="nf">collect_news</span><span class="p">(</span><span class="n">num_news</span><span class="o">=</span><span class="mi">100</span><span class="p">):</span>
<span class="n">url</span> <span class="o">=</span> <span class="s1">'https://www.reddit.com/r/science/new/.json'</span>
<span class="n">data_all</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_all</span><span class="p">)</span> <span class="o"><</span> <span class="n">num_news</span><span class="p">:</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="n">url</span> <span class="o">=</span> <span class="s1">'https://www.reddit.com/r/science/new/.json'</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_all</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">last</span> <span class="o">=</span> <span class="n">data_all</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="s1">'data'</span><span class="p">][</span><span class="s1">'name'</span><span class="p">]</span>
<span class="n">url</span> <span class="o">=</span> <span class="s1">'https://www.reddit.com/r/science/new/.json?after='</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">last</span><span class="p">)</span>
<span class="n">req</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s1">'User-Agent'</span><span class="p">:</span> <span class="n">UserAgent</span><span class="p">()</span><span class="o">.</span><span class="n">chrome</span><span class="p">})</span>
<span class="n">json_data</span> <span class="o">=</span> <span class="n">read_js</span><span class="p">(</span><span class="n">req</span><span class="p">)</span>
<span class="n">data_all</span> <span class="o">+=</span> <span class="n">json_data</span><span class="p">[</span><span class="s1">'data'</span><span class="p">][</span><span class="s1">'children'</span><span class="p">]</span>
<span class="n">keys_all</span> <span class="o">=</span> <span class="n">data_all</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="s1">'data'</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
<span class="n">tidy_data</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">keys_all</span><span class="p">:</span>
<span class="n">tidy_data</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data_all</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s1">'data'</span><span class="p">]</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">tidy_data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">tidy_data</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">+=</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">tidy_data</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">+=</span> <span class="p">[</span><span class="n">data</span><span class="p">[</span><span class="n">k</span><span class="p">]]</span>
<span class="k">return</span> <span class="n">tidy_data</span>
<span class="n">num_post</span> <span class="o">=</span> <span class="mi">200</span>
<span class="n">tidy_data</span> <span class="o">=</span> <span class="n">collect_news</span><span class="p">(</span><span class="n">num_post</span><span class="p">)</span>
<span class="c1"># print "raw new data len: ", len(tidy_data['title'])</span>
</code></pre></div>
<p>In small projects, we will try to use a functional approach to programming as more visible and understandable at first. Thus, the main actions are implemented in functions.</p>
<p>At the output of the function <code>collect_news</code> we get a dictionary to store characteristic data of all the news. Dictionary keys are general properties of the last found post (assume that properties of all posts are the same). Each key corresponds to a list. The length of the list is determined by the number of uploaded news posts (100 by default). Each list consists of lists, which store information on this key from one post. If for some post there is no such property, the value is <code>[None]</code>. Such logic is chosen to have the same objects (lists) in the list, and that is why each list of the key had the same size (we will need it for further creation of Data Frame).</p>
<p>The second function <code>read_js</code> is parsing the json format using the corresponding library.</p>
<p>You should pay attention that when you parse json it is assumed that the file format is correct. If it is not so, the function will return None and the code will break. This is a great opportunity to show your skills, username, and rewrite the code in such a way that it would work even when this exception occurs.</p>
<p>Let’s examine request of information from the site in more detail. To prevent a ban - we use the request signature that is standard for an ordinary user. That’s why we need the <code>fake_useragent</code> library. At first, with quite large intervals between requests (about 1 s, they can be randomized) and relatively small size of downloadable pages, this will be enough.</p>
<p>Then it’s a small thing to save the obtained information as a matrix of <strong>“sign objects “</strong> for further use.</p>
<h2>3. Transforming and saving data</h2>
<p>The main part is written, it remains to accumulate data, for which the <code>pandas</code> library is perfect.</p>
<div class="highlight"><pre><span></span><code> <span class="c1"># Add data to exist df and save it</span>
<span class="k">def</span> <span class="nf">log_write</span><span class="p">(</span><span class="n">feature</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="c1"># Write data to log file</span>
<span class="n">f_log</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'/home/username/scripts/reddit_science_log.txt'</span><span class="p">,</span> <span class="s1">'a'</span><span class="p">)</span>
<span class="n">f_log</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">feature</span> <span class="o">+</span> <span class="n">value</span><span class="p">)</span>
<span class="n">f_log</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="c1"># Start log file</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">asctime</span><span class="p">())</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\t</span><span class="s1">'</span><span class="p">)</span>
<span class="n">len_old</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">len_new</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">final_df_new</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">tidy_data</span><span class="p">,</span> <span class="n">orient</span><span class="o">=</span><span class="s1">'columns'</span><span class="p">)</span>
<span class="n">final_df_old</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_pickle</span><span class="p">(</span><span class="s1">'/home/username/scripts/science_reddit_df'</span><span class="p">)</span> <span class="c1"># load</span>
<span class="n">len_old</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">final_df_old</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
<span class="c1"># print 'old len: ', len_old, ' new df len: ', len(final_df_new.index)</span>
<span class="n">final_df_old</span> <span class="o">=</span> <span class="n">final_df_old</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">final_df_new</span><span class="p">,</span> <span class="n">ignore_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">final_df_old</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="p">[</span><span class="s1">'id'</span><span class="p">],</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">final_df</span> <span class="o">=</span> <span class="n">final_df_old</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">len_new</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">final_df</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
<span class="c1"># print 'final df len: ', len_new, '; len added: ', len_new-len_old</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1"> new news message: '</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">len_new</span> <span class="o">-</span> <span class="n">len_old</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
<span class="c1"># Create new file</span>
<span class="n">final_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">tidy_data</span><span class="p">,</span> <span class="n">orient</span><span class="o">=</span><span class="s1">'columns'</span><span class="p">)</span>
<span class="c1"># Save df to file</span>
<span class="n">final_df</span><span class="o">.</span><span class="n">to_pickle</span><span class="p">(</span><span class="s1">'/home/username/scripts/science_reddit_df'</span><span class="p">)</span> <span class="c1"># save</span>
</code></pre></div>
<p>Together with the check of database existence (<code>science_reddit_df</code>) we have prescribed a simple logging function <code>log_write</code> that will allow us to observe the behavior of our code. The type of file with logs:</p>
<p><code>Tue Jan 23 09:35:56 2018 new news message: 155</code></p>
<p><code>Tue Jan 23 09:39:21 2018 new news message: 0</code></p>
<p><code>Tue Jan 23 22:41:39 2018 new news message: 33</code></p>
<p><code>Wed Jan 24 09:23:09 2018 new news message: 11</code></p>
<p>I think it’s pretty clear.</p>
<p>The logic of the science news database looks like this: <em>get new information - check the possibility of open the save database - create a new Data Frame - merge two Data Frames - delete duplicated rows (by the <code>id=news column</code>) - save the updated database</em>.</p>
<h2>4. Building a word cloud</h2>
<p>To generate a useful code output, I suggest building a cloud of the most frequently occurring words. To do this, you need to highlight relevant text data from the database and perform preliminary processing.</p>
<div class="highlight"><pre><span></span><code> <span class="n">ind_all</span> <span class="o">=</span> <span class="n">final_df</span><span class="o">.</span><span class="n">index</span>
<span class="n">all_text</span> <span class="o">=</span> <span class="n">final_df</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">ind_all</span><span class="p">[</span><span class="o">-</span><span class="n">num_post</span><span class="p">:],</span> <span class="p">[</span><span class="s1">'title'</span><span class="p">]]</span>
<span class="n">tag_re</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'(<!--.*?-->|<[^>]*>)'</span><span class="p">)</span>
<span class="c1"># clear each post from tag and whitespace</span>
<span class="n">all_text</span> <span class="o">=</span> <span class="p">[</span><span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' +'</span><span class="p">,</span><span class="s1">' '</span><span class="p">,</span><span class="n">tag_re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' '</span><span class="p">,</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">all_text</span><span class="o">.</span><span class="n">values</span><span class="p">]</span>
<span class="n">list_in</span> <span class="o">=</span> <span class="p">[</span><span class="n">all_text</span><span class="p">]</span>
<span class="n">list_out</span> <span class="o">=</span> <span class="p">[</span><span class="s1">''</span><span class="p">]</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">list_in</span><span class="p">)):</span>
<span class="n">self_messages</span> <span class="o">=</span> <span class="n">list_in</span><span class="p">[</span><span class="n">t</span><span class="p">]</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">self_messages</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">str_data</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="c1"># clear from "bad" symbols and numbers</span>
<span class="k">def</span> <span class="nf">checkGood</span><span class="p">(</span><span class="n">symb</span><span class="p">):</span>
<span class="n">good1</span> <span class="o">=</span> <span class="s1">'qwertyuiopasdfghjklzxcvbnm1234567890'</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">)</span>
<span class="n">good2</span> <span class="o">=</span> <span class="sa">u</span><span class="s1">'qwertyuiopasdfghjklzxcvbnm1234567890'</span>
<span class="k">if</span> <span class="n">symb</span> <span class="ow">in</span> <span class="n">good1</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">elif</span> <span class="n">symb</span> <span class="ow">in</span> <span class="n">good2</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">str_data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">' '</span> <span class="ow">or</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">:</span>
<span class="n">text</span> <span class="o">+=</span> <span class="s1">' '</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">checkGood</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
<span class="n">text</span> <span class="o">+=</span> <span class="n">i</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">text</span> <span class="o">+=</span> <span class="s1">''</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' +'</span><span class="p">,</span><span class="s1">' '</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">text</span><span class="p">[:]</span>
<span class="c1"># normalize of words</span>
<span class="n">morph</span> <span class="o">=</span> <span class="n">pymorphy2</span><span class="o">.</span><span class="n">MorphAnalyzer</span><span class="p">()</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">):</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">morph</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">i</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">text</span> <span class="o">+=</span> <span class="n">p</span><span class="o">.</span><span class="n">normal_form</span> <span class="o">+</span> <span class="s1">' '</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="n">text</span><span class="p">[:]</span>
<span class="c1"># stop words check</span>
<span class="n">stop_words</span> <span class="o">=</span> <span class="n">stopwords</span><span class="o">.</span><span class="n">words</span><span class="p">(</span><span class="s1">'english'</span><span class="p">)</span>
<span class="n">stop_words</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span>
<span class="sa">u</span><span class="s1">'new'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'study'</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'may'</span>
<span class="p">])</span>
<span class="n">words</span> <span class="o">=</span> <span class="n">str_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span>
<span class="n">w_before</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">words</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">words</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">stop_words</span><span class="p">]</span>
<span class="n">w_after</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">log_write</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1"> raw and tidy words: '</span><span class="p">,</span> <span class="nb">str</span><span class="p">([</span><span class="n">w_before</span><span class="p">,</span> <span class="n">w_after</span><span class="p">])</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">str_data</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
<span class="n">list_out</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">=</span> <span class="n">str_data</span><span class="p">[:]</span>
<span class="n">str_news</span> <span class="o">=</span> <span class="n">list_out</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">gear_mask</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">"/home/username/scripts/gear2.png"</span><span class="p">))</span>
<span class="n">wc</span> <span class="o">=</span> <span class="n">WordCloud</span><span class="p">(</span><span class="n">background_color</span><span class="o">=</span><span class="s2">"black"</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="n">gear_mask</span><span class="p">,</span> <span class="n">collocations</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="c1"># generate word cloud</span>
<span class="n">wc</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">str_news</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">grey_color_func</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">font_size</span><span class="p">,</span> <span class="n">position</span><span class="p">,</span> <span class="n">orientation</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">"hsl(0, 0</span><span class="si">%%</span><span class="s2">, </span><span class="si">%d%%</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">60</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
<span class="n">default_colors</span> <span class="o">=</span> <span class="n">wc</span><span class="o">.</span><span class="n">to_array</span><span class="p">()</span>
<span class="n">wc2</span> <span class="o">=</span> <span class="n">wc</span><span class="o">.</span><span class="n">recolor</span><span class="p">(</span><span class="n">color_func</span><span class="o">=</span><span class="n">grey_color_func</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="c1"># store to file</span>
<span class="n">wc2</span><span class="o">.</span><span class="n">to_file</span><span class="p">(</span><span class="s2">"/home/username/scripts/science_reddit_raw.png"</span><span class="p">)</span>
</code></pre></div>
<p>The logic of the code is as follows: <em>Selection of all headings from the database - clearing text from html tags and extra spaces - processing of all text in a cycle - removal of all that is not letter* - repeated removal of extra spaces - morphologization of words (set it to “normal” form) - removal of “stop” words (most frequently occurring, such as articles, pronouns, etc.) - output of one big line of words and spaces between them</em>.</p>
<p>* - since Python 2.7 has certain encoding problems, we use two methods of encoding, just in case.</p>
<p>The resulting string can be used to build a word cloud using the <code>wordcloud</code> library. After building a cloud, we repaint it in the desired color (in my case - 50 shades of white, fig. 1). A beautifully designed cloud can be applied to a specific mask (image). In this case the mask should be binaryized (black and white format of two types of pixels: 0 and 255). For this purpose there are several sites that can be easily googled. I used this one: <a href="https://pinetools.com/threshold-image">3</a>, the operation is called threshold.</p>
<p>Finally, a small gift for Ubuntu users (and maybe not just for them, if you think about it). The resulting image can be translated into an image with a transparent background by a simple terminal command:</p>
<p><code>convert ~/news_raw.png -transparent black ~/news_ready.png</code></p>
<p>In the same way, you can organize automatic parsing of the site through the Autostart application:</p>
<div class="highlight"><pre><span></span><code> Menu — Startup Application — Add:
Name: reddit_science_reaser
Command: sh -c «sleep <span class="m">600</span> <span class="o">&&</span> /FULL_PATH/science_reddit.py»
</code></pre></div>
<p>Set a delay for execution in seconds, so that the system could connect to the Internet and execute the script (for execution you can specify <code>«python /FULL_PATH/science_reddit.py»</code>).</p>
<h2>5. Conclusion .</h2>
<p>Let’s sum it up a little. The main goal was to accumulate information about scientific news that appear on reddit.com. For this purpose, it was necessary to solve a number of tasks:</p>
<ul>
<li>get information from the site;</li>
<li>parse information and select key properties for each news;</li>
<li>save each news in a matrix of “object-features”.</li>
</ul>
<p>According to the written code, all tasks were solved and the goal was achieved. On our hard drive is a file <code>science_reddit_df</code>, which is constantly growing and accumulate information (every time you run the script). In addition, the task of using this information is solved (a cloud of the most frequently used words is built by news headlines).</p>
<h3>5.1 Ways to improve (tasks for individual solving)</h3>
<p>Any project is subject to optimization and update. I hope that my readers will also try to adapt the received information for themselves and their needs. So, at first glance, we can implement the following:</p>
<ul>
<li>write an error handler (checking values returned by functions);</li>
<li>write text processing as a separate function;</li>
<li>use an object-oriented approach (use classes for news);</li>
<li>implement of html-parsing with <code>beautiful soup</code> library;</li>
<li>write a user interface (GUI);</li>
<li>rewrite the code on python 3.</li>
</ul>
<p>Thank you for being with us and have a nice day!</p>