此项目在 Azure 中使用 Bing 新闻 API 创建一个端到端的数据工程项目,借助 Microsoft Fabric 分析每条奥运新闻的情感倾向。
End-to-End Azure Data Engineering using Microsoft Fabric Architecture.
项目简介:为了这个项目,我分析了最近结束的2024年巴黎奥运会相关新闻的情感倾向。我使用Bing Search v7引擎从微软必应搜索引擎获取所有相关报道,并分析了特定时间段内每篇新闻的情感倾向。
我选择了Bing的API,因为与API合作是职业生涯中不可避免的一部分。在这个项目中,我做了以下几件事:
- 在 Azure 中创建 Bing 搜索资源。
- 数据导入。
- 带有增量加载的数据转换。
- 带有增量加载的情感分析。
- 在 Power BI 中进行数据可视化和报表。
- 使用数据激活器在 Teams 中设置提醒。
这个项目真让我激动,我们能够戴上数据分析师、数据工程师和数据科学家的帽子。听起来是不是很酷?
那么,咱们开始吧。
该项目的前提条件- 你需要一个 Microsoft Fabric Trial 账户。在这里创建一个 这里。
- 你需要一个 Azure 的免费试用账户或者学生账户。
我创建了一个名为 AzureXfabric_rg 的资源组,并在 Azure 市场中搜索了 Bing Search v7 API 来创建 Bing 搜索 API 资源。我选择了 F1(每秒 3 次调用,每月 1k 次调用) 的免费层级,因为它免费。查看其他价格层级。
在 Azure 中创建 Bing 搜索资源。
2. 数据导入。为了我们这个数据湖,我创建了一个名为bing_olympic_news_db的Microsoft Fabric湖仓。我将通过一个数据管道(olympic-news-ingestion-pipeline)连接到我们之前在Azure中创建的Bing搜索API。此外,我们还将配置我们的数据源和目的地。
Configuring the Copy Activity in the Olympic news Ingestion Pipeline.
2.1 设置数据来源:为了连接到源数据,我们将使用Fabric中提供的Rest连接来连接到Azure中的Bing搜索API资源。点击Source > 新建连接 > Rest 并按以下步骤设置连接。
利用Microsoft News Search APIs v7参考中的端点(Endpoint)通过REST API连接。
要成功连接到Bing搜索资源新闻搜索API V7,我们需要输入以下参数给源数据:
1. 我们需要Endpoints获取基础URL以连接到Azure — (https://api.bing.microsoft.com/v7.0/news/search)。
2. 根据我们的搜索词的查询参数 — (?q =olympic+news&count =100&freshness =Week)。如果您熟悉使用这些参数,可以将其设置为动态。
3. 我们需要获取所需的Header(Ocp-Apim-Subscription-Key)。这是您在Azure中注册Bing资源时获得的订阅密钥,您可以通过创建Bing资源来获取。
来自新搜索API的必应资源数据摄取
2.2 设置数据目的地。我们将目的地设置为我们之前创建的bing_olympic_news_db Lakehouse。我还创建了一个名为olympic-news.json的文件,并将文件格式设为JSON。
设置目标到数据湖仓并指定文件路径和文件格式。
3. 带增量加载的数据处理我们的数据成功导入并保存到我们的Lakehouse的文件区,文件名为olympi-news.json文件。
是时候清理我们湖屋中的olympi-news.json文件了,我们还将使用Microsoft Fabric中的Spark作业以类型1的慢变化维度(SCD)的方式,将数据以增量方式加载到Lakehouse中。
下载我在GitHub上使用的用于提取、转换和加载(ETL)olympi-news到olympic_news_updated数据的ipynb笔记本。
在这里下载
A snapshot of the Transformed data of the Olympic News.
4. 情感分析及逐步加载。我将使用SynapseML(以前称为MMLSpark)进行情感分析,它是一个可在Microsoft Fabric中使用的开源库。我们将使用一个预构建的智能模型来进行机器学习任务,并根据新闻的描述列预测奥运会新闻的情感倾向。新闻的描述列包含新闻文章的详细描述。
我们将根据新闻中的文本内容来预测情绪。如以下所示,我们使用了预构建的SynapseML中的AnalyzeText模型。
#导入所需的包
import synapse.ml.core
from synapse.ml.services import AnalyzeText
#初始化模型并配置输入和输出列
model = (AnalyzeText()
.setTextCol("description") # 设置情感分析列
.setKind("SentimentAnalysis") # 指定要使用的情感分析模型
.setOutputCol("response")
.setErrorCol("error"))
#将模型应用于我们的数据框
result = model.transform(df)
display(result.limit(10))
#从response列中提取情感列
from pyspark.sql.functions import col
sentiment_df = result.withColumn("sentiment", col("response.documents.sentiment"))
display(sentiment_df.limit(7))
#移除错误和响应列
sentiment_df_final = sentiment_df.drop("error","response")
display(sentiment_df_final.limit(10))
在成功运行了上述代码块之后,我们创建了一个名为 sentiments 的新列,根据情感将奥运新闻分为 积极、消极、中立和混合情感 这四类。(情感类别)
实现类型1缓慢变化维度(Slowly Changing Dimension,SCD)的方式来避免在增量加载过程中重复加载数据。所以我用的是类型1,因为我对保留现有数据的历史记录没有兴趣。
# 我们将使用类型1 SCD的增量加载方法来处理我们的数据。
'''在类型1 SCD中,新的数据会覆盖现有的数据,而不会产生重复。因此,现有的数据会被丢失,因为它不会被存储在其他地方。这通常用于不需要保留数据历史的情况。.'''
from pyspark.sql.utils import AnalysisException
# 异常处理部分
try:
table_name = "bing_olympic_news_db.sentiment_analysis"
sentiment_df_final.write.format("delta").saveAsTable(table_name)
except AnalysisException:
print("表已存在!")
sentiment_df.createOrReplaceTempView("vw_sentiment")
spark.sql(f""" MERGE INTO {table_name} target_table
USING vw_sentiment source_view
ON source_view.link = target_table.link -- 这里匹配链接
WHEN MATCHED AND
source_view.title <> target_table.title OR
source_view.description <> target_table.description OR
source_view.image <> target_table.image OR
source_view.link <> target_table.link OR
source_view.datePublished <> target_table.datePublished OR
source_view.provider <> target_table.provider OR
source_view.published_date <> target_table.published_date OR
source_view.published_time <> target_table.published_time
THEN UPDATE SET target_table.* = source_view.*
WHEN NOT MATCHED THEN INSERT source_view.*
""")
在将我的报告在Power BI中可视化之前,下图显示管道已成功安排调度。每日的奥运新闻调度将在2024年8月31日结束。
奥运新闻的每日更新时间表。
这是根据奥林匹克新闻搜索参数得到的成功结果。
奥运新闻流水线成功了
5. Power BI 中的数据可视化技术。以下是过去7天的奥运新闻数据可视化报告。发布了超过100条新闻报道,其中只有17%的新闻具有正面情绪。在进行这项分析时。
2024年巴黎奥运会的情感分析面板
6. 使用数据触发器设置带有 Microsoft Teams 通知的警报功能。在上面的图表中,点击卡片视图并选择设置警报。设置警报的面板将如图弹出。我创建了一个名为积极警报项的警报,并希望当积极情感超过17%时收到Teams消息提醒。
启用带有数据触发器的正面情绪提醒。
以下是来自我们数据激活工具的预览信息,显示警报已成功为该可视化创建。作为警报的接收者,当条件达成时,报告发生变化时,我会收到一条消息。
在创建的积极警报项目中设置警报接收人。
谢谢你的阅读.
记得订阅并关注我,了解更多有趣的内容。如果你有任何问题或想法,可以通过我的社交媒体平台与我交流。
LinkedIn: _Musili Adebayo
Twitter:_MusiliAdebayo
附:喜欢这篇文章不?直接支持我一下
共同学习,写下你的评论
评论加载中...
作者其他优质文章