browser: count unknown agent versions as old
[sheet.git] / tools / mkusage-wikimedia
1 #!/usr/bin/perl
2 use 5.014;
3 use warnings;
4
5 use Data::Dump 'pp';
6
7 our $VERSION = '1.00';
8
9 my %BROWSERID = qw(
10         IE                      ie
11         IE-Mobile               ie_mob
12         Edge                    ie
13         Edge-Mobile             ie
14         Firefox                 firefox
15         Firefox-Mobile          and_ff
16         Safari                  safari
17         Mobile-Safari           ios_saf
18         Mobile-Safari-UIWebView ios_saf
19         Chrome                  chrome
20         Chromium                chrome
21         Chrome-Mobile           android
22         Chrome-Mobile-iOS       android
23         Android                 android
24         Opera                   opera
25         Opera-Mini              op_mini
26         BlackBerry-WebKit       bb
27         UC-Browser              and_uc
28 );
29
30 my %count = (
31         -title  => 'Wikimedia',
32         -site   => 'https://analytics.wikimedia.org/',
33 );
34
35 my $recent = qr/^2017-/;
36
37 (readline =~ y/\t//) == 3 or die "unexpected amount of columns in header\n";
38
39 while (my $row = readline) {
40         my ($date, $name, $version, $pct) = split /\t/, $row;
41         $date =~ $recent or next;
42         $name =~ y/ /-/;
43         my $browser = $BROWSERID{$name} or next;
44         $version =~ s/\A-\z/0/;
45         $count{$browser}{$version} += $pct;
46         $count{-total} += $pct;
47         $count{-date}->{$date}++;
48 }
49
50 $_ = join ' to ', (sort keys %{$_})[0, -1] for $count{-date};
51
52 my $mult = 100 / delete $count{-total};
53 for (values %count) {
54         ref $_ eq 'HASH' or next;
55         $_ *= $mult for values %{$_};
56 }
57
58 say '+', pp(\%count);
59
60 __END__
61
62 =head1 USAGE
63
64         curl https://analytics.wikimedia.org/datasets/periodic/reports/metrics/browser/all_sites_by_browser_family_and_major_percent.tsv |
65         ./mkusage-wikimedia >browser-usage.inc.pl
66