MySQL做电子游戏销售分析
数据源来自Kaggle,链接如下:
https://www.kaggle.com/gregorut/videogamesales
此数据集并不复杂,共11列1.66W数据量,因此我觉得适合做MySQL语句的练习项目,将过程简要记录在此当作学习记录
分析的问题如下:
一、游戏题材角度(以sports题材为主)
1、各游戏题材的销量前五游戏 2、各题材前五的发行商
二、不同地区
1、不同地区销量随年份变化趋势 2、不同地区最受欢迎的游戏题材、发行商、游戏平台
三、不同平台(以Wii平台为主)
1、各平台全球销量前五的游戏 2、各平台最受欢迎(数量最多)的题材 3、对平台贡献最大的发行商
四、不同发行商(以Nintendo发行商为主)
1、各发行商在不同地区的销售情况 2、各发行商在不同题材游戏的销售情况 3、各发行商在不同平台的销售情况
首先,将数据集导入Navicat中,创建vgsales数据表,理解各字段含义
-
Rank - Ranking of overall sales(总销量排名)
-
Name - The games name(游戏名称)
-
Platform - Platform of the games release (i.e. PC,PS4, etc.) (游戏平台)
-
Year - Year of the game's release(游戏发行时间)
-
Genre - Genre of the game(游戏题材)
-
Publisher - Publisher of the game(游戏发行商)
-
NA_Sales - Sales in North America (in millions)(北美销量)
-
EU_Sales - Sales in Europe (in millions)(欧洲销量)
-
JP_Sales - Sales in Japan (in millions)(日本销量)
-
Other_Sales - Sales in the rest of the world (in millions)(其他地区销量)
-
Global_Sales - Total worldwide sales.(全球总销量)
数据查看与清洗
查看数据有无异常值,发现Publisher,Year字段有N/A异常值,数量不多,故直接删除
DELETE FROM vgsales WHERE `Publisher` = 'N/A'
DELETE FROM vgsales WHERE `Year` = 'N/A'
查看数据中共有多少种游戏题材,共11种,在这里不列举了
SELECT Genre FROM vgsales GROUP BY Genre
查看数据中共有多少个不同的发行商,共576个
SELECT Publisher FROM vgsales GROUP BY Publisher
查看数据中共有多少个不同的游戏平台,共31个
SELECT Platform FROM vgsales GROUP BY Platform
查看数据的年份跨度
SELECT MIN(`Year`), MAX(`Year`) FROM vgsales

基本的数据清洗做完,开始分析一开始设好的问题
游戏题材角度(以sports题材为主)
1、sports题材的销量前五游戏,因为一款游戏会发布在不同的游戏平台,故以Name进行分组再用SUM函数对销量求和
SELECT name, Genre, sum(Global_Sales) as sum FROM vgsales where Genre = 'sports' GROUP BY `Name` ORDER BY sum desc limit 5

做这个的时候出现了点小插曲,一开始想直接看看全球销量最高的前五行数据是什么样的,
SELECT name, Global_Sales FROM vgsales ORDER BY Global_Sales desc limit 5

但是这个结果和我直接查看数据集时并不同,因为数据集第一行Wii Sports游戏的全球销量就是82.74,远大于9.88
上网查了原因后发现,因为在Navicat导入时每个字段都是以varchar(255) 类型导入的,字符串的大小比较是从第一个字符开始比较,依次向后
故由于9大于8,所以得出错误结果。解决方法如下:
SELECT name, Global_Sales FROM vgsales ORDER BY (Global_Sales+0) desc limit 5
可以得出正确结果。这种方法同样适用于使用MAX函数的时候

2、sports题材销量前五的发行商,因为这里用sum函数后的结果有非常长的小数位,所以用round函数控制小数位
SELECT Publisher, Genre, round(sum(Global_Sales),2) as sum FROM vgsales where Genre = 'sports' GROUP BY `Publisher` ORDER BY sum desc limit 5

不同地区角度
1、不同地区销量随年份变化趋势
SELECT `Year`, round(sum(NA_Sales),2) AS NA_Sales, round(sum(EU_Sales),2) AS EU_Sales, round(sum(JP_Sales),2) AS JP_Sales,
round(sum(Other_Sales),2) AS Other_Sales, ROUND(SUM(Global_Sales), 2) AS Global_Sales FROM vgsales GROUP BY `Year` ORDER BY `Year`
数据结果从1980年到2020年,跨度稍大,故不展示数据,在Excel里绘图看变化趋势

从图中可以看出,从2000年开始除了日本地区外其余地区的销量都呈明显的上升趋势,2008年到达顶峰,随后开始不断下降,其中北美地区的销量最高
2、不同地区最受欢迎的游戏题材
SELECT Genre, round(sum(NA_Sales),2) AS NA_Sales, round(sum(EU_Sales),2) AS EU_Sales, round(sum(JP_Sales),2) AS JP_Sales,
round(sum(Other_Sales),2) AS Other_Sales FROM vgsales GROUP BY Genre

从全球销量来看,Action题材的游戏销量最好,Sports和Shooter类型次之
北美、欧洲、世界其他地区的前三题材和全球总体情况一致,而日本地区则是Role-Playing类型销量最好,Action和Platform类型次之
3、不同地区最受欢迎的发行商(以北美地区为例)
取了前五销量的发行商
SELECT Publisher, round(sum(NA_Sales),2) AS NA_Sales FROM vgsales GROUP BY Publisher ORDER BY NA_Sales desc LIMIT 5

4、不同地区最受欢迎的游戏平台
SELECT Platform, round(sum(NA_Sales),2) AS NA_Sales, round(sum(EU_Sales),2) AS EU_Sales, round(sum(JP_Sales),2) AS JP_Sales,
round(sum(Other_Sales),2) AS Other_Sales FROM vgsales GROUP BY Platform
展示北美地区的结果,其他平台的销量排名基本类似,前六大平台占据了64%的销量

不同平台(以Wii平台为主)
1、Wii平台全球销量前五的游戏
SELECT `Name`, Platform, ROUND(SUM(Global_Sales),2) as Global_Sales_SUM FROM vgsales
WHERE Platform = 'Wii' GROUP BY `Name` ORDER BY Global_Sales_SUM desc LIMIT 5

2、各平台最受欢迎(数量最多)的题材
SELECT Genre, Platform, count(Genre) as Genre_Count FROM vgsales WHERE Platform = 'Wii' GROUP BY Genre ORDER BY Genre_Count desc LIMIT 5

3、对平台贡献最大的发行商
SELECT Publisher, Platform, ROUND(SUM(Global_Sales),2) as Global_Sales_SUM FROM vgsales WHERE Platform = 'Wii'
GROUP BY Publisher ORDER BY Global_Sales_SUM desc LIMIT 5

不同发行商(以Nintendo发行商为主)
1、Nintendo在不同地区的销售情况
SELECT Publisher, round(sum(NA_Sales),2) AS NA_Sales, round(sum(EU_Sales),2) AS EU_Sales, round(sum(JP_Sales),2) AS JP_Sales,
round(sum(Other_Sales),2) AS Other_Sales FROM vgsales WHERE Publisher = 'Nintendo'

2、Nintendo在不同题材游戏的销售情况
SELECT Genre, Publisher, round(sum(Global_Sales),2) AS Global_Sales_Sum FROM vgsales
WHERE Publisher = 'Nintendo' GROUP BY Genre ORDER BY Global_Sales_Sum DESC

3、Nintendo在不同平台的销售情况
SELECT Platform, Publisher, round(sum(Global_Sales),2) AS Global_Sales_Sum FROM vgsales WHERE Publisher = 'Nintendo'
GROUP BY Platform ORDER BY Global_Sales_Sum DESC

至此记录完毕,这次主要是练习MySQL的使用,故没有涉及较多的图表分析。
这是我第一次写文记录,如果哪里写的有问题,还请大家指出o(* ̄▽ ̄*)ブ

浙公网安备 33010602011771号