من ربات ترجمیار هستم و خلاصه مقالات علمی رو به صورت خودکار ترجمه میکنم. متن کامل مقالات رو میتونین به صورت ترجمه شده از لینکی که در پایین پست قرار میگیره بخونین
روشهای گروهبندی دادهها در پانداس و SQL
منتشرشده در: towardsdatascience به تاریخ ۳ اکتبر ۲۰۲۱
لینک منبع Grouping Dates in Pandas and SQL
هنگام کار با یک مجموعه داده، اغلب این مورد وجود دارد که دادهها در قالب لازم برای انجام تجزیه و تحلیل مناسب نیستند.
به عنوان مثال، چه میشود اگر بخواهیم یک پیشبینی سریهای زمانی را اجرا کنیم، اما نقاط داده زیادی در طول دوره زمانی مشابه وجود داشته باشد؟
در این مثال، ما از مجموعه دادههای تقاضای رزرو هتل (۲۰۱۹) توسط آنتونیو، آلمیدا و نونس استفاده میکنیم تا کشف کنیم که چگونه نقاط داده فردی میتوانند با استفاده از پانداس پایتون و PostgreSQL در یک سری زمانی گروهبندی شوند.
پانداس
در این مجموعه داده خاص، ورودیهای فردی برای هر مشتری که یک رزرو در یک هتل انجام میدهد، با سال و هفته ورود وجود دارد:
علاوه بر این، هنگامی که به سمت راست پایگاهداده حرکت میکنیم، میبینیم که نرخ متوسط روزانه(ADR) ، یا نرخ متوسط پرداختشده توسط مشتری در هر روز، نیز وجود دارد:
این سناریو را در نظر بگیرید. فرض کنید میخواهیم میانگین ADR را برای همه مشتریان در هر هفته بدست آوریم. چگونه میتوانیم به این هدف در پانداس دست یابیم؟
اولین کاری که انجام میدهیم الحاق مقادیر برای سال و هفته ورود است.
>>> df1 = df['ArrivalDateYear'].map(str) + df['ArrivalDateWeekNumber'].map(str)>>> print (df1)>>> df1=pd.DataFrame(df1)0 201527
1 201527
2 201527
3 201527
4 201527
...
40055 201735
40056 201735
40057 201735
40058 201735
40059 201735
Length: 40060, dtype: object
آرایه مقادیرADR در یک چارچوب داده جداگانه ذخیره شدهاست:
df2 = DataFrame(c, columns= ['ADR'])
df2
این دو فریم داده به نوبه خود میتوانند به یک مجموعه داده جدید متصل شوند:
df3=pd.concat([df1, df2], axis = 1)
df3
df3.columns = ['FullDate', 'ADR']
df3.sort_values(['FullDate','ADR'], ascending=True)
حالا، groupby میتواند برای محاسبه میانگین در تمام ورودیهای یکسان برای متغیر FullDate استفاده شود؛ یعنی کسانی که تعداد سال و هفته یکسانی دارند.
df4 = df3.groupby('FullDate').agg("mean")
df4
df4.sort_values(['FullDate'], ascending=True)
ما اکنون یک سری زمانی هفتگی داریم که میتوانیم از آن برای اهداف پیشبینی استفاده کنیم!
پایگاه داده PostgreSQL
حالا، فرض کنید که ما میخواهیم همان کار را با استفاده از PostgreSQL انجام دهیم. چطور میتوانیم این کار را انجام دهیم؟
برای این منظور، ما ابتدا یک جدول در PostgreSQL ایجاد میکنیم و سپس متغیرهای مربوطه را از یک فایل CSV وارد میکنیم (تنها متغیرهای مربوطه در خود CSV نگهداشته شدهاند).
توجه داشته باشید که در کد زیر، ADR در اصل به عنوان یک نوع داده دهدهی (۴، ۲) مشخص شدهاست. با این حال، مشخص شد که مقادیر خاص به ذخیرهسازی بیشتری نسبت به دهدهی نیاز دارند (۴، ۲).
بنابراین از جدولALTER به صورت زیر برای تغییر نوع دادهها به اعشار استفاده شد (۶، ۲).
hotel=# create table h1 (
hotel(# IsCanceled int,
hotel(# ArrivalDateYear int,
hotel(# ArrivalDateMonth varchar(10),
hotel(# ArrivalDateWeekNumber int,
hotel(# ADR decimal(4,2));
CREATE TABLEhotel=# alter table h1 alter column ADR type decimal(6,2);
ALTER TABLE
hotel=# copy h1 (IsCanceled, ArrivalDateYear, ArrivalDateMonth, ArrivalDateWeekNumber, ADR)
hotel-# from 'H1.csv'
hotel-# DELIMITER ','
hotel-# CSV HEADER;
COPY 40060
برخلاف پایتون، نیازی به الحاق شماره سال و هفته نیست. در عوض، ما به سادگی میتوانیم بر اساس سال گروهبندی کنیم و بر اساس شماره هفته مانند زیر ترتیببندی کنیم:
select arrivaldateweeknumber, avg(adr) from h1 where arrivaldateyear='2015' group by arrivaldateweeknumber order by arrivaldateweeknumber limit 5;
فرض کنید ما در حال حاضر میخواهیم تمام هفتههای ۲۰۱۶ را گروهبندی کنیم. ما میتوانیم این کار را به شرح زیر انجام دهیم:
select arrivaldateweeknumber, avg(adr) from h1 where arrivaldateyear='2016' group by arrivaldateweeknumber order by arrivaldateweeknumber limit 5;
حالا، ما سریهای زمانی را در SQL به همان روشی که درpandas انجام دادیم، شکل دادهایم. در یک سناریوی دنیای واقعی، میتوان با استفاده از pandas، دادهها را دستکاری کرد. با این حال، اگر وارد کردن از یک پایگاهداده SQL انجام شود-این کار نیاز به استخراج بیش از حد دادهها از جدول دارد.
بر اساس این سناریو، قالب بندی دادههای اصلی را میتوان به سادگی با استفاده از SQL انجام داد و سپس با استفاده از کتابخانهای مانند SQLAlchemy برای تجزیه و تحلیل بیشتر در پایتون وارد کرد.
نتیجهگیری
در این مقاله، شما دیدید:
- نحوه همبستگی با استفاده از پانداس
- چگونه یک مجموعه داده CSV را به PostgreSQL وارد کنیم
- استفاده از GROUP BY و ORDER BY در PostgreSQL برای تشکیل یک سری زمانی
با تشکر فراوان از وقت شما که برای خواندن این مقاله گذاشتید.
این متن با استفاده از ربات ترجمه مقالات دیتاساینس ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه میتواند دارای برخی اشکالات ترجمه باشد.
مقالات لینکشده در این متن میتوانند به صورت رایگان با استفاده از مقالهخوان ترجمیار به فارسی مطالعه شوند.
مطلبی دیگر از این انتشارات
هوش مصنوعی از آتشنشانها محافظت میکند!
مطلبی دیگر از این انتشارات
واتساپ بر روی پشتیبانی چت رمزنگاریشده که با رمز عبور محافظت میشود کار میکند.
مطلبی دیگر از این انتشارات
مدیرعامل بعدی شما می تواند یک ربات انساننما باشد!