Deseja aprender sobre três métodos de mineração de dados para o seu próximo projeto de ML? Em seguida, leia a tradução do artigo de Rebecca Vickery publicado no blog Towards Data Science on Medium! Ela será interessante para iniciantes.
Obter dados de qualidade é o primeiro e mais importante passo em qualquer projeto de aprendizado de máquina. Os especialistas em ciência de dados costumam usar vários métodos para obter conjuntos de dados. Eles podem usar dados publicamente disponíveis, bem como dados disponíveis via API ou obtidos de vários bancos de dados, mas geralmente combinam esses métodos.
O objetivo deste artigo é fornecer uma breve visão geral de três métodos diferentes para recuperar dados usando o Python. Vou lhe dizer como fazer isso com o Notebook Jupyter. No meu
artigo anterior
, escrevi sobre a aplicação de alguns comandos que são executados no terminal.
SQL
Se você precisar obter dados de um banco de dados relacional, provavelmente trabalhará com a linguagem SQL. A biblioteca SQLAlchemy permite associar o código do seu laptop aos tipos mais comuns de bancos de dados.
Aqui você encontrará informações sobre quais bancos de dados são suportados e como vincular a cada tipo.
Você pode usar a biblioteca SQLAlchemy para procurar tabelas e consultar dados ou gravar consultas brutas. Para vincular ao banco de dados, você precisará de um URL com suas credenciais. Em seguida, você precisa inicializar o método
create_engine
para criar a conexão.
from sqlalchemy import create_engine engine = create_engine('dialect+driver://username:password@host:port/database')
Agora você pode escrever consultas no banco de dados e obter resultados.
connection = engine.connect() result = connection.execute("select * from my_table")
Raspagem
A raspagem da Web é usada para baixar dados de sites e extrair as informações necessárias de suas páginas. Existem muitas bibliotecas Python disponíveis para isso, mas a mais simples é a
Beautiful Soup .
Você pode instalar o pacote através do pip.
pip install BeautifulSoup4
Vejamos um exemplo simples de como usá-lo. Usaremos a Beautiful Soup e a biblioteca
urllib para extrair nomes e preços de hotéis do
TripAdvisor .
Primeiro, importamos todas as bibliotecas com as quais vamos trabalhar.
from bs4 import BeautifulSoup import urllib.request
Agora carregue o conteúdo da página que iremos descartar. Desejo coletar dados sobre preços de hotéis na ilha grega de Creta e pegar o endereço URL que contém uma lista de hotéis nesse local.

O código abaixo define a URL como uma variável e usa a biblioteca urllib para abrir a página e a biblioteca Beautiful Soup para lê-la e retornar os resultados em um formato simples. Parte dos dados de saída é mostrada abaixo do código.
URL = 'https://www.tripadvisor.co.uk/Hotels-g189413-Crete-Hotels.html' page = urllib.request.urlopen(URL) soup = BeautifulSoup(page, 'html.parser') print(soup.prettify())

Agora vamos obter uma lista com os nomes dos hotéis na página. Introduziremos a função
find_all
, que extrairá partes do documento de seu interesse. Você pode filtrá-lo de maneira diferente usando a função
find_all
para passar uma única linha, expressão regular ou lista. Você também pode filtrar um dos atributos da tag - esse é exatamente o método que aplicaremos. Se você é novo em tags e atributos HTML, consulte este
artigo para uma visão geral rápida.
Para entender a melhor forma de fornecer acesso aos dados na tag, precisamos verificar o código desse elemento na página. Para encontrar o código do nome do hotel, clique com o botão direito do mouse no nome da lista, conforme mostrado na figura abaixo.

Depois de clicar em
inspect
código
inspect
elemento aparecerá e a seção com o nome do hotel será destacada.

Vimos que o nome do hotel é o único pedaço de texto da classe com o nome
listing_title
. Após a classe, vem o código e o nome desse atributo para a função
find_all
, bem como a tag
div
.
content_name = soup.find_all('div', attrs={'class': 'listing_title'}) print(content_name)
Cada seção do código com o nome do hotel é retornada como uma lista.

Para extrair nomes de hotéis do código, usamos a função
getText
da biblioteca Beautiful Soup.
content_name_list = [] for div in content_name: content_name_list.append(div.getText().split('\n')[0]) print(content_name_list)
Os nomes dos hotéis são retornados como uma lista.

Da mesma forma, obtemos dados de preços. A estrutura de código do preço é mostrada abaixo.

Como você pode ver, podemos trabalhar com um código muito semelhante ao usado para hotéis.
content_price = soup.find_all('div', attrs={'class': 'price-wrap'}) print(content_price)
No caso do preço, há pouca dificuldade. Você pode vê-lo executando o seguinte código:
content_price_list = [] for div in content_price: content_price_list.append(div.getText().split('\n')[0]) print(content_price_list)
O resultado é mostrado abaixo. Se uma redução de preço for indicada na lista de hotéis, além de algum texto, o preço inicial e o preço final serão retornados. Para corrigir esse problema, simplesmente retornamos o preço atual de hoje.

Podemos usar lógica simples para obter o preço mais recente indicado no texto.
content_price_list = [] for a in content_price: a_split = a.getText().split('\n')[0] if len(a_split) > 5: content_price_list.append(a_split[-4:]) else: content_price_list.append(a_split) print(content_price_list)
Isso nos dará o seguinte resultado:

API
API - interface de programação de aplicativos (da interface de programação de aplicativos em inglês). De uma perspectiva de mineração de dados, é um sistema baseado na Web que fornece um ponto de extremidade de dados que você pode entrar em contato através da programação. Normalmente, os dados são retornados no formato JSON ou XML.
Esse método provavelmente será útil no aprendizado de máquina. Vou dar um exemplo simples de recuperação de dados climáticos da API pública do
Dark Sky . Para se conectar a ele, você precisa se registrar e terá 1000 chamadas gratuitas por dia. Isso deve ser suficiente para o teste.
Para acessar dados do Dark Sky, usarei a biblioteca de
requests
. Primeiro de tudo, preciso obter o URL correto para a solicitação. Além da previsão, o Dark Sky fornece dados históricos do tempo. Neste exemplo, vou pegá-los e obter o URL correto da
documentação .
A estrutura deste URL é:
https://api.darksky.net/forecast/[key]/[latitude],[longitude],[time]
Usaremos a biblioteca de
requests
para obter
resultados para uma latitude e longitude específica, bem como data e hora. Imagine que, depois de extrair dados de preços diários para hotéis em Creta, decidimos descobrir se a política de preços está relacionada ao clima.
Por exemplo, vamos pegar as coordenadas de um dos hotéis da lista - Mitsis Laguna Resort & Spa.

Primeiro, crie um URL com as coordenadas corretas, bem como a data e hora solicitadas. Usando a biblioteca de
requests
, obtemos acesso aos dados no formato JSON.
import requests request_url = 'https://api.darksky.net/forecast/fd82a22de40c6dca7d1ae392ad83eeb3/35.3378,-25.3741,2019-07-01T12:00:00' result = requests.get(request_url).json() result
Para facilitar a leitura e a análise dos resultados, podemos converter os dados em um quadro de dados.
import pandas as pd df = pd.DataFrame.from_dict(json_normalize(result), orient='columns') df.head()

Existem muitas outras opções para automatizar a extração de dados usando esses métodos. No caso de raspagem na web, você pode escrever diferentes funções para automatizar o processo e facilitar a extração de dados por mais dias e / ou locais. Neste artigo, eu queria revisar e fornecer exemplos de código suficientes. Os seguintes materiais serão mais detalhados: Explicarei como criar grandes conjuntos de dados e analisá-los usando os métodos descritos acima.
Obrigado pela atenção!