Как Avito.ru, Drom.ru и Auto.ru делят автомобильную Россию → Roem.ru
Roem.ru
Auto.ru, Avito, Drom.ru, Авто, Дальний Восток, Новосибирск, Рейтинг, Статистика ru-RU 2015 ООО «Роем» Кейсы
Самые сильные позиции у «Авито» по отношению к Drom.ru в Нижнем Новгороде (3,5 млн просмотров в сутки против 166 тыс.), самые слабые — во Владивостоке (97 тыс. против почти 4 млн)
Развитие событий: Auto.ru поднял нерекламную выручку до 50% и получил в Яндексе новый дизайн (22 сентября 2015)
Сайт объявлений «Авито» открыл свою статистику LiveInternet по разделу «Авто», что позволило сравнить его позиции с прямым конкурентом по автомобилям — сайтом Drom.ru. Drom.ru уверенно выглядит на Дальнем Востоке и в Сибири: по количеству просмотров Drom превышает «Авито» во Владивостоке, Новосибирске, Томске, Барнауле и некоторых других городах более чем в 10 раз.
Самые сильные позиции у «Авито» по отношению к Drom.ru в Нижнем Новгороде (3,5 млн просмотров в среднем за сутки против 166 тыс.), самые слабые — во Владивостоке (97 тыс. против почти 4 млн). Неплохо «Авито» держится на Урале — в Челябинске (лидирует) и Кургане (отстаёт всего в 2 раза). В Крыму предпочитают пользоваться Drom.ru, а на Украине — Avito.ru. В среднем за сутки Drom.ru набирает 40 млн просмотров, транспортный раздел Avito.ru — 58 млн.
У третьего крупного авторесурса Auto.ru, принадлежащего «Яндексу», открытых данных в LI нет, зато они есть в TNS, так что его можно сравнить с Avito. К сожалению, в TNS нет Drom.ru, так что сравнить напрямую все три площадки не получится.
Быстрый поиск: Auto.ru, Avito, Drom.ru, Авто, Дальний Восток, Новосибирск, Рейтинг, Статистика.
22 комментария
Поделиться
Avito приоткрыл статистику по категории «Авто» — вырвался на первое место рейтинга LI, обогнав Drom.
ru 3Avito.ru пытается обойтись без Auto.yandex.ru 16
Avito сделал контекстную рекламу а-ля Amazon 1
- Причины и последствия украинского кризиса — лекция профессора политологии чикагского университета Джона Миршаймера 24
- Фейковое цунами. Как распознавать фейки про спецоперацию на Украине 61
- Доклад Ашманова: как заставить платформы отказаться от плохого контента 189
- Пять главных ошибок в разговоре о средствах массовой информации. Для начинающих 25
- О сложности создания Матрицы в Брянской области 17
- Сценарий реорганизации Яндекса: российское юрлицо, фонд менеджеров, 51% акций у доверенных инвесторов 2
- Zoom загадочно уволила президента после финотчёта и не ищет нового 1
- У «Сбера» дефицит разработчиков: из эмиграции возвращаются сплошные джуниоры 1
- Tele2 теперь тоже берёт комиссию за пополнение — но чуть гуманнее, чем МТС 1
- В США опасаются, что ИИ поможет Китаю выиграть в экономической гонке
python — Сортировка строк в столбце и график печати
Вы можете сначала добавить новый столбец sort в функцию f , затем отсортировать значения по столбцу паре веб-сайтов и последним drop_duplicates по столбцам used_at:3 и 90 sort
импортировать панды как pd
импортировать itertools
df = pd.read_csv("avito_trend.csv",
parse_dates=[2])
защита f(df):
дфс = []
я = 0
для x в [list(x) для x в itertools.
combinations(df['address'].unique(), 2)]:
я += 1
c1 = df.loc[df['адрес'].isin([x[0]]), 'ID']
c2 = df.loc[df['адрес'].isin([x[1]]), 'ID']
c = pd.Series(список(набор(c1).пересечение(набор(c2))))
# добавить перевернутое пересечение c2 и c1
c_invert = pd.Series (список (набор (c2). пересечение (набор (c1))))
dfs.append(pd.DataFrame({'обычные пользователи':len(c), 'пара веб-сайтов':' и '.join(x), 'sort': i}, index=[0]))
# поменять местами значения в x
х[1],х[0] = х[0],х[1]
dfs.append(pd.DataFrame({'обычные пользователи':len(c_invert), 'пара веб-сайтов':' и '.join(x), 'sort': i}, index=[0]))
вернуть pd.concat(dfs)
common_users = df.groupby([df['используется_в'].dt.year]).apply(f).reset_index(drop=True, level=1).reset_index()
common_users = common_users.sort_values('пара веб-сайтов')
common_users = common_users.drop_duplicates (подмножество = ['используется_в', 'сортировка'])
#распечатать общие_пользователи
graph_by_common_users = common_users.
pivot(index='пара веб-сайтов', columns='used_at', values='обычные пользователи')
#print graph_by_common_users
#изменить порядок столбцов
graph_by_common_users = graph_by_common_users[[2015, 2014]]
graph_by_common_users = graph_by_common_users.sort_values (2014, по возрастанию = False)
ax = graph_by_common_users.plot(kind='barh', width=0.5, figsize=(10,20))
[label.set_rotation(25) для метки в ax.get_xticklabels()]
прямоугольники = ax.patches
labels = [int(round(graph_by_common_users.loc[i, y])) для y в graph_by_common_users.columns.tolist() для i в graph_by_common_users.index]
для прямоугольника, метки в zip (прямоугольники, метки):
высота = rect.get_height()
ax.text (rect.get_width() + 20, rect.get_y() - 0,25 + rect.get_height(), метка, размер шрифта = 8)
#сортировка значений легенды
ручки, метки = ax.get_legend_handles_labels()
# сортируем и метки, и дескрипторы по меткам
метки, ручки = zip (* sorted (zip (метки, ручки), ключ = лямбда t: t [0]))
ax.legend (ручки, метки)
Мой график:
РЕДАКТИРОВАТЬ:
Комментарий:
Зачем вы создали c_invert и x1,x[0] = x[0],x1
Поскольку комбинации для годов 2014 и 2015 были разными — значения 4 отсутствовали в первом столбце и 4 во втором столбце:
used_at 2015 2014 пара веб-сайтов avito.ru и drom.ru 1491,0 1716,0 avito.ru и auto.ru 1473,0 1602,0 avito.ru и e1.ru 1153,0 1364,0 drom.ru и auto.ru NaN 874.0 e1.ru и drom.ru 539,0 634,0 avito.ru и irr.ru/cars 403,0 602,0 avito.ru и am.ru 262,0 579,0 e1.ru и auto.ru 451,0 475,0 avito.ru и cars.mail.ru/sale 256,0 424,0 drom.ru и irr.ru/cars 277,0 423,0 auto.ru и irr.ru/cars 288,0 409.0 auto.ru и am.ru 224,0 408,0 дром.ру и ам.ру 187,0 394,0 auto.ru и cars.mail.ru/sale 195,0 330,0 avito.ru и автомаркет.ру 205,0 299,0 drom.ru и cars.mail.ru/sale 189,0 292,0 дром.ру и автомаркет.ру 175,0 247,0 auto.ru и автомаркет.ру 162,0 243,0 e1.ru и irr.ru/cars 148,0 235,0 e1.ru и am.ru 99,0 224,0 am.ru и irr.ru/cars NaN 223.0 irr.ru/cars и cars.mail.ru/sale 94,0 197,0 am.ru и cars.mail.ru/sale NaN 166,0 e1.ru и cars.mail.ru/sale 105,0 154,0 e1.ru и автомаркет.ру 105,0 139,0 avtomarket.ru и irr.ru/cars NaN 139,0 avtomarket.ru и am.ru 72,0 133,0 avtomarket.ru и cars.mail.ru/sale 48,0 105,0 auto.ru и drom.ru 799,0 NaN cars.mail.ru/sale и am.ru 73,0 NaN irr. ru/cars и am.ru 102.0 NaN irr.ru/cars и avtomarket.ru 73,0 NaN
Затем я создаю все инвертированные комбинации — проблема была решена. Но почему есть NaN ? Почему комбинации 2014 и 2015 разные?
Я добавляю к функции f :
def f(df):
распечатать df['адрес'].unique()
дфс = []
я = 0
для x в [list(x) для x в itertools.combinations((df['address'].unique()), 2)]:
...
...
и вывод был (почему первая печать дважды описана в предупреждении здесь):
['avito.ru' 'e1.ru' 'drom.ru' 'auto.ru' 'avtomarket.ru' 'am.ru' «irr.ru/cars» «cars.mail.ru/sale»] ['avito.ru' 'e1.ru' 'drom.ru' 'auto.ru' 'avtomarket.ru' 'am.ru' «irr.ru/cars» «cars.mail.ru/sale»] ['avito.ru' 'e1.ru' 'auto.ru' 'drom.ru' 'irr.ru/cars' 'avtomarket.ru' 'cars.mail.ru/sale' 'am.ru']
Таким образом, списки разные, а затем и комбинации тоже разные -> я получаю некоторые значения NaN .
Решение — сортировка списка комбинаций.
по умолч. f(df):
#print (отсортировано(df['адрес'].unique()))
дфс = []
для x в [list(x) для x в itertools.combinations(sorted(df['address'].unique()), 2)]:
c1 = df.loc[df['адрес'].isin([x[0]]), 'ID']
...
...
Весь код:
импортировать панды как pd
импортировать itertools
df = pd.read_csv("avito_trend.csv",
parse_dates=[2])
защита f(df):
#print (отсортировано(df['адрес'].unique()))
дфс = []
для x в [list(x) для x в itertools.combinations(sorted(df['address'].unique()), 2)]:
c1 = df.loc[df['адрес'].isin([x[0]]), 'ID']
c2 = df.loc[df['адрес'].isin([x[1]]), 'ID']
c = pd.Series(список(набор(c1).пересечение(набор(c2))))
dfs.append(pd.DataFrame({'обычные пользователи':len(c), 'пара веб-сайтов':' и '.join(x)}, index=[0]))
вернуть pd.concat(dfs)
common_users = df.groupby([df['используется_в'].
dt.year]).apply(f).reset_index(drop=True, level=1).reset_index()
#распечатать общие_пользователи
graph_by_common_users = common_users.pivot(index='пара веб-сайтов', columns='used_at', values='обычные пользователи')
#изменить порядок столбцов
graph_by_common_users = graph_by_common_users[[2015, 2014]]
graph_by_common_users = graph_by_common_users.sort_values (2014, по возрастанию = False)
#print graph_by_common_users
топор = graph_by_common_users.plot(kind='barh', width=0.5, figsize=(10,20))
[label.set_rotation(25) для метки в ax.get_xticklabels()]
прямоугольники = ax.patches
labels = [int(round(graph_by_common_users.loc[i, y])) \
для y в graph_by_common_users.columns.tolist() \
для i в graph_by_common_users.index]
для прямоугольника, метки в zip (прямоугольники, метки):
высота = rect.get_height()
ax.text(rect.get_width()+20, rect.get_y() - 0,25 + rect.get_height(), метка, размер шрифта=8)
ручки, метки = ax.get_legend_handles_labels()
# сортируем и метки, и дескрипторы по меткам
метки, ручки = zip (* sorted (zip (метки, ручки), ключ = лямбда t: t [0]))
ax.
legend (ручки, метки)
И график:
python — горизонтальная диаграмма Barchart с использованием matplotlib
Задавать вопрос
спросил
Изменено 6 лет, 11 месяцев назад
Просмотрено 676 раз
У меня есть файл с данными avito_trend.csv, и я хочу распечатать гистограмму
импортировать панды как pd
импортировать itertools
df = pd.read_csv("avito_trend.csv", parse_dates=[2])
защита f(df):
дфс = []
для x в [list(x) для x в itertools.combinations(df['address'].unique(), 2)]:
c1 = df.loc[df['адрес'].isin([x[0]]), 'ID']
c2 = df.loc[df['адрес'].isin([x[1]]), 'ID']
c = pd.Series(список(набор(c1).пересечение(набор(c2))))
dfs.
append(pd.DataFrame({'a':len(c), 'b':' и '.join(x)}, index=[0]))
вернуть pd.concat(dfs)
результат = df.groupby([df['used_at'].dt.year]).apply(f).reset_index(drop=True, level=1).reset_index()
распечатать результат
б/у б
0 2014 1364 avito.ru и e1.ru
1 2014 1716 avito.ru и drom.ru
2 2014 1602 avito.ru и auto.ru
3 2014 299 avito.ru и автомаркет.ру
4 2014 579 avito.ru и am.ru
5 2014 602 avito.ru и irr.ru/cars
6 2014 424 avito.ru и cars.mail.ru/sale
7 2014 634 e1.ru и drom.ru
8 2014 475 e1.ru и auto.ru
9 2014 139 e1.ru и avtomarket.ru
10 2014 224 e1.ru и am.ru
11 2014 235 e1.ru и irr.ru/cars
12 2014 154 e1.ru и cars.mail.ru/sale
13 2014 874 drom.ru и auto.ru
14 2014 247 drom.ru и avtomarket.ru
15 2014 394 дром.ру и ам.ру
16 2014 423 drom.ru и irr.ru/cars
17 2014 292 drom.ru и cars.mail.ru/sale
18 2014 243 auto.ru и avtomarket.ru
19 2014 408 auto.ru и am.ru
20 2014 409 auto.ru и irr.ru/cars
21 2014 330 auto.ru и cars.mail.ru/sale
22 2014 133 avtomarket.ru и am.ru
23 2014 139 avtomarket.
ru и irr.ru/cars
24 2014 105 avtomarket.ru и cars.mail.ru/sale
25 2014 223 am.ru и irr.ru/cars
26 2014 166 am.ru и cars.mail.ru/sale
27 2014 197 irr.ru/cars и cars.mail.ru/sale
28 2015 1153 avito.ru и e1.ru
29 2015 1473 avito.ru и auto.ru
30 2015 1491 avito.ru и drom.ru
31 2015 403 avito.ru и irr.ru/cars
32 2015 205 avito.ru и avtomarket.ru
33 2015 256 avito.ru и cars.mail.ru/sale
34 2015 262 avito.ru и am.ru
35 2015 451 e1.ru и auto.ru
36 2015 539 e1.ru и drom.ru
37 2015 148 e1.ru и irr.ru/cars
38 2015 105 e1.ru и avtomarket.ru
392015 105 e1.ru и cars.mail.ru/sale
40 2015 99 e1.ru и am.ru
41 2015 799 auto.ru и drom.ru
42 2015 288 auto.ru и irr.ru/cars
43 2015 162 auto.ru и avtomarket.ru
44 2015 195 auto.ru и cars.mail.ru/sale
45 2015 224 auto.ru и am.ru
46 2015 277 drom.ru и irr.ru/cars
47 2015 175 дром.ру и автомаркет.ру
48 2015 189drom.ru и cars.mail.ru/sale
49 2015 187 drom.ru и am.ru
50 2015 73 irr.ru/cars и avtomarket.ru
51 2015 94 irr.ru/cars и cars.mail.ru/sale
52 2015 102 irr.ru/cars и am.
ru
53 2015 48 avtomarket.ru и cars.mail.ru/sale
54 2015 72 avtomarket.ru и am.ru
55 2015 73 cars.mail.ru/sale и am.ru
Я использую ax = result.plot(width=0.5, kind='barh', stacked=True) и я хочу получить что-то вроде этого графика.
Как мне это сделать?
Мне нужно, чтобы 2014 и 2015 годы были на одной волне для другой пары сайтов.
И вместо процентов мне нужно среднее значение столбца a
- python
- csv
- pandas
- matplotlib
Как уже сказал @user308827, я бы также использовал seaborn для этого бита:
импортировать панд как pd
импортировать matplotlib.pyplot как plt
импортировать Seaborn как sns
pd.set_option('display.expand_frame_repr', False)
cols = ['ID', 'адрес', 'используемый_в']
df = pd.read_csv(r'D:\data\gDrive\data\.stack.overflow\data\avito_trend.csv.gz',
parse_dates=['used_at'], usecols=cols)
df.sort_values(['ID','used_at','address'], inplace=True)
df['предыдущий_адрес'] = df['адрес'].
shift()
df['time_diff'] = df['used_at'] - df['used_at'].shift()
df = df[df['адрес'] != df['предыдущий_адрес']]
df = df[df['time_diff'] <= pd.Timedelta('10min')]
tmp = df[['ID','адрес','предыдущий_адрес']] \
.groupby(['адрес','предыдущий_адрес', df.used_at.dt.year]) \
.считать() \
.reset_index()
# удалить `df` из памяти
дель дф
tmp['visit_from'] = tmp['предыдущий_адрес'] + ' -> ' + tmp['адрес']
# оставить только "интересные" столбцы
tmp = tmp[['visit_from','used_at','ID']]
tmp.columns = ['visit_from','год','посещения']
# сохранить временный сгруппированный файл CSV
#fn = r'D:\data\gDrive\data\.stack.overflow\data\avito_grp.csv'
#tmp.to_csv(fn, index=False)
# показать все
#df = температура
# показывать только те сайты, число посещений которых >= 100 (за оба года)
df = tmp[tmp.groupby('visit_from')['посещения'].transform('sum') >= 100].reset_index()
# подготовить отсортированный индекс
idx = df.groupby('visit_from')['посещения'].transform('sum').sort_values(возрастание=False).
index
# индекс "применить"
df = df.reindex(idx)
# добавить столбец "всего" (сумма посещений за все годы)
#df['total'] = df.groupby('visit_from')['посещения'].transform('sum')
##################################################
#
# Построение SeaBorn
#
sns.set (стиль = "темная сетка")
sns.set_color_codes("пастель")
f, топор = plt.subplots (figsize = (16, 12))
ax = sns.barplot(x='посещения', y='visit_from', оттенок='год', данные=df, насыщенность=0,8)
plt.xlabel('Посещения')
# добавляем аннотации
[ax.text (p.get_width() + 3, p.get_y() + p.get_height(),
интервал (p.get_width()), размер шрифта = 8)
для p в ax.patches]
plt.show()
PS самое интересное для вас начинается с SeaBorn прорисовка комментарий
22
Попробуйте Seaborn
From https://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.barplot.html
импортируйте Seaborn как sns
sns.set_style("белая сетка")
советы = sns.

combinations(df['address'].unique(), 2)]:
я += 1
c1 = df.loc[df['адрес'].isin([x[0]]), 'ID']
c2 = df.loc[df['адрес'].isin([x[1]]), 'ID']
c = pd.Series(список(набор(c1).пересечение(набор(c2))))
# добавить перевернутое пересечение c2 и c1
c_invert = pd.Series (список (набор (c2). пересечение (набор (c1))))
dfs.append(pd.DataFrame({'обычные пользователи':len(c), 'пара веб-сайтов':' и '.join(x), 'sort': i}, index=[0]))
# поменять местами значения в x
х[1],х[0] = х[0],х[1]
dfs.append(pd.DataFrame({'обычные пользователи':len(c_invert), 'пара веб-сайтов':' и '.join(x), 'sort': i}, index=[0]))
вернуть pd.concat(dfs)
common_users = df.groupby([df['используется_в'].dt.year]).apply(f).reset_index(drop=True, level=1).reset_index()
pivot(index='пара веб-сайтов', columns='used_at', values='обычные пользователи')
#print graph_by_common_users
#изменить порядок столбцов
graph_by_common_users = graph_by_common_users[[2015, 2014]]
graph_by_common_users = graph_by_common_users.sort_values (2014, по возрастанию = False)
ax = graph_by_common_users.plot(kind='barh', width=0.5, figsize=(10,20))
[label.set_rotation(25) для метки в ax.get_xticklabels()]
прямоугольники = ax.patches
labels = [int(round(graph_by_common_users.loc[i, y])) для y в graph_by_common_users.columns.tolist() для i в graph_by_common_users.index]
для прямоугольника, метки в zip (прямоугольники, метки):
высота = rect.get_height()
ax.text (rect.get_width() + 20, rect.get_y() - 0,25 + rect.get_height(), метка, размер шрифта = 8)
#сортировка значений легенды
ручки, метки = ax.get_legend_handles_labels()
# сортируем и метки, и дескрипторы по меткам
метки, ручки = zip (* sorted (zip (метки, ручки), ключ = лямбда t: t [0]))
ax.legend (ручки, метки)

ru/cars и am.ru 102.0 NaN
irr.ru/cars и avtomarket.ru 73,0 NaN
dt.year]).apply(f).reset_index(drop=True, level=1).reset_index()
#распечатать общие_пользователи
graph_by_common_users = common_users.pivot(index='пара веб-сайтов', columns='used_at', values='обычные пользователи')
#изменить порядок столбцов
graph_by_common_users = graph_by_common_users[[2015, 2014]]
graph_by_common_users = graph_by_common_users.sort_values (2014, по возрастанию = False)
#print graph_by_common_users

append(pd.DataFrame({'a':len(c), 'b':' и '.join(x)}, index=[0]))
вернуть pd.concat(dfs)
результат = df.groupby([df['used_at'].dt.year]).apply(f).reset_index(drop=True, level=1).reset_index()
распечатать результат
б/у б
0 2014 1364 avito.ru и e1.ru
1 2014 1716 avito.ru и drom.ru
2 2014 1602 avito.ru и auto.ru
3 2014 299 avito.ru и автомаркет.ру
4 2014 579 avito.ru и am.ru
5 2014 602 avito.ru и irr.ru/cars
6 2014 424 avito.ru и cars.mail.ru/sale
7 2014 634 e1.ru и drom.ru
8 2014 475 e1.ru и auto.ru
9 2014 139 e1.ru и avtomarket.ru
10 2014 224 e1.ru и am.ru
11 2014 235 e1.ru и irr.ru/cars
12 2014 154 e1.ru и cars.mail.ru/sale
13 2014 874 drom.ru и auto.ru
14 2014 247 drom.ru и avtomarket.ru
15 2014 394 дром.ру и ам.ру
16 2014 423 drom.ru и irr.ru/cars
17 2014 292 drom.ru и cars.mail.ru/sale
18 2014 243 auto.ru и avtomarket.ru
19 2014 408 auto.ru и am.ru
20 2014 409 auto.ru и irr.ru/cars
21 2014 330 auto.ru и cars.mail.ru/sale
22 2014 133 avtomarket.ru и am.ru
23 2014 139 avtomarket.
ru и irr.ru/cars
24 2014 105 avtomarket.ru и cars.mail.ru/sale
25 2014 223 am.ru и irr.ru/cars
26 2014 166 am.ru и cars.mail.ru/sale
27 2014 197 irr.ru/cars и cars.mail.ru/sale
28 2015 1153 avito.ru и e1.ru
29 2015 1473 avito.ru и auto.ru
30 2015 1491 avito.ru и drom.ru
31 2015 403 avito.ru и irr.ru/cars
32 2015 205 avito.ru и avtomarket.ru
33 2015 256 avito.ru и cars.mail.ru/sale
34 2015 262 avito.ru и am.ru
35 2015 451 e1.ru и auto.ru
36 2015 539 e1.ru и drom.ru
37 2015 148 e1.ru и irr.ru/cars
38 2015 105 e1.ru и avtomarket.ru
392015 105 e1.ru и cars.mail.ru/sale
40 2015 99 e1.ru и am.ru
41 2015 799 auto.ru и drom.ru
42 2015 288 auto.ru и irr.ru/cars
43 2015 162 auto.ru и avtomarket.ru
44 2015 195 auto.ru и cars.mail.ru/sale
45 2015 224 auto.ru и am.ru
46 2015 277 drom.ru и irr.ru/cars
47 2015 175 дром.ру и автомаркет.ру
48 2015 189drom.ru и cars.mail.ru/sale
49 2015 187 drom.ru и am.ru
50 2015 73 irr.ru/cars и avtomarket.ru
51 2015 94 irr.ru/cars и cars.mail.ru/sale
52 2015 102 irr.ru/cars и am.
ru
53 2015 48 avtomarket.ru и cars.mail.ru/sale
54 2015 72 avtomarket.ru и am.ru
55 2015 73 cars.mail.ru/sale и am.ru
shift()
df['time_diff'] = df['used_at'] - df['used_at'].shift()
df = df[df['адрес'] != df['предыдущий_адрес']]
df = df[df['time_diff'] <= pd.Timedelta('10min')]
tmp = df[['ID','адрес','предыдущий_адрес']] \
.groupby(['адрес','предыдущий_адрес', df.used_at.dt.year]) \
.считать() \
.reset_index()
# удалить `df` из памяти
дель дф
tmp['visit_from'] = tmp['предыдущий_адрес'] + ' -> ' + tmp['адрес']
# оставить только "интересные" столбцы
tmp = tmp[['visit_from','used_at','ID']]
tmp.columns = ['visit_from','год','посещения']
# сохранить временный сгруппированный файл CSV
#fn = r'D:\data\gDrive\data\.stack.overflow\data\avito_grp.csv'
#tmp.to_csv(fn, index=False)
# показать все
#df = температура
# показывать только те сайты, число посещений которых >= 100 (за оба года)
df = tmp[tmp.groupby('visit_from')['посещения'].transform('sum') >= 100].reset_index()
# подготовить отсортированный индекс
idx = df.groupby('visit_from')['посещения'].transform('sum').sort_values(возрастание=False).
index
# индекс "применить"
df = df.reindex(idx)
# добавить столбец "всего" (сумма посещений за все годы)
#df['total'] = df.groupby('visit_from')['посещения'].transform('sum')
##################################################
#
# Построение SeaBorn
#
sns.set (стиль = "темная сетка")
sns.set_color_codes("пастель")
f, топор = plt.subplots (figsize = (16, 12))
ax = sns.barplot(x='посещения', y='visit_from', оттенок='год', данные=df, насыщенность=0,8)
plt.xlabel('Посещения')
# добавляем аннотации
[ax.text (p.get_width() + 3, p.get_y() + p.get_height(),
интервал (p.get_width()), размер шрифта = 8)
для p в ax.patches]
plt.show()
