تنسورفلو ۵ - Pandas

پانداس چیست ؟تا اینجا درباره مقدمات تنسورفلو، نوت بوک، تنسوربرد گفتیم قبل از اینکه به قسمت های اصلی یادگیری عمیق و تنسورفلو برسیم نیازه با Pandas آشنا بشیم.پانداس یک پروژه اپن سورس هست که به شما اجازه میده که برای تولید و کار با دیتا از اون استفاده کنید. پانداس با استفاده از NumPy ساخته شده پس برای استفاده از اون به نام پای نیاز هستچرا از Pandas استفاده کنیم؟دانشمندان داده از پانداس به دلایل زیر استفاده می کنند:مدیریت داده های از دست رفته به راحتیقابل استفاده با ساختار های داده تک بعدی و چند بعدیدارای راهکار های موثر برای برش دادهدارای راهکار های مناسب برای ادغام، اتصال و تغییر شکل داده هانحوه نصب پانداس?البته قبلا داخل همین سری در قسمت مربوط به محیط های مجازی پانداس رو نصب کردیم ولی برای نصبش کافی هست وارد کنید:pip3 install pandasدیتا فریم چیست؟قاب داده یک آرایه چند بعدی هست که برچسب گذاری شده است و یک راه استاندارد برای ذخیره سازی داده می باشد. هر قاب داده به صورت جداولی هست که هر سطر اطلاعات را ذخیره می کند و هر ستون اطلاعات را نام گذاری می کند.قاب دادهسری چیست؟سری یک ساختمان داده تک بعدی هست که می تواند انواع مختلف داده از قبیل int, float و... را ذخیره نماید.پارامتر های سری به صورت زیر می باشند:داده: می تونه لیست، دیکشنری یا یک مقدار عددی باشد.pd.Series([1., 2., 3.])0 1.0 1 2.0 2 3.0 dtype: float64ایندکس: با قرار دادن ایندکس می تونید سطر ها رو نام گذاری کنید:pd.Series([1., 2., 3.], index=['a', 'b', 'c'])ساخت دیتا فریمشما می تونید به راحتی یک آرایه numpy رو به قاب دیتا پانداس یا برعکس تبدیل کنید.## Numpy to pandas import numpy as np h = np.array([[1,2],[3,4]]) df_h = pd.DataFrame(h) print('Data Frame:', df_h) ## Pandas to numpy df_h_n = np.array(df_h) print('Numpy array:', df_h_n) خروجی:Data Frame: 0 1 0 1 2 1 3 4 Numpy array: [[1 2] [3 4]] همچنین می تونید یک دیکشنری پایتون رو به دیتافریم تبدیل کنیدdic = {'Name': ["John", "Smith"], 'Age': [30, 40]} pd.DataFrame(data=dic)دامنه تاریخپانداس یک API برای ساخت دامنه ای از تاریخ ها داره که به صورت زیر ازش استفاده میشه:pd.data_range(date,period,frequency)پارامتر اول تاریخ شروع هستپارامتر دوم تعداد تکرار ها هستپارامتر آخر این هست که نوع تکرار بر اساس چی باشه: روز: 'D,' ماه: 'M' و سال: 'Y'## Create date # Days dates_d = pd.date_range('20300101', periods=6, freq='D') print('Day:', dates_d) خروجیDay: DatetimeIndex(['2030-01-01', '2030-01-02', '2030-01-03', '2030-01-04', '2030-01-05', '2030-01-06'], dtype='datetime64[ns]', freq='D')# Months dates_m = pd.date_range('20300101', periods=6, freq='M') print('Month:', dates_m) خروجیMonth: DatetimeIndex(['2030-01-31', '2030-02-28', '2030-03-31', '2030-04-30','2030-05-31', '2030-06-30'], dtype='datetime64[ns]', freq='M')بازرسی داده هاشما می تونید ابتدا یا انتها دیتاست رو با توابع head و tail مشاهده کنید.random = np.random.randn(6,4)# Create data with date df = pd.DataFrame(random, index=dates_m, columns=list('ABCD'))df.head(3)df.tail(3)یا می تونید با استفاده از تابع describe اطلاعاتی همچون تعداد، میانگین، انحراف معیار، کمینه، بیشینه رو مشاهده کنیدdf.describe()برش داده هابا استفاده از اسم ستون می تونید دیتا های یک ستون خاص رو ببینید## Slice ### Using name df['A'] برای چند ستون از دو براکت استفاده کنید که براکت اول ینی می خوایید ستون انتخاب کنید و دومی یعنی چه ستون هایی رو می خوایید انتخاب کنید.df[['A', 'B']]برای انتخاب سه سطر اول از کد زیر می تونید استفاده کنید### using a slice for row df[0:3]برای انتخاب چند سطر از چند ستون خاص از loc استفاده کنید## Multi col df.loc[:,['A','B']]به جای استفاده از نام ستون می تونید با iloc از ایندکس استفاده کنیدdf.iloc[:, :2]حذف یک ستونبا استفاده از pd.drop می تونید تعدادی ستون رو حذف کنیدdf.drop(columns=['A', 'C'])الحاقمی تونید دو دیتا فریم رو با استفاده از pd.concat بهم متصل کنیدimport numpy as np df1 = pd.DataFrame({'name': ['John', 'Smith','Paul'], 'Age': ['25', '30', '50']}, index=[0, 1, 2]) df2 = pd.DataFrame({'name': ['Adam', 'Smith' ], 'Age': ['26', '11']}, index=[3, 4]) Finally, you concatenate the two DataFramedf_concat = pd.concat([df1,df2]) df_concatحذف تکرار دادهاگه داخل یک دیتا فریم داده تکراری وجود داره برای حذف اونا از drop_duplicate استفاده کنید و ورودی اسم ستونی که تکراری ها می خواهید ازش حذف بشه رو وارد کنید.df_concat.drop_duplicates('name')مرتب سازیبا استفاده از sort_values می تونید ستون مورد نظر رو مرتب کنید.df_concat.sort_values('Age')تغییرنامبرای تغییر نام یک ستون می تونید از rename استفاده کنید ابتدا نام فعلی و سپس نام جدید رو وارد کنید.df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})وارد سازی CSVدر طول آموزش تنسورفلو قراره از دیتاست ها استفاده کنیم مثلا دیتاست Adult معمولا فرمت دیتاست ها csv هست.دیتاست Adult ویژگی هایی از قبیل میزان تحصیلات، جنسیت، کشور و... در خودش داره.برای وارد کردن این CSV از read_csv استفاده می کنیم.Syntax:pandas.read_csv(filepath_or_buffer,sep=', ',`names=None`,`index_col=None`,`skipinitialspace=False`)filepath_or_buffer: آدرس محل دیتاستsep=', ': جدا کننده اطلاعات`names=None`: اسم ستون ها`index_col=None`: اگر سطری وجود دارد که اسم ستون ها رو داره شماره سطر قرار بدیدبرای اطلاعات بیشتر به آدرس زیر می تونید مراجعه کنید:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html.Consider the following Example## Import csv import pandas as pd ## Define path data COLUMNS = ['age','workclass', 'fnlwgt', 'education', 'education_num', 'marital', 'occupation', 'relationship', 'race', 'sex', 'capital_gain', 'capital_loss', 'hours_week', 'native_country', 'label'] PATH = "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data" df_train = pd.read_csv(PATH, skipinitialspace=True, names = COLUMNS, index_col=False) df_train.shape Output:(32561, 15)دسته بندییک راه ساده برای مشاهده دیتا استفاده از groupby هست که کمک می کنه اطلاعات رو دسته بندی کنید مثل توابع aggregation در SQLcount: شمارش تعدادmin: کمترینmax: بیشترینmean: میانگینmedian: میانهstandard deviation: انحراف معیار...داخل groupby اسم ستونی که می خوایید تابع رو براش اعمال کنید وارد کنیدبرای مثال خط زیر میانگین ستون های دارای مقادیر پیوسته رو برای افراد با درآمد زیر ۵۰ و بالا ۵۰ حساب می کنهdf_train.groupby(['label']).mean()یا خط زیر بر حسب درآمد کمترین سن رو خروجی میدهdf_train.groupby(['label'])['age'].min()همچنین می تونید بر روی چند ستون group by بزنیدdf_train.groupby(['label', 'marital'])['capital_gain'].max()خلاصه