目录

写在前面的话

题目分析

【数据清洗】

【NLTK】

【第一题】

【第2题e问】

【词云】---wordcloud包

【TF-IDF算法】

【第2题a、b、c问】需要先对评论数值化

【Textblob分析文本】

【熵权法确定权重】

【第2题 b、d问】

【datetime库】

【Matlab的ga函数求对数似然估计值】


2021年2月2日更新

想来是最近美赛快到了,各位学弟学妹们开始学习之前的题目,所以这篇文章开始有了评论私信要代码和论文的,我都没有回,在此表示抱歉,

论文不是我写的,我觉得我没有权利给你们,非常抱歉!(卑微鞠躬)

关键代码我自认为在博客里面写清楚了,要了我的代码也是差不多的,每个代码块所用到的知识我都给出相应链接了,自己再去搜一搜学学知道有什么功能、怎么用就可以了,大部分的代码实现我也都是比赛那几天才去学的。(^-^)V

最后,祝各位旗开得胜,幸福快乐每一天~

------------------------------------------------分隔线------------------------------------------------------------------------

写在前面的话

本篇博文为博主参加完美赛两天后所写,是否获奖并不知道,模型不算太优秀,本篇只在编程手实现模型的角度来写,记录参赛过程中遇到的问题及解决方法、感受等,并给出相关的参考博客。完赛两天过去了,博主记忆力有点差,很多细节记不清了,就写个大概,方便日后自己看。。。

--------------更新:已获F奖。第一次参加美赛,不出意外的话应该也会是最后一次参加的数模比赛,还是挺满意的---------------------

【题目及所给数据】

链接:https://pan.baidu.com/s/1nYMiLxLOVarIegT-Qs6ehg 
提取码:j6vo

或者你可以看这位朋友的博客:

2020 MCM Weekend 2 Problem C,2020美赛C题——完整版题目:完整版题目
2020 MCM Problem C Translation,2020美赛C题——详细版翻译:详细版翻译

【参赛感受】(一堆废话)

大三下啦,按队友的话说是数模比赛参加完一场就少一场了。之前参加国赛的时候,信誓旦旦地说“干完这一票老子再也不要搞数模了!”,哈哈哈哈哈哈哈哈哈哈,真香。最后还是好了伤疤忘了痛,跟着队友参加了。

而且,这次比赛竟然莫名其妙地香!或许是因为在家闲太久,突然有这种充实的感受很是满意,或许是之前接触过一点简单的文本分析的内容,代码写起来比较顺利,又或许是因为大部分代码用的是python写的,debug的过程比matlab快上好几倍,少了很多自我怀疑的过程!(平时除了数模实在不会用到matlab,每次用都是时隔好久又生疏了)(python真是个好的语言!O(∩_∩)O !)

完赛之后还是有些遗憾的。

因为模型建的比较慢,中文版论文写完还得翻译成英文版的,再调格式什么的,最后论文很赶。图做好了,论文手来不及换上去,唉,好可惜。所以奉劝各位以后要参加美赛的朋友,论文一定要早点写啊,论文格式提前搞好呀!如果有时间,用Latex写据说会好点。

为什么我们进度那么慢呢?我觉得一方面可能因为在家建模,大家前期有点松散了,另一方便可能是建模手受到我们指导老师的影响,反而乱了步调。怎么说呢,我们指导老师蛮负责的,只不过参加过数模的朋友应该清楚,模型一旦建出来实现出来,又要修改的话有时候挺花时间的。如果你的指导老师是在建模之前给你透解题思路,你可以好好考虑一下他的思路,如果是在你模型已经花时间想得差不过,并且已经在一定程度上实现出来的时候,就要好好斟酌一下了。老师给的意见能改则改,不能改,或者改需要花很多时间的花,就果断放弃吧。因为题目可能不止需要你建这一个模型!而且,如果你在其中一题上花太多心思,而导致论文没写完,可是连安慰奖都没有的!在博主水了几个数模比赛并得了几个水奖的经验来看,不管你的模型有多垃圾,多简单,多胡扯,只要你把所有题都完整地扯出来,并且有几个看起来还不错的结果,看起来还可以的图,并且论文没有太大的错误,得奖的可能性还是蛮大的!所以如果模型不好,就多在论文上花时间,把图搞得漂亮一点,无论如何,完赛就有希望!

题目分析

【再次提醒,我是以编程手的角度去理解的,解题思路并没有按题所给的顺序,着重在实现,不在原理】

这个题目大概说的是有一个公司,打算卖吹风机、微波炉和奶嘴。然后丢给你一些亚马逊上的其他竞争对手们的评论(评论带星级等信息),让你去分析。帮他的公司制定销售计划和分析受欢迎的产品特性等。

乍一看,我们以为会是经济类的题,因为我的两个队友都是经管学院的,所以觉得可能会比较擅长,就选了这题。

但其实这题更多的还是得从自然语言处理的角度来分析。

所给的评论信息如下:

marketplace customer_id review_id product_id product_parent product_title product_category star_rating helpful_votes total_votes vine verified_purchase review_headline review_body review_date    

【数据清洗】

  • 对所有数据处理的题目,首先应该想的是数据的清洗,对不必要的信息进行筛除。

    • 我们建模手发现所给的吹风机评论中含有不算吹风机类的产品,所以首先要筛除这些信息。具体方法:我从product_parent中进行分词并还原词形,再找是否存在关键词,来简单判断是否为制定产品。
    • 另外题目给了评论的helpful votes 和total votes,所以还可以结合这个来筛选。
    • 顺便为后面的题做准备,可以给评论分别按照产品和星级分个类。
      • 词形还原的代码如下:

        有关词形还原具体可参考其他小伙伴的博客:https://blog.csdn.net/jclian91/article/details/8366171

【NLTK】

  • 具体安装可以参看这篇博客:https://blog.csdn.net/gdkyxy2013/article/details/84787197

    • 另外python在自然语言处理上有一个最常用的库nltk,必须首先下载!这次建模最大的收获之一就是这个库了!真的爱了!简单介绍一下吧:

      NLTK,全称为Natural Language Toolkit,是一个自然语言处理工具包,是NLP研究领域常用的一个Python库,由宾夕法尼亚大学的Steven Bird和Edward Loper在Python的基础上开发的一个模块,至今已有超过十万行的代码。NLTK一个开源项目,其中包含数据集、Python模块、教程等;NLTK的功能主要有:分类、分词、标签、提取、解析、语义推理等。(NLTK的官方网站:https://www.nltk.org/)

【第一题】

【做了上面的准备之后,即可以开始做第一题啦】

第一题题目: 分析提供的三个产品数据集,以使用数学证据来识别,描述和支持有意义的定量和或定性模式,关系,量度和参数,这些数据将在有助于评估阳光公司的星级,评论和帮助等级之内和之间在三个新的在线市场产品中都取得了成功。

这题可以做一个简单回归。(反正我们是这么做的)这一题主要是我队友做的,没什么代码,不讲了。

清洗完数据以及对评论分类完之后,可以先做个词云看看。

第2题e问

(可以先用词云看个大概反正是个图,至少论文不会难看,就画呗)

【词云】---wordcloud包

具体:就是用根据星级分好类的三个数据,经过去停用词等操作之后分别画5个词云,然后大概能看出什么不同。

部分代码:

大概效果图:

吹风机5星级词云:                                                     1星级:

          

对词云的学习,可以看一下这篇博客:https://blog.csdn.net/fly910905/article/details/77763086

【TF-IDF算法】

画出词云只是看个大概,图个好看,其实什么卵用都没有。还是得详细分析的。比如,对评论进行分词、还原词形之后对瓷瓶进行统计。我参考了TF-IDF算法,不过只算出TF(Term Frequency)和DF(Document Frequency)。

想了解TF-IDF算法,可查看这位小伙伴的博客:https://blog.csdn.net/asialee_bird/article/details/81486700

这个代码没什么特别的:

【第2题a、b、c问】需要先对评论数值化

即对评论分析情感倾向。这一问题真的让我体会到python实在是太棒了!

【Textblob分析文本】

(快来看我发现了什么神奇玩意儿!!!)

建模初期我一直在考虑怎么分析评论的情感,将评论数值化,一直在想用比较简单的基于词典的方法,通过看文本中正性词汇和负性词汇的占比来分析,但是一直找不到合适的词典,处理起来精确度也未知。后来!!偶然被我发现了一个python库,简直不要太方便!

简单介绍一下:

TextBlob是一个用python编写的开源的文本处理库,它可以用来执行很多自然语言处理的任务,比如,词性标注、名词性成分提取、情感分析、文本翻译等等
git 网址:https://github.com/sloria/TextBlob
官方文档:https://textblob.readthedocs.io/en/dev/

代码特别简单:

【注意这边得到的sentiment.polarity的范围在-1和1之间,数值越靠近-1表示句子所含情感越有可能是负面的,越靠近1表示句子所含情感更有可能为正面情感】

OK,评论数据化之后,接下来的事情就好办了!

熵权法确定权重

具体可参考文章:https://zhuanlan.zhihu.com/p/28067337

代码:

确定完星级和评论的权重之后,可以再结合helpful votes、vine, 结合类似时间序列的方法,去建模,得到产品的声誉值。

然后可以根据这个值去画图,去分析产品的成功失败的走向啊什么的。

比如我们画出的图大概长这样:

然后再去找其中较典型的 去分析。

代码比较简单

其中,画图要用到:matplotlib 库

from matplotlib import pyplot as plt.........plt.plot(x,WOM,'b-.o')plt.xlabel('time')plt.ylabel('value')ti = 'Value curve of hair dryer '+proplt.title(ti)plt.savefig(f2)plt.close()

注意,到这一步之前,我们都没有用到所给的日期。

【第2题 b、d问】

首先先处理一下时间,让它更好计算

【datetime库】

计算时间差并将时间数值化。

(这个库用来计算时间超方便哦!)

b题我们建模手用了个Hawkes过程中的强度函数。就是声誉随时间的变化(本质上这个指标时单位时间发生评论次数,可以抽象的看做是产品声誉越高,这个产品销量越大,评论的人越多)

(至于这个Hawkes具体是什么我也不懂,反正实现就是了!你们自己去搜它的原理吧)

【Matlab的ga函数求对数似然估计值】

对于Hawkes模型中的参数,我们要通过对数似然估计(不要问我为什么,建模手告诉我的)

(看我又发现了什么神奇的玩意儿!)

(matlab的ga()实现遗传算法,超方便,建议大家去看看!想起人工智能课上用C++手写遗传算法长长的代码!)

代码:(matlab)

function y = fu(x,t)       n = size(t,1);if x(1)>x(2)y=Inf;        else        a = (x(1)/x(2))*sum(exp(-x(2)*(t(n)-t))-1);    b = log(x(3));for i = 2:nc = 0;for j = 1:i-1c = c+exp(-x(2)*(t(i)-t(j)));endb = b +c;endy = -x(3)*t(n)+a+b;y = -y;end
end
function x = get_parameter(t)lb = zeros(3,1);ub = ones(3,1);fun = @(x)fu(x,t);x=ga(fun,3,[],[],[],[],lb,ub);
end
function y=get_numda(t)x = get_parameter(t);n = size(t,1);t1 = zeros(n,1);t1(1) = 0;for i = 2:na = 0;for j = 1:i-1a = a+x(1)*exp(-x(2)*(t(i)-t(j)));endt1(i) = a;endy = x(3)+t1;
end

求出这个值之后再画出随时间变化的图,然后再去找其中较典型的 去分析,如下:

【d问】我们模型也比较简单,就是算出评论后面的5天的平均评论间隔时间,然后再算他与星级的相关性。matlab 有个相关性函数,可以直接算。得到每个产品的相关性之后再看一下置信区间。初步判断星级与评论之间是否有关系。

然后再对每个星级的评论算一次未来5天平均评论间隔,再做分析。

(这个代码蛮无聊的,我写得真乱,不贴了)

matlab相关性计算:用corrcoef()函数

【感谢我的论文手和建模手,他们都超棒的,只有我是垃圾T_T。希望她们都能保上自己喜欢的学校。也希望我能一战上岸!】

【2020数模F奖】 美赛C题参赛感受及做题思路记录【编程手的角度,含大量代码及参考链接】相关推荐

  1. 2020数模国赛c题论文latex

    一个新手小组的论文,记录第一篇 \documentclass{ctexart} % \documentclass[12pt, a4paper]{article} \usepackage{url}\us ...

  2. 2023年(美赛)美国大学生数学建模竞赛ABCDEF题思路资料汇总【全网最全】

    文章目录 1 赛题思路 1.12023年美赛比赛日期和时间 1.2攻略 1.2.1美赛获奖最重要的因素是什么? 1.2.2你现在准备了哪些算法模型? 2 思路分享 1 赛题思路 (赛题出来以后第一时间 ...

  3. MATLAB算法实战应用案例精讲-【数模应用】梯度下降(GD)(附R语言、C++、Python、Java和MATLAB代码)

    目录 前言 几个相关概念 (1)导数 (2)方向导数 (3)梯度 (4)偏导数

  4. 2023年美赛五大热点问题(赛前准备、报名、选题、评审、查询)全面解读!

    思路:永久更新,全网最新最全,持续更新中,查看最下方QQ群获取. 2023年美赛五大热点问题全面解读! 赛前准备 报名 选题 评审 查询 一.赛前准备 硬实力准备: 1.学习常用模型/算法,并进行实战 ...

  5. 2023年美国大学生数学建模竞赛(美赛)ABCDEF题思路资料汇总贴

    下文包含:2023美国大学生数学建模竞赛(以下简称美赛)思路解析.美赛参赛时间及规则信息及如何准备美国大学生数学建模竞赛 C君将会第一时间发布选题建议.所有题目的思路解析.相关代码.参考文献.参考论文 ...

  6. 参加美国大学生数学建模竞赛,为什么通过数模乐园辅助报名?

    喜讯: 数模乐园美赛辅助报名人数荣登国内榜首,成为国内最大辅助报名平台! 数模乐园已累计为10万多人以上同学完成了美赛辅助报名服务!已成为国内最大的美赛辅助报名平台!数模乐园辅助报名不仅仅只是一个单纯 ...

  7. Python小白的数学建模课-A3. 12个新冠疫情数模竞赛赛题与点评

    新冠疫情深刻和全面地影响着社会和生活,已经成为数学建模竞赛的背景帝. 收集了与新冠疫情相关的的数学建模竞赛赛题,关注收藏本文或者在评论区留下邮箱,送你赛题分析点评及优秀论文. 『Python小白的数学 ...

  8. 基于三维数模的零件三坐标检测2020

    基于三维数模的三坐标检测方法是把零部件的3D模型导入到测量软件中,通过坐标系对齐,找正机器坐标系和工件坐标系,然后对比捕获得到的零件理论坐标值与检测得到的工件实际坐标值,最后输出测量结果.基于三维数模 ...

  9. 2023美赛数学建模竞赛 C题思路分析

    1 C题思路 (赛题出来以后第一时间在CSDN分享) 2023年美赛比赛日期和时间 报名截止日期:美国东部时间2023 年2月16日星期四下午 3:00前.(北京时间2023年2月17日凌晨4点) 比 ...

最新文章

  1. 偏度与峰度的正态性分布判断
  2. [HTML]JS添加表格
  3. 云安全趋势:IaaS?谢了,我要 PaaS
  4. 马尔代夫旅游选岛全功略
  5. mysql select 反选_JQuery实现全选、全不选和反选功能
  6. php处理ajax post请求超时,php – 如何处理AJAX请求中的会话超时
  7. Python使用TCP协议编写会聊天的小机器人
  8. 拜佛有几点需要注意的事情
  9. [转载] python float()
  10. 跳转html时请求头怎么取,如何获取a链接的请求头信息?
  11. 谷歌设置支持webgl
  12. ML_集成学习与Boosting模型
  13. 系统辨识与自适应控制
  14. 倾力打造在线SAP学习练习测试系统,能上网就可以使用SAP
  15. filezilla linux服务器端,FileZilla Server安装配置教程
  16. UnionPay-银联支付-netcore(一)
  17. 用户需求分析是什么?重难点是什么?
  18. linux系统中查看防火墙开放端口号命令
  19. xgboost时间序列预测matlab,LightGBM和XGBoost实现时间序列预测(2019-04-02)
  20. python中函数包括_python中函数与函数之间的调用,总是晕菜,整理如下,有不对或者补充的请提出来~...

热门文章

  1. 区块链溯源系统对传统溯源的影响
  2. 5.13模拟赛 赛后回顾
  3. Geotools中实现NC转等值面
  4. 购物打折C语言程序设计,算法提高 促销购物(动态规划+完全背包)-----------------C语言——菜鸟级...
  5. SyncML 同步协议 感谢 周鹏(我只是做一个备份)
  6. Day02-计算机相关知识
  7. Oracle中有关trunc函数的使用
  8. 科研实习 | 南方科技大学魏鸿鑫老师机器学习课题组招收访问学生/全职RA
  9. 开发软件可以申请的保护形式
  10. 3行Python代码实现图像照片抠图和换底色