DAY 15 复习日

news2025/6/7 2:46:32

@浙大疏锦行

数据使用爬虫爬取weibo数据,下面是代码

import datetime
import os
import csv
import time

import numpy as np
import random
import re
import urllib.parse
import requests
from fake_useragent import UserAgent



def init():
    if not os.path.exists('../weiboDeatail.csv'):
        with open('../weiboDeatail.csv', 'a', newline='', encoding='utf-8') as wf:
            writer = csv.writer(wf)
            writer.writerow(['articleId',
                            'created_at',
                            'likes_counts',
                            'region',
                            'content',
                            'authorName',
                             'authorGender',
                             'authorAddress',
                             'authorAvatar',])


def save_to_file(resultData):
    with open('../weiboDeatail.csv', 'a', newline='', encoding='utf-8') as f:
        writer = csv.writer(f)
        writer.writerow(resultData)

def get_data(url,params):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
        'cookie': 'SINAGLOBAL=8782631946839.119.1699202998560; SUB=_2AkMQaTYef8NxqwFRmfoUz2jhb451yAzEieKmNcfFJRMxHRl-yj8XqhEbtRB6O-kY8WFdEr155S_EPSDhRZ5dRRmT-_aC; SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WWcQpMfOClpsGU0ylkr.Dg2; XSRF-TOKEN=pMdYpIdaKB-vThaLz_RPmMy7; _s_tentry=weibo.com; Apache=3448313847055.298.1731574115528; ULV=1731574115668:1:1:1:3448313847055.298.1731574115528:; WBPSESS=V0zdZ7jH8_6F0CA8c_ussWO_XbISeXyf_cdQhE-a7tA9YWqKR0HqFFlwwlm4O_tCVqfBbTqYra_IEAKvR3DtVLRWcGHqKNMZv9wHENJbx4l6rpBH3A2CNiiAuRQVin2ZNgg7rPufq9s7kOHoQJsAbLrUReKu8_UTai8PbfZrq7M='
    }
    response = requests.get(url, headers=headers,params=params)
    print(f"Response Status Code: {response.status_code}")
    print(f" response.text: { response.text }")
    if response.status_code == 200:
        return response.json()['data']
    else:
        return None
def getAllArticleTypeList():
    articleList=[]
    with open('weibo1.csv', 'r', encoding='utf-8') as f:
        readerCsv = csv.reader(f)
        next(readerCsv)
        for nav in readerCsv:
            articleList.append(nav)
    return articleList



def prase_json(response,articleId):
    for comment in response:
        articleId = articleId
        created_at = datetime.datetime.strptime(comment['created_at'], '%a %b %d %H:%M:%S +0800 %Y').strftime('%Y-%m-%d %H:%M:%S')
        likes_counts = comment['like_counts']
        try:
            region = comment['source'].replace('来自','')
        except:
            region = '无'

        content = comment['text_raw']
        authorName = comment['user']['screen_name']
        authorGender = comment['user']['gender']
        authorAddress = comment['user']['location']
        authorAvatar = comment['user']['avatar_large']

        print(articleId,
              created_at,
              likes_counts,
              region,
              content,
              authorName,
              authorGender,
              authorAddress,
              authorAvatar)
        save_to_file([articleId,
              created_at,
              likes_counts,
              region,
              content,
              authorName,
              authorGender,
              authorAddress,
              authorAvatar])
        # break

def start():
    commentUrl='https://weibo.com/ajax/statuses/buildComments'
    articleList=getAllArticleTypeList()
    typeNumCount = 0
    for article in articleList[1:]:
        articleId=article[0]
        print('正在获取id为%s的评论数据'%articleId)
        time.sleep(random.randint(1,5))
        params = {
            'id': int(articleId),
            'is_show_bulletin':3
        }
        response = get_data(commentUrl,params)
        prase_json(response,articleId)
        # break



if __name__ == '__main__':
    init()
    start()



查看数据形状

import pandas as pd

# 读取数据
# 读取数据并添加表头
data = pd.read_csv(r'weiboDeatail.csv', header=None, names=['articleId', 'created_at', 'likes_counts', 'region', 'content', 'authorName', 'authorGender', 'authorAddress', 'authorAvatar'])

# 打印数据集的基本信息(列名、非空值数量、数据类型等)
print("data.info() - 数据集的基本信息(列名、非空值数量、数据类型等):")
print(data.info())

# 打印数据集的形状(行数和列数)
print("\ndata.shape - 数据集的形状(行数, 列数):")
print(data.shape)

# 打印数据集的所有列名
print("\ndata.columns - 数据集的所有列名:")
print(data.columns)

# 查看前5行数据
print("\n查看前5行数据:")
print(data.head())

# 查看后5行数据
print("\n查看后5行数据:")
print(data.tail())

# 查看是否有缺失值
print("\n查看是否有缺失值:")
print(data.isnull().sum())

# 检测是否有重复值
print("\n检测是否有重复值:")
print(data.duplicated().sum())

# 描述性统计
print("\n描述性统计:")
print(data.describe(include='all'))

# 删除操作:删除某一列(例如删除authorAvatar列)
print("\n删除操作:删除authorAvatar列")
data = data.drop(columns=['authorAvatar'])
print(data.columns)

# 查询操作:查询点赞数大于100的文章
print("\n查询操作:查询点赞数大于100的文章")
filtered_data = data[data['likes_counts'] > 100]
print(filtered_data)

# 排序操作:按点赞数降序排序
print("\n排序操作:按点赞数降序排序")
sorted_data = data.sort_values(by='likes_counts', ascending=False)
print(sorted_data.head())

# 分组操作:按地区分组并统计每个地区的文章数量
print("\n分组操作:按地区分组并统计每个地区的文章数量")
grouped_data = data.groupby('region').size()
print(grouped_data)

绘制分析图

可视化需求和图表类型
需求:绘制文章点赞数分布直方图
图表类型:直方图
含义:展示文章点赞数的分布情况,观察点赞数的集中区间和分布趋势。
需求:绘制文章发布地区分布柱形图
图表类型:柱形图
含义:展示不同地区发布文章的数量,识别文章发布最活跃的地区。
需求:绘制作者性别分布饼图
图表类型:饼图
含义:展示作者性别的比例,了解性别在作者群体中的分布情况。
需求:绘制文章内容关键词词云图
图表类型:词云图
含义:通过关键词的大小和颜色展示文章内容中最常见的词汇,识别热门话题。
需求:绘制文章作者地址分布柱形图
图表类型:柱形图
含义:展示不同地址的作者数量,识别作者分布最集中的地区。
需求:绘制文章发布时间分布直方图
图表类型:直方图
含义:展示文章发布时间的分布情况,观察文章发布的高峰时段。


import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from wordcloud import WordCloud
import matplotlib.font_manager as fm

# 设置matplotlib支持中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号'-'显示为方块的问题

# 读取数据
# 读取数据并添加表头
data = pd.read_csv(r'weiboDeatail.csv', header=None, names=['articleId', 'created_at', 'likes_counts', 'region', 'content', 'authorName', 'authorGender', 'authorAddress', 'authorAvatar'])

# 1. 绘制文章点赞数分布直方图
plt.figure(figsize=(10, 6))
sns.histplot(data['likes_counts'], bins=30, kde=True)
plt.title('文章点赞数分布直方图')
plt.xlabel('点赞数')
plt.ylabel('频数')
plt.show()

# 2. 绘制文章发布地区分布柱形图
plt.figure(figsize=(12, 6))
region_counts = data['region'].value_counts().head(10)
sns.barplot(x=region_counts.index, y=region_counts.values)
plt.title('文章发布地区分布柱形图')
plt.xlabel('地区')
plt.ylabel('文章数量')
plt.xticks(rotation=45)
plt.show()

# 3. 绘制作者性别分布饼图
plt.figure(figsize=(8, 8))
gender_counts = data['authorGender'].value_counts()
plt.pie(gender_counts, labels=gender_counts.index, autopct='%1.1f%%', startangle=140)
plt.title('作者性别分布饼图')
plt.show()

# 4. 绘制文章内容关键词词云图
plt.figure(figsize=(12, 8))
# 获取系统中的中文字体路径
font_path = fm.findfont(fm.FontProperties(family=['SimHei']))
wordcloud = WordCloud(width=800, height=400, background_color='white', font_path=font_path).generate(' '.join(data['content']))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title('文章内容关键词词云图')
plt.show()

# 5. 绘制文章作者地址分布柱形图
plt.figure(figsize=(12, 6))
address_counts = data['authorAddress'].value_counts().head(10)
sns.barplot(x=address_counts.index, y=address_counts.values)
plt.title('文章作者地址分布柱形图')
plt.xlabel('作者地址')
plt.ylabel('作者数量')
plt.xticks(rotation=45)
plt.show()

# 6. 绘制文章发布时间分布直方图
plt.figure(figsize=(10, 6))
data['created_at'] = pd.to_datetime(data['created_at'])
sns.histplot(data['created_at'].dt.hour, bins=24, kde=True)
plt.title('文章发布时间分布直方图')
plt.xlabel('小时')
plt.ylabel('频数')
plt.show()

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

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

相关文章

基于BI PaaS架构的衡石HENGSHI SENSE平台技术解析:重塑企业级数据分析基座

在数据驱动决策的时代,传统BI工具日益显露出扩展性弱、灵活性差、资源利用率低等痛点。衡石科技推出的HENGSHI SENSE平台,创新性地采用BI PaaS(平台即服务)架构,为企业构建了一个强大、开放、可扩展的数据分析基础设施…

【R语言编程绘图-plotly】

安装与加载 在R中使用plotly库前需要安装并加载。安装可以通过CRAN进行,使用install.packages()函数。加载库使用library()函数。 install.packages("plotly") library(plotly)测试库文件安装情况 # 安装并加载必要的包 if (!requireNamespace("p…

通信刚需,AI联手ethernet/ip转profinet网关打通工业技术难关

工业人工智能:食品和饮料制造商的实际用例通信刚需 了解食品饮料制造商如何利用人工智能克服业务挑战 食品和饮料制造商正面临劳动力短缺、需求快速变化、运营复杂性加剧以及通胀压力等挑战。如今,生产商比以往任何时候都更需要以更少的投入实现更高的…

JavaEE->多线程:定时器

定时器 约定一个时间,时间到了,执行某个代码逻辑(进行网络通信时常见) 客户端给服务器发送请求 之后就需要等待 服务器的响应,客户端不可能无限的等,需要一个最大的期限。这里“等待的最大时间”可以用定时…

<el-table>构建树形结构

最佳实践 el-table实现树形结构主要依靠row-key和tree-props来实现的。 &#x1f4ab; 无论是el-table实现的树形结构还是el-tree组件都是绑定的树形结构的数据&#xff0c;因此如果数据是扁平的话&#xff0c;需要进行树化。 代码 <template><div><el-table:d…

linux——磁盘和文件系统管理

1、磁盘基础简述 1.1 硬盘基础知识 硬盘&#xff08;Hard Disk Drive&#xff0c;简称 HDD&#xff09;是计算机常用的存储设备之一. p如果从存储数据的介质上来区分&#xff0c;硬盘可分为机械硬盘&#xff08;Hard Disk Drive, HDD&#xff09;和固态硬盘&#xff08;Soli…

云原生 DevOps 实践路线:构建敏捷、高效、可观测的交付体系

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;DevOps 与云原生的深度融合 在传统软件工程范式下&#xff0c;开发与运维之间存在天然的壁垒。开发希望尽快…

gateway 网关 路由新增 (已亲测)

问题&#xff1a; 前端通过gateway调用后端接口&#xff0c;路由转发失败&#xff0c;提示404 not found 排查&#xff1a; 使用 { "href":"/actuator/gateway/routes", "methods":[ "POST", "GET" ] } 命令查看路由列表&a…

Python 训练营打卡 Day 33-神经网络

简单神经网络的流程 1.数据预处理&#xff08;归一化、转换成张量&#xff09; 2.模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 3.定义损失函数和优化器 4.定义训练过程 5.可视化loss过程 预处理补充&#xff1a; 分类任务中&#xff0c;若标签是整…

如何有效删除 iPhone 上的所有内容?

“在出售我的 iPhone 之前&#xff0c;我该如何清除它&#xff1f;我担心如果我卖掉它&#xff0c;有人可能会从我的 iPhone 中恢复我的信息。” 升级到新 iPhone 后&#xff0c;你如何处理旧 iPhone&#xff1f;你打算出售、以旧换新还是捐赠&#xff1f;无论你选择哪一款&am…

AI大模型学习三十二、飞桨AI studio 部署 免费Qwen3-235B与Qwen3-32B,并导入dify应用

一、说明 ‌Qwen3-235B 和 Qwen3-32B 的主要区别在于它们的参数规模和应用场景。‌ 参数规模 ‌Qwen3-235B‌&#xff1a;总参数量为2350亿&#xff0c;激活参数量为220亿‌。‌Qwen3-32B‌&#xff1a;总参数量为320亿‌。 应用场景 ‌Qwen3-235B‌&#xff1a;作为旗舰模型&a…

操作系统中的设备管理,Linux下的I/O

1. I/O软件分层 I/O 层次结构分为五层&#xff1a; 用户层 I/O 软件设备独立性软件设备驱动程序中断处理程序硬件 其中&#xff0c;设备独立性软件、设备驱动程序、中断处理程序属于操作系统的内核部分&#xff0c;即“I/O 系统”&#xff0c;或称“I/O 核心子系统”。 2.用…

LabVIEW与Modbus/TCP温湿度监控系统

基于LabVIEW 开发平台与 Modbus/TCP 通信协议&#xff0c;设计一套适用于实验室环境的温湿度数据采集监控系统。通过上位机与高精度温湿度采集设备的远程通信&#xff0c;实现多设备温湿度数据的实时采集、存储、分析及报警功能&#xff0c;解决传统人工采集效率低、环境适应性…

Cursor 1.0 版本 GitHub MCP 全面指南:从安装到工作流增强

Cursor 1.0 版本 GitHub MCP 全面指南:从安装到工作流增强 简介 GitHub MCP (Machine Coding Protocol) 是一种强大的工具,能够自动化代码生成、管理和分析,从而显著提升开发效率。本文将全面介绍 GitHub MCP 的安装、配置、使用以及如何将其融入您的工作流。 本文介绍两种…

自主设计一个DDS信号发生器

DDS发生器 DDS信号发生器是直接数字频率合成技术&#xff0c;采用直接数字频率合成(Direct Digital Synthesis&#xff0c;简称DDS)技术&#xff0c;把信号发生器的频率稳定度、准确度提高到与基准频率相同的水平&#xff0c;并且可以在很宽的频率范围内进行精细的频率调节。采…

鸿蒙UI(ArkUI-方舟UI框架)- 使用弹框

返回主章节 → 鸿蒙UI&#xff08;ArkUI-方舟UI框架&#xff09; 文章目录 弹框概述使用弹出框(Dialog)弹出框概述不依赖UI组件的全局自定义弹出框(openCustomDialog)(推荐)生命周期自定义弹出框的打开与关闭更新自定义弹出框内容更新自定义弹出框的属性完整示例 基础自定义弹…

学习笔记(24): 机器学习之数据预处理Pandas和转换成张量格式[2]

学习笔记(24): 机器学习之数据预处理Pandas和转换成张量格式[2] 学习机器学习&#xff0c;需要学习如何预处理原始数据&#xff0c;这里用到pandas&#xff0c;将原始数据转换为张量格式的数据。 学习笔记(23): 机器学习之数据预处理Pandas和转换成张量格式[1]-CSDN博客 下面…

在不同型号的手机或平板上后台运行Aidlux

在不同型号的手机或平板上后台运行Aidlux 一、鸿蒙/HarmonyOS手机与平板 二、小米手机与平板 三、OPPO手机与平板 四、vivo手机与平板 一、鸿蒙/HarmonyOS手机与平板 &#xff08;系统版本有差异&#xff0c;但操作原理相通&#xff09; 第一步&#xff1a;点击设置——应用和…

【SSM】SpringBoot学习笔记1:SpringBoot快速入门

前言&#xff1a; 文章是系列学习笔记第9篇。基于黑马程序员课程完成&#xff0c;是笔者的学习笔记与心得总结&#xff0c;供自己和他人参考。笔记大部分是对黑马视频的归纳&#xff0c;少部分自己的理解&#xff0c;微量ai解释的内容&#xff08;ai部分会标出&#xff09;。 …

1.企业可观测性监控三大支柱及开源方案的横评对比

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] &#x1f4e2; 大家好&#xff0c;我是 WeiyiGeek&#xff0c;一名深耕安全运维开发&#xff08;SecOpsDev&#xff09;领域的技术从业者&#xff0c;致力于探索DevOps与安全的融合&#xff08;De…