آموزش یادگیری ماشین (Machine Learning) در پایتون – کتابخانه Pandas

نوشته شده برای at 2018-09-29
3411 ۰

آموزش کتابخانه Pandas با بررسی دیتاست Titanic

آموزش کتابخانه Pandas با بررسی دیتاست Titanic

سهیل تهرانی پور

تابستان ۱۳۹۷

import pandas as pd

pd.read_csv()

نحوه خواندن فایل با فرمت csv توسط pandas

titanic_data = pd.read_csv("titanic.csv")
head()

نمایش ۵ داده اول ذخیره شده در دیتافریم

در صورت ثبت عدد به عنوان پارامتر ورودی، همان تعداد داده از index های ابتدایی دیتافریم را نمایش خواهد داد.

titanic_data.head()
shape

مشاهده ابعاد (سطر و ستون) دیتافریم

titanic_data.shape

(۱۳۰۹, ۱۴)

Columns

مشاهده عناوین ستون های دیتافریم

titanic_data.columns
Index(['pclass', 'survived', 'name', 'sex', 'age', 'sibsp', 'parch', 'ticket',
       'fare', 'cabin', 'embarked', 'boat', 'body', 'home.dest'],
      dtype='object')

dtypes

مشاهده عناوین ستون ها و تایپ داده هایشان

titanic_data.dtypes
pclass         int64
survived       int64
name          object
sex           object
age          float64
sibsp          int64
parch          int64
ticket        object
fare         float64
cabin         object
embarked      object
boat          object
body         float64
home.dest     object
dtype: object

info()

اطلاعات کاملتر در مورد داده ها

تعداد کل داده ها

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

هر ستون چه تعداد داده not-null دارد

titanic_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1309 entries, 0 to 1308
Data columns (total 14 columns):
pclass       1309 non-null int64
survived     1309 non-null int64
name         1309 non-null object
sex          1309 non-null object
age          1046 non-null float64
sibsp        1309 non-null int64
parch        1309 non-null int64
ticket       1309 non-null object
fare         1308 non-null float64
cabin        295 non-null object
embarked     1307 non-null object
boat         486 non-null object
body         121 non-null float64
home.dest    745 non-null object
dtypes: float64(3), int64(4), object(7)
memory usage: 143.2+ KB
انتخاب سطر و ستون های خاص
titanic_data['survived'][0:5]
۰    ۱
۱    ۱
۲    ۰
۳    ۰
۴    ۰
Name: survived, dtype: int64
titanic_data.survived[0:5]
۰    ۱
۱    ۱
۲    ۰
۳    ۰
۴    ۰
Name: survived, dtype: int64
انتخاب ستون ها بر اساس چند عنوان مورد نظر
titanic_data[['survived','age']][0:5]
survived age
۰ ۱ ۲۹٫۰۰
۱ ۱ ۰٫۹۲
۲ ۰ ۲٫۰۰
۳ ۰ ۳۰٫۰۰
۴ ۰ ۲۵٫۰۰

value_counts()

پرینت داده های Unique در کل ستون

titanic_data['survived'].value_counts()
۰    ۸۰۹
۱    ۵۰۰
Name: survived, dtype: int64
از بین بازماندگان ۳۳۹ نفر زن و تنها ۱۶۱ نفر مرد بوده اند.
titanic_data['survived'].value_counts(normalize=True) * 100
۰    ۶۱٫۸۰۲۹۰۳
۱    ۳۸٫۱۹۷۰۹۷
Name: survived, dtype: float64
از بین بازماندگان ۳۳۹ نفر زن و تنها ۱۶۱ نفر مرد بوده اند.
pd.crosstab( titanic_data.sex, titanic_data.survived )
survived ۰ ۱
sex
female ۱۲۷ ۳۳۹
male ۶۸۲ ۱۶۱
نرمالایز نمودن داده ها بر اساس سطرa
pd.crosstab( titanic_data.sex, titanic_data.survived, normalize = "index" )
survived ۰ ۱
sex
female ۰٫۲۷۲۵۳۲ ۰٫۷۲۷۴۶۸
male ۰٫۸۰۹۰۱۵ ۰٫۱۹۰۹۸۵

 

نرمالایز نمودن داده ها بر اساس ستون
pd.crosstab( titanic_data.sex, titanic_data.survived, normalize = "columns" )
survived ۰ ۱
sex
female ۰٫۱۵۶۹۸۴ ۰٫۶۷۸
male ۰٫۸۴۳۰۱۶ ۰٫۳۲۲
نرمالایز نمودن کل داده ها
pd.crosstab( titanic_data.sex, titanic_data.survived, normalize = "all" )
survived ۰ ۱
sex
female ۰٫۰۹۷۰۲۱ ۰٫۲۵۸۹۷۶
male ۰٫۵۲۱۰۰۸ ۰٫۱۲۲۹۹۵
لیست کودکان زیر ۵ سال برای ارایه به خانواده بازماندگان
below_5_years = titanic_data[ titanic_data.age <= 5 ]
below_5_years[0:3]
چه تعداد از مسافران کودک زیر ۵ سال بودند؟
len( below_5_years )
۵۶
 ۳۷ کودک از بین ۵۶ کودک زنده ماندند.
 
titanic_data[ titanic_data.age <= 5 ]["survived"].value_counts( )
۱    ۳۷
۰    ۱۹
Name: survived, dtype: int64
نزدیک به ۲/۳ از کل کودکان زنده ماندند
titanic_data[ titanic_data.age <= 5 ]["survived"].value_counts( normalize = True )
۱    ۰٫۶۶۰۷۱۴
۰    ۰٫۳۳۹۲۸۶
Name: survived, dtype: float64
از بین مسافرین، افراد با نام Allen را میخواهیم.
titanic_data[titanic_data.name.str.contains( "Allen") ]

unique()

داده های منحصر به فرد در هر ستون

titanic_data.embarked.unique()
array(['S', 'C', nan, 'Q'], dtype=object)
بررسی تعداد داده ها با مقدار NaN در ستون Embarked – محل نجات یا غرق شدن افراد مشخص نباشد
titanic_data.embarked.value_counts(dropna=False)
S      914
C      270
Q      123
NaN      2
Name: embarked, dtype: int64
titanic_data.embarked.dropna().unique()
array(['S', 'C', 'Q'], dtype=object)
dropna()حذف داده های بدون مقدار
clean_titanic_data = titanic_data.dropna()
len( clean_titanic_data )
۰
استراتژی های پیشنهادی کار با دستور dropna()
حدف سطرهایی که در ستونشان NA‌ دارند
clean_titanic_data = titanic_data.dropna( how = "all" )
len( clean_titanic_data )
۱۳۰۹
حدف سطرهایی که در برخی از ستون هایشان NA‌ دارند
clean_titanic_data = titanic_data.dropna( subset = ['age','pclass'], how = 'any' )
len( clean_titanic_data )
۱۰۴۶
نحوه تغییر نام یک ستون
titanic_data.head( 2)
new_titanic = titanic_data.rename( columns = { 'row.names': 'rownum' },
                  inplace = True  )
titanic_data.head(2)
پرینت اطلاعات مربوط به جنسیت و سن و Pclass افرادی که زنده ماندند.
titanic_data[ ( titanic_data.survived == 1 ) &
           ( titanic_data.age <= 5 ) ][['age',
                                        'sex',
                                        'pclass']][0:5]
age sex pclass
۱ ۰٫۹۲ male ۱
۹۴ ۴٫۰۰ male ۱
۳۳۹ ۱٫۰۰ male ۲
۳۴۰ ۴٫۰۰ female ۲
۳۵۹ ۰٫۸۳ male ۲
پرینت اطلاعات مربوط به جنسیت و Pclass افرادی که زنده ماندند و سن آن ها مشخص نبوده است.
titanic_data[ titanic_data.age.isnull() ][['age',
                                         'survived',
                                         'sex',
                                         'pclass']][0:5]
age survived sex pclass
۱۵ NaN ۰ male ۱
۳۷ NaN ۱ male ۱
۴۰ NaN ۰ male ۱
۴۶ NaN ۰ male ۱
۵۹ NaN ۱ female ۱
پرینت اطلاعات مربوط به جنسیت و Pclass افرادی که زنده ماندند و سن آن ها مشخص است.
titanic_data[ -titanic_data.age.isnull() ][['age',
                                          'survived',
                                          'sex',
                                          'pclass']][0:5]
age survived sex pclass
۰ ۲۹٫۰۰ ۱ female ۱
۱ ۰٫۹۲ ۱ male ۱
۲ ۲٫۰۰ ۰ female ۱
۳ ۳۰٫۰۰ ۰ male ۱
۴ ۲۵٫۰۰ ۰ female ۱
نحوه ادغام و گروه بندی ستون های مختلف
titanic_data.groupby( 'pclass' )['age'].mean()
pclass
۱    ۳۹٫۱۵۹۹۳۰
۲    ۲۹٫۵۰۶۷۰۵
۳    ۲۴٫۸۱۶۳۶۷
Name: age, dtype: float64
pclass_age_mean_df = titanic_data.groupby( 'pclass' )['age'].mean().reset_index()
pclass_age_mean_df
pclass age
۰ ۱ ۳۹٫۱۵۹۹۳۰
۱ ۲ ۲۹٫۵۰۶۷۰۵
۲ ۳ ۲۴٫۸۱۶۳۶۷
pclass_gender_age_mean_df = titanic_data.groupby( ['pclass', 'sex'] )['age'].mean().reset_index()
pclass_gender_age_mean_df
pclass sex age
۰ ۱ female ۳۷٫۰۳۷۵۹۴
۱ ۱ male ۴۱٫۰۲۹۲۷۲
۲ ۲ female ۲۷٫۴۹۹۲۲۳
۳ ۲ male ۳۰٫۸۱۵۳۸۰
۴ ۳ female ۲۲٫۱۸۵۳۲۹
۵ ۳ male ۲۵٫۹۶۲۲۶۴
pclass_gender_survival_count_df = titanic_data.groupby( ['pclass', 'sex'] )['survived'].sum().reset_index()
pclass_gender_survival_count_df
pclass sex survived
۰ ۱ female ۱۳۹
۱ ۱ male ۶۱
۲ ۲ female ۹۴
۳ ۲ male ۲۵
۴ ۳ female ۱۰۶
۵ ۳ male ۷۵
pclass_age_gender_survival_df = pclass_gender_age_mean_df.merge(
  pclass_gender_survival_count_df, on = ['pclass', 'sex'])
pclass_age_gender_survival_df
pclass sex age survived
۰ ۱ female ۳۷٫۰۳۷۵۹۴ ۱۳۹
۱ ۱ male ۴۱٫۰۲۹۲۷۲ ۶۱
۲ ۲ female ۲۷٫۴۹۹۲۲۳ ۹۴
۳ ۲ male ۳۰٫۸۱۵۳۸۰ ۲۵
۴ ۳ female ۲۲٫۱۸۵۳۲۹ ۱۰۶
۵ ۳ male ۲۵٫۹۶۲۲۶۴ ۷۵
نحوه مربت سازی داده های دیتافریم
pclass_age_gender_survival_df.sort_values( 'survived')
pclass sex age survived
۳ ۲ male ۳۰٫۸۱۵۳۸۰ ۲۵
۱ ۱ male ۴۱٫۰۲۹۲۷۲ ۶۱
۵ ۳ male ۲۵٫۹۶۲۲۶۴ ۷۵
۲ ۲ female ۲۷٫۴۹۹۲۲۳ ۹۴
۴ ۳ female ۲۲٫۱۸۵۳۲۹ ۱۰۶
۰ ۱ female ۳۷٫۰۳۷۵۹۴ ۱۳۹
pclass_age_gender_survival_df.sort_values( 'survived', ascending = False)
pclass sex age survived
۰ ۱ female ۳۷٫۰۳۷۵۹۴ ۱۳۹
۴ ۳ female ۲۲٫۱۸۵۳۲۹ ۱۰۶
۲ ۲ female ۲۷٫۴۹۹۲۲۳ ۹۴
۵ ۳ male ۲۵٫۹۶۲۲۶۴ ۷۵
۱ ۱ male ۴۱٫۰۲۹۲۷۲ ۶۱
۳ ۲ male ۳۰٫۸۱۵۳۸۰ ۲۵

نویسنده: دکتر سهیل تهرانی پور

سال: تابستان ۱۳۹۷

نوشته مرتبط

دیدگاه خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *