团队360评估打分出来了,要去计算平均分,让 AI 来帮助我吧!
现在有一个评价数据表格, 文件名称是 evaluation.csv,其中包含7列,分别是 "被评人"、"评价人"、"专业技术"、"业务理解"、"学习分享"、"沟通协作"、"影响力";
其中"专业技术"、"业务理解"、"学习分享"、"沟通协作"、"影响力"这5列为指标列,值的格式是数值。
指标"总体评价"不在数据表格中,而是通过计算得出,计算方式为"专业技术"、"业务理解"、"学习分享"、"沟通协作"、"影响力"这5个指标的平均分。
数据表中每个"被评人"会有多笔被评记录, 每个"评价人"也有多笔评价记录。
你的任务是生成golang分析代码,请遵循以下要求:
好的,我用Golang来实现这个数据分析任务:
package main
import (
"encoding/csv"
"os"
"strconv"
)
// 评价数据结构
type Evaluation struct {
Evaluator string // 评价人
Evaluatee string // 被评人
TechScore float64 // 专业技术得分
BizScore float64 // 业务理解得分
ShareScore float64 // 学习分享得分
CommScore float64 // 沟通协作得分
InfluenceScore float64 // 影响力得分
}
func main() {
// 读取CSV文件
file, err := os.Open("evaluation.csv")
if err != nil {
panic(err)
}
defer file.Close()
// CSV解析器
csvReader := csv.NewReader(file)
records, err := csvReader.ReadAll()
if err != nil {
panic(err)
}
// 数据解析
var evaluations []Evaluation
for _, record := range records[1:] {
techScore, _ := strconv.ParseFloat(record[2], 64)
bizScore, _ := strconv.ParseFloat(record[3], 64)
shareScore, _ := strconv.ParseFloat(record[4], 64)
commScore, _ := strconv.ParseFloat(record[5], 64)
influenceScore, _ := strconv.ParseFloat(record[6], 64)
eval := Evaluation{
Evaluator: record[1],
Evaluatee: record[0],
TechScore: techScore,
BizScore: bizScore,
ShareScore: shareScore,
CommScore: commScore,
InfluenceScore: influenceScore,
}
evaluations = append(evaluations, eval)
}
// 按被评人分组
evalMap := make(map[string][]Evaluation)
for _, eval := range evaluations {
evalMap[eval.Evaluatee] = append(evalMap[eval.Evaluatee], eval)
}
// 计算平均分
outputRecords := make([][]string, 0)
outputRecords = append(outputRecords, []string{"被评人", "专业技术平均分", "业务理解平均分", "学习分享平均分", "沟通协作平均分", "影响力平均分", "总体评价平均分"})
for name, evals := range evalMap {
var techTotal, bizTotal, shareTotal, commTotal, influenceTotal float64
for _, eval := range evals {
techTotal += eval.TechScore
bizTotal += eval.BizScore
shareTotal += eval.ShareScore
commTotal += eval.CommScore
influenceTotal += eval.InfluenceScore
}
techAvg := techTotal / float64(len(evals))
bizAvg := bizTotal / float64(len(evals))
shareAvg := shareTotal / float64(len(evals))
commAvg := commTotal / float64(len(evals))
influenceAvg := influenceTotal / float64(len(evals))
overallAvg := (techAvg + bizAvg + shareAvg + commAvg + influenceAvg) / 5.0
outputRecords = append(outputRecords, []string{name,
strconv.FormatFloat(techAvg, 'f', 2, 64),
strconv.FormatFloat(bizAvg, 'f', 2, 64),
strconv.FormatFloat(shareAvg, 'f', 2, 64),
strconv.FormatFloat(commAvg, 'f', 2, 64),
strconv.FormatFloat(influenceAvg, 'f', 2, 64),
strconv.FormatFloat(overallAvg, 'f', 2, 64)})
}
// 输出结果到CSV文件
outputFile, err := os.Create("evaluation_avg.csv")
if err != nil {
panic(err)
}
defer outputFile.Close()
csvWriter := csv.NewWriter(outputFile)
csvWriter.WriteAll(outputRecords)
if err := csvWriter.Error(); err != nil {
panic(err)
}
}
这个代码读取 evaluation.csv 文件,解析数据到 Evaluation 结构体,然后按被评人分组,计算每个人的各项指标平均分,最后写入 evaluation_avg.csv 输出文件。输出格式符合要求,注释使用中文说明,变量名称英文。请检查实现是否符合要求。