Python分析人民日报关于台湾的报道

news2024/12/23 13:49:36

【项目背景】

《人民日报》数据挖掘,时间:1949.10.1-2023.12.31 标题含有“台湾”的报道

需要以下内容

1、标题,即上述时间段的报道标题和相应的报道时间、版面

2、包含标题、时间、版面的所有报道内容

3、报道的年份和数量的趋势图

4、词频图表,1949.10.1-1978.12.31,1979.1.1-2016.5.20,2016.5.21-2023.12.31,三个时间段的人民日报标题的词频图三张,词频图表需显示出高频词是什么,分别占比多少;

5.需添加数据挖掘过程简要说明:用了什么python 哪一版进行数据挖掘;通过python 或其他软件统计词频,因什么原因剔除了什么,得到什么结果。

基本原理

通过编写爬虫程序抓取《人民日报》从1949年10月1日到2023年12月31日的新闻数据,再对抓取到的新闻数据进行词频分析,绘制报道数量和年份趋势图,以及三个时间段的人民日报标题的词频图,从而获取所需的数据。

核心代码

import pandas as pd
from bs4 import BeautifulSoup
import requests
import matplotlib.pyplot as plt
from collections import Counter

# 设置所需参数
url = 'http://paper.people.com.cn/rmrb/html/2018-01/01/content_180019891.htm'
start_date = '1949-10-01'
end_date = '2023-12-31'
url_pattern = 'http://paper.people.com.cn/rmrb/{}/{}/index.shtml'

# 定义爬虫函数
def get_news_data(url_pattern, start_date, end_date):
    news_data = []
    for year in range(start_date[0], end_date[0] + 1):
        year_str = '-'.join(str(year))
        for month in range(1, 13):
            month_str = '-'.join(str(year), str(month).zfill(2))
            if year == end_date[0] and month > end_date[1]:
                break
            if month < 10:
                month_str = month_str[0:2] + '.0' + month_str[2:]
            url = url_pattern.format(year_str, month_str)
            print(url)
            page = requests.get(url)
            soup = BeautifulSoup(page.text, 'html.parser')
            titles = soup.find_all('title')[0:50]
            for title in titles:
                news_data.append({
                    'title': title.get_text(), 
                    'time': title.parent.parent.find('span', 'date').get_text(),
                    'page': title.parent.parent.parent.find('span', 'page').get_text()
                })
    df = pd.DataFrame(news_data)
    df['date'] = pd.to_datetime(df['date'])
    df['year'] = df['date'].dt.year
    df['month'] = df['date'].dt.month
    return df

# 绘制报道数量和年份趋势图
def plot_year_trend(df):
    df.groupby('year')['date'].count().plot()
    plt.title('报道数量趋势图')
    plt.show()

# 词频分析
def count_word(df):
    words_1949_1978 = Counter(df[(df.year < 1979) & (df.year >= 1949)].title.apply(lambda x: str(x).split()))
    words_1979_2016 = Counter(df[(df.year >= 1979) & (df.year < 2017)].title.apply(lambda x: str(x).split()))
    words_2017_2023 = Counter(df[(df.year >= 2017) & (df.year <= 2023)].title.apply(lambda x: str(x).split()))
    top_words_1949_1978 = [word[0] for word in words_1949_1978.most_common(20)]
    top_words_1979_2016 = [word[0] for word in words_1979_2016.most_common(20)]
    top_words_2017_2023 = [word[0] for word in words_2017_2023.most_common(20)]
    top_words = top_words_1949_1978 + top_words_1979_2016 + top_words_2017_2023
    print('高频词')
    for index, word in enumerate(top_words, start=1):
        print(f'{index}. {word} {words_1949_1978.get(word, 0) + words_1979_2016.get(word, 0) + words_2017_2023.get(word, 0)}')

# 运行程序
df = get_news_data(url_pattern, start_date, end_date)
plot_year_trend(df)
count_word(df)

注意事项

  • 使用的爬虫框架是 Python requests 和 BeautifulSoup,需要注意 User- Agent 的切换以防止被反爬虫机制识别
  • 由于请求速度的问题,需要注意数据的抓取速度,需要分批抓取,防止服务器压力过大
  • 在词频分析的过程中,需要注意去除非汉字字符,因为人民日报中也包含英文、数字等非汉字字符,这些字符对于词频分析没有帮助,反而会影响结果的准确性。可以通过正则表达式等方式去除这些非汉字字符。
  • 在绘制词频图时,由于数据量较大,需要使用对数坐标轴或者将数据聚合到更高的层级(如每周、每月)以避免数据过于稀疏难以观察。
  • 由于人民日报的版面众多,本示例代码只抓取了头版的标题和时间,如果需要抓取更多版面的信息,可以修改代码中的 URL 拼接方式以及解析 HTML 的方式。
  • 由于人民日报的报道量巨大,本示例代码只抓取了部分数据进行分析,如果需要更全面的数据分析,可以考虑使用分布式爬虫或者并行计算等技术提高数据抓取和分析的效率。
  • 在数据挖掘过程中,还需要注意数据的质量和完整性,如缺失值、重复值等问题,需要进行适当的数据清洗和处理。同时,还需要遵守相关法律法规和伦理规范,确保数据使用的合法性和正当性。

civilpy:Python分析无人驾驶汽车在桂林市文旅行业推广的问卷0 赞同 · 0 评论文章​编辑

civilpy:Python数据分析及可视化实例目录940 赞同 · 36 评论文章​编辑

civilpy:Python通过某上市企业经营业绩预测股价走势0 赞同 · 0 评论文章​编辑

civilpy:Python实时追踪关键点组成人体模型0 赞同 · 0 评论文章​编辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1533064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CV论文--2024.3.21

1、Chain-of-Spot: Interactive Reasoning Improves Large Vision-Language Models 中文标题&#xff1a;Chain-of-Spot&#xff1a;交互式推理改进大型视觉语言模型 简介&#xff1a;在视觉语言理解领域&#xff0c;模型在解释和推理视觉内容方面的熟练程度已经成为许多应用的…

企业组织机构代码查询入口词令直达关键词口令是什么?

什么是企业组织机构代码&#xff1f; 组织机构代码是国内依法注册、依法登记的机关、企事业单位、社会团体&#xff0c;以及其他组织机构颁发一个在全国范围内唯一的、始终不变的代码标识。组织机构代码在单位的运营和管理中发挥着重要作用。 如何查询获取企业组织机构代码&a…

【机器学习】基于萤火虫算法优化的BP神经网络分类预测(FA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】萤火虫算法&#xff08;FA&#xff09;原理及实现 2.设计与实现 数据集&#xff1a; 多输入多输出&#xff1a;样本特征24&#xff0c;标签类别4。…

一些常见漏洞原理

一些漏洞的原理&#xff1a; SQL注入漏洞&#xff1a; SQL注入漏洞主要形成的原因是在数据交互中&#xff0c;前端的数据传入到后台处理时&#xff0c;没有做严格的判断&#xff0c;导致其传入的“数据”拼接到SQL语句中后&#xff0c;被当作SQL语句的一部分执行。 从而导致数…

day65 分层实现商品管理系统

分层实现商品管理系统 事务的特点&#xff0c;隔离级别的分类 在java中如何实现事务的操作 商品信息&#xff1a; 在goods表中作为子表引用class主表的主键作为goods表的外键 有对应主外键关联时也就是n对1的关系时 在使用jdbc技术时goods类对象要包含class类对象作为goods对…

从浏览器地址栏输入 URL 到请求返回发生了什么?

从浏览器地址栏输入 URL 到请求返回发生了什么&#xff1f; 从浏览器地址栏输入 URL 到请求返回发生了什么&#xff1f;简略的答案什么是 URL&#xff1f;DNS域名解析TCP建立连接&#xff1a;三次握手发送HTTP请求消息结构请求报文请求行请求头请求体 响应报文响应行响应头响应…

Vue 计算属性和watch监听

1.1.计算属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- 引入vue.js --><script src"node_modules/vue/dist/vue.js"></script> </h…

LeetCode 刷题 --- 快速幂

前言&#xff1a; 幂运算是一种常见的运算&#xff0c;求取a^n,最容易想到的方法便是通过循环逐个累乘&#xff0c;其复杂度为O(n)&#xff0c;这在很多时候是不够快的&#xff0c;所以我们需要一种算法来优化幂运算的过程。 快速幂&#xff0c;二进制取幂&#xff08;Binary…

【视频图像取证篇】模糊图像增强技术之去噪声类滤波场景应用小结

【视频图像取证篇】模糊图像增强技术之去噪声类滤波场景应用小结 模糊图像增强技术之去噪声类滤波场景应用小结—【蘇小沐】 文章目录 【视频图像取证篇】模糊图像增强技术之去噪声类滤波场景应用小结&#xff08;一&#xff09;去噪声类滤波器1、去块滤波器&#xff08;Deblo…

基于Vue.js和D3.js的智能停车可视化系统

引言 随着物联网技术的发展&#xff0c;智能停车系统正逐渐普及。前端作为用户交互的主要界面&#xff0c;对于提供直观、实时的停车信息至关重要。 目录 引言 一、系统设计 二、代码实现 1. 环境准备 首先&#xff0c;确保您的开发环境已经安装了Node.js和npm。然后&…

Qt 多元素控件

Qt开发 多元素控件 Qt 中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView xxWidget 和 xxView 之间的区别 以 QTableWidget 和 QTableView 为例. QTableView 是基于 MVC 设计的控件. QTableView 自身不持有数据. 使用QTableView 的 …

Prometheus 配置Basic auth认证

官方配置说明&#xff1a; Basic auth | Prometheus 一、生成密码加密串 Prometheus于2.24版本&#xff08;包括2.24&#xff09;之后提供Basic Auth功能进行加密访问&#xff0c;在浏览器登录UI的时候需要输入用户密码&#xff0c;访问Prometheus api的时候也需要加上用户密…

Qt 鼠标滚轮示例

1.声明 void wheelEvent(QWheelEvent *event) override;2.实现&#xff08;方便复制、测试起见用静态变量&#xff09; #include <mutex> void MainWindow::wheelEvent(QWheelEvent *event) {static QLabel *label new QLabel("Zoom Level: 100%", this);st…

Cesium for UE-01-虚幻引擎的下载安装及插件配置

学习Cesium for UE的过程笔记 下载UE 下载 下载完成后&#xff0c;点击运行&#xff0c;执行安装 安装完成后需要下载epic game 下载完成&#xff0c;需要登录 没有账号的自行注册&#xff0c;或者选一个有账号的平台登录即可 选择虚幻引擎&#xff0c;再点击库 可以看到下…

Cronos zkEVM 基于 Covalent Network(CQT)数据可用性 API,推动其 Layer2 DeFi 生态更好地发展

在一项旨在显著改善 DeFi 生态的战略举措中&#xff0c;Cronos 与 Covalent Network&#xff08;CQT&#xff09;携手合作&#xff0c;以期待 Cronos zkEVM 的推出。这一整合&#xff0c;预计将进一步降低以太坊生态系统的交易成本、提升交易速度&#xff0c;并带来更好的交易体…

全面:vue.config.js 的完整配置

vue.config.js是Vue项目的配置文件&#xff0c;用于配置项目的构建、打包和开发环境等。 在Vue CLI 3.0之后&#xff0c;项目的配置文件从原来的build和config目录下的多个配置文件&#xff0c;合并成了一个vue.config.js文件。这个文件可以放在项目的根目录下&#xff0c;用于…

FPGA学习_Xilinx7系列FPGA基本结构

文章目录 前言一、7系列FPGA介绍1.1、芯片编号 二、基本组成单元2.1、可编程逻辑块CLB&#xff08;Configable Logic Block&#xff09;2.2、可编程输入输出单元&#xff08;IOB&#xff09;2.3、嵌入式块RAM&#xff08;Block RAM&#xff09;2.4、底层内嵌功能单元2.5、内嵌专…

变配电站配电监控解决方案--变电站综合自动化系统

变电站综合自动化系统 Acrel-1000变电站综合自动化监控系统是我司根据电力系统自动化及无人值守的要求&#xff0c;总结国内外的研究和生产的先进经验专门研制出的新一代电力监控系统。本系统具有保护、遥测、遥信、遥脉、遥调、遥控功能&#xff0c;可实现无人或少人值守功能…

基于SpringBoot的街道办管理系统

摘 要 随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的街道办管理系统。当前的信息管理存在工作…

NodeJS 集群模块: 为App创建集群实例

NodeJS 集群模块: 为App创建集群实例 目录 NodeJS 集群模块: 为App创建集群实例Node.js 集群介绍:终极扩展策略使用集群模块开始扩展 Node.js扩展 Node.js 的两种集群策略使用集群受益的 Node.js 应用程序示例没有集群的 Node.js:不可伸缩的原则集群操作:一个扩展的 Node.js…