分析背景
本数据描述了全球电子游戏市场从 1980 年到 2017 年各游戏类型、出版商、发布平台、全球与地区的游戏销售额情况
电子游戏(electronic Games)又称电玩游戏,是指所有依托于电子设备平台而运行的交互游戏,狭义的时候称视频游戏。根据运行媒介的不同分为五类:主机游戏(狭义的,此处专指家用机游戏,又称视频游戏控制台)、掌机游戏、街机游戏、电脑游戏及手机游戏。在国外有时包括用于赌博的老虎机和柏青哥以及弹珠台。
完善的电子游戏在20世纪末出现,改变了人类进行游戏的行为方式和对游戏一词的定义,属于一种随科技发展而诞生的文化活动。游戏产业与市场分析报告。因电子游戏必须依托电子设备,而游戏软件的发展一直和硬件的发展相辅相成, 所以可依其运行媒介对其进行分类。
电子游戏常见的运行媒介有家用机、掌机、街机、电脑、手机。电子游戏软件与运行媒介两者是一种模组化(Modulized)的关系。一般而言,电子游戏的运行媒介各有不同市场,因此不宜以相同的标准来比较,即使它们之间的游戏常常相互移植。
分析目的
本文通过VG电子游戏销售数据对近三十年来电子游戏行业在全球的发展概况进行分析,找出不同类型的电子游戏的销售市场分布情况,了解全球游戏市场分布和特点,洞察数据特性,为各游戏出版公司的游戏销量提高以及未来游戏市场策略的调整提供数据决策支持
明确问题
- 各年度游戏总销量有何变化,全球各地区销量趋势变化是否一致;目前游戏市场的发展趋势是怎样的?
- 哪种游戏类型销量是最好的?哪种游戏类型的游戏发布数量最多?排在前十的都是什么类型的游戏?
- 不同地区畅销的游戏类型是怎样的?不同地区的用户游戏偏好如何?该如何调整策略?
- 全球各个地区的销量是怎样的?在不同地区游戏的销售情况如何?
- 哪个游戏平台发布数量最多?最有发展潜力?各游戏平台的销量贡献值如何?
- 哪个游戏出版商发布的游戏数量最多?哪个游戏出版商发布的游戏是最受欢迎的?
- 哪些游戏出版商销量最高?最具游戏研发实力?
分析思路
代码实现
导入模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
写入数据
data = pd.read_csv(r'vgsales.csv')# 同级目录下不用 /
data.head() # 展示数据的前 5 行
data.tail() # 展示数据的后 5 行
data.info() # 打印有关 DataFrame 的信息
# 该信息包含列数、列标签、列数据类型、内存使用情况、范围索引以及每列中的单元格数(非空值)
数据清洗
数据清洗原则:
删除重复值:
缺失值的3种查找方法:
- 直接看各列字段的计数值是否相同
- 对各列字段进行筛选操作查看各列有没有空值
- 采用定位条件对各列字段进行空值定位(Excel)
选中游戏类型列,点击编辑-查找-转到
点击定位条件-选择空值后,点击确定
缺失值共有4种处理方式:
- 数据量较少且缺失值可推测出时,可通过手动补齐数据
- 缺失值数据量占比较少,对整体数据量影响不大时,可直接删除缺失数据
- 当需要利用缺失值所在行的数据时,可用平均值进行代替
- 根据缺失值具体情况,可用相关统计模型计算出的值进行代替
一致化处理:
一致化是指数据具有统一的标准和命名。对每个数据列里没有统一格式的值进行处理,便于后续的数据分析工作;由于该数据集结构合理,格式统一,故不需要进行一致化处理
异常值处理:
经过查看数据分析的描述统计,看各个销售额的平均值及最大最小值,发现并没有不合理的地方。所以不对这些字段进行处理
通过info打印,发现 Year 和 Publisher 字段有 null值
缺失值处理:
因为缺失值占比极小,所以直接将缺失值删除
data.dropna(inplace = True)
# 或者:ata.dropna(subset=['Year'])
# dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
#axis:轴。0 或 'index' 表示按行删除 1或'columns'表示按列删除
# how:筛选方式。'any' 表示该行/列只要有一个以上的空值,就删除该行/列 ;‘all’ 表示该行/列全部都为空值,就删除该行/列。
# thresh:非空元素最低数量。int型,默认为None。如果该行/列中,非空元素数量小于这个值,就删除该行/列。%0D%0A%0D%0Asubset:子集。列表,元素为行或者列的索引。如果axis=0或者‘index’,subset中元素为列的索引;如果axis=1或者‘column’,subset中元素为行的索引。由subset限制的子区域,是判断是否删除该行/列的条件判断区域。%0D%0A%0D%0Ainplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操作,返回值为None。
重复值处理:
本例中没有重复值
data.drop_duplicates(inplace = True)
异常值处理:
因为数据中包含是日期格式,所以查看各年份的分布状况
data.groupby('Year').count()
观察结果,发现2017 年与 2020年的数据严重缺失,并且年份不连贯,于是删除2017年与2020年的数据
data = data[-data.Year.isin([2017])]
data = data[-data.Year.isin([2020])]
# 对data中的 Year列筛选 数据为2017 和 2020 的数据
# 加负号是对筛选出的数据删除,不加符号是筛选
此时的data.info()的打印情况:
data.describe().T
发现数据无异常,数据清洗完毕
具体分析(tableau)
Tableau分析结果:
具体分析(Excel)
时间序列维度分析:
- 全球与地区销售趋势分析
产品维度分析
- 各类型游戏全球销量分析
- 各类型销量占比
- Action类全球销量Top10游戏
- 各类型游戏的平台数量分布