Добавил:
darkwarius13@gmail.com Рад если помог :). Можешь на почту спасибо сказать Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лаб 1 / Лб1_Vi

.docx
Скачиваний:
9
Добавлен:
27.06.2021
Размер:
341.46 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ

ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ

Кафедра СТ

Звіт

про виконання лабораторної роботи № 1

з дисципліни Інтелектуальна обробка даних в розподілених інформаційних середовищах

на тему “ Робота з DataFrame. Попереднє оброблення даних. Заповнення пропущених значень.”

Виконав:

ст. гр. СПРм-19-1

Шемчук В. Н.

Перевірила:

Перова І. Г.

Харків 2020

РАБОТА С DATAFRAME. ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА ДАННЫХ. ЗАПОЛНЕНИЕ ПРОПУЩЕННЫХ ЗНАЧЕНИЙ.

Цель работы: получение навыков работы с DataFrame. Изучение методов предварительной обработки данных и заполнения пропущенных значений.

Ход работы:

1. Загрузить файл Dataset.xlsx в DataFrame.

file = pd.ExcelFile('Dataset.xlsx')

df = pd.read_excel(file, sheet_name='Лист1', header=1);

Рисунок 1 – Загрузка данных

2. С помощью метода df.describe () вывести в отдельную DataFrame результаты работы.

Рисунок 2 – Результаты команды describe начальных значений Dataset

3. Заполнить в DataFrame все пропущенные значения с помощью метода (df.fillna ()) с различными вариантами параметров метода и сохранить результаты заполнения в разные DataFrame.

# Заменяем пустые на значение строки ниже

df.fillna(method='pad')

# Заменяем пустые на значение строки ниже

df.fillna(method='bfill')

# Замолняем пропуски на 0

df.fillna(0)

Примеры использования команд приведены в прикрепленном файле к отчету.

4. Создать собственный метод заполнения пропущенных значений на основе метода нечеткой пространственной экстраполяции.

def isNa(value):

if isinstance(value, int) or isinstance(value, float):

if math.isnan(value) and value != 0:

return True

return False

def dropNaRowByPercent (df, maxNaPercents):

for y, colObject in df.iteritems():

countOfNa = 0;

countOfRows = len(colObject);

for key in colObject:

if isNa(key):

countOfNa += 1

percentNaInRow = (countOfNa / countOfRows) * 100;

#print('index =', rowObject.name, 'count_na =' ,countOfNa, '|',percentNaInRow, '%')

if percentNaInRow > maxNaPercents:

print('deleting', colObject.name)

df = df.drop(colObject.name, axis=1)

return df

def generateValue(naPosX, naPosY, rowCount):

distances = []

for x, naFreeRow in df_dropNa.iterrows():

res = 0

for y, value in df_res.iloc[naPosX].iteritems():

if (isNa(value) != True) and (isinstance(value, int) or isinstance(value, float)):

res += abs(naFreeRow[y] - value)

distances.append(res/rowCount)

#print("distances: " + str(distances))

inverseDistancesSum = 0

for distance in distances:

inverseDistancesSum += 1/distance

#print("inverse distance sum: " + str(inverseDistancesSum))

affiliationLevels = []

for distance in distances:

affiliationLevels.append((1/distance)/inverseDistancesSum)

#print("affiliation levels: " + str(affiliationLevels))

naValue = 0

iterator = 0

for x, value in df_dropNa[naPosY].iteritems():

naValue += value * affiliationLevels[iterator]

iterator += 1

return naValue

file = pd.ExcelFile('Dataset.xlsx')

df = pd.read_excel(file, sheet_name='Лист1', header=1);

df_res = dropNaRowByPercent(df, 20);

df_dropNa = df_res.dropna()

resultData = df_res.copy()

for x, row in df_res.iterrows():

for y, value in row.iteritems():

if isNa(value):

resultData.loc[x, y] = generateValue(x, y, len(df_dropNa.index) + 1)

Рисунок 3 – Формула расчета расстояний между симптомами пациента

Рисунок 4 – Формула расчета принадлежности

Рисунок 5 – Формула заполнения пропущенных значений

Результаты программы приведены в прикрепленном к отчету файле.

5. Повторить пункт 2 для DataFrame без пропусков. Сравнить полученные результаты. Сделать выводы.

Рисунок 6 – Результаты команды describe результата

Если сравнивать вывод команды describe для начальных данных и результата, то разницы почти не видно.

6. В качестве финальной DataFrame необходимо заполнить пробелы в тех признаках, где это имеет смысл (пропусков меньше, например, 20%). Удалить те столбцы, значения которых содержит более 20% пропусков.

Для примера были отобраны те признаки, в которых пропусков меньше 7%.

Рисунок 7 – финальная DataFrame (132, 94) в которой пропусков меньше 7%.

Соседние файлы в папке лаб 1