写点什么

从多个数据源中提取数据进行 ETL 处理并导入数据仓库

  • 2023-04-20
    安徽
  • 本文字数:2374 字

    阅读完需:约 8 分钟

ETL(Extract, Transform, Load)是一种广泛应用于数据处理和数据仓库建设的方法论,它主要用于从各种不同的数据源中提取数据,经过一系列的处理和转换,最终将数据导入到目标系统中。本文将介绍如何使用 Python 进行 ETL 数据处理的实战案例,包括从多个数据源中提取数据、进行数据转换和数据加载的完整流程。

一、数据来源

在本次实战案例中,我们将从三个不同的数据源中提取数据进行处理,包括:


  1. MySQL 数据库中的销售数据表,其中包括订单 ID、产品名称、销售额、销售日期等信息。

  2. MongoDB 数据库中的用户行为数据集合,其中包括用户 ID、行为类型、行为时间等信息。

  3. Excel 文件中的客户数据,其中包括客户 ID、客户名称、联系方式等信息。


我们需要从这三个数据源中提取数据,并将其导入到数据仓库中进行进一步的分析和处理。

二、数据提取

数据提取是 ETL 过程的第一步,我们需要从源数据中获取需要的数据。在本次实战案例中,我们使用 Python 的 pandas 库和 pymongo 库来读取 MySQL 数据库、MongoDB 数据库和 Excel 文件中的数据,并将其转换为 DataFrame 对象,如下所示:

import pandas as pdimport pymongoimport pymysqlimport xlrd
# 连接MySQL数据库conn_mysql = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='sales')sql = 'SELECT * FROM sales_data'df_mysql = pd.read_sql(sql, con=conn_mysql)
# 连接MongoDB数据库conn_mongo = pymongo.MongoClient('mongodb://localhost:27017/')db_mongo = conn_mongo['user_behavior']col_mongo = db_mongo['user_actions']df_mongo = pd.DataFrame(list(col_mongo.find()))
# 读取Excel文件中的数据df_excel = pd.read_excel('customer_data.xlsx')
复制代码

通过上述代码,我们成功将 MySQL 数据库中的销售数据表、MongoDB 数据库中的用户行为数据集合和 Excel 文件中的客户数据读取为 DataFrame 对象,并可以使用 pandas 提供的各种方法进行数据处理和转换。

三、数据转换

数据转换是 ETL 过程的核心步骤,它将原始数据转换为目标格式,以便于后续的处理和分析。在本次实战案例中,我们需要对从三个数据源中提取的数据进行一些处理和转换,包括:


  1. 将 MySQL 数据库中的销售日期转换为日期类型,并提取出销售额的前两位作为销售分类。

  2. 将 MongoDB 数据库中的行为时间转换为日期类型,并提取出日期、小时、分钟等信息作为新的列。

  3. 对 Excel 文件中的客户数据进行清洗和整理,去除重复项,并将客户名称转换为大写字母格式。


下面是针对这些数据转换需求的代码实现:

# 将MySQL中的销售日期转换为日期类型,并提取销售额的前两位作为销售分类df_mysql['sales_date'] = pd.to_datetime(df_mysql['sales_date'], format='%Y-%m-%d')df_mysql['sales_category'] = df_mysql['sales_amount'].apply(lambda x: str(x)[:2])
# 将MongoDB中的行为时间转换为日期类型,并提取日期、小时、分钟等信息作为新的列df_mongo['action_time'] = pd.to_datetime(df_mongo['action_time'], unit='ms')df_mongo['action_date'] = df_mongo['action_time'].dt.datedf_mongo['action_hour'] = df_mongo['action_time'].dt.hourdf_mongo['action_minute'] = df_mongo['action_time'].dt.minute
# 对Excel中的客户数据进行清洗和整理,去除重复项,并将客户名称转换为大写字母格式df_excel.drop_duplicates(subset=['customer_id'], inplace=True)df_excel['customer_name'] = df_excel['customer_name'].str.upper()
复制代码

通过上述代码,我们成功将 MySQL 数据库中的销售数据、MongoDB 数据库中的用户行为数据和 Excel 文件中的客户数据转换为了目标格式,并且可以继续使用 pandas 提供的各种方法进行数据处理和分析。

四、数据加载

数据加载是 ETL 过程的最后一步,它将转换后的数据导入到目标系统中进行存储和分析。在本次实战案例中,我们将转换后的数据导入到 MySQL 数据库中的数据仓库中进行存储和分析。下面是将转换后的数据导入到 MySQL 数据库中的代码实现:

import pymysql
# 连接MySQL数据库conn_mysql = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='data_warehouse')
# 将MySQL中的销售数据插入到数据仓库中的sales表中df_mysql.to_sql(name='sales', con=conn_mysql, if_exists='append', index=False)
# 将MongoDB中的用户行为数据插入到数据仓库中的user_actions表中df_mongo.to_sql(name='user_actions', con=conn_mysql, if_exists='append', index=False)
# 将Excel中的客户数据插入到数据仓库中的customers表中df_excel.to_sql(name='customers', con=conn_mysql, if_exists='append', index=False)
复制代码

通过上述代码,我们使用 pandas 提供的 to_sql()方法将转换后的数据插入到 MySQL 数据库的数据仓库中。其中,参数 if_exists='append’表示如果表已经存在,则将新数据追加到已有数据的末尾,而不是覆盖原有数据。

五、总结

本文介绍了如何使用 Python 进行 ETL 数据处理的实战案例,包括从多个数据源中提取数据、对数据进行清洗和转换,以及将转换后的数据加载到目标系统中进行存储和分析。在实际工作中,ETL 是数据处理的重要环节,它可以帮助我们从多个数据源中提取、清洗和整理数据,以便进行更好的数据分析和业务决策。


在本次实战案例中,我们使用了pandaspymongopymysql等 Python 库,它们提供了丰富的数据处理和数据库操作方法,帮助我们完成了数据 ETL 的整个过程。同时,我们还介绍了 ETL 的三个关键步骤:数据提取、数据转换和数据加载,这些步骤对于实际的数据处理非常重要。


总之,ETL 是数据处理过程中不可或缺的一环,它能够帮助我们从多个数据源中提取、清洗和整理数据,使得数据分析和业务决策变得更加高效和准确。在实际工作中,我们可以结合具体业务需求和数据处理工具,使用 Python 等编程语言进行数据 ETL 处理,以满足业务上的需求。

发布于: 2023-04-20阅读数: 4
用户头像

公众号:海拥 2021-11-29 加入

【个人网站】haiyong.site 【联系方式】微信:wh18363 【软件技能】前端,Java,Python 【个人称号】InfoQ 写作社区签约作者,华为云享专家,CSDN原力作者,全栈领域优质创作者,掘金2021年度人气作者No.21

评论

发布
暂无评论
从多个数据源中提取数据进行ETL处理并导入数据仓库_三周年连更_海拥(haiyong.site)_InfoQ写作社区