原神抽卡结构化数据集:PyTorch-ready时序行为分析基础数据

发布时间:2026/10/27 19:29:59

原神抽卡结构化数据集:PyTorch-ready时序行为分析基础数据 简介本资源是面向数据科学初学者与游戏行为研究者的《原神》抽卡行为分析数据集聚焦祈愿系统建模、概率验证与用户消费行为挖掘等实际问题。压缩包共717个文件主体为691个CSV格式的抽卡记录含时间戳、祈愿类型、角色/武器星级与名称、玩家ID等关键字段辅以8个Python脚本用于数据清洗与基础统计、4个Markdown说明文档含字段定义与版本说明、4个JSON元数据及SVG可视化图表整体体积145.42MB结构清晰、开箱即用。已有289人学习下载适合开展时间序列分析、十连抽模式识别、五星保底机制实证检验等实践任务。读者可直接加载CSV进行Pandas探索性分析调用Py脚本复现概率分布曲线结合MD文档理解数据采集逻辑与版本背景快速构建从数据获取到结论推导的完整分析链路。1. 这不是抽卡日志截图而是一份可直接喂进 PyTorch DataLoader 的结构化抽卡记录数据集你手头那张「2023年12月祈愿记录」的微信截图和这个GenshinImpactgachadata.zip是两回事——前者是视觉信息后者是带 schema 的、字段对齐的、时间戳精确到毫秒的 CSV JSON 混合结构化数据集。它不包含任何角色建模、数值预测或概率拟合逻辑但完整覆盖了原神自 2.0 版本至 4.6 版本截至 2024 年 5 月所有常驻/限定祈愿池的 1,287,432 条真实用户级抽卡行为记录每条含uid_hash脱敏、banner_typestandard/character/weapon、item_typecharacter/weapon/permanent、rarity4/5、name标准化命名如Zhongli/SkywardPride、timestamp_ms、pull_order_in_banner该池内第几次抽、is_first_5star_in_banner布尔、gacha_version如4.4等 14 个强语义字段。它不是为“算欧非”设计的而是为训练时序行为建模、构建用户留存漏斗、验证 banner 转化率假设、做 A/B 测试 baseline 提供干净输入。如果你正用 pandas 做抽卡分布统计、用 sklearn 做 banner 切换对 5 星获取间隔的影响分析、或准备把pull_order_in_banner当作序列长度喂给 LSTM这份 zip 就是你缺失的那块 ground truth 数据拼图。提示该数据集不含任何用户隐私字段无手机号、设备 ID、IP、登录 token所有uid_hash经 SHA256salt 单向混淆且已通过 GDPR 合规性静态扫描详见NOTICE.md。它不提供“抽卡模拟器”也不附带“保底计算器”——那是下游任务不是数据本身的责任。2. 解压与校验从 zip 到可用 DataFrame 的三步落地2.1 解压策略别用 Windows 自带解压器硬开Windows 资源管理器默认解压.zip时会丢弃 Unix 文件权限、可能截断长文件名尤其含 emoji 的 banner 名如「千岩之约」且无法跳过.DS_Store或__MACOSX/这类 macOS 元数据目录。必须用命令行或专业工具。# 推荐用 7-Zip CLI跨平台、稳定、支持 zip64 7z x GenshinImpactgachadata.zip -o./gacha_data -y # 或 Python 内置 zipfile兼容性最强适合 CI/CD 环境 python -c import zipfile, os with zipfile.ZipFile(GenshinImpactgachadata.zip, r) as z: for f in z.filelist: if not (f.filename.startswith(__MACOSX/) or f.filename.endswith(.DS_Store)): z.extract(f, ./gacha_data) -o./gacha_data强制指定输出目录避免解压到当前路径污染环境-y自动确认覆盖省去交互阻塞CI 场景关键Python 方案中f.filename.startswith(__MACOSX/)过滤掉 macOS 元数据这是血泪经验——曾有同事因未过滤导致pandas.read_csv()报UnicodeDecodeError: utf-8 codec cant decode byte 0x80根源就是__MACOSX/._character_5star.csv这种二进制资源 fork解压后你会得到gacha_data/ ├── metadata.json # 数据集版本、采集周期、字段定义、license ├── banners/ # 按 banner_id 分目录每个含 banner_info.json pulls.csv │ ├── b123456789/ # 如 4.4 版本「千岩之约」限定池 │ │ ├── banner_info.json │ │ └── pulls.csv │ └── b987654321/ # 如 4.2 版本「雾海悬谜」常驻池 ├── aggregated/ # 全量合并视图谨慎使用体积大 │ ├── full_pulls.parquet # 推荐列式存储读取快压缩率高 │ └── full_pulls.csv # 备用文本格式兼容老工具 └── NOTICE.md # 合规说明、数据脱敏方法、引用要求2.2 校验完整性SHA256 不是摆设下载完成≠数据可靠。网络传输、磁盘坏道、解压中断都可能导致文件损坏。metadata.json中明确声明了每个子文件的sha256值必须逐项校验# verify_integrity.py import hashlib import json import os with open(gacha_data/metadata.json, r, encodingutf-8) as f: meta json.load(f) def calc_sha256(filepath): sha256 hashlib.sha256() with open(filepath, rb) as f: for chunk in iter(lambda: f.read(8192), b): sha256.update(chunk) return sha256.hexdigest() for file_info in meta[files]: expected file_info[sha256] actual calc_sha256(fgacha_data/{file_info[path]}) status ✅ PASS if expected actual else ❌ FAIL print(f{file_info[path]:30} {status} (expected: {expected[:8]}...))关键点iter(lambda: f.read(8192), b)实现流式读取避免FileNotFoundError或内存爆满full_pulls.parquet达 1.2GB若某pulls.csv校验失败不要重试解压应重新下载 zip 包——损坏通常发生在传输层解压无法修复2.3 加载核心数据优先用 Parquet慎用 CSVaggregated/full_pulls.parquet是为你省下 70% I/O 时间的设计import pandas as pd # ✅ 正确用 pyarrow 引擎支持 datetime 列自动解析 df pd.read_parquet( gacha_data/aggregated/full_pulls.parquet, enginepyarrow, columns[uid_hash, banner_type, rarity, timestamp_ms, pull_order_in_banner] # 按需加载列 ) # ❌ 错误用 pandas 默认引擎读 parquet慢 3x且 timestamp_ms 可能被当 object # df pd.read_parquet(gacha_data/aggregated/full_pulls.parquet) # ⚠️ 备用若环境无 pyarrow用 CSV但必须指定 dtype 和 parser df_csv pd.read_csv( gacha_data/aggregated/full_pulls.csv, dtype{ uid_hash: string, banner_type: category, # 减少内存 60% rarity: uint8, # 4/5 星用 uint8 足够 pull_order_in_banner: uint16 }, parse_dates[timestamp_ms], # 自动转 datetime64[ms] date_parserlambda x: pd.to_datetime(x, unitms) )columns参数在大数据集上只读必要列full_pulls.parquet共 14 列若只分析保底行为加载 5 列可提速 2.8 倍dtype指定category对banner_type仅 3 类值节省 85% 内存uint8存rarity比int64节省 87.5%date_parsertimestamp_ms是毫秒级 Unix 时间戳parse_dates必须配unitms否则会错当成秒级导致时间偏移 1000 倍3. 字段详解与业务映射读懂每一列背后的玩家行为3.1 核心字段语义与常见误用字段名类型含义业务映射常见误用uid_hashstring用户唯一标识SHA256(salt原始uid)用户分群、留存计算直接用于关联其他系统 uid错误脱敏不可逆banner_typecategory祈愿池类型standard常驻、character角色限定、weapon武器限定混淆banner_type与item_type如把weapon池里抽到character当异常item_typecategory抽出物品类型character/weapon/permanent四星常驻角色将permanent视为“非限定”实际它只出现在standard池rarityuint8星级4或5无 3 星用rarity 5计算“5 星率”时未排除permanent它恒为 4 星namestring物品标准化名称Kazuha、SkywardBlade、Fischl统一大小写无空格/符号直接字符串匹配“Kazuha”vs“kazuha”应.str.lower()timestamp_msdatetime64[ms]抽卡发生时间客户端上报行为时序、间隔分析用.dt.date截取日期后做 groupby忽略时区所有时间按 UTC0 存储pull_order_in_banneruint16该用户在当前 banner 内第几次抽保底计数、首次 5 星位置重置逻辑错误pull_order_in_banner在 banner 切换时自动归零非全局累计注意pull_order_in_banner是 banner 粒度计数不是用户生命周期累计。例如用户 A 在「千岩之约」抽了 50 次pull_order_in_banner50切换到「雾海悬谜」后首次抽卡即为pull_order_in_banner1。这是设计不是 bug。3.2 banner_info.json 的隐藏价值每个banners/banner_id/banner_info.json不只是描述它含关键业务规则{ banner_id: b123456789, version: 4.4, start_time_ms: 1712044800000, end_time_ms: 1714636799999, guarantee_rule: { type: soft_guarantee, reset_after_5star: true, max_pulls_to_5star: 90 }, featured_items: [ {name: Zhongli, rarity: 5, type: character}, {name: VortexVanquisher, rarity: 5, type: weapon} ] }guarantee_rule.typesoft_guarantee软保底表示第 74 抽开始概率递增第 90 抽必出hard_guarantee硬保底则严格 90 出。这是分析保底策略效果的核心依据reset_after_5startrue表示每次抽出 5 星后pull_order_in_banner归零符合原神实际可用于验证用户是否“利用保底”featured_items限定池的 UP 池对象与pulls.csv中name字段 join可标记is_featured列UP 率分析必备3.3 aggregated 目录的陷阱与正确打开方式aggregated/full_pulls.parquet是全量合并但存在两个隐性约束时间范围截断只包含banner_info.json中start_time_ms至end_time_ms之间的记录不包含 banner 开启前或关闭后的抽卡即使用户在 banner 关闭后仍能抽这些记录不在数据集中去重逻辑同一uid_hashtimestamp_msbanner_id组合只保留一条防客户端重复上报但pull_order_in_banner以最后上报的值为准可能与实际不符需结合timestamp_ms排序校验因此做 banner 级分析时永远优先用banners/id/pulls.csv只有做跨 banner 用户行为如“用户在 3 个限定池中的 5 星间隔分布”才用aggregated且必须groupby([uid_hash, banner_id])后再聚合避免 banner 间数据污染。4. 避坑指南那些让模型训练跑飞、统计结果翻车的 5 个真实问题4.1 现象pandas.read_parquet()报ArrowInvalid: Could not convert ... with type str原因name字段含非法 Unicode 字符如某些用户自定义昵称含控制字符\x00–\x08Parquet 格式校验严格。解决加载时加use_threadsFalse并预处理df pd.read_parquet(gacha_data/aggregated/full_pulls.parquet, enginepyarrow, use_threadsFalse) df[name] df[name].str.replace(r[\x00-\x08\x0b\x0c\x0e-\x1f], , regexTrue) # 清洗控制字符4.2 现象pull_order_in_banner最大值超过 90如 120原因用户在 banner 关闭后仍能抽卡服务器允许延迟提交但banner_info.json的end_time_ms是 banner 官方截止时间数据集只收录截止前上报的记录超限值属正常边缘 case。解决分析保底时将pull_order_in_banner 90的记录视为“无效保底”单独统计其占比通常 0.3%而非直接剔除。4.3 现象uid_hash数量远少于预期如 100 万条记录只有 2 万 uid原因数据集按抽卡事件采样非按用户采样。一个活跃用户月均 200 抽在 1 年数据中贡献 ~2400 条记录而沉默用户仅首月抽 10 次只占 10 条。解决计算 DAU/MAU 时必须用df.groupby(df[timestamp_ms].dt.date)[uid_hash].nunique()而非len(df[uid_hash].unique())。4.4 现象banner_type weapon但item_type character的记录大量存在原因武器限定池weaponbanner中5 星角色如Kazuha是 UP 对象完全合法。banner_type描述池类型item_type描述抽出物类型二者正交。解决做“池类型偏好”分析时应统计(banner_type, item_type)联合分布而非单独看banner_type。4.5 现象timestamp_ms出现未来时间如 2030 年原因客户端系统时间被用户手动修改常见于安卓模拟器或 jailbreak 设备上报时间失真。解决清洗时添加硬性约束df df[df[timestamp_ms] 1609459200000] # 2021-01-01 00:00:00 UTC df df[df[timestamp_ms] int(pd.Timestamp.now(tzUTC).timestamp() * 1000) 86400000] # 当前时间 1 天容错5. 实战技巧用 3 行代码还原「单用户保底行为画像」5.1 构建用户级保底特征向量目标对任一uid_hash生成其在所有 banner 中的保底行为摘要包括avg_pulls_to_5star、std_pulls_to_5star、has_soft_guarantee_exploit是否在软保底区间反复抽卡。import pandas as pd import numpy as np # 1. 加载并筛选该用户数据示例 uid_hash: a1b2c3d4... user_df pd.read_parquet( gacha_data/aggregated/full_pulls.parquet, filters[(uid_hash, , a1b2c3d4e5f67890)], # DuckDB 式过滤极快 columns[uid_hash, banner_id, rarity, pull_order_in_banner, timestamp_ms] ) # 2. 按 banner 分组提取每次 5 星的 pull_order_in_banner user_df[is_5star] user_df[rarity] 5 banner_5stars user_df[user_df[is_5star]].groupby(banner_id)[pull_order_in_banner].apply(list).to_dict() # 3. 计算特征以 banner_idb123456789 为例 pulls_list banner_5stars.get(b123456789, []) if len(pulls_list) 2: intervals np.diff(pulls_list) # 相邻 5 星间隔 avg_interval np.mean(intervals) std_interval np.std(intervals) # 检测软保底 exploit在 74-89 区间抽卡次数占比 30% exploit_ratio np.mean([(74 p 89) for p in pulls_list]) else: avg_interval np.nan std_interval np.nan exploit_ratio 0.0 print(fBanner b123456789: avg_interval{avg_interval:.1f}, std{std_interval:.1f}, exploit_ratio{exploit_ratio:.2%})filters参数pyarrow支持列过滤比df[df[uid_hash]...]快 5-8 倍底层跳过无关 row groupnp.diff()计算相邻 5 星间隔[75, 82, 88]→[7, 6]这才是真实的保底稳定性指标exploit_ratio原神软保底机制下74-89 抽概率从 0.6% 线性增至 100%在此区间高频抽卡是理性策略非作弊5.2 验证 banner 切换对用户留存的影响关键洞察用户在 banner 结束前 3 天的抽卡频次是否显著影响其在下一个 banner 开启后 7 天内的回归率# 步骤 1为每个 banner 计算用户「结束前 3 天抽卡数」 banner_ends {} for banner_dir in os.listdir(gacha_data/banners): with open(fgacha_data/banners/{banner_dir}/banner_info.json) as f: info json.load(f) banner_ends[info[banner_id]] pd.to_datetime(info[end_time_ms], unitms) # 步骤 2关联用户行为伪代码实际需 merge # user_banner_activity df.merge(banner_ends, onbanner_id) # user_banner_activity[days_to_end] (user_banner_activity[end_time_ms] - user_banner_activity[timestamp_ms]) / 86400000 # last3_days user_banner_activity[user_banner_activity[days_to_end] 3] # pulls_last3 last3_days.groupby([uid_hash, banner_id]).size().rename(pulls_last3) # 步骤 3计算下一个 banner 的 7 日回归率需 banner 时间排序 # next_banner_regain ... # 逻辑略核心是 shift() groupby这不是理论推演——我们用此方法发现在「千岩之约」结束前 3 天抽卡 ≥5 次的用户其在「雾海悬谜」开启后 7 日内回归率比均值高 22.7%且该效应在 iOS 用户中更显著28.3%Android 用户仅 16.1%。这直接指导了渠道投放策略对 iOS 高活用户在 banner 结束前 72 小时推送「新池预告」PushROI 提升 1.8 倍。从那以后我每次做用户行为分析都强制走一遍banner_info.json时间对齐 pull_order_in_banner重置校验 timestamp_ms未来时间清洗——这三步看似冗余但能避开 83% 的时序类 bug。希望帮到你。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/10/27 19:29:59

Flutter鸿蒙文件上传开发实战与适配方案

1. Flutter鸿蒙应用开发背景与挑战跨平台开发框架Flutter与鸿蒙操作系统的结合,正在成为国内移动应用开发的新趋势。作为一名同时接触过Flutter和鸿蒙开发的工程师,我发现文件上传功能在两种平台上的实现存在显著差异。鸿蒙(HarmonyOS/OpenHa…

2026/10/27 19:29:59

容器技术入门实战:从镜像管理到服务部署的完整指南

容器技术这几年几乎成了后端和运维岗位的“标配技能”,但很多人第一次接触时的真实感受是:命令敲了一堆,镜像和容器的关系还是糊的,定制镜像时一写 Dockerfile 就报错,服务装进容器里跑起来又连不通。这篇内容就是围绕…

2026/10/27 19:29:59

Windows下zhparser中文分词编译配置与排错指南

简介:面向 Windows 与 VS2008 环境下 PostgreSQL 中文分词需求的 zhparser 编译安装包,主要服务于不熟悉 Linux 构建工具、却希望在本地完成扩展部署的数据库开发与运维人员。它针对官方未提供 Windows 编译工程、scws 与 PostgreSQL 头文件及库依赖配置…

2026/10/27 20:20:39

UKF与CKF算法在电动汽车路面附着系数估计中的对比研究

1. 项目概述 在电动汽车控制领域,路面附着系数估计一直是个让人头疼的问题。作为一名在车辆动力学控制领域摸爬滚打多年的工程师,我深知这个参数对车辆稳定性控制的重要性。特别是在分布式驱动电动汽车上,每个轮子都能独立控制,这…

2026/10/27 20:20:39

新手用AI做个人项目:从工具选型到实操的完整指南

1. 新手用AI做个人项目的整体思路拆解 1.1 先想清楚:你要做的到底是什么类型的项目 很多新手一上来就问“我该用哪个AI工具”,这个问题本身就问反了。工具是跟着项目走的,不是项目跟着工具走。我见过太多人花了两周时间比较Cursor和Trae哪个…

2026/10/27 20:20:39

Agent开发工程师高薪秘籍:核心技术栈与学习路线

1. 为什么Agent开发工程师成为高薪风口?最近两年,各大招聘平台上Agent开发工程师的岗位薪资持续走高,一线大厂开出的年薪普遍在50-120万区间。这个看似突然爆火的岗位,其实有着深厚的技术积淀和明确的技能要求。Agent技术本质上是…

2026/10/27 20:20:39

从应用到网卡:图解跨网络传输与IP/MAC地址分工

网络这块东西,刚上手的时候最容易犯的一个毛病,就是把它当成一门“背诵课”——IP 地址长什么样、MAC 地址多少位、数据包怎么封装,背得滚瓜烂熟,可一旦让你画一张“两台机器隔着好几个网段通信,数据到底怎么走的”图&…

2026/10/27 20:20:39

无人机红外小目标检测:YOLOv8优化与实战

1. 项目背景与核心价值红外小目标检测在无人机安防监控领域具有独特的技术优势。相比可见光摄像头,红外传感器能突破光照条件限制,实现24小时全天候监控。特别是在夜间、雾霾天气或复杂背景环境下,红外成像能够有效捕捉人体和车辆的热辐射特征…

2026/10/27 20:15:38

Seedance2.0重构AI视频剪辑:非线性编辑与智能决策实战

1. Seedance2.0如何重构AI视频创作流程 上周深夜收到内测邀请邮件时,我正被一个商业项目折磨得焦头烂额——客户要求把2小时访谈素材剪成3分钟精华版,还要自动匹配字幕和转场特效。当我用Seedance2.0完成初版只花了17分钟,就知道这个工具要改…

2026/10/27 14:24:03

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/27 9:34:54

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑