توسعه دهنده نرم افزار، علاقمند به دنیای متن باز.
دقیقا چه کارهایی میشه با Python انجام داد؟ 3 کاربرد اصلی پایتون
اگر به یادگیری پایتون فکر میکنید -- یا به تازگی یادگیری آنرا شروع کردید -- ممکنه از خودتون بپرسید؟
"من دقیقا برای انجام چه کارهایی میتونم از پایتون استفاده کنم؟"
خب، این سوال زیرکانه ایه و براحتی نمیشه بهش پاسخ داد، چون پایتون کاربرد های زیادی داره.
اما با گذشت زمان من متوجه شدم که کاربرد های پایتون رو میشه به سه دسته بندی محبوب تقسیم کرد:
- توسعه نرم افزار های تحت وب (Web Development)
- علم داده (Data Science) -- شامل یادگیری ماشین (Machine Learning)، تحلیل داده (Data Analysis) و تجسم داده (Data Visualization)
- اسکریپت نویسی (Scripting)
در ادامه راجع به هرکدوم از این دسته ها به نوبت صحبت میکنیم.
توسعه نرم افزار های تحت وب (Web Development)
فریمورک های وب مثل Django و Flask که از زبان برنامه نویسی پایتون بهتره میبرند، اخیرا محبوبیت خیلی زیاد برای توسعه وب پیدا کردن.
این فریمورک ها به شما کمک میکنند که کد سمت سرور (Back-End Code) خودتون رو ایجاد بکنید، این کد با کدی که در دستگاه یا مرورگر کاربر اجرا میشه (Front-End Code) متفاوته. اگر با تفاوت های بین کد سمت سرور (Back-End Code) و کد سمت کاربر (Front-End Code) آشنا نیستید به پاورقی مراجعه کنید.
چرا به وب فریمورک نیاز داریم؟
چون فریمورک ها کار مارو برای ساختن منطق سمت سرور خیلی راحت تر میکنن، نگاشت URL ها، ارتباط با پایگاه های داده (Databases) و تولید فایل های HTML که کاربرها با استفاده از مرورگر بتوانند بهش دسترسی داشته باشن.
از کدوم فریمورک پایتون استفاده کنم؟
جنگو (Django) و فلسک (Flask) دو فریمورک محبوب پایتون هستن، اگر تازه شروع به یادگیری کردید توصیه میکنم یکی از این دو را انتخاب کنید.
تفاوت های Django و Flask چیه؟
یک مقاله خیلی خوب در این مورد وجود داره که توسط Gareth Dwyer نوشته شده، اجازه بدید بخشیش رو اینجا نقل قول کنم:
شروع نقل قول
تفاوت های اصلی :
- از ویژگی های اصلی فلسک (Flask) میشه به سادگی (simplicity)، انعطاف پذیری (flexibility)، فلسک حداقل ابزار برای ایجاد بکند مورد نیازتون رو در اختیار میگذاره، به شدت دستتون بازه و میتونید برای هر موضوعی از کتابخانه مناسب کار خودتون استفاده بکنید.
- جنگو (Django) یک بسته کامل از سرویس های مورد نیاز وب رو در اختیارتون میگذاره، که شامل پنل مدیریت (admin panel)، رابط های پایگاه داده (database interfaces)، یک ORM و یک ساختار شخص برای برنامه و پروژه شما میشه.
شما یکی از گزینه های زیر رو انتخاب میکنید :
- فلسک، درصورتی که تمرکز شما روی کسب تجربه و فرصت های یادگیریه، یا اینکه میخواهید کنترل بیشتری روی ابزارهایی که استفاده میکنید داشته باشید (بعنوان مثال پایگاه داده ای که استفاده میکنید و روش ارتباطتون با آن).
- جنگو، اگر تمرکز شما روی محصول نهاییه. مخصوصا وقتی شما در حال طراحی یک نرم افزار متداول مثل یک وبسایت اخبار، یک فروشگاه اینترنتی، یا وبلاگ هستید، و دوست دارید برای انجام هرکاری یک راه واضح پیش رو داشته باشید.
پایان نقل قول
به عبارت دیگه، اگر شما تازه کار هستید، احتمالا Flask گزینه بهتری باشه چون با ابزارهای کمتری سر و کله میزنید، و همچنین اگر به شخصی سازی بیشتری نیاز دارید.
با توجه به تجربه دوست مهندس داده من Jonathan T Ho، فلسک با توجه به انعطاف پذیری زیادش نسبت به جنگو برای ساخت وبسرویس ها (REST API's) فریمورک مناسب تریه.
و اگر میخواهید به سرعت و بدون اتلاف وقت به محصول مورد نظرتون برسید، جنگو گزینه مناسب تریه.
خب حالا بریم سراغ مبحث بعدی!
علم داده ای (Data Science) -- شامل یادگیری ماشین (Machine Learning)، تحلیل داده (Data Analysis) و دیداری سازی داده ها (Data Visualization)
اول از همه، بیاید ببینیم یادگیری ماشین چیه.
من فکر میکنم بهترین روش برای توضیح اینکه یادگیری ماشین چیه، استفاده از یک مثال ساده است.
فرض کنیم شما میخواهید برنامه ای بنویسید که بصورت خودکار تشخیص بده چه چیزی داخل یک عکسه.
بنابراین، با توجه به عکس زیر (تصویر 1)، شما میخواهید برنامه تون تشخیص بده که این یک سگه.
و وقتی عکس زیر (تصویر 2) رو به نرم افزار دادید، تشخیص بده که این یک میزه.
ممکنه با خودتون بگید، خب من چند خط کد مینویسم که اینکارو انجام بده. بعنوان مثال اگر تعداد زیادی پیکسل به رنگ قهوه ای روشن وجود داشت، میتونیم بگیم که اون یه سگه.
یا شاید، شما بخواید گوشه های داخل عکس رو شناسایی کنید، بعد بگید اگر تعداد زیادی خط مستقیم وجود داشت اون یه میزه.
اگرچه، این رویکرد خیلی سریع دچار مشکل میشه، اگر یه سگ سفید داخل عکس بود که هیچ موی قهوه ای نداشت چی؟ اگر عکس فقط قسمت های گرد میز رو نشون میداد چی؟
اینجا جاییه که یادگیری ماشین وارد صحنه میشه.
یادگیری ماشین معمولا الگوریتمی را پیاده سازی میکند که بصورت خودکار یک الگو را در ورودی داده شده پیدا میکند.
شما میتونید مثلا 1000 عکس از سگ و 1000 عکس از میز بعنوان ورودی به یک الگوریتم یادگیری ماشین بدید. سپس اون الگوریتم متوجه تفاوت های بین یک سگ و میز میشه.وقتی شده یک عکس جدید از یک سگ و یا میز بهش بدید، توانایی تشخیص اینکه کدومه (میز یا سگ) رو داره.
من فکر میکنم یجورایی شبیه به بچه ای که چیزای جدید یاد میگیره میمونه. چطور یک بچه یاد میگیره که یچیز جدید شبیه به یه سگه یا یک میز؟ احتمالا با استفاده از تعداد نمونه.
احتمالا شما مستقیم نمیرید به یک بچه بگید، "اگر چیزی پشمالو و دارای موی روشن قهوه ای داشت، ممکنه یک سگ باشه."
شما احتمالا بهش میگید، "این یه سگه. اینم یه سگ دیگه. این یکی یه میزه، اون یکی هم یه میزه."
یادگیری ماشین هم تقریبا همینجوری کار میکنه.
شما میتونید همین ایده رو به موارد زیر تعمیم بدید :
- سامانه های پیشنهاد دهنده (به یوتیوب، آمازون و نت فلیکس فکر کنید)
- تشخیص چهره
- تشخیص صدا
در میان برنامه های کاربردی دیگه.
الگوریتم های یادگیری ماشین که احتمالا راجع بهشون شنیده اید:
- شبکه های عصبی (Neural Networks)
- یادگیری عمیق (Deep Learning)
- ماشین بردار پشتیبانی (Support Vector Machines)
- جنگل تصادفی (Random Forest)
شما میتونید از هرکدوم از این الگوریتم ها برای حل مشکل تشخیص عکس که پیش تر در موردش صحبت کردم استفاده کنید.
استفاده از پایتون برای یادگیری ماشین
تعدادی کتابخانه و فریمورک معروف یادگیری ماشین برای پایتون وجود داره.
دو نمونه از محبوب ترین آنها scikit-learn و Tensorflow هست.
- سایکیت-لرن بصورت پیشفرض شامل یک سری از الگورتیم های یادگیری ماشین معروف میشه، که پیش تر بهشون اشاره کردیم.
- تنسورفلو بیشتر یک کتابخانه سطح پایینه که به شما اجازه میده الگوریتم های یادگیری ماشین شخصی سازی شده خودتون رو ایجاد کنید.
اگر به تازگی یک پروژه یادگیری ماشین شروع کردید، پیشنهاد میکنم برای شروع از scikit-learn استفاده کنید، اگر دچار مشکل برای بهینه سازی شدید، سپس شروع به استفاده از Tensorflow بکنید.
چطور میتونم یادگیری ماشین یاد بگیریم؟
برای یادگیری پایه های یادگیری ماشین، دوره یادگیری ماشین دانشگاه استنفورد و یا دوره Caltech را پیشنهاد میکنم.
توجه داشته باشید که شما باید دانش ابتدایی در مورد حساب و جبر خطی داشته باشید تا بتوانید بعضی از محتواییت این دوره ها را متوجه بشید.
سپس به شما پیشنهاد میکنم مطالبی که از آن دوره ها یادگرفتید را در Kaggle تمرین کنید. در این وبسایت افراد در حال رقابت با همدیگه برای پیدا کردن بهترین الگوریتم برای حل مشکل داده شده هستند. در اینجا میتوانید آموزش های خوبی برای تازه کار ها هم پیدا کنید.
در مورد تحلیل داده ها (Data Analysis) و دیداری سازی داده ها (Data Visualization) چطور؟
برای کمک به فهم این موضوع ها بذارید یک مثال ساده براتون بزنم.
فرض کنیم شما برای شرکتی کار میکنید که یک سری محصول بصورت آنلاین میفروشه.
پس به عنوان یک تحلیل گر داده، شما یک نمودار میله ای به شکل زیر رسم میکنید :
با توجه به این نمودار ما میتونیم برداشت کنیم که مردها بیش از 400 واحد از این محصول و خانم ها حدود 350 واحد محصول در این یکشنبه خاص خریداری کرده اند.
بعنوان یک تحلیل گر داده، شما ممکنه به چند توجیه برای این تفاوت فروش برسید.
یکی از توجیه های واضح این هست که محصول مورد نظر بین آقایون از محبوبیت بیشتری نسبت به خانم ها برخوردار بوده. توجیه دیگه ممکنه این باشه که نمونه مورد بررسی ما خیلی کوچیکه و این اتفاق شانسی رخ داده. و آخر اینکه شاید مردا به دلیلی در روز های یکشنبه تمایل بیشتری برای خرید این محصول دارند.
برای بررسی اینکه کدام یک از این موارد درسته، شما یک نمودار دیگه مشابه نمودار زیر رسم میکنید.
بجای اینکه فقط داده ها در روز یکشنبه را بررسی کنیم، به داده های کل هفته نگاه می کنیم، همینطور که مشاهده میکنید، با توجه به نمودار میبینیم که این تفاوت فروش در روز های مختلف شکل پایداری داره.
با توجه به این تحلیل، شما ممکنه به این نتیجه متقاعد کننده برسید که این محصول نزد مردها از محبوبیت بیشتری برخورداره.
اگر بجای این نمودار، نموداری مشابه زیر می دیدید چطور؟
خب، چه توجیهی برای این تفاوت فروش در یکشنبه ها وجود داره؟
ممکنه بگید، مردها به یه دلیلی یکشنبه ها بیشتر از این محصول خریداری میکنن. یا، شاید این بصورت اتفاقی بوده و دلیل خاصی نداشته.
این یک مثال خیلی ساده شده از تحلیل داده ای هست که تو دنیای واقعی اتفاق میافته.
من از SQL در هر دو شرکت برای دست یابی به اطلاعات در پایگاه های داده استفاده کردم. سپس از Python و Matplotlib (در گوگل) یا جاوا اسکریپت و D3.js (در مایکروسافت) برای دیدار سازی و تحلیل این داده استفاده کردم.
تحلیل و دیداری سازی داده با پایتون
یکی از محبوب ترین کتابخانه ها برای دیداری سازی داده Matplotlib هست.
این کتابخانه خوبه برای شروع به دو دلیل :
- یادگیریش راحته
- بعضی از کتابخانه های دیگه مثل Seaborn بر پایه این کتابخانه هستن. پس یادگیری Matplotlib باعث میشه بعدا کتابخانه های دیگه هم راحت تر یاد بگیرید.
اسکریپت نویسی (Scripting)
اسکریپت نویسی چیست؟
معمولا به برنامه های کوچکی که طراحی و نوشته میشن تا وظایف ساده رو بصورت خودکار انجام بدن اسکریپت میگن.
بگذارید اینجا یک مثال از تجربه شخصی خودم براتون بزنم.
من قبلا در استارتاپ کوچکی در ژاپن کار میکردم، ما یک سیستم پشتیبانی ایمیلی داشتیم که می بایست توسط اون به سوال کاربرانی که از طریق ایمیل پرسیده میشد پاسخ بدیم.
وقتی اونجا کار میکردم، باید تعداد ایمیل ها بر اساس کلیدواژه های خاص میشمردم تا بتوانیم ایمیل های دریافتی را تحلیل کنیم.
میتونستیم اینکارو دستی انجام بدیم، اما بجاش، یه برنامه ساده نوشتم، یه اسکریپت ساده که این کارو بصورت خودکار انجام بده.
درواقع ما اونموقع از Ruby برای اینکار استفاده کردیم، اما Python هم زبان بسیار خوبی برای این مدل کارهاست. بیشتر بخاطر این پایتون واسه اینجور کارها مناسبه، چون نوشتار (Syntax) ساده ای داره و به سرعت میشه یه برنامه ساده باهاش نوشت و تستش کرد.
برنامه های تعبیه شده (Embedded Applications) چطور؟
با استفاده از کامپیوتر های کوچک و برد هایی مثل Raspberry Pi و قدرت پایتون تقریبا هرکاری تو این زمینه میتونید انجام بدید.
در مورد توسعه بازی های چی؟
شما میتونید با استفاده از کتابخانه PyGame برای توسعه بازی ها استفاده کنید، اما این کتابخانه معروف ترین موتور بازی سازی موجود نیست. بیشتر میتونید ازش بصورت تفریحی برای بازی سازی استفاده بکنید، اما اگر دنبال بازی سازی حرفه ای هستید شخصا این کتابخانه رو پیشنهاد نمیکنم.
بجاش پیشنهاد میکنم برای اینکار از Unity و زبان برنامه نویسی #C استفاده کنید، که یکی از محبوب ترین موتور های بازی سازیه. یونیتی به شما اجازه میده برای بسیاری از پلتفرم ها از جمله مک، ویندوز، iOS و اندروید بازی بسازید.
برای توسعه برنامه های دسکتاپی چکار میشه کرد؟
میتونید با استفاده از Tkinter، Kivy، PyQt و زبان پایتون برای دسکتاپ برنامه های مختلفی بنویسید، اما این محبوب ترین گزینه برای توسعه برنامه های دسکتاپی نیست.
در عوض، استفاده از زبان هایی مثل جاوا، سی شارپ و سی پلاس پلاس برای اینکار متداول تر هست.
اخیره برخی از شرکت ها شروع به استفاده از JavaScript برای توسعه برنامه های دسکتاپی روی آوردن.
بعنوان مثال نسخه دسکتاپی نرم افزار Slack از Electron برای توسعه استفاده میکنه. الکترون به شما اجازه میده برنامه های دسکتاپی با استفاده از جاوااسکریپت بسازید.
شخصا اگر بخوام سمت توسعه برنامه های دسکتاپ برم از جاوا اسکریپت استفاده میکنم، چون به شما اجازه میده از بخش هایی از کد سمت وب استفاده مجدد بکنید.
پایتون 3 یا پایتون 2 ؟
من پایتون نسخه 3 رو پیشنهاد میکنم، چون مدرن تر و ویژگی های بیشتری در اختیارتون میگذاره، و اخیرا خیلی از نرم افزار ها مثل فریمورک Django شروع به توقف پشتیبانی از پایتون 2 در نسخه های جدیدتر میکنن.
پاورقی : توضیح در مورد کد سمت سرور (Back-End Code) و کد سمت کلاینت (Front-End Code)
فرض کنیم شما میخواهید برنامه ای مثل اینستاگرام بنویسید.
پس شما باید برای دستگاه هایی که میخواهید پشتیبانی کنید کد سمت کلاینت (Front-End Code) بنویسید.
برای مثال ممکنه استفاده بکنید از :
- سوییفت (Swift) برای iOS
- جاوا برای اندروید
- جاوا اسکریپت برای مرورگر ها
هر کد روی نوع دستگاه / مرورگر مخصوص به خودش اجرا میشه، این مجموعه کد تعیین میکنه ظاهر برنامه به چه شکل باشه، و اینکه دکمه ها چطوری باشن وقتی روشون کلیک می کنید.
در هر صورت شما نیاز به قابلیتی دارید که بتوانید عکس ها و اطلاعات کاربران رو ذخیره بکنید، شما باید اینکارو در سرور خودتون انجام بدید و نه فقط در دستگاه خود کاربر، که دوستان هر شخص هم بتونن به این اطلاعات دسترسی پیدا بکنند.
اینجا جاییه که کد سمت سرور (Back-End Code) وارد عمل میشه، شما نیاز دارید کد سمت سروری بنویسید که کارهایی مشابه موارد زیر انجام بده:
- مشخص کنه که هر فرد چه افرادی رو دنبال میکنه
- عکس هارو فشرده کنید که حجم زیادی از سرور اشغال نکنه
- به کاربران تازه وارد پروفایل ها و عکس های مختلف پیشنهاد بدید
این تفاوت بین کد سمت سرور و کلاینته، درواقع کد سمت سرور منطق و محاسبات برنامه رو به عهده میگیره و کد سمت کلاینت زیبایی ظاهری برنامه.
راستی، پایتون تنها گزینه خوب برای نوشتن کد سمت سرور نیست، گزینه های محبوب دیگه ای هم وجود دارن شامل Node.js که از جاوا اسکریپت استفاده میکنه.
این مقاله ترجمه آزاد با کمی تغییر بود از مقاله زیر :
امیدوارم براتون مفید بوده باشه، بعضی از قسمت های مقاله نظر شخصی خودم نیست و سعی کردم به اصل مقاله لطمه ای وارد نشه، در بعضی از قسمت ها هم توضیحات بیشتری خودم اضافه کردم.
اگر پیشنهادی برای بهتر شدن این مقاله داشتید خیلی خوشحال میشم در قسمت کامنت ها درمیون بگذارید.
موفق و پیروز باشید :)
مطلبی دیگر از این انتشارات
دیزاین پترن Adapter و bridge در php
مطلبی دیگر از این انتشارات
دیباگ کدهای PHP وردپرس در محیط مرورگر
مطلبی دیگر از این انتشارات
آبجکتها در php با Identifier ارسال میشوند