- •Лабораторная работа №1 разведочный анализ данных
- •Лабораторная работа №2 метод анализа иерархий
- •Лабораторная работа №3 группировка и агрегирование с помощью pandas
- •Лабораторная работа №4 регрессионный анализ
- •Лабораторная работа №5 программирование генетических алгоритмов на алгоритмическом языке python
- •Лабораторная работа №6 программирование лувенского алгоритма
Лабораторная работа №3 группировка и агрегирование с помощью pandas
Целью лабораторной работы является освоение:
функций группировки и агрегирования анализа данных на алгоритмическом языке Python;
вариантов агрегирования данных;
использования именованного агрегирования;
функции groupby для резюмирования данных;
использования подсчета для агрегирования данных;
работы с групповыми объектами (сгруппированными);
работы с текстом при группировании данных.
Задание на выполнение и ход лабораторной работы:
В Интернете были найдены данные в соответствии с тематикой варианта и сформирован из них файл с исходными данными для дальнейшего анализа. Это Датасет с героями игры Лига легенд (открыт через блокнот):
Сформулированы и сформированы для анализа данных:
признаки (3-7) для вычисления агрегатных функций (7-10),
признаки для группирования данных (2-3) и способы его выполнения,
структуру групповых объектов (вложенных) (2-3 уровня);
необходимые графики/гистограммы (2-3).
Разработать программу на алгоритмическом языке Python, которая выполняет п.2.
Листинг программы:
import pandas as pd import matplotlib.pyplot as mp ex = pd.read_csv('lol.csv', delimiter=';') gr1 = ex.groupby('Health').max()[['Attack damage']] print("Группировка по здоровью силы атаки от максимального значения до минимального") print(gr1) gr6 = ex.groupby('Health').min()[['Attack damage']] print("Группировка по здоровью силы атаки от минимального значения до максимального") print(gr6) gr2 = ex.groupby('Attack damage').max()[['Move. speed']] print("Группировка по силы аттаки скорости движения от максимального значения до минимального") print(gr2) gr7 = ex.groupby('Attack damage').min()[['Move. speed']] print("Группировка по силе аттаки скорости движения от минимального значения до максимального") print(gr7) gr3 = ex.groupby('Magic resist.').sum()[['Armor']] print("Сумма по магическому сопротивлению снаряжения") print(gr3) gr4 = ex.groupby('Base AS').count()[['Selection radius']] print("Количество баз") print(gr4) gr5 = ex.groupby('Attack range').mean(numeric_only=True)[['Armor']] print("Среднее значение атаки") print(gr5) agg_funk = {'Attack damage': ['max', 'min', 'count']} a = ex.groupby('roles').agg(agg_funk) print(ex.groupby(['roles']).agg(agg_funk).round(2)) ls = [ "max", "min", "count"] mp.plot(a) mp.legend(ls) mp.show()
Вывод:
На основании полученных результатов и построенных графиков сделан вывод о изучаемых аспектах предметной области.
Вывод: на основе проведенной работы можно сделать вывод о наиболее популярном классе среди игроков. Таким образом, самыми популярными оказались specialist и fighter, juggernaut. Самым популярным среди игроков оказался specialist.
Лабораторная работа №4 регрессионный анализ
Целью лабораторной работы является освоение:
выполнению парного регрессионного анализа, в том числе множественного, с использованием библиотек и функций алгоритмического языка Python,
визуализации результатов регрессионного анализа средствами алгоритмического языка Python,
объяснению результатов.
Задание на выполнение и ход лабораторной работы:
Разработаны 2 (две) программы на алгоритмическом языке Python, которые в соответствии с выданным вариантом выполняют следующее:
В соответствии со своим вариантом для заданной предметной области:
По данным наблюдений двух величин выполнить регрессионный анализ, найти коэффициент корреляции и уравнение линии регрессии. Построить ее график, а также диаграмму рассеяния.
По данным наблюдений трех величин (одной зависимой и двух независимых) выполнить регрессионный анализ, найти коэффициент детерминации и уравнение линии регрессии. Построить диаграмму рассеяния для каждого регрессора.
Добавить третью независимую величину, выполнить регрессионный анализ, найти коэффициент детерминации и уравнение линии регрессии.
Осуществить проверку полученных результатов и их интерпретацию.
Листинг программы:
import pandas as pd import matplotlib.pyplot as plt import statsmodels.api as sm df = pd.read_csv("lol.csv", delimiter=";") y = df['Health'] #define predictor variables x = df[['Armor']] #add constant to predictor variables x = sm.add_constant(x) #fit linear regression model model = sm.OLS(y, x).fit() print(model.summary()) yy = df['Health'] #define predictor variables xx = df[['Armor', 'Attack damage']] #add constant to predictor variables xx = sm.add_constant(xx) #fit linear regression model model = sm.OLS(yy, xx).fit() #view model summary print(model.summary()) yyy = df['Health'] #define predictor variables xxx = df[['Armor', 'Attack damage', 'Magic resist.']] #add constant to predictor variables xxx = sm.add_constant(xxx) #fit linear regression model model = sm.OLS(yyy, xxx).fit() #view model summary print(model.summary()) fig = plt.figure(figsize=(12,8)) #produce residual plots fig = sm.graphics.plot_regress_exog(model, 'Armor', fig=fig) plt.show()
Вывод:
Интерпретация:
P>|t|: это значение p, связанное с коэффициентами модели. Поскольку p-значение для Armor (0,000) значительно меньше 0,05, мы можем сказать, что существует статистически значимая связь между Armor и Health.
R-квадрат: это число говорит нам о том, какую процентную вариацию в Health можно объяснить количеством Armor. В целом, чем больше значение R-квадрата регрессионной модели, тем лучше независимые переменные способны предсказать значение переменной отклика. В этом случае 27,2% вариации Health можно объяснить Armor.
F-статистика и p-значение: F-статистика (37,42) и соответствующее значение p (1,86e-08) говорят нам об общей значимости регрессионной модели, т. е. о том, полезны ли независимые переменные в модели для объяснения вариации. в переменной ответа. Поскольку p-значение меньше 0,05, наша модель является статистически значимой, и считается, что Armor полезны для объяснения вариаций в Health.
Интерпретация:
P>|t|: это значение p, связанное с коэффициентами модели. Поскольку p-значение для Armor (0,000) значительно меньше 0,05, мы можем сказать, что существует статистически значимая связь между Armor и Health. Так же p-значение для Attack damage (0,130) значительно больше 0,05, мы можем сказать, что не существует статистически значимая связь между Armor и Attack damage.
R-квадрат: это число говорит нам о том, какую процентную вариацию в Health можно объяснить количеством Armor и Attack damage. В целом, чем больше значение R-квадрата регрессионной модели, тем лучше независимые переменные способны предсказать значение переменной отклика. В этом случае 28,9% вариации Health можно объяснить Armor и Attack damage.
F-статистика и p-значение: F-статистика (20,13) и соответствующее значение p (4,63e-08) говорят нам об общей значимости регрессионной модели, т. е. о том, полезны ли независимые переменные в модели для объяснения вариации. в переменной ответа. Поскольку p-значение меньше 0,05, наша модель является статистически значимой, и считается, что Armor полезны для объяснения вариаций в Armor и Attack damage.
Интерпретация:
Вот как интерпретировать остальную часть сводки модели:
P>|t|: это значение p, связанное с коэффициентами модели. Поскольку p-значение для Armor (0,000) значительно меньше 0,05, мы можем сказать, что существует статистически значимая связь между Armor и Health. Так же p-значение для Attack damage (0,260) больше 0,05, мы можем сказать, что не существует статистически значимой связи между Health и Attack damage. И p-значение для Magic resist (0,458) больше 0,05, мы можем сказать, что не существует статистически значимой связи между Health и Magic resist.
R-квадрат: это число говорит нам о том, какую процентную вариацию в Health можно объяснить количеством Armor, Attack damage и Magic resist. В целом, чем больше значение R-квадрата регрессионной модели, тем лучше независимые переменные способны предсказать значение переменной отклика. В этом случае 29,3% вариации Health можно объяснить Armor, Attack damage и Magic resist.
F-статистика и p-значение: F-статистика (13,54) и соответствующее значение p (1,84e-07) говорят нам об общей значимости регрессионной модели, т. е. о том, полезны ли независимые переменные в модели для объяснения вариации в переменной ответа. Поскольку p-значение меньше 0,05, наша модель является статистически значимой, и считается, что Health полезны для объяснения вариаций в Armor, Attack damage и Magic resist.
Гомоскедастичность — свойство, означающее постоянство условной дисперсии вектора или последовательности случайных величин. Однородная вариативность значений наблюдений, выражающаяся в стабильности, однородности дисперсии случайной ошибки регрессионной модели — дисперсии одинаковы во все моменты измерения.
Одно из ключевых предположений линейной регрессии состоит в том, что остатки регрессионной модели примерно нормально распределены и гомоскедастичны на каждом уровне объясняющей переменной. Если эти допущения нарушаются, то результаты нашей регрессионной модели могут вводить в заблуждение или быть ненадежными. Чтобы убедиться, что эти предположения выполняются, мы можем построить следующие остаточные графики:
На основе реальных статистических данных выполнить корреляционный анализ для трех величин (одной зависимой и двух независимых) и интерпретацию результатов.
Был взят датасет покупателей в торговом центре:
Листинг:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns df = pd.read_csv("Mall_Customers.csv", delimiter=",") numeric = ['Age', 'Annual Income (k$)', 'Spending Score (1-100)'] #sns.pairplot(df[numeric]) print(df[numeric].corr(method='spearman')) sns.heatmap(df[numeric].corr(method='spearman')) plt.show()
Вывод:
