数据分析案例-基于红米和华为手机的用户评论分析

 

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


目录

1.项目背景

2.数据集介绍

3.技术工具

4.实验过程

4.1导入数据

4.2数据预处理 

4.3数据可视化

4.4snowmlp情感分析

源代码


1.项目背景

        在智能手机市场日益繁荣的今天,红米与华为手机作为国产手机品牌的佼佼者,凭借其各自独特的品牌魅力和技术实力,赢得了广泛的用户群体和高度关注。随着技术的不断进步和消费者需求的日益多样化,用户对手机的期望已不仅限于基本的通讯功能,更涵盖了性能、拍照、续航、用户体验等多个方面。因此,深入探究红米与华为手机在用户长期使用过程中的实际表现,尤其是用户评论中所反映出的真实反馈,对于理解市场需求、优化产品设计及提升用户体验具有重要意义。

        本实验的背景正是基于这样的市场环境和技术发展趋势。我们旨在通过收集并分析红米与华为手机的用户评论,全面、客观地揭示两款手机在性能、拍照、续航、用户体验等多个维度的真实表现。这些用户评论来自不同渠道,包括官方网站、社交媒体、电商平台等,涵盖了广泛的用户群体和多样化的使用场景,为实验提供了丰富而真实的数据基础。

        通过本次实验,我们期望能够解答以下问题:在长期使用过程中,红米与华为手机在哪些方面表现出色?哪些方面仍有改进空间?用户对于两款手机的整体满意度如何?以及用户评论中反映出的共同需求和痛点是什么?基于以上背景,本实验将采用文本挖掘、情感分析等方法,对用户评论进行深入挖掘和分析,以揭示出隐藏在海量数据背后的有价值信息。通过对比红米与华为手机的用户评论,我们可以更加清晰地看到两款手机在市场上的竞争态势和用户需求的差异,为手机厂商提供有益的参考和启示。同时,本次实验也将为消费者在选择手机时提供更加全面、客观的参考依据,帮助他们根据自己的实际需求和预算做出更加明智的决策。

2.数据集介绍

本次实验数据集来源于京东网,采用Python爬虫获取了红米和华为手机的用户评论,共计1570条数据,10个变量,变量含义分别为用户ID、用户昵称、IP属地、评论时间、产品颜色、产品大小、评分、评论点赞量、评论回复量和评论内容。

3.技术工具

Python版本:3.9

代码编辑器:jupyter notebook

4.实验过程

4.1导入数据

查看数据大小

查看数据基本信息

查看数值型变量的描述性统计

查看非数值型变量的描述性统计

4.2数据预处理 

统计缺失值情况

发现没有缺失值

统计重复值情况

发现红米数据集中存在7个重复值,删除即可

4.3数据可视化

因与地图相关的图片会被和谐,所有这里自行运行即可! 

因与地图相关的图片会被和谐,所有这里自行运行即可! 

import collections
import stylecloud
import re
import jieba
from PIL import Imagedef draw_WorldCloud(df,pic_name,color='white'):data =  ''.join([re.sub(r'[^0-9A-Za-z][^0-9A-Za-z][^0-9A-Za-z][^0-9A-Za-z]:','',item) for item in df])# 文本预处理 :去除一些无用的字符只提取出中文出来new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S)new_data = "".join(new_data)# 文本分词seg_list_exact = jieba.cut(new_data)result_list = []with open('停用词库.txt', encoding='utf-8') as f: #可根据需要打开停用词库,然后加上不想显示的词语con = f.readlines()stop_words = set()for i in con:i = i.replace("\n", "")   # 去掉读取每一行数据的\nstop_words.add(i)for word in seg_list_exact:if word not in stop_words and len(word) > 1:result_list.append(word)word_counts = collections.Counter(result_list)# 词频统计:获取前100最高频的词word_counts_top = word_counts.most_common(100)with open(f'{pic_name}词频统计.txt','w',encoding='utf-8')as f:for i in word_counts_top:f.write(str(i[0]))f.write('\t')f.write(str(i[1]))f.write('\n')print(word_counts_top)# 绘制词云图stylecloud.gen_stylecloud(text=' '.join(result_list), collocations=False, # 是否包括两个单词的搭配(二字组)font_path=r'C:\Windows\Fonts\msyh.ttc', #设置字体,参考位置为  size=800, # stylecloud 的大小palette='cartocolors.qualitative.Bold_7', # 调色板background_color=color, # 背景颜色icon_name='fas fa-cloud', # 形状的图标名称 gradient='horizontal', # 梯度方向max_words=2000, # stylecloud 可包含的最大单词数max_font_size=150, # stylecloud 中的最大字号stopwords=True, # 布尔值,用于筛除常见禁用词output_name=f'{pic_name}.png') # 输出图片# 打开图片展示img=Image.open(f'{pic_name}.png')img.show()

4.4snowmlp情感分析

 

 

源代码

import pandas as pd
import matplotlib.pylab as plt
import numpy as np
import seaborn as sns
sns.set(font='SimHei')
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False   #解决符号无法显示
import warnings
warnings.filterwarnings('ignore')redmi = pd.read_csv('JD_comment_100075799823--0-时间排序.csv')
huawei = pd.read_csv('JD_comment_100064695864--0-时间排序.csv')
redmi.head(5)
huawei.head()
redmi.shape # 查看数据大小
huawei.shape
redmi.info() # 查看数据基本信息
huawei.info()
redmi.describe() # 查看数值型变量的描述性统计
huawei.describe()
redmi.describe(include='O') # 查看非数值型变量的描述性统计
huawei.describe(include='O')
redmi.isnull().sum() # 统计数据缺失值情况
huawei.isnull().sum()
redmi.duplicated().sum() # 统计数据重复值情况
huawei.duplicated().sum()
redmi.drop_duplicates(inplace=True) # 删除重复值
# 去除评论为“此用户未及时填写评价内容”的数据
redmi = redmi[redmi['content']!='此用户未填写评价内容']
huawei = huawei[huawei['content']!='此用户未填写评价内容']
# 不同颜色产品的购买数量
sns.countplot(redmi['product_color'])
plt.xticks()
plt.xlabel('产品颜色')
plt.ylabel('产品数量')
plt.title('不同颜色产品的购买数量-红米K70')
plt.show()
# 不同颜色产品的购买数量
sns.countplot(huawei['product_color'])
plt.xticks(rotation=45)
plt.xlabel('产品颜色')
plt.ylabel('产品数量')
plt.title('不同颜色产品的购买数量-华为Mate60pro')
plt.show()
# 不同内存大小的产品购买数量
sns.countplot(redmi['product_size'])
plt.xlabel('内存大小')
plt.ylabel('产品数量')
plt.title('不同内存大小的产品购买数量-红米K70')
plt.show()
# 不同内存大小的产品购买数量
sns.countplot(huawei['product_size'])
plt.xlabel('内存大小')
plt.ylabel('产品数量')
plt.title('不同内存大小的产品购买数量-华为Mate60pro')
plt.show()
# 不同颜色产品的平均得分-红米K70
redmi.groupby('product_color').mean()['score'].plot(kind='bar')
plt.xticks()
plt.ylabel('评价得分')
plt.title('不同颜色产品的平均得分-红米K70')
plt.show()
# 不同颜色产品的平均得分-华为Mate60pro
huawei.groupby('product_color').mean()['score'].plot(kind='bar')
plt.xticks(rotation=45)
plt.ylabel('评价得分')
plt.title('不同颜色产品的平均得分-华为Mate60pro')
plt.show()
# 不同型号产品的平均得分-红米K70
redmi.groupby('product_size').mean()['score'].plot(kind='bar')
plt.xticks(rotation=0)
plt.ylabel('评价得分')
plt.title('不同型号产品的平均得分-红米K70')
plt.show()
# 不同型号产品的平均得分-华为Mate60pro
huawei.groupby('product_size').mean()['score'].plot(kind='bar')
plt.xticks(rotation=0)
plt.ylabel('评价得分')
plt.title('不同型号产品的平均得分-华为Mate60pro')
plt.show()
# 最近一段时间内产品的评论数量
redmi['creation_time'] = redmi['creation_time'].astype('datetime64[D]')
plt.figure(figsize=(14,6))
redmi.groupby(redmi['creation_time']).count()['content'].plot()
plt.ylabel('评论数量')
plt.title('最近一段时间内产品的评论数量-红米K70')
plt.show()
# 最近一段时间内产品的评论数量
huawei['creation_time'] = huawei['creation_time'].astype('datetime64[D]')
plt.figure(figsize=(14,6))
huawei.groupby(huawei['creation_time']).count()['content'].plot()
plt.ylabel('评论数量')
plt.title('最近一段时间内产品的评论数量-华为Mate60pro')
plt.show()
# 处理location变量获取地图数据-红米K70
result = []
for x,y in zip(redmi['location'].value_counts().index.to_list(),redmi['location'].value_counts().values.tolist()):if x == '新疆':result.append(['新疆维吾尔自治区',y])elif x == '西藏':result.append(['西藏自治区',y])elif x == '内蒙古':result.append(['内蒙古自治区',y])elif x == '宁夏':result.append(['宁夏回族自治区',y])elif x in ['重庆','北京','天津','上海']:result.append([x + '市',y])elif x == '广西':result.append(['广西壮族自治区',y])elif x == '港澳':result.append(['香港特别行政区',y])else:result.append([x+'省',y])
result
from pyecharts.charts import *
from pyecharts import options as  opts 
map = Map()
map.add('各省份购买数量-红米K70',result,maptype='china',is_map_symbol_show=False,label_opts=opts.LabelOpts(is_show=False))
map.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=100,min_=1)
)
map.render(path='各城市岗位数量分布-红米K70.html')
map.render_notebook() 
# 处理location变量获取地图数据-华为Mate60pro
result = []
for x,y in zip(huawei['location'].value_counts().index.to_list(),huawei['location'].value_counts().values.tolist()):if x == '新疆':result.append(['新疆维吾尔自治区',y])elif x == '西藏':result.append(['西藏自治区',y])elif x == '内蒙古':result.append(['内蒙古自治区',y])elif x == '宁夏':result.append(['宁夏回族自治区',y])elif x in ['重庆','北京','天津','上海']:result.append([x + '市',y])elif x == '广西':result.append(['广西壮族自治区',y])elif x == '港澳':result.append(['香港特别行政区',y])else:result.append([x+'省',y])
result
from pyecharts.charts import *
from pyecharts import options as  opts 
map = Map()
map.add('各省份购买数量-华为Mate60pro',result,maptype='china',is_map_symbol_show=False,label_opts=opts.LabelOpts(is_show=False))
map.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=50,min_=1)
)
map.render(path='各城市岗位数量分布-华为Mate60pro.html')
map.render_notebook() 
import collections
import stylecloud
import re
import jieba
from PIL import Imagedef draw_WorldCloud(df,pic_name,color='white'):data =  ''.join([re.sub(r'[^0-9A-Za-z][^0-9A-Za-z][^0-9A-Za-z][^0-9A-Za-z]:','',item) for item in df])# 文本预处理 :去除一些无用的字符只提取出中文出来new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S)new_data = "".join(new_data)# 文本分词seg_list_exact = jieba.cut(new_data)result_list = []with open('停用词库.txt', encoding='utf-8') as f: #可根据需要打开停用词库,然后加上不想显示的词语con = f.readlines()stop_words = set()for i in con:i = i.replace("\n", "")   # 去掉读取每一行数据的\nstop_words.add(i)for word in seg_list_exact:if word not in stop_words and len(word) > 1:result_list.append(word)word_counts = collections.Counter(result_list)# 词频统计:获取前100最高频的词word_counts_top = word_counts.most_common(100)with open(f'{pic_name}词频统计.txt','w',encoding='utf-8')as f:for i in word_counts_top:f.write(str(i[0]))f.write('\t')f.write(str(i[1]))f.write('\n')print(word_counts_top)# 绘制词云图stylecloud.gen_stylecloud(text=' '.join(result_list), collocations=False, # 是否包括两个单词的搭配(二字组)font_path=r'C:\Windows\Fonts\msyh.ttc', #设置字体,参考位置为  size=800, # stylecloud 的大小palette='cartocolors.qualitative.Bold_7', # 调色板background_color=color, # 背景颜色icon_name='fas fa-cloud', # 形状的图标名称 gradient='horizontal', # 梯度方向max_words=2000, # stylecloud 可包含的最大单词数max_font_size=150, # stylecloud 中的最大字号stopwords=True, # 布尔值,用于筛除常见禁用词output_name=f'{pic_name}.png') # 输出图片# 打开图片展示img=Image.open(f'{pic_name}.png')img.show()
draw_WorldCloud(redmi['content'],'红米K70用户评论词云图')
draw_WorldCloud(huawei['content'],'华为Mate60pro用户评论词云图')
snowmlp情感分析
#加载情感分析模块
from snownlp import SnowNLP
# 遍历每条评论进行预测
values=[SnowNLP(i).sentiments for i in redmi['content']]
#输出积极的概率,大于0.5积极的,小于0.5消极的
#myval保存预测值
myval=[]
good=0
mid=0
bad=0
for i in values:if (i>=0.7):myval.append("积极")good=good+1elif 0.2<i<0.7:myval.append("中性")mid+=1else:myval.append("消极")bad=bad+1
redmi['预测值']=values
redmi['评价类别']=myval
redmi.head(3)
rate=good/(good+bad+mid)
print('好评率','%.f%%' % (rate * 100)) #格式化为百分比
#作图
y=values
plt.rc('font', family='SimHei', size=10)
plt.plot(y, marker='o', mec='r', mfc='w',label=u'评价分值')
plt.xlabel('用户')
plt.ylabel('评价分值')
# 让图例生效
plt.legend()
#添加标题
plt.title('评论情感分析-redmi',family='SimHei',size=14,color='blue')
plt.show()
y = redmi['评价类别'].value_counts().values.tolist()
plt.pie(y,labels=['积极','中性','消极'], # 设置饼图标签colors=["#d5695d", "#5d8ca8", "#65a479"], # 设置饼图颜色autopct='%.2f%%', # 格式化输出百分比)
plt.title('评论情感分析-redmi',family='SimHei',size=14,color='blue')
plt.show()
draw_WorldCloud(redmi[redmi['评价类别']=='积极']['content'],'红米K70用户评论词云图-好评')
draw_WorldCloud(redmi[redmi['评价类别']=='消极']['content'],'红米K70用户评论词云图-差评')
#加载情感分析模块
from snownlp import SnowNLP
# 遍历每条评论进行预测
values=[SnowNLP(i).sentiments for i in huawei['content']]
#输出积极的概率,大于0.5积极的,小于0.5消极的
#myval保存预测值
myval=[]
good=0
mid=0
bad=0
for i in values:if (i>=0.7):myval.append("积极")good=good+1elif 0.2<i<0.7:myval.append("中性")mid+=1else:myval.append("消极")bad=bad+1
huawei['预测值']=values
huawei['评价类别']=myval
huawei.head(3)
rate=good/(good+bad+mid)
print('好评率','%.f%%' % (rate * 100)) #格式化为百分比
#作图
y=values
plt.rc('font', family='SimHei', size=10)
plt.plot(y, marker='o', mec='r', mfc='w',label=u'评价分值')
plt.xlabel('用户')
plt.ylabel('评价分值')
# 让图例生效
plt.legend()
#添加标题
plt.title('评论情感分析-huawei',family='SimHei',size=14,color='blue')
plt.show()
y = huawei['评价类别'].value_counts().values.tolist()
plt.pie(y,labels=['积极','中性','消极'], # 设置饼图标签colors=["#d5695d", "#5d8ca8", "#65a479"], # 设置饼图颜色autopct='%.2f%%', # 格式化输出百分比)
plt.title('评论情感分析-huawei',family='SimHei',size=14,color='blue')
plt.show()
draw_WorldCloud(huawei[huawei['评价类别']=='积极']['content'],'华为Mate60pro用户评论词云图-好评')
draw_WorldCloud(huawei[huawei['评价类别']=='消极']['content'],'华为Mate60pro用户评论词云图-差评')
LDA主题分析
import re
import jiebadef chinese_word_cut(mytext):# 文本预处理 :去除一些无用的字符只提取出中文出来new_data = re.findall('[\u4e00-\u9fa5]+', mytext, re.S)new_data = " ".join(new_data)# 文本分词seg_list_exact = jieba.cut(new_data)result_list = []with open('停用词库.txt', encoding='utf-8') as f: # 可根据需要打开停用词库,然后加上不想显示的词语con = f.readlines()stop_words = set()for i in con:i = i.replace("\n", "")   # 去掉读取每一行数据的\nstop_words.add(i)for word in seg_list_exact:if word not in stop_words and len(word) > 1:result_list.append(word)      return " ".join(result_list)test = '在这里选购安全方便快捷💜,快递小哥态度非常好,这个价格非常给力💪,十分推荐,会继续回购😃大品牌!值得信赖!效果超级好!贵有贵的道理!很棒的商品!'
chinese_word_cut(test)
# 中文分词
redmi["content_cutted"] = redmi.content.apply(chinese_word_cut)
redmi.head()
# 中文分词
huawei["content_cutted"] = huawei.content.apply(chinese_word_cut)
huawei.head()
import tomotopy as tpdef find_k(docs, min_k=1, max_k=20, min_df=2):# min_df 词语最少出现在2个文档中scores = []for k in range(min_k, max_k):mdl = tp.LDAModel(min_df=min_df, k=k, seed=555)for words in docs:if words:mdl.add_doc(words)mdl.train(20)coh = tp.coherence.Coherence(mdl)scores.append(coh.get_score())plt.plot(range(min_k, max_k), scores)plt.xlabel("number of topics")plt.ylabel("coherence")plt.show()
find_k(docs=redmi['content_cutted'], min_k=1, max_k=10, min_df=2)
find_k(docs=huawei['content_cutted'], min_k=1, max_k=10, min_df=2)
# 初始化LDA
mdl = tp.LDAModel(k=2, min_df=2, seed=555)
for words in redmi['content_cutted']:#确认words 是 非空词语列表if words:mdl.add_doc(words=words.split())#训 练
mdl.train()
# 查看每个topic feature words
for k in range(mdl.k):print('Top 20 words of topic #{}'.format(k))print(mdl.get_topic_words(k, top_n=20))print('\n')
# 查看话题模型信息
mdl.summary()
import pyLDAvis
import numpy as np# 在notebook显示
pyLDAvis.enable_notebook()# 获取pyldavis需要的参数
topic_term_dists = np.stack([mdl.get_topic_word_dist(k) for k in range(mdl.k)])
doc_topic_dists = np.stack([doc.get_topic_dist() for doc in mdl.docs])
doc_topic_dists /= doc_topic_dists.sum(axis=1, keepdims=True)
doc_lengths = np.array([len(doc.words) for doc in mdl.docs])
vocab = list(mdl.used_vocabs)
term_frequency = mdl.used_vocab_freqprepared_data = pyLDAvis.prepare(topic_term_dists, doc_topic_dists, doc_lengths, vocab, term_frequency,start_index=0, # tomotopy话题id从0开始,pyLDAvis话题id从1开始sort_topics=False # 注意:否则pyLDAvis与tomotopy内的话题无法一一对应。 
)# 可视化结果存到html文件中
pyLDAvis.save_html(prepared_data, 'ldavis-redmi.html')# notebook中显示
pyLDAvis.display(prepared_data)
# 初始化LDA
mdl = tp.LDAModel(k=5, min_df=2, seed=555)
for words in huawei['content_cutted']:#确认words 是 非空词语列表if words:mdl.add_doc(words=words.split())#训 练
mdl.train()
# 查看每个topic feature words
for k in range(mdl.k):print('Top 20 words of topic #{}'.format(k))print(mdl.get_topic_words(k, top_n=20))print('\n')
# 查看话题模型信息
mdl.summary()
import pyLDAvis
import numpy as np# 在notebook显示
pyLDAvis.enable_notebook()# 获取pyldavis需要的参数
topic_term_dists = np.stack([mdl.get_topic_word_dist(k) for k in range(mdl.k)])
doc_topic_dists = np.stack([doc.get_topic_dist() for doc in mdl.docs])
doc_topic_dists /= doc_topic_dists.sum(axis=1, keepdims=True)
doc_lengths = np.array([len(doc.words) for doc in mdl.docs])
vocab = list(mdl.used_vocabs)
term_frequency = mdl.used_vocab_freqprepared_data = pyLDAvis.prepare(topic_term_dists, doc_topic_dists, doc_lengths, vocab, term_frequency,start_index=0, # tomotopy话题id从0开始,pyLDAvis话题id从1开始sort_topics=False # 注意:否则pyLDAvis与tomotopy内的话题无法一一对应。 
)# 可视化结果存到html文件中
pyLDAvis.save_html(prepared_data, 'ldavis-huawei.html')# notebook中显示
pyLDAvis.display(prepared_data)

资料获取,更多粉丝福利,关注下方公众号获取

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础框架 兼容视频格式

基础框架 兼容视频格式 修改 \src\components\Upload\src\BasicUpload.vue 数据库新增 vue <template><div class"w-full"><div class"upload"><div class"upload-card"><!--图片列表--><divclass"uploa…

qiankun 子应用怎样通过 props拿到子应用【注册之后挂载之前】主应用中发生变更的数据

场景描述&#xff1a;子应用需要在接口调用和页面渲染时&#xff0c;需要用到主应用登录之后拿到的用户数据 逻辑前提&#xff1a; 1、主应用在 main.js中通过 registerMicroApps注册了子应用 2、主应用登录之后将用户数据传递给子应用 >> 原先的做法&#xff08;有问题&…

Hooks 进阶:自定义 Hook 的设计与实践

引言 React Hooks 已成为现代 React 开发的核心范式&#xff0c;而自定义 Hook 则为我们提供了强大的代码复用机制。 自定义 Hook 的基础原理 自定义 Hook 本质上是一种函数复用机制&#xff0c;它允许我们将组件逻辑提取到可重用的函数中。与传统的高阶组件(HOC)和 render …

锂电电动扭剪扳手市场报告:现状、趋势与竞争格局深度解析

一、锂电电动扭剪扳手市场概述 锂电电动扭剪扳手作为建筑施工、钢结构安装等领域的关键工具&#xff0c;凭借其便携性、高效性及环保特性&#xff0c;正逐步替代传统手动及气动工具。该设备通过锂电池供电&#xff0c;结合智能扭矩控制技术&#xff0c;可精准完成高强度螺栓的…

[面试精选] 0076. 最小覆盖子串

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 76. 最小覆盖子串 - 力扣&#xff08;LeetCode&#xff09; 2. 题目描述 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字…

rabbitmq的高级特性

一.发送者的可靠性 1.生产者重试机制 修改publisher模块的application.yaml文件 spring:rabbitmq:connection-timeout: 1s # 设置MQ的连接超时时间template:retry:enabled: true # 开启超时重试机制initial-interval: 1000ms # 失败后的初始等待时间multiplier: 1 # 失败后下…

北京大学肖臻老师《区块链技术与应用》公开课:02-BTC-密码学原理

文章目录 1.比特币中用到的密码学的功能2. hash3. 签名 1.比特币中用到的密码学的功能 比特币中用到密码学中两个功能&#xff1a; hash、 签名。 2. hash hash函数的三个特性&#xff1a;抗碰撞性&#xff08;Collision Resistance&#xff09;、隐蔽性&#xff08;Hiding&…

Spring Cloud Gateway高并发限流——基于Redis实现方案解析

本文是一个基于 Spring Cloud Gateway 的分布式限流方案&#xff0c;使用Redis Lua实现高并发场景下的精准流量控制。该方案支持动态配置、多维度限流&#xff08;API路径/IP/用户&#xff09;&#xff0c;并包含完整的代码实现和性能优化建议。 一、架构设计 #mermaid-svg-vg…

SpringAI--RAG知识库

SpringAI–RAG知识库 RAG概念 什么是RAG&#xff1f; RAG(Retrieval-Augmented Genreation&#xff0c;检索增强生成)是一种结合信息检索技术和AI内容生成的混合架构&#xff0c;可以解决大模型的知识时效性限制和幻觉问题。 RAG在大语言模型生成回答之前&#xff0c;会先从…

【PhysUnits】14 二进制数的标准化表示(standardization.rs)

一、源码 这段代码主要用于处理二进制数的标准化表示。它定义了两个特质(trait) IfB0 和 IfB1&#xff0c;以及它们的实现&#xff0c;用于处理二进制数的前导零及前导一的简化。 use super::basic::{B0, B1, Z0, N1, Integer, NonZero, NonNegOne};/// 处理 B0<H> 类型…

将 ubutun 的网络模式 从NAT 改到 桥接模式后,无法上网,linux 没有IP地址 的解决方案

首先要将 ubutun 的网络模式设置为桥接模式 这里再从 NAT 模式改动成 桥接模式的时候&#xff0c;还出现了一个问题。改成桥接模式后&#xff0c;linux没有ip地址了。原因是 不知道什么时候 将 虚拟网络编辑器 中的值改动了 要选择这个 自动 选项

多模态大语言模型arxiv论文略读(九十)

Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Diffusion-based Contract Approach ➡️ 论文标题&#xff1a;Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Di…

电脑主板VGA长亮白灯

电脑主板VGA长亮白灯 起因解决方法注意事项&#xff1a; 起因 搬家没有拆机整机在车上晃荡导致显卡松动接触不良&#xff08;一般VGA长亮白灯都和显卡有关&#xff0c;主要排查显卡&#xff09; 解决方法 将显卡拆下重新安装即可 注意事项&#xff1a; 不可直接拔下显卡&a…

【监控】pushgateway中间服务组件

Pushgateway 是 Prometheus 生态中的一个中间服务组件&#xff0c;以独立工具形式存在&#xff0c;主要用于解决 Prometheus 无法直接获取监控指标的场景&#xff0c;弥补其定时拉取&#xff08;pull&#xff09;模式的不足。 其用途如下&#xff1a; 突破网络限制&#xff1…

打造AI智能旅行规划器:基于LLM和Crew AI的Agent实践

引言 今天来学习大佬开发的一个AI驱动的旅行规划应用程序&#xff0c;它能够自动处理旅行规划的复杂性——寻jni找航班、预订酒店以及优化行程。传统上&#xff0c;这个过程需要手动搜索多个平台&#xff0c;常常导致决策效率低下。 通过利用**代理型人工智能&#xff08;Age…

21. 自动化测试框架开发之Excel配置文件的测试用例改造

21. 自动化测试框架开发之Excel配置文件的测试用例改造 一、测试框架核心架构 1.1 组件依赖关系 # 核心库依赖 import unittest # 单元测试框架 import paramunittest # 参数化测试扩展 from chap3.po import * # 页面对象模型 from file_reader import E…

如何在电力系统中配置和管理SNTP时间同步?

在电力系统中配置和管理 SNTP 时间同步需结合行业标准&#xff08;如《DL/T 1100.1-2019》&#xff09;和分层架构特点&#xff0c;确保安全性、可靠性和精度适配。以下是具体操作指南&#xff0c;涵盖架构设计、设备配置、安全管理、运维监控四大核心环节&#xff0c;并附典型…

MTK-关于HW WCN的知识讲解

前言: 最近做项目过程中和硬件打交道比较多,现在关于整理下硬件的HW wcn的知识点 一 MTK常见的MT6631 Wi-Fi 2.4GHz 匹配调谐指南 ‌拓扑结构选择‌ 推荐采用并联电容拓扑(‌shunt cap topology‌)代替并联电感拓扑(‌shunt inductor topology‌),以减少潜在电路设计…

(1)课堂 1--5,这五节主要讲解 mysql 的概念,定义,下载安装与卸载

&#xff08;1&#xff09;谢谢老师&#xff1a; &#xff08;2&#xff09;安装 mysql &#xff1a; &#xff08;3&#xff09;镜像下载 &#xff0c;这个网址很好 &#xff1a; &#xff08;4&#xff09; 另一个虚拟机的是 zhang 123456 &#xff1a; 接着配置…

U-Boot ARMv8 平台异常处理机制解析

入口点&#xff1a;arch/arm/cpu/armv8/start.S 1. 判断是否定义了钩子&#xff0c;如有则执行&#xff0c;否则往下走。执行save_boot_params&#xff0c;本质就是保存一些寄存器的值。 2. 对齐修复位置无关码的偏移 假设U-Boot链接时基址为0x10000&#xff0c;但实际加载到0…