Как большой любитель всяческих визуализаций решил тоже нарисовать себе подобных картинок.
Итак, для начала качаем список ЖЖ фрэндов (команды linux-овые, так что cygwin вам в руки):
wget "http://www.livejournal.com/misc/fdata.bml?user=malgarr" -O malgarr.txt
Если сидим за прокси, то соответственно так:wget --proxy=on -e http_proxy=192.168.1.252:3128 --proxy-user=username --proxy-passwd=userpassw "http://www.livejournal.com/misc/fdata.bml?user=malgarr" -O malgarr.txt
Теперь в файле malgarr.txt лежит список моих фрэндов. Создаем рядом подкаталог out и файлик x.sh:wget -q "http://www.livejournal.com/misc/fdata.bml?user=$1" -O out/$1.txt
Соответственно, если сидим за прокси, то команда в файлике x.sh должна быть такая:wget --proxy=on -e http_proxy=192.168.1.252:3128 --proxy-user=username --proxy-passwd=userpassw -q "http://www.livejournal.com/misc/fdata.bml?user=$1" -O out/$1.txt
Также рядом создаем файл с питоновским скриптом merge_friends_to_dot.py:import glob
from os.path import basename, splitext
ls = [l.strip() for l in open('malgarr.txt').read().splitlines() if l.strip()]
my_f = set(l[2:] for l in ls if l[0] != '#' and l[0] == '>')
my_f.remove('malgarr')
print 'digraph {'
dirs = set()
for f in glob.glob('out/*.txt'):
x = splitext(basename(f))[0]
for l in open(f).read().splitlines():
l = l.strip()
if not l:
continue
if l[0:1] == '#':
continue
y = l[2:]
if x in my_f and y in my_f:
if x != y:
if l[0] == '>':
dirs.add((x, y))
#elif l[0] == '<':
# dirs.add((y, x))
for x, y in sorted(dirs):
print '"%s" -> "%s"' % (x, y)
print '}'
Запускаем команду, которая для каждого фрэнда из malgarr.txt вытащит список его фрэндов и сложит это все в out:time cat malgarr.txt | grep -v '^#' | cut -c 3- | sort -u | xargs -P 4 -n 1 ./x.sh
Осталось преобразовать все это богатство в граф для Gephi:python merge_friends_to_dot.py > foaf_i_read.dot
Открываем foaf_i_read.dot в Gephi, переходим на панель Обработка:![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ2JIQd8i-CG-k7Wy87w8wkq9_8TUhjq-QViN2nDwLrNcFj0IHLbnwtsbh42IgjdMQsz25QwzJHFjhrrRjP63xcXEvPbPMFa7eyoepuxp4-kK12Fnu0fNcGhU1Y68XoPna2Smvv-QQEHoU/s1600/gephi01.png)
Жмем на запуск сбора статистики по параметру Модулярность:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHXmPicAJ_DkIiDJw9AXmeAxlgbyCQAHsdzRv-zKOa9jetSvkKWpwk5-xyqDMwPp2Vox2hK-G81Si714lvZP0z-e-27h01U19eewmRTQmWInPSENlTE-b1HU9t6YaKkuhrp8f120Gv_LKE/s1600/gephi02.png)
Перед началом обработки вылетает окно с параметрами:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCA8Dn9aEsubY_Y_GdH-0ACl-DSlJZqOi9gGWgMK6Eq7CXqp0h4TuKjHpZ46VTdoKlYxHBAefKe4rQG9i5No3lkW0WYo5qEMCPvj6OEzb-QwN4o32AYoUvDg6USyby-szzn-LbHtSGRWzK/s1600/gephi03.png)
Если параметр Resolution уменьшить, то деление будет происходить на большее число кластеров.
Теперь это разделение надо визуализировать:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdH4pqiycdmk9_gHMc5sX1927X7nlGby0ANXMH5tJABZa4LsjYUTw4TYe-2VwtaqmCPzCPGurQ5RvPGdsx7i6xsncFM-CnyNaRU12kUNT8LYmHPsaPYygOCEqObSWfJq44KuORbHLKK7Pw/s1600/gephi04.png)
Размеры узлов сделаем пропорциональными популярности:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirlNajbw-n4L0ArI4-Mr5DJLx1f-x7SBC7cBXdzEUaD5BPNABxoI1hXUEZvk2bs0253ev87ibKikftLfKcYWw0gxkjGYj-cjW09K1c1YSyyvD5ZLCiDNE-E3ItlHM0Ok36P7KeAxYYfMXL/s1600/gephi05.png)
Сгруппировать кластеры по кучкам можно при помощи алгоритмов укладки:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZxuahHKI-x8fIBSe10YH9GeWTtUcpbi4uMUVAjjAG0VW2NbCCweaKE9fPk8Usr6QeM1xfb9GyhaT4YmlT2eGWJ6ZuCrODTISAcNvn49KMoM1oUXgG1jz-RO2wBEAkTg0Xm38hLdk72_a8/s1600/gephi06.png)
Кстати, не все алгоритмы сами завершают свою работу, когда узлы перестают тасоваться надо просто давить кнопку Стоп. Прямо в процессе работы укладки можно вручную перекидывать узлы мышкой на картинке, они потом устаканятся в соответствии с новым положением.
Цвет узлов можно подстроить вручную:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSofTf111T7VyTppbYRY_VIQKSjSDfGlLVYQJh43gKZ17P2GvClxSL5FFgWLTPTUQvn3Fe04mNCcObvHOKy9iPAozyZPwRfV8vqA4Nuz8VqQzBaNXB53k3tuIxiWefkP3wXNKMEdBwZgZk/s1600/gephi07.png)
В конце концов у меня получилось такое картинко:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEix95rP2i1tT75kSlWx5H9tIMRyPEl-gWq322URzpTtvKxcUAuZfdvRdpIfRbjBOoI6MhUzHDzZfH1bEIvST5likp9FJJF_vIz1w6hL29pyf2YnRoXwcZUykcQZX1C5kz68_i8PNhUy5cWI/s1600/gephi08.png)
Фрэнды поделились по большей части несколько надуманно :( Предпочитаемые тысячники практически перебили другие связи. Хотя например, Челябинский кластер повязан так, что никакие тысячники его разорвать не смогли :)
Можно выкинуть тысячников из malgarr.txt и повторить процесс, вроде как кучкование получается более адекватное:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAr7aZPwEyPqcGSJyH5pNO4CQnvAO1iKRlvw9I_pT9xLnnWUs4U8tFxR3NMP0KOyajtRpSjZ6nq2PCKxQFKvk6F_lRXBU3I2iSBf-iYPrwfteZat9uXAzdtY2eZor0BNaLCFMaiMJv3OG0/s1600/gephi09.png)
Вообщем струмент порадовал возможностями и безглючной работой.
Комментариев нет:
Отправить комментарий