工具库的引入
!pip install seaborn
#安装seaborn库
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
import warning
warning.filterwarning("ignore")
from pylab import rcParams
rcParams["figure.figsize"] = 13,8
导入数据
games_data = pd.read_csv('./dataFile/video_game_sales.csv')
数据查看和处理
#打印列名
games_data.columns
输出结果
各字段说明
• Rank - 总销售额排名
• Name - 游戏名称
• Platform - 游戏发行平台(PC、PS4等)
• Year - 游戏发行年份
• Genre - 游戏类型
• Publisher - 游戏发行商
• NA_Sales - 北美销量(百万)
• EU_Sales - 欧洲销售额(百万)
• JP_Sales - 日本销量(百万)
• Other_Sales - 在世界其他地区的销售额(百万)
• Global_Sales - 全球销售总额
#打印数据维度
games_data.shape
输出结果
#打印数据信息
games_data.info()
输出结果
数据一共具有11列的特征,共16598行数据,其中Year、publisher中含有缺失值。
#打印前5行数据
games_data.head()
输出结果
#打印数据信息
games_data.describe()
输出结果
#判断数据集中是否存在空值,若存在空值则在本地数据集中将包含空值的行删除,然后打印数据的维度。
if games_data,isnull().any().values.sum():
games_data.dropna(inplace=True)
games_data.shape
输出结果
游戏类型
#计算游戏类型非重复个数
games_data["Genre"].nunique()
输出结果
#计算游戏类型非重复
games_data["Genre"].unique()
输出结果
#依据游戏类型进行分组,对比北美、欧洲、日本及其他地区销量计算均值,以查看不同类型下,各地区销售情况
plt.figure(figsize=(10,5))
games_data.groupby("Gener")["NA_Sales","EU_Sales","JP_Sales","Other_Sales"].mean().plot(kind="bar")
plt.legend()#加入图例
plt.title("Games Sales')
plt.show()
输出结果
结论
1.除了Role-Playing在美国销售不如其他地区,其余的游戏在美国的销量都领先于其他国家地区。
2.日本地区的游戏玩家偏爱Role-Playing游戏。北美地区的玩家偏爱Platform游戏。欧洲地区的玩家偏爱platform和shooter类游戏
3.其他地区的游戏市场比较小。各个游戏在其他地区的销量都远小于北美欧洲和日本地区
4.adventure和strategy类游戏在各个地区的热度都比较小。
游戏发布日期:Year
#查看游戏发布时间非重复个数
games_data["Year"].nunique()
输出结果
#查看每个非重复游戏发布时间的个数
games_data["Year"].value_counts()
输出结果
#查看相应年份发布游戏的数量
plt.figure(figsize=(10,5))
sns.countplot(x="Year",data=games_data)
plt.xticks(rotation = 60)#x的标签旋转60度
plt.title("Year of Game")
plt.show()
输出结果
结论
从上图我们可以看出每年的发布量呈如下的趋势:
从91年开始发布量平稳上升,在2001年开始剧烈增长到2009年处于高峰后开始呈下降趋势。2011年开始由1100左右的发行量降至600左右的发行量,之后的几年发行量相对稳定小有波动。到2016年下降至300左右。预测之后的发行量会先处于稳定,然后下降。
#按照年份,一次对北美、欧洲、日本及其他地区分别计算出均值,并且对其趋势进行分析
plt.figure(figsize=(10,5))
sns.pointplot(x="Year",y="NA_Sales",data=games_data,ci=0,color="red",estimator = np.mean)
#ci参数(confidence interva)表示图形阴影的设置,estimator参数表示用什么数值进行绘图。
sns.pointplot(x="Year",y="EU_Sales",data=games_data,ci=0,color = "green",estimator = np.mean)
sns.pointplot(x="Year",y = "JP_Sales",data=games_data,ci=0,color="yellow",estimator = np.mean)
sns.pointplot(x="Year",y="Other_Sales",data=games_data,ci=0,color="blue",estimator=np.mean)
plt.title("Sales&areas")
plt.xticks=(rotation=60)
plt.legend(loc="best")
plt.show()
输出结果
结论
在20世纪的80到90年代,各个地区游戏的销售量处于高峰,尤其是北美地区的游戏销售额高于其他地区。这段时间的游戏发行量却是比较小的。20世纪90年代开始,游戏发行量逐渐的增加而各个地区游戏的销售额却不断减少,到1995年处于低谷,虽然之后游戏市场有短暂的回暖现象,但是游戏销售额的增量比较小。并且之后呈小范围波动的趋势。预测原因可能是:随着游戏发行的增加。游戏玩家认为游戏的类型内容大同小异,对之后新出的游戏也没有什么高度的兴趣。
#由于北美的销量比较高,我们对北美的数据进行单独分析,
year_genre_df =games_data.pivot_table(index = "Year",columns="Genre",values = "NA_Sales",aggfunc=np.mean)
sns.heatmap(year_genre_df,cmap="YlGnBu",linewidths = 2)
输出结果
结论
从上图来看。1984年销量最高,1985年次之,总体来看,各个游戏类型的销量都在逐年减少
游戏发行商:Publisher
#游戏发行商非重复个数
games_data["Publisher"].nunique()
输出结果
#由于游戏发行商的非重复个数很多,我们现在只对游戏发行商的个数超过50的游戏发行商的数据进行分析
games_pub = games_data["Publisher"].value.counts()[games_data["Publisher"].value_counts()>50].reset_index()
plt.figure(figsize=(10,5))
sns.barplot(x="index",y="Publisher",data=games_pub)
plt.xlabel("Publisher")
plt.ylabel("Publish_num")
plt.xticks(rotation = 90)
plt.legend()
plt.title("gamesSale&Publisher")
plt.show()
输出结果
#从上图可以看出Electronic Arts游戏发行量最多,现在我们对这个游戏发行商进行单独分析,查看该游戏发行商的游戏发行个数。
plt.figure(figsize=(10,5))
E_Arts_games = games_data[games_data["Publisher"]=="Electronic Arts"]
explode = [0.08,0,0,0,0,0,0,0,0,0.03,0,0]
label=[]
for i in E_Arts_games["Genre"]:
if i not in label:
label.append(i)
plt.pie(E_Arts_games['Genre'].value_counts(),shadow=True,explode=explode,autopct='%1.1f%%',startangle=60,
pctdistance=1.15)
plt.legend(label,title="Games Type",loc="center left",)
plt.axis('equal')
plt.title('E_Arts_Games Type')
plt.show()
输出结果
结论
从上图我们可以看出:Electronic Arts游戏发行商发行的游戏主要以sports为主占比为41。4% action类与simulation游戏的发行量处于第二第三分别占比13.6%与11.9%
游戏发行平台Platfrom
#查看游戏发行平台非重复的个数
games_data["Platfrom"].nunique()
输出结果
# 查看非重复游戏发行平台的(个数)分布情况
plt.figure(figsize=(10,5))
sns.countplot(x="Platfrom",data=games_data)
plt.title("Platfrom_num")
plt,show()
输出结果
结论
从上图我们可以看出在DS平台与PS2平台上发行的游戏数量最多
# 对游戏发行平台PS2的数据按照游戏类型分组,分别分析北美、欧洲、日本的平均销售量
plt.figure(figsize=(15,5))
PS2_games = games_data[games_data[Plaform]=="PS2"]
sns.barplot(x="Genre",y="NA_Sales",data=PS2_games,color="Green",label="NA",estimator = np.mean)
sns.barplot(x="Genre",y="EU_Sales",data=PS2_games,color = "bule",label="EU",estimator=np.mean)
sns.barplot(x="Genre",y="JP_Sales",data=PS2_games,color="yellow",label="JP",estimator=np.mean)
plt.ylabel("Sales")
plt.legend()
plt.title("PS2_games Sale")
plt.show()
输出结果
#对游戏发行平台DS的数据按照游戏类型分析北美、欧洲、日本的平均销售量
plt.figure(figsize=(15,5))
DS_games = games_data[games_data["Platform"]=="DS"]
sns.barplot(x="Genre",y="NA_Sales",data=DS_games,color="green",label="NA",estimator=np.mean)
sns.barplot(x="Genre",y="EU_Sales",data=DS_games,color="blue",label="EU",estimator=np.mean)
sns.barplot(x="Genre",y="JP_Sales",data=DS_games,color="yellow",label="JP",estimator=np.mean)
plt.ylabel("Sales")
plt.legend()
plt.title("DS game Sales")
plt.show()
输出结果
结论
EU地区PS2的游戏销量比较好,且在Racing、shooter、platform这三个游戏的销量名列前茅 JP地区DS游戏销量最好 并且Role-Playing游戏的销量最高,其次是platform和Fighting游戏
对总销量大于10的进行数据分析
#得到总销量大于10的数据
total_data = games_data[games_data["Global_Sales"]>10]
#查看数据维度
total_data.shape
输出结果
#对总销量大于10的总销量数据绘制分布图
plt.figure(figsize=(10,5))
sns.violinplot(y="Global_Sales",data=total_data,color="pink",inner="quartile")
sns.strippplot((y="Global_Sales",data=total_data,jitter=True,palette="Blues_d")#jitter表示对散点进行连续抖动,使得散点不会堆叠在一起 更加适合观察
plt.title("Global Sales distribution")
plt.show()
# 对总销量大于10的北美、欧洲、日本的销量数据绘制分布图plt.figure(figsize=(15,8))
label=["NA ", "EU", "JP"]
color=["indianred","mediumorchid","darkorchid","mediumslateblue"]
total_data["NA_Sales"].plot.area(color=color[0])
total_data["EU_Sales"].plot.area(color=color[1])
total_data["JP_Sales"].plot.area(color=color[3])
plt.legend(loc="best")
plt.title("Area distribution")
plt.show()
输出结果
# 不同游戏类型下,总销售额的分布情况
# 当数据中存在异常值时,则使用均值绘制的柱状图表现的数据趋势会有所偏差,下面,我们将使用箱线图来绘制上面的数据
plt.figure(figsize=(10,5))
sns.boxplot(x="Genre",y="Global_Sales",data=total_data)
plt.title("Global Sales VS Genre")
plt.show()
输出结果
结论
.Sport类型游戏最畅销,其次是platform。fighting和adventure类游戏在市场上表现比较低迷 2.大多数游戏的销售量集中在(10,20)的这个区间