数据分析概念总结
-
APrirori算法: 通过分析购物篮中的商品集合,找出商品之间的关联关系。利用这种隐性关联关系,商家就可以强化这类购买行为,从而提升销售额。
-
商业智能 BI、数据仓库 DW、数据挖掘 DM 三者之间的关系
- 预测用户购物行为属于商业智能,即Business Intelligence,缩写是 BI
- 他们积累的顾客的消费行为习惯会存储在数据仓库中,即Data Warehouse,缩写DW
- 通过对个体进行消费行为分析总结出来的规律属于数据挖掘,即Data Mining,缩写是 DM
-
元数据 VS 数据元
- 元数据(MetaData):描述其它数据的数据,也称为“中介数据”。
- 举个例子,比如一本图书的信息包括了书名、作者、出版社、ISBN、出版时间、页数和定价等多个属性的信息,我们就可以把这些属性定义成一套图书的元数据。
- 数据元(Data Element):就是最小数据单元。
- 在图书这个元数据中,书名、作者、出版社就是数据元
- 元数据(MetaData):描述其它数据的数据,也称为“中介数据”。
-
数据挖掘的流程
- Knowledge Discovery in Database,简称 KDD,也就是数据库中的知识发现
- 分类 聚类 预测 关联分析
- 数据预处理:
- 数据清洗 去除重复数据,去噪声(即干扰数据)以及填充缺失值。
- 数据集成 数据存放在一个统一的数据存储中
- 数据变换 归一化等
-
用户画像的准则
- 第一 就是用户从哪里来(统一化),这里我们需要统一标识用户 ID,方便我们对用户后续行为进行跟踪。他们是为了聚餐,还是自己吃宵夜,这些场景我们都要做统计分析
- 第二这些用户是谁(标签化)我们需要对这些用户进行标签化,方便我们对用户行为进行理解
- 第三 用户要到哪里去(业务化)我们要将这些用户画像与我们的业务相关联,提升我们的转化率,或者降低我们的流失率
-
用户唯一标识是整个用户画像的核心
- 设计唯一标识可以从这些项中选择:用户名、注册手机号、联系人手机号、邮箱、设备号、CookieID 等
-
用户消费行为分析
- 用户标签:它包括了性别、年龄、地域、收入、学历、职业等。这些包括了用户的基础属性
- 消费标签:消费习惯、购买意向、是否对促销敏感。这些统计分析用户的消费习惯
- 行为标签:时间段、频次、时长、访问路径。这些是通过分析用户行为,来得到他们使用 App 的习惯
- 内容分析:对用户平时浏览的内容,尤其是停留时间长、浏览次数多的内容进行分析,分析出用户对哪些内容感兴趣,比如,金融、娱乐、教育、体育、时尚、科技等
-
用户生命周期的三个阶段来划分业务价值
- 获客:如何进行拉新,通过更精准的营销获取客户
- 粘客:个性化推荐,搜索排序,场景运营等
- 留客:流失率预测,分析关键节点降低流失率
-
数据流处理的阶段来划分用户画像建模的过程
- 数据层指的是用户消费行为里的标签。我们可以打上“事实标签”,作为数据客观的记录。
- 算法层指的是透过这些行为算出的用户建模。我们可以打上“模型标签”,作为用户画像的分类标识。
- 业务层指的是获客、粘客、留客的手段。我们可以打上“预测标签”,作为业务关联的结果。
-
数据采集
- 我们需要通过多源的数据采集,收集到尽可能多的数据维度,同时保证数据的质量,这样才能得到高质量的数据挖掘结果
- **开放数据源 ** 爬虫抓取 日志采集 传感器
-
数据爬虫
- 使用 Requests 爬取内容
- 使用 XPath 解析内容
- 使用 Pandas 保存数据
-
数据抓取工具
-
日志采集
- 通过 Web 服务器采集,例如 httpd、Nginx、Tomcat 都自带日志记录功能。多用于系统日志采集,如 Hadoop 的 Chukwa、Cloudera 的 Flume、Facebook 的 Scribe 等,这些工具均采用分布式架构,能够满足每秒数百 MB 的日志数据采集和传输需求。
- 自定义采集用户行为,例如用 JavaScript 代码监听用户的行为、AJAX 异步请求后台记录日志等。
- 埋点就是在有需要的位置采集相应的信息,进行上报。
-
数据清洗规则(完全合一)
- 完整性:单条数据是否存在空值,统计的字段是否完善。
- 全面性:观察某一列的全部数值,比如在 Excel 表中,我们选中一列,可以看到该列的平均值、最大值、最小值。我们可以通过常识来判断该列是否有问题,比如:数据定义、单位标识、数值本身。
- 合法性:数据的类型、内容、大小的合法性。比如数据中存在非 ASCII 字符,性别存在了未知,年龄超过了 150 岁等。
- 唯一性:数据是否存在重复记录,因为数据通常来自不同渠道的汇总,重复的情况是常见的。行数据、列数据都需要是唯一的,比如一个人不能重复记录多次,且一个人的体重也不能在列指标中重复记录多次。
-
数据
-
完整性
-
缺失值
-
删除 均值 高频
-
# 均值填充 df['age'].fillna(df['age'].mean(),inplace=True) # 高频填充 age_maxf = df['age'].value_counts().index[0] df['age'].fillna(age_maxf,inplace=True)
-
-
空行
-
# 整行是空值才需要被删除 df.dropna(how = 'all',inplace=True)
-
-
-
全面性
-
单位不统一
-
# 获取 weight 数据列中单位为 lbs 的数据 row_with_lbs = df['weight'].str.contains('lbs').fillna(False) # 将 lbs转换为 kgs, 2.2lbs=1kgs for i,lbs_row in df[row_with_lb].iterrow(): weight = int(float(lbs_row['weight'][:-3]/2.2)) df.at[i,'weight'] = '{}kgs'.format(weight)
-
-
-
合理性
-
非ASCII字符
-
# 删除非 ASCII 字符 regex 正则替换 df['first_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True) df['last_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)
-
-
-
唯一性
-
拆分name列
-
''' str.spilt() 第一个参数: 分列依据 空格等 参数 expand=true 这个参数直接将分列后的结果转换成DataFrame 参数 n=数字 限制分列的次数 ''' df[['fisrt_name','last_name']] = df['name'].str.spilt(' ',expand=True) df.drop('name',axis=1,inplace=True)
-
-
重复数据
-
df.drop_duplicates(['first_name','last_name'],inplace=True)
-
-
-
数据集成
- 多个数据源合并存放在一个数据存储中(如数据仓库),从而方便后续的数据挖掘工作。
-
ETL(Extract、Transform 、Load )
- 抽取 数据从已有的数据源中提取出来
- 转换 几张表连接形成新的表
- 加载
- Kettle工具
-
ELT
- 抽取 加载 转换
- 重抽取和加载 轻转换
- 更加省时 提供更大的灵活性
-
数据变换