add a nasty R chapter
This commit is contained in:
parent
72892afeff
commit
da080e47e3
237
chap/R.tex
Normal file
237
chap/R.tex
Normal file
@ -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}
|
||||
|
||||
|
||||
|
||||
|
||||
% ======================================================================
|
||||
|
3
code/R/README.md
Normal file
3
code/R/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# R
|
||||
|
||||
Be warned, Only garbage here.
|
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user