python常用技术:5分钟入门Python的ETL库Bonobo
python常用技术:5分钟入门Python的ETL库Bonobo可以通过pip发出命令来安装它:我要使用的python库是bonobo。它是许多Python可用ETL库之一。选择的原因是我发现使用它来做ETL相对容易。它支持Python 3.5 ,因为我已经在使用Python 3.6,所以使用bonobo对我是顺理成章。ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过萃取(extract)、转置(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。--来源:百度百科您可以从文件,网站或某些数据库等数据源中提取数据,转换采集的数据,然后将最终版本加载到数据库中以供业务使用。您可能会问,为什么ETL?以及ETL做了什么,许多人可能已经通过编写不同的函数/脚本来执行任务, ETL的一个主要优点是可视化整个数据流通路,洞悉这些的你从而能更好的掌控数据。下面介绍如
作者:Adnan Siddiqi in Python Pandemonium 翻译:美茹 校对:Jackie.March 本文有1134字,大约需要5分钟阅读。 概述
这篇文章通过引入ETL并解释了其含义,推出了基于Python的好用ETL库,bonobo的安装和简单入门,最后通过一个真实案例让大家能掌握该库的基本用法。
5分钟入门Python的ETL库Bonobo
在这篇文章中,将讨论如何使用Bonobo库在Python中编写ETL作业。进入正题前,说下 ETL以及为什么需要它?
什么是ETL?ETL,是英文Extract-Transform-Load的缩写
ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过萃取(extract)、转置(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。--来源:百度百科
您可以从文件,网站或某些数据库等数据源中提取数据,转换采集的数据,然后将最终版本加载到数据库中以供业务使用。您可能会问,为什么ETL?以及ETL做了什么,许多人可能已经通过编写不同的函数/脚本来执行任务, ETL的一个主要优点是可视化整个数据流通路,洞悉这些的你从而能更好的掌控数据。
下面介绍如何用Python开始编写我们的第一个ETL。
Python 库bonobo我要使用的python库是bonobo。它是许多Python可用ETL库之一。选择的原因是我发现使用它来做ETL相对容易。它支持Python 3.5 ,因为我已经在使用Python 3.6,所以使用bonobo对我是顺理成章。
可以通过pip发出命令来安装它:
pip install
好吧,安装了库,让我们编写一个非常简单的ETL工作。我正在使用他们的Github Repo上给出的例子。
import bonobo def generate_data(): yield 'bar' def uppercase(x: str): def output(x: str): graph = bonobo.Graph( uppercase ) if __name__ == '__main__':
它没有做出令人惊奇的事情,它所做的只是将输入数据转换为大写然后打印它。剩下可视化部分,为此bonobo提供了一种将graphviz库用于图形的方法。安装完成后,您将执行以下两个命令:第一个用于生成dot文件,另一个用于从dot文件生成图形图像文件。
bonobo inspect --graph etl.py> etl.dot
然后
dot -o etl.png -T png etl.dot
这将产生如下图形图像:
您还可以通过执行来查看输入数据发生的情况bonobo run。对于上面的示例,它显示如下:
当然,这是只是一个简单示例,下面来通过处理=真实数据来实践ETL。
下面来通过处理=真实数据来实践ETL
我将制作一些房地产网站记录的ETL。要达到的目标是从Redfin和Zillow这2个站点获取数据。目标是从每个站点捕获价格,然后将它们转换为标准化格式供以后使用。在我们的例子中,它是在清理后将price字符串转换float为文本文件。以下是代码:
import bonobo from bs4 import BeautifulSoup def scrape_zillow(): status = '' https://www.zillow.com/homedetails/41-Norton-Ave-Dallas-PA-18612/2119501298_zpid/' if r.status_code == 200: soup = BeautifulSoup(html 'lxml') if len(price_status_section) > 1: return price def scrape_redfin(): status = '' https://www.redfin.com/TX/Dallas/2619-Colby-St-75204/unit-B/home/32251730' if r.status_code == 200: soup = BeautifulSoup(html 'lxml') if price_section: return price def extract(): yield scrape_redfin() def transform(price: str): return float(t_price) def load(price: float): f.write((str(price) '\n')) if __name__ == '__main__': 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML like Gecko) Chrome/56.0.2924.87 Safari/537.36' https://google.com' # scrape_redfin() extract load bonobo.run(graph)
这里主要介绍ETL,所以暂时忽略爬取数据部分。程序创建了两个独立的函数,然后用于yield使它们可用于ETL,然后,执行清理数据函数,然后load用于在转换后保存到文件中float。
结论在这篇文章中,您学习了如何使用bonobo库以Python语言编写ETL作业。这是一个入门和实践的的基本演示。希望对喜爱Python的你有所帮助。后面会讨论更多的Python数据分析的内容,感兴趣的朋友可以关注下。