1 Wstęp

Celem projektu jest analiza bazy danych Lego na przestrzeni lat. Dane pochodzą ze strony: https://rebrickable.com/downloads/

Raport został podzielony na następujące rozdziały:

  • Wstęp

  • Przygotowanie środowiska - przedstawienie bibliotek jakie zostały wykorzystane do realizacji projektu oraz ustawienie ziarna, w celu zapewnienia powtarzalności wyników

  • Schemat danych - przedstawienie schematu danych wykorzystanych do analizy. Warte uwagi jest fakt, iż zdjęcia schematu oraz wykorzystane dane różnią się od siebie w niewielkim stopniu

  • Wstępne przetwarzanie danych - pokazania sposobu wczytania danych, ich wyczyszczenia oraz ukazanie podstawowych statystyk dla każdej z tabel

  • Analiza danych - spojrzenie na dane pod wieloma kątami i zaprezentowanie wyników analizy w postaci tabel i wykresów

  • Przewidywanie dalszych cech zestawów Lego - próba przewidzenia co się stanie dalej z cechami zestawów Lego

Dzięki analizy można dostrzeć, że LEGO praktycznie nieustannie rośnie od momentu powstania pierwszego zestawu. Jednym z przyczyn popularności LEGO jest projektowanie zestawów w tematyce popularnych marek takich jak: Star wars, Bionicle, Ninjago. Na początku istnienia LEGO nie wykorzystywano znanych marek, lecz ogólnikowe tematy takie jak: System, Town, Technic, City. Co ciekawe, projektowanie zestawów nie związane z znanymi markami rośnie z roku na rok, co tylko pokazuje fenomen i popularność LEGO. Według wyników z przeprowadzonych prognoz, liczba zestawów oraz części będzie ciągle rosła.

2 Przygotowanie środowiska

2.1 Wykorzystane biblioteki

  • knitr - tworzenie raportów w R
  • dplyr - przetwarzanie danych
  • DT - wyświetlanie interaktywnych tabel
  • png - wczytywanie i pokazywanie zdjęć
  • skimr - tworzenie podsumowania danych
  • ggplot2 - tworzenie wykresów
  • plotly - tworzenie interaktywnych wykresów
  • gganimate - animowane wykresy
  • magick - łączenie animowanych wykresów
  • forecast - prognoza trendów

2.2 Ustawienie powtarzalności wyników

W celu zapewnienia powtarzalności wyników ziarno zostało ustawione na 23.

set.seed(23)

3 Schemat danych

4 Wstępne przetwarzanie danych

4.1 Wczytanie danych

colors_raw <- read.csv("data/colors.csv", header = T, sep = ",")
elements_raw <- read.csv("data/elements.csv", header = T, sep = ",")
inventories_raw <- read.csv("data/inventories.csv", header = T, sep = ",")
inventory_minifigs_raw <- read.csv("data/inventory_minifigs.csv", header = T, sep = ",")
inventory_parts_raw <- read.csv("data/inventory_parts.csv", header = T, sep = ",")
inventory_sets_raw <- read.csv("data/inventory_sets.csv", header = T, sep = ",")
minifigs_raw <- read.csv("data/minifigs.csv", header = T, sep = ",")
part_categories_raw <- read.csv("data/part_categories.csv", header = T, sep = ",")
part_relationships_raw <- read.csv("data/part_relationships.csv", header = T, sep = ",")
parts_raw <- read.csv("data/parts.csv", header = T, sep = ",")
sets_raw <- read.csv("data/sets.csv", header = T, sep = ",")
themes_raw <- read.csv("data/themes.csv", header = T, sep = ",")

4.2 Przetwarzanie brakujących danych

4.2.1 Colors

Brak modyfikacji surowych danych

colors_clean <- colors_raw

4.2.2 Elements

Usunięcie nadmiarowej kolumny design_id, która nie miała wykorzystania w schemacie

elements_clean <- elements_raw[, -4]

4.2.3 Inventories

Brak modyfikacji surowych danych

inventories_clean <- inventories_raw

4.2.4 Inventory Minifigs

Brak modyfikacji surowych danych

inventory_minifigs_clean <- inventory_minifigs_raw

4.2.5 Inventory Parts

Usunięcie nadmiarowej kolumny img_url, która nie podlega analizie

inventory_parts_clean <- inventory_parts_raw[, -6]

4.2.6 Inventory Sets

Brak modyfikacji surowych danych

inventory_sets_clean <- inventory_sets_raw

4.2.7 Minifigs

Usunięcie nadmiarowej kolumny img_url, która nie podlega analizie

minifigs_clean <- minifigs_raw[, -4]

4.2.8 Part Categories

Brak modyfikacji surowych danych

part_categories_clean <- part_categories_raw

4.2.9 Part Relationships

Brak modyfikacji surowych danych

part_relationships_clean <- part_relationships_raw

4.2.10 Parts

Brak modyfikacji surowych danych

parts_clean <- parts_raw

4.2.11 Sets

Usunięcie nadmiarowej kolumny img_url, która nie podlega analizie

sets_clean <- sets_raw[, -6]

4.2.12 Themes

Brak modyfikacji surowych danych

themes_clean <- themes_raw

4.3 Podstawowe statystyki

4.3.1 Colors

Data summary
id name rgb is_trans
-1 [Unknown] 0033B2 f
0 Black 05131D f
1 Blue 0055BF f
2 Green 237841 f
3 Dark Turquoise 008F9B f
4 Red C91A09 f
Name colors_clean
Number of rows 263
Number of columns 4
_______________________
Column type frequency:
character 3
numeric 1
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
name 0 1 3 28 0 263 0
rgb 0 1 6 6 0 223 0
is_trans 0 1 1 1 0 2 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
id 0 1 651.38 750.55 -1 83 1005 1070.5 9999 ▇▁▁▁▁

4.3.2 Elements

Data summary
element_id part_num color_id
6443403 2277c01pr0009 1
6300211 67906c01 14
4566309 2564 0
4275423 53657 1004
6194308 92926 71
6229123 26561 4
Name elements_clean
Number of rows 84138
Number of columns 3
_______________________
Column type frequency:
character 1
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
part_num 0 1 2 19 0 33765 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
element_id 0 1 5222065.12 1596842.63 9327 4259774 6057754 6262025 61532443 ▇▁▁▁▁
color_id 0 1 539.67 2044.86 -1 8 28 135 9999 ▇▁▁▁▁

4.3.3 Inventories

Data summary
id version set_num
1 1 7922-1
3 1 3931-1
4 1 6942-1
15 1 5158-1
16 1 903-1
17 1 850950-1
Name inventories_clean
Number of rows 37265
Number of columns 3
_______________________
Column type frequency:
character 1
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
set_num 0 1 3 20 0 35644 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
id 0 1 61103.60 51380.10 1 14424 54379 88842 194312 ▇▆▂▂▂
version 0 1 1.09 0.58 1 1 1 1 16 ▇▁▁▁▁

4.3.4 Inventory Minifigs

Data summary
inventory_id fig_num quantity
3 fig-001549 1
4 fig-000764 1
19 fig-000555 1
25 fig-000574 1
26 fig-000842 1
26 fig-008641 1
Name inventory_minifigs_clean
Number of rows 20858
Number of columns 3
_______________________
Column type frequency:
character 1
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
fig_num 0 1 10 10 0 13455 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
inventory_id 0 1 43010.44 52256.78 3 7869 15681 66834 194312 ▇▁▁▁▁
quantity 0 1 1.06 0.78 1 1 1 1 100 ▇▁▁▁▁

4.3.5 Inventory Parts

Data summary
inventory_id part_num color_id quantity is_spare
1 48379c01 72 1 f
1 48395 7 1 f
1 stickerupn0077 9999 1 f
1 upn0342 0 1 f
1 upn0350 25 1 f
3 2343 47 1 f
Name inventory_parts_clean
Number of rows 1180987
Number of columns 5
_______________________
Column type frequency:
character 2
numeric 3
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
part_num 0 1 1 20 0 51051 0
is_spare 0 1 1 1 0 2 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
inventory_id 0 1 50849.46 55136.94 1 9404 22838 87088 194312 ▇▂▁▂▁
color_id 0 1 131.78 862.38 -1 4 15 71 9999 ▇▁▁▁▁
quantity 0 1 3.37 9.95 1 1 2 4 3064 ▇▁▁▁▁

4.3.6 Inventory Sets

Data summary
inventory_id set_num quantity
35 75911-1 1
35 75912-1 1
39 75048-1 1
39 75053-1 1
50 4515-1 1
50 4520-1 2
Name inventory_sets_clean
Number of rows 4358
Number of columns 3
_______________________
Column type frequency:
character 1
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
set_num 0 1 5 20 0 3171 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
inventory_id 0 1 52518.95 59063.13 35 8076 16423 98685 191576 ▇▁▁▂▁
quantity 0 1 1.81 5.67 1 1 1 1 60 ▇▁▁▁▁

4.3.7 Minifigs

Data summary
fig_num name num_parts
fig-000001 Toy Store Employee 4
fig-000002 Customer Kid 4
fig-000003 Assassin Droid, White 8
fig-000004 Man, White Torso, Black Legs, Brown Hair 4
fig-000005 Captain America with Short Legs 3
fig-000006 Lloyd Avatar 5
Name minifigs_clean
Number of rows 13764
Number of columns 3
_______________________
Column type frequency:
character 2
numeric 1
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
fig_num 0 1 10 10 0 13764 0
name 0 1 1 148 0 13354 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
num_parts 0 1 5.3 6.03 0 4 4 5 156 ▇▁▁▁▁

4.3.8 Part Categories

Data summary
id name
1 Baseplates
3 Bricks Sloped
4 Duplo, Quatro and Primo
5 Bricks Special
6 Bricks Wedged
7 Containers
Name part_categories_clean
Number of rows 66
Number of columns 2
_______________________
Column type frequency:
character 1
numeric 1
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
name 0 1 4 44 0 66 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
id 0 1 35.36 19.41 1 19.25 35.5 51.75 68 ▇▇▇▇▇

4.3.9 Part Relationships

Data summary
rel_type child_part_num parent_part_num
P 3626cpr3662 3626c
P 87079pr9974 87079
P 3960pr9971 3960
R 98653pr0003 98086pr0003
R 98653pr0003 98088pat0003
R 98653pr0003 98089pat0003
Name part_relationships_clean
Number of rows 29977
Number of columns 3
_______________________
Column type frequency:
character 3
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
rel_type 0 1 1 1 0 6 0
child_part_num 0 1 1 20 0 27139 0
parent_part_num 0 1 1 19 0 4725 0

4.3.10 Parts

Data summary
part_num name part_cat_id part_material
003381 Sticker Sheet for Set 663-1 58 Plastic
003383 Sticker Sheet for Sets 618-1, 628-2 58 Plastic
003402 Sticker Sheet for Sets 310-3, 311-1, 312-3 58 Plastic
003429 Sticker Sheet for Set 1550-1 58 Plastic
003432 Sticker Sheet for Sets 357-1, 355-1, 940-1 58 Plastic
003434 Sticker Sheet for Set 575-2, 653-1, 460-1 58 Plastic
Name parts_clean
Number of rows 52615
Number of columns 4
_______________________
Column type frequency:
character 3
numeric 1
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
part_num 0 1 1 20 0 52615 0
name 0 1 3 222 0 52103 0
part_material 0 1 4 16 0 7 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
part_cat_id 0 1 38.91 22.08 1 17 41 60 68 ▃▃▂▁▇

4.3.11 Sets

Data summary
set_num name year theme_id num_parts
001-1 Gears 1965 1 43
0011-2 Town Mini-Figures 1979 67 12
0011-3 Castle 2 for 1 Bonus Offer 1987 199 0
0012-1 Space Mini-Figures 1979 143 12
0013-1 Space Mini-Figures 1979 143 12
0014-1 Space Mini-Figures 1979 143 2
Name sets_clean
Number of rows 21880
Number of columns 5
_______________________
Column type frequency:
character 2
numeric 3
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
set_num 0 1 3 20 0 21880 0
name 0 1 2 93 0 18752 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
year 0 1 2007.76 13.96 1949 2001 2012 2018 2024 ▁▁▁▃▇
theme_id 0 1 441.97 215.53 1 273 497 608 752 ▃▃▃▇▇
num_parts 0 1 161.38 418.14 0 3 31 139 11695 ▇▁▁▁▁

4.3.12 Themes

Data summary
id name parent_id
1 Technic NA
3 Competition 1
4 Expert Builder 1
16 RoboRiders 1
17 Speed Slammers 1
18 Star Wars 1
Name themes_clean
Number of rows 468
Number of columns 3
_______________________
Column type frequency:
character 1
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
name 0 1 2 42 0 385 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
id 0 1.00 433.46 216.55 1 250.5 466 625.25 752 ▅▅▅▆▇
parent_id 145 0.69 360.64 197.19 1 186.0 411 512.50 697 ▅▃▂▇▂

5 Analiza danych

5.1 Analiza wykorzystanych kolorów w elementach

Poniższy wykres ukazuje 15 najczęściej używanych kolorów w elementach. Warte również uwagi jest fakt, iż za brak koloru uważa się kolor czarny.

5.2 Analiza najczęściej używanych minifigach w zestawach

Poniższe wykresy ukazuje 10 najczęściej używanych minifigów w zestawach. Pierwszy wykres agreguje dane po nazwach, natomiast drugi po unikalnych indeksach. Analizując uzyskane wyniki możemy dostrzeć, że wyniki różnią się. Wynika to z faktu, iż istnieją minifigi posiadające taką samą nazwę, ale różniącą się indeksem. Takie minifigi różnią się najczęściej barwą kolorów, ilością zastosowanych elementów lub materiałem z których zostały wykonane.

5.3 Liczba części z i bez elementów

Wykres przestawia porównanie liczbę części zawierających element z tymi, które są bez elementów

5.4 Liczba elementów z i bez kolorów

Wykres przestawia porównanie liczbę elementów zawierającej jakiś kolor z tymi, które są bez koloru

5.5 Lista używanych materiałów do tworzenia elementów

Tabela przedstawia jakie materiały oraz w jakiej ilości są wykorzystywane w produkowanych elementach. Jak widać, plastik stanowi znaczącą część wszystkich wykorzystywanych elementów, co widać wyraźnie na wykresie porównujących plastik do pozostałych materiałów.

5.6 Wzrost liczby setów od początku do roku 2022

Wykres przedstawia ile zostało zaprojektowanych setów w każdym roku. Dodatkowo zaprezentowane jest całkowita liczba zaprojektowanych setów dla każdego roku.

5.7 Animacja porównujące podstawowe statystyki dla setów w przeciągu lat

5.8 Korelacja między podstawowymi statystykami związanymi z setami

Z przedstawionych wykresów możemy dostrzec, że mediana części jest najsłabiej skorelowana z pozostałymi wynikami. Natomiast najsilniejszą korelację widać dla sumy części i ilości setów.

5.9 Top 15 najpopularniejszych tematów na podstawie ilości setów

5.10 Top 10 najpopularniejszych tematów przewodnich

Warto zwrócić uwagę, że jeśli temat przewodni nie miał nadrzędnego tematu, to traktowany był on jako własny nadrzędny temat

5.11 Suma setów oraz części dla każdego tematu

5.12 Liczba setów dla top 15 najpopularniejszych tematów na przestrzeni lat

5.13 Animacja przedstawiająca liczbę setów dla top 10 najpopularniejszych tematów na przestrzeni lat

5.14 Liczba części dla top 15 najpopularniejszych tematów na przestrzeni lat

5.15 Animacja przedstawiająca liczbę części dla top 10 najpopularniejszych tematów na przestrzeni lat

5.16 Top 20 najczęśniej występowanych kategorii części

5.17 Porównanie najczęstszych relacji między częściami

6 Przewidywanie dalszych cech zestawów Lego

6.1 Prognoza liczby setów

Według modelu wykorzystującego algorytm arima:

  • W roku 2025 będzie 1127 setów

  • W roku 2027 będzie 1156 setów

  • W roku 2030 będzie 1201 setów

Według modelu wykorzystującego algorytm ets:

  • W roku 2025 będzie 1190 setów

  • W roku 2027 będzie 1242 setów

  • W roku 2030 będzie 1321 setów

6.2 Prognoza ilości części

Według modelu wykorzystującego algorytm arima:

  • W roku 2025 będzie 394662 części

  • W roku 2027 będzie 439642 części

  • W roku 2030 będzie 507113 części

Według modelu wykorzystującego algorytm ets:

  • W roku 2025 będzie 247440 części

  • W roku 2027 będzie 247989 części

  • W roku 2030 będzie 248812 części