
在通過 Python requests 庫的 response.text 獲取 API 數(shù)據(jù)后,原始數(shù)據(jù)常存在缺失、格式混亂、重復(fù)等問題 —— 即便像科技新聞 API 返回的結(jié)構(gòu)化 JSON 數(shù)據(jù),也可能隱藏字段空值、時(shí)間格式不統(tǒng)一、來源名稱錯(cuò)漏等隱患。若直接用于分析或應(yīng)用開發(fā),輕則導(dǎo)致統(tǒng)計(jì)偏差,重則引發(fā)程序報(bào)錯(cuò)。本文以科技新聞 API 的 response.text 數(shù)據(jù)為例,圍繞數(shù)據(jù)清洗去噪的五大核心原則,詳解實(shí)操流程與技術(shù)要點(diǎn)。
從 API 獲取的 response.text 經(jīng) json.loads () 解析后,雖能轉(zhuǎn)化為 Python 字典(如前文中的news_data
),但原始數(shù)據(jù)可能存在以下問題:
字段缺失:某條新聞缺少content
(內(nèi)容)或publish_time
(發(fā)布時(shí)間);
格式混亂:publish_time
同時(shí)存在 “2025-08-20”“2025/08/20”“2025.08.20” 三種格式;
數(shù)據(jù)錯(cuò)誤:source
(來源)字段出現(xiàn) “人工智學(xué)報(bào)”(應(yīng)為 “人工智能學(xué)報(bào)”)等錯(cuò)別字;
重復(fù)冗余:存在兩條完全相同的新聞條目;
無效值:content
字段為空白字符串或 “暫無內(nèi)容” 等無意義文本。
數(shù)據(jù)清洗去噪的本質(zhì),是通過 “檢測(cè)問題 - 修復(fù) / 剔除” 的流程,讓數(shù)據(jù)符合完整性、一致性、準(zhǔn)確性、唯一性、標(biāo)準(zhǔn)化五大原則,為后續(xù)的新聞趨勢(shì)分析、來源統(tǒng)計(jì)、內(nèi)容挖掘奠定可靠基礎(chǔ)。
核心目標(biāo):確保每條數(shù)據(jù)的關(guān)鍵字段(如新聞的title
“標(biāo)題”、content
“內(nèi)容”、publish_time
“發(fā)布時(shí)間”)無缺失、非空。
實(shí)操場(chǎng)景:解析后的news_data["news_list"]
中,可能存在某條新聞缺失content
字段,或publish_time
為空值的情況。
Python 代碼實(shí)現(xiàn):
import requests
import json
from datetime import datetime
# 1. 獲取并解析response.text(延續(xù)前文場(chǎng)景)
url = "https://api.technews.com/latest"
response = requests.get(url)
news_data = json.loads(response.text)
raw_news_list = news_data["news_list"]
# 2. 完整性檢查與處理
cleaned_news = []
required_fields = ["title", "content", "publish_time", "source"] # 關(guān)鍵字段列表
for news in raw_news_list:
# 檢查關(guān)鍵字段是否完整且非空
is_complete = all(
field in news and str(news[field]).strip() != "" 
for field in required_fields
)
if is_complete:
cleaned_news.append(news)
else:
# 記錄缺失數(shù)據(jù)(便于后續(xù)排查API問題)
missing_fields = [f for f in required_fields if f not in news or str(news[f]).strip() == ""]
print(f"剔除不完整新聞(標(biāo)題:{news.get('title', '未知')}),缺失字段:{missing_fields}")
print(f"完整性處理后:原始{len(raw_news_list)}條 → 清洗后{len(cleaned_news)}條")
處理邏輯:通過all()
函數(shù)校驗(yàn)所有關(guān)鍵字段是否存在且非空,剔除缺失字段的無效數(shù)據(jù),同時(shí)記錄問題數(shù)據(jù)便于追溯 API 接口的數(shù)據(jù)源質(zhì)量。
核心目標(biāo):確保同一字段的格式全局統(tǒng)一(如時(shí)間格式、單位、文本大小寫),避免 “同值不同形” 導(dǎo)致的分析偏差。
實(shí)操場(chǎng)景:publish_time
字段可能混合 “2025-08-20”“2025/08/20”“8/20/2025” 等格式,需統(tǒng)一為 “YYYY-MM-DD” 標(biāo)準(zhǔn)格式。
Python 代碼實(shí)現(xiàn):
def standardize_time(time_str):
"""統(tǒng)一時(shí)間格式為YYYY-MM-DD"""
time_formats = ["%Y-%m-%d", "%Y/%m/%d", "%m/%d/%Y"] # 常見待匹配格式
for fmt in time_formats:
try:
# 解析時(shí)間并按標(biāo)準(zhǔn)格式輸出
return datetime.strptime(time_str.strip(), fmt).strftime("%Y-%m-%d")
except ValueError:
continue
# 若無法解析,標(biāo)記為無效時(shí)間(后續(xù)處理)
return "無效時(shí)間"
# 對(duì)清洗后的新聞列表統(tǒng)一時(shí)間格式
for news in cleaned_news:
original_time = news["publish_time"]
standardized_time = standardize_time(original_time)
if standardized_time == "無效時(shí)間":
print(f"時(shí)間格式異常(標(biāo)題:{news['title']}),原始時(shí)間:{original_time}")
cleaned_news.remove(news) # 剔除無法標(biāo)準(zhǔn)化的時(shí)間數(shù)據(jù)
else:
news["publish_time"] = standardized_time
# 驗(yàn)證一致性:查看所有時(shí)間格式
time_formats_after = {news["publish_time"] for news in cleaned_news}
print(f"時(shí)間格式統(tǒng)一后:{time_formats_after}(均為YYYY-MM-DD)")
處理邏輯:通過datetime
庫嘗試匹配多種常見時(shí)間格式,將其統(tǒng)一為 “YYYY-MM-DD”,對(duì)無法解析的異常時(shí)間數(shù)據(jù)直接剔除,確保時(shí)間字段的一致性。
核心目標(biāo):排查并修正數(shù)據(jù)中的錯(cuò)別字、邏輯錯(cuò)誤(如 “續(xù)航 - 100 公里”),確保數(shù)據(jù)反映真實(shí)情況。
實(shí)操場(chǎng)景:source
字段可能出現(xiàn) “人工智學(xué)報(bào)”(應(yīng)為 “人工智能學(xué)報(bào)”)、“新能源日抱”(應(yīng)為 “新能源日?qǐng)?bào)”)等錯(cuò)別字;content
中可能存在 “運(yùn)算速度提升 0.5 萬倍” 與標(biāo)題 “提升百萬倍” 的邏輯矛盾。
Python 代碼實(shí)現(xiàn):
# 1. 建立常見錯(cuò)誤映射表(可根據(jù)實(shí)際場(chǎng)景擴(kuò)展)
error_correction = {
"人工智學(xué)報(bào)": "人工智能學(xué)報(bào)",
"新能源日抱": "新能源日?qǐng)?bào)",
"科技前沿周刑": "科技前沿周刊"
}
# 2. 修正來源名稱錯(cuò)別字
for news in cleaned_news:
original_source = news["source"]
news["source"] = error_correction.get(original_source, original_source) # 無匹配則保留原值
# 3. 驗(yàn)證內(nèi)容與標(biāo)題的邏輯一致性(以量子計(jì)算機(jī)速度為例)
for news in cleaned_news:
title = news["title"]
content = news["content"]
# 若標(biāo)題含“百萬倍”,檢查內(nèi)容是否匹配
if "百萬倍" in title and "百萬倍" not in content:
print(f"邏輯矛盾預(yù)警(標(biāo)題:{title}):標(biāo)題提及'百萬倍',內(nèi)容未匹配")
# 輸出修正后的來源列表
sources_after = {news["source"] for news in cleaned_news}
print(f"來源名稱修正后:{sources_after}(無錯(cuò)別字)")
處理邏輯:通過 “錯(cuò)誤映射表” 批量修正已知錯(cuò)別字,通過關(guān)鍵詞匹配排查標(biāo)題與內(nèi)容的邏輯矛盾,對(duì)存疑數(shù)據(jù)進(jìn)行預(yù)警,避免錯(cuò)誤信息影響分析結(jié)論。
核心目標(biāo):刪除完全重復(fù)或核心信息重復(fù)的條目(如同一新聞被多次抓取),確保數(shù)據(jù)唯一性。
實(shí)操場(chǎng)景:news_list
中可能存在兩條title
、content
、publish_time
完全相同的新聞,或僅source
不同但內(nèi)容一致的重復(fù)條目。
Python 代碼實(shí)現(xiàn):
# 方法1:基于“標(biāo)題+發(fā)布時(shí)間”去重(核心信息唯一)
unique_news = []
seen_keys = set() # 存儲(chǔ)已出現(xiàn)的“標(biāo)題+發(fā)布時(shí)間”組合
for news in cleaned_news:
# 生成唯一標(biāo)識(shí)(標(biāo)題+發(fā)布時(shí)間,避免同一新聞不同來源的誤判)
unique_key = f"{news['title']}_{news['publish_time']}"
if unique_key not in seen_keys:
seen_keys.add(unique_key)
unique_news.append(news)
else:
print(f"移除重復(fù)新聞(標(biāo)題:{news['title']},發(fā)布時(shí)間:{news['publish_time']})")
# 方法2:使用pandas庫高效去重(適合大規(guī)模數(shù)據(jù))
# import pandas as pd
# df = pd.DataFrame(cleaned_news)
# df_unique = df.drop_duplicates(subset=["title", "publish_time"], keep="first")
# unique_news = df_unique.to_dict("records")
print(f"去重后:清洗后{len(cleaned_news)}條 → 唯一數(shù)據(jù){len(unique_news)}條")
處理邏輯:通過 “標(biāo)題 + 發(fā)布時(shí)間” 的組合作為唯一標(biāo)識(shí)(避免同一新聞不同來源的誤判),手動(dòng)去重或使用 pandas 高效去重,減少數(shù)據(jù)冗余對(duì)后續(xù)統(tǒng)計(jì)(如 “每日新聞數(shù)量”)的干擾。
核心目標(biāo):對(duì)文本內(nèi)容、字段長度等進(jìn)行標(biāo)準(zhǔn)化處理,確保數(shù)據(jù)符合后續(xù)應(yīng)用(如數(shù)據(jù)庫存儲(chǔ)、文本挖掘)的要求。
實(shí)操場(chǎng)景:content
字段可能包含特殊字符(如 “n”“t”)或過長文本;title
字段可能存在首尾空格,需統(tǒng)一修剪。
Python 代碼實(shí)現(xiàn):
def standardize_text(text):
"""標(biāo)準(zhǔn)化文本:去除特殊字符、修剪空格、控制長度"""
# 1. 去除換行符、制表符等特殊字符
text = text.replace("n", "").replace("t", "").strip()
# 2. 控制文本長度(如content超過500字保留前500字+省略號(hào),適配數(shù)據(jù)庫字段限制)
if len(text) > 500:
text = text[:500] + "..."
return text
# 對(duì)標(biāo)題和內(nèi)容進(jìn)行格式標(biāo)準(zhǔn)化
for news in unique_news:
news["title"] = news["title"].strip() # 修剪首尾空格
news["content"] = standardize_text(news["content"])
# 驗(yàn)證標(biāo)準(zhǔn)化結(jié)果
sample_news = unique_news[0]
print(f"標(biāo)準(zhǔn)化示例:n標(biāo)題:{sample_news['title']}n內(nèi)容:{sample_news['content']}")
處理邏輯:通過文本處理函數(shù)去除特殊字符、修剪空格,對(duì)過長文本進(jìn)行截?cái)?,確保數(shù)據(jù)格式適配數(shù)據(jù)庫字段長度限制或文本挖掘工具的輸入要求。
經(jīng)過五大原則的處理,原始response.text
數(shù)據(jù)從 “可能存在問題的原始素材” 轉(zhuǎn)化為 “干凈、可靠的結(jié)構(gòu)化數(shù)據(jù)”,具體成果如下:
處理環(huán)節(jié) | 原始數(shù)據(jù)問題 | 清洗后效果 |
---|---|---|
完整性處理 | 1 條缺失content 的新聞 |
剔除無效數(shù)據(jù),保留完整條目 |
一致性處理 | 時(shí)間格式混合 “-”“/” | 統(tǒng)一為 “YYYY-MM-DD” 格式 |
準(zhǔn)確性處理 | “人工智學(xué)報(bào)” 等錯(cuò)別字 | 修正為正確來源名稱 |
去重處理 | 2 條重復(fù)新聞 | 僅保留 1 條唯一數(shù)據(jù) |
格式標(biāo)準(zhǔn)化 | content 含n 且過長 |
清除特殊字符,長度規(guī)范化 |
清洗后的數(shù)據(jù)集可直接用于后續(xù)應(yīng)用:
統(tǒng)計(jì)分析:準(zhǔn)確計(jì)算 “各來源新聞數(shù)量”“每日新聞發(fā)布頻次”,如 “科技前沿周刊發(fā)布 1 條、新能源日?qǐng)?bào)發(fā)布 1 條”;
文本挖掘:基于標(biāo)準(zhǔn)化的content
字段提取關(guān)鍵詞(如 “量子計(jì)算”“固態(tài)電池”),分析科技熱點(diǎn)趨勢(shì);
可視化展示:利用統(tǒng)一格式的publish_time
字段繪制 “科技新聞時(shí)間軸”,直觀呈現(xiàn)技術(shù)突破節(jié)奏。
在 Python response.text 數(shù)據(jù)處理流程中,“獲取 - 解析 - 清洗 - 應(yīng)用” 四步環(huán)環(huán)相扣,而數(shù)據(jù)清洗去噪是承上啟下的核心環(huán)節(jié) —— 它既解決了原始 response.text 可能存在的 “臟數(shù)據(jù)” 問題,又為后續(xù)的分析與應(yīng)用提供了可靠保障。
未來面對(duì)不同場(chǎng)景的 response.text 數(shù)據(jù)(如 HTML 文本、CSV 格式文本),只需圍繞 “完整性、一致性、準(zhǔn)確性、唯一性、標(biāo)準(zhǔn)化” 五大原則,靈活調(diào)整清洗策略(如 HTML 需先解析標(biāo)簽、CSV 需處理分隔符),即可高效釋放數(shù)據(jù)價(jià)值,讓 Python 網(wǎng)絡(luò)數(shù)據(jù)獲取與處理真正服務(wù)于實(shí)際需求。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營問題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10