大渣好,从今天该SEI,你钢盔体验船欣的旅程,和我一起进行探讨机器学习。
机器学习的流程大概分为六个步骤:获取数据,检查数据合理,数据清洗,建模,评估模型,部署。
获取数据
机器学习是需要大量的数据的喂出模型的,可以说,数据越多,你最终训练得到的模型就可能越可靠,所以第一步数据的获取是非常重要的,这也是本篇文章所要介绍的重点,打通机器学习第一步。
检查数据合理性
拿到数据以后,并非所有的数据项都是合格的,比如,移动高1000多层的大楼,重1000千克的人,年岁高达199岁的人,这一阶段可以使用一些数据可视化的技术快速的找到一些毛刺。
数据清洗
这一阶段某种意义上来说,就是为了解决“检查合理性
”阶段发现的一些不合理数据的,要么剔除,要么改变,亦或者是对一些数据字段类型的转变,已方便我们归一化我们的数据,使我们收集到的数据更加好用。往往这一阶段的工作非常枯燥,而且繁琐。
建模
终于扛到了这个阶段了,这一阶段就是利用上面我们做好的数据,选择合适的算法,来训练处一个模型,算法要不要我们自己写?答案是基本不需要,因为有很多算法可以直接拿来用,当然,如果你觉得训练出来的模型都不怎么理想,那么,你可能需要自己做算法了,这个过程就比较痛苦,有相当多的概念,拟合
,欧几里得
,贝叶斯
,高斯变换
,隐马尔可夫
,线性回归
,支持向量机
,决策树
,偏导数
,二阶偏导数
,巴拉巴拉...
部署
模型都出来了,实际上相当于一个后台服务已经搭建完毕了,将他封装封装,暴露一个web借口,这些别人属于一定的参数,就可以利用你这个模型来预测数据了,是不是听起来很激动,先别激动,今天,我们进入万里长征的第一步,学习如何获取数据吧。
获取数据的方式总结起来有两种,一种是偷懒的方式,一种是不偷懒的方式。
偷懒的方式
所谓的偷懒的方式也有很多:
不偷懒的方式
所谓的不偷懒的方式具体是:
如图,
将你需要爬取数据的首屏url粘贴到import.io的对话框,确定就会进入图上这个页面,然后就可以定义需要爬取的数据字段,如果运气好,这些字段都不需要你定义,import.io会自动分析出所有字段,当然你可以删除一些无用字段。前提是你提供的网站非常单一,所有的内容基本都是每个item项,但大多数不是,所以通常需要自己定义爬取字段,分页处理。
import.io 带爬取数据字段定义
借助import.io的化,非常方面的通过数据点点就可以获取你需要的数据字段,注意,对于你没添加的一个column,你都需要点击待爬取的2个item中的相同字段,一定要出现所有item中该字段都被绿色框框选中,这个column才算添加好,只有这样,import.io才会自动识别出你需要爬取这个字段,特别注意,我一开始添加一列,只点击一个item的某个字段,这样import.io还不足以分析出你需要爬item中的这个字段。
做完上面,实际上,你只爬取到了一页的数据,那么,如果爬取其他分页的数据呢?
import.io分页爬
如上图,需要点击setting,就可以看到一些urls操作的,我通常会生成url,当然有时候生成url也是行不通的,url符合一定的规则,那么,你需要选择按个similar urls.
注意,这里需要装一个chrome插件,名字是就是highlight,这样当你选择{XXX-1}的时候,下面会出现一个参数行,我这里准备爬他100页数据,因此,我这么干了。点击开跑,数据一会就妥妥的来了,
如果要下载数据,点击那里可以下载。
可以看到这种方式基本不需要写任何代码,就可以从互联网上抓到你想要的数据了,萝卜白菜各有所爱,我不强求你使用这种方式获取数据。
这也是笔者强烈推荐的方式,因为作为程序员,你不应该这么懒,况且,你以为躲过了初一就能躲过十五?后面还有大把需要写代码的时候,而且,使用scrapy来爬取数据就很灵活了,基本上,在这个阶段就可以对数据预先做一定的处理,减少下面步骤的时间成本。
既然要使用scrapy来爬取网络数据,那么很自然,我们需要安装这个python包了。
对了,这里还要提醒一下,既然你准备搞机器学医,一定不要犹豫,装一个ANACONDA,真的没有什么好犹豫的,机器学习的相关库它都帮你管理者,实在方便很多,然后,IDE这方面的化,anaconda推荐的是vscode,but,我还是更加偏爱我的pycharm,基础班就可以了,而且还是免费。
Scrapy安装好了之后,自然而然,看看有哪些基本的功能,咋一看就看到了一个创建一个新的项目,那么,我们就创建一个呗scrapy startproject house
。其他一些好玩的命令留着以后再研究不迟。
假如说,我们想爬取这个网站的内容,那么先要明白,我们需要取哪些个字段,这些字段定义在哪里,很明显,应该定义在item.py当中。大家练习的时候,麻烦换一个网站,避免对人家造成伤害。
在项目的spider文件夹中,新建一个文件,内容如下
import scrapy
from house.items import HouseItem
class Demo(scrapy.Spider):
name = "lyj"
allowed_domains = ["leyoujia.com"]
start_urls = [
"https://shenzhen.leyoujia.com/esf/?c=%E5%AE%9D%E5%AE%89%E5%8C%BA",
]
def parse(self, response):
for house in response.xpath('/html/body/div[3]/div[3]/div[1]/div[5]/ul/li'):
item = HouseItem()
# item.title = house.xpath('div[2]/p[1]/a/text()').extract_first() 这种方式会报错
item['title'] = house.xpath('div[2]/p[1]/a/text()').extract_first()
item['image'] = house.xpath('div[1]/a/img/@src').extract_first()
item['square'] = house.xpath('div[2]/p[2]/span[3]/text()').extract_first()
item['price'] = house.xpath('div[3]/p[1]/span/text()').extract_first()
yield item
new_pages = response.xpath('/html/body/div[3]/div[3]/div[1]/div[5]/div/div[2]/a')
for page in new_pages:
# //表示又从根部开始写,这里需要从当前位置,因此直接开始查找,类似于上面取字段
# next_page_url = page.xpath('//@href').extract_first()
next_page_url = page.xpath('@href').extract_first()
if next_page_url is not None:
yield response.follow(next_page_url, self.parse)
pass
其中字段怎么获取可以通过scrapy shell的方式交互式的调试,非常方便。
scrapy shell 'https://shenzhen.leyoujia.com/esf/?c=%E5%AE%9D%E5%AE%89%E5%8C%BA'
你也肯定很奇怪这些xpath是哪里来的,没错,就是这样来了。
怎么运行,我们在项目的根目录下,敲下scrapy命令,提示中,可以看到使用crawl命令运行爬虫
scrapy crawl lyj -o house.json
铛铛☭,很不幸报错了
表示需要使用字典方式设置属性的值,而不是使用对方的方式!
最终,爬取的结果会在根目录生成一个house.json的文件,这是我生成的样例。如果你需要生产csv格式的数据,就-o xxx.csv -t
csv即可。
也许你会有疑问,middlewire,pipeline这些东西是什么,我只能说,这些高级的用法在自己需要的时候你去研究就行,并没有什么难度,pipeline一看就是处理数据的,middlewire中间件一看就是为了给爬虫加一下能力,比如http代理,cookie处理等等。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。