数据分析与数据挖掘的步骤流程:
1、明确目标。首先要熟悉业务背景,了解业务背景后,才能明确目标。如去分析电商业务流量与转化率的关系,广告业务如何确定单次点击竞价增加点击率和有效访问率,产品业务根据PV,UV,用户留存增长ARPU(利润或者金额),供应链业务:如工厂,饭店的订货量预测,营销业务:根据已有数据如何提高ROI(投资回报率)及金融行业的风险控制等等。
2、数据搜集。哪些数据会影响问题答案,然后搜集相关的数据。如网上已有数据,爬虫,API。
3、数据清洗。数据质量分析,缺失值(空值),异常值(异常),一致性分析(不能矛盾,不能是多数据源数据,消除量纲影响,保证数据来源一致,时间节点一致)。
4、构建模型。常用的数据挖掘模型,回归预测,分类,聚类。如线性回归,逻辑回归,决策树,SVM,GBDT, 贝叶斯,神经网络,K-means聚类模型等等。后面有时间总结一下。
5、模型评估。如何评价模型的好坏,是否存在过拟合,可采用一些预测准确率,均方误差,交叉熵损失函数等。
6、应用部署。基于业务要服务于客户,需要将模型部署到系统中。如推荐系统,精准营销等。
本次利用爬虫爬取某气象网站的天气AQI(Air Quality Index, 空气质量指数)数据,并用图表工具分析数据,来判断福建省福州市,泉州市,厦门市近5年来空气质量是否有某些变化。
有兴趣的可以去查一下AQI的计算公式等。
爬虫四步骤:
1、获取链接。要查找数据的网址。这里用的天气后报。
2、发送请求。
3、筛选数据。目前有很多方法可以解析,正则表达式,json,bs4,xpath等等。
4、保存数据。
代码如下:
import time
import requests
import random
from bs4 import BeautifulSoup
# 生成请求头,浏览器可看
headers = {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.33'
}
citys = ['fuzhou', 'quanzhou', 'xiamen']
for i in range(len(citys)):
filename = 'Air_AQI_' + citys[i] + '.csv'
with open(filename, 'a+', encoding='utf-8-sig') as f:#写列标签
f.write('Date' + ',' + 'Quality_grade' + ',' + 'AQI' + ',' + 'AQI_rank' + ',' + 'PM2_5' + ',' + 'PM10' + ',' + 'SO2' + ',' + 'NO2' + ',' + 'CO' + ',' + 'O3' + '\n')
for year in range(2017,2022):#近五年
for month in range(1, 13): # 12个月
# 停顿几秒,避免消耗对方服务器过多资源
seconds = random.randint(2, 5)
time.sleep(seconds)
# 1.获取网址
if citys[i] == 'fuzhou':#分支处理,福州的url有fujian
url = 'http://www.tianqihoubao.com/aqi/fujian' + citys[i] + '-'+str("%04d" % year) + str("%02d" % month) + '.html'
else:
url = 'http://www.tianqihoubao.com/aqi/' + citys[i] + '-' + str("%04d" % year) + str("%02d" % month) + '.html'
# 2.发送请求
response = requests.get(url=url, headers=headers)#得到响应
# 3.筛选数据
soup = BeautifulSoup(response.text, 'html.parser')#用靓汤提取
tr = soup.find_all('tr')#用 BeautifulSoup 能更快速便捷地进行解析和提取,也可以用re,xpath等方法
for k in tr[1:]:#从1开始是不生成列标题
td = k.find_all('td')
Date = td[0].get_text().strip()#去掉首尾换行符
Quality_grade = td[1].get_text().strip()
AQI = td[2].get_text().strip()
AQI_rank = td[3].get_text().strip()
PM2_5 = td[4].get_text().strip()
PM10 = td[5].get_text().strip()
SO2 = td[6].get_text().strip()
NO2 = td[7].get_text().strip()
CO = td[8].get_text().strip()
O3 = td[9].get_text().strip()
# 4.保存数据
with open(filename, 'a+', encoding='utf-8-sig') as f:
f.write(Date + ',' + Quality_grade + ',' + AQI + ',' + AQI_rank + ',' + PM2_5 +',' +PM10+ ','+SO2+ ','+NO2+ ','+CO+ ','+O3+ '\n')
爬取数据如下:
分析见另一篇文章