Ronald H. Coase
# designed by Ubuntu330
from openpyxl import load_workbook #调用操作excel的库openpyxl 版本3.0.5
import matplotlib.pyplot as plt #调用绘图库matplotlib 版本3.3.2
import time
plt.figure(figsize=(8,4.5),facecolor='black') #定义窗口大小颜色
plt.style.use('dark_background') #选择图表配色风格
print('Loading data......pls wait......',time.strftime('%H:%M:%S',time.localtime()) ) #安慰式提示
wb = load_workbook('data\qar.xlsx') #从文件夹data中装入QAR原始数据qar.xlsx
ws = wb.active #打开数据表
print('Data loaded...',time.strftime('%H:%M:%S',time.localtime()) ) #载入数据完成
# 设计单列图形化函数
def qaritem(column,name,style,width,color):
listx = []
listy=[]
list = []
for cell in ws[column]:
c=(cell.value)
if isinstance(c,int) or isinstance(c,float): #找出数字,去除非数字格
list.append(c)
x=cell.row
listx.append(x)
ma=max(list) #数据尺度格式化:为避免各列数值相差太大导致显示混乱,统一缩放到0-100
mi=min(list)
for y in list:
y=(y-mi)*100/(ma-mi)
listy.append(y)
#print(listx, listy) #去掉注释后用于纠错
plt.plot(listx, listy, label=name, linestyle=style,linewidth=width,color=color)
return
# 单列图形化函数结束
# 以下为用户根据需要编辑
qaritem(column='N',name='ALT_STDC',style='-',width=1,color='coral') #调用单列图形化函数,下同
qaritem(column='W',name='IASC',style='-',width=1,color='lightgreen')
qaritem(column='AX',name='VRTG',style='-',width=1,color='orchid')
qaritem(column='U',name='IVVR',style='--',width=1,color='steelblue')
#qaritem(column='AZ',name='N11',style=':',width=1,color='salmon')
# 显示绘图结果
plt.title('QAR-items Chart') #图标标题
plt.legend(loc='best') #图例参数
plt.show() #显示图表
wb.close() #关闭数据表
# designed by Ubuntu330
# 为QAR的xlsx文件减肥,提高运算效率
from openpyxl import load_workbook #调用操作excel的库openpyxl 版本3.0.5
import time #调用时间库,用于显示清洗进度
print('Loading data......pls wait......',time.strftime('%H:%M:%S',time.localtime()) ) #安慰式提示
wb = load_workbook('data\qar.xlsx') #从文件夹data中装入QAR原始数据qar.xlsx
ws = wb.active #打开数据表
print('Data loaded...',time.strftime('%H:%M:%S',time.localtime()) ) #载入数据完成
kill=[] #定义要清除的列表
cols=ws.max_column #获取数据表列数
rows=ws.max_row #获取数据表行数
i=0
print('collect empty column from ',cols,' columns:',end=' ')
while i <= cols:
i = 1
print(i,end=' ') #用户等待时间长,显示翻查进展
j=1
k=False
v1 = ws.cell(row=j, column=i).value
while j <= rows:
j = 1
v=ws.cell(row=j, column=i).value #遍历每列单元格值
if v != None: #寻找第一个非空值
v1=v
break
while j <= rows:
j = 1
v=ws.cell(row=j, column=i).value #遍历每列单元格值
if v != None and v != v1: #找出全列为空或者数值无变化的列
k=True
break
if k == False:
kill.append(i) #找出来的空列放入清除列表
print()
print('deleting:')
kill.reverse() #列表反转,从后向前删除列,目的是删除时避免指针错乱
if len(kill)>1: #如果存在空列,则开始删除,否则结束运行
kill1=kill[0]
kill2=kill[1:]
killpair=[]
k=1
for i in kill2: #逐列删除太慢,将连续列转为组合进行删除,提高清理速度
if i==kill1-1:
k = 1
kill1=i
else:
killpair.append([kill1,k])
kill1=i
k=1
killpair.append([kill1,k])
pairs=len(killpair)
kk=0
for i in killpair: #遍历删除组合列
a=i[0]
b=i[1]
ws.delete_cols(a,b) #删除该组合列
pairs -= 1 #计算剩余组合列数
print(a,'-',a b-1, 'deleted','at',time.strftime('%H:%M:%S',time.localtime()),pairs,'left') #显示删除进展
#kk = 1 #!!如果数据太大,清洗期间需要关机,建议将这五行代码激活
#if kk==50: #!!决定删除多少次保存一次,不宜太频繁,保存大文件也很耗时
# wb.save('data\qar.xlsx') #!!保存文件
# print('saved at',time.strftime('%H:%M:%S',time.localtime()))
# kk=0 #!!五行代码结束
wb.save('data\qar.xlsx') #保存清理后的最终数据
wb.close() #关闭数据表
联系客服