(kaggle)Video Game Sales电子游戏销售分析

项目介绍

项目来源:kaggle
项目介绍:由vgchartz.com的一个刮版生成的,有一份综合的游戏行业销售数据,希望产生一份综合的游戏行业报告
数据介绍:包含游戏名称、类型、发行时间、发布者以及在全球各地的销售额数据。
字段包括
RANK-总销售额的排名
Name-游戏的名字
Platform-游戏发布平台(即PC,PS4等)
Year-游戏发行的年份
Genre-游戏的类型
Publisher-游戏的出版者
NA_Sales -北美销售额(百万)
EU_Sales -欧洲销售额(百万)
JP_Sales -日本销售额(百万)
Other_Sales—世界其他地区销售额(百万)
Global_Sales—全球销售总额。
适用场景:电商、游戏销售,常规销售数据。
数据量:11列共1.66W数据量。

python:3.7.1

模块导入

分析思路


image.png
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import pyecharts
import datetime
%matplotlib inline

plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

#警告删除
import warnings
warnings.simplefilter(action="ignore", category=FutureWarning)

#画图风格
plt.style.use("fivethirtyeight")

import seaborn as sns
# sns.set(style="white")
# sns.set(style="whitegrid", color_codes=True)

#导入数据
df = pd.read_csv('vgsales.csv')

描述性分析

df.info()

模块导入

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import pyecharts
import datetime
%matplotlib inline

plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

#警告删除
import warnings
warnings.simplefilter(action="ignore", category=FutureWarning)

#画图风格
plt.style.use("fivethirtyeight")

import seaborn as sns
# sns.set(style="white")
# sns.set(style="whitegrid", color_codes=True)

#导入数据
df = pd.read_csv('vgsales.csv')

描述性分析

df.info()

模块导入

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import pyecharts
import datetime
%matplotlib inline

plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

#警告删除
import warnings
warnings.simplefilter(action="ignore", category=FutureWarning)

#画图风格
plt.style.use("fivethirtyeight")

import seaborn as sns
# sns.set(style="white")
# sns.set(style="whitegrid", color_codes=True)

#导入数据
df = pd.read_csv('vgsales.csv')

描述性分析

df.info()
image.png
df.describe().T
image.png

  • 几大市场中北美市场的平均销量最高,销量最大值也最高
  • 日本市场均销量最低,销量最大值也最低,且截止到四分卫数的时候也只有0.04
  • 三大市场都存在分布极度不均匀的情况
df.describe(include = 'object').T
image.png
  • 一共有31个游戏平台,12个游戏类型
  • 578个发行商

Data Processing

df.head()
image.png
df[df['Publisher'].isnull()|df['Year'].isnull()].shape
  • 发现空值总行为307,总行数为16598,占比只有百分之1.8%
  • 所以可以执行删除操作不会影响平衡
df.dropna(how='any',inplace=True)
df.info()
image.png

再次查看describe看有没有大幅变动

df.describe().T
image.png

EDA

1.用户喜好方向

用户长久最喜欢的游戏类型是?这种趋势最近是否发生了变化?

1.用户喜好方向

用户长久最喜欢的游戏类型是?这种趋势最近是否发生了变化?

FGE=pd.pivot_table(df,index='Year',columns='Genre',values='Global_Sales',aggfunc=np.sum).sum().sort_values(ascending=False)
FGE=pd.DataFrame(data=FGE,columns={'Genre_sales'})
FGE_near5=pd.pivot_table(df,index='Year',columns='Genre',values='Global_Sales',aggfunc=np.sum).iloc[-5:,:].sum().sort_values(ascending=False)
FGE_near5=pd.DataFrame(data=FGE_near5,columns={'Genre_sales'})
fig,(ax1,ax2)=plt.subplots(2,1,figsize=(12,6))
sns.barplot(x=FGE.index,y='Genre_sales',data=FGE,ax=ax1)
sns.barplot(x=FGE_near5.index,y='Genre_sales',data=FGE_near5,ax=ax2)
image.png
  • 可看出最近五年用户最喜爱的游戏类型依然还是动作类
  • 运动类和射击类地位互换了
  • 横板类(Platform)可能由于3D游戏技术的发展渐渐淡出视野
  • 悬疑类大降,原因未知

用户最喜欢的游戏平台是什么?这种趋势最近是否发生了变化?

FPF=pd.pivot_table(df,index='Year',columns='Platform',values='Global_Sales',aggfunc=np.sum).sum().sort_values(ascending=False)
FPF=pd.DataFrame(data=FPF,columns={'Global_Sales'})
FPF_near5=pd.pivot_table(df,index='Year',columns='Platform',values='Global_Sales',aggfunc=np.sum).iloc[-5:,:].sum().sort_values(ascending=False)
FPF_near5=pd.DataFrame(data=FPF_near5,columns={'Global_Sales'})
fig,(ax1,ax2)=plt.subplots(2,1,figsize=(12,6))
sns.barplot(x=FPF.index,y='Global_Sales',data=FPF,ax=ax1)
sns.barplot(x=FPF_near5.index,y='Global_Sales',data=FPF_near5,ax=ax2)
image.png
  • 总体可以看出,时代的发展直接体现在技术上的变革,大部分不支持最新游戏的老版平台都被慢慢淘汰了
  • PS2不见踪影,PS4独占鳌头,DS和3DS的情况如出一辙
  • 老牌平台之间被新版平台排斥,X360仍在坚守
  • 令我吃惊的是Wli居然垮得这么恼火

2.企业方向

前五发行商的销售情况以及近年来的总体变化

PBL=pd.pivot_table(data=df,index='Publisher',values='Global_Sales',aggfunc=np.sum)
PBL=PBL.sort_values(by='Global_Sales',ascending=False)
PBL_near5=df[df['Year']>2013]
PBL_near5=pd.pivot_table(data=PBL_near5,index='Publisher',values='Global_Sales',aggfunc=np.sum)
PBL_near5=PBL_near5.sort_values(by='Global_Sales',ascending=False)
from pyecharts import Pie
pie = Pie("发行商饼状图", "长短期对比分析",title_pos='right',width=900,height=300)
pie.add("长期", PBL.head().index, PBL.head().values ,center=[25,50],is_legend_show=False,is_label_show=True)
pie.add("短期", PBL_near5.head().index, PBL_near5.head().values ,center=[75,50],is_legend_show=False,is_label_show=True)
#保存图表
pie

![image.png](https://upload-images.jianshu.io/upload_images/16489569-b2d07dd3492a6704.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

* 索尼最近几年乏力
* 育碧稳步提升
* 任天堂地位不倒,但比重下降
* EA,暴雪风韵犹存

3.市场方向

游戏市场的总体发展趋势

```python
M=['NA_Sales','EU_Sales','JP_Sales','Other_Sales','Global_Sales']
#绘制各地区销量走势图
df5market_p=pd.pivot_table(df,index='Year',values=M,aggfunc=np.sum)
fig=plt.figure(figsize=(10,6))
sns.lineplot(data=df5market_p)
plt.title('五大市场发展趋势')
image.png
  • 可看出,从1995年销量开始暴涨
  • 2005-2010间数据达到峰值
  • 但是2015年后又开始狂跌

销量趋势惨不忍睹,是因为龙头不行还是总体不行呢,我们看五大发行商的历史销售情况

P=['Nintendo','Electronic Arts','Activision','Sony Computer Entertainment','Ubisoft']
df5PBL=df[df['Publisher'].isin(P)]
df5PBL_p=pd.pivot_table(data=df5PBL,index='Year',columns='Publisher',values='Global_Sales',aggfunc=np.sum)
df5PBL_p.plot(title='五大发行商历史销售情况',figsize=(12,6))
image.png
  • 任天堂在2006年左右赢来了一次大爆发
  • 其他发行商在这个节点反而下降了
  • 2007年左右任天堂又被其他发行商迅速抢回市场份额
  • 在2009年左右任天堂最后一次反扑之后和其他发行商一起下滑

那么这五家厂商他们专精的领域是什么类型的游戏呢?各自又在什么市场有主导地位呢?

df5PBL_G_M_p=pd.pivot_table(data=df5PBL,index=['Genre','Publisher'],values=M,aggfunc=np.sum)
df5PBL_G_M_p.sort_values(by=['Genre','Global_Sales'],ascending=False).head() #这里必须对Genre排序不然会乱,只能对Genre分组
image.png

换位百分比展示为

df5PBL_G_M_p_pct=df5PBL_G_M_p.div(df5PBL_G_M_p.groupby(level=0).sum()).round(2)
df5PBL_G_M_p_pct=df5PBL_G_M_p_pct.sort_values(by=['Genre','Global_Sales'],ascending=False)
df5PBL_G_M_p_pct

以下为部分缩略图


image.png
  • 任天堂任然处于龙头地位,在大部分领域占比第一
  • EA则在运动和模拟领域站住了脚跟
  • 射击领域暴雪一马当先
  • 动作领域育碧和暴雪持平

近年来五大发行商的市场占额又是如何呢?

PBL_near5_5p=df[(df['Year']>2013)&(df['Publisher'].isin(P))]
PBL_near5_5p_G_M_p=pd.pivot_table(data=PBL_near5_5p,index=['Genre','Publisher'],values=M,aggfunc=np.sum)
PBL_near5_5p_G_M_p_pct=PBL_near5_5p_G_M_p.div(PBL_near5_5p_G_M_p.groupby(level=0).sum()).round(2)
PBL_near5_5p_G_M_p_pct=PBL_near5_5p_G_M_p_pct.sort_values(by=['Genre','Global_Sales'],ascending=False)
PBL_near5_5p_G_M_p_pct

以下为部分缩略图


image.png
  • 任天堂地位不倒
  • EA垄断运动领域
  • 暴雪在策略,射击,冒险类中比较突出
  • 育碧则占据了动作和新领域音乐类的大部分市场
  • 索尼市场分布一直比较均衡

建模预测

假如我是暴雪(妹想到有朝一日我也能为部落而战),现在要发行一款名为'Oligay'的真人射击游戏,预测一下在五大市场的2020年销售额以及总排名,怎么做?(是的 没有错 干了奥里给)

1.首先我们要提取出所有暴雪在射击领域的所有数据

A_S =df[(df['Year']<2020)&(df['Genre']=='Shooter')&(df['Publisher']=='Activision')]
A_S.head()
image.png
A_S_p=pd.pivot_table(data=A_S,index='Year',values=M,aggfunc=np.sum) #由于要汇总每年的数据所以只有暂时抛弃掉Platform
A_S_p.head()
image.png

对时间列处理

A_S_p.index=A_S_p.index.astype(str)
A_S_p.index=A_S_p.index.str.replace('\.0','')
A_S_p.index
image.png
A_S_p['Date_Time'] = pd.to_datetime(A_S_p.index)
A_S_p.index = A_S_p.Date_Time
A_S_p.drop(['Date_Time'],axis=1,inplace=True)
A_S_p.tail()
image.png

基础样本做好了,之后我的思路是,对五大市场的销售额依据新做的Date_Time进行时间序列预测,然后再预测新游戏'oligay'的排名

由于是时间序列数据所以我们不能随机切分训练与验证集要按照时间来

train = A_S_p[:int(0.8*(len(A_S_p)))]
valid = A_S_p[int(0.8*(len(A_S_p))):]

from statsmodels.tsa.vector_ar.var_model import VAR
model = VAR(endog=train)
model_fit = model.fit()

prediction = model_fit.forecast(model_fit.y, steps=len(valid))

model = VAR(endog=A_S_p)
model_fit = model.fit()
yhat = model_fit.forecast(model_fit.y, steps=1)
print(yhat)
image.png

发现结果并不理想,应该是时间序列的各项调整还没有加入的原因(pdf检验,平稳性处理等),还有关于市场的切入,营销的做法也没有写,有时间再搞,我大奥力给不能灭亡(手动狗头...

数据分析新人,希望巨佬不吝赐教

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容