作者: 超人赵,人工智能爱好者社区专栏作者

知乎:

https://www.zhihu.com/people/chao-ji-sai-ya-ren/posts

链接推送: 如何构建用户画像—打用户行为标签

用户画像——标签聚类

大家好,今天和大家分享一下用户画像数据质量管理这块的内容。数据质量管理这项工作的重要性不言而喻,所谓“garbage in,garbage out”,基础数据的质量性如果无法得到良好保障,后续的推荐、数据分析工作将会变得徒劳。

背景

在建好用户画像模型后,该数据模型成为了一个个落在数据仓库的表,数据仓库的开发人员通过通过调度任务,每天定时从各业务数据表和日志数据表抽取用户行为数据加工到用户画像相关表中。各种类型的标签每天加工的数据成百上千万条,数据分析人员不会每天对这些数据的质量进行核查,去发现每类标签的数量是否有异常情况,但是当应用的过程中使用异常数据将会导致分析结论的误差,那么如何高速、有效地对用户画像数据的质量进行管理?

方法

数据运营人员可以通过设定画像各业务表数据监控范围,当每天跑ETL出现异常变动时,通过统计每类标签的总量变动较大时,发送邮件让数据运营的人员接收,然后查找原因进行定位。

下面分享一下某个对用户画像数据管理的python脚本:

# -*- coding: utf-8 -*-

impala_01 = ''' 删除临时表语句'''
impala_02 = '''
创建临时表,检查昨日运行产生的各类用户标签数量是否在合理范围内 '''   # 建表语句

impala_03 = '''查询impala_02语句创建的临时表中的数据量'''

import smtplib
import os
import datetime
from impala.dbapi import connect
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
from email.mime.image import MIMEImage
import pyhs2

impala_conn = pyhs2.connect(host='10.21.190.220', port=10086, authMechanism="PLAIN", user='zhaoht',  password='yourpassword',  database='wedw_dw')
impala_cur = impala_conn.cursor()

impala_cur.execute(impala_01)   # 执行删除临时表的SQL
impala_cur.execute(impala_02)   # 执行创建临时表的SQL

try:
    impala_cur.execute(impala_03)
    result_1 = impala_cur.fetchall()
    data_1 = list(result_1[0])        # 将元组数据列表化
    data_1 = int(data_1.pop())       # 将列表数据转化为整数
except Exception:
    data_1 = 1

impala_cur.close()
impala_conn.close()

sumdata = data_1   # 各标签加总为0正常

if sumdata == 0 :       # 如果各标签的数据量正常 则不用发送邮件
    pass
else:           # 当标签数据量出现异常时 自动发送邮件
    pwd = 'yourpassword'
    sender_mail = 'sender@mail.com'
    receiver = 'receiver@mail.com'
    mail_content = '''  用户画像维护人员你好,gdw.persona_user_tag_relation_public表中昨日数据发生异常,各类标签数据统计如下:A类标签[3000000-3500000]:{} '''.format(data_1)

    mail_title = '用户个性化标签表异常数据预警邮件'

    date_str = datetime.datetime.strftime(datetime.date.today()-datetime.timedelta(days=1),'%m%d')
    msgRoot = MIMEMultipart('mixed')   #实例化一个类
    msgRoot['Subject'] = Header(mail_title, 'utf-8')
    msgRoot['From'] = sender_mail
    msgRoot['To'] = receiver
    msgRoot["Accept-Language"]="zh-CN"
    msgRoot["Accept-Charset"]="ISO-8859-1,utf-8"
    content = MIMEText(mail_content,'plain','utf-8')
    msg