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

news/2024/11/7 20:45:43/

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

文章目录

  • 电子游戏销售之回归模型与数据可视化
    • 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( # barplotx=highest_number_of_sales.index, # x-axisy=highest_number_of_sales["Global_Sales"], # y-axisdata=highest_number_of_sales, # datapalette="deep" # palette
)
plt.title( # title"不同类型的游戏销售量",weight="bold", # weightfontsize=35, # font-sizepad=30 # padding
)
plt.xlabel( # x-label"类别",weight="bold", # weightcolor="purple", # colorfontsize=25, # font-size
)
plt.xticks( # x-ticksweight="bold", # weightfontsize=15, # font-sizerotation=10
)
plt.ylabel( # y-label"Global Sales",weight="bold", # weightcolor="green", # colorfontsize=20 # font-size
)
plt.yticks( # y-ticksweight="bold", # weightfontsize=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) # titleplt.xticks(weight="bold", fontsize=10, rotation=45) # x-ticksplt.yticks(weight="bold", fontsize=10) # y-ticksplt.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.ppmy.cn/news/9080.html

相关文章

【数据结构】LeetCode移除链表元素、反转链表、链表的中间结点

目录 一、移除链表元素 1、题目说明 2、题目解析 二、反转链表 1、题目说明 2、题目解析 三、链表的中间结点 1、题目说明 2、题目解析 一、移除链表元素 1、题目说明 题目链接:移除链表的元素 给你一个链表的头节点 head ,和一个整数 val,…

DALLE2-文本图像生成

文章目录摘要算法解码器prior图像处理变体插值文本差异限制论文: 《Hierarchical Text-Conditional Image Generation with CLIP Latents》github: https://github.com/lucidrains/DALLE2-pytorchhttps://github.com/LAION-AI/dalle2-laion摘要 CLIP已经…

【JDK工具】jinfo、jps、jstack、jstat、jmap

目录一、前言二、关键工具2.1 jps 显示所有JAVA进程信息1. 参数信息2. 常用命令2.2 jinfo 查看虚拟机配置参数信息1. 查看虚拟机参数 jinfo -flags pid2. 查看虚拟机指定参数 jinfo -flag 具体参数 pid3. 查看环境变量 jinfo -sysprops pid4. 参数列表2.3 jstack1. 能排查哪些问…

Springboot扩展点之BeanDefinitionRegistryPostProcessor

前言通过这篇文章来大家分享一下,另外一个Springboot的扩展点BeanDefinitionRegistryPostProcessor,一般称这类扩展点为容器级后置处理器,另外一类是Bean级的后置处理器;容器级的后置处理器会在Spring容器初始化后、刷新前这个时间…

前端面试常考 | js原型与原型链

文章目录一. 什么是原型?二. 什么是原型链?一. 什么是原型? 在js中所有的引用类型都有一个__proto__(隐式原型)属性,属性值是一个普通的对象。 而在js中的引用类型包括:Object,Array,Date,Function 而所有函数都有…

Lc.152 乘积最大子数组

题目链接1 前言翻译成大白话:就是找一个数组,其连续子数组的乘积最大值。2 算法思路:一般求最值的问题首选动态规划。这道题与[LC.53 最大子序和]很类似。我们假设状态转移方程为:它表示以第 i 个元素结尾乘积最大子数组的乘积可是在这里&…

Spring是怎么回事?新手入门就看这篇吧

前言 今天壹哥给大家介绍一套开源的轻量级框架,它就是Spring。在给大家详细讲解Spring框架之前,壹哥先给大家介绍Spring框架的主要内容: Spring的基本概念 Spring核心思想之ioc Spring核心思想之aop Spring框架对事务的支持 在本系列文章…

哪吒S亮相广州车展,定位B级燃油车颠覆者

2022年收官,哪吒汽车宣布全年交付152073台,其中: •哪吒U 51021台; •哪吒V 98847台; •哪吒S 2003台(12月首月交付)。与此同时,在年末的广州车展,哪吒汽车携全系车型参展…