• Python科学数据分析:随机生成 50 名学生,5 门课程的成绩保存后进行数据分析(平均分、最高分)、数据展示(饼图、直方图)


    前言

    Python数据分析作业,利用科学计算相关库,随机生成 50 名学生,5 门课程的成绩(成绩为 0 到 100 随机整数),进行数据分析与展示

    内容

    1、 随机生成上述数据并保存在数组中,并将数组数据保存分别保存到文本文件和 CSV 文件

    # 数据生成和保存
    # -*- coding: utf-8 -*-
    import numpy as np
    
    x = np.empty(shape=[0, 5], dtype=int)  # 生成一个0行5列的空数组
    # print(x)
    
    for i in range(50):
        y = np.random.randint(0, 101, 5)
        x = np.append(x, [y], axis=0)  # 添加整行元素,axis=1添加整列元素
    print(x)
    data = x
    # 保存到txt文件中
    np.savetxt('data_txt.txt', data, fmt='%d')
    
    # 保存到csv文件中
    np.savetxt('data_csv.csv', data, fmt='%d', delimiter=',')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    2、 数据分析,分析每名同学的平均分,每门课的平均分、每门课最高分

    # -*- coding: utf-8 -*-
    import numpy as np
    
    data = np.loadtxt('data_txt.txt')
    print(data)
    
    # 每位同学的平均分
    avgEach = data.mean(axis=1)  # 计算完之后array的长度等于行数
    print("每位同学的平均分:")
    print(avgEach)
    
    # 每门课的平均分
    avgEachCourse = data.mean(axis=0)  # 计算完之后array的长度等于列数
    print("每门课的平均分:")
    print(avgEachCourse)
    
    # 求每门课的最高分
    max_f = data.max(axis=0)
    print("求每门课的最高分:")
    print(max_f)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    3、数据展示,从数组中任取一名同学的成绩,制作饼图并保存;任取一门课的 50 名同学成绩,制作该门课的直方图并保存

    # -*- coding: utf-8 -*-
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib
    
    # 制作饼图
    data = np.loadtxt('data_txt.txt')  # 加载数据
    Labels = 'Class-A', 'Class-B', 'Class-C', 'Class-D', 'Class-E'  # 饼块标签
    Explode = (0, 0, 0, 0, 0)
    plt.pie(data[1], explode=Explode, labels=Labels, autopct='%.2f%%')
    plt.figure(1)
    plt.show()
    
    # 选一门课制作直方图
    matplotlib.rcParams['font.family'] = 'SimHei'
    plt.suptitle("课程成绩分布直方图")  # 为当前绘图区添加标题
    # 绘制Class-A成绩直方图
    plt.subplot(3, 1, 1)
    plt.hist(data[:, 1], bins=10, range=(0, 100), color='red')  # 绘制直方图,从0到100分成10段
    plt.xlabel("Class-A 成绩分数段")  # 设置x轴标签
    plt.ylabel("人数")  # 设置y轴标签
    plt.xlim(0, 100)  # 设置x轴区间
    plt.xticks([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100])  # 设置x轴刻度
    plt.yticks([0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20])  # 设置y轴刻度
    plt.grid()  # 设置网格线
    plt.figure(2)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    饼图:
    在这里插入图片描述

    直方图:
    在这里插入图片描述

  • 相关阅读:
    关于C++中内存分区的知识
    解决kafka.errors.NodeNotReadyError: NodeNotReadyError
    ArcGIS土地利用动态度与土地利用程度计算(附练习数据下载)
    从夜间照明到随动转向速锐得解码比亚迪唐车灯升级改装技术方案
    MySQL之Alter语句用法总结
    算法(二)——数组章节和链表章节
    晶振分频【FPGA】
    Uniapp 实现全民分销功能
    算法训练 第六周
    Solidity智能合约事件(event)
  • 原文地址:https://blog.csdn.net/m0_50679156/article/details/125522247