Analysis of Music Preferences of Yandex.Music Users in Moscow and St. Petersburg

Answered using ChatGPT 4o by ChatGPT4o

Question:

Анализ музыкальных предпочтений пользователей стримингового сервиса Задача проекта

На реальных данных сервиса Яндекс.Музыка проверить данные и сравнить поведение и предпочтения пользователей двух столиц — Москвы и Санкт-Петербурга. Описание проекта

Необходимо с использованием библиотеки Pandas

Проверить данные на ошибки и оценить их влияние на исследование
Сравнить поведение пользователей двух столиц и проверить гипотезы:
    Активность пользователей зависит от дня недели. Причём в Москве и Петербурге это проявляется по-разному.
    В понедельник утром в Москве преобладают одни жанры, а в Петербурге — другие. Так же и вечером пятницы преобладают разные жанры — в зависимости от города.
    Москва и Петербург предпочитают разные жанры музыки. В Москве чаще слушают поп-музыку, в Петербурге — русский рэп.
Answer:

Для выполнения анализа музыкальных предпочтений пользователей стримингового сервиса Яндекс.Музыка, мы будем использовать библиотеку Pandas. Вот пошаговый план, как можно подойти к решению этой задачи:

Шаг 1: Загрузка и предварительный осмотр данных

  1. Загрузка данных:

    import pandas as pd
    
    data = pd.read_csv('path_to_your_data.csv')
    
  2. Предварительный осмотр данных:

    print(data.head())
    print(data.info())
    print(data.describe())
    

Шаг 2: Проверка данных на ошибки и оценка их влияния

  1. Проверка на пропуски:

    missing_values = data.isnull().sum()
    print(missing_values)
    
  2. Обработка пропусков:

    • Удаление строк с пропусками:
      data = data.dropna()
      
    • Заполнение пропусков:
      data = data.fillna('Unknown')
      
  3. Проверка на дубликаты:

    duplicates = data.duplicated().sum()
    print(duplicates)
    data = data.drop_duplicates()
    
  4. Проверка корректности данных:

    • Проверка корректности значений в столбцах (например, даты, жанры):
      print(data['genre'].unique())
      

Шаг 3: Сравнение поведения пользователей двух столиц

  1. Активность пользователей по дням недели:

    • Добавление столбца с днем недели:

      data['day_of_week'] = pd.to_datetime(data['timestamp']).dt.day_name()
      
    • Группировка данных по городу и дню недели:

      activity_by_day = data.groupby(['city', 'day_of_week']).size().unstack()
      print(activity_by_day)
      
  2. Анализ жанров в понедельник утром и вечером пятницы:

    • Фильтрация данных по времени:

      morning_data = data[(data['timestamp'].dt.hour >= 6) & (data['timestamp'].dt.hour < 12)]
      evening_data = data[(data['timestamp'].dt.hour >= 18) & (data['timestamp'].dt.hour < 24)]
      
    • Группировка данных по городу и жанру:

      morning_genres = morning_data.groupby(['city', 'genre']).size().unstack()
      evening_genres = evening_data.groupby(['city', 'genre']).size().unstack()
      print(morning_genres)
      print(evening_genres)
      

Шаг 4: Проверка гипотез

  1. Гипотеза 1: Активность пользователей зависит от дня недели:

    • Построение графиков активности:
      import matplotlib.pyplot as plt
      
      activity_by_day.T.plot(kind='bar', figsize=(10, 6))
      plt.title('User Activity by Day of the Week')
      plt.xlabel('Day of the Week')
      plt.ylabel('Number of Plays')
      plt.show()
      
  2. Гипотеза 2: Разные жанры в понедельник утром и вечером пятницы:

    • Анализ жанров:
      print(morning_genres)
      print(evening_genres)
      
  3. Гипотеза 3: Разные предпочтения в жанрах:

    • Группировка данных по городу и жанру:
      genre_preferences = data.groupby(['city', 'genre']).size().unstack()
      print(genre_preferences)
      

Шаг 5: Выводы

  1. Сравнение активности пользователей:

    • Оценка различий в активности по дням недели между Москвой и Санкт-Петербургом.
  2. Анализ жанровых предпочтений:

    • Оценка различий в жанровых предпочтениях в понедельник утром и вечером пятницы.
  3. Общие жанровые предпочтения:

    • Оценка различий в общих жанровых предпочтениях между Москвой и Санкт-Петербургом.

Пример кода для анализа

import pandas as pd
import matplotlib.pyplot as plt

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

# Предварительный осмотр данных
print(data.head())
print(data.info())
print(data.describe())

# Проверка на пропуски и дубликаты
data = data.dropna()
data = data.drop_duplicates()

# Добавление столбца с днем недели
data['timestamp'] = pd.to_datetime(data['timestamp'])
data['day_of_week'] = data['timestamp'].dt.day_name()

# Активность пользователей по дням недели
activity_by_day = data.groupby(['city', 'day_of_week']).size().unstack()
activity_by_day.T.plot(kind='bar', figsize=(10, 6))
plt.title('User Activity by Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('Number of Plays')
plt.show()

# Анализ жанров в понедельник утром и вечером пятницы
morning_data = data[(data['timestamp'].dt.hour >= 6) & (data['timestamp'].dt.hour < 12)]
evening_data = data[(data['timestamp'].dt.hour >= 18) & (data['timestamp'].dt.hour < 24)]

morning_genres = morning_data.groupby(['city', 'genre']).size().unstack()
evening_genres = evening_data.groupby(['city', 'genre']).size().unstack()

print(morning_genres)
print(evening_genres)

# Общие жанровые предпочтения
genre_preferences = data.groupby(['city', 'genre']).size().unstack()
print(genre_preferences)

Этот план и пример кода помогут вам провести анализ музыкальных предпочтений пользователей стримингового сервиса Яндекс.Музыка и проверить предложенные гипотезы.