机器学习数据提取

想了解下一个ML项目的三种数据挖掘方法吗? 然后阅读Rebecca Vickery文章的翻译,该文章发表在Medium上的Towards Data Science博客上! 她对初学者会很有趣。


获取质量数据是任何机器学习项目中的第一步,也是最重要的一步。 数据科学专家经常使用各种方法来获取数据集。 他们可以使用公开可用的数据,也可以使用通过API获得的数据或从各种数据库获得的数据,但大多数情况下会结合使用这些方法。

本文的目的是简要概述使用Python检索数据的三种不同方法。 我将告诉您如何使用Jupyter Notebook做到这一点。 在上一篇文章中,我写了一些在终端中运行的命令的应用程序。

的SQL


如果需要从关系数据库中获取数据,则很可能将使用SQL语言。 SQLAlchemy库允许您将便携式计算机代码与最常见的数据库类型相关联。 在这里,您将找到有关支持哪些数据库以及如何绑定到每种类型的信息。

您可以使用SQLAlchemy库浏览表和查询数据,或编写原始查询。 要绑定到数据库,您将需要一个带有凭据的URL。 接下来,您需要初始化create_engine方法来创建连接。

 from sqlalchemy import create_engine engine = create_engine('dialect+driver://username:password@host:port/database') 

现在,您可以编写数据库查询并获取结果。

 connection = engine.connect() result = connection.execute("select * from my_table") 

刮ing


Web抓取用于从网站下载数据并从其页面提取必要的信息。 有许多可用的Python库,但是最简单的是Beautiful Soup

您可以通过pip安装软件包。

 pip install BeautifulSoup4 

让我们看一个简单的示例如何使用它。 我们将使用Beautiful Soup和urllib库从TripAdvisor刮取酒店名称和价格。

首先,我们导入将要使用的所有库。

 from bs4 import BeautifulSoup import urllib.request 

现在加载我们将要剪贴的页面的内容。 我想收集有关希腊克里特岛上酒店价格的数据,并获取包含此地点酒店列表的URL地址。



下面的代码将URL定义为变量,并使用urllib库打开页面,并使用Beautiful Soup库读取它并以简单格式返回结果。 部分输出数据显示在代码下方。

 URL = 'https://www.tripadvisor.co.uk/Hotels-g189413-Crete-Hotels.html' page = urllib.request.urlopen(URL) soup = BeautifulSoup(page, 'html.parser') print(soup.prettify()) 



现在,让我们在页面上列出酒店名称的列表。 我们将介绍find_all函数,该函数将提取我们感兴趣的文档的一部分。 您可以使用find_all函数通过单行,正则表达式或列表来进行不同的过滤。 您还可以过滤掉标签属性之一-这正是我们将应用的方法。 如果您不熟悉HTML标记和属性,请参阅本文以获得快速概述。

为了了解如何最好地提供对标签中数据的访问,我们需要在页面上检查此元素的代码。 我们通过右键单击列表中的名称找到酒店名称的代码,如下图所示。



单击inspect将显示元素代码,并突出显示带有酒店名称的部分。



我们看到酒店的名称是该类中名称为listing_title的唯一文本。 在类之后是find_all函数的代码和该属性的名称,以及div标签。

 content_name = soup.find_all('div', attrs={'class': 'listing_title'}) print(content_name) 

带有酒店名称的代码的每个部分都作为列表返回。



要从代码中提取酒店名称,我们使用Beautiful Soup库的getText函数。

 content_name_list = [] for div in content_name: content_name_list.append(div.getText().split('\n')[0]) print(content_name_list) 

酒店名称将作为列表返回。



以同样的方式,我们获得价格数据。 价格的代码结构如下所示。



如您所见,我们可以使用与酒店代码非常相似的代码。

 content_price = soup.find_all('div', attrs={'class': 'price-wrap'}) print(content_price) 

就价格而言,几乎没有困难。 您可以通过运行以下代码来查看它:

 content_price_list = [] for div in content_price: content_price_list.append(div.getText().split('\n')[0]) print(content_price_list) 

结果如下所示。 如果在酒店列表中指示了降价,则除了一些文字外,还将返回初始价格和最终价格。 为了解决这个问题,我们只需返回今天的当前价格即可。



我们可以使用简单的逻辑来获取文本中指示的最新价格。

 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) 

这将给我们以下结果:



API


API-应用程序编程接口(来自英语应用程序编程接口)。 从数据挖掘的角度来看,它是一个基于Web的系统,可提供您可以通过编程联系的数据终结点。 通常,数据以JSON或XML格式返回。

这种方法可能会在机器学习中派上用场。 我将举一个简单的示例,从公共Dark Sky API检索天气数据。 要连接到它,您需要注册,并且每天将有1000个免费电话。 这应该足以进行测试。

要从Dark Sky访问数据,我将使用requests库。 首先,我需要获取请求的正确URL。 除了预报外,“暗夜空”还提供历史天气数据。 在此示例中,我将使用它们并从文档中获取正确的URL。

该URL的结构为:

 https://api.darksky.net/forecast/[key]/[latitude],[longitude],[time] 

我们将使用requests库来获取
特定经纬度以及日期和时间的结果。 想象一下,在提取克里特岛酒店的每日价格数据之后,我们决定确定价格政策是否与天气有关。

例如,让我们以列表中的酒店之一为坐标-Mitsis Laguna Resort&Spa。



首先,使用正确的坐标以及请求的时间和日期创建一个URL。 使用requests库,我们可以访问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 

为了使结果更易于阅读和分析,我们可以将数据转换为数据框。

 import pandas as pd df = pd.DataFrame.from_dict(json_normalize(result), orient='columns') df.head() 



使用这些方法还有许多其他选项可以自动提取数据。 如果是网络抓取,则可以编写不同的功能来自动执行该过程,并使提取更多天和/或更多地点的数据变得更加容易。 在本文中,我想回顾并提供足够的代码示例。 以下材料将更加详细:我将告诉您如何创建大型数据集并使用上述方法进行分析。

感谢您的关注!

Source: https://habr.com/ru/post/zh-CN460675/


All Articles