Python

Помогите решить задачу на Python

Постройте столбчатую диаграмму, отображающую зависимость оценки от среднего количества выданных промокодов. Для этого отложите по оси X все возможные значения оценок из переменной scores, а по оси Y — среднее количество промокодов для каждой оценки. Возьмите только данные «до внедрения роботов» — на них роботы обучались.
подсказка:
Напишите вложенный цикл: пусть внешний цикл for проходит по оценкам из scores, а внутренний — по всем строкам датасета с перебором по индексам. В теле внешнего цикла объявите переменные для подсчёта количества промокодов и количества оценок.
В теле вложенного цикла поставьте два условия через оператор and: значение в колонке 'interval' совпадает со значением 'До внедрения роботов', а значение в 'score' — c переменной внешнего цикла. При выполнении условий добавляйте значение из столбца 'promo' к значению переменной для подсчёта количества промокодов и единицу — к переменной для подсчёта количества оценок.
Затем в теле внешнего цикла посчитайте возможность получить промокод, разделив количество промокодов на количество оценок, и добавьте это значение в заранее созданный пустой список.
Постройте столбчатую диаграмму: вызовите функцию barplot() из библиотеки seaborn, указав в её скобках x=scores и y=..., где вместо ... — название переменной со списком значений, обозначающих возможность получить промокод..

import pandas
import seaborn

data = pandas.read_csv('support_data.csv')

score_column = list(data['score'])
intervals_column = list(data['interval'])
promo_column = list(data['promo'])

# список всех оценок
scores = list(range(11))

for index in scores:
promo_n = 0
score_n = 0

if intervals_column[index] == 'До внедрения роботов' and score == values:
promo_n += promo_column[index]
score_n += 1

promo_av = []
promo_av.append(promo_n/score_n)

seaborn.barplot(x=scores, y=promo_av)

# ваш код здесь
TS
Tolua Safonov
114
Доброго времени суток! Тоже решал сегодня эту задачу в практикуме. И тоже видел этот код.
В нем не хватает вложенного цикла после объявления переменной score_n = 0. В подсказке написано "Напишите вложенный цикл: пусть внешний цикл for проходит по оценкам из scores, а внутренний — по всем строкам датасета с перебором по индексам", то есть надо пройти по всем строкам от 0 до 32539.

Далее, в подсказке написано "В теле вложенного цикла поставьте два условия через оператор and: значение в колонке 'interval' совпадает со значением 'До внедрения роботов', а значение в 'score' — c переменной внешнего цикла.", но переменной score нигде нет и объявлять её не нужно. Имеется в виду список score_column, к элементам которого нужно обращаться по индексам.

Ещё список promo_av лучше объявить вне цикла, чтобы не нарушать область видимости.

Вот мой код:
import pandas
import seaborn
promo_av = []
data = pandas.read_csv('support_data.csv')
score_column = list(data['score'])
intervals_column = list(data['interval'])
promo_column = list(data['promo'])
# список всех оценок
scores = list(range(11))
for values in scores:
promo_n = 0
score_n = 0
for index in range(0,32539):
if intervals_column[index] == 'До внедрения роботов' and score_column[index] == values:
promo_n+= promo_column[index]
score_n+=1
promo_av.append(promo_n/score_n)
seaborn.barplot(x=scores, y=promo_av)
ШШ
Ш Ш
113
Лучший ответ
Аркадий Анатольевич range(0,32539) не стоит вручную расписывать, это "Плохой тон"
range(len(data))
Александр Косенко Спасибо, Олег, выручил!!!
у меня ошибка возникает при решении, которое дали выше
Яков Чукин работает, возможно ошибка в отступах
import pandas
import seaborn

data = pandas.read_csv('support_data.csv')

segments_old = ['Segment 0', 'Segment 1', 'Segment 2']
segments_new = ['Потенциальные клиенты', 'Обычные клиенты', 'VIP-клиенты']
intervals = ['До внедрения роботов', 'После внедрения роботов']

intervals_column = list(data['interval'])
segments_column = list(data['segment'])
promo_column = list(data['promo'])
mean_promo = []
for segment in segments_old:
interval_column = [] # про 4 8 12 пробелов в начале строк цикла не забываем
# вложенный цикл по двум периодам
for interval in intervals:
promo = 0
counter = 0
# вложенный цикл по строкам
for index in range(len(data)):
if (segments_column[index] == segment and
intervals_column[index] == interval):
promo += promo_column[index]
counter += 1
interval_column.append(promo / counter)
mean_promo.append(interval_column)

seaborn.heatmap(mean_promo, xticklabels=intervals, yticklabels=segments_new, annot=True, cmap='RdYlGn')
import pandas
import seaborn

data = pandas.read _csv('support_data.csv')

score_column = list(data['score'])
intervals_column = list(data['interval'])
promo_column = list(data['promo'])

# список всех оценок
scores = list(range(11))

promo_chance = []

for score in scores:
promo = 0 #кол-во промокодов
counter = 0 #кол-во оценок
for i in range(len(data)):
if intervals_column[i] == 'До внедрения роботов'and score_column[i] == score:
promo += promo_column[i]
counter +=1
promo_chance.append(promo/counter)

seaborn.barplot(x=scores, y=promo_chance)
у меня пишет с этим кодом ошибку ZeroDivisionError: division by zero
Денис Г
Денис Г
106