wikiFactor is a formula to quantify how “impactful” a wiki is. This page shows how to calculate it and displays my wikiFactor statistics.
The name wikiFactor, and the formula for it, are originally from a paper by Carl McBride.
In [2]:
data = [] data += [("qotd_protocol", 5806)] data += [("caffeine-halflife", 5707)] data += [("rust_web_scraping", 4436)] data += [("enabling_usb_midi_on_xiaomi_phones", 4433)] data += [("hill_climbing", 2951)] data += [("omegle_protocol", 2236)] data += [("index", 2134)] data += [("snpp_protocol", 1198)] data += [("sshuttle", 1112)] data += [("Gemini", 1048)] data += [("Hellschreiber", 988)] data += [("note_taking_systems", 870)] data += [("carddav", 860)]
Wikifactor calculation
In [3]:
for i, row in enumerate(data): _, count = row if count < (i + 1) * 1000: print(f"Wikifactor is {i}") break
Out:
Wikifactor is 4
In [4]:
def hwikifactor(data, h): hwf = 0 for name, count in data: if count >= h: hwf += 1 return hwf >= h max_hwf = len(data) for hwf in range(1, max_hwf + 1)[::-1]: if hwikifactor(data, hwf): print(f"h-wikifactor is {hwf}") break
Out:
h-wikifactor is 13
Statistics from my wiki
Let’s load the data.
In [5]:
import sqlite3 import datetime con = sqlite3.connect(":memory:") _ = con.execute("create table pageviews (date text, page text)") _ = con.execute("create index pageviews1 on pageviews(date)") with open("/home/leo/external/tmp/gkbrk.com.log") as f: for line in f: try: line = line.strip() parts = line.split('|') if parts[1] != "200": continue url = parts[7] if not (url.startswith("https://www.gkbrk.com/wiki") or url.startswith("https://gkbrk.com/wiki")): continue date = datetime.datetime.utcfromtimestamp(int(parts[2]) / 1000).strftime("%Y%m%d") _ = con.execute("insert into pageviews (date, page) values (?, ?)", (date, url)) except Exception: pass
In [6]:
end_date = datetime.date.today() start_date = datetime.date(2020, 3, 15) date = start_date hwfplot = [] wfplot = [] while date < end_date: data = [] for row in con.execute('select count(*) from pageviews where date <= ? group by page', (date.strftime("%Y%m%d"),)): data.append(row[0]) data.sort(reverse=True) for i, count in enumerate(data): if count < (i + 1) * 1000: wfplot.append(i) break def hwikifactor(data, h): hwf = 0 for count in data: if count >= h: hwf += 1 return hwf >= h max_hwf = len(data) for hwf in range(1, max_hwf + 1)[::-1]: if hwikifactor(data, hwf): hwfplot.append(hwf) break date += datetime.timedelta(days=1) _ = plt.plot(hwfplot) _ = plt.twinx().plot(wfplot, color='orange') _ = plt.plot([]) _ = plt.legend(["wikiFactor", "h-wikiFactor"])
Out: