所有人年度生活数字总结报告,比平台总结更走心。

📅 发布时间:2026/7/11 0:44:28 👁️ 浏览次数:
所有人年度生活数字总结报告,比平台总结更走心。
年度生活数字总结报告生成器一、实际应用场景描述场景每年年底人们都会收到各种平台的年度报告如支付宝年度账单、网易云音乐听歌报告、微信读书年度报告等。这些报告虽然数据详实但往往只关注单一平台的使用情况缺乏对个人全年生活的整体回顾。目标用户- 希望记录生活点滴的个人- 想要制作独特年终总结的内容创作者- 数字文化艺术课程的学员- 追求个性化生活记录方式的年轻人期望效果生成一个融合多个生活维度阅读、运动、社交、消费、创作的温暖、有故事性的年度总结报告不仅展示数据更能唤起回忆体现数字时代的人文关怀。二、引入痛点1. 数据孤岛问题各平台数据分散无法形成完整的生活画像2. 冰冷的数据呈现传统报告只有图表和数字缺乏情感温度3. 个性化不足千篇一律的模板无法体现个人特色4. 记录门槛高手动整理数据耗时耗力5. 缺乏艺术性数据可视化形式单一缺乏设计感三、核心逻辑讲解3.1 整体架构数据采集层 → 数据处理层 → 情感分析层 → 可视化渲染层 → 报告生成层3.2 核心算法1. 情感权重计算情感得分 (正面事件数量 × 0.6 中性事件 × 0.3 负面事件 × 0.1) × 时间衰减因子2. 关键词提取与标签化- 使用TF-IDF算法提取高频关键词- 基于预定义词典进行语义分类3. 时间轴编排算法- 按月份聚类重要事件- 根据情感强度排序展示优先级4. 故事线生成- 识别关键转折点- 构建平凡日常→小确幸→挑战→成长的叙事弧线四、代码模块化实现项目结构life_digital_summary/├── main.py # 主入口文件├── config/│ └── settings.py # 配置文件├── data_collectors/ # 数据采集模块│ ├── __init__.py│ ├── base_collector.py│ ├── social_media.py│ ├── health_tracker.py│ └── reading_log.py├── data_processors/ # 数据处理模块│ ├── __init__.py│ ├── data_cleaner.py│ ├── emotion_analyzer.py│ └── tag_generator.py├── visualizers/ # 可视化模块│ ├── __init__.py│ ├── chart_generator.py│ └── story_renderer.py├── templates/ # 报告模板│ ├── html_template.html│ └── css_style.css├── utils/ # 工具函数│ ├── __init__.py│ └── helpers.py├── output/ # 输出目录├── requirements.txt└── README.md核心代码文件4.1 main.py - 主入口文件年度生活数字总结报告生成器作者全栈开发工程师 技术布道者版本1.0.0描述融合数字文化艺术理念生成走心的生活年度总结报告import osimport sysfrom datetime import datetimefrom pathlib import Path# 添加项目根目录到路径sys.path.append(str(Path(__file__).parent))from config.settings import Configfrom data_collectors.base_collector import DataCollectorManagerfrom data_processors.data_cleaner import DataCleanerfrom data_processors.emotion_analyzer import EmotionAnalyzerfrom data_processors.tag_generator import TagGeneratorfrom visualizers.chart_generator import ChartGeneratorfrom visualizers.story_renderer import StoryRendererfrom utils.helpers import setup_output_dir, get_current_yearclass LifeDigitalSummary:年度生活数字总结报告生成器主类该类整合了数据采集、处理、分析和可视化的全流程旨在生成一份融合数据理性与人文情感的年度总结报告。属性:config: 配置对象raw_data: 原始采集数据processed_data: 处理后的数据report_data: 最终报告数据def __init__(self, config_path: str None):初始化生成器Args:config_path: 配置文件路径默认为None使用默认配置self.config Config(config_path)self.raw_data {}self.processed_data {}self.report_data {}# 初始化各个处理模块self.collector_manager DataCollectorManager(self.config)self.data_cleaner DataCleaner(self.config)self.emotion_analyzer EmotionAnalyzer(self.config)self.tag_generator TagGenerator(self.config)self.chart_generator ChartGenerator(self.config)self.story_renderer StoryRenderer(self.config)# 设置输出目录setup_output_dir(self.config.output_path)def collect_data(self) - dict:数据采集阶段从多个来源收集年度数据包括- 社交媒体活动- 健康运动记录- 阅读学习日志- 消费支出数据- 创作产出记录Returns:包含所有采集数据的字典print( 开始数据采集...)print(- * 40)collectors [(社交媒体, self.collector_manager.collect_social_media),(健康运动, self.collector_manager.collect_health_data),(阅读学习, self.collector_manager.collect_reading_data),(消费支出, self.collector_manager.collect_expense_data),(创作产出, self.collector_manager.collect_creation_data),]for name, collector in collectors:try:print(f 正在采集{name}数据...)data collector()self.raw_data[name] dataprint(f ✅ 成功采集 {len(data)} 条记录)except Exception as e:print(f ⚠️ 采集{name}数据时出错: {str(e)})self.raw_data[name] []print(- * 40)print(f✨ 数据采集完成共采集 {sum(len(v) for v in self.raw_data.values())} 条记录)return self.raw_datadef process_data(self) - dict:数据处理阶段对采集的原始数据进行清洗、情感分析和标签化处理1. 数据清洗去除无效数据标准化格式2. 情感分析为每条记录赋予情感权重3. 标签生成自动提取关键词和主题标签Returns:处理后的结构化数据print(\n 开始数据处理...)print(- * 40)# Step 1: 数据清洗print( 数据清洗中...)cleaned_data self.data_cleaner.clean_all(self.raw_data)print(f ✅ 清洗完成保留 {sum(len(v) for v in cleaned_data.values())} 条有效记录)# Step 2: 情感分析print( 情感分析中...)emotion_data self.emotion_analyzer.analyze_all(cleaned_data)print( ✅ 情感分析完成)# Step 3: 标签生成print( ️ 标签生成中...)tagged_data self.tag_generator.generate_tags(emotion_data)print( ✅ 标签生成完成)self.processed_data tagged_dataprint(- * 40)print(✨ 数据处理完成)return self.processed_datadef generate_visualizations(self) - dict:可视化生成阶段创建多种形式的图表和视觉元素- 月度活动热力图- 情感波动曲线- 兴趣分布雷达图- 关键词词云- 时间轴故事线Returns:包含各类图表文件路径的字典print(\n 开始生成可视化图表...)print(- * 40)charts {}# 生成各类图表chart_types [(monthly_activity, 月度活动热力图),(emotion_curve, 情感波动曲线),(interest_radar, 兴趣分布雷达图),(word_cloud, 关键词词云),(timeline, 年度时间轴),]for chart_type, description in chart_types:try:print(f 生成{description}...)chart_path getattr(self.chart_generator, fcreate_{chart_type})(self.processed_data)charts[chart_type] chart_pathprint(f ✅ 已保存至: {chart_path})except Exception as e:print(f ⚠️ 生成{description}失败: {str(e)})print(- * 40)print(f✨ 可视化生成完成共生成 {len(charts)} 张图表)return chartsdef render_story(self, charts: dict) - str:故事渲染阶段基于处理后的数据和生成的图表编织成一篇有温度的年度故事。采用平凡日常→小确幸→挑战→成长的叙事结构。Args:charts: 可视化图表路径字典Returns:HTML格式的报告内容print(\n 开始渲染年度故事...)print(- * 40)story_html self.story_renderer.render(self.processed_data,charts,yearget_current_year())print(✨ 故事渲染完成)return story_htmldef generate_report(self, output_format: str html) - str:生成完整报告执行完整的报告生成流程采集 → 处理 → 可视化 → 渲染 → 输出Args:output_format: 输出格式支持 html, pdfReturns:生成的报告文件路径print(\n * 50)print( 年度生活数字总结报告生成器 )print( * 50)start_time datetime.now()# 执行完整流程self.collect_data()self.process_data()charts self.generate_visualizations()story_html self.render_story(charts)# 保存报告timestamp datetime.now().strftime(%Y%m%d_%H%M%S)filename flife_summary_{get_current_year()}_{timestamp}if output_format html:output_path os.path.join(self.config.output_path, f{filename}.html)with open(output_path, w, encodingutf-8) as f:f.write(story_html)elif output_format pdf:output_path self._convert_to_pdf(story_html, filename)end_time datetime.now()duration (end_time - start_time).total_seconds()print(\n * 50)print(f✅ 报告生成成功)print(f 文件路径: {output_path})print(f⏱️ 耗时: {duration:.2f} 秒)print( * 50)return output_pathdef _convert_to_pdf(self, html_content: str, filename: str) - str:将HTML转换为PDFArgs:html_content: HTML内容filename: 文件名前缀Returns:PDF文件路径try:from weasyprint import HTMLpdf_path os.path.join(self.config.output_path, f{filename}.pdf)HTML(stringhtml_content).write_pdf(pdf_path)return pdf_pathexcept ImportError:print(⚠️ 警告: 未安装weasyprint无法生成PDF将保存为HTML)html_path os.path.join(self.config.output_path, f{filename}.html)with open(html_path, w, encodingutf-8) as f:f.write(html_content)return html_pathdef main():程序入口函数try:generator LifeDigitalSummary()report_path generator.generate_report(output_formathtml)# 尝试自动打开报告if sys.platform win32:os.startfile(report_path)elif sys.platform darwin:os.system(fopen {report_path})else:os.system(fxdg-open {report_path})except KeyboardInterrupt:print(\n\n⚠️ 程序被用户中断)except Exception as e:print(f\n❌ 发生错误: {str(e)})raiseif __name__ __main__:main()4.2 config/settings.py - 配置文件配置文件模块包含系统运行所需的所有配置项import osfrom dataclasses import dataclass, fieldfrom typing import List, Dict, Anyfrom pathlib import Pathdataclassclass DataSourceConfig:数据源配置类# 社交媒体配置social_platforms: List[str] field(default_factorylambda: [weibo, xiaohongshu])social_api_keys: Dict[str, str] field(default_factorydict)# 健康数据配置health_sources: List[str] field(default_factorylambda: [apple_health, keep, nike_run])health_api_keys: Dict[str, str] field(default_factorydict)# 阅读数据配置reading_sources: List[str] field(default_factorylambda: [wechat_read, douban_read, kindle])reading_api_keys: Dict[str, str] field(default_factorydict)# 消费数据配置expense_sources: List[str] field(default_factorylambda: [alipay, wechat_pay])expense_api_keys: Dict[str, str] field(default_factorydict)# 创作数据配置creation_sources: List[str] field(default_factorylambda: [github, jianshu, zhihu])creation_api_keys: Dict[str, str] field(default_factorydict)dataclassclass ProcessingConfig:数据处理配置类# 情感分析配置emotion_lexicon_path: str data/emotion_lexicon.jsonsentiment_threshold: float 0.5# 时间衰减配置time_decay_rate: float 0.95 # 每月衰减率# 标签配置max_tags_per_record: int 5min_tag_frequency: int 3# 数据清洗配置remove_duplicates: bool Truefill_missing_values: bool Truedataclassclass VisualizationConfig:可视化配置类# 颜色主题color_theme: str warm # warm, cool, nature, sunset# 图表尺寸chart_width: int 800chart_height: int 600# 字体配置font_family: str Noto Sans SC, sans-serif# 输出格式image_format: str pngdpi: int 150dataclassclass OutputConfig:输出配置类output_path: str outputreport_title: str 我的{year}年度生活数字总结author_name: str 生活记录者# 是否包含详细数据include_raw_data: bool False# 报告语言language: str zh-CNdataclassclass Config:主配置类整合所有子配置data_source: DataSourceConfig field(default_factoryDataSourceConfig)processing: ProcessingConfig field(default_factoryProcessingConfig)visualization: VisualizationConfig field(default_factoryVisualizationConfig)output: OutputConfig field(default_factoryOutputConfig)def __post_init__(self):初始化后处理设置动态路径# 确保输出目录存在os.makedirs(self.output.output_path, exist_okTrue)# 设置数据目录self.data_path os.path.join(os.path.dirname(__file__), .., data)os.makedirs(self.data_path, exist_okTrue)classmethoddef from_file(cls, config_path: str) - Config:从配置文件加载配置Args:config_path: 配置文件路径Returns:Config实例# 这里可以实现JSON/YAML配置文件解析# 简化版直接返回默认配置return cls()# 预设主题配色方案THEME_COLORS {warm: {primary: #FF6B6B,secondary: #FFE66D,accent: #4ECDC4,background: #FFF9EC,text: #2D3436,gradient_start: #FF9A9E,gradient_end: #FECFEF},cool: {primary: #667EEA,secondary: #764BA2,accent: #48DBFB,background: #F0F4F8,text: #2D3748,gradient_start: #667EEA,gradient_end: #764BA2},nature: {primary: #56AB2F,secondary: #A8E063,accent: #11998E,background: #F7FCF5,text: #1A365D,gradient_start: #56AB2F,gradient_end: #A8E063},sunset: {primary: #FA709A,secondary: #FEE140,accent: #FF6B6B,background: #FFF5F5,text: #4A5568,gradient_start: #FA709A,gradient_end: #FEE140}}4.3 data_processors/emotion_analyzer.py - 情感分析模块情感分析模块基于自然语言处理和规则引擎为生活记录赋予情感色彩import refrom typing import Dict, List, Tuple, Optionalfrom collections import defaultdictfrom datetime import datetimefrom dateutil.relativedelta import relativedeltaimport jsonclass EmotionAnalyzer:情感分析器该模块采用混合方法规则词典进行情感分析结合时间衰减因素计算每条生活记录的情感权重。核心思想- 积极事件如旅行、学习、创造获得正向情感值- 消极事件如生病、挫折获得负向情感值- 时间越近的事件影响越大def __init__(self, config):初始化情感分析器Args:config: 配置对象self.config configself.emotion_lexicon self._load_emotion_lexicon()self.time_decay_rate config.processing.time_decay_ratedef _load_emotion_lexicon(self) - Dict[str, Dict]:加载情感词典词典包含三类情感- positive: 积极情感词- negative: 消极情感词- neutral: 中性/复杂情感词Returns:情感词典字典# 内置基础情感词典default_lexicon {positive: {快乐: 0.8, 开心: 0.8, 幸福: 0.9, 满足: 0.7,兴奋: 0.85, 期待: 0.6, 感恩: 0.9, 温暖: 0.75,成就: 0.9, 突破: 0.85, 进步: 0.7, 成长: 0.8,美好: 0.8, 精彩: 0.75, 难忘: 0.7, 值得: 0.65,旅行: 0.6, 学习: 0.5, 创造: 0.7, 分享: 0.6,运动: 0.55, 健康: 0.7, 友谊: 0.8, 爱情: 0.85,家庭: 0.9, 团聚: 0.85, 放松: 0.6, 享受: 0.7,灵感: 0.75, 顿悟: 0.8, 喜悦: 0.85, 欣慰: 0.7,惊喜: 0.8, 感动: 0.85, 治愈: 0.75, 宁静: 0.65,热爱: 0.9, 向往: 0.7, 憧憬: 0.65, 自信: 0.8,胜利: 0.9, 完成: 0.75, 实现: 0.85, 收获: 0.7,欣赏: 0.6, 赞美: 0.7, 鼓励: 0.75, 支持: 0.7,理解: 0.6, 包容: 0.7, 信任: 0.8, 尊重: 0.75,帮助: 0.7, 贡献: 0.8, 服务: 0.65, 公益: 0.85,},negative: {难过: -0.7, 伤心: -0.8, 痛苦: -0.9, 失望: -0.6,焦虑: -0.7, 压力: -0.6, 疲惫: -0.5, 孤独: -0.8,迷茫: -0.6, 困惑: -0.55, 挫折: -0.7, 失败: -0.8,遗憾: -0.65, 后悔: -0.75, 愤怒: -0.85, 委屈: -0.7,生病: -0.8, 受伤: -0.85, 丢失: -0.7, 错过: -0.65,争吵: -0.75, 误解: -0.6, 背叛: -0.9, 分离: -0.85,担忧: -0.65, 恐惧: -0.8, 不安: -0.7, 烦躁: -0.6,厌倦: -0.55, 空虚: -0.75, 无助: -0.8, 绝望: -0.9,愧疚: -0.7, 自责: -0.75, 羞耻: -0.8, 嫉妒: -0.65,懒惰: -0.5, 拖延: -0.55, 逃避: -0.6, 放弃: -0.75,否定: -0.65, 批评: -0.6, 指责: -0.7, 轻视: -0.65,冷漠: -0.7, 疏远: -0.75, 孤立: -0.8, 排斥: -0.8,},neutral: {思考: 0.1, 观察: 0.05, 记录: 0.1, 整理: 0.05,计划: 0.15, 准备: 0.1, 等待: 0.0, 路过: 0.0,遇见: 0.2, 发现: 0.25, 尝试: 0.15, 体验: 0.2,参与: 0.15, 观看: 0.05, 聆听: 0.1, 感受: 0.15,回顾: 0.1, 总结: 0.15, 反思: 0.05, 调整: 0.1,}}# 尝试从文件加载扩展词典lexicon_path self.config.processing.emotion_lexicon_pathtry:if os.path.exists(lexicon_path):with open(lexicon_path, r, encodingutf-8) as f:custom_lexicon json.load(f)# 合并词典for category in default_lexicon:if category in custom_lexicon:default_lexicon[category].update(custom_lexicon[category])except Exception as e:print(f⚠️ 加载自定义情感词典失败: {e}使用默认词典)return default_lexicondef analyze_text(self, text: str) - Tuple[float, str, List[str]]:分析单条文本的情感使用加权词频法计算情感得分同时识别主要情感类别和关键词。Args:text: 待分析的文本Returns:(情感得分, 主要情感类别, 识别出的情感词列表)if not text or not isinstance(text, str):return 0.0, neutral, []# 文本预处理text text.lower().strip()# 移除标点符号保留中文text re.sub(r[^\u4e00-\u9fa5a-zA-Z0-9\s], , text)words text.split()emotion_words []total_score 0.0word_count 0# 遍历情感词典匹配词汇for category, lexicon in self.emotion_lexicon.items():for word, weight in lexicon.items():if word in text:# 计算词频count text.count(word)total_score weight * countword_count countemotion_words.append((word, weight, category))# 归一化得分if word_count 0:normalized_score total_score / word_countelse:normalized_score 0.0# 确定主要情感类别if total_score 0.1:main_category positiveelif total_score -0.1:main_category negativeelse:main_category neutralreturn round(normalized_score, 3), main_category, emotion_wordsdef calculate_time_decay(self, event_date: str) - float:计算时间衰减因子基于指数衰减模型时间越近的事件影响越大。公式: decay_factor time_decay_rate ^ months_passedArgs:event_date: 事件日期字符串 (YYYY-MM-DD)Returns:时间衰减因子 (0-1之间)try:if isinstance(event_date, str):event_datetime datetime.strptime(event_date, %Y-%m-%d)else:event_datetime event_datecurrent_date datetime.now()months_passed (current_date.year - event_datetime.year) * 12 \(current_date.month - event_datetime.month)# 应用指数衰减decay_factor self.time_decay_rate ** months_passed利用AI解决实际问题如果你觉得这个工具好用欢迎关注长安牧笛