در مجموع آموزش های فارسی در مورد یادگیری ماشین و ابزار هاش خیلی کم هست در وب ما. من حدود سه سه سال هست که در زمینه یادگیری ماشین و هوش مصنوعی کار میکنم و قصدا دارم از این به بعد مطالبی هر چند ساده ولی کاربردی رو توی این زمینه منتشر کنم.
پانداس (به انگلیسی pandas) یک ابزار برای کار و تحلیل داده هست که روی زبان پایتون نوشته شده و میتونید بصورت رایگان ازش استفاده کنید. ابتدا پانداس رو نصب کنید سپس برای اینکه مطمئن بشید به درستی تونستید اون رو نصب کنید کد زیر رو ران کنید.
import pandas as pd pd.__version__
در کد بالا من ابزار پانداس رو ایمپورت کردم و یه نامک براش گذاشتم که از این به بعد با اون نام صداش کنم و بعدش هم ورژن پانداسم رو پرینت گرفتم.
اگه ورژن پانداستون رو گرفتید ینی همه چی اوکیه. ورژنی که من الان دارم باهاش کار میکنم 0.25.1 هست. اولین نوع داده در پانداس نوع دادهی Series هست. این نوع داده به صورت بردار یک بعدی هست. و عملا کار همون آرایه ها رو در پایتون انجام میده. در زیر من یک داده از نوع سری در پانداس ایجاد کردم.
names = pd.Series(["John", "Max", "Ali"])
همونطور که میبینید خروجی بصورت یک آبجکت از نوع سری نمایش داده میشه که هر آیتم دارای یک ایندکس هست که از صفر شروع شده. بصورت مشابه یک متغیر دیگه هم تعریف میکنم.
ages = pd.Series([25, 33, 41])
دیتافریم ها بر خلاف سری ها میتونن دو بعدی باشن و خیلی پر استفاده تر از سری ها هستن. برای ایجاد یک دیتافریم بصورت زیر عمل کنید.
users = pd.DataFrame({"Name": names, "Age": ages}) users
همونطور که خروجی کد رو در زیر میبینید از سری هایی که تعریف کرده بودم اینجا استفاده کردم.
همونطور که میبینید پانداس خیلی آدم فهمیده و باشعوریه :) خودش خروجی رو بصورت جدول چاپ کرد و هدرهای جدول رو هم همون key هایی که به دیکشنری داده بودیم قرار داده. حالا فرض کنید میخواید از دیتافریمتون خروجی با فرمت csv بگیرید. کافیه خط زیر رو ران کنید.
users.to_csv('users_list.csv', index=False)
خیلی راحت یک فایل با نام users_list.csv در دایرکتوری فعلی واستون ایجاد میکنه. برعکس میتونید از یک فایل csv هم بخونید و بریزید داخل دیتافریم. یه مثال میتونه این باشه:
data = pd.read_csv('users_list.csv')
الان اگه دیتا رو خروجی بگیرید یه چیزی مثل خروجی زیر رو میبینید که مشخصا یک دیتافریم هست.
اگه فانکشن ها و پراپرتی های پانداس رو با ژوپیتر و استفاده از دکمه تب چک کنید میبینید که کلی پراپرتی و تابع داخلش هست. یکی از این پراپرتی ها dtypes هست که یه اطلاعات کلی در مورد نوع داده های موجود در دیتافریم بهمون میده. کد زیر رو مثلا چک کنید:
users.dtypes
همونطور که میبینید اسم از نوع شی در نظر گرفته شده و سن از نوع عددی. حالا در مورد اینکه اسم object هست در ادامه بیشتر صحبت خواهیم کرد.
پراپرتی columns اسم ستون های دیتافریم رو میده بهمون. فرض کنید یه دیتافریم دارید که کلی ویژگی (ستون) داخلش هست و با نام های مختلف، و میخواید بدون اینکه اسم هاشون رو بدونید مرورشون کنید. توی همچین مواقعی نیازه که اسم ستون ها رو بدونید. مثال زیر رو در نظر بگیرید. دیگه خیلی خروجی ها رو عکس نمیدم. سخته :)
users.columns output: Index(['Name', 'Age'], dtype='object')
یه پراپرتی مفید index هست که اطلاعاتی در مورد ایندکس دیتافریم بهمون میده که از کجا شروع شده و کجا تموم شده و چنتا چنتا میره بالا.
users.index output: RangeIndex(start=0, stop=3, step=1)
توابع مفیدی هم توی دیتافریم ها تعریف شدن. اولی که خیلی باحاله تابع describe هست. این تابع همونطور که از اسمش مشخصه دیتافریم رو توصیف میکنه. یه دیتافریم بهتر تعریف کنیم اول:
names = pd.Series(["John", "Max", "Ali", "Vali"]) ages = pd.Series([18, 14, 23, 49]) weights = pd.Series([69, 48, 88, 102]) grades = pd.Series([12, 20, 11, 13]) users = pd.DataFrame({"Name": names, "Age": ages, "Weight": weights, "Grade": grades}) users.describe()
خروجی کد بالا رو در ادامه میبینید که همونطور که میبینید خیلی شیک و آسون میتونید این اطلاعات رو در مورد هر ستون به دست بیارید.
یک سری توابع دیگه رو اینجا لیست میکنم کاربردشون مشخصه و میتونید بر حسب نیاز ازشون استفاده کنید
اگه داده ی شما تعداد سطرهاش خیلی زیاده، پرینت کردن کل داده ممکنه طولانی بشه و کلا مرورگر هنگ کنه و کلا حرکت جالبی نیست. تابع head فقط ۵ تا سطر اول از دیتافریم رو نشون میده بهتون.
users.head()
اگه میخواید تعدادی که نشون میده رو زیاد کنید کافیه عدد رو واسش بفرستید. مثلا کد زیر ۱۰ تا سطر اول رو نشونتون میده.
users.head(10)
اگه میخواید از سطر های آخر رو داشته باشید بجای تابع بالا از تابع tail استفاده کنید.
users.tail() users.tail(15)
برای تقسیم کردن یک دیتافریم به زیر-دیتافریم ها از تابع loc استفاده میشه. مثال زیر رو در نظر بگیرید. در اینجا سطرهای x تا y از دیتافریم برمیگرده.
df.loc[x:y]
برای اینکه به یه ستون از دیتافریم دسترسی پیدا کنید میتونید مثل یک دیکشنری با دیتافریم برخورد کنید. یچیزی مثل کد زیر.
names = users["Name"]
و یا میتونید از نوتیشن نقطه مثل زیر استفاده کنید. فقط مشکلی که دات نوتیشن داره اینه که اگه وسط اسم ستون ها فاصله یا پرانتز و... داشته باشید خطا میده و باید از روش بالا استفاده کنید.
names = users.Name
این جریان زمانی خفن میشه که شما میتونید شرط های مختلفی رو برای انتخاب یک دیتافریم از دیتافریم بزرگتر تعریف کنید. مثلا من اینجا گفتم که همه یوزر هایی رو میخوام که سنشون از ۳۰ بیشتر باشه:
users[users['Age'] > 30]
و فقط سطرهایی واسم برمیگرده که توی شرایطی که گفتم صدق میکنن.