آمار ۱۲۸۶ بازدید

زبان برنامه نویسی «پایتون» (Python) یکی از پر طرفدارترین زبان‌های برنامه‌نویسی در حوزه محاسبات ریاضی و بخصوص «علم داده» (Data Science) و حوزه‌های «داده‌کاوی» (Data Mining) و «یادگیری ماشین» (Machine Learning) است. به همین دلیل شرکت IBM که در چند سال اخیر نرم‌افزار SPSS را خریداری کرده و در حال توسعه آن است، سعی کرده این امکان را به کاربران بدهد که بتوانند از برنامه‌های نوشته شده با زبان پایتون، در محیط SPSS استفاده کنند. این کار می‌تواند ضعف‌هایی که در محیط برنامه‌نویسی (Syntax) نرم‌افزار SPSS وجود داشته را از بین برده و امکان استفاه از توابع و دستورات پایتون در این محیط را فراهم آورد.

در این نوشتار به بررسی چگونگی استفاده از پایتون در پنجره Syntax نرم‌افزار SPSS پرداخته و در انجام محاسبات آماری از سرعت بیشتری بهره خواهیم برد. حتی قادر خواهیم بود به این ترتیب شیوه‌های جدید تحلیل آماری و محاسبات پیچیده موجود در پایتون را درون SPSS به کار بگیریم. در نسخه‌های جدید نرم‌افزار SPSS با استفاده از افزونه (Add-Ins) می‌توانیم از کتابخانه‌های محاسباتی پایتون استفاده کنیم و دیگر نوشتن کد به زبان پایتون ضروری نیست.

برای درک راحت‌تر و ارائه مناسب‌تر این موضوع، در وبلاگ فرادرس دنباله‌ای از نوشتارها را تهیه کرده‌ایم که به شناخت و به کارگیری پایتون در SPSS می‌پردازند. این سری نوشتارها در سه قسمت ارائه می‌شود:

به عنوان پیش‌نیاز و برای آشنایی با محیط نرم‌افزار SPSS‌ و کار با آن بهتر است مطلب پنجره ویرایشگر داده (Data Editor) در SPSS — راهنمای کاربردی و امکانات جدید SPSS نسخه 2۵ که باید آن‌ها را بدانید را بخوانید. همچنین، مطالعه زبان برنامه نویسی پایتون (Python) — از صفر تا صد و تهیه ویدئو‌های مجموعه آموزش‌های برنامه‌نویسی پایتون نیز خالی از لطف نیست.

پایتون در SPSS

قبل از هر چیز بهتر است ابتدا با «زبان برنامه‌نویسی پایتون (Python Programming Language) آشنا شویم. یکی از زبان‌های برنامه‌نویسی «متن باز» (Open Source) که قابلیت انجام محاسبات ریاضی و آماری را دارد «پایتون» (Python) است. یکی از علت‌های پیشرفت و توسعه سریع این زبان برنامه‌نویسی، «متن باز (Open Source) بودن آن است که امکان بهینه‌سازی و افزودن امکانات جدید را به جمعی از متخصصان و برنامه‌نویسان می‌دهد. فراگیری زبان برنامه‌نویسی پایتون ساده است، به همین دلیل افرادی که تخصص برنامه‌نویسی ندارند، سریعتر آن را یاد گرفته و به کار می‌برند. در حالیکه برنامه‌نویس‌های حرفه‌ای ممکن است برای تطبیق نگاهشان به پایتون احتیاج به زمان بیشتری داشته باشند.

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

ارتباط پایتون و SPSS

نرم‌افزار SPSS و زبان برنامه‌نویسی پایتون دو برنامه مجزا و مستقل هستند. در نتیجه می‌توانید هر دوی آن‌ها را روی رایانه شخصی خود نصب و استفاده کنید بدون اینکه تداخلی با هم داشته باشند. خوشبختانه از نسخه 15 نرم‌افزار SPSS، «افزونه‌ای» (Add ins) طراحی شد که ارتباط بین SPSS و پایتون را برقرار می‌کند. در نتیجه بیشتر امکاناتی که در SPSS وجود دارند، در پایتون قابل استفاده بوده و همچنین می‌توان در محیط برنامه‌نویسی SPSS‌ از توابع و دستورات پایتون نیز کمک گرفت.

به کمک این افزونه، کدهایی که به زبان پایتون در پنجره Syntax نرم‌افزار SPSS‌ وارد می‌کنید به پایتون ارسال شده و توسط آن اجرا می‌شود. به این ترتیب متغیرها و ساختار آن‌ها از SPSS به پایتون ارسال شده و دستورالعمل‌ها به زبان پایتون یک به یک محاسبه می‌شوند و نتیجه محاسبات به محیط SPSS باز می‌گردد. از طرف دیگر، امکان فراخوانی مولفه‌هایی که درون پنجره خروجی‌های SPSS قرار گرفته‌اند، توسط پایتون وجود دارد، در نتیجه می‌توانید مقدارهای موجود در جدول‌ها و نمودارهای SPSS را به پایتون انتقال و شیوه نمایش آن‌ها را  تغییر دهید. در ادامه این نوشتار به شیوه ارتباط بین این دو نرم‌افزار پرداخته و با ذکر مثال‌هایی نحوه کار را توضیح خواهیم داد.

نصب و راه اندازی پایتون در SPSS

برای ارتباط بین پایتون و SPSS‌ به سه نرم‌افزار احتیاج دارید.

  • SPSS
  • Python
  • SPSS Python Essentials

در نتیجه برای استفاده از امکانات پایتون در SPSS علاوه بر نرم‌افزار SPSS و نصب زبان برنامه‌نویسی پایتون، باید افزونه SPSS Python Essentials را نیز نصب کنید. این کار را هنگامی که در مراحل نصب نرم‌افزار SPSS‌ هستید باید انجام دهید. پنجره‌ای که در تصویر زیر می‌بینید در زمان نصب نرم‌افزار SPSS ظاهر می‌شود. با انتخاب گزینه YES این افزونه نصب و قابل استفاده خواهد بود. با اضافه شدن این افزونه، توابع معمول زبان برنامه‌نویسی پایتون در SPSS پیاده سازی می‌شوند و دیگر احتیاجی به نصب این نرم‌افزار به طور مستقل ندارید.

spss-python-essentials-installation-version-24

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

نسخه نرم‌افزار SPSS نحوه نصب SPSS Python Essentials
نسخه‌های ۲۱ به بالا هنگام نصب نرم‌افزار SPSS هنگام نصب نرم‌افزار
نسخه ۱۸ تا ۲۰ دریافت از وب سایت IBM SPSS دریافت فایل و به روز رسانی نرم‌افزار
نسخه ۱۷ نصب افزونه SPSS Python SPSS 17 Python Essentials
نسخه ۱۶ نصب افزونه SPSS Python
نسخه ۱۵ نصب افزونه SPSS Python SPSS 15 Python Essentials
نسخه ۱۴ به قبل

حال که این افزونه را به نرم‌افزار SPSS اضافه کرده‌اید، لازم است که آن را به کار ببریم. برای اینکه مطمئن شویم که افزونه به درستی کار می‌کند و پایتون درون SPSS قرار گرفته است، دستورات زیر را در پنجره Syntax نرم‌افزار SPSS وارد و اجرا کنید.

1. Create mini test data.

data list free/v1 to v5.
begin data
end data.

*2. Try and retrieve variable names from test data.

begin program.
import spssaux
print spssaux.GetVariableNamesList()
end program.

تصویر زیر نحوه قرارگیری کد بالا در پنجره Syntax را نشان داده است.

running python in spss

با انتخاب همه کد به کمک کلیدهای ترکیبی ctrl+a و فشردن دکمه Run که در تصویر مشخص شده، برنامه اجرا شده و در یک فایل اطلاعاتی SPSS یا Dataset، متغیرهای V1 تا V5 ایجاد می‌شوند. خروجی در پنجره Output به صورت زیر خواهد بود.

running python in spss output

بنابراین در پنجره Data Editor مطابق با تصویر زیر، پنج متغیر (البته بدون داده) ایجاد می‌شوند. پیشوند u برای این متغیرها که در خروجی دیده می‌شود، نشان می‌دهد که قالب اسامی این متغیرها به صورت unicode است. توجه داشته باشید که انتخاب اسامی متغیرها در نسخه ۲۴ به بعد SPSS به شکل پیش‌فرض با قالب unicode صورت می‌گیرد. هر چند ممکن است فضای اشغال شده برای اسامی متغیرها در این حالت بیشتر باشد ولی امکان نام‌گذاری و تعیین محتوای متغیرها با حروف فارسی با این قالب بوجود می‌آید.

running python in spss data viewer

اگر عمل نصب افزونه SPSS Python Essentials به درستی انجام شده باشد می‌توانید محل نصب پایتون را از فهرست Edit و گزینه Options در برگه File Location‌s مشاهده کنید.

spss-python-essentials-installation-file-locations

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

spss-python-essentials-not-installed

نکته: اگر افزونه SPSS Python Essentials به درستی نصب نشده باشد، در پنجره خروجی SPSS یعنی پنجره SPSS Output پیغام خطای زیر را مشاهده خواهید کرد.

>Error # 6887. Command name: begin program 
>External program failed during initialization. 
>Execution of this command stops. 
Please make sure that Essentials for Python has been successfully installed.

چگونگی کار افزونه پایتون در SPSS

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

  • کدهای پایتون در میان کدهای SPSS و در پنجره Syntax نوشته می‌شوند.
  • این کدها از درون SPSS به زبان پایتون ارسال می‌شوند تا اجرا گردند.
  • پایتون با توجه به کدهای SPSS و Python، اسامی متغیرها و مقدارهای آن‌ها را از پنجره Data Editor و همچنین جدول‌ها و نمودارها را از پنجره Output استخراج می‌کند.
  • براساس دستورالعمل‌هایی که به زبان پایتون نوشته شده، محاسبات مربوط به تغییر متغیرها یا انجام تحلیل‌های آماری صورت پذیرفته و نتایج به SPSS باز می‌گردد. البته ممکن است این نتایج بوسیله کدهای Syntax در SPSS باز هم به کار گرفته شوند.

تصویر زیر به خوبی این ارتباط را نشان داده است.

python-for-spss-basic-operations

برای مشخص کردن قطعه کدی که به پایتون نوشته شده است، ابتدای کدها از عبارت begin program و البته در انتها نیز از end program در پنجره Syntax استفاده می‌کنیم. به این ترتیب دستورات و کدهایی که در بین این دو دستور قرار گیرند برای اجرا به پایتون ارسال می‌شوند. به تصویر زیر دقت کنید. مشخص است که توسط این کد Syntax فایل داده veryintersingdata.sav فراخوانی شده و نمودارهایی برای ترسیم فراوانی متغیرهای V286 تا V301 توسط کد پایتون ترسیم شده است.

spss-python-programmability-program-block

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

spss-python-shorter-syntax

برای اطلاع بیشتر از نحوه اجرای این کد، بهتر است روال و مراحل اجرای دستورات را مرور کنیم. همانطور که می‌دانید سه پنجره اصلی در SPSS وجود دارد که در ادامه به معرفی هر یک می‌پردازیم.

  • پنجره ویرایشگر داده‌ها (Data Editor): در این پنجره امکان ورود داده‌ها و همچنین تعریف متغیرها وجود دارد. اگر محاسبات به منظور ایجاد متغیر جدید صورت گیرد، نتیجه محاسبات در قالب این متغیر جدید در این پنجره قابل مشاهده است.
  • پنجره نمایشگر خروجی (Output Viewer): نتایج تحلیل‌ها و خروجی دستورات به کار رفته در SPSS، در این پنجره مشاهده می‌شود. معمولا این نتایج به صورت جدول یا نمودارهایی دیده می‌شوند. البته امکان اصلاح یا تغییر محتویات جدول‌ها یا نمودارها نیز در این پنجره وجود دارد.
  • پنجره ویرایشگر کد (Syntax Editor): در این پنجره، کدهای SPSS‌ وارد شده و اجرا و خطایابی برنامه‌های نوشته شده با زبان SPSS Syntax امکان پذیر است. البته می‌توانید دستورات مربوط به تحلیل‌ها را در «پنجره‌های گفتگوی» (Dialog Box) با دکمه Paste به این پنجره منتقل کنید.

نکته: درون هر یک از این پنجره‌ها ممکن است پنجره‌هایی دیگری نیز ظاهر شوند. برای مثال با دوبار کلیک روی یک نمودار در پنجره نمایشگر خروجی، باعث ظاهر شدن پنجره Chart Editor شده که در آن امکان تغییر ویژگی‌های نمودارها را وجود دارد. همچنین اگر روی یک جدول که توسط دستورات جدید SPSS ایجاد شده دوبار کلیک کنید، احتمالاً وارد پنجره Model Viewer می‌شوید و می‌توانید نحوه نمایش خروجی را تغییر دهید.

spss-python-scripting-object-hierarchy
تصویر ۱

کدنویسی و قابلیت برنامه‌پذیری در SPSS

از آنجایی که «قابلیت برنامه‌پذیری» (Programmability) و «کد نویسی» (Scripting) پایتون درون SPSS متفاوت است، با ذکر دو مثال به ویژگی‌های هر یک خواهیم پرداخت. ابتدا به بررسی «کد نویسی» (Scripting) اشاره می‌کنیم.

کدنویسی پایتون در SPSS

انتظار از کد نویسی، انجام کاری است که براساس توابع و دستورات زبان مورد نظر صورت پذیرد. کد نویسی پایتون در SPSS به کمک ابزاری به نام SpssClient انجام شده که امکان رد و بدل کردن یا تبدیل اطلاعات بین و خارج از رابطه سلسله مراتب تعریف شده در تصویر 1 را فراهم می‌سازد. باید توجه داشته باشید که کد نویسی و قابلیت برنامه‌نویسی پایتون در محیط SPSS متفاوت است. برای روشن شدن موضوع به کدهایی که در زیر نوشته شده، دقت کنید. البته پیشنهاد می‌کنیم که بیشتر یادداشت‌های نوشته شده در کدها را مطالعه کنید تا منظور از هر قطعه کد را متوجه شوید.

*Look up all table titles with SPSS Python Scripting.

begin program.
import SpssClient
SpssClient.StartClient()
oDoc = SpssClient.GetDesignatedOutputDoc() #Access active output window
oItems = oDoc.GetOutputItems() #Look up all items in output window
for index in range(oItems.Size()): #Loop through indices of output items
    oItem = oItems.GetItemAt(index) #Access output item
    if oItem.GetType() == SpssClient.OutputItemType.PIVOT: #Continue only if output item is pivot table
        pTable = oItem.GetSpecificType() #Access pivot table
        print pTable.GetTitleText() #Print table title to output window
end program.

همانطور که مشاهده می‌کنید، دسترسی به پنجره خروجی فعال توسط تابع SpssClient.GetDesignatedOutputDoc امکان‌پذیر شده و مولفه‌های خروجی درون متغیر oDoc قرار می‌گیرد. مشخص است که در اینجا استفاده از پیشوند o برای متغیرها، بیانگر Object است. به همین ترتیب هر یک از مولفه‌های خروجی توسط دستور oDoc.GetOutputItems درون متغیر oItem قرار می‌گیرند. حلقه تکرار (for) که در خط بعدی مشاهده می‌کنید، برای دسترسی به تک تک گزینه‌های پنجره خروجی و انتخاب جدول محوری (Pivot Table) از بین آن‌ها است. در انتها نیز با استفاده از دستور print pTable.GetTitleText، عنوان‌ جدول‌های محوری موجود در پنجره خروجی SPSS چاپ خواهد شد.

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

به این ترتیب اگر محتوای پنجره خروجی شما مانند تصویر 2 باشد با اجرای کد بالا، نتیجه زیر را در پنجره Output خواهید گرفت.

begin program. 
import spssaux 
print spssaux.GetVariableNamesList() 
end program. 
[u'id', u'gender', u'VAR00001', u'VAR00002'] 
 
*Look up all table titles with SPSS Python Scripting. 
 
begin program. 
import SpssClient 
SpssClient.StartClient() 
oDoc = SpssClient.GetDesignatedOutputDoc() #Access active output window 
oItems = oDoc.GetOutputItems() #Look up all items in output window 
for index in range(oItems.Size()): #Loop through indices of output items 
    oItem = oItems.GetItemAt(index) #Access output item 
    if oItem.GetType() == SpssClient.OutputItemType.PIVOT: #Continue only if output item is pivot table 
        pTable = oItem.GetSpecificType() #Access pivot table 
        print pTable.GetTitleText() #Print table title to output window 
end program. 
Statistics 
Unique observation identifier 
Gender of the spider
python in spss title extract
تصویر ۲

همانطور که مشخص است در بخش کدهای پایتون، از توابع مربوط به فراخوانی اطلاعات توسط ابزار SpssClient از درون SPSS استفاده شد و از دستوراتی که مربوط به زبان کدنویسی SPSS Syntax بود کمکی نگرفتیم.

قابلیت برنامه‌پذیری پایتون در SPSS

در این سبک، امکان استفاده از توابع و دستورات SPSS‌ درون کدهای نوشته شده در زبان پایتون فراهم می‌شود و این پایتون است که ابزار تبادل داده‌ها را به SPSS فراهم می‌سازد. برنامه‌ای که در ادامه مشاهده می‌کنید، وظیفه دارد که اسامی متغیرهای تعریف شده در SPSS را تبدیل به حروف کوچک کند. همانطور که می‌بینید از SpssClient خبری نیست.

*Lowercase all variable names.

begin program.
import spss
for ind in range(spss.GetVariableCount()): #Loop through variable indices
    varNam = spss.GetVariableName(ind) #Look up each variable name
    spss.Submit('RENAME VARIABLES %s = %s.'%(varNam,varNam.lower())) #Rename variable by lowercase name
end program.

در بخش حلقه تکرار (for) براساس تعداد متغیرهای تعریف شده در ویرایشگر داده، اسامی متغیرها استخراج شده و البته با استفاده از زبان کد نویسی SPSS درون برنامه پایتون این کار صورت گرفته است. مشخص است که تابع spss.GetVariableName این کار را به عهده دارد. همچنین دستور spss.submit نیز برای تغییر نام متغیرها استفاده شده است. همانطور که می‌بینید، فقط از امکانات تعریف حلقه تکرار پایتون برای انجام عملیات کمک گرفته‌ایم.

بطور خلاصه می‌توان گفت که در این مثال، SPSS، کدهایی را به پایتون ارسال می‌کند. پایتون به دنبال اسامی متغیرها گشته و سپس با استفاده از دستور RENAME VARIABLES که مخصوص SPSS است اسامی متغیرها را به صورت حروف کوچک در می‌آورد. به این ترتیب به نظر می‌رسد که کد SPSS شامل برنامه‌ای از پایتون است که درون آن قطعه کدی از SPSS وجود دارد. بنابراین اگر دو متغیر در مجموعه داده فعال به نام‌های First_VARiable و SECOND_VAriable داشته باشیم،‌ با اجرای کدی که در بالا اشاره شد، اسامی متغیرها به حروف کوچک و به شکل first_variable و second_variable تبدیل خواهند شد.

capital variable names

نکته: توجه داشته باشید که امکان استفاده از فاصله خالی (space) برای نام‌گذاری متغیرها در SPSS وجود ندارد به همین دلیل با علامت “_” بخش‌ها و کلمه‌های به کار رفته در نام متغیر را جدا کرده‌ایم.

تفاوت قابلیت برنامه‌پذیری و کدنویسی در اینجا نهفته است که معمولا هنگامی که از قابلیت برنامه‌پذیری پایتون در SPSS استفاده می‌کنید، هدف انجام راحت‌تر دستورات و عملیات و استفاده از امکانات پایتون برای انجام کارهای تکراری است. در حالیکه اگر از کدنویسی پایتون در SPSS کمک می‌گیریم، هدف انجام کاری است که به تنهایی با کدهای SPSS امکان ندارد و تنها با استفاده از امکاناتی که توسط توابع و دستورات پایتون وجود دارد، می‌توان آن عملیات را انجام داد.

خلاصه و جمع‌بندی

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

اگر علاقه‌مند به یادگیری مباحث بیشتر در مورد SPSS و پایتون هستید، آموزش‌های زیر به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۲ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

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