Original size 736x1104

Анализ данных по бриллиантам

PROTECT STATUS: not protected

—Вводная часть: 1. Обоснование выбора данных и их источник 2. Виды графиков —Этапы работы: 1. Обработка данных 1.1 Итоговые графики: a. Анализ данных b. Код c. Графики 2. Нейросети 3. Стилистика 4. Статистические методы

ВВОДНАЯ ЧАСТЬ

Практические причины выбора

Содержит около 54 000 строк и 10 признаков (вес, размеры, огранка, цвет, чистота, цена), этого достаточно и для описательной статистики, и для моделей, но ещё не «big data». ​

Есть и числовые, и порядковые категориальные признаки, поэтому на одном датасете можно показать гистограммы, boxplot, scatterplot, heatmap, кодирование категорий, корреляции и простые модели.

Связь между признаками интуитивна: вес и размеры влияют на цену, огранка–цвет–чистота дают «премию к стоимости», что удобно объяснять на графиках и в отчёте.

Источник: https://www.kaggle.com

Виды графиков

Гистограммы (hist / histplot) Точечные диаграммы (scatterplot) Ящиковые диаграммы (boxplot) Тепловая карта (heatmap)

ОБРАБОТКА ДАННЫХ

import pandas as pd import matplotlib.pyplot as plt import seaborn as sns

#Загрузка данных df = pd.read_csv ('diamonds.csv')

#Просмотр первых строк print (df.head ()) #Основная информация о датасете print (df.info ()) #Описание числовых столбцов print (df.describe ())

Гистограммы распределения числовых признаков

df.hist (figsize=(12, 8)) plt.show ()

Original size 1248x832

На этом наборе гистограмм видно, как распределены все числовые признаки датасета о бриллиантах, и по ним уже можно сделать несколько важных выводов. Характер распределений carat: распределение смещено вправо (правый «хвост») — много мелких бриллиантов и мало крупных; то есть маленькие по весу встречаются значительно чаще крупных. price: сильное смещение вправо — большинство бриллиантов относительно недорогие, а очень дорогие встречаются редко; это типичное распределение с длинным хвостом для цен. x, y, z: основная масса значений сосредоточена в узком диапазоне, но виден небольшой хвост и редкие экстремальные значения, которые могут быть выбросами и требуют проверки. depth и table: распределения довольно компактные и близки к «колоколу», значения сосредоточены вокруг типичных для ювелирных камней диапазонов, что говорит о стандартизованных пропорциях огранки. Выводы для анализа Наличие сильного смещения распределений carat и price говорит о том, что для моделирования (например, регрессии) может понадобиться лог-преобразование этих признаков, чтобы уменьшить влияние «длинного хвоста». Узкие распределения depth и table показывают, что эти параметры варьируются меньше, чем размер и цена, и могут давать более слабый вклад в объяснение цены по сравнению с весом и линейными размерами. Возможные выбросы по x, y, z (очень большие или близкие к нулю значения) стоит дополнительно проверить и, при необходимости, удалить или обработать, чтобы они не искажали корреляции и модели.

График зависимости цены от карат

plt.figure (figsize=(8, 6)) sns.scatterplot (data=df, x='carat', y='price') plt.title ('Зависимость цены от карат') plt.show ()

Original size 1152x896

На графике видно явную положительную связь между весом бриллианта в каратах и его ценой: чем больше carat, тем выше price, хотя разброс цен для одного и того же веса довольно велик. Что показывает график Общая тенденция: точки образуют восходящее «облако» — при увеличении карата цена в среднем растёт, и для крупных камней (больше 2 карат) цены могут достигать максимальных значений на графике. Нелинейность роста: рост цены с увеличением веса выглядит нелинейным — при переходе от малых каратам к крупным стоимость растёт быстрее, особенно после примерно 1 карата, что соответствует реальному рынку бриллиантов. Большой разброс: для одного и того же значения carat цена может сильно отличаться; это значит, что на цену влияют и другие факторы (огранка, цвет, чистота, пропорции), поэтому вес — важный, но не единственный определяющий признак. Выводы для дальнейшего анализа Вес бриллианта является сильным предиктором цены, но модель прогнозирования должна обязательно учитывать и категориальные признаки (cut, color, clarity), чтобы объяснить разброс точек по вертикали.

Имеет смысл проверить корреляцию между carat и price, а также протестировать модели с лог-преобразованием признаков (например, log⁡(«price») и log⁡(«carat»)), чтобы лучше описать нелинейную зависимость.

Корреляция характеристик бриллиантов

import matplotlib.pyplot as plt import seaborn as sns #Выбор стиля sns.set_style («darkgrid») # или «whitegrid», «dark», «white», «ticks» sns.set_palette («husl») # или «viridis», «Set2», «coolwarm» #Увеличение шрифта sns.set (font_scale=1.2) #Пример корреляционной матрицы в оригинальном стиле df_numeric = df.select_dtypes (include=['number']) plt.figure (figsize=(10, 8)) heatmap = sns.heatmap (df_numeric.corr (), annot=True, cmap='coolwarm', center=0) heatmap.set_title ('Корреляция характеристик бриллиантов', fontdict={'fontsize': 16}, pad=12) plt.show ()

Original size 1088x960

Корреляционная матрица показывает, какие числовые характеристики бриллиантов сильнее всего связаны друг с другом и с ценой. Связь с ценой Сильная положительная корреляция с ценой у признаков carat (0.92), x (0.88), y (0.87), z (0.86): чем больше вес и физические размеры бриллианта, тем выше его цена; вес — один из ключевых факторов цены. Слабая связь с ценой у depth (≈0) и table (0.13): пропорции огранки почти не влияют на цену в сравнении с весом и размерами, или их влияние опосредовано через другие признаки. Взаимосвязь признаков между собой Между carat и линейными размерами x, y, z очень высокая корреляция (0.95–0.98), что логично: более тяжёлые камни физически больше. x, y, z тоже сильно коррелируют между собой (0.95–0.97), то есть камни, как правило, увеличиваются пропорционально по всем измерениям, что говорит о стандартизованной геометрии огранки. Между depth и table есть умеренно отрицательная корреляция (-0.3): при увеличении глубины камня площадь столовой грани часто уменьшается, что отражает геометрию огранки. Выводы для моделирования Для предсказания цены наиболее информативны carat и размеры x, y, z, но между ними есть сильная мультиколлинеарность, поэтому в модели стоит либо оставить только часть из них (например, только carat), либо использовать регуляризацию. Признаки depth и table дают мало информации о цене и могут иметь низкий вклад в модели, их полезность стоит проверять отдельно (например, через важность признаков в деревьях решений).

Зависимость цены от веса и качества огранки

plt.figure (figsize=(10, 6)) sns.scatterplot (data=df, x='carat', y='price', hue='cut', palette='Set2', alpha=0.7) plt.title ('Зависимость цены от веса и качества огранки', fontsize=16) plt.xlabel ('Вес (carat)', fontsize=12) plt.ylabel ('Цена', fontsize=12) plt.legend (title='Огранка') plt.show ()

Original size 1280x800

График показывает, как на цену одновременно влияют вес бриллианта и качество огранки. Зависимость цены от веса Сохраняется сильная положительная зависимость: с ростом carat цена в среднем увеличивается, особенно заметен скачок после примерно 1 карата, где появляются самые дорогие камни. При малом весе (до 1 карата) разброс цен относительно небольшой, при весе 1–2 карата и выше разброс сильно увеличивается, что указывает на вклад других характеристик, в том числе огранки. Роль качества огранки Точки разных категорий cut (Ideal, Premium, Very Good, Good, Fair) перекрываются, но видно, что при одинаковом весе более качественная огранка чаще встречается в более дорогой части диапазона цен. Для больших каратов (около 1–2 и выше) бриллианты с огранкой Ideal и Premium в среднем дороже, чем камни того же веса с огранкой Fair или Good, то есть огранка добавляет к цене премию поверх эффекта веса. Выводы Вес остаётся главным фактором, определяющим уровень цены, но качество огранки даёт заметную вертикальную «стратификацию» точек: при одном и том же весе лучшие по огранке камни, как правило, дороже. Для дальнейшего анализа стоит строить отдельные модели или графики по группам огранки, а также добавить в визуализации цвет и чистоту, чтобы объяснить оставшийся разброс цен.

Распределение цен по цвету и чистоте

#Распределение цен по качеству огранки (cut) plt.figure (figsize=(10, 6)) sns.boxplot (data=df, x='color', y='price', palette='husl') plt.title ('Распределение цен по цвету', fontsize=16) plt.xlabel ('Цвет', fontsize=12) plt.ylabel ('Цена', fontsize=12) plt.xticks (rotation=45) plt.show ()

plt.figure (figsize=(10, 6)) sns.boxplot (data=df, x='clarity', y='price', palette='husl') plt.title ('Распределение цен по чистоте', fontsize=16) plt.xlabel ('Чистота', fontsize=12) plt.ylabel ('Цена', fontsize=12) plt.xticks (rotation=45) plt.show ()

Графики показывают, как цвет и чистота влияют на распределение цен, причём влияние этих факторов заметно, но слабее, чем у веса. Цена в зависимости от цвета Медианные цены по цветам отличаются, но не монотонно: для некоторых «хуже» по цвету категорий (например, J, I) медиана выше, чем у более «чистых» D–F, что говорит о сильном влиянии других факторов (веса, огранки) и того, что более желтый камень может быть крупнее и дороже. Разброс цен и количество выбросов (очень дорогих камней) примерно сопоставимы между цветами, поэтому цвет сам по себе не гарантирует высокую цену, а лишь немного сдвигает распределение. Цена в зависимости от чистоты Для более высокой чистоты (от SI2 к IF) медиана цены в целом растёт, но тоже не строго монотонно: категории VS1–VVS2 и IF тяготеют к более высоким ценам, однако в «низких» категориях SI1–SI2 тоже встречаются очень дорогие экземпляры, что снова указывает на влияние веса и огранки. Разброс внутри каждой категории очень большой: диапазон цен перекрывается между всеми уровнями чистоты, поэтому чистота влияет на цену, но не определяет её однозначно. Общие выводы И цвет, и чистота вносят вклад в формирование цены, но эффект выражен слабее и более «шумно», чем у веса: внутри каждой категории виден огромный вертикальный разброс. Для моделирования цены имеет смысл учитывать цвет и чистоту как дополнительные признаки, но ожидать от них умеренной объясняющей способности и обязательно сочетать их с весом, размерами и огранкой.

Распределение цен на брилианты

#Настройка стиля sns.set_style («darkgrid») sns.set_palette («husl») sns.set (font_scale=1.2)

#Построение гистограммы с KDE plt.figure (figsize=(10, 6)) sns.histplot (df['price'], kde=True, bins=50, color='skyblue') plt.title ('Распределение цен на бриллианты', fontsize=16) plt.xlabel ('Цена', fontsize=12) plt.ylabel ('Частота', fontsize=12) plt.show ()

Original size 1574x963

График показывает сильно асимметричное распределение цен: большинство бриллиантов стоят относительно недорого, а очень дорогие встречаются редко. Форма распределения Распределение однопиковое с ярко выраженным правым «хвостом»: максимум частоты приходится примерно на диапазон 500–2000 условных единиц, далее частота быстро падает, но хвост тянется до максимальных цен около 18000–19000. Кривая KDE повторяет эту форму: плотность высока в области невысоких цен и постепенно стремится к нулю при росте цены, что говорит о типичной для цен правосторонней асимметрии. Выводы для анализа Средняя цена будет заметно выше медианы, потому что на неё «тянут» немногочисленные, но очень дорогие камни; для описания типичного уровня цен лучше смотреть на медиану и квартильные интервалы, а не только на среднее. Для статистического моделирования и регрессии полезно рассмотреть логарифм цены log⁡(«price»), чтобы сделать распределение ближе к нормальному, уменьшить влияние крайних значений и улучшить качество моделей.

Нейросеть: https://www.perplexity.ai

СТАТИСТИЧЕСКИЕ МЕТОДЫ

Глобальные настройки стиля Использование sns.set_style («darkgrid») — единый фон с сеткой для всех графиков, что облегчает чтение значений и создаёт общий визуальный стиль. ​

Задание цветовой палитры sns.set_palette («husl») и palette='Set2' для отдельных графиков — согласованные мягкие цвета вместо стандартных, что улучшает восприятие и различимость категорий. ​

Увеличение масштаба шрифта sns.set (font_scale=1.2) — подписи и заголовки лучше читаются на всех визуализациях. ​

Оформление отдельных графиков Задание размеров фигур plt.figure (figsize=(10, 6)), figsize=(12, 8) — графики не «сжаты», их удобно смотреть в отчёте и презентации. ​

Информативные заголовки и подписи осей: plt.title (…), plt.xlabel (…), plt.ylabel (…) с указанием сущности и единиц измерения (например, «Вес (carat)», «Цена»). ​

Настройка легенды plt.legend (title='Огранка') — понятные подписи категорий на scatterplot по огранке. ​

Использование прозрачности alpha=0.7 на точечных диаграммах для уменьшения визуального шума при большом количестве точек. ​

Стилизация аналитических графиков Тепловая карта корреляций с cmap='coolwarm', annot=True и выравниванием по нулю center=0 — наглядное выделение сильных положительных и отрицательных связей. ​

Boxplot с единой палитрой palette='husl' по цвету, чистоте и огранке — сравнение категорий выглядит единообразно и легко читается.

ОПИСАНИЕ ПРИМЕНЕНИЯ ГЕНЕРАТИВНОЙ МОДЕЛИ

В процессе работы была использована нейросеть Perplexity. Модель использовалась для генерации общего текста и предложений решений ошибок.

ссылка на модель: https://www.perplexity.ai

Анализ данных по бриллиантам
Project created at 17.01.2026
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more