diff --git a/Academic_Data_Processing.py b/Academic_Data_Processing.py new file mode 100644 index 0000000..cc5cbc1 --- /dev/null +++ b/Academic_Data_Processing.py @@ -0,0 +1,60 @@ +import pandas as pd + +# 定义文件列表和学期数量 +files = ["2020_2021_1.xlsx", "2020_2021_2.xlsx", "2021_2022_1.xlsx", "2021_2022_2.xlsx"] +semester_count = len(files) + +# 初始化空字典用于存储学生信息和学期数量 +student_data = {} + +# 遍历每个文件 +for file in files: + # 读取每个文件的简洁版sheet + df = pd.read_excel(file, sheet_name="简洁版") + + # 合并数据到学生字典中 + for _, row in df.iterrows(): + student_id = row["学号"] + student_name = row["姓名"] + + # 如果学号已存在于字典中 + if student_id in student_data: + # 检查是否有错误姓名 + if student_name != student_data[student_id]["姓名"]: + student_data[student_id]["是否错误"] = 1 + student_data[student_id]["姓名"] += f", {student_name}" + # 更新不合格课程门数和不合格课程门数组成 + student_data[student_id]["不合格课程门数"] += row["不合格课程门数"] + student_data[student_id]["不合格课程门数组成"].append(row["不合格课程门数"]) + # 否则,添加学号及初始信息 + else: + student_data[student_id] = { + "学号": student_id, + "姓名": student_name, + "不合格课程门数": row["不合格课程门数"], + "不合格课程门数组成": [row["不合格课程门数"]], + "是否错误": 0, + "是否受过退学预警": 0, + "受过退学预警次数": 0 + } + +# 统计每个学生在所有文件中的退学预警次数 +for student_id, data in student_data.items(): + warning_count = 0 + for file in files: + df = pd.read_excel(file, sheet_name="简洁版", usecols=["学号", "是否受过退学预警"]) + if student_id in df["学号"].values: + if "是" in df.loc[df["学号"] == student_id, "是否受过退学预警"].values or "曾受过退学预警" in df.loc[df["学号"] == student_id, "是否受过退学预警"].values: + warning_count += 1 + student_data[student_id]["受过退学预警次数"] = warning_count + if warning_count > 0: + student_data[student_id]["是否受过退学预警"] = 1 + +# 将不合格课程门数组成转为逗号分隔的字符串 +for data in student_data.values(): + data["不合格课程门数组成"] = ",".join(str(num) for num in data["不合格课程门数组成"]) + +# 创建DataFrame并保存结果到新的Excel文件 +output_df = pd.DataFrame(student_data.values()) +output_df = output_df[["学号", "姓名", "不合格课程门数", "不合格课程门数组成", "是否错误", "是否受过退学预警", "受过退学预警次数"]] +output_df.to_excel("output_Study.xlsx", index=False) diff --git a/data_processed/Data_SCL90_BaseInfo.xlsx b/data_processed/Data_SCL90_BaseInfo.xlsx new file mode 100644 index 0000000..e54f534 Binary files /dev/null and b/data_processed/Data_SCL90_BaseInfo.xlsx differ diff --git a/data_processed/Dropout_Warning_RES.xlsx b/data_processed/Dropout_Warning_RES.xlsx new file mode 100644 index 0000000..dc57eed Binary files /dev/null and b/data_processed/Dropout_Warning_RES.xlsx differ diff --git a/data_processed/Label.xlsx b/data_processed/Label.xlsx new file mode 100644 index 0000000..b973e59 Binary files /dev/null and b/data_processed/Label.xlsx differ diff --git a/data_processed/Leave_Record_RES.xlsx b/data_processed/Leave_Record_RES.xlsx new file mode 100644 index 0000000..2594979 Binary files /dev/null and b/data_processed/Leave_Record_RES.xlsx differ diff --git a/record.txt b/record.txt new file mode 100644 index 0000000..65db656 --- /dev/null +++ b/record.txt @@ -0,0 +1,31 @@ +2023年6月12日 +完成label转换,得到26111项数据标签 + +2023年6月14日 +学习对于标签缺失,和数据不完整时的处理方法 + +2023年6月25日 +在师兄的指导下,简化处理思路;对于部分特征数据缺失的情况 +删除缺失值:将包含缺失值的样本从数据集中删除。这种方法适用于缺失值较少且对整体数据影响较小的情况。可以使用pandas库中的dropna()函数来删除含有缺失值的行。 + +填充缺失值:对缺失值进行填充,使其具有某种特定的值。常用的填充方法包括用均值、中位数或众数填充数值型特征,用最常见的类别填充分类特征。可以使用pandas库中的fillna()函数进行缺失值填充。 + +插值法:通过已知数据的插值来估计缺失值。常用的插值方法包括线性插值、多项式插值、样条插值等。可以使用pandas库中的interpolate()函数进行插值操作。 + +特殊值标记:将缺失值视为一种特殊的取值,为其分配一个独特的标记。这样模型可以学习到缺失值可能对预测有一定的影响。可以使用pandas库中的fillna()函数将缺失值填充为特殊值。 +可以直接删掉 + +2023年7月2日 +完成请销假统计,去除错误数据,有一个错误 +姓名重合:莫琰,莫䶮 + +2023年7月3日 +完成学业预警统计统计,去除错误数据 +姓名重合:扎西尼玛, 扎西尼马 + +2023年7月8日 +完成特征值缩放和选择工作(选择17个特征,包括幺爸给的加权值,相关性不管,没想到好方法),完成数据清洗,和缺失值处理前面已经完成 + +2023年7月12日 +最后筛选出需要的特征 +