自然斷點(diǎn)法一般出現(xiàn)在ArcGIS 軟件中呼盆,進(jìn)行批量化的操作時(shí)擂达,需要將數(shù)據(jù)導(dǎo)入ArcGIS軟件再進(jìn)行下一步的聚類分析。操作過(guò)程較為繁瑣出刷,且數(shù)據(jù)導(dǎo)入過(guò)程中容易出現(xiàn)問(wèn)題。例如數(shù)據(jù)類型文本坯辩、浮點(diǎn)和整形的變換都會(huì)影響ArcGIS的分析馁龟。
基于excel的python處理可以批量化地解決自然斷點(diǎn)的問(wèn)題,代碼如下:(導(dǎo)入文件格式為xlsx漆魔,輸出文件格式為xls坷檩,數(shù)據(jù)類型統(tǒng)一在python中被轉(zhuǎn)換為浮點(diǎn)型float)
import xlrd
import xlwt
import jenkspy
Table= xlrd.open_workbook(文件路徑)
#打印Table相關(guān)信息
print(Table.sheet_names())
sheet1 = Table.sheets()[0]
print(sheet1.name,sheet1.nrows, sheet1.ncols)
print(sheet1.col_values(1))
f = xlwt.Workbook()
#遍歷Table的每個(gè)sheet
for k in range(0,len(Table.sheets())):
? ? sheetSave = f.add_sheet(Table.sheets()[k].name,cell_overwrite_ok = True)
? ? sheet = Table.sheets()[k]
? ? #遍歷sheet的列數(shù)據(jù)
? ? for j in range(1,sheet.ncols):
? ? ? ? col = sheet.col_values(j)
? ? ? ? List = [float(c) for c in col[1:len(col)]]
? ? ? ? ListID = col[1:len(col)]#對(duì)類別進(jìn)行標(biāo)識(shí)
? ? ? ? #計(jì)算間斷點(diǎn)
? ? ? ? breaks = jenkspy.jenks_breaks(List,nb_class = 5)
? ? ? ? #根據(jù)計(jì)算的間斷點(diǎn)却音,判斷每個(gè)原始數(shù)據(jù)屬于哪個(gè)類別
? ? ? ? for i in range(len(List)):
? ? ? ? ? ? if List[i] < breaks[1]:
? ? ? ? ? ? ? ? ListID[i] = 1
? ? ? ? ? ? elif List[i] < breaks[2] and List[i] >= breaks[1]:
? ? ? ? ? ? ? ? ListID[i] = 2
? ? ? ? ? ? elif List[i] < breaks[3] and List[i] >= breaks[2]:
? ? ? ? ? ? ? ? ListID[i] = 3
? ? ? ? ? ? elif List[i] < breaks[4] and List[i] >= breaks[3]:
? ? ? ? ? ? ? ? ListID[i] = 4
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ListID[i] = 5
? ? ? ? print(breaks) ? ? ? ?
? ? ? ? print(ListID)
? ? ? ? for u in range(0,len(ListID)):
? ? ? ? ? ? sheetSave.write(u,j,ListID[u])#寫數(shù)據(jù)
? ? ? ? print(j,'------')
? ? print(k,'======')
#保存數(shù)據(jù)成excel表
f.save(文件路徑)