82 lines
3.8 KiB
Python
82 lines
3.8 KiB
Python
# -*- coding: utf-8 -*-
|
||||
|
|
"""单篇数据深度分析:按批次看转化率、标题特征、存量增长"""
|
|||
|
|
import sys
|
|||
|
|
import pandas as pd
|
|||
|
|
|
|||
|
|
sys.stdout.reconfigure(encoding="utf-8")
|
|||
|
|
|
|||
|
|
df = pd.read_excel(r"E:\Download\单篇数据.xlsx", sheet_name="data")
|
|||
|
|
df.columns = [str(c).strip() for c in df.columns]
|
|||
|
|
df["阅读量"] = pd.to_numeric(df["阅读量"], errors="coerce").fillna(0)
|
|||
|
|
df["推荐量"] = pd.to_numeric(df["推荐量"], errors="coerce").fillna(0)
|
|||
|
|
df["点赞量"] = pd.to_numeric(df["点赞量"], errors="coerce").fillna(0)
|
|||
|
|
df["评论量"] = pd.to_numeric(df["评论量"], errors="coerce").fillna(0)
|
|||
|
|
df["分享量"] = pd.to_numeric(df["分享量"], errors="coerce").fillna(0)
|
|||
|
|
df["收藏量"] = pd.to_numeric(df["收藏量"], errors="coerce").fillna(0)
|
|||
|
|
df["转化率"] = (df["阅读量"] / df["推荐量"].clip(lower=1)).round(3)
|
|||
|
|
df["点赞率%"] = (df["点赞量"] / df["阅读量"].clip(lower=1) * 100).round(2)
|
|||
|
|
|
|||
|
|
print("=" * 100)
|
|||
|
|
print("【一】按发布批次看转化率(核心指标)")
|
|||
|
|
print("=" * 100)
|
|||
|
|
g = df.groupby("发布时间").agg(
|
|||
|
|
条数=("标题", "count"),
|
|||
|
|
总阅读=("阅读量", "sum"),
|
|||
|
|
总推荐=("推荐量", "sum"),
|
|||
|
|
条均阅读=("阅读量", "mean"),
|
|||
|
|
).round(0)
|
|||
|
|
g["批次转化率"] = (g["总阅读"] / g["总推荐"].clip(lower=1)).round(3)
|
|||
|
|
print(g.to_string())
|
|||
|
|
|
|||
|
|
print()
|
|||
|
|
print("=" * 100)
|
|||
|
|
print("【二】11-06 批次明细(13条,条均440)")
|
|||
|
|
print("=" * 100)
|
|||
|
|
b1106 = df[df["发布时间"] == "2026-11-06"].sort_values("阅读量", ascending=False)
|
|||
|
|
for _, r in b1106.iterrows():
|
|||
|
|
print(f" 阅读{r['阅读量']:>6.0f} 推荐{r['推荐量']:>6.0f} 转化{r['转化率']:>5.2f} | {r['标题'][:44]}")
|
|||
|
|
|
|||
|
|
print()
|
|||
|
|
print("=" * 100)
|
|||
|
|
print("【三】转化率排行(全部41条)")
|
|||
|
|
print("=" * 100)
|
|||
|
|
print("--- 转化率 TOP 12(推荐没白给)---")
|
|||
|
|
for _, r in df.nlargest(12, "转化率").iterrows():
|
|||
|
|
print(f" {r['转化率']:>5.2f} | 阅读{r['阅读量']:>6.0f} | {r['发布时间']} | {r['标题'][:42]}")
|
|||
|
|
|
|||
|
|
print()
|
|||
|
|
print("--- 转化率 BOTTOM 12(给了推荐没人点)---")
|
|||
|
|
for _, r in df.nsmallest(12, "转化率").iterrows():
|
|||
|
|
print(f" {r['转化率']:>5.2f} | 阅读{r['阅读量']:>6.0f} | 推荐{r['推荐量']:>5.0f} | {r['标题'][:42]}")
|
|||
|
|
|
|||
|
|
print()
|
|||
|
|
print("=" * 100)
|
|||
|
|
print("【四】标题写法与转化率(关键归因)")
|
|||
|
|
print("=" * 100)
|
|||
|
|
patterns = {
|
|||
|
|
"抽象黑话(降维打击/教科书级/防线/智商碾压/拉扯)": ["降维打击", "教科书级", "立体防线", "智商碾压", "拉扯", "助攻"],
|
|||
|
|
"具体动作(炸毛/冲锋/重踏/顶翻/甩掉/逼退)": ["炸毛", "冲锋", "重踏", "顶翻", "甩掉", "逼退", "一记", "蹬"],
|
|||
|
|
"警告式开头(千万别惹/为什么)": ["千万别", "为什么", "连狮子都"],
|
|||
|
|
"含实拍/抓拍(违规)": ["实拍", "抓拍"],
|
|||
|
|
}
|
|||
|
|
for name, kws in patterns.items():
|
|||
|
|
m = df[df["标题"].apply(lambda t: any(k in t for k in kws))]
|
|||
|
|
if len(m):
|
|||
|
|
print(f" {name}: {len(m)}条, 条均阅读 {m['阅读量'].mean():.0f}, 批次转化率 {(m['阅读量'].sum()/m['推荐量'].clip(lower=1).sum()):.2f}")
|
|||
|
|
|
|||
|
|
print()
|
|||
|
|
print("=" * 100)
|
|||
|
|
print("【五】存量增长:对比 11-05 那次导出")
|
|||
|
|
print("=" * 100)
|
|||
|
|
prev = {
|
|||
|
|
"悬崖冰桥上的极限遭遇战": 15571, "绝地反击!大角羊引发落石": 12628,
|
|||
|
|
"千万别惹看家大鹅": 7781, "黄鼠狼进院偷袭小鸡,老母鸡瞬间炸毛暴起,实力演绎": 11548,
|
|||
|
|
"为什么连鳄鱼都不敢惹河马": 4051, "高空猛禽突然掠过": 5226,
|
|||
|
|
"大角羊被狼群逼入绝境,竟靠这一招": 5439,
|
|||
|
|
}
|
|||
|
|
for kw, old in prev.items():
|
|||
|
|
hit = df[df["标题"].str.contains(kw[:12], regex=False)]
|
|||
|
|
if len(hit):
|
|||
|
|
new = hit.iloc[0]["阅读量"]
|
|||
|
|
growth = (new - old) / old * 100 if old else 0
|
|||
|
|
print(f" {hit.iloc[0]['标题'][:30]:<32} {old:>6.0f} → {new:>6.0f} (+{growth:.0f}%)")
|