读取一个.xlsx文件,获得其中一个sheet的数据,以此绘制一个饼图
import xlrd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
def eq5d_index_change():
data=xlrd.open_workbook("Raw Data MAKO v2.xlsx") # 打开excel文件
table=data.sheet_by_name('PHIN-22E_CR') # 通过excel里面的表名获取工作表
row=table.row_values(0)#根据索引读取一行的数据,参数:行索引,开始列索引,结束列索引(不包含)
print("标题行:",end=' ')
print(row)
#获得EQ5D_INDEX_CHANGE列的索引
for i in range(len(row)):
if row[i]=='EQ5D_INDEX_CHANGE':
index=i
break
EQ5D_INDEX_CHANGE=table.col_values(index, 1) #获得EQ5D_INDEX_CHANGE列的数据
#原始数列因为某些原因,存在空值,因此先使用剩余元素的平均值填充一下空值
sum=0.0
for i in range(len(EQ5D_INDEX_CHANGE)):
if isinstance(EQ5D_INDEX_CHANGE[i], float): # 判断元素是否为float类型,即不是空值
sum+=EQ5D_INDEX_CHANGE[i]
average=sum/len(EQ5D_INDEX_CHANGE)
for i in range(len(EQ5D_INDEX_CHANGE)):
if not isinstance(EQ5D_INDEX_CHANGE[i], float): #元素不是float类型即空值时,使用剩余元素的平均值填充
EQ5D_INDEX_CHANGE[i]=average
print ("使用平均值填充后:",end=' ')
print(EQ5D_INDEX_CHANGE)
print ("EQ5D_INDEX_CHANGE平均值为:",end=' ')
print(np.mean(EQ5D_INDEX_CHANGE))
#统计高于平均值的个数,high予以计数
high=0
for i in range(len(EQ5D_INDEX_CHANGE)):
if EQ5D_INDEX_CHANGE[i]>=np.mean(EQ5D_INDEX_CHANGE):high+=1
print("**************************开始绘图**************************")
plt.bar(range(len(EQ5D_INDEX_CHANGE)), EQ5D_INDEX_CHANGE)
plt.title("Statistics")
plt.axhline(y=np.mean(EQ5D_INDEX_CHANGE),color="red")
plt.ylabel("EQ5D_INDEX_CHANGE")
labels=['Above average','Below average']
X=[]
X.append(high)
X.append(len(EQ5D_INDEX_CHANGE)-high)
fig = plt.figure()
plt.pie(X,labels=labels,autopct='%1.2f%%') #画饼图(数据,数据对应的标签,百分数保留两位小数点)
plt.title("Proportional pie chart")
plt.show()
if __name__ == '__main__':
eq5d_index_change()
结果如下
Python初学,很多地方不熟悉,欢迎指教~