编辑代码

import pandas as pd
import random
from random import choices, sample, randint

# ======================
# 数据生成配置
# ======================
base_params = {
    '性别': {'选项': ['男', '女'], '权重': [4, 6]},
    '教龄': {'选项': ['3年以下', '3-5年', '5-10年', '10年以上'], '权重': [15, 35, 35, 15]},
    '学历': {'选项': ['大专及以下', '本科', '硕士及以上'], '权重': [10, 70, 20]},
    '执教年级': {'选项': ['三年级', '四年级', '三、四年级'], '权重': [40, 40, 20]},
}

multi_choice = {
    # 多选题配置(选项: 最大选择数)  
    '设计依据': {'选项': ['A', 'B', 'C', 'D', 'E'], 'max_choices': 3},
    '任务时间依据': {'选项': ['A', 'B', 'C', 'D'], 'max_choices': 2},
    '教学环节': {'选项': ['A', 'B', 'C', 'D'], 'max_choices': 3},
    '模块领域': {'选项': ['A', 'B', 'C', 'D'], 'max_choices': 2},
    '具体方法': {'选项': ['A', 'B', 'C', 'D', 'E', 'F'], 'max_choices': 3},
    '分组原则': {'选项': ['A', 'B', 'C', 'D', 'E', 'F'], 'max_choices': 3},
    '小组人数依据': {'选项': ['A', 'B', 'C', 'D', 'E'], 'max_choices': 2},
    '指导方式': {'选项': ['A', 'B', 'C', 'D'], 'max_choices': 3},
    '成果展示方式': {'选项': ['A', 'B', 'C', 'D', 'E'], 'max_choices': 2},
    '展示内容': {'选项': ['A', 'B', 'C', 'D'], 'max_choices': 2},
    '教师角色': {'选项': ['A', 'B', 'C', 'D'], 'max_choices': 3},
    '评价方法': {'选项': ['A', 'B', 'C', 'D', 'E', 'F'], 'max_choices': 3},
}

# ======================
# 数据生成函数
# ======================
def generate_multi_choice(options, max_choices):
    """生成多选题答案"""
    n = random.randint(1, max_choices)
    return ';'.join(sorted(sample(options, n)))

def generate_row():
    """生成单行数据"""
    row = {}
    
    # 基本信息
    for field in base_params:
        param = base_params[field]
        row[field] = choices(param['选项'], weights=param['权重'])[0]
    
    # 使用频率(逻辑:教龄越长使用越频繁)
    if row['教龄'] in ['5-10年', '10年以上']:
        freq = choices(['每节课', '每周一次', '每月一次'], weights=[40, 40, 20])[0]
    else:
        freq = choices(['每周一次', '每月一次', '不定期'], weights=[30, 40, 30])[0]
    row['使用频率'] = freq
    
    # 多选题处理
    for field in multi_choice:
        config = multi_choice[field]
        row[field] = generate_multi_choice(config['选项'], config['max_choices'])
    
    # 逻辑关联问题
    # 示例:使用频率高的教师更可能选择"每节课"应用
    if row['使用频率'] == '每节课':
        row['教学环节'] = ';'.join(sorted(['B', 'C']))  # 新授+巩固练习
        row['具体方法'] = ';'.join(sorted(['A', 'B', 'C']))  # 问题讨论+同伴教学+小组游戏
    
    return row

# ======================
# 生成数据并导出
# ======================
data = [generate_row() for _ in range(100)]
columns = [
    '性别', '教龄', '学历', '执教年级', '使用频率',
    '设计依据', '任务时间依据', '教学环节', '模块领域', '具体方法',
    '选择理由', '分组原则', '小组人数依据', '任务分配方式',
    '指导方式', '成果展示方式', '展示内容', '教师角色',
    '关键因素', '评价方法'
]

df = pd.DataFrame(data, columns=columns)
df.to_excel("survey_data.xlsx", index=False)

print("数据已生成到 survey_data.xlsx")