需求如下:我已经有一个热力图了,
把热力图转为马尔科夫矩阵。
我的热力图如下:
可以看到已经有结果啦
最后让GPT封装成 一个函数,只把不为0的频率返回
他帮我做到这一步就够了 ,剩下的靠我自己来吧。
最终代码:
# -*- coding:utf-8 -*-
import matplotlib.pyplot as plt
from collections import Counter
import pandas as pd
import read_excel
from collections import Counter
#获取先提供列表便于切片用
df=read_excel.df3
code=read_excel.get_code(df)
colum_one=code[0::2]
colum_two=code[1::2]
list=[]
#把所有的二元序列 放到List里面
for val1, val2 in zip(colum_one, colum_two):
# 在这里处理 val1 和 val2 的值
a=val1*10+val2
list.append(a)
#
def calculate_frequencies(nums):
# map elements to intervals
intervals = [int(x/10) for x in nums]
# count number of elements in each interval
interval_counts = Counter(intervals)
# count number of elements in each interval
element_counts = Counter(nums)
frequencies = {}
# calculate frequency
for interval, interval_count in interval_counts.items():
for element in range(interval*10,interval*10+10):
if element in element_counts:
freq = element_counts[element]/interval_count
if freq != 0:
frequencies[element] = freq
return frequencies
frequencies = calculate_frequencies(list)
print(frequencies)
# 遍历并拿到每对索引和数据,赋值给series
s1 = pd.Series()
s2 = pd.Series()
s3 = pd.Series()
#遍历frequencies
for key,value in frequencies.items():
tens = key // 10
ones = key % 10
twovalue=round(value, 2)
s1 = s1.append(pd.Series(tens))
s2 = s2.append(pd.Series(ones))
s3 = s3.append(pd.Series(twovalue))
final_df = pd.DataFrame({'编码': s1, '编码类别': s2, '频率': s3})
final_df.to_csv('频率.csv',index = False)
运行结果:
# -*- coding:utf-8 -*-
import seaborn as sns
import matplotlib.pyplot as plt
import wanwan
# 如果用的是 pandas读取的话,写路径即可
# 如果你用load加载 ,你需要复制整个文件,他会自动寻找 你指定的
#读取csv 用pandas 读取csv
import pandas as pd
data = pd.read_csv('频率.csv')
#dataframe 获取第一列series
#dataframe 获取第一列series data.iloc[:,0]
def ShowGRAHeatMap(DataFrame):
colormap = plt.cm.hsv
ylabels = DataFrame.columns.values.tolist()
f, ax = plt.subplots(figsize=(15, 15))
ax.set_title('刘老师-教学行为热力图',fontsize=20)
# 设置展示一半,如果不需要注释掉mask即可
df = pd.DataFrame({'start': data.iloc[:,0], 'end': data.iloc[:,1], 'value': data.iloc[:,2]})
with sns.axes_style("white"):
sns.heatmap(
df.pivot_table(index='start', columns='end', values='value', ),
#Pivot_table index 字体大小 columns 字体大小 values 字体大小 annot=True 显示数值 fmt='d' 数值格式
cmap="YlGnBu",
annot=True,
annot_kws={"size": 30},
#这个参数可以不显示 科学计数法
# 如果热力图 显示数据过长,调整此处即可。
#fmt='.20g',
)
plt.xticks(fontsize=30)
plt.yticks(fontsize=30)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#调整所有的字体大小
plt.rcParams.update({'font.size': 30})
plt.show()
#保存矢量图 保存到当前文件夹
#plt.savefig('热力图.svg', format='')
plt.savefig('热力图.png',dpi=600)
ShowGRAHeatMap(data)