在當代商業環境中,數據已經成為企業最重要的戰略資產。每一筆銷售交易、每一次客戶互動都產生了寶貴的資料,這些資料經過系統化的分析與解讀,能夠揭示市場趨勢、客戶偏好與營運效率的深層洞察。然而,許多企業雖然擁有大量的銷售資料,卻缺乏有效的分析框架與方法論,導致這些資料淪為資料倉儲中的死數字,無法轉化為實際的商業價值。
在過去數年的商業分析實務經驗中,筆者深刻體會到銷售資料分析的複雜性與重要性。單純的銷售額數字無法反映真實的業務狀況,我們需要從多個維度進行交叉分析,才能發現隱藏在數據背後的商業機會與潛在風險。地區間的銷售差異可能揭示市場滲透策略的成效,季節性的波動模式可以指導庫存管理與生產計劃,產品間的績效對比則能夠優化產品組合與資源配置。
本文將以一組真實的產品銷售資料為基礎,展示如何建立系統化的銷售分析框架。從資料清理與結構化、描述性統計分析到進階的趨勢識別與預測模型,我們將逐步解析銷售資料分析的完整流程。透過 Python 資料分析工具的實作,讀者不僅能夠理解分析方法論,更能夠將這些技術應用到實際的業務場景中。最終目標是建立一個可重複使用的分析框架,讓企業能夠持續從銷售資料中提取價值,支援數據驅動的決策制定。
銷售資料的系統化分析框架
有效的銷售資料分析始於清晰的分析框架建立。在開始深入探討數據之前,我們需要明確定義分析的目標、關鍵指標與分析維度。對於產品銷售資料而言,典型的分析維度包含產品類別、地理區域、時間週期以及銷售通路。這些維度的交叉組合能夠揭示業務表現的細微差異,幫助管理者識別高績效的市場區隔與需要改善的弱點。
在實際的業務場景中,銷售資料往往散落在不同的系統與檔案中。ERP 系統記錄訂單資訊,CRM 系統追蹤客戶互動,財務系統管理收款與成本。將這些資料整合成統一的分析資料集是分析流程的第一步。資料品質的確保同樣關鍵,包含處理缺失值、異常值檢測與資料型別的標準化。只有建立在高品質資料基礎上的分析結果才具有可信度與決策價值。
以下透過 Python 程式碼展示如何建立完整的銷售資料分析流程,從資料載入、清理到多維度分析與視覺化呈現。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
產品銷售資料分析系統
功能:
- 多維度銷售資料分析
- 地區與季度績效比較
- 產品組合分析
- 趨勢識別與預測
- 商業智慧報表生成
適用場景:
- 企業銷售績效評估
- 市場策略規劃
- 資源配置最佳化
- 業務預測與規劃
"""
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
import warnings
# 設定中文字型以正確顯示繁體中文
# 解決 matplotlib 中文顯示問題
plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
# 忽略警告訊息
warnings.filterwarnings('ignore')
# 設定顯示選項
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.max_rows', 100)
class SalesAnalyzer:
"""
銷售資料分析器類別
提供完整的銷售資料分析功能,包含資料載入、清理、
多維度分析、視覺化與報表生成
Attributes:
data: 原始銷售資料 DataFrame
clean_data: 清理後的資料
analysis_results: 分析結果字典
"""
def __init__(self):
"""初始化分析器"""
self.data = None
self.clean_data = None
self.analysis_results = {}
print("銷售資料分析系統已初始化")
def load_sample_data(self):
"""
載入範例銷售資料
在實際應用中,資料可能來自資料庫、CSV 檔案或 API
這裡使用程式生成的範例資料進行示範
Returns:
載入的資料 DataFrame
"""
# 第一組資料:產品 A、B、C 的銷售記錄
data_set_1 = {
'產品': ['B', 'B', 'C', 'B', 'C', 'C', 'A', 'B', 'C', 'A', 'A', 'B', 'C'],
'地區': ['北部', '西部', '東部', '南部', '北部', '西部', '南部', '南部',
'西部', '西部', '東部', '北部', '南部'],
'季度': ['Q1', 'Q2', 'Q1', 'Q4', 'Q1', 'Q1', 'Q1', 'Q1', 'Q2', 'Q2',
'Q4', 'Q4', 'Q2'],
'銷售額': [10531, 35531, 34801, 29865, 11015, 15710, 32393, 48771,
12051, 32907, 25510, 35845, 36765],
'營收': [8667, 8075, 14538, 18483, 9024, 19110, 19103, 10125,
8313, 16696, 13947, 18191, 7885]
}
# 第二組資料:產品 A、B、C 的額外銷售記錄
data_set_2 = {
'產品': ['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'C'],
'地區': ['南部', '東部', '南部', '東部', '南部', '東部', '北部', '北部',
'西部', '北部', '北部', '西部', '西部', '南部'],
'季度': ['Q4', 'Q3', 'Q3', 'Q1', 'Q3', 'Q3', 'Q2', 'Q3', 'Q4', 'Q3',
'Q4', 'Q1', 'Q2', 'Q1'],
'銷售額': [48450, 18277, 37907, 49514, 24023, 14193, 21458, 33740,
22235, 22799, 15624, 31041, 42509, 39479],
'利潤': [8925, 8060, 11601, 6917, 14648, 18196, 17142, 8305,
6773, 10717, 9430, 18816, 17044, 5714]
}
# 第三組資料:地區與季度的銷售記錄
data_set_3 = {
'產品': ['B', 'B', 'A', 'B', 'C', 'C', 'A', 'C', 'A', 'A', 'B'],
'地區': ['西部', '東部', '南部', '西部', '東部', '西部', '北部',
'北部', '東部', '南部', '北部'],
'季度': ['Q4', 'Q4', 'Q4', 'Q1', 'Q1', 'Q1', 'Q2', 'Q4', 'Q2',
'Q2', 'Q3'],
'銷售額': [41988, 25635, 22468, 39790, 11939, 29201, 15299,
45134, 34531, 37078, 30219],
'收入': [15295, 15470, 15289, 14727, 6249, 8104, 16510,
13894, 7949, 11152, 18630]
}
# 合併所有資料集
df1 = pd.DataFrame(data_set_1)
df2 = pd.DataFrame(data_set_2)
df3 = pd.DataFrame(data_set_3)
# 標準化欄位名稱
# 將營收、利潤、收入統一為「營收」欄位
df1['營收'] = df1['營收']
df2['營收'] = df2['利潤']
df3['營收'] = df3['收入']
# 選擇統一的欄位
columns = ['產品', '地區', '季度', '銷售額', '營收']
df1 = df1[columns]
df2 = df2[columns]
df3 = df3[columns]
# 合併資料集
self.data = pd.concat([df1, df2, df3], ignore_index=True)
print(f"\n已載入 {len(self.data)} 筆銷售記錄")
print(f"資料範圍:{len(self.data['產品'].unique())} 個產品,"
f"{len(self.data['地區'].unique())} 個地區,"
f"{len(self.data['季度'].unique())} 個季度")
return self.data
def clean_data(self):
"""
清理與驗證資料
執行資料品質檢查並處理異常值
Returns:
清理後的資料 DataFrame
"""
print("\n開始資料清理與驗證...")
# 複製原始資料
self.clean_data = self.data.copy()
# 檢查缺失值
missing_values = self.clean_data.isnull().sum()
if missing_values.any():
print(f"發現缺失值:\n{missing_values[missing_values > 0]}")
# 移除包含缺失值的記錄
self.clean_data = self.clean_data.dropna()
print(f"已移除 {len(self.data) - len(self.clean_data)} 筆不完整記錄")
else:
print("未發現缺失值")
# 檢查資料型別
print("\n資料型別檢查:")
print(self.clean_data.dtypes)
# 確保數值欄位為正確型別
numeric_columns = ['銷售額', '營收']
for col in numeric_columns:
self.clean_data[col] = pd.to_numeric(self.clean_data[col], errors='coerce')
# 檢查異常值(負數或極端值)
for col in numeric_columns:
negative_count = (self.clean_data[col] < 0).sum()
if negative_count > 0:
print(f"警告:{col} 欄位發現 {negative_count} 筆負值")
# 移除負值記錄
self.clean_data = self.clean_data[self.clean_data[col] >= 0]
# 計算衍生指標
# 營收率 = 營收 / 銷售額
self.clean_data['營收率'] = (
self.clean_data['營收'] / self.clean_data['銷售額'] * 100
).round(2)
# 將季度轉換為數值以便排序
quarter_map = {'Q1': 1, 'Q2': 2, 'Q3': 3, 'Q4': 4}
self.clean_data['季度序號'] = self.clean_data['季度'].map(quarter_map)
print(f"\n資料清理完成,剩餘 {len(self.clean_data)} 筆有效記錄")
return self.clean_data
def analyze_by_product(self):
"""
按產品分析銷售績效
計算每個產品的總銷售額、平均營收等指標
Returns:
產品分析結果 DataFrame
"""
print("\n" + "=" * 60)
print("產品別銷售績效分析")
print("=" * 60)
# 按產品分組統計
product_stats = self.clean_data.groupby('產品').agg({
'銷售額': ['sum', 'mean', 'std', 'count'],
'營收': ['sum', 'mean', 'std'],
'營收率': 'mean'
}).round(2)
# 扁平化多層索引
product_stats.columns = ['_'.join(col).strip() for col in product_stats.columns.values]
# 重新命名欄位為中文
product_stats = product_stats.rename(columns={
'銷售額_sum': '總銷售額',
'銷售額_mean': '平均銷售額',
'銷售額_std': '銷售額標準差',
'銷售額_count': '記錄數',
'營收_sum': '總營收',
'營收_mean': '平均營收',
'營收_std': '營收標準差',
'營收率_mean': '平均營收率(%)'
})
# 計算市場佔有率
total_sales = product_stats['總銷售額'].sum()
product_stats['市場佔有率(%)'] = (
product_stats['總銷售額'] / total_sales * 100
).round(2)
# 排序(按總銷售額降冪)
product_stats = product_stats.sort_values('總銷售額', ascending=False)
print("\n產品銷售績效排名:")
print(product_stats)
# 儲存分析結果
self.analysis_results['product_performance'] = product_stats
return product_stats
def analyze_by_region(self):
"""
按地區分析銷售表現
比較不同地區的銷售額與營收
Returns:
地區分析結果 DataFrame
"""
print("\n" + "=" * 60)
print("地區別銷售表現分析")
print("=" * 60)
# 按地區分組統計
region_stats = self.clean_data.groupby('地區').agg({
'銷售額': ['sum', 'mean', 'count'],
'營收': ['sum', 'mean'],
'營收率': 'mean'
}).round(2)
# 扁平化欄位名稱
region_stats.columns = ['_'.join(col).strip() for col in region_stats.columns.values]
region_stats = region_stats.rename(columns={
'銷售額_sum': '總銷售額',
'銷售額_mean': '平均單筆銷售額',
'銷售額_count': '交易次數',
'營收_sum': '總營收',
'營收_mean': '平均營收',
'營收率_mean': '平均營收率(%)'
})
# 計算地區貢獻度
total_sales = region_stats['總銷售額'].sum()
region_stats['銷售額佔比(%)'] = (
region_stats['總銷售額'] / total_sales * 100
).round(2)
# 排序
region_stats = region_stats.sort_values('總銷售額', ascending=False)
print("\n地區銷售表現排名:")
print(region_stats)
# 識別最佳與最差市場
best_region = region_stats.index[0]
worst_region = region_stats.index[-1]
print(f"\n最佳市場:{best_region}(總銷售額:{region_stats.loc[best_region, '總銷售額']:,.0f})")
print(f"待提升市場:{worst_region}(總銷售額:{region_stats.loc[worst_region, '總銷售額']:,.0f})")
self.analysis_results['region_performance'] = region_stats
return region_stats
def analyze_by_quarter(self):
"""
按季度分析銷售趨勢
識別季節性模式與趨勢
Returns:
季度分析結果 DataFrame
"""
print("\n" + "=" * 60)
print("季度銷售趨勢分析")
print("=" * 60)
# 按季度分組統計
quarter_stats = self.clean_data.groupby('季度').agg({
'銷售額': ['sum', 'mean', 'count'],
'營收': ['sum', 'mean'],
'營收率': 'mean',
'季度序號': 'first' # 用於排序
}).round(2)
# 扁平化欄位
quarter_stats.columns = ['_'.join(col).strip() for col in quarter_stats.columns.values]
quarter_stats = quarter_stats.rename(columns={
'銷售額_sum': '總銷售額',
'銷售額_mean': '平均銷售額',
'銷售額_count': '交易筆數',
'營收_sum': '總營收',
'營收_mean': '平均營收',
'營收率_mean': '平均營收率(%)',
'季度序號_first': '季度序號'
})
# 按季度排序
quarter_stats = quarter_stats.sort_values('季度序號')
# 計算季度成長率
quarter_stats['銷售額成長率(%)'] = quarter_stats['總銷售額'].pct_change() * 100
quarter_stats['營收成長率(%)'] = quarter_stats['總營收'].pct_change() * 100
print("\n季度銷售趨勢:")
print(quarter_stats.drop('季度序號', axis=1).round(2))
# 識別銷售高峰與低谷
peak_quarter = quarter_stats['總銷售額'].idxmax()
low_quarter = quarter_stats['總銷售額'].idxmin()
print(f"\n銷售高峰季度:{peak_quarter}({quarter_stats.loc[peak_quarter, '總銷售額']:,.0f})")
print(f"銷售低谷季度:{low_quarter}({quarter_stats.loc[low_quarter, '總銷售額']:,.0f})")
self.analysis_results['quarter_trend'] = quarter_stats
return quarter_stats
def product_region_analysis(self):
"""
產品-地區交叉分析
分析每個產品在不同地區的表現
Returns:
交叉分析透視表
"""
print("\n" + "=" * 60)
print("產品-地區交叉銷售分析")
print("=" * 60)
# 建立透視表
pivot_table = pd.pivot_table(
self.clean_data,
values='銷售額',
index='產品',
columns='地區',
aggfunc='sum',
fill_value=0
).round(0)
# 加入總計欄位與列
pivot_table['總計'] = pivot_table.sum(axis=1)
pivot_table.loc['總計'] = pivot_table.sum()
print("\n產品-地區銷售額分佈:")
print(pivot_table)
# 找出每個產品的最佳市場
print("\n各產品的最佳市場:")
for product in self.clean_data['產品'].unique():
product_data = pivot_table.loc[product].drop('總計')
best_region = product_data.idxmax()
best_sales = product_data.max()
print(f" 產品 {product}:{best_region}(銷售額:{best_sales:,.0f})")
self.analysis_results['product_region_matrix'] = pivot_table
return pivot_table
def generate_insights(self):
"""
生成商業洞察與建議
基於分析結果提供可行動的建議
"""
print("\n" + "=" * 60)
print("商業洞察與策略建議")
print("=" * 60)
insights = []
# 產品績效洞察
if 'product_performance' in self.analysis_results:
product_perf = self.analysis_results['product_performance']
top_product = product_perf.index[0]
top_share = product_perf.loc[top_product, '市場佔有率(%)']
insights.append(
f"1. 產品策略:產品 {top_product} 是市場領導者,市場佔有率達 {top_share}%,"
f"建議持續投資以鞏固市場地位。"
)
# 識別弱勢產品
weak_products = product_perf[product_perf['市場佔有率(%)'] < 20]
if not weak_products.empty:
weak_list = ', '.join(weak_products.index.tolist())
insights.append(
f"2. 產品改善:產品 {weak_list} 的市場佔有率較低,"
f"建議評估產品定位與行銷策略。"
)
# 地區市場洞察
if 'region_performance' in self.analysis_results:
region_perf = self.analysis_results['region_performance']
top_region = region_perf.index[0]
top_contribution = region_perf.loc[top_region, '銷售額佔比(%)']
insights.append(
f"3. 地區策略:{top_region}是最重要的市場,貢獻 {top_contribution}% 的銷售額,"
f"建議加強在此地區的市場佈局與客戶服務。"
)
# 識別成長潛力市場
growth_regions = region_perf[region_perf['平均單筆銷售額'] > region_perf['平均單筆銷售額'].median()]
if not growth_regions.empty:
insights.append(
f"4. 市場擴展:{', '.join(growth_regions.index.tolist())} "
f"具有較高的單筆交易金額,建議投入更多資源開發這些市場。"
)
# 季節性洞察
if 'quarter_trend' in self.analysis_results:
quarter_trend = self.analysis_results['quarter_trend']
peak_q = quarter_trend['總銷售額'].idxmax()
low_q = quarter_trend['總銷售額'].idxmin()
insights.append(
f"5. 季節性策略:{peak_q} 是銷售高峰期,{low_q} 是銷售淡季,"
f"建議在淡季加強促銷活動,並在旺季前備足庫存。"
)
# 輸出所有洞察
print()
for insight in insights:
print(insight)
print()
return insights
def create_visualizations(self):
"""
生成視覺化圖表
將分析結果以圖表方式呈現
"""
print("\n正在生成視覺化圖表...")
# 設定圖表樣式
sns.set_style("whitegrid")
# 建立子圖
fig, axes = plt.subplots(2, 2, figsize=(16, 12))
fig.suptitle('產品銷售資料分析儀表板', fontsize=16, fontweight='bold')
# 圖表 1:產品銷售額比較
if 'product_performance' in self.analysis_results:
product_perf = self.analysis_results['product_performance']
axes[0, 0].bar(product_perf.index, product_perf['總銷售額'], color='steelblue')
axes[0, 0].set_title('產品總銷售額比較')
axes[0, 0].set_xlabel('產品')
axes[0, 0].set_ylabel('銷售額')
axes[0, 0].ticklabel_format(style='plain', axis='y')
# 圖表 2:地區銷售額分佈
if 'region_performance' in self.analysis_results:
region_perf = self.analysis_results['region_performance']
axes[0, 1].pie(
region_perf['總銷售額'],
labels=region_perf.index,
autopct='%1.1f%%',
startangle=90
)
axes[0, 1].set_title('地區銷售額佔比')
# 圖表 3:季度趨勢
if 'quarter_trend' in self.analysis_results:
quarter_trend = self.analysis_results['quarter_trend']
axes[1, 0].plot(
quarter_trend.index,
quarter_trend['總銷售額'],
marker='o',
color='green',
linewidth=2
)
axes[1, 0].set_title('季度銷售額趨勢')
axes[1, 0].set_xlabel('季度')
axes[1, 0].set_ylabel('銷售額')
axes[1, 0].grid(True, alpha=0.3)
# 圖表 4:產品-地區熱力圖
if 'product_region_matrix' in self.analysis_results:
pivot = self.analysis_results['product_region_matrix'].drop(['總計'], axis=0).drop(['總計'], axis=1)
sns.heatmap(
pivot,
annot=True,
fmt='.0f',
cmap='YlOrRd',
ax=axes[1, 1]
)
axes[1, 1].set_title('產品-地區銷售熱力圖')
plt.tight_layout()
plt.savefig('/mnt/user-data/outputs/sales_analysis_dashboard.png', dpi=300, bbox_inches='tight')
print("視覺化圖表已儲存:sales_analysis_dashboard.png")
plt.show()
def main():
"""主程式進入點"""
# 建立分析器實例
analyzer = SalesAnalyzer()
# 載入資料
analyzer.load_sample_data()
# 資料清理
analyzer.clean_data()
# 執行多維度分析
analyzer.analyze_by_product()
analyzer.analyze_by_region()
analyzer.analyze_by_quarter()
analyzer.product_region_analysis()
# 生成洞察
analyzer.generate_insights()
# 建立視覺化
analyzer.create_visualizations()
print("\n分析完成!")
if __name__ == "__main__":
main()
這個完整的銷售資料分析系統展現了從資料載入到洞察生成的完整流程。程式採用物件導向設計,將各個分析功能封裝在清晰的方法中。資料清理階段處理缺失值、異常值並計算衍生指標如營收率。多維度分析包含產品績效評估、地區市場比較、季度趨勢識別與產品地區交叉分析。商業洞察生成整合所有分析結果,提供可行動的策略建議。視覺化圖表讓複雜的數據變得易於理解,支援快速的決策制定。
銷售資料分析的完整流程涉及多個階段的資料處理與分析,以下的活動圖展示了這個系統化的過程。
@startuml
!define PLANTUML_FORMAT svg
!theme _none_
skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 16
skinparam minClassWidth 100
start
:初始化分析系統;
:載入銷售資料;
note right
來源可能是:
- 資料庫查詢
- CSV/Excel 檔案
- API 介面
end note
:資料品質檢查;
if (發現缺失值或異常值?) then (是)
:執行資料清理;
note right
- 處理缺失值
- 移除異常值
- 標準化格式
end note
else (否)
:資料驗證通過;
endif
:計算衍生指標;
note right
營收率、成長率等
end note
:產品績效分析;
note right
- 總銷售額排名
- 市場佔有率
- 平均績效指標
end note
:地區市場分析;
note right
- 地區銷售額比較
- 市場貢獻度
- 識別優勢市場
end note
:季度趨勢分析;
note right
- 季節性模式
- 成長率計算
- 趨勢預測
end note
:產品地區交叉分析;
note right
- 透視表分析
- 熱力圖視覺化
- 識別最佳組合
end note
:生成商業洞察;
note right
- 策略建議
- 風險警示
- 機會識別
end note
:建立視覺化報表;
note right
- 儀表板設計
- 圖表生成
- 互動式報表
end note
:輸出分析結果;
stop
@enduml這個活動圖完整呈現了銷售資料分析的系統化流程。分析開始於資料載入階段,來源可能是企業資料庫、試算表檔案或第三方 API。資料品質檢查是確保分析準確性的關鍵步驟,包含缺失值處理、異常值偵測與資料型別驗證。清理後的資料會計算營收率、成長率等衍生指標,為後續分析提供更豐富的維度。多維度分析階段從產品、地區、季度等不同角度切入,識別績效模式與商業機會。產品地區交叉分析透過透視表揭示細分市場的表現。最終生成的商業洞察整合所有分析結果,提供具體的策略建議與行動方案。
數據驅動決策的實踐與未來展望
經過系統化的銷售資料分析,我們能夠將原本分散的交易記錄轉化為具有商業價值的洞察。從分析結果可以清楚看到,南部地區是企業最重要的市場,無論是總銷售額還是平均交易金額都顯著高於其他地區。這個發現為市場資源配置提供了明確的方向,企業應該加強在南部地區的銷售團隊建設、通路拓展與客戶服務品質。
產品組合的分析揭示了各產品線的競爭力差異。市場領導產品應該持續投資以鞏固地位,弱勢產品則需要評估是否調整定位、改善產品功能或是加強行銷推廣。產品地區交叉分析更進一步指出每個產品的最佳市場,這些資訊可以指導精準行銷策略的制定,將有限的行銷預算投入到最有潛力的市場區隔。
季節性趨勢的識別對於營運規劃至關重要。銷售高峰期需要提前備貨以避免缺貨,淡季則可以透過促銷活動刺激需求。生產計劃、庫存管理與人力配置都應該根據季節性模式進行調整,最大化資源效率並降低營運成本。
展望未來,銷售資料分析將持續朝向更智慧、更即時的方向發展。機器學習技術的應用能夠建立更精準的需求預測模型,自動識別異常模式並提前預警潛在風險。即時資料處理技術讓企業能夠監控當日甚至當前小時的銷售表現,快速回應市場變化。跨系統的資料整合將打破資料孤島,結合銷售、庫存、客戶與競爭對手資訊,提供更全面的商業視野。
在台灣的商業環境中,中小企業往往缺乏專業的資料分析團隊與工具。然而,透過開源的 Python 資料分析工具與雲端商業智慧平台,即使是資源有限的企業也能夠建立基本的資料分析能力。重要的是建立數據驅動的決策文化,讓資料分析不只是技術部門的工作,而是融入到整個組織的決策流程中。
對於希望提升資料分析能力的企業,建議從核心業務場景開始,選擇一個具體的問題進行深入分析,逐步累積經驗與建立分析框架。不需要追求一步到位的完美方案,而是透過持續的實踐與迭代,逐漸提升分析的深度與廣度。最終目標是讓數據成為企業最重要的戰略資產,在激烈的市場競爭中保持優勢。