Привет, ребята! Прежде чем мы перейдем к теме, я молюсь за ваше здоровье и благополучие.

Давайте посмотрим, что мы собираемся освещать в этом блоге.

  1. Одномерный анализ.
  2. Многофакторный анализ.
  3. Обработка нечисловых данных.
  4. Нормализация.
  5. Техники трансформации.

Набор данных содержит информацию о 1300 физических лицах в отношении страховых сборов. Данные содержат основную информацию о человеке, такую ​​как возраст, пол, ИМТ, регион проживания и так далее.

Информация об атрибутах:

возраст: возраст человека; пол: пол человека; ИМТ: индекс массы тела человека; bp: систолическое артериальное давление в мм/рт.ст.; дети: количество детей физического лица;курильщик: курит ли лицо или нет;регион: регион проживания физического лица; medical_cost: медицинские расходы человека, оплачиваемые страховой компанией.

Чтобы загрузить набор данных, посетите:-https://www.kaggle.com/umangsaluja/health-insurance-data

## Я выполняю EDA с образцом вопросов, которые я разработал ##, так что давайте испачкаем руки в Python.

Импортируйте необходимые библиотеки

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

Загрузите набор данных медицинского страхования и проверьте первые пять наблюдений.

# reading the dataset
df= pd.read_csv('health_insurance.csv')
df.head(5)
Output-

1. Одномерный анализ.

Начнем с практических упражнений

  1. Есть ли какие-либо экстремальные наблюдения в «ИМТ»? Подтвердите свой ответ сюжетом?
sns.boxplot(df.bmi)
plot.show()
# yes, extreme values are present in the column bmi.
Output-

2. Является ли переменная «возраст» искаженной? Подтвердите свой ответ графиком и метрикой?

sns.distplot(df.age)
print(df.age.skew())
# column age has 2 peaks, and data is slightly skewed.
Output-

3. Нарисуйте линию для среднего и медианы на графике распределения и определите тип асимметрии для BM?

sns.distplot(df.bmi)
plt.axvline(df.bmi.mean(),color='r')
plt.axvline(df.bmi.median(),color='r')
plt.show()
# we can say that BMI is normally distributed since mean and median are almost equal.
Output-

4. Визуализируйте распределение медицинских расходов, используя график скрипки, и опишите его распределение?

sns.violinplot(df.medical_cost)
plt.show()
Output-

2. Многофакторный анализ.

  1. Есть ли люди моложе 30 лет со стоимостью лечения более 40 тысяч?
df[(df.age<30)&(df.medical_cost>40000)]
Output-

2. Выявляет ли график рассеяния ИМТ и стоимости медицинских услуг потенциальные выбросы?

sns.scatterplot(df.bmi,df.medical_cost,color='green')
plt.show()
# we can say that values above 50,000 our the outliers present.
Output-

3. Определить процентную вариацию ИМТ для мужчин и женщин?

df.groupby(['gender'])['bmi'].sum()
Output-

4. В каком регионе больше всего мужчин?

df.groupby(('region'),['gender']=='M').max()
Output-

5. Проанализировать попарные отношения между числовыми переменными?

df_num= df.select_dtypes(np.number)#selecting the numeric columns
sns.pairplot(df_num)
Output-

6. Влияют ли на медицинские расходы привычки курения?

df.groupby('smoker')['medical_cost'].max()
# yes we can see that medical_cost of smokers is way too high
Output-

7. Проверить, влияет ли на стоимость лечения регион проживания и возраст людей?

sns.scatterplot(df.age,df.medical_cost,hue=df.region)
plt.show()
Output-

3. Обрабатывайте нечисловые данные.

  1. Создать фиктивную переменную для каждой категории региона?
# import your code here
df_region=pd.get_dummies(df.region,drop_first=True)
Output-

2. Создать переменную «smoker_label», содержащую уникальную метку для каждой категории в переменной «smoker»?

import scipy as stats
from sklearn.preprocessing import
LabelEncoder,StandardScaler,MinMaxScaler
le=LabelEncoder()
ss=StandardScaler()
ms=MinMaxScaler()

После импорта библиотеки Sklearn

df['smoker']=le.fit_transform(df['smoker'])
df['smoker'] 
# it converts smoker as 1 and non-smoker as 0
Output-

3. Создайте переменную, которая будет содержать частоту встречаемости пола человека.

df['gender']= df['gender'].replace(df['gender'].value_counts(normalize=True))
Output-

4. Нормализация.

  1. Преобразование ИМТ таким образом, чтобы его среднее значение было равно нулю, а дисперсия – единице.
# before we normalize our data, we need to make sure that all our columns are numeric in nature.
df.drop('region',axis=1,inplace=True)
newdf= pd.concat([df,df_region],axis=1)
# as now we have to normalize the data, so we concatenate the columns on which feature engineering was performed.

Применение стандартного масштабирования ко всему набору данных (масштабирование набора данных необходимо для обобщения точек данных, чтобы расстояние между ними было меньше.

from sklearn.preprocessing import StandardScaler
SS=StandardScaler()
scaled= SS.fit_transform(newdf)
scaled_df= pd.DataFrame(scaled,columns=newdf.columns)
scaled_df
Output-

5. Техники трансформации.

  1. Проверьте асимметрию для параметра "medical_cost". Если данные искажены, используйте соответствующий метод, чтобы уменьшить неравномерность данных.
print('Skewness-',scaled_df.medical_cost.skew())
sns.distplot(scaled_df.skew())
plt.show()
# we can see even after scaling the entire data, we have skewed values in our dataset
# to remove this skewness we can use various transformation technique includes log transformation, sq rt and cube root transformation
Output-

Глядя на приведенный выше график, мы можем заметить, что приведенные выше данные сильно искажены, поэтому в дальнейшем мы будем применять технику преобразования данных, чтобы уменьшить масштаб данных.

scaled_df.skew()
Output-

scaled_df['medical_cost']= np.cbrt(scaled_df['medical_cost'])
# now check the skewness
print(scaled_df.skew())
sns.distplot(scaled_df)
#you can see that after transformation, skewness has reduced.
Output-

Это было краткое введение в исследовательский анализ данных. Ссылка на набор данных — https://www.kaggle.com/umangsaluja/health-insurance-data

Если вам понравилась эта статья, обязательно хлопайте, пока рука не начнет болеть :). Берегите себя, будьте здоровы, оставайтесь в безопасности и продолжайте учиться.

Если вы хотите поделиться своими мыслями, вы можете связаться со мной в LinkedIn.

Спасибо.

Пожалуйста, посетите мое портфолио- https://eportfolio.mygreatlearning.com/umang21