1. 数据库和SQL
- 关系型数据库的特征
~ 理论基础 - 关系代数(集合论、一阶逻辑、关系运算)
~ 具体表象 - 用二维表组织数据
- 表 - 实体(entity)- 关系(relation)
- 行 - 记录(record)- 元组(tuple)
- 列 - 字段(field)- 属性(attribute)
- 主键(primary key)- 能够唯一标识一条记录的字段
- 外键(foreign key)- 外来的主键(其他表的主键或唯一性字段)
- 行数 - 势(cardinality)
- 列数 - 度(degree)
- 数据取值范围 - 域(domain)
~ 编程语言 - 结构化查询语言 - SQL
- 数据定义语言 - DDL - create / drop / alter / rename / truncate
- 数据操作语言 - DML - insert / delete / update / select
- 数据控制语言 - DCL - grant to / revoke from
- 事务控制语言 - TCL - start transaction / commit / rollback
- 写数据操作
~ 需要考虑数据的完整性(data integrity)
- 实体完整性 - 每条记录都是独一无二的 - 主键约束 / 唯一约束 - duplicate entry
- 参照完整性 / 引用完整性 - 从表的数据要参照主表的数据 - 外键约束 - foreign key constraint fails
- 域完整性 - 不能写入无效的数据 - 数据类型 / 长度限制 / 非空约束 / 默认值约束 / 检查约束
~ 插入数据 - insert
insert into 表名
(字段1, 字段2, ...)
values
(值1, 值2, ...);
insert into 表名
(字段1, 字段2, ...)
values
(值1, 值2, ...),
(值1, 值2, ...),
(值1, 值2, ...);
~ 删除数据 - delete
delete
from 表名
where 条件;
~ 更新数据 - update
update 表名
set 字段1 = 值1
, 字段2 = 值2
, ...
where 条件;
- 读数据操作
~ 投影 - select子句
- 别名 - as
- 去重 - distinct
~ 数据来源 - from子句
- 表连接 - 连接事实表和维度表
~ cross join - 交叉连接 - 笛卡尔积
~ inner join - 内连接 - on - 连表条件
~ natural join - 自然连接 - 同名列
~ left join - 左外连接 - on - 连表条件 - 左表不满足连表条件的记录也能取到
~ right join - 右外连接 - on - 连表条件 - 右表不满足连表条件的记录也能取到
~ full join - 全外连接 - MySQL不支持全外连接
~ 分组前筛选 - where子句
- 算术运算 - +、-、*、/
- 比较运算 - =、<>、<、>、<=、>=
- 范围运算 - between ... and ...
- 逻辑运算 - and、or、not
- 模糊查询 - like、regexp
- 空值运算 - is null / is not null
- 其他运算 - all、any、in、not in
- 函数运算 - trim / char_length / substring / timestampdiff
~ 分组 - group by子句 - 给每个组做统计
- 聚合函数
~ sum - 求和
~ avg - 算术平均
~ max - 最大值
~ min - 最小值
~ count / count(distinct) - 计数
~ variance / var_pop / var_samp - 方差
~ stddev / stddev_pop / stddev_samp - 标准差
~ 分组后筛选 - having子句 - 可以写聚合函数
~ 排序 - order by子句
- 升序 - asc(默认)
- 降序 - desc
~ 分页 - limit / offset 子句 - MySQL方言
- 窗口函数 - 数据分析函数(OLAP函数) - 开窗打标
~ 函数() over ()
~ 函数() over (order by ...)
~ 函数() over (partition by ... order by ...)
~ 函数() over (order by ... rows between ... and ...)
~ 函数() over (order by ... range between ... and ...)
- preceding / following / unbounded
- current row
- 定义窗口 - window w as (...) - 实现对窗口的复用
~ 有哪些函数可以在窗口函数语法中使用
- 聚合函数 - sum() / avg() / count() / max() / min() / stddev() / variance()
- 排名函数 - rank() / dense_rank() / row_number() / percent_rank()
- 取数函数 - lag() / lead() / first_value() / last_value() / nth_value()
- 视图 - view - 查询的快照 - 命名查询
~ 作用:
- 实现对数据的预处理 - 数据分析师
- 隐藏表结构
- 将访问权限控制到列
- 实现对查询的复用
~ 限制:
- 视图可以嵌套 - 基于视图创建视图
- 视图中的排序会被查询的排序覆盖
- 视图无法使用索引,不会激发触发器
~ 创建或替换视图
create or replace view view_name as select ...;
~ 删除视图
drop view if exists view_name;
- 函数 - function - 封装功能上相对独立且会被重复使用的代码
~ 获取帮助
- help 'functions'; / ? functions;
- help 'window functions'; / ? window functions;
- help 'first_value'; / ? first_value;
~ MySQL内置函数
- 聚合函数
~ 描述性统计信息 - sum() / avg() / count() / max() / min() / var_pop() / var_samp() / stddev_pop() / stddev_samp()
~ 其他 - group_concat() / json_arrayagg() / json_objectagg()
- 数值函数
~ 绝对值和符号函数 - abs() / sign()
~ 取整和四舍五入 - ceiling() / floor() / round() / truncate()
~ 三角和反三角函数 - sin() / cos() / tan() / cot() / asin() / acos() / atan()
~ 指数和对数 - pow() / exp() / log() / log10() / log2()
~ 随机数 - rand()
~ 弧度和角度 - degrees() / radians()
~ 平方根 - sqrt()
- 字符串函数
~ 长度 - char_length() / length()
~ 拼接 - concat()
~ 大小写 - lower() / upper()
~ 取子串 - left() / right() / substring()
~ 替换 - replace()
~ 修剪 - trim() / ltrim() / rtrim()
~ 定位 - instr() / locate()
~ 填充 - lpad() / rpad()
~ BASE64编解码 - from_base64() / to_base64()
~ 反转 - reverse()
- 日期时间函数
~ 获取日期和时间 - current_timestamp() / current_date() / current_time()
~ 获取部分信息 - date() / time() / year() / quarter() / month() / day() / weekday() / hour() / minute() / second()
~ 计算时间差 - datediff() / timestampdiff()
~ 添加间隔 - date_add() / date_sub()
~ 格式化日期时间 - date_format()
- 流程控制函数
~ if() / ifnull() / coalesce() / nullif()
- 窗口函数
~ 排名 - rank() / dense_rank() / row_number() / percent_rank()
~ 取数 - lag() / lead() / first_value() / last_value() / nth_value()
- 其他函数
~ 类型转换 - cast() / convert()
~ 信息获取 - current_role() / current_user() / database() / last_insert_id() / version() / user()
~ 全局唯一标识符 - uuid() / uuid_to_bin() / bin_to_uuid()
~ UDF - 用户自定义函数
- 关键词 - create function
- 函数名(参数列表) 返回类型
- 修饰符
~ deterministic- 指示函数具有确定性 - 输入相同输出相同,有利于优化查询和缓存
~ no sql - 函数不会访问或修改数据库中的数据 - 提高执行效率和安全性
~ reads sql data - 函数可能会读取但不会修改数据库中的数据
- 函数执行体 - begin ... end
- (存储)过程 - stored procedure - 一组预定义的可以重复使用的SQL语句集合
~ 过程的作用
- 封装和代码复用
- 减少交互次数,提升性能
- 事务控制和安全性
- 减少网络开销
- 索引 - 类似于书的目录 - 加速查询
~ 执行计划 - explain
- select_type
- table
- type - 查询类型
~ const - 常量级查询 - 性能最好
~ eq_ref - 唯一索引扫描 - 性能很好
~ ref - 非唯一索引扫描 - 性能比较好
~ range - 索引范围扫描 - 性能还行
~ index - 索引全扫描 - 性能很差
~ ALL - 全表扫描 - 性能最差
- possible_keys - 可能用到的索引
- key - 实际用到的索引
- key_len - 索引的长度
- rows - 预估扫描的行数 - 行数越少查询效率越高
- extra - 额外的信息
~ 索引相关概念 - InnoDB - B+树
- B+树是一个多叉树,层级很少(3-4层),所有它的I/O性能特别的好
- 聚集索引 - 索引组织表 - 数据就根据主键排序放在索引中 - 只有一个
- 非聚集索引 - 二级索引 - 额外创建一棵树来加速数据检索 - 回表
- 前缀索引/复合索引
- 索引覆盖查询和回表
~ index covered query - 要投影的字段已经被索引覆盖到,此时不需要回表,性能非常好
~ 回表 - 投影的字段没有被索引完全覆盖到,需要重新通过主键定位到数据,性能会受到影响
- 函数索引
- 不可见索引
- 索引设计要点
~ 注意索引的最左匹配原则,避免失效的情况
~ 在作为查询条件的字段上建索引(覆盖到where子句)
~ 避免额外排序(索引覆盖到order by子句的字段)
~ 避免回表(让索引覆盖到查询要投影的列 - 复合索引)
~ 索引不是越多越好 - 索引加速了查询但是让增删改变得更慢 - 索引更新问题
2. 互联网行业和产品认知
~ 行业
- 最重要的资源是用户,盈利模式建立在用户体量的基础上
- 命中用户群体的需求,打造极致的体验是获客和留存的关键
- 入门产品可以免费,通过产品组合来实现持续的营收
- 用户行为数据是非常重要的资源,可以构建产品护城河
~ 产品
- 定义:为满足用户需求创建的功能和服务,通过解决痛点、触发痒点、激活爽点来实现商业变现
- 特点:提升交易效率,降低交易成本
- 商业模式分类
~ 按客户类型:2C / 2B / 2P / 2G / 2VC
~ 按收入来源:产品售卖 / 服务收费 / 订阅模式 / 广告模式 / 佣金模式 / 租赁模式
- 生命周期:
~ 引入期:产品基本可用,吸引初始用户,几乎没有竞品,获客成本高,关注规模型指标
~ 成长期:产品逐渐完善,营收开始增加,获客成本降低,竞品不断涌现,关注质量型指标
~ 成熟期:不断优化产品,营收达到顶点,关注营收类指标,同时做好竞品监控,防止弯道超车
~ 衰退期:提前布局二次曲线创新
~ 增长
- 行业生命周期:
~ 暴利期:做产品
~ 微利期:抓渠道
~ 无利期:聚用户
- 增长的本质:
~ 空白需求 - 用户消费升级时产生的需求空缺
~ 空白市场 - 没有企业涉足或尚未饱和的市场
~ 空白渠道 - 没有被充分利用的传播获客路径
- 增长策略:
~ 明确定位
~ 体验优化:专注于核心用户体验(KANO模型)
~ 持续创新
~ 提升留存:触点设计、推荐推送、激励机制、品牌认同
~ 激励分享:充分利用用户的社交价值
~ 内容营销
~ 私域流量:企业微信、用户社群、账号矩阵、IP打造、直播带货
~ 数据分析:分析用户行为优化决策
3. 数据和指标
~ 数据 - 赋予业务意义(来源、度量方式、单位)
- 定性数据 - 维度 - 分组
~ 定类尺度 - 哑变量矩阵(虚拟变量矩阵)
~ 定序尺度 - 映射成一个表示等级的数值
- 定量数据 - 度量 - 聚合
~ 定距尺度 - 0是一个正常的值
~ 定比尺度 - 0表示没有
~ 用户(行为)数据 - 标签系统 - 用户画像 - 用户分群 - 精细化运营
- 属性数据:他是谁(自然属性、社会属性、产品属性、……)
- 行为数据:他做了什么
- 交易数据:他消费了什么
- 用户数据的5+1特性:Who / When / Where / What / How + How much / How many
~ 数据来源
- 数据仓库 - 业务系统 - ETL工具(Kettle / DataWorks / FlinkX)/ ETL脚本(Python) - APScheduler
- 数据埋点 - 用户行为数据 - 代码埋点 / 可视化埋点 / 全埋点(无埋点)- 集成第三方SDK(百度分析 / Umeng+ / 神策数据 / TalkingData)
- 日志系统 - Flume / Fluentd / Filebeat --> Kafka --> ElasticSearch / Splunk
- 外部数据 - 二方数据(API接口) / 三方数据(购买)/ 爬虫采集
~ 数据存储
- 关系型数据库 / NoSQL数据库 - OLTP - 业务系统
- 数据仓库 / 数据湖 / 湖仓一体 - OLAP - 分析系统 - Hadoop - HDFS + MapReduce/Spark + K8S/YARN
- 云存储系统 - 性价比高 / 伸缩性好
~ Amazon - S3 / Redshift / Athena
~ 阿里巴巴 - OSS / Cloud RDB / AnalyticDB / MaxCompute
~ 指标 - 具备业务意义,反映业务状况,统计数据
- 维度 - 可以对指标进行拆解
- 北极星指标 - OMTM(One Metric That Matters) - KPI
- 指标体系
~ PLC模型 - 搞清楚你的产品处于生命周期哪个阶段
- 萌芽期(引入期)- 规模型指标 - 注册用户数 / 拉新获客人数
- 成长期 - 质量型指标 - DAU / MAU / 留存率 / 使用时长
- 成熟期 - 营收类指标 - GMV / 净销售额 / 毛利润 / 客单价 / 转化率 / 复购率
~ OSM模型 - 让决策者去思考
- Objective - KPI - 大目标 - 小目标
- Strategy - 达成小目标的产品/运营策略
- Measurement - 如何评价策略是否促使目标达成 - 指标
~ UJM模型 - 让业务团队思考 - 对OSM模型进行补充
- 运营目标 - 运营策略
- 触点
- 痛点
- 机会点(增长点)
- 相关的指标+各环节间的转化率
~ AARRR模型 / RARRA模型
4. 数据分析师的七种武器
~ 描述性统计
- 集中趋势
~ 均值 - 整体水平
- 算术平均 - 很容易收到极端值的影响 - AVERAGE / np.mean()
- 几何平均 - 受极端值的影响比算术平均值小 - GEOMEAN / stats.gmean()
~ 中位数 - 中等水平 - 对数据变化不敏感 - MEDIAN / QUARTILE.EXC(array, 2) / np.median()
~ 众数 - 一般水平 - 不受极端值的影响 - 可能不存在 - MODE.SNGL / MODE.MULT / stats.mode()
- 离散程度 - 数据集中还是分散 - 波动大不大
~ 极值 - MAX / MIN / np.amax() / np.amin()
~ 极差 - 全距 - Range / np.ptp()
~ 四分位距离 - IQR - Inter Quartile Range
- Q3 - 75%分位数 - 上四分位数 - QUARTILE.EXC(array, 3) / np.quantile(0.75)
- Q1 - 25%分位数 - 下四分位数 - QUARTILE.EXC(array, 1) / np.quantile(0.25)
- IQR = Q3 - Q1 / stats.iqr()
~ 方差 - Variance
- 总体方差 - VAR.P / np.var(ddof=0) - population - 总体
- 样本方差 - VAR.S / np.var(ddof=1) - sample - 样本
~ 标准差 - Standard deviation
- 总体标准差 - STDEV.P / np.std(ddof=0) - population - 总体
- 样本标准差 - STDEV.S / np.std(ddof=1) - sample - 样本
~ 变异系数 - CV - Coefficient of variation - 标准差 / 均值 - stats.variation()
~ 箱线图 - 离群点(数值判定法)/ plt.boxplot()
- 分布规律
~ 直方图 - plt.hist()
~ 偏态系数 - 跟正态轮廓相比较,数据有没有左偏或者右偏 - SKEW / stats.skew()
~ 峰度系数 - 跟正态轮廓相比较,数据是尖峰还是平顶峰,宽尾还是窄尾 - KURT / stats.kurtosis()
- 两组数据的相关关系
~ 散点图 - plt.scatter()
~ 相关系数 - -1到1之间的值表示是否存在相关性以及相关性的强弱 - CORREL / np.corrcoef()
- 皮尔逊相关系数:连续值 / 正态总体 / 成对出现 / 没有离群点
- 斯皮尔曼秩相关:离散值 / 等级数据 / 成对出现 - df.corr(method='spearman')
~ 对比法 - 通过比较发现问题
- 跟谁比
~ 历史数据 - 同比 / 环比
~ 内部比较
~ 外部比较
- 比什么
~ 描述性统计信息
~ 数据构成
~ 拆解法 - 通过拆解找到原因
- 要素拆解 - 按照指标的构成(计算公式)进行拆解 - 公式法
- 维度拆解 - 时间(年、季度、月、日、星期几、小时、分钟) / 地点(国家、省、市、区县、门店) / 用户(性别、年龄段、职业、客群)/ 产品(一级类别、二级类别、三级类别、品牌、单品)/ 渠道 / 来源
- 流程拆解 - 漏斗分析 - 定位问题节点
~ 关键业务路径必须做漏斗分析
~ 向前找流量,向后看转化,自身看画像
~ 象限法 - 通过多个维度分群 - 精细化运营
- BCG矩阵
- RFM模型 - 基于时间、频次、金额三个维度进行用户分群
~ 重要价值客户 - R⬆︎F⬆︎M⬆︎ - 更好的体验、VIP服务、定制化产品、提升客单价和复购率
~ 重要发展客户 - R⬆︎F⬇︎M⬆︎ - 针对性的营销活动、会员权益积分奖励、新品触达、刺激购买
~ 重要保持客户 - R⬇︎F⬆︎M⬆︎ - 主动沟通、推荐推送、邀请参与各类运营活动、研究需求变化
~ 重要挽留客户 - R⬇︎F⬇︎M⬆︎ - 沉默或流失原因、挽留措施、回流策略、服务升级、追踪变化
~ 一般价值客户 - R⬆︎F⬆︎M⬇︎
~ 一般发展客户 - R⬆︎F⬇︎M⬇︎
~ 一般保持客户 - R⬇︎F⬆︎M⬇︎
~ 一般挽留客户 - R⬇︎F⬇︎M⬇︎
~ 相关与关联
- 相关分析 - 找到业务抓手
~ 定性 - 散点图
~ 定量 - 相关系数 - CORREL
- Pearson相关系数 - 标准化的协方差
1. 来自于正态总体的连续值
2. 数据成对出现
3. 不能有离群点(异常值)
- Kendall / Spearman秩相关系数
1. 等级数据
2. 数据成对出现
- 卡方独立性检验
- 关联分析 - 支持度、置信度、提升度
~ Apriori - 如果一个项集是频繁的,则它的所有子集一定也是频繁的
~ FP-Growth - Frequent Pattern Growth - 使用FP树结构,能够更高效地发现频繁项集(避免了多次扫描数据集和生成候选项集的过程,从而提高算法的效率,运算过程需要较大的内存空间)
~ 推断型统计 - 用样本猜测背后的总体的能力
- 假设检验
~ z检验:来自正态总体的抽样均值 / 非正态总体样本容量较大的抽样均值(中心极限定理)
~ t检验:样本容量较小,总体标准差未知
~ F检验:数据的差异是否具备统计显著性
~ 卡方检验:
- 独立性检验
- 拟合优度检验
- 参数估计
~ 点估计:矩估计 / 极大似然估计(MLE)
~ 区间估计:构造置信区间
~ 趋势预测
- 时间序列分析
- 回归模型 - Y = aX + b
5. 常用BI工具
~ Power BI
- 数据准备 - Power Query Editor
~ 加载
- Excel
- CSV
- Database
- Hadoop
- Web
~ 重塑
- 拼接 - 拼接查询 - SQL union
- 连表 - 合并查询 - SQL join
~ 清洗
- 缺失值 - 删除、填充
- 重复值 - 删除
- 异常值 - 删除、替换
~ 分组
~ 透视 / 逆透视
~ 转置
~ 筛选
~ 预处理
- 字符串 - 大小写、修剪、拆分
- 日期时间 - 年、季度、月、日、星期几、小时、分钟、秒
- 数据建模 - 星型模型 / 雪花模型
~ 事实表
~ 维度表
- 数据呈现 - 视觉对象
~ 趋势:折线图
~ 对比:柱状图、条状图
~ 占比:饼图、环状饼图、树形图、瀑布图
~ 关系:散点图
~ 联网加载更多视觉对象
- 重点知识 - DAX - 行上下文 / 筛选上下文
~ 常用函数:
- 统计函数:SUM / AVERAGE / MAX / MIN / COUNTA / DISTINCTCOUNT / VAR.P / VAR.S / STDEV.P / STDEV.S
SUMX / AVERAGEX / MAXX / MINX / COUNTX / MEDIANX
- 逻辑函数:AND / OR / NOT / COALESCE / IF / SWITCH
&& ||
- 本文函数:CONCATENATE / FORMAT / REPLACE / LOWER / UPPER / TRIM
- 日期函数:NOW / TODAY / YEAR / QUARTER / MONTH / DAY / HOUR / MINUTE / WEEKDAY / WEEKNUM / DATEDIFF
- 智能时间函数:DATEADD / PERVIOUSMONTH / SAMEPEROIDLASTYEAR / TOTALYTD / TOTALMTD / TOTALQTD / DATESMTD / DATESYTD / CALENDAR / CALENDARAUTO
- 筛选器函数:CALCULATE / FILTER / ALL / ALLEXCEPT / EARLIER / EARLIEST
- 表操作函数:SUMMARIZE / ADDCOLUMNS / GENERATE / ROW
~ 参考资源:
- 官方DAX参考:https://learn.microsoft.com/zh-cn/dax/dax-function-reference
- DAX圣经:https://www.powerbigeek.com/what-is-dax/
- DAX GUIDE:https://dax.guide/
- 其他知识
~ 网关(Gateway)- 开启双向套接字通道 - 数据同步 - 手动刷新/定时任务
~ 行级安全性(RLS)- 创建角色 - 通过筛选条件控制角色的访问权限
~ Tableau
- Tableau Desktop Professional
- Tableau Prep Builder - 可视化数据清洗(执行ETL流程)
- Tableau Server - 自己搭建服务器环境
~ Windows Advanced Server
~ Linux - Redhat / CentOS
- Tableau Cloud(Tableau Online) - 花钱购买云服务
- Tableau Public - 数据公开,仅供个人使用
- Tableau Mobile / Tableau Reader
- Tableau Bridge - 同步数据
- 表计算(函数、快速表计算、表计算依据(横穿、向下 - 相当于窗口语法定义窗口))- 10大表计算
- LOD(详细级别表达式 - FIXED / INCLUDE / EXCLUDE - 聚合度 / 颗粒度)- {FIXED [维度]: SUM([字段])} - 15大LOD
~ 聚合度(aggregation)- {SUM([字段])} - 去掉维度,增加聚合度
~ 颗粒度(granulartiy) - 数据的明细程度 - 引入维度,增加颗粒度
~ NumPy - Numerical Python - ndarray
- 创建数组对象
~ np.array / np.asarray
~ np.arange
~ np.linspace / np.logspace
~ np.fromstring / np.fromfile / np.fromregex
~ np.repeat / np.tile
~ np.random ---> random / randn / normal / binomial / randint
~ np.ones / np.zeros / np.full
~ np.ones_like / np.zeros_like
~ np.eye
~ np.empty
~ np.fromiter
~ plt.imread
- 数组对象的属性
~ size - 大小 - 元素个数
~ ndim - 维度
~ shape - 形状
~ dtype - 数据类型
~ itemsize
~ nbytes
~ T - transpose - 转置
~ flags
~ base
- 数组对象的运算
~ 算术运算
~ 关系运算
~ 逻辑运算 - & | ~
~ 索引运算
- 普通索引
- 花式索引 - 用保存整数的列表或数组充当数组的索引
- 布尔索引 - 用保存布尔值的数组和列表充当数组的索引 - 筛选元素
- 切片索引 - 指定起止的范围和跨度取出数组中的部分元素
- 数组对象的方法
~ 获取描述性统计信息
- 求和/累积和 - sum / cumsum
- 平均值 - mean / stats.gmean / stats.hmean / stats.tmean
- 中位数 - np.median / np.quantile(array, 0.5)
- 众数 - stats.mode ---> ModeResult ---> mode / count
- 极值 - min / max / np.amin / np.amax
- 全距 - np.ptp
- 四分位距离 - np.quantile / stats.iqr
- 方差/标准差 - var / std ---> ddof - degree of freedom
- 变异系数 - stats.variation
- 偏态系数 - stats.skew
- 峰度系数 - stats.kurtosis
~ 数值型数据可视化呈现
- 直方图 - plt.hist
- 箱线图 - plt.boxplot - showmeans / whis
- 散点图 - plt.scatter - np.cov / np.corrcoef
~ 其他方法
- 转类型 - astype
- 改大小 - resize ---> np.resize
- 调形状 - reshape
- 扁平化 - flatten / ravel
- 排序 - sort ---> np.sort
- 转列表 - tolist
- 其他相关函数
~ 去重:np.unique()
~ 拷贝:np.copy()
~ 拆分数组:np.hsplit() / np.vsplit()
~ 堆叠多个数组:np.hstack() / np.vstack() / np.concatenate()
~ 追加/插入元素:np.append() / np.insert()
~ 抽取元素:np.extract() / np.select() / np.where()
~ 替换:np.put() / np.place()
- 广播机制
~ Pandas - Panel Data Set - Series / DataFrame / Index
- 数据加载 - 创建DataFrame对象
~ DataFrame(data, index, columns)
~ 从CSV文件加载数据:pd.read_csv(..., *, sep, header, encoding, quotechar, usecols, index_col, nrows, skiprows, iterator, chunksize, true_values, false_values, na_values, engine)
~ 从Excel文件加载数据:pd.read_excel(..., *, sheet_name, header)
~ 从数据库服务器加载数据:pd.read_sql(sql_or_table, engine)
- 接入MySQL ---> %pip install pymysql cryptography sqlalchemy pyhive
- create_engine(uri) ---> Engine
- pd.read_sql_query(sql, engine)
- pd.read_sql_table(table_name, engine)
~ DataFrame
- 操作列:df['column_name'] / df.column_name ---> Series
- 操作行:df.loc[index] / df.iloc[i] ---> Series
- 操作单元格:df.at[index, column] / df.iat[i, j]
- 删除行或列:df.drop(index, columns, inplace)
- 索引重命名:df.rename(index, columns, inplace)
- 重置索引:df.reset_index(drop) ---> 将索引变成普通列(或直接去掉)
- 设置索引:df.set_index() ---> 将普通列变成索引
- 调整索引的顺序:df.reindex(index, columns) - 花式索引
- 索引排序:df.sort_index(ascending)
- 查看信息:df.info()
- 获取前N行/后N行:df.head() / df.tail()
- 随机抽样:df.sample(n, frac, replace)
- 筛选数据:df.query(expression) / 布尔索引
- 数据重塑
~ 拼接:pd.concat([...], ignore_index, axis) ---> SQL union
~ 合并:pd.merge(left, right, how, on, left_on, right_on, left_index, right_index) ---> SQL join ---> 事实表连接维度表
- 数据清洗
~ 缺失值
- 甄别:isna() / isnull() / notna() / notnull()
- 删除:dropna(axis)
- 填充:fillna(value, inplace) / ffill() / bfill() / interpolate()
~ 重复值
- 甄别:duplicated(columns)
- 删除:drop_duplicates(columns, keep)
- 其他:nunique() / value_counts() / unique()
~ 异常值
- 甄别:数值判定法(IQR)/ Zscore判定法 / 孤立森林 ---> 离群点
- 删除:drop(index)
- 替换:replace(old_value, new_value, regex)
~ 预处理
- 日期时间 - Series.dt
~ 提取:year / quarter / month / day / weekday / hour / minute / second
~ 转化:to_period('Q')
~ 格式化:strftime('%d/%m/%Y') ---> str
~ 取整:floor('30min') / ceil('3H')
~ 舍入:round('15D')
- 字符串 - Series.str
~ 大小写:lower() / upper() / title() / capitalize()
~ 拆分:split(expand=True)
~ 抽取:extract(r'(\d+)-(\d+)')
~ 性质:contains(keyword, regex) / startswith() / endswith() / isalnum()
~ 替换:replace(old_value, new_value, regex=True)
~ 修整:strip()
- 类别 - astype('category') ---> Series.cat
~ 排序:reorder_categories() / set_categories()
- 映射和变换
~ 映射:map(func) - 元素级别
~ 应用:apply(func)
- Series.apply(func) - 元素级别
- DataFrame.apply(func, axis) - 行级或列级
- 分箱(离散化)
~ pd.cut(data, bins, labels) / pd.qcut(data, q, labels)
- 虚拟变量 - 定类尺度(名义尺度)
~ pd.get_dummies()
- 数据透视
~ 描述性统计信息
- 集中趋势:mean() / median() / mode()
- 离散程度:max() / min() / var(ddof=1) / std(ddof=1)
- 分布规律:skew() / kurt()
- describe() / agg(['count', 'mean', 'skew', 'var', ...])
~ 相关性分析
- 协方差:cov()
- 相关系数:corr(method='pearson')
~ 类正态总体的连续值,没有离群点 ---> pearson
~ 等级数据(定序尺度)---> kendall / spearman
~ 排序和头部值
- 排序:sort_values(by, ascending) / sort_index(level, ascending)
- TopN:nlargest(n) / nsmallest(n)
~ 分组聚合和透视表
- groupby(as_index) ---> GroupBy ---> 索引 ---> agg([...]) ---> pivot() / melt()
- pd.pivot_table(dataframe, index, columns, values, aggfunc, fill_value, margins)
- pd.crosstab(index, columns, values, aggfunc) ---> 交叉表(特殊的透视表)
- 数据呈现
~ plot(figsize, kind)
- 折线图 - 趋势 - kind='line'
- 散点图 - 关系 - kind='scatter'
- 柱状图 - 对比 - kind='bar' / kind='barh'
- 饼状图 - 占比 - kind='pie'
- 直方图 - 分布 - kind='hist'
- 箱线图 - 信息 - kind='box'
~ matplotlib
- 创建画布:plt.figure(figsize, dpi) ---> Figure
- 创建坐标系:plt.subplot(nrows, ncols, index) ---> Axes
- 绘制图表:
~ 折线图 - plot(x, y, marker, linestyle, linewidth, color, label)
~ 散点图 - scatter(x, y, marker, s, c, cmap)
~ 柱状图 - bar(x, y, width, color, hatch, yerr, bottom) / barh()
~ 饼状图 - pie(x, autopct, pctdistance, labels, labeldistance, explode, shadow, wedgeprops, colors, startangle, counterclock)
~ 直方图 - hist(x, bins, density, cumulative)
~ 箱线图 - boxplot(x, whis, showmeans, notch, sym)
- 定制图表:
~ 标题:plt.title()
~ 标签:plt.xlabel() / plt.ylabel()
~ 刻度:plt.xticks() / plt.yticks()
~ 图例:plt.legend()
~ 网格线:plt.grid()
~ 文字:plt.text()
~ 标注:plt.annotate()
- 保存图表:plt.savefig()
- 显示图表:plt.show()
~ %matplotlib inline
~ %matplotlib qt ----> pip install PyQt5
- 技巧:找到官网上对应的示例,拷贝+修改生成自己的代码
~ https://matplotlib.org/stable/gallery/index
6. 数据分析的价值和意义
~ 产品侧
- 埋点设计:协助产品和研发团队完成埋点的设计(获取用户行为数据)
- A/B测试:产品灰度发布过程中,通过实施A/B测试并收集相关指标数据,判定实验组相较于对照组(控制组)是否达成了更好的结果,要不要向更多用户开放新版本
- 决策支持:通过对行业数据、竞品数据、用户调查数据等的分析,为产品团队提供决策支持(产品定位、用户痛点、盈利模式、定价策略、用户满意度等)
- 效果评估:通过分析产品使用数据(产品热力图、流量桑基图、搜索栏、轮播图、金刚位、楼层坑位、推荐内容、PV、UV、功能留存、功能留存对大盘的贡献)、用户反馈数据、业绩指标数据(活跃率、点击率、转发率、转化率、复购率等),帮助产品团队发现产品的问题并及时进行优化
~ 运营侧
- 策略评估:不同运营策略到底哪个更好,什么样的策略命中了什么样的用户,包括:引流策略、激活策略、转化策略、传播策略、回流策略等
- 活动复盘:各种拉新活动、新品活动、促销活动等的数据复盘和对比,找到什么样的活动在拉新、促活、转化、营收方面有更好的表现,什么样的用户群体对什么样的活动更加敏感,什么样的用户在什么样的活动中能够创造更多的价值
- 业务优化:通过数据分析,运营团队可以发现业务的瓶颈、问题和机会,通过研究用户触点,发现可能的业务痛点以及相应的机会点和增长点(瓶颈思维、漏斗分析)
- 用户洞察:通过采集和分析用户行为数据,更好的掌握用户的特征、偏好、行为和需求,最终实现低成本获客和增长,从老用户身上挖掘更多的价值,让用户社交关系的价值最大化
~ 市场侧
- 市场洞察:通过分析市场数据、竞争对手数据和消费者行为数据,市场团队可以掌握市场趋势、竞争格局、消费需求等
- 渠道优化/投放优化:发现优质投放渠道(ROI、象限分析、营销效率评估),实现精准投放
- 品牌营销:通过数据分析帮助确定品牌定位和策略,包括目标受众、品牌声誉、品牌形象和品牌故事等,掌握品牌声誉的变化和影响