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

news2025/1/8 4:22:10

结果展示:

数据来源:

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'] += 1
    elif score < 4:
        score_count.setdefault('2-4', 0)
        score_count['2-4'] += 1
    elif score < 6:
        score_count.setdefault('4-6', 0)
        score_count['4-6'] += 1
    elif score < 8:
        score_count.setdefault('6-8', 0)
        score_count['6-8'] += 1
    elif 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) + 1
    tag_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.coloradmin.cn/o/2250550.html

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

相关文章

泷羽sec-shell (3)脚本参数传递与数学运算

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

重塑视频新语言,让每一帧都焕发新生——Video-Retalking,开启数字人沉浸式交流新纪元!

模型简介 Video-Retalking 模型是一种基于深度学习的视频再谈话技术&#xff0c;它通过分析视频中的音频和图像信息&#xff0c;实现视频角色口型、表情乃至肢体动作的精准控制与合成。这一技术的实现依赖于强大的技术架构和核心算法&#xff0c;特别是生成对抗网络&#xff0…

Mybatis Plus 增删改查方法(一、增)

先定义一个简单的测试表&#xff0c;执行脚本如下&#xff1a; create table user(id bigint primary key auto_increment,name varchar(255) not null,age int not null default 0 check (age > 0) ); 根据Spingbootmybatisplus的结构根据表自行构建结构&#xff0c;大致…

依赖倒置原则:Java实践篇

在软件开发的世界里&#xff0c;设计原则如同指南针&#xff0c;指引着我们构建更加健壮、可维护和可扩展的系统。其中&#xff0c;依赖倒置原则&#xff08;Dependency Inversion Principle&#xff0c;DIP&#xff09;是面向对象设计&#xff08;OOD&#xff09;中的一个重要…

【MySQL】库和表的基本操作

目录 库 库的增删查改 字符集与校验集 库的备份与恢复 表 表的创建和删除 用不同的存储引擎创建表的区别 查看表 修改表 添加删除属性 修改改变属性 上篇博客我们讲了数据库的基本理解&#xff0c;对数据库有了一个大致的概念&#xff0c;下面我们来介绍一下库和表的…

大数据新视界 -- 大数据大厂之 Hive 函数库:丰富函数助力数据处理(上)(11/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

03.ES7 04.ES8

3.1.Array.includes Includes 方法用来检测数组中是否包含某个元素&#xff0c;返回布尔类型值 <script>// includes const mingzhu [王二,张三,李四,王五];//判断console.log(mingzhu.includes(张三));//trueconsole.log(mingzhu.includes(周六));//false//indexOf …

中国科学院大学研究生学术英语读写教程 Unit7 Materials Science TextA 原文和翻译

中国科学院大学研究生学术英语读写教程 Unit7 Materials Science TextA 原文和翻译 Why Is the Story of Materials Really the Story of Civilisation? 为什么材料的故事实际上就是文明的故事&#xff1f; Mark Miodownik 1 Everything is made of something. Take away co…

下载安装Android Studio

&#xff08;一&#xff09;Android Studio下载地址 https://developer.android.google.cn/studio 滑动到 点击下载文档 打开新网页 切换到english ![](https://i-blog.csdnimg.cn/direct/b7052b434f9d4418b9d56c66cdd59fae.png 等待一会&#xff0c;出现 点同意后&#xff0…

【解决方案】pycharm出现 为项目选择的Python解释器无效

文章目录 1.问题重述2.解决方案END 1.问题重述 第二次启动项目的时候出现 2.解决方案 右下角点 先选无解释器&#xff0c;然后在用项目配置好的解释器&#xff0c;然后就好了&#xff0c;估计是第二次启动的时候没有识别到&#xff0c;UI的信号设置的问题 END

浏览器的数据六种存储方法比较 :LocalStorage vs. IndexedDB vs. Cookies vs. OPFS vs. WASM-SQLite

在构建该 Web 应用程序&#xff0c;并且希望将数据存储在用户浏览器中。也许您只需要存储一些小标志&#xff0c;或者甚至需要一个成熟的数据库。 我们构建的 Web 应用程序类型发生了显着变化。在网络发展的早期&#xff0c;我们提供静态 html 文件。然后我们提供动态渲染的 h…

linux一键部署apache脚本

分享一下自己制作的一键部署apache脚本&#xff1a; 脚本已和当前文章绑定&#xff0c;请移步下载&#xff08;免费&#xff01;免费&#xff01;免费&#xff01;&#xff09; &#xff08;单纯的分享&#xff01;&#xff09; 步骤&#xff1a; 将文件/内容上传到终端中 …

Java ConcurrentHashMap

Java Map本质不是线程安全的&#xff0c;HashTable和Collections同步包装器&#xff08;Synchronized Wrapper&#xff09;在并发场景下性能低。Java还为实现 Map 的线程安全提供了并发包&#xff0c;保证线程安全的方式从synchronize简单方式到精细化&#xff0c;比如Concurre…

redis下载、基础数据类型、操作讲解说明,持久化、springboot整合等

1 Redis是什么 官网&#xff1a;https://redis.io 开发者&#xff1a;Antirez Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器&#xff0c;是一个基于内存的键值型NoSQL数据库。 Redis是一个开源的、高性能的键值对存储系统&#xff0c;它支持多种数据结构&…

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

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

系统学习算法: 专题二 滑动窗口

题目一&#xff1a; 算法原理&#xff1a; 依然第一反应是暴力枚举&#xff0c;将所有的子数组都枚举出来&#xff0c;找到满足条件的长度最小的子数组&#xff0c;但是需要两层循环&#xff0c;时间复杂度来到O&#xff08;N^2&#xff09; 接下来就该思考如何进行优化 如果…

QGIS制作xyz切片(mbtiles)

MBTiles是由MapBox制定的一种将瓦片地图数据存储到SQLite数据库中并可快速使用&#xff0c;管理和分享的规范。它使得数以百万的瓦片数据存储在一个文件中&#xff0c;而且SQLite数据库支持多种平台&#xff0c;所以使用MBTiles在移动设备上浏览瓦片数据是比较理想的方式。 QGI…

软件测试——性能测试工具JMeter

1.JMeter介绍 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。JMeter小巧轻便且免费&#xff0c;逐渐成为了主流的性能测试工具&#xff0c;是每个测试人员都必须要掌握的工具之一。 环境要求&#xff1a; ​ 需要Java8或者更高的版本。 1.1 JMeter的下…

【C++算法】20.二分查找算法_x 的平方根

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 69. x 的平方根 题目描述&#xff1a; 解法 暴力解法&#xff1a; 如果x17 从1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5......这些数里面找他们的平方…

拥抱 OpenTelemetry:阿里云 Java Agent 演进实践

作者&#xff1a;陈承 背景 在 2018 年的 2 月&#xff0c;ARMS Java Agent 的第一个版本正式发布&#xff0c;为用户提供无侵入的的可观测数据采集服务。6 年后的今天&#xff0c;随着软件技术的迅猛发展、业务场景的逐渐丰富、用户规模的快速增长&#xff0c;我们逐渐发现过…