گم‌نام‌سازی داده‌های حساس در یک ستون دیتافریم پانداس با hashlib

منتشر‌شده در towardsdatascience به تاریخ ۱ سپتامپر ۲۰۲۱
لینک منبع Anonymise Sensitive Data in a Pandas DataFrame Column with hashlib

یک سناریوی رایج که دانشمندان داده با آن مواجه هستند، به اشتراک گذاری داده‌ها با دیگران است. اما اگر این داده حاوی اطلاعات قابل‌شناسایی شخصی (PII) مانند آدرس‌های ایمیل، شناسه مشتری یا شماره‌تلفن باشد، چه باید بکنید؟

یک راه‌حل ساده حذف این زمینه‌ها قبل از به اشتراک گذاری داده‌ها است. با این حال، تجزیه و تحلیل شما ممکن است به داشتن داده‌های PII متکی باشد. به عنوان مثال، شناسه مشتری در یک مجموعه داده معاملاتی تجارت الکترونیک برای دانستن این که کدام مشتری کدام محصول را خریده‌است، ضروری است.

در عوض، می‌توانید با استفاده از هشینگ، زمینه‌های PII را در داده‌های خود ناشناس‌سازی کنید.

هشینگ (درهم‌سازی) چیست؟

هشینگ یک فرایند الکترونیکی برای تبدیل رشته‌ای از شخصیت‌های متن ساده به یک رشته منحصر به فرد با طول ثابت است. فرآیند هشینگ دو ویژگی مهم دارد:

۱. تبدیل یک رشته درهم شده یا هش شده به شکل اصلی آن بسیار دشوار است.

۲. همان رشته متنی ساده همان خروجی هش شده را تولید خواهد کرد.

به همین دلایل، توسعه‌دهندگان رمز عبور هش شده شما را در پایگاه داده وب سایت ذخیره می‌کنند.

یک مثال ساده با استفاده از hashlib

ماژول haslib یک ماژول داخلی در پایتون است که شامل بسیاری از الگوریتم‌های هش محبوب است. در آموزش ما، از SHA-256 استفاده می‌کنیم که بخشی از خانواده الگوریتم‌های SHA-2 (Secure Hash Algorithm 2) است.

قبل از اینکه بتوانیم رشته خود را، در این مثال آدرس ایمیل، به مقدار هش شده تبدیل کنیم، ابتدا باید آن را با استفاده از کدگذاری UTF-8 به بایت تبدیل کنیم:

import hashlib# Encode our string using UTF-8 default
stringToHash = 'example@email.com'.encode()

حالا می‌توانیم آن را با استفاده از SHA-۲۵۶ هش کنیم:

# Hash using SHA-256 and print
print('Email (SHA-256): ', hashlib.sha256(stringToHash).hexdigest())

خروجی:

Email (SHA-256): 36e96648c5410d00a7da7206c01237139f950bed21d8c729aae019dbe07964e7

همین! آدرس ایمیل جعلی ما با موفقیت هش شده‌است.

یک مثال کامل با استفاده از پانداس و hashlib

حالا که ما می‌توانیم hashlib را به یک رشته واحد اعمال کنیم، مقیاس گذاری این مثال به یک دیتافریم پانداس بسیار ساده است. ما از داده‌های مشتریان کارت اعتباری موجود در Kaggle استفاده می کنیم که در ابتدا توسط Analyttica TreasureHunt LEAPS در دسترس قرار گرفته بود.

سناریو: شما باید لیستی از مشتریان کارت اعتباری را به اشتراک بگذارید. شما می‌خواهید زمینه «CLIentNUM» را حفظ کنید زیرا یک مشتری می‌تواند چندین کارت اعتباری داشته باشد و شما می‌خواهید قادر به شناسایی منحصر به فرد آن‌ها باشید.

import pandas as pd# Read only select columns using pandas
df = pd.read_csv('data/BankChurners.csv', usecols=['CLIENTNUM', 'Customer_Age', 'Gender', 'Attrition_Flag', 'Total_Trans_Amt'])df.head()

پس از تبدیل ستون "CLIENTNUM" به نوع داده رشته‌ای، می توانیم از پانداس .apply() برای هش کردن تمام رشته‌های ستون استفاده کنیم:

# Convert column to string
df['CLIENTNUM'] = df['CLIENTNUM'].astype(str)# Apply hashing function to the column
df['CLIENTNUM_HASH'] = df['CLIENTNUM'].apply(
lambda x:
hashlib.sha256(x.encode()).hexdigest()
)

موفق باشید در تلاش برای شکستن ستون تازه ایجاد شده ما.

نتیجه‌گیری

بعد از تکمیل این برنامه آموزشی باید یک شناخت ابتدایی از اینکه یک الگوریتم هش چیست داشته باشید. ما دیدیم که چگونه از hashlib برای هش یک رشته استفاده کنیم و چگونه می توان آن را در ستون DataFrame pandas برای ناشناس کردن اطلاعات حساس استفاده کرد.

شما می‌توانید تمام کدهای مورد استفاده در این پست را در Github پیدا کنید.

این متن با استفاده از ربات مترجم مقالات دیتاساینس ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.
مقالات لینک‌شده در این متن می‌توانند به صورت رایگان با استفاده از مقاله‌خوان ترجمیار به فارسی مطالعه شوند.