forked from mipt-cs/wiki-stats
-
Notifications
You must be signed in to change notification settings - Fork 3
/
get_stats.py
102 lines (79 loc) · 4.52 KB
/
get_stats.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
from wiki_stats import WikiGraph
import sys
import os
import array
import statistics
def get_redirect_percentage(wg):
n = wg.get_number_of_pages()
redirect_count = 0
for id in range(0, n):
if wg.is_redirect(id):
redirect_count += 1
return redirect_count/n
def get_array_stats(wg, arr):
stats = dict()
stats['avg'] = statistics.mean(arr)
stats['maxval'] = max(arr)
stats['maxcount'] = arr.count(stats['maxval'])
maxindex = arr.index(stats['maxval'])
stats['maxindex'] = maxindex
stats['maxtitle'] = wg.get_title(maxindex)
stats['minval'] = min(arr)
stats['mincount'] = arr.count(stats['minval'])
minindex = arr.index(stats['minval'])
stats['minindex'] = minindex
stats['mintitle'] = wg.get_title(minindex)
return stats
def get_links_from_stats(wg):
linksfrom = array.array('L', [wg.get_number_of_links_from(i) for i in range(wg.get_number_of_pages())])
return get_array_stats(wg, linksfrom)
def get_links_to_stats(wg):
linksto = array.array('L', [0]*wg.get_number_of_pages())
for i in range(wg.get_number_of_pages()):
if not wg.is_redirect(i):
links = wg.get_links_from(i)
for link in links:
linksto[link] += 1
return get_array_stats(wg, linksto)
def get_redirects_to_stats(wg):
redirectsto = array.array('L', [0]*wg.get_number_of_pages())
for i in range(wg.get_number_of_pages()):
if wg.is_redirect(i):
links = wg.get_links_from(i)
for link in links:
redirectsto[link] += 1
return get_array_stats(wg, redirectsto)
def get_stats(wg):
print("Redirect percentage: ", get_redirect_percentage(wg) * 100)
linksfrom = get_links_from_stats(wg)
linksto = get_links_to_stats(wg)
redirectsto = get_redirects_to_stats(wg)
print("Минимальное количество ссылок из статьи: ", linksfrom['minval'])
print("Количество статей с минимальным количеством ссылок: ", linksfrom['mincount'])
print("Максимальное количество ссылок из статьи: ", linksfrom['maxval'])
print("Количество статей с максимальным количеством ссылок: ", linksfrom['maxcount'])
print("Статья с наибольшим количеством ссылок: ", linksfrom['maxtitle'])
print("Среднее количество ссылок в статье: ", linksfrom['avg'])
print("Минимальное количество ссылок на статью: ", linksto['minval'])
print("Количество статей с минимальным количеством внешних ссылок: ", linksto['mincount'])
print("Максимальное количество ссылок на статью: ", linksto['maxval'])
print("Количество статей с максимальным количеством внешних ссылок: ", linksto['maxcount'])
print("Статья с наибольшим количеством внешних ссылок: ", linksto['maxtitle'])
print("Среднее количество внешних ссылок на статью: ", linksto['avg'])
print("Минимальное количество перенаправлений на статью: ", redirectsto['minval'])
print("Количество статей с минимальным количеством внешних перенаправлений: ", redirectsto['mincount'])
print("Максимальное количество перенаправлений на статью: ", redirectsto['maxval'])
print("Количество статей с максимальным количеством внешних перенаправлений: ", redirectsto['maxcount'])
print("Статья с наибольшим количеством внешних перенаправлений: ", redirectsto['maxtitle'])
print("Среднее количество внешних перенаправлений на статью: ", redirectsto['avg'])
if __name__ == '__main__':
if len(sys.argv) != 2:
print('Использование: get_stats.py <файл с графом статей>')
sys.exit(-1)
if not os.path.isfile(sys.argv[1]):
print('Файл с графом не найден')
sys.exit(-1)
wg = WikiGraph()
wg.load_from_file(sys.argv[1])
get_stats(wg)
wg.draw_images()