توی جلسه قبل آخرین کاری که انجام دادیم رسم نمودار dataset براساس ستون های date و averagePrice بود. اما باید توجه کنید که دیتاهای ذخیره شده توی dateset به فرمت string هستن اما ما گاهی نیاز داریم که با فرمت های مختلف دیتا کار کنیم به عنوان مثال توی همین dataset ستون date در حال حاضر توسط کامپیوتر به فرمت String دیده میشه اما کتابخانه pandas این امکان رو برای ما ایجاد میکنه که اون رو به فرمت دلخواه ما یعنی dateitime objects در بیاریم که از این به بعد مقادیر این ستون توسط کامپیوتر به این فرمت شناخته بشه که به ما اجازه میده از ویژگی ها و توابعی روی این فرمت کار میکنن استفاده کنیم.
حالا کافیه دوباره دیتاست Albany_df رو تشکیل بدیم و نمودارش رو رسم کنیم:
albany_df = df[df['region']=="Albany"]
albany_df.set_index("Date", inplace=True)
albany_df["AveragePrice"].plot()
حالا که type ستون date رو درست کردیم نوبت اینکه یکم نمودار رو نرمال تر کنیم برای اینکار دوتا کار میشه انجام داد .اولین کار اینکه ستون index دیتاست رو sort کنیم. این کار رو با دستور ()sort_index. به این صورت انجام میدیم:
albany_df.sort_index(inplace=True)
همونطور که می بینید بعد از اجرا کردن این دستور یک اخطار هم نمایش میده که خیلی نگرانش نباشید، دستور به درستی انجام شده و کار بعدی که انجام میدیم اینکه از مقادیر ستون AveragePrice توی هرکدوم از این تاریخ ها میانگین بگیریم :
albany_df["AveragePrice"].rolling(25).mean().plot()
و همونطور که می بینید آلان یک نمودار از قیمت آوکادو در طول سال های مشخص داریم. یک کار دیگه ای که الان باید انجام بدیم اضافه کردن این میانگین قیمت ها به عنوان یک ستون جدید به دیتاستمون :
albany_df["price25ma"] =albany_df["AveragePrice"].rolling(25).mean()
دوباره یک اخطار بهمون نشون میده که نگرانش نباشید و کمی جلوتر اون رو درست میکنیم. حالا اگر یه نگاهی به دیتاست albany_df بندازیم می بینیم که ستون AveragePrice به اون اضافه شده :
Albany_df.head()
خب می بینید که ستون جدید اضافه شده اما توی سطر های اول مقداری برای اون وجود نداره ، پس بریم یه نگاهی بندازیم به انتهای دیتاست albany_df :
albany_df.tail()
خب بریم و در ادامه نمودار قیمت آووکادو براساس نژاد اون ها رو رسم کنیم. برای اینکار باید بریم سراغ دیتاست اصلی یعنی df و توی اون دنبال نژادهای مختلف آووکادو بگردیم . اهمیت اینکار اونجایی که ما در حال حاضر نمیدونیم چه نژادهایی از آووکادو توی دیتاسن ما وجود دارن اما به سادگی میتونیم یک لیست از این نژادها رو بدست بیاریم :
df[‘region’]
حالا مقادیر این ستون رو به صورت آرایه یا لیست هم میتونیم نشون بدیم :
df[‘region’].values
و برای تبدیلش به لیست هم از دستور زیر استفاده می کنیم:
df[‘region’].values.tolist()
اما اگر بخوایم فقط مقادیر unique این لیست رو ببینیم از این دستور استفاده می کنیم :
print(set(df[‘region’].values.tolist()))
به همین راحتی میتونید از دیتاستی که دارین دیتا بردارید و به آرایه و لیست تبدیل کیند، اما اگر به مفاهیم پایه پایتون مسلط نیستین خود کتابخانه pandas یک method داره برای انجام همین کار :
df[‘region’].unique()
خب حالا که تونستیم نژادهای مختلف رو پیدا کنیم وقت اون رسیده که براساس اون ها بیایم و یک دیتافریم جدید به اسم graph_df ایجاد کنیم که دیتاهای اون میانگین قیمت آووکادو برای هر نژاد در یک بازه زمانیه مشخصه. اما قبل از اینکه این دیتافریم رو بسازیم باید تغییراتی روی دیتافریم اصلی انجام بدیم، چرا که توی این دیتا فریم آووکادو دو نوع قیمت Organic و Conventional رو داره و ما برای اینکه کار درست پیش بره نیاز داریم یکی از این قیمت ها رو انتخاب کنیم :
import pandas as pd
df = pd.read_csv("avocado.csv")
df = df.copy()[df['type']=='organic']
df["Date"] =pd.to_datetime(df["Date"])
df.sort_values(by="Date", ascending=True, inplace=True)
df.head()
خب حالا وقت ساختن دیتافریم graph_df :
graph_df = pd.DataFrame()
for region indf['region'].unique():
region_df =df.copy()[df['region']==region]
region_df.set_index('Date', inplace=True)
region_df.sort_index(inplace=True)
region_df[f"{region}_price25ma"] = region_df["AveragePrice"].rolling(25).mean()
if graph_df.empty:
graph_df =region_df[[f"{region}_price25ma"]]
else:
graph_df =graph_df.join(region_df[f"{region}_price25ma"])
graph_df.tail()
و در نهایت قراره که نمودار این دیتاهارو رسم کنیم ، نموداری که نشون میده میانگین قیمت آووکادو در هر تاریخی چقدر بوده:
graph_df.plot(figsize=(8,5), legend=False)