Дром авто е1: 1 / 2022. BYD e1 2022 , .

Как 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 3
  • Avito.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.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *