为了账号安全,请及时绑定邮箱和手机立即绑定

微软Fabric平台上的 Bing 新闻搜索——一份端到端的数据工程项目实践:以巴黎奥运会新闻情感分析为例

此项目在 Azure 中使用 Bing 新闻 API 创建一个端到端的数据工程项目,借助 Microsoft Fabric 分析每条奥运新闻的情感倾向。

A rectangular-shaped box showing the 基于 Microsoft Fabric 架构的从头到尾的 Azure 数据工程。

End-to-End Azure Data Engineering using Microsoft Fabric Architecture.

项目简介:

为了这个项目,我分析了最近结束的2024年巴黎奥运会相关新闻的情感倾向。我使用Bing Search v7引擎从微软必应搜索引擎获取所有相关报道,并分析了特定时间段内每篇新闻的情感倾向。

我选择了Bing的API,因为与API合作是职业生涯中不可避免的一部分。在这个项目中,我做了以下几件事:

  1. 在 Azure 中创建 Bing 搜索资源。
  2. 数据导入。
  3. 带有增量加载的数据转换。
  4. 带有增量加载的情感分析。
  5. 在 Power BI 中进行数据可视化和报表。
  6. 使用数据激活器在 Teams 中设置提醒。

这个项目真让我激动,我们能够戴上数据分析师、数据工程师和数据科学家的帽子。听起来是不是很酷?

那么,咱们开始吧。

该项目的前提条件
  1. 你需要一个 Microsoft Fabric Trial 账户。在这里创建一个 这里
  2. 你需要一个 Azure 的免费试用账户或者学生账户。
1. 创建一个 Azure 中的 Bing 搜索工具。

我创建了一个名为 AzureXfabric_rg 的资源组,并在 Azure 市场中搜索了 Bing Search v7 API 来创建 Bing 搜索 API 资源。我选择了 F1(每秒 3 次调用,每月 1k 次调用) 的免费层级,因为它免费。查看其他价格层级

A square-shaped box showing how I provisioned and configure the Bing Search Resource in Azure.

在 Azure 中创建 Bing 搜索资源。

2. 数据导入。

为了我们这个数据湖,我创建了一个名为bing_olympic_news_db的Microsoft Fabric湖仓。我将通过一个数据管道(olympic-news-ingestion-pipeline)连接到我们之前在Azure中创建的Bing搜索API。此外,我们还将配置我们的数据源和目的地。

A rectangular-shaped box showing how to 在奥运新闻摄取管道中配置数据复制。

Configuring the Copy Activity in the Olympic news Ingestion Pipeline.

2.1 设置数据来源:

为了连接到源数据,我们将使用Fabric中提供的Rest连接来连接到Azure中的Bing搜索API资源。点击Source > 新建连接 > Rest 并按以下步骤设置连接。

A square-shaped box explaining how to configure the Rest API connection using the Endpoint on Microsoft News Search APIs v7 reference.

利用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资源来获取。

A square-shaped box showing the data Ingestion from the Bing Resource New Search API.

来自新搜索API的必应资源数据摄取

2.2 设置数据目的地。

我们将目的地设置为我们之前创建的bing_olympic_news_db Lakehouse。我还创建了一个名为olympic-news.json的文件,并将文件格式设为JSON

A squared-shaped box showing how to configure the destination to the Lakehouse, the file path and, file format.

设置目标到数据湖仓并指定文件路径和文件格式。

我们的数据成功导入并保存到我们的Lakehouse的文件区,文件名为olympi-news.json文件。

3. 带增量加载的数据处理

是时候清理我们湖屋中的olympi-news.json文件了,我们还将使用Microsoft Fabric中的Spark作业以类型1的慢变化维度(SCD)的方式,将数据以增量方式加载到Lakehouse中。

下载我在GitHub上使用的用于提取、转换和加载(ETL)olympi-news到olympic_news_updated数据的ipynb笔记本
在这里下载

A rectangular-shaped box showing 奥运会新闻转换数据的快照

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日结束。

A square-shaped box showing the daily schedule of the Pipeline Run of the Olympic news.

奥运新闻的每日更新时间表。

这是根据奥林匹克新闻搜索参数得到的成功结果。

A rectangular-shaped box showing the daily schedule of the Pipeline Run of the Olympic news.

奥运新闻流水线成功了

5. Power BI 中的数据可视化技术。

以下是过去7天的奥运新闻数据可视化报告。发布了超过100条新闻报道,其中只有17%的新闻具有正面情绪。在进行这项分析时。

A square-shaped box showing the sentiment analysis Dashboard of the Olympic Games Paris 2024.

2024年巴黎奥运会的情感分析面板

6. 使用数据触发器设置带有 Microsoft Teams 通知的警报功能。

在上面的图表中,点击卡片视图并选择设置警报。设置警报的面板将如图弹出。我创建了一个名为积极警报项的警报,并希望当积极情感超过17%时收到Teams消息提醒

A rectangular-shaped box showing how to set up the Positive Sentiment Alert with Data Activator.

启用带有数据触发器的正面情绪提醒。

以下是来自我们数据激活工具的预览信息,显示警报已成功为该可视化创建。作为警报的接收者,当条件达成时,报告发生变化时,我会收到一条消息。

A rectangular-shaped box showing how to set up the Recipient of the Alert in the created Positive Alert Item.

在创建的积极警报项目中设置警报接收人。

谢谢你的阅读.

记得订阅并关注我,了解更多有趣的内容。如果你有任何问题或想法,可以通过我的社交媒体平台与我交流。
LinkedIn: _Musili Adebayo
Twitter:
_MusiliAdebayo

附:喜欢这篇文章不?直接支持我一下

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消