You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dianshang-qianduan/src/views/demand/environment.vue

243 lines
10 KiB
Vue

2 months ago
<template>
<div class="environment app-container">
<div class="handren">
<div class="left">
<el-button>赫芬达尔指数</el-button>
</div>
<div class="right">
<el-button @click="dialogVisible = true" type="primary" id="brtn">任务背景与目标</el-button>
<popModel :showModel="dialogVisible" title="任务背景:" @closePop="dialogVisible = false">
<template v-slot:content>
<p style="font-size: 1rem">
2025中国电商市场呈现存量竞争与增量创新并存的特征市场规模持续扩张全年预计突破40万亿元但增速趋缓传统实物电商增速降至6.8%增量主要依赖直播电商GMV占比28%社交电商及跨境电商出口额占比7.8%等新模式
<br />
<br />
竞争格局两极分化
<br />
传统巨头阿里京东拼多多通过下沉市场与供应链优化巩固优势合计市占率88%如拼多多低价策略京东县域物流72小时达
<br />
新兴势力快速崛起抖音快手以内容+电商提升用户渗透率至35%跨境电商平台TEMUSHEIN通过低价与本土化运营抢占海外市场TEMU月访问量4.47亿次
<br />
<br />
任务目标
<br />
<br />
在电商市场竞争激烈的情况下想要切入某个细分领域请使用赫芬达尔指数进行竞争环境分析挖掘市场需求为电商运营决策提供依据
<br />
<br />
①某细分领域店铺销售数据店铺名称店铺某商品销售额计算赫芬达尔指数
<br />
<br />
②根据计算结果分析竞争环境
</p>
</template>
</popModel>
</div>
</div>
<div class="caseBacktitle">
<img src="@/assets/images/步骤.png" alt="" />
<span>知识学习</span>
</div>
<p>赫芬达尔指数Herfindahl-Hirschman Index简称HHI是一种用于衡量市场集中度的综合指标广泛应用于经济学和金融学领域尤其在分析和评估市场竞争程度 在电商领域赫芬达尔指数可以用于分析各商家的市场竞争状况通过计算HHI值可以了解市场上商家的规模分布和市场份额情况进而判断市场的竞争程度和垄断程度</p>
<p>计算公式如下所示</p>
<div class="box">
<img class="ss" src="../../assets/images/u427.png" alt="" />
<div class="box1"></div>
</div>
<p>
根据HHI的值市场集中度可以分为以下几类
<br />
赫芬达尔指数 (HHI)值越接近 1表示市场集中度越高竞争程度越低值越接近 0表示市场集中度越低竞争程度越高
</p>
<div class="caseBacktitle">
<img src="@/assets/images/步骤.png" alt="" />
<span>实验实训</span>
</div>
<p>
任务要求请根据淘宝母婴行业下纸尿裤品类相关2024年数据计算纸尿裤市场赫芬达尔指数评估淘宝电商平台纸尿裤市场竞争情况
<br />
<span style="font-size: 12px">(数据选取自排名前30的纸尿裤品牌这30个品牌合计市场份额占总市场份额近90%因此我们假设这30个品牌代表整个淘宝电商平台纸尿裤市场其余品牌市场份额较小暂不计入)</span>
</p>
<p>
<el-button @click="onClick" type="primary" style="margin-right: 10px">数据下载</el-button>
<el-button @click="go">Python</el-button>
</p>
<el-table
:data="brandSalesRanking2024"
height="500px"
style="width: 80%"
border
:header-cell-style="{
color: '#fff',
fontSize: '14px',
backgroundColor: '#6A7DE9!important',
}"
>
<el-table-column label="‌排名‌" align="center" prop="rank"></el-table-column>
<el-table-column label="‌品牌名称‌" align="center" prop="brand">
<template #default="scope">
<span>{{ scope.row.brand }}({{ scope.row.englishName }})</span>
</template>
</el-table-column>
<el-table-column label="2024年销售额亿元" align="center" prop="sales"></el-table-column>
</el-table>
<codemirror :code="code2"></codemirror>
<div class="online">
<span>母婴行业纸尿裤品类的赫芬达尔指数为</span>
<el-input style="width: 100px" type="text" v-model="formInline.input1" />
</div>
<p>请根据计算结果分析母婴行业纸尿裤市场竞争环境</p>
<el-input v-model="formInline.textarea2" :autosize="{ minRows: 6, maxRows: 8 }" type="textarea" placeholder="" />
<div class="taskfooter">
<el-button @click="submitTask"></el-button>
<el-button @click="reTraining"></el-button>
</div>
</div>
</template>
<script setup>
import { getToken, setToken, removeToken, setUserInfo, removeUserInfo, getUserInfo } from "@/utils/auth";
import popModel from "@/views/components/popModal.vue";
import codemirror from "@/components/codemirror/index.vue";
import useUserStore from "@/store/modules/user";
const userStore = useUserStore();
const { proxy } = getCurrentInstance();
const dialogVisible = ref(false);
import * as analysisAPI from "@/api/market-demand-mining.js";
import { onMounted } from "vue";
const brandSalesRanking2024 = [
{ rank: 1, brand: "帮宝适", englishName: "Pampers", sales: 60.5 },
{ rank: 2, brand: "Babycare", sales: 42.5 },
{ rank: 3, brand: "好奇", englishName: "HUGGIES", sales: 37.5 },
{ rank: 4, brand: "Moony", englishName: "尤妮佳", sales: 23.5 },
{ rank: 5, brand: "大王", englishName: "GOO-N", sales: 19 },
{ rank: 6, brand: "碧芭宝贝", englishName: "Beaba", sales: 16.5 },
{ rank: 7, brand: "雀氏", englishName: "Chiaus", sales: 13 },
{ rank: 8, brand: "花王", englishName: "Merries", sales: 11 },
{ rank: 9, brand: "安儿乐", englishName: "Anerle", sales: 9 },
{ rank: 10, brand: "菲比", englishName: "Fitti", sales: 7 },
{ rank: 11, brand: "露安适", englishName: "LELCH", sales: 3.85 },
{ rank: 12, brand: "茵茵", englishName: "Cojin", sales: 3.4 },
{ rank: 13, brand: "爹地宝贝", englishName: "DaddyBaby", sales: 3.15 },
{ rank: 14, brand: "舒比奇", englishName: "Suitsky", sales: 2.75 },
{ rank: 15, brand: "爱得利", englishName: "Nory", sales: 2.5 },
{ rank: 16, brand: "十月结晶", sales: 2.25 },
{ rank: 17, brand: "巴布豆", englishName: "Bobdog", sales: 2.05 },
{ rank: 18, brand: "小鹿叮叮", englishName: "DeerBaby", sales: 1.75 },
{ rank: 19, brand: "Q路MO", sales: 1.5 },
{ rank: 20, brand: "妈咪宝贝", sales: 1.25 },
{ rank: 21, brand: "宗宝宝", englishName: "Qinbaobao", sales: 1.15 },
{ rank: 22, brand: "德祐", sales: 1.05 },
{ rank: 23, brand: "康贝", englishName: "Combi", sales: 0.95 },
{ rank: 24, brand: "南极人", sales: 0.85 },
{ rank: 25, brand: "子初", sales: 0.75 },
{ rank: 26, brand: "可优比", sales: 0.65 },
{ rank: 27, brand: "优尼佳", englishName: "UNICHARM", sales: 0.6 },
{ rank: 28, brand: "努比", englishName: "Nuby", sales: 0.5 },
{ rank: 29, brand: "好安适", sales: 0.4 },
{ rank: 30, brand: "米菲", sales: 0.4 },
];
const formInline = ref({
input1: "",
textarea2: "",
});
const code2 = `
import pandas as pd
# 读取数据
df = pd.read_excel(r'/dataResource/赫芬达尔指数数据.xlsx')
# 查看数据
print("原始数据:")
print(df.head())
# 计算总销售额
total_sales = df['2024年销售额亿元'].sum()
# 计算每个店铺的市场份额
df['市场份额'] = df['2024年销售额亿元'] / total_sales
# 计算赫芬达尔指数
hhi = (df['市场份额'] ** 2).sum()
print("计算结果:")
print(f'赫芬达尔指数 (HHI): {hhi}')`;
// 提交任务
const submitTask = () => {
console.log(userStore.userInfo, getUserInfo(), "userStore.userInfo");
if (!formInline.value.input1) return proxy.$modal.msgWarning("请先完成实验实训!");
analysisAPI
.competitionEnvironmentSubmit({
userId: userStore.userInfo.userId,
answer: Number(formInline.value.input1),
context: formInline.value.textarea2.trim(),
})
.then((res) => {
proxy.$modal.msgSuccess("提交成功");
});
};
const reTraining = () => {
analysisAPI
.industryDemandAnalysisReTrain({
userId: userStore.userInfo.userId,
module: "竞争环境分析",
})
.then((res) => {
// 清空数据
formInline.value.input1 = "";
formInline.value.textarea2 = "";
proxy.$modal.msgSuccess("重新实训成功");
});
};
// 回显竞争环境分析
const loadTaskInfo = () => {
analysisAPI
.competitionEnvironmentEcho({
userId: userStore.userInfo.userId,
})
.then((res) => {
if (!res.data) return;
formInline.value.input1 = res.data?.answer;
formInline.value.textarea2 = res.data?.context;
});
};
// 下载数据
const onClick = () => {
analysisAPI
.competitionEnvironmentDownload({
userId: userStore.userInfo.userId,
module: "竞争环境分析",
})
.then((res) => {
// 数据下载
const blob = new Blob([res], {
type: "application/vnd.ms-excel",
});
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.href = url;
link.setAttribute("download", "赫芬达尔指数数据.xlsx");
document.body.appendChild(link);
link.click();
proxy.$modal.msgSuccess("数据下载成功");
});
};
const go=()=>{
window.open('https://jrdsj.sztzjy.com:8000/user/zy84cf311/lab')
}
onMounted(() => {
loadTaskInfo();
});
</script>
<style lang='scss' scoped>
.app-container {
background: #ffffff;
.box {
position: relative;
width: 40%;
.box1 {
position: absolute;
bottom: 0;
right: 35%;
width: 200px;
height: 40px;
background: #ffffff;
}
}
}
</style>