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(* ̄▽ ̄*)ブ

 

posted @ 2020-06-20 18:51  Cles  阅读(219)  评论(0)    收藏  举报