python 信息熵的计算代码

写了一串以dataframe为数据源的三个函数。没有封装,直接发了。

import math 
import pandas as pd
import numpy as np
def quchonghanshu(one_list):
    return list(set(one_list))
def lisan_NO_imformation_S(jieguo,datafr1,string,attributes_num):
    all_sum=np.array(datafr1[string]).shape[0]#参数在这里修改,要求得到这一columns的
    temp_dic={}
    for i in jieguo:
        count=0#注意这里!!!!
        temp_dic[i]=count
        for s in range(all_sum):
            if datafr1.ix[s,string]==i:
                count=count+1
        if count==0:
            count=1
        temp_dic[i]=count
    countlog=0
    for i in jieguo: 
        countlog=countlog+temp_dic[i]/all_sum*math.log(temp_dic[i]/all_sum,
                                  attributes_num)
    countlog=-countlog
    return countlog
'''
lisan_NO_imformation_S功能说明:返回一列东西的熵
参数说明:
1,jieguo: a list ,witch are problely results,可能结果的列表
2,datafr1: dataframe type,witch you want to calculate
3,string:columns name witch you want to calculate,要计算无信息熵的那一列的名字
4,attributes_num:可能结果的个数
'''
def lisan_condition_imformation_S(datafr1,attributes_value,condition_string,
                                  result_string,result_count):
    temp_list=[]
    for k in range(len(datafr1.index)):
        if datafr1.ix[k,condition_string]==attributes_value:
            temp_list.append(datafr1.ix[k,result_string])
    series=pd.Series(temp_list)
    dataframe=pd.DataFrame(series,columns=[result_string])
    temp_list=quchonghanshu(temp_list)
    iu=lisan_NO_imformation_S(temp_list,dataframe,result_string,result_count)
    return iu
'''isan_condition_imformation_S功能说明:返回条件信息熵
参数说明:
        1,datafr1:输入一个dataframe类型的表
        2,condition_string:作为原因的那一列(给出的信息),是字符串类型
        3,result_string:作为标签,需要被预测的那一列,是字符串类型
        4,attributes_value:条件值
        5,result_count:标签个数
'''
def lisan_imformation_S(datafr1,condition_string,result_string,result1_count):
    all_sum1=np.array(datafr1[condition_string]).shape[0]
    temp_dic1={}
    for i in quchonghanshu(list(datafr1[condition_string])):
        count1=0
        for s in range(all_sum1):
            if datafr1.ix[s,condition_string]==i:
                count1=count1+1
        temp_dic1[i]=count1
    count1_average=0
    for i in quchonghanshu(list(datafr1[condition_string])):
        count1_average=count1_average+temp_dic1[i]/all_sum1*lisan_condition_imformation_S(datafr1,i,condition_string,result_string,result1_count)
    return count1_average
'''lisan_imformation_S()功能说明:返回总信息熵
参数说明:
        1,datafr1:数据来源,是dataframe类型
        2,condition_string:作为原因的那一列(给出的信息),是字符串类型
        3,result_string:作为标签,就是需要被预测的那一列,是字符串类型
        4,result1_count:标签个数
'''

猜你喜欢

转载自blog.csdn.net/qq_41543923/article/details/82533716
今日推荐