def run(self): regionalEntropy = {} regionCount = {} timeEntropy = {} sumInterest = {} posInterest = {} ############################################################################## # PARSE GOOGLE TREND RESULT FILES ############################################################################## quota_error = 0 for file in self.onlyfiles: startFromLine = -1 startFromLineTime = -1 pos = file.find(".csv") filename = file[0:pos] linesCounter = 1 end = False endTime = False with open(self.datapath+"/"+file) as f: content = f.readlines() regions = {} timeseries = {} for line in content: if line.startswith("<div id="): quota_error += 1 print "quota error for %s"%filename break; if line.startswith("Region,"): startFromLine = linesCounter if line.startswith("Month,"): startFromLineTime = linesCounter if ((startFromLine > 0) and (linesCounter > startFromLine) and (not end)): if line == "\n": end = True else: items = line.split(",") regions[items[0]] = items[1] if ((startFromLineTime > 0) and (linesCounter > startFromLineTime) and (not endTime)): print line if line == "\n": endTime = True else: items = line.split(",") if items[1] == ' \n': # sometimes gtrends returns empty field rather than 0 timeseries[items[0]] = "0" else: timeseries[items[0]] = items[1] linesCounter += 1 timeFrequs = map(int, timeseries.values()) regionFrequs = map(int,(regions.values())) if linesCounter > 1: sumInterest[filename] = np.sum(timeFrequs) posInterest[filename] = np.count_nonzero(timeFrequs) if posInterest[filename] > 0: timeEntropy[filename] = stats.entropy(timeFrequs) else: timeEntropy[filename] = np.nan regionCount[filename] = len(regionFrequs) if(np.sum(regionFrequs) > 0): regionalEntropy[filename] = stats.entropy(regionFrequs) else: regionalEntropy[filename] = np.nan # store results into a dataframe regionalEntropyDF = pd.DataFrame.from_dict(regionalEntropy.items()) regionalEntropyDF.columns=["filename", "entropy"] print regionalEntropyDF.head() regionCountDF = pd.DataFrame.from_dict(regionCount.items()) regionCountDF.columns=["filename", "numRegions"] interestDF = pd.DataFrame.from_dict(sumInterest.items()) interestDF.columns=["filename", "timeInterest"] timeEntropyDF = pd.DataFrame.from_dict(timeEntropy.items()) timeEntropyDF.columns=["filename", "timeEntropy"] posInterestDF = pd.DataFrame.from_dict(posInterest.items()) posInterestDF.columns=["filename", "timePosInterest"] #print "regionalEntropyDF" #print regionalEntropyDF.head(n=1) #print regionalEntropyDF.shape #print "regionCountDF" #print regionCountDF.head(n=1) #print regionCountDF.shape #print "self.people" #print self.people.head(n=1) #print self.people.shape # add the computed statistics to the people file self.people = self.people.merge(regionalEntropyDF, right_on="filename", left_on="filename", how="inner") self.people = self.people.merge(regionCountDF, right_on="filename", left_on="filename", how="inner") self.people = self.people.merge(timeEntropyDF, right_on="filename", left_on="filename", how="inner") self.people = self.people.merge(interestDF, right_on="filename", left_on="filename", how="inner") self.people = self.people.merge(posInterestDF, right_on="filename", left_on="filename", how="inner") print "AFTER MERGING" print self.people.head(n=1) print self.people.shape ############################################################################## # PLOTS NUM REGIONS ############################################################################## men = self.people[self.people.gender =="male"] women = self.people[self.people.gender =="female"] labels = ['female ('+str(len(women.index))+')', 'male ('+str(len(men.index))+')'] data = [women.numRegions.values, men.numRegions.values] self.logfile.write("\n Mann Withney U Num regions:") U, p = stats.mstats.mannwhitneyu(women.numRegions.values, men.numRegions.values) ut.write_mannwithneyu(U, p, women.numRegions.values, men.numRegions.values, self.logfile) self.make_boxplot(data, labels, self.imgpath+"gtrend_num_regions_box.png", "num regions") self.plot_ccdf(np.array(women.numRegions.values.tolist()), np.array(men.numRegions.values.tolist()), labels, self.imgpath+"gtrend_num_regions_ccdf.png", "Num Regions", 1, 0) ut.plot_facet_dist(self.people, 'gender', 'numRegions', self.imgpath+"gtrend_num_regions.png") ut.rank_size_plot(self.people, 'numRegions', 'Num Regions Gtrends', self.imgpath+"gtrend_num_regions_ranksize.png") ############################################################################## # PLOTS TOTAL INTEREST ############################################################################## data = [women.timeInterest.values, men.timeInterest.values] self.logfile.write("\n \n Mann Withney U Temp Sum Interest:") U, p = stats.mstats.mannwhitneyu(women.timeInterest.values, men.timeInterest.values) ut.write_mannwithneyu(U, p, women.timeInterest.values, men.timeInterest.values, self.logfile) self.make_boxplot(data, labels, self.imgpath+"gtrend_time_interest_box.png", "sum interest") self.plot_ccdf(np.array(women.timeInterest.values.tolist()), np.array(men.timeInterest.values.tolist()), labels, self.imgpath+"gtrend_time_interest_ccdf.png", "Sum Interest", 1, 0) ut.plot_facet_dist(self.people, 'gender', 'timeInterest', self.imgpath+"gtrend_time_interest.png") data = [women.timePosInterest.values, men.timePosInterest.values] self.logfile.write("\n\n Mann Withney U Temp Pos Interest:") U, p = stats.mstats.mannwhitneyu(women.timePosInterest.values, men.timePosInterest.values) ut.write_mannwithneyu(U, p, women.timePosInterest.values, men.timePosInterest.values, self.logfile) self.make_boxplot(data, labels, self.imgpath+"gtrend_time_pos_interest_box.png", "num weeks with interest") self.plot_ccdf(np.array(women.timePosInterest.values.tolist()), np.array(men.timePosInterest.values.tolist()), labels, self.imgpath+"gtrend_time_pos_interest_ccdf.png", "Num weeks with interest", 1, 0) ut.plot_facet_dist(self.people, 'gender', 'timePosInterest', self.imgpath+"gtrend_time_pos_interest.png") ############################################################################## # PLOT Entropy Temp INTEREST ############################################################################## limPeople = self.people[np.isfinite(self.people['timeEntropy'])] #people[people.index not in inds] men = limPeople[limPeople.gender =="male"] women = limPeople[limPeople.gender =="female"] data = [women.timeEntropy.values, men.timeEntropy.values] self.logfile.write("\n\n Mann Withney U Time Entropy:") U, p = stats.mstats.mannwhitneyu(women.timeEntropy.values, men.timeEntropy.values) ut.write_mannwithneyu(U, p, women.timeEntropy.values, men.timeEntropy.values, self.logfile) self.make_boxplot(data, labels, self.imgpath+"gtrend_time_entropy_box.png", "temporal entropy") self.plot_ccdf(np.array(women.timeEntropy.values.tolist()), np.array(men.timeEntropy.values.tolist()), labels, self.imgpath+"gtrend_time_entropy_ccdf.png", "Temp Entropy", 1, 0) ut.plot_facet_dist(self.people, 'gender', 'timeEntropy', self.imgpath+"gtrend_time_entropy.png") ############################################################################## # PLOT ENTROPY ############################################################################## # for entropy we need to remove the nan value. If we dont have data the result is nan limPeople = self.people[np.isfinite(self.people['entropy'])] #people[people.index not in inds] men = limPeople[limPeople.gender =="male"] women = limPeople[limPeople.gender =="female"] labels = ['female ('+str(len(women.index))+')', 'male ('+str(len(men.index))+')'] data = [women.entropy.values, men.entropy.values] self.logfile.write("\n\n Mann Withney U Entropy:") U, p = stats.mstats.mannwhitneyu(women.entropy.values, men.entropy.values) ut.write_mannwithneyu(U, p, women.entropy.values, men.entropy.values, self.logfile) self.make_boxplot(data, labels, "gtrend_region_entropy_box.png", "shannon entropy") self.plot_ccdf(np.array(women.entropy.values.tolist()), np.array(men.entropy.values.tolist()), labels, self.imgpath+"gtrend_entropy_ccdf.png", "Entropy", 0, 0) ut.plot_facet_dist(self.people, 'gender', 'entropy', self.imgpath+"gtrend_region_entropy.png") self.regression()
def run(self): regionalEntropy = {} regionCount = {} timeEntropy = {} sumInterest = {} posInterest = {} ############################################################################## # PARSE GOOGLE TREND RESULT FILES ############################################################################## quota_error = 0 monthlyFiles = 0 weeklyFiles = 0 for file in self.onlyfiles: startFromLine = -1 startFromLineTime = -1 weekly = False pos = file.find(".json") if (pos >= 0): filename = file[0:pos] linesCounter = 1 end = False endTime = False with open(self.datapath+"/"+file) as f: content = f.read() #print content data = self.parse_gtrend_json(content) timeseries = {} print data print len(data) if len(data) > 3: for ind in xrange(0, len(data), 2): #print data[ind] #print data[ind+1] if (ind+1) < len(data): timeseries[data[ind]] = data[ind+1] timeFrequs = map(int, timeseries.values()) if len(timeFrequs) > 1: sumInterest[filename] = np.sum(timeFrequs) posInterest[filename] = np.count_nonzero(timeFrequs) if posInterest[filename] > 0: timeEntropy[filename] = stats.entropy(timeFrequs) else: timeEntropy[filename] = np.nan interestDF = pd.DataFrame.from_dict(sumInterest.items()) interestDF.columns=["filename", "timeInterest"] timeEntropyDF = pd.DataFrame.from_dict(timeEntropy.items()) timeEntropyDF.columns=["filename", "timeEntropy"] posInterestDF = pd.DataFrame.from_dict(posInterest.items()) posInterestDF.columns=["filename", "timePosInterest"] #print "regionalEntropyDF" #print regionalEntropyDF.head(n=1) #print regionalEntropyDF.shape #print "regionCountDF" #print regionCountDF.head(n=1) #print regionCountDF.shape #print "self.people" #print self.people.head(n=1) #print self.people.shape # add the computed statistics to the people file self.people = self.people.merge(timeEntropyDF, right_on="filename", left_on="filename", how="inner") self.people = self.people.merge(interestDF, right_on="filename", left_on="filename", how="inner") self.people = self.people.merge(posInterestDF, right_on="filename", left_on="filename", how="inner") print "AFTER MERGING" print self.people.head(n=1) print self.people.shape men = self.people[self.people.gender =="male"] women = self.people[self.people.gender =="female"] labels = ['female ('+str(len(women.index))+')', 'male ('+str(len(men.index))+')'] ############################################################################## # PLOTS TOTAL INTEREST ############################################################################## data = [women.timeInterest.values, men.timeInterest.values] self.logfile.write("\n \n Mann Withney U Temp Sum Interest:") U, p = stats.mstats.mannwhitneyu(women.timeInterest.values, men.timeInterest.values) ut.write_mannwithneyu(U, p, women.timeInterest.values, men.timeInterest.values, self.logfile) self.make_boxplot(data, labels, self.imgpath+"gtrend_time_interest_box.png", "sum interest") self.plot_ccdf(np.array(women.timeInterest.values.tolist()), np.array(men.timeInterest.values.tolist()), labels, self.imgpath+"gtrend_time_interest_ccdf.png", "Sum Interest", 1, 0) ut.plot_facet_dist(self.people, 'gender', 'timeInterest', self.imgpath+"gtrend_time_interest.png") data = [women.timePosInterest.values, men.timePosInterest.values] self.logfile.write("\n\n Mann Withney U Temp Pos Interest:") U, p = stats.mstats.mannwhitneyu(women.timePosInterest.values, men.timePosInterest.values) ut.write_mannwithneyu(U, p, women.timePosInterest.values, men.timePosInterest.values, self.logfile) self.make_boxplot(data, labels, self.imgpath+"gtrend_time_pos_interest_box.png", "num weeks with interest") self.plot_ccdf(np.array(women.timePosInterest.values.tolist()), np.array(men.timePosInterest.values.tolist()), labels, self.imgpath+"gtrend_time_pos_interest_ccdf.png", "Num weeks with interest", 1, 0) ut.plot_facet_dist(self.people, 'gender', 'timePosInterest', self.imgpath+"gtrend_time_pos_interest.png") ############################################################################## # PLOT Entropy Temp INTEREST ############################################################################## limPeople = self.people[np.isfinite(self.people['timeEntropy'])] #people[people.index not in inds] men = limPeople[limPeople.gender =="male"] women = limPeople[limPeople.gender =="female"] data = [women.timeEntropy.values, men.timeEntropy.values] self.logfile.write("\n\n Mann Withney U Time Entropy:") U, p = stats.mstats.mannwhitneyu(women.timeEntropy.values, men.timeEntropy.values) ut.write_mannwithneyu(U, p, women.timeEntropy.values, men.timeEntropy.values, self.logfile) self.make_boxplot(data, labels, self.imgpath+"gtrend_time_entropy_box.png", "temporal entropy") self.plot_ccdf(np.array(women.timeEntropy.values.tolist()), np.array(men.timeEntropy.values.tolist()), labels, self.imgpath+"gtrend_time_entropy_ccdf.png", "Temp Entropy", 1, 0) ut.plot_facet_dist(self.people, 'gender', 'timeEntropy', self.imgpath+"gtrend_time_entropy.png") self.regression()