Сделай в этом коде, чтобы по y было от 0:

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

# Настройка стиля графиков
sns.set(style="whitegrid")

# Загрузка данных из CSV файла
data = pd.read_csv('training_set.csv')

# Просмотр первых строк данных
print("Первые 5 строк датасета:")
print(data.head())

# Проверка на наличие пропущенных значений
print("\nПропущенные значения в каждом столбце:")
print(data.isnull().sum())

# Основные статистики
print("\nСтатистические показатели датасета:")
print(data.describe())

# Визуализация 1: Круговая диаграмма распределения пользователей по платформам
platform_counts = data['platform'].value_counts()

plt.figure(figsize=(8, 8))
plt.pie(platform_counts, labels=platform_counts.index, autopct='%1.1f%%',
        startangle=140, colors=sns.color_palette('pastel'))
plt.title('Распределение пользователей по платформам')
plt.axis('equal')  # Чтобы круг был круглым
plt.tight_layout()
plt.savefig('pie_chart_platform_distribution.png')
plt.show()

# Визуализация 2: Зависимость возраста от количества друзей
plt.figure(figsize=(12, 8))

# Создание цветовой палитры по платформам
palette = sns.color_palette("hsv", len(data['platform'].unique()))
sns.scatterplot(data=data, x='age', y='friends', hue='platform',
                palette=palette, s=100, edgecolor='k', alpha=0.7)

plt.title('Зависимость возраста от количества друзей')
plt.xlabel('Возраст')
plt.ylabel('Количество друзей')
plt.legend(title='Платформа', bbox_to_anchor=(1.05, 1), loc='upper left')

# Установка интервала по оси X с шагом 10
min_age = data['age'].min()
max_age = data['age'].max()

# Определяем начало и конец диапазона для оси X
tick_start = (min_age // 10) * 10
tick_end = ((max_age // 10) + 1) * 10

# Генерируем список меток с шагом 10
plt.xticks(range(tick_start, tick_end + 1, 10))

plt.tight_layout()
plt.savefig('scatter_age_friends.png')
plt.show()

# Дополнительно: Логарифмическая шкала для количества друзей
plt.figure(figsize=(12, 8))
sns.scatterplot(data=data, x='age', y='friends', hue='platform',
                palette=palette, s=100, edgecolor='k', alpha=0.7)
plt.yscale('log')
plt.title('Зависимость возраста от количества друзей (Логарифмическая шкала)')
plt.xlabel('Возраст')
plt.ylabel('Количество друзей (логарифмическая шкала)')
plt.legend(title='Платформа', bbox_to_anchor=(1.05, 1), loc='upper left')

# Установка интервала по оси X с шагом 10
plt.xticks(range(tick_start, tick_end + 1, 10))

plt.tight_layout()
plt.savefig('scatter_age_friends_log.png')
plt.show()

# Шаг 1: Удаление выбросов с помощью IQR
Q1 = data['friends'].quantile(0.25)
Q3 = data['friends'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

print(f"\nНижняя граница для 'friends': {lower_bound}")
print(f"Верхняя граница для 'friends': {upper_bound}")

filtered_data = data[(data['friends'] >= lower_bound) & (data['friends'] <= upper_bound)]

print(f"\nКоличество записей до фильтрации: {data.shape[0]}")
print(f"Количество записей после фильтрации: {filtered_data.shape[0]}")

# Визуализация без выбросов
plt.figure(figsize=(12, 8))
sns.scatterplot(data=filtered_data, x='age', y='friends', hue='platform',
                palette=palette, s=100, edgecolor='k', alpha=0.7)
plt.title('Зависимость возраста от количества друзей (без выбросов)')
plt.xlabel('Возраст')
plt.ylabel('Количество друзей')
plt.legend(title='Платформа', bbox_to_anchor=(1.05, 1), loc='upper left')

# Установка интервала по оси X с шагом 10
filtered_min_age = filtered_data['age'].min()
filtered_max_age = filtered_data['age'].max()
filtered_tick_start = (filtered_min_age // 10) * 10
filtered_tick_end = ((filtered_max_age // 10) + 1) * 10
plt.xticks(range(filtered_tick_start, filtered_tick_end + 1, 10))

plt.tight_layout()
plt.savefig('scatter_age_friends_no_outliers.png')
plt.show()

# Анализ корреляции с выбросами
correlation_with_outliers = data['age'].corr(data['friends'])
print(f'\nКоэффициент корреляции между возрастом и количеством друзей (с выбросами): {correlation_with_outliers:.2f}')

# Анализ корреляции без выбросов
correlation_without_outliers = filtered_data['age'].corr(filtered_data['friends'])
print(f'Коэффициент корреляции между возрастом и количеством друзей (без выбросов): {correlation_without_outliers:.2f}')

# Визуализация с линией тренда без выбросов
plt.figure(figsize=(12, 8))
sns.scatterplot(data=filtered_data, x='age', y='friends', hue='platform',
                palette=palette, s=100, edgecolor='k', alpha=0.7)

# Добавляем линию тренда на отфильтрованных данных
sns.regplot(data=filtered_data, x='age', y='friends', scatter=False,
            ax=plt.gca(), color='red', line_kws={'linewidth':2}, label='Линия тренда (без выбросов)')

plt.title('Зависимость возраста от количества друзей с линией тренда (без выбросов)')
plt.xlabel('Возраст')
plt.ylabel('Количество друзей')
plt.legend(title='Платформа')

# Установка интервала по оси X с шагом 10
plt.xticks(range(filtered_tick_start, filtered_tick_end + 1, 10))

plt.tight_layout()
plt.savefig('scatter_age_friends_trend_no_outliers.png')
plt.show()