用python分析下娃娃班级分数分布

家里宝宝学校进行了小测验,分数拿回来一看,怎么才那么点分数,为了激励他,将他分数在班级排名给他分析了一下,希望他下一步能尽力继续前进吧


import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontManager

def main():
    """
        主函数
    """
    #fm = FontManager()
    #mat_fonts = set(f.name for f in fm.ttflist)
    #print('字体信息:')
    #print(mat_fonts)
    plt.rcParams['font.family'] = ['Alibaba PuHuiTi']
    plt.rcParams['axes.unicode_minus'] = False
    aqi_data = pd.read_csv('score.csv')
    print('基本信息:')
    print(aqi_data.info())

    print('数据预览(5行数据):')
    print(aqi_data.head())

    # 基本统计
    print('分数最高:', aqi_data['score'].max())
    print('分数最低:', aqi_data['score'].min())
    print('分数均值:', aqi_data['score'].mean())

    # 过滤数据
    clean_aqi_data=aqi_data[aqi_data['score']>287]
    print('分数大于287个数:', len(clean_aqi_data))
    new_aqi_data= clean_aqi_data.sort_values(by=['score'])
    print('分数大于287 排序:\n', new_aqi_data)
    print(type(new_aqi_data))
    print('变化百分比:')
    bfb=new_aqi_data.pct_change(axis='rows')
    print (bfb)

    df1 = pd.DataFrame({'id':new_aqi_data['id'],'score':bfb['score']})

    # figsize 输出图片宽高 条形图
    new_aqi_data.plot(kind='bar',x='id' ,y='score', title='分数大于287的条形图',figsize=(8, 5))
    plt.savefig('score.png')
    # 柱状图
    new_aqi_data.plot(kind='hist',x='id' ,y='score', title='分数大于287的柱状图',figsize=(8, 5))
    plt.savefig('zhu.png')
    # 散点图
    new_aqi_data.plot(kind='scatter',x='id' ,y='score', title='分数大于287的散点图',figsize=(8, 5))
    plt.savefig('sandiantu.png')
     # 将分数环比 条形图
    df1.plot(kind='bar', x='id', y='score', title='分数大于287的阶梯',figsize=(8, 5))
    plt.savefig('jieti.png')
    plt.show()

if __name__ == '__main__':
    main()

先输入数据到一个csv文件,只有2列,一列id一列分数

用pandas库,熊猫?分析数据太方便,很容易就知道最高分,最低分,平均分

后来过滤一下把大于287分的前几名拿出来分析一下

最简单条形图,把分数从低到高排一排标示一下,让人看看节节高

柱状图,就会把相近的图合并挤一块

散点图,假设id是表示以前成绩的,现在知道那些人已经列到上面那些人在下面

分数环比条形图,知道每人跟前面一个人差距

还要一张图是折线,但是直接用发现id是当做x轴数据的话就乱了,id不连续,最后发现需要把id当做字符,另外整个序列当x值

def drawline(new_aqi_data):
    plt.title='分数大于287的line图'
    x=range(19)
    xlabel=[]
    for i in new_aqi_data['id']:
        xlabel.append(str(i))
    plt.xticks(x, xlabel, rotation=0)
    plt.plot(x,new_aqi_data['score'])
    # 设置x轴的标签
    plt.xlabel('代号')
    # 设置y轴的标签
    plt.ylabel('分数')
    plt.yticks(rotation=0)
    plt.figure(figsize=(8,5))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章