more lectures
This commit is contained in:
parent
de835acd08
commit
1a103ca40c
|
@ -1,8 +1,8 @@
|
||||||
\documentclass[a4paper,fontsize=14bp]{article}
|
\documentclass[a4paper,fontsize=14bp]{article}
|
||||||
|
|
||||||
\input{../common-preamble}
|
\input{settings/common-preamble}
|
||||||
\input{../fancy-listings-preamble}
|
\input{settings/fancy-listings-preamble}
|
||||||
\input{../bmstu-preamble}
|
\input{settings/bmstu-preamble}
|
||||||
\numerationTop
|
\numerationTop
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
|
@ -12,18 +12,32 @@
|
||||||
\tableofcontents
|
\tableofcontents
|
||||||
\newpage
|
\newpage
|
||||||
\section{Введение}
|
\section{Введение}
|
||||||
Основы ТВ и МС (случайные величины, непрерывные и дискретные СВ, матожидание, дисперсия, ковариация, корреляция)
|
\subsection{Что нужно знать}
|
||||||
выборка, статистика, гистограмма, смещение
|
\begin{itemize}
|
||||||
несмещённая оценка...
|
\item \textbf{Основы теории вероятностей и математической статистики} (случайные величины, непрерывные и дискретные случайные величины, матожидание, дисперсия, ковариация, корреляция)
|
||||||
|
\item выборка, статистика, гистограмма, смещение
|
||||||
|
\item несмещённая оценка, асимптотически несмещённая оценка, состоятельная оценка, дисперсия оценки, коэффициент корреляции Пирсона, коэффициент корреляции Спирмена, нормальное (гауссовское) распределение (одномерное и многомерное), центральная предельная
|
||||||
|
\item \textbf{основы линейной алгебры}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Вектор, операции над векторами и их свойства, векторное пространство, аксиомы векторного пространства, размерность векторного пространства.
|
||||||
|
\item Линейная зависимость векторов, линейная независимость векторов, методы проверки линейной независимости векторов.
|
||||||
|
\item Матрица, операции над матрицами, умножение матрицы на вектор, умножение матрицы на матрицу, ранг матрицы, транспонирование матриц, обратная матрица.
|
||||||
|
\item Система линейных уравнений (СЛУ), число решений СЛУ, ранг матрицы СЛУ и число ее решений.
|
||||||
|
\item Евклидово пространство, его свойства, норма вектора, ее свойства, метрика, евклидова метрика, скалярное произведение векторов, угол между векторами.
|
||||||
|
\end{itemize}
|
||||||
|
\item \textbf{Теория информации} Информационная энтропия (Entropy) – мера неопределённости некоторой системы
|
||||||
|
\item \textbf{Python} Библиотеки: Scikit-Learn, Numpy, Scipy, Pandas, Matplotlib, ...
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
основы линейной алгебры. (матрицы, энтропия, ...)
|
\subsection{Типы задач анализа данных}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Визуализация - анализ ситуации, анализ исходной информации, анализ, интерпретация и представление результатов
|
||||||
|
\item Поиск шаблонов поиск частых наборов - метод ассоциативных правил - market basket analysis
|
||||||
|
\item прогнозирование - определение нового класса или объекта, которого не было в обучающей выборке
|
||||||
|
\item кластеризация или сегментация
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
Визуализация - анализ ситуации, анализ исходной информации, анализ, интерпретация и представление результатов
|
\textbf{Этапы решения задачи алгоритмами машинного обучения}
|
||||||
Поиск шаблонов поиск частых наборов - метод ассоциативных правил - market basket analysis
|
|
||||||
прогнозирование - определение нового класса или объекта, которого не было в обучающей выборке
|
|
||||||
|
|
||||||
\textbf{Этапы}
|
|
||||||
Пример - Скоринг - определение платёжеспособности.
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item формальная постановка задачи (кампания по привлечению кредитов, найти модель)
|
\item формальная постановка задачи (кампания по привлечению кредитов, найти модель)
|
||||||
\item данные (признаковое описание -- бинарные, числовые, категориальные, порядковые; матрица расстояний между объектами, временные ряды скалярных или векторных наблюдений, итого 16 прпизнаков)
|
\item данные (признаковое описание -- бинарные, числовые, категориальные, порядковые; матрица расстояний между объектами, временные ряды скалярных или векторных наблюдений, итого 16 прпизнаков)
|
||||||
|
@ -33,41 +47,182 @@
|
||||||
\item предобработка данных (если клиентов приндалежащих какому-то классу меньше 5\% выборка не сбалансирована)
|
\item предобработка данных (если клиентов приндалежащих какому-то классу меньше 5\% выборка не сбалансирована)
|
||||||
\item реализация, оценка качества
|
\item реализация, оценка качества
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
Пример -- Скоринг -- определение платёжеспособности.
|
||||||
|
|
||||||
Работа с несбалансированными выборками
|
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item выкинуть лишнее или продублировать недостающее
|
\item \textbf{Постановка задачи}. Проводилась компания по привлечению клиентов для открытия депозита. Цель маркетинговой компании: привлечь клиентов на депозит, предлагая долгосрочные депозитные заявки с высокими процентными ставками, при сокращении затрат и времени на проведение компании: контактов должно быть меньше, но число клиентов, подписавшихся на депозит не должно уменьшаться. Цель исследования: найти модель, которая может объяснить успех компании т. е., если клиент подписывает депозит. Решается задача классификации: по имеющемуся признаковому описанию клиента определить подпишет ли он депозит (успех) и нет (неудача).
|
||||||
\item создать недостающие параметры
|
\item \textbf{Данные задачи}. \textbf{Типы входных данных}: признаковое описание, каждый объект описывается набором числовых или нечисловых признаков; матрица расстояний между объектами (метод ближайших соседей); временные ряды скалярных или векторных наблюдений (сигналы); изображение или видеоряд;
|
||||||
\item изменить веса параметров
|
|
||||||
|
\textbf{Признаковое описание} Бинарные признаки – $(0, 1)$; Числовые признаки: $x_{ik} \in R$ -- с этими признаками удобно работать, практически любой метод применим к задаче с числовыми признаками; Категориальные признаки $x_{ik} \in \{\alpha_1, ..., \alpha_k\}$ нет метрики, нет упорядочения; Порядковые признаки $x_{ik} \in \{\alpha_1, ..., \alpha_k\}$ есть упорядочение.
|
||||||
|
|
||||||
|
\textbf{Входные данные 16 признаков}
|
||||||
|
\textbf{Общие данные о клиенте}
|
||||||
|
1 - age (numeric);
|
||||||
|
2 - job : (categorical: "admin.", "unknown", "unemployed", "management", "housemaid", "entrepreneur", "student", "blue-collar", "self-employed", "retired", "technician", "services")
|
||||||
|
3 - marital (categorical: "married", "divorced", "single")
|
||||||
|
4 - education (categorical: "unknown","secondary","primary","tertiary")
|
||||||
|
\textbf{Финансовое положение}
|
||||||
|
5 - default: has credit in default? (binary: "yes","no")
|
||||||
|
6 - balance:, in euros (numeric)
|
||||||
|
7 - housing: has housing loan? (binary: "yes","no")
|
||||||
|
8 - loan: has personal loan? (binary: "yes","no")
|
||||||
|
\textbf{Данные о рекламной компании}
|
||||||
|
9 - contact: contact communication type (categorical: "unknown","telephone","cellular")
|
||||||
|
10 - day: last contact day of the month (numeric)
|
||||||
|
11 - month: last contact month of year (categorical: "jan", "feb", "mar", ..., "nov", "dec")
|
||||||
|
12 - duration: last contact duration, in seconds (numeric)
|
||||||
|
13 - campaign: number of contacts performed during this campaign (numerict)
|
||||||
|
14 - pdays: number of days that passed by after the client was last contacted (numeric)
|
||||||
|
15 - previous: number of contacts performed before this campaign and for this client (numeric)
|
||||||
|
16 - poutcome: outcome of the c (categorical: "unknown","other","failure","success")
|
||||||
|
17 - y - has the client subscribed a term deposit? (binary: "yes","no")
|
||||||
|
|
||||||
|
\item \textbf{Предварительная обработка и проверка качества исходных данных}
|
||||||
|
1. Какова доля объектов первого класса в данных? Если эта доля менее 5\% - имеем несбалансированную выборку.
|
||||||
|
2.Какова доля выбросов, пропусков в данных? Выбросы могут быть результатом: событий, которые происходят с небольшой вероятностью и большим воздействием, системной ошибки.
|
||||||
|
|
||||||
|
\item \textbf{Определение ответа} Варианты ответов: клиент подписывает контракт -- класс 1, клиент не подписывает -- класс 0;
|
||||||
|
|
||||||
|
вектор $\{p, 1-p\} = P, p$ --степень уверенности алгоритма (вероятность) в том, что объект принадлежит классу 1 .
|
||||||
|
|
||||||
|
\item Выбор критериев: метрики оценивания используемого метода решения должны иметь интерпретацию, значимую для решаемой бизнес-задачи.
|
||||||
|
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|
||||||
Метрики
|
\subsection{Работа с несбалансированными выборками}
|
||||||
TP FP FN TN (ошибки первого и второго рода).
|
Метрики для несбалансированных наборов данных: AUC-ROC (площадь под ROC-кривой) , f1-score.
|
||||||
|
|
||||||
Accuracy = TN + TP / n - метрика сама по себе неприменима.
|
\begin{enumerate}
|
||||||
Precision = TP/TP+FP уровень доверия к положительным ответам модели, доля истинных положительных объектов, выделенных классификатором как положительные
|
\item Удаление части элементов мажоритарного класса (недостаток: потеря данных).
|
||||||
Recall = TP/TP+FN какая часть положительных объектов правильно определена классификатором
|
\item Дополнение миноритарного класса повторяющимися данными (недостаток: переобучение на элементах миноритарного класса).
|
||||||
|
\item Создание дополнительных искусственных объектов.
|
||||||
|
\item Настройка классификатора с использованием весов. В контексте кредитования потеря денег из-за незаслуживающего доверия заемщика обходится существенно выше, чем отсутствие возможности кредитования надежного заемщика. Поэтому мы можем назначать этим классам различные веса и отсечки
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
F - мера (F-score)- гармоническое среднее точности и полноты. F – мера обладает важным свойством - она близка к нулю, если хотя бы один из аргументов близок к нулю: F = 2*precision recall precision+recall 0≤ F ≤ 1
|
Метрики Качества. Пусть имеется два класса 1 -- положительный и 0 -- отрицательный
|
||||||
|
\begin{itemize}
|
||||||
|
\item True positive TP объекты, принадлежащие положительному классу $Y_1$, определены алгоритмом как положительные
|
||||||
|
\[ TP = \{ X_t \in Y_1 | a(X_t, g) = 1 \} \]
|
||||||
|
\item False positive FP объекты, принадлежащие отрицательному классу $Y_0$ ,определены алгоритмом как положительные
|
||||||
|
\[ FP = \{ X_t \in Y_0 | a(X_t, g) = 1 \} \]
|
||||||
|
\item False negative FN объекты, принадлежащие положительному классу $Y_1$ , определены алгоритмом как отрицательные
|
||||||
|
\[ FN = \{ X_t \in Y_1 | a(X_t, g) = 0 \} \]
|
||||||
|
\item True negative TN объекты, принадлежащие отрицательному классу $Y_0$ , определены алгоритмом как отрицательные
|
||||||
|
\[ TN = \{ X_t \in Y_0 | a(X_t, g) = 0 \} \]
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
Ошибка 1 рода (Туре I Error) случается, когда объект ошибочно относится к положительному классу
|
\subsection{Метрики качества оценки алгоритмов машинного обучения}
|
||||||
Ошибка 2 рода (Туре II Error) случается, когда объект ошибочно относится к отрицательному классу
|
\begin{itemize}
|
||||||
|
\item \textbf{Accuracy} $\frac{TN + TP}{n}$ -- метрика сама по себе неприменима.
|
||||||
|
\item \textbf{Precision} $\frac{TP}{TP+FP}$ -- уровень доверия к положительным ответам модели, доля истинных положительных объектов, выделенных классификатором как положительные.
|
||||||
|
\item \textbf{Recall} $\frac{TP}{TP+FN}$ -- какая часть положительных объектов правильно определена классификатором
|
||||||
|
\item \textbf{F-мера} (F-score) -- гармоническое среднее точности и полноты. F-мера обладает важным свойством -- она близка к нулю, если хотя бы один из аргументов близок к нулю: $F = \frac{2*precision*recall}{precision+recall}, 0\leq F \leq 1$
|
||||||
|
\item Ошибка 1 рода (Туре I Error) случается, когда объект ошибочно относится к положительному классу
|
||||||
|
\item Ошибка 2 рода (Туре II Error) случается, когда объект ошибочно относится к отрицательному классу
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
Confusion Matrix
|
\subsection{Confusion Matrix}
|
||||||
TP FP
|
Хорошо подходит для многоклассовой классификации. Классификация в случае двух классов:
|
||||||
FN TN
|
\begin{equation*}
|
||||||
Хорошо подходит для многоклассовой классификации.
|
\begin{pmatrix}
|
||||||
|
TP & FP \\
|
||||||
|
FN & TN \\
|
||||||
|
\end{pmatrix}
|
||||||
|
\end{equation*}
|
||||||
|
FP, FN -- число элементов, определённых ложно.
|
||||||
|
|
||||||
ROC-кривая
|
Многоклассовая классификация, $m$ классов.
|
||||||
Число строк в квадрате справа равно числу единиц, число столбцов - числу нулей. Стартуем из точки (0, 0)(левый нижний угол. Если значение метки класса в просматриваемой строке 1, то делаем шаг вверх; если 0, то делаем шаг вправо, если у нескольких объектов значения оценок равны, то делаем шаг в точку а блоков выше и блоков правее, где а - число единиц, b - число нулей в рассматриваемой группе объектов. Считаем сколько \% покрыто.
|
\begin{itemize}
|
||||||
|
\item $C = (c_{ij} i = 1, ..., m, j = 1, ..., m)$
|
||||||
|
\item $c_{ij} = |X_t:X_t \in i|a(X_t, g)= j|$
|
||||||
|
\item число объектов, принадлежащих классу $i$, отнесённые алгоритмом к классу $j$.
|
||||||
|
\begin{equation*}
|
||||||
|
\begin{pmatrix}
|
||||||
|
10 & 5 & 0 & 0 \\
|
||||||
|
3 & 12 & 0 & 0 \\
|
||||||
|
0 & 0 & 14 & 1 \\
|
||||||
|
0 & 0 & 0 & 15 \\
|
||||||
|
\end{pmatrix}
|
||||||
|
\end{equation*}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsection{Отбор признаков}
|
||||||
|
Посчитаем число вариантов признаковых описаний одного клиента. Число значений категориальных и бинарных признаков каждого клиента, не считая возраста, равно
|
||||||
|
\[N = 12 * 3 * 4 * 8 * 3 * 12 * 4 = 144 * 24 * 48 = 165888.\]
|
||||||
|
С ростом размера признакового пространства увеличивается сложность задачи и снижается достоверность решения.
|
||||||
|
|
||||||
|
\textbf{Шумовые признаки} -- это признаки, которые никак не связаны с целевой переменной. Зашумленность данных означает, что отдельные значимые объясняющие переменные, возможно, не были зарегистрированы или что дефолт произошел случайно.
|
||||||
|
|
||||||
|
\textbf{Методы отбора признаков}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Обертки -- использующие для отбора признаков конкретную модель. Модель обучается на подмножестве признаков, для нее строится матрица ошибок, затем на другом и т.д.
|
||||||
|
\item Фильтры -- удаляем коррелированные данные матрица рассеяния, F-тест -- оценивает степень линейной зависимости между признаками и целевой переменной, поэтому он лучше всего подойдёт для линейных моделей. Реализован как \code{f_classif} для классификации; хи-квадрат -- оценивает степень линейной зависимости между признаками и целевой переменной.
|
||||||
|
\item Встроенные методы -- задача отбора признаков -- побочная задача (случайный лес)
|
||||||
|
\[ IG = H(S_i) - \frac{|S_{il}|}{|S_i|} H(S_{il}) - \frac{|S_{ir}|}{|S_i|} H(S_{ir}) \to \max \]
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textbf{Отбор категориальных признаков}
|
||||||
|
Значения категориальных признаков могут быть любыми объектами, на которых определена операция сравнения (равно и не равно).
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{Lable encoding} -- отображение каждого признака в число позволяет использовать его в модели обучения. Недостатки: неявно задает порядок категории, не может работать с неизвестными в процессе обучения значениями категориального признака
|
||||||
|
\item \textbf{Onehot coding} -- недостатки: увеличение количества признаков
|
||||||
|
\item \textbf{Target encoding} -- кодирование с учётом целевой переменной
|
||||||
|
\[ p_j(x \in X) = \frac{\sum_{i=1}^N[f_j(x\in X) = f_j(x_i)][y_i = 1]}{\sum_{i=1}^N[f_j(x\in X) = f_j(x_i)]} \]
|
||||||
|
где $p_j(x \in X)$ -- числовое значение $j$-го категориального признака на объекте $x, f_j(x_i)$ -- исходное значение $j$-го категориального признака на объекте $x_i$. Использование счетчиков может привести к переобучению. Модель может опираться на счетчики, если есть уверенность в том, что модель обучена по большому числу объектов. Сглаживание
|
||||||
|
|
||||||
|
\[ p_j(x \in X) = \frac{\sum_{i=1}^N[f_j(x\in X) = f_j(x_i)][y_i = 1] + C/N \sum_{i=1}^N[y_i = 1]}{\sum_{i=1}^N[f_j(x\in X) = f_j(x_i)] + C} \]
|
||||||
|
|
||||||
|
Если мало объектов этой категории, то числовое значение признака приближается близко к среднему по всей выборке, а для популярных к среднему значению по категории. $p_j(X) \to 1/N \sum_{i=1}^N[y_i = 1]$, если мало объектов в категории.
|
||||||
|
|
||||||
|
Значение категориального признака в задаче регрессии
|
||||||
|
\[ p_j(x \in X) = \frac{\sum_{i=1}^N[f_j(x\in X) = f_j(x_i)]*\ddot{y_i}}{\sum_{i=1}^N[f_j(x\in X) = f_j(x_i)]} \]
|
||||||
|
|
||||||
|
$\ddot{y_j}$ -- среднее значение $y_t$ для объектов с категориальным признаком.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsection{Permutation Importance, Feature selection}
|
||||||
|
Важность перестановки
|
||||||
|
\begin{itemize}
|
||||||
|
\item Случайным образом тасуется один столбец в валидационной выборке. Признак считается значимым, если точность модели сильно падает и вызывает увеличение ошибки и «неважным», если перетасовка его значений не влияет на точность модели.
|
||||||
|
\item Permutation Importance рассчитывается после обучения модели с использованием библиотеки ELI5. ELI5 -- это библиотека Python, которая позволяет визуализировать и отлаживать различные модели машинного обучения с использованием унифицированного API.
|
||||||
|
\item Feature selection -- отбор самых важных признаков. Оценка информативности признаков: Вычисление дисперсии: чем больше дисперсия, тем информативнее признак
|
||||||
|
\[ Var(x_j) = \frac{1}{N}\sum_{i=1}^N(x_{ij} - \overline{x_j})^2\]
|
||||||
|
Позволяет убирать малоинформативные признаки, недостатки: никак не учитываются значения целевой переменной.
|
||||||
|
\item Вычисление корреляции между значениями признака и целевой переменной (задача регрессии)
|
||||||
|
\item Задача классификации: Подсчет процента успешной классификации для каждого из значений признака $p$. По теореме Байеса считаем $P(X_j|Y)$ -- вероятность признака $X_j$, если объект принадлежит положительному классу. Если $P(X_j|Y = 1) > 0,7 \cup P(X_j|Y = 1) < 0,3$, то считаем $X_j$ информативным признаком.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsection{ROC-кривая}
|
||||||
|
Число строк в квадрате справа равно числу единиц, число столбцов -- числу нулей. Стартуем из точки (0, 0)(левый нижний угол. Если значение метки класса в просматриваемой строке 1, то делаем шаг вверх; если 0, то делаем шаг вправо, если у нескольких объектов значения оценок равны, то делаем шаг в точку \textbf{а} блоков выше и \textbf{b} блоков правее, где \textbf{а} -- число единиц, \textbf{b} -- число нулей в рассматриваемой группе объектов.
|
||||||
|
|
||||||
|
Считаем сколько \% покрыто.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\fontsize{14}{1}\selectfont
|
||||||
|
\includesvg[scale=1.01]{pics/04-bdisdt-00-roc.svg}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
|
\textbf{Принятие решений на основе кривой.} Для того, чтобы решить, какие объекты отнести к классу 1, а какие к классу 0, нужно будет выбрать некоторый порог (объекты с оценками выше порога относим к классу 1, остальные -- 0). Выбору порога соответствует выбор точки на ROC-кривой. Здесь для порога $0.25$ выбрана точка (1/4,2/3).
|
||||||
|
|
||||||
|
\begin{tabular}{||r|c|c||}
|
||||||
|
\hline
|
||||||
|
id & $>0.25$ & класс \\ [0.5ex]
|
||||||
|
\hline
|
||||||
|
4 & 1 & 1 \\
|
||||||
|
1 & 1 & 0 \\
|
||||||
|
6 & 1 & 1 \\
|
||||||
|
3 & 0 & 0 \\
|
||||||
|
5 & 0 & 1 \\
|
||||||
|
2 & 0 & 0 \\
|
||||||
|
7 & 0 & 0 \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
|
||||||
Принятие решений на основе кривой.Для того, чтобы решить, какие объекты отнести к классу 1, а какие к классу 0, нужно будет выбрать некоторый порог (объекты с оценками выше порога относим к классу 1, остальные 0). Выбору порога соответствует выбор точки на ROC-кривой. Здесь для порога 0.25 выбрана точка (1/4,2/3), (табл. 3).
|
|
||||||
1/4 - это \% точек класса 0, которые неверно классифицированы алгоритмом (FPR = False Positive Rate),
|
1/4 - это \% точек класса 0, которые неверно классифицированы алгоритмом (FPR = False Positive Rate),
|
||||||
|
|
||||||
2/3 - \% точек класса 1, верно классифицированых алгоритмом (TPR = True Positive Rate).
|
2/3 - \% точек класса 1, верно классифицированых алгоритмом (TPR = True Positive Rate).
|
||||||
|
|
||||||
Отбор признаков
|
|
||||||
Могут быть зашумлены
|
|
||||||
Методы: обёртки, фильтры, внутренние методы.
|
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
|
@ -19,34 +19,54 @@ DevOps -- стратегия разработки ПО, призванная у
|
||||||
Методологии разработки - waterfall (последовательный переход от одного этапа к другому), agile (scrum, lean) -- гибкая методология, система идей. Ключевой принцип - разработка через короткие итерации.
|
Методологии разработки - waterfall (последовательный переход от одного этапа к другому), agile (scrum, lean) -- гибкая методология, система идей. Ключевой принцип - разработка через короткие итерации.
|
||||||
|
|
||||||
Водопадная модель разработки (Waterfall-разработка):
|
Водопадная модель разработки (Waterfall-разработка):
|
||||||
Системные и программные требования: закрепляются в PRD (product requirements documents, документ требований к продукту).
|
\begin{itemize}
|
||||||
Анализ: воплощается в моделях, схемах и бизнес-правилах.
|
\item Системные и программные требования: закрепляются в PRD (product requirements documents, документ требований к продукту).
|
||||||
Дизайн: разрабатывается внутренняя архитектура ПО, способы реализации требований; си внешний вид ПО, ной
|
\item Анализ: воплощается в моделях, схемах и бизнес-правилах.
|
||||||
его внутренняя структурная логи
|
\item Дизайн: разрабатывается внутренняя архитектура ПО, способы реализации требований; Не только интерфейс, и внешний вид ПО, но и его внутренняя структурная логика.
|
||||||
|
\item Кодинг: непосредственно пишется код программы, идёт интеграция ПО.
|
||||||
|
\item Тестирование: баг-тестеры (тестировщики) проверяют финальный продукт, занося в трекеры сведения о дефектах кода программы или функционала. В случае ошибок и наличия времени/финансов происходит исправление багов.
|
||||||
|
\item Операции: продукт адаптируется под разные операционные системы, регулярно обновляется для исправления обнаруженных пользователями багов и добавления функционала. В рамках стадии также осуществляется техническая поддержка клиентов.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
. Кодинг: непосредственно пишется код программы, идёт интеграция ПО.
|
Основные принципы гибкой методологии:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Люди и взаимодействие важнее процессов и инструментов
|
||||||
|
\item работающий продукт важнее исчерпывающей документации
|
||||||
|
\item сотрудничество с заказчиком важнее согласования условий контракта
|
||||||
|
\item готовность к изменениям важнее следования первоначальному плану.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
'Нетолько интерф
|
Обычно ИТ-команда это разработчики(Dev), тестировщики(QA), группа эксплуатации(Ops). Толчком к появлению девопс стало появление микросервисов. Цели девопс -- Сокращение времени выхода на рынок, надёжность (снижение частоты отказов новых релизов), сокращение времени выполнения исправлений, уменьшение количества времени на восстановления (в случае сбоя).
|
||||||
|
|
||||||
- Тестирование: баг-тестеры (т
|
|
||||||
продукт, занося в трекеры сведения о дефектах кода програм
|
|
||||||
функционала. В случае ошибок и наличия времени финансов происходит
|
|
||||||
исправление багов.
|
|
||||||
|
|
||||||
Операции: продукт эдаптируется под разные операционные системы,
|
|
||||||
регулярно обновляется для исправления обнаруженных пользователями
|
|
||||||
бэгов и добавления функционала. В рамках стадии также осуществляется
|
|
||||||
|
|
||||||
техническая поддержка клиентов:
|
|
||||||
|
|
||||||
|
|
||||||
Обычно ИТ-команда это разработчики(Dev), тестировщики(QA), группа эксплуатации(Ops). Толчком к появлению девопс стало появление микросервисов.
|
|
||||||
|
|
||||||
цели - надёжность, скорость выхода на рынок.
|
|
||||||
|
|
||||||
девопс предлагает представителям ранее разрозненных подразделений координировать свои действия. Культура: совместная работа и согласованность, изменения в сфере участия и ответственности, сокращение циклов выпуска (не количество, а сами циклы), непрерывное обучение.
|
девопс предлагает представителям ранее разрозненных подразделений координировать свои действия. Культура: совместная работа и согласованность, изменения в сфере участия и ответственности, сокращение циклов выпуска (не количество, а сами циклы), непрерывное обучение.
|
||||||
|
|
||||||
методики
|
Жизненный цикл приложения
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{Планирование} помогает обеспечить командам гибкость и прозрачность
|
||||||
|
\begin{itemize}
|
||||||
|
\item представляют, определяют и описывают функции и возможности создаваемых приложений
|
||||||
|
\item отслеживают ход работы на низком и высоком уровнях детализации
|
||||||
|
\item создают журналы невыполненной работы, отслеживая ошибки, и так далее.
|
||||||
|
\end{itemize}
|
||||||
|
\item \textbf{Разработка} включает написание, тестирование, проверку и интеграцию кода участниками команды. Быстро внедряют инновации, автоматизируя рутинные действия, а также запускают итерации с маленьким шагом при помощи автоматического тестирования и непрерывной интеграции.
|
||||||
|
\item \textbf{Доставка} -- это процесс последовательного и надёжного развёртывания приложений в рабочих средах. Этап доставки также включает развёртывание и настройку полностью управляемой базовой инфраструктуры, лежащей в основе этих сред.
|
||||||
|
\begin{itemize}
|
||||||
|
\item определяют процесс управления выпусками
|
||||||
|
\item устанавливают автоматические шлюзы, с помощью которых приложения перемещаются между этапами, пока не станут доступными клиентам
|
||||||
|
\end{itemize}
|
||||||
|
\item \textbf{Эксплуатация}.
|
||||||
|
\begin{itemize}
|
||||||
|
\item обслуживание
|
||||||
|
\item мониторинг
|
||||||
|
\item устранение неполадок приложений в рабочих средах
|
||||||
|
\end{itemize}
|
||||||
|
внедряя методики девопс, различные подразделения стремятся обеспечить надёжность системы и высокую доступность, свести простои к нулю, а также повысить уровень безопасности и усовершенствовать управление.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Девопс предполагает представителям ранее разрозненных подразделений компании координировать свои действия и совместно создавать более качественные и надёжные продукты (постоянная обратная связь и оптимизация). Совместная работа и согласованность, изменения в сфере участия и ответственности, сокращение циклов выпуска, непрерывное обучение.
|
||||||
|
|
||||||
|
методики девопс
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item непрерывная доставка (CI/CD)
|
\item непрерывная доставка (CI/CD)
|
||||||
\item управление версиями (git)
|
\item управление версиями (git)
|
||||||
|
@ -59,12 +79,11 @@ DevOps -- стратегия разработки ПО, призванная у
|
||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=12cm]{04-telematics-devops.png}
|
\includegraphics[width=12cm]{04-telematics-devops.png}
|
||||||
|
|
||||||
|
\includegraphics[width=12cm]{04-t-devops-table.jpg}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
(инструменты как таблица менделеева)
|
Внедрение облачных технологий в корне изменило способы создания развёртывания и эксплуатации приложений. Преимущества: затраты, скорость, глобальный масштаб, производительность, эффективность, надёжность, безопасность.
|
||||||
|
|
||||||
|
|
||||||
Внедрение облачных технологий в корне изменило способы создания развёртывания и эксплуатации приложений. Затраты, скорость, глобальный масштаб, производительность, эффективность, надёжность, безопасность.
|
|
||||||
|
|
||||||
Три способа развёртывания облачных служб:
|
Три способа развёртывания облачных служб:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
|
@ -80,7 +99,7 @@ DevOps -- стратегия разработки ПО, призванная у
|
||||||
\item Saas -- software (предоставление уже разработанного ПО как услуги);
|
\item Saas -- software (предоставление уже разработанного ПО как услуги);
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
В девопс облаке, с помощью девопс возможно:
|
В облаке, с помощью девопс возможно:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item создание собственных облачных приложений
|
\item создание собственных облачных приложений
|
||||||
\item тестирование и сборка приложений
|
\item тестирование и сборка приложений
|
||||||
|
@ -89,7 +108,17 @@ DevOps -- стратегия разработки ПО, призванная у
|
||||||
\item доставка ПО по запросу
|
\item доставка ПО по запросу
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
DevOps-инженер -- высококвалифицированный специалист, который отвечает за автоматизацию всех этапов создания приложений и обеспечивает взаимодействие программистов и системных администраторов. Прорабатывает сборку, доставку и тестирование. Build-инженер, Release-инженер, Automation-инженер
|
DevOps-инженер -- высококвалифицированный специалист, который отвечает за автоматизацию всех этапов создания приложений и обеспечивает взаимодействие программистов и системных администраторов. Прорабатывает сборку, доставку и тестирование. Build-инженер, Release-инженер, Automation-инженер, Security-инженер.
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item [+] высокий заработок
|
||||||
|
\item [+] востребованность
|
||||||
|
\item [+] интересные задачи
|
||||||
|
\item [+] перспектива карьерного роста
|
||||||
|
\item [-] непрерывное обучение (\textit{а минус ли это? прим. Овчинников})
|
||||||
|
\item [-] необходимость знать много из разных областей
|
||||||
|
\item [-] возможны стрессовые ситуации и высокая нагрузка
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
Необходимые знания:
|
Необходимые знания:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
|
|
|
@ -0,0 +1,197 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="210mm"
|
||||||
|
height="297mm"
|
||||||
|
viewBox="0 0 210 297"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
|
||||||
|
sodipodi:docname="04-bdisdt-00-roc.svg">
|
||||||
|
<defs
|
||||||
|
id="defs2" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.979899"
|
||||||
|
inkscape:cx="168.14713"
|
||||||
|
inkscape:cy="433.61837"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:window-width="1533"
|
||||||
|
inkscape:window-height="1205"
|
||||||
|
inkscape:window-x="513"
|
||||||
|
inkscape:window-y="83"
|
||||||
|
inkscape:window-maximized="0">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid10" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.264999"
|
||||||
|
id="rect12"
|
||||||
|
width="78.052086"
|
||||||
|
height="78.052086"
|
||||||
|
x="22.489584"
|
||||||
|
y="71.4375" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 22.489583,95.249999 H 100.54167"
|
||||||
|
id="path14" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 22.489583,123.03125 H 100.54167"
|
||||||
|
id="path16" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 60.854166,71.437499 V 149.48958"
|
||||||
|
id="path18" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 41.010416,71.437499 V 149.48958"
|
||||||
|
id="path20" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 80.697916,71.437499 V 149.48958"
|
||||||
|
id="path22" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#0000c1;stroke-width:1.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="M 22.489583,149.48958 V 123.03125 H 41.010416 V 95.249999 l 19.84375,-23.8125 h 39.687504"
|
||||||
|
id="path24" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1.265;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="path851"
|
||||||
|
cx="41.010418"
|
||||||
|
cy="95.25"
|
||||||
|
r="3.96875" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#008200;stroke-width:1.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="M 22.489583,149.48958 41.010416,95.249999 100.54167,71.437499"
|
||||||
|
id="path853" />
|
||||||
|
<path
|
||||||
|
style="fill:#00c200;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
|
||||||
|
d="m 230.52405,346.03852 v -13.33365 l 36.23922,-14.50293 c 19.93158,-7.97662 36.52333,-14.61507 36.87057,-14.75213 0.5005,-0.19755 0.63135,5.57177 0.63135,27.83657 v 28.08578 h -36.87057 -36.87057 z"
|
||||||
|
id="path855"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#00c200;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 305.78741,330.96161 0.007,-28.41054 35.72716,-14.25169 c 19.64993,-7.83844 36.1249,-14.39718 36.61103,-14.57498 0.8374,-0.30629 0.88389,1.93721 0.88389,42.66223 v 42.98553 h -36.61803 -36.61803 z"
|
||||||
|
id="path857"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#00c200;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 172.44028,357.656 v -1.71615 l 27.90546,-11.1638 c 15.34801,-6.14009 28.07593,-11.16357 28.28428,-11.16329 0.20834,2.8e-4 0.3788,5.79626 0.3788,12.87995 v 12.87945 h -28.28427 -28.28427 z"
|
||||||
|
id="path859"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#00c200;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 157.91653,420.92092 0.12908,-43.50711 2.12837,-0.62841 c 6.33616,-1.87077 11.23819,-7.39536 12.0925,-13.62829 l 0.3111,-2.26973 h 28.21562 28.21562 v 51.77032 51.77032 h -35.61068 -35.61068 z"
|
||||||
|
id="path861"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#00c200;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 122.94281,462.2635 c 0,-0.41471 28.82188,-84.40442 29.03854,-84.62108 0.14073,-0.14073 0.25588,18.87389 0.25588,42.25471 v 42.51058 h -14.64721 c -8.05597,0 -14.64721,-0.0649 -14.64721,-0.14421 z"
|
||||||
|
id="path863"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#00c200;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 88.220801,563.80178 c 0.129983,-0.34724 7.588256,-22.16654 16.573939,-48.48733 l 16.33761,-47.85597 h 16.56259 16.56259 v 48.48732 48.48732 H 121.121 c -26.298552,0 -33.087763,-0.13028 -32.900199,-0.63134 z"
|
||||||
|
id="path865"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#00c200;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 155.77276,515.9458 c 0,-48.1506 0.007,-48.48732 1.01016,-48.48732 0.56119,0 1.01015,-0.33672 1.01015,-0.75762 0,-0.66627 4.29315,-0.75761 35.60788,-0.75761 h 35.60787 v 49.24494 49.24493 h -36.61803 -36.61803 z"
|
||||||
|
id="path867"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#00c200;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 230.52405,515.18819 v -49.24494 h 36.87057 36.87057 v 49.24494 49.24493 h -36.87057 -36.87057 z"
|
||||||
|
id="path869"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#00c200;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 230.52405,412.6577 v -51.77032 h 36.87057 36.87057 v 51.77032 51.77032 h -36.87057 -36.87057 z"
|
||||||
|
id="path871"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#00c200;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 305.78042,412.6577 v -51.77032 h 36.61803 36.61803 v 51.77032 51.77032 h -36.61803 -36.61803 z"
|
||||||
|
id="path873"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#00c200;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 305.78042,515.18819 v -49.24494 h 36.61803 36.61803 v 49.24494 49.24493 h -36.61803 -36.61803 z"
|
||||||
|
id="path875"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#e3a8c2;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 230.52405,300.52194 c 0,-14.53378 0.13796,-26.78457 0.30658,-27.22398 0.27565,-0.71833 3.99491,-0.79892 36.87057,-0.79892 h 36.56399 l -0.007,12.50063 -0.007,12.50064 -36.86341,14.72334 -36.8634,14.72335 z"
|
||||||
|
id="path877"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#e3a8c2;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 305.78042,284.6749 v -12.17586 h 30.13621 c 16.57492,0 30.04152,0.0925 29.92577,0.2056 -0.14941,0.14598 -46.94861,18.96358 -59.43064,23.89662 -0.49452,0.19544 -0.63134,-2.3893 -0.63134,-11.92636 z"
|
||||||
|
id="path879"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#e3a8c2;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 169.21286,349.53711 -0.86342,-1.31775 30.33427,-36.40036 30.33426,-36.40036 -0.13084,26.11695 -0.13085,26.11695 -28.28427,11.32649 c -15.55635,6.22956 -28.75934,11.45008 -29.33999,11.60116 -0.76096,0.19798 -1.29681,-0.0933 -1.91916,-1.04308 z"
|
||||||
|
id="path881"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<path
|
||||||
|
style="fill:#e3a8c2;fill-opacity:1;stroke:none;stroke-width:2.41482;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 87.623055,507.99085 -0.03559,-40.53237 h 13.889595 c 7.63928,0 13.8896,0.0794 13.8896,0.17637 0,0.23925 -26.001001,76.32247 -26.952702,78.86806 -0.681348,1.82246 -0.758801,-1.949 -0.790903,-38.51206 z"
|
||||||
|
id="path883"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
|
||||||
|
x="6.614583"
|
||||||
|
y="111.125"
|
||||||
|
id="text887"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan885"
|
||||||
|
x="6.614583"
|
||||||
|
y="111.125"
|
||||||
|
style="stroke-width:0.264583">TPR</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
|
||||||
|
x="56.885414"
|
||||||
|
y="157.42708"
|
||||||
|
id="text891"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan889"
|
||||||
|
x="56.885414"
|
||||||
|
y="157.42708"
|
||||||
|
style="stroke-width:0.264583">FPR</tspan></text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 10 KiB |
Binary file not shown.
After Width: | Height: | Size: 346 KiB |
Loading…
Reference in New Issue