结果展示:
数据来源:
Python爬取TapTap 热门游戏信息并存储到数据库(详细版)
目录
结果展示:
数据来源:
Python爬取TapTap 热门游戏信息并存储到数据库(详细版
一、引言
二、准备工作
三、代码详解
1、游戏评分分布可视化(visualize_game_scores函数)
四、总结
一、引言
在游戏领域,数据可视化能够帮助我们更直观地了解游戏的各种情况,比如游戏评分分布、游戏标签分布、不同开发商的游戏数量以及各评分区间内不同标签的游戏数量等。本文将介绍如何通过 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-2
、2-4
、4-6
、6-8
、8-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()
- 提取开发商名称和对应的游戏数量分别存入列表
developers
和game_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 进行游戏相关数据的可视化处理。如果有任何疑问,欢迎在评论区留言交流。