ค้นหาระเบียนที่ซ้ำกันในฟิลด์โดยใช้ ArcGIS for Desktop หรือไม่


9

ฉันกำลังมองหาระเบียนที่ซ้ำกันในไฟล์ dbf ตามคุณลักษณะที่เรียกว่า 'ID' ฉันมีไฟล์ dbf ต่าง ๆ จาก 500,000 เรคคอร์ดถึง 1.5 ล้านและฉันรู้ว่ามีโฮสต์ของการซ้ำซ้อน

ฉันต้องการเพิ่มฟิลด์ 'ทำซ้ำ' ซึ่งระบุว่าใช่หรือไม่ใช่ (หรือ 1 หรือ 0 ใช้ได้) เมื่อมีแอตทริบิวต์ ID อยู่ที่อื่น การใช้สคริปต์ python ต่อไปนี้ใน Field Calculator ส่งคืน 1 สำหรับรายการที่ซ้ำกันและ 0 สำหรับรายการที่ไม่ซ้ำ

uniqueList = []
def isDuplicate(inValue):
  if inValue in uniqueList:
    return 1
  else:
    uniqueList.append(inValue)
    return 0
isDuplicate(!FIELD_NAME!)

อย่างไรก็ตามระเบียนที่ 1 ของเช่น 5 รหัสซ้ำกันจะถูกส่งกลับเป็น 0 (4 ต่อมาถือเป็นรายการที่ซ้ำกัน) ฉันจะต้องทำเครื่องหมายทั้ง 5 รายการว่าซ้ำกันเนื่องจากมี ID อยู่ที่อื่น

การใช้รหัสต่อไปนี้จะให้จำนวนที่เพิ่มขึ้นของคุณกี่ครั้งที่ ID เกิดขึ้นกับ 1 หมายถึงโอกาสที่ 1 เป็นต้น

UniqueDict = {}
def isDuplicateIndex(inValue):
    UniqueDict.setdefault(inValue,0)
    UniqueDict[inValue] += 1
    return UniqueDict[inValue]

isDuplicateIndex( !YOUR_FIELD! )

ฉันต้องการ 1 (หรือใช่) ถ้ามี ID ของบันทึกนั้นอยู่ที่อื่น! (ArcGIS เวอร์ชั่น 10.1)

ฉันได้เห็นคำตอบอื่น ๆ เช่นสคริปต์ Python สำหรับการระบุระเบียนที่ซ้ำกัน (ติดตาม)แต่มันก็ไม่ได้ผล

คำตอบ:


11

โซลูชันทางเลือกคือการใช้เครื่องมือ " สรุปสถิติ " ที่มีอยู่ใน ArcGIS จากนั้นคุณเข้าร่วมตารางผลลัพธ์ตามฟิลด์ ID ของคุณ รายการที่ซ้ำกันจะมี "COUNT" มากกว่า 1 ดังนั้นจึงเป็นเรื่องง่ายในการคำนวณด้วยเครื่องคำนวณภาคสนามของคุณ


วิธีการของคุณบรรลุการกำหนดระเบียนที่ซ้ำกันแรกพบเป็น '0' อย่างไร
artwork21

@ radouxju ขอบคุณสำหรับคำตอบของคุณฉันสามารถดูจำนวนรูปหลายเหลี่ยมที่ซ้ำกันได้โดยเพียงเลือกตามคุณลักษณะในขณะนี้ ประหลาดใจที่เรื่องนี้ไม่ได้เกิดขึ้นกับฉันเมื่อทุกสิ่งที่หลามทำ!
Sam

@ artwork21 ฉันไม่ต้องการให้สำเนาที่ 1 เป็น 0 ฉันต้องการทุกสิ่งที่มีสำเนาเป็น 'YES' หรือตอนนี้ตามที่เป็น - จำนวนที่มากกว่า 1
Sam

@Sam คุณหมายถึงอะไรเกี่ยวกับคำสั่งนี้ "อย่างไรก็ตามระเบียนที่ 1 ของเช่น 5 รหัสซ้ำกันจะถูกส่งกลับเป็น 0;"
Artwork21

@ artwork21 ขอโทษฉันคิดว่าข้อความดั้งเดิมของฉันไม่ชัดเจนฉันจะแก้ไข สิ่งที่ฉันพยายามจะพูดคือถ้า 5 ระเบียนทั้งหมดมี ID เดียวกันส่วนของรหัสไพ ธ อนนั้นจะระบุอินสแตนซ์ที่ 1 เป็น ID ที่ไม่ซ้ำกันและ 4 ในภายหลังนั้นเป็นข้อมูลที่ซ้ำกัน ฉันต้องการให้ทั้ง 5 ถูกทำเครื่องหมายว่าซ้ำกัน (เช่น ID นั้นมีอยู่ที่อื่น)
Sam

1

โซลูชันทางเลือกอื่น ( ใช้งานได้กับสภาพแวดล้อม SDE เท่านั้น ) คือการใช้ฟังก์ชัน SQL ที่มีอยู่ใน ArcGIS เพื่อแสดงระเบียนที่ซ้ำกัน

รับระเบียนที่ซ้ำกันในตาราง (เลือกตามคุณสมบัติ)

[FIELD_NAME] In (SELECT [FIELD_NAME] FROM [TABLE_NAME] GROUP BY [FIELD_NAME] HAVING Count(*)>1 )

ตัวอย่าง:

ID In (SELECT ID FROM GISDATA.MY_TABLE GROUP BY ID HAVING Count(*)>1 )

คุณช่วยให้มันทำงานในฐานข้อมูลไฟล์ได้หรือไม่? แบบสอบถามทำงานได้สำเร็จในฐานข้อมูลส่วนบุคคลทางภูมิศาสตร์ แต่เมื่อฉันลองเรียกใช้งานในฐานข้อมูลไฟล์นั้นจะล้มเหลวด้วยข้อความ "มีการใช้คำสั่ง SQL ที่ไม่ถูกต้อง" แก้ไข: ตามลิงก์เอกสารสนับสนุนเฉพาะแบบสอบถามย่อย จำกัด ในฐานข้อมูลไฟล์ทางภูมิศาสตร์
isburns

แบบสอบถามจะถูกคัดลอกโดยตรงจากโพสต์ของคุณและอ้างอิงชื่อตารางและฟิลด์ที่ถูกต้อง HAVING COUNT(*) > 1แบบสอบถามที่ถูกต้องเมื่อฉันลบ ฉันไม่เห็นวิธีที่จะทำให้มันทำงานในฐานข้อมูลไฟล์ทางภูมิศาสตร์ได้ ฉันรู้ว่าบทความเทคโนโลยีนี้ค่อนข้างล้าสมัย แต่ดูเหมือนว่าจะเป็นแหล่งที่มาของคำสั่ง SQL ของคุณและบ่งชี้ว่ามันไม่ทำงานในฐานข้อมูลไฟล์ภูมิศาสตร์ ฉันพร้อมที่จะ upvote คำตอบของคุณถ้าฉันสามารถทำให้มันทำงานในไฟล์ gdbs หรือเพิ่มความกระจ่างเพื่อระบุว่าพวกเขาเป็นข้อยกเว้น
isburns

@ เบิร์นฉันถูกเข้าใจผิดทำงานในสภาพแวดล้อม SDE และไม่ใช่ไฟล์ฐานข้อมูล สิ่งหนึ่งที่คุณสามารถทำได้เป็นวิธีแก้ปัญหาคือนำข้อมูลตารางลงใน Excel เพื่อค้นหาสิ่งที่ซ้ำกันแล้วเข้าร่วมรายการของ dupes กลับมาใน ArcGIS ซึ่งจะแสดงเฉพาะระเบียนเหล่านั้นไม่เหมาะ แต่ทำงานได้
อุโมงค์ไปข้างหน้า

1
ขอบคุณสำหรับการอัพเดท. ฉันยกระดับคำตอบของคุณเพราะมันใช้งานได้และค่อนข้างง่ายและรวดเร็วในฐานข้อมูลทางภูมิศาสตร์ที่สนับสนุน ฉันรู้ว่ามันอยู่ในความคิดเห็นในตอนนี้ แต่คุณอาจต้องการแก้ไขการโพสต์ตัวเองเพื่อระบุว่ามันทำงานในฐานข้อมูลส่วนบุคคลและฐานข้อมูลทางภูมิศาสตร์ SDE แต่ไม่ใช่ไฟล์ฐานข้อมูลทางภูมิศาสตร์หรือรูปร่างไฟล์
isburns

0

สคริปต์ต่อไปนี้สร้างเขตข้อมูลใหม่ที่มีจำนวนการเกิดขึ้นของแต่ละค่าจากเขตข้อมูลที่ระบุ ตัวอย่างเช่นถ้าคุณมี "ปารีส" 6 ครั้งในฟิลด์นั้นแต่ละแถวด้วย "ปารีส" จะได้รับ 6

import arcpy

arcpy.env.workspace=r"D:\test.gdb"
infeature="sample_feature"
field_in="sample_field"
field_out="COUNT_"+field_in

#create the field for the count values
arcpy.AddField_management(infeature,field_out,"SHORT")

#creating the list with all the values in the field, including duplicates
lista=[]
cursor1=arcpy.SearchCursor(infeature)
for row in cursor1:
    i=row.getValue(field_in)    
    lista.append(i)
del cursor1, row

#updating the count field with the number on occurrences of field_in values
#in the previously created list
cursor2=arcpy.UpdateCursor(infeature)
for row in cursor2:
    i=row.getValue(field_in)
    occ=lista.count(i)   
    row.setValue(field_out,occ)
    cursor2.updateRow(row)
del cursor2, row
print ("Done.")

สามารถแก้ไขได้อย่างง่ายดายเพื่อให้คุณสามารถมี"ใช่"หรือ1ถ้านับ> 1 แต่ฉันเดาว่าการมีหมายเลขนับจริงมีประโยชน์มากกว่า

แก้ไขภายหลัง: หรือคุณสามารถใช้สิ่งนี้ในเครื่องคิดเลขภาคสนาม รหัสสคริปต์ล่วงหน้า:

infeature="sample_feature" #change with the name of your feature
lista=[]
field="sample_field" #change with your field with duplicates
cursor1=arcpy.SearchCursor(infeature)
for row in cursor1:
    i=row.getValue(field)    
    lista.append(i)
del cursor1, row

def duplicates(field_in):        
    occ=lista.count(field_in)
    return occ

ซ้ำสนาม =

duplicates(!sample_field!)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.