Панды: Расчет лучшего продавца с учетом количества проданных домов

Вопрос или проблема

Я анализировал данные продавцов и пытался получить инсайты. Я написал оператор groupby, чтобы получить среднюю цену продажи для каждого продавца.

for seller,seller_df in g:

df=df.append({'Seller':seller,'AveragePrice':seller_df.Price.mean() }, ignore_index=True)
print(seller)
    df.sort_values(by='AveragePrice',ascending=False,inplace=True)
plt.figure(figsize=(15,30))
sns.barplot(data=df.dropna()[:100],y='Seller',x='AveragePrice')

Гистограмма только для 100 лучших продавцов и показывает, кто имеет максимальную среднюю цену продажи. Plot

Я считаю, что этот метод неточный, так как мне также следует учитывать количество объектов недвижимости, которые он продал, чтобы определить лучшего продавца. Например: если A продал 20 домов со средней ценой 5, а B продал 200 со средней ценой 5, то B должен быть победителем. У меня есть два вопроса:

  1. Как я могу учесть это в своем коде?

  2. Могу ли я оптимизировать этот фрагмент кода?

Я новичок, и любая помощь будет оценена. Пожалуйста, перейдите по этой ссылке на мой ноутбук Kaggle. Он не содержит код, размещенный здесь, так как я делаю анализ локально, но вы можете взглянуть на данные.

Набор данных

Для такого анализа, чтобы рассчитать общий доход продавца как характеристику, кажется, достаточно, потому что это учитывает как количество проданных домов, так и цены на дома. Формула – это сумма всех индивидуальных цен продаваемых домов.

df = seller_df.groupby(by='Seller')['Price'].sum().reset_index()

(Отказ от ответственности: код не тестировался)

Ответ или решение

Для более эффективного анализа данных о продавцах и определении лучших продавцов недвижимости, необходимо учитывать не только среднюю цену продажи, но также и количество проданных объектов недвижимости. Это позволит более точно оценить вклад каждого продавца в общие продажи.

1. Как включить количество проданных домов в код

Ваша изначальная идея по(пло)рения усредленной цены является хорошей основой, однако, чтобы правильно отобразить эффективность продавца, нужно учитывать общую сумму продаж. Мы можем рассмотреть общую выручку как умножение средней цены на количество проданных домов. Таким образом, чтобы включить это в ваш код, можно сделать следующее:

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

# Предполагаем, что `df` - ваш исходный DataFrame с колонками 'Seller' и 'Price'
# Группируем данные по продавцу
result = df.groupby('Seller').agg(
    AveragePrice=('Price', 'mean'),
    TotalHousesSold=('Price', 'count'),
    TotalRevenue=('Price', 'sum')
).reset_index()

# Сортируем данные по выручке, чтобы определить лучших продавцов
result.sort_values(by='TotalRevenue', ascending=False, inplace=True)

# Создаем график для первых 100 продавцов по выручке
plt.figure(figsize=(15, 30))
sns.barplot(data=result.dropna()[:100], y='Seller', x='TotalRevenue')
plt.title('Top 100 Sellers by Total Revenue')
plt.xlabel('Total Revenue')
plt.ylabel('Seller')
plt.show()

В этом коде:

  • Мы использовали agg() для одновременного вычисления средней цены, количества проданных домов и общей выручки.
  • Результаты сортируются по общей выручке, что дает нам более точное представление о лучших продавцах.

2. Как оптимизировать код

Существующий код можно оптимизировать, избегая использования метода append() в цикле, так как это может замедлить исполнение для больших данных. Вместо этого лучше использовать pd.concat() или метод agg() для агрегирования статистики сразу для всех продавцов.

Оптимизированный код было представлено выше, что улучшает производительность и читабельность кода.

Заключение

Понимание, как учитывать как среднюю цену продажи, так и количество проданных домов, позволит вам более точно определить лучших продавцов недвижимости. Оптимизация кода с использованием методов agg() и sort_values() значительно улучшит время выполнения и делает код более чистым и понятным. Важно тестировать каждую измененную часть кода, чтобы убедиться, что она работает корректно.

Оцените материал
Добавить комментарий

Капча загружается...