Forwarded from TorhamDev | تورهام 😳
یک مبحثی که خیلی وقتها آدمهای رو داخل #جنگو گیج میکنه موضوع Aggregation هستش. برای مثال کوئری پایین:
خب این کوئری مشخصه چه کاری داره انجام میده، همه میتونن بفهمنش مخصوصا وقتی خروجی کوئری رو میبینن، اما اگر ازشون بپرسید خب Aggregation چی هستش هیچ ایده ای ندارن! و این ماجرا از ضعف در دانش SQL سر چشمه میگیره. چون خیلی از آدمهایی که دارن #django کار میکنن مستقیم سراغ جنگو اومدن و نرفتن چیزهای دیگه رو مطالعه کنن و یاد بگیرن.
اسم Aggregation داخل ORM جنگو مستقیما از SQL میاد. در SQL یک سری فانکشن وجود داره که بهشون Aggregation functions میگن و کارشون خلاصه سازی اطلاعات:
MIN() - returns the smallest value within the selected column
MAX() - returns the largest value within the selected column
COUNT() - returns the number of rows in a set
SUM() - returns the total sum of a numerical column
AVG() - returns the average value of a numerical column
و خب شما میتونید داخل کوئریهای SQL ازشون استفاده کنید و دیتا خروجی رو خلاصه سازی کنید و یا یک آمار ازش دربیارید. مثلا میانگین قیمت کتابهای تو سال اخیر و ...
یک کوئری مثال برای Aggregation میتونه این باشه:
خب از اونجایی که ORM جنگو در نهایت قرار کار همین SQL نوشتن برای شما انجام بده و کوئری شمارو به SQL تبدیل کنه شما دقیقا همین کوئری میتونید داخل جنگو به این صورت بنویسید:
میتونید لیست فانکشنهای Aggregation خود SQL داخل این لینک ببینید و ساپورت جنگو هم میتونید داخل این لینک ببینید.
در نهایت از دانش SQL غافل نباشید و حتما یادش بیگیرید. هرچی بیشتر SQL بدونید زندگی راحتتری خواهید داشت.
@TorhamDevCH
>>> from django.db.models import Avg, Max, Min
>>> Book.objects.aggregate(Avg("price"), Max("price"), Min("price"))
# {'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}
خب این کوئری مشخصه چه کاری داره انجام میده، همه میتونن بفهمنش مخصوصا وقتی خروجی کوئری رو میبینن، اما اگر ازشون بپرسید خب Aggregation چی هستش هیچ ایده ای ندارن! و این ماجرا از ضعف در دانش SQL سر چشمه میگیره. چون خیلی از آدمهایی که دارن #django کار میکنن مستقیم سراغ جنگو اومدن و نرفتن چیزهای دیگه رو مطالعه کنن و یاد بگیرن.
اسم Aggregation داخل ORM جنگو مستقیما از SQL میاد. در SQL یک سری فانکشن وجود داره که بهشون Aggregation functions میگن و کارشون خلاصه سازی اطلاعات:
MIN() - returns the smallest value within the selected column
MAX() - returns the largest value within the selected column
COUNT() - returns the number of rows in a set
SUM() - returns the total sum of a numerical column
AVG() - returns the average value of a numerical column
و خب شما میتونید داخل کوئریهای SQL ازشون استفاده کنید و دیتا خروجی رو خلاصه سازی کنید و یا یک آمار ازش دربیارید. مثلا میانگین قیمت کتابهای تو سال اخیر و ...
یک کوئری مثال برای Aggregation میتونه این باشه:
SELECT AVG(Price) as price_avg FROM Books WHERE puddate=''2023-01-01'';
خب از اونجایی که ORM جنگو در نهایت قرار کار همین SQL نوشتن برای شما انجام بده و کوئری شمارو به SQL تبدیل کنه شما دقیقا همین کوئری میتونید داخل جنگو به این صورت بنویسید:
>>> from django.db.models import Avg
>>> from datetime import datetime
>>> Books.objects.filter(pubdate=datetime(2023, 1, 1)).aggregate(price_avg=Avg("price"))
میتونید لیست فانکشنهای Aggregation خود SQL داخل این لینک ببینید و ساپورت جنگو هم میتونید داخل این لینک ببینید.
در نهایت از دانش SQL غافل نباشید و حتما یادش بیگیرید. هرچی بیشتر SQL بدونید زندگی راحتتری خواهید داشت.
@TorhamDevCH
W3Schools
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
👍1
این روزا بازی همستر طوری سر وصدا ایجاد کرده که اونای که تلگرام نداشتن هم دارن جوین میشن جدیدا تقریبا امروز بالای ۱۵ تا از مخاطب هام وارد تلگرام شدن و هر کدوم یکی در میون لینک دعوت فرستاده 😅😅
😁3💔1
🧑💻PythonDev🧑💻
https://t.me/milldeofDeeplearning
لینک چنل هوش مصنوعی بنده است دوستانی که علاقه مند به یادگیری و فعالیت در این حوزه هستن می تونن تو کانال جوین شن
👍1
من فک میکردم درآمد ساقی ها زیاد باشه تا اینکه دیدم ساقی محلمون با همه شماره هاش joined the Telegram
😁2
با سلام و وقت بخیر اگه کسی از دوستان هست که حوزه ماشین لرینگ کار کرده به صورت تخصصی به ایدی بنده که توی توضیحات چنل هست پیام بده ممنون میشم
🧑💻PythonDev🧑💻 pinned «با سلام و وقت بخیر اگه کسی از دوستان هست که حوزه ماشین لرینگ کار کرده به صورت تخصصی به ایدی بنده که توی توضیحات چنل هست پیام بده ممنون میشم»
برای مثال اگه رباتتون 7000 تا کاربر داشت طبیعتا 10 تا 10 تا فرستادن اطلاعات کاربر ها اصلا روش خوبی نیست
حالا راهکار چیه؟
یکی از راه های باحال استفاده از فایل های اکسل هست! چرا که نه!😊
بریم برای نوشتن تابع تبدیل لیست به فایل اکسل
pip install openpyxl
pip install pandas
import pandas as pd
def list_to_excel(lst,name='output.xlsx',colum=[]):
df = pd.DataFrame(lst,columns=colum)
df.to_excel(name, index=False)
این تابع 3 تا ورودی داره اولی یه لیست هست، دومی اسم فایل خروجی که به صورت پیشفرض output.xlsx هست و در نهایت سومی که همان عنوان های هر ستون هست
برای مثال در اینجا لیستی داریم از کاربر های یک سایت و میخوایم هر عضو از این لیست که هر کدام یه لیسته رو داخل یک ردیف تو فایل اکسل وارد کنیم:
list = [ ["reza" , 20] , [ "zahra" , 20 ] ]
name = "output.xlsx"
colum = [ "name" , "age" ]
list_to_excel(list,name,colum)
#تیکه_کد
#پایتون
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👎1
#Python
یکی پایه های شیء گرایی encapsulation هست، توی پایتون برای اجرا این قانون چند راه مختلف داریم، یکی از اون ها استفاده از دکوریتور [at]property هستش. با بکار گیری این دکوریتور ما برای متغییر های داخل کلاس تعیین میکنیم که چه مقداری بهشون اساین بشه، یا اصلا دسترسی اساین رو میگیریم!!
برای مثال: فرض کنید ما در یک کلاس به متغییری نیاز داریم که فقط عددی از 0 تا 100 داخلش ذخیره کنیم. اسم متغییر رو y در نظرم می گیریم.
در تصویر داخل کلاس یک متغییر به اسم y_ داریم(متغییر هایی که با یک _ شروع بشن protected و اونایی که با ــ شروع میشن private هستن)
متغییر y_ درواقع همون متغییر y هست اما با توجه به اینکه مقدار این متغییر نباید مستقیم توسط instance کلاس تغییر کنه، چون باید حتما بین 0 تا 100 باشه. پس ما یک متغییر protected تعریف میکنیم که مقدار 0 تا 100 رو نگهداری کنه و یک فانکشن به اسم y که به متغییر y_ مقدار بدهد و همچنین مقدار y_ را برگرداند. به این نوع از فانکشن ها property میگن، که getter ,setter و deleter را برای یک متغییر تنظیم میکند(طبق تصویر).
یکی پایه های شیء گرایی encapsulation هست، توی پایتون برای اجرا این قانون چند راه مختلف داریم، یکی از اون ها استفاده از دکوریتور [at]property هستش. با بکار گیری این دکوریتور ما برای متغییر های داخل کلاس تعیین میکنیم که چه مقداری بهشون اساین بشه، یا اصلا دسترسی اساین رو میگیریم!!
برای مثال: فرض کنید ما در یک کلاس به متغییری نیاز داریم که فقط عددی از 0 تا 100 داخلش ذخیره کنیم. اسم متغییر رو y در نظرم می گیریم.
در تصویر داخل کلاس یک متغییر به اسم y_ داریم(متغییر هایی که با یک _ شروع بشن protected و اونایی که با ــ شروع میشن private هستن)
متغییر y_ درواقع همون متغییر y هست اما با توجه به اینکه مقدار این متغییر نباید مستقیم توسط instance کلاس تغییر کنه، چون باید حتما بین 0 تا 100 باشه. پس ما یک متغییر protected تعریف میکنیم که مقدار 0 تا 100 رو نگهداری کنه و یک فانکشن به اسم y که به متغییر y_ مقدار بدهد و همچنین مقدار y_ را برگرداند. به این نوع از فانکشن ها property میگن، که getter ,setter و deleter را برای یک متغییر تنظیم میکند(طبق تصویر).
سلام، اومدم یه چیزی بگم و برم 👋
امروز داشتم یه برنامه ای مینوشتم که یه سری دیتا رو میفرستاد به یه جایی و دیتایی که داشتم به شکل یه لیست بود که توش هزاران دیکشنری بود
نیاز بود که 100 تا 100 تا دیکشنری هارو از توی لیست بیارم بیرون و بفرستم به مقصد
پس اول اومدم یه همچین چیزی نوشتم
اما مشکل این بود که اگر مثلا 1020 تا آیتم توی اون لیست اولیه داشتم، فقط 1000 تاش میرفت به مقصد و 20 تا باقی میموند
پس اومدم و لیستی که داشتم رو تبدیل به یه لیست از تاپل ها کردم که توی هرتاپل 100 آیتم بود و باقی مونده هاشم توی اخرین تاپل بود که مثلا 20 آیتم توش بود
اینطوری روی هر تاپل فور زدم و دیگه نیاز نبود حساب کنم که 100 تا بشه چون میدونم که همشون 100 تا هستن و تاپل اخر هم باقی مونده شه
البته چون توی تاپل آخر 80 تا آیتم کمتر داریم نسبت به بقیه تاپل ها، متود zip_longest میومد و 80 تا None اضافه میکرد به تاپل آخر
پس یه فور زدم و None هارو هم حذف کردم
نتیجه اش شد فانکشن zip_long که یه لیست میگیره ازتون و تعداد آیتم های هرتاپل رو هم میگیره و نتیجه رو برمیگردونه😉
نمیدونم چرا حس میکنم لقمه رو چرخوندم دور سرم، ولی کارمو راه انداخت
اگه راه بهتری سراغ دارید توی کامنت ها بگید💬 💔
امروز داشتم یه برنامه ای مینوشتم که یه سری دیتا رو میفرستاد به یه جایی و دیتایی که داشتم به شکل یه لیست بود که توش هزاران دیکشنری بود
نیاز بود که 100 تا 100 تا دیکشنری هارو از توی لیست بیارم بیرون و بفرستم به مقصد
پس اول اومدم یه همچین چیزی نوشتم
ids = []
for index, item in enumerate(iterable):
if index % 100 == 0:
ids_string = ','.join(ids)
... # اینجا دیتا رو ارسال کردم به مقصد
ids.clear()
else:
ids.append(item)
اما مشکل این بود که اگر مثلا 1020 تا آیتم توی اون لیست اولیه داشتم، فقط 1000 تاش میرفت به مقصد و 20 تا باقی میموند
پس اومدم و لیستی که داشتم رو تبدیل به یه لیست از تاپل ها کردم که توی هرتاپل 100 آیتم بود و باقی مونده هاشم توی اخرین تاپل بود که مثلا 20 آیتم توش بود
from itertools import zip_longest
def zip_long(iterable: list, count: int = 2) -> list[tuple]:
it = [iter(iterable)] * count
zipped = zip_longest(*it)
result = []
for old_tuple in zipped:
if None in old_tuple:
new_tuple = tuple(item for item in old_tuple if item is not None)
result.append(new_tuple)
else:
result.append(old_tuple)
return result
اینطوری روی هر تاپل فور زدم و دیگه نیاز نبود حساب کنم که 100 تا بشه چون میدونم که همشون 100 تا هستن و تاپل اخر هم باقی مونده شه
البته چون توی تاپل آخر 80 تا آیتم کمتر داریم نسبت به بقیه تاپل ها، متود zip_longest میومد و 80 تا None اضافه میکرد به تاپل آخر
پس یه فور زدم و None هارو هم حذف کردم
نتیجه اش شد فانکشن zip_long که یه لیست میگیره ازتون و تعداد آیتم های هرتاپل رو هم میگیره و نتیجه رو برمیگردونه
نمیدونم چرا حس میکنم لقمه رو چرخوندم دور سرم، ولی کارمو راه انداخت
اگه راه بهتری سراغ دارید توی کامنت ها بگید
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
اونوقت بگید LaraGram بده!
امکان ساخت Conversation ها به همین سادگی.
- ولیدیت کردن پاسخ هر سوال
- نام گذاری برای هر سوال جهت پردازش راحت تر.
- ارسال سوال به صورت media
- ساخت Conversation با کیبورد
- مشخص کردن کامند جهت skip سوال
- action جهت اجرا آنی پس از دریافت پاسخ
- مشخص کردن تعداد Attempt
- مشخص کردن Timeout بدون پاسخ ماندن
- مشحص کردن کامند لغو Conversation
- مشخص کردن عملیات پس از Conversation
همه این قابلیت ها تنها با متد های پیش ساخته با یک خط کد
البته که این قابلیت ها در ورژن 2 منتشر میشن😉
https://github.com/laraXgram/LaraGram
امکان ساخت Conversation ها به همین سادگی.
- ولیدیت کردن پاسخ هر سوال
- نام گذاری برای هر سوال جهت پردازش راحت تر.
- ارسال سوال به صورت media
- ساخت Conversation با کیبورد
- مشخص کردن کامند جهت skip سوال
- action جهت اجرا آنی پس از دریافت پاسخ
- مشخص کردن تعداد Attempt
- مشخص کردن Timeout بدون پاسخ ماندن
- مشحص کردن کامند لغو Conversation
- مشخص کردن عملیات پس از Conversation
همه این قابلیت ها تنها با متد های پیش ساخته با یک خط کد
البته که این قابلیت ها در ورژن 2 منتشر میشن😉
https://github.com/laraXgram/LaraGram
👨💻📚این روزا چون درگیر امتحان های دانشگاه هستم زیاد وقت نمیکنم که مطلب بزارم ولی خوب یکی از کارهای که در کنار آزمون های دانشگاه دارم انجام میدم این هستش که دارم یه جزوه کامل برای برنامه نویسی پایتون آماده میکنم که دردسترس علاقه مند ها به این زبان برنامه نویسی قرار بدم خیلی سعی کردم تا جایی که میتونم به ذکر جزئیات بپردازم و چیزی رو از قلم نندازم به زودی توی کانال قرار میدم که استفاده کنید👨💻📚
❤5👏2