Skip to content

Commit f19bb71

Browse files
Written all IS-SSL Programmer's Manual except for testing #159
1 parent 547ed82 commit f19bb71

File tree

5 files changed

+221
-3
lines changed

5 files changed

+221
-3
lines changed

docs/anexos.pdf

357 KB
Binary file not shown.

docs/anexos.tex

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,31 @@
4545
% Evitar solapes en el header
4646
\nouppercaseheads
4747

48+
% Code
49+
\usepackage{listings}
50+
\usepackage{color}
51+
52+
\definecolor{dkgreen}{rgb}{0,0.6,0}
53+
\definecolor{gray}{rgb}{0.5,0.5,0.5}
54+
\definecolor{mauve}{rgb}{0.58,0,0.82}
55+
\lstset{frame=tb,
56+
aboveskip=3mm,
57+
belowskip=3mm,
58+
showstringspaces=false,
59+
columns=flexible,
60+
basicstyle={\small\ttfamily},
61+
numbers=none,
62+
numberstyle=\tiny\color{gray},
63+
keywordstyle=\color{blue},
64+
commentstyle=\color{red},
65+
stringstyle=\color{mauve},
66+
breaklines=true,
67+
breakatwhitespace=true,
68+
tabsize=3,
69+
captionpos=b
70+
}
71+
72+
4873
% Imagenes
4974
\usepackage{graphicx}
5075
\newcommand{\imagen}[2]{
@@ -56,6 +81,15 @@
5681
\FloatBarrier
5782
}
5883

84+
\newcommand{\imagenRuta}[3]{
85+
\begin{figure}[!h]
86+
\centering
87+
\includegraphics[width=0.9\textwidth]{#1}
88+
\caption{#2}\label{fig:#3}
89+
\end{figure}
90+
\FloatBarrier
91+
}
92+
5993
\newcommand{\imagenflotante}[2]{
6094
\begin{figure}%[!h]
6195
\centering
@@ -65,7 +99,6 @@
6599
}
66100

67101

68-
69102
% El comando \figura nos permite insertar figuras comodamente, y utilizando
70103
% siempre el mismo formato. Los parametros son:
71104
% 1 -> Porcentaje del ancho de página que ocupará la figura (de 0 a 1)

docs/bibliografiaAnexos.bib

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,4 +209,12 @@ @ARTICLE{720574
209209

210210
@ARTICLE{IEEE1220722020, author={}, journal={IEEE Std 12207-2-2020}, title={Systems and software engineering--Software life cycle processes--Part 2: Relation and mapping between ISO/IEC/IEEE 12207:2017 and ISO/IEC 12207:2008}, year={2020}, volume={}, number={}}
211211

212-
@misc{ingenieriasoftwareytiemporeal_2020, title={IEEE830-ESP - ctr.unican.es}, url={https://ctr.unican.es/asignaturas/is1/IEEE830_esp.pdf}, journal={ISTR - Ingeniería Software y Tiempo Real}, author={Ingeniería Software y Tiempo Real, ISTR}, year={2020}}
212+
@misc{ingenieriasoftwareytiemporeal_2020, title={IEEE830-ESP - ctr.unican.es}, url={https://ctr.unican.es/asignaturas/is1/IEEE830_esp.pdf}, journal={ISTR - Ingeniería Software y Tiempo Real}, author={Ingeniería Software y Tiempo Real, ISTR}, year={2020}}
213+
214+
@misc{pythonGetIt, title={Python Download}, url={https://www.python.org/getit/}}
215+
216+
@misc{gitkraken, title={GitKraken}, url={https://www.gitkraken.com/}}
217+
218+
@misc{VSCode, title={Visual Studio Code}, url= {https://code.visualstudio.com/}}
219+
220+
@misc{PyCharm, title={PyCharm}, url= {https://www.jetbrains.com/pycharm/}}
440 KB
Loading

docs/tex/D_Manual_programador.tex

Lines changed: 178 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
\section{Introducción}
44
En este anexo se va a describir con detalle la documentación técnica de programación. Se describirá la estructura de directorios que posee, la instalación del propio entorno de desarrollo, cómo llevar a cabo su compilación, instalación y ejecución; además de las pruebas que se han realizado.
55

6-
Se debe recordar que el proyecto se encuentra dividido en dos repositorios diferenciados, UBUMLaaS e IS-SSL~\footnote{Biblioteca de algoritmos de selección de instancias y aprendizaje semi-supervisado programado.}; es por ello que, se dividirá en dos secciones respectivamente, y tantas subsecciones como son necesarias para cada uno de ellos.
6+
Se debe recordar que el proyecto se encuentra dividido en dos repositorios diferenciados, UBUMLaaS e IS-SSL\footnote{Biblioteca de algoritmos de selección de instancias y aprendizaje semi-supervisado programado.}; es por ello que, se dividirá en dos secciones respectivamente, y tantas subsecciones como son necesarias para cada uno de ellos.
77

88
\section{UBUMLaaS}
99

@@ -74,7 +74,184 @@ \subsection{Estructura de directorios}
7474
\end{itemize}
7575

7676
\subsection{Manual del programador}
77+
En esta subsección se describen todos aquellos métodos seguidos por el equipo de desarrollo para, valga la redundancia, desarrollar el proyecto. De tal forma que un futuro desarrollador no tenga inconvenientes a la hora de retomar el proyecto.
78+
79+
\subsubsection{Entorno de desarrollo}
80+
Para poder continuar con el desarrollo del proyecto, se requiere tener instalado el siguiente \textit{software} en el equipo:
81+
\begin{itemize}
82+
\tightlist
83+
\item Python 3.7+.
84+
\item Bibliotecas Python.
85+
\item Git
86+
\item VSCode/PyCharm/\dots.
87+
\end{itemize}
88+
89+
En los siguientes apartados se detalla la instalación de cada uno de los componentes anteriormente citados.
90+
91+
\subsubsection{Python 3.7+}
92+
El desarrollo se ha realizado siguiendo las últimas formas de programación disponibles a partir de la versión 3.7 de Python. El desarrollo se comenzó después de que se dejara de mantener Python 2, por lo que se trabajó desde el inicio con versiones de Python 3. Se puede obtener la última versión disponible de Python desde~\cite{pythonGetIt}. Es importante que el desarrollador se asegure que los binarios han sido añadidos al \texttt{path} del sistema que esté utilizando.
93+
94+
\subsubsection{Bibliotecas Python}
95+
Esta sección es la más importante de todas junto con la anterior, debido a que el proyecto depende de (está construido utilizando) bibliotecas de $3^{os}$. Y en especial, determinadas versiones de las mismas.
96+
97+
En la Tabla~\ref{tab:bibliotecas-python} se detallan las bibliotecas necesarias para utilizar el proyecto tal y como se encuentra en el repositorio. Para el uso en exclusiva de las librerías de \texttt{IS-SSL} se deben utilizar aquellas que se encuentran en negrita.
98+
99+
\begin{table}[]
100+
\centering
101+
\begin{tabular}{c|c}
102+
Biblioteca & Versión \\
103+
\toprule
104+
\rowcolor[HTML]{EFEFEF}
105+
\textbf{\texttt{NumPy}} & \textbf{1.20.3} \\ \midrule
106+
\textbf{\texttt{Scikit-learn}} & \textbf{0.24.2} \\ \midrule
107+
\rowcolor[HTML]{EFEFEF}
108+
\texttt{Matplotlib} & 3.4.3 \\ \midrule
109+
\textbf{\texttt{Pandas}} & \textbf{1.3.4} \\ \midrule
110+
\rowcolor[HTML]{EFEFEF}
111+
\texttt{YagMail} & 0.15.277 \\ \midrule
112+
\textbf{\texttt{Scipy}} & \textbf{1.7.1} \\
113+
\rowcolor[HTML]{EFEFEF}
114+
\bottomrule
115+
\end{tabular}
116+
\caption{Bibliotecas utilizadas y sus versiones.}\label{tab:bibliotecas-python}
117+
\end{table}
118+
119+
Se recomienda el uso de un entorno de desarrollo de \texttt{Conda}, se facilitan ficheros de configuración tanto para \texttt{Conda} como para instalación con \texttt{PIP}.
120+
121+
\subsubsection{Git}
122+
\imagenRuta{../img/anexos/manual-programador/gitkraken}{Interfaz de \texttt{GitKraken}.}{gitkraken}
123+
Para poder utilizar el repositorio ha de utilizarse el gestor de versiones \texttt{Git}. Se recomienda utilizar GUI con soporte a VC\footnote{Control de versiones (\textit{Version Control}).} tales que no requieran de una interfaz de comandos para su utilización, pero eso se deja a decisión del futuro desarrollador.
124+
125+
En la Figura~\ref{fig:gitkraken} se aprecia como el \textit{software} \texttt{GitKraken} permite, de forma intuitiva y sencilla, el uso de \texttt{Git} y todo su potencial. Se puede obtener desde~\cite{gitkraken}.
126+
127+
\subsubsection{VSCode/Pycharm/\dots}
128+
El desarrollo propio del producto puede ser realizado en cualquier editor de textos, incluso en \texttt{Vi} si así se desea. La ventaja de herramientas como \texttt{Visual Studio Code} o \texttt{PyCharm}, es que permiten el uso de \textit{plugins} añadidos a los complementos del propio IDE, lo cual permite la generación de código un proceso mucho más sencillo y directo, reduciendo el número de errores ocasionados y permitiendo una depuración o refactorización del código fuente mucho más eficiente y sencilla.
129+
130+
Se puede obtener cada una de las herramientas desde~\cite{VSCode, PyCharm}, respectivamente.
77131

78132
\subsection{Compilación, instalación y ejecución del proyecto}
133+
En esta subsección se va a detallar el proceso a seguir para poder hacer uso del proyecto en local, modificarlo y/o utilizarlo.
134+
135+
\subsubsection{Adquisición del código fuente}
136+
Lo primero que se necesita es obtener el código en el equipo, para ello podemos seguir una de las siguientes aproximaciones:
137+
\begin{itemize}
138+
\item Mediante el uso de la terminal.
139+
\begin{enumerate}
140+
\tightlist
141+
\item Apertura de la terminal.
142+
\item Desplazarse al directorio en donde se desee clonar el repositorio (usando \texttt{cd} en Unix o \texttt{dir} en Windows).
143+
\item Hacer uso del siguiente comando:\\
144+
\texttt{git clone https://github.com/dpr1005/\\Semisupervised-learning-and-instance-selection-\\methods.git}
145+
\item Se dispone de una copia idéntica a la alojada en el repositorio de \texttt{GitHub}.
146+
\end{enumerate}
147+
148+
\item Descarga desde el navegador.
149+
\begin{itemize}
150+
\tightlist
151+
\item Apertura del navegador preferido.
152+
\item Introducir en la barra de búsqueda la siguiente dirección:\\
153+
\texttt{https://github.com/dpr1005/\\Semisupervised-learning-and-instance-selection-methods/\\archive/refs/heads/main.zip}
154+
\item Aceptar la descarga en caso de tener habilitada la comprobación.
155+
\item Navegar con el Explorador de archivos del sistema hasta el directorio de descarga.
156+
\end{itemize}
157+
158+
\item Uso de \texttt{GitKraken}.
159+
\begin{itemize}
160+
\tightlist
161+
\item Apertura de la aplicación.
162+
\item Hacer \textit{click} en \textit{Clone a repo}.
163+
\item En \textit{Repository Management} $\rightarrow$ \textit{Clone} $\rightarrow$ \textit{Clone with URL}:
164+
\begin{itemize}
165+
\item Indicar la ruta local en la que nos interesa que se clone el repositorio.
166+
\item En URL introducir:\\
167+
\texttt{git clone https://github.com/dpr1005/\\Semisupervised-learning-and-instance-selection-\\methods.git}
168+
\end{itemize}
169+
\item Hacer \textit{click} en \textit{Clone the repo!}.
170+
\end{itemize}
171+
\end{itemize}
172+
173+
\subsubsection{Importar proyecto en PyCharm}
174+
Importar un proyecto en \texttt{PyCharm} es tan sencillo como:
175+
\begin{enumerate}
176+
\tightlist
177+
\item Apertura de \texttt{PyCharm}.
178+
\item Hacer \textit{click} en \textit{Open.} (Notar que también podríamos clonar el proyecto en este momento haciendo \textit{click} en \textit{Get from VCS}).
179+
\item Seleccionar la ruta en el equipo dónde se encuentra el directorio raíz del proyecto.
180+
\end{enumerate}
181+
182+
\subsubsection{Crear entorno virtual de trabajo}
183+
Como se ha comentado previamente, para poder trabajar con este proyecto se requieren de una serie de bibliotecas de Python. El proyecto está preparado para crear un entorno de \texttt{Conda} propio, de forma que no interfiera con otros proyectos y sea más sencillo de mantener y actualizar.
184+
185+
Se recomienda que los binarios de anaconda o miniconda estén configurados en el \texttt{path} del sistema para poder utilizar el comando \texttt{conda} desde la línea de comandos.
186+
187+
El proceso de creación del entrono virtual con \texttt{Conda} es el siguiente:
188+
\begin{enumerate}
189+
\tightlist
190+
\item Apertura de la terminal.
191+
\item Navegar hasta la raíz del proyecto.
192+
\item Crear el entorno con:\\
193+
\texttt{conda env create -f is-ssl.yml}
194+
\item Cuando se desee utilizar se debe activar:\\
195+
\texttt{conda activate is-ssl}
196+
\end{enumerate}
197+
198+
En caso de que se desee añadir al entorno (\texttt{venv}) actual en el que se encuentre el usuario:
199+
\begin{enumerate}
200+
\tightlist
201+
\item Apertura de la terminal.
202+
\item Navegar hasta la raíz del proyecto.
203+
\item Instalar los requerimientos del proyecto con:\\
204+
\texttt{pip install -r requeriments.txt}
205+
\end{enumerate}
206+
207+
\subsubsection{Uso del proyecto}
208+
La forma de usar la biblioteca es muy sencilla, todo \texttt{IS-SSL} ha sido codificado siguiendo la misma guía de estilo (PEP 8), de forma que cualquier programador habituado con el uso de bibliotecas en Python lo encuentre intuitivo y sencillo.
209+
210+
Todos los métodos de selección de instancias y algoritmos de aprendizaje semi-supervisado son clases de Python, de manera que para utilizarlo hay que hacer una importación del paquete y de la clase.
211+
212+
Un ejemplo del uso completo de este \textit{software} es lo encontramos en Listing~\ref{lst:ejemplo}, donde se detallan los tipos de datos de entrada.
213+
214+
Según la codificación realizada, todos los métodos accesibles de las clases esperan la entrada de objetos de tipo \texttt{DataFrame} de la librería de \texttt{Pandas}. Internamente en función de las operaciones que tenga que realizar, serán convertidos estos objetos a listas de Python o arreglos de \texttt{NumPy}. Independientemente de las operaciones internas, siempre la salida producida (en caso de tenerla) serán objetos de \texttt{Pandas}, no teniendo que ser necesariamente el mismo objeto de entrada modificado, en la mayor parte de las ocasiones serán objetos nuevos.
215+
216+
\pagebreak
217+
\begin{lstlisting}[language=Python, caption={Ejemplo de uso de IS-SSL}, label={lst:ejemplo}]
218+
from ssl_dnx import TriTraining
219+
from is_dnx import ENN
220+
from sklearn.naive_bayes import GaussianNB
221+
from sklearn.neighbors import KNeighborsClassifier
222+
from sklearn.tree import DecisionTreeClassifier
223+
from sklearn.datasets import load_iris
224+
225+
if __name__ == "__main__":
226+
model = TriTraining(
227+
random_state = 42,
228+
c1 = GaussianNB, c1_params = None,
229+
c2 = KNeighborsClassifier, c2_params = {n_neighbors: 2},
230+
c3 = DecisionTreeClassifier, c3_params = None
231+
)
232+
filter_model = ENN(nearest_neighbors = 5, power_parameter = 2)
233+
234+
iris = load_iris()
235+
X = iris['data']
236+
y = iris['target']
237+
238+
X = pd.DataFrame(X)
239+
y = pd.DataFrame(y)
240+
X, y = filter_model.filter(X, y)
241+
242+
val = [True if i % 2 == 0 else False for i in range(len(y))]
243+
y[val] = -1
244+
245+
X, X_test, y, y_test = train_test_split(X.to_numpy(), y.to_numpy())
246+
247+
X = pd.DataFrame(X)
248+
y = pd.DataFrame(y)
249+
250+
model.fit(X, y)
251+
y_pred = model.predict(X_test)
252+
print(accuracy_score(y_true=y_test, y_pred=y_pred))
253+
254+
\end{lstlisting}
255+
\pagebreak
79256

80257
\subsection{Pruebas del sistema}

0 commit comments

Comments
 (0)