CSV__04--使用csv库对每家店铺的所有商品评价,去掉一个最高分和一个最低分求平均值

简介: 有很多数据存储在csv文件中,每个店铺有唯一userID,每件商品有唯一的workID,以及评分字段,csv文件按照userID排列,需要将相同userID店铺的不同商品评分进行一个去掉一个最高分和一个最低分求平均值操作。

1 CSV

python对CSV文件的读写处理常用CSV库完成。

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

2 前景知识

2.1 迭代器

  1. 迭代器的概念

    迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口。

  2. 迭代器的特点

    1. 强制性:必须将元素从迭代器中取出后,才能使用元素;
    2. 一次性:取出以后该元素就从迭代器中删除,无法二次遍历;
    3. 未知性:容器内部元素无法直接定位,只能遍历按序取出。
  3. python使用迭代器处理CSV文件

    1. 将path路径下的文件创建为reader迭代器

      reader = csv.reader(open(path, 'rt', encoding='utf-8'))
    2. 遍历得到迭代器全行的前四列

      column1 = [row1[0:4] for row1 in reader]

2.2 去掉最大值和最小值

先按照店铺workID将grade添加至temp数组

temp.remove(min(temp))
temp.remove(max(temp))

3 问题描述

有很多数据存储在csv文件中,每个店铺有唯一userID,每件商品有唯一的workID,以及评分字段,csv文件按照userID排列,需要将相同userID店铺的不同商品评分进行一个去掉一个最高分和一个最低分求平均值操作。

注意点:

  1. 没家店铺的商品数不同;
  2. 平均分精度控制;
  3. 及时跳出循环,避免数组越界。

4 完整代码

# 对每家店铺的所有商品评价,去掉一个最高分和一个最低分求平均值
def total_work(path):
    reader = csv.reader(open(path, 'rt', encoding='utf-8'))
    column1 = [row1[0:4] for row1 in reader]
    print("共有" + str(reader.line_num - 1) + "件作品。")
    i = 1

    with open("total_"+path, 'w', encoding='UTF8', newline='') as f1:
        writer1 = csv.writer(f1)
        writer1.writerow(["realname", "userID", "grade", "num"]) # 写入标题
        while i <= reader.line_num - 1:
            # 作品数
            j = 1
            # 得分
            grade = 0
            # 所有作品得分的数组
            temp = [float(column1[i][3])]
            while column1[i][1] == column1[i + 1][1]:    # 判断userID店铺是否相同
                i = i + 1
                temp.append(float(column1[i][3]))
                j = j + 1
                # 数组中添加统一参赛者的作品得分
                if i == reader.line_num - 1:             # 判断是否为最后一个商品评价
                    break
            # 去掉最小值 去掉最大值 求平均
            temp.remove(min(temp))
            temp.remove(max(temp))
            grade = "%.3f"%(sum(temp)/(j-2))
            # grade = round(temp/(j),5)
            # 写入平均分
            column1[i][2] = grade
            # 写入作品数量
            # column1[i].append(j)
            column1[i][3] = j
            # 存入csv
            writer1.writerow(column1[i])
            i = i + 1
相关文章
|
6月前
|
BI 索引 Python
利用Numpy读取iris数据集并进行排序、去重、求统计量等操作实战(附源码)
利用Numpy读取iris数据集并进行排序、去重、求统计量等操作实战(附源码)
369 0
|
1月前
|
索引 Python
Excel学习笔记(一):python读写excel,并完成计算平均成绩、成绩等级划分、每个同学分数大于70的次数、找最优成绩
这篇文章是关于如何使用Python读取Excel文件中的学生成绩数据,并进行计算平均成绩、成绩等级划分、统计分数大于70的次数以及找出最优成绩等操作的教程。
55 0
某学科成绩的录入并显示出最高分,最低分,平均值。
某学科成绩的录入并显示出最高分,最低分,平均值。
|
数据可视化
ENVI_IDL:读取所有OMI产品的NO2柱含量并计算月均值、季均值、年均值+解析
ENVI_IDL:读取所有OMI产品的NO2柱含量并计算月均值、季均值、年均值+解析
211 1
ENVI_IDL:读取所有OMI产品的NO2柱含量并计算月均值、季均值、年均值+解析
|
数据挖掘
白话Elasticsearch36-深入聚合数据分析之案例实战Histogram Aggregation:按价格区间统计电视销量和销售额
白话Elasticsearch36-深入聚合数据分析之案例实战Histogram Aggregation:按价格区间统计电视销量和销售额
97 0
|
数据挖掘
白话Elasticsearch43-深入聚合数据分析之案例实战__排序:按每种颜色的平均销售额升序排序
白话Elasticsearch43-深入聚合数据分析之案例实战__排序:按每种颜色的平均销售额升序排序
82 0
|
自然语言处理
两份数据基于文本和住房信息的分词统计 tfidf 数分作业
两份数据基于文本和住房信息的分词统计 tfidf 数分作业
76 0
两份数据基于文本和住房信息的分词统计 tfidf 数分作业
CSV__02--使用csv库对每条商品求平均评分
有很多数据存储在csv文件中,每件商品有唯一id,以及评分字段,csv文件按照id排列,需要将相同商品id的评分进行一个求平均分的操作。
五星评分系统,Excel也能做(下)
如果你是一名HR,碰到要给员工的绩效进行评分,该怎么做比较美观呢? 今天分享两个星级评分图的制作方法。
五星评分系统,Excel也能做(下)