Python for Data Science
315 subscribers
127 photos
16 videos
12 files
61 links
اطلاعات مفید جهت یادگیری پایتون برای علم داده
Download Telegram
🐍 anaconda در مقابل virtualenv: کدام یک را برای پایتون استفاده کنیم؟ 🐍

اگر شما یک کاربر پایتون هستید، ممکن است از anaconda و virtualenv، دو ابزار محبوب که می‌توانند به شما در ایجاد و مدیریت محیط‌ها و بسته‌های پایتون کمک کنند، شنیده باشید. اما چه تفاوت و مزیت و معایبی بین آن‌ها وجود دارد؟ و کدام یک را باید برای پروژه‌های خود استفاده کنید؟
در این پست، ما anaconda و virtualenv را از نظر ویژگی‌ها، مزایا و معایبشان مقایسه می‌کنیم و به شما چند راهنمای عمومی می‌دهیم که چگونه بهترین ابزار را برای نیازهای خود انتخاب کنید.

📕ابزار anaconda چیست؟
ابزار anaconda یک توزیع از پایتون و R است که با بسیاری از بسته‌های از پیش نصب شده برای علوم داده، یادگیری ماشین و محاسبات علمی همراه است. همچنین شامل کاندا، یک مدیر بسته و محیط است که می‌تواند بسته‌ها را از منابع مختلف نصب کند و محیط‌های جدا شده ایجاد کند. anaconda همچنین دارای یک رابط کاربری گرافیکی به نام ناوگان است که می‌تواند به مبتدیان و غیر برنامه‌نویسان در راه‌اندازی برنامه‌ها، مدیریت بسته‌ها و محیط‌ها و دسترسی به مستندات کمک کند.

📗ابزار virtualenv چیست؟
ابزار virtualenv یک ابزار است که به شما اجازه می‌دهد محیط‌های پایتون جدا شده ایجاد کنید. از pip به عنوان مدیر بسته خود استفاده می‌کند که بسته‌ها را از فهرست بسته پایتون (PyPI) نصب می‌کند. virtualenv یک ابزار خط فرمان است که نیاز به آشنایی با دستورات ترمینال دارد.

📘مزایا و معایب anaconda در مقابل virtualenv
این برخی از مزایا و معایب استفاده از anaconda در مقابل virtualenv هستند:
🔺ابزار anaconda فضای بیشتری از دیسک را در مقایسه با virtualenv اشغال می‌کند، زیرا با بسیاری از بسته‌هایی که ممکن است نیاز یا استفاده نداشته باشید، همراه است. virtualenv به شما اجازه می‌دهد تنها بسته‌هایی را که برای پروژه خود نیاز دارید نصب کنید، که می‌تواند فضا را صرفه‌جویی کند و تضادها را جلوگیری کند.
🔺ابزار anaconda می‌تواند محیط‌ها و بسته‌های R را هم مدیریت کند، که می‌تواند مفید باشد اگر با هر دو زبان کار کنید. virtualenv تنها برای پایتون است و شما برای مدیریت محیط‌ها و بسته‌های R به ابزار دیگری مانند رنو نیاز دارید.
🔺ابزار anaconda دارای یک رابط کاربری گرافیکی به نام ناوگان است که می‌تواند به مبتدیان و غیر برنامه‌نویسان در راه‌اندازی برنامه‌ها، مدیریت بسته‌ها و محیط‌ها و دسترسی به مستندات کمک کند. virtualenv یک ابزار خط فرمان است که نیاز به آشنایی با دستورات ترمینال دارد.
🔺ابزار anaconda مناسب‌تر برای پروژه‌های علوم داده و نیاز به مجموعه گسترده‌ای از بسته‌های از پیش نصب شده است. virtualenv انعطاف‌پذیرتر است و به شما کنترل بیشتری بر روی نسخه‌ها و بسته‌های پایتون می‌دهد.

📙چگونه بهترین ابزار را برای نیازهای خود انتخاب کنیم؟
تجربه کاربران ممکن است بسته به ترجیحات، نیازها و موارد استفاده‌شان متفاوت باشد. برخی از راهنمایی‌های عمومی عبارتند از:
🔺برای محیط‌های حداقلی: اگر شما ترجیح می‌دهید محیط‌های سبک و حداقلی داشته باشید، virtualenv انتخاب بهتری است .
🔺برای پروژه‌های علوم داده: اگر شما روی پروژه‌های علوم داده کار می‌کنید و نیاز به مجموعه گسترده‌ای از بسته‌های از پیش نصب شده دارید، anaconda مناسب‌تر است .
🔺برای مبتدیان: اگر شما تازه به پایتون علاقه‌مند شده‌اید و ترجیح می‌دهید یک رابط کاربری گرافیکی داشته باشید، ناوگان anaconda می‌تواند به شما کمک کند .
🔺برای کاربران پیشرفته: اگر شما با خط فرمان راحت هستید و می‌خواهید کنترل بیشتری بر روی نسخه‌ها و بسته‌های پایتون داشته باشید، virtualenv انعطاف‌پذیرتر است .

📝امیدوارl این پست به شما کمک کند تا مزایا و معایب استفاده از anaconda در مقابل virtualenv را بفهمید. اگر سوال یا نظری داشتید، لطفا بنویسید. 🙌

🔎 @py4ds
😁 چت‌جی‌پی‌تی برای اینکه بهتر جواب بده بهش وعده پول میدن😜

🐳 به نظرم اینم بد نیست که بهش بگی «اگر خوب بهم یاد بدی برات رزومه میشه» 😁😁😁😁

🔎 @py4ds
Media is too big
VIEW IN TELEGRAM
🧠شرکت OpenAI از اولین مدل متن به ویدیو خود به نام Sora رونمایی کرد.

🎬این مدل توانایی تولید ویدیوهایی تا حداکثر 60 ثانیه که صحنه‌های بسیار دقیق، حرکات پیچیده دوربین و شخصیت‌های متعدد با احساسات پر جنب و جوش را نشان می‌دهد را دارد. درحال حاضر افراد بسیار کمی به این مدل دسترسی دارند که به زودی شاهد افزایش آن خواهیم بود.

📃 اطلاعات بیشتر


🔎 @py4ds
مانی چند وقتیه که توی کانالش در مورد SQL به صورت تخصصی حرف میزنه،‌ یک آموزشایی میده بهتون که سطح اعتماد به نفستون رو میاره زیر صفر، که چرا من اینا بلد نبودم، وای چرا من گند زدم تو پروژه ملت با این سوادم و ...

خلاصه که برید تو کانالش یاد بگیرید یکم با دیتابیس مهربون تر باشید و درست تر کوئری بزنید و بابای سرور رو از توی پورت هاش نکشید بیرون

کانالش :
@PyBackEndHub

من تخصص اصلیم nosql هستش و اگر دوست داشته باشید بعضی وقتا در مورد دیتابیس های سری زمانی صحبت کنم و سیستم‌شون رو یاد بدم بهتون

🔎 @py4ds
🐳 Happy new year : Permission denied ;-)

#docker

🔎 @py4ds
کار با Enum :
‍‍‍
from enum import Enum

class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3

# You can access the enum members using their names.
print(Color.RED) # Output: Color.RED

# You can also access them using their values.
print(Color(1)) # Output: Color.RED

# Enum members are hashable, so they can be used in dictionaries and sets.
my_dict = {Color.RED: 'red', Color.GREEN: 'green', Color.BLUE: 'blue'}
print(my_dict[Color.RED]) # Output: 'red'

🔺از پایتون نسخه 3.4 Enum معرفی شده بود و در نسخه‌ی 3.6 نیز Flag, IntEnum, auto معرفی شد.

📝 برای IntEnum
‍‍‍
from enum import IntEnum

class Shape(IntEnum):
CIRCLE = 1
SQUARE = 2
TRIANGLE = 3

print(Shape.CIRCLE == 1) # Output: True

📝 برای Flag, auto
from enum import Flag, auto

class Permission(Flag):
READ = auto()
WRITE = auto()
EXECUTE = auto()

print(Permission.READ | Permission.WRITE) # Output: Permission.READ|WRITE


همچنین در نسخه 3.11 امکانات بیشتری بهش اضافه شد:
StrEnum, EnumCheck, ReprEnum, FlagBoundary, property, member, nonmember, global_enum, show_flag_values


class Direction(ReprEnum):
NORTH = "↑ North"
EAST = "→ East"
SOUTH = "↓ South"
WEST = "← West"

print(Direction.NORTH) # Output: ↑ North


class Permissions(FlagBoundary):
READ = 1
WRITE = 2
EXECUTE = 4

user_permissions = Permissions.READ | Permissions.WRITE
print(user_permissions) # Output: Permissions.READ | Permissions.WRITE


def show_flag_values(enum_class, value):
for member in enum_class:
if member & value:
print(f"{member.name}: {member.value}")

permissions = Permissions.READ | Permissions.WRITE
show_flag_values(Permissions, permissions)
# Output:
# READ: 1
# WRITE: 2


🔎 @py4ds
Forwarded from Sadra Codes
نسخه 0.5 پای‌اکشن هم رلیز شد! 💫

پای‌اکشن یه ابزاره متن‌بازه که اجازه می‌ده با استفاده از پایتون، گیت‌هاب اکشن بسازید!

توی این رلیز کلی اتفاق افتاده. پروژه دیگه یه تمپلیت ساده نیس و تبدیل شده به یه پکیج پایتون. علاوه‌بر بهترشدن داکیومنت و ساختار، یه فیچر خیلی خفن هم اضافه شده که واقعا استفاده از GitHub Issues رو یه لول می‌بره بالاتر!

این فیچر این قابلیت رو به شما میده تا از Issue Form گیت‌هاب بعنوان ساید فرانت اپ های پایتونتون استفاده کنید! این فیچر الان قابل استفاده هست و توتوریالش هم توی داک‌ها قرارداده شده.

یک مثال که می‌تونید با پای‌اکشن پیاده کنید: فرض کنید که یک ریپو NLP دارید که برای Text Summaraization استفاده می‌شه و می‌خواید مردم این قابلیت رو داشته باشن که تستش کنن. به راحتی می‌تونید ساختاری رو طراحی کنید که هرشخص بتونه یک ایشو باز کنه و در ایشو، از ابزار شما استفاده کنه. (همه‌چیز اتوماتیک اتفاق میوفته)

💅 Issue Form feature: pyaction.imsadra.me/tutorial/#issueform

🟣 PyAction repo: github.com/lnxpy/pyaction
Forwarded from Go Casts 🚀
به دنبال ساختار باشید و نه چارچوب

چند روز پیش یه مربی کودک یه حرف خیلی مهمی زد با این مفهوم: «ما اینجا برای بچه ها ساختار تعیین می کنیم نه چارچوب، چارچوب یعنی حد و مرز!»
این جمله رو باید قاب کرد و زد رو دیوار، احتمالا در ابعاد خیلی زیادی از زندگی مهم باشه. در مهندسی نرم افزار و توسعه محصول هم خیلی حرف مهمیه.
بیشتر اوقات ما دنبال چارچوب هستیم در مهندسی نرم افزار، به همین دلیل وقتی خودمون رو به یه چارچوب خاص محدود می کنیم با چالش های زیادی روبرو میشیم. در حالیکه بهتره ما برای توسعه محصول ساختار داشته باشیم و طبق اصول ساختاری کار رو پیش ببریم، اینطوری چالش مون کمتر میشه.
اجازه بدید برداشت خودم از چارچوب و ساختار رو کمی بیشتر باز کنم. ساختار میشه مجموعه از قواعد رفتاری که باید سعی کنیم در توسعه محصول بهشون پایبند باشیم، در مقابل، چارچوب میشه تعیین کردن یه سری حد و مرز مشخص به شیوه ای سختگیرانه.
مثلا اگه بخوام برای توسعه یک سرویس ساختار تعیین کنم احتمالا میگم: این سرویس باید توان پاسخگویی بالایی داشته باشه، در مقابل خطا مقاوم باشه، قابلیت مقیاس پذیری داشته باشه، یک قرارداد ساده و شفاف به کلاینت ها ارائه بده و مواردی از این دست.
اما اگه بخوام چارچوب برای سرویس تعیین کنم احتمالا میگم: ما باید از ساختار کد مبتنی بر clean code یا ddd در فلان repository که خودمون یا دیگران اونو نوشتن پیروی کنیم، باید همه ورودی هارو تو پوشه port قرار بدیم، باید همه مدل هامون تو پوشه models باشه، باید از فلان روش ci/cd استفاده کنیم.

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

خیلی از practiceهایی که معروف شدند مثل clean code و ddd و tdd و غیره هم از نظر من بیشتر به دنبال این هستند که به شما کمک کنند که برای کارتون ساختار تعیین کنید. در حالیکه اشتباهی که زیاد رخ میده اینه که ما با خوندن این مطالب احتمالا بیشتر به سمت درآوردن چارچوب میریم... همه ش به دنبال این هستیم که مثلا یه boilerplate داشته باشیم که از clean code پیروی کنه و همون رو همه جا استفاده کنیم.

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

شما وقتی برای کارت ساختار داشته باشی میتونی انعطاف پذیر باشی و بسته به نیازت چارچوب تعیین کنی، اما اگه بخوای یه چارچوب معین رو همه جا رعایت کنی احتمالا یه جاهایی اصول ساختاری خودت رو مجبور میشی زیر پا بذاری چون هیچ چارچوب واحدی وجود نداره که برای همه نیازها مناسب باشه.

@gocasts
هر وقت صحبت از شیء گرایی و ارث بری میشه پای Mixin هم میاد وسط. اما دقیقا چیه؟ Mixin توی پایتون یک الگو هستش و کدهایی که از این الگو بهره می‌برند کلمه‌ی کلیدی خاصی یا چیز اضافه‌تری ندارند. فرض کنین ما می‌خواهیم یک متد جدید به یک کلاس اضافه کنیم تا کارایی یا Functionality اون رو زیاد کنیم. اینجا میشه از Mixin استفاده کرد.
مثلا کلاس‌های زیر رو در نظر بگیرید.
class Vehicle:
    pass

class Car(Vehicle):
    pass

class Van(Vehicle):
    pass

class Motorcycle(Vehicle):
    pass

حالا نیاز داریم که متد play music رو هم به این کلاس ها اضافه کنیم، دوتا راه داریم. اولیش اینه که:
class Vehicle:
    pass

class Car(Vehicle):

    def play_music(self):
        print("play_music")

class Van(Vehicle):

    def play_music(self):
        print("play_music")
   
class Motorcycle(Vehicle):
    pass

اما یک ایرادی وجود داره. اینجا خودمون رو تکرار کردیم. درواقع اومدیم دوبار یک تکه کد رو تکرار کردیم و این از نظر کدینگ وجه خوبی نداره. پس این راه حل ما نیست.
روش دوم اینه بیایم به بیس کلاسمون یعنی Vehicle یک متد تحت عنوان play_music اضافه کنیم.

class Vehicle:
    def play_music(self):
        print("play_music")

class Car(Vehicle):
    pass

class Van(Vehicle):
    pass

class Motorcycle(Vehicle):
    pass

اما در این صورت کلاس موتورسیکلت هم دارای رفتار پخش موزیک خواهد شد و این اشتباه است. اینجا است که Mixin خودش رو نشون می‌ده. به کد زیر توجه کنید.
class Vehicle:
    pass

class PlayMusicMixin:
    def play_music(self):
        print("play_music")

class Car(Vehicle, PlayMusicMixin):
    pass

class Van(Vehicle, PlayMusicMixin):
    pass

class Motorcycle(Vehicle):
    pass

درواقع از کلاس PlayMusicMixin قرار نیست هیچ شیٔ ای ساخته شود و صرفا مهم این است که کارایی کلاس‌های خاصی را افزایش شود.
پ.ن: اون کلمه‌ی Mixin انتهای اسم کلاس هم قراردادیه، بهتره نوشته بشه ولی اجبار نداره.
Forwarded from Python BackendHub (Mani)
یک سری نکاتی که بنظرم تو ویدیو جا مونده بود

@PyBackendHub
Forwarded from Python BackendHub (Mani)
چیزی که من متعجب شدم اکثرا میگن این <خیلی پیچیدست>. ولی حقیقتا اصلا پیچیده نیست. کامیونیتی پایتون خیلی گارد زیادی نسبت به تایپینگ داره که تو دراز مدت قطعا ضربه میخورین چون پایتون الان هر نسخه ریلیز میده ۸۰ درصدش تایپینگ improvement هست و شما اگه الان typing بلد نباشین عملا از خیلی از لایبری های جدید نمیتونید استفاده کنید.
تو این مثال حتی یک خط نشده. و شما اینکار رو برای آیدی ها انجام میدی. تو یک سرویس پرحجم که شما ۲۰۰ تیبل داری نهایتا میشه ۲۰۰ خط NewType. و باعث میشه signature همه کد های شما قابل خوانا باشه.
این tip به درد شما میخوره اگه کد میزنی. لزوما به بک اند هیچ ربطی نداره. الان شما یک تابع بنویسید که یک سری‌آیدی موزیک و آیدی یوزر بگیره و بعد بگه برای هر موزیک هر یوزر پیش بینی کنه از صفر تا صد چقدر ممکنه دوست داشته باشه

این ۳ مثال رو ببینید, مثال اول تایپینگ خوبی داره. مثال دوم تایپینگ داره ولی به درد بخور نیست خیلی. و مثال سوم تایپینگ نداره.

# WITH GOOD TYPING
Percentage: TypeAlias = int # from 0 to 100.
def calculate_music_populatiry(person_ids: list[PersonId], music_ids: list[MusicId]) -> dict[PersonId, list[tuple[MusicId, Percentage]]

# WITH BAD TYPING
def calculate_music_populatiry(person_ids: list[UUID], music_ids: list[UUID]) -> dict[UUID, list[tuple[UUID, int]]


# WITHOUT TYPING
def calculate_music_populatiry(person_ids, music_ids)


من میتونم بدونه اینکه کدو ببینم از فانکشن اولی استفاده کنم. فانکشن دومی معلوم نیست چی به چی لینک شده. پس باید حواسم باشه موقع استفاده ازش. و بعدا ریفکتورش هم کردم باید ۱۰۰درصد حواسم باشه signature اش تغییر نکنه. و فانکشن سوم که کلا فاجعست. اصلا maintainable نیست. قضاوت رو میذارم با خودتون.

@PyBackendHub
🏴 عاشورای حسینی تسلیت باد 🏴


🔎 @py4ds
Forwarded from Python BackendHub (Mani)
Python BackendHub
بخاطر یک ریلیز جدید setuptools که برکینگ چنج داشته، کل ابزارا مثل uv و poetry و pdm از کار افتادن از امروز فیکسش اینجاست موقتا https://github.com/pypa/setuptools/issues/4519#issuecomment-2254983472 @PyBackendHub
داستان چی بود؟
دیشب maintainer لایبری setuptools قبل اینکه بخوابه، یک ریلیز داد که بیلد قدیمی پایتون رو کلا دیگه ساپورت نمیکرد. ۵ ساله که deprecate شده بود و الان باید از PEP 571 استفاده کنید.

خیلی پکیج ها هنوز اینو اعمال نکرده بودن، درنتیجه pip install با نسخه اخر setuptool فیل میشد واسه اون پکیجا.

تو گیتهاب هم به شدت شلوغ شد! منتینر بعد ۱۰ ساعت بلند شد دید یک ایشو ساخته شده ۱۵۰ تام کامنت خورده 😁 در نتیجه ریلیز رو yank کرد.

نکته جالب اینجاست که اون warningای که میداد رو کنسول خیلی وقتا نمایش داده نمیشد، و برای همین خیلیا ندیده بودن اصلا.

خوده maintainer هم فرض کرده بود که مشکل زیادی پیش نمیاد.

خلاصه که درس شد:
۱. قبل از خواب ریلیز ندید 😂 اخرین روز هفته هم همینطور :))
۲. فرضیات همیشه با واقعیت فرق دارن، چیزایی که فکر میکنید قطعا کار میکنن درواقع ممکنه کار نکنند (مثل depreciation message). همیشه فرضیات رو زیرسوال ببرید و دوباره چک کنید وقتی دارین یک کار مهمی انجام میدین

@PyBackendHub
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
GIL Become Optional in Python 3.13

یکی از تغییرات خفن 3.13 نسبت به 3.12 اینه که میتونه GIL رو آپشنال داشته باشی و غیر فعالش کنی

هنوز توی بیلد های موجود تو سایت پایتون فعال نشده ولی توی رلیز نهایی چنین چیزی قابل استفاده هستش

اجرای برنامه قطعا سریعتر میشه اما احتمال ۹۹ درصد برای پروژه های قبلیتون غیر فعال کنید احتمالا ی عالمه باگ بخورید 😁

https://geekpython.in/gil-become-optional-in-python

@SEYED_BAX
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM