# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

# Input data files are available in the read-only "../input/" directory
# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory

import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using "Save & Run All" 
# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session
"""
# **Лабораторная №2**
* Выбрать на сайте Kaggle.com DataSet в формате csv, содержащий не менее 3-х категориальных атрибутов;
* Создать notebook и подключить к нему выбранный DataSet.
"""
data = pd.read_csv("/kaggle/input/stroke-prediction-dataset/healthcare-dataset-stroke-data.csv")
data.rename(columns={'id':'ID','gender':'Gender','age':'Age','hypertension':'Hypertension','heart_disease':'Heart_Disease','ever_married':'Ever_Married','work_type':'Work_Type','Residence_type':'Residence_Type','avg_glucose_level':'AVG_Glucose_Level','bmi':'BMI','smoking_status':'Smoking_Status','stroke':'Stroke'},inplace=True)
data = data[['ID','Gender','Age','Hypertension','Heart_Disease','Ever_Married','Work_Type','Residence_Type', 'AVG_Glucose_Level', 'BMI', 'Smoking_Status', 'Stroke']]
data = data.sort_values('AVG_Glucose_Level',ascending = False)
data.head(20)

"""
# **Лабораторная №3**
Написать на языке python функцию обнаружения функциональных зависимостей в DataSet библиотеки pandas:
* 1 уровень – проверка одной ФЗ;
* 2 уровень – поиск всех ФЗ;
* 3 уровень – поиск основных ФЗ, исключая производные ФЗ (те которые можно получить из основных). 
"""
for item in data.ID.unique():
    if len(data.Ever_Married[data.ID == item].unique()) != 1:
        print(item)
"""
# **Лабораторная №4**
1. Проанализировать типы атрибутов DataSet, определить тип (номинальный, порядковый, дискретный (интервальный), непрерывный), домен (множество принимаемых значений) и шкалу;
2. Выявить и устранить аномалии в DataSet (неатомарные атрибуты, ошибки ввода, гетерогенные данные в столбцах, ошибка определения типа, подмена сущностей экземплярами);
3. Сохранить предобработанный DataSet и в дальнейшем работать с ним.

# 
1. 
* Номинальные - Gender, Work_Type, Residence_Type, Smoking_Status. 
* Интервальные - Age, BMI.
* Относительные ID, AVG_Glucose_Level.
2. 
3. 
"""
print (data.Work_Type)
data['Work']=data['Work_Type']
for i in data['Work'].index:
    if isinstance(data.loc[i, 'Work_Type'], str):
        data.loc[i,'Work']=str(data.loc[i, 'Work_Type']).split('_')[0]
data.loc[1324]
"""
# **Лабораторная №7**
Построить Fact-dimensional model для своего DataSet-а, включая:
* Факты и показатели;
* Уровень измерения Grain и другие уровни иерархического измерения (при наличии);
* Атрибуты уровней иерархии измерения.
* Построить для DataSet-а сводную таблицу (кросс-таблицу) с помощью функции pivot_table (или pivot) библиотеки pandas, где часть категориальных данных отображается в вертикальной шапке, а часть в горизонтальной. Убедиться, что сводная таблица заполнена не менее чем на 80% непустыми значениями;
* Продемонстрировать результаты операций Slice, Dice с помощью функций библиотеки pandas над сводной таблицей.
"""
"""
![]()![Без названия.png](attachment:d3df50a1-0d7f-435a-af4a-f11099ae47eb.png)
"""
#data.pivot_table(index='Gender', columns='Hypertension', values='ID')
#data.pivot_table(index='Age', columns='Hypertension', values='ID')
#data.pivot_table(index='Ever_Married', columns='Hypertension', values='ID')
ps = data.pivot_table(index='Age', columns='Gender', values='BMI')
ps
#SLICE
# От Female до Male
ps.loc[:, 'Female':'Male']
# От Other до Male
ps.loc[:,'Male':'Other']
ps = pd.DataFrame(np.random.randn(5, 3),
                       columns=list('Age'),
                       index=pd.date_range('20130101', periods=5))