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 # 定义函数进行情感分析 省略代码

赛氪--2023第二届国大学生数据统计分析竞赛 竞分有A、B共两道赛 题目A:世界人口的预测分析背景   当前世界人口数量是二十世纪中期的三倍多。1950 球人口约为 25 亿,到 2022 11 月中旬,这一数字已达 80 亿,自 2010 以来增加了 10 亿,自 1998以来增加了 20 亿。预计在未来 30 ,世界人口将增加近 20 亿,从目前的 80亿增至 2050 的 97 亿,并可能在 2080 代中期达到近 104 亿的峰值。报告指出,世界人口从 70 亿增长到 80 亿的过程中,有一半是亚洲人口扩张的结果,非洲的贡献第二大,增长了近 4 亿;有 10 个国家的人口增长占这 10 亿新增人口的一半以上,印度是最大的贡献者,其次是中国和尼日利亚。   根据联合国最近数据显示,印度已经成为世界上人口最多的国家。过去三十中,印度的生育率较高,婴儿死亡率有所下降,人口呈轻化特点。数据显示,印度人口的龄中位数为 28 岁,三分之二的印度人口在 35 岁以下。印度人口中国相当,但国土面积却不足中国的三分之一,稠密的人口使消除贫困饥饿、健医疗教育体系的难度显著增加。   附件中提供了 1950~2021 世界各个国家的人口数据(populations.csv),同时包括了不同龄段的人口数据。请你们团队使用附件中的相关数据,进行数据统计分析,回答下列问: 赛任务 问一: 请绘制球 1950 ~ 2021 总人口随时间变化的趋势折线图,分析整 体人口的变化趋势,然后分别统计所有国家2011~2021 的人口增长率和增长人数。给出人口增长率最大的前 10 个国家和最小的后 10 个国家名单,人口增长数最多的前 10 个国家和最少的后 10 个国家名单。 问二: 请比较 2021 不同国家的总人口数,绘制不同国家总人口数的柱状图,并给出总人口最多的前 10 个国家和最少的后 10 个国家名单。 问三: 请任选三个国家,分别绘制不同龄段人口的直方图,对比分析龄分布的异同点,并结合这三个国家的国情分析不同龄段人口的分布原因。 问四: 请建立人口预测的数学模型,然后分别预测到 2100 底中国、印度和球的总人口数,并分析人口的变化趋势。 题目B:电影评分的大数据分析   大数据无处不在,在运营一个成功的商业的过程中,大数据起到的非常重要的作用。同样通过观众对电影的评分的分析,可以在一定程度上给电影行业启发。   网络影评是伴随着电子媒介和数字技术诞生的,呈现出鲜明的数据化倾向,比如电影评分、打星、榜单等。网络评分因其便捷、高效,成为大部分观众评价电影的首选方式,也是电影口碑最直观的体现,评分高低直接影响到大众的观影取向和消费选择。文字、视频相比,大数据搜集、统计的评分信息可以让我们对观众的观影体验,审美趣味、情感态度一目了然。视频网站、电影门户网站等的后台会根据观众的评分、打星和消费行为来推断用户的审美趣味和消费需求,从而为客户提供个性化推荐和引导。   电影的评分更多反映的是大众审美,并非绝对的评判标准,不应该奉为最终裁决,主要功能是用来参考,规避较差电影的同时,发现好的电影,尤其是在规避较差电影方面有着非常显著的效果。   附件 1.电影评分.csv 中包括了豆瓣影评排名前 250 名电影的名称、导演、电影类型、国家、上映份、评分和评论人数。附件 2.电影票房.csv 中包括了 10605 部电影的票房排名、电影名称、上映时间、总票房()、平均票价和平均场次,其中,部分数据有缺失和异常。   请你们团队使用附件中的相关数据,进行数据统计分析,回答下列问: 赛任务 问一: 请分析附件 1 中最受欢迎的电影类型是什么?排名前 250 名电影中出现次数最多的导演前 10 名是谁?出现次数最多的国家前 5 名是哪些国家? 问二: 请分析附件 1 中排名前 250 名电影的上映份主要集中在哪几?排名前 250 名电影的评分评论人数、国家、导演和电影类型是否有关系? 问三: 请你们收集相关数据,分析附件 2 中电影票房较高的电影主要是什么类型的电影?并给出这些电影的上映时间、总票房()、平均票价和平均场次的相关统计图表。 问四: 某导演拟定于 2024 春节档推出一部电影,请从数据分析的角度给导演一个提案,例如考虑:电影的类型、材、上映时间、票价等方面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微信公众号:数模0error

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值