python基于pandas数据分析实例——游戏的开发与销售

1、前言

你问我游戏重要还是女朋友重要
你是不是傻?
游戏没了可以再下
要是女朋友没了
就可以安安心心的玩游戏了~

大部分男生都喜欢游戏,但对游戏的了解却不是很多,让我们来分析一下“男生的女朋友”。数据中含有1980-2017年近40年各出版商发行的游戏,在这份数据的基础上分析一下哪些游戏平台和游戏出版商实力更强?什么游戏类型是更受人们喜爱的?在不同地区游戏的销售概况是如何的?简简单单几个步骤就足以得到答案

附上数据链接:Gamesales
!!!本文在交互模式jupyter完成!!!

2、导入必须的库

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
#为了中文能正常显示
from matplotlib import font_manager
#让图片显示在交互页面
%matplotlib inline

3、代码正文

从csv文件中导入数据

pandas是作为Python进行数据分析的工具库,含有大量简单便捷的方法,在进行数据处理是实用性极强
其中read_csv方法能够从csv文件中读取数据并保存至DataFrame对象中,方法如下

#读取csv文件
df = pd.read_csv('vgsales.csv')
#显示文件前5行
df.head()

在这里插入图片描述

数据清洗与整理

有爬虫经验的小伙伴应该清楚,在爬取大量数据时,难免会有数据的缺失或者数据错误的情况出现,所以导入数据后最关键的一步就是观察数据是否有上述情况出现,清洗与整理后的数据分析出的结果更加准确。
~~常见的数据清洗方法有:填充缺失或错误数据或删去含有缺失或错误数据的一行
本文采用后者,方法如下

#检查是否有缺失值,True表示含有缺失数据
df.isnull().any()

在这里插入图片描述

#删去缺失值
df = df.dropna()
df.info()

在这里插入图片描述

数据分析

第一个实例对游戏平台进行分析,因为数据比较庞大,所以我们只分析载有游戏多于100的游戏平台
首先根据DataFrame索引出游戏平台(Platform)这一列数据,然后使用value_counts()方法对游戏平台载有的游戏统计,最后截取出我们需要的数据

#取载有游戏多于100的游戏平台
pf = df['Platform'].value_counts().sort_values()#sort_values()为排列操作
pf = pf[pf>100]
pf

在这里插入图片描述

#游戏平台名称形成列表作为Y轴数据
pf_name = pf.index.tolist()
#载有游戏个数形成列表作为X轴数据
pf_number = pf.values.tolist()
#建立画布
fig,ax = plt.subplots(figsize = (16,10),dpi = 80)
#y轴范围
length = np.arange(len(pf_name))
#绘制条形图
ax.barh(length,pf_number,tick_label = pf_name)
#设置标题和标签
ax.set_title("The top 20 of Platform",fontsize = 18)
ax.set_xlabel("Number",fontsize = 16)
#添加数据标签
for a,b in zip(length,pf_number):
    ax.text(b+40,a-0.15,b,ha = "center",fontsize = 12)
plt.savefig('E:/jupyter/result/Game_sale1.jpg')
plt.show()

在这里插入图片描述
想知道各个地区游戏的销售情况该怎么办呢?

#查看年份是否有不适合的值
df['Year'].value_counts().sort_index()

在这里插入图片描述
在看到年份的索引时,奇怪的出现了还未到的2020年,说明是数据错误,就需要对这一行数据进行清洗
方法如下

df = df[~df["Year"].isin([2020.0])]#~表示取反
df['Year'].value_counts().sort_index()

敲黑板~这里我们要获取每一年的各个地区所有游戏销售额总值,我们就要用到cumsum这个方法——cumsum方法通俗说是一个累加和,注意红框里的数据,这里是依据年份将每部游戏的销售额相加

#cumsum函数是累加和,即按照Year这一列,将相同年份的销售额相加
df['sum_sales'] = df['Global_Sales'].groupby(df['Year']).cumsum()
df['NA_sum_sales'] = df['NA_Sales'].groupby(df['Year']).cumsum()
df['EU_sum_sales'] = df['EU_Sales'].groupby(df['Year']).cumsum()
df['JP_sum_sales'] = df['JP_Sales'].groupby(df['Year']).cumsum()
df['Other_sum_sales'] = df['Other_Sales'].groupby(df['Year']).cumsum()
df.head(10)

在这里插入图片描述
用小脑瓜想一想,需要的数据是一年的总销售额,所以只需要保留每一年最后一行的销售额,这里可以用drop_duplicates去重,并keep参数保留最后一行即可

#去重——得到每年各个游戏的销售值
sale_df = df.drop_duplicates(subset=['Year'],keep='last')
sale_df.head()
#强制转换类型
sale_df['Year'] = sale_df['Year'].astype(int)
sale_df.head()
#按照年份序列排序-升序(ascending调节升序或降序)
sale_df = sale_df.sort_values(by="Year" , ascending=True)
sale_df.head()

在这里插入图片描述

#绘制条形图
my_font = font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc")
#准备数据
y_1 = sale_df['sum_sales'].values.tolist()
y_2 = sale_df['NA_sum_sales'].values.tolist()
y_3 = sale_df['EU_sum_sales'].values.tolist()
y_4 = sale_df['JP_sum_sales'].values.tolist()
y_5 = sale_df['Other_sum_sales'].values.tolist()
x_1 = sale_df['Year'].values.tolist()
#x轴范围
x = range(len(x_1))
#建立画布
plt.figure(figsize=(20,10),dpi=80)
#绘制折线图,label为lengend的标签
plt.plot(x,y_1,label = '全球')
plt.plot(x,y_2,label = '北美')
plt.plot(x,y_3,label = '欧洲')
plt.plot(x,y_4,label = '日本')
plt.plot(x,y_5,label = '其他')
#调整x轴刻度
_xtick_labels = ['{}年'.format(i) for i in x_1]
plt.xticks(list(x)[::3],_xtick_labels[::3],fontproperties = my_font,fontsize = 16)
#填写x,y轴标签
plt.xlabel('年份',fontproperties = my_font,fontsize = 16)
plt.ylabel('销售额',fontproperties = my_font,fontsize = 16)
plt.title('销售额的变化曲线',fontproperties = my_font,fontsize = 18)
#栅栏
plt.grid(alpha=0.5)
plt.legend(prop = my_font,loc = 'upper left')
plt.savefig('E:/jupyter/result/Game_sale2.jpg')
plt.show()

在这里插入图片描述
接下来我们来了解一下世界前十的游戏出版商。方法类似于第一个实例,请看注释

#获取出版商前十
pb = df['Publisher'].value_counts().sort_values(ascending=False).head(10)#ascending可调整降序或升序
#设置画布的尺寸
plt.figure(figsize=(8,8))
#将出版商的名字作为对应数据的标签
labels = pb.index
#准备数据
x = pb.values
#绘制空心饼图
x1 = [1,0,0,0,0,0,0,0,0,0]#用于空心
plt.pie(x , radius=1.0,pctdistance = 0.75,labels=labels,autopct='%1.1f%%')
plt.pie(x1, radius=0.5,colors = 'w')
plt.title('Top 10 of Publisher',fontsize = 16)
plt.savefig('E:/jupyter/result/Game_sale3.jpg')
plt.show()

在这里插入图片描述
青菜萝卜各有所爱,每个人喜欢的都不一样,游戏也是如此,那么什么游戏类型最受大众喜爱呢?
我们需要一个只包含游戏类型和销售额的DataFrame对象,先用sum()方法统计,后用loc索引即可。
方法如下

#按照游戏类型将每一处的销售额相加
Group =  df.groupby(['Genre']).sum().loc[:,'NA_Sales':'Other_Sales']
Group

在这里插入图片描述

#显示中文
my_font = font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc")
#建立画布
plt.figure(figsize=(8, 12))
#x轴标签
xlabel = ['NA_Sales','EU_Sales','JP_Sales','Other_Sales']
#y轴范围与标签
y = range(len(Group.index))
ylabel = Group.index
#绘制热力图
plt.imshow(Group, interpolation='nearest', cmap=plt.cm.pink,aspect='auto')#cmap为热力图颜色变化
#调整x,y轴刻度
plt.xticks(list(range(4))[::1],xlabel[::1],fontproperties = my_font,fontsize = 12)
plt.yticks(list(y)[::1],ylabel[::1],fontproperties = my_font,fontsize = 12)
#设置x,y轴标签
plt.xlabel('销售额',fontproperties = my_font,fontsize = 14)
plt.ylabel('游戏类型',fontproperties = my_font,fontsize = 14)
plt.colorbar(shrink=0.8)#改变Bar的长度
plt.title('The Heat Map of Sales',fontproperties = my_font,fontsize = 16)
plt.savefig('E:/jupyter/result/Game_sale4.jpg')
plt.show()

在这里插入图片描述

4、分析总结

1.DS和PS远超其他平台位列前端
2.北美和欧洲是游戏的主要市场,销售额碾压其他地区
3.《FIFA》《极品飞车》的出版商Electronic Arts(EA)一枝独秀
4.动作、运动、射击游戏深受大众喜爱,销售额远超其他类型游戏

展开阅读全文
©️2020 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值