Child of WikiAnalytics

No preview image

1 collaborator

Patarakin_m Evgeny Patarakin (Author)

Tags

(This model has yet to be categorized with any tags)
Child of model WikiAnalytics preview imageWikiAnalytics
Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.2.0 • Viewed 356 times • Downloaded 18 times • Run 0 times
Download the 'Child of WikiAnalytics' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Info tab cannot be displayed because of an encoding error

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

extensions [nw csv]

;;; Это описание пород агентов, которые есть в программе - к каждой породе ее собственные переменные

breed [users user] ;
breed [pages page] ;

directed-link-breed  [bonds bond] ; создание
directed-link-breed [editbonds editbond] ; редактирование


undirected-link-breed [friendbonds friendbond] ;

undirected-link-breed [uulinks uulink] ;
uulinks-own [colpages] ;


users-own [agentname pages_list edit_list friend_list my_friends ] ;
;; мое имя, страницы, которые создал, страницы, которые редактировал

pages-own [pagename my_author editors_list  http ] ;
;; мое имя, автор и редактора

bonds-own [edits] ;
editbonds-own [ed] ;


undirected-link-breed [unsselinks unsselink] ; - связи, основанные на том, что редактировал объект другого автора
unsselinks-own [colpages]


globals [wikihistory user_list step nlinks ] ;



;;; Очистили,  закрыли и обнулили все,

to startup
clear-all ;
 set-default-shape users "person" ;
  set-default-shape pages "square" ;
set-default-shape friendbonds "comment" ;

file-close;
  set wikihistory [] ;
  set user_list [] ;
  if (file-exists? "go_ban3.gif" ) [import-drawing "go_ban3.gif" ]
end 


;;  Загрузили данные

to load_file
   file-open user-file
           while [ not file-at-end? ]     [ 
             set wikihistory  lput   csv:from-row file-read-line  wikihistory
            ]
             file-close
end 



;;;;;;;;;

to present
 reset-ticks
  ;; насколько мы их сдвигаем от центра
  set step max-pxcor /  (length  remove-duplicates map [first ?] wikihistory)
  set nlinks 0
  foreach  wikihistory [
  visual ?
    layout-spring  turtles links 0.1 1 0.3 
    tick ;
  ]
end 


  ;; Надо, чтобы они появлялись в нужном месте!!!! А то они все в центре

to visual [flist]
 let agent_name first flist ;; это мы просто считали имена агентов и страниц
 let page_name first bf flist ;; это имя страницы
    let newpage 0
;; если у нас юзера с этим именени - создаем юзера с именен ;

if (not any? pages with [pagename = page_name]) [
  create-ordered-pages 1
   [ 
                 ;;ht   ;; Не показываем страницы 
       set size 0.8
       set color green        
       set pagename page_name ;
        set editors_list [] ;
       set newpage 1 
   ]
   ]


if (not any? users with [agentname = agent_name])   [ 
  create-ordered-users 1 [
   set size 1.6
   set color orange
   set pages_list [] ;
    set edit_list [] ;
   set agentname agent_name ;
        
   rt random 360 fd step * count users

  ]
  ]


         let who_user [who] of one-of users with [agentname = agent_name] ;
         let who_page [who] of one-of pages with [pagename = page_name] ;
        

         if newpage = 1   ;; Если страница в первый раз - значит она создается
         [
                ask page who_page  [set my_author who_user move-to user who_user rt random 360 fd 1  ] ;   
                ask user who_user [ 
                  create-bond-to page who_page 
                  set pages_list lput who_page pages_list 
                  ] ;
                stop ;
             ]  
       
             
                     ask user who_user [ 
                       if (who_user = [my_author] of page who_page) or (member? who_user [editors_list] of page who_page) [stop]
                       
                    create-editbond-to page who_page 
                     set edit_list lput who_page edit_list  
                     ask page who_page [set editors_list lput who_user editors_list]
                    ;; stop 
                     ]  
     
   ;;        stop
end 

to table_output
  nw:set-context turtles links
  file-open user-new-file
file-print "General information" ;
 file-print csv:to-row (list 
   "Num_agents"
   "Num_objects"
   "Num_links"
   "Density"
   ) ;
 file-print csv:to-row (list 
   count users
   count pages
   count links
   density
     ) 
 
 file-print "Agents" ;
 file-print csv:to-row (list 
    "Agentname" 
   "userID" 
   "PagesCreates" 
   "Usefulness"
  "Edits" 
  "Benefit"
   "MyLinks"
   "Norm-Betweenness" 
   "PageRank" 
   ) ;
 
 
  foreach reverse sort-on [nw:page-rank] users [file-print csv:to-row 
    (list  
      [agentname] of ? 
      [who] of ? 
      [length pages_list] of ? 
      [length pages-editors pages_list] of ? ;; сколько с ним связались
     [length edit_list] of ?  
          [length page-authors edit_list] of ? ;; со сколькими он связался
      [count my-links ] of ? 
      [norm-betweenness] of ? 
    precision   [nw:page-rank] of ? 3
    )
    ]

;; Ideas ;; 
 file-print "Objects" ;
 file-print csv:to-row (list 
   "PageName"  
   "PageID"  
   "Author" 
  "Edits" 
  "Norm-Betweenness" 
"PageRank"
   ) ;
  foreach reverse sort-on [nw:page-rank] pages [file-print  csv:to-row (list 
      [pagename] of ? 
      [who] of ? 
      [agentname] of user [my_author] of ?  
      [length editors_list] of ? 
[norm-betweenness] of ? 
[nw:page-rank] of ?
   
      ) ]


 file-close
end 

;;;
;; Выявление 

to-report page-authors [list1]
    if empty? list1 [report []]
report remove-duplicates map [[my_author] of page ?] list1
end 

to-report pages-editors [list1]
  if empty? list1 [report []]
report remove-duplicates reduce sentence map [[editors_list] of page ?] list1 
end 


;;; у нас есть список и мы хотим перевести его в имена черепах - наверное map

to-report names-from-list [inlist]
  report map [[agentname] of user ?] inlist
end 

;;;;
;;;   Нормированная центральности

to-report norm-betweenness
  if count turtles > 4 [report precision (nw:betweenness-centrality /  ((count turtles - 1) *  (count turtles - 2) / 2 )) 2 ]
  report 0
end 

to-report centralization-btw
 let znm ((count turtles - 1) * (count turtles - 1) *  (count turtles - 2)) / 2 ;
 let mx  max [nw:betweenness-centrality] of turtles ;
report (sum map [mx - ?] [nw:betweenness-centrality] of turtles ) / znm
end 

to-report density
 if count turtles > 2 [ report (2 * count links) / ( (count turtles) * ( (count turtles) - 1) )] 
 report 0
end 

to-report global-clustering-coefficient
 let closed-triplets sum [ nw:clustering-coefficient * count my-links * (count my-links - 1) ] of turtles
 let triplets sum [ count my-links * (count my-links - 1) ] of turtles
 report closed-triplets / triplets
end 

to-report average_local_clustering 
report  mean [ nw:clustering-coefficient ] of users
end 

;;;

to OneModeGraph
  ask pages [
     let page_id [who] of self ;
     
      let MyEditors  (turtle-set in-editbond-neighbors )
  
     ask MyEditors [
       ;; если связь уже существует, то добавить к ней в переменную страницу
       ;; unsselink
       ifelse is-unsselink? unsselink [who] of self [my_author] of myself 
       [ 

         ask unsselink [who] of self [my_author] of myself [set colpages lput  page_id colpages ]
         ]
      [ 
       create-unsselink-with user [my_author] of myself [set colpages lput  page_id [] ]
      ]
       ]
die
  ]
end 

to see_Btw
  ask turtles [ht]
 ;; ask links [hide-link]
 foreach sublist reverse sort-on [norm-betweenness] users 0 9 [ask ? [st set size 3 set label-color black set label norm-betweenness ]]
end 

;;; cliques

to see_Bcliq
  ask turtles [ht]
  ask links [hide-link]
  let BigCliq one-of nw:biggest-maximal-cliques 
  ask BigCliq [st]
  let BigCliqLinks links with [(member? end1 BigCliq) and  (member? end2 BigCliq) ]
  ask BigCliqLinks [show-link]
  repeat 5 [layout-spring  BigCliq BigCliqLinks 1 15 2]
end 

to see_Mcliq 
  ask turtles [ht]
  ask links [hide-link]
   foreach nw:maximal-cliques [if  (count ?) > ((count one-of nw:biggest-maximal-cliques) - 1) [
  let BigCliq ?
    let BigCliqLinks links with [(member? end1 BigCliq) and  (member? end2 BigCliq) ]
      ask BigCliq [st]
       ask BigCliqLinks [show-link]
       layout-spring  BigCliq BigCliqLinks 1 10 14        
       ]]
   ;;  layout-circle users with [hidden? = false]  15
end 
 
 ;; Покажи нам клики, куда входят участники с наибольшими показателями центральности

to central_cliques
 let Mcentr  sublist  reverse sort-on [norm-betweenness] users 0 10
  ask turtles [ht]
  ask links [hide-link]
   foreach nw:maximal-cliques [
show member? one-of ? Mcentr
if  ((count ?) > 5) and (any? ? with [member? one-of ? Mcentr]) 
;;  and (member? user SomeUser ?)
[
  let BigCliq ?
    let BigCliqLinks links with [(member? end1 BigCliq) and  (member? end2 BigCliq) ]
      ask BigCliq [st]
       ask BigCliqLinks [show-link]
  ;;   layout-spring  BigCliq BigCliqLinks 1 7 1 
         
       ]]
end 
  
 ;;; мы умеем извлекать клики, в которые входит заданный участник

to Mcliq_user [SomeUser]

  ask turtles [ht]
  ask links [hide-link]
   foreach nw:maximal-cliques [
if  ((count ?) > 5) and (member? user SomeUser ?)
[
  let BigCliq ?
    let BigCliqLinks links with [(member? end1 BigCliq) and  (member? end2 BigCliq) ]
      ask BigCliq [st]
       ask BigCliqLinks [show-link]
    layout-spring  BigCliq BigCliqLinks 1 7 1 
         
       ]]
end 
 
 ;;

to clustC
  nw:set-context users links
 let Centr max-one-of users [nw:betweenness-centrality]
layout-radial users  links Centr
;; export-view (word "../google_school_results/clust5/" [who] of Centr ".png" )
;; export-view (word "../google_school_results/clust_view/" [who] of Centr ".png" )
;; ask max-one-of users [nw:betweenness-centrality] [die] ask users with [count my-links = 0] [die]
;; wait 10
;; ask Centr  [die] 
;; ask users with [count my-links = 0] [die]
end 
 
 
 ;;;

to users_output
  
    nw:set-context users links
  file-open user-new-file
 file-print csv:to-row (list 
  "Density"
  "Centrlization-betweenness"
  "Global-Clustering"
  "AverageLocalClastering"
  "Cliques"
  ) ;
  file-print csv:to-row  (list
    density 
    centralization-btw
   global-clustering-coefficient
   average_local_clustering    
   se length nw:biggest-maximal-cliques count one-of nw:biggest-maximal-cliques
    ) ;

 file-print csv:to-row (list 
    "Agentname" 
   "userID" 
     "PagesCreates" 
   "Edits" 
   "MyLinks"
   "Norm-Betweenness" 
   "PageRank" 
   "Clustering-coefficient"

   ) ;

  foreach reverse sort-on [nw:page-rank] users [file-print csv:to-row 
    (list  
      [agentname] of ? 
      [who] of ? 
      [length pages_list] of ? 
        [length edit_list] of ?  
      [count my-links ] of ? 
      [norm-betweenness] of ? 
    precision   [nw:page-rank] of ? 3
    precision  [nw:clustering-coefficient] of ? 3
    )
    ]


 file-close
end   

There is only one version of this model, created over 8 years ago by Evgeny Patarakin.

Attached files

No files

Parent: WikiAnalytics

This model does not have any descendants.

Graph of models related to 'Child of WikiAnalytics'