đŸȘ Mon site web utilise des cookies

Ces cookies sont uniquement destinés à des fins d'analyse du trafic sur mon site, et sont entiÚrement optionnels.

Shinybricks

Découvrez des sets LEGOŸ brique par brique

Hassan TILKI et Corentin DUCLOUX

26/03/2024

L’histoire de LEGO

Création en 1932 par Ole Kirk Christiansen au Danemark

  • 1946 : Du bois au plastique
  • 1958 : La fameuse “brique” LEGOÂź
  • 1969 – 1977 : CrĂ©ation de la gamme DUPLO et TECHNIC
  • 1999 : PremiĂšre gamme (STAR WARS) de produits dĂ©rivĂ©s
  • 2000 – 2005 : Les difficultĂ©s
  • 2005 – 2015 : La Remontada
  • 2015 – 2024 : Position incontestĂ©e de leader du jouet

Corentin

Je vous propose qu’on se plonge d’abord dans l’histoire de LEGO, vous allez voir que c’est assez intĂ©ressant.

LEGO, ça a été crée en 1932 par Christiansen au Danemark.

Pour la petite histoire, Christiansen c’est un charpentier qui a fait faillite pendant la grande dĂ©pression des annĂ©es 30. Il dĂ©cide de se reconvertir en fabricant de jouets, Ă  l’époque en bois. Pourquoi les jouets vous allez me dire ? En fait, c’est tout bĂȘte, mais les coĂ»ts de production des jouets en bois sont assez bas et la marge est importante.

  1. AprĂšs la seconde guerre mondiale, l’usage du plastique commence Ă  se rĂ©pandre et Ă  ĂȘtre Ă©conomiquement viable pour produire des jouets, mais les consommateurs ne sont pas encore vraiment convaincus et prĂ©fĂšrent toujours les jouets en bois, alors LEGO a du mal Ă  dĂ©coller Ă  cette Ă©poque.

  2. Ce qui va changer la donne c’est le brevet dĂ©posĂ© en 1958 sur la brique rectangulaire Ă  cylindres. L’innovation majeure est la possibilitĂ© d’imbriquer tous les Ă©lĂ©ments entre eux et surtout de pouvoir les retirer sans friction pour pouvoir les rĂ©utiliser ailleurs − Ils viennent d’inventer ce qu’ils appellent le “LEGO System”. C’est assez malin car c’est quasimment les seuls sur le marchĂ© des jouets en plastique Ă  ce moment-lĂ .

  3. Dans les annĂ©es 60-70 et particuliĂšrement, ils diversifient leurs gammes et leur CA augmente considĂ©rablement. C’est dans ce contexte qu’apparait la gamme DUPLO, qui grĂące Ă  des briques plus grosses permet de conquĂ©rir le marchĂ© des enfants de moins de 5 ans (pour Ă©viter qu’ils s’étouffent avec les briques) et la gamme TECHNIC, qui permet de solidifier les structures internes des modĂšles.

  4. Malheureusement, mĂȘme avec l’arrivĂ©e des sets sous licence, le dĂ©but des annĂ©es 2000 est difficile financiĂšrement puisque le groupe essuie des pertes de centaines de millions de dollars Ă  cause d’une politique commerciale qui veut instaurer un tarif unique aux distributeurs pour toute l’Europe, ce qui fait rĂ©duire drastiquement le rĂ©fĂ©rencement des LEGO dans l’ensemble des magasins.

  5. Entre 2005 et 2015, le pari de LEGO ça va ĂȘtre de se recentrer sur son coeur de marchĂ© (les briques) et Ă©viter d’aller dans toutes les directions. Ils vont dĂ©velopper de plus en plus de licences avec Disney, Warner et aussi une plateforme participative qui s’appelle Ideas qui va permettre Ă  des crĂ©ateurs indĂ©pendants de proposer des modĂšles LEGO et les commercialiser si ils atteignent un certain niveau de vote.

  6. Finalement, aujourd’hui et depuis 2015 LEGO c’est le n°1 au niveau des parts de marchĂ© dans le secteur du jouet.

Voilà pour cette présentation de LEGO

Acronymes spécifiques

Définitions

  • Set : Identifiant unique d’une boĂźte LEGOÂź
  • PPP : Price Per Piece
  • AFOL : Adult Fan Of Lego
  • MOC : My Own Creation
  • NPU : Nice Parts Usage
  • SNOT : Studs Not On Top
  • UCS : Ultimate Collector Series

Corentin

Avant d’expliquer notre problĂ©matique, on va aussi prĂ©ciser les termes et acronymes utilisĂ©s dans le monde LEGO, qui peuvent parfois ĂȘtre assez spĂ©cifiques, et qu’on retrouvera tout au long de notre prĂ©sentation, notamment au niveau des reviews.

  1. Un set c’est tout simplement le numĂ©ro que vous retrouvez sur une boĂźte quand vous l’achetez. Ce systĂšme d’identifiant unique a Ă©tĂ© trĂšs pratique pour dĂ©velopper notre appli.

  2. Le ppp c’est le prix divisĂ© par le nombre de piĂšces. C’est un indicateur qui est couramment utilisĂ© dans la communautĂ© pour Ă©valuer si le set vaut le coup d’ĂȘtre achetĂ©. Parce que Ă©videmment un prix par piĂšce trĂšs elevĂ© est perçu nĂ©gativement par les fans.

  3. Un AFOL c’est un adulte qui collectionne les LEGO, en gĂ©nĂ©ral pas pour jouer avec mais pour les exposer.

  4. Un MOC c’est une construction personnalisĂ©e qui n’a pas d’instructions et qui n’est pas officiellement vendue par LEGO.

  5. Un NPU ou Nice Parts Usage, c’est une utilisation inventive de briques par les constructeurs officiels qui rend la construction intĂ©ressante et innovante.

  6. SNOT c’est une technique de construction qui permet d’éviter de montrer les studs (les petit ronds LEGO) et notamment dans les sets de collection c’est apprĂ©ciĂ© parce que ça permet d’avoir un rendu final Ă©lĂ©gant, et pour 200-300€ c’est assez normal.

  7. UCS désigne les énormes sets STAR WARS avec plus de 3-4000 piÚces comme le Faucon Millenium, le Star Destroyer, etc.

Shinybricks, c’est quoi ?

Une plateforme d’analyse LEGO sur un ensemble de points

  • Une analyse par thĂšme
  • Une analyse par an
  • Une analyse par set
  • Un aperçu des stratĂ©gies de pricing adoptĂ©es

Hassan

Notamment dans l’analyse par set on va pouvoir comparer les prix de vente Ă  la commercialisation des sets et les prix actuels quand les sets ont Ă©tĂ© retirĂ©s des Ă©tagĂšres.

Vous allez voir d’ailleurs que ces petites briques c’est parfois plus rentable que des placements financiers.

Sources de données

Source Méthode
Brickset API
Brickeconomy Scraping

⇒ Brickset : rĂ©cupĂ©ration de la base de donnĂ©es complĂšte

⇒ Brickeconomy : rĂ©cupĂ©ration des prix

Hassan

Un point positif c’est qu’en fait il y a beaucoup de donnĂ©es qui existent car il y a des fans fous furieux de LEGO qui passent leur vie Ă  actualiser des forums et sites webs quand un nouveau set sort, c’est par exemple le cas du premier site du tableau ; Brickset, qui a Ă©tĂ© crĂ©e en 1997 et qui recense les LEGO de 1970 Ă  2024.

Surtout l’avantage de ce site c’est qu’il dispose d’une API qui renvoie des rĂ©ponses en JSON et qui est gratuite Ă  utiliser. Il suffit juste de se crĂ©er un compte sur le site, remplir un petit formulaire et ensuite on reçoit une clĂ©.

Pour ceux qui n’ont jamais utilisĂ© d’API, en gros c’est juste une maniĂšre d’échanger de la donnĂ©e entre un client (lĂ  en l’occurence le PC) et le serveur (Ici Brickset). On envoie une requĂȘte HTTP configurĂ©e d’une certaine maniĂšre avec une clĂ© et on rĂ©cupĂšre une rĂ©ponse dans un format d’échange comme le JSON ou du XML.

Un conseil : toujours vĂ©rifier si il existe une API avant de se lancer dans du scraping, c’est quand mĂȘme mieux et ça fait Ă©conomiser du temps.

En revanche, le problĂšme de la base de donnĂ©es Brickset c’est qu’il y a trĂšs peu de prix disponibles dessus. Etant donnĂ© que le prix est une info stratĂ©gique, le site n’a pas intĂ©rĂȘt Ă  la donner gratuitement grĂące Ă  son API.

C’est pour ça qu’on en vient au deuxiĂšme site : Brickeconomy. Alors lĂ , y’a pas d’API, on fait le scraping grĂące au numĂ©ro du set et on rĂ©cupĂšre le prix de vente, le prix actuel quand le set est fermĂ© et le prix actuel quand le set est ouvert.

On va vous détailler un petit peu plus tout ça.

API Brickset

GrĂące au wrapper sur dĂ©veloppĂ© par Jason Bryer, l’utilisation de l’API est encore plus simple !

library(brickset)

sets_2021 <- brickset::getSets(2021)
reviews_29830 <- brickset::getReviews(29830)
instructions_29830 <-brickset::getInstructions(29830)

Note

Ici, on rĂ©cupĂšre les sets de l’annĂ©e 2021, les reviews du setID 29830 et les instructions du setID 29830 directement dans un dataframe.

Corentin

L’avantage c’est qu’il existe dĂ©jĂ  un package R pour interagir avec l’API Brickset.

On va s’intĂ©resser aux 3 fonctions qui suivent.

On voulait aussi un systĂšme semi-automatique qui nous permette d’extraire de maniĂšre optimale les donnĂ©es.

Set Maker

CLI pour extraire les sets par année et les exporter en format parquet grùce à arrow::write_parquet()

── SetMaker ───────────────────────────────────────────────

    “Une petite CLI pour extraire des sets LEGO¼ vers un format
    parquet.”
    — 
Veuillez entrer une annĂ©e entre 1970 et 2024 (annĂ©e actuelle) ⇒ 2018

Résultat :

⇒ sets_2018.parquet dans le dossier /data

Corentin

Une fois qu’on a nos rĂ©sultats par annĂ©e, on peut combiner tous nos fichiers parquet pour avoir un seul dataframe qu’on a appelĂ© df_sets.

Scraping Brickeconomy

Utilisation conjointe des packages {httr2} et {rvest}

  • {httr2} pour effectuer la requĂȘte et changer les headers
  • {rvest} pour faire le scraping

Exemple :

set_number <- "75573-1"

link <- glue::glue(https://www.brickeconomy.com/set/{set_number}/)

link |> ShinyBricksFuncs::make_request()

Corentin

La fonction make_request de notre package ShinyBricksFuncs permet grĂące Ă  httr2, d’effectuer une requĂȘte sur ce lien d’exemple, de lui changer ses headers pour faire passer notre bot pour un utilisateur lambda qui utilise son navigateur, ce qui nous permet de rĂ©cupĂ©rer la page brute et on laisse rvest harvester le rĂ©sultat, c’est Ă  dire rĂ©cupĂ©rer les prix !

Encore une fois c’est pas tout Ă  fait satisfaisant puisqu’on l’a fait que sur un lien, et on a plus de 10000 pages Ă  aller rĂ©cupĂ©rer.

Scraping Launcher

CLI pour extraire les prix par année et les exporter en format feather grùce à feather::write_feather()

── ScrapingLauncher ─────────────────────────────────────

    “Une petite CLI pour lancer le scraping annĂ©e par annĂ©e des sets
    LEGOÂź prĂ©sents sur Brickeconomy vers un format feather.”
    — 

Veuillez entrer une annĂ©e entre 1994 et 2024 (annĂ©e actuelle) ⇒ 2018

Résultat :

⇒ scraping_2018.feather dans le dossier /data

Corentin

En gros le fonctionnement est trĂšs similaire Ă  la premiĂšre CLI Ă  la diffĂ©rence prĂšs que ce n’est plus du parquet mais du feather pour des histoires de vitesse de lecture et d’écriture, le feather c’est plus rapide que du parquet parce que ça ne compresse pas, et Ă©tant donnĂ© que les donnĂ©es sur les prix sont assez petites, pas besoin de parquet, mais c’est vraiment du dĂ©tail.

Une fois qu’on a nos rĂ©sultats par annĂ©e, on peut combiner tous nos fichiers feather pour avoir un seul dataframe qu’on a appelĂ© df_scrap

Fusion !

Hassan

Une fois qu’on a nos deux dataframes on les fusionne et puis on passe à l’appli non ?

Application

Shinybricks a été créée avec {shiny} et {bslib}

Pourquoi bslib ?

Le package {bslib} permet de créer une UI moderne pour Shiny et basée sur la version 5 de Bootstrap.

Pour les autres composants interactifs de l’application :

  • Graphiques rĂ©alisĂ©s avec {plotly}
  • Tableaux rĂ©alisĂ©s avec {gt}

Hassan

Alors pourquoi bslib ? HonnĂȘtement Shiny tout seul ça piquait les yeux, on avait l’impression d’ĂȘtre retournĂ© en 2009, et bslib permet justement de redonner un aspect visuel sympa Ă  l’appli avec des composants comme des cards, des value_boxes, bref des trucs modernes un peu plus sexy que le Shiny de base quoi, que vous avez par exemple vu dans la prĂ©sentation d’AybukĂ© et du Guigs.

Pour les graphiques on a utilisĂ© plotly parce qu’on voulait beaucoup personnaliser les traces pour qu’elles soient Ă  la fois informatives et dans le thĂšme.

Enfin pour les tableaux on a utilisĂ© gt parce que c’est aujourd’hui la librairie de crĂ©ation de tableaux la plus complĂšte sur R.

Je pense qu’on peut passer Ă  la prĂ©sentation.

Conclusion

Application avec de nombreuses fonctionnalités et UI/UX moderne.

En cours


  • Pas assez de donnĂ©es pour faire un modĂšle fiable de sĂ©ries temporelles.
  • Utilisation du package {golem} pour dĂ©ployer l’application en tant que package avec tests et modules, etc.

Hassan

Pour terminer ça a Ă©tĂ© plutĂŽt une belle aventure de faire cette application, on a un peu suĂ© quand il s’agissait de comprendre les messages d’erreur parfois, mais le rendu est lĂ .

Pour ce qui est des limites du projet on aurait voulu faire un modÚle de séries temporelles pour prédire les prix mais ces données là étaient difficiles à scraper sur Brickeconomy.

Enfin il faut qu’on passe Ă  la partie de dĂ©ploiement. Si vous avez des questions n’hĂ©sitez pas !

Retourner vers mon site web

Shinybricks Découvrez des sets LEGOŸ brique par brique Hassan TILKI et Corentin DUCLOUX 26/03/2024

  1. Slides

  2. Tools

  3. Close
  • Shinybricks
  • L’histoire de LEGO
  • Acronymes spĂ©cifiques
  • Shinybricks, c’est quoi ?
  • Sources de donnĂ©es
  • API Brickset
  • Set Maker
  • Scraping Brickeconomy
  • Scraping Launcher
  • Fusion !
  • Application
  • Conclusion
  • f Fullscreen
  • s Speaker View
  • o Slide Overview
  • e PDF Export Mode
  • ? Keyboard Help