用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))

 

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