#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()
#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
#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