<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مهدی قدسی‌زاده</title>
        <link>https://virgool.io/feed/@ghodsizadeh</link>
        <description>اینجا در مورد برنامه‌نویسی علمی و فنی، مدیریت کارها و کمی هم در رابطه با کتاب می‌نویسم.</description>
        <language>fa</language>
        <pubDate>2026-07-06 18:19:06</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/44584/avatar/ic54Vm.jpeg?height=120&amp;width=120</url>
            <title>مهدی قدسی‌زاده</title>
            <link>https://virgool.io/@ghodsizadeh</link>
        </image>

                    <item>
                <title>چطور در هفته با کمک ClickUp یک روز بیشتر داشته باشیم؟</title>
                <link>https://virgool.io/@ghodsizadeh/%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%DA%A9%D8%A7%D8%B1%D9%87%D8%A7-%D8%A8%D9%87-%D8%B3%D8%A8%DA%A9-clickup-%DA%86%D8%B7%D9%88%D8%B1-%D8%AF%D8%B1-%D9%87%D9%81%D8%AA%D9%87-%DB%8C%DA%A9-%D8%B1%D9%88%D8%B2-%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1-%D8%AF%D8%A7%D8%B4%D8%AA%D9%87-%D8%A8%D8%A7%D8%B4%DB%8C%D9%85-uvimgsxkq8sw</link>
                <description>همه ما پروژه‌هایی داریم که به صورت پیوسته و روزمره ما رو مشغول می‌کنند. هر کدام از ما به روشی برای این پروژه‌ها برنامه‌ریزی می‌کنیم. ممکنه روی کاغذ برنامه‌ریزی داشته باشیم و برای تعریف‌ش از نقشه‌ذهنی استفاده کنیم و برای کارهامون چک‌لیست بنویسیم. ممکنه در برنامه یادداشت کامپیوتر و گوشی‌مون وظایف رو بنویسم و هر روز بروزش کنیم یا با استفاده‌ از نرم‌افزارهای خوبی مثل Todoist یا Trello وظایف رو تعریف کنیم و به صورت گروهی پیشرفت پروژه رو دنبال  کنیم و نقشه روشنی برای این‌کار تعریف کنیم.یکی از ابزارهای جدید برای برنامه‌ریزی کارهای شخصی و پروژه‌‌های بزرگ تیمی سرویس Clickup است. این سرویس نسبتا جدید که بسیاری از خدمات پرمیوم ابزارهای دیگه رو به صورت رایگان در اختیار کاربر‌ها قرار می‌ده  در آخرین دور سرمایه‌گذاری که دریافت کرده به یک یونیکورن جدید در دنیای ابزارهای مدیریت پروژه تبدیل شده در این نوشته سعی می‌کنم برخی از ویژگی‌های خوب این سرویس رو معرفی کنم و بگم چرا استفاده از این ابزار می‌تونه یک راه‌حل مناسب برای بهبود عملکرد شما بشه یا به قول خودشون:با استفاده از کلیک‌آپ یک روز هفته خود صرفه‌جویی کنید.Save one day every week. Guaranteed.https://kutt.it/l1l1X6اگر دوست دارید می‌تونید ویدیو معرفی Clickup رو در لینک زیر مشاهده کنید و به صورت تصویری با ویژگی‌های اون آشنا بشید. https://youtu.be/JsORGgx0t2I برای معرفی کلیک‌آپ اول ویژگی‌های مهم اون برای مدیریت پروژه رو مطرح می‌کنم و بعد نحوه ایجاد محیط‌ها و فضای کار برای پروژه‌های شخصی و تیمی‌ را به شما نشان خواهم داد.برد کانبانبرد‌های کانبانمثل بسیاری از سرویس‌های مدیریت پروژه و محصول برد کانبان یکی از ابزارهای مهم و ضروی در این سرویس است. در هر برد شما امکان ساخت بی‌نهایت ستون دارید که می‌تونید هر کدام از آن‌ها را به سه بخش وضعیت‌های  فعال، وضعیت‌های  انجام شده و وضعیت‌های بسته‌شده تقسیم کنید و این وضعیت‌ها را برای استفاده در بردهای آتی به عنوان Template ذخیره کنید. برای نمونه من برای تولید محتوا در ویرگول و یوتوب از یک برد با وضعیت‌‌های زیر استفاده می‌کنم:باز: برای موضوعاتی که ایده نوشتن و ساختن محتوا برای آن‌ها رو دارمنوشتن: برای موضوعاتی که در  مرحله نوشتن هستند.ویرایش: برای موضوعاتی که به صورت پیش‌نویس نوشته شده‌اند و آماده ویرایش نهایی هستند.ساخت ویدیو: برای موضوعاتی که برای آن‌ها ویدیویی آماده می‌کنم و آماده ساخت ویدیو هستند.ویرایش ویدیو: برای ویرایش ویدیو‌های ضبط شدهانتشار در یوتوب: برای موضوعاتی که ویدیو وجود داره اول آن‌ها رو در یوتوب منتشر می‌کنم.انتشار در ویرگول: اگر محتوا ویدیوی بود بعد از انتشار ویدیو محتوا را در ویرگول با لینک ویدیو منتشر می‌کنم  و اگر ویدیویی نبود بعد از ویرایش متن مستقیما در ویرگول منتشر می‌کنم.بسته: هر موضوع بعد از انتشار در رسانه‌های مورد نظر را در وضعیت بسته قرار می‌دم.من این مثال را زدم تا یک مورد از استفاده شخصی از این ابزارها رو بیان کنم ولی معمولا در کارهای تیمی انگیزه‌ استفاده از این ابزارها بیشتر است. برای مثال ما در تیم فنی  پزشک‌خوب برای پیش‌برد‌ کارهای فنی در اسپرینت‌ها از وضعیت‌های زیر استفاده می‌کنیم تا به راحتی فرایند پیاده‌سازی ویژگی‌ها، ارزیابی و رفع باگ‌های در میان اسپرینت را مدیریت کنیم.وضعیت وظایف برای کارهای فنیوظایفامکانات گسترده برای تعریف تسک‌ها مهمترین نقطه قوت سرویس کلیک‌‌آپ است. ممکن است که برخی از ویژگی‌های تعریف تسک را در کلیک‌آپ در نرم‌افزارهای دیگر مشاهده کنید ولی در این مورد قطعا هر چه همه خوبان دارند Clickup یکجا دارد و با امکانات گسترده خود شما رو از سردرگمی میان تسک‌ها رها می‌کند.مدیریت تسک‌ها در کلیک‌آپبرای درک بهتر باز هم با یک مثال پیش‌بریم. من برای انجام یک پروژه نیاز داشتم که چند سایت را کراول کنم. برای این پروژه مشخص یک برد مشخص تعریف کردم و برای وبسایت یک کارت مشخص تعریف کردم. این کارت نشان‌دهنده تسک مورد نظر بود و من با جابجا کردن اون بین وضعیت‌ها می‌تونستم هر لحظه وضعیت پروژه را ارزیابی کنم. اما این تنها نکته کارت‌ها نیست. شما می‌تونید کارت‌ها رو با توجه به نیاز خودتون شخصی سازی کنید. عکس زیر نشان دهنده کارت مربوط کراول سایت عصر ایران است. در بخش سمت چپ عنوان تسک و توضیح مختصر(در این تسک و مبسوط در تسک‌های پیچیده‌تر) نوشته می‌شه تا تسک به صورت واضح تعریف شده باشه. این امکان برای تسک‌ها وجود داره تا برای اونها تگ‌ تعریف بشه تا در صورت نیاز امکان فیلتر کردن اونها وجود داشته باشه. در بالا سمت چپ وضعیت تسک و افرادی که در پیشبرد تسک مشارکت دارند نشون داده میشه. در بالا سمت راست زمان ساخت تسک، زمان صرف شده( با استفاده از خود کلیک‌آپ یا افزونه‌هایی که بهش متصل می‌شن.) نمایش داده میشه. در سمت راست تصویر فعالیت‌ها و چت‌های مرتبط با تسک نمایش داده ‌می‌شن.این ویژگی این امکان رو به شما میده که با گفتگو درون خود تسک نیاز خودتون رو به استفاده از پیام‌رسان‌های دیگه مثل اسلک و تلگرام برای پروژه رفع کنید و با تمرکز بیشتر روی تسک خودتون کار کنید و از حواشی احتمالی به دور باشید. علاوه بر این جزئیات فعالیت‌ها از تغییر وضعیت تسک‌ تا تیک خوردت چک لیست‌ها رو می‌تونید در این بخش مشاهده کنید.تسک‌ها در کلیک‌آپرکورد ویدیو یک از ویژگی‌های جذاب در تسک‌هاست. شما در کلیک‌آپ می‌تونید برای تشریح دقیق‌تر کارها یا انتقال پیام از صفحه مانیتور خودتون فیلم‌برداری کنید و توضیحات مورد نیاز رو مثلا برای تغییرات در یک صفحه وب به هم‌ تیمی خودتون منتقل کنید.علاوه بر این شما می‌تونید برای هر تسک به تعداد نامتنهای چک لیست و زیروظیفه(ساب‌تسک) که دقیقا مثل یک تسک واقعی هست تعریف کنید. مثلا یک تسک برای فیچر X و چند ساب‌تسک برای پیاده‌سازی اون فیچر. در برد اصلی شما امکان مشاهده ساب‌تسک‌ها به صورت مستقل، به صورت گسترده و متصل به تسک مشاهده کنید یا در صورت نیاز به یک تصویر بزرگ از وظایف اصلی آنها را به صورت کلی از نظر پنهان کنید.کلیک‌آپ برای تکمیل ویژگی‌های هر وظیفه به شما این امکان رو می‌ده تا با استفاده از آپلود معمولی یا اتصال به گوگل، دراپ‌باکس و سرویس‌های مشابه‌ فایل‌ها مورد نیاز هر تسک را به آن تسک متصل کنید.فضای‌کار، فضاها، اسپرینت،  دشبورد و مستنداتبرای توضیح کامل تمام ویژگی‌های کلیک‌آپ یک پست کافی نیست و من سعی می‌کنم حتما ویژگی‌های دیگر کلیک‌آپ مانند اهداف و دشبرد را در پست‌های آتی با توضیح بیشتری معرفی کنم ولی برای آشنایی ابتدایی بخشی از این ویژگی‌ها را در ادامه معرفی می‌کنم.فضای کار یا workspace بخش اصلی فضای clickup است که می‌تونید درون اون بردها و فضای مختلفی را تعریف کنید. من برای هر تیم یک فضای کار تعریف می‌کنم. مثلا برای شرکتی که کار می‌کنم یک فضای کار ایجاد کردم. برای کارهای شخصی یک فضای کار و یک فضای کار دیگر برای کارهای فریلنسی که با یکی از دوستان انجام می‌دم ایجاد کردم. تقریبا برای هر تیم شما می‌تونید یک فضای کار تعریف کنید و البته امکان سطح‌بندی دسترسی به این فضاها و برد‌ها برای هر فضای کار وجود دارد.فضا بخشی از فضای کار شماست. شما می‌توانید برای بخش‌های مختلف یک تیم فضاهای متفاوتی تعریف کنید. مثلا برای بخش محتوا یک فضا برای بخش فنی یک فضا و فضاهای دیگری که با توجه به نیاز شما امکان ساخت آن وجود دارد.دشبورد یک صفحه برای مشاهده وضعیت کلی پروژه یا پروژه‌های در دسترس که این امکان رو به شما می‌ده تا یک آماره کلی از وضعیت تسک‌ها، تسک‌های انجام شده توسط اعضای تیم، یک چت درون گروهی و ... موارد دیگه رو توی یک صفحه ببینید.مستندات این امکان رو به شما می‌ده تا اگر سند یا راهنمایی برای یک محصول، برای فرهنگ سازمان و یا هر چیز دیگه‌ای دارید اونها رو در یک جا و در درون خود کلیک‌آپ با همکاری اعضای تیم‌تون تکمیل کنید.مدیریت کارها به سبک‌ Clickup - چطور در هفته یک روز بیشتر داشته باشیم؟اگر از کلیک‌آپ خوشتون اومد و مایل به استفاده از اون بودید می‌تونید از لینک زیر در این سایت ثبت‌نام کنید.  https://kutt.it/vclickup حتما تجربه خودتون رو از استفاده از کلیک‌آپ و سایر نرم‌افزارهای مدیریت پروژه در کامنت‌ها با من در میون بگذارید.برای دریافت آموزش‌های بیشتر در زمینه برنامه‌نویسی، علوم داده و معرفی سرویس‌ها بدردبخور حتما من رو در ویرگول دنبال کنید. برای ارتباط مستقیم با من می‌تونید از طریق توییتر با من در ارتباط باشید. در ضمن از طریق یوتیوب می‌تونید ویدیوهای آموزشی بیشتری در زمینه‌های که گفتم مشاهده کنید. https://www.youtube.com/channel/UCF3v_GwH3Jg2c-V3hRwmcbg/ </description>
                <category>مهدی قدسی‌زاده</category>
                <author>مهدی قدسی‌زاده</author>
                <pubDate>Sun, 07 Mar 2021 19:33:06 +0330</pubDate>
            </item>
                    <item>
                <title>دسترسی به ClubHouse در اندروید و IOS</title>
                <link>https://virgool.io/@ghodsizadeh/%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-clubhouse-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-podadprxzcdu</link>
                <description>این روزها تب و تاب زیادی در شبکه‌‌های اجتماعی در مورد اپلیکیشن جدید Clubhouse شکل گرفته. اپلیکیشن Clubhouse یک شبکه اجتماعی جدید و متفاوت بر پایه گفت‌وگوی صوتی است که فعلا به صورت رسمی فقط برای گوشی‌های iPhone در دسترس است.در سرویس کلاب‌هوس اتاق‌هایی برای گفت‌وگو توسط کاربران ساخته می‌شه، سازندگان هر اتاق امکان تعیین مشارکت‌کنندگان در بحث رو دارند ولی امکان شنیدن گفت‌وگو‌ها برای کاربران وجود داره. توی این مدت گرو‌ه‌های متفاوتی در این شبکه شکل می‌گیره از مسابقه هفتگی که یکبار بردیا دوستی( میزبان پادکست کرون) برگزار کرد و افراد به سوال‌های بامزه‌اش جواب می‌دادند تا گفت‌وگو‌هایی در مورد محیط‌زیست، امنیت مالی، تولید محتوای فارسی( با حضور علی‌بندری( و مجددا بردیا دوستی)) و جلساتی در مورد فرصت‌‌ها و تهدید‌های این شبکه که معمولا توسط نگین‌ شیرآقایی مدیریت می‌شه.نصب کلاب‌هاوس در اندرویدبرای استفاده از شبکه اجتماعی ClubHouse دو محدودیت عمده وجود داره:۱- دسترسی به گوشی‌های iPhone ۲- دریافت دعوت‌نامه یا تایید شدن توسط یک کاربر قدیمیدر این نوشته سعی می‌کنم راه‌حلی برای هر دوی این موارد ارائه بدم.نصب ClubHouse در گوشی‌های اندرویدیاحتمالا به خاطر ارزیابی بازار و محدودیت منابع بخاطر توسعه‌ راحتتر اپلیکیشن‌های در اکوسیستم IOS بنیانگذاران کلاب‌هوس تصمیم به ساخت اپلیکیشن برای گوشی‌های آیفون گرفتند و فعلا اپلیکیشن رسمی برای اندروید عرضه نشده ولی برخی توسعه‌دهنده‌های سخاوتمند روسی با مهندسی معکوس اپلیکیشن آیفون یک نسخه ساده اندرویدی برای استفاده طرفداران گوشی‌های اندرویدی عرضه کرده.برای استفاده از این نسخه کافیه که وارد صفحه گیتهاب این پروژه بشید و از بخش releases آخرین نسخه رو دریافت کنید و روی گوشی اندرویدی خودتون نصب کنید. هشدار: با توجه به اینکه این نسخه غیر رسمی است ممکنه از طرف کلاب‌هاوس غیرقانونی شناخته بشه و افرادی که از این روش استفاده می‌کنند رو از سرویس خودش حذف کنه. هرچند تا الان همچین اتفاقی نیفتاده ولی این احتمال وجود داره و اگر نگران هستید تا عرضه نسخه رسمی صبر کنید یا یک گوشی آیفون خریداری کنید.نکته: برای ثبت‌نام اولیه کلاب‌هاوس یک پیامک برای شما ارسال می‌کنه اگر از خط ایرانسل استفاده می‌کنید فعلا جای نگرانی نیست و پیامک به شما می‌رسه ولی اگر از خط همراه اول استفاده می‌کنید مجبور هستید تا منتظر تماس بمانید. برای تسریع این کار هر ۱۵ ثانیه یکبار درخواست ارسال پیامک را بزنید تا بعد از ۱ دقیقه تلاش گزینه تماس برای شما فعال شود. در بخش تماس ابتدا (احتمالا) برای تشخیص اینکه شما ربات نیستید از شما درخواست می‌شود که یک عدد را وارد کنید و بعد از فشردن آن یک کد ۴ رقمی برای شما خوانده می‌شود.نکته۲: طبیعتا این مهندسی معکوس نواقصی داره که به مرور متوجه می‌شید ولی فعلا امکان ارسال دعوت‌نامه و ساخت اتاق مهمترین کاستی‌های این نسخه غیر رسمی است.رهایی از بحران دعوت‌نامهیکی از مشکلات مهم کمبود دعوت‌نامه در این سرویس است. در ابتدای کار برای هر فرد دو دعوت‌نامه وجود داره که کاربر امکان ارسال اونها به دوستان خودش را داره. اگر شما در سرویس ClubHouse فعالیت زیادی داشته باشید(چه به عنوان میزبان چه به عنوان شنونده) به مرور تعداد این دعوت‌نامه‌ها افزایش پیدا می‌کنه ولی در عمل نیاز زیادی هم به این دعوت‌نامه‌ها نیست. شما به صورت نامحدود امکان تایید مخاطبان تلفن‌همراهتون رو دارید. اگر شما برای اولین‌بار عضو می‌شید کافیه که به یکی از دوستان خودتون بگید که عضویت شما رو تایید کنه( البته اگر قبل از شما خود کلاب‌هاوس این درخواست رو به دوستانتون نفرستاده باشه.) و همینطور هر زمان که دوست جدیدی  از لیست مخاطبان شما به این سرویس ملحق بشه شما امکان دادن مجوز دسترسی به این سرویس رو دارید.نکته: در یکی از اتاق‌ها نگین‌ شیرآقایی -که واقعا تلاش زیادی برای توسعه فرهنگ کلاب‌هاوس می‌کنه- این نکته رو ذکر کرد که از تایید کردن افراد نا‌آشنا و افرادی که نسبت به رفتار اونها در این شبکه مطمئن نیستید خودداری کنید چون در صورت تخطی فرد از قوانین هم اون شخص هم شخص تایید کننده اون از استفاده از خدمات محروم می‌شن.اگر این نوشته برای شما جذاب بود حتما در شبکه‌های اجتماعی با دوستان خودتون به اشتراک بگذارید.بعد از عضو شدن در این سرویس می‌تونید من رو با شناسه mghodsizadeh پیدا کنید شاید فرصت گپ و گفتی در مورد مسائل مشترک پیدا کردیم.من در توییتر هم با شناسه mghodsizadeh  منتظر آشنایی با شما هستم و خوشحال می‌شم در اینجا یا توییتر از تجربه‌ شما در کلاب‌هاوس بشنوم و اگر فعالید شما را دنبال کنم.</description>
                <category>مهدی قدسی‌زاده</category>
                <author>مهدی قدسی‌زاده</author>
                <pubDate>Sun, 28 Feb 2021 22:57:49 +0330</pubDate>
            </item>
                    <item>
                <title>کروال وبسایت با استفاده از Scrapy</title>
                <link>https://virgool.io/@ghodsizadeh/%DA%A9%D8%B1%D9%88%D8%A7%D9%84-%D9%88%D8%A8%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-scrapy-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-errbosyxqhqm</link>
                <description>در دنیای امروز داده‌های زیادی در سطح وب وجود دارند که می‌تونه به تحلیل‌های ما کمک کنه یا به عنوان ورودی برای تمرین دادن به الگوریتم‌های یادگیری ماشین استفاده بشه. یکی از راه‌های دریافت داده‌ها استفاده از کراولر یا خزنده برای جست و جو در وبسایت‌ها و تجزیه محتوای اون‌ها مطابق نیاز ما است.من برای یک پروژه پردازش متن نیاز به دریافت محتویات خبرهای چند خبرگزاری داشتم. برای این‌کار از فریم‌ورک Scrapy در زبان پایتون استفاده کردم. این فریم‌ورک به شما این امکان رو می‌ده که:درخواست‌های همزمان و متعدد به صفحات وب بفرستید.به راحتی با استفاده از css selector یا xpath selector محتوای مورد نظرتون رو انتخاب کنید.با استفاده از یک pipline که مطابق نیازتون طراحی می‌شه داده‌های خودتون رو تمیز و ذخیره کنید.کروال وبسایت با استفاده از پایتونبرای استفاده از فریم‌ورک Scrapy بعد از ساخت یک Virutal enviroment برای محیط توسعه خودتون با استفاده از دستور زیر اون رو نصب کنید:pip install scrapy ipythonنصب ipython به شما کمک می‌کنه در زمان استفاده از شل (shell) در فریم‌ورک Scrapy محیط مناسب‌تری در اختیار داشته باشید. بعد از نصب Scrapy به راحتی می‌تونید با استفاده از دستورهای زیر پروژه و عنکبوت(spider) خودتون رو بسازید و سریع وارد مرحله تجزیه وبسایت بشید:scrapy startproject tutorial
cd tutorial # برای ورود به پروژه
scrapy genspider mydomain mydomain.com # نام عنکبوت و دامنه‌ای که مایل به خزیدن در آن هستید.بعد از این مرحله می‌تونید. فایل عنکبوت خودتون رو باز کنید و مطابق نیاز خودتون اون رو ویرایش کنید.در ویدیوی زیر یک کراولر برای خبرگزاری عصرایران می‌نویسیم و عنوان خبر، زیر‌عنوان خبر و متن خبر را در یک فایل json ذخیره می‌کنیم. https://www.youtube.com/channel/UCF3v_GwH3Jg2c-V3hRwmcbg در این ویدیو علاوه بر Scrapy از افزونه selectorGadget که برای مرورگرهای بر پایه کرومیوم موجود است استفاده کردم. https://www.youtube.com/watch?v=B_XCgDZLN_Q&amp;t=6s اگر این آموزش برای شما جالب بود با دنبال کردن من در Youtube و ویرگول برای ادامه این‌کار حمایت کنید.و اگر سوالی در مورد این آموزش داشتید می‌تونید در کامنت‌های این پست یا ویدیو از من بپرسید یا از طریق @mghodsizadeh در توییتر با من در ارتباط باشید.یکی از روش‌های تجزیه وب استفاده از ابزارهایی مثل pandas، requests و beautifulsoup است، من در پروژه بورس تهران در پایتون از این ابزارها استفاده کردم شاید مطالعه این متن و کد‌های پروژه برای شما جالب باشه. https://virgool.io/@ghodsizadeh  https://github.com/ghodsizadeh/tehran-stocks </description>
                <category>مهدی قدسی‌زاده</category>
                <author>مهدی قدسی‌زاده</author>
                <pubDate>Fri, 26 Feb 2021 13:14:12 +0330</pubDate>
            </item>
                    <item>
                <title>۴- پردازش داده‌ها برای ماشین‌لرنینگ با sklearn و pandas</title>
                <link>https://dataio.ir/۴-پردازش-دادهها-برای-ماشینلرنینگ-با-sklearn-و-pandas-sqmwkwwoagzt</link>
                <description>بعد از یک وقفه نسبتا طولانی دوباره برگشتیم به دوره ماشین‌لرنینگ با مبحث جذاب پردازش داده‌ها در این مطلب سعی می‌کنیم که دو مشکل رو مطرح کنیم و سعی کنیم که راه‌حل‌های مناسب برای رفع اون مشکل و پردازش داده‌هامون رو بیان کنیم:مقادیر گمشده-missing values: داده‌های که ممکنه در مجموعه داده‌های ما وجود نداشته باشند مثلا در زمان آمارگیری یا در زمان ورود به کامپیوتر وارد نشده باشن یا حتی ممکنه نمونه مورد نظر اون ویژگی رو نداشته باشه.داده‌های کیفی(قطعی) یا categorical داده‌هایی هستند که معمولا با عدد بیان نمی‌شن  این داده‌ها دو دسته‌ هستند:               &gt; ترتیبی-ordinal که در اون‌ها ترتیب اهمیت داره مثل سایز لباس               &gt; اسمی یا nominal که در اون‌ها ترتیب اهمیت نداره مثلا رنگپردازش داده‌هابدون معطلی بریم سراغ راه‌حل‌ها.مقادیر گمشده -missing valuesاگر با دیتاست‌های مختلف کار کرده باشید حتما مقادیر گمشده را داخل آن‌ها مشاهده کردید جایی که به جای یک عدد یا عبارت مقدار nan یا Null رو مشاهده می‌کنید. متاسفانه ابزارهای محاسباتی امکان مدیریت این اتفاق‌ها را ندارند و برای همین قبل از ورود اون‌ها به این ابزار‌ها - مثل الگوریتم‌های یادگیری ماشین- لازم هست که اون‌ها رو کنترل کنیم.یکی از راه‌حل‌های  موجود برای کنترل این مسئله حذف نمونه‌ها با مقادیر گمشده است و مطابق بیشتر اوقات برای مدیریت داده‌های جدولی بهترین ابزار در پایتون کتاباخانه pandas است که برای این منظور متد dropna را برای استفاده در اختیار ما قرار می‌ده:csv_data = &#039;&#039;&#039;A,B,C,D1.0,2.0,3.0,4.05.0,,,8.010.0,11.0,12.0,&#039;&#039;&#039;df = pd.read_csv(StringIO(csv_data))
df.dropna(axis=1)  # remove columns that contain missing values
df.dropna(thresh=3) # drop rows that have fewer than ۲ real values 
df.dropna(subset=[&#039;C&#039;])# only drop rows where NaN appear in specific columns (here: &#039;C&#039;) همونطور که در کد بالا مشاهده می‌کنید ۳ راه برای حذف این داده‌های پیشنهاد شد:حذف تمامی سطر‌هایی که مقادیر گمشده دارند: dropna(axis=1) Iحذف تمامی سطر‌ها که حداقل دو داده حقیقی دارند: dropna(thresh=3) Iحذف سطر‌هایی که فقط از یک زیر مجموعه دارای مقادیر گمشده هستند.df.dropna(subset=[&#x27;C&#x27;]I برای درک بهتر، مشاهده خروجی‌ها و بازی کردن با کدها حتما به صفحه گیتهاب این درس برید و با کلیک بر روی دکمه binder کد‌ها رو به صورت تعاملی اجرا کنید و خروجی رو مشاهده کنید.کد گیتهابجایگزینی مقادیر گمشدههمیشه حذف مقادیر گمشده بهترین راه حل نیست و ممکنه که باعث بشه شما حجم زیادی از داده خودتون رو از دست بدید در این مواقع انتصاب یک مقدار به مقادیر گمشده می‌تونه راه حل بهتری باشه.برای اینکار کتابخانه sklearn یک ابزار برای انتصاب مقادیر گمشده به شماه ارائه می‌دهد. SimpleImputer یک  کلاس از پردازشگر‌های داده‌هااست که از طریق زیر در دسترس است:from sklearn.impute import SimpleImputerاین کلاس به شما این امکان را می‌دهد که داده‌های گمشده را با ۴ استراتژی مختلف پر کنید:میانگین سایر داده‌هامیانه‌ سایر داده‌ها بیشترین تکرارو یا یک عدد ثابتدر این مثال داده‌ها با میانگین سایر داده‌ها جایگزین شده اند:imr = SimpleImputer(missing_values=np.nan, strategy=&#039;mean&#039;)imr = imr.fit(df.values)imputed_data = imr.transform(df.values)در این کد ابتدا یک انتصاب‌گر با قوانین مشخص خودمون می‌سازیم. انتصابگری که داده‌های nan را با میانگین سایر داده‌ها جایگزین می‌کنه و بعد از شناسایی میانگین‌ها - fit- داده‌ها را با مکانیزم انتصابی خودش تبدیل می کند.انتصابگر-SimpleImputer ساده تنها انتصابگر sklearn نیست و خوبه که برای تمرین نگاهی به سایر انتصاب‌گرها KNNImputer مثل داشته باشد.داده‌های کیفی- categoricalتا الان بیشتر با داده‌های عددی کار می‌کردیم ولی در دنیای واقعی مشاهده‌ داده‌های کیفی رویداد رایجی است.   در این بخش سعی می‌کنم تا نحوه کنترل داده‌های کیفی چه به صورت ترتیبی چه به صورت اسمی را بررسی کنیمداده‌های ترتیبیداده‌هایی که ترتیب آن‌ها اهمیت داشته باشه باید با احتیاط و توجه به ماهیتشون به مقادیر عددی تبدیل بشن. به عنوان اندازه لباس ممکنه به صورت کوچک، متوسط و یا بزرگ در داده‌ها وجود داشته باشند و این مورد احتمالا در الگوریتم یادگیری ماشین ما تاثیر گذار خواهد بود.  رمز‌گذاری encoding برای تبدیل این‌داده‌ها معمولا به صورت دستی و با استفاده از تابع map در کتابخانه pandas صورت می‌گیره:size_mapping = {&#039;XL&#039;: 3,                &#039;L&#039;: 2,                &#039;M&#039;: 1}df[&#039;size&#039;] = df[&#039;size&#039;].map(size_mapping) در بخش اول یک تناظر mapping بین سایز لباس و اعداد معرفی کردم و بعد از آن با استفاده از متد map سایز‌ها را به فرمت جدید تبدیل کردیم. اگر نیاز داشته باشیم که از داده‌های جدید رمزشکافی -decoding-  کنیم می‌توانیم با استفاده از dict comperhension تناظر معکوس رو برقرار کنیم.inv_size_mapping = {v: k for k, v in size_mapping.items()}df[&#039;size&#039;].map(inv_size_mapping)داده‌های اسمیداده‌های اسمی در دو بخش در مجموعه داده‌های ما نمایان می‌شه یا در برچسب‌ها یا در داده‌های ورودی  که نحوه کنترل این داده‌ها در این دو حالت متفاوت است.برای تبدیل برچسب‌ها دو راه حل وجود دارد:‍۱-  استفاده از یک تناظر که با استفاده از dict comperhension ساخته می‌شه۲- استفاده از کلاس LabelEncoder از کتابخانه sklearclass_mapping = {label: idx for idx, label in enumerate(np.unique(df[&#039;classlabel&#039;]))}
df[&#039;classlabel&#039;] = df[&#039;classlabel&#039;].map(class_mapping)
inv_class_mapping = {v: k for k, v in class_mapping.items()}df[&#039;classlabel&#039;] = df[&#039;classlabel&#039;].map(inv_class_mapping)
#### LabelEncoder
from sklearn.preprocessing import LabelEncoderclass_le = LabelEncoder()y = class_le.fit_transform(df[&#039;classlabel&#039;].values)
class_le.inverse_transform(y) ## same as inv_class_mappingاما برای تبدیل کردن داده‌های اسمی در قسمت ورودی نیازمند راهکار‌های متفاوتی هستیم، اگر از روش‌های قبلی استفاده کنیم به صورت ضمنی ترتیب رو به داده‌ها تحمیل کردیم که ممکن تاثیر جدی در تحلیل‌های خودمون یا تفسیر‌های الگوریتم داشته باشه.روش پیشنهادی در ادبیات یادگیری ماشین لرنینگ به one-hot encoding مشهور است و در ادبیات اقتصادسنجی به متغیر دامی یا متغیر ساختگی شناخته می‌شه. در این روش به ازای هر برچسب (مثلا به ازای هر رنگ) یک ستون جدید به داده‌ها اضافه میکند که برای نمونه‌هایی که منطبق بر اون ویژگی هستند(مثلا قرمز رنگ) ۱ و برای سایر نمونه‌‌ها صفر است با  این روش هیچ گونه ترتیب رو برای داده‌ها در نظر نمی‌گیرد. برای پیاده‌سازی این روش هم دو راه حل وجود داره:۱-  استفاده از  OneHotEncoder از کتابخانه sklearn۲- استفاده از تابع get_dummies از کتابخانه pandasfrom sklearn.preprocessing import OneHotEncoderX = df[[&#039;color&#039;, &#039;size&#039;, &#039;price&#039;]].valuescolor_ohe = OneHotEncoder()color_ohe.fit_transform(X[:, 0].reshape(-1, 1)).toarray()در این روش اول داده‌های ورودی را در یک متغیر مجزا X نگهداری می‌کنیم بعد از اون یک رمزنگار onehot برای رمزنگاری رنگ‌ها انتخاب می‌کنیم و بعد با متد fit_transform رمزنگار را آماده تبدیل کردن میکنیم و به صورت همزمان داده‌ها رو به حالت onehot رمزنگاری می‌کنیم. توجه داشته باشید که reshape(-1,1) l برای تبدیل داده‌های رنگ به حالت ستونی و جلوگیری از تغییر داده‌های دو ستون دیگه است. برای تمرین سعی کنید که کد بالا را بدون استفاده از reshape اجرا کنید.روش دوم با استفاده از پانداس است، در این روش شما تنها با استفاده از داده‌های ورودی در تابع pd.get_dummies یک دیتافریم جدید با داده‌های جدید خواهید داشت. اگر به تابع پارامتر drop_first را فعال کنید، اولین متغیر به عنوان متغیر مرجع در نظر گرفته شده و حذف می‌شود.pd.get_dummies(df[[&#039;price&#039;, &#039;color&#039;, &#039;size&#039;]])pd.get_dummies(df[[&#039;price&#039;, &#039;color&#039;, &#039;size&#039;]], drop_first=True)این هم از بخش پردازش داده‌ها در قسمت بعدی سعی می‌کنیم بیشتر در مورد نرمال کردن و استاندارد کردن داده‌ها صحبت کنیم. اگر این درس رو دوست داشتید با لایک کردن این درس  و دنبال کردن من در ویرگول  می‌تونید از منتشر شدن قسمت‌های جدید مطلع بشید. اگر برای اولین بار هست که مطالب این دوره رو می‌بینید می‌تونید به جلسه اول این درس مراجعه کنید: https://virgool.io/@ghodsizadeh/%D9%82%D8%B3%D9%85%D8%AA-%D8%B5%D9%81%D8%B1%D8%AF%D9%88%D8%B1%D9%87-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C-%D9%82%D8%B1%D9%86%D8%B7%DB%8C%D9%86%D9%87-ooa5tkefxkjw برای بهره‌مندی حداکثری درس حتما به گیتهاب درس مراجعه کنید و اونجا می‌تونید به صورت تعامل کدهای درس رو مشاهده و اجرا کنید. https://bit.ly/39gnJ6H و برای این که از محتوای تکمیلی هم بهره‌مند بشید می تونید در کانال تلگرام این درس هم عضو بشید. https://bit.ly/2UgZhOp </description>
                <category>مهدی قدسی‌زاده</category>
                <author>مهدی قدسی‌زاده</author>
                <pubDate>Tue, 14 Apr 2020 11:03:01 +0430</pubDate>
            </item>
                    <item>
                <title>۳- آشنایی با کتابخانه scikit-learn - رگرسیون لاجستیک و کمی‌بیشتر</title>
                <link>https://virgool.io/@ghodsizadeh/%DB%B3-%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-scikit-learn-%D8%B1%DA%AF%D8%B1%D8%B3%DB%8C%D9%88%D9%86-%D9%84%D8%A7%D8%AC%D8%B3%D8%AA%DB%8C%DA%A9-%D9%88-%DA%A9%D9%85%DB%8C%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1-zzr5qm7bfrje</link>
                <description>موضوع این قسمت یادگیری ماشین آشنایی با کتابخانه معروف و محبوب scikit-learn هست و سعی می‌کنیم در مورد الگوریتم‌های مربوط به دسته‌بندی-classification- مثال‌هایی را بررسی کنیم ولی به صورت دقیق‌تر در مورد موارد زیر بحث می‌کنیم:کارکرد الگوریتم‌های دسته‌بندی و انتخاب بهترین الگوریتمپیاده‌سازی الگوریتم Preception با استفاده از sklearnپیاده‌سازی الگوریتم رگرسیون لاجستیکقبل از اینکه ادامه این مطلب رو بخونید اگر برای اولین بار هست حتما به قسمت صفر یادگیری ماشین مراجعه کنید. برای دسترسی به کدها هم گیتهاب دوره رو دنبال و ستاره دار کنید با کلیک بر روی گزینه binder در هر فایل می‌تونید کد رو در مروگر خودتون  بدون  نیاز به نصب نیازمندی‌ها اجرا کنید: https://github.com/ghodsizadeh/learn_ml_with_mehdi الگوریتم‌های دسته‌بندیالگوریتم‌های دسته‌بندی الگوریتم‌هایی هستند که برای برچسب‌زدن به داده‌ها استفاده می‌شوند، این الگوریتم‌ها کاربردهای متنوعی دارند، می‌تونید از اونها با استفاده از تاریخچه قیمت سهام صعودی یا نزولی بودن قیمت سهام رو پیش‌بینی کرد یا با استفاده از اطلاعات بیمار در مورد نوع بیماری فرد پیش‌بینی‌هایی ارائه داد یا مثل کاری که در قسمت قبل و این قسمت انجام می‌دیم گونه‌های گیاه زنبق رو دسته‌بندی کرد!انتخاب یک الگوریتم مناسب برای دسته‌بندی نیازمند تجربه و تمرین هست، هر الگوریتم فروض و نواقص خودش را داره مثل اقتصاد در یادگیری ماشین هم ناهار مجانی وجود نداره، تعبیر این عبارت اینه که هیچ الگوریتمی که همیشه بهتر از همه الگوریتم‌ها عمل کنه وجود نداره و برای پیدا‌ کردنش نیازمند هزینه‌دادن هستید.برای پیاده‌سازی یادگیری ماشینی  ۵ قدم اصلی وجود داره که در مورد همه اونها به مرور صحبت می‌کنیم:انتخاب ویژگی‌ها و جمع‌آوری برچسب داده‌‌هاانتخاب یک شاخص عملکردانتخاب الگوریتم دسته‌بندی و الگوریتم بهینه‌سازیارزیابی عملکرد مدلبهبود الگوریتم.در این قسمت و دو قسمت بعدی بیشتر در مورد الگوریتم‌های‌ها صحبت می‌کنیم و بعد از اون به صورت دقیق‌تر در مورد پیش‌پردازش(Preprocessing) و hyper parameter tuning می‌پردازیم.پیاده‌سازی الگوریتم Preception با استفاده از scikit-learnدر قسمت قبلی سعی کردیم با استفاده از روابط ریاضی و با کمک کتابخانه numpy مدل precption را پیاده کردیم و سعی کردیم  دسته‌بندی‌ گل‌های زنبق را با استفاده از اون انجام بدیم. در قسمت قبل خودمون رو محدود به دو گونه زنبق کرده بودیم ولی اینبار از سه گونه رایج این گیاه استفاده می کنیم و همچنان برای تصویر‌سازی مناسب فقط از دو ویژگی برای پیش‌بینی داده‌ها استفاده می‌کنیم. https://gist.github.com/ghodsizadeh/4ea7ce637447d4804010318706da8f3e اینبار داده‌ها را از دیتاست‌های کتابخانه سایکیت‌لرن دریافت می‌کنیم و ویژگی سوم و چهارم(پایتون از صفر می‌شماره) که طول کاسبرگ و گلبرگ هست را به عنوان ویژگی نمونه انتخاب می‌کنیم.با توجه به اینکه داده‌ها یکپارچه هست برای تمرین و تست از تابع train_test_split استفاده می‌کنیم که با توجه به نسبتی که ما مایلیم داده‌‌ها رو تقسیم می‌کنه. ورودی stratify شاید کمی ناآشنا باشه این ورودی به تابع اعلام می‌کنه که توزیع برچسب‌ها(گونه‌های زنبق) بین دو نمونه تست و تمرین تقریبا مشابه باشند، با این کار امکان اینکه الگوریتم با همه داده‌ها آشنا بشه در مرحله تمرین آشنا بشه رو فراهم می‌کنیم.پیش‌پردازش یا Preprocessing یکی از مسائل مهم در الگوریتم‌های یادگیری ماشینی است، در یک پست مجزا مفصل راجع به این موضوع صحبت می‌کنیم. در این مرحله برای اینکه یک پیش‌بینی مناسب ارائه بدیم نیاز به پیش‌پردازش داده‌ها داریم. برای اینکار از ماژول  preprocessing کتابخانه scikit-learn  استفاده می‌کنیم. در این بخش ما یک پردازشگر می‌سازیم که داده‌ها را با توجه به الگوریتم از پیش تعریف شده به یک توزیع با میانگین صفر و واریانس ۱تبدیل می‌کنه. نکته مهم در پیش‌پردازشگرهای scikit-learn: حتما با داده‌ها تمرین پیش‌پردازشگر را آماده کنید(fit) و سایر داده‌ها را با استفاده از transform به حالت جدید تبدیل کنید. شروhttps://gist.github.com/ghodsizadeh/5dfae631591b354daa864bc7fe7a8094 بعد از پردازش داده‌ها با استفاده از مدل خطی Precption در کتابخانه تمرین و پیش‌بینی  را انجام می‌دهیم.روش پیاده‌سازی الگوریتم دسته‌بندی در کتابخانه  scikit-learn به صورت زیر است:ساخت یک شی‌ از الگوریتم مورد نظر با پارامتر‌ها دلخواه model = Classifier(*args) oتمرین با داده‌های تمرین model.fit(x_train, y_train) oپیش‌بینی و ارزیابی عملکردy_pred =  model.predict(x_test)
accuracy_score(y_test,y_pred)
# or 
model.score(x_test,y_test)در پایین پیاده‌سازی شبه‌کد فوق برای مدل preception را مشاهده می‌کنی:مشاهده کد در گیتهابهمانطور که مشاهده می‌کنید این روش با دقت ۹۸ درصد داده‌های تست را دسته‌بندی کرد،‌مشاهده مرزهای تصمیم‌گیری این مدل می‌تواند به درک بهتر عملکرد این مدل کمک کند.همانطور که مشاهده می‌شود با وجود دقت بالای مدل، ماهیت خطی آن  باعث شده که در برخی مشاهدات ( که بیشتر در داده تمرین رخ داده بود)  پیش‌بینی به درستی صورت نگیرد. برای این منظور احتمالا استفاده از یک مدل غیرخطی مانند رگرسیون لاجستیک باعث بهبود عملکرد مدل می‌شود.رگرسیون لاجستیکبا وجود اینکه مدل perception یک شروع خوب برای ورود به یادگیری ماشینی است ولی مهمترین عیب اون عدم همگرایی برای داده‌هایی است که به صورت کامل خطی نیستند همگرا نمی‌شود. رگرسیون لاجستیک( که برای دسته‌بندی و نه الزاما برای رگرسیون استفاده می‌شود.) یکی از جایگزین‌های رایج  برای دسته‌بندی است. برای تعریف ریاضی رگرسیون لاجسیتیک خوبه یک نگاه به ویکی‌پدیا بندازیم:تابع لاجیت یک تابع است که با استفاده از لگاریتم طبیعی یک تناظر بین احتمال یک رویداد و دامنه اعداد حقیقی برقرار می‌کند و احتمال یک رویداد را به صورت رابطه خطی با پیش‌بینی‌کننده‌ها نشان می‌دهد:با محاسبه p از رابطه فوق به تابع لاجستیک می‌رسیم:که با توجه به xهای موجود و با استفاده از روش برآورد درست نمایی بیشینه (Maximum Likelihood Estimation) پارامتر‌ها beta ( یا w طبق علامت‌گذاری این دوره) تخمین زده می‌شود. تابع لاجستیک که پیش‌بینی کننده احتمال یک رویداد است بردی بین ۰تا ۱ دارد.تابع لاجستیک(سیگمویدsigmoid)
برای مقایسه مدل لاجستیک و Perception میشه  به عنوان یک نورون مصنوعی به اونها نگاه کرد که تابع فعالسازی متفاوتی دارند:(تابع فعالسازی تابعی است که روابط خطی را با یک عملیات ریاضی به یک فضای غیرخطی منتقل می‌کند در بحث شبکه‌های عصبی در این مورد صحبت خواهد شد.)حالا وقت مشاهده نحوه اجرا و عملکرد رگرسیون لاجستیک در کتابخانه scikit-learn است و خوشبختانه اینکار خیلی ساده است: https://gist.github.com/ghodsizadeh/46dae417e6fb90b9d62ca7c42f1464d4 مثل قسمت قبل یک مدل لاجستیک با ویژگی‌های مشخص ساخته شد. ورودی C یک پارامتر برای جلوگیری از بیش‌برازش-overfitting- با استفاده regularization است و multi_class ورودی است که تعیین کننده نگاه مدل به خروجی‌ است. ovr برای شرایطی است که هر ورودی می تواند به چند دسته تعلق داشته باشد ولی multinomial برای حالتی است که هر نموه متعلق به یک دسته‌است به عنوان تمرین می‌توانید خط کامنت شده را در کد گیتهاب تغییر بدید و نتیجه را مشاهده کنید.معمولا multinomial روش مناسب‌تری برای دسته‌بندی است ولی برای نمایش بهتر از  ovr استفاده می‌کنیم.هرچند مدل لاجستیک هم پیش‌بینی کاملی ارائه نمی‌کنه ولی به نسبت مدل preception مرزهای بهتری تعیین می‌کنه.امیدوارم که این قسمت براتون مفید بوده باشه و بتونین ازش توی کارهاتون استفاده کنید، مجددا یادآوری می‌کنم اگر دفعه اول هست که این سری رو مطالعه می‌کنید و یا برای دسترسی به لیست محتوای منتشر شده حتما به قسمت صفرش مراجعه کنید: https://bit.ly/2y5WoHA برای دسترسی به کدها و اجراشون به گیتهاب درس و برای دسترسی به کدهای این قسمت به صورت مستقیم به لینک زیر مراجعه کنید:https://bit.ly/3atZnrm اگر مایل بودید از محتوای بیشتری بهره‌مند بشید حتما توی کانال تلگرام این دوره هم عضو بشید و ممنون از اینکه این دوره رو به دوستاتون معرفی می‌کنید.</description>
                <category>مهدی قدسی‌زاده</category>
                <author>مهدی قدسی‌زاده</author>
                <pubDate>Wed, 25 Mar 2020 12:04:22 +0430</pubDate>
            </item>
                    <item>
                <title>قسمت دوم- پیاده‌سازی یک الگوریتم یادگیری ماشین</title>
                <link>https://dataio.ir/قسمت-دوم-پیادهسازی-یک-الگوریتم-یادگیری-ماشین-rtfwfjz1hsyb</link>
                <description>امروز برای اولین بار می‌خوایم وارد دنیای یادگیری ماشین بشیم و با نوشتن یک الگوریتم ساده به کامپیوتر قدرت پیش‌بینی بین دو دسته‌بندی مختلف رو بدیم. در این آموزش سعی می‌کنیم که مفاهیم ابتدایی یک الگوریتم را مرور کنیم. با استفاده از pandas و numpy و matplotlib داد‌ه‌ها رو پردازش کنیم.و در نهایت یک الگورتیم دسته‌بندی خطی پایتون ارائه بدیم.نورون مصنوعی و الگوریتم percetipon نورون مصنوعی یکی از جذاب‌ترین اید‌ه‌ها در دنیای الگوریتم‌هاست و توسعه اون باعث پیشرفت زیاد در حوزه یادگیری ماشینی شده. ایده پشت اون خیلی ساده است تلاش می‌کنه رفتار نورون‌های مغزی رو تکرار کنه، نورون از چند ورودی تغذیه می‌شه و سیگنال‌ها رو دریافت می‌کنه و بعد از پردازش اطلاعات رو به نورون بعدی می‌رسونه یا اگر خودش نورونی تنها باشه خروجی نهایی رو می‌ده، چیزی شبیه به شکل زیر:نورون مصنوعیکاری که ما در این نوشته می‌خواهیم   انجام بدیم ساخت یک مدل با یک نورون هست چیزی که بهش می‌گن مدل prectption ، مدل تعالی یافته اون Multi Layer Perception هست که یکی از مدل‌های آغازین شبکه عصبی عمیق هست. برای اینکه می‌خوایم از numpy برای ساخت مدل استفاده کنیم لازم داریم که از نظر ریاضی این مدل رو بتونیم نمایش بدیم. در فرمول‌های زیر  x_i نشان‌دهنده ورودی i و  w_i وزن هر ورودی است. و فی  تابع تصمیم‌گیری است. در مدلی که ما دو‌دسته‌ای ما  ۱+ نشانگر یک دسته‌بندی و ۱- برای دسته‌بندی دیگر استفاده می‌شه و شکل تابع فی به صورت زیر هست:که  در آن تتا آستانه تصمیم‌گیری هست، معمولا در مدل‌های ماشین‌لرنینگ مسئله بهینه‌سازی با فرض صفر بودن تتا انجام میشه.کاری که در این الگوریتم باید انجام داد( و تقریبا اکثر الگوریتم‌های یادگیری ماشین) پیدا کردن یک وزن مناسب -w- برای مدل هست بعد از یافتن وزن‌های مناسب در مدل با دریافت ورودی‌ها با فرایندی شبیه شکل زیر داده‌های جدید رو دسته‌بندی می‌کنه.قاعده یادگیری در مدل Perception:برای یافتن وزن‌های مناسب روش‌های متفاوتی وجود داره و به صورت معمول هدف این روش‌ها یافتن یک وزن‌هایی است که داده‌های فعلی به بهترین حالت ممکن پیش‌بینی بشوند(maximum likelihood) برای اینکار در مدل perception از گام‌های زیر پیروی می‌کنیم:وزن‌ها را با یک مقدار صفر یا یک عدد تصادفی کوچک مقداردهی می‌کنیم.برای هر نمونه تمرین:        ۱. مقدار پیش‌شده تابع تصمیم y_hat رو محاسبه می‌کنیم.        ۲. وزن‌ها را با استفاده از روش زیر بروز میکنیم.۳. مرحله ۲ را تا زمان همگرایی یا تعداد دفعات مشخص تکرار می‌کنیم.(روشی که برای بروزرسانی استفاده می‌کنیم مشتق شده از روش gradiant decent هست. در این روش هدف این هست که تابع هزینه که در این مسئله مربع خطای پیش‌بینی هست رو حداقل کنه. این یک روش تکرارشونده برای بهینه‌سازی هست و در هر مرحله تلاش می‌کنه به جهتی حرکت کنه که بیشترین میزان کاهش هزینه را داشته باشه.)بعد از انجام کمی محاسبات ریاضی و مشتق گرفتن تابعی که برای بروزرسانی این الگوریتم استفاده میشه بدست میاد:میزان تغییرات وزن‌ها در هر مرحلهدر این رابطه y دسته‌بندی واقعی، yhat دسته‌بندی پیش‌بینی شده و «اتا» نرخ یادگیری است. نرخ یادگیری که از سمت ما تعیین می‌شه به الگوریتم می‌گه چه میزان در جهت حداقل‌سازی  تابع حرکت کنه. معمولا نرخ یادگیری کمتر باعث همگرایی کند‌تر میشه ولی نرخ یادگیری زیاد ممکنه خیلی سریع همگرا بشه و یا در خیلی از موارد از همگرایی جلوگیری کنه، شکل زیر که از این مقاله دریافت شده به خوبی توضیح دهنده اثر نرخ یادگیری در همگرایی مدل‌هاست:پیاده‌سازی در پایتونحالا وقت رسیدن به لحظه موعوده و پیاده‌سازی کدها. در این مرحله ما با ایده برنامه‌نویسی شی‌گرا و با الهام از  مدل‌‌های پیش‌بینی scikit-learn مدل خودمون را پیاده می‌کنیم. کلاس Percetion یک تابع __init__ برای ساخته شدن داره که درون اون ساختار الگوریتم دسته‌بندی ما مشخص میشه. مواردی که تعریف شده نرخ یادگیری«اتا»، دفعات تکرار مراحل بروز رسانی و استیت رندم که برای باز تولید نتایج می‌تونه به کارمون بیاد.تابع مهم بعدی تابع fit هست تابعی که در طی اون فرایند یادگیری برای مدل انجام میشه و وزن‌های مناسب برای اون بدست میاد. روند کار در تابع به این صورته:به وزن‌ها w مقدار دهی اولیه داده ‌می‌شه.برای تعداد دفعاتی که در ابتدا تعریف شده هر وزن بروزرسانی میشه.( خطا مدل در هر دور هم  برای نمایش  محاسبه میشه.)تابع net_input مقدار مطلق تابع «فی» را محاسبه می‌کنه وتابع Predict هم ورودی‌های دریافتی رو متناظرا به دو دسته‌بندی تعریف شده تخصیص می‌ده.کلاس Perception- برای دسترسی به کدها به گیتهاب دوره مراجعه کنید.  حالا ما یک کلاس داریم که توانایی یادگیری دسته‌بندی‌هایی دوتایی را داره و می‌تونه داده‌های جدید را برای ما پیش‌بینی کنه. مرحله بعدی آزمایش الگوریتم هست.آزمایش مدلبرای ارزیابی مدل ما از داده‌های معروف گل‌های زنبق استفاده می‌کنیم. برای اینکه نمایش‌داده‌ها راحتتر باشه.  فقط از دو متغیر طول کاسبرگ «sepal» و طول گلبرگ«petal» استفاده می‌کنیم و البته فقط از دوگونه برای پیش‌بینی استفاده می‌کنیم.داده‌ها رو از پایگاه داده معروف UCI بر می‌داریم.df = pd.read_csv(&#039;https://archive.ics.uci.edu/ml/&#039;        &#039;machine-learning-databases/iris/iris.data&#039;, header=None)در این مرحله داده‌های مربوط به این دوگونه با طول کاسبرگ و گلبرگ متفاوت را ترسیم می‌کنیم.# select setosa and versicolory = df.iloc[0:100, 4].valuesy = np.where(y == &#039;Iris-setosa&#039;, -1, 1)# extract sepal length and petal lengthX = df.iloc[0:100, [0, 2]].values# plot dataplt.scatter(X[:50, 0], X[:50, 1],            color=&#039;red&#039;, marker=&#039;o&#039;, label=&#039;setosa&#039;)plt.scatter(X[50:100, 0], X[50:100, 1],            color=&#039;blue&#039;, marker=&#039;x&#039;, label=&#039;versicolor&#039;)plt.xlabel(&#039;sepal length [cm]&#039;)plt.ylabel(&#039;petal length [cm]&#039;)plt.legend(loc=&#039;upper left&#039;)plt.show()بنظر میاد که الگوریتم ما کار سختی برای پیش‌بینی نداره.#define the classifierppn = Perceptron(eta=0.1, n_iter=10)# Train the classifierppn.fit(X, y)plt.plot(range(1, len(ppn.errors_) + 1), ppn.errors_, marker=&#039;o&#039;)plt.xlabel(&#039;Epochs&#039;)plt.ylabel(&#039;Number of updates&#039;)plt.show()همونطور که مشاهده می‌کنید بعد از ۶ تلاش مدل بدون خطا می‌تونه پیش‌بینی خودش رو ارائه کنه.در نهایت خوبه که ببینیم مدل چه جوری این فضای دوبعدی رو دسته‌بندی می‌کنه.« برای مشاهده کد میتونید به  نوتبوک مربوط به این درس مراجعه کنید.»فضای تصمیم الگوریتم perception برای پیش‌بینی گونه‌های گل زنبقو همونطور که دیدید این الگوریتم خطی ما به خوبی تونست پیش‌بینی خودش را برای دسته‌بندی گونه‌های مختلف گل زنبق ارائه بده.جمع‌بندیما توی این نوشته سعی کردیم یکی از ساده‌ترین روش‌های ممکن برای پیش‌بینی‌های آتی را پیاده‌سازی کنیم. در این مسیر یادگرفتیم که ورودی‌ها با وزن‌های مختلف با هم ترکیب می‌شن و یک خروجی برای پیش‌بینی به ما میدن.برای محاسبه و بروزرسانی وزن‌ها با الگوریتم gradiant decent آشنا شدیم.با مفهوم نرخ یادگیری آشنا شدیم.دیدیم که الگوریتم‌های یادگیری دو مرحله تمرین و پیش‌بینی دارن و سعی کردیم که به یک روش ساده و البته شی‌گرا اون رو پیاده کردیم.دیدیم که مدل‌های خطی هم می‌تونن پیش‌بینی‌‌های دقیقی داشته باشند.برای استفاده بهتر از این قسمت بهتون توصیه می‌کنم که حتما به گیتهاب این دوره سر بزنید، اونجا می‌تونید کدها رو به صورت کامل مشاهده کنید و با کلیک کردن روی آیکون binder در هر نوت‌بوک می‌تونید اون رو در مرورگرتون بدون نصب چیز جدیدی اجرا کنید.در نهایت امیدوارم با قلب‌هاتون در ویرگول، ستاره‌هاتون در گیتهاب و انتشار این دوره با دوستاتون برای ادامه این دوره در دوران قرنطینه به من انگیزه‌ بدید.ممنون می‌شم که اگر نکته، پیشنهاد یا سوالی داشتید، در اینجا، issueهای گیتهاب دوره و یا توییتر با من در میون بگذارید.پ.ن:بخش زیادی از محتوای این قسمت با استفاده از کتاب پایتون و یادگیری ماشین نوشته سباستین راسکا و وحیدمیرجلیلی آماده شد بود و در ادامه نیز این کتاب مرجع اصلی محتوا خواهد بود.فهرست مطالب۰-مقدمه دوره یادگیری ماشین‍۱-یادگیری ماشین چیست؟۲- پیاده سازی اولین مدل یادگیری ماشینی(همین پست)۳- آشنایی با مدل‌‌های scikit-learn(هفته اول فروردین ۹۹) </description>
                <category>مهدی قدسی‌زاده</category>
                <author>مهدی قدسی‌زاده</author>
                <pubDate>Wed, 18 Mar 2020 18:19:48 +0330</pubDate>
            </item>
                    <item>
                <title>قسمت اول- یادگیری ماشین چیست؟</title>
                <link>https://dataio.ir/قسمت-اول-یادگیری-ماشین-چیست-i0pdxxtqjskk</link>
                <description>قبل از اینکه انگشت‌هامون را برای یادگیری ماشین به دکمه‌های کیبرد برسونیم خوبه که مفاهیم اون رو با هم مرور کنیم و کمی در مورد واژگانی که توی این دوره ازشون استفاده می‌شه با هم هم‌زبون بشیم.یادگیری ماشین چی هست؟  تعریفی که من ارائه می‌دم اینه: علم و فنی که با استفاده از اون کامپیوتر با مشاهده‌ داده‌ها و شناخت الگو‌ها امکان پیش‌بینی، دسته‌بندی و یا تصمیم‌گیری در مواجه با داده‌ها یا موقعیت‌های جدید رو پیدا می‌کنه. مثلا می‌تونه صورت ما رو توی یک عکس مدرسه‌ای شناسایی کنه، می‌تونه مقالات ویرگول رو دسته‌بندی کنه و یا می‌تونه توی بازی تخت نرد با توجه به بازی حریف و تاس انداخته شده بهترین بازی رو انجام بده.رایج‌ترین دسته‌بندی برای الگوریتم‌های یادگیری ماشین به این صورته:دسته‌بندی الگوریتم‌های ماشین لرنینگ- عکس از کتاب یادگیری ماشین با پایتون نوشته سباستین راچکا و وحیدمیرجلیلی یادگیری با ناظر(supervised learning) که در اون مجموعه‌ای از داده‌ها با لیبل وجود دارن، مثل یک مجموعه عکس که برچسب خورده یا یک دیتاست از دانش‌آموز‌های مدرسه گل‌ها و در آمدشون ۱۰ سال بعد از فارغ‌التحصیلی. در مورد اول هدف شما برچسب زنی عکس‌های آتی هست(دسته‌بندی) و در مورد دوم هدف شما تخمین درآمد دانش‌آموزان فعلی  بعد از فارغ‌التحصیلی(رگرسیون).فرآیند یادگیری با ناظر به صورت تصویری توی شکل زیر مشخصه:یادگیری با ناظر- عکس از کتاب یادگیری ماشین با پایتون نوشته سباستین راچکا و وحیدمیرجلیلییادگیری بدون ناظر(unsupervised learning) که در اون هیچ برچسبی وجود نداره و کامیپوتر به صورت خودکار در مورد دسته‌بندی اون‌ها  تصمیم‌ می‌گیره. فرض کنید که مقالات ویرگول رو بدون استفاده از تگ‌ها دسته‌بندی کنید. الگوریتم‌های بدون ناظر سعی می‌کنند با استفاده از الگوهای موجود متن‌ها شبیه به هم رو پیدا کنند و ازش استفاده کنند.یادگیری تقویتی -Reinforcement Learning- یک از روش‌های جذاب یادگیری ماشین هست. در این روش ماشین یک سیستم رو به صورتی توسعه میده که در اون بازیکن(agent) به تکرار یک فرایند تصمیم‌ خودش رو بهبود میده. مثال معروف و ابتداییش این روش یک بازی موش، گربه و پنیره که در اون موش سعی می‌کنه بدون اینکه گیر گربه بیفته مسیر رسیدن به پنیر یا پنیرها رو پیدا کنه، مثال معروفش هم بازی آلفا گو هست که توسط مغز گوگل -google brain- توسعه داده شد. البته یادگیری تقویتی یک مثال کاربردی هم داره، سیستم‌های پیشنهاد دهنده، مثل پیشنهاد دهنده فیلم و موسیقی برای شما و پیشنهاد دهنده تبلیغ برای یوتوب! چرخه یادگیری تقویتی- عکس از کتاب یادگیری ماشین با پایتون نوشته سباستین راچکا و وحیدمیرجلیلی  https://virgool.io/@ghodsizadeh/%D9%82%D8%B3%D9%85%D8%AA-%D8%B5%D9%81%D8%B1%D8%AF%D9%88%D8%B1%D9%87-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C-%D9%82%D8%B1%D9%86%D8%B7%DB%8C%D9%86%D9%87-ooa5tkefxkjw نمونه تمرین-training example: یک سطر از جدول داده‌ها که به صورت معادل به اون رکورد، نمونه و یا مشاهده هم می گن.تمرین-training: فیت کردن مدل، برای مدل های پارامتری معادل تخمین پارامتر‌های مدل است.ویژگی‌-Feature: تمام اطلاعاتی که توضیح دهنده ویژگی مشاهده یا نمونه ما است و معمولا با xنمایش داده میشه.هدف-Target: متغیری که نشون دهنده ویژگی مشاهده است. همان برچسب، لیبل و یا متغیر وابسته که با y نشان داده می‌شه.داده‌تمرین- Training set: بخشی از داده که برای تمرین مدل و تخمین زدن‌ پارامتر ها ازش استفاده می‌شه.هایپر پارامتر:پارامتر‌های که ما با استفاده از آن رفتار مدل را هدایت می‌کنیم. مثل لایه‌های شبکه‌ عصبی. در مقابل پارامتر‌هایی که مدل با الگوریتم‌های بهینه‌سازی تعیین می‌کند مانند وزن متغیر‌ها.داده تست- Test set: بخشی از داده که برای ارزیابی مدل استفاده مشه.تابع هزینه- Cost function:  که تابعی هست که با حداقل کردن اون-مثلا حداقل کردن تعداد خطا‌ها- پارامتر‌های مدل تخمین زده می‌شن.احتمالا برای شروع همین واژه‌ها کافی هستند ولی به مرور واژه‌های بیشتری رو باید به دایره واژگان یادگیری ماشینمون اضافه کنیم. به عنوان بخش آخر قسمت اول دوره یادگیری ماشین یکبار با هم نقشه راه رایج برای ساخت یک مدل یادگیری ماشین رو با هم مرور میکنیم.نقشه راه برای ساخت یک سیستم یادگیری ماشین معمولا برای رسیدن به یک مدل کاربردی پیش‌بینی کننده شما نیاز به طی کردن ۴ مرحله دارید.۱- پیش‌پردازش-Preprocessing: توی این مرحله شما داده‌های خام و برچسب‌های اونها رو دارید. سعی می‌کنید از بین داده‌ها بهترین ویژگی‌ها رو انتخاب کنید، داده‌ها رو به شکلی تبدیل کنید که پردازش برای کامپیوتر و الگوریتم‌ها ممکن و سریع باشه و در نهایت داده‌‌هاتون رو به دو بخش تمرین و تست تقسیم می‌کنید. یک مثال از پیش‌پردازش تبدیل داده‌ها به داده‌های بین بازه [0,1] یا انتقالشون به فضای توزیع نرمال استاندارد است.۲- یادگیری: در مرحله دوم داده‌های تمیز خودتون رو به مدل میفرستید و مدل با حداقل کردن تابع هزینه خودش به پارامتر‌هایی میرسه که بهترین پیش‌بینی رو برای داده‌های تمرین می‌تونن داشته باشند.۳- ارزیابی: مرحله سوم مرحله حساسی هست هم برای ما هم برای مدل. اینجا جایی است که مدل رو در با استفاده از داده‌‌های تست آزمایش می‌کنیم. اگر نتایج خوب بود به مرحله ۴ میریم ولی اگر نتایج خوب نبود، باید به مرحله اول رفت، داده‌ها رو مجددا در صورت نیاز پردازش کرد و بعد در مرحله دوم هایپرپارامتر‌های مدل رو تغییر می‌دیم و این چرخه را تا رسیدن به نتیجه مطلوب ادامه می‌دیم.۴- پیش‌بینی: در این مرحله مدل ما برای استفاده آماده است و می‌شه با ورود داده‌های جدید  از نتایج پیش‌بینی‌اش استفاده کرد.فرایند ساخت یک سیستم یادگیری ماشین- عکس از کتاب یادگیری ماشین با پایتون نوشته سباستین راچکا و وحیدمیرجلیلی عکس از unsplashخب فکر می‌کنم برای قسمت اول یادگیری ماشین کافی باشه. در قسمت بعدی برای اولین بار سعی می‌کنیم یک مدل یادگیری ماشین رو پیاده کنیم. احتمالا بخش بیشتر محتوا در صفحه گیتهاب دوره قرار خواهد گرفت.به امید دیدار تا قسمت دوم. فهرست مطالب۰-مقدمه دوره یادگیری ماشین‍۱-یادگیری ماشین چیست؟(همین پست)۲- پیاده سازی اولین مدل یادگیری ماشینی۳- آشنایی با مدل‌‌های scikit-learn(هفته اول فروردین ۹۹)</description>
                <category>مهدی قدسی‌زاده</category>
                <author>مهدی قدسی‌زاده</author>
                <pubDate>Sun, 15 Mar 2020 09:10:17 +0330</pubDate>
            </item>
                    <item>
                <title>قسمت صفر:دوره یادگیری ماشین برای روزهای قرنطینه</title>
                <link>https://dataio.ir/قسمت-صفردوره-یادگیری-ماشین-برای-روزهای-قرنطینه-ooa5tkefxkjw</link>
                <description>احتمالا شما هم این‌ روزهای که درگیر قرنطینه‌ هستید برای استفاده بهینه از اوقاتتون در جست‌وجوی  پیدا کردن راه‌حل‌های مختلف هستید. یکی از این راه‌حل‌ها یادگیری چیزهای جدید هست، از هنر گرفته تا یادگرفتن کامپیوتر و حتی جذاب‌تر از اون یاد دادن به کامپیوتر.اگر افرادی هستید که به کامپیوتر،داده و ریاضیات علاقه‌مند باشید می‌تونید از افرادی باشید که با استفاده از ماشین لرنینگ کارهای خلاقانه‌ای انجام بدید و وارد دنیای جدیدی بشید. قبل از هرچیز بهتره بگیم این دوره به درد چه افرادی می خوره:افرادی که عاشق یادگرفتن  هستند.افرادی که دوست دارن بدونن یادگیری ماشین چه جوری کار می‌کنه.افرادی که دسترسی به داده‌های زیادی‌ دارن ولی نمی دونن که چه جوری میشه از این داده‌ها استفاده کرد.(مثل فروشنده های اینترنتی نسبتا کوچک)افرادی که دوست دارن بتونن آینده رو پیش‌بینی کنند.*( مثل پیش‌بینی قیمت سهام، فروش نفت یا فارکس)افرادی که دوست دارند کارهای خودشون رو مثل دسته‌بندی متن‌ها و عکس‌ها خودکار کنند.عکس از ارسنی توگلف از آنسپلشتوی این دوره چه چیزهایی یاد میگیریمتوی این دوره از مباحث پایه‌ای یادگیری ماشین مثل پیش‌پردازش(preproccesing)، بیش‌برازش(overfitting) شروع می‌کنیم و بعد از اون مدل‌های کلاسیک  ماشین لرنینگ مثل رگرسیون ، درخت تصمیم، مدل‌های SVM و چند مدل یادگیری بدون ناظر مثل نزدیک‌ترین همسایه(nearest neighbor) رو مرور می‌کنیم.بعد از اون سعی می‌کنیم راجع به تنظیم پارامتر‌های هایپر**(hyper parameter tuning) و انتخاب مدل مناسب برای کارمون صحبت می کنیم.بعد از اون وارد فضای جدی‌تر میشیم و سعی می‌کنیم با شبکه‌های عصبی آشنا شیم. توی این بخش دو مورد RNN و CNN رو به صورت ویژه‌تر پوشش می‌دیم و سعی می‌کنیم که با استفاده از این ابزار‌ها ۲ تا کار جذاب رو انجام بدیم. یکی دسته‌بندی تصاویر و یکی ساخت  موسیقی که شاید به گوش همه هم خوش نباشه.?در آخر هم سعی می‌کنیم با reinforcement learning به کامپیوتر یاد بدیم که خودش از خودش یادبگیره و یک بازی ساده رو به صورت خودآموز یادبگیره و توش خبره بشه.به صورت مشخص ما توی این دوره سعی می‌کنیم با استفاده از دوکتابخانه  محبوب sci-kit learn و tensorflow مسائل یادگیری ماشین رو حل کنیم.هرچند الان سیلابس دوره مشخص هست ولی ممکنه بنا به شرایط کمی‌تغییر کنه.برای استفاده از این دوره نیازمند چه چیزهایی هستم؟شما باید تا حد خوبی با پایتون آشنا باشید، توی اینترنت به راحتی میتونید محتوای آموزشی خوبی به فارسی و انگلیسی برای این زبان پیدا کنید. احتمالا آموزش رایگان جادی در گوکلاس  یکی از گزینه‌های خوب برای شروع است.علاوه بر آشنایی مقدماتی با پایتون بلد بودن numpy و pandas می‌تونه خیلی جاها به شما کمک کنه. اگر با این دو بخصوص pandas آشنایی دارید احتمالا از این دوره استفاده بهتری خواهید داشت. برای شروع می‌تونید یک نگاه به ۱۰ دقیقه تا pandas داشته باشید.یک کامپیوتر که روش پایتون نصب باشه خیلی خوبه ولی اگر پایتون نصب نداشتید نگران نباشید. کدها در گیتهاب این دوره  به صورتی ذخیره میشه که بتونید بدون نیاز به نصب چیز جدیدی اونها رو  توی مرورگرتون اجرا کنید.از همه چیز مهمتر علاقه.این دوره در هر هفته دو تا سه مطلب جدید ارائه میده. برای مطلع شدن از اون می‌تونید من این پست رو بوک‌مارک کنید( من فهرست مطالب رو اینجا بروز می‌کنم)  و یا من رو در ویرگول دنبال کنید. علاوه بر این اگر مایل بودید می‌تونید توی این بخش ایمیل خودتون رو وارد کنید تا بعد از انتشار هر پست به شما اطلاع‌رسانی بشه و صدالبته تلاش می‌کنم محتوای اختصاصی هم برای مخاطبین ایمیلی مثل کتاب رایگان آماده و ارسال کنیم.جدید: می‌تونید برای دسترسی به محتوای ویژه در کانال تلگرام دوره هم عضو بشید. https://bit.ly/2UgZhOp فهرست مطالب۰-مقدمه دوره یادگیری ماشین(همین پست)‍۱-یادگیری ماشین چیست؟۲- پیاده سازی اولین مدل یادگیری ماشینی۳- آشنایی با کتابخانه scikitlearn رگرسیون لاجستیک۴- پردازش داده‌ها با sklearn و pandasپ.ن:* واقعیت اینه که پیش‌بینی همیشه با خطا همراهه و این مسئله به صورت خاص در مورد سهام بیشتر رخ می‌ده به عنوان کسی که مدت‌هاست در حال کار با یادگیری ماشین و بورس هست بهتون توصیه می‌کنم که از این بخش فقط برای یادگیری استفاده کنید و برای سرمایه‌گذاری از روش‌های مطمئن‌تر مثل صندوق‌های سرمایه‌گذاری استفاده کنید.** من سعی می‌کنم که از مطالب بعدی از واژه‌های انگلیسی با تایپ انگلیسی برای معرفی مفاهیم استفاده کنم. احتمالا ترجمه این عبارات باعث گیج شدن شما و البته مشکل شدن جست‌وجوهای آتی شما میشه.*** تا زمان انتشار پست جدید می‌تونید به صفحه بورس تهران در پایتون در ویرگول و گیتهاب سر بزنید و کمی با استفاده از pandas با داده‌‌های بورس ایران کار کنید.</description>
                <category>مهدی قدسی‌زاده</category>
                <author>مهدی قدسی‌زاده</author>
                <pubDate>Fri, 13 Mar 2020 17:23:29 +0330</pubDate>
            </item>
                    <item>
                <title>بورس تهران در پایتون</title>
                <link>https://virgool.io/@ghodsizadeh/%D8%A8%D9%88%D8%B1%D8%B3-%D8%AA%D9%87%D8%B1%D8%A7%D9%86-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-c01c6loigi4z</link>
                <description>چند روز پیش بود که برای یک پروژه شخصی در حال جمع‌‌آوری تاریخچه قیمت سهام در بورس تهران بودم، برای جمع‌آوری و منظم کردن اطلاعات از یک پایگاه‌داده کوچک و سبک مبتنی بر &#x60;sqlite&#x60;  استفاده کردم. بعد از کمی کار کردن به این نتیجه رسیدم که میشه با کمی‌ دستکاری یک بسته مناسب برای دسترسی راحت به قیمت ‌های بورس برای استفاده علاقه‌مندان به بورس و پایتون آماده کرد. حالا نسخه ابتدایی این بسته آماده است  و از طریق github و pypi  با نام &#x60;tehran_stocks&#x60;  در دسترس است.تزئینی :)ویژگی‌های بستهدریافت خودکار لیست سهم‌ها همراه با اطلاعات ابتداییامکان دریافت خودکار تاریخچه قیمت کل سهم‌هاامکان دریافت تاریخچه قیمت سهم‌های یک گروه ( مانند گروه خودرو)امکان دریافت تاریخچه قیمت یک سهم خاصامکان بروز رسانی قیمتمبتنی بر PANDASو  sqliteسهام شی‌‌ءگرانصب بستهمثل هر پکیج پایتون شما میتونید به راحتی با استفاده از &#x60;pip&#x60; بسته سهام تهران رو نصب کنید:‍‍pip install tehran_stocksروش توصیه شده برای استفاده از محیط مجازی پایتون برای این پکیچ &#x60;pipenv&#x60; ولی شما میتونید از هر روش که مایلید این بسته رو استفاده کنید. در زمان نگارش این متن نسخه ۰.۵.۳ آخرین نسخه منتشر شده در گیت‌‌هاب و پای‌پای هست. برای اینکه مطمئن باشید همه چیز  تحت کنترل هست مطمئن باشید که شما هم نسخه ۰.۵.۳ را نصب دارید، در غیر این صورت حتما به مستندات موجود در گیت‌هاب سهام تهران مراجعه کنید.استفاده از بستهبرای استفاده از پکیج نیاز به یک راه‌اندازی ابتدایی هست و برای راه‌اندازی ابتدایی دو راه حل وجود دارد:راه حل اول:در یک محیط مثل ژوپیتر یا در یک فایل پایتون ساده خط زیر رو وارد کنید:import tehran_stocks کد مورد نظر رو اجرا کنید و منتظر بمونید تا بسته کارهای خودش رو انجام بده. در کمتر از یک دقیقه پایگاه داده ساخته شده و آماده دریافت قیمت‌هاست. در صورتی که اولین بار از بسته استفاده کنید، رابط کاربری از شما یک سوال خواهد پرسید.Do you want to download all price? [y,(n)]اگر جواب شما مثبت بود، باید مدتی منتظر بمانید و بعد از آن قیمت تمامی سهم‌های مورد نظر رو تا تاریخ اجرای کد در کامپیوترتان خواهید داشت. در غیر این صورت هر زمان که مایل بودید. می‌تونید از سایر روش‌های دریافت قیمت استفاده کنید.راه حل دوم:اگر از لینوکس و  مک  استفاده می‌کنید در ترمینال و اگر از ویندوز استفاده می‌کنید در  پاورشل   میتونید با استفاده از دستور زیر پایگاه‌داده رو آماده کنید. ts-get initبا اجرای دستور بالا دیتابیس آماده شده و در صورتی که اولین اجرا باشد از شما در مورد دانلود تمامی اطلاعات سوال می‌کند و مطابق تصمیم شما عمل می‌کند.به همین سادگی می‌تونید به قیمت‌ها دسترسی داشته باشید. قبل از اینکه در مورد نحوه دسترسی به قیمت‌ها صحبت کنیم، بهتره که چند روش برای دریافت و بروزرسانی قیمت‌ها رو با هم بررسی کنیم.دریافت و بروزرسانی قیمت‌هابرای دریافت و بروزرسانی قیمت ها چند روش وجود داره، نکته مهم و جالب اینه که دریافت برای اولین بار و همینطور بروزرسانی پایگاه داده در همه حالت‌ها با یک دستور انجام میشه، فعلا ۳ روش برای دریافت قیمت‌ها وجود دارد: دریافت و بروزرسانی همه قیمت‌هادریافت و بروزرسانی قیمت‌ها در یک گروه خاص( مثلا گروه خودرو یا etf‌ها)دریافت و بروزرسانی قیمت‌ها برای یک سهمبروزرسانی همه قیمت‌ها:برای بروزرسانی قیمت دو راه حل وجود دارد. استفاده از خط فرمان(command line) و استفاده از کد پایتون.برای بروزرسانی همه سهم‌ها و استفاده از خط فرمان میشه کافیه دستور زیر رو در ترمینال وارد کنید:ts-get updateمنتظر بمونید و سهم‌ها در پایگاه داده شما در دسترس هستند.در کد پایتون نیز میتونید دستور زیر رو وارد کنید:from tehran_stocks import get_all_price
get_all_price()بعد از اجرای کد همه قیمت‌ها در دسترس شماست.فرآیند دریافت کل قیمت‌ها بسته به سرعت اینترنت شما ممکن است تا چندساعت نیز زمان ببرد ولی با یک سرعت مناسب در ۲۰ دقیقه دریافت می‌شود.بروزرسانی قیمت‌های یک گروه:برای استفاده از این روش باید کد گروه مورد نظر رو بدونید برای بدست آوردن این عدد  میتونید از روش زیر استفاده کنید:در خط فرمان:ts_get get_groups که احتمالا بخاطر عدم پشتیبانی از فارسی با مشکل مواجه میشید و یا در یک محیط دیگر مثل ژوپیتر نوت‌بوک:‍‍from tehran_stock import Stocks # we will talk about Stocks later
Stock.get_group()حالا میتونید با یکی از این دو روش قیمت‌های مربوط به گروه مورد نظر رو بدست بیارید، مثلا برای گروه خودرو با کد ۳۴ در خط فرمانts-get group 34یا در محیط پایتون:from tehran_stock import update_group
update_group(34)‍خیلی سریع قیمت‌های بروز در دسته‌بندی گروه خودرو آماده پردازش هستند.برای استفاده از روش سوم باید کمی در مورد دسترسی به سهم‌ها صحبت کنیم.تزئینی :)دسترسی به سهم‌هاسهم‌ در بسته سهام تهران به زبان پایتونی یک شی‌ء هستند که ویژگی‌های خاص خود را دارند. نام،نماد، گروه و تاریخچه قیمت از جمله ویژگی‌های موجود برای هر سهم هستند. برای استفاده از Stocks باید آن را وارد کنیم:‍‍from tehran_stock import Stocksبا استفاده از Stocks می‌توانید به تمامی سهم‌های موجود( که دارای سابقه قیمت هستند) دسترسی پیدا کنید.برای دسترسی به سهم‌ها می‌توانید از چند پارامتر استفاده کنید،نماد سهم(name)، عنوان سهم(title)و کد سهم(code) که در آدرس سهم در سایت tsetmc.com وجود دارد.مثلا برای دریافت سهم گل‌گهر می‌توانید از روش‌های زیر استفاده کنید:s‍‍tock = Stocks.query.filter_by(code=&#039;35700344742885862&#039;).first()

stock = Stocks.query.filter_by(name=&#039;کگل&#039;).first()

stock = Stocks.query.filter(Stocks.title.like&#039;%گل گهر%&#039;).first() #its based on sqlalchemyبعد از این شما می‌توانید به اطلاعات سهم گل‌گهر دسترسی دارید.در نسخه فعلی ۴ متد برای هر سهم وجود دارد. stock.df # دسترسی به دیتافریم قیمت‌ سهم، شامل قیمت گشایش، قیمت بسته‌شدن،قیمت پایانی حجم معاملات و...stock.update() # این متد  بروزرسانی قیمت سهم را انجام می‌دهد.stock.summary() # تاریخ آغاز ، پایان و تعداد روز‌های معامله شده سهم را نمایش می‌دهد.self.display() # اطلاعات کلی سهم را نمایش می‌دهد.نکته جالب در مورد متد stock.df این است که اگر برای سهم مورد نظر قیمت را دریافت نکرده باشید، به صورت خودکار اطلاعات لازم را دریافت کرده و بعد از آن دیتافریم قیمت‌ها را به شما نمایش می‌دهد.در نسخه فعلی مهمترین ویژگی‌ بسته دسترسی به دیتافریم هر سهم است. اگر با PANDAS  آشنایی داشته باشید براحتی میتونید مسیر خودتون رو برای کارهای علمی و مالی ادامه بدید، اگر هم مایلید که از یک ابزار دیگر برای پردازش‌‌های خود استفاده کنید می‌توانید به راحتی با استفاده از یکی از متد‌های زیر تاریخچه قیمت را به خروجی مورد نظر خود تبدیل کنید:stock.df.to_csv(&#039;price.csv&#039;)
stock.df.to_excel(&#039;price.xlsx&#039;)
stock.df.to_stata(&#039;price.dta&#039;)نکات پایانیهدف اصلی این بسته تسهیل دسترسی به داده‌های بورسی هست و در قدم اول قرار بود مسئله من رو حل کنه که توی این کار موفق بوده، در زمان طراحی هم بیشتر این هدف دنبال شده که داده‌های خام برای پردازش‌های (غالبا علمی) آتی براحتی در دسترس باشند.در بروزرسانی‌های آتی بسته سعی می‌کنم علاوه بر بهبود عملکرد، تسهیل جستجوی سهام  و اضافه کردن تقویم شمسی برخی از پردازش‌های متداول رو هم به بسته اضافه کنم. چیزی مثل محاسبه رشد قیمت یا اجرای یک مدل سری‌زمانی برای پیش‌بینی(مثل ARIMA) و حتی اضافه‌کردن محاسبه شاخص‌های تکنیکال. توی این مسیر خوشحال می‌شم که  نیاز‌ها و پیشنهاد‌های خودتون را از طریق تلگرام، توییتر و یا از طریق گیت‌هاب با من در میان بگذارید.+ ممنون می‌شم که این بسته رو به دوستان خودتون معرفی کنید و اگر دوست داشتید یک ستاره در گیت‌هاب بهش اعطا کنید.+ این بسته لیسانسش رو از MIT گرفته در نتیجه می‌تونید این بسته رو برای هر نیتی و با هر عنوان منتشر کنید و از اون برای بهتر کردن فعالیت‌هاتون استفاده کنید و اگر مایل بودید  به بهتر شدن این بسته کمک کنید. https://github.com/ghodsizadeh/tehran-stocks </description>
                <category>مهدی قدسی‌زاده</category>
                <author>مهدی قدسی‌زاده</author>
                <pubDate>Mon, 15 Jul 2019 12:33:55 +0430</pubDate>
            </item>
            </channel>
</rss>