DAY 15 復習日

@浙大疏錦行

數據使用爬蟲爬取weibo數據,下面是代碼

import datetime
import os
import csv
import timeimport numpy as np
import random
import re
import urllib.parse
import requests
from fake_useragent import UserAgentdef 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 articleListdef prase_json(response,articleId):for comment in response:articleId = articleIdcreated_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])# breakdef start():commentUrl='https://weibo.com/ajax/statuses/buildComments'articleList=getAllArticleTypeList()typeNumCount = 0for 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)# breakif __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.pswp.cn/diannao/85923.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85923.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85923.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SSL/TLS 協議詳解:安全通信的基石

一、概述 SSL(Secure Sockets Layer) 及其繼任者 TLS(Transport Layer Security) 是位于 傳輸層(TCP)與應用層之間 的加密協議,用于在網絡通信中實現 機密性、身份認證和數據完整性。 核心目標…

使用子樹合并策略更新git項目的部分目錄

背景 正在開發的一個項目中引用了第三方庫的源碼,由于歷史原因,源碼的引用并不是很規范(直接下載下來后作為自己項目的部分源碼使用,還進行了一些修改),具體如下: 我有一個本地git項目project…

pikachu通關教程-CSRF

CSRF(get) 用bp進行抓包 選擇action value值的修改 點擊test in browser copy然后放在bp代理的瀏覽器上,會出現一個提交按鈕,這時候點擊之后信息就被修改了。 CSRF(post) 請求的方式不同,其他都是一樣 CSRF Token 存在cookie 首先要先下載一…

AI驅動游戲開發:Unity與ML-Agents結合

AI驅動游戲開發:Unity與ML-Agents結合 系統化學習人工智能網站(收藏):https://www.captainbed.cn/flu 文章目錄 AI驅動游戲開發:Unity與ML-Agents結合摘要引言技術架構與開發流程1. Unity與ML-Agents協同機制2. 開發…

如何給windos11 擴大C盤容量

動不動C盤就慢了,蘋果逼著用戶換手機,三天兩頭更新系統,微軟也是毫不手軟。c盤 從10個G就夠用,到100G 也不夠,看來通貨膨脹是部分行業的。 在 Windows 11 中擴大 C 盤容量,主要取決于磁盤分區布局和可用空…

Kafka入門-消費者

消費者 Kafka消費方式:采用pull(拉)的方式,消費者從broker中主動拉去數據。使用pull的好處就是消費者可以根據自身需求,進行拉取數據,但是壞處就是如果Kafka沒有數據,那么消費者可能會陷入循環…

SpringBoot自動化部署實戰技術文章大綱

技術背景與目標 介紹SpringBoot在現代開發中的重要性自動化部署的價值:提升效率、減少人為錯誤、實現CI/CD適用場景:中小型Web應用、微服務架構 自動化部署核心方案 基于Docker的容器化部署 SpringBoot應用打包為Docker鏡像使用Docker Compose編排多容…

TDengine 集群運行監控

簡介 為了確保集群穩定運行,TDengine 集成了多種監控指標收集機制,并通過 taosKeeper 進行匯總。taosKeeper 負責接收這些數據,并將其寫入一個獨立的 TDengine 實例中,該實例可以與被監控的 TDengine 集群保持獨立。TDengine 中的…

C# 委托UI控件更新例子,何時需要使用委托

1. 例子1 private void UdpRxCallBackFunc(UdpDataStruct info) {// 1. 前置檢查防止無效調用if (textBoxOutput2.IsDisposed || !textBoxOutput2.IsHandleCreated)return;// 2. 使用正確的委托類型Invoke(new Action(() >{// 3. 雙重檢查確保安全if (textBoxOutput2.IsDis…

[10-2]MPU6050簡介 江協科技學習筆記(22個知識點)

1 2 3 歐拉角是描述三維空間中剛體或坐標系之間相對旋轉的一種方法。它們由三個角度組成,通常表示為: ? 偏航角(Yaw):繞垂直軸(通常是z軸)的旋轉,表示偏航方向的變化。 ? 俯仰角&a…

虛擬環境共享系統包

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 虛擬環境共享系統包 python basic_pipelines/detection.py如果報錯顯示如下: Traceback (most recent call last):File "/home/ai/hailort/hailo-rpi5-exam…

Java求職者面試題解析:基礎概念、計算機基礎與源碼原理

Java求職者面試題解析:基礎概念、計算機基礎與源碼原理 第一輪:基礎概念問題 1. 什么是Java的跨平臺特性? Java的跨平臺特性是指Java程序可以在任何支持Java虛擬機(JVM)的設備上運行,而無需重新編譯。這…

網頁前端開發(基礎進階4--axios)

Ajax Ajax(異步的JavaScript和XML) 。 XML是可擴展標記語言,本質上是一種數據格式,可以用來存儲復雜的數據結構。 可以通過Ajax給服務器發送請求,并獲取服務器響應的數據。 Ajax采用異步交互:可以在不重新加載整個頁面的情況下&am…

設計模式-迪米特法則

迪米特法則 迪米特法則 (Law of Demeter, LoD),也被稱為“最少知識原則 (Principle of Least Knowledge)”,是面向對象設計中的一個重要原則。 核心思想:一個對象應該對其他對象有盡可能少的了解。 更具體地說,它規定了一個對象…

結構性-代理模式

動態代理主要是為了處理重復創建模板代碼的場景。 使用示例 public interface MyInterface {String doSomething(); }public class MyInterfaceImpl implements MyInterface{Overridepublic String doSomething() {return "接口方法dosomething";} }public class M…

Unity大型項目資源框架

?? Unity大型項目資源管理:低端機檢測后自動切換資源框架(大廠風格) ?? 框架目標 ? 啟動時檢測機型性能,判定設備等級 ? 同一資源有高配/中配/低配不同壓縮格式 ? 根據設備等級,加載對應資源包(AB) ? 支持動態切換(可用來切換特效/貼圖分辨率/模型LOD) ? 保證…

MATLAB仿真:偏振光在光纖通信中的應用研究_可復現,有問題請聯系博主

MATLAB仿真:偏振光在光纖通信中的應用研究 1. 研究概述 本文通過MATLAB仿真研究偏振光在光纖通信中的關鍵技術,包括偏振態生成、傳輸特性和檢測方法,重點分析偏振模色散(PMD)的影響機制,并設計偏振控制優化方案。 %% 主程序框架 clc; clear; close all; addpath(Polar…

CTA-861-G-2017中文pdf版

CTA-861-G標準(2016年11月發布)規范未壓縮高速數字接口的DTV配置,涵蓋視頻格式、色彩編碼、輔助信息傳輸等,適用于DVI、HDMI等接口,還涉及EDID數據結構及HDR元數據等內容。

C++核心編程_繼承方式

繼承的語法&#xff1a;class 子類 : 繼承方式 父類 繼承降屬性權限&#xff0c;不可升屬性權限 繼承方式一共有三種&#xff1a; 公共繼承 保護繼承 私有繼承 #include <iostream> #include <string> using namespace std;class Base1 { public:int m_A; p…

Dockerfile常用指令介紹

Dockerfile常用指令介紹 Dockerfile是一個文本文件&#xff0c;用于定義Docker鏡像的構建過程。下面介紹一些最常用的Dockerfile指令及其用法&#xff1a; 基礎指令 FROM - 指定基礎鏡像 FROM python:3.9-slim這是Dockerfile的第一個指令&#xff0c;用于指定構建鏡像的基礎鏡…