Data Analysis of Penguen dataset

Nazrin
4 min readMay 21, 2021

Hər kəsə salam!Bu məqaləmdə penguen datasetini analiz edəcəyik.Dataseti yükləmək və əlavə məlumat üçün aşağıdakı linkə keçə bilərsiz.

https://www.kaggle.com/parulpandey/palmer-archipelago-antarctica-penguin-data

İlk öncə dataset haqqında ümumi məlumat verim.

Məsələnin qoyuluşu-Palmer Archipelago Penguin Datasetindən istifadə edərək pinqivinlərin növlərini proqnozlaşdırmaq.

species-pinqivinlərin növləri

culmen_length_mm-pinqivinin dimdiyinin üst hissəsinin uzunluğu

culmen_depth_mm-pinqivinin dimdiyinin hündürlüyü

flipper_length_mm-pinqivinin üzgəcinin uzunluğu

body_mass_g-pinqivinin kütləsi

island-Palmer Archipelago-da ada adları(Dream, Torgersen, or Biscoe)

sex-pinqivinlərin cinsiyyətləri

İlk olaraq bizə lazım olacaq kitabxanaları yükləyək.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

Daha sonra datasetimizi yükləyək və ilkin baxış keçirdək.

penguen_data=pd.read_csv('penguins_size.csv')
penguen_data.head()

Aşağıdakı kodu yazaraq,sütün adlarına,data type-lara,və missing value-lara baxaq.

penguen_data.info()

Şəkildəndə gördüyünüz kimi culmen_length_mm,culmen_depth_mm,flipper_length_mm,body_mass_g,sex sütunlarında missing value var.isnull() funskiyasından istifadə edərək hər sütunda neçə ədəd olmasına baxaq.

penguen_data.isnull().sum()

Yuxarıdanda göründüyü kimi ən çox missing value Sex sütundadır.Bu datasetin kiçik bir hissəsini tutduğuna görə silinə bilər.

Sonra dəyişənlərin distributionuna baxaq.Numeric valuelar üçün describe methodundan,categorical valuelar üçün isə frequencylərdən istifadə edəcəyik.

penguen_data.describe()
penguen_data['species'].value_counts()
penguen_data['island'].value_counts()
penguen_data['sex'].value_counts()

Sex sütununda unknown value var(‘.’ nöqtə ilə işarə olunub)Onun indexini taparaq silmək lazımdırki bizə mane olmasın.

penguen_data[penguen_data.sex == '.']

Indi isə vizualizasiyadan istifadə edib datanı analiz edək.Ilk olaraq pinqivinin növlərini cinsiyyət sayına və adalara görə ayıracağıq.

sns.countplot(data=penguen_data,x='species',hue='sex')
plt.xlabel('Species')
plt.ylabel('Count')
sns.countplot('species',hue='island',data=penguen_data)

Buraya qədər müzakirə etdiklərimiz ümümi analiz idi.Hansı problemlər var və s.İndi isə Data Preparation-a keçək.Modeli train etməmişdən əvvəl əvvəl onu dəyişdirmək lazımdır. Buraya missing values olan sətirlərin silinməsi, categoric dəyişənlərin numeric olaraq dəyişdirilməsi və s daxildir.

İlk olaraq missing values-dən qurtulaq.

penguen_data.dropna(inplace=True)
penguen_data.drop(336,axis = 0,inplace=True)
penguen_data.isnull().sum()

species, island, and sex sütunları categorical dəyişənlər olduğuna görə onları numeric dəyişənlərə çevirməliyik ki,algorithmlərdə istifadə oluna bilsin.Species bizim target variable olduğuna görə onu sadəcə 0,1,2 rəqəmlərinə çevirəcəyik.İsland sütununda 3 ədəd categori olduğu üçün həmçinin predictor variable olduğuna görə dummy encoding üsulundan istifadə edəcəyik.Burada hər ada üçün bir sütun yaradılır və hansı adaya aid olduğunu göstərmək üçün 0 və ya 1 istifadə olunur.Sex sütunu isə binary numbere çevrilir.0-male,1-female.

penguen_data['species'].replace({'Adelie': 0, 'Gentoo': 1, 'Chinstrap': 2}, inplace=True)
penguen_data[['Dream','Torgersen']] = pd.get_dummies(penguen_data.island,drop_first=True)
penguen_data['sex'].replace({'MALE': 0, 'FEMALE': 1}, inplace = True)

İsland sütununa artıq ehtiyac olmadığına görə silə bilərik.

penguen_data.drop(['island'],axis = 1,inplace = True)

Yenidən datasetimizə baxaq.

penguen_data.head()

Bütün bunları tətbiq etdikdən sonra artiq datasetimiz model mərhələsinə hazırdır.Modeli qurmamışdan əvvəl dataseti train və test set-ə ayırmalıyıq.

x=penguen_data[['culmen_length_mm','culmen_depth_mm','flipper_length_mm','body_mass_g','sex','Biscoe','Dream','Torgersen']]
y=penguen_data['species']

Bunun üçün scikit learn kitabxanasıdan istifadə edəcəyik.

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=0)

Ayırdıqdan sonra modelimizi tətbiq edə bilərik.Mən bu məqalədə Logistic Regressiondan istifadə edəcəm siz başqa algorithmdə tətbiq edə bilərsiz.

from sklearn.linear_model import LogisticRegression
log=LogisticRegression()
log.fit(x_train,y_train)

İndi isə predict edib,modelin accuracy-ya baxaq.

pred=log.predict(x_test)
from sklearn.metrics import confusion_matrix
accuracy=confusion_matrix(y_test,pred)
from sklearn.metrics import accuracy_score
accuracy=accuracy_score(y_test,pred)

Logistic Regression ilə accuracy 97% bərabər oldu.Kifayət qədər yaxşı nəticədir.

Ümid edirəm məqalə xoşunuza gəldi.Bu məqaləmdə indiyə qədər öyrəndiyim mənbələrdəki texniklərdən istifadə edib,tətbiq etdim.Suallar və iradlar üçün yaza bilərsiz.Təşəkkürlər!!!

--

--