Skip to content

Latest commit

 

History

History
161 lines (107 loc) · 8.46 KB

File metadata and controls

161 lines (107 loc) · 8.46 KB

第一课:与其感慨路难行,不如马上出发

课程运作方式

(×)校园模式:逐一讲解知识点、讲案例、完成作业

(√)自学模式:自己提出问题——票选最有意思的问题——自学知识点——一起完成分析,输出结论

为什么问题很重要?

因为学习对大部分人来说,是一件痛苦的事情,一个好的问题可以指引你走下去。(大多数人喜欢美食,但不喜欢做饭、洗碗,自己选的问题吃起来会更香一点)

为什么主要靠自学?

背景不一样(有基础尚可的;也有在其他行业基础尚可的),目标不一样,自学效率更高。

数据分析师的自我修养

  1. 自学能力、搜索引擎使用能力:遇事不决先Google,最好能科学上网(狂战斧 vs 补刀斧)
  2. 获取/处理数据、代码能力
    • SQL(结构化查询语言)
    • python(编程语言),重点学习pandas等数据分析常用lib
    • jupyter(好用的数据分析编程环境)
    • BeautifulSoup(简单爬虫需要掌握的lib)等其他你需要使用的lib
  3. 数据分析基本思维
  4. 统计知识和数据分析常用方法
  5. 可视化
  6. 沟通和讲故事的能力
  7. 业务理解能力,可能是最重要的能力!

DOTA2数据源介绍

你想解决的问题,需要什么样的数据?从哪里获取?

简介:有个很老的使用说明,几乎没有人在维护了。

使用限制:你必须申请一个key,速度限制1秒1次

有什么数据?

  • 获取公开游戏数据,优势是可以全量获取(使用GetMatchHistoryBySequenceNum接口);劣势是只有基本数据(使用GetMatchHistory接口),比如游戏时长、击杀数、助攻数等,无法获取详细/复杂数据(比如击杀肉山的次数、插眼次数等需要解析录像才能拿到的数据)
  • 英雄基本信息、装备基本信息、选手信息等

简介:API接口文档

使用限制:免费版(1秒1次,每月50000次)

有什么用处?

  • 提供了数据库,可以直接查询对局、英雄等各种信息,这里有数据表定义
  • 提供了一个线上写SQL的地方,新手可以作为练习工具(底层是PostgreSQL)
  • 获取部分比赛的详细/复杂数据(opendota已经帮你解析了这部分对局的录像)

我自己搞的数据库

简介:提供近1个月全量公开对局基本数据(通过官方API获取)

优势:提供全量对局数据,方便抽样(比如随机抽取昨天国服2w场对局)

劣势:单机部署,查询速度较慢

表结构:

CREATE TABLE IF NOT EXISTS match(
    match_id bigint PRIMARY KEY,
    p_date char(8),
    match_seq_num bigint,
    start_time integer,
    duration integer,
    cluster smallint,
    lobby_type smallint,
    leagueid integer,
    game_mode smallint,
    radiant_win smallint,
    radiant_score smallint,
    radiant_pick_hero_ids varchar(30),
    radiant_ban_hero_ids varchar(30),
    dire_score smallint,
    dire_pick_hero_ids varchar(30),
    dire_ban_hero_ids varchar(30),
    human_players smallint,
    player_account_ids varchar(250)
);

连接信息:

ip地址:dota2.heqiuzhi.xyz
端口:5432
用户名:dota2_readonly
密码: dota2
数据库: dota2

一个完整的数据分析例子

背景:DOTA2作为一款dead game,近年来不断被唱衰。但是2021年6月24号推出天陨旦新版本之后,突然有新闻说DOTA2又好起来了,反超csgo重回steam榜首。

那么问题来了

  1. 究竟是咋回事?是真的好起来了,还是自媒体搞事情?
  2. 如果确实有大幅增长,那么增长是哪些地区带来的?国服的数据怎么样?

获取数据/处理数据

  • 通过第三方网站(steamdb),可以获取steam游戏每日用户同时在线峰值
  • 通过steam官方api可以获取每日对局总数,同时能拿到对局的详细信息(包含服务器信息),通过服务器就可以知道各地区的对局数变化趋势

有些问题很简单,看一眼数据就知道答案:并没有啥可观的增长,不过是同行衬托而以——CSGO暴跌了。

有些数据获取很容易。你看到自媒体的文章之后,是直接就信了,还是愿意花时间去找一下数据?

有些数据的获取比较麻烦,比如获取每日国服DOTA2游戏场次,需要解决如下问题:

  • 使用python调用V社提供的官方API,每次可以获取100场比赛,限制速度每秒1次
  • 想要更快,就得上IP代理+多个key并发调用API
  • 想要每日例行化获取数据,可以学习Linux,搞个自己的cvm不间断运行
  • 比赛信息里面的cluster字段和服务器(eg. 中国-华中电信)如何对应?找不到最新的配置表,就需要自己从dotabuff爬取

经过一番努力,我们终于把数据都获取下来了。结果很顺利:「从第三方网站获取的DOTA2每日用户同时在线峰值」和「通过steam官方api获取的每日对局总数」是能够对应上的。

通过数据分析输出结论

通过写代码把国服的数据和非国服的数据分开,对比两者的变化趋势可以发现:主要增长是由非国服地区带来的。

课后作业

10月2号之前,提交一个你最感兴趣的、并且想自己动手解决的DOTA2数据问题。示例:

  1. 如何量化英雄组合?我发现dotamax上的英雄组合推荐很一般,应该有更好的算法
  2. 我有一个朋友打影魔真的很菜,又菜又爱玩,我得用数据告诉他到底哪里菜,让他心服口服
  3. 我想用SQL查询出最近一周天梯吸枫哥分最多的选手是谁

注意:如果10月3号我没有收到你的问题,那我们的故事就结束了。

提交方式:容我想想。

破冰&问答环节

有问题可以问,也可以单纯介绍下你自己。