#Wczytanie danych z csv do dataframe w celu wstepnej analizy

import pandas as pd import matplotlib as plt

df = pd.read_csv(‘data.csv’)

print(“Dataset Overview:”) display(df.head(1000)) print(f”rows: {len(df)}“)

#Pobranie wszystkich unikalnych nazw platform z danych i posortowanie ich alfabetycznie w celu sprawdzenia nazw i ich przypisania do producenta w dalszej czesci kodu

unique_platforms = sorted(df['platform'].unique())
print("\nUnique Platforms found in data:")

print(unique_platforms)
Unique Platforms found in data:
['3DS', 'Atari', 'DS', 'GB', 'GBA', 'GBC', 'GC', 'Game Boy', 'Game Boy Advance', 'Game Boy Color', 'GameCube', 'N64', 'NES', 'Nintendo 3DS', 'Nintendo 64', 'Nintendo DS', 'Nintendo Switch', 'PC', 'PS', 'PS2', 'PS3', 'PS4', 'PS5', 'PSP', 'PSV', 'PlayStation', 'PlayStation 2', 'PlayStation 3', 'PlayStation 4', 'PlayStation 5', 'SNES', 'Super Nintendo Entertainment System', 'Switch', 'Wii', 'Wii U', 'X360', 'XB', 'XOne', 'XS', 'Xbox', 'Xbox 360', 'Xbox One', 'Xbox One S', 'Xbox Series S', 'Xbox Series X', 'playstation', 'playstation 2', 'playstation 3', 'playstation 4', 'playstation 5', 'psp', 'psv', 'xbox', 'xbox 360', 'xbox one', 'xbox one s', 'xbox series s', 'xbox series x']
#Mapowanie produktow dla trzech firm oraz sprawdzenie, co wpada do 'OTHER'
def test_mapping(platform):
    p = str(platform).lower().strip()

    if any(x in p for x in ['nintendo', 'wii', 'ds', 'game boy', 'gb', 'nes', 'snes', 'switch', 'n64', 'gamecube', 'gc']):
        return "Nintendo"

    if any(x in p for x in ['playstation', 'ps', 'psp', 'vita']):
        return "Sony"

    if any(x in p for x in ['xbox', 'xone', 'xb', 'xs', 'x360']):
        return "Microsoft Game Studios"
        
    #Zamiast None uzylem "OTHER" aby podejrzec jakie platformy sa odrzucane
    return "OTHER"

#Tworzenie malej tabeli pomocnicej dla sprawdzenia poprawnosci mapowania
mapping_check = pd.DataFrame({'Original': unique_platforms})
#Funkcja testowa
mapping_check['Mapped_Category'] = mapping_check['Original'].apply(test_mapping)

print("\n--- Mapping Verification ---")
#Wyswietlanie platform, ktore nie zostaly wpisane do Microsoft, Sony, Nintendo
print(mapping_check[mapping_check['Mapped_Category'] == "OTHER"])
#Wyswietlanie pierwszych 100 poprawnie przypisanych platform
print(mapping_check[mapping_check['Mapped_Category'] != "OTHER"].head(100))
--- Mapping Verification ---
   Original Mapped_Category
1     Atari           OTHER
17       PC           OTHER
                               Original         Mapped_Category
0                                   3DS                Nintendo
2                                    DS                Nintendo
3                                    GB                Nintendo
4                                   GBA                Nintendo
5                                   GBC                Nintendo
6                                    GC                Nintendo
7                              Game Boy                Nintendo
8                      Game Boy Advance                Nintendo
9                        Game Boy Color                Nintendo
10                             GameCube                Nintendo
11                                  N64                Nintendo
12                                  NES                Nintendo
13                         Nintendo 3DS                Nintendo
14                          Nintendo 64                Nintendo
15                          Nintendo DS                Nintendo
16                      Nintendo Switch                Nintendo
18                                   PS                    Sony
19                                  PS2                    Sony
20                                  PS3                    Sony
21                                  PS4                    Sony
22                                  PS5                    Sony
23                                  PSP                    Sony
24                                  PSV                    Sony
25                          PlayStation                    Sony
26                        PlayStation 2                    Sony
27                        PlayStation 3                    Sony
28                        PlayStation 4                    Sony
29                        PlayStation 5                    Sony
30                                 SNES                Nintendo
31  Super Nintendo Entertainment System                Nintendo
32                               Switch                Nintendo
33                                  Wii                Nintendo
34                                Wii U                Nintendo
35                                 X360  Microsoft Game Studios
36                                   XB  Microsoft Game Studios
37                                 XOne  Microsoft Game Studios
38                                   XS  Microsoft Game Studios
39                                 Xbox  Microsoft Game Studios
40                             Xbox 360  Microsoft Game Studios
41                             Xbox One  Microsoft Game Studios
42                           Xbox One S  Microsoft Game Studios
43                        Xbox Series S  Microsoft Game Studios
44                        Xbox Series X  Microsoft Game Studios
45                          playstation                    Sony
46                        playstation 2                    Sony
47                        playstation 3                    Sony
48                        playstation 4                    Sony
49                        playstation 5                    Sony
50                                  psp                    Sony
51                                  psv                    Sony
52                                 xbox  Microsoft Game Studios
53                             xbox 360  Microsoft Game Studios
54                             xbox one  Microsoft Game Studios
55                           xbox one s  Microsoft Game Studios
56                        xbox series s  Microsoft Game Studios
57                        xbox series x  Microsoft Game Studios
#Definiowanie listy nazw kolumn, ktore zawieraja wyniki sprzedazy z poszczegolnych regionow
cols = ['NA_Sales', 'EU_Sales', 'JP_Sales', 'other_Sales']

#Tworzenie nowej kolumny Global Sales, sumujac wartosc z listy 'cols' dal kazdego wiersza (axis=1 sumowanie poziomo)
df['Global_Sales'] = df[cols].sum(axis=1)

#Aplikowanie funkcji 'test_mapping' do kazdego elementu w kolumnie 'platform', w celu przypisania producenta do nowej kolumny 'Console_Maker'
df['Console_Maker'] = df['platform'].apply(test_mapping)

#Filtrowanie danych, odrzucamy "OTHER"
#Grupowanie wg producenta
#Sumowanie globalnej sprzedazy dla kazdej grupy
#Sortowanie wynikow od najwiekszej sprzedazy do najmniejszej
final_data = df[df['Console_Maker'] != 'OTHER'].groupby('Console_Maker')['Global_Sales'].sum().sort_values(ascending=False)
display_df = final_data.reset_index()

print(display_df)
            Console_Maker  Global_Sales
0                Nintendo        515.46
1                    Sony        449.56
2  Microsoft Game Studios        345.42
#Wizualizacja sprzedazy

import matplotlib.pyplot as plt
import pandas as pd

plt.figure(figsize=(10, 6))

#Przypisanie kolorow do slupkow zgodnie z kolorem danego producenta Czerwony=Nintendo, Niebieski=Sony, Zielony=Microsoft
final_data.plot(kind='bar', color=['#E60012', '#003087', '#107C10'])
plt.title('Total Global Sales by Console Maker')
plt.ylabel('Total Sales (Milions)')

#Ustawienie nazw firm poziomo
plt.xticks(rotation=0) 

#Inne kosmetyczne rzeczy, siatka dla OY, styl przerywany -- z przezroczystoscia 0.7
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
png
png
#Odpowiedź do zadania

def answer() -> dict[str, float]:
    return {
        "Nintendo": 515.46,
        "Sony": 449.56,
        "Microsoft Game Studios": 345.42,
    }
print(answer())
{'Nintendo': 515.46, 'Sony': 449.56, 'Microsoft Game Studios': 345.42}
#Analiza sprzedazy globalnej (Summary Statistics, Correlation matrix, Histogram)

#Summary statistics Global

sales_data = df[cols + ['Global_Sales']]

print("--- Summary Statistics for Sales (in Milions) ---")
print(sales_data.describe())
print("\n" + "="*70 + "\n")

#Srednia globalna sprzedaz na gre wynosi 1.35 mln sztuk a maksymanla sprzedaz wynosi 5.09 mln sztuk
#Najwieksza srednia sprzedaz pochodzi z NA North America
--- Summary Statistics for Sales (in Milions) ---
         NA_Sales     EU_Sales     JP_Sales  other_Sales  Global_Sales
count  1000.00000  1000.000000  1000.000000  1000.000000   1000.000000
mean      0.48664     0.375730     0.296340     0.194230      1.352940
std       0.48608     0.371555     0.311179     0.190792      0.718512
min       0.00000     0.000000     0.000000     0.000000      0.150000
25%       0.13000     0.120000     0.080000     0.060000      0.847500
50%       0.35000     0.290000     0.190000     0.130000      1.220000
75%       0.68000     0.490000     0.400000     0.270000      1.710000
max       3.87000     2.930000     2.510000     1.130000      5.090000

======================================================================
#Analiza korelacji

print("--- Correlation matrix for Sales ---")
correlation_matrix = sales_data.corr()
print(correlation_matrix)
print("\n" + "="*70 + "\n")

#Silna korelacja - sprzedaz w NA ma najsilniejszy zwiazek z calkowita sprzedaza globalna
#Slaba korelacja regionalna, korelacje miedzy regionami np NA z JP, EU z JP sa bardzo slabe co sugeruje, ze sprzedaz w jednym regionie jest malo zalezna od sprzedazy w drugim
--- Correlation matrix for Sales ---
              NA_Sales  EU_Sales  JP_Sales  other_Sales  Global_Sales
NA_Sales      1.000000  0.050504  0.000433    -0.011134      0.699856
EU_Sales      0.050504  1.000000 -0.025472    -0.018870      0.535241
JP_Sales      0.000433 -0.025472  1.000000     0.008057      0.422348
other_Sales  -0.011134 -0.018870  0.008057     1.000000      0.251737
Global_Sales  0.699856  0.535241  0.422348     0.251737      1.000000

======================================================================
#Wizualizacja rozkladu

plt.figure(figsize=(8,5))
plt.hist(df['Global_Sales'], bins=30, edgecolor='black', color='skyblue')
plt.title('Rozkład Sprzedaży Globalnej')
plt.xlabel('Sprzedaż Globalna (Mln)')
plt.ylabel('Liczba Gier')
plt.grid(axis='y', alpha=0.6)

#Histogram pokazuje, ze rozklad sprzedazy globalnej jest mocno prawoskosny, oznacza to, ze wiekszosc gier osiaga niska sprzedaz, a tylko niewielka liczba tytulow, osiaga bardzo wysoka sprzedaz
png
png
#Sumary Statistics (Nintendo, Sony, Microsoft)

df_filtered = df[df['Console_Maker'].isin(['Nintendo', 'Sony', 'Microsoft Game Studios'])]
summary_stats = df_filtered.groupby('Console_Maker')['Global_Sales'].describe()
print("--- Summary Statistics by Console Makers ---"   )
print(summary_stats)

#Nintendo ma najwyzsza srednia sprzedaz na gre (1.40 mln) oraz najwyzsza sprzedaz pojedynczego tytulu (5.09 mln)

#Sony ma najwyzsza mediane (1.28 mln), co oznacza ze typowa gra na Sony sprzedaje sie lepiej niz typowa gra u konkurencji

#Microsoft ma najmniej gier w zestawieniu danych (269) i nizsza srednia sprzedaz niz konkurencja
--- Summary Statistics by Console Makers ---
                        count      mean       std   min   25%   50%   75%  \
Console_Maker                                                               
Microsoft Game Studios  269.0  1.284089  0.663871  0.15  0.83  1.13  1.65   
Nintendo                369.0  1.396911  0.772189  0.21  0.88  1.22  1.74   
Sony                    330.0  1.362303  0.705874  0.17  0.84  1.28  1.71   

                         max  
Console_Maker                 
Microsoft Game Studios  3.97  
Nintendo                5.09  
Sony                    4.36