Python excel to get data and draw a histogram

Python just getting started, we welcome more exchanges ~
recently to be a small project, obtain medical data file Raw Data MAKO v2.xlsx in a sheet called PHIN-22E_KR, access to designated columns of data and draw a histogram. excel file as follows
Here Insert Picture Description

import xlrd
import numpy as np
import matplotlib.pyplot as plt

def plotavganalyse():
    data=xlrd.open_workbook("Raw Data MAKO v2.xlsx")  #打开excel文件
    #table1=data.sheet_by_name('PHIN-22E_CR')#通过excel里面的表名获取工作表
    #table1 = data.sheet_by_name('PHIN-22E_HR')
    table1 = data.sheet_by_name('PHIN-22E_KR')

    row1 = table1.row_values(0)  # 根据索引读取一行的数据,参数:行索引,开始列索引,结束列索引(不包含)
    for i in range(len(row1)):
        if row1[i] == 'KR_SCORE_CHANGE':
            oneindex1 = i
        elif row1[i] == 'CONSULTANT':
            oneindex2 = i
        elif row1[i] == 'Robotic':
            oneindex3 = i
            
	#获取KR_SCORE_CHANGE、CONSULTANT、Robotic三列的数据
    score_change=table1.col_values(oneindex1, 1)
    consultant=table1.col_values(oneindex2, 1)
    robotic=table1.col_values(oneindex3, 1)
    
	# 剔除CONSULTANT列表中重复元素,并按首字母顺序重新排列
    docter=list(sorted(set(consultant)))
    
    # docavglist存放各docter的手术得分的平均值
    docavglist=[]
     for i in range(len(docter)):
        templist=[]
        for m in range(len(consultant)):
            if consultant[m]==docter[i]:
                templist.append(score_change[m])
        docavglist.append(np.mean(templist))
        
    # docavglist1将docavglist中的数据保留三位小数(四舍五入)
    docavglist1=[]
    for i in range(len(docavglist))    :
        docavglist1.append(float('%.3f'%docavglist[i]))
	# docnameplot 获取docter中各医生的姓氏,便于画图
    docnameplot=[]
    for i in range(len(docter)):
        docnameplot.append((docter[i].split(' ',1))[1])
    #str.split(' ', 1 ); # 以空格为分隔符,分隔成两个
    # 例如 str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
    # print str.split();  # 以空格为分隔符,包含 \n
    # print str.split(' ', 1);  # 以空格为分隔符,分隔成两个

    print("**************************开始绘图**************************")
    plt.bar(docnameplot, docavglist1)
    plt.axhline(y=np.mean(score_change),color="red") #在直方图上画一条平均值线
    plt.text(-2.6, np.mean(score_change), "Average", color = "r",size=14, alpha=0.7) #对平均值线添加文字信息,alpha为透明度
    plt.xlabel('Docter')
    plt.ylabel('Avg_SCORE_CHANGE')
    #在直方图中各柱的头上标注其值 
    for a, b in zip(docnameplot, docavglist1):
        plt.text(a, b + 1, b, ha='center', va='bottom')
    plt.show()

if __name__=='__main__':
    plotavganalyse()

The results below
Here Insert Picture Description
code reference many bloggers articles, bloggers involved no more detailed records, to express my gratitude; Python beginners welcome advice ~

Released two original articles · won praise 0 · Views 52

Guess you like

Origin blog.csdn.net/ajc_zh/article/details/104260020