2023年电工杯 B题 人工智能对大学生学习的影响建模问题 数学建模代码全解析
开会研讨时首次提出,在过去几十年中取得了显著的发展,并对社会各个领域产生了广泛的影响。设计了一份调查问卷来了解人工智能在不同侧面对大学生学习的影响,并提供了附件1作为问卷内容,以及附件2作为调查反馈结果数据。希望我们根据这些数据,建立相应的数学模型来分析人工智能对大学生学习的影响,并解决以下问题。根据自己理解,对某些特征进行分析并数据可视化,例如统计调查文件的男女比例,计算各专业的人数并绘制饼图等
·
B题
问题重述
人工智能(AI)于1956年在美国达特茅斯学院开会研讨时首次提出,在过去几十年中取得了显著的发展,并对社会各个领域产生了广泛的影响。设计了一份调查问卷来了解人工智能在不同侧面对大学生学习的影响,并提供了附件1作为问卷内容,以及附件2作为调查反馈结果数据。希望我们根据这些数据,建立相应的数学模型来分析人工智能对大学生学习的影响,并解决以下问题
问题一
对附件2中所给数据进行分析和数值化处理,并给出处理方法
附件2的数据,一共4605行,每一行共有30个特征(即列数),其中包括性别、专业、年级、性格等信息。
数据分析:
- 数据预处理和清洗
根据具体情况,对数据进行清洗和预处理,包括处理缺失值、处理重复值、转换数据类型等。例如,如果某些列中存在缺失值,可以使用fillna()
函数进行填充;如果有重复行,可以使用drop_duplicates()
函数去除重复行;如果需要转换特定列的数据类型,可以使用astype()
函数进行转换。 - 分析某个特征
根据自己理解,对某些特征进行分析并数据可视化,例如统计调查文件的男女比例,计算各专业的人数并绘制饼图等。
数值化处理:
- 针对类别型变量(如性别、专业、年级、性格等),可以使用独热编码(One-Hot Encoding)将其转换为数值型变量。例如,将性别的"女"转换为1,"男"转换为0;将专业的"文史类"转换为[1, 0, 0, ...],表示一个专业有多个可能取值时,将每个可能值都用一个二进制位表示。
- 对于数值型变量(如上网时长),可以保留其原始数值。
- 对于问题回答的"是"和"否",可以将其转换为二进制变量,即"是"转换为1,"否"转换为0。
- 对于问题回答的选择项,可以使用类似独热编码的方法进行数值化处理。例如,将"最常通过哪种方式上网?"的回答"用手机上网"转换为[1, 0, 0, ...],表示一个问题有多个选项时,将每个选项都用一个二进制位表示。
示例代码:
Python
import pandas as pd
import matplotlib.pyplot as plt
# 读取附件二数据文件
data = pd.read_excel('附件2.xlsx')
# 数据预处理和清洗
# 假设我们只关注部分特征,可以选择需要的列进行分析
# 强烈建议自行修改表头(例如去掉序号),这里我们因为是示例展示便不再修改
selected_columns = ['1、您的性别(1-22题为单选题)', '2、您的专业', '3、您所在的年级', '4、您的性格', '5、您最常通过哪种方式上网?', '6、您每周的上网时长大约是多少?']
data = data[selected_columns]
# 缺失值处理
data = data.dropna() # 删除含有缺失值的行
# 数值化处理
# 例如,可以使用独热编码对分类变量进行数值化
# 在独热编码过程中,创建的新列名的命名方式是在原始列名的基础上添加各个类别的名称。
# 例如,对于列名为"您的性别(1-22题为单选题)",如果该列有两个类别,即"女"和"男",那么独热编码后将创建两个新的列,分别命名为"您的性别(1-22题为单选题)_女"和"您的性别(1-22题为单选题)_男"。
categorical_columns = ['1、您的性别(1-22题为单选题)', '2、您的专业', '3、您所在的年级', '4、您的性格', '5、您最常通过哪种方式上网?']
for column in categorical_columns:
encoded_columns = pd.get_dummies(data[column], prefix=column)
data = pd.concat([data, encoded_columns], axis=1)
print(data.columns)
# Index(['1、您的性别(1-22题为单选题)', '2、您的专业', '3、您所在的年级', '4、您的性格', '5、您最常通过哪种方式上网?',
# '6、您每周的上网时长大约是多少?', '1、您的性别(1-22题为单选题)_女', '1、您的性别(1-22题为单选题)_男',
# '2、您的专业_文法类', '2、您的专业_理工类', '2、您的专业_经管类', '2、您的专业_艺术教育类', '3、您所在的年级_大一',
# '3、您所在的年级_大三', '3、您所在的年级_大二', '3、您所在的年级_大四', '4、您的性格_其他', '4、您的性格_坚定型',
# '4、您的性格_外向型', '4、您的性格_安静型', '4、您的性格_感性型', '4、您的性格_温顺型',
# '5、您最常通过哪种方式上网?_其他', '5、您最常通过哪种方式上网?_在寝室用笔记本上网', '5、您最常通过哪种方式上网?_在网吧上',
# '5、您最常通过哪种方式上网?_用平板电脑上网', '5、您最常通过哪种方式上网?_用手机上网'],
# dtype='object')
# 数据分析和可视化
# 示例:计算每个性别的人数并绘制柱状图
gender_counts = data['您的性别(1-22题为单选题)_女'].sum(), data['您的性别(1-22题为单选题)_男'].sum()
gender_labels = ['女性', '男性']
plt.bar(gender_labels, gender_counts)
plt.xlabel('性别')
plt.ylabel('人数')
plt.title('性别分布')
plt.show()
# 示例:计算各专业的人数并绘制饼图
major_counts = data['您的专业'].value_counts()
plt.pie(major_counts, labels=major_counts.index, autopct='%1.1f%%')
plt.axis('equal')
plt.title('专业分布')
plt.show()
# 示例:计算使用学习软件工具的人数并绘制条形图
tool_users = data['您是否使用过学习软件工具?'].value_counts()
plt.bar(tool_users.index, tool_users)
plt.xlabel('使用工具情况')
plt.ylabel('人数')
plt.title('学习软件工具使用情况')
plt.show()
pandas 和 matplotlib为Python的第三方库 ,自行百度安装即可
Matlab
% 读取数据
data = readtable('附件2.xlsx');
% 数据预处理和清洗
selected_columns = {'1、您的性别(1-22题为单选题)', '2、您的专业', '3、您所在的年级', '4、您的性格', '5、您最常通过哪种方式上网?', '6、您每周的上网时长大约是多少?'};
data = data(:, selected_columns);
% 缺失值处理
data = rmmissing(data);
% 数值化处理
categorical_columns = {'1、您的性别(1-22题为单选题)', '2、您的专业', '3、您所在的年级', '4、您的性格', '5、您最常通过哪种方式上网?'};
for i = 1:numel(categorical_columns)
column = categorical_columns{i};
encoded_columns = dummyvar(data{:, column});
encoded_columns.Properties.VariableNames = strcat(column, '_', encoded_columns.Properties.VariableNames);
data = [data, encoded_columns];
end
% 数据分析和可视化
% 示例:计算每个性别的人数并绘制柱状图
female_count = sum(data.('1、您的性别(1-22题为单选题)_女'));
male_count = sum(data.('1、您的性别(1-22题为单选题)_男'));
gender_counts = [female_count, male_count];
gender_labels = {'女性', '男性'};
bar(gender_counts)
xlabel('性别')
ylabel('人数')
title('性别分布')
set(gca, 'XTickLabel', gender_labels)
% 示例:计算各专业的人数并绘制饼图
major_counts = countcats(data.('2、您的专业'));
pie(major_counts)
title('专业分布')
% 示例:计算使用学习软件工具的人数并绘制条形图
tool_users = countcats(data.('您是否使用过学习软件工具?'));
bar(tool_users)
xlabel('使用工具情况')
ylabel('人数')
title('学习软件工具使用情况')
更多的细节详见这里呀:
更多推荐
已为社区贡献1条内容
所有评论(0)