电子游戏销售之回归模型与数据可视化

news2025/4/10 8:50:05

电子游戏销售之回归模型与数据可视化

文章目录

  • 电子游戏销售之回归模型与数据可视化
    • 0、写在前面
    • 1、回归模型
      • 1.1 模型建立准备
      • 1.2 建立模型
      • 1.3 模型分析
    • 2、数据可视化
    • 3、参考资料


在这里插入图片描述


0、写在前面

该篇文章的任务包括以下3个方面

  • 检测与处理缺失值
  • 建立回归模型
  • 数据可视化

实验环境

  • Python版本:Python3.9
  • Numpy版本:Python1.22.3
  • Pandas版本:Pandas1.5.0
  • scikit-learn版本:scikit-learn1.1.2
  • Matplotlib版本:Matplotlib3.5.2

原始数据

  • 数据来源:

https://www.kaggle.com/datasets/gregorut/videogamesales?resource=download
https://tianchi.aliyun.com/dataset/92584

数据字段

  • Name - 游戏名称
  • Platform - 游戏的开发平台
  • Year_of_Release - 游戏发行年份
  • Genre - 游戏类别
  • Publisher - 游戏的发布者
  • NA_Sales - 北美销售量
  • EU_Sales - 欧洲销售量
  • JP_Sales - 日本销售量
  • Other_Sales - 其他地区的销售量
  • Global_Sales - 全球销售量
  • Criticscore - 评判游戏的得分
  • Critic_Count - 评判游戏的人数
  • User_Score - 用户对于游戏的得分
  • Usercount - 给予游戏User_Score的用户人数
  • Developer - 游戏开发者
  • Rating - 评级

在这里插入图片描述

前置准备

提前将csv数据导入到MySQL中,以便数据预处理

1、回归模型

该实验建立的是线性回归模型

1.1 模型建立准备

NA_Sales,EU_Sales,JP_Sales作为数据集,每条数据的Global_Sales作为target建立回归模型

video_games_data = video_games.iloc[:, 5:8]
video_games_target = video_games.iloc[:, 9:10]
print(video_games_data)
print(video_games_target)

数据集展示:

在这里插入图片描述

target数据展示:

tp

1.2 建立模型

使用sklearn建立线性回归模型,并提前将数据划分为训练集和测试集

video_games_train, video_games_test, video_games_target, video_games_target_test = train_test_split(
    video_games_data, video_games_target)
clf = LinearRegression().fit(video_games_train, video_games_target) # 线性回归模型
print(clf)

tp

1.3 模型分析

  • 回归模型结果可视化:
video_games_target_test_pred=clf.predict(video_games_test)
print(video_games_target_test_pred[:20])
rcParams['font.sans-serif'] = 'SimHei'
fig = plt.figure(figsize=(10,6)) ##设定空白画布,并制定大小
##用不同的颜色表示不同数据
plt.plot(range(video_games_test.shape[0]),video_games_target_test,color="blue", linewidth=1.5, linestyle="-")
plt.plot(range(video_games_test.shape[0]),video_games_target_test_pred,color="red", linewidth=1.5, linestyle="-.")
plt.legend(['真实值','预测值'])

tp

可以看到,真实值和预测值除个别外,其他的基本上比较接近

  • 回归模型评价

根据平均绝对误差均方误差中值绝对误差可解释方差值R²值等评价指标来评估建立的线性回归模型是否合适。

print('video_games数据线性回归模型1的平均误差为', mean_absolute_error(video_games_target_test1,video_games_target_test_pred1))
print('video_games数据线性回归模型1的均方误差', mean_squared_error(video_games_target_test1,video_games_target_test_pred1))
print('video_games数据线性回归模型1的中值绝对误差为', median_absolute_error(video_games_target_test1,video_games_target_test_pred1))
print('video_games数据线性回归模型1的可解释方差值为 ', explained_variance_score(video_games_target_test1,video_games_target_test_pred1))
print('video_games数据线性回归模型1的R²值', r2_score(video_games_target_test1,video_games_target_test_pred1))

tp

平均方差、均方误差、中值绝对误差均接近于0,而可解释方差值、R2可以看出建立的线性回归模型拟合效果良好,但可以继续优化。

Note:评价构建的线性回归模型还可以使用梯度提升的方法

2、数据可视化

可视化代码在参考链接里面有

不同类型游戏的数量直方图

highest_number_of_sales = df.groupby('Genre').sum(numeric_only=True).astype('int')
plt.figure(figsize=(24, 14)) # figuring the size
# makes bar plot
sns.barplot( # barplot
    x=highest_number_of_sales.index, # x-axis
    y=highest_number_of_sales["Global_Sales"], # y-axis
    data=highest_number_of_sales, # data
    palette="deep" # palette
)
plt.title( # title
    "不同类型的游戏销售量",
    weight="bold", # weight
    fontsize=35, # font-size
    pad=30 # padding
)
plt.xlabel( # x-label
    "类别",
    weight="bold", # weight
    color="purple", # color
    fontsize=25, # font-size
)
plt.xticks( # x-ticks
    weight="bold", # weight
    fontsize=15, # font-size
    rotation=10
)
plt.ylabel( # y-label
    "Global Sales",
    weight="bold", # weight
    color="green", # color
    fontsize=20 # font-size
)
plt.yticks( # y-ticks
    weight="bold", # weight
    fontsize=15 # font-size
)
plt.show()

tp

各地区销售量和游戏发行年份的相关性

corrmat= df.corr(numeric_only=True)
mask = np.zeros_like(corrmat)
mask[np.triu_indices_from(mask)] = True
with sns.axes_style("white"):
    f, ax = plt.subplots(figsize=(9,6))
    plt.title("相关性Correlation", weight="bold", fontsize=20, pad=30) # title
    plt.xticks(weight="bold", fontsize=10, rotation=45) # x-ticks
    plt.yticks(weight="bold", fontsize=10) # y-ticks
    plt.xlabel('各地区销售')
    plt.ylabel('发行年份')
    sns.heatmap(corrmat, cmap="YlGnBu", annot=True, mask=mask, square=True)
    plt.show()

tp

按发行的游戏总数划分的类型

rel = df.groupby(['Genre']).count().iloc[:,0]
rel = pd.DataFrame(rel.sort_values(ascending=False))
genres = rel.index
rel.columns = ['Releases']
colors = sns.color_palette("summer", len(rel))
plt.figure(figsize=(12,8))
ax = sns.barplot(y = genres , x = 'Releases', data=rel,orient='h', palette=colors)
ax.set_xlabel(xlabel='发行数量', fontsize=16)
ax.set_ylabel(ylabel='Genre', fontsize=16)
ax.set_title(label='按发行的游戏总数划分的类型', fontsize=20)
ax.set_yticklabels(labels = genres, fontsize=14)
plt.show()

tp

3、参考资料

  • 可视化

结束!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我的2022年总结

我的2022年总结 行走于世,风大时要表现逆的风骨,风小时要表现顺的悠然。 我们可以转身,但是不必回头,即使有一天你发现自己走错了,你也应该转身大步朝着对的方向去,而不是回头埋怨自己错了。 一、旧事 …

INT201-Decision, Computation and Language(2)

文章目录5. Turing Machine5.1 TM Configuration5.2 TM Transitions5.3 TM Computation5.4 Language accepted by TM5.5 Decider5.6 Multi-tape TM5.6.1 Multi-tape TM equivalent to 1-tape TM5.7 Nondeterministic TM5.7.1 Address5.7.2 NTM equivalent to TM5.8 Enumerable …

【Linux操作系统】yum三板斧和yum源的配置

文章目录一.Linux下软件的生态二.yum三板斧1.yum简介2.list搜索软件包3.install下载并安装4.remove卸载软件三.windows/Linux下文件互传1.lrzsz的查看和下载安装2.rz上传3.sz下载四.Linux软件生态的本土化1.镜像简介2.Linux软件生态的本土化五.yum源的配置1.找到yum源配置文件并…

Jedis: Java连接redis服务

文章目录一、编程语言与 Redis二、Jedis 连接三、JedisPool 连接池四、可视化客户端提示:以下是本篇文章正文内容,Redis系列学习将会持续更新 一、编程语言与 Redis ● Java 语言连接 redis 服务   Jedis   SpringData Redis   Lettuce ● C 、C …

ArcGIS基础实验操作100例--实验40构建点对连线

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验40 构建点对连线 目录 一、实验背景 二、实验数据 三、实验步骤 (1&…

可视化系列讲解:canvas的动画实现

文章目录一、Canvas动画1.1 Canvas绘图都是通过JavaScript 去操控的,如要实现一些交互性动画是相当容易的。那Canvas是如何做一些基本动画的?1.2 Canvas 画出一帧动画的基本步骤(如要画出流畅动画,1s 需绘60帧)&#x…

【回答问题】ChatGPT上线了!推荐30个以上比较好的自然语言处理模型

【回答问题】ChatGPT上线了!推荐40个以上比较好的自然语言处理模型以及github源码? BERT (Bidirectional Encoder Representations from Transformers): https://github.com/google-research/bert GPT (Generative Pre-training Transformer): https:/…

Taro笔记

Taro官网:https://nervjs.github.io/taro-docs/docs/ Taro简介 可使用React、Vue等框架开发跨端开发框架,一套代码编译到多端,使用Taro,只书写一套代码,再通过Taro的编译工具,将源代码分别编译出可以在不同端(微信小程序、H5、RN等)运行的代码。Taro 核心转化图 Taro使…

数据链路层重点总结

文章目录前言一、MAC地址二、一跳一跳的网络传输三、以太网四、ARP协议4.1 ARP协议的作用4.2 ARP协议的工作流程五、MTU5.1 什么是MTU5.2 MTU对IP协议的影响5.3 MTU对UDP协议的影响5.4 MTU对于TCP协议的影响总结前言 又是新的一年,展望2023年,博主给大家…

可视化系列讲解:canvas的进阶使用(颜色和样式设置,绘制文本,绘制图片)

文章目录一、Canvas的颜色和样式设置1.1 颜色(不设置默认黑色)1.2 透明度 Transparent1.3 线型 Line styles二、Canvas绘制文本2.1 文本的样式(需在绘制文本前调用)2.2 fillText(text, x, y [, maxWidth])2.3 strokeText(text, x,…

回首2022,展望2023

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,Java领域新星创作者📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到…

【自学Java】Java数据类型

Java数据类型 Java数据类型 数据类型在编程语言中占有重要的地位。Java 的数据类型分为基本数据类型和引用数据类型。 Java基本类型 Java 基本数据类型包括:boolean,byte,char,short,int,long&#xff…

node.js中fs\path\http模块的使用

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:Node.js的fs\path\http模块的使用,模块化开发概念 目录 一、node.js概念与作…

dubbo源码实践-serialize层的例子

目录 1 serialize层概述 2 序列化的简单例子 2.1 项目截图 2.2 三个类的源码 2.2.1 ABC是实体类 2.2.2 TestSeriarsWrite把ABC对象序列化到文件中 2.2.3 TestSeriarsRead从文件中读取ABC对象 2.2.4 运行结果 3 展示一个通过URL属性动态切换序列化实现类的例子 3.1 原理分…

为什么云并不总是足够的

虽然人们普遍认为云是未来,但云仍然有多种形式,理解每种形式的各自优点至少可以说是模糊的。 行业分析师有时会争论单租户与多租户部署的优缺点。虽然单租户部署在最近可能是某些组织的可行解决方案,但多租户部署为希望实现运营现代化的组织…

ansible(第一天)

第一章:认识ansible 一、ansible的安装与介绍 1.Ansible软件及公司 ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。 这个工具的目标有这么几项:让我们自动化部署APP;自动化…

Maven总结 - 一、初探-项目构建

maven不仅仅是一款管理jar包的工具,更重要的是一款项目构建的工具 maven下载网站:https://maven.apache.org/ maven搜索网站:http://mvn.coderead.cn/ 一、项目构建 给你一套源代码,你怎么能跑起来? 不能把&#xff0…

日期的格式化与解析

格式化:日期 —> 字符串 解析: 字符串 —> 日期 这里指的是日期的显式格式化和解析 DATE_FORMAT(date,fmt) 按照字符串fmt格式化日期date值 TIME_FORMAT(time,fmt) 按照字符串fmt格式化时间time值 GET_FORMAT(date_type,format_type) 返回…

1、影像组学基础知识

一、What is Radiomics? 提出影像组学论文: **主要目的:**说明肿瘤在时间和空间上的异质性,可以用影像组学说明 时间上的异质性:同一个人同一个肿瘤在不同时间段的表现 空间上的异质性:同一肿瘤在不同个体上的表…

适合编程初学者的开源项目:小游戏2048(Vue版)

目标 为编程初学者打造入门学习项目,使用各种主流编程语言来实现。 2048游戏规则 一共16个单元格,初始时由2或者4构成。 1、手指向一个方向滑动,所有格子会向那个方向运动。 2、相同数字的两个格子,相遇时数字会相加。 3、每次…