diff --git a/Docs/Tools/Changesets per theme in 2020.png b/Docs/Tools/Changesets per theme in 2020.png index 376ac98..3ed0c45 100644 Binary files a/Docs/Tools/Changesets per theme in 2020.png and b/Docs/Tools/Changesets per theme in 2020.png differ diff --git a/Docs/Tools/Changesets per theme in 2021.png b/Docs/Tools/Changesets per theme in 2021.png index 49b7096..528f094 100644 Binary files a/Docs/Tools/Changesets per theme in 2021.png and b/Docs/Tools/Changesets per theme in 2021.png differ diff --git a/Docs/Tools/Changesets per theme.png b/Docs/Tools/Changesets per theme.png index e9a5dfe..a701872 100644 Binary files a/Docs/Tools/Changesets per theme.png and b/Docs/Tools/Changesets per theme.png differ diff --git a/Docs/Tools/Changesets per version number in 2020.png b/Docs/Tools/Changesets per version number in 2020.png index 8c7f211..58ba35b 100644 Binary files a/Docs/Tools/Changesets per version number in 2020.png and b/Docs/Tools/Changesets per version number in 2020.png differ diff --git a/Docs/Tools/Changesets per version number in 2021.png b/Docs/Tools/Changesets per version number in 2021.png index 4921f2d..a5675fd 100644 Binary files a/Docs/Tools/Changesets per version number in 2021.png and b/Docs/Tools/Changesets per version number in 2021.png differ diff --git a/Docs/Tools/Contributors in 2020.png b/Docs/Tools/Contributors in 2020.png index 699c3a3..c0a64db 100644 Binary files a/Docs/Tools/Contributors in 2020.png and b/Docs/Tools/Contributors in 2020.png differ diff --git a/Docs/Tools/Contributors in 2021.png b/Docs/Tools/Contributors in 2021.png index 6a01d28..08a4697 100644 Binary files a/Docs/Tools/Contributors in 2021.png and b/Docs/Tools/Contributors in 2021.png differ diff --git a/Docs/Tools/Contributors.png b/Docs/Tools/Contributors.png index b576a7f..e43761d 100644 Binary files a/Docs/Tools/Contributors.png and b/Docs/Tools/Contributors.png differ diff --git a/Docs/Tools/Cumulative changesets per contributor in 2020.png b/Docs/Tools/Cumulative changesets per contributor in 2020.png index 23c3b23..8e53b7c 100644 Binary files a/Docs/Tools/Cumulative changesets per contributor in 2020.png and b/Docs/Tools/Cumulative changesets per contributor in 2020.png differ diff --git a/Docs/Tools/Cumulative changesets per contributor in 2021.png b/Docs/Tools/Cumulative changesets per contributor in 2021.png index 5b48914..ad7aaab 100644 Binary files a/Docs/Tools/Cumulative changesets per contributor in 2021.png and b/Docs/Tools/Cumulative changesets per contributor in 2021.png differ diff --git a/Docs/Tools/Cumulative changesets per contributor.png b/Docs/Tools/Cumulative changesets per contributor.png index b8e7324..f87d4a1 100644 Binary files a/Docs/Tools/Cumulative changesets per contributor.png and b/Docs/Tools/Cumulative changesets per contributor.png differ diff --git a/Docs/Tools/Cumulative changesets per host in 2020.png b/Docs/Tools/Cumulative changesets per host in 2020.png index 5ae1b68..76284e1 100644 Binary files a/Docs/Tools/Cumulative changesets per host in 2020.png and b/Docs/Tools/Cumulative changesets per host in 2020.png differ diff --git a/Docs/Tools/Cumulative changesets per host in 2021.png b/Docs/Tools/Cumulative changesets per host in 2021.png index dd6e0bd..e3b31c6 100644 Binary files a/Docs/Tools/Cumulative changesets per host in 2021.png and b/Docs/Tools/Cumulative changesets per host in 2021.png differ diff --git a/Docs/Tools/Cumulative changesets per host.png b/Docs/Tools/Cumulative changesets per host.png index 4f3bfe1..82c2642 100644 Binary files a/Docs/Tools/Cumulative changesets per host.png and b/Docs/Tools/Cumulative changesets per host.png differ diff --git a/Docs/Tools/Cumulative changesets per language in 2020.png b/Docs/Tools/Cumulative changesets per language in 2020.png index 6f5b50c..820c0fd 100644 Binary files a/Docs/Tools/Cumulative changesets per language in 2020.png and b/Docs/Tools/Cumulative changesets per language in 2020.png differ diff --git a/Docs/Tools/Cumulative changesets per language in 2021.png b/Docs/Tools/Cumulative changesets per language in 2021.png index 3fcd2f3..03d40d5 100644 Binary files a/Docs/Tools/Cumulative changesets per language in 2021.png and b/Docs/Tools/Cumulative changesets per language in 2021.png differ diff --git a/Docs/Tools/Cumulative changesets per language.png b/Docs/Tools/Cumulative changesets per language.png index 1192301..4ea0768 100644 Binary files a/Docs/Tools/Cumulative changesets per language.png and b/Docs/Tools/Cumulative changesets per language.png differ diff --git a/Docs/Tools/Cumulative changesets per theme in 2020.png b/Docs/Tools/Cumulative changesets per theme in 2020.png index 808d95b..b4153a7 100644 Binary files a/Docs/Tools/Cumulative changesets per theme in 2020.png and b/Docs/Tools/Cumulative changesets per theme in 2020.png differ diff --git a/Docs/Tools/Cumulative changesets per theme in 2021.png b/Docs/Tools/Cumulative changesets per theme in 2021.png index 14265aa..583eed3 100644 Binary files a/Docs/Tools/Cumulative changesets per theme in 2021.png and b/Docs/Tools/Cumulative changesets per theme in 2021.png differ diff --git a/Docs/Tools/Cumulative changesets per theme.png b/Docs/Tools/Cumulative changesets per theme.png index 960758d..3868b03 100644 Binary files a/Docs/Tools/Cumulative changesets per theme.png and b/Docs/Tools/Cumulative changesets per theme.png differ diff --git a/Docs/Tools/Cumulative changesets per version number in 2020.png b/Docs/Tools/Cumulative changesets per version number in 2020.png index 4270348..b0278ad 100644 Binary files a/Docs/Tools/Cumulative changesets per version number in 2020.png and b/Docs/Tools/Cumulative changesets per version number in 2020.png differ diff --git a/Docs/Tools/Cumulative changesets per version number in 2021.png b/Docs/Tools/Cumulative changesets per version number in 2021.png index 28d7718..227ac9c 100644 Binary files a/Docs/Tools/Cumulative changesets per version number in 2021.png and b/Docs/Tools/Cumulative changesets per version number in 2021.png differ diff --git a/Docs/Tools/Cumulative changesets per version number.png b/Docs/Tools/Cumulative changesets per version number.png index a963dcb..2b9d1a6 100644 Binary files a/Docs/Tools/Cumulative changesets per version number.png and b/Docs/Tools/Cumulative changesets per version number.png differ diff --git a/Docs/Tools/CumulativeContributors in 2020.png b/Docs/Tools/CumulativeContributors in 2020.png index 84d3157..d2c8e61 100644 Binary files a/Docs/Tools/CumulativeContributors in 2020.png and b/Docs/Tools/CumulativeContributors in 2020.png differ diff --git a/Docs/Tools/CumulativeContributors in 2021.png b/Docs/Tools/CumulativeContributors in 2021.png index dd99fae..20ecfdb 100644 Binary files a/Docs/Tools/CumulativeContributors in 2021.png and b/Docs/Tools/CumulativeContributors in 2021.png differ diff --git a/Docs/Tools/CumulativeContributors.png b/Docs/Tools/CumulativeContributors.png index c7c9384..34ab7f4 100644 Binary files a/Docs/Tools/CumulativeContributors.png and b/Docs/Tools/CumulativeContributors.png differ diff --git a/Docs/Tools/Theme distribution in 2020.png b/Docs/Tools/Theme distribution in 2020.png index dc9f548..42049b9 100644 Binary files a/Docs/Tools/Theme distribution in 2020.png and b/Docs/Tools/Theme distribution in 2020.png differ diff --git a/Docs/Tools/Theme distribution in 2021.png b/Docs/Tools/Theme distribution in 2021.png index aec16b7..0080824 100644 Binary files a/Docs/Tools/Theme distribution in 2021.png and b/Docs/Tools/Theme distribution in 2021.png differ diff --git a/Docs/Tools/Theme distribution.png b/Docs/Tools/Theme distribution.png index 0726df8..ebf37e4 100644 Binary files a/Docs/Tools/Theme distribution.png and b/Docs/Tools/Theme distribution.png differ diff --git a/Docs/Tools/csvGrapher.py b/Docs/Tools/csvGrapher.py index 7a25f8c..b1fcc5e 100644 --- a/Docs/Tools/csvGrapher.py +++ b/Docs/Tools/csvGrapher.py @@ -1,7 +1,9 @@ import csv +import string from datetime import datetime from matplotlib import pyplot +import re def counts(lst): @@ -107,7 +109,6 @@ def cumulative_users(stats): def pyplot_init(): pyplot.figure(figsize=(14, 8), dpi=200) pyplot.xticks(rotation='vertical') - pyplot.tight_layout() def create_usercount_graphs(stats, extra_text=""): @@ -122,7 +123,7 @@ def create_usercount_graphs(stats, extra_text=""): pyplot.title("Unique contributors" + extra_text + ' with MapComplete (' + str(total) + ' contributors)') pyplot.ylabel("Number of unique contributors") pyplot.xlabel("Date") - pyplot.savefig("Contributors" + extra_text + ".png", dpi=400, facecolor='w', edgecolor='w', bbox_inches='tight') + pyplot.savefig("Contributors" + extra_text + ".png", dpi=400, facecolor='w', edgecolor='w') pyplot_init() pyplot.plot(dates, cumul_uniq, label='Cumulative unique contributors') @@ -130,8 +131,7 @@ def create_usercount_graphs(stats, extra_text=""): pyplot.title("Cumulative unique contributors" + extra_text + " with MapComplete - " + str(total) + " contributors") pyplot.ylabel("Number of unique contributors") pyplot.xlabel("Date") - pyplot.savefig("CumulativeContributors" + extra_text + ".png", dpi=400, facecolor='w', edgecolor='w', - bbox_inches='tight') + pyplot.savefig("CumulativeContributors" + extra_text + ".png", dpi=400, facecolor='w', edgecolor='w') def create_theme_breakdown(stats, fileExtra="", cutoff=5): @@ -248,14 +248,20 @@ def contents_where(contents, index, starts_with, invert=False): yield row +def sortable_user_number(kv): + str = kv[0] + ls = list(map(lambda str : "0"+str if len(str) < 2 else str, re.findall("[0-9]+", str))) + return ".".join(ls) + + def create_graphs(contents): + cumulative_changes_per(contents, 4, "version number", cutoff=1, sort=sortable_user_number) create_usercount_graphs(contents) create_theme_breakdown(contents) cumulative_changes_per(contents, 3, "theme", cutoff=10) cumulative_changes_per(contents, 3, "theme", cutoff=10, cumulative=False) cumulative_changes_per(contents, 1, "contributor", cutoff=15) cumulative_changes_per(contents, 2, "language", cutoff=1) - cumulative_changes_per(contents, 4, "version number", cutoff=1, sort=lambda kv : kv[0]) cumulative_changes_per(contents, 8, "host", cutoff=1) currentYear = datetime.now().year @@ -268,11 +274,37 @@ def create_graphs(contents): cumulative_changes_per(contents_filtered, 3, "theme", extratext, cutoff=5, cumulative=False) cumulative_changes_per(contents_filtered, 1, "contributor", extratext, cutoff=10) cumulative_changes_per(contents_filtered, 2, "language", extratext, cutoff=1) - cumulative_changes_per(contents_filtered, 4, "version number", extratext, cutoff=1, cumulative=False, sort=lambda kv : kv[0]) - cumulative_changes_per(contents_filtered, 4, "version number", extratext, cutoff=1, sort=lambda kv : kv[0]) + cumulative_changes_per(contents_filtered, 4, "version number", extratext, cutoff=1, cumulative=False, + sort=sortable_user_number) + cumulative_changes_per(contents_filtered, 4, "version number", extratext, cutoff=1, sort=sortable_user_number) cumulative_changes_per(contents_filtered, 8, "host", extratext, cutoff=1) +def create_per_theme_graphs(contents): + all_themes = set(map(lambda row: row[3], contents)) + for theme in all_themes: + filtered = list(contents_where(contents, 3, theme)) + if len(filtered) < 10: + # less then 10 changesets - we do not map it + continue + contributors = set(map(lambda row: row[1], filtered)) + if len(contributors) < 2: + continue # one contributor makes a boring graph + cumulative_changes_per(filtered, 1, "contributor", " for theme " + theme, cutoff=1) + + +def create_per_contributor_graphs(contents, least_needed_changesets): + all_contributors = set(map(lambda row: row[1], contents)) + for contrib in all_contributors: + filtered = list(contents_where(contents, 1, contrib)) + if len(filtered) < least_needed_changesets: + continue + themes = set(map(lambda row: row[3], filtered)) + if len(themes) < 2: + continue # one theme makes a boring graph + cumulative_changes_per(filtered, 3, "theme", " for contributor " + contrib, cutoff=1) + + theme_remappings = { "metamap": "maps", "groen": "buurtnatuur", @@ -282,10 +314,10 @@ theme_remappings = { "pomp": "cyclofix", "wiki:user:joost_schouppe/campersite": "campersite", "wiki-user-joost_schouppe-geveltuintjes": "geveltuintjes", - "wiki-user-joost_schouppe-campersite": "campersites", - "wiki-User-joost_schouppe-campersite": "campersites", + "wiki-user-joost_schouppe-campersite": "campersite", + "wiki-User-joost_schouppe-campersite": "campersite", "wiki-User-joost_schouppe-geveltuintjes": "geveltuintjes", - "wiki:User:joost_schouppe/campersite": "campersites", + "wiki:User:joost_schouppe/campersite": "campersite", "https://raw.githubusercontent.com/osmbe/play/master/mapcomplete/geveltuinen/geveltuinen.json": "geveltuintjes" } @@ -300,7 +332,8 @@ def clean_input(contents): if theme in theme_remappings: theme = theme_remappings[theme] row[3] = theme - row[4] = row[4].strip().strip("\"")[0:len("MapComplete x.x.x")] + row[4] = row[4].strip().strip("\"")[len("MapComplete "):] + row[4] = re.findall("[0-9]*\.[0-9]*\.[0-9]*", row[4])[0] yield [data.strip().strip("\"") for data in row] @@ -310,6 +343,8 @@ def main(): stats = list(clean_input(csv.reader(csvfile, delimiter=',', quotechar='"'))) print("Found " + str(len(stats)) + " changesets") create_graphs(stats) + create_per_theme_graphs(stats) + create_per_contributor_graphs(stats, 50) print("All done!") diff --git a/Docs/Tools/stats.csv b/Docs/Tools/stats.csv index 64fff9c..41ef68d 100644 --- a/Docs/Tools/stats.csv +++ b/Docs/Tools/stats.csv @@ -2876,5 +2876,15 @@ "2021-03-14", "Pieter Vander Vennet", "nl", "speelplekken", "MapComplete 0.5.10", 0, 1, "Adding data with #MapComplete for theme #speelplekken", "pietervdvn.github.io" "2021-03-14", "whturner", "en", "benches", "MapComplete 0.5.9", 4, 8, "Adding data with #MapComplete for theme #benches", "mapcomplete.osm.be" "2021-03-14", "WinstonSmith", "en", "drinking_water", "MapComplete 0.5.9", 0, 1, "Adding data with #MapComplete for theme #drinking_water", "mapcomplete.osm.be" +"2021-03-15", "joost schouppe", "en", "campersite", "MapComplete 0.5.12", 0, 4, "Adding data with #MapComplete for theme #campersite", "mapcomplete.osm.be" +"2021-03-15", "joost schouppe", "nl", "https://raw.githubusercontent.com/osmbe/play/master/mapcomplete/geveltuinen/geveltuinen.json", "MapComplete 0.5.5-unlocked", 0, 1, "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/osmbe/play/master/mapcomplete/geveltuinen/geveltuinen.json", "pietervdvn.github.io" "2021-03-15", "Pieter Nuytinck", "en", "bookcases", "MapComplete 0.5.10", 2, 4, "Adding data with #MapComplete for theme #bookcases", "pietervdvn.github.io" "2021-03-15", "Technopolice_newBiE", "en", "surveillance", "MapComplete 0.5.5-unlocked", 68, 36, "Adding data with #MapComplete for theme #surveillance", "pietervdvn.github.io" +"2021-03-15", "WinstonSmith", "en", "toilets", "MapComplete 0.5.9", 0, 2, "Adding data with #MapComplete for theme #toilets", "mapcomplete.osm.be" +"2021-03-16", "Awo", "en", "trees", "MapComplete 0.5.12", 0, 5, "Adding data with #MapComplete for theme #trees", "pietervdvn.github.io" +"2021-03-16", "Awo", "en", "trees", "MapComplete 0.5.12", 3, 3, "Adding data with #MapComplete for theme #trees", "pietervdvn.github.io" +"2021-03-16", "bryceco", "en", "personal", "MapComplete 0.5.12", 0, 1, "Adding data with #MapComplete for theme #personal", "mapcomplete.osm.be" +"2021-03-16", "Koen Rijnsent", "en", "personal", "MapComplete 0.5.12", 1, 2, "Adding data with #MapComplete for theme #personal", "mapcomplete.osm.be" +"2021-03-16", "Pieter Vander Vennet", "nl", "speelplekken", "MapComplete 0.5.12", 0, 1, "Adding data with #MapComplete for theme #speelplekken", "mapcomplete.osm.be" +"2021-03-16", "Pieter Vander Vennet", "nl", "sport_pitches", "MapComplete 0.5.12", 1, 2, "Adding data with #MapComplete for theme #sport_pitches", "mapcomplete.osm.be" +"2021-03-16", "WinstonSmith", "en", "cyclofix", "MapComplete 0.5.12", 1, 1, "Adding data with #MapComplete for theme #cyclofix", "mapcomplete.osm.be"