حمید حق دوست
حمید حق دوست
خواندن ۶ دقیقه·۴ سال پیش

تحلیل داده با pandas در پایتون

در مجموع آموزش های فارسی در مورد یادگیری ماشین و ابزار هاش خیلی کم هست در وب ما. من حدود سه سه سال هست که در زمینه یادگیری ماشین و هوش مصنوعی کار میکنم و قصدا دارم از این به بعد مطالبی هر چند ساده ولی کاربردی رو توی این زمینه منتشر کنم.

پسر خوبی به نام پانداس در پایتون
پسر خوبی به نام پانداس در پایتون


پانداس (به انگلیسی pandas) یک ابزار برای کار و تحلیل داده هست که روی زبان پایتون نوشته شده و میتونید بصورت رایگان ازش استفاده کنید. ابتدا پانداس رو نصب کنید سپس برای اینکه مطمئن بشید به درستی تونستید اون رو نصب کنید کد زیر رو ران کنید.

import pandas as pd pd.__version__

در کد بالا من ابزار پانداس رو ایمپورت کردم و یه نامک براش گذاشتم که از این به بعد با اون نام صداش کنم و بعدش هم ورژن پانداسم رو پرینت گرفتم.

اگه ورژن پانداستون رو گرفتید ینی همه چی اوکیه. ورژنی که من الان دارم باهاش کار میکنم 0.25.1 هست. اولین نوع داده در پانداس نوع داده‌ی Series هست. این نوع داده به صورت بردار یک بعدی هست. و عملا کار همون آرایه ها رو در پایتون انجام میده. در زیر من یک داده از نوع سری در پانداس ایجاد کردم.

names = pd.Series([&quotJohn&quot, &quotMax&quot, &quotAli&quot])
تعریف داده از نوع سری در پانداس
تعریف داده از نوع سری در پانداس

همونطور که میبینید خروجی بصورت یک آبجکت از نوع سری نمایش داده میشه که هر آیتم دارای یک ایندکس هست که از صفر شروع شده. بصورت مشابه یک متغیر دیگه هم تعریف میکنم.

ages = pd.Series([25, 33, 41])

نوع داده DataFrame در پانداس

دیتافریم ها بر خلاف سری ها میتونن دو بعدی باشن و خیلی پر استفاده تر از سری ها هستن. برای ایجاد یک دیتافریم بصورت زیر عمل کنید.

users = pd.DataFrame({&quotName&quot: names, &quotAge&quot: ages}) users

همونطور که خروجی کد رو در زیر میبینید از سری هایی که تعریف کرده بودم اینجا استفاده کردم.

دیتافریم ها در پانداس
دیتافریم ها در پانداس

همونطور که میبینید پانداس خیلی آدم فهمیده و باشعوریه :) خودش خروجی رو بصورت جدول چاپ کرد و هدرهای جدول رو هم همون key هایی که به دیکشنری داده بودیم قرار داده. حالا فرض کنید میخواید از دیتافریمتون خروجی با فرمت csv بگیرید. کافیه خط زیر رو ران کنید.

users.to_csv('users_list.csv', index=False)

خیلی راحت یک فایل با نام users_list.csv در دایرکتوری فعلی واستون ایجاد میکنه. برعکس میتونید از یک فایل csv هم بخونید و بریزید داخل دیتافریم. یه مثال میتونه این باشه:

data = pd.read_csv('users_list.csv')

الان اگه دیتا رو خروجی بگیرید یه چیزی مثل خروجی زیر رو میبینید که مشخصا یک دیتافریم هست.

ایمپورت داده در پانداس
ایمپورت داده در پانداس

برخی ویژگی های DataFrame در پانداس

اگه فانکشن ها و پراپرتی های پانداس رو با ژوپیتر و استفاده از دکمه تب چک کنید میبینید که کلی پراپرتی و تابع داخلش هست. یکی از این پراپرتی ها dtypes هست که یه اطلاعات کلی در مورد نوع داده های موجود در دیتافریم بهمون میده. کد زیر رو مثلا چک کنید:

users.dtypes
تحلیل نوع داده موجود دیتافریم
تحلیل نوع داده موجود دیتافریم

همونطور که میبینید اسم از نوع شی در نظر گرفته شده و سن از نوع عددی. حالا در مورد اینکه اسم object هست در ادامه بیشتر صحبت خواهیم کرد.

پراپرتی columns اسم ستون های دیتافریم رو میده بهمون. فرض کنید یه دیتافریم دارید که کلی ویژگی (ستون) داخلش هست و با نام های مختلف، و میخواید بدون اینکه اسم هاشون رو بدونید مرورشون کنید. توی همچین مواقعی نیازه که اسم ستون ها رو بدونید. مثال زیر رو در نظر بگیرید. دیگه خیلی خروجی ها رو عکس نمیدم. سخته :)

users.columns output: Index(['Name', 'Age'], dtype='object')


یه پراپرتی مفید index هست که اطلاعاتی در مورد ایندکس دیتافریم بهمون میده که از کجا شروع شده و کجا تموم شده و چنتا چنتا میره بالا.

users.index output: RangeIndex(start=0, stop=3, step=1)


برخی توابع DataFrame در پانداس

توابع مفیدی هم توی دیتافریم ها تعریف شدن. اولی که خیلی باحاله تابع describe هست. این تابع همونطور که از اسمش مشخصه دیتافریم رو توصیف میکنه. یه دیتافریم بهتر تعریف کنیم اول:

names = pd.Series([&quotJohn&quot, &quotMax&quot, &quotAli&quot, &quotVali&quot]) ages = pd.Series([18, 14, 23, 49]) weights = pd.Series([69, 48, 88, 102]) grades = pd.Series([12, 20, 11, 13]) users = pd.DataFrame({&quotName&quot: names, &quotAge&quot: ages, &quotWeight&quot: weights, &quotGrade&quot: grades}) users.describe()

خروجی کد بالا رو در ادامه میبینید که همونطور که میبینید خیلی شیک و آسون میتونید این اطلاعات رو در مورد هر ستون به دست بیارید.

توصیف دیتافریم در پانداس
توصیف دیتافریم در پانداس

یک سری توابع دیگه رو اینجا لیست میکنم کاربردشون مشخصه و میتونید بر حسب نیاز ازشون استفاده کنید

  • users.info()
  • users.mean()
  • users.sum()

دیدن و انتخاب داده های دیتافریم در pandas

اگه داده ی شما تعداد سطرهاش خیلی زیاده، پرینت کردن کل داده ممکنه طولانی بشه و کلا مرورگر هنگ کنه و کلا حرکت جالبی نیست. تابع head فقط ۵ تا سطر اول از دیتافریم رو نشون میده بهتون.

users.head()

اگه میخواید تعدادی که نشون میده رو زیاد کنید کافیه عدد رو واسش بفرستید. مثلا کد زیر ۱۰ تا سطر اول رو نشونتون میده.

users.head(10)

اگه میخواید از سطر های آخر رو داشته باشید بجای تابع بالا از تابع tail استفاده کنید.

users.tail() users.tail(15)

برای تقسیم کردن یک دیتافریم به زیر-دیتافریم ها از تابع loc استفاده میشه. مثال زیر رو در نظر بگیرید. در اینجا سطرهای x تا y از دیتافریم برمیگرده.

df.loc[x:y]

برای اینکه به یه ستون از دیتافریم دسترسی پیدا کنید میتونید مثل یک دیکشنری با دیتافریم برخورد کنید. یچیزی مثل کد زیر.

names = users[&quotName&quot]

و یا میتونید از نوتیشن نقطه مثل زیر استفاده کنید. فقط مشکلی که دات نوتیشن داره اینه که اگه وسط اسم ستون ها فاصله یا پرانتز و... داشته باشید خطا میده و باید از روش بالا استفاده کنید.

names = users.Name

این جریان زمانی خفن میشه که شما میتونید شرط های مختلفی رو برای انتخاب یک دیتافریم از دیتافریم بزرگتر تعریف کنید. مثلا من اینجا گفتم که همه یوزر هایی رو میخوام که سنشون از ۳۰ بیشتر باشه:

users[users['Age'] > 30]

و فقط سطرهایی واسم برمیگرده که توی شرایطی که گفتم صدق میکنن.


پانداسپایتونداده کاویتحلیل دادهیادگیری ماشین
حمید هستم، برنامه نویس PHP و فریمورک لاراول. اگه نیازمند فریلنسر مسلط به برنامه نویسی وب هستید در تلگرام به من پیام بدید: @haamidir
شاید از این پست‌ها خوشتان بیاید