在数据的离散化中有很多方法,如聚类分析、均值划分等等。自然断点法也是一种常用方法,在空间计量中可能都是现成的软体如Arcgis、geoda等点一下就出来了,但对于一般数据的划分应该怎么办呢?今天基于python的jenkspy库记录一下~
step1:自然断点
import pandas as pd
import jenkspy
import numpy as np
df = pd.read_excel('amos数据.xlsx')
ret={}
for col_name in df:
col = df[col_name]
breaks = jenkspy.jenks_breaks(col, nb_class=6)
ret[col_name] = breaks
out_df = pd.DataFrame(ret)
输出结果就是分段点的临界值:
step2:编码
seg=[]
result=[]
for i in range(26):#列数
data=df.iloc[:,i]
for j in data:
if j<=out_df.iloc[:,i][0]:
j=1
elif j<=out_df.iloc[:,i][1]:
j=2
elif j<=out_df.iloc[:,i][2]:
j=3
elif j<=out_df.iloc[:,i][3]:
j=4
elif j<=out_df.iloc[:,i][4]:
j=5
elif j<=out_df.iloc[:,i][5]:
j=6
else:
j=7
seg.append(j)
result.append(seg)#是 list of list格式
result = np.array(result).T
输出结果为: