This commit is contained in:
Rémi Cérès 2020-05-06 11:12:48 +02:00
джерело bf66f4da97
коміт fd97eade78
15 змінених файлів з 1530 додано та 0 видалено

Бінарний файл не відображається.

Після

Ширина:  |  Висота:  |  Розмір: 64 KiB

Бінарний файл не відображається.

Після

Ширина:  |  Висота:  |  Розмір: 77 KiB

Бінарний файл не відображається.

Після

Ширина:  |  Висота:  |  Розмір: 50 KiB

Бінарний файл не відображається.

Після

Ширина:  |  Висота:  |  Розмір: 56 KiB

Бінарний файл не відображається.

Після

Ширина:  |  Висота:  |  Розмір: 38 KiB

@ -0,0 +1,33 @@
\begin{tikzpicture}
\node[label={below:Médecin}] (user) {
\includegraphics[width=1.33cm]{icons/doctor}
};
\node[system, right=of user] (system) {
Système de\\recherche
};
\node[agent, right=of system] (kb) {
Bases de\\connaissances
};
\draw[link]
([yshift=5pt]user.east)
-- node[above=5pt, link label] {signes et\\symptômes}
([yshift=5pt]system.west);
\draw[link]
([yshift=-5pt]system.west)
-- node[below=5pt, link label] {maladies\\associées}
([yshift=-5pt]user.east);
\draw[link]
([yshift=5pt]system.east)
-- node[above=5pt, link label] {requêtes}
([yshift=5pt]kb.west);
\draw[link]
([yshift=-5pt]kb.west)
-- node[below=5pt, link label] {connaissances}
([yshift=-5pt]system.east);
\end{tikzpicture}

@ -0,0 +1,805 @@
%% Creator: Matplotlib, PGF backend
%%
%% To include the figure in your LaTeX document, write
%% \input{<filename>.pgf}
%%
%% Make sure the required packages are loaded in your preamble
%% \usepackage{pgf}
%%
%% Figures using additional raster images can only be included by \input if
%% they are in the same directory as the main LaTeX file. For loading figures
%% from other directories you can use the `import` package
%% \usepackage{import}
%% and then include the figures with
%% \import{<path to file>}{<filename>.pgf}
%%
%% Matplotlib used the following preamble
%% \usepackage{fontspec}
%%
\begingroup%
\makeatletter%
\begin{pgfpicture}%
\pgfpathrectangle{\pgfpointorigin}{\pgfqpoint{4.700000in}{3.300000in}}%
\pgfusepath{use as bounding box, clip}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetmiterjoin%
\definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.000000pt}%
\definecolor{currentstroke}{rgb}{1.000000,1.000000,1.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{4.700000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{4.700000in}{3.300000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{3.300000in}}%
\pgfpathclose%
\pgfusepath{fill}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetmiterjoin%
\definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.000000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetstrokeopacity{0.000000}%
\pgfsetdash{}{0pt}%
\pgfpathmoveto{\pgfqpoint{0.634445in}{0.681532in}}%
\pgfpathlineto{\pgfqpoint{4.550000in}{0.681532in}}%
\pgfpathlineto{\pgfqpoint{4.550000in}{3.150000in}}%
\pgfpathlineto{\pgfqpoint{0.634445in}{3.150000in}}%
\pgfpathclose%
\pgfusepath{fill}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{0.822204in}{0.681532in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=0.550566in,y=0.353546in,left,base,rotate=30.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont janv.}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{1.125356in}{0.681532in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=0.877576in,y=0.365557in,left,base,rotate=30.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont févr.}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{1.399171in}{0.681532in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=1.130823in,y=0.353682in,left,base,rotate=30.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont mars}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{1.702324in}{0.681532in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=1.454543in,y=0.365557in,left,base,rotate=30.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont avril}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{1.995697in}{0.681532in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=1.788452in,y=0.388959in,left,base,rotate=30.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont mai}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{2.298849in}{0.681532in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=2.080616in,y=0.384380in,left,base,rotate=30.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont juin}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{2.592223in}{0.681532in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=2.373989in,y=0.383057in,left,base,rotate=30.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont juil.}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{2.895375in}{0.681532in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=2.647956in,y=0.365765in,left,base,rotate=30.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont août}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{3.198527in}{0.681532in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=2.937155in,y=0.357709in,left,base,rotate=30.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont sept.}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{3.491900in}{0.681532in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=3.281287in,y=0.387015in,left,base,rotate=30.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont oct.}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{3.795053in}{0.681532in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=3.560985in,y=0.373473in,left,base,rotate=30.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont nov.}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{4.088426in}{0.681532in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=3.867830in,y=0.381251in,left,base,rotate=30.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont déc.}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=2.592223in,y=0.273333in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Jours de lannée}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{0.634445in}{0.745913in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=0.467778in,y=0.697719in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 0\)}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{0.634445in}{1.228915in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=0.328889in,y=1.180720in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 200\)}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{0.634445in}{1.711916in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=0.328889in,y=1.663722in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 400\)}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{0.634445in}{2.194918in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=0.328889in,y=2.146723in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 600\)}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetroundjoin%
\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{0.000000in}{0.000000in}}{%
\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}%
\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}%
\pgfusepath{stroke,fill}%
}%
\begin{pgfscope}%
\pgfsys@transformshift{0.634445in}{2.677919in}%
\pgfsys@useobject{currentmarker}{}%
\end{pgfscope}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=0.328889in,y=2.629725in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 800\)}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=0.273333in,y=1.915766in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Vues par jour}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfpathrectangle{\pgfqpoint{0.634445in}{0.681532in}}{\pgfqpoint{3.915555in}{2.468468in}}%
\pgfusepath{clip}%
\pgfsetrectcap%
\pgfsetroundjoin%
\pgfsetlinewidth{1.505625pt}%
\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfpathmoveto{\pgfqpoint{0.812425in}{2.716401in}}%
\pgfpathlineto{\pgfqpoint{0.841762in}{2.813801in}}%
\pgfpathlineto{\pgfqpoint{0.861320in}{2.870612in}}%
\pgfpathlineto{\pgfqpoint{0.880879in}{2.919099in}}%
\pgfpathlineto{\pgfqpoint{0.900437in}{2.958419in}}%
\pgfpathlineto{\pgfqpoint{0.910216in}{2.974585in}}%
\pgfpathlineto{\pgfqpoint{0.919995in}{2.988485in}}%
\pgfpathlineto{\pgfqpoint{0.929774in}{3.000224in}}%
\pgfpathlineto{\pgfqpoint{0.939553in}{3.009943in}}%
\pgfpathlineto{\pgfqpoint{0.949332in}{3.017813in}}%
\pgfpathlineto{\pgfqpoint{0.959111in}{3.024030in}}%
\pgfpathlineto{\pgfqpoint{0.968891in}{3.028798in}}%
\pgfpathlineto{\pgfqpoint{0.988449in}{3.034820in}}%
\pgfpathlineto{\pgfqpoint{1.008007in}{3.037411in}}%
\pgfpathlineto{\pgfqpoint{1.027565in}{3.037710in}}%
\pgfpathlineto{\pgfqpoint{1.047123in}{3.036281in}}%
\pgfpathlineto{\pgfqpoint{1.066682in}{3.033061in}}%
\pgfpathlineto{\pgfqpoint{1.086240in}{3.027440in}}%
\pgfpathlineto{\pgfqpoint{1.105798in}{3.018457in}}%
\pgfpathlineto{\pgfqpoint{1.125356in}{3.005057in}}%
\pgfpathlineto{\pgfqpoint{1.144914in}{2.986359in}}%
\pgfpathlineto{\pgfqpoint{1.164473in}{2.961863in}}%
\pgfpathlineto{\pgfqpoint{1.184031in}{2.931579in}}%
\pgfpathlineto{\pgfqpoint{1.203589in}{2.896042in}}%
\pgfpathlineto{\pgfqpoint{1.223147in}{2.856240in}}%
\pgfpathlineto{\pgfqpoint{1.252485in}{2.791409in}}%
\pgfpathlineto{\pgfqpoint{1.311159in}{2.660156in}}%
\pgfpathlineto{\pgfqpoint{1.340497in}{2.600603in}}%
\pgfpathlineto{\pgfqpoint{1.369834in}{2.546877in}}%
\pgfpathlineto{\pgfqpoint{1.399171in}{2.498080in}}%
\pgfpathlineto{\pgfqpoint{1.477404in}{2.372526in}}%
\pgfpathlineto{\pgfqpoint{1.506741in}{2.318493in}}%
\pgfpathlineto{\pgfqpoint{1.526300in}{2.278440in}}%
\pgfpathlineto{\pgfqpoint{1.545858in}{2.234801in}}%
\pgfpathlineto{\pgfqpoint{1.575195in}{2.162697in}}%
\pgfpathlineto{\pgfqpoint{1.604533in}{2.083760in}}%
\pgfpathlineto{\pgfqpoint{1.663207in}{1.915812in}}%
\pgfpathlineto{\pgfqpoint{1.702324in}{1.807390in}}%
\pgfpathlineto{\pgfqpoint{1.731661in}{1.733637in}}%
\pgfpathlineto{\pgfqpoint{1.751219in}{1.689520in}}%
\pgfpathlineto{\pgfqpoint{1.770777in}{1.650013in}}%
\pgfpathlineto{\pgfqpoint{1.790336in}{1.615329in}}%
\pgfpathlineto{\pgfqpoint{1.809894in}{1.585431in}}%
\pgfpathlineto{\pgfqpoint{1.829452in}{1.560052in}}%
\pgfpathlineto{\pgfqpoint{1.849010in}{1.538739in}}%
\pgfpathlineto{\pgfqpoint{1.868568in}{1.520912in}}%
\pgfpathlineto{\pgfqpoint{1.888127in}{1.505939in}}%
\pgfpathlineto{\pgfqpoint{1.907685in}{1.493206in}}%
\pgfpathlineto{\pgfqpoint{1.937022in}{1.477143in}}%
\pgfpathlineto{\pgfqpoint{1.976139in}{1.459345in}}%
\pgfpathlineto{\pgfqpoint{2.034813in}{1.436245in}}%
\pgfpathlineto{\pgfqpoint{2.083709in}{1.416207in}}%
\pgfpathlineto{\pgfqpoint{2.113046in}{1.401961in}}%
\pgfpathlineto{\pgfqpoint{2.142384in}{1.385278in}}%
\pgfpathlineto{\pgfqpoint{2.171721in}{1.366198in}}%
\pgfpathlineto{\pgfqpoint{2.230395in}{1.324186in}}%
\pgfpathlineto{\pgfqpoint{2.269512in}{1.297217in}}%
\pgfpathlineto{\pgfqpoint{2.308628in}{1.273347in}}%
\pgfpathlineto{\pgfqpoint{2.357524in}{1.247068in}}%
\pgfpathlineto{\pgfqpoint{2.416199in}{1.215235in}}%
\pgfpathlineto{\pgfqpoint{2.465094in}{1.185454in}}%
\pgfpathlineto{\pgfqpoint{2.523769in}{1.149438in}}%
\pgfpathlineto{\pgfqpoint{2.553106in}{1.133810in}}%
\pgfpathlineto{\pgfqpoint{2.582443in}{1.120843in}}%
\pgfpathlineto{\pgfqpoint{2.611781in}{1.110768in}}%
\pgfpathlineto{\pgfqpoint{2.641118in}{1.103363in}}%
\pgfpathlineto{\pgfqpoint{2.670455in}{1.098098in}}%
\pgfpathlineto{\pgfqpoint{2.709572in}{1.093276in}}%
\pgfpathlineto{\pgfqpoint{2.797584in}{1.085617in}}%
\pgfpathlineto{\pgfqpoint{2.866038in}{1.081161in}}%
\pgfpathlineto{\pgfqpoint{2.905154in}{1.080919in}}%
\pgfpathlineto{\pgfqpoint{2.934491in}{1.082846in}}%
\pgfpathlineto{\pgfqpoint{2.963829in}{1.087237in}}%
\pgfpathlineto{\pgfqpoint{2.993166in}{1.094685in}}%
\pgfpathlineto{\pgfqpoint{3.012724in}{1.101658in}}%
\pgfpathlineto{\pgfqpoint{3.032282in}{1.110489in}}%
\pgfpathlineto{\pgfqpoint{3.051841in}{1.121438in}}%
\pgfpathlineto{\pgfqpoint{3.071399in}{1.134811in}}%
\pgfpathlineto{\pgfqpoint{3.090957in}{1.150955in}}%
\pgfpathlineto{\pgfqpoint{3.110515in}{1.170239in}}%
\pgfpathlineto{\pgfqpoint{3.130073in}{1.193015in}}%
\pgfpathlineto{\pgfqpoint{3.149632in}{1.219563in}}%
\pgfpathlineto{\pgfqpoint{3.169190in}{1.250032in}}%
\pgfpathlineto{\pgfqpoint{3.188748in}{1.284387in}}%
\pgfpathlineto{\pgfqpoint{3.208306in}{1.322369in}}%
\pgfpathlineto{\pgfqpoint{3.237644in}{1.385009in}}%
\pgfpathlineto{\pgfqpoint{3.276760in}{1.475043in}}%
\pgfpathlineto{\pgfqpoint{3.325656in}{1.587933in}}%
\pgfpathlineto{\pgfqpoint{3.354993in}{1.651213in}}%
\pgfpathlineto{\pgfqpoint{3.384330in}{1.709256in}}%
\pgfpathlineto{\pgfqpoint{3.413668in}{1.761498in}}%
\pgfpathlineto{\pgfqpoint{3.443005in}{1.807760in}}%
\pgfpathlineto{\pgfqpoint{3.462563in}{1.835127in}}%
\pgfpathlineto{\pgfqpoint{3.482121in}{1.859464in}}%
\pgfpathlineto{\pgfqpoint{3.501680in}{1.880425in}}%
\pgfpathlineto{\pgfqpoint{3.521238in}{1.897590in}}%
\pgfpathlineto{\pgfqpoint{3.540796in}{1.910543in}}%
\pgfpathlineto{\pgfqpoint{3.560354in}{1.918976in}}%
\pgfpathlineto{\pgfqpoint{3.579912in}{1.922797in}}%
\pgfpathlineto{\pgfqpoint{3.599471in}{1.922210in}}%
\pgfpathlineto{\pgfqpoint{3.619029in}{1.917760in}}%
\pgfpathlineto{\pgfqpoint{3.638587in}{1.910309in}}%
\pgfpathlineto{\pgfqpoint{3.667924in}{1.895998in}}%
\pgfpathlineto{\pgfqpoint{3.697262in}{1.881700in}}%
\pgfpathlineto{\pgfqpoint{3.716820in}{1.874130in}}%
\pgfpathlineto{\pgfqpoint{3.736378in}{1.869170in}}%
\pgfpathlineto{\pgfqpoint{3.755936in}{1.867336in}}%
\pgfpathlineto{\pgfqpoint{3.775495in}{1.868773in}}%
\pgfpathlineto{\pgfqpoint{3.795053in}{1.873269in}}%
\pgfpathlineto{\pgfqpoint{3.814611in}{1.880323in}}%
\pgfpathlineto{\pgfqpoint{3.843948in}{1.894167in}}%
\pgfpathlineto{\pgfqpoint{3.922181in}{1.934219in}}%
\pgfpathlineto{\pgfqpoint{3.971077in}{1.955304in}}%
\pgfpathlineto{\pgfqpoint{4.010193in}{1.972436in}}%
\pgfpathlineto{\pgfqpoint{4.039531in}{1.987641in}}%
\pgfpathlineto{\pgfqpoint{4.059089in}{1.999612in}}%
\pgfpathlineto{\pgfqpoint{4.078647in}{2.013420in}}%
\pgfpathlineto{\pgfqpoint{4.098205in}{2.029360in}}%
\pgfpathlineto{\pgfqpoint{4.117763in}{2.047754in}}%
\pgfpathlineto{\pgfqpoint{4.137322in}{2.068987in}}%
\pgfpathlineto{\pgfqpoint{4.156880in}{2.093535in}}%
\pgfpathlineto{\pgfqpoint{4.176438in}{2.121966in}}%
\pgfpathlineto{\pgfqpoint{4.195996in}{2.154902in}}%
\pgfpathlineto{\pgfqpoint{4.215554in}{2.192966in}}%
\pgfpathlineto{\pgfqpoint{4.235113in}{2.236683in}}%
\pgfpathlineto{\pgfqpoint{4.254671in}{2.286385in}}%
\pgfpathlineto{\pgfqpoint{4.274229in}{2.342094in}}%
\pgfpathlineto{\pgfqpoint{4.293787in}{2.403439in}}%
\pgfpathlineto{\pgfqpoint{4.323125in}{2.504073in}}%
\pgfpathlineto{\pgfqpoint{4.372020in}{2.681698in}}%
\pgfpathlineto{\pgfqpoint{4.372020in}{2.681698in}}%
\pgfusepath{stroke}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfpathrectangle{\pgfqpoint{0.634445in}{0.681532in}}{\pgfqpoint{3.915555in}{2.468468in}}%
\pgfusepath{clip}%
\pgfsetrectcap%
\pgfsetroundjoin%
\pgfsetlinewidth{1.505625pt}%
\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfpathmoveto{\pgfqpoint{0.812425in}{0.806121in}}%
\pgfpathlineto{\pgfqpoint{0.900437in}{0.813812in}}%
\pgfpathlineto{\pgfqpoint{0.949332in}{0.815585in}}%
\pgfpathlineto{\pgfqpoint{0.998228in}{0.815109in}}%
\pgfpathlineto{\pgfqpoint{1.174252in}{0.810704in}}%
\pgfpathlineto{\pgfqpoint{1.232926in}{0.812824in}}%
\pgfpathlineto{\pgfqpoint{1.448067in}{0.823770in}}%
\pgfpathlineto{\pgfqpoint{1.643649in}{0.828608in}}%
\pgfpathlineto{\pgfqpoint{1.692545in}{0.833280in}}%
\pgfpathlineto{\pgfqpoint{1.751219in}{0.841536in}}%
\pgfpathlineto{\pgfqpoint{1.829452in}{0.852992in}}%
\pgfpathlineto{\pgfqpoint{1.878348in}{0.857812in}}%
\pgfpathlineto{\pgfqpoint{1.946801in}{0.861710in}}%
\pgfpathlineto{\pgfqpoint{2.025034in}{0.866546in}}%
\pgfpathlineto{\pgfqpoint{2.073930in}{0.871531in}}%
\pgfpathlineto{\pgfqpoint{2.122825in}{0.878878in}}%
\pgfpathlineto{\pgfqpoint{2.171721in}{0.888864in}}%
\pgfpathlineto{\pgfqpoint{2.249954in}{0.907977in}}%
\pgfpathlineto{\pgfqpoint{2.318407in}{0.926238in}}%
\pgfpathlineto{\pgfqpoint{2.357524in}{0.939305in}}%
\pgfpathlineto{\pgfqpoint{2.386861in}{0.951614in}}%
\pgfpathlineto{\pgfqpoint{2.416199in}{0.966578in}}%
\pgfpathlineto{\pgfqpoint{2.445536in}{0.984192in}}%
\pgfpathlineto{\pgfqpoint{2.484652in}{1.010845in}}%
\pgfpathlineto{\pgfqpoint{2.553106in}{1.058800in}}%
\pgfpathlineto{\pgfqpoint{2.582443in}{1.076452in}}%
\pgfpathlineto{\pgfqpoint{2.611781in}{1.090767in}}%
\pgfpathlineto{\pgfqpoint{2.631339in}{1.098133in}}%
\pgfpathlineto{\pgfqpoint{2.650897in}{1.103655in}}%
\pgfpathlineto{\pgfqpoint{2.670455in}{1.107325in}}%
\pgfpathlineto{\pgfqpoint{2.690014in}{1.109189in}}%
\pgfpathlineto{\pgfqpoint{2.709572in}{1.109326in}}%
\pgfpathlineto{\pgfqpoint{2.729130in}{1.107829in}}%
\pgfpathlineto{\pgfqpoint{2.758467in}{1.102733in}}%
\pgfpathlineto{\pgfqpoint{2.787805in}{1.094512in}}%
\pgfpathlineto{\pgfqpoint{2.817142in}{1.083521in}}%
\pgfpathlineto{\pgfqpoint{2.846479in}{1.070144in}}%
\pgfpathlineto{\pgfqpoint{2.885596in}{1.049286in}}%
\pgfpathlineto{\pgfqpoint{2.924712in}{1.025774in}}%
\pgfpathlineto{\pgfqpoint{2.973608in}{0.993822in}}%
\pgfpathlineto{\pgfqpoint{3.110515in}{0.902091in}}%
\pgfpathlineto{\pgfqpoint{3.149632in}{0.878865in}}%
\pgfpathlineto{\pgfqpoint{3.188748in}{0.858363in}}%
\pgfpathlineto{\pgfqpoint{3.218085in}{0.845117in}}%
\pgfpathlineto{\pgfqpoint{3.247423in}{0.833835in}}%
\pgfpathlineto{\pgfqpoint{3.276760in}{0.824502in}}%
\pgfpathlineto{\pgfqpoint{3.315877in}{0.814844in}}%
\pgfpathlineto{\pgfqpoint{3.354993in}{0.807894in}}%
\pgfpathlineto{\pgfqpoint{3.394109in}{0.803115in}}%
\pgfpathlineto{\pgfqpoint{3.443005in}{0.799542in}}%
\pgfpathlineto{\pgfqpoint{3.501680in}{0.797876in}}%
\pgfpathlineto{\pgfqpoint{3.980856in}{0.794595in}}%
\pgfpathlineto{\pgfqpoint{4.225334in}{0.798730in}}%
\pgfpathlineto{\pgfqpoint{4.293787in}{0.799948in}}%
\pgfpathlineto{\pgfqpoint{4.352462in}{0.803500in}}%
\pgfpathlineto{\pgfqpoint{4.372020in}{0.805205in}}%
\pgfpathlineto{\pgfqpoint{4.372020in}{0.805205in}}%
\pgfusepath{stroke}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetrectcap%
\pgfsetmiterjoin%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfpathmoveto{\pgfqpoint{0.634445in}{0.681532in}}%
\pgfpathlineto{\pgfqpoint{0.634445in}{3.150000in}}%
\pgfusepath{stroke}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetrectcap%
\pgfsetmiterjoin%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfpathmoveto{\pgfqpoint{4.550000in}{0.681532in}}%
\pgfpathlineto{\pgfqpoint{4.550000in}{3.150000in}}%
\pgfusepath{stroke}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetrectcap%
\pgfsetmiterjoin%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfpathmoveto{\pgfqpoint{0.634445in}{0.681532in}}%
\pgfpathlineto{\pgfqpoint{4.550000in}{0.681532in}}%
\pgfusepath{stroke}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetrectcap%
\pgfsetmiterjoin%
\pgfsetlinewidth{0.803000pt}%
\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfpathmoveto{\pgfqpoint{0.634445in}{3.150000in}}%
\pgfpathlineto{\pgfqpoint{4.550000in}{3.150000in}}%
\pgfusepath{stroke}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetbuttcap%
\pgfsetmiterjoin%
\definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%
\pgfsetfillcolor{currentfill}%
\pgfsetlinewidth{1.003750pt}%
\definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfpathmoveto{\pgfqpoint{3.301111in}{2.800278in}}%
\pgfpathlineto{\pgfqpoint{4.602778in}{2.800278in}}%
\pgfpathquadraticcurveto{\pgfqpoint{4.630556in}{2.800278in}}{\pgfqpoint{4.630556in}{2.828056in}}%
\pgfpathlineto{\pgfqpoint{4.630556in}{3.202778in}}%
\pgfpathquadraticcurveto{\pgfqpoint{4.630556in}{3.230556in}}{\pgfqpoint{4.602778in}{3.230556in}}%
\pgfpathlineto{\pgfqpoint{3.301111in}{3.230556in}}%
\pgfpathquadraticcurveto{\pgfqpoint{3.273333in}{3.230556in}}{\pgfqpoint{3.273333in}{3.202778in}}%
\pgfpathlineto{\pgfqpoint{3.273333in}{2.828056in}}%
\pgfpathquadraticcurveto{\pgfqpoint{3.273333in}{2.800278in}}{\pgfqpoint{3.301111in}{2.800278in}}%
\pgfpathclose%
\pgfusepath{stroke,fill}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetrectcap%
\pgfsetroundjoin%
\pgfsetlinewidth{1.505625pt}%
\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfpathmoveto{\pgfqpoint{3.328889in}{3.125694in}}%
\pgfpathlineto{\pgfqpoint{3.606667in}{3.125694in}}%
\pgfusepath{stroke}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=3.717778in,y=3.077083in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Grippe}%
\end{pgfscope}%
\begin{pgfscope}%
\pgfsetrectcap%
\pgfsetroundjoin%
\pgfsetlinewidth{1.505625pt}%
\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
\pgfsetstrokecolor{currentstroke}%
\pgfsetdash{}{0pt}%
\pgfpathmoveto{\pgfqpoint{3.328889in}{2.931389in}}%
\pgfpathlineto{\pgfqpoint{3.606667in}{2.931389in}}%
\pgfusepath{stroke}%
\end{pgfscope}%
\begin{pgfscope}%
\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
\pgfsetstrokecolor{textcolor}%
\pgfsetfillcolor{textcolor}%
\pgftext[x=3.717778in,y=2.882778in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Coup de soleil}%
\end{pgfscope}%
\end{pgfpicture}%
\makeatother%
\endgroup%

Бінарний файл не відображається.

Бінарний файл не відображається.

Бінарний файл не відображається.

Після

Ширина:  |  Висота:  |  Розмір: 36 KiB

Бінарний файл не відображається.

Після

Ширина:  |  Висота:  |  Розмір: 39 KiB

@ -0,0 +1,42 @@
\begin{tikzpicture}
\node[label={below:Patient}] (patient) {
\includegraphics[width=1.33cm]{icons/user}
};
\node[label={below:Médecin}, right=of patient] (doctor) {
\includegraphics[width=1.33cm]{icons/doctor}
};
\node[system, right=of doctor] (system) {
Système de\\recherche
};
\node[agent, above=1.5cm of doctor] (history) {
Antécédents du patient
};
\draw[link]
([yshift=5pt]patient.east)
-- node[link label, above=5pt] {exprime symptômes}
([yshift=5pt]doctor.west);
\draw[link]
([yshift=-5pt]doctor.west)
-- node[link label, below=5pt] {teste signes}
([yshift=-5pt]patient.east);
\draw[link, <->]
(doctor)
-- node[link label, right=5pt] {consulte}
(history);
\draw[link]
([yshift=5pt]doctor.east)
-- node[link label, above=5pt] {soumet données}
([yshift=5pt]system.west);
\draw[link]
([yshift=-5pt]system.west)
-- node[link label, below=5pt] {retourne maladies\\possibles}
([yshift=-5pt]doctor.east);
\end{tikzpicture}

BIN
docs/rapport/main.pdf Normal file

Бінарний файл не відображається.

418
docs/rapport/main.tex Normal file

@ -0,0 +1,418 @@
\documentclass{article}
% Langue
\usepackage{polyglossia}
\usepackage[autostyle=true]{csquotes}
\setmainlanguage{french}
\usepackage{microtype}
\usepackage[
output-decimal-marker={,},
group-separator={\,},
]{siunitx}
\makeatletter
\newcommand{\nospace}[1]{{\nofrench@punctuation#1}}
\makeatother
% Police
\usepackage{fontspec}
\usepackage{xunicode}
\setmainfont[Mapping=tex-text]{Linux Libertine O}
\setsansfont[Mapping=tex-text]{XCharter}
\usepackage[raggedright, sf]{titlesec}
\titleformat{\paragraph}[runin]{\bfseries\normalsize}{\theparagraph}{1em}{}
% Listes
\usepackage{enumitem}
\setlist[itemize]{itemsep=0pt, leftmargin=16pt}
% Figures
\usepackage[export]{adjustbox}
\usepackage{rotating}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{
agent/.style={
draw,
align=center,
inner sep=10pt,
thick,
},
system/.style={
agent,
rounded rectangle,
},
link/.style={
shorten >=10pt,
shorten <=10pt,
->, thick,
>=latex,
},
link label/.style={
font=\scshape\small,
align=center,
inner xsep=0pt,
outer xsep=0pt,
},
node distance=3.2cm,
}
\usepackage{forest}
\useforestlibrary{edges}
\graphicspath{{./figures/}}
% Tables
\usepackage{booktabs}
\usepackage{multirow}
% Bibliographie
\usepackage[
style=numeric,
maxbibnames=4,
maxcitenames=3,
backend=biber
]{biblatex}
\addbibresource{references.bib}
\renewcommand*{\nameyeardelim}{\addcomma\addspace}
\DefineBibliographyStrings{french}{%
urlseen = {consulté le},
techreport = {Rapport technique},
}
% Hyperliens
\usepackage{hyperref}
% Métadonnées
\title{Conception et réalisation dun système de recherche sémantique de maladies}
\author{Rémi \textsc{Cérès} \and Mattéo \textsc{Delabre}}
\date{19~décembre~2019}
\begin{document}
\makeatletter
{\centering
\LARGE\parbox{.8\textwidth}{\centering\@title}
\vspace{1em}
\Large Rapport de projet de session
\large\textcolor{black!80}{GLO-7001 --- Conception de systèmes intelligents}
\vspace{1em}
\begin{tabular}{ll}\@author\end{tabular}
\vspace{1em}
\@date
}
\makeatother
\tableofcontents
\section{Introduction}
Afin de mettre en pratique les connaissances acquises en suivant les cours de conception de systèmes intelligents, nous avons eu lopportunité de réaliser un projet en rapport avec Wikimedica\footnote{\url{https://wikimedi.ca/}}.
Cette plate-forme, lancée en~2017 et gérée par une OBNL, est une ressource basée sur le principe du \emph{wiki}, placée sous licence libre~\cite{cc-by-sa-4-0}, qui rend disponible à toutes et à tous des informations médicales théoriques, cliniques et pédagogiques.
Destinée en priorité aux professionnels de la santé et aux étudiants en médecine, elle leur permet de partager leurs connaissances et den améliorer collectivement les données~\cite{larose-2018-wiki}.
Sa particularité est dêtre un wiki de type sémantique, dont les différentes pages sont connectées par des métadonnées exploitables par un programme informatique.
Notre projet consiste à mettre au point un outil permettant dassister à la réalisation de diagnostics différentiels en naviguant parmi les maladies renseignées dans le wiki sur la base des propriétés sémantiques qui les lient à leurs signes et symptômes.
Ce rapport se compose de trois parties, commençant par une étude du contexte du projet, de ses différents acteurs et actions souhaitées. La suite du rapport sintéresse à la conceptualisation des connaissances nécessaires à la réalisation du projet et aux moyens de communication entre ses agents. Enfin, la dernière partie présente les détails de conception et dimplémentation dun premier prototype du système.
\section{Étude du contexte du projet de système~de~recherche}
\subsection{Intelligence artificielle en médecine et projet~Wikimedica}
Dans le cadre de leur pratique, les médecins sont régulièrement amenés à prendre des décisions informées relatives à leurs patients, basées sur la considération méticuleuse dun ensemble dindices et en sappuyant sur les consensus scientifiques existants ainsi que sur leur expérience.
La quantité dinformation à caractère non-structuré à la disposition des professionnels de médecine fait quil leur est difficile de sassurer de prendre en compte en tout temps tous les cas possibles et les dernières bonnes pratiques.
Une façon dexploiter plus efficacement ces données est dutiliser des machines pour reproduire le raisonnement des médecins sur les problématiques qui leur sont présentées; autrement dit, il sagit de construire des systèmes dintelligence artificielle~\cite{russell-2010-artificial}.
En médecine, comme dans les autres champs dapplication critiques de lintelligence artificielle, de tels systèmes font face à la contrainte supplémentaire de fiabilité, de transparence et de reddition de comptes.
Ces contraintes nempêchent pas le domaine dêtre lobjet de plus en plus de recherches, de projets et financements~\cite{buch-2018-artificial}, dans la mesure où ces systèmes ont un large potentiel dapplication, avec à lhorizon la réduction du nombre derreurs médicales, le recentrage de lactivité des praticiens sur lécoute et laccompagnement des patients, ou encore la réduction des consultations inutiles permettant le désengorgement des services médicaux.
Lun des objectifs du projet Wikimedica est de recenser et fournir des données structurées sous la forme dune ontologie exploitable par des machines.
De par cet objectif, ce wiki a pour vocation de devenir une source de données utile à la réalisation dapplications en intelligence artificielle médicale.
Une application possible est la réalisation de diagnostics différentiels, une activité du médecin consistant à établir une liste de maladies qui pourraient plausiblement être la cause de signes et de symptômes exprimés par un patient.
Cette liste ne doit exclure aucune possibilité, en particulier les plus graves et les plus probables, sous peine de mettre potentiellement en danger le patient et dengager pénalement la responsabilité du médecin~\cite{acpm-2018-diagnostic}.
\emph{Comment les techniques dintelligence artificielle peuvent-elles être combinées aux données de Wikimedica pour aider à poser un diagnostic différentiel?}
Lobjectif de notre projet est dapporter des éléments de réponse à cette question en concevant un système capable dassister un médecin dans létablissement de diagnostics différentiels pour ses patients qui lui permette de naviguer parmi les différentes possibilités correspondant aux données dont il dispose sur leur situation.
\subsection{Tâche de recherche sémantique de maladies}
Le médecin utilise le système avec pour but didentifier une maladie, à savoir une \enquote{altération de la santé caractérisée par des causes, des symptômes, une évolution et des possibilités thérapeutiques propres}~\cite{wiki-2019-maladie}, correspondant à la situation de son patient.
Remarquons que les requêtes formulées par le médecin dans le système sont toujours des conjonctions de termes et jamais des disjonctions.
La difficulté de cette tâche réside dans le fait que le médecin cherche à obtenir un diagnostic à partir des signes~(constatés objectivement sur le patient par un observateur), symptômes~(perçus et décrits par le malade), facteurs de risque~(variables associées à un risque accru de contracter une maladie) et antécédents de son patient, alors que les connaissances du wiki décrivent plutôt ces informations à partir de chaque maladie.
En inversant cette relation, le résultat comportera en effet souvent plusieurs maladies possibles dans la mesure où beaucoup dentre elles ont des présentations qui se recoupent.
Par conséquent, le système doit être interactif: après un retour dune liste initiale de candidats, le médecin peut choisir de tester des signes supplémentaires ou dinterroger le patient sur la présence éventuelle dautres symptômes pour éliminer des maladies incompatibles.
Après récupération de ces nouvelles données, lutilisateur soumet une nouvelle requête modifiée au système et la procédure reprend du début.
Cette interaction est représentée conceptuellement dans la figure~\ref{fig:task-model}.
\begin{figure}[htbp]
\makebox[\textwidth][c]{\input{figures/task-model}}
\caption{Vue conceptuelle de la tâche de recherche sémantique de maladies impliquant le médecin, le patient et le système de recherche.}
\label{fig:task-model}
\end{figure}
Wikimedica offre déjà un formulaire permettant de rechercher parmi les maladies qui sont y référencées\footnote{\url{https://wikimedi.ca/wiki/Spécial:RunQuery/Recherche_de_maladies}}.
Nous avons utilisé cette page existante comme base pour concevoir notre système.
\subsection{Médecin et base de connaissances, agents du système}
Les bases de connaissances ne constituent pas par elles-mêmes des systèmes de recherche adaptés pour les utilisateurs humains car elles foisonnent de données et ne leur permettent pas de se focaliser précisément sur leur activité de recherche.
Le système de recherche de maladies par signes et symptômes se place donc comme un intermédiaire entre le médecin et la base de connaissances offerte par Wikimedica renfermant de la connaissance académique sur différents aspects de la médecine.
Les médecins utilisateurs du système sont des professionnels de santé possédant une formation et des connaissances de base comprenant notamment le vocabulaire médical nécessaire et la capacité de réaliser un diagnostic différentiel.
Ils communiquent dune part avec leurs patients physiquement au travers de consultations, et dautre part avec le système de recherche en utilisant un ordinateur connecté à Internet.
La base de connaissance est constituée des pages de Wikimedica et de leurs relations telles que maintenues par les contributeurs du projet, qui sont des professionnels de santé reconnus comme tels par le Collège des médecins du Québec.
\section[Conception du système de recherche basé sur les données\\de Wikimedica et Wikidata]{Conception du système de recherche basé sur les données de Wikimedica et Wikidata}
\subsection{Modèle et sources de connaissances médicales}
Le système doit connaître dune part des informations sur les maladies que le médecin est susceptible de rechercher, et dautre part les liens qui existent entre ces maladies et leurs signes, symptômes, facteurs de risque et antécédents éventuels.
En outre, puisque le nombre de maladies possibles pour un ensemble de symptômes peut être grand, le système doit orienter le diagnostic sur les éléments les plus importants en priorité.
Pour ce faire, lapplication doit pouvoir évaluer la gravité et la probabilité doccurrence chez un patient donné de chaque maladie et trier les résultats par gravité et probabilité décroissantes.
\paragraph{Sources de connaissances médicales}
À terme, la source de données principale sera Wikimedica, cependant son ontologie est en encore cours de construction et ne contient présentement que 157~maladies, signes et symptômes, ce qui nest pas suffisant pour notre application.
Nous combinons donc les informations structurées de Wikimedica avec celles de Wikidata.
En outre, bien que les deux wikis précédents disposent de données épidémiologiques pour chaque maladie (par exemple, sur Wikidata, les propriétés \href{https://www.wikidata.org/wiki/Property:P1193}{P1193}, \href{https://www.wikidata.org/wiki/Property:P1603}{P1603} et \href{https://www.wikidata.org/wiki/Property:P2844}{P2844} décrivent respectivement la prévalence, lincidence et le nombre de cas dune maladie) qui pourraient être utilisées pour évaluer sa probabilité doccurrence, ces données sont pour le moment trop éparses pour pouvoir être utilisables.
Nous avons choisi transitoirement de baser le critère dimportance sur des données de nature différente, à savoir le flux de visites sur la page Wikipédia associée\footnote{Accessibles et librement réutilisables depuis ladresse \url{https://dumps.wikimedia.org/other/pageviews/readme.html}.}.
Ces données apportent une information nettement moins objective et beaucoup plus approximative sur limportance relative des différentes maladies, mais nous considérons cette première approximation comme raisonnable car elle sert uniquement à ordonner les résultats.
En outre, le flux de visite dune page est variable en fonction de lannée, ce qui permet de refléter dans une certaine limite lévolution de limportance de maladies aux symptômes similaires au cours de lannée~(voir la figure~\ref{fig:pageview-flow-criterion}).
\begin{figure}[htb]
\input{figures/grippe-coup-soleil.pgf}
\caption{Nombre de visites au cours de lannée sur les articles du Wikipédia francophone \enquote{Coup de soleil} et \enquote{Grippe}, deux conditions pouvant présenter des symptômes similaires. Ce nombre de visite est la moyenne des visites sur les années 2015--2019 lissée par un noyau gaussien décart-type dix jours.}
\label{fig:pageview-flow-criterion}
\end{figure}
\paragraph{Modèle unifié de connaissances du domaine}
Chaque maladie et chaque signe, symptôme ou facteur de risque est caractérisé par un nom, une courte description, une image dillustration, un lien vers un larticle de wiki qui le décrit et un facteur dimportance calculé comme décrit précédemment.
Les maladies sont reliées à leurs signes, symptômes ou facteurs de risque (qui peuvent être dautres maladies) par une propriété qui regroupe sans distinction tous ces types de relation.
La correspondance entre ces structures de connaissances et les deux sources utilisées est donnée par la table~\ref{tab:source-knowledge-mapping}.
\begin{table}[htb]
\makebox[\textwidth][c]{
\begin{tabular}{llrlr}
\toprule
\multirow{2}{*}{\textbf{Classes déléments}}
& \multicolumn{2}{c}{\bfseries Wikimedica}
& \multicolumn{2}{c}{\bfseries Wikidata} \\
& Classe & Instances
& Classe & Instances \\
\midrule
Maladie & \href{https://wikimedi.ca/wiki/Wikimedica:Ontologie/Maladie}{Maladie} & 66
& \href{https://www.wikidata.org/wiki/Q12136}{Q12136} & 23\,785 \\
Signe & \href{https://wikimedi.ca/wiki/Wikimedica:Ontologie/Signe}{Signe} & 69
& \href{https://www.wikidata.org/wiki/Q1441305}{Q1441305} & 576 \\
Symptôme & \href{https://wikimedi.ca/wiki/Wikimedica:Ontologie/Sympt\%C3\%B4me}{Symptôme} & 22
& \href{https://www.wikidata.org/wiki/Q169872}{Q169872} & 1\,076 \\
\midrule
\textbf{Propriétés}
& Propriété & Utilisations
& Propriété & Utilisations \\
\midrule
Signe & \href{https://wikimedi.ca/wiki/Attribut:Signe}{Signe} & 41
& \multirow{2}{*}{\href{https://www.wikidata.org/wiki/Property:P780}{P780} et \href{https://www.wikidata.org/wiki/Property:P1542}{P1542}}
& \multirow{2}{*}{4\,125} \\
Symptôme & \href{https://wikimedi.ca/wiki/Attribut:Sympt\%C3\%B4me}{Symptôme} & 30
& & \\
Facteur de risque
& \href{https://wikimedi.ca/wiki/Attribut:Facteur_de_risque}{Facteur de risque} & 42
& \href{https://www.wikidata.org/wiki/Property:P5642}{P5642} & 407 \\
\bottomrule
\end{tabular}
}
\caption{Correspondance entre le modèle de connaissance du système et ceux des sources de données Wikimedica et Wikidata.}
\label{tab:source-knowledge-mapping}
\end{table}
\paragraph{Inférences réalisées pour répondre aux requêtes}
À partir dun ensemble de signes et symptômes indiqué par le médecin, le système sélectionne toutes les maladies ayant une relation avec chacun des termes saisis par lutilisateur.
Cette relation est considérée de façon transitive~: si un symptôme dune maladie~$M_1$, qui est elle-même le symptôme dune autre maladie~$M_2$, est saisi, la maladie $M_2$ est également sélectionnée.
Enfin, tous les autres symptômes des maladies ainsi sélectionnées sont également renvoyés, puisquils constituent des éléments pouvant être testés par le médecin pour raffiner son diagnostic.
\subsection{Interactions entre le médecin et le système de recherche}
Notre projet se place dans le cadre des systèmes de recherche sémantique, qui utilisent les connaissances du domaine cible afin de comprendre et de répondre aux requêtes de lutilisateur.
Ils sopposent aux systèmes de recherche lexicale qui tentent de mettre en correspondance chaque requête avec des documents par des techniques statistiques~\cite{wiki-2019-semantic-search}.
Le modèle de communication du système sintéresse par conséquent aux interactions entre lutilisateur (le médecin) et la base de connaissances (issue de Wikimedica et Wikidata) telles que spécifiées en figure~\ref{fig:communication-model}.
Il sinscrit dans le domaine des interfaces personnes--machines et plus spécifiquement dans le contexte des interfaces de recherche dinformation.
\begin{figure}[htb]
\makebox[\textwidth][c]{\input{figures/communication-model}}
\caption{Synthèse des interactions entre les différents agents du système lors de la réalisation dune tâche de recherche de maladie.}
\label{fig:communication-model}
\end{figure}
\paragraph{Contraintes sur linterface utilisateur}
Dans la conception de linterface, nous devons nous efforcer de respecter les principes fondamentaux des interfaces personne--machine pour les systèmes de recherche~\cite[p.~258]{baeza-1999-modern}~:
\begin{enumerate}
\item \emph{Donner un retour dinformation à lutilisateur.}
Au cours de lutilisation du système, linterface doit sefforcer dafficher prioritairement les informations pertinentes pour la poursuite de la recherche.
Les relations enentre les différentes maladies retournés et les signes et symptômes recherchés doivent être clairement explicités.
\item \emph{Réduire la charge sur la mémoire de travail de lutilisateur.}
Le système doit rappeler à lutilisateur les choix quil a fait au cours du processus de recherche et lui permettre de revenir en arrière sur certains choix et dessayer de nouvelles stratégies.
Il peut aussi suggérer à lutilisateur des façons de poursuivre la recherche actuelle.
Pour ce faire, lorsque lutilisateur saisit un terme de recherche dans le système, celui-ci doit suggérer les signes, symptômes et maladies les plus proches dans lontologie, en sefforçant dôter toute ambiguïté entre plusieurs sens dun même terme.
Par exemple, à la saisie de \enquote{hypot}, le système doit suggérer, dans lordre, \href{https://wikimedi.ca/wiki/Spécial:URIResolver/Hypotension}{Hypotension}, \href{https://wikimedi.ca/wiki/Spécial:URIResolver/Hypotonie}{Hypotonie} et \href{https://wikimedi.ca/wiki/Spécial:URIResolver/Hyponatrémie}{Hyponatrémie}, car ce dernier terme est plus distant de la saisie que les premiers.
\item \emph{Être adapté aussi bien aux novices quaux experts.}
Dans le contexte de notre application, nous considérons en priorité lutilisation par un professionnel de la santé expert du domaine, mais une utilisation par un patient non-initié qui recherche une maladie spécifique est envisageable à terme.
\end{enumerate}
Enfin, de façon générale, \enquote{lorsquun système interactif est bien conçu, linterface disparaît quasiment et permet aux utilisateurs de se concentrer sur leur travail, leur exploration ou leur loisir}\footnote{\emph{\enquote{When an interactive system is well-designed, the interface almost disappears, enabling users to concentrate on their work, exploration, or pleasure.}}, traduction personnelle~\cite{shneiderman-2016-designing}.}.
\paragraph{Solution proposée}
% - Solution proposée (incluant maquettes).
Pour tenter de répondre à ces critères, nous envisageons une interface dotée dun champ de recherche et montrant en tout temps une visualisation dun sous-graphe de lontologie, mis à jour dynamiquement au fur et à mesure que lutilisateur ajoute des termes pour préciser sa requête~(voir figure~\ref{fig:maquette}).
Initialement, seuls les nœuds les plus importants (en terme de nombre de liens ou de pertinence générale) de lontologie et leurs relations sont affichées.
Pour formuler sa requête, lutilisateur peut soit cliquer sur des éléments du graphe affiché, soit saisir des termes dans le champ de saisie (ces termes sont complétés en recherche approximative).
% https://en.wikipedia.org/wiki/Humancomputer_information_retrieval
% https://en.wikipedia.org/wiki/Faceted_search
\begin{figure}[htb]
\makebox[\textwidth][c]{
\includegraphics[width=.7\textwidth, valign=t]{maquette-p1}
\vrule\quad
\includegraphics[width=.7\textwidth, valign=t]{maquette-p2}
}
\caption{Maquette dinterface pour le système de recherche. À gauche, suite à la saisie du symptôme \enquote{Fièvre} par le médecin dans la zone de recherche, le système affiche un graphe des trois maladies (nœuds rectangulaires) associées à ce symptômes. Les autres signes et symptômes (nœuds ovales) associés à ces maladies sont également affichés comme des liens entre les maladies. En cliquant sur le symptôme \enquote{Frissons}, ce nouveau symptôme est ajouté à la requête et le graphe mis à jour (à droite) pour filtrer les résultats en conséquence.}
\label{fig:maquette}
\end{figure}
% - Justification de la solution par rapport aux contraintes.
Le champ de recherche permet à lutilisateur de garder en vue lévolution de son exploration du graphe et déditer sa requête pour éventuellement revenir sur ses pas.
Le graphe intègre simultanément les informations de résultats de la recherche, les liens entre les résultats et les termes de la recherche et des suggestions de poursuite de la recherche.
\section{Réalisation dun prototype du système}
Cette partie explique les détails dimplémentation, les procédures techniques et les différents choix de technologies réalisés pour construire un premier prototype du système.
\subsection{Stratégie de récupération automatique des connaissances}
La première étape d'implémentation consiste à mettre en place un système permettant de récupérer automatiquement les connaissances décrites précédemment.
Ces connaissances sont issues de diverses sources. Les signes, les symptômes, les maladies et leurs relations sont obtenues depuis Wikimedica et Wikidata. Le facteur dimportance est dérivé des statistiques de visite des pages Wikipédia.
Chacune de ces sources mettent à disposition leurs données de façon qui leur est spécifique.
La récupération des données est programmée avec le langage de scripts Python. Ce langage jouit dune communauté importante, de nombreuses bibliothèques ainsi que dune documentation très complète.
\paragraph{Wikimedica}
Le site web Wikimedica dispose dune fonctionnalité dexport des données structurées de son wiki décrites sous le formalisme \textit{Resource Description Framework}~(RDF) et la syntaxe RDF/XML.
Le~RDF est un modèle de graphe capable de décrire de façon formelle les ressources du web sémantique et leurs métadonnées de manière exploitable par des ordinateurs.
Ce formalisme a été développé par le \textit{Word Wide Web Consortium}~(W3C) en~1999 et est aujourd'hui à la base du Web sémantique.
Le RDF/XML est une syntaxe, également définie par le W3C, permettant de sérialiser une graphe~RDF comme un document~XML.
Pour récupérer les données des maladies, les signes et les symptômes de Wikimedica, le prototype télécharge directement les fichiers~RDF/XML nécessaires depuis le site.
\paragraph{Wikidata}
La base de connaissances Wikidata offre la possibilité daccéder à ses données au travers d'un \textit{endpoint}~\textit{SPARQL Protocol and RDF Query Language} (ou simplement SPARQL).
Le~SPARQL est un langage de requêtes permettant de décrire, de récupérer et de manipuler des ressources stockées au format RDF.
Un \textit{endpoint} SPARQL est un point d'accès disponible sur le Web permettant de répondre aux requêtes~SPARQL vis-à-vis dun ensemble de ressources RDF dun site, ici Wikidata.
Pour obtenir les données nécessaires depuis Wikidata, notre projet récupère les données en réalisant des requêtes HTTP vers cet \textit{endpoint}.
\paragraph{Statistiques de visites Wikipédia}
Wikimedia met à disposition ses statistiques des nombres de vues de pages Wikipédia au travers d'une API au style \enquote{Representational state transfer}~(REST) nommée \textit{pageview statistics}. REST est un style d'architecture dinterface de programmation suivant un ensemble de contraintes pour créer des services web.
Pour récupérer les informations sur le nombre de visites d'une page Wikipédia, le prototype sadresse directement à cette API.
\subsection{Alignement des connaissances récupérées}
Une fois les données récupérées, la deuxième étape consiste à aligner les termes de Wikimedica sur ceux de Wikidata.
Puisque Wikimedica est pour le moment une plus petite ontologie médicale que la partie de Wikidata considérée, nous avons décidé daligner les termes de Wikimedica sur ceux de Wikidata et non linverse.
Pour déterminer l\emph{item} de Wikidata correspondant à un \emph{item} de Wikimedica, nous utilisons dans lordre l'algorithme suivant:
\begin{enumerate}
\item Si le terme de Wikimedica possède la propriété \texttt{\nospace{property:Wikidata\_id}}, l'alignement est déjà renseigné manuellement.
Lapplication se base donc exclusivement sur cette information.
\item Si la propriété \texttt{\nospace{property:Wikidata\_id}} n'est pas présente, le script d'alignement réalise alors une recherche par nom dans la base de connaissances de Wikidata à l'aide d'une requête SPARQL. Si un seul résultat correspond, alors l'alignement est effectué avec cet item.
\item Si aucun ou plusieurs résultats sont trouvés, l'alignement ne peut pas se faire automatiquement et lintervention dun opérateur est demandée.
\end{enumerate}
En ce qui concerne les relations entre les éléments de lontologie, nous avons choisi de les accumuler sans distinction.
Le script d'alignement a également été développé en Python.
Il parvient à aligner automatiquement près de la moitié des termes de~Wikimedica.
Sur~100~termes, 32~sont alignés à l'aide de la propriété \texttt{\nospace{property:Wikidata\_id}}, 18~par leur nom et les 43~restants à la main.
\subsection{Stockage durable des connaissances alignées}
Une fois les connaissances récupérées et alignées entre nos différentes sources, la troisième étape a pour objectif de les sauvegarder de manière pérenne et accessible dans une base de données.
Les format~RDF de données manipulé ici se présente sous forme de graphe.
Il semble donc naturel de sauvegarder les informations dans une base de type graphe.
Nous avons fait le choix d'utiliser la technologie de base de graphe~Neo4j.
Neo4j est un projet \textit{open-source} créé en~2007 et implémenté en~Java. C'est aujourd'hui la base de données de type graphe la plus populaire~\cite{db-engine-graph-database}.
\subsection{Algorithmes de recherche approximative}
Pour opérationnaliser cette définition, nous devons choisir une mesure de distance permettant de trier les différents termes candidats.
Dans notre cas, la saisie de lutilisateur sera rarement un mot complet et plus souvent un préfixe voire un sous-mot du terme recherché.
Occasionnellement, cette saisie peut aussi contenir des fautes de frappe ou dorthographe.
Plusieurs heuristiques peuvent être envisagées pour prendre en compte ces considérations, en ordre croissant de complexité~:
\begin{itemize}
\item conserver les résultats commençant par le préfixe de recherche saisi, en normalisant la casse et les accents.
Cette heuristique ninclut pas les résultats dont le mot saisi est un sous-mot ou qui diffèrent de la saisie par quelques insertions ou délétions.
Pour implémenter efficacement cette heuristique, un arbre des préfixes peut être utilisé.
\item conserver les meilleurs résultats en triant les termes par ordre décroissant du nombre de lettres en commun avec la recherche.
Implémentée ainsi, cette solution ne prend pas en compte lordre des lettres dans les termes ce qui est pourtant un élément important.
Pour pallier cela, nous pouvons trier les résultats selon un score qui pénalise les lettres mal placées.
\item filtrer les meilleurs résultats en triant les termes par distance de Levenshtein~\cite{levenshtein-1966-binary} croissante avec la recherche.
Cette distance permet de mesurer léloignement entre deux mots complets en termes du nombre de caractères devant être insérés, supprimés ou substitués pour passer de lun à lautre.
Des structures de données efficaces existent pour implémenter une recherche par distance de Levenshtein, notamment les BK-trees et les automates de Levenshtein.
Pour adapter la distance aux spécificités du problème de recherche approximative, nous pouvons imaginer donner un poids de~0 pour lajout de lettres en début ou en fin de recherche et de~1 pour les autres opérations.
\end{itemize}
\subsection{Interface daccès frontal aux connaissances}
La dernière étape de réalisation du prototype avait pour objectif dimplémenter un frontal réalisant les concepts dinterface établis à la section précédente.
Nous avons choisi dimplémenter ce frontal sur le web, pour le rendre accessible aisément à tous sans installation particulière et pour rester dans la philosophie des wiki qui sont entièrement basés sur le web.
Par ailleurs, le JavaScript, langage au cœur des technologies du web, est un langage pour lequel nous disposions déjà de connaissances et dexpérience.
Enfin, ce langage possède une large communauté très active, de nombreuses bibliothèques et une documentation très complète.
Pour créer la structure de lapplication et définir les interactions, nous avons utilisé le cadre de travail~React\footnote{\url{https://reactjs.org/}}.
Cette bibliothèque \emph{open source} est développée par Facebook depuis 2013 et permet de simplifier la création dapplications très demandeuses en interactions. Elle sappuie sur le principe de la programmation réactive et permet ainsi un code déclaratif et plus efficace et flexible que la programmation web classique.
Enfin, le graphe est affiché sous forme de nœuds reliés par des arêtes déplaçables par lutilisateur.
La mise en forme du graphe est réalisée à laide dun algorithme de simulation de force physique dans lequel les nœuds sont modélisés comme des masses ponctuelles et les liens comme des ressorts.
Nous avons utilisé pour réaliser cette simulation physique simple la bibliothèque Springy.js.
\section{Conclusion}
Lobjectif du projet était dexplorer les différentes façons dont les techniques dintelligence artificielle peuvent aider les médecins dans la réalisation de diagnostics différentiels.
Pour ce faire, nous avons conçu un système capable dexploiter les données structurées de la plateforme Wikimedica afin de proposer une interface de recherche sémantique de maladies par signes, symptômes, antécédents et facteurs de risque.
Cette interface se présente sous la forme dun graphe interactif, montrant au médecin les relations existant entre les résultats obtenus et lui proposant par là même des suggestions de poursuite de sa recherche.
Pour illustrer plus précisément notre concept, nous avons décidé de construire un prototype dapplication qui réalise les fonctionnalités de base du système\footnote{Voir \url{https://matteo.delab.re/projects/wikimedica-disease-search}.}.
La figure~\ref{fig:prototype-screenshots} montre quelques impressions décran de ce prototype.
Après présentation de ce prototype aux responsables de la plateforme Wikimedica, nous sommes convaincus quil a le potentiel de devenir un système daide poussé à la réalisation de diagnostics différentiels et également de servir dillustration à la puissance des techniques du web sémantique appliquées à la médecine.
\begin{figure}[htb]
\makebox[\textwidth][c]{%
\includegraphics[width=.7\textwidth, valign=t]{1-recherche-vide.png}%
\includegraphics[width=.7\textwidth, valign=t]{3-recherche-vomissement.png}%
}\\[-1pt]
\makebox[\textwidth][c]{%
\includegraphics[width=.7\textwidth, valign=t]{4-recherche-auto-toux.png}%
\includegraphics[width=.7\textwidth, valign=t]{5-recherche-toux.png}%
}%
\caption{Capture d'écran illustrant le fonctionnement du projet. En haut à gauche, l'état initial de l'application où le champ de recherche est vide est le graphe affiché au complet. En haut a droite, le terme \enquote{Vomissement} est recherché, le graphe est mis à jour en conséquence. En bas à gauche, l'utilisateur est en train de saisir le préfixe \enquote{T} et le système lui propose plusieurs termes correspondants à sa saisie. Enfin, en bas à droite, l'utilisateur complète sa recherche avec le mot \enquote{Toux}.}
\label{fig:prototype-screenshots}
\end{figure}
\printbibliography
\end{document}

232
docs/rapport/references.bib Normal file

@ -0,0 +1,232 @@
@report{brachman-1978-structural,
title = {A structural paradigm for representing knowledge},
author = {Ronald J. Brachman},
year = {1978},
month = {05},
url = {https://apps.dtic.mil/dtic/tr/fulltext/u2/a056524.pdf},
urldate = {2019-09-08}
}
@online{tellier-2012-introduction,
title = {Introduction au TALN et à l'ingénierie linguistique},
author = {Isabelle Tellier},
year = {2012},
month = {07},
url = {http://www.lattice.cnrs.fr/sites/itellier/poly_info_ling/linguistique003.html},
urldate = {2019-09-09}
}
@book{alpaydin-2014-introduction,
title = {Introduction to Machine Learning},
edition = {3},
author = {Ethem Alpaydin},
year = {2014},
publisher = {MIT Press}
}
@book{russell-2010-artificial,
title = {Artificial Intelligence},
subtitle = {A Modern Approach},
edition = {3},
author = {Stuart J. Russell and Peter Norvig},
year = {2010},
publisher = {Prentice Hall}
}
@book{szeliski-2011-computervision,
title = {Computer Vision},
subtitle = {Algorithms and Applications},
author = {Richard Szeliski},
year = {2011},
publisher = {Springer--Verlag London}
}
@article{larose-2018-wiki,
title = {Un wiki pour les professionnels de la santé},
author = {Yvon Larose},
year = {2018},
month = {10},
day = {24},
journal = {ULaval Nouvelles},
url = {https://nouvelles.ulaval.ca/vie-universitaire/-6f975a18a06639cb8e48445d7f1f06c6},
urldate = {2019-09-16}
}
@misc{cc-by-sa-4-0,
title = {Attribution-ShareAlike 4.0 International (CC-BY-SA 4.0)},
organization = {Creative Commons},
url = {https://creativecommons.org/licenses/by-sa/4.0/legalcode},
urldate = {2019-09-15},
year = {2018},
month = {12}
}
@misc{wiki-2019-carte-memoire,
author = {{Contributeurs de Wikipédia}},
title = {Carte mémoire (apprentissage) --- {W}ikipédia{,} lencyclopédie libre},
year = {2019},
url = {https://fr.wikipedia.org/w/index.php?title=Carte_m%C3%A9moire_(apprentissage)&oldid=156990261},
urldate = {2019-09-16}
}
@misc{wiki-2019-semantic-search,
author = {{Contributeurs de Wikipedia}},
title = {Semantic search},
year = {2019},
url = {https://en.wikipedia.org/w/index.php?title=Semantic_search&oldid=915042761},
urldate = {2019-11-18}
}
@report{clancey-1986-intelligent,
title = {Intelligent Tutoring Systems},
subtitle = {A Tutorial Survey},
author = {William J. Clancey},
year = {1968},
month = {09},
url = {https://apps.dtic.mil/dtic/tr/fulltext/u2/a187066.pdf},
urldate = {2019-09-23}
}
@report{pedro-2019-artificial,
title = {Artificial Intelligence in Education},
subtitle = {Challenges and Opportunities for Sustainable Development},
author = {Pedró, Francesc and Subosa, Miguel and Rivas, Axel and Valverde, Paula},
year = {2019},
url = {https://unesdoc.unesco.org/ark:/48223/pf0000366994},
urldate = {2019-09-22}
}
@report{villani-2018-intelligence,
title = {Donner un sens à lintelligence artificielle},
subtitle = {Pour une stratégie nationale et européenne},
author = {Villani, Cédric},
editor = {Bonnet, Yann},
year = {2018},
url = {https://www.aiforhumanity.fr/pdfs/9782111457089_Rapport_Villani_accessible.pdf},
urldate = {2019-09-23}
}
@article{bernerslee-2001-semantic,
title = {The Semantic Web},
author = {Tim Berners-Lee and James Hendler and Ora Lassila},
journal = {Scientific American},
year = {2001},
month = {05},
url = {https://www.scientificamerican.com/article/the-semantic-web/},
urldate = {2019-09-30}
}
@report{w3c-1999-rdf,
title = {Resource Description Framework (RDF) Model and Syntax Specification},
author = {Ora Lassila and Ralph R. Swick},
institution = {W3C},
type = {Recommandation},
url = {https://www.w3.org/TR/1999/REC-rdf-syntax-19990222/},
urldate = {2019-10-01}
}
@report{w3c-2008-sparql,
title = {SPARQL Query Language for RDF},
author = {Eric Prud'hommeaux and Andy Seaborne},
institution = {W3C},
type = {Recommandation},
url = {https://www.w3.org/TR/rdf-sparql-query/},
urldate = {2019-10-01}
}
@article{bizer-2009-dbpedia,
author = {Christian Bizer and Jens Lehmann and Georgi Kobilarov and S{\"{o}}ren Auer and Christian Becker and Richard Cyganiak and Sebastian Hellmann},
title = {DBpedia - {A} crystallization point for the Web of Data},
journal = {Journal of Web Semantics},
volume = {7},
number = {3},
pages = {154--165},
year = {2009}
}
@misc{semantic-mediawiki-2019-semantic-mediawiki,
author = {{Contributeurs de Semantic MediaWiki}},
title = {Semantic MediaWiki},
url = {https://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki/fr},
urldate = {2019-10-07}
}
@misc{semantic-mediawiki-2019-selecting-pages,
author = {{Contributeurs de Semantic MediaWiki}},
title = {Selecting pages},
url = {https://www.semantic-mediawiki.org/wiki/Help:Selecting_pages},
urldate = {2019-10-07}
}
@misc{wikimedica-2019-ontologie,
author = {{Contributeurs de Wikimedica}},
title = {Ontologie de Wikimedica},
url = {https://wikimedi.ca/wiki/Wikimedica:Ontologie},
urldate = {2019-10-08}
}
@inproceedings{levenshtein-1966-binary,
title={Binary codes capable of correcting deletions, insertions, and reversals},
author={Levenshtein, Vladimir Iosifovich},
booktitle={Soviet Physics-Doklady},
volume={10},
number={8},
pages={707--710},
year={1966}
}
@inbook{baeza-1999-modern,
booktitle={Modern information retrieval},
bookauthor={Baeza-Yates, Ricardo and Ribeiro-Neto, Berthier and others},
chapter={10},
title={User interfaces and visualization},
author={Hearst, Marti A.},
year={1999},
publisher={ACM}
}
@book{shneiderman-2016-designing,
author = {Shneiderman, Ben and Plaisant, Catherine and Cohen, Maxine and Jacobs, Steven and Elmqvist, Niklas and Diakopoulos, Nicholas},
title = {Designing the User Interface: Strategies for Effective Human-Computer Interaction},
year = {2016},
edition = {6},
publisher = {Pearson},
}
@article{buch-2018-artificial,
author = {Buch, Varun H and Ahmed, Irfan and Maruthappu, Mahiben},
title = {Artificial intelligence in medicine: current trends and future possibilities},
volume = {68},
number = {668},
pages = {143--144},
year = {2018},
publisher = {Royal College of General Practitioners},
journal = {British Journal of General Practice}
}
@reference{acpm-2018-diagnostic,
maintitle = {Guide des bonnes pratiques},
title = {Diagnostic différentiel},
editor = {{Association canadienne de protection médicale}},
year = {2018},
month = {04},
url = {https://www.cmpa-acpm.ca/serve/docs/ela/goodpracticesguide/pages/manage_risk/The_diagnostic_process/differential_diagnosis-f.html},
urldate = {2019-11-12}
}
@misc{db-engine-graph-database,
author = {{DB engines}},
title = {DB-Engines Ranking of Graph DBMS},
year = {2019},
url = {https://db-engines.com/en/ranking/graph+dbms},
urldate = {2019-12-18}
}
@misc{wiki-2019-maladie,
author = {{Contributeurs de Wikipédia}},
title = {Maladie --- {W}ikipédia{,} lencyclopédie libre},
year = {2019},
url = {https://fr.wikipedia.org/w/index.php?title=Maladie&oldid=164883945},
urldate = {2019-11-30}
}