from pylab import mpl
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 读取数据
# 选择Excel文件
wine = pd.read_excel("E:\\秦皇岛海上平台项目\\关联度分析1.xlsx")
wine.head()
# 无量纲化
def dimensionlessProcessing(df):
#创建Dataframe(DataFrame是带有标签轴(行和列)的二维大小可变的,可能是异构的表格数据结构)
newDataFrame = pd.DataFrame(index=df.index)
#显示列表索引
columns = df.columns.tolist()
for c in columns:
d = df[c]
MAX = d.max()
MIN = d.min()
MEAN = d.mean()
newDataFrame[c] = ((d - MEAN) / (MAX - MIN)).tolist()
return newDataFrame
def GRA_ONE(gray, m=0):
# 读取为df格式
gray = dimensionlessProcessing(gray)
# 标准化
#取m列
std = gray.iloc[:, m] # 为标准要素
#axis = 1 表示删除列,inplace=True, 直接从内部删除
gray.drop(str(m),axis=1,inplace=True)
ce = gray.iloc[:, 0:] # 为比较要素
shape_n, shape_m = ce.shape[0], ce.shape[1] # 计算行列,shape[0]读取矩阵第一维度的长度,shape[1]读取矩阵第二维度的长度
# 与标准要素比较,相减
a = np.zeros([shape_m, shape_n])
for i in range(shape_m):
for j in range(shape_n):
a[i, j] = abs(ce.iloc[j, i] - std[j]) #abs() 函数返回数字的绝对值
# 取出矩阵中最大值与最小值
c, d = np.amax(a), np.amin(a)
# 计算值
result = np.zeros([shape_m, shape_n])
for i in range(shape_m):
for j in range(shape_n):
result[i, j] = (d + 0.5 * c) / (a[i, j] + 0.5 * c)
# 求均值,得到灰色关联值,并返回
result_list = [np.mean(result[i, :]) for i in range(shape_m)]
result_list.insert(m,1) #将result_list插入
return pd.DataFrame(result_list)
# 调用GRA_ONE,求得所有因素之间的灰色关联值
def GRA(DataFrame):
df = DataFrame.copy()
list_columns = [
str(s) for s in range(len(df.columns)) if s not in [None]
]
df_local = pd.DataFrame(columns=list_columns)
df.columns=list_columns
for i in range(len(df.columns)):
df_local[df_local.columns[i]] = GRA_ONE(df, m=i)[0]
return df_local
import seaborn as sns
def ShowGRAHeatMap(DataFrame):
colormap = plt.cm.RdBu
ylabels = DataFrame.columns.values.tolist()
f, ax = plt.subplots(figsize=(14, 14))
ax.set_title('GRA HeatMap')
# 设置展示一半,如果不需要注释掉mask即可
mask = np.zeros_like(DataFrame)
mask[np.triu_indices_from(mask)] = True
with sns.axes_style("white"):
sns.heatmap(DataFrame,
cmap="YlGnBu",
annot=True,
mask=mask,
)
plt.show()
data_wine_gra = GRA(wine)
ShowGRAHeatMap(data_wine_gra)
半图:
全图:
如何做到全图保存,且在索引处表现为Excel中的标题
老板安排了一个紧急的报表任务,报表源数据如下图1,要求把不同岗位和不同级别的工龄中位值分别计算出来统计成表格。虽然不会,很着急,但是身为打工人也只能老老实实去查,去学了。
图1
首先,我们需要将问题拆解为以下几个步骤: 1. 读取Excel中的标题数据 2. 将图像保存为文件 3. 在保存的图像中添加索引和标题
以下是解决该问题的具体步骤和代码实现:
步骤1: 读取Excel中的标题数据 首先,我们需要使用openpyxl库读取Excel文件中的标题数据。根据参考资料中的代码示例,我们可以创建一个类DoExcel来操作Excel文件,该类包含一个方法get_excel()来读取Excel中的测试标题数据。
import openpyxl
class DoExcel:
"""操作Excel"""
def __init__(self, excel_name, sheet_name):
self.excel_name = excel_name
self.sheet_name = sheet_name
def get_excel(self): # 从Excel读取测试数据
'''创建一个列表,用来保存标题数据'''
title_list = []
wb = openpyxl.load_workbook(self.excel_name)
sheet = wb.get_sheet_by_name(self.sheet_name)
'''读取第一行的标题数据'''
for i in range(1, sheet.max_column+1):
title_list.append(sheet.cell(1, i).value)
'''返回保存了标题数据的列表 title_list'''
return title_list
步骤2: 将图像保存为文件 接下来,我们需要将图像保存为文件。可以使用Pillow库中的Image类来处理图像,并使用save方法将图像保存为文件。
from PIL import Image
# 图像处理部分代码...
# 将图像保存为文件
image.save("path/to/save/image.jpg")
步骤3: 在保存的图像中添加索引和标题 最后,我们需要在保存的图像中添加索引和标题。可以使用Pillow库中的ImageDraw类来在图像上绘制索引和标题。
from PIL import Image, ImageDraw, ImageFont
# 图像处理部分代码...
# 在图像上绘制索引和标题
draw = ImageDraw.Draw(image)
font = ImageFont.truetype("path/to/font.ttf", font_size)
# 绘制索引
draw.text((x, y), index, fill=color, font=font)
# 绘制标题
draw.text((x, y), title, fill=color, font=font)
# 保存绘制完成的图像
image.save("path/to/save/image.jpg")
注意:在以上代码中,需要根据实际情况指定保存图像的路径、字体文件的路径、字体大小等参数。
综上所述,可以通过组合以上步骤和代码来实现将图像完整保存,并在保存的图像中添加索引,在索引处显示Excel中的标题的功能。如果需要更具体的代码实现,请提供更详细的问题描述。