add a nasty R chapter
This commit is contained in:
parent
72892afeff
commit
da080e47e3
|
@ -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}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% ======================================================================
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
# R
|
||||||
|
|
||||||
|
Be warned, Only garbage here.
|
|
@ -17,6 +17,10 @@
|
||||||
%
|
%
|
||||||
% hot to have \begin{quote} in sans serif ?
|
% hot to have \begin{quote} in sans serif ?
|
||||||
%
|
%
|
||||||
|
\makeatletter
|
||||||
|
\def\verbatim@font{\normalfont\ttfamily\small}
|
||||||
|
\def\quote@font{\sffamily}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
\makeindex
|
\makeindex
|
||||||
|
|
||||||
|
@ -26,7 +30,7 @@
|
||||||
%------ reglages des 'listings'
|
%------ reglages des 'listings'
|
||||||
\lstset{frame=single} % dessin d'un cadre autour du listing
|
\lstset{frame=single} % dessin d'un cadre autour du listing
|
||||||
\lstset{basicstyle=\ttfamily\small}
|
\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 ?
|
\setcounter{tocdepth}{1} % XXX à regarder un de ces jours ?
|
||||||
\pagestyle{plain}
|
\pagestyle{plain}
|
||||||
|
@ -36,11 +40,6 @@
|
||||||
\setitemize[1]{label={\ding{87}}}
|
\setitemize[1]{label={\ding{87}}}
|
||||||
\frenchbsetup{CompactItemize=false}
|
\frenchbsetup{CompactItemize=false}
|
||||||
|
|
||||||
\makeatletter
|
|
||||||
\def\verbatim@font{\normalfont\ttfamily\small}
|
|
||||||
% XXX \def\quote@font{\sffamily}
|
|
||||||
\makeatother
|
|
||||||
|
|
||||||
\title{Tricks pour mon ordinateur}
|
\title{Tricks pour mon ordinateur}
|
||||||
\author{Thierry « tTh » Boudet}
|
\author{Thierry « tTh » Boudet}
|
||||||
|
|
||||||
|
@ -50,8 +49,6 @@
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
\chapter{Introduction}
|
\chapter{Introduction}
|
||||||
|
|
||||||
Un nouveau nouvel ouvrage, en vrac.
|
|
||||||
|
|
||||||
Des notes informelles sur l'utilisation
|
Des notes informelles sur l'utilisation
|
||||||
d'un ordinateur moderne, vous allez en avoir vraiment beaucoup.
|
d'un ordinateur moderne, vous allez en avoir vraiment beaucoup.
|
||||||
Mais elles sont en vrac, et surtout, elles sont reprises
|
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/scripting}
|
||||||
\input{chap/Arduino}
|
\input{chap/Arduino}
|
||||||
\input{chap/Basic}
|
\input{chap/Basic}
|
||||||
|
\input{chap/R} % new octobre 2023
|
||||||
% \input{chap/GMP}
|
% \input{chap/GMP}
|
||||||
\input{chap/Python}
|
\input{chap/Python}
|
||||||
\input{chap/dino}
|
\input{chap/dino}
|
||||||
|
|
Loading…
Reference in New Issue