มากกว่า

รหัส Python เพื่อเปรียบเทียบสองฟิลด์ในเลเยอร์คุณสมบัติต่างกัน?

รหัส Python เพื่อเปรียบเทียบสองฟิลด์ในเลเยอร์คุณสมบัติต่างกัน?


ฉันมีไฟล์รูปร่างสองไฟล์ซึ่งรวม 3897 ฟีเจอร์แต่ละรายการ รูปร่างไฟล์ที่สอดคล้องกัน (หมู่บ้านและลุ่มน้ำที่ไหลเข้าไป) มี ID เดียวกัน (ws_id ในอันหนึ่ง OBJECTID ในอีกอันหนึ่ง) ลุ่มน้ำหลายแห่งทับซ้อนกัน เนื่องจากเกิดข้อผิดพลาดในชั้นลุ่มน้ำ ฉันต้องการเปรียบเทียบพื้นที่ของลุ่มน้ำแต่ละแห่งกับหมู่บ้านที่เกี่ยวข้อง (settelment_area สำหรับหมู่บ้านและ Shape_Area สำหรับลุ่มน้ำ) หากลุ่มน้ำมีพื้นที่น้อยกว่าหมู่บ้านที่ไหลเข้า จะต้องลบทิ้ง และเพิ่มข้อมูลของหมู่บ้านที่เกี่ยวข้องลงในหมู่บ้านที่ลุ่มน้ำถัดไปไหลเข้า (ข้อมูลรวมถึงเขตเมืองและจำนวนประชากร)

ฉันได้ลองทำสิ่งนี้โดยใช้เคอร์เซอร์และตารางชั่วคราว แต่ทักษะ python ของฉันไม่ค่อยดีนัก และดูเหมือนว่าฉันจะสูญเสียข้อมูลที่เกี่ยวข้องจำนวนมากไปพร้อมกัน (ลงเอยด้วยรายการว่าง)

ใช้ arcgis desktop 10.2 พร้อมใบอนุญาตขั้นสูง

รหัส

#จุดประสงค์ของรหัสนี้คือการกำจัดข้อมูลที่ผิดพลาดโดยการสร้างไฟล์ serviceshed_v0 ใหม่ ซึ่งจะมีเพียง serviceshed เท่านั้นซึ่งมีขนาดใหญ่กว่าข้อตกลงที่พวกเขาพบ #จากนั้นสามารถขยายให้มีข้อกำหนดขนาด minium ที่แตกต่างกันสำหรับการนำเข้า servicesheds arcpy arcpy.CheckOutExtension("spatial") arcpy.env.overwriteOutput = True workdir = r'C:Usersxxxeneficiarylayers.gdb' arcpy.env พื้นที่ทำงาน = workdir fc1 = workdir + r'servicesheds_v0' fc2 = workdir + r'miyun_settlements' fc1table = arcpy.CreateTable_management(workdir, 'fc1table') fc2table = arcpy.CreateTable_management(workdir, 'fc2 +rtable') แม่แบบ = งาน '	emplate' arcpy.CreateTable_management(workdir, 'servicesheds_v1', template) newservicesheds = workdir + r'servicesheds_v1' rows = arcpy.SearchCursor(fc1) สำหรับแถวในแถว: arcpy.Append_management('Shape_Area', fc1table) del row , rows rows = arcpy.SearchCursor(fc2) for row in rows: arcpy.Append_management('settlement_area', fc2table) del row, rows rows = arcpy.SearchCursor(fc1table) สำหรับแถวในแถว: if fc1table > fc2table: arcpy.Append_management (แถว, บริการใหม่) แถวเดล, แถว

นั่นคือความพยายามครั้งแรก ปัญหาคือฉันรู้ว่าตารางไม่ใช่วิธีที่จะไปเพราะข้อมูลที่เกี่ยวกับทูเพิลแต่ละตัวกับรูปหลายเหลี่ยมหายไป ฉันต้องการให้มันทำงาน (ด้านล่าง) แต่ฉันไม่แน่ใจว่ามันได้รับอนุญาตใน python synthax หรือไม่

arcpy.CreateTable_management(workdir, 'servicesheds_v1') newservicesheds = workdir + r'servicesheds_v1' cursor1=arcpy.da.SearchCursor(fc1, "Shape_Area") cursor2=arcpy.da.SearchCursor(fc2, "settlement_area") สำหรับแถว cursor1: ถ้า 'Shape_Area' ใน cursor1 > 'settlement_area' ใน cursor2: arcpy.Append_management (แถว, newservicesheds)

รหัสสุดท้าย นี่เป็นวิธีการที่ช่วยให้สามารถสร้างรายการได้อย่างรวดเร็ว โดยให้รูปหลายเหลี่ยมทั้งหมดที่ทำหน้าที่มีขนาดเล็กเกินไป

นำเข้า arcpy arcpy.CheckOutExtension("spatial") arcpy.env.overwriteOutput = True workdir = r'C:Usersxxeneficiarylayers.gdb' arcpy.env.workspace = workdir fc1 = workdir + r'servicesheds_v0' fc2 = workdir + r'miyun_settlements' #set up cursors cursor1 = arcpy.da.SearchCursor(fc1, ["ws_id", "Shape_Area"]) cursor2 = arcpy.da.SearchCursor(fc2, ["OBJECTID", "settlement_area"] ) ผิด = [] #สร้างพจนานุกรมและเก็บค่าจากตารางลุ่มน้ำ serviceshed_area = {} สำหรับแถวในเคอร์เซอร์1: serviceshed_areas[row[0]] = แถว[1] #วนรอบตารางอื่นสำหรับแถวในเคอร์เซอร์2: ถ้าแถว[1 ] > serviceshed_areas[row[0]]: # ถ้า serviceshed_areas < village_Areas เพิ่มในรายการและพิมพ์ผิด.append(row[0]) พิมพ์ "serviceshed {} is wrong".format(row[0])

ดูเหมือนว่าจะมีความสับสนเล็กน้อยเกี่ยวกับสิ่งที่มากกว่า/เล็กกว่า แต่ฉันจะปล่อยให้คุณจัดการ โซลูชันนี้จะวนซ้ำเพียงครั้งเดียวในแต่ละตารางซึ่งจะไม่ทำให้เคอร์เซอร์สับสนและจะช่วยคุณประหยัดการวนซ้ำ 10 ล้านครั้ง (จากลูปในการวนซ้ำแบบวนซ้ำ) การใช้การค้นหาพจนานุกรมนั้นรวดเร็วมาก จึงถือว่า 'ฟรี' ดังนั้นให้เติมพจนานุกรมในหนึ่งลูปและอ้างอิงในอีกลูปหนึ่ง (ซึ่งไม่อยู่ในลูปแรก) ฉันไม่สามารถพูดได้อย่างแม่นยำ/วากยสัมพันธ์ เนื่องจากฉันไม่ได้ดำเนินการ

#set up เคอร์เซอร์เคอร์เซอร์1 = arcpy.da.SearchCursor(fc1, ["OBJECTID", "Shape_Area"]) cursor2 = arcpy.da.SearchCursor(fc2, ["ws_id", "settlement_area"]) #สร้างพจนานุกรมและจัดเก็บ ค่าจากตารางลุ่มน้ำ watershed_areas = {} สำหรับแถวในเคอร์เซอร์1: watershed_areas[row[0]] = row[1] #loop through other table for row in cursor2: if row[1] > watershed_areas[row[0]]: # ถ้าลุ่มน้ำ_area < village_Area พิมพ์ "ลุ่มน้ำ {} มีขนาดเล็กกว่า".format(row[0])

คุณต้องซ้อนเคอร์เซอร์การค้นหาของคุณเพื่อวนซ้ำทั้งสองอย่างพร้อมกัน ในขณะที่เชื่อมโยงแถวในทางใดทางหนึ่ง (เพื่อให้ arcpy รู้ว่าเมื่อใดที่มันอยู่ที่แถวที่ถูกต้อง และจะหยุดการวนซ้ำเพื่อเปรียบเทียบค่า) โชคดีที่คุณมีฟิลด์ ID ที่ตรงกันอยู่แล้ว

สิ่งนี้จะช่วยให้คุณเริ่มเปรียบเทียบค่าพื้นที่ได้ แจ้งให้เราทราบว่ามันไม่ทำงานหรือฉันพิมพ์ผิด

cursor1 = arcpy.da.SearchCursor(fc1, ["OBJECTID", "Shape_Area"]) cursor2 = arcpy.da.SearchCursor(fc2, ["ws_id", "settlement_area"]) สำหรับแถวที่ 1 ในเคอร์เซอร์ 1: สำหรับแถวที่ 2 ในเคอร์เซอร์ 2: ถ้า row2[0] == row1[0]: # if ws_id = OBJECTID ให้ตรวจสอบพื้นที่ว่า row2[1] < row1[1]: # if การตั้งถิ่นฐาน_area < Shape_Area พิมพ์หมายเลขประจำตัวพิมพ์ "settlement {} ใหญ่กว่า" รูปแบบ(row2[0])

วิธีการ: เปรียบเทียบและซิงโครไนซ์ข้อมูลของสองฐานข้อมูล

คุณสามารถเปรียบเทียบข้อมูลที่มีอยู่ในสองฐานข้อมูล ฐานข้อมูลที่คุณเปรียบเทียบเรียกว่า แหล่งที่มา และ เป้า.

โครงการฐานข้อมูล และแพ็คเกจ .dacpac หรือ .bacpac ไม่สามารถเป็นแหล่งที่มาหรือเป้าหมายในการเปรียบเทียบข้อมูล

เมื่อเปรียบเทียบข้อมูลแล้ว a ภาษาการจัดการข้อมูล สคริปต์ (DML) ถูกสร้างขึ้น ซึ่งคุณสามารถใช้เพื่อซิงโครไนซ์ฐานข้อมูลที่แตกต่างกันได้โดยการอัพเดตข้อมูลบางส่วนหรือทั้งหมดในฐานข้อมูลเป้าหมาย เมื่อการเปรียบเทียบข้อมูลเสร็จสิ้น ผลลัพธ์จะปรากฏในหน้าต่าง Data Compare ของ Visual Studio

หลังจากการเปรียบเทียบเสร็จสิ้น คุณสามารถทำตามขั้นตอนอื่นๆ ได้:

คุณสามารถดูความแตกต่างระหว่างสองฐานข้อมูลได้ สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การดูความแตกต่างของข้อมูล

คุณสามารถอัปเดตเป้าหมายทั้งหมดหรือบางส่วนเพื่อให้ตรงกับแหล่งที่มาได้ สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การซิงโครไนซ์ข้อมูลฐานข้อมูล

นอกจากนี้คุณยังสามารถเปรียบเทียบ สคีมา ของสองฐานข้อมูลหรือสองรุ่นของฐานข้อมูลเดียวกัน สำหรับข้อมูลเพิ่มเติม ดูวิธีการ: ใช้ Schema Compare เพื่อเปรียบเทียบข้อกำหนดฐานข้อมูลต่างๆ


ทางเลือกอื่นสำหรับคลาสข้อมูล

สำหรับโครงสร้างข้อมูลอย่างง่าย คุณอาจเคยใช้ tuple หรือ dict แล้ว คุณสามารถเป็นตัวแทนของการ์ด Queen of Hearts ด้วยวิธีใดวิธีหนึ่งต่อไปนี้:

มันได้ผล. อย่างไรก็ตาม มันทำให้คุณมีความรับผิดชอบอย่างมากในฐานะโปรแกรมเมอร์:

  • คุณต้องจำไว้ว่า queen_of_hearts_ ตัวแปรแสดงถึงการ์ด
  • สำหรับเวอร์ชัน tuple คุณต้องจำลำดับของแอตทริบิวต์ การเขียน ('Spades', 'A') จะทำให้โปรแกรมของคุณยุ่งเหยิง แต่อาจไม่แสดงข้อความแสดงข้อผิดพลาดที่เข้าใจได้ง่าย
  • หากคุณใช้เวอร์ชัน dict คุณต้องตรวจสอบให้แน่ใจว่าชื่อของแอตทริบิวต์นั้นสอดคล้องกัน ตัวอย่างเช่น <'value': 'A', 'suit': 'Spades'>จะไม่ทำงานตามที่คาดไว้

นอกจากนี้ การใช้โครงสร้างเหล่านี้ไม่เหมาะ:

ทางเลือกที่ดีกว่าคือ namedtuple มีการใช้มานานแล้วเพื่อสร้างโครงสร้างข้อมูลขนาดเล็กที่อ่านได้ อันที่จริงแล้ว เราสามารถสร้างตัวอย่างคลาสข้อมูลด้านบนโดยใช้ namedtuple เช่นนี้:

คำจำกัดความของ NamedTupleCard นี้จะให้ผลลัพธ์ที่เหมือนกันทุกประการกับตัวอย่าง DataClassCard ของเรา:

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

แม้ว่าสิ่งนี้อาจดูเหมือนเป็นสิ่งที่ดี แต่การขาดความตระหนักเกี่ยวกับประเภทของตัวเองอาจนำไปสู่ข้อบกพร่องที่ละเอียดอ่อนและหายาก โดยเฉพาะอย่างยิ่งเนื่องจากจะเปรียบเทียบสองคลาสที่มีชื่อต่างกันอย่างมีความสุข:

Nametuple ยังมาพร้อมกับข้อ จำกัด บางประการ ตัวอย่างเช่น การเพิ่มค่าเริ่มต้นให้กับบางฟิลด์ใน namedtuple นั้นทำได้ยาก Nametuple นั้นโดยธรรมชาติแล้วไม่เปลี่ยนรูป นั่นคือค่าของ namedtuple ไม่สามารถเปลี่ยนแปลงได้ ในบางแอปพลิเคชัน นี่เป็นคุณสมบัติที่ยอดเยี่ยม แต่ในการตั้งค่าอื่นๆ คงจะดีหากมีความยืดหยุ่นมากกว่านี้:

คลาสข้อมูลจะไม่แทนที่การใช้ namedtuple ทั้งหมด ตัวอย่างเช่น หากคุณต้องการให้โครงสร้างข้อมูลของคุณทำงานเหมือน tuple ดังนั้น tuple ที่มีชื่อก็เป็นทางเลือกที่ดี!

อีกทางเลือกหนึ่งและหนึ่งในแรงบันดาลใจสำหรับคลาสข้อมูลคือโครงการ attrs เมื่อติดตั้ง attr แล้ว ( pip install attrs ) คุณสามารถเขียนคลาสการ์ดได้ดังนี้:

สามารถใช้ในลักษณะเดียวกับตัวอย่าง DataClassCard และ NamedTupleCard ก่อนหน้านี้ โปรเจ็กต์ attrs นั้นยอดเยี่ยมและรองรับฟีเจอร์บางอย่างที่คลาสข้อมูลไม่รองรับ รวมถึงตัวแปลงและเครื่องมือตรวจสอบความถูกต้อง นอกจากนี้ attrs มีมาระยะหนึ่งแล้วและรองรับใน Python 2.7 เช่นเดียวกับ Python 3.4 ขึ้นไป อย่างไรก็ตาม เนื่องจาก attrs ไม่ได้เป็นส่วนหนึ่งของไลบรารีมาตรฐาน จึงเพิ่มการพึ่งพาภายนอกให้กับโปรเจ็กต์ของคุณ ผ่านคลาสข้อมูล ฟังก์ชันที่คล้ายคลึงกันจะสามารถใช้ได้ทุกที่

นอกจาก tuple , dict , namedtuple และ attrs แล้ว ยังมีโปรเจ็กต์ที่คล้ายกันอีกมากมาย รวมถึงการพิมพ์ NamedTuple , namedlist , attrdict , plumber และ field แม้ว่าคลาสข้อมูลจะเป็นทางเลือกใหม่ที่ดี แต่ก็ยังมีกรณีการใช้งานที่ตัวแปรรุ่นเก่าตัวใดตัวหนึ่งเหมาะสมกว่า ตัวอย่างเช่น หากคุณต้องการความเข้ากันได้กับ API เฉพาะที่ต้องการ tuples หรือต้องการฟังก์ชันที่ไม่รองรับในคลาสข้อมูล


การคำนวณอย่างง่าย

ตัวอย่างสตริงอย่างง่าย

สตริงได้รับการสนับสนุนโดยชุดฟังก์ชันสตริงของ Python รวมถึงตัวพิมพ์ใหญ่ , rstrip และแทนที่

ใช้อักษรตัวพิมพ์ใหญ่ของสตริงในช่อง CITY_NAME

ตัดช่องว่างใดๆ ออกจากส่วนท้ายของสตริงในฟิลด์ CITY_NAME

แทนที่การเกิดขึ้นของ "แคลิฟอร์เนีย" ด้วย "แคลิฟอร์เนีย" ที่พบในฟิลด์ STATE_NAME

อักขระในฟิลด์สตริงสามารถเข้าถึงได้โดยการทำดัชนีและการแบ่งส่วนใน Python การทำดัชนีดึงอักขระที่ตำแหน่งดัชนี การแบ่งส่วนดึงกลุ่มของอักขระ

อักขระตัวที่สองถึงตัวสุดท้าย

อักขระที่สอง สาม และสี่

Python ยังรองรับการจัดรูปแบบสตริงโดยใช้เมธอด str.format()

รวม FieldA และ FieldB คั่นด้วยเครื่องหมายทวิภาค

ฟังก์ชันสตริง VBScript

สตริงได้รับการสนับสนุนโดยชุดฟังก์ชันสตริง VBScript รวมถึง Left , InStr และ Chr ด้านล่างนี้คือตัวอย่าง VBScript สำหรับฟังก์ชันสตริงที่ใช้กันทั่วไปใน Field Calculator

ฟังก์ชันด้านซ้าย: ส่งกลับตัวแปร (สตริง) ที่มีจำนวนอักขระที่ระบุจากด้านซ้ายของสตริง

ฟังก์ชันขวา: ส่งกลับตัวแปร (สตริง) ที่มีจำนวนอักขระที่ระบุจากด้านขวาของสตริง

ฟังก์ชัน Mid: ส่งกลับ Variant (สตริง) ที่มีจำนวนอักขระที่ระบุจากสตริง

ฟังก์ชัน InStr: ส่งกลับ Variant (Long) ที่ระบุตำแหน่งของการเกิดขึ้นครั้งแรกของสตริงหนึ่งภายในอีกสตริงหนึ่ง

ฟังก์ชันแทนที่: ส่งกลับสตริงที่สตริงย่อยที่ระบุถูกแทนที่ด้วยสตริงย่อยอื่นตามจำนวนที่ระบุ

ฟังก์ชัน Chr: ส่งกลับสตริงที่มีอักขระที่เกี่ยวข้องกับโค้ดอักขระที่ระบุ

ตัวดำเนินการ &: ใช้เพื่อบังคับการรวมสตริงของสองนิพจน์

ตัวอย่างคณิตศาสตร์ง่ายๆ

Python มีเครื่องมือสำหรับการประมวลผลตัวเลข Python ยังรองรับฟังก์ชันตัวเลขและคณิตศาสตร์จำนวนมาก รวมถึงคณิตศาสตร์ cmath ทศนิยม สุ่ม itertools functools และตัวดำเนินการ


การคำนวณอย่างง่าย

การคำนวณที่หลากหลายสามารถคำนวณได้โดยใช้นิพจน์สั้นๆ เท่านั้น

ตัวอย่างสตริงอย่างง่าย

สตริงได้รับการสนับสนุนโดยชุดฟังก์ชันสตริงของ Python รวมถึงตัวพิมพ์ใหญ่ , rstrip และแทนที่

ใช้อักษรตัวพิมพ์ใหญ่ของสตริงในช่อง CITY_NAME

ลบช่องว่างออกจากส่วนท้ายของสตริงในฟิลด์ CITY_NAME

แทนที่ "แคลิฟอร์เนีย" ทุกรายการด้วย "แคลิฟอร์เนีย" ในช่อง STATE_NAME

อักขระในฟิลด์สตริงสามารถเข้าถึงได้โดยการทำดัชนีและการแบ่งส่วนใน Python การทำดัชนีดึงอักขระที่ตำแหน่งดัชนี การแบ่งส่วนดึงกลุ่มของอักขระ ในตารางต่อไปนี้ สมมติว่า !fieldname! เป็นฟิลด์สตริงที่มีค่า "abcde"

อักษรตัวที่สองต่อท้าย

อักขระที่สอง สาม และสี่

Python ยังรองรับการจัดรูปแบบสตริงโดยใช้เมธอด format()

รวม FieldA และ FieldB โดยคั่นด้วยเครื่องหมายทวิภาค

ตัวอย่างคณิตศาสตร์ง่ายๆ

Python มีเครื่องมือสำหรับการประมวลผลตัวเลข Python ยังรองรับฟังก์ชันตัวเลขและคณิตศาสตร์จำนวนมาก รวมถึง math , cmath , decimal , random , itertools , functools และโอเปอเรเตอร์


ตัวอย่างของอัลกอริธึมคลัสเตอร์

ในส่วนนี้ เราจะทบทวนวิธีใช้ 10 ขั้นตอนวิธีจัดกลุ่มที่เป็นที่นิยมใน scikit-learn

ซึ่งรวมถึงตัวอย่างการปรับโมเดลและตัวอย่างการแสดงภาพผลลัพธ์

ตัวอย่างได้รับการออกแบบมาเพื่อให้คุณคัดลอกและวางในโครงการของคุณเองและใช้วิธีการกับข้อมูลของคุณเอง

การติดตั้งห้องสมุด

ก่อนอื่น มาติดตั้งไลบรารี่กันเถอะ

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

คุณสามารถติดตั้งไลบรารี scikit-learn โดยใช้ตัวติดตั้ง pip Python ดังต่อไปนี้:

สำหรับคำแนะนำในการติดตั้งเพิ่มเติมเฉพาะสำหรับแพลตฟอร์มของคุณ โปรดดู:

ต่อไป มายืนยันว่ามีการติดตั้งไลบรารี่และคุณใช้เวอร์ชันที่ทันสมัย

เรียกใช้สคริปต์ต่อไปนี้เพื่อพิมพ์หมายเลขเวอร์ชันของไลบรารี

เรียกใช้ตัวอย่าง คุณควรเห็นหมายเลขเวอร์ชันต่อไปนี้หรือสูงกว่า

ชุดข้อมูลคลัสเตอร์

เราจะใช้ฟังก์ชัน make_classification() เพื่อสร้างชุดข้อมูลการทดสอบการจำแนกประเภทไบนารี

ชุดข้อมูลจะมีตัวอย่าง 1,000 ตัวอย่าง พร้อมคุณสมบัติอินพุต 2 รายการและคลัสเตอร์หนึ่งรายการต่อคลาส คลัสเตอร์จะมองเห็นได้ชัดเจนในสองมิติ เพื่อให้เราสามารถพล็อตข้อมูลด้วยพล็อตแบบกระจาย และระบายสีจุดในพล็อตตามคลัสเตอร์ที่กำหนด ซึ่งจะช่วยให้เห็นว่า อย่างน้อยก็ในปัญหาการทดสอบว่า “well” คลัสเตอร์ถูกระบุได้อย่างไร

คลัสเตอร์ในปัญหาการทดสอบนี้อิงตาม Gaussian หลายตัวแปร และอัลกอริธึมการจัดกลุ่มบางตัวเท่านั้นที่จะมีประสิทธิภาพในการระบุคลัสเตอร์ประเภทนี้ ด้วยเหตุนี้ ผลลัพธ์ในบทช่วยสอนนี้จึงไม่ควรใช้เป็นพื้นฐานในการเปรียบเทียบวิธีการโดยทั่วไป

ตัวอย่างของการสร้างและสรุปชุดข้อมูลการทำคลัสเตอร์สังเคราะห์แสดงอยู่ด้านล่าง

การรันตัวอย่างจะสร้างชุดข้อมูลการทำคลัสเตอร์สังเคราะห์ จากนั้นสร้างพล็อตแบบกระจายของข้อมูลอินพุตที่มีจุดสีตามป้ายกำกับคลาส (คลัสเตอร์ในอุดมคติ)

เราสามารถเห็นข้อมูลสองกลุ่มที่แตกต่างกันอย่างชัดเจนในสองมิติ และหวังว่าอัลกอริธึมการจัดกลุ่มอัตโนมัติจะสามารถตรวจจับการจัดกลุ่มเหล่านี้ได้

พล็อตการกระจายของชุดข้อมูลการทำคลัสเตอร์สังเคราะห์ที่มีจุดสีตามคลัสเตอร์ที่รู้จัก

ต่อไป เราสามารถเริ่มดูตัวอย่างของอัลกอริทึมการจัดกลุ่มที่ใช้กับชุดข้อมูลนี้ได้

ฉันได้พยายามเล็กน้อยเพื่อปรับแต่งแต่ละวิธีให้เป็นชุดข้อมูล

คุณจะได้ผลลัพธ์ที่ดีกว่าสำหรับหนึ่งในอัลกอริธึมหรือไม่?
แจ้งให้เราทราบในความคิดเห็นด้านล่าง

การขยายพันธุ์ความสัมพันธ์

การขยายพันธุ์ตามความสัมพันธ์เกี่ยวข้องกับการค้นหาชุดตัวอย่างที่สรุปข้อมูลได้ดีที่สุด

เราคิดค้นวิธีการที่เรียกว่า “affinity propagation,” ซึ่งใช้เป็นมาตรการอินพุตของความคล้ายคลึงกันระหว่างคู่ของจุดข้อมูล ข้อความที่มีค่าจริงจะถูกแลกเปลี่ยนระหว่างจุดข้อมูลจนกว่ากลุ่มตัวอย่างคุณภาพสูงและคลัสเตอร์ที่เกี่ยวข้องจะค่อยๆ ปรากฏขึ้น

เทคนิคนี้อธิบายไว้ในบทความ:

มันถูกใช้งานผ่านคลาส AffinityPropagation และการกำหนดค่าหลักที่จะปรับแต่งคือ “การทำให้หมาด ๆ” ตั้งค่าระหว่าง 0.5 ถึง 1 และบางที “ ค่ากำหนด”

ตัวอย่างที่สมบูรณ์แสดงอยู่ด้านล่าง

การรันตัวอย่างจะเหมาะกับโมเดลในชุดข้อมูลการฝึก และคาดการณ์คลัสเตอร์สำหรับแต่ละตัวอย่างในชุดข้อมูล แผนภาพกระจายจะถูกสร้างขึ้นโดยมีจุดสีตามคลัสเตอร์ที่ได้รับมอบหมาย

ในกรณีนี้ ฉันไม่สามารถบรรลุผลลัพธ์ที่ดีได้

กระจายพล็อตของชุดข้อมูลด้วยคลัสเตอร์ที่ระบุโดยใช้การเผยแพร่ความสัมพันธ์

การทำคลัสเตอร์แบบรวมกลุ่ม

การทำคลัสเตอร์แบบรวมกลุ่มเกี่ยวข้องกับการรวมตัวอย่างจนกระทั่งได้จำนวนคลัสเตอร์ที่ต้องการ

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

มีการใช้งานผ่านคลาส AgglomerativeClustering และการกำหนดค่าหลักในการปรับแต่งคือ “n_clusters” set ค่าประมาณของจำนวนคลัสเตอร์ในข้อมูล เช่น 2.

ตัวอย่างที่สมบูรณ์แสดงอยู่ด้านล่าง

การรันตัวอย่างจะเหมาะกับโมเดลในชุดข้อมูลการฝึก และคาดการณ์คลัสเตอร์สำหรับแต่ละตัวอย่างในชุดข้อมูล แผนภาพกระจายจะถูกสร้างขึ้นโดยมีจุดสีตามคลัสเตอร์ที่ได้รับมอบหมาย

ในกรณีนี้จะพบการจัดกลุ่มที่สมเหตุสมผล

พล็อตของชุดข้อมูลแบบกระจายโดยระบุคลัสเตอร์โดยใช้ Agglomerative Clustering

ไม้เรียว

BIRCH Clustering (BIRCH ย่อมาจาก Balanced Iterative Reducing and Clustering โดยใช้
ลำดับชั้น) เกี่ยวข้องกับการสร้างโครงสร้างแบบต้นไม้ซึ่งแยกเซ็นทรอยด์ของคลัสเตอร์

BIRCH จัดกลุ่มจุดข้อมูลเมตริกหลายมิติขาเข้าแบบเพิ่มหน่วยและแบบไดนามิกเพื่อพยายามสร้างคลัสเตอร์ที่มีคุณภาพดีที่สุดด้วยทรัพยากรที่มีอยู่ (เช่น ข้อจำกัดด้านหน่วยความจำและเวลาที่ใช้ได้)

เทคนิคนี้อธิบายไว้ในบทความ:

มันถูกใช้งานผ่านคลาส Birch และการกำหนดค่าหลักในการปรับแต่งคือ “เกณฑ์” และ “n_clusters” ไฮเปอร์พารามิเตอร์ ซึ่งตัวหลังจะให้ค่าประมาณของจำนวนคลัสเตอร์

ตัวอย่างที่สมบูรณ์แสดงอยู่ด้านล่าง

การรันตัวอย่างจะเหมาะกับโมเดลในชุดข้อมูลการฝึก และคาดการณ์คลัสเตอร์สำหรับแต่ละตัวอย่างในชุดข้อมูล แผนภาพกระจายจะถูกสร้างขึ้นโดยมีจุดสีตามคลัสเตอร์ที่ได้รับมอบหมาย

ในกรณีนี้จะพบการจัดกลุ่มที่ดีเยี่ยม

กระจายพล็อตของชุดข้อมูลด้วยคลัสเตอร์ที่ระบุโดยใช้ BIRCH Clustering


ปลายทาง

ในการทำงานกับ REST API สิ่งสำคัญคือต้องเข้าใจว่า Endpoint คืออะไร

โดยปกติปลายทางคือที่อยู่เฉพาะ (เช่น https://weather-in-london.com/forecast) โดยอ้างอิงจากที่ที่คุณเข้าถึงคุณสมบัติ/ข้อมูลบางอย่างได้ (ในกรณีของเรา – การพยากรณ์อากาศสำหรับ ลอนดอน). โดยทั่วไป ชื่อ (ที่อยู่) ของปลายทางจะสอดคล้องกับฟังก์ชันการทำงานที่มีให้

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับปลายทาง เราจะดูตัวอย่าง API อย่างง่ายภายในบริการ RapidAPI บริการนี้เป็นฮับ API ที่ให้ความสามารถในการเข้าถึง API ต่างๆ นับพันรายการ ข้อดีอีกประการของ RapidAPI คือคุณสามารถเข้าถึงปลายทางและทดสอบการทำงานของ API ได้โดยตรงในส่วนนี้ภายในบริการ RapidAPI

ยกตัวอย่าง Dino Ipsum API API นี้ใช้เพื่อสร้างข้อความตัวยึดตำแหน่ง Lorem Ipsum จำนวนเท่าใดก็ได้ มีประโยชน์เมื่อคุณสร้างต้นแบบหรือทดสอบอินเทอร์เฟซของแอปพลิเคชันของคุณและต้องการเติมเนื้อหาแบบสุ่ม

ในการค้นหาส่วน Dino Ipsum API ให้ป้อนชื่อในช่องค้นหาในบริการ RapidAPI หรือไปที่หมวดหมู่ "อื่นๆ" จากรายการ "หมวดหมู่ทั้งหมด" แล้วเลือก API นี้จากรายการ Dino Ipsum API ผ่าน RapidAPI นั้นฟรี คุณจึงรับข้อความตัวยึดตำแหน่งได้มากเท่าที่คุณต้องการ

เมื่อคุณเลือก Dino Ipsum API หน้าแรกที่คุณเห็นจะเป็นส่วนย่อยของ API Endpoint ซึ่งรวมถึงข้อมูลส่วนใหญ่ที่จำเป็นในการเริ่มต้น ส่วนย่อย API Endpoints ประกอบด้วยการนำทาง รายการปลายทาง (เพียงหนึ่งรายการสำหรับ API นี้) เอกสารประกอบของปลายทางที่เลือกในปัจจุบัน และข้อมูลโค้ด (มีให้ใน 8 ภาษาการเขียนโปรแกรมที่แตกต่างกัน) เพื่อช่วยคุณในการเริ่มต้นใช้งานโค้ดของคุณ

เราจะตรวจสอบปลายทางเดียวที่ API นี้มีรายการ – dinos ซึ่งส่งคืนข้อความตัวยึดตำแหน่งจำนวนหนึ่ง ขึ้นอยู่กับพารามิเตอร์ที่ป้อน ในขณะที่เรากำลังฝึกภาษา Python อยู่ เราต้องการรับข้อมูลโค้ด Python และทดสอบในแอปของเรา กรอกพารามิเตอร์ที่จำเป็น (format=text, words=10, routes=1) และนี่คือข้อมูลโค้ดของเรา:

หากต้องการใช้กับ Python 3.6 เราจำเป็นต้องเปลี่ยน unirest เป็นคำขอ ดังนั้นเราจึงได้รับแอปดังกล่าว:

แอปของเราจะเรียกปลายทางซึ่งอยู่ที่ https://alexnormand-dino-ipsum.p.rapidapi.com/ และจะพิมพ์ข้อความตัวยึดตำแหน่งที่ดีนี้ให้เราทราบ:

Craterosaurus Europasaurus Santanaraptor Dynamosaurus Pachyrhinosaurus Cardiodon Dakosaurus Kakuru Gracilisuchus Piveteausaurus


วิธีใช้: ใช้ Schema Compare เพื่อเปรียบเทียบคำจำกัดความของฐานข้อมูลที่ต่างกัน

เครื่องมือข้อมูลเซิร์ฟเวอร์ SQL (SSDT) ​​มียูทิลิตี Schema Compare ที่คุณสามารถใช้เพื่อเปรียบเทียบข้อกำหนดฐานข้อมูลสองรายการ แหล่งที่มาและเป้าหมายของการเปรียบเทียบอาจเป็นการผสมผสานระหว่างฐานข้อมูลที่เชื่อมต่อ โครงการฐานข้อมูล SQL Server หรือสแน็ปช็อต หรือไฟล์ .dacpac ผลลัพธ์ของการเปรียบเทียบจะปรากฏเป็นชุดของการดำเนินการที่ต้องดำเนินการกับเป้าหมายเพื่อให้เหมือนกับแหล่งที่มา เมื่อการเปรียบเทียบเสร็จสิ้น คุณสามารถอัปเดตเป้าหมายได้โดยตรง (หากเป้าหมายเป็นโครงการหรือฐานข้อมูล) หรือสร้างสคริปต์การอัพเดทที่มีผลเช่นเดียวกัน

ความแตกต่างระหว่างแหล่งที่มาและเป้าหมายจะปรากฏในตารางเพื่อให้ตรวจสอบได้ง่าย คุณสามารถเจาะลึกและตรวจสอบความแตกต่างแต่ละรายการในตารางผลลัพธ์หรือในรูปแบบสคริปต์ได้ จากนั้นคุณสามารถเลือกแยกความแตกต่างเฉพาะได้

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

ขั้นตอนต่อไปนี้เปรียบเทียบสคีมาของโปรเจ็กต์ฐานข้อมูลกับฐานข้อมูลที่เชื่อมต่อ

หากระบุโปรเจ็กต์เป็นเป้าหมายสำหรับการเปรียบเทียบ ความยาวพาธสูงสุดที่รองรับ (ไม่รวมอักษรระบุไดรฟ์ ทวิภาค และแบ็กสแลชนำหน้า) สำหรับโปรเจ็กต์คือ 256 อักขระ หากเส้นทางโปรเจ็กต์ของคุณยาวเกิน 256 อักขระ คุณจะยังสามารถเปรียบเทียบสคีมากับฐานข้อมูลหรือโปรเจ็กต์อื่นได้ อย่างไรก็ตาม คุณจะไม่สามารถอัปเดตสคีมาของมันได้

ขั้นตอนต่อไปนี้ใช้เอนทิตีที่สร้างในขั้นตอนก่อนหน้าในส่วนการพัฒนาฐานข้อมูลที่เชื่อมต่อและการพัฒนาฐานข้อมูลออฟไลน์ที่เน้นโครงการ

เพื่อเปรียบเทียบคำจำกัดความของฐานข้อมูล

บน เครื่องมือ เมนู เลือก SQL Serverแล้วคลิก การเปรียบเทียบสคีมาใหม่.

หรือคลิกขวาที่ TradeDev โครงการใน ตัวสำรวจโซลูชันและเลือก สคีมาเปรียบเทียบ.

NS สคีมาเปรียบเทียบ หน้าต่างจะเปิดขึ้น และ Visual Studio จะกำหนดชื่อให้โดยอัตโนมัติ เช่น SqlSchemaCompare1

เมนูดรอปดาวน์สองเมนูที่มีลูกศรสีเขียวอยู่ระหว่างนั้นจะปรากฏขึ้นที่ด้านล่าง สคีมาเปรียบเทียบ แถบเครื่องมือหน้าต่าง เมนูเหล่านี้อนุญาตให้คุณเลือกข้อกำหนดฐานข้อมูลสำหรับแหล่งที่มาและเป้าหมายการเปรียบเทียบของคุณ

ใน เลือกแหล่งที่มา เลื่อนลง เลือก เลือกแหล่งที่มา และ เลือกสคีมาต้นทาง กล่องโต้ตอบเปิดขึ้น

สังเกตว่าถ้าคุณเปิด สคีมาเปรียบเทียบ โดยการคลิกขวาที่ชื่อโปรเจ็กต์ สคีมาต้นทางได้รับการเติมแล้ว และคุณสามารถไปยังขั้นตอนที่ 4 ได้

เลือก โครงการ ปุ่มตัวเลือก แล้วเลือก TradeDev โครงการฐานข้อมูลที่คุณสร้างในขั้นตอนก่อนหน้านี้

จาก เลือกเป้าหมาย เมนูแบบเลื่อนลงใน สคีมาเปรียบเทียบหน้าต่าง , เลือก เลือกเป้าหมาย, และ เลือกแบบแผนเป้าหมาย กล่องโต้ตอบเปิดขึ้น ใน สคีมา ส่วน ให้คลิกที่ ฐานข้อมูล ปุ่มตัวเลือก จากนั้นคลิกปุ่ม การเชื่อมต่อใหม่ ปุ่ม.

ใน คุณสมบัติการเชื่อมต่อ กล่องโต้ตอบ ป้อนชื่อเซิร์ฟเวอร์ที่มีฐานข้อมูล TradeDev และตรวจสอบให้แน่ใจว่าได้ระบุข้อมูลรับรองการตรวจสอบสิทธิ์ที่ถูกต้อง จากนั้นเลือก TradeDev ใน เชื่อมต่อกับฐานข้อมูล และคลิก ตกลง.

นอกจากนี้คุณยังสามารถคลิก ตัวเลือก ปุ่มใน สคีมาเปรียบเทียบหน้าต่าง แถบเครื่องมือเพื่อระบุว่าจะเปรียบเทียบออบเจ็กต์ใด ความแตกต่างประเภทใดที่จะถูกละเว้น และการตั้งค่าอื่นๆ

คลิก เปรียบเทียบ ปุ่มใน สคีมาเปรียบเทียบหน้าต่าง แถบเครื่องมือเพื่อเริ่มกระบวนการเปรียบเทียบ

เมื่อการเปรียบเทียบเสร็จสิ้น ความแตกต่างของโครงสร้างระหว่างโครงการและฐานข้อมูลจะปรากฏใน ผลลัพธ์ บานหน้าต่างในส่วนบนของหน้าต่าง ตามค่าเริ่มต้น กลุ่มผลการเปรียบเทียบความแตกต่างทั้งหมดจะถูกจัดกลุ่มตามการดำเนินการ (เช่น ลบ เปลี่ยนแปลง หรือเพิ่ม) NS ผลลัพธ์ บานหน้าต่างจะแสดงแถวสำหรับแต่ละอ็อบเจ็กต์ฐานข้อมูลที่แตกต่างกันระหว่างข้อกำหนดของฐานข้อมูล แต่ละแถวระบุอ็อบเจ็กต์ในสคีมาต้นทางหรือเป้าหมาย (หรือทั้งสองอย่าง) และการดำเนินการที่จะดำเนินการกับสคีมาเป้าหมายเพื่อทำให้ออบเจ็กต์เป้าหมายเหมือนกับออบเจ็กต์ต้นทาง หากวัตถุได้รับการปรับโครงสร้างใหม่และเปลี่ยนชื่อหรือย้ายไปยังสคีมาใหม่ ชื่อต้นทางและเป้าหมายจะต่างกัน และชื่อแหล่งที่มาจะปรากฏเป็นแบบอักษรตัวหนาเพื่อเน้นความแตกต่าง

โดยค่าเริ่มต้น รายการผลลัพธ์จะซ่อนอ็อบเจ็กต์ที่เหมือนกันในสคีมาทั้งสองหรือไม่รองรับการอัปเดต (เช่น อ็อบเจ็กต์ในตัว) คุณสามารถคลิกที่ปุ่มตัวกรองที่เหมาะสมในแถบเครื่องมือเพื่อแสดงวัตถุเหล่านี้

หากต้องการเปลี่ยนการตั้งค่าการจัดกลุ่ม ให้คลิกที่ ผลลัพธ์ของกลุ่ม รายการดรอปดาวน์ในแถบเครื่องมือ เลือก พิมพ์ เพื่อจัดกลุ่มผลลัพธ์ตามประเภทวัตถุ (เช่น ตามตาราง มุมมอง หรือกระบวนงานที่เก็บไว้)

ค้นหาตารางผลิตภัณฑ์ในกลุ่มตาราง คลิกที่แถวและสังเกตว่าคำจำกัดความต้นทางและเป้าหมายของตารางปรากฏในส่วน คำจำกัดความของวัตถุ บานหน้าต่างที่เน้นความแตกต่าง คุณยังสามารถขยายแถวตารางผลิตภัณฑ์ใน ผลลัพธ์ บานหน้าต่างเพื่อตรวจสอบองค์ประกอบเฉพาะในตารางที่แตกต่างกัน

โดยค่าเริ่มต้น ความแตกต่างทั้งหมดจะรวมอยู่ในขอบเขตของการดำเนินการอัปเดตเป้าหมาย คุณสามารถยกเว้นความแตกต่างที่คุณไม่ต้องการซิงโครไนซ์ได้ ในการทำเช่นนั้น ให้ยกเลิกการเลือก ใน การกระทำ คอลัมน์ตรงกลางของแต่ละแถว หรือคลิกขวาที่แถวในบานหน้าต่าง Schema แล้วเลือก ไม่รวม. สังเกตว่าแถวนั้นเป็นสีเทาทันที เมื่อถึงเวลาต้องอัปเดตฐานข้อมูลเป้าหมาย แถวนี้จะไม่ถูกพิจารณาสำหรับการเปลี่ยนแปลงที่รอดำเนินการ

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

หากแถวที่ถูกยกเว้นมีออบเจ็กต์ที่ขึ้นต่อกัน (เช่น a โต๊ะ แถวที่อ้างอิงโดย a ดู แถว) แถวที่แยกออกจะถูกปิดใช้งาน แต่ช่องทำเครื่องหมายจะไม่ถูกล้าง เมื่อยกเลิกการเลือกแถวทั้งหมดที่ขึ้นอยู่กับแถวนั้น แถวที่ปิดใช้งานจะไม่ถูกเลือก นอกจากนี้ หากแถวถูกปรับโครงสร้างใหม่ (เปลี่ยนชื่อหรือย้ายไปยังสคีมาอื่น) ช่องทำเครื่องหมายจะถูกปิดใช้งานสำหรับแถวนั้นและแถวย่อยที่ขึ้นต่อกันใดๆ

โปรดสังเกตว่า หากคุณรีเฟรชการเปรียบเทียบ ความแตกต่างที่คุณเลือกข้ามจะถูกละเว้น

ในการอัปเดตสคีมาของเป้าหมาย คุณมีสองทางเลือก คุณสามารถอัปเดตเป้าหมายได้โดยตรงจาก สคีมาเปรียบเทียบ หน้าต่างหากเป้าหมายเป็นฐานข้อมูลหรือโครงการ หรือคุณสามารถสร้างสคริปต์การอัพเดทได้หากเป้าหมายเป็นฐานข้อมูลหรือไฟล์ฐานข้อมูล สคริปต์ที่สร้างขึ้นจะปรากฏในตัวแก้ไข Transact-SQL ซึ่งคุณสามารถตรวจสอบสคริปต์ที่เรียกใช้กับฐานข้อมูลได้ ขั้นตอนต่อไปนี้อธิบายตัวเลือกเหล่านี้เพิ่มเติม

การอัปเดตจะล้มเหลวเนื่องจากการเปลี่ยนแปลงของเราเกี่ยวข้องกับการเปลี่ยนคอลัมน์จาก NOT NULL เป็น NULL และทำให้ข้อมูลสูญหาย หากคุณต้องการดำเนินการอัปเดตต่อ ให้คลิกที่ ตัวเลือก ปุ่ม (อันที่ห้าจากซ้าย) บนแถบเครื่องมือสำหรับ Schema Compare และยกเลิกการเลือก บล็อกการปรับใช้ที่เพิ่มขึ้นหากข้อมูลสูญหาย ตัวเลือก.

หากต้องการอัปเดตโดยตรงในหน้าต่างเปรียบเทียบสคีมา

คลิก อัปเดต ปุ่มบนแถบเครื่องมือสำหรับหน้าต่าง Schema Compare

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

หากคุณมีสิทธิ์ที่จำเป็นในการอัปเดตฐานข้อมูล ให้คลิกที่ ดำเนินการแบบสอบถาม ปุ่มในแถบเครื่องมือแก้ไขบานหน้าต่างเพื่อเรียกใช้สคริปต์

ในการอัพเดทโดยสคริปต์

คลิก สร้างสคริปต์ ปุ่ม (ปุ่มที่สี่จากซ้าย) บนแถบเครื่องมือสำหรับหน้าต่าง Schema Compare

สคริปต์ที่สร้างขึ้นจะปรากฏในหน้าต่าง Transact-SQL Editor ใหม่

เฉพาะไฟล์ .dacpac ที่สร้างโดยกระบวนการสแนปชอต SSDT เท่านั้นที่รองรับลักษณะการทำงานนี้ คุณไม่สามารถกำหนดเป้าหมายไฟล์ .dacpac ที่สร้างโดยเครื่องมือหรือเฟรมเวิร์ก SQL Data-tier Application (DAC) ได้ในขณะนี้

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

สคริปต์ที่บันทึกไว้อาจมีประโยชน์ในสถานการณ์เมื่อคุณไม่ได้รับอนุญาตให้อัปเดตฐานข้อมูลที่ใช้งานจริง ในกรณีเหล่านี้ คุณสามารถมอบสคริปต์ให้กับ DBA เพื่อปรับใช้ในภายหลัง

หรือคุณสามารถเชื่อมต่อ Transact-SQL Editor กับเซิร์ฟเวอร์ที่เหมาะสมและรันสคริปต์ได้โดยตรง ก่อนที่คุณจะสามารถดำเนินการตามขั้นตอนนี้ได้ คุณต้องมีสิทธิ์ที่จำเป็นในการสร้างหรืออัพเดตฐานข้อมูล หากคุณมีสิทธิ์ที่จำเป็นในการอัปเดตฐานข้อมูล ให้คลิกที่ ดำเนินการแบบสอบถาม ปุ่มในแถบเครื่องมือแก้ไขบานหน้าต่างเพื่อเรียกใช้สคริปต์

คลิก เชื่อมต่อ ปุ่ม. การดำเนินการนี้จะเชื่อมต่อกับเซิร์ฟเวอร์ปัจจุบันหรือแจ้งให้คุณป้อนหรือเลือก a ในกล่องโต้ตอบเชื่อมต่อกับเซิร์ฟเวอร์ ขอให้สังเกตว่าชื่อฐานข้อมูลถูกกำหนดในสคริปต์เป็นตัวแปรคำสั่ง

ตรวจสอบสคริปต์ และทำการเปลี่ยนแปลงใดๆ กับตัวแปรคำสั่งที่กำหนดชื่อฐานข้อมูลเป้าหมายและคำนำหน้าที่เกี่ยวข้องและพาธไฟล์ หากจำเป็น

คลิก ดำเนินการ ปุ่มในแถบเครื่องมือบานหน้าต่างแก้ไขเพื่อเรียกใช้สคริปต์


คิวลำดับความสำคัญ

NS คิวลำดับความสำคัญ เป็นโครงสร้างข้อมูลคอนเทนเนอร์ที่จัดการชุดของเร็กคอร์ดด้วยคีย์ที่สั่งทั้งหมด เพื่อให้เข้าถึงเร็กคอร์ดได้อย่างรวดเร็วด้วยคีย์ที่เล็กที่สุดหรือใหญ่ที่สุดในชุด

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

คิวลำดับความสำคัญมักใช้เพื่อจัดการกับปัญหาการจัดกำหนดการ ตัวอย่างเช่น คุณอาจใช้สิ่งเหล่านี้เพื่อให้มีความสำคัญกับงานที่มีความเร่งด่วนสูงกว่า

นึกถึงงานของตัวกำหนดเวลางานระบบปฏิบัติการ:

ตามหลักแล้ว งานที่มีลำดับความสำคัญสูงกว่าในระบบ (เช่น การเล่นเกมแบบเรียลไทม์) ควรมีความสำคัญเหนือกว่างานที่มีลำดับความสำคัญต่ำกว่า (เช่น การดาวน์โหลดการอัปเดตในเบื้องหลัง) ด้วยการจัดระเบียบงานที่รอดำเนินการในคิวลำดับความสำคัญที่ใช้ความเร่งด่วนของงานเป็นคีย์ ตัวจัดกำหนดการงานจะสามารถเลือกงานที่มีความสำคัญสูงสุดได้อย่างรวดเร็วและอนุญาตให้เรียกใช้ก่อนได้

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

รายการ : คิวที่เรียงลำดับด้วยตนเอง

คุณสามารถใช้รายการที่จัดเรียงเพื่อระบุและลบองค์ประกอบที่เล็กที่สุดหรือใหญ่ที่สุดได้อย่างรวดเร็ว ข้อเสียคือการแทรกองค์ประกอบใหม่ลงในรายการช้า อู๋(NS) การดำเนินการ.

ในขณะที่จุดแทรกสามารถพบได้ใน อู๋(บันทึก NS) เวลาที่ใช้ bisect.insort ในไลบรารีมาตรฐาน ซึ่งมักถูกครอบงำโดยขั้นตอนการแทรกที่ช้าเสมอ

การรักษาลำดับโดยการต่อท้ายรายการและการเรียงลำดับใหม่ก็ต้องใช้เวลาอย่างน้อยเช่นกัน อู๋(NS บันทึก NS) เวลา. ข้อเสียอีกประการหนึ่งคือ คุณต้องดูแลการเรียงลำดับรายการใหม่ด้วยตนเองเมื่อมีการแทรกองค์ประกอบใหม่ ง่ายต่อการแนะนำจุดบกพร่องโดยพลาดขั้นตอนนี้ และเป็นภาระของคุณซึ่งเป็นนักพัฒนาซอฟต์แวร์เสมอ

ซึ่งหมายความว่ารายการที่จัดเรียงจะเหมาะเป็นคิวลำดับความสำคัญเมื่อมีการแทรกเพียงเล็กน้อยเท่านั้น:

Heapq : ฮีปไบนารีตามรายการ

heapq เป็นการนำฮีปแบบไบนารีไปใช้โดยปกติ list และสนับสนุนการแทรกและการแยกองค์ประกอบที่เล็กที่สุดใน อู๋(บันทึก NS) เวลา.

โมดูลนี้เป็นตัวเลือกที่ดีสำหรับการนำลำดับความสำคัญไปใช้ใน Python Since heapq technically provides only a min-heap implementation, extra steps must be taken to ensure sort stability and other features typically expected from a practical priority queue:

Queue.PriorityQueue : Beautiful Priority Queues

queue.PriorityQueue uses heapq internally and shares the same time and space complexities. The difference is that PriorityQueue is synchronized and provides locking semantics to support multiple concurrent producers and consumers.

Depending on your use case, this might be helpful, or it might just slow your program down slightly. In any case, you might prefer the class-based interface provided by PriorityQueue over the function-based interface provided by heapq :

Priority Queues in Python: Summary

Python includes several priority queue implementations ready for you to use.

queue.PriorityQueue stands out from the pack with a nice object-oriented interface and a name that clearly states its intent. It should be your preferred choice.

If you&rsquod like to avoid the locking overhead of queue.PriorityQueue , then using the heapq module directly is also a good option.


Combining features from different layers (Union)

Union combines selected features into one new feature. Although the features may be from different layers, the layers must be of the same geometry type—either line or polygon. Union maintains the original features and their attributes—that is, the selected features are not deleted or edited during the Union operation. The new feature is created with the chosen template using the default attribute values. For example, with Union, you can use some selected parcels to create a polygon representing a neighborhood crime prevention area.

You can also create a multipart feature using the Union command by combining nonadjacent features from different layers. For example, to create a sedimentary rock polygon in a new rock classification layer given selected clay and quartz polygons in an existing rock composite layer, use the Union command to combine the clay and quartz features to create a new multipart sedimentary rock feature in the rock classification layer.

The Union command works on selected features, allowing you to choose which features will be combined in the output. On the other hand, the Union geoprocessing tool combines features from all input layers or feature classes and allows you to determine which attributes from the input features are transferred to the output feature class.

You can use the Merge command on the Editor menu instead of Union if the selected features are all in the same layer and you want to combine them into a single feature and choose the resulting attributes.

  1. คลิกเครื่องมือแก้ไข บนแถบเครื่องมือตัวแก้ไข
  2. Click the features you want to combine into one.
  3. Click the Editor menu and click Union .
  4. Choose the target in which the new feature will be created.
    • If you have feature templates for the layers in your map, click the Template button and click the template to use to create the new feature. You can also double-click the preview of the template to choose a different template.
    • If you do not have feature templates, click the layer in which to create the feature.
  5. คลิกตกลง

ดูวิดีโอ: สอน Python สำหรบ Data science: การสราง ordered category ใน pandas DataFrame