Python刚入门,欢迎大家多多交流~
最近做个小项目,获取医疗数据文件Raw Data MAKO v2.xlsx中的一个名为PHIN-22E_KR的sheet ,获取其指定几列的数据并绘制直方图。excel文件如下
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()
结果如下
代码参考了许多博主的文章,涉及的博主较多没详细记录,在此表示感谢;Python初学者,欢迎指教~