Python数据分析案例58——热门游戏数据分析及其可视化

news2024/9/24 15:19:29

案例背景

有哪个男生不喜欢玩游戏呢?就算上了班儿也要研究一下游戏以及热门的游戏。正好这里有个热门的游戏数据集,全球热门游戏数据集来做一下一些可视化的分析。


数据介绍

该文件包含一个数据集,详细说明了多个平台上的各种流行游戏。每个条目都包含重要信息,例如游戏名称、类型、平台、发布年份和用户评级。该数据集的结构便于分析和比较不同游戏,提供对游戏趋势和用户偏好的洞察。它采用CSV文件格式,以实现可访问性和易用性,使其适用于游戏行业的数据分析、可视化和研究目的。

热门的什么英雄联盟元神。还有国外的塞尔达,apex什么的都有。

需要这个数据集和这篇文章的全部代码文件的同学可以参考:游戏数据


代码实现

导入数据分析常用的包。展示数据的前五行

# Import necessary libraries
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Load the dataset
df_games = pd.read_csv('games_dataset.csv')

# Display the first few rows and the columns of the dataset
df_games.head()

简单的描述性统计

# Display summary statistics of the dataset
df_games.describe(include='all')

查看数据是否有缺失值

# Check for missing values
df_games.isnull().sum()

查看数据的类别

# Remove any rows with missing values
df_games_clean = df_games.dropna()

# Ensure 'Release Year' is an integer
df_games_clean['Release Year'] = df_games_clean['Release Year'].astype(int)

# Check data types
df_games_clean.dtypes


可视化分析

游戏数量柱状图

展示数据里面前10数量的游戏的中文名称及他们的数量的微型柱状图。

games_dict = {
    "The Legend of Zelda: Breath of the Wild": "塞尔达传说:荒野之息",
    "Genshin Impact": "原神",
    "The Sims 4": "模拟人生4",
    "Resident Evil Village": "生化危机村庄",
    "Hades": "哈迪斯",
    "Minecraft Dungeons": "我的世界:地下城",
    "Sekiro: Shadows Die Twice": "只狼:影逝二度",
    "Horizon Zero Dawn": "地平线:黎明时分",
    "Sea of Thieves": "盗贼之海",
    "Apex Legends": " apex 英雄"
}
df_games['Game Name'].value_counts().rename_axis('Game_Name').reset_index().iloc[:10,:]\
.assign(中文名称=lambda x:x['Game_Name'].map(games_dict)).set_axis(['Game Name','count','中文名称'],axis=1).style.bar()

可以看到这个游戏数据里面记录比较多的是塞尔达,荒野之息,这就是原神模拟人生等游戏。


整体用户评分直方图

# Plot the distribution of user ratings
plt.figure(figsize=(10, 6))
sns.histplot(df_games_clean['User Rating'], bins=20, color='blue', edgecolor='black', kde=True)
plt.title('Distribution of User Ratings')
plt.xlabel('User Rating')
plt.ylabel('Frequency')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

可以看到用户的评分较为均匀,从0分到十分,没有什么很突出的位置。说明游戏的评分没有很集中的区间。

游戏类型数量柱状图

# Plot the distribution of genres
plt.figure(figsize=(12, 8))
sns.countplot(data=df_games_clean, y='Genre', order=df_games_clean['Genre'].value_counts().index, palette='viridis')
plt.title('Genre Distribution')
plt.xlabel('Count')
plt.ylabel('Genre')
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.show()


可以看到运动类的游戏排第一,后面其次都是各种类型的游戏。但是他们的数量差别都不会很大,说明各种游戏都是有自己的市场的。

不同游戏平台数量直方图

# Plot the distribution of platforms
plt.figure(figsize=(12, 8))
sns.countplot(data=df_games_clean, y='Platform', order=df_games_clean['Platform'].value_counts().index, palette='magma')
plt.title('Platform Distribution')
plt.xlabel('Count')
plt.ylabel('Platform')
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.show()

PC端的游戏数量还是第一位,及个人电脑端,后面才是Xbox ,switch,以及移动端的各种。PS最少。

不同年份发行游戏数量的直方图

# Plot the distribution of release years
plt.figure(figsize=(12, 8))
sns.histplot(df_games_clean['Release Year'], bins=20, color='green', edgecolor='black', kde=True)
plt.title('Distribution of Release Years')
plt.xlabel('Release Year')
plt.ylabel('Frequency')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

我们可以看到大概在2000年,2007年,2015年以及2022年发行的游戏数量较多,其他年份都较为平均。


不同发行年份不同类型游戏用户评分散点图

# Scatter plot of User Rating vs Release Year
plt.figure(figsize=(12, 8))
sns.scatterplot(data=df_games_clean, x='Release Year', y='User Rating', hue='Genre', palette='Set1', alpha=0.7)
plt.title('User Rating vs Release Year')
plt.xlabel('Release Year')
plt.ylabel('User Rating')
plt.grid(True)
plt.show()

可以看到不同年份的,不同类型的数据,他们的用户得分德还是较为均匀,不同类别之间这个图不好对比。很多年份数据分布很集中,都是很均匀,从0~10分的游戏都有。说明每一年都有很多好游戏和坏游戏,没有哪一年的游戏。质量特别高,也没有哪一年的游戏质量平均特别差。


不同游戏类型数量比例柱饼图

# Pie chart of Genre Distribution
plt.figure(figsize=(10, 10))
genre_counts = df_games_clean['Genre'].value_counts()
plt.pie(genre_counts, labels=genre_counts.index, autopct='%1.1f%%', colors=sns.color_palette('pastel'), startangle=140)
plt.title('Genre Distribution')
plt.show()

和前面的结论一致,可以看到游戏类型最多的是运动类。而其他的类别分布都没有差太远的比例,说明各种游戏都有各自的市场,没有哪一种游戏是极少或者极多的。

不同游戏平台数量比例柱饼图

# Pie chart of Platform Distribution
plt.figure(figsize=(10, 10))
platform_counts = df_games_clean['Platform'].value_counts()
plt.pie(platform_counts, labels=platform_counts.index, autopct='%1.1f%%', colors=sns.color_palette('pastel'), startangle=140)
plt.title('Platform Distribution')
plt.show()

和前面结论一致,PC端的数量占比最高,说明目前大家还是用电脑玩游戏的最多,当然其他的平台差距也不大,各个平台都有各自的用户。


不同类别的游戏用户评分箱线图

# Boxplot of User Ratings by Genre
plt.figure(figsize=(14, 8))
sns.boxplot(data=df_games_clean, x='Genre', y='User Rating', palette='coolwarm')
plt.title('User Ratings by Genre')
plt.xlabel('Genre')
plt.ylabel('User Rating')
plt.xticks(rotation=45)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

可以从均值的角度来看,发现生存类的游戏评分均值最高。其次是恐怖游戏和角色扮演类动作类游戏。但是他们整体来说均值差异都不大。


不同平台用户评分箱线图

# Boxplot of User Ratings by Platform
plt.figure(figsize=(14, 8))
sns.boxplot(data=df_games_clean, x='Platform', y='User Rating', palette='coolwarm')
plt.title('User Ratings by Platform')
plt.xlabel('Platform')
plt.ylabel('User Rating')
plt.xticks(rotation=45)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

我们可以看到PC端的用户评分均值最高,其次是其他4个都差不多。并且大家的分布都很均匀,差距都不是很大。


不同类型游戏用户评分均值柱状图

# Calculate average user rating by genre
avg_rating_by_genre = df_games_clean.groupby('Genre')['User Rating'].mean().sort_values()

# Plot average user ratings by genre
plt.figure(figsize=(12, 8))
avg_rating_by_genre.plot(kind='barh', color='purple', edgecolor='black')
plt.title('Average User Ratings by Genre')
plt.xlabel('Average User Rating')
plt.ylabel('Genre')
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.show()

和前面的一致,生存类,恐怖类,模拟经营类的动作类运动类。评分前五,其他的游戏评分略低,但是也还好。差距都不是很大。

不同平台用户评分均值柱状图

# Calculate average user rating by platform
avg_rating_by_platform = df_games_clean.groupby('Platform')['User Rating'].mean().sort_values()

# Plot average user ratings by platform
plt.figure(figsize=(12, 8))
avg_rating_by_platform.plot(kind='barh', color='orange', edgecolor='black')
plt.title('Average User Ratings by Platform')
plt.xlabel('Average User Rating')
plt.ylabel('Platform')
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.show()

和前面结论一致pc端电脑端的用户评分均值最高,其他的都差不多。


发行年份和用户评分的相关性热力图

# Compute correlation matrix
corr_matrix = df_games_clean[['Release Year', 'User Rating']].corr()

# Plot correlation heatmap
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt='.2f', linewidths=0.5)
plt.title('Correlation Heatmap')
plt.show()

可以看到和散点图的结论一样,发行年份和评分没有相关性。就是零。

游戏类别和游戏平台的评分相关系数热力图

# Pivot table for heatmap
pivot_table = df_games_clean.pivot_table(values='User Rating', index='Genre', columns='Platform', aggfunc='mean')

# Plot heatmap
plt.figure(figsize=(14, 8))
sns.heatmap(pivot_table, cmap='YlGnBu', annot=True, fmt='.1f', linewidths=0.5)
plt.title('Heatmap of User Ratings by Genre and Platform')
plt.xlabel('Platform')
plt.ylabel('Genre')
plt.show()

我们可以看到某些平台的某些类型的游戏评分明显要高于其他,例如电脑端的策略类和生存类,还有格斗类以及射击类明显要优于其他平台,也要优于电脑端的其他的类型的游戏的评分的均值。


# Plot the count of games by Release Year and Genre
plt.figure(figsize=(14, 8))
sns.countplot(data=df_games_clean, x='Release Year', hue='Genre', palette='Set2')
plt.title('Distribution of Games by Release Year and Genre')
plt.xlabel('Release Year')
plt.ylabel('Number of Games')
plt.xticks(rotation=45)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

这个是不同年份发行不同类别的游戏,难以看出明显的趋势,只能大概知道2006年发行的Puzzle这个类型的游戏比较多。


 不同年份发行游戏数量折线图

# Plot trends in the number of releases per year
plt.figure(figsize=(14, 8))
release_year_trends = df_games_clean['Release Year'].value_counts().sort_index()
release_year_trends.plot(kind='line', marker='o', color='tomato')
plt.title('Trends in Number of Game Releases Per Year')
plt.xlabel('Release Year')
plt.ylabel('Number of Releases')
plt.grid(True)
plt.show()

可以清楚的看到每个年份发行的游戏的数量的一个变化趋势。


 不同类型的游戏的用户评分的核密度图

# Kernel Density Estimate (KDE) plot of user ratings by genre
plt.figure(figsize=(14, 8))
sns.kdeplot(data=df_games_clean, x='User Rating', hue='Genre', common_norm=False, palette='tab10')
plt.title('Density Plot of User Ratings by Genre')
plt.xlabel('User Rating')
plt.ylabel('Density')
plt.grid(True)
plt.show()

其实和前面结论一样,不同类型的这些用户评分分布都挺相近的,可能有的稍微高一点点,但是也不会高很多。并且分布都是两端比较少,也就是说很好或者很差的游戏比较少,大多数游戏都集中在中间的2-9分的区间。


不同平台发布不同类型游戏的数量热力图

# Create a DataFrame for analysis of platform and genre pairs
platform_genre_counts = df_games_clean.groupby(['Platform', 'Genre']).size().unstack().fillna(0)

# Plot
plt.figure(figsize=(16, 10))
sns.heatmap(platform_genre_counts, cmap='viridis', annot=True, fmt='g', linewidths=0.5)
plt.title('Platform and Genre Pair Analysis')
plt.xlabel('Genre')
plt.ylabel('Platform')
plt.show()

可以从图中清楚的看到每个平台发布每个不同类型的游戏的数量。例如运动类在移动端和电脑端发布的数量是最多的,其次就是xbox上的角色扮演类的游戏数量比较多。

不同发布年份用户评分的箱线图

# Box plot of user ratings by release year
plt.figure(figsize=(14, 8))
sns.boxplot(data=df_games_clean, x='Release Year', y='User Rating', palette='coolwarm')
plt.title('User Ratings by Release Year')
plt.xlabel('Release Year')
plt.ylabel('User Rating')
plt.xticks(rotation=45)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

可以看到大概在2004年和2016年发布的游戏评分均值较高,2007年和2023年发布的游戏评分均值较低,但整体变化波动幅度不是很大。


 不同发布年份用户评分均值的折线图

# Line plot of average user ratings over time (by Release Year)
plt.figure(figsize=(14, 8))
avg_rating_over_time = df_games_clean.groupby('Release Year')['User Rating'].mean()
avg_rating_over_time.plot(kind='line', marker='o', color='skyblue')
plt.title('Average User Ratings Over Time')
plt.xlabel('Release Year')
plt.ylabel('Average User Rating')
plt.grid(True)
plt.show()

不同年份用户评分均值折线图。

可以清楚地看到不同年份的游戏数据评分均值分布。和前面的箱线图得到的结论也是类似的。


后记

只是简单的画了一些柱状图,折线图。直方图密度图,其实还有很多箱线图。概率密度图,小提琴图,点图以及散点,面积,气泡,雷达等图都可以画,但是目前简单的分析就这个样子。

其实还可以单独抽出各种游戏,例如原神整体的每个年份的一个评分的变化分布之类的,但是我没有很偏好的单独的游戏,所以就没有做,大家有兴趣可以自己做一下。

数据和全部代码文件获取参考:游戏数据


创作不易,看官觉得写得还不错的话点个关注和赞吧,本人会持续更新python数据分析领域的代码文章~(需要定制类似的代码可私信)

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

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

相关文章

【Golang 面试 - 进阶题】每日 3 题(十五)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

Cesium 高德地图暗黑化

Cesium 高德地图暗黑化 高德电子地图实现暗黑效果 // 设置图层滤镜new ImageryLayerFilter({viewer: viewer,imageryLayer: imageryLayer,});

YOLOv5轻量化改进 | backbone | 结合MobileNetV4(包含多个结构和使用方式)

YOLOv5轻量化改进 | backbone | 结合MobileNetV4(包含多个结构) 本文介绍论文原理介绍网络代码多种yaml设置网络测试及实验结果<!-- 这里放入论文图片 --> &emsp;;本文介绍 本文给大家带来的改进机制是结合MobileNetV4骨干网络,其中来自2024.5月发布的MobileNetV4…

Pageadmin 漏洞教程

上传文件解压拿webshell 用哥斯拉&#xff0c;生成一个asp木马 这个就是我们生成的asp木马 不能直接上传 压缩为zip文件 上传 上传以后我们点击解压 就成功了 然后我们去访问 然后用哥斯拉访问 然后再点击添加 这样就成功了 成功进入

VSCode在windows系统下的配置简单版

参考链接 从零开始的vscode安装及环境配置教程(C/C)(Windows系统)_vscode搭建编译器环境-CSDN博客 vscode生成tasks.json、launch.json、c_cpp_properties.json文件_vscode生成launch.json-CSDN博客 自动生成配置文件简单方便&#xff01;&#xff01;&#xff01; 运行c代…

点击clean失败的操作Error running ‘demo4 [clean]‘ No valid Maven installation found.

错误情况&#xff1a; 解决方法&#xff1a; 重新调整自己的maven&#xff1a; 点击settings&#xff0c;搜索maven&#xff0c;点击进入&#xff1a; 选择自己的真实路径&#xff1a; 效果: 可以发现&#xff0c;运行clean成功&#xff01;

Useless Fan

灵感来源于老外的一个作品&#xff0c;但是只有风扇功能&#xff0c;除了袖珍感觉没啥用。 在淘宝上十几块买了一堆原件&#xff0c;于是手痒&#xff0c;自己手搓了一个&#xff0c;设计了个简单的3D打印外壳。 包括3大功能&#xff1a;风扇&#xff0c;充电宝&#xff08;2…

Spring MVC 快速入门指南及实战演示

1、SpringMVC简介 1.1 背景 Servlet属于web层开发技术&#xff0c;技术特点&#xff1a; 1. 每个请求都需要创建一个Servlet进行处理 2. 创建Servlet存在重复操作 3. 代码灵活性低&#xff0c;开发效率低 是否有技术方案可以解决以上问题&#xff1f; 1.2 SpringMVC概述 Sp…

C#加班统计次数

C#加班统计次数 运行环境&#xff1a;vs2022 .net 8.0 社区版 1、用C#语言&#xff1b;2、有界面上传Excel文件; 3、对Excel列&#xff08;部门、人员姓名、人员编号、考勤时间 &#xff09;处理&#xff1a;&#xff08;1&#xff09;按人员编号、考勤日期分组且保留原来字段&…

矩阵快速幂优化dp

之前一直想找一个矩阵快速幂的专题&#xff0c;但是都没有题目来总结&#xff0c;今天就来水一下 这个题目的转移方程我们可以很快想出来&#xff0c;但是我们如何作为我们矩阵快速幂的敲门砖呢&#xff1f; 有一个问题要注意的是我们由于这题不是取模的&#xff0c;可能会溢出…

网络安全-渗透测试工具及插件介绍和使用方法

1、Burp Suite Burp Suite 是用于攻击web 应用程序的集成平台。 是一款广泛使用的网络安全工具套件&#xff0c;主要用于测试Web应用程序的安全性。它可以帮助安全研究人员、渗透测试人员和开发人员发现和利用Web应用程序中的安全漏洞。 &#xff08;1&#xff09;下载和安装&a…

QuanTide-weekly第1期

本周Po文 这周我们共发表5篇文章。《基于 XGBoost 的组合策略…》等两篇详细讲解了机器学习构建组合策略的框架和常见问题。 文章要点与结论&#xff1a; 通过两阶段式方案实现多因子、多资产的组合策略构建。第一阶段基于XGBoost构建多个多因子单标的模型&#xff0c;第二阶…

安卓基本布局(下)

TableLayout 常用属性描述collapseColumns设置需要被隐藏的列的列号。shrinkColumns设置允许被伸缩的列的列号。stretchColumns设置允许被拉伸的列的列号。 <TableLayout xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/TableL…

yolov3 neck部分搭建,以及完整的网络搭建代码,可直接运行

目录 1. 用来实现共同的一些操作 common_module.py 2.1 使用到的通道配置 net_config.py 2.2 主干网络 darknet53.py 3. predict部分 neck.py 4. 拼凑成完整的yolov3网络 Yolov3.py 5. 网络结构如下 上次提到了搭建了主干网络&#xff0c;这个加上neck就可以构建…

内网穿透--meterpreter端口转发实验

实验背景 通过公司带有防火墙功能的路由器接入互联网&#xff0c;然后由于私网IP的缘故&#xff0c;公网无法直接访问内部主机&#xff0c;则需要通过已连接会话&#xff0c;代理穿透访问内网主机服务。 实验设备 1.路由器一台 2.内网 Win 7一台 3.公网 Kali 一台 4.网络 …

LeetCode面试150——238除自身以外数组的乘积

题目难度&#xff1a;中等 默认优化目标&#xff1a;最小化平均时间复杂度。 Python默认为Python3。 目录 1 题目描述 2 题目解析 3 算法原理及代码实现 3.1 左右乘积列表 参考文献 1 题目描述 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 an…

第十二节、人物下蹲

一、SuB-State Machine(子状态机) 1、创建一个子状态 2、可以选择退出的动画 二、人物下蹲 1、人物动画下蹲 2、人物碰撞体下蹲

日志远程同步实验

目录 一.实验环境 二.实验配置 1.node1发送方配置 &#xff08;1&#xff09;node1写udp协议 &#xff08;2&#xff09;重启服务并清空日志 2.node2接收方配置 &#xff08;1&#xff09;node2打开接受日志的插件&#xff0c;指定插件用的端口 &#xff08;2&#xff…

C#和S7-1200PLC S7.NET通信

1、一步步建立一个C#项目 一步步建立一个C#项目(连续读取S7-1200PLC数据)_s7协议批量读取-CSDN博客文章浏览阅读1.7k次,点赞2次,收藏4次。这篇博客作为C#的基础系列,和大家分享如何一步步建立一个C#项目完成对S7-1200PLC数据的连续读取。首先创建一个窗体应用。_s7协议批量…

技术方案/建设方案/可研报告/实施方案怎么写?3000份WORD全学会

解决方案是针对客户某些已经出现的或者可以预期的问题(技术、业务、管理等)&#xff0c;不足&#xff0c;缺陷&#xff0c;需求等&#xff0c;所提出的一个解决问题的方案&#xff0c;同时能够确保加以有效执行。 解决方案不只是一篇文档&#xff0c;而是一整套的行动计划&…