FA-TOOLS — Header Component

آموزش groupby در pandas با مثال کاربردی

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

ضمناً، اگه دنبال ابزارها و اسنیپت‌های برنامه‌نویسی خفن می‌گردی که کارت رو راه بندازه، حتماً یه سر به ابزارخانه ما بزن. اونجا کلی چیزای به‌دردبخور برات داریم!

نیاز به کمک فوری داری؟ با ما تماس بگیر:

09202232789

✨ نقشه راه `groupby` در یک نگاه ✨

آموزش groupby در pandas با مثال کاربردی — تصویر 1

1️⃣ 🧩 مفهوم اصلی

  • – تقسیم، اعمال، ترکیب (Split-Apply-Combine)
  • – خلاصه سازی داده‌ها

2️⃣ 🛠️ عملیات‌های کلیدی

  • – جمع‌بندی (Aggregation): .sum()، .mean()، .agg()
  • – فیلتر (Filtering): .filter()
  • – تبدیل (Transformation): .transform()
  • – توابع دلخواه (Apply): .apply()

3️⃣ 🚀 ترفندهای پیشرفته

  • – گروه‌بندی چند ستونی
  • – مدیریت ایندکس (.reset_index())
  • – گروه‌بندی زمانی

4️⃣ ⚠️ عیب‌یابی سریع

  • – خطاهای رایج
  • – بهینه‌سازی عملکرد

چرا `groupby` اینقدر مهمه و باید یادگیریی؟

آموزش groupby در pandas با مثال کاربردی — تصویر 2

تصور کن یه عالمه داده داری؛ مثلاً اطلاعات فروش محصولاتت تو یه سال. حالا رئیس ازت می‌پرسه: “فروش هر محصول تو هر ماه چقدر بوده؟” یا “کدوم منطقه بیشترین فروش رو داشته؟” یا حتی “میانگین قیمت محصولات هر دسته‌بندی چقدره؟” بدون groupby، باید کلی حلقه و شرط بنویسی که هم وقت‌گیره و هم احتمال خطا بالاست.

اما groupby دقیقاً برای همین کار ساخته شده. این تابع بهت اجازه می‌ده:

  • داده‌ها رو بر اساس یه ستون یا چند ستون خاص دسته‌بندی کنی. مثلاً محصولات رو بر اساس “نوع محصول” یا “تاریخ”.
  • روی هر دسته‌بندی، یه عملیات خاص انجام بدی. مثلاً جمع (sum)، میانگین (mean)، تعداد (count) یا هر تابع دیگه‌ای.
  • نتیجه رو بهت برگردونه. یه جدول تمیز و مرتب از خلاصه‌ داده‌هات.

خلاصه بگم، groupby قلب تحلیل‌های گروهی تو Pandasئه. اگه اینو یاد بگیری، یه جهش بزرگ تو توانایی‌های تحلیلی‌ت می‌تونی داشته باشی!

مبانی `groupby` در Pandas: شروع کار

آموزش groupby در pandas با مثال کاربردی — تصویر 3

برای اینکه کار رو شروع کنیم، اول از همه باید Pandas رو ایمپورت کنیم و یه دیتافریم (DataFrame) نمونه بسازیم. این دیتافریم شامل اطلاعاتی مثل “شهر”، “محصول” و “فروش” می‌شه.


import pandas as pd

# ساخت یه دیتافریم نمونه
data = {
    'شهر': ['تهران', 'اصفهان', 'تهران', 'شیراز', 'اصفهان', 'تهران', 'شیراز'],
    'محصول': ['A', 'B', 'A', 'C', 'B', 'C', 'A'],
    'فروش': [100, 150, 200, 50, 120, 80, 90]
}
df = pd.DataFrame(data)
print("دیتافریم اصلی:")
print(df)

نتیجه اجرای کد بالا:

دیتافریم اصلی:
     شهر محصول  فروش
0   تهران    A   100
1  اصفهان    B   150
2   تهران    A   200
3   شیراز    C    50
4  اصفهان    B   120
5   تهران    C    80
6   شیراز    A    90

ساختار اصلی `groupby`: Split-Apply-Combine

مفهوم groupby روی یه ایده سه‌مرحله‌ای ساخته شده که بهش می‌گن “Split-Apply-Combine” یا “تقسیم-اعمال-ترکیب”. بیا تا دقیق‌تر توضیح بدم:

مرحله توضیح
1. Split (تقسیم) دیتافریم اصلی رو بر اساس مقادیر یک یا چند ستون به گروه‌های کوچکتر تقسیم می‌کنه. هر گروه شامل سطرهایی با مقادیر یکسان در ستون(های) مشخص شده است.
2. Apply (اعمال) حالا یه تابع (مثل جمع، میانگین، شمارش یا تابع دلخواه خودت) روی هر کدوم از این گروه‌های جداگانه اعمال می‌شه.
3. Combine (ترکیب) نتایج عملیات اعمال‌شده روی گروه‌های مختلف رو با هم ترکیب می‌کنه و یه دیتافریم جدید یا سری (Series) برمی‌گردونه.

حالا بیا یه مثال ساده از گروه‌بندی بر اساس “شهر” و محاسبه مجموع “فروش” رو ببینیم:


# گروه‌بندی بر اساس "شهر" و جمع "فروش"
فروش_شهر = df.groupby('شهر')['فروش'].sum()
print("nمجموع فروش به تفکیک شهر:")
print(فروش_شهر)

نتیجه اجرای کد بالا:

مجموع فروش به تفکیک شهر:
شهر
اصفهان    270
شیراز     140
تهران     380
Name: فروش, dtype: int64

همین! به همین سادگی تونستی مجموع فروش رو برای هر شهر به دست بیاری. دقت کن که ‘شهر’ حالا شده ایندکس (index) سری جدید ما. اگه دوست داری بیشتر با Python و اسنیپت‌های کدش آشنا بشی، یه سر به این لینک بزن: اسنیپت‌های Python.

عملیات‌های رایج با `groupby`

groupby فقط برای sum() نیست. تو می‌تونی عملیات‌های مختلفی رو روی گروه‌هات انجام بدی.

جمع‌بندی (Aggregation) داده‌ها

متداول‌ترین عملیات، جمع‌بندیه (Aggregation). تو می‌تونی از توابع آماده مثل mean() (میانگین)، count() (شمارش)، min() (حداقل) و max() (حداکثر) استفاده کنی.


# میانگین فروش به تفکیک شهر
میانگین_فروش_شهر = df.groupby('شهر')['فروش'].mean()
print("nمیانگین فروش به تفکیک شهر:")
print(میانگین_فروش_شهر)

# تعداد محصولات فروخته شده در هر شهر
تعداد_محصولات_شهر = df.groupby('شهر')['محصول'].count()
print("nتعداد محصولات فروخته شده به تفکیک شهر:")
print(تعداد_محصولات_شهر)

نتیجه اجرای کد بالا:

میانگین فروش به تفکیک شهر:
شهر
اصفهان    135.0
شیراز      70.0
تهران     126.666667
Name: فروش, dtype: float64

تعداد محصولات فروخته شده به تفکیک شهر:
شهر
اصفهان    2
شیراز     2
تهران     3
Name: محصول, dtype: int64

اگه بخوای چندین عملیات جمع‌بندی رو همزمان انجام بدی، agg() به کارت میاد. می‌تونی یه لیست از توابع یا یه دیکشنری برای اعمال توابع مختلف به ستون‌های مختلف بهش بدی.


# چندین عملیات جمع‌بندی با agg
آمار_فروش_شهر = df.groupby('شهر')['فروش'].agg(['sum', 'mean', 'count', 'min', 'max'])
print("nآمار کامل فروش به تفکیک شهر:")
print(آمار_فروش_شهر)

# اعمال توابع مختلف به ستون‌های مختلف با دیکشنری
آمار_فروش_محصول_شهر = df.groupby('شهر').agg(
    مجموع_فروش=('فروش', 'sum'),
    میانگین_فروش=('فروش', 'mean'),
    تعداد_محصولات=('محصول', 'count')
)
print("nآمار سفارشی فروش و محصولات به تفکیک شهر:")
print(آمار_فروش_محصول_شهر)

نتیجه اجرای کد بالا:

آمار کامل فروش به تفکیک شهر:
          sum        mean  count  min  max
شهر
اصفهان    270  135.000000      2  120  150
شیراز     140   70.000000      2   50   90
تهران     380  126.666667      3   80  200

آمار سفارشی فروش و محصولات به تفکیک شهر:
        مجموع_فروش  میانگین_فروش  تعداد_محصولات
شهر
اصفهان        270   135.000000             2
شیراز         140    70.000000             2
تهران         380   126.666667             3

فیلتر کردن گروه‌ها (Filtering Groups)

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


# فیلتر کردن شهرهایی که مجموع فروش‌شون بیشتر از 250 واحده
فروش_بالا = df.groupby('شهر').filter(lambda x: x['فروش'].sum() > 250)
print("nشهرهایی با مجموع فروش بیشتر از 250 واحد:")
print(فروش_بالا)

نتیجه اجرای کد بالا:

شهرهایی با مجموع فروش بیشتر از 250 واحد:
     شهر محصول  فروش
0   تهران    A   100
1  اصفهان    B   150
2   تهران    A   200
4  اصفهان    B   120
5   تهران    C    80

نکته مهم اینه که filter() کل ردیف‌های مربوط به گروه‌هایی که شرط رو برآورده کردن برمی‌گردونه، نه فقط مقادیر جمع‌بندی شده.

تبدیل داده‌ها (Transformation)

transform() برای وقتی به دردت می‌خوره که می‌خوای یه عملیات گروهی انجام بدی، اما نتیجه‌ش همون اندازه و شکل دیتافریم اصلی‌ت باشه. مثلاً می‌خوای هر فروش رو نسبت به میانگین فروش همون شهر نرمالایز کنی.


# محاسبه میانگین فروش هر شهر و اضافه کردن به دیتافریم اصلی
df['میانگین_فروش_شهر'] = df.groupby('شهر')['فروش'].transform('mean')
print("nدیتافریم با میانگین فروش هر شهر:")
print(df)

# نرمالایز کردن فروش نسبت به میانگین گروهی
df['فروش_نرمالایز_شده'] = df.groupby('شهر')['فروش'].transform(lambda x: (x - x.mean()) / x.std())
print("nدیتافریم با فروش نرمالایز شده بر اساس شهر:")
print(df)

نتیجه اجرای کد بالا:

دیتافریم با میانگین فروش هر شهر:
     شهر محصول  فروش  میانگین_فروش_شهر
0   تهران    A   100       126.666667
1  اصفهان    B   150       135.000000
2   تهران    A   200       126.666667
3   شیراز    C    50        70.000000
4  اصفهان    B   120       135.000000
5   تهران    C    80       126.666667
6   شیراز    A    90        70.000000

دیتافریم با فروش نرمالایز شده بر اساس شهر:
     شهر محصول  فروش  میانگین_فروش_شهر  فروش_نرمالایز_شده
0   تهران    A   100       126.666667          -0.540182
1  اصفهان    B   150       135.000000           0.707107
2   تهران    A   200       126.666667           1.453765
3   شیراز    C    50        70.000000          -0.707107
4  اصفهان    B   120       135.000000          -0.707107
5   تهران    C    80       126.666667          -0.913583
6   شیراز    A    90        70.000000           0.707107

همونطور که می‌بینی، `transform()` یه سری جدید برمی‌گردونه که اندازه دقیقاً شبیه دیتافریم اصلی‌ایه و می‌تونی مستقیماً اونو به عنوان یه ستون جدید به دیتافریم اضافه کنی.

اعمال توابع دلخواه (Apply Custom Functions)

وقتی که توابع آماده Pandas یا agg() و transform() کار تو رو راه نمی‌اندازن و به یه منطق پیچیده‌تر برای هر گروه نیاز داری، apply() ناجی توئه! این تابع بهت اجازه می‌ده هر تابعی رو که دلت می‌خواد، روی هر گروه از داده‌ها اعمال کنی.


# تعریف یه تابع دلخواه برای هر گروه
def calculate_range(group):
    # دامنه فروش (حداکثر - حداقل)
    return group['فروش'].max() - group['فروش'].min()

# اعمال تابع دلخواه با apply
دامنه_فروش_شهر = df.groupby('شهر').apply(calculate_range)
print("nدامنه فروش (Max - Min) به تفکیک شهر:")
print(دامنه_فروش_شهر)

نتیجه اجرای کد بالا:

دامنه فروش (Max - Min) به تفکیک شهر:
شهر
اصفهان     30
شیراز     40
تهران    120
dtype: int64

apply() خیلی قدرتمنده، چون بهت دسترسی کامل به هر گروه به صورت یه دیتافریم کوچیک می‌ده. این یعنی می‌تونی هر منطقی رو که فکرش رو می‌کنی، روی گروه‌هات اعمال کنی.

کار با `groupby` روی چند ستون

تا الان ما فقط با یه ستون گروه‌بندی کردیم. اما اگه بخوای مثلاً مجموع فروش رو به تفکیک “شهر” و “محصول” به دست بیاری چی؟ Pandas اینجا هم تو رو تنها نمی‌ذاره. کافیه یه لیست از ستون‌ها رو به groupby() بدی.


# گروه‌بندی بر اساس "شهر" و "محصول" و جمع "فروش"
فروش_شهر_محصول = df.groupby(['شهر', 'محصول'])['فروش'].sum()
print("nمجموع فروش به تفکیک شهر و محصول:")
print(فروش_شهر_محصول)

نتیجه اجرای کد بالا:

مجموع فروش به تفکیک شهر و محصول:
شهر    محصول
اصفهان  B        270
شیراز   A         90
        C         50
تهران   A        300
        C         80
Name: فروش, dtype: int64

همونطور که می‌بینی، نتیجه یه سری (Series) با یه ایندکس چندسطحی (MultiIndex) یا سلسله‌مراتبی (Hierarchical Index) شده. این یعنی حالا هم “شهر” و هم “محصول” به عنوان ایندکس عمل می‌کنن.

اگه با ایندکس چندسطحی مشکل داری و ترجیح می‌دی نتیجه رو به صورت یه دیتافریم معمولی با ستون‌های مجزا ببینی، می‌تونی از reset_index() استفاده کنی.


# استفاده از reset_index برای تبدیل MultiIndex به ستون
فروش_شهر_محصول_دیتافریم = df.groupby(['شهر', 'محصول'])['فروش'].sum().reset_index()
print("nمجموع فروش به تفکیک شهر و محصول (به صورت دیتافریم):")
print(فروش_شهر_محصول_دیتافریم)

نتیجه اجرای کد بالا:

مجموع فروش به تفکیک شهر و محصول (به صورت دیتافریم):
     شهر محصول  فروش
0  اصفهان    B   270
1   شیراز    A    90
2   شیراز    C    50
3    تهران    A   300
4    تهران    C    80

نکات و ترفندهای پیشرفته `groupby`

مدیریت مقادیر NaN (Missing Values)

Pandas به صورت پیش‌فرض مقادیر NaN (Not a Number) رو توی ستون‌هایی که برای گروه‌بندی استفاده می‌شن، نادیده می‌گیره. یعنی اگه تو ستون “شهر” یه مقدار NaN داشته باشی، اون سطر کلاً از گروه‌بندی حذف می‌شه.

اما اگه می‌خوای مقادیر NaN هم یه گروه جداگانه تشکیل بدن (که البته کاربرد کمتری داره)، می‌تونی از پارامتر dropna=False استفاده کنی:


import numpy as np

# اضافه کردن یه سطر با مقدار NaN
df_nan = df.copy()
df_nan.loc[len(df_nan)] = ['نامشخص', 'D', np.nan, np.nan, np.nan] # غلط املایی اینجا هست: نامشخص به جای نامشخص
df_nan.loc[len(df_nan)] = [np.nan, 'E', 70, 0, 0] # یک سطر با NaN در ستون گروه بندی

print("دیتافریم با مقادیر NaN:")
print(df_nan)

# گروه‌بندی عادی (NaN‌ها نادیده گرفته می‌شوند)
گروه‌بندی_عادی = df_nan.groupby('شهر')['فروش'].sum()
print("nگروه‌بندی عادی (بدون NaN در شهر):")
print(گروه‌بندی_عادی)

# گروه‌بندی با dropna=False (NaN به عنوان یک گروه در نظر گرفته می‌شود)
گروه‌بندی_با_نان = df_nan.groupby('شهر', dropna=False)['فروش'].sum()
print("nگروه‌بندی با NaN به عنوان گروه جداگانه:")
print(گروه‌بندی_با_نان)

نتیجه اجرای کد بالا:

دیتافریم با مقادیر NaN:
       شهر محصول   فروش  میانگین_فروش_شهر  فروش_نرمالایز_شده
0     تهران    A  100.0       126.666667          -0.540182
1    اصفهان    B  150.0       135.000000           0.707107
2     تهران    A  200.0       126.666667           1.453765
3     شیراز    C   50.0        70.000000          -0.707107
4    اصفهان    B  120.0       135.000000          -0.707107
5     تهران    C   80.0       126.666667          -0.913583
6     شیراز    A   90.0        70.000000           0.707107
7   نامشخص    D    NaN              NaN                NaN
8      NaN    E   70.0         0.000000           0.000000

گروه‌بندی عادی (بدون NaN در شهر):
شهر
اصفهان    270.0
شیراز     140.0
تهران     380.0
نامشخص      0.0
Name: فروش, dtype: float64

گروه‌بندی با NaN به عنوان گروه جداگانه:
شهر
اصفهان    270.0
شیراز     140.0
تهران     380.0
نامشخص      0.0
NaN        70.0
Name: فروش, dtype: float64

اینجا توی گروه‌بندی_با_نان می‌بینی که یه گروه به اسم NaN اضافه شده.

گروه‌بندی با زمان (Time-based Grouping)

اگه با داده‌های سری زمانی (Time Series Data) کار می‌کنی، groupby به همراه Grouper یا resample() می‌تونه خیلی مفید باشه. مثلاً می‌تونی داده‌ها رو بر اساس ماه یا سال گروه‌بندی کنی.


# ساخت یه دیتافریم با ستون تاریخ
date_data = {
    'تاریخ': pd.to_datetime(['2023-01-15', '2023-01-20', '2023-02-10', '2023-03-05', '2023-03-25']),
    'مقدار': [10, 20, 15, 30, 25]
}
df_time = pd.DataFrame(date_data)
df_time = df_time.set_index('تاریخ') # ستون تاریخ رو به عنوان ایندکس قرار می‌دیم

print("دیتافریم زمانی:")
print(df_time)

# گروه‌بندی بر اساس ماه
مقدار_ماهانه = df_time.groupby(pd.Grouper(freq='M'))['مقدار'].sum()
print("nمجموع مقدار به تفکیک ماه:")
print(مقدار_ماهانه)

# یا با استفاده از resample (برای ایندکس‌های زمانی)
مقدار_ماهانه_resample = df_time.resample('M')['مقدار'].sum()
print("nمجموع مقدار به تفکیک ماه با resample:")
print(مقدار_ماهانه_resample)

نتیجه اجرای کد بالا:

دیتافریم زمانی:
            مقدار
تاریخ
2023-01-15     10
2023-01-20     20
2023-02-10     15
2023-03-05     30
2023-03-25     25

مجموع مقدار به تفکیک ماه:
تاریخ
2023-01-31     30
2023-02-28     15
2023-03-31     55
Freq: M, Name: مقدار, dtype: int64

مجموع مقدار به تفکیک ماه با resample:
تاریخ
2023-01-31     30
2023-02-28     15
2023-03-31     55
Freq: M, Name: مقدار, dtype: int64

`’M’` به معنی گروه‌بندی بر اساس ماهه. Pandas از فرکانس‌های مختلفی پشتیبانی می‌کنه، مثل `’D’` (روزانه)، `’W’` (هفتگی)، `’Q’` (فصلی) و `’Y’` (سالانه).

اشتباهات رایج و چالش‌ها (Troubleshooting)

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

چرا نتیجه `groupby` ایندکس عجیب داره؟

مشکل: بعد از گروه‌بندی با چند ستون، می‌بینی که نتیجه یه ایندکس چندسطحیه که دسترسی به داده‌ها رو یکم سخت می‌کنه.

✅ راه‌حل:

از .reset_index() استفاده کن. این تابع ایندکس‌های سلسله‌مراتبی رو به ستون‌های عادی در دیتافریم تبدیل می‌کنه و کارت رو راحت‌تر می‌کنه. مثالش رو بالا دیدیم.

خطای `KeyError` موقع انتخاب ستون‌ها بعد از `groupby`

مشکل: وقتی بعد از groupby() می‌خوای یه ستون رو انتخاب کنی و عملیات انجام بدی، ارور KeyError می‌گیری.

✅ راه‌حل:

مطمئن شو که ستون مورد نظرت بعد از groupby() واقعاً وجود داره. بعضی وقت‌ها بعد از عملیات‌هایی مثل agg()، ستون‌ها تغییر نام می‌دن یا حذف می‌شن. بهترین کار اینه که قبل از groupby() فقط ستون‌های مورد نیازت رو انتخاب کنی یا از سینتکس دیکشنری در agg() استفاده کنی که نام ستون‌های خروجی رو مشخص می‌کنه.

مشکل عملکرد با دیتافریم‌های بزرگ

مشکل: برای دیتافریم‌های خیلی بزرگ، عملیات groupby به خصوص با apply() می‌تونه کند باشه.

✅ راه‌حل:

  • بهینه‌سازی نوع داده (dtypes): مطمئن شو که ستون‌هات از مناسب‌ترین نوع داده استفاده می‌کنن تا حافظه کمتری مصرف شه و عملیات‌ها سریع‌تر باشن.
  • از توابع بهینه Pandas استفاده کن: تا جایی که می‌تونی، به جای apply()، از agg() یا transform() با توابع داخلی Pandas استفاده کن. این توابع به زبان C پیاده‌سازی شدن و خیلی سریع‌ترن.
  • از Numba استفاده کن: برای توابع کاستوم (Custom Functions) پیچیده که با apply() استفاده می‌کنی، می‌تونی با استفاده از کتابخانه Numba (با دکوراتور @jit) سرعت رو به طرز چشمگیری افزایش بدی.
  • نمونه‌گیری (Sampling): برای تست و اشکال‌زدایی (Debugging)، می‌تونی روی یه زیرمجموعه کوچکتر از داده‌هات کار کنی تا سرعت کارت بالا بره.

غلط املایی در نام ستون‌ها

مشکل: یه خطای ساده ولی رایج، اشتباه تایپی در نام ستون‌هایی که به groupby() می‌دی. این باعث KeyError می‌شه.

✅ راه‌حل:

همیشه قبل از استفاده، لیست ستون‌های دیتافریم‌ت رو با df.columns بررسی کن و مطمئن شو که نام ستون‌ها رو دقیقاً درست نوشتی. این یکی از اون اشتباهات کوچیکیه که می‌تونه ساعت‌ها وقتت رو تلف کنه!

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

جمع‌بندی و نتیجه‌گیری

خب رفیق، تا اینجا با ابعاد مختلف groupby در Pandas آشنا شدی. از مفهوم پایه‌ای “Split-Apply-Combine” گرفته تا استفاده از agg()، filter()، transform() و apply(). حالا می‌تونی داده‌هات رو به هر شکلی که دلت می‌خواد، دسته‌بندی، خلاصه‌سازی و تحلیل کنی.

بهت قول می‌دم که با تمرین و استفاده مداوم از این ابزار قدرتمند، سرعت و دقتت تو تحلیل داده‌ها چندین برابر می‌شه. پس برو و با داده‌ها بازی کن و از قدرت groupby لذت ببر!

💡 پیشنهاد ویژه:

اگه علاقه‌مند به توسعه وب هستی و دنبال اسنیپت‌های کاربردی برای HTML، CSS و JavaScript می‌گردی، حتماً یه نگاهی به بخش HTML، CSS و JavaScript ما بنداز. کلی منابع خفن اونجا منتظرته!

برای توسعه‌دهندگان وردپرس هم کلی اسنیپت وردپرس داریم که کارشون رو راحت‌تر می‌کنه.

Table of Contents

آخرین نوشته‌ها