EDA - Venda de jogos
Possíveis Perguntas
- Qual o jogo mais vendido por região/Genero/Plataforma ? OK
- Jogo infantil vende mais do que adultos/Cultura do Pais também influência ? - Procurar base para join com classificação
- Jogos exclusivos vendem mais ? OK
- Concorrencia entre exclusivos (Principais Fabricantes Video Game)?
- Produtora que mais vende e mais jogos ? Venda por jogo ? Ok
- Será que a os NA indicam o comportamento do resto do mundo ? OK
- Há anos com mais vendas de jogos ? OK
- Genero por Região ? OK
!pip install -U seaborn
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
%matplotlib inline
from scipy import stats
df = pd.read_csv('vgsales.csv')
df.shape
df.info()
df.head()
df.isna().sum()/df.shape[0]
df.columns.str.lower()
columns_renamed = {
'Rank': 'rank',
'Name': 'name',
'Platform': 'platform',
'Year': 'year',
'Genre': 'genre',
'Publisher': 'publisher',
'NA_Sales': 'na_sales',
'EU_Sales': 'eu_sales',
'JP_Sales': 'jp_sales',
'Other_Sales': 'other_sales',
'Global_Sales': 'global_sales'
}
df.rename(columns=columns_renamed, inplace=True)
df[df.year.isna()]
df[df.publisher.isna()]
df.dropna(inplace=True)
df.year =df.year.astype(int)
df.shape
df[df.duplicated()].count()
df.info()
df.head()
df.describe()
df_top_games = df[['name', 'na_sales', 'eu_sales', 'jp_sales', 'other_sales']]
for col in ['na_sales', 'eu_sales', 'jp_sales', 'other_sales']:
print(col)
print(df_top_games[df_top_games[col]==df_top_games[col].max()])
O Jogo mais vendido nas regiões foram Wii Sports, Pokemon, GTA
for col in ['na_sales', 'eu_sales', 'jp_sales', 'other_sales']:
df_plot = df_top_games.sort_values(by=col, ascending=False).head(5)
df_plot[['name',col]].set_index('name').plot.bar(rot=90)
plt.title(f'Sales in {col}')
df.head()
df_genre = df[['name','genre', 'global_sales']]
df_genre.groupby('genre').agg({'name':'first', 'global_sales':'max'})
df_genre.genre.unique()
df_plat = df[['name','platform', 'global_sales']]
df_plat.groupby('platform').agg({'name':'first', 'global_sales':'max'}).sort_values(by='global_sales', ascending=False)
df_unique_game_by_plat = df.groupby('name').agg({'platform':'nunique'})
df_unique_game_by_plat = df_unique_game_by_plat[df_unique_game_by_plat.platform==1].reset_index()
df_exclusive = df.merge(df_unique_game_by_plat, on='name', how='left')
df_exclusive.rename(columns={'platform_y':'is_exclusive'}, inplace=True)
df_exclusive.is_exclusive = df_exclusive.is_exclusive.fillna(0)
df_exclusive.groupby(['year','is_exclusive']).sum()[['global_sales']].reset_index().head()
df_exclusive.groupby(['year','is_exclusive']).sum()[['global_sales']].reset_index().pivot('year','is_exclusive','global_sales').plot(figsize=(15,10))
plt.title('Vendas Exclusivos x Não Exclusivos por Ano')
plt.legend(['Não Exclusivo','Exclusivo'])
plt.show()
df.head()
df_publisher = df.groupby('publisher').agg({'global_sales':'sum', 'name':'nunique'})
df_publisher.sort_values('global_sales', ascending=False)['global_sales'].head().plot.bar()
plt.title('Top 5 Publisher in Global Sales')
plt.show()
df_publisher.sort_values('name', ascending=False)['name'].head().plot.bar()
plt.title('Top 5 Publisher Number of Games')
plt.show()
df['sales_without_na'] = df['jp_sales']+df.eu_sales+df.other_sales
df.groupby('year').agg({'sales_without_na':'sum', 'na_sales':'sum', 'jp_sales':'sum'}).plot(figsize=(15,10))
corr = df[['na_sales','sales_without_na', 'eu_sales','jp_sales','global_sales']].corr()
corr
sns.heatmap(corr)
plt.title('Correlation')
plt.show()
df.head()
df_genre_by_region = df.groupby('genre').sum()
df_genre_by_region.head()
df_genre_by_region[['na_sales','eu_sales', 'jp_sales', 'other_sales']].plot.barh(figsize=(15,10))
plt.show()
df.name = df.name.str.lower()
df.name = df.name.str.replace(' ', '_')
!pip install unidecode
import unidecode
df.name = df.name.apply(unidecode.unidecode)
df_1 = df[['name']]
df_2 = df[['name']]
df_1['key'] = 0
df_2['key'] = 0
## df_matrix = df_2.merge(df_1, how='outer', on='key', validate='many_to_many', suffixes=('x_','y_'))
# JACCARD
# def minhash(input_question, compare_question):
# score = 0.0
# shingles = lambda s: set(s[i:i+3] for i in range(len(s)-2))
# jaccard_distance = lambda seta, setb: len(seta & setb)/float(len(seta | setb))
# try:
# score = jaccard_distance(shingles(input_question), shingles(compare_question))
# except ZeroDivisionError:
# print('ZeroDivisionError')
# return score
# df['score'] = df.apply(lambda x: minhash(x.x_name, y_name))
for col in ['na_sales', 'eu_sales', 'jp_sales', 'other_sales']:
print(col)
print(df[df[col]==df[col].min()].head(1))