الموسمية وأنماط أيام الأسبوع
متوسط
استخدم بيانات أيام الأسبوع والأشهر والاتجاهات اليومية لتعرف متى يمتلئ السوق وكم يتقاضى.
الإعداد
يستخدم هذا الدرس الأداة المساعدة jokerprice.py من درس البدء السريع. احفظها بجوار نصك البرمجي واضبط JOKERPRICE_API_KEY.
نمط أيام الأسبوع
ليالي عطلة نهاية الأسبوع هي الخميس والجمعة في السعودية ومصر ومعظم الخليج، والجمعة والسبت في الإمارات. ويرقّم byWeekday الأيام من 0 (الأحد) إلى 6 (السبت).
from jokerprice import api
DAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
m = api("GET", "/api/v1/metrics", params={"city": "jeddah", "past_days": 90, "forward_days": 30})["metrics"]
for d in m["byWeekday"]:
if d["occupancy"] is not None:
print(f"{DAYS[d['weekday']]} occupancy {d['occupancy']:.0%} ADR SAR {d['adr'] or 0:.0f} ({d['nights']} nights)")النمط الشهري والأشهر المحجوزة مسبقًا
اطلب فترة طويلة لتحصل على أشهر أكثر. قيمة period هي observed للأشهر الماضية، وahead للأشهر القادمة (المحجوز حتى الآن، وسيرتفع)، وmixed للشهر الحالي.
m = api("GET", "/api/v1/metrics", params={"city": "jeddah", "past_days": 365, "forward_days": 180})["metrics"]
for month in m["byMonth"]:
if month["occupancy"] is not None:
print(month["month"], f"{month['period']:<8}", f"{month['occupancy']:.0%}", "ADR", round(month["adr"] or 0))سلسلة الاتجاه اليومية
تُرجع /api/v1/trends قيمة محفوظة واحدة لكل يوم. وتغطي كل نقطة إشغال الليالي الثلاثين السابقة لذلك اليوم، لذا يكون الخط ممهَّدًا أصلًا.
t = api("GET", "/api/v1/trends", params={"city": "jeddah", "metric": "occupancy", "days": 365})["trends"]
print(t["notice"] or "")
for p in t["points"][-14:]:
print(p["day"], f"{p['value']:.1%}", p["origin"])
for c in t["changes"]:
print(f"vs {c['days']} days ago: {c['change']:+.1%}")ارسمها بيانيًا
import matplotlib.pyplot as plt
days = [p["day"] for p in t["points"]]
plt.plot(days, [p["value"] for p in t["points"]])
plt.title("Jeddah occupancy, trailing 30 nights")
plt.gca().yaxis.set_major_formatter(lambda v, _: f"{v:.0%}")
plt.xticks(days[::max(1, len(days) // 8)], rotation=45)
plt.tight_layout()
plt.savefig("jeddah-occupancy.png")اعرف حدود السجل المتاح
يبدأ السجل الشهري واليومي مع بدء جوكر برايس تتبّع الوجهة، لذا سترى في البداية أسابيع لا سنوات. تحقق من history.days وtrackingDays قبل مقارنة المواسم، وتوقع أن تبقى قيمة yearOverYear هي null حتى يُحفظ عام كامل.