বহু গোপনীয়তা সংক্রান্ত প্রয়োজনীয়তা পূরণের জন্য একত্রিত করা


10

আমার কাছে একটি নির্দিষ্ট শিল্পে সমস্ত নিয়োগকারীদের অফিস অবস্থানের প্রতিনিধিত্বকারী একটি পয়েন্ট ফিচার ক্লাস রয়েছে। প্রতিটি অফিসে কর্মরত কর্মচারীদের সংখ্যা সংরক্ষণ করার জন্য বৈশিষ্ট্য শ্রেণীর একটি বৈশিষ্ট্য রয়েছে। কেউ এই তথ্যটি ব্যবহারের জন্য অনুরোধ করেছেন, সম্ভাব্য ক্ষুদ্রতম ভৌগলিক ইউনিট - সেন্সাস ব্লকগুলিতে এই ক্ষেত্রে স্থান পেয়েছেন। তবে, একটি গোপনীয়তা চুক্তি ডেটার প্রকাশ যেমন হয় তেমন প্রতিরোধ করে। পরিবর্তে, দুটি মানদণ্ড পূরণে এটি দমন করতে হবে:

  1. যে কোনও বহুভুজের অন্ততপক্ষে 3 জন নিয়োগকারী (পয়েন্ট) থাকতে হবে;
  2. বহুভুজ মধ্যে মোট কর্মসংস্থানের 80% এর বেশি কোনও একক নিয়োগকর্তা হতে পারে না।

আমি সাফল্যের সাথে একটি স্ক্রিপ্ট লিখেছি যা স্পষ্টতই আদমশুমারি ব্লকের সাথে পয়েন্টগুলিতে যোগ করে প্রত্যেকটির যোগফল এবং সর্বোচ্চ কর্মসংস্থান রেখে। দমন মানদণ্ড পূরণ না করে এমন প্রত্যেককে পতাকাযুক্ত করা হয়। (কোনও পয়েন্টযুক্ত বহুভুজগুলি পতাকাঙ্কিত করা হয় না, যেহেতু দমন করার কোনও ডেটা নেই)) আমি তারপরে প্রতিটি ব্লক গ্রুপকে পরীক্ষা করে দেখেছি যে এর মধ্যে কোনও পতাকাযুক্ত ব্লক রয়েছে কিনা তা দেখার জন্য। কেবলমাত্র আন-ফ্ল্যাগড ব্লকগুলি সমন্বিত ব্লক গ্রুপগুলি এর পরে ব্লকগুলির সাথে প্রতিস্থাপন করা হবে। ব্লক গ্রুপগুলি পর্যাপ্ত পরিমাণে ডেটা চাপা দিয়েছে কিনা তা যাচাই করার জন্য ফলস্বরূপ বৈশিষ্ট্যগুলির ক্লাসটি দমন করার মানদণ্ডের বিরুদ্ধে পরীক্ষা করা হয়।

ট্র্যাক্টের জন্য একই প্রক্রিয়াটি পুনরাবৃত্তি হয়, আমাকে ট্র্যাক্টস (কিছু পতাকাযুক্ত এবং কিছু না), ব্লক গ্রুপ এবং ব্লক (সমস্ত পতাকাবিহীন) সমন্বিত একটি ডেটাসেট রেখে আমাকে রেখে দেয়। ভৌগলিক শ্রেণিবিন্যাসের পরবর্তী অগ্রগতি হ'ল কাউন্টি, যা এই ডেটার জন্য অনুরোধকারী ব্যক্তির কোনও কাজে আসে না।

তাহলে আমার প্রশ্নটি হ'ল: বহুভুজকে যতটা সম্ভব গোষ্ঠীতে একত্রিত করার কোনও সাধারণভাবে গৃহীত পদ্ধতি রয়েছে, যাতে সকলেই কিছুটা ন্যূনতম মানদণ্ড পূরণ করে?

এখানে কিছু বিধি রয়েছে যা আমি সমষ্টিতে প্রয়োগ করতে চাই:

  • যখনই সম্ভব, পতাকাযুক্ত ট্র্যাক্টগুলি কেবলমাত্র অন্য পতাকাঙ্কৃত ট্র্যাক্টের সাথে একত্রিত করা উচিত;
  • পতাকাযুক্ত ট্র্যাক্টগুলি যে অন্য কারও সাথে সামঞ্জস্যপূর্ণ নয় (বা বিচ্ছিন্ন গোষ্ঠী যা এখনও মানদণ্ডগুলি পূরণ করে না) তাদের সাথে যোগ দেওয়া যেতে পারে যা ইতিমধ্যে মানদণ্ডগুলির সাথে মিলিত হয়, যদিও তাদের মধ্যে কোনও নিয়োগকর্তা নাও থাকতে পারে এমন ট্র্যাক্ট থাকতে পারে যেগুলি অন্তর্ভুক্ত করা প্রয়োজন।
  • একেবারে অসম্ভব না হলে আমি কাউন্টির সীমানা অক্ষুণ্ণ রাখতে চাই (এবং আমি প্রক্রিয়া করার আগে ইনপুট বৈশিষ্ট্যগুলিকে তাদের নিজ নিজ কাউন্টিতে পৃথক করে এটি করার প্রত্যাশা করি)।
  • আরকজিআইএস সরঞ্জাম বা ওপেন-সোর্স পাইথন লাইব্রেরি ব্যবহার করে সমাধানটি অবশ্যই পাইথনে থাকতে হবে।

আদর্শভাবে, কেউ আমাকে এই সমষ্টিটি বাস্তবায়নের বিদ্যমান উপায়গুলির দিকে নির্দেশ করতে পারে। যদি তা না হয় তবে আমি নিজেই অ্যালগরিদম কোড করতে পেরে খুশি, যদিও নির্দিষ্ট পদক্ষেপ / সরঞ্জামগুলির একটি তালিকা অনেক প্রশংসা করবে। সমস্যাটি আমাকে পুনঃনির্ধারণের একটি বিশেষ মামলা হিসাবে চিহ্নিত করেছে (ডিস-কনজিগিউজ বহুভুজ সহ), এবং এই লক্ষ্যে আমি পাইসএল এর আঞ্চলিককরণ অ্যালগরিদমগুলি ব্যবহার করে দেখেছি , যদিও এগুলি ব্যবহার করে মোট কর্মচারীর সর্বাধিক কত শতাংশ পরীক্ষা করা যায় তা আমার কাছে পরিষ্কার নয় is ।

উত্তর:


5

যে কারও আগ্রহী, আমি পাইসএল এর অঞ্চল ব্যবহার করে নিজেই একটি সমাধান নিয়ে এসেছি ax ম্যাক্সপ অ্যালগরিদম । মূলত, ম্যাক্স-পি আমাকে এমন অঞ্চলগুলির একটি সেট তৈরি করতে দেয় যা আমার প্রথম মাপদণ্ডের সাথে মিলিত হয় (প্রতিটি অঞ্চলে নিয়োগকারীদের ন্যূনতম সংখ্যা), এবং আমি কিছুক্ষণের মধ্যে এটি রেখেছি যা ম্যাক্স-পি এর যে কোনও সমাধানও প্রত্যাখ্যান করবে না also দ্বিতীয় মানদণ্ডটি পূরণ করুন (কোনও অঞ্চলের বৃহত্তম নিয়োগকর্তার দ্বারা প্রদত্ত কর্মসংস্থানের শতাংশ)। আমি এটিকে একটি আরকিজিআইএস সরঞ্জাম হিসাবে প্রয়োগ করেছি।

আমি ব্লক / ব্লকগ্রুপস / ট্র্যাক্টগুলি পতাকাঙ্কিত করতে এবং এর পরিবর্তে ব্লকগুলিতে সর্বোচ্চ-পি চালানোর কাজটি স্ক্র্যাপ করার সিদ্ধান্ত নিয়েছি (যদিও আমি ট্র্যাক্টগুলিতে আমার সমস্ত পরীক্ষা-নিরীক্ষা করে যাচ্ছি, ইনপুট বহুভুজের সংখ্যার একটি পরিমিত বৃদ্ধি হিসাবে প্রক্রিয়াজাতকরণের সময় একটি নাটকীয় প্রভাব)। আমার কোড সম্পর্কিত অংশ অনুসরণ করে। generate_regions()ফাংশনটির জন্য ইনপুট হিসাবে প্রয়োজনীয় "শেফফিল" (একটি চিত্রকর্মের পুরো পথ সহ একটি স্ট্রিং হিসাবে পাস করা) হ'ল এমন একটি যা নিয়োগকর্তাদের পয়েন্ট বৈশিষ্ট্যগুলি ইতিমধ্যে স্থানিকভাবে এতে যোগদান করেছিল, একক নিয়োগকর্তার সর্বাধিক কর্মচারীর সংখ্যা সহ , এবং প্রতিটি ইনপুট বৈশিষ্ট্যের জন্য একটি গুণ হিসাবে মোট কর্মচারী সঞ্চিত stored

import arcpy, math, pysal, random
import numpy as np

# Suppression criteria:
MIN_EMP_CT = 3      # Minimum number of employers per polygon feature
MAX_EMP_FRAC = 0.8  # Maximum ratio of employees working for a single employer per polygon feature

def generate_regions(shapefile, min_emp_ct=MIN_EMP_CT, max_emp_frac=MAX_EMP_FRAC):
    '''Use pysal's region.Maxp method to generate regions that meet suppression criteria.'''
    w = pysal.rook_from_shapefile(shapefile, idVariable='GEOID10')
    dbf = pysal.open(shapefile[:-4] + '.dbf')
    ids = np.array((dbf.by_col['GEOID10']))
    vars = np.array((dbf.by_col[employer_count_fieldname],dbf.by_col[max_employees_fieldname],dbf.by_col[total_employees_fieldname]))
    employers = vars[0]
    vars = vars.transpose()
    vars_dict = {}
    for i in range(len(ids)):
        vars_dict[ids[i]] = [int(vars[i][0]),float(vars[i][1]),float(vars[i][2])]
    random.seed(100)     # Using non-random seeds ensures repeatability of results
    np.random.seed(100)  # Using non-random seeds ensures repeatability of results
    bump_iter = int(arcpy.GetParameterAsText(3)) # Number of failed iterations after which to increment the minimum number of employers per region (otherwise we could be stuck in the loop literally forever).
    iteration = 0
    tests_failed = 1
    while tests_failed:
        floor = int(min_emp_ct + math.floor(iteration / bump_iter))
        solution = pysal.region.Maxp(w,vars,floor,employers)
        regions_failed = 0
        for region in solution.regions:
            SUM_emp10sum = 0
            MAX_emp10max = 0
            for geo in region:
                emp10max = vars_dict[geo][1]
                emp10sum = vars_dict[geo][2]
                SUM_emp10sum += emp10sum
                MAX_emp10max = max(MAX_emp10max, emp10max)
            if SUM_emp10sum > 0:
                ratio = MAX_emp10max / SUM_emp10sum
            else:
                ratio = 1
            if ratio >= max_emp_frac:
                regions_failed += 1
        iteration += 1
        if regions_failed == 0:
            arcpy.AddMessage('Iteration ' + str(iteration) + ' (MIN_EMP_CT = ' + str(floor) +') - PASSED!')
            tests_failed = 0
        else:
            arcpy.AddMessage('Iteration ' + str(iteration) + ' (MIN_EMP_CT = ' + str(floor) +') - failed...')
    return solution

solution = generate_regions(spatially_joined_shapefile)

regions = solution.regions

### Write input-to-region conversion table to a CSV file.
csv = open(conversion_table,'w')
csv.write('"GEOID10","REGION_ID"\n')
for i in range(len(regions)):
    for geo in regions[i]:
        csv.write('"' + geo + '","' + str(i+1) + '"\n')
csv.close()

2

আমি এরকম পরিস্থিতি কখনই পাইনি এবং আমি বিশ্বাস করি যে আরও সাধারণ রুট হ'ল আপনি যে কোনও ইউনিটকে প্রাইরির বিষয়ে সিদ্ধান্ত নেন তা রাখা এবং তারপরে গোপনীয়তা সম্পর্কিত উদ্বেগগুলি রক্ষার জন্য ডেটা "ফ্যাদ" করার জন্য বিভিন্ন কৌশল ব্যবহার করা।

লোকেরা কীভাবে উপাত্তগুলিকে মাস্ক করে তার অস্তিত্বের একটি পরিচয়ের জন্য আমি এই নিবন্ধটি প্রস্তাব করব;

ম্যাথিউস, গ্রেগরি জে ও ওফার হ্যারেল। 2011. তথ্য গোপনীয়তা: পরিসংখ্যান প্রকাশের সীমাবদ্ধতা এবং গোপনীয়তা নির্ধারণের জন্য পদ্ধতিগুলির একটি পর্যালোচনাপরিসংখ্যান সমীক্ষা 5 : 1-29। উপরের লিঙ্কে প্রজেক্ট ইউক্যালিড থেকে পিডিএফ নিখরচায় পাওয়া যায়।

আমার সিটিউলাইক লাইব্রেরিতে সেই ট্যাগটিতে "জিওমাস্কিং" নিয়ে আলোচনা করা অন্যান্য বিভিন্ন নিবন্ধের কিছু লিঙ্কগুলিও রয়েছে (যদিও সমস্ত ভৌগলিক তথ্যের সাথে কঠোরভাবে সম্পর্কিত নয়)।

যদিও এটি আপনার প্রশ্নের উত্তর দেয় না, তবে ম্যাথিউ এবং ওফার নিবন্ধে তালিকাভুক্ত কয়েকটি কৌশলগুলি আপনার প্রয়োজনগুলি পূরণ করার জন্য প্রয়োগ করা সহজতর হতে পারে। বিশেষত সিনথেটিক ডেটা বানাতে আপনি যেখানে যাচ্ছিলেন তার যৌক্তিক বর্ধনের মতো মনে হয় (বাহ্যিক ডেটা আশেপাশের আদমশুমারী ব্লক গ্রুপ বা ট্র্যাক্ট বা প্রয়োজনে কাউন্টি থেকে নেওয়া হবে)। এছাড়াও কিছু ধরণের ডেটা অদলবদল (স্পেসে) প্রয়োগ করাও সহজ হতে পারে।


উত্তর / মন্তব্য করার জন্য ধন্যবাদ। আমি গোপনীয়তা রক্ষা করার সময় পরিসংখ্যানগত বৈধতা ধরে রাখতে ডেটা ফুড করার পদ্ধতির অস্তিত্ব সম্পর্কে সচেতন, যদিও সেই কাগজটি আমাকে আরও বিশদগুলি বুঝতে আরও সহায়তা করেছে। দুর্ভাগ্যক্রমে, এই জাতীয় পদ্ধতিগুলি আমার অবস্থার জন্য বিশেষভাবে প্রযোজ্য বলে মনে হয় না, যখন আমি প্রকাশিত একমাত্র তথ্য একটি নির্দিষ্ট অঞ্চলে নিয়োগকর্তা ও কর্মচারীদের সংখ্যা: তাদের চারপাশে বদলানো অবশ্যই তাদের ভিত্তিতে কোনও বিশ্লেষণের বৈধতার উপর প্রভাব ফেলবে, না?
nmpeterson

সমষ্টিটি বিশ্লেষণকে সম্ভাব্য অনুরূপ পদ্ধতিতে প্রভাবিত করে। যদিও সাধারণ পরামর্শ দেওয়া কঠিন, এবং আপনার শেষ পণ্যটি পরবর্তীকালে ডেটা নিয়ে লোকেরা কী করবে তার দ্বারা পরিচালিত হওয়া উচিত। আমি এমন কিছু পরিস্থিতি কল্পনা করতে পারি যেখানে পরিবর্তনশীল সমষ্টিগুলির শেষ ইউনিট তৈরি করা সমস্যাযুক্ত হবে। উদাহরণস্বরূপ, যদি আমি নিয়োগকর্তাদের মধ্যে সংগৃহীততা / প্রতিযোগিতার তুলনা করতে আগ্রহী ছিলাম, তবে বিভিন্ন ইউনিটগুলির মধ্যে একটি ব্যথা হতে পারে তবে বিশেষত যদি আমি এটি করতে পারি এবং এটি জনগণনা থেকে অন্যান্য জনসংখ্যার উপাত্তের সাথে সংযুক্ত করতে চাই।
অ্যান্ডি ডাব্লু

সেই উদাহরণে আমার পরিবর্তে বিশ্লেষণের একটি ইউনিট থাকবে যার মধ্যে একটি স্বতঃস্ফূর্ত ত্রুটি অন্তর্ভুক্ত রয়েছে তবে আমি নিশ্চিত যে আপনি অন্যান্য ব্যবহারগুলি সম্পর্কে ভাবতে পারবেন যেখানে একত্রিতকরণ এবং (তাত্ত্বিকভাবে) কোনও ত্রুটি তততর পছন্দনীয় নয়।
অ্যান্ডি ডাব্লু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.