<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های محمد علی‌آبادی</title><link>https://virgool.ir/feed/@mohammad2aliabadi</link><description>ذره‌ای مهندس</description><language>fa</language><pubDate>2026-11-11 14:50:53</pubDate><image><url>https://virgool.ir/images/default-avatar.jpg</url><title>محمد علی‌آبادی</title><link>https://virgool.ir/@mohammad2aliabadi</link></image><item><title>چند راهکار برای سریع‌تر کردن پایتون (قسمت اول)</title><link>https://virgool.ir/@mohammad2aliabadi/چند-راهکار-برای-سریع-تر-کردن-پایتون-سری-اول-sqxjicldky2t</link><description>همونطور که می‌دونین زبان برنامه‌نویسی پایتون، یکی از زبان‌های پر استفاده در دنیا هستش و تقریبا میشه برای همه چیز از این زبان استفاده کرد. البته این زبان بیشتر بخاطر دستورهای راحت و کتابخونه‌هایی که داره مشهور شده. اما جدا از این مزیت‌ها، پایتون یک نقطه ضعف بزرگ داره و اون هم سرعتشه :&#39;(                              کدهای پایتون با سرعت پایینی نسبت به بقیه زبون‌ها اجرا میشن. در این سری‌ها، نکات ریزی رو برای بهبود این مشکل بررسی می‌کنیم.استفاده از توابع و کتابخونه‌های آماده :اگه شما دارین کدهای پایتون میزنین و هنوز توابع خودتون رو می‌نویسین، در واقع دارین به پایتون ..... میدید. چون پایتون به مقدار بسیار زیادی توابع و کتابخونه‌ی آماده داره و اگه شما یک جستجوی ساده انجام بدید، متوجه می‌شید که تقریبا برای ۹۰ درصد از مشکلات شما، راه‌حلی با یک کد بهینه‌تر از کد شما ارائه شده. برای بررسی توابع می‌تونید به اینجا که در سایت رسمی پایتون قرار داره برید. اما برای کتابخونه‌ها هم، واقعیت اینه که کتابخونه‌های زیادی وجود دارن که بعضی‌ها واقعا کاربردی هستن و بعضی‌ها رو هم صرف اینکه برنامه نویس از خونه باباش قهر کرده، اونا رو نوشته. برای بررسی کتابخونه‌های استاندارد این زبان، می‌تونید به این آدرس برید.برای مثال این کدی هست که من در اوایل رابطه‌ احساسیم با پایتون، استفاده می‌کردم.lst = [&#34;my&#34;, &#34;name&#34;, &#34;is&#34;, &#34;mohammad&#34;]&#xA;bio = &#34; &#34;&#xA;for item in lst : &#xA;      bio += itemاما بعدش یک عزیزی بهم گفت که به جای حلقه می‌تونی از دستور زیر استفاده کنی :item = &#34; &#34;.join(lst)۲. سعی کنیم که کمتر از حلقه‌ها استفاده کنیم :یکی از جاهایی که از حلقه‌ها استفاده می‌شه، در ساخت لیست‌ هستش. جایگزین این کار، مفهومی به نام comprehension هستش. برای مثال به جای استفاده از کد : lst = [ ] &#xA;for i in rage(1, 100) :&#xA;      if i%10 = 0 :&#xA;           lst.append(i)می‌تونم از کد زیر استفاده کنم :‌lst = [ i for i in range(1, 100) if i%10 == 0 ]۳. هرگز از متغیرهای گلوبال استفاده نکن :شما همیشه باید سعی کنین که از متغیرهای گلوبال استفاده نکنین مگر اینکه واقعا نیاز باشه. به این دلیل که این متغیرها زمانی که تعریف می‌شن دیگه تا زمانی که کل برنامه کامپایل میشه، باقی میمون و فضایی رو به خودشون اختصاص میدن. در صورتی که متغیرهای محلی تا زمانی وجود دارند که اجرای تابع به پایان برسه.۴. محاسبات رو در خارج از حلقه انجام بده :فرض کنین که مثلا به ازای هر آیتم از لیست، می‌خواین که اون آیتم رو در یک پترنی پیدا کنید. خب در اینجا بهتره که عبارت regex رو در خارج از حلقه کامپایل کنید. تا اینکه هر بار با اجرای حلقه، این عبارت کامپایل بشه. در واقع به جای استفاده از کد زیر : for i in lst  :  &#xA;      m  = re.search(r&#39;\d{2}-\d{2}-\d{4}&#39;, i}&#xA;      if m : &#xA;            .....ما از کد زیر استفاده می‌کنیم.date_regex = re.compile(r&#39;\d{2}-\d{2}-\d{4}&#39;)&#xA;for i in lst :&#xA;    m = date_regex.search(i)&#xA;    if m :&#xA;          ......خب دوستان ممنونم بابت وقتی که گذاشتین و امیدوارم براتون کاربردی بوده باشه. در قسمت بعدی می‌بینمتون. همیشه قبراق باشین.و فعلا ه:</description><category>محمد علی‌آبادی</category><author>محمد علی‌آبادی</author><pubDate>Mon, 10 May 2021 16:03:15 +0430</pubDate></item><item><title>پانداز، اسب دیتا‌ آنالیست‌ها (قسمت اول)</title><link>https://virgool.ir/@mohammad2aliabadi/پانداز-اسب-دیتا-آنالیست-ها-قسمت-اول-ltuuko232gut</link><description>دوستان به اولین سری از رموز پانداز، که یکی از کتابخونه‌های قدرتمند و اپن‌سورس در حوزه علوم داده و برای زبان پایتون هستش، خوش اومدید. توی این سری‌‌ها از ساده‌ترین تکنیک‌ها شروع می‌کنیم و به مرور پیازداغشو زیاد می‌کنیم.امیدوارم که نکات جدیدی برای شما عزیزان در این‌جا وجود داشته باشه و بتونه زندگی رو براتون ساده‌تر کنه :&#39;(نکته مهم :‌ در این وبلاگ‌ها هیچ اثری از خروجی‌ کدها نیست!!! و در واقع بهتره خودتون برید کدها رو بزنید و خروجی رو ببینید و تعقل و اندیشه کنید. با تشکر :)خب قبل از هر چیزی ما این کتابخونه رو در ادیتور یا هر چیز دیگه‌ای که داریم، با استفاده از دستور زیر وارد می‌کنیم :import pandas as pd بعدش برای راحتی کار، یدونه دیتاست کوچولو موچولو می‌سازیم و کار رو با اون پیش می‌بریم :countries = pd.DataFrame({&#39;country&#39;: [&#39;United States&#39;, &#39;The Netherlands&#39;, &#39;Spain&#39;, &#39;Mexico&#39;, &#39;Australia&#39;],&#39;capital&#39;: [&#39;Washington D.C.&#39;, &#39;Amsterdam&#39;, &#39;Madrid&#39;, &#39;Mexico City&#39;, &#39;Canberra&#39;],&#39;continent&#39;: [&#39;North America&#39;, &#39;Europe&#39;, &#39;Europe&#39;, &#39;North America&#39;, &#39;Australia&#39;],&#39;language&#39;: [&#39;English&#39;, &#39;Dutch&#39;, &#39;Spanish&#39;, &#39;Spanish&#39;, &#39;English&#39;]})همین اول اجازه بدین که یک نکته کوچیک رو راجبه توابع پانداز بگم. یکی از اشتباهاتی که من در اوایل کار با این کتابخونه داشتم راجبه آرگومان inplace = True بود که در فراخوانی بعضی از توابع کتابخونه‌ی پانداز، باید اونو دیده باشین. مقدار دیفالت این متغیر، False هستش. این آرگومان مشخص میکنه که آیا می‌خوایم تغییرات روی دیتافریم اصلی اعمال بشه یا اینکه یک کپی از دیتافریم ایجاد کنیم و تغییرات رو در دیتافریم جدید اعمال کنیم و اونو به یک متغیر جدید نسبت بدیم. در واقع وقتی که inplace = True رو داریم، یعنی تغییرات در دیتافریم اصلی اعمال میشه و این تابع هیچ خروجی‌ای رو دیگه برنمی‌گردونه. اما اگر Inplace = False باشه یعنی اینکه تابع مورد نظر بروی یک کپی از دیتافریم اعمال میشه، و دیتافریم جدید رو return میکنه که باید اون رو به یک متغیر انتساب بدیم.اما نکاتی که در این سری بررسی می‌کنیم : ۱. انتخاب یک زیردیتافریم از دیتافریم country ‌:با استفاده از عملگر loc می‌تونیم یک زیرمجموعه از ردیف‌ها و ستون‌ها رو بر پایه‌ی شماره‌های ردیف(ایندکس‌ها) و نام‌های ستون‌ها انتخاب کنیم. که چند مثال استفاده از این عملگر رو در زیر می‌بینیم :countries.loc[:, &#39;country&#39;:&#39;continent&#39;]countries.loc[0:2, &#39;country&#39;:&#39;continent&#39;]countries.loc[[0, 4], [&#39;country&#39;, &#39;language&#39;]]۲. فیلتر کردن یا انتخاب یک یا چند دسته از دیتافریم:فرض کنید که ما فقط داده‌های مربوط به یک ستون یا چند ستون از دیتافریم رو می‌خوایم. برای انتخاب یک دسته(ستون)، ما از عملگر == استفاده می‌کنیم و برای انتخاب چندین دسته(ستون) از تابع isin استفاده خواهیم کرد. countries[countries.continent == &#39;Europe&#39;]countries[countries.language.isin([&#39;Dutch&#39;, &#39;English&#39;])]۳. فیلتر کردن یا حذف یک یا چند دسته از دیتافریم :‌در تکنیک قبلی، ما مستقیما اسامی ستون‌هایی که می‌خواستیم رو می‌نوشتیم. ولی اینجا ستون‌هایی از دیتافریم رو که نمی‌خوایم در دیتافریم مورد نیاز ما باشن، رو می‌نویسیم. این کار رو با استفاده از عملگر متمم یا ~ انجام می‌دیم. countries[~countries.continent.isin([&#39;Europe&#39;])]countries[~countries.continent.isin([&#39;Europe&#39;])]۴. تغییر نام ستون‌ها :فرض کنید که یک دیتاستی رو داریم و می‌خوایم اسم یکی از ستون‌هاشو تغییر بدیم حالا به هر دلیلی، مثلا اسمش خیلی تو دل برو نیست! یا مثلا ناقصه و یا سازنده اون دیتافریم، اسم اون ستون رو اشتباه نوشته. countries.rename({&#39;capital&#39;: &#39;capital_city&#39;, &#39;language&#39;: &#39;most_spoken_language&#39;}, axis=&#39;columns&#39;)روش دیگه اینه که کلا بیایم و همه ستون‌ها رو مقدار دهی کنیم و اسامی دلخواه رو به اون ستون‌های مشخص بدیم.countries.columns = [&#39;country&#39;, &#39;capital_city&#39;, &#39;continent&#39;, &#39;most_spoken_language&#39;]۵. عوض کردن ترتیب سطرهای دیتافریم: اندیس‌های سطر یک دیتافریم از صفر شروع میشن و تا هر تعداد که سطر داشته باشیم ادامه پیدا میکنه. حالا فرض کنیم می‌خوایم که این ترتیب رو عوض کنیم و به نوعی ترتیب شماره‌ها رو نزولی کنیم. یعنی اندیس‌های بزرگتر به اول(head) دیتافریم بیان. اینبار هم عملگر loc اینکارو برامون انجام میده. دمش گرم. countries.loc[::-1]البته اگه پشیمون شدین و می‌خواستین برگردین به حالت قبلی... فقط کافیه از تابع زیر استفاده کنین. countries.loc[::-1].reset_index(drop=True)و احیانا حواستون باشه که این تابع هم inplace هستش!۶. عوض کردن ترتیب ستون‌های دیتافریمcountries.loc[:, ::-1]۷. تقسیم کردن دیتافریم به دو زیردیتافریم :‌بعضی مواقع پیش میاد که که بخوایم دیتافریممون رو به دو دیتافریم کوچیکتر تبدیل کنیم. مثلا زمانی که می‌خوایم یک دیتافریم آموزش و یک دیتافریم تست برای الگوریتم‌های ماشین‌لرنینگمون داشته باشیم. برای اینکار از تابع sample استفاده می‌کنیم.countries_1 = countries.sample(frac=0.6, random_state=999)countries_2 = countries.drop(countries_1.index)۸. بررسی تساوی دو ستون :برای اینکه بررسی کنیم آیا ستون a عینا و دقیقا و خداییش شبیه ستون b هستش یا نه، از تابع equals استفاده می‌کنیم. df = pd.DataFrame({&#39;col_1&#39;: [1, 0], &#39;col_2&#39;: [0, 1], &#39;col_3&#39;: [1, 0]})df[&#39;col_1&#39;].equals(df[&#39;col_2&#39;])df[&#39;col_1&#39;].equals(df[&#39;col_3&#39;])اینم بگم که هیچوقت از == استفاده نکنین چون به درستی نمی‌تونه مقادیر NaN موجود در دیتافریم رو کنترل کنه. خب دوستان ممنونم بابت وقتی که گذاشتین و امیدوارم براتون کاربردی بوده باشه. در قسمت بعدی می‌بینمتون. همیشه قبراق باشین.و فعلا ه:</description><category>محمد علی‌آبادی</category><author>محمد علی‌آبادی</author><pubDate>Mon, 10 May 2021 04:01:01 +0430</pubDate></item></channel></rss>