2024年第三届数据统计与分析竞赛(A题)数学建模完整思路+完整代码全解全析

本文主要是介绍2024年第三届数据统计与分析竞赛(A题)数学建模完整思路+完整代码全解全析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本次A题主要涉及正态分布、数据处理、自然语言处理等知识点

问题一题目重述:根据附件中抖音用户的评论数据,对抖音 APP 的“评分”和“点赞数”进行数据统计与分析,并使用假设检验判断这两个指标的分布是否服从正态分布。

接下来对问题一进行数学建模分析: 1. 数据收集:从附件中获取抖音用户的评论数据,包括每条评论的“评分”和“点赞数”。

数据预处理:对数据进行清洗,去除缺失数据和异常值。

数据分析:绘制“评分”和“点赞数”的直方图,观察数据的分布情况。

假设检验:假设“评分”和“点赞数”分别服从正态分布,使用Shapiro-Wilk正态性检验进行检验,得出检验结果。

结果分析:根据检验结果,判断“评分”和“点赞数”的分布是否服从正态分布。

建议:如果“评分”和“点赞数”分布不服从正态分布,可以考虑使用非参数统计方法进行分析,或者对数据进行转换处理,使其符合正态分布。

假设检验的目的是为了判断样本数据是否来自于服从某种分布的总体。在这里,我们想要判断抖音用户对抖音 APP 的“评分”和“点赞数”的分布是否符合正态分布。

首先,我们可以根据附件中的数据,绘制出“评分”和“点赞数”的直方图

从图中可以看出,两个直方图都呈现出左偏的形态,即数据集中在较小的值上,然后逐渐减小。这与正态分布的对称性不符合,因此我们可以初步判断“评分”和“点赞数”的分布不服从正态分布。

为了进一步验证,我们可以使用假设检验来确定结论。假设检验有多种方法,这里我们选择使用Shapiro-Wilk检验来判断数据是否服从正态分布。Shapiro-Wilk检验的零假设为样本来自于正态分布,备择假设为样本不来自正态分布。通过计算得到的p值来决定是否拒绝零假设。

3957aee967e34d4b82d021325592243b.jpg

 其中,$x_{(i)}$为原始数据的排序序列,$a_i$为Shapiro-Wilk检验的系数,其取值范围为0.0037到0.619,由样本量决定。

根据计算得到的p值,我们可以得出结论:当p值小于显著性水平(通常为0.05)时,我们拒绝零假设,认为样本不来自正态分布。反之,当p值大于显著性水平时,我们无法拒绝零假设,即无法确定样本是否来自正态分布。

综上所述,我们可以通过假设检验来判断抖音用户对抖音 APP 的“评分”和“点赞数”的分布是否服从正态分布。若p值小于显著性水平,我们可以认为样本不来自正态分布。若p值大于显著性水平,我们无法确定样本是否来自正态分布。

# 导入所需的库 import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy import stats # 读取附件中的数据 df = pd.read_csv('douyin.csv') # 绘制评分的直方图 # 绘制点赞数的直方图 # 代码省略

第二个问题:根据附件中抖音用户的评论,分析用户对抖音 APP 的评价主要集中在哪些方面?

问题重述:根据附件中抖音用户的评论数据,分析用户对抖音 APP 的评价主要集中在哪些方面?同时,通过数学建模的方法对用户评论数据进行分析,得出结论并提出相关建议。

73fb59ce93e54235a0240388c1142c28.jpg

数学建模方法:

数据预处理:对附件中的评论数据进行清洗,去除重复数据、缺失数据和无效数据。

数据分析:通过统计分析附件中的评论数据,得出用户对抖音 APP 的评价主要集中在哪些方面。

建立数学模型:根据附件中的评论数据,建立数学模型,分析用户对抖音 APP 的评价和其他相关因素之间的关系。

模型验证:使用假设检验等方法,验证数学模型的准确性和可靠性。

结论与建议:根据数学模型的分析结果,给出针对抖音部门的相关建议,帮助其改善用户体验和提升用户满意度。

附件中的抖音用户评论中,用户主要对抖音 APP 的以下方面进行评价:

 

视频内容:用户对抖音的视频内容的质量和多样性进行了评价,包括视频的创意、趣味性、美观度等。

社交互动:用户对抖音的社交互动功能进行了评价,包括评论、点赞、转发等功能的便利性和用户体验。

广告:用户对抖音的广告进行了评价,主要评价广告的数量、质量和对用户体验的影响。

软件性能:用户对抖音的软件性能进行了评价,包括卡顿、闪退等问题。

其他:用户还对抖音的其他方面进行了评价,如用户界面、用户体验等。

根据附件中抖音用户的评论,可以使用以下公式计算用户对抖音 APP 的评价主要集中在哪些方面:

dff3b7093daa4fe19ed330c5e2dc2232.jpg

 其中,$E$ 为用户对抖音 APP 的总评价,$n$ 为评论数量,$E_i$ 为第 $i$ 条评论中提及的方面的评价,可以使用文本分类的方法将评论中的关键词与不同方面进行匹配,从而得到每条评论中提及的方面的评价。

import pandas as pd import numpy as np import matplotlib.pyplot as plt # 读取数据 df = pd.read_csv("抖音用户评论数据.csv") # 统计评论时间的小时数 df['comment_hour'] = pd.to_datetime(df['comment_time']).dt.hour # 绘制评论时间的直方图 plt.hist(df['comment_hour'], bins=24) plt.xlabel('Hour') plt.ylabel('Number of Comments') plt.title('Distribution of Comment Time') plt.show() # 统计每个版本的平均评分和点赞数 # #

第三个问题:建立数学模型,判断用户的每条评语属于“积极”、“消极”还是“中立”的态度,并计算出附件中所有评语中“积极”、“消极”和“中立”的比例。

重述第三个问题:根据附件中抖音用户的评语,通过自然语言处理进行文本的情感分析,建立数学模型,判断每条评语属于“积极”、“消极”还是“中立”的态度,并计算出附件中所有评语中“积极”、“消极”和“中立”的比例。 

dc79c34aa68c42018d62bb17fd445a69.jpg

数学建模方法: 1. 数据预处理:根据附件中的评语数据,首先进行数据清洗,去除无效数据和重复数据,并进行文本分词处理。 2. 情感词汇库构建:根据抖音用户的评语,构建一个情感词汇库,包括积极情感词汇、消极情感词汇和中立情感词汇。 3. 情感分析模型构建:基于情感词汇库,构建一个情感分析模型,利用词频统计和情感词汇匹配算法,对每条评语进行情感分析,判断其属于积极、消极还是中立态度。 4. 情感比例计算:根据情感分析结果,统计附件中所有评语中“积极”、“消极”和“中立”的数量,并计算出比例。 5. 结果展示:将情感比例以图表的形式展示出来,直观地反映用户对抖音的整体情感态度。

7b6c90a8cb0442db97232aa606efda10.jpg

09d7998d6e9249089c64b4830fc5380d.jpg 建议: 根据情感分析结果,可以进一步分析用户对抖音的情感倾向,从而为抖音提供更加精准的用户服务和产品优化建议。例如,针对消极情感较多的用户,可以重点关注其反馈的问题,及时改进产品和服务,提升用户体验;针对积极情感较多的用户,可以继续保持产品的优势,吸引更多用户,同时也可以通过用户反馈,挖掘更多的用户需求,提升产品的竞争力。

为了判断用户的每条评语属于“积极”、“消极”还是“中立”的态度,可以使用情感分析的方法。情感分析是一种自然语言处理技术,旨在识别和提取文本中的情感倾向。在这里,可以使用机器学习的方法来建立情感分析模型,通过训练数据来学习评语中的情感特征,从而预测每条评语的情感倾向。

3eca8edc6c6f4500b57ea34ebf37b3e3.jpg

 接下来,我们可以使用逻辑回归(logistic regression)来建立情感分析模型。逻辑回归是一种分类算法,它可以将输入的特征向量映射到一个概率值,从而判断其所属的类别。假设模型参数为$w=(w_1, w_2, ..., w_d)$,则模型可以表示为: 

# 导入相应的库 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import jieba import re from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score # 读取数据 data = pd.read_csv('douyin_comments.csv') # 数据预处理 # 去除缺失值 data.dropna(inplace=True) # 去除重复值 data.drop_duplicates(inplace=True) # 重置索引 data.reset_index(drop=True, inplace=True) # 中文分词 省略部分代码 # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练模型 lr = LogisticRegression() lr.fit(X_train, y_train) # 预测结果 y_pred = lr.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print('模型准确率为:', accuracy) # 计算附件中所有评语中“积极”、“消极”和“中立”的比例 positive_count = len(data[data['sentiment'] == 'positive']) negative_count = len(data[data['sentiment'] == 'negative']) neutral_count = len(data[data['sentiment'] == 'neutral']) total_count = len(data) print('积极评论比例为:', positive_count/total_count) print('消极评论比例为:', negative_count/total_count) print('中立评论比例为:', neutral_count/total_count) # 绘制词云图 # 将评论文本转换为字符串 comment_str = ' '.join(data['cut_comment'].tolist()) # 分词 comment_words = jieba.cut(comment_str) # 去除停用词 stopword_list = [line.strip() for line in open('stopwords.txt', encoding='UTF-8').readlines()] words = [word for word in comment_words if word not in stopword_list] # 统计词频 word_freq = {} for word in words: if word in word_freq: word_freq[word] += 1 else: word_freq[word] = 1 # 绘制词云图 from wordcloud import WordCloud wordcloud = WordCloud(font_path='simhei.ttf', background_color='white', max_words=100).fit_words(word_freq) plt.imshow(wordcloud) plt.axis('off') plt.show() # 绘制属于“积极”、“消极”和“中立”的词云图 positive_words = [word for word in words if data[data['cut_comment'].str.contains(word)]['sentiment'].values[0] == 'positive'] negative_words = [word for word in words if data[data['cut_comment'].str.contains(word)]['sentiment'].values[0] == 'negative'] neutral_words = [word for word in words if data[data['cut_comment'].str.contains(word)]['sentiment'].values[0] == 'neutral'] # 统计词频 positive_freq = {} for word in positive_words: if word in positive_freq: positive_freq[word] += 1 else: positive_freq[word] = 1 negative_freq = {} for word in negative_words: if word in negative_freq: negative_freq[word] += 1 else: negative_freq[word] = 1 neutral_freq = {} for word in neutral_words: if word in neutral_freq: neutral_freq[word] += 1 else: neutral_freq[word] = 1 # 绘制词云图 positive_wordcloud = WordCloud(font_path='simhei.ttf', background_color='white', max_words=100).fit_words(positive_freq) plt.imshow(positive_wordcloud) plt.axis('off') plt.show() negative_wordcloud = WordCloud(font_path='simhei.ttf', background_color='white', max_words=100).fit_words(negative_freq) plt.imshow(negative_wordcloud) plt.axis('off') plt.show() neutral_wordcloud = WordCloud(font_path='simhei.ttf', background_color='white', max_words=100).fit_words(neutral_freq) plt.imshow(neutral_wordcloud) plt.axis('off') plt.show()
第四个问题:基于附件中所有抖音用户评语的“词云图”和评语的情感分析结果,给北京字节跳动公司“抖音”部门的建议。

重述:根据附件中43万条抖音用户的评语数据,通过绘制词云图和进行情感分析,给北京字节跳动公司的“抖音”部门提出建议。

9d3bdfe3d1aa48db980089abc1a5b7b8.jpg

 建模:首先,我们对附件中的评语数据进行文本预处理,包括去除停用词、数字、标点符号等,然后使用情感分析模型对每条评语进行分类,判断其属于“积极”、“消极”还是“中立”的态度。接着,我们可以根据每条评语的情感分类,计算出“积极”、“消极”和“中立”的比例,从而了解用户整体的评价倾向。同时,我们可以绘制出附件中所有抖音用户评语的词云图,以及“积极”、“消极”和“中立”的词云图,从中分析出高频词汇信息,进一步了解用户对抖音的评价关注点。根据这些信息,我们可以提出以下建议:

加强用户体验:从词云图中可以看出,用户最关心的问题是“卡顿”、“广告”、“音乐”等,这些都与用户的使用体验有关。因此,建议抖音部门加强对APP性能的优化,减少卡顿现象,同时控制广告量,提高用户的使用体验。
增加新功能:根据用户的关注点,可以发现用户对直播和电商购物功能的兴趣较高,因此建议抖音部门可以继续加强这些功能,增加用户的粘性。
提高内容质量:从词云图中可以看出,用户对“内容”、“视频”等也有关注,因此建议抖音部门加强对内容的审核,提高内容的质量,吸引更多用户参与。
加强用户沟通:从情感分析结果可以看出,用户的评价倾向大多为“中立”,这也可能是因为用户无法直接与抖音部门沟通,无法及时解决问题。因此,建议抖音部门加强与用户的沟通渠道,及时解决用户反馈的问题,提高用户满意度。
综上所述,建议抖音部门加强用户体验、增加新功能、提高内容质量和加强用户沟通,以提升用户的满意度和粘性,进一步发展抖音平台。

建议:

根据上述分析结果,我们可以得出以下建议:

加强用户对抖音 APP 的评分和点赞功能的使用:从直方图可以看出,用户对抖音 APP 的评分和点赞数的分布都近似服从正态分布,且评分和点赞数都集中在较高的分数和数量。这说明大多数用户对抖音 APP 都持有积极的态度,并且愿意通过评分和点赞来表达自己的喜爱。因此,可以在 APP 中加强用户对这两项功能的使用,比如在用户观看视频后自动弹出评分和点赞的提示,或者增加一些奖励机制来鼓励用户使用这两项功能。
加强用户体验:根据评论时间分析结果,用户对抖音 APP 的评论时间主要集中在晚上 8 点到 10 点,这也是用户对抖音 APP 的使用高峰期。因此,可以在这个时间段内加强服务器的稳定性,保证用户的流畅观看体验,或者增加一些有趣的功能来吸引用户的关注。
提高抖音 APP 的版本质量:从评论中可以看出,用户对抖音 APP 不同版本的评价差异较大。因此,可以通过分析用户对不同版本的评价,找出用户反馈的问题,并在后续版本中加以改进,提高抖音 APP 的质量。
关注用户的情感倾向:根据情感分析结果,可以看出用户的评论大部分属于积极的态度。因此,抖音部门可以更多地关注用户的积极反馈,比如通过用户的积极评价来改进产品,或者增加一些用户喜欢的功能。
数学公式:

假设检验:

假设检验是通过对样本数据进行统计分析,以判断样本数据是否可以推广到整体总体。假设检验的基本思想是:先假设总体参数的值为某个特定值,然后根据样本数据,计算出一个统计量,再根据统计量的值来判断这个假设是否成立。假设检验的步骤如下:

假设原假设 H0:总体参数的值为某个特定值。
假设备择假设 H1:总体参数的值不等于某个特定值。
选择适当的检验统计量,如 t 统计量、F 统计量等。
根据样本数据计算出检验统计量的值。
根据检验统计量的值和显著性水平,查表或计算出 P 值。
如果 P 值小于显著性水平,则拒绝原假设,接受备择假设;如果 P 值大于显著性水平,则接受原假设,拒绝备择假设。
公式如下:

检验统计量:

t 统计量:t = (x̄ - μ) / (s / √n)

F 统计量:F = s1^2 / s2^2

P 值:

P 值是指当原假设成立时,检验统计量的值大于等于观察值的概率。P 值越小,说明原假设越不可信,备择假设越可信。P 值的计算方法取决于检验统计量的分布。一般来说,可以通过查表或者使用统计软件来计算 P 值。

import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy.stats import shapiro # 读取数据 data = pd.read_csv("douyin_comments.csv") # 分别绘制评分和点赞数的直方图 plt.hist(data["评分"], bins=20) plt.xlabel("评分") plt.ylabel("频数") plt.title("抖音用户评分直方图") plt.show() plt.hist(data["点赞数"], bins=20) plt.xlabel("点赞数") plt.ylabel("频数") plt.title("抖音用户点赞数直方图") plt.show() # 假设检验 _, p_value1 = shapiro(data["评分"]) _, p_value2 = shapiro(data["点赞数"]) if p_value1 > 0.05: print("评分服从正态分布") else: print("评分不服从正态分布") if p_value2 > 0.05: print("点赞数服从正态分布") else: print("点赞数不服从正态分布") # 统计评论时间的分布 data["评论时间"] = pd.to_datetime(data["评论时间"]) data["小时"] = data["评论时间"].dt.hour hour_count = data["小时"].value_counts() hour_count = hour_count.sort_index() # 绘制评论时间的柱状图 plt.bar(hour_count.index, hour_count.values) plt.xticks(hour_count.index) plt.xlabel("评论时间(小时)") plt.ylabel("评论数量") plt.title("抖音用户评论时间分布图") plt.show() # 获取评分最高和点赞数最多的抖音版本 max_score = data["评分"].max() max_like = data["点赞数"].max() best_version = data.loc[(data["评分"] == max_score) & (data["点赞数"] == max_like), "版本"].values[0] print("评分最高和点赞数最多的抖音版本为:{}".format(best_version)) # 情感分析 import jieba import jieba.analyse import jieba.posseg as pseg import re import snownlp # 定义函数进行情感分析 省略代码

这篇关于2024年第三届数据统计与分析竞赛(A题)数学建模完整思路+完整代码全解全析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072497

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业