写了一串以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:标签个数
'''