欢迎光临
我们一直在努力

区分日系简约无印,暗黑山本耀司两类服饰用户数据,搭建双风格独立运营模型。

日系简约(MUJI 风格) vs 暗黑山本耀司风 双风格独立运营模型

 

定位:双风格品牌架构与差异化运营的教学级建模工具

适用:《时尚产业与品牌创新》课程实验、品牌矩阵规划、差异化运营策略

语言:Python 3.8+

说明:采用模拟真实分布数据(贴合两大风格客群特征),全流程可复现、中立化、无商业引流

 

一、实际应用场景描述

 

在《时尚产业与品牌创新》课程中,一个经典品牌架构问题是:

 

"如果一个集团同时运营日系简约(MUJI 风)和暗黑山本耀司风两条线,如何在产品、定价、渠道、传播上做独立运营?"

现实商业语境:

 

维度 日系简约(MUJI / 无印良品风格) 暗黑山本耀司风(Yohji Yamamoto 风格)

核心理念 "这样就好" — 去品牌化、功能主义 "反时尚" — 解构、黑色、不对称

目标人群 25-45 岁,中产,极简主义者 25-40 岁,设计敏感,亚文化圈层

价格带 中端(¥200-2000) 中高端(¥1500-15000)

渠道 生活方式集合店、购物中心 买手店、美术馆式旗舰店

传播 自然流量、口碑、内容种草 时装周、艺术跨界、KOL 深度合作

 

典型决策场景:

 

– 同一集团旗下两个品牌,如何避免 cannibalization(同类相食)?

– 供应链能否共用?设计与面料如何差异化?

– 营销预算如何在两个品牌间分配?

– 数据如何分品牌独立追踪?

 

二、引入痛点

 

🔴 痛点 1:风格边界模糊

 

问题 后果

"都是日系,放一起卖不行吗?" 品牌认知混乱

简约和暗黑都"酷",消费者选哪个? 内部竞争,互相蚕食

视觉语言混淆 传播效率下降

 

🔴 痛点 2:运营指标混用

 

– 用同一套 KPI 衡量两个风格品牌

– MUJI 风看复购率,山本风看客单价 — 但报表合在一起

– 无法评估各品牌独立盈利能力

 

🔴 痛点 3:缺乏差异化运营框架

 

运营维度 问题

产品规划 没有系统化区分两个风格的企划流程

定价策略 两套成本结构,一套定价逻辑

渠道选择 购物中心 vs 买手店,决策凭感觉

营销预算 按营收比例粗暴切分

 

三、核心逻辑讲解

 

✅ 双风格独立运营模型框架

 

集团层面

 ├── 品牌 A:日系简约(MUJI 风格)

 │ ├── 产品策略:基础款为主,S/M/L 尺码,天然面料

 │ ├── 定价策略:中端,成本+倍率(2-3x)

 │ ├── 渠道策略:购物中心、社区店、线上旗舰店

 │ ├── 传播策略:内容种草、生活方式叙事

 │ └── KPI:复购率、客单价、坪效

 │

 └── 品牌 B:暗黑山本耀司风

      ├── 产品策略:解构设计,不对称剪裁,实验性廓形

      ├── 定价策略:中高端,设计师溢价(5-10x)

      ├── 渠道策略:买手店、美术馆式旗舰店、时装周

      ├── 传播策略:艺术跨界、KOL 深度合作

      └── KPI:品牌溢价指数、媒体声量、联名质量

 

✅ 差异化运营的核心维度

 

维度 日系简约 暗黑山本风 关键差异

产品哲学 减法设计 解构主义 一个做减法,一个做加法

面料策略 棉麻丝天然 羊毛/真丝/创新面料 质感 vs 戏剧感

色彩体系 大地色/白色/灰色 黑色/深灰/藏蓝 柔和 vs 浓烈

尺码逻辑 宽松包容(S-XXL) 解构剪裁(不对称性) 普适性 vs 个性表达

上新节奏 季节基础款 + 月度补充 季度概念系列 持续补货 vs 事件驱动

客群画像 功能导向、注重性价比 审美导向、注重独特性 理性 vs 感性

 

✅ 双品牌数据隔离与对比分析

 

独立运营数据模型:

 ├── 各自消费者数据库(CRM 隔离)

 ├── 各自产品主数据(PLM 隔离)

 ├── 各自营销预算与 ROI 追踪

 └── 集团层面汇总对比(不混合 KPI)

 

四、代码模块化实现

 

📁 项目结构

 

dual_style_brand_architecture/

│

├── config.py # 双品牌参数配置

├── data_simulator.py # 模拟两大风格客群数据

├── brand_profiler.py # 品牌画像与特征提取

├── operations_model.py # 差异化运营策略模型

├── comparator.py # 双品牌对比分析

├── reporter.py # 报告生成与导出

├── main.py # 程序入口

└── README.md

 

config.py

 

# config.py

from dataclasses import dataclass, field

from typing import Dict, List

 

# ============ 日系简约品牌参数 ============

@dataclass

class MinimalistBrandParams:

    """MUJI 风格品牌参数"""

    name: str = "日系简约"

    short_name: str = "Minimal"

    

    # 产品参数

    avg_price_range: tuple = (200, 2000) # 平均价格区间(元)

    core_price_point: int = 499 # 核心价格带

    sku_count: int = 800 # SKU 数量

    new_arrival_monthly: int = 40 # 月均上新数

    

    # 面料

    core_materials: List[str] = field(default_factory=lambda: [

        "棉", "麻", "真丝", "竹纤维", "有机棉"

    ])

    core_colors: List[str] = field(default_factory=lambda: [

        "米白", "浅灰", "大地色", "淡蓝", "燕麦色"

    ])

    

    # 目标客群

    age_core: tuple = (28, 45) # 核心年龄

    gender_ratio_male: float = 0.38 # 男性占比

    income_level: str = "中产" # 收入水平

    

    # 渠道

    channels: Dict[str, float] = field(default_factory=lambda: {

        "购物中心": 0.35, "社区店": 0.25, "线上旗舰店": 0.30, "其他": 0.10

    })

    

    # 营销

    marketing_budget_ratio: float = 0.08 # 营收占比

    content_focus: List[str] = field(default_factory=lambda: [

        "生活方式", "收纳技巧", "天然面料科普", "极简穿搭"

    ])

 

 

# ============ 暗黑山本耀司风品牌参数 ============

@dataclass

class AvantGardeBrandParams:

    """Yohji Yamamoto 风格品牌参数"""

    name: str = "暗黑山本风"

    short_name: str = "AvantGarde"

    

    # 产品参数

    avg_price_range: tuple = (1500, 15000)

    core_price_point: int = 3999

    sku_count: int = 300

    new_arrival_monthly: int = 15

    

    # 面料

    core_materials: List[str] = field(default_factory=lambda: [

        "羊毛", "真丝", "羊绒", "创新合成纤维", "精纺棉"

    ])

    core_colors: List[str] = field(default_factory=lambda: [

        "黑色", "深灰", "藏蓝", "酒红", "墨绿"

    ])

    

    # 目标客群

    age_core: tuple = (25, 40)

    gender_ratio_male: float = 0.55

    income_level: str = "中高净值"

    

    # 渠道

    channels: Dict[str, float] = field(default_factory=lambda: {

        "买手店": 0.40, "美术馆旗舰店": 0.25, "线上精选": 0.20, "时装周": 0.15

    })

    

    # 营销

    marketing_budget_ratio: float = 0.15

    content_focus: List[str] = field(default_factory=lambda: [

        "解构美学", "反时尚宣言", "艺术跨界", "设计师纪录片"

    ])

 

 

# ============ 集团层面参数 ============

@dataclass

class GroupParams:

    total_revenue_target: float = 50_000_000 # 年营收目标(元)

    brand_ratio: Dict[str, float] = field(default_factory=lambda: {

        "Minimal": 0.65, "AvantGarde": 0.35

    })

    cannibalization_threshold: float = 0.15 # 同类相食阈值

 

 

# ============ 消费者标签 ============

CONSUMER_TAGS = [

    "注重功能性", "追求性价比", "环保意识", "极简主义者", # 简约型

    "设计敏感", "亚文化认同", "艺术从业者", "追求独特性" # 暗黑型

]

 

# 输出文件

OUTPUT_DIR = "brand_analysis"

 

data_simulator.py

 

# data_simulator.py

"""

模拟两大风格品牌的消费者数据

– 日系简约:理性消费、功能导向、中产家庭

– 暗黑山本风:审美驱动、设计敏感、创意阶层

"""

import numpy as np

import pandas as pd

from config import MinimalistBrandParams, AvantGardeBrandParams, CONSUMER_TAGS

 

def simulate_minimalist_customers(n: int = 2000, seed: int = 42) -> pd.DataFrame:

    """

    模拟日系简约风格消费者

    特征:理性、功能导向、年龄偏大、价格敏感适中

    """

    np.random.seed(seed)

    records = []

    

    for i in range(n):

        # 年龄:偏向 28-45,正态偏移

        age = int(np.clip(np.random.normal(36, 6), 20, 60))

        

        # 性别

        gender = "男" if np.random.rand() < 0.38 else "女"

        

        # 消费金额:中端,集中 200-1500

        spend = np.random.gamma(shape=2.5, scale=280)

        spend = np.clip(spend, 50, 3000)

        

        # 购买频次:较高(基础款补货逻辑)

        freq = np.random.poisson(lam=5.5)

        freq = np.clip(freq, 1, 30)

        

        # 最近购买距今天数:较近(日常消费)

        recency = np.random.exponential(scale=25)

        recency = int(np.clip(recency, 1, 180))

        

        # 标签(多标签)

        tags = []

        if np.random.rand() < 0.55:

            tags.append("注重功能性")

        if np.random.rand() < 0.42:

            tags.append("追求性价比")

        if np.random.rand() < 0.35:

            tags.append("环保意识")

        if np.random.rand() < 0.48:

            tags.append("极简主义者")

        

        # 渠道偏好

        channel = np.random.choice(

            ["购物中心", "社区店", "线上旗舰店"],

            p=[0.35, 0.25, 0.40]

        )

        

        # 内容偏好

        content = np.random.choice([

            "生活方式", "收纳技巧", "天然面料科普", "极简穿搭"

        ])

        

        records.append({

            "customer_id": f"MIN{10001 + i}",

            "brand": "Minimal",

            "age": age,

            "gender": gender,

            "annual_spend": round(spend * freq, 2),

            "purchase_freq": freq,

            "recency_days": recency,

            "avg_order_value": round(spend, 2),

            "tags": tags,

            "channel_pref": channel,

            "content_pref": content,

        })

    

    return pd.DataFrame(records)

 

 

def simulate_avant_garde_customers(n: int = 1200, seed: int = 123) -> pd.DataFrame:

    """

    模拟暗黑山本耀司风格消费者

    特征:审美驱动、设计敏感、年龄偏小、客单价高

    """

    np.random.seed(seed)

    records = []

    

    for i in range(n):

        # 年龄:偏向 25-38,更年轻

        age = int(np.clip(np.random.normal(32, 5), 20, 55))

        

        # 性别:男性略多(山本风男装影响力大)

        gender = "男" if np.random.rand() < 0.55 else "女"

        

        # 消费金额:中高端,集中 800-8000

        spend = np.random.gamma(shape=3.0, scale=650)

        spend = np.clip(spend, 200, 20000)

        

        # 购买频次:较低(每件都是决策)

        freq = np.random.poisson(lam=2.8)

        freq = np.clip(freq, 1, 15)

        

        # 最近购买距今天数:波动大

        recency = np.random.exponential(scale=45)

        recency = int(np.clip(recency, 1, 365))

        

        # 标签

        tags = []

        if np.random.rand() < 0.62:

            tags.append("设计敏感")

        if np.random.rand() < 0.45:

            tags.append("亚文化认同")

        if np.random.rand() < 0.38:

            tags.append("艺术从业者")

        if np.random.rand() < 0.52:

            tags.append("追求独特性")

        

        # 渠道偏好

        channel = np.random.choice(

            ["买手店", "美术馆旗舰店", "线上精选"],

            p=[0.45, 0.30, 0.25]

        )

        

        # 内容偏好

        content = np.random.choice([

            "解构美学", "反时尚宣言", "艺术跨界", "设计师纪录片"

        ])

        

        records.append({

            "customer_id": f"AVG{10001 + i}",

            "brand": "AvantGarde",

            "age": age,

            "gender": gender,

            "annual_spend": round(spend * freq, 2),

            "purchase_freq": freq,

            "recency_days": recency,

            "avg_order_value": round(spend, 2),

            "tags": tags,

            "channel_pref": channel,

            "content_pref": content,

        })

    

    return pd.DataFrame(records)

 

 

def generate_all_customer_data() -> pd.DataFrame:

    """生成合并数据集"""

    df1 = simulate_minimalist_customers()

    df2 = simulate_avant_garde_customers()

    return pd.concat([df1, df2], ignore_index=True)

 

brand_profiler.py

 

# brand_profiler.py

"""

品牌画像分析:从数据中提炼两大风格的差异化特征

"""

import numpy as np

import pandas as pd

 

def profile_brand(df: pd.DataFrame, brand_name: str) -> dict:

    """

    对单个品牌做消费者画像分析

    """

    sub = df[df["brand"] == brand_name].copy()

    

    if len(sub) == 0:

        return {}

    

    profile = {

        "brand": brand_name,

        "n_customers": len(sub),

        "avg_age": round(sub["age"].mean(), 1),

        "median_age": round(sub["age"].median(), 1),

        "male_pct": round((sub["gender"] == "男").mean() * 100, 1),

        "avg_annual_spend": round(sub["annual_spend"].mean(), 0),

        "avg_order_value": round(sub["avg_order_value"].mean(), 0),

        "avg_purchase_freq": round(sub["purchase_freq"].mean(), 1),

        "avg_recency_days": round(sub["recency_days"].mean(), 0),

    }

    

    # 渠道分布

    channel_dist = sub.groupby("channel_pref")["customer_id"].count() / len(sub) * 100

    profile["channel_distribution"] = channel_dist.round(1).to_dict()

    

    # 内容偏好分布

    content_dist = sub.groupby("content_pref")["customer_id"].count() / len(sub) * 100

    profile["content_distribution"] = content_dist.round(1).to_dict()

    

    # 标签频次(Top 标签)

    all_tags = []

    for tags_list in sub["tags"]:

        all_tags.extend(tags_list)

    tag_counts = pd.Series(all_tags).value_counts()

    profile["top_tags"] = tag_counts.head(5).to_dict()

    

    # RFM 综合得分(简单版)

    # R: 越小越好 → 取倒数

    r_score = 1 / (sub["recency_days"] + 1) * 100

    f_score = sub["purchase_freq"] / sub["purchase_freq"].max()

    m_score = sub["annual_spend"] / sub["annual_spend"].max()

    rfm = 0.3 * r_score + 0.35 * f_score + 0.35 * m_score

    profile["avg_rfm_score"] = round(rfm.mean(), 3)

    

    return profile

 

 

def print_brand_profile(profile: dict):

    """打印单个品牌画像"""

    b = profile

    print(f"\\n{'=' * 60}")

    print(f" {b['brand']} — 品牌消费者画像")

    print(f"{'=' * 60}")

    print(f" 消费者人数: {b['n_customers']:,}")

    print(f" 平均年龄: {b['avg_age']} 岁(中位 {b['median_age']} 岁)")

    print(f" 男性占比: {b['male_pct']}%")

    print(f" 年均消费: ¥{b['avg_annual_spend']:,.0f}")

    print(f" 平均客单价: ¥{b['avg_order_value']:,.0f}")

    print(f" 年均购买: {b['avg_purchase_freq']} 次")

    print(f" 活跃度: {b['avg_recency_days']:.0f} 天前")

    print(f" RFM 得分: {b['avg_rfm_score']}")

    

    print(f"\\n 📊 渠道分布:")

    for ch, pct in b.get("channel_distribution", {}).items():

        print(f" {ch}: {pct}%")

    

    print(f"\\n 📊 内容偏好:")

    for ct, pct in b.get("content_distribution", {}).items():

        print(f" {ct}: {pct}%")

    

    print(f"\\n 📊 Top 消费者标签:")

    for tag, cnt in b.get("top_tags", {}).items():

        print(f" {tag}: {cnt} 人")

    print(f"{'=' * 60}")

 

operations_model.py

 

# operations_model.py

"""

双风格差异化运营策略模型

输出每个品牌在产品、定价、渠道、传播上的独立运营方案

"""

from config import MinimalistBrandParams, AvantGardeBrandParams, GroupParams

 

def generate_minimalist_strategy(params: MinimalistBrandParams) -> dict:

    """日系简约品牌运营策略"""

    return {

        "brand": params.name,

        "product_strategy": {

            "core_philosophy": "减法设计 — 去除一切不必要装饰",

            "design_principles": [

                "功能性优先,装饰性最小化",

                "天然面料为主(棉麻丝占比 80%+)",

                "宽松包容性剪裁(S-XXL)",

                "大地色 + 中性色色彩体系",

                "基础款 70% + 季节款 30%"

            ],

            "sizing_logic": "普适性尺码,降低决策成本",

            "replenishment_model": "高频补货(月度上新 40 SKU)",

            "material_focus": params.core_materials,

            "color_palette": params.core_colors,

        },

        "pricing_strategy": {

            "positioning": "中端大众市场",

            "markup_strategy": "成本加成(2-3x)",

            "core_price_zone": f"¥{params.avg_price_range[0]} – ¥{params.avg_price_range[1]}",

            "anchor_price": f"¥{params.core_price_point}",

            "discount_policy": "季末适度折扣(15-20%)",

            "value_proposition": "高性价比的优质基础款",

        },

        "channel_strategy": {

            "primary": "购物中心专柜(品牌体验 + 客流)",

            "secondary": "线上旗舰店(全品类 + 会员运营)",

            "tertiary": "社区店(生活方式渗透)",

            "store_format": "明亮、通透、自然材质陈列",

            "service_model": "自助式 + 轻咨询",

        },

        "marketing_strategy": {

            "budget_ratio": f"{params.marketing_budget_ratio*100:.0f}% 营收",

            "core_narrative": "回归生活本质的穿着方式",

            "content_pillars": params.content_focus,

            "kols": "生活方式博主、收纳达人、职场穿搭 KOC",

            "campaign_types": ["新品发布", "季节穿搭指南", "面料科普"],

            "community_building": "用户晒单 + UGC 穿搭社区",

        },

        "kpi_dashboard": {

            "primary_kpi": "复购率(目标 > 35%)",

            "secondary_kpi": "客单价(目标 ¥500+)",

            "efficiency_kpi": "坪效(购物中心店 > ¥8000/㎡/月)",

            "health_kpi": "库存周转天数(目标 < 60 天)",

        }

    }

 

 

def generate_avant_garde_strategy(params: AvantGardeBrandParams) -> dict:

    """暗黑山本耀司风品牌运营策略"""

    return {

        "brand": params.name,

        "product_strategy": {

            "core_philosophy": "解构主义 — 挑战服装的传统结构",

            "design_principles": [

                "不对称剪裁 + 解构细节",

                "黑色为主色调(占比 70%+)",

                "实验性廓形与面料创新",

                "限量概念系列(每季 3-4 个主题)",

                "男女装边界模糊化"

            ],

            "sizing_logic": "精准剪裁,强调廓形效果",

            "replenishment_model": "季度概念系列(月均上新 15 SKU)",

            "material_focus": params.core_materials,

            "color_palette": params.core_colors,

        },

        "pricing_strategy": {

            "positioning": "中高端设计师品牌",

            "markup_strategy": "设计师溢价(5-10x)",

            "core_price_zone": f"¥{params.avg_price_range[0]} – ¥{params.avg_price_range[1]}",

            "anchor_price": f"¥{params.core_price_point}",

            "discount_policy": "严格控制折扣(仅 VIP 季末 10%)",

            "value_proposition": "独一无二的审美表达",

        },

        "channel_strategy": {

            "primary": "买手店(精准触达设计敏感人群)",

            "secondary": "美术馆式旗舰店(品牌体验 + 艺术化)",

            "tertiary": "时装周展示 + 限量线上",

            "store_format": "暗色调、画廊式空间、灯光氛围感",

            "service_model": "深度顾问式(预约制 + 造型建议)",

        },

        "marketing_strategy": {

            "budget_ratio": f"{params.marketing_budget_ratio*100:.0f}% 营收",

            "core_narrative": "反时尚的时尚 — 用服装表达态度",

            "content_pillars": params.content_focus,

            "kols": "时尚评论人、艺术 KOL、设计师博主",

            "campaign_types": ["时装周直播", "艺术跨界联名", "设计师访谈"],

            "community_building": "品牌私域 VIP 社群 + 线下展览",

        },

        "kpi_dashboard": {

            "primary_kpi": "品牌溢价指数(实际售价/成本比)",

            "secondary_kpi": "媒体声量(提及量 + 情感分析)",

            "efficiency_kpi": "联名合作质量评分",

            "health_kpi": "品牌辨识度(调研问卷)",

        }

    }

 

 

def check_cannibalization(min_strategy: dict, avg_strategy: dict) -> dict:

    """

    检查两个品牌之间是否存在同类相食风险

    """

    # 价格带重叠

    min_low, min_high = 200, 2000

    avg_low, avg_high = 1500, 15000

    price_overlap = max(0, min(min_high, avg_high) – max(min_low, avg_low))

    price_overlap_pct = price_overlap / (avg_high – min_low) if avg_high > min_low else 0

    

    # 渠道重叠

    min_channels = set(min_strategy["channel_strategy"].keys())

    avg_channels = set(avg_strategy["channel_strategy"].keys())

    channel_overlap = min_channels & avg_channels

    

    return {

        "price_overlap_pct": round(price_overlap_pct * 100, 1),

        "channel_overlap": list(channel_overlap),

        "risk_level": "低" if price_overlap_pct < 0.15 else "中" if price_overlap_pct < 0.35 else "高",

        "recommendation": "价格带区分明确,风险可控" if price_overlap_pct < 0.15 

                        else "建议进一步拉大价格带差距或强化差异化叙事"

    }

 

comparator.py

 

# comparator.py

"""

双品牌对比分析模块

"""

import pandas as pd

import numpy as np

 

def compare_brands(profile_a: dict, profile_b: dict) -> pd.DataFrame:

    """生成双品牌对比表"""

    comparison = pd.DataFrame({

        "维度": [

            "消费者人数", "平均年龄", "男性占比(%)", "年均消费(元)",

            "平均客单价(元)", "年均购买次数", "活跃度(天)", "RFM 得分"

        ],

        "日系简约": [

            profile_a["n_customers"],

            profile_a["avg_age"],

            profile_a["male_pct"],

            profile_a["avg_annual_spend"],

            profile_a["avg_order_value"],

            profile_a["avg_purchase_freq"],

            profile_a["avg_recency_days"],

            profile_a["avg_rfm_score"]

        ],

        "暗黑山本风": [

            profile_b["n_customers"],

            profile_b["avg_age"],

            profile_b["male_pct"],

            profile_b["avg_annual_spend"],

            profile_b["avg_order_value"],

            profile_b["avg_purchase_freq"],

            profile_b["avg_recency_days"],

            profile_b["avg_rfm_score"]

        ]

    })

    return comparison

 

 

def print_comparison_table(comparison_df: pd.DataFrame):

    """打印对比表"""

    print(f"\\n{'=' * 65}")

    print(" 双品牌核心指标对比")

    print(f"{'=' * 65}")

    print(comparison_df.to_string(index=False))

    print(f"{'=' * 65}")

 

 

def analyze_differentiation(min_strategy: dict, avg_strategy: dict):

    """分析差异化程度"""

    print(f"\\n{'=' * 65}")

    print(" 差异化运营分析")

    print(f"{'=' * 65}")

    

    # 产品差异化

    print(f"\\n🎨 产品策略差异:")

    print(f" 简约: {min_strategy['product_strategy']['core_philosophy']}")

    print(f" 暗黑: {avg_strategy['product_strategy']['core_philosophy']}")

    

    # 定价差异化

    print(f"\\n💰 定价策略差异:")

    print(f" 简约: {min_strategy['pricing_strategy']['positioning']}")

    print(f" {min_strategy['pricing_strategy']['value_proposition']}")

    print(f" 暗黑: {avg_strategy['pricing_strategy']['positioning']}")

    print(f" {avg_strategy['pricing_strategy']['value_proposition']}")

    

    # 渠道差异化

    print(f"\\n🏪 渠道策略差异:")

    print(f" 简约主渠道: {min_strategy['channel_strategy']['primary']}")

    print(f" 暗黑主渠道: {avg_strategy['channel_strategy']['primary']}")

    

    # KPI 差异化

    print(f"\\n📊 KPI 体系差异:")

    print(f" 简约核心 KPI: {min_strategy['kpi_dashboard']['primary_kpi']}")

    print(f" 暗黑核心 KPI: {avg_strategy['kpi_dashboard']['primary_kpi']}")

    

    print(f"\\n{'=' * 65}")

 

reporter.py

 

# reporter.py

"""

报告生成与导出模块

"""

import pandas as pd

import json

 

def export_all_data(

    all_df: pd.DataFrame,

    profile_min: dict,

    profile_avg: dict,

    strategy_min: dict,

    strategy_avg: dict,

    cannibalization: dict

):

    """导出完整分析结果"""

    # 原始数据

    all_df.to_csv("dual_brand_customer_data.csv", index=False, encoding="utf-8-sig")

    

    # 品牌画像

    summary = {

        "日系简约": profile_min,

        "暗黑山本风": profile_avg,

        "同类相食检查": cannibalization

    }

    with open("brand_profiles.json", "w", encoding="utf-8") as f:

        json.dump(summary, f, ensure_ascii=False, indent=2)

    

    # 运营策略

    strategies = {

        "日系简约运营策略": strategy_min,

        "暗黑山本风运营策略": strategy_avg

    }

    with open("operations_strategies.json", "w", encoding="utf-8") as f:

        json.dump(strategies, f, ensure_ascii=False, indent=2)

    

    print(f"\\n📊 导出完成:")

    print(f" dual_brand_customer_data.csv — 消费者原始数据")

    print(f" brand_profiles.json — 品牌画像报告")

    print(f" operations_strategies.json — 差异化运营策略")

 

 

def print_executive_summary(profile_min: dict, profile_avg: dict, cannibalization: dict):

    """打印高管摘要"""

    print(f"\\n{'=' * 65}")

    print(" 📋 双品牌独立运

利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!

赞(0)
未经允许不得转载:171主机测评 » 区分日系简约无印,暗黑山本耀司两类服饰用户数据,搭建双风格独立运营模型。
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址