python科研做图系列——热力图频率分析+自己处理本人实验数据的具体流程

Source

参考1这篇参数等解释的很详细。

数据处理

处理实验数据

我需要得到序列转换频次的数据

year,month,passengers
1949,January,112
1949,February,118
1949,March,132
1949,April,129
1949,May,121
1949,June,135
1949,July,148

类比他原来的数据集,
我要把我的实验数据,处理成如下这种

1 2  次数
1 3 次数
1 4 次数
。。。。

所以建个列表来存。
需要嵌套列表——参考
我还需要pandas提取指定字符串
python正则提取数字

## 总结
## ^ 匹配字符串的开始。
## $ 匹配字符串的结尾。
## \b 匹配一个单词的边界。
## \d 匹配任意数字。
## \D 匹配任意非数字字符。
## x? 匹配一个可选的 x 字符 (换言之,它匹配 1 次或者 0 次 x 字符)。
## x* 匹配0次或者多次 x 字符。
## x+ 匹配1次或者多次 x 字符。
## x{n,m} 匹配 x 字符,至少 n 次,至多 m 次。
## (a|b|c) 要么匹配 a,要么匹配 b,要么匹配 c。
## (x) 一般情况下表示一个记忆组 (remembered group)。你可以利用 re.search 函数返回对象的 groups() 函数获取它的值。
## 正则表达式中的点号通常意味着 “匹配任意单字符”

最终我决定用series切片来搞定

选择多个元素

通过 Series
索引的切片来选择多个元素时,切片“[起始值:终止值:步长]”所指定的元素是不包含终止值的元素,如没有指定终止值,则终止值是包含 Series
最后索引的元素。

In [15]: se1[0:2]

Out[15]: 0 2

分别统计步长为2,和步长 为 3 的,序列。
再通过series的唯一值出现的次数来统计我的序列。

#返回series,索引就是唯一值,值就是唯一值出现的次数
    count = df['编码'].value_counts()

这样 大概思路就明确了,
1 切片获取二元序列片段和三元序列片段

1 2  次数
1 3 次数
1 4 次数

2 用series的方法 直接统计

开整!

步骤一 处理数据保存到 CSV 文件中

import matplotlib.pyplot as plt
from collections import Counter

import pandas as pd

import read_excel
df1=read_excel.df3

#获取先提供列表便于切片用
code = read_excel.get_code(df1)
#print(code)
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
    #print(a)
    list.append(a)

#print(list)

s = pd.Series(list)
unique=s.value_counts()
print(unique)
# 遍历并拿到每对索引和数据,赋值给series
s1 = pd.Series()
s2 = pd.Series()
s3 = pd.Series()
#遍历一下序列 合成dataframe
for key,value in unique.items():
    tens = key // 10
    ones = key % 10
    s1 = s1.append(pd.Series(tens))
    s2=s2.append(pd.Series(ones))
    s3=s3.append(pd.Series(value))
final_df = pd.DataFrame({'编码': s1, '编码类别': s2, '次数': s3})

final_df.to_csv('bbb.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('bbb.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({'前序列': data.iloc[:,0], '后序列': data.iloc[:,1], 'value': data.iloc[:,2]})
    with sns.axes_style("white"):

        sns.heatmap(


                    df.pivot_table(index='前序列', columns='后序列', 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.show()

    plt.savefig('liu.png',dpi=600)


ShowGRAHeatMap(data)