返回介绍

solution / 3000-3099 / 3087.Find Trending Hashtags / README

发布于 2024-06-17 01:02:57 字数 3632 浏览 0 评论 0 收藏 0

3087. 查找热门话题标签

English Version

题目描述

表:Tweets

+-------------+---------+
| Column Name | Type  |
+-------------+---------+
| user_id   | int   |
| tweet_id  | int   |
| tweet_date  | date  |
| tweet     | varchar |
+-------------+---------+
tweet_id 是这张表的主键 (值互不相同的列)。
这张表的每一行都包含 user_id, tweet_id, tweet_date 和 tweet。

编写一个解决方案来找到 2024 年 二月  3 热门话题 标签

返回结果表,根据标签的数量和标签 降序 排序。

结果格式如下所示。

 

示例 1:

输入:

Tweets 表:

+---------+----------+----------------------------------------------+------------+
| user_id | tweet_id | tweet                    | tweet_date |
+---------+----------+----------------------------------------------+------------+
| 135   | 13     | Enjoying a great start to the day! #HappyDay | 2024-02-01 |
| 136   | 14     | Another #HappyDay with good vibes!       | 2024-02-03 |
| 137   | 15     | Productivity peaks! #WorkLife        | 2024-02-04 |
| 138   | 16     | Exploring new tech frontiers. #TechLife    | 2024-02-04 |
| 139   | 17     | Gratitude for today's moments. #HappyDay   | 2024-02-05 |
| 140   | 18     | Innovation drives us. #TechLife        | 2024-02-07 |
| 141   | 19     | Connecting with nature's serenity. #Nature   | 2024-02-09 |
+---------+----------+----------------------------------------------+------------+
 

输出:

+-----------+--------------+
| hashtag   | hashtag_count|
+-----------+--------------+
| #HappyDay | 3      |
| #TechLife | 2      |
| #WorkLife | 1      |
+-----------+--------------+

解释:

  • #HappyDay:在 ID 为 13,14,17 的推文中出现,总共提及 3 次。
  • #TechLife:在 ID 为 16,18 的推文中出现,总共提及 2 次。
  • #WorkLife:在 ID 为 15 的推文中出现,总共提及 1 次。

注意:输出表分别按 hashtag_count 和 hashtag 降序排序。

解法

方法一:提取子串 + 分组

我们可以查询得到 2024 年 2 月的所有 tweet,利用 SUBSTRING_INDEX 函数提取 Hashtag,然后使用 GROUP BYCOUNT 函数统计每个 Hashtag 出现的次数,最后按照出现次数降序、Hashtag 降序排序,取前三个热门 Hashtag。

# Write your MySQL query statement below
SELECT
  CONCAT('#', SUBSTRING_INDEX(SUBSTRING_INDEX(tweet, '#', -1), ' ', 1)) AS hashtag,
  COUNT(1) AS hashtag_count
FROM Tweets
WHERE DATE_FORMAT(tweet_date, '%Y%m') = '202402'
GROUP BY 1
ORDER BY 2 DESC, 1 DESC
LIMIT 3;
import pandas as pd


def find_trending_hashtags(tweets: pd.DataFrame) -> pd.DataFrame:
  # 过滤数据框以获取特定日期的数据
  tweets = tweets[tweets["tweet_date"].dt.strftime("%Y%m") == "202402"]

  # 提取 Hashtag
  tweets["hashtag"] = "#" + tweets["tweet"].str.extract(r"#(\w+)")

  # 统计 Hashtag 出现次数
  hashtag_counts = tweets["hashtag"].value_counts().reset_index()
  hashtag_counts.columns = ["hashtag", "hashtag_count"]

  # 根据出现次数降序排序 Hashtag
  hashtag_counts = hashtag_counts.sort_values(
    by=["hashtag_count", "hashtag"], ascending=[False, False]
  )

  # 返回前三个热门 Hashtag
  top_3_hashtags = hashtag_counts.head(3)

  return top_3_hashtags

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文