前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习-开门篇之数据获取(一)

机器学习-开门篇之数据获取(一)

原创
作者头像
brzhang
修改2018-11-01 09:54:48
2.7K0
修改2018-11-01 09:54:48
举报
文章被收录于专栏:玩转全栈

大渣好,从今天该SEI,你钢盔体验船欣的旅程,和我一起进行探讨机器学习。

机器学习的流程

机器学习的流程大概分为六个步骤:获取数据,检查数据合理,数据清洗,建模,评估模型,部署。

获取数据

机器学习是需要大量的数据的喂出模型的,可以说,数据越多,你最终训练得到的模型就可能越可靠,所以第一步数据的获取是非常重要的,这也是本篇文章所要介绍的重点,打通机器学习第一步。

检查数据合理性

拿到数据以后,并非所有的数据项都是合格的,比如,移动高1000多层的大楼,重1000千克的人,年岁高达199岁的人,这一阶段可以使用一些数据可视化的技术快速的找到一些毛刺。

数据清洗

这一阶段某种意义上来说,就是为了解决“检查合理性”阶段发现的一些不合理数据的,要么剔除,要么改变,亦或者是对一些数据字段类型的转变,已方便我们归一化我们的数据,使我们收集到的数据更加好用。往往这一阶段的工作非常枯燥,而且繁琐。

建模

终于扛到了这个阶段了,这一阶段就是利用上面我们做好的数据,选择合适的算法,来训练处一个模型,算法要不要我们自己写?答案是基本不需要,因为有很多算法可以直接拿来用,当然,如果你觉得训练出来的模型都不怎么理想,那么,你可能需要自己做算法了,这个过程就比较痛苦,有相当多的概念,拟合欧几里得贝叶斯高斯变换隐马尔可夫线性回归支持向量机决策树偏导数二阶偏导数,巴拉巴拉...

部署

模型都出来了,实际上相当于一个后台服务已经搭建完毕了,将他封装封装,暴露一个web借口,这些别人属于一定的参数,就可以利用你这个模型来预测数据了,是不是听起来很激动,先别激动,今天,我们进入万里长征的第一步,学习如何获取数据吧

获取数据

获取数据的方式总结起来有两种,一种是偷懒的方式,一种是不偷懒的方式。

偷懒的方式

所谓的偷懒的方式也有很多:

  1. 伸手党,去找别人要那些整理好的数据,已csv格式发给你,缺点显而易见,付费的啊,而且也数据不一定新鲜。
  2. 借助一些第三方数据获取厂商,比如import.io,去爬取数据,缺点也是可能要付费,但方便啊,所以这种方式会是本文今天的重点之一。

不偷懒的方式

所谓的不偷懒的方式具体是:

  1. 自己写爬虫去爬取网上的数据,缺点,需要考虑的方方面面很多,而且可能会需要自己处理一下鉴权问题,ip访问控制,多线程,等等杂七杂八的问题。
  2. 使用爬虫框架去爬取数据,比如,Scrapy,这种就愉快了很多了,这也是本文的重点之一。

使用import.io来获取数据

使用import.io来爬取网站
使用import.io来爬取网站

如图,

将你需要爬取数据的首屏url粘贴到import.io的对话框,确定就会进入图上这个页面,然后就可以定义需要爬取的数据字段,如果运气好,这些字段都不需要你定义,import.io会自动分析出所有字段,当然你可以删除一些无用字段。前提是你提供的网站非常单一,所有的内容基本都是每个item项,但大多数不是,所以通常需要自己定义爬取字段,分页处理。

import.io 带爬取数据字段定义

借助import.io的化,非常方面的通过数据点点就可以获取你需要的数据字段,注意,对于你没添加的一个column,你都需要点击待爬取的2个item中的相同字段,一定要出现所有item中该字段都被绿色框框选中,这个column才算添加好,只有这样,import.io才会自动识别出你需要爬取这个字段,特别注意,我一开始添加一列,只点击一个item的某个字段,这样import.io还不足以分析出你需要爬item中的这个字段。

做完上面,实际上,你只爬取到了一页的数据,那么,如果爬取其他分页的数据呢?

import.io分页爬

配置url入口
配置url入口

如上图,需要点击setting,就可以看到一些urls操作的,我通常会生成url,当然有时候生成url也是行不通的,url符合一定的规则,那么,你需要选择按个similar urls.

合理利用规则生成urls,做分页爬取
合理利用规则生成urls,做分页爬取

注意,这里需要装一个chrome插件,名字是就是highlight,这样当你选择{XXX-1}的时候,下面会出现一个参数行,我这里准备爬他100页数据,因此,我这么干了。点击开跑,数据一会就妥妥的来了,

数据预览
数据预览

如果要下载数据,点击那里可以下载。

数据爬取结果
数据爬取结果

可以看到这种方式基本不需要写任何代码,就可以从互联网上抓到你想要的数据了,萝卜白菜各有所爱,我不强求你使用这种方式获取数据。

使用scrapy来获取数据

这也是笔者强烈推荐的方式,因为作为程序员,你不应该这么懒,况且,你以为躲过了初一就能躲过十五?后面还有大把需要写代码的时候,而且,使用scrapy来爬取数据就很灵活了,基本上,在这个阶段就可以对数据预先做一定的处理,减少下面步骤的时间成本。

既然要使用scrapy来爬取网络数据,那么很自然,我们需要安装这个python包了。

收搜并安装Scrapy
收搜并安装Scrapy

对了,这里还要提醒一下,既然你准备搞机器学医,一定不要犹豫,装一个ANACONDA,真的没有什么好犹豫的,机器学习的相关库它都帮你管理者,实在方便很多,然后,IDE这方面的化,anaconda推荐的是vscode,but,我还是更加偏爱我的pycharm,基础班就可以了,而且还是免费。

Scrapy创建项目

创建项目
创建项目

Scrapy安装好了之后,自然而然,看看有哪些基本的功能,咋一看就看到了一个创建一个新的项目,那么,我们就创建一个呗scrapy startproject house。其他一些好玩的命令留着以后再研究不迟。

新的爬虫项目
新的爬虫项目

假如说,我们想爬取这个网站的内容,那么先要明白,我们需要取哪些个字段,这些字段定义在哪里,很明显,应该定义在item.py当中。大家练习的时候,麻烦换一个网站,避免对人家造成伤害。

我的item
我的item

编写爬虫:

在项目的spider文件夹中,新建一个文件,内容如下

代码语言:python
代码运行次数:0
复制
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的方式交互式的调试,非常方便。

代码语言:javascript
复制
scrapy shell 'https://shenzhen.leyoujia.com/esf/?c=%E5%AE%9D%E5%AE%89%E5%8C%BA'
交互式
交互式

你也肯定很奇怪这些xpath是哪里来的,没错,就是这样来了。

xpath获取
xpath获取

运行爬虫爬取数据

怎么运行,我们在项目的根目录下,敲下scrapy命令,提示中,可以看到使用crawl命令运行爬虫

运行爬虫
运行爬虫
代码语言:php
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 机器学习的流程
  • 获取数据
    • 使用import.io来获取数据
      • 使用scrapy来获取数据
        • Scrapy创建项目
        • 编写爬虫:
        • 运行爬虫爬取数据
    相关产品与服务
    消息队列 TDMQ
    消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档