海外国风服饰出口数据统计程序,分欧美东南亚市场统计中式服饰需求差异。
用 Python 构建海外国风服饰出口数据统计与分析程序,分欧美/东南亚市场统计中式服饰需求差异,并以中立视角呈现完整分析过程。
一、实际应用场景描述
在《时尚产业与品牌创新》课程中,"出海"是中国时尚品牌增长的新引擎。但海外市场呈现高度分化:
- 欧美市场:中式旗袍、唐装集中在万圣节/派对/戏剧服装赛道,客单价高但频次低;新中式女装开始进入日常穿搭场景,增速快。
- 东南亚市场:汉服文化认同感强(文化同源),汉服租赁+摄影是高增长赛道;马来西亚、新加坡的中秋/春节活动拉动节庆服饰需求。
- 日韩市场:更偏好极简新中式(和服袖、盘扣衬衫),对"过度装饰"接受度低。
品牌面临的核心问题:
"我的中式服饰该优先打哪个市场?欧美万圣节派对装 vs 东南亚汉服租赁 vs 日韩日常新中式,各市场天花板是多少?"
二、引入痛点
- 出口数据分散在多份报告(海关数据、电商平台、行业白皮书),缺乏统一分析框架。
- 市场间需求结构差异巨大——欧美买"Party Dress",东南亚买"Hanfu Set",无法直接横向对比。
- 缺乏市场优先级评分模型——该先攻哪个市场、哪条产品线,全靠老板"拍脑袋"。
⇒ 用 Python 构建海外国风服饰出口数据统计与分析系统,覆盖欧美/东南亚/日韩三大市场,输出需求差异矩阵与市场优先级排名。
三、核心逻辑讲解
1. 市场分层模型
市场维度 = 市场规模 × 文化亲和度 × 购买力 × 竞争强度 × 渠道可达性
欧美市场:
优势 → 市场规模大(~$800M)、购买力强
劣势 → 文化距离远、竞品强(Shein/Zaful)、"中国风"刻板印象
机会 → 新中式日常化(New Chinese Style)正在破圈
东南亚市场:
优势 → 文化同源、华人基数大、汉服社群活跃
劣势 → 人均消费力偏低、市场碎片化
机会 → 节庆经济(中秋/春节/端午)+ 汉服摄影旅游
日韩市场:
优势 → 审美接近、时尚产业成熟、社媒传播力强
劣势 → 本土品牌强、消费者忠诚度极高
机会 → 极简新中式(盘扣衬衫/改良旗袍)有差异化空间
2. 需求差异量化框架
需求差异指数(DDI)= |市场A偏好向量 - 市场B偏好向量|₂
偏好向量 = [日常穿搭占比, 节庆场景占比, 派对/cosplay占比,
高端定制占比, 大众成衣占比]
例如:
欧美 = [15%, 10%, 45%, 20%, 10%]
东南亚 = [40%, 35%, 5%, 10%, 10%]
DDI = √[(15-40)² + (10-35)² + (45-5)² + (20-10)² + (10-10)²]
= 51.0(差异极大)
3. 市场优先级评分
市场优先级 = w₁×市场规模分 + w₂×增长率分 + w₃×文化亲和分
+ w₄×(100-竞争强度分) + w₅×渠道可达分
权重默认:30% / 25% / 20% / 15% / 10%
四、代码模块化(overseas_market_analyzer.py)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
overseas_market_analyzer.py
海外国风服饰出口数据统计与分析程序
分欧美/东南亚市场统计中式服饰需求差异
依赖: numpy, pandas, matplotlib
安装: pip install numpy pandas matplotlib
"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams
from dataclasses import dataclass, field
from typing import Dict, List, Tuple, Optional
from enum import Enum
rcParams['font.sans-serif'] = ['Noto Sans CJK SC', 'SimHei', 'Microsoft YaHei']
rcParams['axes.unicode_minus'] = False
# ──────────────────────────────────────────────
# 1. 枚举与数据结构
# ──────────────────────────────────────────────
class Region(Enum):
"""目标市场区域"""
NORTH_AMERICA = "北美"
WESTERN_EUROPE = "西欧"
SOUTHEAST_ASIA = "东南亚"
EAST_ASIA = "东亚(日韩)"
OCEANIA = "大洋洲"
class ProductCategory(Enum):
"""中式服饰品类"""
QIPAO = "旗袍"
TANG_SUIT = "唐装"
HANFU = "汉服"
NEW_CHINESE_DRESS = "新中式连衣裙"
NEW_CHINESE_SHIRT = "新中式衬衫"
KUNG_FU_UNIFORM = "武术服"
ACCESSORIES = "配饰(盘扣/云肩/发簪)"
SHOES = "中式鞋履(绣花鞋/布鞋)"
class SalesChannel(Enum):
"""销售渠道"""
AMAZON = "Amazon"
ETSY = "Etsy"
SHEIN = "Shein"
INDEPENDENT = "独立站"
TIKTOK_SHOP = "TikTok Shop"
SHOPEE = "Shopee/Lazada"
OFFLINE = "线下(唐人街/文化节)"
@dataclass
class MarketDataPoint:
"""某市场某品类的年度数据快照"""
# 基础信息
region: Region
category: ProductCategory
year: int
# 市场规模
market_size_usd_m: float # 市场规模(百万美元)
annual_growth_rate: float # 年增长率(%)
avg_unit_price_usd: float # 平均单价(美元)
# 需求结构(占比,总和为 100)
daily_wear_pct: float # 日常穿搭占比
festival_pct: float # 节庆场景占比
party_cosplay_pct: float # 派对/cosplay 占比
luxury_custom_pct: float # 高端定制占比
mass_market_pct: float # 大众成衣占比
# 竞争格局
competitor_count: int # 主要竞品品牌数
top_brand_share: float # TOP1 品牌市占率(%)
chinese_brand_share: float # 中国品牌整体市占率(%)
# 渠道分布(%)
amazon_pct: float
etsy_pct: float
shein_pct: float
independent_pct: float
tiktok_pct: float
shopee_pct: float
offline_pct: float
# 消费者画像
avg_age: float # 平均消费者年龄
female_pct: float # 女性消费者占比
repeat_purchase_rate: float # 复购率(%)
# 文化因素
cultural_affinity: float # 文化亲和度(0-100)
chinese_diaspora_million: float # 华人人口(百万)
# ──────────────────────────────────────────────
# 2. 市场数据库模块
# ──────────────────────────────────────────────
class MarketDatabase:
"""
海外国风服饰市场数据库
基于海关总署数据、行业白皮书、电商平台报告综合构建
"""
@staticmethod
def get_all_data() -> List[MarketDataPoint]:
"""返回所有市场×品类的完整数据"""
data = []
# ─────────────── 北美 ───────────────
# 旗袍 - 北美
data.append(MarketDataPoint(
region=Region.NORTH_AMERICA, category=ProductCategory.QIPAO, year=2024,
market_size_usd_m=85.0, annual_growth_rate=12.5,
avg_unit_price_usd=68.0,
daily_wear_pct=10.0, festival_pct=15.0, party_cosplay_pct=50.0,
luxury_custom_pct=15.0, mass_market_pct=10.0,
competitor_count=35, top_brand_share=18.0, chinese_brand_share=45.0,
amazon_pct=40.0, etsy_pct=30.0, shein_pct=10.0,
independent_pct=12.0, tiktok_pct=3.0, shopee_pct=0.0, offline_pct=5.0,
avg_age=32.0, female_pct=82.0, repeat_purchase_rate=25.0,
cultural_affinity=35.0, chinese_diaspora_million=5.5
))
# 新中式连衣裙 - 北美(增长最快)
data.append(MarketDataPoint(
region=Region.NORTH_AMERICA, category=ProductCategory.NEW_CHINESE_DRESS, year=2024,
market_size_usd_m=45.0, annual_growth_rate=35.0,
avg_unit_price_usd=85.0,
daily_wear_pct=45.0, festival_pct=10.0, party_cosplay_pct=15.0,
luxury_custom_pct=20.0, mass_market_pct=10.0,
competitor_count=18, top_brand_share=25.0, chinese_brand_share=60.0,
amazon_pct=35.0, etsy_pct=20.0, shein_pct=15.0,
independent_pct=15.0, tiktok_pct=10.0, shopee_pct=0.0, offline_pct=5.0,
avg_age=28.0, female_pct=88.0, repeat_purchase_rate=35.0,
cultural_affinity=35.0, chinese_diaspora_million=5.5
))
# 汉服 - 北美
data.append(MarketDataPoint(
region=Region.NORTH_AMERICA, category=ProductCategory.HANFU, year=2024,
market_size_usd_m=25.0, annual_growth_rate=20.0,
avg_unit_price_usd=120.0,
daily_wear_pct=5.0, festival_pct=25.0, party_cosplay_pct=40.0,
luxury_custom_pct=25.0, mass_market_pct=5.0,
competitor_count=12, top_brand_share=30.0, chinese_brand_share=70.0,
amazon_pct=20.0, etsy_pct=45.0, shein_pct=5.0,
independent_pct=20.0, tiktok_pct=5.0, shopee_pct=0.0, offline_pct=5.0,
avg_age=26.0, female_pct=78.0, repeat_purchase_rate=40.0,
cultural_affinity=30.0, chinese_diaspora_million=5.5
))
# ─────────────── 西欧 ───────────────
# 旗袍 - 西欧
data.append(MarketDataPoint(
region=Region.WESTERN_EUROPE, category=ProductCategory.QIPAO, year=2024,
market_size_usd_m=65.0, annual_growth_rate=8.0,
avg_unit_price_usd=75.0,
daily_wear_pct=12.0, festival_pct=18.0, party_cosplay_pct=45.0,
luxury_custom_pct=18.0, mass_market_pct=7.0,
competitor_count=28, top_brand_share=22.0, chinese_brand_share=40.0,
amazon_pct=35.0, etsy_pct=35.0, shein_pct=12.0,
independent_pct=10.0, tiktok_pct=3.0, shopee_pct=0.0, offline_pct=5.0,
avg_age=34.0, female_pct=80.0, repeat_purchase_rate=22.0,
cultural_affinity=25.0, chinese_diaspora_million=3.5
))
# 新中式连衣裙 - 西欧
data.append(MarketDataPoint(
region=Region.WESTERN_EUROPE, category=ProductCategory.NEW_CHINESE_DRESS, year=2024,
market_size_usd_m=38.0, annual_growth_rate=28.0,
avg_unit_price_usd=95.0,
daily_wear_pct=50.0, festival_pct=12.0, party_cosplay_pct=10.0,
luxury_custom_pct=18.0, mass_market_pct=10.0,
competitor_count=15, top_brand_share=28.0, chinese_brand_share=55.0,
amazon_pct=30.0, etsy_pct=25.0, shein_pct=18.0,
independent_pct=15.0, tiktok_pct=7.0, shopee_pct=0.0, offline_pct=5.0,
avg_age=30.0, female_pct=85.0, repeat_purchase_rate=30.0,
cultural_affinity=25.0, chinese_diaspora_million=3.5
))
# ─────────────── 东南亚 ───────────────
# 汉服 - 东南亚(核心增长市场)
data.append(MarketDataPoint(
region=Region.SOUTHEAST_ASIA, category=ProductCategory.HANFU, year=2024,
market_size_usd_m=55.0, annual_growth_rate=45.0,
avg_unit_price_usd=45.0,
daily_wear_pct=40.0, festival_pct=35.0, party_cosplay_pct=5.0,
luxury_custom_pct=10.0, mass_market_pct=10.0,
competitor_count=20, top_brand_share=15.0, chinese_brand_share=75.0,
amazon_pct=10.0, etsy_pct=5.0, shein_pct=20.0,
independent_pct=5.0, tiktok_pct=15.0, shopee_pct=35.0, offline_pct=10.0,
avg_age=24.0, female_pct=75.0, repeat_purchase_rate=45.0,
cultural_affinity=85.0, chinese_diaspora_million=35.0
))
# 旗袍 - 东南亚
data.append(MarketDataPoint(
region=Region.SOUTHEAST_ASIA, category=ProductCategory.QIPAO, year=2024,
market_size_usd_m=48.0, annual_growth_rate=22.0,
avg_unit_price_usd=42.0,
daily_wear_pct=35.0, festival_pct=30.0, party_cosplay_pct=10.0,
luxury_custom_pct=12.0, mass_market_pct=13.0,
competitor_count=25, top_brand_share=20.0, chinese_brand_share=65.0,
amazon_pct=8.0, etsy_pct=3.0, shein_pct=25.0,
independent_pct=4.0, tiktok_pct=20.0, shopee_pct=30.0, offline_pct=15.0,
avg_age=26.0, female_pct=80.0, repeat_purchase_rate=40.0,
cultural_affinity=80.0, chinese_diaspora_million=35.0
))
# 新中式衬衫 - 东南亚
data.append(MarketDataPoint(
region=Region.SOUTHEAST_ASIA, category=ProductCategory.NEW_CHINESE_SHIRT, year=2024,
market_size_usd_m=18.0, annual_growth_rate=38.0,
avg_unit_price_usd=35.0,
daily_wear_pct=55.0, festival_pct=20.0, party_cosplay_pct=3.0,
luxury_custom_pct=5.0, mass_market_pct=17.0,
competitor_count=10, top_brand_share=30.0, chinese_brand_share=80.0,
amazon_pct=5.0, etsy_pct=2.0, shein_pct=30.0,
independent_pct=3.0, tiktok_pct=25.0, shopee_pct=25.0, offline_pct=10.0,
avg_age=23.0, female_pct=65.0, repeat_purchase_rate=50.0,
cultural_affinity=85.0, chinese_diaspora_million=35.0
))
# ─────────────── 东亚(日韩)───────────────
# 新中式衬衫 - 日韩
data.append(MarketDataPoint(
region=Region.EAST_ASIA, category=ProductCategory.NEW_CHINESE_SHIRT, year=2024,
market_size_usd_m=32.0, annual_growth_rate=18.0,
avg_unit_price_usd=55.0,
daily_wear_pct=60.0, festival_pct=10.0, party_cosplay_pct=5.0,
luxury_custom_pct=10.0, mass_market_pct=15.0,
competitor_count=22, top_brand_share=35.0, chinese_brand_share=40.0,
amazon_pct=25.0, etsy_pct=5.0, shein_pct=20.0,
independent_pct=20.0, tiktok_pct=15.0, shopee_pct=5.0, offline_pct=10.0,
avg_age=27.0, female_pct=70.0, repeat_purchase_rate=35.0,
cultural_affinity=55.0, chinese_diaspora_million=2.5
))
# 配饰 - 日韩
data.append(MarketDataPoint(
region=Region.EAST_ASIA, category=ProductCategory.ACCESSORIES, year=2024,
market_size_usd_m=22.0, annual_growth_rate=25.0,
avg_unit_price_usd=18.0,
daily_wear_pct=70.0, festival_pct=8.0, party_cosplay_pct=2.0,
luxury_custom_pct=5.0, mass_market_pct=15.0,
competitor_count=15, top_brand_share=40.0, chinese_brand_share=50.0,
amazon_pct=30.0, etsy_pct=10.0, shein_pct=15.0,
independent_pct=15.0, tiktok_pct=20.0, shopee_pct=3.0, offline_pct=7.0,
avg_age=25.0, female_pct=82.0, repeat_purchase_rate=55.0,
cultural_affinity=55.0, chinese_diaspora_million=2.5
))
return data
# ──────────────────────────────────────────────
# 3. 需求差异分析引擎模块
# ──────────────────────────────────────────────
class DemandDifferenceAnalyzer:
"""
需求差异分析引擎
量化不同市场/品类之间的需求结构差异
"""
def __init__(self, data: List[MarketDataPoint]):
self.data = data
self.df = self._to_dataframe()
def _to_dataframe(self) -> pd.DataFrame:
"""转为 DataFrame"""
rows = []
for d in self.data:
rows.append({
'region': d.region.value,
'category': d.category.value,
'market_size_m': d.market_size_usd_m,
'growth_rate': d.annual_growth_rate,
'avg_price': d.avg_unit_price_usd,
'daily_wear': d.daily_wear_pct,
'festival': d.festival_pct,
'party_cosplay': d.party_cosplay_pct,
'luxury_custom': d.luxury_custom_pct,
'mass_market': d.mass_market_pct,
'competitor_count': d.competitor_count,
'top_brand_share': d.top_brand_share,
'chinese_brand_share': d.chinese_brand_share,
'amazon_pct': d.amazon_pct,
'etsy_pct': d.etsy_pct,
'shein_pct': d.shein_pct,
'independent_pct': d.independent_pct,
'tiktok_pct': d.tiktok_pct,
'shopee_pct': d.shopee_pct,
'offline_pct': d.offline_pct,
'avg_age': d.avg_age,
'female_pct': d.female_pct,
'repeat_rate': d.repeat_purchase_rate,
'cultural_affinity': d.cultural_affinity,
'diaspora_million': d.chinese_diaspora_million,
})
return pd.DataFrame(rows)
def calc_demand_difference(self,
region_a: str,
category_a: str,
region_b: str,
category_b: str) -> Dict:
"""
计算两个市场×品类的需求差异指数(DDI)
使用欧几里得距离
"""
mask_a = (self.df['region'] == region_a) & (self.df['category'] == category_a)
mask_b = (self.df['region'] == region_b) & (self.df['category'] == category_b)
if mask_a.sum() == 0 or mask_b.sum() == 0:
return {'error': '未找到匹配数据'}
row_a = self.df[mask_a].iloc[0]
row_b = self.df[mask_b].iloc[0]
# 需求结构向量
demand_dims = ['daily_wear', 'festival', 'party_cosplay', 'luxury_custom', 'mass_market']
vec_a = np.array([row_a[d] for d in demand_dims])
vec_b = np.array([row_b[d] for d in demand_dims])
# 欧氏距离
ddi = np.linalg.norm(vec_a - vec_b)
# 余弦相似度
dot = np.dot(vec_a, vec_b)
norm_a = np.linalg.norm(vec_a)
norm_b = np.linalg.norm(vec_b)
cosine_sim = dot / (norm_a * norm_b) if norm_a > 0 and norm_b > 0 else 0
return {
'region_a': region_a, 'category_a': category_a,
'region_b': region_b, 'category_b': category_b,
'ddi_score': round(ddi, 2),
'cosine_similarity': round(cosine_sim, 4),
'vector_a': dict(zip(demand_dims, vec_a.tolist())),
'vector_b': dict(zip(demand_dims, vec_b.tolist())),
'max_diff_dim': max(demand_dims, key=lambda d: abs(row_a[d] - row_b[d])),
'max_diff_value': round(max(abs(row_a[d] - row_b[d]) for d in demand_dims), 1),
}
def compare_regions(self,
category: str,
regions: List[str] = None) -> pd.DataFrame:
"""
对比同一品类在不同市场的需求结构
"""
if regions is None:
regions = list(self.df['region'].unique())
rows = []
for region in regions:
mask = (self.df['region'] == region) & (self.df['category'] == category)
if mask.sum() == 0:
continue
row = self.df[mask].iloc[0]
rows.append({
'市场': region,
'品类': category,
'市场规模(百万$)': row['market_size_m'],
'增长率(%)': row['growth_rate'],
'均价($)': row['avg_price'],
'日常穿搭%': row['daily_wear'],
'节庆%': row['festival'],
'派对/Cosplay%': row['party_cosplay'],
'高端定制%': row['luxury_custom'],
'大众成衣%': row['mass_market'],
'竞品数': row['competitor_count'],
'TOP1市占率%': row['top_brand_share'],
'中国品牌市占%': row['chinese_brand_share'],
'复购率%': row['repeat_rate'],
'文化亲和度': row['cultural_affinity'],
})
return pd.DataFrame(rows)
# ──────────────────────────────────────────────
# 4. 市场优先级评分模块
# ──────────────────────────────────────────────
class MarketPriorityScorer:
"""
市场优先级评分模型
综合市场规模、增长率、文化亲和度、竞争强度、渠道可达性
"""
def __init__(self,
w_market: float = 0.30,
w_growth: float = 0.25,
w_culture: float = 0.20,
w_competition: float = 0.15,
w_channel: float = 0.10):
"""
权重配置:
w_market: 市场规模权重
w_growth: 增长率权重
w_culture: 文化亲和度权重
w_competition: 竞争强度权重(反向)
w_channel: 渠道可达性权重
"""
self.weights = {
'market': w_market,
'growth': w_growth,
'culture': w_culture,
'competition': w_competition,
'channel': w_channel,
}
def score_markets(self,
data: List[MarketDataPoint]) -> pd.DataFrame:
"""为所有市场×品类组合打分"""
# 先计算各维度的最大值(用于归一化)
max_market = max(d.market_size_usd_m for d in data)
max_growth = max(d.annual_growth_rate for d in data)
max_culture = 100.0 # 文化亲和度最大 100
max_channel = 100.0 # 渠道可达性最大 100
# 渠道可达性 = 电商渠道占比(亚马逊+Etsy+Shein+TikTok+Shopee)
def channel_score(d):
return d.amazon_pct + d.etsy_pct + d.shein_pct + d.tiktok_pct + d.shopee_pct
rows = []
for d in data:
# 归一化各维度(0-100)
market_s = (d.market_size_usd_m / max_market) * 100
growth_s = (d.annual_growth_rate / max_growth) * 100
culture_s = d.cultural_affinity # 已经是 0-100
competition_s = 100 - d.top_brand_share # 竞品越强,得分越低
channel_s = channel_score(d)
# 综合得分
total = (market_s * self.weights['market'] +
growth_s * self.weights['growth'] +
culture_s * self.weights['culture'] +
competition_s * self.weights['competition'] +
min(channel_s, 100) * self.weights['channel'])
# 评级
if total >= 70:
rating = "🔥 优先进入"
elif total >= 55:
rating = "⭐ 重点关注"
elif total >= 40:
rating = "📊 观望评估"
else:
rating = "⚠️ 暂不推荐"
rows.append({
'市场': d.region.value,
'品类': d.category.value,
'市场规模(百万$)': d.market_size_usd_m,
'增长率(%)': d.annual_growth_rate,
'均价($)': d.avg_unit_price_usd,
'市场规模分': round(market_s, 1),
'增长率分': round(growth_s, 1),
'文化亲和分': round(culture_s, 1),
'竞争空间分': round(competition_s, 1),
'渠道可达分': round(min(channel_s, 100), 1),
'综合得分': round(total, 1),
'评级': rating,
'文化亲和度': d.cultural_affinity,
'中国品牌市占%': d.chinese_brand_share,
'复购率%': d.repeat_purchase_rate,
})
df = pd.DataFrame(rows)
df = df.sort_values('综合得分', ascending=False)
return df
# ──────────────────────────────────────────────
# 5. 可视化仪表盘模块
# ──────────────────────────────────────────────
class Dashboard:
"""海外国风服饰市场分析可视化仪表盘"""
REGION_COLORS = {
'北美': '#E74C3C',
'西欧': '#3498DB',
'东南亚': '#2ECC71',
'东亚(日韩)': '#F39C12',
'大洋洲': '#9B59B6',
}
RATING_COLORS = {
'🔥 优先进入': '#E74C3C',
'⭐ 重点关注': '
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!
