Анализ факторов, влияющих на ценовые категории смартфонов
Заказать уникальную курсовую работу- 40 40 страниц
- 18 + 18 источников
- Добавлена 11.08.2023
- Содержание
- Часть работы
- Список литературы
СОДЕРЖАНИЕ ПРОЕКТА 4
Анализ проблемы исследования 4
Исходные данные 8
Реализация проекта 10
Этап 1. Подготовка данных к анализу 10
Этап 2. Предварительный анализ данных 12
Этап 3. Корреляционный анализ данных 21
Этап 4. Моделирование 26
Этап 5. Прогнозирование 31
Заключение 34
Список использованных источников и литературы 36
Приложения 38
2017. С. 97-100.Маккини У. Python и анализ данных / пер. с анг. А. А. Слинкина. – М.: ДМК Пресс, 2020. 540 с. Михайлова М. Е., Белая Е. В. Влияние полиморфных вариантов генов соматотропинового каскада bGH, bGHR и bIGF-1 на признаки молочной продуктивности у крупного рогатого скота голштинской породы //Доклады Национальной академии наук Беларуси. – Республиканское унитарное предприятие Издательский дом Белорусская наука, 2011. Т. 55. №. 2. С. 63-69.Фатхутдинов Р.А. Управление конкурентоспособностью организации / Р.А. Фатхутдинов // М.: Эксмо. 2005. С. 544.Федин, Ф. О. Анализ данных. Часть 1. Подготовка данных к анализу : учебное пособие / Ф. О. Федин, Ф. Ф. Федин. – Москва : Московский городской педагогический универ-ситет, 2012. 204 c. – ISBN 2227-8397. – Текст : электронный // Электронно-библиотечная система IPR BOOKS : [сайт].Федин, Ф. О. Анализ данных. Часть 2. Инструменты DataMining : учебное пособие / Ф. О. Федин, Ф. Ф. Федин. – Москва : Московский городской педагогический университет, 2012. 308 c. – ISBN 2227-8397. – Текст : электронный // Электронно-библиотечная система IPR BOOKS : [сайт].Царькова С.В. Методологические аспекты исследования конкурентоспособности переходной экономики России / С.В. Царькова //Автореф. дис. М. 1999. С. 23.Schuller B., Globalization and Competitiveness of Nations – International Scientific Conference Proceedings, Kaunas University of Technology, Kaliningrad State Technical University, Riga Technical University. 2008.ПриложенияПриложение 1Программныйкод:# подключаемнужныебиблиотекиimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport google.colab.files as files#df = pd.read_excel("d:\\data.xlsx")# а можно скачать сразу с веб-ресурса по прямой ссылке# на этот раз данные грузим из файла Excel#df = pd.read_excel("https://en.files.fm/u/ybqxqxmw7")uploaded = files.upload()for fn in uploaded.keys(): print('User uploaded file "{name}" with length {length} bytes'.format( name=fn, length=len(uploaded[fn])))df = pd.read_excel("data.xlsx")df.head()#battery_power– объемаккумулятора (мАч)#blue – наличиеподдержкиBluetooth#clock_speed – частота процессора (ГГц)#dual_sim – наличиеподдержкидвухSIM-карта#fc – количествомегапикселейфронтальнойкамеры#four_g – наличие поддержки 4G#int_memory – объемвнутреннейпамяти (ГБ)#m_dep – толщинамобильноготелефона (см)#mobile_wt –весмобильноготелефона (г)#n_cores – количествоядерпроцессора#pc – количествомегапикселейосновной (задней)камеры#px_height – разрешениеэкранаповысоте (пиксели)#px_width – разрешениеэкранапоширине (пиксели)#ram – объем оперативной памяти (МБ)#sc_h – высота экрана (см)#sc_w – ширина экрана (см)#talk_time – максимальноевремяработыотзарядааккумулятораврежимеожидания#three_g – наличие поддержки 3G#touch_screen – наличиесенсорногоэкрана#wifi – наличие поддержкиWi-Fi#price_range – ценовая категория (0 – низкая стоимость, 1 – средняя стоимость, 2 – высокая стоимость, 3 – очень высокая стоимость) – целевой признак.df.info()# посмотрим, какова доля пропусков по колонкамdf.isna().sum() / len(df)# а теперь посмотрим на долю пропусков в строках# проще всего это сделать так же, как смотрели в колонках, просто# транспонируемдатафреймdf.transpose().isna().sum() / len(df.transpose())# сохраним серию с долями пропусков по строкам в переменную nansnans = df.transpose().isna().sum() / len(df.transpose())# пусть предельная допустимая доля пропусков в строках будет 0,4nans[nans > 0.4] # посмотрим, в каких строках больше пропусков# посмотрим, что это за строки такие (по индексам)df.loc[nans[nans > 0.4].index]# убедимся, что пропусков больше нетdf.info()df.describe() # описательные статистики# посмотрим на боксплоты всех числовых колонок датафреймаdf.boxplot();# Но из-за несопоставимости масштабов на такой диаграмме# построим отдельные боксплоты для каждой колонки (числовой, то есть кроме последней - name)plt.rcParams["figure.figsize"] = 15, 8 # ширина, высотаi = 1for col in df.columns:plt.subplot(7, 3, i)plt.boxplot(df[col])plt.title(col)i += 1plt.tight_layout();# построим гистограммы для всех числовых колонокi = 1for col in df.columns:plt.subplot(7, 3, i)plt.hist(df[col], bins=30, color="blue", linewidth=1, edgecolor="black")plt.title(col)i += 1plt.tight_layout();# не похоже, что тут есть нормально распределенные колонки# проверим статистическими тестамиimportscipy.statsasstats # подключим нужную библиотекуfor col in df.columns:# выполним тест Шапиро-Уилка для всех числовыхprint(col, stats.shapiro(df[col]))importseabornassns # эта библиотека нужна для тепловой картыplt.rcParams["figure.figsize"] = 20, 20 # ширина, высота# все колонки ненормальны, поэтому используем ранговый коэффициент Спирмена# аргумент annot функции heatmap() включает отображение значений в ячейкахsns.heatmap(df.corr(method="spearman", numeric_only=True), annot=True);# выбрали вот такие факторные колонки:# ram – объем оперативной памяти (МБ) (0.92 корреляция с price_range)# px_width – разрешениеэкранапоширине (пиксели) (0.17) px_heigth не берем потому что сильно коррелирует с px_width# int_memory – объемвнутреннейпамяти (ГБ) (0.044)# pc – количествомегапикселейосновной (задней)камеры (0.033)X_cols = ["ram", "px_width", "int_memory", "pc"]# выполним нормализацию приведением к интервалу от 0 до 1from sklearn.preprocessing import MinMaxScaler # подключимнужнуюфункцию# поместим в нормализованный датафрейм только нужные столбцы# создаем копию исходного датафрейма, чтобы не терять оригинальные данныеdf_norm = df[X_cols].copy()# выполнимнормализациюdf_norm[X_cols] = MinMaxScaler().fit_transform(df_norm)df_norm["price_range"] = df.price_range # добавимцелевуюколонкуdf_norm.head(3) # посмотрим на результат# дальше работаем с нормализованным датафреймом# разобьем выборку на обучающую и тестовую (соотношение 7 к 3), сохраним индексыrandom_index = df_norm.sample(n=len(df_norm)).indextrain_index = random_index[:int(len(df_norm) * 0.7)]test_index = random_index[int(len(df_norm) * 0.7):]# убедимся, что соотношение классов 0 и 1 в обучающей выборке примерно такое же, как в тестовой# соотношениеклассов в обучающейвыборкеprint(df_norm.loc[train_index, "price_range"].value_counts() / len(train_index))# соотношениеклассов в тестовойвыборкеprint(df_norm.loc[test_index, "price_range"].value_counts() / len(test_index))# подключим функции, реализующие различные алгоритмы классификацииfrom sklearn.neighbors import KNeighborsClassifier # kNNfrom sklearn.linear_model import LogisticRegression # логистическаярегрессияfrom sklearn.naive_bayes import GaussianNB # наивныйБайесfrom sklearn.svm import LinearSVC # машиныопорныхвекторовfrom sklearn.tree import DecisionTreeClassifier # дереворешенийy_col = "price_range"# обучим kNN, значение k возьмем предлагаемое алгоритмом по умолчаниюmodel_kNN = KNeighborsClassifier().fit(X=df_norm.loc[train_index, X_cols], y=df_norm.loc[train_index, y_col])# логистическаярегрессияmodel_logit = LogisticRegression().fit(X=df_norm.loc[train_index, X_cols], y=df_norm.loc[train_index, y_col])# наивныйБайесmodel_bayes = GaussianNB().fit(X=df_norm.loc[train_index, X_cols], y=df_norm.loc[train_index, y_col])# машиныопорныхвекторовmodel_SVC = LinearSVC().fit(X=df_norm.loc[train_index, X_cols], y=df_norm.loc[train_index, y_col])# дереворешенийmodel_tree = DecisionTreeClassifier().fit(X=df_norm.loc[train_index, X_cols], y=df_norm.loc[train_index, y_col])# предскажем метки классов на тестовой выборке, используя обученные моделиy_pred_kNN = model_kNN.predict(df_norm.loc[test_index, X_cols])y_pred_logit = model_logit.predict(df_norm.loc[test_index, X_cols])y_pred_bayes = model_bayes.predict(df_norm.loc[test_index, X_cols])y_pred_SVC = model_SVC.predict(df_norm.loc[test_index, X_cols])y_pred_tree = model_tree.predict(df_norm.loc[test_index, X_cols])# подключим модуль с оценками качества моделейimport sklearn.metrics as metrics# вычислим F-меру на тестовой выборке для каждой моделиprint("F-мера (kNN) =", metrics.f1_score(df_norm.loc[test_index, y_col], y_pred_kNN, average='micro'))print("F-мера (Logistic regression) =", metrics.f1_score(df_norm.loc[test_index, y_col], y_pred_logit, average='micro'))print("F-мера (Naive Bayes) =", metrics.f1_score(df_norm.loc[test_index, y_col], y_pred_bayes, average='micro'))print("F-мера (SVC) =", metrics.f1_score(df_norm.loc[test_index, y_col], y_pred_SVC, average='micro'))print("F-мера (Decision Tree) =", metrics.f1_score(df_norm.loc[test_index, y_col], y_pred_tree, average='micro'))# будем использовать в качестве координат признаки ram (x) и px_width (y)x_cor = "ram"y_cor = "px_width"# следует выделить:# * верно классифицированные 0 – низкая стоимостьdf_norm_0 = df_norm.loc[test_index][(df_norm.loc[test_index, y_col] == 0) & \ (df_norm.loc[test_index, y_col] == y_pred_SVC)]# следует выделить:# * верно классифицированные 1 – средняя стоимостьdf_norm_1 = df_norm.loc[test_index][(df_norm.loc[test_index, y_col] == 1) & \ (df_norm.loc[test_index, y_col] == y_pred_SVC)]# следует выделить:# * верно классифицированные 2 – высокая стоимостьdf_norm_2 = df_norm.loc[test_index][(df_norm.loc[test_index, y_col] == 2) & \ (df_norm.loc[test_index, y_col] == y_pred_SVC)]# следует выделить:# * верно классифицированные 3 – очень высокая стоимостьdf_norm_3 = df_norm.loc[test_index][(df_norm.loc[test_index, y_col] == 3) & \ (df_norm.loc[test_index, y_col] == y_pred_SVC)]# * неверноклассифицированныеобъектыdf_norm_wrong = df_norm.loc[test_index][df_norm.loc[test_index, y_col] != y_pred_SVC]# построим диаграмму рассеяния на тестовой выборке# верно классифицированные 0 – низкая стоимостьplt.scatter(x=df_norm_0[x_cor], y=df_norm_0[y_cor], color="blue",label="Смартфоны с низкой стоимостью")# верно классифицированные 1 – средняя стоимостьplt.scatter(x=df_norm_1[x_cor], y=df_norm_1[y_cor], facecolors="none", edgecolors="green",label="Смартфоны с средней стоимостью")# верно классифицированные 2 – высокая стоимостьplt.scatter(x=df_norm_2[x_cor], y=df_norm_2[y_cor], facecolors="none", edgecolors="yellow",label="Смартфоны с высокой стоимостью")# верно классифицированные 3 – очень высокая стоимостьplt.scatter(x=df_norm_3[x_cor], y=df_norm_3[y_cor], facecolors="none", edgecolors="violet",label="Смартфоны с очень высокой стоимостью")# неверно классифицированные объектыplt.scatter(x=df_norm_wrong[x_cor], y=df_norm_wrong[y_cor], color="red", marker="x",label="Неверно классифицированные страны")plt.xlabel(x_cor)plt.ylabel(y_cor)plt.title("Классификация смартфонов по стоимости")plt.gca().legend();# вычислим другие показатели качества классификацииprint("Accuracy =", metrics.accuracy_score(df_norm.loc[test_index, y_col], y_pred_logit ))print("Precision =", metrics.precision_score(df_norm.loc[test_index, y_col], y_pred_logit, average='micro'))print("Recall =", metrics.recall_score(df_norm.loc[test_index, y_col], y_pred_logit, average='micro'))# построим и визуализируем с помощью тепловой карты матрицу ошибокsns.heatmap(metrics.confusion_matrix(df_norm.loc[test_index, y_col], y_pred_logit),annot=True).set(xlabel="Предсказанныеметки", ylabel="Истинныеметки");
2. Баврина А. П., Борисов И. Б. Современные правила применения корреляционного анализа //Медицинский альманах. 2021. №. 3 (68). С. 70-79.
3. Беленов О. Н., Анучин А. А. Конкурентоспособность стран и регионов //М.: Изд-во КноРус. 2011. 141 с.
4. Васильев, А.Н. Программирование на Python в примерах и задачах / А,Н. Васильев. Москва : Эксмо, 2021. 616 с.
5. Володарский Е. Т., Козыр Е. В. Проверка однородности по критерию Фишера как дополнительный инструмент контроля при проверке условий повторяемости в исследуемых лабораториях //Системи обробки інформації. 2008. №. 4. С. 55-58.
6. Воронов А. Конкуренция в ХХI веке / А. Воронов // Маркетинг. 2001. № 5. С. 16 − 24.
7. Гржибовский А. М. Корреляционный анализ //Экология человека. 2008. №. 9. С. 50-60.
8. Ершов Э. Б. Выбор регрессии, максимизирующий несмещенную оценку коэффициента детерминации //Прикладная эконометрика. 2008. №. 4. С. 71-83.
9. Завьялов П.С. Конкурентоспособность и маркетинг / П.С. Завьялов // Российский экономический журнал. 2005. № 12. C. 50 − 58.
10. Кондратьев В. Б., Егоров А. С., Аукуционек С. П. Оценки конкурентоспособности стран //Мировая экономика и международные отношения. 2013. №. 2. С. 12-25.
11. Локтионова А. А., Нехороших И. Н. Конкурентоспособность России в мировой экономике //Современная экономика: актуальные вопросы, достижения и инновации. 2017. С. 97-100.
12. Маккини У. Python и анализ данных / пер. с анг. А. А. Слинкина. – М.: ДМК Пресс, 2020. 540 с.
13. Михайлова М. Е., Белая Е. В. Влияние полиморфных вариантов генов соматотропинового каскада bGH, bGHR и bIGF-1 на признаки молочной продуктивности у крупного рогатого скота голштинской породы //Доклады Национальной академии наук Беларуси. – Республиканское унитарное предприятие Издательский дом Белорусская наука, 2011. Т. 55. №. 2. С. 63-69.
14. Фатхутдинов Р.А. Управление конкурентоспособностью организации / Р.А. Фатхутдинов // М.: Эксмо. 2005. С. 544.
15. Федин, Ф. О. Анализ данных. Часть 1. Подготовка данных к анализу : учебное пособие / Ф. О. Федин, Ф. Ф. Федин. – Москва : Московский городской педагогический универ-ситет, 2012. 204 c. – ISBN 2227-8397. – Текст : электронный // Электронно-библиотечная система IPR BOOKS : [сайт].
16. Федин, Ф. О. Анализ данных. Часть 2. Инструменты DataMining : учебное пособие / Ф. О. Федин, Ф. Ф. Федин. – Москва : Московский городской педагогический университет, 2012. 308 c. – ISBN 2227-8397. – Текст : электронный // Электронно-библиотечная система IPR BOOKS : [сайт].
17. Царькова С.В. Методологические аспекты исследования конкурентоспособности переходной экономики России / С.В. Царькова //Автореф. дис. М. 1999. С. 23.
18. Schuller B., Globalization and Competitiveness of Nations – International Scientific Conference Proceedings, Kaunas University of Technology, Kaliningrad State Technical University, Riga Technical University. 2008.