58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
import pandas as pd
|
||
import streamlit as st
|
||
import statsmodels.api as sm
|
||
|
||
data = pd.read_csv('data.csv')
|
||
|
||
size_mapping = {
|
||
'15х15': 0,
|
||
'20х14': 1,
|
||
'20х20': 2,
|
||
'21х15': 3,
|
||
'30х40': 4,
|
||
'30х60': 5,
|
||
'38х50': 6,
|
||
'40х40': 7,
|
||
'40х50': 8,
|
||
'40х60': 9
|
||
}
|
||
genre_mapping = {
|
||
"Абстракция": 0,
|
||
"Аниме": 1,
|
||
"Графити и стрит-арт": 2,
|
||
"Животные": 3,
|
||
"Историческая живопись": 4,
|
||
"Мультфильмы": 5,
|
||
"Натюрморт": 6,
|
||
"Пейзаж": 7,
|
||
"Поп-арт": 8,
|
||
"Портрет": 9,
|
||
"Религия": 10,
|
||
"Ретро и винтаж": 11,
|
||
"Спорт": 12,
|
||
"Фантастика": 13,
|
||
"Фильмы": 14,
|
||
"Эротика": 15
|
||
}
|
||
|
||
# Преобразование категориальных значений
|
||
data['Жанр'] = data['Жанр'].map(genre_mapping)
|
||
data['Размер'] = data['Размер'].map(size_mapping)
|
||
|
||
columns_to_check = ['Размер', 'Стоимость', 'Средняя оценка', 'Жанр']
|
||
data = data.dropna(subset=columns_to_check)
|
||
data = data[['Размер', 'Стоимость', 'Средняя оценка', 'Жанр']]
|
||
|
||
|
||
X = data[['Средняя оценка', 'Размер', 'Жанр']]
|
||
y = data['Стоимость']
|
||
|
||
# Добавляем столбец с единичками, так как регрессия Пуассона в statsmodels не добавляет константу автоматически
|
||
X = sm.add_constant(X)
|
||
|
||
# Создание модели и обучение
|
||
poisson_model = sm.GLM(y, X, family=sm.families.Poisson())
|
||
poisson_results = poisson_model.fit()
|
||
|
||
# Вывод результатов
|
||
st.write(poisson_results.summary()) |