职业兴趣商业化损耗计算器 – PassionToProfitAnalyzer
📖 README.md
# 职业兴趣商业化损耗计算器 – PassionToProfitAnalyzer
## 🎯 项目简介
这是一个基于智能决策算法的职业兴趣商业化分析工具,旨在颠覆"兴趣当工作最幸福"的理想化认知,帮助职场人理性评估将爱好转化为职业的真实成本和损耗,找到兴趣与收入的平衡点。
## ✨ 核心功能
– 🔍 **兴趣损耗度评估**:量化热爱商业化后的原真性流失
– 💰 **商业化潜力分析**:评估兴趣变现的可行性和天花板
– ⚖️ **平衡方案生成**:提供兴趣与收入的最优组合策略
– 📊 **可视化报告**:生成直观的职业发展决策报告
## 🚀 快速开始
### 安装依赖
bash
pip install numpy pandas matplotlib seaborn plotly scipy
### 运行程序
bash
python main.py
### 使用示例
python
from passion_analyzer import PassionAnalyzer, InterestProfile
创建兴趣档案
gaming_profile = InterestProfile(
name="游戏",
category="娱乐爱好",
passion_level=9.5, # 热爱程度 1-10
skill_level=7.0, # 技能水平 1-10
time_investment=15, # 每周投入小时数
emotional_value=9.0, # 情感价值 1-10
stress_tolerance=6.0, # 压力承受力 1-10
social_recognition=5.0 # 社会认可度 1-10
)
定义商业化路径
commercial_path = {
"name": "游戏直播",
"revenue_model": "打赏+广告+带货",
"income_potential": 8.0, # 收入潜力 1-10
"authenticity_loss": 6.5, # 原真性损耗 1-10
"skill_transferability": 7.0,
"market_saturation": 7.5,
"entry_barrier": 6.0
}
执行分析
analyzer = PassionAnalyzer()
result = analyzer.analyze(gaming_profile, commercial_path)
print(result)
## 📁 项目结构
PassionToProfitAnalyzer/
├── main.py # 主程序入口
├── models.py # 数据模型定义
├── analyzer.py # 核心分析引擎
├── calculator.py # 损耗度计算模块
├── balance_strategies.py # 平衡方案生成器
├── visualization.py # 可视化模块
├── config.py # 配置文件
├── utils.py # 工具函数
└── README.md # 项目说明
## 🧠 核心算法
– 兴趣原真性损耗模型
– 商业化可行性矩阵
– 多维平衡决策算法
– 长期满意度预测
## 📊 评估维度
| 维度 | 权重 | 说明 |
|——|——|——|
| 原真性保持度 | 30% | 商业化后保持热爱的程度 |
| 经济回报 | 25% | 收入潜力和稳定性 |
| 技能匹配度 | 20% | 个人能力与商业要求匹配 |
| 可持续性 | 15% | 长期发展的健康度 |
| 社会价值 | 10% | 外部认可和意义感 |
## 🤝 贡献指南
欢迎提交Issue和PR,请遵循PEP8规范。
## 📄 许可证
MIT License
📋 使用说明
1. 环境准备
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\\Scripts\\activate # Windows
# 安装依赖包
pip install numpy pandas matplotlib seaborn plotly scipy
2. 运行演示
python main.py
3. 自定义配置
编辑
"config.py" 调整评估权重参数:
EVALUATION_WEIGHTS = {
'authenticity_preservation': 0.30, # 原真性保持度
'economic_return': 0.25, # 经济回报
'skill_match': 0.20, # 技能匹配度
'sustainability': 0.15, # 可持续性
'social_value': 0.10 # 社会价值
}
🏗️ 代码实现
config.py – 配置文件
"""
配置文件 – 存储系统的全局配置参数
"""
from dataclasses import dataclass, field
from typing import Dict, List, Any, Optional
from enum import Enum
class InterestCategory(Enum):
"""兴趣类别枚举"""
CREATIVE = "创意艺术" # 绘画、写作、音乐、设计
TECHNICAL = "技术编程" # 编程、硬件、游戏、科技
SPORTS = "运动健身" # 运动、健身、户外、竞技
SOCIAL = "社交服务" # 教育、咨询、服务、志愿
ENTERTAINMENT = "娱乐休闲" # 游戏、追星、旅游、美食
LEARNING = "学习研究" # 阅读、研究、收藏、探索
CRAFTS = "手工制作" # 手作、烹饪、园艺、DIY
PROFESSIONAL = "专业技能" # 职业相关延伸兴趣
@dataclass
class EvaluationWeights:
"""
评估维度权重配置
基于智能决策课程中的多准则决策分析(MCDA)方法
权重总和为1.0,确保决策结果的合理性
"""
authenticity_preservation: float = 0.30 # 原真性保持度 (30%)
economic_return: float = 0.25 # 经济回报 (25%)
skill_match: float = 0.20 # 技能匹配度 (20%)
sustainability: float = 0.15 # 可持续性 (15%)
social_value: float = 0.10 # 社会价值 (10%)
def validate(self) -> bool:
"""验证权重总和是否为1.0"""
total = sum([
self.authenticity_preservation,
self.economic_return,
self.skill_match,
self.sustainability,
self.social_value
])
return abs(total – 1.0) < 0.001
def adjust_weights(self, adjustments: Dict[str, float]) -> 'EvaluationWeights':
"""
动态调整权重
Args:
adjustments: 权重调整字典,如 {"authenticity_preservation": 0.35}
Returns:
调整后的权重配置
"""
new_weights = {
'authenticity_preservation': self.authenticity_preservation,
'economic_return': self.economic_return,
'skill_match': self.skill_match,
'sustainability': self.sustainability,
'social_value': self.social_value
}
for key, value in adjustments.items():
if key in new_weights:
new_weights[key] = value
# 归一化处理
total = sum(new_weights.values())
if total > 0:
for key in new_weights:
new_weights[key] /= total
return EvaluationWeights(**new_weights)
@dataclass
class DecayModelParams:
"""
兴趣损耗模型参数
基于心理学研究和职业转换案例分析
建立兴趣原真性随商业化程度变化的衰减模型
"""
# 原真性衰减参数
base_decay_rate: float = 0.15 # 基础衰减率
income_correlation: float = 0.65 # 收入与原真性损耗相关性
time_pressure_factor: float = 0.25 # 时间压力影响系数
market_pressure_factor: float = 0.35 # 市场压力影响系数
# 满意度模型参数
passion_satisfaction_weight: float = 0.40 # 热情满足感权重
income_satisfaction_weight: float = 0.35 # 收入满足感权重
freedom_satisfaction_weight: float = 0.25 # 自由满足感权重
# 临界点参数
authenticity_threshold: float = 0.4 # 原真性警戒线 (40%)
burnout_risk_threshold: float = 0.7 # 倦怠风险阈值 (70%)
optimal_balance_range: tuple = (0.6, 0.8) # 最佳平衡点区间
@dataclass
class CommercialPathTemplates:
"""
商业化路径模板
预定义的常见兴趣商业化方向及其特征参数
"""
templates: Dict[str, Dict[str, Any]] = field(default_factory=lambda: {
"content_creation": {
"name": "内容创作",
"examples": ["自媒体", "直播", "短视频", "播客"],
"typical_authenticity_loss": 5.5,
"typical_income_potential": 7.0,
"skill_requirements": ["表达能力", "平台运营", "内容策划"],
"market_competition": "高"
},
"education_training": {
"name": "教育培训",
"examples": ["在线课程", "一对一辅导", "工作坊", "训练营"],
"typical_authenticity_loss": 4.0,
"typical_income_potential": 8.0,
"skill_requirements": ["教学能力", "知识整理", "沟通技巧"],
"market_competition": "中高"
},
"product_creation": {
"name": "产品创作",
"examples": ["周边商品", "数字产品", "实体产品", "服务包"],
"typical_authenticity_loss": 3.5,
"typical_income_potential": 6.5,
"skill_requirements": ["产品设计", "供应链管理", "营销推广"],
"market_competition": "中"
},
"consulting_service": {
"name": "咨询服务",
"examples": ["专业顾问", "一对一指导", "企业培训", "外包服务"],
"typical_authenticity_loss": 4.5,
"typical_income_potential": 8.5,
"skill_requirements": ["专业知识", "问题解决", "客户沟通"],
"market_competition": "中低"
},
"community_building": {
"name": "社群建设",
"examples": ["粉丝群", "兴趣社区", "会员制", "线下聚会"],
"typical_authenticity_loss": 3.0,
"typical_income_potential": 5.5,
"skill_requirements": ["社群运营", "活动组织", "用户维护"],
"market_competition": "中"
},
"hybrid_model": {
"name": "混合模式",
"examples": ["主业+副业", "季节性商业化", "部分开放"],
"typical_authenticity_loss": 2.0,
"typical_income_potential": 5.0,
"skill_requirements": ["时间管理", "边界设定", "多元技能"],
"market_competition": "低"
}
})
# 全局配置实例
WEIGHTS = EvaluationWeights()
DECAY_PARAMS = DecayModelParams()
PATH_TEMPLATES = CommercialPathTemplates()
# 行业基准数据
INDUSTRY_BENCHMARKS = {
"creative": {
"avg_authenticity_loss": 5.2,
"avg_income_ceiling": 65000, # 年收入天花板(元/月)
"success_rate": 0.15, # 商业化成功率
"burnout_rate": 0.45 # 职业倦怠率
},
"technical": {
"avg_authenticity_loss": 3.8,
"avg_income_ceiling": 85000,
"success_rate": 0.25,
"burnout_rate": 0.30
},
"entertainment": {
"avg_authenticity_loss": 6.5,
"avg_income_ceiling": 45000,
"success_rate": 0.08,
"burnout_rate": 0.60
},
"education": {
"avg_authenticity_loss": 4.0,
"avg_income_ceiling": 55000,
"success_rate": 0.35,
"burnout_rate": 0.25
}
}
def get_category_benchmarks(category: InterestCategory) -> Dict[str, Any]:
"""获取指定类别的行业基准数据"""
category_mapping = {
InterestCategory.CREATIVE: "creative",
InterestCategory.TECHNICAL: "technical",
InterestCategory.ENTERTAINMENT: "entertainment",
InterestCategory.SOCIAL: "education",
InterestCategory.LEARNING: "education",
InterestCategory.CRAFTS: "creative",
InterestCategory.PROFESSIONAL: "technical"
}
key = category_mapping.get(category, "creative")
return INDUSTRY_BENCHMARKS.get(key, INDUSTRY_BENCHMARKS["creative"])
models.py – 数据模型
"""
数据模型模块 – 定义核心数据结构
使用Python dataclasses实现类型安全的对象模型
"""
from dataclasses import dataclass, field
from datetime import datetime
from typing import List, Optional, Dict, Any, Tuple
from enum import Enum
import uuid
import math
from config import InterestCategory, WEIGHTS, DECAY_PARAMS
class SatisfactionLevel(Enum):
"""满意度等级"""
VERY_LOW = "很低"
LOW = "较低"
MODERATE = "中等"
HIGH = "较高"
VERY_HIGH = "很高"
OPTIMAL = "最佳平衡"
class RiskLevel(Enum):
"""风险等级"""
MINIMAL = "极低"
LOW = "低"
MODERATE = "中等"
HIGH = "高"
CRITICAL = "极高"
@dataclass
class InterestProfile:
"""
兴趣档案数据模型
记录个人对某个兴趣的投入状态和内在价值评估
Attributes:
profile_id: 档案唯一标识
name: 兴趣名称
category: 兴趣类别
passion_level: 热爱程度 (1-10)
skill_level: 技能水平 (1-10)
time_investment: 每周投入时间(小时)
emotional_value: 情感价值 (1-10)
stress_tolerance: 压力承受力 (1-10)
social_recognition: 社会认可度 (1-10)
current_income: 当前从该兴趣获得的收入(元/月,0表示纯爱好)
work_life_balance: 工作生活平衡重要性 (1-10)
autonomy_importance: 自主性重要性 (1-10)
mastery_drive: 精通驱动力 (1-10)
"""
profile_id: str = field(default_factory=lambda: str(uuid.uuid4())[:8])
name: str = ""
category: InterestCategory = InterestCategory.CREATIVE
passion_level: float = 5.0
skill_level: float = 5.0
time_investment: float = 5.0
emotional_value: float = 5.0
stress_tolerance: float = 5.0
social_recognition: float = 5.0
current_income: float = 0.0
work_life_balance: float = 5.0
autonomy_importance: float = 5.0
mastery_drive: float = 5.0
def validate(self) -> bool:
"""验证所有评分在有效范围内"""
score_fields = [
'passion_level', 'skill_level', 'time_investment',
'emotional_value', 'stress_tolerance', 'social_recognition',
'work_life_balance', 'autonomy_importance', 'mastery_drive'
]
for field_name in score_fields:
value = getattr(self, field_name)
if not 1.0 <= value <= 10.0:
return False
return True
@property
def passion_intensity_score(self) -> float:
"""计算热情强度分数"""
return (self.passion_level * 0.4 +
self.emotional_value * 0.35 +
self.time_investment / 10 * 0.25)
@property
def commercial_readiness(self) -> float:
"""计算商业化准备度"""
return (self.skill_level * 0.35 +
self.passion_level * 0.25 +
min(self.time_investment / 20, 1.0) * 10 * 0.2 +
self.stress_tolerance * 0.2)
@property
def intrinsic_vs_extrinsic_ratio(self) -> float:
"""内在动机vs外在动机比例"""
intrinsic = self.passion_level + self.emotional_value + self.mastery_drive
extrinsic = self.social_recognition + (self.current_income > 0) * 3
total = intrinsic + extrinsic
return intrinsic / total if total > 0 else 0.5
def to_dict(self) -> Dict[str, Any]:
"""转换为字典格式"""
return {
"profile_id": self.profile_id,
"name": self.name,
"category": self.category.value,
"passion_level": self.passion_level,
"skill_level": self.skill_level,
"time_investment": self.time_investment,
"emotional_value": self.emotional_value,
"stress_tolerance": self.stress_tolerance,
"social_recognition": self.social_recognition,
"current_income": self.current_income,
"work_life_balance": self.work_life_balance,
"autonomy_importance": self.autonomy_importance,
"mastery_drive": self.mastery_drive,
"passion_intensity_score": round(self.passion_intensity_score, 2),
"commercial_readiness": round(self.commercial_readiness, 2),
"intrinsic_vs_extrinsic_ratio": round(self.intrinsic_vs_extrinsic_ratio, 2)
}
@dataclass
class CommercialPath:
"""
商业化路径数据模型
描述将兴趣转化为职业的具体路径及其特征
Attributes:
path_id: 路径唯一标识
name: 路径名称
description: 路径描述
revenue_model: 盈利模式
income_potential: 收入潜力 (1-10)
authenticity_loss: 原真性损耗预期 (1-10)
skill_transferability: 技能可转移性 (1-10)
market_saturation: 市场饱和度 (1-10, 越高越饱和)
entry_barrier: 准入门槛 (1-10, 越高越难进入)
flexibility: 灵活性 (1-10, 越高越自由)
scalability: 可扩展性 (1-10, 越高越易规模化)
time_to_income: 达到稳定收入所需时间(月)
stability: 收入稳定性 (1-10)
growth_potential: 增长潜力 (1-10)
"""
path_id: str = field(default_factory=lambda: str(uuid.uuid4())[:8])
name: str = ""
description: str = ""
revenue_model: str = ""
income_potential: float = 5.0
authenticity_loss: float = 5.0
skill_transferability: float = 5.0
market_saturation: float = 5.0
entry_barrier: float = 5.0
flexibility: float = 5.0
scalability: float = 5.0
time_to_income: int = 12
stability: float = 5.0
growth_potential: float = 5.0
def validate(self) -> bool:
"""验证评分在有效范围内"""
score_fields = [
'income_potential', 'authenticity_loss', 'skill_transferability',
'market_saturation', 'entry_barrier', 'flexibility',
'scalability', 'stability', 'growth_potential'
]
for field_name in score_fields:
value = getattr(self, field_name)
if not 1.0 <= value <= 10.0:
return False
return True
@property
def overall_feasibility(self) -> float:
"""计算整体可行性评分"""
# 可行性 = 收入潜力 * 技能匹配 * (1-市场饱和度/10) / 准入门槛
saturation_factor = 1 – (self.market_saturation / 10)
feasibility = (self.income_potential * 0.3 +
self.skill_transferability * 0.25 +
saturation_factor * 10 * 0.25 +
self.flexibility * 0.2) / (self.entry_barrier / 5)
return min(feasibility, 10.0)
@property
def risk_assessment(self) -> RiskLevel:
"""评估路径风险等级"""
risk_score = (
self.market_saturation * 0.3 +
self.entry_barrier * 0.25 +
(10 – self.stability) * 0.25 +
self.authenticity_loss * 0.2
)
if risk_score < 3:
return RiskLevel.MINIMAL
elif risk_score < 5:
return RiskLevel.LOW
elif risk_score < 7:
return RiskLevel.MODERATE
elif risk_score < 8.5:
return RiskLevel.HIGH
else:
return RiskLevel.CRITICAL
def to_dict(self) -> Dict[str, Any]:
"""转换为字典格式"""
return {
"path_id": self.path_id,
"name": self.name,
"description": self.description,
"revenue_model": self.revenue_model,
"income_potential": self.income_potential,
"authenticity_loss": self.authenticity_loss,
"skill_transferability": self.skill_transferability,
"market_saturation": self.market_saturation,
"entry_barrier": self.entry_barrier,
"flexibility": self.flexibility,
"scalability": self.scalability,
"time_to_income": self.time_to_income,
"stability": self.stability,
"growth_potential": self.growth_potential,
"overall_feasibility": round(self.overall_feasibility, 2),
"risk_assessment": self.risk_assessment.value
}
@dataclass
class BalanceStrategy:
"""
平衡策略数据模型
提供兴趣与商业化之间的平衡解决方案
Attributes:
strategy_id: 策略唯一标识
name: 策略名称
description: 策略描述
approach_type: 方法类型 ("partial_commercialization", "hybrid_model", "boundary_setting")
authenticity_preservation: 原真性保持度 (1-10)
income_target: 目标收入水平 (元/月)
implementation_difficulty: 实施难度 (1-10)
expected_satisfaction: 预期满意度 (1-10)
time_allocation: 时间分配方案
boundary_rules: 边界规则列表
transition_plan: 过渡计划
"""
strategy_id: str = field(default_factory=lambda: str(uuid.uuid4())[:8])
name: str = ""
description: str = ""
approach_type: str = "hybrid_model"
authenticity_preservation: float = 7.0
income_target: float = 5000.0
implementation_difficulty: float = 5.0
expected_satisfaction: float = 7.0
time_allocation: Dict[str, float] = field(default_factory=dict)
boundary_rules: List[str] = field(default_factory=list)
transition_plan: List[Dict[str, Any]] = field(default_factory=list)
def to_dict(self) -> Dict[str, Any]:
"""转换为字典格式"""
return {
"strategy_id": self.strategy_id,
"name": self.name,
"description": self.description,
"approach_type": self.approach_type,
"authenticity_preservation": self.authenticity_preservation,
"income_target": self.income_target,
"implementation_difficulty": self.implementation_difficulty,
"expected_satisfaction": self.expected_satisfaction,
"time_allocation": self.time_allocation,
"boundary_rules": self.boundary_rules,
"transition_plan": self.transition_plan
}
@dataclass
class AnalysisResult:
"""
分析结果数据模型
存储完整的兴趣商业化分析结果
Attributes:
result_id: 结果唯一标识
timestamp: 分析时间戳
interest_profile: 兴趣档案摘要
commercial_path: 商业化路径摘要
authenticity_decay: 原真性衰减分析
satisfaction_projection: 满意度预测
risk_analysis: 风险分析
balance_strategies: 平衡策略列表
final_recommendation: 最终建议
key_insights: 关键洞察列表
"""
result_id: str = field(default_factory=lambda: str(uuid.uuid4())[:8])
timestamp: datetime = field(default_factory=datetime.now)
interest_profile: Dict[str, Any] = field(default_factory=dict)
commercial_path: Dict[str, Any] = field(default_factory=dict)
authenticity_decay: Dict[str, Any] = field(default_factory=dict)
satisfaction_projection: Dict[str, Any] = field(default_factory=dict)
risk_analysis: Dict[str, Any] = field(default_factory=dict)
balance_strategies: List[Dict[str, Any]] = field(default_factory=list)
final_recommendation: str = ""
key_insights: List[str] = field(default_factory=list)
def generate_summary(self) -> str:
"""生成结果摘要"""
summary_lines = [
"=" * 70,
f"📊 兴趣商业化分析报告 [{self.result_id}]",
f"⏰ 分析时间: {self.timestamp.strftime('%Y-%m-%d %H:%M:%S')}",
"=" * 70,
"",
"🎯 兴趣概况:",
f" 兴趣: {self.interest_profile.get('name', 'N/A')}",
f" 热爱程度: {self.interest_profile.get('passion_level', 0):.1f}/10",
f" 商业化准备度: {self.interest_profile.get('commercial_readiness', 0):.1f}/10",
"",
"💼 商业化路径:",
f" 路径: {self.commercial_path.get('name', 'N/A')}",
f" 收入潜力: {self.commercial_path.get('income_potential', 0):.1f}/10",
f" 原真性损耗: {self.commercial_path.get('authenticity_loss', 0):.1f}/10",
"",
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!





