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.
W celu zapewnienia powtarzalności wyników ziarno zostało ustawione na 23.
set.seed(23)
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 = ",")
Brak modyfikacji surowych danych
colors_clean <- colors_raw
Usunięcie nadmiarowej kolumny design_id, która nie miała wykorzystania w schemacie
elements_clean <- elements_raw[, -4]
Brak modyfikacji surowych danych
inventories_clean <- inventories_raw
Brak modyfikacji surowych danych
inventory_minifigs_clean <- inventory_minifigs_raw
Usunięcie nadmiarowej kolumny img_url, która nie podlega analizie
inventory_parts_clean <- inventory_parts_raw[, -6]
Brak modyfikacji surowych danych
inventory_sets_clean <- inventory_sets_raw
Usunięcie nadmiarowej kolumny img_url, która nie podlega analizie
minifigs_clean <- minifigs_raw[, -4]
Brak modyfikacji surowych danych
part_categories_clean <- part_categories_raw
Brak modyfikacji surowych danych
part_relationships_clean <- part_relationships_raw
Brak modyfikacji surowych danych
parts_clean <- parts_raw
Usunięcie nadmiarowej kolumny img_url, która nie podlega analizie
sets_clean <- sets_raw[, -6]
Brak modyfikacji surowych danych
themes_clean <- themes_raw
| 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 | ▇▁▁▁▁ |
| 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 | ▇▁▁▁▁ |
| 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 | ▇▁▁▁▁ |
| 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 | ▇▁▁▁▁ |
| 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 | ▇▁▁▁▁ |
| 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 | ▇▁▁▁▁ |
| 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 | ▇▁▁▁▁ |
| 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 | ▇▇▇▇▇ |
| 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 |
| 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 | ▃▃▂▁▇ |
| 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 | ▇▁▁▁▁ |
| 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 | ▅▃▂▇▂ |
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.
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.
Wykres przestawia porównanie liczbę części zawierających element z
tymi, które są bez elementów
Wykres przestawia porównanie liczbę elementów zawierającej jakiś
kolor z tymi, które są bez koloru
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.
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.
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.
Warto zwrócić uwagę, że jeśli temat przewodni nie miał nadrzędnego tematu, to traktowany był on jako własny nadrzędny temat
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
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