呃,之前好像帮其他专业的同学写过几个和自动化办公相关的脚本。。。
称不上有趣,不过还算实用。。。
至少帮我可爱的同学们减少了大量重复且无趣的体力劳动。。。
比如有个环测相关专业的同学,有段时间每天白天要拿着收集环境数据的机器去马路上吸尾气,晚上还要把机器里的数据导出来整理成excel表格。。。
于是帮他写了个自动处理数据的小软件,效果大概是这个样子的:
用pyqt5写的,可以自动解析机器里导出的txt文件,并从中提取自己需要的数据项。(这应该算是自动化办公吧。。。。T_T)
好吧,还是环境相关专业的一个同学(两个同学在不同的学校T_T)。。。
因为第二天需要演讲啥的吧,所以赶PPT。。。需要把一些数据做成图表(图表的格式要统一)。。。因为数据非常多的,用excel一份份调的话估计肯定来不及了。。。
所以我帮他写了个小脚本,自动解析每个excel里的数据,并按照他要求的格式可视化处理。
效果大概是这样子的(代码实现起来其实很简单,但是用excel自带的图表可视化去一个个调的话就很麻烦了,因为他要每项数据对应一种颜色,然后还有其他要求啥的,反正听他描述手动处理确实很麻烦,如果我没记错的话T_T):
这个可以放下源码:
import csv
import copy
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
# font_c = matplotlib.font_manager.FontProperties(fname='font.TTF')
matplotlib.rcParams['font.family'] = 'Times New Roman'
colors = ['red', 'yellow', 'lime', 'cyan', 'darkviolet', 'thistle', 'deeppink', 'skyblue', 'orange', 'tan', 'coral']
names = ['燃煤锅炉整治', '民用燃料清洁化', '落后产能淘汰', '燃煤电厂超低排放改造', '散乱污企业治理', '工业源末端升级改造', '挥发性有机物治理', '交通结构优化与排放管控', '扬尘源综合治理', '农业源综合治理']
colors_dict = dict(zip(names, colors))
def drawBar(x_axis, y_axis, colors, title):
x_axis_inside = copy.deepcopy(x_axis)
x_axis_outside = (np.array(y_axis) / sum(y_axis) * 100).round(1).tolist()
tmp = []
count = 0
for i in x_axis_outside:
if i == 0:
count += 1
i = ' ' * count + str(i)
t = str(i) + '%'
tmp.append(t)
# x_axis_outside = [str(i)+'%' for i in x_axis_outside]
x_axis_outside = tmp
plt.barh(x_axis_outside, y_axis, color=colors)
for idx, text in enumerate(x_axis_inside):
plt.text(0.5, idx-0.15, text, family='FangSong', fontdict={'style': 'italic'})
if title == 'SO2':
plt.title('$SO_2$')
elif title == 'NOx':
plt.title('$NO_x$')
else:
plt.title('$PM_{2.5}$')
plt.xlabel('单位: 万吨', family='FangSong')
plt.savefig(title+'.jpg')
plt.show()
def readExcel(excelpath):
names = list()
data_so2, data_nox, data_pm25 = list(), list(), list()
with open(excelpath, 'r', encoding='gbk') as f:
csv_reader = csv.reader(f)
for idx, line in enumerate(csv_reader):
if idx > 0:
names.append(line[0])
data_so2.append(float(line[1]))
data_nox.append(float(line[2]))
data_pm25.append(float(line[3]))
return names, data_so2, data_nox, data_pm25
def preprocess(names, data, colors_dict):
tmp_dict = dict(zip(names, data))
tmp_dict = dict(sorted(tmp_dict.items(), key=lambda item: item[1], reverse=False))
names = list(tmp_dict.keys())
data = list(tmp_dict.values())
colors = [colors_dict.get(name) for name in names]
return names, data, colors
names, data_so2, data_nox, data_pm25 = readExcel('1.csv')
for idx, data in enumerate([data_so2, data_nox, data_pm25]):
names, data, colors = preprocess(names, data, colors_dict)
if idx == 0:
drawBar(names, data, colors, 'SO2')
elif idx == 1:
drawBar(names, data, colors, 'NOx')
else:
drawBar(names, data, colors, 'PM2.5')
帮同学写过挺多脚本的。。。但是大多数都找不到了。。。以后有新的再过来补充吧。