Wikipedia:WikiProject Wikidemia/Fundraising/fr2005q4.do

clear set mem 5m; set matsize 800; set more off;
 * 1) delimit ;

local daysindec = 31; local minsinhr = 60; local hrsinday = 24;

insheet using fundraiser2005q4clean.txt, names; drop if time==""; replace time = substr(time,1,8); gen hour = real(substr(time,1,2)); gen minute = real(substr(time,4,2)); gen second = real(substr(time,7,2)); gen amt = real(regexr(gross,",",""));

gen d = date(date,"ymd"); gen yr = year(d); gen mo = month(d); gen day = day(d); gen dow = dow(d); /* 0 is Sunday; 6 is Saturday */ label define daysofweek 6 "Saturday" 0 "Sunday" 1 "Monday" 2 "Tuesday" 3 "Wednesday" 4 "Thursday" 5 "Friday"; label var dow "Day of the Week"; label values dow daysofweek; quietly summ day; local day0 = r(min); quietly summ dow if day==`day0'; local dowday0 = r(min); gen week = 1 + floor((day+`daysindec'*(mo==1)-`day0'+`dowday0')/7);

save fundraiser2005q4.dta, replace;

/* Preliminary analysis: bys currency: summ amt; hist amt if currency=="EUR"; hist amt if (currency=="EUR")&(amt<200); bys day: summ amt if curr=="USD";

/*exit;*/

/* For obtaining plots of contributions over time: */ sort yr mo day currency; collapse (mean) dow=dow week=week avgamt=amt (sum) total=amt (count) ndonations=amt (sd) sdamt=amt, by(yr mo day currency); /* scatter total day if curr=="USD"; line total day if curr=="USD"; */

sort week; twoway (connected total dow if week==1) (connected total dow if week==2) (connected total dow if week==3) (connected total dow if week==4) if curr=="USD", title("Total USD Donations by Day and by Week") ytitle("Dollars") ysca(titlegap(*3)) ysc(r(0)) ylabel(#6) xtitle("Day") xlabel(5 "Friday" 6 "Saturday" 0 "Sunday" 1 "Monday" 2 "Tuesday" 3 "Wednesday" 4 "Thursday") legend(label(1 "12/16/2005-12/17/2005")              label(2 "12/18/2005-12/24/2005")	       label(3 "12/25/2005-12/31/2005")               label(4 "1/1/2006-1/6/2006")) caption("This figure plots total USD-denominated contributions received, by day and by week "            "of the 2005q4 fundraising drive.");

graph export contribsbyday2005q4.png, replace;

twoway (connected ndon dow if week==1) (connected ndon dow if week==2) (connected ndon dow if week==3) (connected ndon dow if week==4) if curr=="USD", title("Number of USD Donations by Day and by Week") ytitle("USD Donations") ysca(titlegap(*3)) ysc(r(0)) ylabel(#6) xtitle("Day") xlabel(5 "Friday" 6 "Saturday" 0 "Sunday" 1 "Monday" 2 "Tuesday" 3 "Wednesday" 4 "Thursday") legend(label(1 "12/16/2005-12/17/2005")              label(2 "12/18/2005-12/24/2005")	       label(3 "12/25/2005-12/31/2005")               label(4 "1/1/2006-1/6/2006")) caption("This figure plots total USD-denominated contributions received, by day and by week "            "of the 2005q4 fundraising drive.");

graph export ndonationsbyday2005q4.png, replace;

twoway (connected avgamt dow if week==1) (connected avgamt dow if week==2) (connected avgamt dow if week==3) (connected avgamt dow if week==4) if curr=="USD", title("Average Size of USD Donations by Day and by Week") ytitle("Dollars") ysca(titlegap(*3)) ysc(r(0)) ylabel(#6) xtitle("Day") xlabel(5 "Friday" 6 "Saturday" 0 "Sunday" 1 "Monday" 2 "Tuesday" 3 "Wednesday" 4 "Thursday") legend(label(1 "12/16/2005-12/17/2005")              label(2 "12/18/2005-12/24/2005")	       label(3 "12/25/2005-12/31/2005")               label(4 "1/1/2006-1/6/2006")) caption("This figure plots total USD-denominated contributions received, by day and by week "            "of the 2005q4 fundraising drive.");

graph export avgsizebyday2005q4.png, replace;

/**/

exit;

use fundraiser2005q4.dta;

gen mins_since_start = (day-`day0')*`hrsinday'*`minsinhr' + hour*`minsinhr' + minute;

/* The pictures on the banner were up from 00:15 UTC until 01:30 UTC on December 28. */ local bannert0 = (28-`day0')*`hrsinday'*`minsinhr' + 15; local bannert1 = (28-`day0')*`hrsinday'*`minsinhr' + 90; local bannerdur = `bannert1' - `bannert0'; gen bannerpix = (mins_since_start >= `bannert0') & (mins_since_start <= `bannert1'); local controlt0 = (21-`day0')*`hrsinday'*`minsinhr' + 15; local controlt1 = (21-`day0')*`hrsinday'*`minsinhr' + 90;

/* bys curr: regress amt bannerpix; bys bannerpix: summ amt if curr=="USD", d; macro list;

/* gen timepd = floor((mins_-`bannert0')/(`bannert1'-`bannert0')) * (`bannert1'-`bannert0'); egen ndow = group(dow); sort timepd curr; collapse (sum) total=amt (count) ndonations=amt (sd) sdamt=amt, by(timepd curr);

gen bp = 1*((mins_<`controlt0')&(mins>=`controlt0'-`bannerdur')) + 2*((mins_>=`controlt0')&(mins<=`controlt1')) + 3*((mins_>`controlt1')&(mins<=`controlt1'+`bannerdur')) + 4*((mins_since_start < `bannert0') & (mins_since_start >= `bannert0' - `bannerdur')) + 5*bannerpix + 6*((mins_since_start > `bannert1') & (mins_since_start <= `bannert1' + `bannerdur')) ;

bys bp: summ amt if curr=="USD";