Python 和 Pyecharts 对Taptap相关数据可视化分析

结果展示:

数据来源:

Python爬取TapTap 热门游戏信息并存储到数据库(详细版)

目录

结果展示:

数据来源:

Python爬取TapTap 热门游戏信息并存储到数据库(详细版

一、引言

二、准备工作

三、代码详解

1、游戏评分分布可视化(visualize_game_scores函数)

2、游戏标签分布可视化(visualize_game_tags函数)

3、各评分区间内不同标签的游戏数量可视化(visualize_tags函数)

4、各评分区间内不同标签的游戏数量可视化(visualize_tags_函数)

四、总结


一、引言

        在游戏领域,数据可视化能够帮助我们更直观地了解游戏的各种情况,比如游戏评分分布、游戏标签分布、不同开发商的游戏数量以及各评分区间内不同标签的游戏数量等。本文将介绍如何通过 Python 结合 Pyecharts 库对从数据库中获取的游戏相关数据进行可视化处理,让数据 “说话”,呈现出有价值的信息。

二、准备工作

        在开始之前,我们需要确保已经安装了以下必要的库:

pip install pymysql
pip install pyecharts
  • pyecharts:用于创建各种精美的图表,如柱状图、饼图等,方便进行数据可视化。
  • pymysql:用于连接 MySQL 数据库,以便从数据库中获取我们所需的游戏相关数据。

三、代码详解

1、游戏评分分布可视化(visualize_game_scores函数)

        首先,通过pymysql连接到本地的 MySQL 数据库(地址为127.0.0.1,端口3306,用户名为root,密码为921108,数据库名为fjj)。

db = pymysql.Connect(host='127.0.0.1',port=3306,user='root',password='921108',db='fjj'
)
cursor = db.cursor()
  • 接着,从名为Taptap的表中查询游戏评分数据,并将获取到的数据进行处理,转换为合适的格式(将评分数据从元组形式转换为浮点数列表)。
sql = "SELECT score FROM Taptap"
cursor.execute(sql)
scores = cursor.fetchall()
score_list = [float(score[0]) for score in scores]
  • 然后,统计不同评分区间(如0-22-44-66-88-10)的游戏数量,并存入字典score_count中。
score_count = {}
for score in score_list:if score < 2:score_count.setdefault('0-2', 0)score_count['0-2'] += 1elif score < 4:score_count.setdefault('2-4', 0)score_count['2-4'] += 1elif score < 6:score_count.setdefault('4-6', 0)score_count['4-6'] += 1elif score < 8:score_count.setdefault('6-8', 0)score_count['6-8'] += 1elif score <= 10:score_count.setdefault('8-10', 0)score_count['8-10'] += 1
  • 之后,使用Pyecharts创建一个柱状图,设置其宽度、高度等初始化参数,并添加x轴(评分区间)和y轴(各评分区间对应的游戏数量)数据,同时设置了全局选项(如标题、坐标轴名称及样式、提示框样式等)和系列选项(在柱状图上显示数据标签)。
bar = Bar(init_opts=opts.InitOpts(width='800px', height='500px'))
bar.add_xaxis(list(score_count.keys()))
bar.add_yaxis("游戏数量", list(score_count.values()),itemstyle_opts=opts.ItemStyleOpts(color='#009688'))
bar.set_global_opts(title_opts=opts.TitleOpts(title="游戏评分分布", title_textstyle_opts=opts.TextStyleOpts(font_size=20)),xaxis_opts=opts.AxisOpts(name="评分区间", axislabel_opts=opts.LabelOpts(font_size=14)),yaxis_opts=opts.AxisOpts(name="游戏数量", axislabel_opts=opts.LabelOpts(font_size=14)),tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br>{b} : {c}")
)
bar.set_series_opts(label_opts=opts.LabelOpts(position='top', font_size=12)
)
  • 最后,将生成的柱状图渲染为game_scores.html文件,可在浏览器中查看可视化结果。
bar.render("game_scores.html")

2、游戏标签分布可视化(visualize_game_tags函数)

    同样先连接数据库,查询游戏标签数据。

db = pymysql.Connect(host='127.0.0.1',port=3306,user='root',password='921108',db='fjj'
)
cursor = db.cursor()
sql = "SELECT tags FROM Taptap"
cursor.execute(sql)
tags_data = cursor.fetchall()
  • 处理数据时,将所有标签提取出来并统计每个标签出现的次数。先将获取到的标签字符串按特定分隔符(这里是 “、”)分割成列表,再将所有标签合并到一个列表中,最后统计每个标签的出现次数并存入字典tag_count
all_tags = []
for tags in tags_data:tag_list = tags[0].split("、")all_tags.extend(tag_list)tag_count = {}
for tag in all_tags:tag_count[tag] = tag_count.get(tag, 0) + 1
  • 创建饼图,设置其初始化参数、添加数据(标签及对应的出现次数),并设置全局选项(如标题样式、图例选项、提示框样式等)和系列选项(这里隐藏了游戏标签,将show属性设置为False)。
pie = Pie(init_opts=opts.InitOpts(width='800px', height='500px'))
pie.add("", [(tag, count) for tag, count in tag_count.items()],radius=["30%", "60%"],center=["50%", "50%"],itemstyle_opts=opts.ItemStyleOpts(color=lambda x: '#%02x%02x%02x' % (int(255 * x['value'] / sum(tag_count.values())),int(255 * (1 - x['value'] / sum(tag_count.values()))),int(255 * 0.5))))
pie.set_global_opts(title_opts=opts.TitleOpts(title="游戏标签分布", title_textstyle_opts=opts.TextStyleOpts(font_size=25,color='pink'), pos_left="50%"),legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%", is_show=False),tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br>{b} : {c}")
)
pie.set_series_opts(label_opts=opts.LabelOpts()
)
  • 将生成的饼图渲染为game_tags.html文件,以便在浏览器中查看。
pie.render("game_tags.html")

3、各评分区间内不同标签的游戏数量可视化(visualize_tags函数)

        连接数据库并查询游戏评分和标签数据。

db = pymysql.Connect(host='127.0.0.1',port=3306,user='root',password='921108',db='fjj'
)
cursor = db.cursor()
sql = "SELECT label, COUNT(*) AS game_count FROM Taptap GROUP BY label"
cursor.execute(sql)
developers_data = cursor.fetchall()
  • 提取开发商名称和对应的游戏数量分别存入列表developersgame_counts
developers = [data[0] for data in developers_data]
game_counts = [data[1] for data in developers_data]
  • 创建柱状图,添加x轴(开发商名称)和y轴(游戏数量)数据,并设置全局选项和系列选项(在柱状图上显示数据标签)。
bar = Bar(init_opts=opts.InitOpts(width='800px', height='500px'))
bar.add_xaxis(developers)
bar.add_yaxis("游戏数量", game_counts,itemstyle_opts=opts.ItemStyleOpts(color='#FF5722'))
bar.set_global_opts(title_opts=opts.TitleOpts(title="不同开发商的游戏数量", title_textstyle_opts=opts.TextStyleOpts(font_size=20)),xaxis_opts=opts.AxisOpts(name="开发商", axislabel_opts=opts.LabelOpts(font_size=14)),yaxis_opts=opts.AxisOpts(name="游戏数量", axislabel_opts=opts.LabelOpts(font_size=14)),tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br>{b} : {c}")
)
bar.set_series_opts(label_opts=opts.LabelOpts(position='top', font_size=12)
)
  • 最后将柱状图渲染为developers_games_count.html文件供查看。
bar.render("developers_games_count.html")

4、各评分区间内不同标签的游戏数量可视化(visualize_tags_函数)

        连接数据库并查询游戏评分和标签数据。

db = pymysql.Connect(host='127.0.0.1',port=3306,user='root',password='921108',db='fjj'
)
cursor = db.cursor()
sql = "SELECT score, tags FROM Taptap"
cursor.execute(sql)
data = cursor.fetchall()
  • 定义评分区间字典,并将查询到的数据根据评分分类到不同的评分区间中,每个评分区间对应一个标签列表。
score_ranges = {'0-2': [], '2-4': [], '4-6': [], '6-8': [], '8-10': []}
for row in data:score = float(row[0])tags = row[1].split("、")if score < 2:score_ranges['0-2'].extend(tags)elif score < 4:score_ranges['2-4'].extend(tags)elif score < 6:score_ranges['4-6'].extend(tags)elif score < 8:score_ranges['6-8'].extend(tags)elif score <= 10:score_ranges['8-10'].extend(tags)
  • 统计各评分区间内不同标签的产品数量,将结果存入字典tag_count_in_ranges
tag_count_in_ranges = {}
for range_name, tags in score_ranges.items():tag_count = {}for tag in tags:tag_count[tag] = tag_count.get(tag, 0) + 1tag_count_in_ranges[range_name] = tag_count
  • 创建堆叠柱状图,依次添加各评分区间的数据到x轴和y轴,并设置全局选项和系列选项(在堆叠柱状图上显示数据标签)。
bar = Bar(init_opts=opts.InitOpts(width='800px', height='500px'))
for range_name, tag_count in tag_count_in_ranges.items():bar.add_xaxis(list(tag_count.keys()))bar.add_yaxis(range_name, list(tag_count.values()),itemstyle_opts=opts.ItemStyleOpts(color='#03A9F4'))
bar.set_global_opts(title_opts=opts.TitleOpts(title="各评分区间内不同标签的游戏数量", title_textstyle_opts=opts.TextStyleOpts(font_size=20)),xaxis_opts=opts.AxisOpts(name="游戏标签", axislabel_opts=opts.LabelOpts(font_size=14)),yaxis_opts=opts.AxisOpts(name="游戏数量", axislabel_opts=opts.LabelOpts(font_size=14)),tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br>{b} : {c}")
)
bar.set_series_opts(label_opts=opts.LabelOpts(position='top', font_size=12)
)
  • 将生成的堆叠柱状图渲染为tags_in_score_ranges.html文件以便查看。
bar.render("tags_in_score_ranges.html")

四、总结

        通过以上四个函数,我们分别实现了对游戏评分分布、游戏标签分布、不同开发商的游戏数量以及各评分区间内不同标签的游戏数量的可视化。这些可视化结果能够帮助我们更清晰地了解游戏相关数据的特点和分布情况,为游戏的开发、推广、运营等方面提供有价值的参考。在实际应用中,我们可以根据具体需求进一步对这些可视化图表进行分析和解读,从而做出更明智的决策。

        希望这篇文章能够帮助大家更好地理解如何使用 Python 和 Pyecharts 进行游戏相关数据的可视化处理。如果有任何疑问,欢迎在评论区留言交流。

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

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

相关文章

【Linux】常见指令 + 权限概念

文章目录 一、重要的指令mkdir指令rmdir指令 && rm 指令man指令cp指令mv指令less指令find指令tar指令 二、关于Linux中的权限文件访问者的分类&#xff08;人&#xff09;文件类型和访问权限&#xff08;事物属性&#xff09;文件权限值的表示方法文件访问权限的相关设…

老旧前端项目如何升级工程化的项目

因为历史的原因存在着大量的老旧前端项目&#xff0c;而在今天的开发环境中已经不再适应了&#xff0c;于是产生了升级到新的环境的需求。比如笔者当前的一个登录页面项目&#xff0c;就是以下面为技术栈的老旧项目。 基于 jQuery包管理基于 require.js&#xff0c;甚至有的没…

在国外,使用中国移动app办理停机保号

1.人在国内的时候&#xff0c;先使用手机下载中国移动app 以前网上营业厅是可以直接办理停机保号的&#xff0c;现在不可以了 2.人在国内的时候&#xff0c;确保自己的手机能够登录中国移动app 这个步骤保证回国前可以使用中国移动app复机 3.人在国内的时候&#xff0c;拨打…

C# 解决【托管调试助手 “ContextSwitchDeadlock“:……】问题

文章目录 一、遇到问题二、解决办法 一、遇到问题 托管调试助手 “ContextSwitchDeadlock”:“CLR 无法从 COM 上下文 0x56e81e70 转换为 COM 上下文 0x56e81d48&#xff0c;这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows …

Vscode阅读C/C++ Code实用教程

目录 1.必备插件2.创建工程3.重要的快捷键及使用 1.必备插件 C/C IntelliSense - 用于跳转GitLens — Git supercharged -用于查看git 提交记录Remote - SSH -用于连接linux服务器 2.创建工程 创建工程还是蛮重要的&#xff0c;虽然不创建同样可以看Code&#xff0c;创建工程…

OGRE 3D----4. OGRE和QML共享opengl上下文

在现代图形应用开发中,OGRE(Object-Oriented Graphics Rendering Engine)和QML(Qt Modeling Language)都是非常流行的工具。OGRE提供了强大的3D渲染能力,而QML则用于构建灵活的用户界面。在某些应用场景中,我们需要在同一个应用程序中同时使用OGRE和QML,并且共享OpenGL…

C语言进阶7:程序环境与预处理

本章重点 程序的翻译环境程序的执行环境详解&#xff1a;C语言程序的编译 链接预定义符号介绍预处理指令 #define宏和函数的对比预处理操作符#和##的介绍命令定义预处理指令 #include预处理指令 #undef条件编译 1.程序的翻译环境和执行环境 在ANSIC的任何一种实现中&#x…

.net的winfrom程序 窗体透明打开窗体时出现在屏幕右上角

窗体透明&#xff0c; 将Form的属性Opacity&#xff0c;由默认的100% 调整到 80%&#xff0c;这个数字越小越透明(尽量别低于50%&#xff0c;不信你试试看)&#xff01; 打开窗体时出现在屏幕右上角 //构造函数 public frmCalendarList() {InitializeComponent();//打开窗体&…

【Java基础入门篇】三、面向对象和JVM底层分析(3)

Java基础入门篇 三、面向对象和JVM底层分析 3.5 抽象类/接口和外/内部类 &#xff08;1&#xff09;抽象类 **“抽象方法”**是使用abstract修饰的方法&#xff0c;没有方法体&#xff0c;只有声明&#xff0c;定义的是一种“规范”&#xff0c;就是告诉子类必须要给抽象方法…

快速理解倒排索引在ElasticSearch中的作用

一.基础概念 定义&#xff1a; 倒排索引是一种数据结构&#xff0c;用来加速文本数据的搜索和检索&#xff0c;和传统的索引方式不同&#xff0c;倒排索引会被每个词汇项与包含该词汇项的文档关联起来&#xff0c;从而去实现快速的全文检索。 举例&#xff1a; 在传统的全文…

AI开发 - GPT之魂 用Python 演示chatGPT的自注意力机制 - 机器学习

自注意力机制&#xff08;Self-Attention&#xff09;就是让模型在处理每个词时&#xff0c;学会“关注重点”&#xff0c;而不是平均地对每个词一视同仁。这种机制让 GPT 能更聪明地理解句子的上下文和语义之间的关系。 自注意力机制是 GPT 的核心&#xff0c;它帮助模型在理解…

将自定义 AWS S3 快照存储库连接到 Elastic Cloud

作者&#xff1a;来自 Elastic Annie Hansen, Stef Nestor 在本博客中&#xff0c;我们将介绍如何通过 Elasticsearch 的快照将我们已提交的集群数据备份到 AWS S3 存储桶中。在 Elastic Cloud&#xff08;企业版&#xff09;中&#xff0c;Elastic 在其 found-snapshots 存储…

linux下Qt程序部署教程

文章目录 [toc]1、概述2、静态编译安装Qt1.1 安装依赖1.2 静态编译1.3 报错1.4 添加环境变量1.5 下载安装QtCreator 3、配置linuxdeployqt环境1.1 在线安装依赖1.2 使用linuxdeployqt提供的程序1.3 编译安装linuxdeployqt 4、使用linuxdeployqt打包依赖1.1 linuxdeployqt使用选…

【QT】控件8

1.QDial 通过调节旋钮位置来控制窗口的不透明度&#xff1a; void Widget::on_dial_valueChanged(int value) {qDebug()<<value;this->setWindowOpacity((double)value/100); }效果演示&#xff1a; 2.Date/Time Edit 计算两个日期的差值 ui界面设计 计算按钮按下…

CGAL CGAL::Polygon_mesh_processing::self_intersections解析

CGAL::Polygon_mesh_processing::self_intersections 是用于检测多边形网格&#xff08;Polygon Mesh&#xff09;中的自相交的函数。自相交是指网格中的某些面&#xff08;例如三角形&#xff09;与同一网格中的其他面交叉的情况。这种情况通常是不期望的&#xff0c;因为它会…

[巅峰极客 2021]签到

[巅峰极客 2021]签到 给了我们好多表情&#xff0c;真的是一脸懵逼 注意给我们的关键词 GAME 现在还不知道是什么意思我们去试着解开一下 用这个emoji表情解密器&#xff0c;这里我找了好久才找到一个 emoji-aes 这里的Key值就是GAME 运行后出现flag NSSCTF{10ve_4nd_Peace…

005 MATLAB符号微积分

前言&#xff1a; 在MATLAB中&#xff0c;数值与符号的主要区别在于它们的处理方式和应用场景 数值计算适用于实际的数值计算问题&#xff0c;如矩阵运算、数据分析等。符号计算适用于符号推导、公式化简和符号解析&#xff0c;如理论物理和工程计算。 01 符号对象 1.基本符…

“岗位复合化、技能层次化” 高职大数据技术专业人才培养实践

在全球数字化浪潮的推动下&#xff0c;大数据技术已经成为引领社会进步和经济发展的核心动力。随着《关于深化现代职业教育体系建设改革的意见》等系列指导问文件的发布&#xff0c;我国高职大数据技术专业的教育正迎来全新机遇与挑战。这些政策不仅明确了职业教育改革的方向&a…

51c自动驾驶~合集38

我自己的原文哦~ https://blog.51cto.com/whaosoft/12358456 #GaussianPretrain 万能3D高斯预训练表示&#xff01;爆拉3D检测、Occ、高精地图等四大任务&#xff01; 受Tesla的技术的推动&#xff0c;越来越多的厂商开始走"纯视觉"的路线&#xff0c;多数方案还…

MongoDB集群分片安装部署手册

文章目录 一、集群规划1.1 集群安装规划1.2 端口规划1.3 目录创建 二、mongodb安装&#xff08;三台均需要操作&#xff09;2.1 下载、解压2.2 配置环境变量 三、mongodb组件配置3.1 配置config server的副本集3.1.1 config配置文件3.1.2 config server启动3.1.3 初始化config …