2.2 阿里云
E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、Kafka、Storm,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。
阿里云产品和服务
本场景主要涉及以下云产品和服务:
- 云开发平台:云开发平台是阿里云所提供的一站式、全云端的开发平台,打开浏览器就可以开发、调试、上线。点击进入云开发平台。底层调用阿里云集团 Serverless 产品,可以实现低门槛开发、部署、调试,降低开发上手成本和运维成本。
- 小程序开发者工具(简称 IDE):是支付宝开放平台打造的“一站式小程序研发工具”。IDE 不仅支持开发支付宝小程序,相同代码还通用于蚂蚁开放生态、可直接发布至淘宝、钉钉、高德等应用平台。
- 画蝶平台:阿里云视觉智能平台提供先进的图像,人脸人体,视频等共计 150+项的人工智能技术,是达摩院基于阿里巴巴业务实践经验沉淀出的 AI 技术集合,与广大的阿里云用户共享 AI 领域最新的应用场景和技术服务,助力开发者及企业的智能化升级。
表格 阿里云存储产品列表
存储产品 | 时延 | 吞吐 | 访问模式 |
---|---|---|---|
文件存储 NAS | 低时延(毫秒级) | 数百 Gbps | 上千个 ECS 通过 POSIX 接口并发访问,随机读写 |
对象存储 OSS | 较低时延(几十毫秒级) | 数百 Gbps | 数百万客户端通过 WEB 并发,追加写 |
块存储 EBS | 极低时延(微秒级) | 数十 Gbps | 单 ECS 通过 POSIX 接口访问,随机读写 |
数加平台
2016 年阿里巴巴上海云栖大会“DT WORLD”上,阿里巴巴正式发布了“阿里云数加平台”,首批亮相 20 款产品。覆盖了数据采集、计算引擎、数据加工、数据分析、机器学习、数据应用等数据生产全链条。
阿里云数加平台由三大部分组成:
一、开发套件
- 数据开发套件:
(1)大数据开发:集成可视化开发环境,可实现数据开发、调度、部署、运维、及数仓设计、数据质量管理等功能,
(2)BI 报表工具,海量数据的实时在线分析、丰富的可视化效果,助您轻松完成数据分析、业务探查等,所见即所得。(特色报表:中国地图气泡表或色彩表)
(3)机器学习工具,集数据处理、特征工程、建模、离线预测为一体的机器学习平台,优质算法汇集,可视化编辑。
- 应用开发套件:
(1)面向通用数据应用场景:提供数据应用开发的基础级工具,加速基础数据服务开发。如个性化推荐工具、数据可视化工具、快速 BI 站点搭建工具搭数、规则引擎工具等。
(2)面向行业垂直应用场景:提供行业相关性很高,适合特定场景的数据工具,如面向政府县级区域经济的可视化套件。
二、解决方案
数加针对不同的业务场景,基于平台提供的开发套件与行业服务商的能力,将多方产品串联,提供行业解决方案,如敏捷 BI 解决方案、交通预测解决方案、 智能问答机器人等,一方面客户可以自行参考解决方案,以自助的方式完成解决方案的实施。另一方面,客户也可以咨询行业服务商或者阿里云大数据平台官方,根 据客户场景,提供定制化的端到端的解决方案实施。
三、数据市场
访问: https://market.aliyun.com/chn/data
除了阿里云大数据官方的数据应用,我们会联合合作伙伴、ISV 等来丰富大数据应用,打造大数据生态,以普惠大数据为使命,给用户提供更多更好的数据应用、数据 API。
aws 大数据组件
表格 12 AWS 的大数据组件
组件类别 | 组成 | 处理过程 |
---|---|---|
源目标 | OSS 数据同步、写数据、读数据、MySQL 数据同步 | 数据来源多处,可以是数据库、本地文件上传。 |
数据预处理 | 从二个子类和其它分述。 | 主要在数据进入算法流程前对数据进行去噪、填充缺失值、类型变换等操作。 |
采样过滤 | 随机/加权/分层采样、过滤与映射 | |
数据合并 | 合并行、列,调用 SQL 中 JOIN、UNION | |
其它:类型转化、增加序号号、拆分、缺失值补充、标准化、归一化、KEY-TO-TABLE、TALBE-TO-KV | 标准化:按比例将数据缩小,并落到一个区间。 归一化:作用是将每个特征的数值范围变为 0 到 1 之间。 拆分:ML 中将一组数据按一定比例进行拆分,如 7:3,即 70%作为训练集,30%用于预测集。 | |
特征过程 | 从下面四个子类分述。 | |
特征变换 | ||
特征重要性评估 | 熵和基尼系数是表示这个特征区间对于目标值的影响。 | |
特征选择 | 过滤式特征选择:用来判断每个特征对于结果的影响。通过信息熵和基尼系数来表示,可以通过查看评估报告来显示最终的结果。 | |
特征生成 | ||
统计分析 | 包括协方差、数据视图、全表统计等等 | |
机器学习 | 从五个子类、评估和预测分述。 | |
二分类 | ||
多分类 | ||
聚类 | ||
回归 | 线性回归,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系。 GBDT 回归: | |
关联推荐 | ||
评估 | 评估方法有二分类、多分类、聚类、回归和混淆矩阵。评估模型的指标有准确率/召回率/F1 等。 | |
预测 | ||
文本分析 | 包括分词、字符串相似度等等 | |
网络分析 | 包括树深度、PageRank、最大联通子图、标签传播分类、标签传播聚类、单源最短路径等等。 | 最大联通子图:可以找到有通联关系的最大集合,排除无关元素。 单源最短路径:探查出每个人的一度人脉、二度人脉关系等。 标签传播分类:用已标记节点的标签信息去预测未标记节点的标签信息。 |
工具:SQL 脚本 | SQL 语法 |
备注:过滤通常可用 SQL 语句的 WHERE 限制来实现。
图 9 MaxCompute 生态
BI
图 10 阿里云 BI 流程
说明**:工作表里**的交叉表可以直播查看原始数据,类似 excel 或者 phpmyadmin 的数据展现(SQL 查询),智能图表则可以切换成图表的显示。 仪器表 是 excel 里的各种图表。门户是各种数据的组合展现模板如日志分析模板,类似站长流量跟踪系统里的数据分析。
图 11 工作表 VS 仪表盘
说明:阿里云的 BI 类似 phpmyadmin 管理 MySQL 的数据可视化,但数据源更多,包括 oracle 等等;数据可视化展现更全面,可以多维报表同时展现,并且报表更丰富,如特有的中国地图气泡图/色彩图。
推荐系统
概述
推荐引擎(Recommendation Engine,以下简称 RecEng,特指阿里云推荐引擎)是在阿里云计算环境下建立的一套推荐服务框架,目标是让广大中小互联网企业能够在这套框架上快速的搭建满足自身业务需求的推荐服务。
推荐服务通常由三部分组成:日志采集,推荐计算和产品对接。推荐服务首先需要采集产品中记录的用户行为日志到离线存储,然后在离线环境下利用推荐算 法进行用户和物品的匹配计算,找出每个用户可能感兴趣的物品集合后,将这些预先计算好的结果推送到在线存储上,最终产品在有用户访问时通过在线 API 向推 荐服务发起请求,获得该用户可能感兴趣的物品,完成推荐业务。
图 1 阿里云数加推荐系统流程图
离线计算
离线计算模块包含推荐业务、场景、离线算法流程的创建、编辑、删除操作,支持算法流程任务的启动、停止和日志查看,提供默认的离线推荐算法模板和创 建自定义算法模板。推荐引擎中,离线流程和效果流程都是在离线计算的,离线数据规范中定义了这两类流程的数据规范。一般情况下,离线计算的输入和输出都是 MaxCompute(原 ODPS)表,所以离线数据规范其实上是一组 MaxCompute 表的格式规范,包括接入数据、中间数据和输出数据三类数据的格 式规范。接入数据指客户离线提供的用户、物品、日志等数据,中间数据是在离线算法流程中产生的各种中间性质的结果数据表,输出数据是指推荐结果数据表,该 结果最终将会被导入到在线存储中,供在线计算模块使用。
在线计算
推荐引擎的的在线计算负责的任务是推荐 API 接收到 API 请求时,实时对离线和近线修正产生的推荐结果进行过滤、排重、补足等处理;后者主要处理用户行为发生变化、推荐物品发生更新时,对离线推荐结果进行更新。
近线计算
推荐引擎的的近线计算主要处理用户行为发生变化、推荐物品发生更新时,对离线推荐结果进行更新。不像离线算法,天然以 MaxCompute(原 ODPS)表作为输入和输出,近线程序的输入数据可以来自多个数据源,如在线的表格存储(原 OTS),以及用户的 API 请求,又或者是程序中的变量;输出 可以是程序变量,或者写回在线存储,或者返回给用户。出于安全性考虑,推荐引擎提供了一组 SDK 供客户自定义在线代码读写在线存储(Table Store),不允许直接访问,所以需要定义每类在线存储的别名和格式。对于需要频繁使用的在线数据,无论其来自在线存储还是用户的 API 请求, RecEng 会预先读好,保存在在线程序的变量中,客户自定义代码可以直接读写这些变量中的数据。
A/B 测试
支持推荐算法流程的 A/B 测试,辅助推荐算法优化提升。允许一个场景下存在多条推荐流程(rec_path),A/B 测试也是针对同属于一个场景的不同推荐流程来进行的,在进行 A/B 测试时,同一个场景下的每个推荐流程都会被分配一定的流量比例,这个比例是可以在产品界面中配置的。在执行推荐 API 时,推荐引擎第一步就会按照比例随机 分配流量,把当前用户分配到某个推荐流程中,然后再执行这个推荐流程的在线流程。RecEng 在分配流量时是完全随机的,不遵从任何规则,如某个用户一定 要分配到某一条推荐流程中这样的规则。
API
推荐引擎提供多个 API 供客户用于业务系统对接,包括:启动数据预处理任务 API、启动离线任务 API、启动效果计算任务 API、查询任务状态 API、在线获取推荐结果 API(推荐 API)、在线数据更新 API、系统日志采集 API(日志 API)。这些 API 需要客户集成,RecEng 建议客户 端将这些 API 统一集成在自己搭建的服务器上。
开发流程
1. 数据准备
数据源:数据表组成,可转换到 mysql/json 等格式,并进行数据预处理。
表格 | 字段 | 简介 |
---|---|---|
用户表 user_meta | 描述用户元信息的数据表 | |
用户属性维度表 user_meta_config | 定义用户表中各元信息数据的类型 | |
物品表 item_meta | 描述物品元信息的数据表 | |
物品属性维度表 item_meta_config | 定义物品表中各元信息数据的类型 | |
行为表 user_behavior | {userid, itemid, bhv_type} | 描述用户对物品的行为(包括搜索、点击、浏览、收藏等)信息的数据表 |
可推荐物品表 rec_item_info | 可被推荐给用户的物品信息数据表,通常是物品表的子集 |
2. 上传数据和预处理数据
上传和预处理数据是数据分析和机器学习工作流程中的重要步骤。以下是上传数据和预处理数据的详细说明及常见方法。
一、上传数据
上传数据是将本地数据或外部数据源中的数据导入分析环境的过程。数据通常可以存储在文件系统、本地存储设备、云存储或数据库中。不同的数据源有不同的上传方式。
1. 常见数据格式
- CSV/TSV 文件 :文本文件格式,常见用于结构化数据存储。
- Excel 文件 (.xls, .xlsx) :支持表格和多种数据格式。
- JSON :用于存储和传输键值对数据的格式。
- SQL 数据库 :结构化数据库,支持通过 SQL 查询导入数据。
- Parquet :专为大数据分析优化的列式存储格式。
- 云存储 :AWS S3、Google Cloud Storage、Azure Blob Storage 等云服务提供存储和快速数据访问。
2. 上传数据的常见方法
- 本地文件上传 :可以通过编程语言如 Python、R 或使用可视化工具上传文件。
- Python 读取 CSV 文件 :
import pandas as pd data = pd.read_csv('file.csv')
- 读取 Excel 文件 :
data = pd.read_excel('file.xlsx')
- Python 读取 CSV 文件 :
- 通过 API 获取数据 :使用 REST API 获取远程服务器上的数据,常用于在线数据集或实时数据。
- 例如,通过
requests
库获取数据:import requests response = requests.get('https://api.example.com/data') data = response.json()
- 例如,通过
- 从数据库读取数据 :使用 SQL 连接库如
SQLAlchemy
、pyodbc
或pymysql
直接从数据库查询数据。- 例如,连接到 MySQL 数据库:
import pymysql connection = pymysql.connect(host='localhost', user='root', password='password', database='db_name') data = pd.read_sql('SELECT * FROM table_name', connection)
- 例如,连接到 MySQL 数据库:
3. 从云存储获取数据
AWS S3 :
- 使用
boto3
库从 AWS S3 bucket 读取数据:import boto3 s3 = boto3.client('s3') obj = s3.get_object(Bucket='bucket_name', Key='file.csv') data = pd.read_csv(obj['Body'])
- 使用
Google Cloud Storage :
- 使用
google-cloud-storage
库从 GCS 读取数据:from google.cloud import storage client = storage.Client() bucket = client.get_bucket('bucket_name') blob = bucket.blob('file.csv') content = blob.download_as_text() data = pd.read_csv(StringIO(content))
- 使用
二、预处理数据
数据预处理是清理和转换数据的过程,以确保数据的质量和一致性,从而为后续的分析或模型训练做好准备。
1. 数据清洗
数据清洗的目的是处理数据中的错误、缺失值和不一致性,使数据更加整洁。
- 处理缺失值 :
- 删除缺失值 :
data_cleaned = data.dropna()
- 填充缺失值 :
data_filled = data.fillna(0) # 用 0 填充 data_filled = data.fillna(data.mean()) # 用均值填充
- 删除缺失值 :
- 处理重复数据 :
- 删除重复行 :
data_deduped = data.drop_duplicates()
- 删除重复行 :
- 处理异常值 :使用统计方法或箱线图识别和处理异常值。
- 例如,去除 3 倍标准差之外的数据:
data_cleaned = data[(data < (mean + 3 * std)) & (data > (mean - 3 * std))]
- 例如,去除 3 倍标准差之外的数据:
2. 数据转换
数据转换的目的是将数据从一种形式转换为另一种形式,以便更好地适应分析或模型需求。
数据类型转换 :将列的数据类型转换为合适的格式(如
int
、float
、datetime
等)。data['column'] = data['column'].astype('float') data['date'] = pd.to_datetime(data['date'])
标准化/归一化 :
- 标准化 :将数据转换为均值为 0,标准差为 1 的正态分布。
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() data_scaled = scaler.fit_transform(data)
- 归一化 :将数据缩放到特定范围(如[0, 1])。
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() data_normalized = scaler.fit_transform(data)
- 标准化 :将数据转换为均值为 0,标准差为 1 的正态分布。
3. 特征工程
特征工程是从原始数据中提取或创造新的有意义的特征,以提升模型的表现。
特征编码 :
- 标签编码 :将分类变量转换为数值形式。
from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() data['category_encoded'] = encoder.fit_transform(data['category'])
- 独热编码(One-Hot Encoding) :将分类变量转换为二进制特征。
data_encoded = pd.get_dummies(data, columns=['category'])
- 标签编码 :将分类变量转换为数值形式。
特征缩放 :例如将金额、年限等特征缩放至相同范围。
特征选择 :通过删除无关或冗余的特征来优化模型。
- 使用相关矩阵选择相关性高的特征:
correlation_matrix = data.corr()
- 使用相关矩阵选择相关性高的特征:
4. 处理时间序列数据
时间序列数据的预处理需要特别关注日期时间字段、时间间隔和趋势。
生成时间特征 :提取年月日、季度等时间特征。
data['year'] = data['date'].dt.year data['month'] = data['date'].dt.month data['day'] = data['date'].dt.day
处理季节性 :可以通过差分或平滑方法去除季节性趋势。
三、数据预处理示例
以下是一个简化的数据上传和预处理示例,演示从 CSV 上传数据并进行预处理操作:
import pandas as pd
from sklearn.preprocessing import StandardScaler, LabelEncoder
# 上传数据
data = pd.read_csv('data.csv')
# 处理缺失值
data.fillna(data.mean(), inplace=True)
# 数据类型转换
data['date'] = pd.to_datetime(data['date'])
# 独热编码
data = pd.get_dummies(data, columns=['category'])
# 数据标准化
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data[['feature1', 'feature2']])
# 输出处理后的数据
print(data_scaled)
通过上传和预处理数据,可以确保分析和模型训练时的数据质量和一致性,从而提升结果的准确性和可靠性。
3. 配置离线和在线算法
4. 从测试开发环境发布上线。
5. 效果测试
实验案例
表格 13 实验案例列表
序号 | 实验案例名称 | 目的 | 输入(数据源) | 输出(结论) | 应用知识 | 处理过程 |
---|---|---|---|---|---|---|
1. | 人口普查统计案例 | 统计学历对于收入的影响 | UCI 开源数据集 Adult (32561 条) | {学历、收入} 结论:学历越高平均收入越高。 | BI:数据统计、分析 | 类型转化(income**字段~0/1)。 全表统计/数据视图/类型转化/SQL 语句/过滤。 |
2. | 心脏病预测案例 | 根据一组用户的体检指标预测另一组用户是否患有心脏病。 | UCI 开源数据集 heart_disease (300 多条) | {name,概率} 结论 1:心跳数影响最大、性别没有影响。 结论 2: | ML:逻辑回归二分类模型(线性) | 类型转化(性别0/1、胸部疼痛程度 03 等等)、过滤式特征选择(得到特征权重)、归一化、拆分、混淆矩阵评估 |
3. | 【图算法】金融风控实验 | 算出图中每个人是欺诈用户的概率 | {start_point、end_point、count.关系紧密度} | {用户,tag, 权重} | ML:最大联通子图 | 最大联通子图、单源最短路径、标签传播分类 |
4. | 协同过滤做商品推荐 | 购买行为数据{user_id、item_id、active_type、active_date} | 推荐列表和统计命中数 | 推荐:关联规则、协同过滤 | ||
5. | 回归算法做农业贷款发放预测 | 通过农业贷款的历史发放情况,预测是否给预测集的用户发放他们需要的金额的贷款。 | 贷款训练集(200 多条,历史贷款数据)、贷款预测集(当前申请贷款者) | {用户,申请贷款值,预期还款金额} | ML:线性回归 | 类型转换(region 02、claim_type0/1) |
6. | 新闻分类案例 | 通过 PLDA 算法挖掘文章的主题,通过主题权重的聚类,实现新闻自动分类。 | {category、title、 content} | {docs_id, 类别 id} | ML:PLDA 算法、聚类 | 增加序号列、停用词过滤、分词及词频统计、文本主题挖掘(三元组转 V1,PLDA 算法、K 均值聚类)、结果分析和评估。 |
7. | 学生考试成绩预测 | 预测学生期末成绩。 | 某中学在校生的家庭背景数据以及在校行为数据 | {字段、权重} 结论:medu 最正相关,mjob 负相关。 | ML:逻辑回归 | 类型转化、归一化、逻辑回归二分类、预测、混淆矩阵 |
8. | 雾霾天气预测 | 预测雾霾天气(PM2.5/ PM10)最相关的因子 | 北京 2016 年全年天气数据 | {字段,权重} 结论:二氧化氮是跟雾霾天气相关性最强。 | ML:逻辑回归 | 类型转化、归一化、拆分、随机森林或逻辑回归二分类、预测 |
备注:1. 共 8 个实验。实验案例涉及机器学习、BI、推荐和 AI。
BI 的报表为仪表板(即各种图表的组合),工作表可以查看原始数据。
ML:一般要将非数值字段作类型转化,非数值字段可能有枚举(如星座)、二元值(如性别)、多元值等等。
参考资料:
【玩转数据系列二】机器学习应用没那么难,这次教你玩心脏病预测
【玩转数据系列四】听说啤酒和尿布很配?本期教你用协同过滤做推荐
实验 1:人口普查统计
图 12 人口普查统计的数据流程
说明:
输入(数据源):字段除了 age/education_num/hours_per_week 这三个字段是 double 类型外,其余字段是 string 类型。
输出:统计学历对于收入区间(0/1)的影响:{学位、最大,平均,最小},
结论:博硕士的平均收入区间是 1,学士是 0,说明学历高平均收入也高。
数据处理过程:
- 全表统计/数据视图:目的就是对数据作个刷选。
- 类型转化:收入 income 字段是 string,要作* 类型转化* 。本案例将收入大于 5 万设值为 1,低于 5 万设值为 0。
select age,workclass,education,education_num,occupation,race,sex,hours_per_week,native_country, (case income when '<=50K' then 0 else 1 end) as income _result from ${t1} ;
- 直方图(多字段):实质上也是报表的一种,数据展现。
- SQL 脚本:执行单行 SQL 命令。
- 过滤:实质是 SQL 语句中的 WHERE 过滤。
实验 4:协同过滤做商品推荐
本文的业务场景如下:通过一份 7 月份前的用户购物行为数据,获取商品的关联关系,对用户 7 月份之后的购买形成推荐,并评估结果。比如用户甲某在 7 月份之前买了商品 A,商品 A 与 B 强相关,我们就在 7 月份之后推荐了商品 B,并探查这次推荐是否命中。
图 13 协同过滤商品推荐的数据流程
说明:以上由三个部分组成,分别是***推荐系统***生成推荐列表、用户直实购物形为、推荐数和命中数的统计。
协同过滤结果,表示的是商品的关联性。{目标商品,相似度概率}
实验 6:新闻分类(文本挖掘)
https://help.aliyun.com/document_detail/43471.html?spm=5176.doc30348.6.283.T4lbaj
一、背景
新闻分类是文本挖掘领域较为常见的场景。目前很多媒体或是内容生产商对于新闻这种文本的分类常常采用人肉打标的方式,消耗了大量的人力资源。本文尝试通过智能的文本挖掘算法对于新闻文本进行分类。无需任何人肉打标,完全由机器智能化实现。
本文通过 PLDA 算法挖掘文章的主题,通过主题权重的聚类,实现新闻自动分类。包括了分词、词型转换、停用词过滤、主题挖掘、聚类等流程。
二、数据集介绍
具体字段如下:
字段名 | 含义 | 类型 | 描述 |
---|---|---|---|
category | 新闻类型 | string | 体育、女性、社会、军事、科技等 |
title | 标题 | string | 新闻标题 |
content | 内容 | string | 新闻内容 |
三、数据探索流程
首先,实验流程图:
实验可以大致分为五个模块,分别是增加序号列、停用词过滤、分词及词频统计、文本主题挖掘、结果分析和评估。
文本主题挖掘
使用 PLDA 文本挖掘组件需要先将文本转换成三元形式,append_id 是每篇新闻的唯一标识,key_value 字段中冒号前面的数字表示的是 单词抽象成的数字标识(可以用汉字内码转数字生成 word_id),冒号后面是对应的单词出现的频率。三元组组件生成结果如下: (append_id word_id word_freq)
在上一步完成了文本转数字的过程,下一步数据进入 PLDA 算法。PLDA 算法又叫主题模型,算法可以定位代表每篇文章的主题的词语。本次试验设置了 50 个主题,PLDA 有六个输出桩,第五个输出桩输出结果显示的是每篇文章对应的每个主题的概率。
本节参考
[2]. 阿里云数加机器学习平台
[3]. aws 推荐引擎示例教程 https://help.aliyun.com/document_detail/35065.html?spm=5176.doc30251.6.577.BW2OHy
[4]. [21 天搭建个性化推荐系统]( http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/30369/cn_zh/1463551649394/21 天搭建推荐系统 (1).pdf)
[5]. Dataphin 和 Dataworks 的区别与各自定位? https://developer.aliyun.com/ask/135266
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论