diff --git a/chap/R.tex b/chap/R.tex new file mode 100644 index 0000000..da003f1 --- /dev/null +++ b/chap/R.tex @@ -0,0 +1,237 @@ +\chapter{R} +\index{R} + +% new: Mon Oct 9 07:44:09 UTC 2023 + +% https://raw.githubusercontent.com/wurli/r-best-practice/main/cheatsheet.jpg + +% ====================================================================== + +Je n'ai certainement pas la prétention de vous enseigner +les arcanes du \textsl{R project}, +je suis (octobre 2023) en pleine périoe de découverte. +Mais j'ai déja un projet concret en tête, et ce chapitre sera, +dans un premier temps, composé de mes notes de voyage. + +\begin{quote} +R is a language which bears a passing resemblance to the S language +developed at AT\&T Bell Laboratories. +It provides support for a variety of statistical and graphical analyses. +R is a true computer language which contains a number of control-flow +constructions for iteration and alternation. +It allows users to add additional functionality by defining new functions. +\end{quote} + +% ====================================================================== +\section{Les bases} + +Le caractère \texttt{>} est le prompt de R, il vous invite à taper +des commandes afin qu'il vous explique le sens de la vie. +On peut définir des variables, leur donner une valeur et faire des calculs +avec ces variables, +ce qui est bien suffisant pour commencer. Démonstration~: + +\begin{verbatim} +> a <- 22 +> b <- 7 +> a ; b +[1] 22 +[1] 7 +> a / b +[1] 3.142857 +\end{verbatim} + +Les choses semblent simples, nous avons approximé $\pi$. +Les deux premières lignes affectent des valeurs aux variables a et b. +La troisième demande l'affichage de ces variables, et la quatrimème +fait le calcul du nombre qu'il faut apprendre aux sages.. + +% ---------------------------------------------------------------------- +\subsection{Variables} + +Elles sont auto-vivifiantes\footnote{Si quelqu'un a un meilleur terme, +je sui preneur}, c'est-à-dire qu'elles existent dès qu'elles +sont référencées, il n'y a pas de déclaration préalable à faire. + +Enfin, avec R, il ne faudrait pas parler de variables, mais +d'objets, lesquels contenant les variables. + +Ces objets/variables peuvent être de différents types : chaines de caractères, +valeurs numériques, booléens\dots + +% ---------------------------------------------------------------------- + +\subsection{Builtins} + +Quelques fonctions de base, plus ou moins vaguement expliquées. + +\vspace{1em} + +\begin{tabular}{|l|p{7cm}|} +\hline +\textbf{Fonction} & \textbf{Signification} \\ +\hline +foo <- 3.14159 & Affectation d'une valeur à une variable \\ +ls() & Liste les objets actuellement chargé. \\ +help(foobar) & Avoir de l'aide sur la chose \textsl{foobar}, % + abréviation: ?foobar \\ +class(pixel) & Classe de l'objet (numeric, data.frame, ...) \\ +str(foobar) & Information sur l'objet 'foobar' \\ +\hline +\end{tabular} + +% ---------------------------------------------------------------------- + +\subsection{Scripting} + +\textbf{R --vanilla --quiet < mon-script.R} + +La magie du shebang\index{shebang} + +% Heredoc ? + +% ====================================================================== +\section{Un cas concret} + +Nous disposons d'un fichier SSV +(Space Separated Values)\footnote{C'est nouveau, ça vient de sortir.} +provenant d'un système optico-numérique bi-dimensionnel multi-planaire +(aka Webcam\index{Webcam}). +Et nous voulons en tirer quelques chiffres et graphiques bien +clinquants, +par exemple les éventuels rapports entre le rouge et le bleu. +Pour la facilité de la mise en page, nous allons utiliser un fichier +contenant seulement huit lignes de données, +alors qu'un cas réel en comprend quelques centaines de milliers. + +Voici les quelques lignes de ce fichier~: + +\begin{verbatim} +X Y R G B +0 0 0.000000 0.000000 0.000000 +240 0 3967.814941 1983.907471 0.000000 +480 0 7935.629883 3967.814941 0.000000 +720 0 11903.445312 5951.722656 0.000000 +0 240 0.000000 3967.814941 7935.629883 +240 240 3967.814941 5951.722656 7935.629883 +480 240 7935.629883 7935.629883 7935.629883 +720 240 11903.445312 9919.537109 7935.629883 +\end{verbatim} + +Vous pouvez remarquer que les noms de colonnes sont sur la première +ligne du fichier, et qu'il y a deux types de données~: +les coordonnées x/y qui sont des nombres entiers, et les composantes +de couleur (r/g/b) qui sont des valeurs flottantes. + +% ---------------------------------------------------------------------- +Il nous faut maintenant charger ces données dans le logiciel. +La fonction \texttt{read.delim} est là pour ça, il faut juste lui +passer les options convenantes pour notre fichier de données~: +signaler la présence de l'entête avec les noms de colonnes et +le type du séparateur entre champs. + +\begin{verbatim} +> pixels <- read.delim("foo.txt", header=TRUE, sep=' ') +> pixels + X Y R G B +1 0 0 0.000 0.000 0.00 +2 240 0 3967.815 1983.907 0.00 +3 480 0 7935.630 3967.815 0.00 +4 720 0 11903.445 5951.723 0.00 +5 0 240 0.000 3967.815 7935.63 +6 240 240 3967.815 5951.723 7935.63 +7 480 240 7935.630 7935.630 7935.63 +8 720 240 11903.445 9919.537 7935.63 +> class(pixels) +[1] "data.frame" +> pixels$G +[1] 0.000 1983.907 3967.815 5951.723 3967.815 5951.723 7935.630 9919.537 +\end{verbatim} + +Si vous avez fait cette manipulation, bravo, vous êtes maintenant +un \textsl{data-scientist} reconnu. Mais il nous reste beaucoup +de choses à apprendre. Le voyage n'est pas fini. +Il est temps d'explorer (ou exploiter ?) un peu nos données. + + +% ====================================================================== + +\section{Statistiques} + +Oui, c'est un peu pour ça que \textbf{R} a été conçu. +Hélas ce n'est pas un domaine qui m'est familier, alors ce que +vous allez lire doit être pris avec des pincettes aussi bien +du coté des maths sous-jacentes que de la méthodologie. + + + +\begin{verbatim} +> mean(pixels$R) ; mean(pixels$G) +[1] 5951.723 +[1] 4959.769 +\end{verbatim} + +% ====================================================================== +\section{Graphiques} + +Bah c'est pas simple, alors j'ai activé le \textsl{rach-system} et je +suis arrivé à ce petit truc qui me permet de faire de la +\texttt{gif89a}\index{gif89a}, donc je suis content. +Vous allez voir, c'est assez simple, mais le diable\index{Prada} +se cache dans les détails, et un peu aussi dans la doc tortueuse. + +% ---------------------------------------------------------------------- +\subsection{x/y} + +Un des classiques du genre. + +\begin{verbatim} +R --vanilla --quiet << __EOR__ + pixels <- read.delim("cumul.txt", header=TRUE, sep=' ') + png(filename="cumul.png", width=640, height=480) + plot(pixels\$X, pixels\$B, pch=".", + main="$title", sub="tTh 2023", + xlab="composante rouge", + ylab="composante bleu") + quit(save="no") +__EOR__ +\end{verbatim} + +Détaillons un peu le script~: +comme dans l'exemple précédent, nous chargeons nos données dans un +\textsl{data.frame}. Ensuite nous spécifions une sortie vers un +fichier image au format PNG\index{PNG}, avec une taille d'image fixée. +Finalement, nous traçons notre image avec l'instruction \texttt{plot} +et ses nombreux paramêtres. +Je vais détailler ceux qui sont utilisés dans cet exemple, et je vous rappelle +que \texttt{help(plot)} est là pour vous aider. + +\begin{itemize} +\item \texttt{pch} : type de la plume utilisée +\item \texttt{main} : titre principal de la page +\item \texttt{sub} : sous-titre, placé tout en bas +\item \texttt{xlab} : label de l'axe des X +\item \texttt{ylab} : label de l'axe des Y +\end{itemize} + +Avec ça, nous pouvons déja faire quelgues diagrammes corrects +\footnote{Voire même on peut tenter de la gif89a\index{gif89a}}, +mais d'autres paramêtres devraient retenir notre attention, comme +la gestion des marges et des couleurs, comment exporter proprement +vers \LaTeX, peut-on faire de la 3D\index{3D}, \dots + +% ---------------------------------------------------------------------- + +\subsection{Histogramme} + +hist(datas\$V3, breaks=50) + +% ====================================================================== + +\section{Interface avec l'OS} + + + + +% ====================================================================== + diff --git a/code/R/README.md b/code/R/README.md new file mode 100644 index 0000000..f787e6c --- /dev/null +++ b/code/R/README.md @@ -0,0 +1,3 @@ +# R + +Be warned, Only garbage here. \ No newline at end of file diff --git a/tetatricks.tex b/tetatricks.tex index 85669da..45fd121 100644 --- a/tetatricks.tex +++ b/tetatricks.tex @@ -17,6 +17,10 @@ % % hot to have \begin{quote} in sans serif ? % +\makeatletter +\def\verbatim@font{\normalfont\ttfamily\small} +\def\quote@font{\sffamily} +\makeatother \makeindex @@ -26,7 +30,7 @@ %------ reglages des 'listings' \lstset{frame=single} % dessin d'un cadre autour du listing \lstset{basicstyle=\ttfamily\small} -\lstset{aboveskip=1.0em,belowskip=1.0em} +\lstset{aboveskip=0.7em,belowskip=0.7em} \setcounter{tocdepth}{1} % XXX à regarder un de ces jours ? \pagestyle{plain} @@ -36,11 +40,6 @@ \setitemize[1]{label={\ding{87}}} \frenchbsetup{CompactItemize=false} -\makeatletter -\def\verbatim@font{\normalfont\ttfamily\small} -% XXX \def\quote@font{\sffamily} -\makeatother - \title{Tricks pour mon ordinateur} \author{Thierry « tTh » Boudet} @@ -50,8 +49,6 @@ % ============================================================== \chapter{Introduction} -Un nouveau nouvel ouvrage, en vrac. - Des notes informelles sur l'utilisation d'un ordinateur moderne, vous allez en avoir vraiment beaucoup. Mais elles sont en vrac, et surtout, elles sont reprises @@ -131,7 +128,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots \input{chap/scripting} \input{chap/Arduino} \input{chap/Basic} - +\input{chap/R} % new octobre 2023 % \input{chap/GMP} \input{chap/Python} \input{chap/dino}