0


‘kaggle视频游戏销售数据的可视化和分析‘项目实现

🚩首先在介绍本章之前,我们有必要清楚学习技术的真正意义:我认为学习技术的真正意义是能够运用所学去处理实际问题,而不是用知识去包装自己让自己成为技术界的“纸老虎”。

老铁们,让技术有用武之地。我们要以项目为线索,逐步深入开发的各个环节,掌握常用的优化思路。提升工程编码能力和思维能力。

数据分析流程

一、项目背景及目的

1、项目背景

我们要处理的是一份电子游戏行业综合销售数据,希望通过分析电子游戏行业在全球的发展概况,产生一份综合的游戏行业报告。

2、分析目的

从市场角度: 各个地区销售额变化(折线图)的数据可视化和分析。

从平台角度: 开发游戏数量前二十(条形图)的数据可视化和分析,近些年的趋势有什么变化?

从类型角度: 探究用户最喜欢的游戏类型top10是什么,近些年的趋势有什么变化?

二、数据收集与整理

1、数据来源

所用到的vgsale.csv数据均从Kaggle平台下载:

Kaggle平台https://www.kaggle.com/datasets/gregorut/videogamesales

2、数据说明

数据集包含了从1980年到2020年来,发行的电子游戏销售数据。
文件名称说明包含特征特征对应中文名vgsale.csv
电子游戏销售数据

Rank、Name、Platform、Year、Genre、Publisher、

NA_Sales、EU_Sales、JP_Sales、Other_Sales、

Global_Sales
排名、游戏名、平台、发行年份、类型、发行商、NA销售额、EU销售额、JP销售额、其他地区销售额、总销售额

3、理解数据

数据集的每一行表示一条用户行为,由排名、游戏名、平台、发行年份、类型、发行商、NA销售额、EU销售额、JP销售额、其他地区销售额、总销售额组成,并以逗号分隔。关于数据集中每一列的详细描述如下:👇
列名称说明排名整数类型,序列化后的排名游戏名字符串,游戏名称平台字符串,该游戏发行平台名称发行年份浮点型,该游戏的发行日期类型字符串,该游戏的类型发行商字符串,该游戏的发行商名称NA销售额浮点型,小数点后有效数字为2位,该游戏北美销售额(百万)EU销售额浮点型,小数点后有效数字为2位,该游戏欧洲销售额(百万)JP销售额浮点型,小数点后有效数字为2位,该游戏日本销售额(百万)其他地区销售额浮点型,小数点后有效数字为2位,该游戏世界其他地区销售额(百万)总销售额浮点型,小数点后有效数字为2位,该游戏全球销售额(百万)

三、数据处理

1、导入数据

(1)导入模块

  1. #1、导入模块
  2. import pandas as pd
  3. import numpy as np

(2)解决中文显示问题

  1. import matplotlib as mpl
  2. mpl.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'FangSong'] # 汉字字体,优先使用楷体,如果找不到楷体,则使用黑体
  3. mpl.rcParams['font.size'] = 12 # 字体大小
  4. mpl.rcParams['axes.unicode_minus'] = False # 正常显示负号

(3)读取源文件

  1. #3、读取源文件
  2. df=pd.read_csv(r"C:\Users\lis\Desktop\vgsales.csv")
  3. //这里我使用的是本地文件夹下的csv文件

2、检查数据

(4)检查前五组数据

  1. #4、检查前五组数据
  2. print(df.head())

运行结果:

(5)一下每列的数据类型

  1. #5、查一下每列的数据类型
  2. print(df.dtypes)

运行结果:

(6)检测数据集的几行几列(形状)

  1. #6、检测数据集的几行几列(形状)
  2. print(df.shape)

运行结果:

(7)获取数据集的长度

  1. #7、获取数据集的长度
  2. print(len(df))

运行结果:

(8)获取数据集的基本信息

  1. #8、获取数据集的基本信息
  2. print(df.info())

运行结果:

3、数据清洗

(1)去重(很明显没有重复数据,不需要去重)drop_duplicates()

(2)检测是否有缺失值

  1. #2.1、检测是否有缺失值
  2. df.isnull().any()

运行结果:

(3)缺失值的图形显示(安装模块——missingno)

  1. #2.2、缺失值的图形显示(安装模块——missingno)
  2. import missingno as mano
  3. import matplotlib.pyplot as plt
  4. mano.matrix(df,figsize=(16,5),labels=True)
  5. plt.show()

运行结果:

(4)缺失率的计算

  1. #2.3、缺失率的计算
  2. def mis_val_table(df):#自定义一个函数
  3. #缺失值的个数
  4. mis_val=df.isnull().sum()#sum求出缺失值个数
  5. mis_val_per=100*mis_val/len(df)#比上数据长度得到缺失率
  6. mis_val_table=mis_val_per.to_frame()#转换为DataFrame数据
  7. mis_val_table.columns=['缺失率']#让列名等于‘缺失率’
  8. mis_val_table=mis_val_table.sort_values(by='缺失率',ascending=False)#通过sort_values函数将值从大到小排序
  9. print(mis_val_table)#最后按倒序打印出缺失率
  10. mis_val_table(df)
  11. #通过结果可以看出缺失率非常小,删除不影响处理结果

运行结果:

(5)删除缺失值

  1. #2.4、删除缺失值
  2. df.dropna(inplace=True)
  3. df.info()
  4. #删除之后数据由16598变为16291,删去了307行缺失数据
  5. #到这里第2步‘缺失值的处理’,就完成了

(6)转化

  1. #3、转化
  2. df['Year']=df['Year'].astype(int)#将年份转换为整形
  3. df.info()

运行结果:

(7)异常数据处理

  1. #4、异常数据处理
  2. print(df[df['Year']>2022])#通过数据过滤
  3. #输出结果为空,没有异常数据

运行结果:

4、保存新数据

  1. #5、保存清洗完的数据
  2. df.to_csv('games.csv',index=0)#index=0删去第一行unname数据,避免对后面操作造成麻烦
  3. #到这里,‘数据清洗’操作全部完成

四、数据分析

1、求出每个平台总的销售业绩,并绘制出线性图,并做简单的数据分析

  1. #1、求出每个平台总的销售业绩,并绘制出线性图,并做简单的数据分析
  2. df1=df.groupby('Platform')['Global_Sales'].sum()#对Platform分组,找到全球销售额,求和
  3. print(df1)
  4. df1.plot(xlabel='开发平台',ylabel='销售总额')#画图
  5. # 分析:最高PS2达到1233.46
  6. #分析 最低PCFX 为0.03

运行结果:

2、 求出每个平台总的销售业绩,排出前5名,画柱形图

  1. #2、 求出每个平台总的销售业绩,排出前5名,画柱形图
  2. df2=df.groupby('Platform')['Global_Sales'].sum().sort_values(ascending=False).head(5)#对Platform分组,找到全球销售额,求和,排序,拿到前五
  3. print(df2)
  4. df2.plot.bar(xlabel='开发平台', ylabel='销售总额')#画图

运行结果:

3、求出每个平台在北美的平均销售业绩,线形图

  1. # 3、求出每个平台在北美的平均销售业绩,线形图
  2. df3=df.groupby('Platform')['NA_Sales'].mean()#对Platform分组,找到北美销售额,求平均
  3. print(df3)
  4. df3.plot(xlabel='开发平台',ylabel='平均销售业绩')#画图
  5. #最高为GB 1.171546
  6. #最低为3DO GG NG PCFX TG16 WS 为0

运行结果:

4、求出年销售额前5的年份和销售额,并画出柱状图

  1. # 4、求出年销售额前5的年份和销售额,并画出柱状图
  2. df4=df.groupby('Year')['Global_Sales'].sum().sort_values(ascending=False).head(5)#对Year分组,找到全球销售额,求和,排序,拿到前五
  3. print(df4)
  4. df4.plot.bar(xlabel='年份', ylabel='销售额')

运行结果:

5、求出类别为Sports的游戏在北美、欧洲、日本和其他地区的销售总额

  1. # 5、求出类别为Sports的游戏在北美、欧洲、日本和其他地区的销售总额
  2. df5=df[df['Genre']=='Sports'][['NA_Sales','EU_Sales','JP_Sales','Other_Sales']].sum()#过滤出Sports类型数据,分别找出北美、欧洲、日本、其他
  3. #地区求和
  4. df5.plot.bar(xlabel='地区',ylabel='销售额')#画图

运行结果:

6、统计每个平台开发不同游戏类型的个数

  1. # 6、统计每个平台开发不同游戏类型的个数
  2. df6=df.groupby(["Platform",'Genre']).count()['Year']#对PlatformGenre进行分组,用count统计游戏类型个数,通过['Year']找到对应的值
  3. df6.plot()#画图

运行结果:

7、求出年份在1998和2008年之间的每个发行商的销售业绩。

  1. # 7、求出年份在1998和2008年之间的每个发行商的销售业绩。
  2. df7=df[(df['Year']<=2008)&(df['Year']>=1998)].groupby('Publisher')['Global_Sales'].sum()#过滤出年份在1998-2008的数据,对Publisher分组,找到
  3. #全球销售额,求和
  4. df7.plot(xlabel='发行商', ylabel='销售业绩')#画图

运行结果:

8、发行商的销售业绩排行榜(前20名),画线性图

  1. # 8、发行商的销售业绩排行榜(前20名),画线性图
  2. df8=df.groupby('Publisher')['Global_Sales'].sum().sort_values(ascending=False).head(20)#对Publisher分组,找到全球销售额,求和,排序,拿出前20
  3. df8.plot(xlabel='发行商', ylabel='销售业绩')#画图

运行结果:

9、哪种类型的游戏最受欢迎?

  1. # 9、哪种类型的游戏最受欢迎?
  2. df9=df.groupby('Genre')['Global_Sales'].sum().sort_values(ascending=False).head(20)#对Genre分组,找到全球销售额,求和,排序,拿出前20
  3. df9.plot(xlabel='游戏类型', ylabel='销售额')
  4. #分析:通过销售额可以看出Action类型游戏最受欢迎

运行结果:

10、每个地区最受欢迎的三类游戏

  1. # 10、每个地区最受欢迎的三类游戏
  2. # 对Genre进行分组,分别找到北美、欧洲、日本、其他地区销售额,求和,排序,拿出前3,分别画图
  3. df10_1=df.groupby('Genre')['NA_Sales'].sum().sort_values(ascending=False).head(3)
  4. df10_2=df.groupby('Genre')['EU_Sales'].sum().sort_values(ascending=False).head(3)
  5. df10_3=df.groupby('Genre')['JP_Sales'].sum().sort_values(ascending=False).head(3)
  6. df10_4=df.groupby('Genre')['Other_Sales'].sum().sort_values(ascending=False).head(3)
  7. df10_1.plot.bar(xlabel='游戏类型',ylabel='销售额',title='北美最受欢迎的三类游戏')
  8. df10_2.plot.bar(xlabel='游戏类型',ylabel='销售额',title='欧洲最受欢迎的三类游戏')
  9. df10_3.plot.bar(xlabel='游戏类型',ylabel='销售额',title='日本最受欢迎的三类游戏')
  10. df10_4.plot.bar(xlabel='游戏类型',ylabel='销售额',title='其它地区最受欢迎的三类游戏')

运行结果:

11、每个游戏开发平台开发的游戏总数(前20名)

  1. # 11、每个游戏开发平台开发的游戏总数(前20名)
  2. print(df['Platform'].value_counts().head(20))
  3. df11=df['Platform'].value_counts().sort_values(ascending=False).head(20)#找到Platform数据,用value_counts()统计每个平台开发游戏的总数,排序
  4. #拿出前20
  5. df11.plot.bar(xlabel='开发平台',ylabel='数量',title='游戏开发平台开发的游戏总数')#画图
  6. #分析最多:DS 达到2131
  7. # 最低:2600仅为116

运行结果:

12、平台名为NES的下一步应该寻求哪十个发行商合作

  1. #12、平台名为NES的下一步应该寻求哪十个发行商合作
  2. dfx=df[df['Platform']=='NES'].groupby('Publisher')['Global_Sales'].sum().sort_values(ascending=False).head(10)#过滤出平台名为NES的数据,对
  3. #Publisher分组,找到全球销售额
  4. dfx.plot.bar(xlabel='发行商',ylabel='销售额')#画图 #求和,排序,拿出前10

运行结果:

标签: 大数据

本文转载自: https://blog.csdn.net/LEE180501/article/details/125831912
版权归原作者 小牛要翻身 所有, 如有侵权,请联系我们删除。

“&lsquo;kaggle视频游戏销售数据的可视化和分析&lsquo;项目实现”的评论:

还没有评论