diff --git a/Machine Learning/ch2.numpy/numpy_land_of_misery/land_of_misery.ipynb b/Machine Learning/ch2.numpy/numpy_land_of_misery/land_of_misery.ipynb new file mode 100644 index 0000000..20cf99c --- /dev/null +++ b/Machine Learning/ch2.numpy/numpy_land_of_misery/land_of_misery.ipynb @@ -0,0 +1,396 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

\n", + "\n", + "سرزمین فلاکت\n", + "\n", + "

\n", + "\n", + "

\n", + "\n", + "در این تمرین قصد داریم به سازمان حمایت از کارتن‌خواب‌ها کمک کنیم تا بتوانند در روزهای سرد خدمت بهتری به کارتن‌خواب‌ها ارائه دهند. یک داوطلب دست به کار شده و به مدت یک هفته، هر یک ساعت دمای هوا را در یکی پرکارتن‌خواب‌ترین مناطق اندازه گرفته و در لیستی به نام temp_list ذخیره کرده است. یعنی در این لیست به ازای هر روز، یک لیست دیگر به طول ۲۴ در نظر گرفته شده که دمای هوا در تمام ساعات (از ساعت ۰۰ تا ۲۳) در آن ذخیره شده است.\n", + "\n", + "

\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "temp_list = [[-11,-13,-12,-11,-12,-13,-12,0,1,1,2,4,4,5,6,6,7,8,6,6,5,5,4,3],\n", + " [3,3,2,1,0,1,1,3,3,4,3,4,4,5,4,4,4,3,4,3,3,2,1,0],\n", + " [0,-11,-11,-12,-13,-11,1,1,2,3,4,5,3,2,2,1,1,1,0,0,-11,-11,-12,-13],\n", + " [-13,-13,-14,-14,-15,-16,-16,-15,-14,-14,-13,-12,-12,0,0,1,1,2,1,1,0,-11,-11,-11],\n", + " [-11,-12,-13,-13,-13,-12,-11,0,0,1,2,2,3,4,3,5,3,2,1,1,2,1,0,1],\n", + " [1,1,0,-11,-11,-12,-11,-11,0,1,1,1,2,3,2,3,4,5,6,4,2,2,1,1],\n", + " [0,0,1,0,-11,0,1,1,2,3,3,4,3,4,5,8,7,6,6,5,6,6,5,4]]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

\n", + "\n", + "قسمت اول\n", + "\n", + "

\n", + "

\n", + "\n", + "ابتدا لیست temp_list را تبدیل به آرایه‌ی نامپای کرده و در متغیری به نام temp ذخیره کنید.\n", + "\n", + "

\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-11, -13, -12, -11, -12, -13, -12, 0, 1, 1, 2, 4, 4,\n", + " 5, 6, 6, 7, 8, 6, 6, 5, 5, 4, 3],\n", + " [ 3, 3, 2, 1, 0, 1, 1, 3, 3, 4, 3, 4, 4,\n", + " 5, 4, 4, 4, 3, 4, 3, 3, 2, 1, 0],\n", + " [ 0, -11, -11, -12, -13, -11, 1, 1, 2, 3, 4, 5, 3,\n", + " 2, 2, 1, 1, 1, 0, 0, -11, -11, -12, -13],\n", + " [-13, -13, -14, -14, -15, -16, -16, -15, -14, -14, -13, -12, -12,\n", + " 0, 0, 1, 1, 2, 1, 1, 0, -11, -11, -11],\n", + " [-11, -12, -13, -13, -13, -12, -11, 0, 0, 1, 2, 2, 3,\n", + " 4, 3, 5, 3, 2, 1, 1, 2, 1, 0, 1],\n", + " [ 1, 1, 0, -11, -11, -12, -11, -11, 0, 1, 1, 1, 2,\n", + " 3, 2, 3, 4, 5, 6, 4, 2, 2, 1, 1],\n", + " [ 0, 0, 1, 0, -11, 0, 1, 1, 2, 3, 3, 4, 3,\n", + " 4, 5, 8, 7, 6, 6, 5, 6, 6, 5, 4]])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "temp = np.array(temp_list)\n", + "temp" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "

\n", + "\n", + "قسمت دوم\n", + "\n", + "

\n", + "

\n", + "\n", + "داوطلب ما که دما را اندازه‌گیری کرده پس از مشاهده‌ی نتایج متوجه شده است که دستگاه اندازه‌گیری‌اش چینی بوده و در دماهای زیر صفر،‌ دما را ۱۰ درجه کمتر ثبت کرده است. به‌عنوان مثال اگر دما ۱- بوده، این دستگاه دما را ۱۱- ثبت کرده است. در این قسمت مقادیری که اشتباه ثبت شده‌اند را اصلاح کرده و کل مقادیر را با همان ترتیب قبل در متغیر temp_correct ذخیره کنید.\n", + "\n", + "

\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[-11 -13 -12 -11 -12 -13 -12 0 1 1 2 4 4 5 6 6 7 8\n", + " 6 6 5 5 4 3]\n", + " [ 3 3 2 1 0 1 1 3 3 4 3 4 4 5 4 4 4 3\n", + " 4 3 3 2 1 0]\n", + " [ 0 -11 -11 -12 -13 -11 1 1 2 3 4 5 3 2 2 1 1 1\n", + " 0 0 -11 -11 -12 -13]\n", + " [-13 -13 -14 -14 -15 -16 -16 -15 -14 -14 -13 -12 -12 0 0 1 1 2\n", + " 1 1 0 -11 -11 -11]\n", + " [-11 -12 -13 -13 -13 -12 -11 0 0 1 2 2 3 4 3 5 3 2\n", + " 1 1 2 1 0 1]\n", + " [ 1 1 0 -11 -11 -12 -11 -11 0 1 1 1 2 3 2 3 4 5\n", + " 6 4 2 2 1 1]\n", + " [ 0 0 1 0 -11 0 1 1 2 3 3 4 3 4 5 8 7 6\n", + " 6 5 6 6 5 4]]\n" + ] + }, + { + "data": { + "text/plain": [ + "array([[-1, -3, -2, -1, -2, -3, -2, 0, 1, 1, 2, 4, 4, 5, 6, 6,\n", + " 7, 8, 6, 6, 5, 5, 4, 3],\n", + " [ 3, 3, 2, 1, 0, 1, 1, 3, 3, 4, 3, 4, 4, 5, 4, 4,\n", + " 4, 3, 4, 3, 3, 2, 1, 0],\n", + " [ 0, -1, -1, -2, -3, -1, 1, 1, 2, 3, 4, 5, 3, 2, 2, 1,\n", + " 1, 1, 0, 0, -1, -1, -2, -3],\n", + " [-3, -3, -4, -4, -5, -6, -6, -5, -4, -4, -3, -2, -2, 0, 0, 1,\n", + " 1, 2, 1, 1, 0, -1, -1, -1],\n", + " [-1, -2, -3, -3, -3, -2, -1, 0, 0, 1, 2, 2, 3, 4, 3, 5,\n", + " 3, 2, 1, 1, 2, 1, 0, 1],\n", + " [ 1, 1, 0, -1, -1, -2, -1, -1, 0, 1, 1, 1, 2, 3, 2, 3,\n", + " 4, 5, 6, 4, 2, 2, 1, 1],\n", + " [ 0, 0, 1, 0, -1, 0, 1, 1, 2, 3, 3, 4, 3, 4, 5, 8,\n", + " 7, 6, 6, 5, 6, 6, 5, 4]])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "temp_correct = temp.copy()\n", + "print(temp_correct)\n", + "temp_correct[(temp_correct<0)]+=10\n", + "temp_correct" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "

\n", + "\n", + "قسمت سوم\n", + "\n", + "

\n", + "

\n", + "\n", + "سازمان حمایت از کارتن‌خواب‌ها اعلام کرده که دما را به شکل فارنهایت (F°) می‌خواهد، اما داده‌هایی که در اختیار ما قرار گرفته به شکل سلسیوس (C°) ثبت شده است. اکنون نیاز است با استفاده از فرمول زیر،‌ دماهای قسمت قبل (آرایه‌ی temp_correct) را به فارنهایت تبدیل کرده و در متغیری به نام temp_F ذخیره کنید.\n", + "\n", + "

\n", + "\n", + "$$ F = 1.8 * C + 32 $$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[30.2 26.6 28.4 30.2 28.4 26.6 28.4 32. 33.8 33.8 35.6 39.2 39.2 41.\n", + " 42.8 42.8 44.6 46.4 42.8 42.8 41. 41. 39.2 37.4]\n", + " [37.4 37.4 35.6 33.8 32. 33.8 33.8 37.4 37.4 39.2 37.4 39.2 39.2 41.\n", + " 39.2 39.2 39.2 37.4 39.2 37.4 37.4 35.6 33.8 32. ]\n", + " [32. 30.2 30.2 28.4 26.6 30.2 33.8 33.8 35.6 37.4 39.2 41. 37.4 35.6\n", + " 35.6 33.8 33.8 33.8 32. 32. 30.2 30.2 28.4 26.6]\n", + " [26.6 26.6 24.8 24.8 23. 21.2 21.2 23. 24.8 24.8 26.6 28.4 28.4 32.\n", + " 32. 33.8 33.8 35.6 33.8 33.8 32. 30.2 30.2 30.2]\n", + " [30.2 28.4 26.6 26.6 26.6 28.4 30.2 32. 32. 33.8 35.6 35.6 37.4 39.2\n", + " 37.4 41. 37.4 35.6 33.8 33.8 35.6 33.8 32. 33.8]\n", + " [33.8 33.8 32. 30.2 30.2 28.4 30.2 30.2 32. 33.8 33.8 33.8 35.6 37.4\n", + " 35.6 37.4 39.2 41. 42.8 39.2 35.6 35.6 33.8 33.8]\n", + " [32. 32. 33.8 32. 30.2 32. 33.8 33.8 35.6 37.4 37.4 39.2 37.4 39.2\n", + " 41. 46.4 44.6 42.8 42.8 41. 42.8 42.8 41. 39.2]]\n" + ] + } + ], + "source": [ + "temp_F = temp_correct.copy()\n", + "temp_F = 1.8*temp_correct+32\n", + "print(temp_F)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "

\n", + "\n", + "قسمت چهارم\n", + "\n", + "

\n", + "

\n", + "\n", + "در ادامه از شما خواسته شده که گرم‌ترین ساعت هر روز را به همراه دمای هوا در آن ساعت گزارش دهید،‌ زیرا در این ساعت کارتن‌خواب‌ها راحت‌تر می‌توانند برای دریافت غذا از کارتن خود خارج شوند.\n", + "\n", + "
\n", + "تحلیل‌های خود را بر روی آرایه‌ی قسمت قبل (temp_F) انجام دهید و خروجی خود را به شکل یک آرایه با ابعاد (2, 7) در متغیر hottest_times ذخیره کنید. در ردیف اول، ساعت بیشترین دما در هر روز و در ردیف دوم، دمای هوا در آن ساعت را قرار دهید. یعنی خروجی شما باید به شکل زیر باشد:\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
ساعت بیشترین دما در روز اولساعت بیشترین دما در روز دوم...ساعت بیشترین دما در روز هفتم
بیشترین دما در روز اولبیشترین دما در روز دوم...بیشترین دما در روز هفتم
\n", + "
\n", + "

" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[17. 13. 11. 17. 15. 18. 15. ]\n", + " [46.4 41. 41. 35.6 41. 42.8 46.4]]\n" + ] + } + ], + "source": [ + "hottest_times = np.array([np.argmax(temp_F,axis=1),temp_F.max(axis=1)])\n", + "print(hottest_times)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

\n", + "\n", + "قسمت پنجم\n", + "\n", + "

\n", + "\n", + "

\n", + "\n", + "در آخر از شما می‌خواهیم شماره روزی که میانگین دما در آن کمترین بوده را همراه با خود مقدار میانگین دما در آرایه‌ی coldest_day ذخیره کنید، تا سازمان بتواند در چنین روزی بین کارتن‌خواب‌ها نوشیدنی گرم هم پخش کند.\n", + "\n", + "
\n", + "تحلیل‌های خود را بر روی آرایه‌ی temp_F انجام دهید و خروجی خود را به شکل یک آرایه‌ی تک‌بعدی به طول ۲ در متغیر coldest_day ذخیره کنید. در عنصر اول، شماره روز با کمترین میانگین دما (بین ۰ تا ۶) و در عنصر دوم، میانگین دما در آن روز را قرار دهید. یعنی خروجی شما باید به شکل زیر باشد:\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
روزدما
\n", + "\n", + "
\n", + "

\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[3, 28.400000000000002]\n" + ] + } + ], + "source": [ + "coldest_day = [np.argmin(np.mean(temp_F,axis=1)),np.min(np.mean(temp_F,axis=1))]\n", + "print(coldest_day)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

\n", + "\n", + "سلول جواب‌ساز\n", + "\n", + "

\n", + "\n", + "\n", + "

\n", + "\n", + " برای ساخته‌شدن فایل result.zip سلول زیر را اجرا کنید. توجه داشته باشید که پیش از اجرای سلول زیر تغییرات اعمال شده در نت‌بوک را ذخیره کرده باشید (ctrl+s) تا در صورت نیاز به پشتیبانی امکان بررسی کد شما وجود داشته باشد.\n", + "\n", + "

" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File Paths:\n", + "['answers.npz', 'land_of_misery.ipynb']\n" + ] + } + ], + "source": [ + "import zlib\n", + "import zipfile\n", + "\n", + "np.savez(\"answers.npz\", temp = temp, temp_correct = temp_correct, \n", + " temp_F = temp_F, hottest_times = hottest_times, coldest_day = coldest_day)\n", + "\n", + "\n", + "def compress(file_names):\n", + " print(\"File Paths:\")\n", + " print(file_names)\n", + " compression = zipfile.ZIP_DEFLATED\n", + " with zipfile.ZipFile(\"result.zip\", mode=\"w\") as zf:\n", + " for file_name in file_names:\n", + " zf.write('./' + file_name, file_name, compress_type=compression)\n", + "\n", + "file_names = [\"answers.npz\", \"land_of_misery.ipynb\"]\n", + "compress(file_names)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qenv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.1" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}