NumPy یکی از کتابخانههای اصلی و پایهای در اکوسیستم علمی پایتون است که برای انجام محاسبات عددی و کار با دادههای چندبعدی استفاده میشود.
دلیل اصلی محبوبیت NumPy در بین برنامهنویسان و تحلیلگران داده، سرعت بالا و کارایی حافظه آن است. برخلاف لیستهای معمولی پایتون که هر عنصر در حافظه به صورت جداگانه و با اشارهگر نگهداری میشود، NumPy دادهها را بهصورت پیوسته و فشرده در یک بلوک حافظه ذخیره میکند و از نوع داده همگن (مثل float64 یا int32) استفاده میکند؛ همین ویژگی باعث میشود عملیات ریاضی، آماری و ماتریسی بسیار سریعتر اجرا شوند.
علاوه بر این، NumPy از توابع و بردارهای بهینهشده در سطح زبان C استفاده میکند که اجرای محاسبات سنگین را تا چندین برابر سریعتر از پایتون خالص میسازد. بهطور کلی، هر زمان که حجم داده زیاد باشد یا نیاز به تحلیل عددی دقیق و سریع داشته باشیم، NumPy بهترین انتخاب است.
متد های مهم در Numpy
np.arange(n) np.array([]) np.reshape() np.random.rand() np.random.randn() np.random.randint(start, stop, size) np.random.choice(list, n) np.min() np.max() np.mean() np.std() a[0] a[-1] a[-1][-1] a + 3 a[a%2 == 0]
مصرف حافظه لیست و ارایه numpy
لیستهای پایتون (Python Lists):
اشارهگر (Pointer): هر عنصر در یک لیست پایتون در واقع یک اشارهگر به یک شیء دیگر در حافظه است. این خود شیء (مثلاً یک عدد اعشاری float) در جای دیگری از حافظه نگهداری میشود.
سربار (Overhead): علاوه بر حافظهای که خود شیء داده اشغال میکند، حافظه اضافی برای نگهداری این اشارهگرها و همچنین سربار مربوط به ساختار داده لیست (که باید قابلیت تغییر اندازه و افزودن/حذف عناصر را داشته باشد) مصرف میشود.
عدم پیوستگی: عناصر یک لیست لزوماً در حافظه به صورت پیوسته قرار ندارند.
آرایههای NumPy (NumPy Arrays):
پیوستگی حافظه (Contiguous Memory): NumPy دادهها را در یک بلوک پیوسته از حافظه ذخیره میکند. این به این معنی است که تمام عناصر آرایه پشت سر هم در حافظه قرار میگیرند.
نوع داده یکسان (Homogeneous Data Type): NumPy انتظار دارد که تمام عناصر آرایه از یک نوع داده مشخص باشند (مثلاً همه float64 یا همه int32). این اجازه میدهد تا حافظه به طور بسیار فشرده و بدون سربار اضافی برای هر عنصر، مدیریت شود.
کاهش سربار: چون نیازی به ذخیره اشارهگر برای هر عنصر نیست و دادهها پیوسته هستند، سربار حافظه به شدت کاهش مییابد. sys.getsizeof() برای یک آرایه NumPy (غیر از حالت dtype=object) عمدتاً اندازه خود شیء آرایه (شامل متادیتای آن و اشارهگر به بلوک حافظه داده) را نشان میدهد، نه اندازه تک تک عناصر.
نکته مهم در مورد dtype=object:
زمانی که از dtype=object در NumPy استفاده میکنید، مزیت بهینگی حافظه از بین میرود. در این حالت، NumPy مانند یک لیست پایتون عمل میکند و به جای ذخیره مستقیم مقادیر، اشارهگرهایی به اشیاء پایتون (که میتوانند از انواع مختلفی باشند) را ذخیره میکند. بنابراین، مصرف حافظه در این حالت مشابه لیست پایتون خواهد بود و حتی ممکن است کمی بیشتر هم باشد به دلیل سربار اضافی خود شیء آرایه NumPy.
Pandas یک کتابخانه توانمند و پرکاربرد در زبان پایتون است که برای مدیریت، تحلیل و پردازش دادههای جدولی و سری زمانی طراحی شده است.
این کتابخانه بر پایهی NumPy ساخته شده و ساختار اصلی آن یعنی DataFrame، مشابه جدولهای داده در Excel یا دیتابیسها است؛ هر ستون در آن میتواند نوع داده متفاوتی داشته باشد (عددی، متنی، تاریخ و غیره). دلیل اصلی استفاده از Pandas این است که بسیاری از کارهای رایج در تحلیل داده — مانند پاکسازی، فیلتر کردن، گروهبندی، ترکیب دادهها و محاسبات آماری — را به شکلی ساده، خوانا و بسیار سریع انجام میدهد. همچنین Pandas قابلیت خواندن و نوشتن مستقیم داده از فرمتهای مختلفی مانند CSV، Excel، SQL و JSON را دارد.
به طور خلاصه، Pandas ابزاری است که دادههای خام را به دادههای قابل تحلیل تبدیل میکند و در فرآیندهای علم داده (Data Science)، تحلیل کسبوکار (Business Analytics) و یادگیری ماشین (Machine Learning) نقش مرکزی دارد.
دستورات مهم:
# Series df.Series([1, 3, 5], index = ["A", "B", "C"]) # DataFrame df.DataFrames(data) # see features and data types df.info() # missing values df.isna() # total missing values df.isna().sum() # fill missing values with mean df["age"].fillna(df["age"].mean()) # filter mask = df["age"] > 15 df[mask] # remove mask = df["age"] < 10 df[mask] # between mask = df["age"].between(12, 14) # is mask = df["city"].isin("Tehran") # groupby df.groupby("city")["age"].sum() # aggregation df.groupby("city")["age"].agg(["sum", "count", "min"])