2. 数据收集:数据来源分类与伦理法律问题
数据收集,说白了就是搞清楚「数据从哪来」。我做了这么多年数据项目,发现很多同学一上来就急着建模,结果数据源没选对,后面全白干。今天咱们就把数据来源的几大渠道捋一遍,顺便聊聊那些容易踩的坑。
核心观点:数据收集不是「拿到就行」,而是「合法、合规、可用」三件事缺一不可。
2.1 数据来源的四大分类
我个人习惯把数据来源分成四类:公开数据集、API、数据库、爬虫。每种都有它的适用场景和坑。
2.2 公开数据集
这是最省事的渠道。Kaggle、UCI机器学习库、政府开放数据平台,都是好去处。我记得刚入行时,第一个项目就是用Kaggle上的泰坦尼克数据集练手。
优点:不用自己采集,格式规范,很多还带标签。
缺点:数据可能过时,或者跟你的业务场景不匹配。
我的建议:用公开数据集做原型验证没问题,但生产环境最好还是用真实业务数据。我在项目中遇到过,用公开数据集训练的模型,上线后效果差了一大截——因为公开数据跟实际用户行为差异太大。
2.3 API 接口
现在大部分互联网服务都提供API。比如Twitter API、天气API、股票行情API。说白了,就是别人把数据封装好,你按规则调用就行。
# 一个简单的API调用示例(Python)
import requests
url = "https://api.example.com/v1/weather"
params = {
"city": "北京",
"api_key": "your_key_here"
}
response = requests.get(url, params=params)
data = response.json()
print(data["temperature"]) # 输出温度
用API要注意频率限制(Rate Limit)。我曾经有个项目,没注意API调用次数,结果跑到一半被限流了,数据只收集了60%。嗯,从那以后我每次都会先看文档里的限流策略。
2.4 数据库
企业内部数据大多存在数据库里。MySQL、PostgreSQL、MongoDB,各有各的玩法。从数据库取数据,关键是要写好SQL。
| 数据库类型 | 适用场景 | 常见操作 |
|---|---|---|
| 关系型(MySQL/PostgreSQL) | 结构化数据,事务性强 | SELECT JOIN GROUP BY |
| 文档型(MongoDB) | 半结构化数据,灵活 | find() aggregate() |
| 列式存储(ClickHouse) | 大数据分析,聚合查询 | SELECT count() GROUP BY |
注意:直接从生产数据库取数据要小心。我曾经见过有人用SELECT * 把整个表拉下来,结果数据库IO飙升,业务直接受影响。建议用只读副本,或者限流查询。
2.5 网络爬虫
爬虫是最后的手段——当数据没有公开渠道、没有API、也不在数据库里时,才考虑爬虫。你想想看,如果别人网站有API,你非要去爬,那不是给自己找麻烦吗?
爬虫的技术栈很多:Scrapy适合大规模爬取,Selenium适合处理JavaScript渲染的页面,BeautifulSoup适合简单解析。
# 一个简单的爬虫示例(Python + BeautifulSoup)
import requests
from bs4 import BeautifulSoup
url = "https://example.com/products"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# 提取所有商品名称
for item in soup.select(".product-name"):
print(item.text.strip())
避坑指南:我曾经爬过一个电商网站,没设置请求间隔,结果IP被封了。后来加了time.sleep(2)和代理轮换,才搞定。记住:爬虫要有礼貌,尊重robots.txt。
2.6 数据收集的伦理与法律问题
这部分很重要,但很多人容易忽略。说白了,不是「能拿到」就等于「能拿」。
2.6.1 法律红线
- 个人信息保护法:在中国,收集个人信息必须告知用途,获得同意。不能偷偷摸摸搞数据。
- GDPR(欧盟通用数据保护条例):如果你处理欧盟用户的数据,要求更严格。用户有权要求删除数据(被遗忘权)。
- 著作权法:爬取的内容如果受版权保护,不能直接商用。比如爬新闻网站的文章拿去卖钱,那是违法的。
2.6.2 伦理考量
法律是最低底线,伦理是更高要求。我见过一些团队,虽然技术上合法,但做法让人不舒服。比如:
- 爬取用户评论时,连带爬了用户的昵称和头像,然后拿去训练模型——用户根本不知道。
- 用API获取数据时,没有遵守「仅用于非商业用途」的条款。
我的原则:数据收集前,先问自己三个问题——1. 我有没有权利拿这些数据?2. 数据提供方是否知情?3. 我的使用方式会不会伤害任何人?如果有一个答案是否定的,那就别碰。
2.6.3 实际操作建议
- 读清楚数据来源的使用条款(Terms of Service)。
- 匿名化处理:去掉个人身份信息,比如姓名、手机号、身份证。
- 记录数据来源和收集时间,方便追溯。
- 如果数据涉及第三方,确认是否有转授权。
嗯,数据收集这块,技术问题都好解决,真正难的是「能不能做」的判断。我见过太多项目因为数据合规问题被叫停,前期投入全打水漂。所以,开始收集之前,先跟法务聊一聊,不丢人。