Annonce

Bienvenue sur le site support des ouvrages :
SAS - Introduction au décisionnel : méthode et maîtrise du langage
(1ère édition - épuisée)
SAS - Introduction pratique : du data management au reporting (2ème édition - épuisée)
SAS - Introduction au décisionnel : du data management au reporting (3ème édition - épuisée (hélas...))

la réponse à la question "mais où trouver la 3ème édition ?" est précisée ici


Retrouvez dans ce tiré à part, la préface écrite par Mouloud Dey, Directeur Business solutions et marchés émergents, SAS France,
l’introduction générale ainsi que le plan complet de l’ouvrage

#1 20-12-2017 15:13:03

SAS-SR
Administrateur
Lieu: Université d'Orléans
Date d'inscription: 01-09-2008
Site web

Découvrez le message secret !

Dernier sujet de l'année !

et comme les congés de fin d'année se profilent, je vais vous donner de quoi réfléchir (et vous amuser... espérons le...)

dans ce fichier : http://www.sas-sr.com/img/message.txt se cache un message secret...

160 enregistrements sont présents dans ce fichier
par ligne vous avez 200 champs, chaque champ contient la couleur (code Hexadécimal) d'un point.

Si vous construisez un graphique au moyen de ces 160 lignes, en donnant à chaque point (approximativement...) sa couleur, alors vous pourrez lire le message secret...

précisons un peu les choses :
dans le premier enregistrement, le premier champ correspond à la couleur du premier point le plus en haut, à gauche. le second champ correspond à la couleur du second point, à droite du premier. Le dernier champ de la dernière ligne vous donne la couleur à donner au dernier point, le plus à droite, en bas de votre graphique qui contiendra 160*200 = 32 000 points.

(j'ai indiqué plus haut "approximativement" parce que vous aurez beaucoup de mal à afficher plus de 12 couleurs différentes dans un graphique produit avec PROC SGPLOT)

le vainqueur sera celui qui aura réussi à obtenir le résultat le plus fidèle à l'original

amusez vous bien et bonnes fêtes de fin d'année !

Hors ligne

 

#2 20-12-2017 19:15:29

SAS-SR
Administrateur
Lieu: Université d'Orléans
Date d'inscription: 01-09-2008
Site web

Re: Découvrez le message secret !

au fait.. ne spoilez pas ce sujet en postant votre programme dans le forum !

Hors ligne

 

#3 02-01-2018 17:12:22

SAS-SR
Administrateur
Lieu: Université d'Orléans
Date d'inscription: 01-09-2008
Site web

Re: Découvrez le message secret !

et bien le message secret est de saison :

http://www.sas-sr.com/img/voeux_2018.png

Hors ligne

 

#4 03-01-2018 19:34:49

SAS-SR
Administrateur
Lieu: Université d'Orléans
Date d'inscription: 01-09-2008
Site web

Re: Découvrez le message secret !

alors.. comment produire ce graphique au moyen des données de notre fichiers TXT....

créons déjà une première table au moyen de ces données :

Code:

filename fichier url 'http://www.sas-sr.com/img/message.txt' ;

data test;
   infile fichier ;
   input color1 :$7. @@;
   length color $ 8 ;
   color=upcase("CX"||substr(color1,2));
   drop color1 ;
run;

Avec SAS, les couleurs notées en haxadécimales doivent être introduites avec "CX". Dès cette prémière table, nous écartons donc les "#" pour les remplacer par CX.

Le graphique que nous allons produire contient 32000 points (puisque nous avons 32000 codes couleurs) : 160 lignes et 200 colonnes. Il nous faut donc disposer de variables X et Y qui vont nous donner les coordonnées de chaque point. Ainsi, le premier code couleur de la première ligne du fichier TXT doit se retrouver en (1 ; 160).

L'étape DATA suivante va créer ces variables X et Y. Nous allons passer d'une table à 160 observations et 200 variables à une table de 32000 observations et 3 variables : X, Y et COLOR.

Code:

data test2(drop=n);
  set test ;
  x+1;
  if x=201 then x=1 ;
  n+1;
  y=160-int(n/201);
run;

mais combien de couleurs différentes sont citées dans notre table ? La question est importante puisque (à ma connaissance...), on peut certes réprésenter 32000 dans un graphique mais ils ne peuvent être que de 12 couleurs différentes.

Code:

proc sql noprint ;
create table colorselec as select color,count(*) as count 
       from test2 
       group by color 
       order by count desc;
quit;

Dans la table COLORSELECT, nous avons 3122 observations et donc 3122 couleurs differentes... la couleur CX01143E est utilisée pour 16039 points (soit la moitié des points) mais il en reste 3121 autres... et il faudra arriver à 12 couleurs...

Les plus malins d'entre vous se disent... mais il y a la proc machinbidule qui va me faire ça très bien !

Cette proc n'est pas dans mes bouquins... et nous n'utilisons dans ces sujets des beaux mercredis que les outils de programmation exposés dans mes bouquins...

nous verrons donc cela la semaine prochaine ;-)

à suivre...

Hors ligne

 

#5 10-01-2018 09:48:42

SAS-SR
Administrateur
Lieu: Université d'Orléans
Date d'inscription: 01-09-2008
Site web

Re: Découvrez le message secret !

Reprenons

Nous disposons à ce stade d’une table COLORSELEC qui contient 3122 observations et apprenons donc que notre fichier MESSAGE.TXT cite 3122 couleurs différentes.
Et nous ne pouvons représenter que 12 couleurs différentes…

Il va nous falloir réduire ce nombre de couleurs en « rapprochant » certaines couleurs avec d’autres…

Comment faire cela ?

Attaquons nous à la couleur CX01143E puisque c’est la couleur la plus utilisée (16039 points sur 32000) et calculons une « distance » entre cette couleur et chacune des 3121 autres couleurs.

« Une distance entre deux couleurs ? » me direz-vous
« oui » vous répondrai-je.

Il existe plusieurs façons de coder une couleur. Dans notre cas, nos couleurs sont notées en notation hexadécimales mais il existe des façons plus « sympathiques » de présentation des couleurs.

Allez sur google et taper #01143E – cliquez ensuite sur « Afficher les valeurs de couleur » et vous aurez devant vous ceci :

http://www.sas-sr.com/img/coul18_1.png

C’est la notation RGB qui va nous intéresser : RGB(1,20,62).

RGB signifie Red, Green, Blue. Les trois chiffres vous indiquent les « quantités » de rouge, de vert et de bleu nécessaires à la production de cette couleur.   RGB(0,0,0) donne du noir, RGB(255,255,255) vous donne du blanc. Il y a 256**3 couleurs possibles avec cette représentation.

A titre d’exemple, nous allons calculer la distance entre notre couleur CX01143E et le noir de la façon suivante :
(1-0)**2+(20-0)**2+(62-0)**2 = 4245

La distance (quadratique, vous l’aurez compris) entre notre couleur et le blanc sera :
(1-255)**2 + (20-255)**2+(62-255)**2 = 156 990

Conclusion : notre couleur est plus proche du noir que du blanc.

Si nous savons maintenant calculer une distance entre deux couleurs, il nous reste cependant un petit problème : nos couleurs ne sont pas notées en notation RGB mais en hexadécimales.

Comment passer d’une notation à une autre ?

Facile avec SAS !

Code:

data test; 
   couleur="CX01143E";
   R=input(substr(couleur,3,2),hex2.);
   G=input(substr(couleur,5,2),hex2.);
   B=input(substr(couleur,7,2),hex2.);
run;

Vous obtenez :
http://www.sas-sr.com/img/coul18_2.png

Les composantes RGB sont notes en hexadécimales : 01 , 14 , 3E

Pour les « convertir », il suffit d’utiliser la fonction INPUT et l’INFORMAT HEX2.

Nous pouvons donc maintenant calculer une distance entre toutes nos couleurs et cette couleur CX01143E.

Code:

data colorselec2;
   set colorselec;
   couleur="CX01143E";
   distance=(input(substr(color,3,2),hex2.) - input(substr(couleur,3,2),hex2.))**2 +
            (input(substr(color,5,2),hex2.) - input(substr(couleur,5,2),hex2.))**2 +
            (input(substr(color,7,2),hex2.) - input(substr(couleur,7,2),hex2.))**2 ;
run;

Voici les 10 premières observations de votre table :

http://www.sas-sr.com/img/coul18_3.png

Les couleurs 2, 4, 8 et 9 sont en fait très proches de CX01143E. Nous pourrions donc considérer qu’il s’agit là d’une seule et même couleur.
(vous noterez en passant que les couleurs 3,5,6,7 et 10 semblent très proches...)

La question qui va se poser maintenant est la suivante : à partir de quelle distance va-t-on considérer que des couleurs sont différentes ?

Je n’en sais rien… mais tout ce que je souhaite, c’est obtenir en tout 12 couleurs. Ma réponse sera alors très pragmatique : il faut que cette distance critique soit telle que mes 3122 couleurs soient résumées en 12 couleurs.

Si nous réussirons ce regroupement, il nous faudra alors répondre à la question suivante : « certes, on obtient 12 groupes mais quelle est la couleur à associer à chacun des groupes ? »

Je vous répondrai alors « une couleur « moyenne pondérée » des couleurs d’un même groupe »

Je vous laisse réfléchir à tout ça…

à la semaine prochaine

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr
Flux RSS