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
相关文章
|
8月前
用xls制作每位学生的成绩折线图,学生成绩趋势一目了然!
当我们想看清每位同学的成绩浮动情况时,就相当麻烦。
861 0
|
3月前
|
数据采集 Serverless Python
Python代码示例:数据清洗、表合并和分组计算销售额
Python代码示例:数据清洗、表合并和分组计算销售额
29 1
|
4月前
固定资产入库,多个相同种类物品如何自动给每个物品都生成标签和编码?
固定资产入库,多个相同种类物品如何自动给每个物品都生成标签和编码?
39 2
|
5月前
某学科成绩的录入并显示出最高分,最低分,平均值。
某学科成绩的录入并显示出最高分,最低分,平均值。
|
10月前
ChatGPT生成Excel统计公式
ChatGPT生成Excel统计公式
|
11月前
|
数据挖掘
白话Elasticsearch36-深入聚合数据分析之案例实战Histogram Aggregation:按价格区间统计电视销量和销售额
白话Elasticsearch36-深入聚合数据分析之案例实战Histogram Aggregation:按价格区间统计电视销量和销售额
67 0
|
11月前
|
数据挖掘
白话Elasticsearch43-深入聚合数据分析之案例实战__排序:按每种颜色的平均销售额升序排序
白话Elasticsearch43-深入聚合数据分析之案例实战__排序:按每种颜色的平均销售额升序排序
59 0
|
11月前
|
数据挖掘
白话Elasticsearch41-深入聚合数据分析之案例实战__过滤+聚合:统计价格大于2000的电视平均价格
白话Elasticsearch41-深入聚合数据分析之案例实战__过滤+聚合:统计价格大于2000的电视平均价格
72 0
CSV__02--使用csv库对每条商品求平均评分
有很多数据存储在csv文件中,每件商品有唯一id,以及评分字段,csv文件按照id排列,需要将相同商品id的评分进行一个求平均分的操作。
Python 将日期按年,月,日对数据进行分组归类及绘图
Python 将日期按年,月,日对数据进行分组归类及绘图
Python 将日期按年,月,日对数据进行分组归类及绘图