目录
一、案例背景
在社交媒体蓬勃发展的当下,热点话题如同病毒般迅速传播,吸引着海量用户参与讨论、分享和互动。这些热点话题不仅反映了公众的兴趣点和社会趋势,还蕴含着巨大的商业价值与营销机会。无论是企业制定营销策略,还是媒体把握舆论导向,亦或是研究人员洞察社会动态,都需要深入了解热点话题在社交媒体上的传播规律以及用户参与模式。Python 凭借其强大的数据处理、分析和可视化能力,成为剖析此类现象的得力工具。通过对社交媒体平台数据的挖掘与分析,可以揭示热点话题传播的关键因素,洞察用户行为背后的动机,为各方决策提供有力支持 。
二、代码实现
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import requests
from bs4 import BeautifulSoup
from wordcloud import WordCloud
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
2.1 数据收集
以微博平台为例,利用 Python 的爬虫技术获取热点话题相关数据。微博开放了部分 API 接口,可通过申请开发者权限获取数据访问密钥。此外,也可使用网页爬虫技术获取公开页面数据。以下是一个简单的网页爬虫示例,用于获取微博热门话题页面的话题标题、发布时间和讨论量。
url = 'https://s.weibo.com/top/summary?cate=realtimehot'
headers = {
'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers = headers)
soup = BeautifulSoup(response.text, 'html.parser')
topic_data = []
topic_items = soup.find_all('tr', class_='item')
for item in topic_items:
rank = item.find('td', class_='td-01 ranktop').text.strip()
title = item.find('a', class_='td-02').text.strip()
discuss_count = item.find('td', class_='td-03').text.strip()
topic_data.append({'Rank': rank, 'Title': title, 'Discuss_Count': discuss_count})
topic_df = pd.DataFrame(topic_data)
topic_df['Discuss_Count'] = topic_df['Discuss_Count'].str.replace('万', '0000').astype(int)
2.2 数据探索性分析
# 查看数据基本信息
print(topic_df.info())
# 查看数据集行数和列数
rows, columns = topic_df.shape
print(f"数据集包含 {rows} 行和 {columns} 列")
# 查看前几行数据
print(topic_df.head())
# 统计热门话题讨论量的分布
sns.histplot(topic_df['Discuss_Count'], kde = True)
plt.title('Distribution of Topic Discussion Counts')
plt.xlabel('Discussion Count')
plt.ylabel('Frequency')
plt.show()
2.3 数据清洗
# 检查并处理缺失值
print(topic_df.isnull().sum())
topic_df.dropna(inplace = True)
# 去除重复记录
topic_df = topic_df.drop_duplicates()
2.4 数据分析
2.4.1 热点话题传播趋势分析
为了深入分析热点话题的传播趋势,我们需要进一步获取话题在不同时间点的热度数据。可以通过定时抓取微博话题页面,记录每个话题在不同时刻的讨论量变化。假设我们已经获取了一段时间内(如一周)多个话题的每日讨论量数据,存储在topic_trend_data.csv
文件中,文件包含话题标题、日期和当日讨论量。
trend_data = pd.read_csv('topic_trend_data.csv')
trend_data['Date'] = pd.to_datetime(trend_data['Date'])
# 以某一热门话题为例,绘制其传播趋势曲线
target_topic = '示例热门话题'
topic_trend = trend_data[trend_data['Title'] == target_topic]
plt.figure(figsize=(12, 6))
plt.plot(topic_trend['Date'], topic_trend['Daily_Discuss_Count'], marker='o')
plt.title(f'Spread Trend of Topic: {target_topic}')
plt.xlabel('Date')
plt.ylabel('Daily Discussion Count')
plt.grid(True)
plt.show()
2.4.2 用户参与行为聚类分析
假设我们还获取了参与热点话题讨论的部分用户数据,包括用户的粉丝数、关注数、发布微博数、参与话题