stats paper chi 1
authorSamuel Huron <samuel.huron@centrepompidou.fr>
Sun, 28 Aug 2011 11:48:30 +0200
changeset 259 bc17d1af15ab
parent 258 58bd8e4d5e65
child 264 c7fd6a0b5b51
stats paper chi 1
web/common.php
web/polemicaltimeline.php
web/res/metadataplayer.polemic/src/js/polemic.js
--- a/web/common.php	Fri Aug 19 17:53:30 2011 +0200
+++ b/web/common.php	Sun Aug 28 11:48:30 2011 +0200
@@ -105,43 +105,47 @@
 
 $js_registry = array(
 	'local' => array(
-	    'jquery' => URL_ROOT.'res/js/jquery-1.4.3.min.js',
-	    'raphael' => URL_ROOT.'res/raphael/raphael-min.js',
-	    'jquery-ui' => URL_ROOT.'res/js/jquery-ui-1.8.13.min.js',
-	    'niceforms' => URL_ROOT.'res/niceforms/niceforms.js',
-	    'jquery-url' => URL_ROOT.'res/js/jquery.url.js',
-	    'ldtplayer' => URL_ROOT.'res/metadataplayer/src/js/LdtPlayer.js',
-		'fancybox' => URL_ROOT.'res/jquery.fancybox/fancybox/jquery.fancybox-1.3.4.pack.js',
-		'jquery-tools' => URL_ROOT.'res/metadataplayer/res/js/jquery.tools.min.js',
-		'tw-widget' => URL_ROOT.'res/js/tw_widget.js',
+	    'jquery' 		=> URL_ROOT.'res/js/jquery-1.4.3.min.js',
+	    'raphael' 		=> URL_ROOT.'res/raphael/raphael-min.js',
+	    'jquery-ui' 	=> URL_ROOT.'res/js/jquery-ui-1.8.13.min.js',
+	    'niceforms' 	=> URL_ROOT.'res/niceforms/niceforms.js',
+	    'jquery-url' 	=> URL_ROOT.'res/js/jquery.url.js',
+	    'ldtplayer' 	=> URL_ROOT.'res/metadataplayer/src/js/LdtPlayer.js',
+		'fancybox' 		=> URL_ROOT.'res/jquery.fancybox/fancybox/jquery.fancybox-1.3.4.pack.js',
+		'jquery-tools' 	=> URL_ROOT.'res/metadataplayer/res/js/jquery.tools.min.js',
+		'tw-widget' 	=> URL_ROOT.'res/js/tw_widget.js',
 		'jquery-mousewheel' => URL_ROOT.'res/jquery.fancybox/fancybox/jquery.mousewheel-3.0.4.pack.js',
-		'swfobject' => URL_ROOT.'res/metadataplayer/res/js/swfobject.js',
+		'swfobject' 	=> URL_ROOT.'res/metadataplayer/res/js/swfobject.js',
+		'json-js' 		=> URL_ROOT.'res/douglascrockford-JSON-js/json2.js',
+
 	),
 	'cdn' => array(
-	    'jquery' => 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js',
-		'raphael' => URL_ROOT.'res/raphael/raphael-min.js',
-		'jquery-ui' => 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js',
-		'niceforms' => URL_ROOT.'res/niceforms/niceforms.js',
-		'jquery-url' => URL_ROOT.'res/js/jquery.url.js',
-		'ldtplayer' => URL_ROOT.'res/metadataplayer/src/js/LdtPlayer.js',
-		'fancybox' => URL_ROOT.'res/jquery.fancybox/fancybox/jquery.fancybox-1.3.4.pack.js',
-		'jquery-tools' => 'http://cdn.jquerytools.org/1.2.4/all/jquery.tools.min.js',
-		'tw-widget' => 'http://widgets.twimg.com/j/2/widget.js',
+	    'jquery' 		=> 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js',
+		'raphael' 		=> URL_ROOT.'res/raphael/raphael-min.js',
+		'jquery-ui' 	=> 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js',
+		'niceforms' 	=> URL_ROOT.'res/niceforms/niceforms.js',
+		'jquery-url' 	=> URL_ROOT.'res/js/jquery.url.js',
+		'ldtplayer' 	=> URL_ROOT.'res/metadataplayer/src/js/LdtPlayer.js',
+		'fancybox' 		=> URL_ROOT.'res/jquery.fancybox/fancybox/jquery.fancybox-1.3.4.pack.js',
+		'jquery-tools' 	=> 'http://cdn.jquerytools.org/1.2.4/all/jquery.tools.min.js',
+		'tw-widget' 	=> 'http://widgets.twimg.com/j/2/widget.js',
 		'jquery-mousewheel' => URL_ROOT.'res/jquery.fancybox/fancybox/jquery.mousewheel-3.0.4.pack.js',
-		'swfobject' => 'http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js',
+		'swfobject' 	=> 'http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js',
+		'json-js' 		=> URL_ROOT.'res/douglascrockford-JSON-js/json2.js',
+		
 	)
 );
 
 $font_registry = array(
 	'local' => array(
 		'PT-Sans_Narrow' => URL_ROOT.'res/fonts/PT_Sans-Narrow-Web-Regular.css',
-		'PT-Sans' => URL_ROOT.'res/fonts/PT_Sans-Web-Regular.css',
-		'Geo' => URL_ROOT.'res/fonts/Geo-Regular.css'
+		'PT-Sans' 		 => URL_ROOT.'res/fonts/PT_Sans-Web-Regular.css',
+		'Geo' 			 => URL_ROOT.'res/fonts/Geo-Regular.css'
 	),
 	'cdn' => array(
 		'PT-Sans_Narrow' => 'http://fonts.googleapis.com/css?family=PT+Sans+Narrow&subset=latin',
-		'PT-Sans' => 'http://fonts.googleapis.com/css?family=PT+Sans&subset=latin',
-		'Geo' => 'http://fonts.googleapis.com/css?family=Geo&subset=latin'
+		'PT-Sans' 		 => 'http://fonts.googleapis.com/css?family=PT+Sans&subset=latin',
+		'Geo' 			 => 'http://fonts.googleapis.com/css?family=Geo&subset=latin'
 	)
 );
 
--- a/web/polemicaltimeline.php	Fri Aug 19 17:53:30 2011 +0200
+++ b/web/polemicaltimeline.php	Sun Aug 28 11:48:30 2011 +0200
@@ -36,6 +36,7 @@
 	
 	<!-- ICI : <?php echo($_SERVER['DOCUMENT_ROOT']); ?> -->
 	<!-- JAVASCRIPT --> 
+	<script type="text/javascript" src="<?php echo(registry_url('json-js','js'));?>"></script>
 	<script type="text/javascript" src="<?php echo(registry_url('jquery','js'));?>"></script>
 	<script type="text/javascript">	
 		$.noConflict();
--- a/web/res/metadataplayer.polemic/src/js/polemic.js	Fri Aug 19 17:53:30 2011 +0200
+++ b/web/res/metadataplayer.polemic/src/js/polemic.js	Sun Aug 28 11:48:30 2011 +0200
@@ -18,10 +18,16 @@
 */
 // CHART TIMELINE / VERSION PROTOTYPE  ::
 
-
+	var RAWTweets;
+	var userPol   = new Array();
+	var userNoPol = new Array();
+	var numberOfTweet = 0;
+	var Users;
+	var TweetPolemic;
 	var yMax	  		= config.height; 
 	var PaperSlider;
-	var  heightOfChart;
+	var heightOfChart;
+	var tweets  = new Array();
 	// Make and define the Raphael area
 	//var paper = Raphael(document.getElementById(config.target),config.width, config.height);
 		
@@ -41,7 +47,7 @@
 		var colors  = new Array("","#1D973D","#C5A62D","#CE0A15","#036AAE","#585858");
 		
 		// array 
-		var tweets  = new Array();
+		//var tweets  = new Array();
 		var element = new Array();
 		var cluster = new Array();
 		var frames  = new Array(frameLenght);
@@ -91,21 +97,31 @@
 		
 		// Refactoring (parametere) ************************************************************
 		// color translastion
+		var qTweet_0  =0;
+		var qTweet_Q  =0;
+		var qTweet_REF=0;
+		var qTweet_OK =0;
+		var qTweet_KO =0;
 		function colorTranslation(value){
 			if(value == "Q"){
+				qTweet_Q+=1;
 				return 2;
 			}else if(value =="REF"){
+				qTweet_REF+=1;
 				return 4;
 			}else if(value =="OK"){
+				qTweet_OK+=1;
 				return 1;
 			}else if(value =="KO"){
+				qTweet_KO+=1;
 				return 3;
 			}else if(value ==""){
+				qTweet_0+=1;
 				return 5;
 			}
 		}
 		
-		
+
 		// Refactoring (parametere) ************************************************************
 		// load tweets send in parameters 
 		__IriSP.jQuery.ajax({
@@ -121,16 +137,25 @@
 		    if(typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
 		    	tweet_annot_type = view.annotation_types[1];
 		    }
-			
+			RAWTweets = json.annotations;
 			
 			__IriSP.jQuery.each(json.annotations, function(i,item) {
 				
 				var MyTime  = Math.floor(item.begin/duration*lineSize);
 				var Myframe = Math.floor(MyTime/lineSize*frameLenght);
 
-				if (typeof(item.meta) !== "undefined" && typeof(item.meta["id-ref"]) !== "undefined" && item.meta["id-ref"] === tweet_annot_type) {
-					if (item.content['polemics'] != undefined && item.content['polemics'][0] != null) {
+				if (typeof(item.meta) !== "undefined" 
+					&& typeof(item.meta["id-ref"]) !== "undefined"
+					&& item.meta["id-ref"] === tweet_annot_type) {
 						
+					var MyTJson = JSON.parse(item.meta['dc:source']['content']);
+					
+						if (item.content['polemics'] != undefined 
+						&& item.content['polemics'][0] != null) {
+						
+						
+					//console.log(item.meta['dc:source']['content']);
+					
 							for(var j=0; j<item.content['polemics'].length; j++){
 									
 									tweets[numberOfTweet] = {
@@ -139,9 +164,13 @@
 												yIndicator:MyTime,
 												yframe:Myframe,
 												title:item.content['title'],
-												timeframe:item.begin
+												timeframe:item.begin,
+												userId: MyTJson.id,
+												userScreenName: MyTJson.screen_name,
+												tsource:MyTJson
 												};
 									numberOfTweet+=1;
+									
 							}
 					}
 					else {
@@ -152,7 +181,11 @@
 									yIndicator:MyTime,
 									yframe:Myframe,
 									title:item.content['title'],
-									timeframe:item.begin
+									timeframe:item.begin,
+									userId: MyTJson.id,
+									userScreenName: MyTJson.screen_name,
+									tsource:MyTJson
+									
 						};
 						numberOfTweet+=1;
 					}
@@ -162,13 +195,203 @@
 					//trace("tweet qualification = ","null");
 				}
 			});	
-			trace("======= ",numberOfTweet);
+			
 		   DrawTweets ();
+		   if(numberOfTweet>0){Report();}
 		   
 		  }
 		 });
+		
+		function pourcent(value,max){
+			var myPourcentage = Math.round(value/max*1000)/10;
+			return myPourcentage;
 			
+		}
+		function round2Dec(value){
+			var myValueRounded =  Math.round(value*100)/100;
+			return myValueRounded
+		}
+		
 
+		function searchKeyValueArray(mykey,myvalue,myarray){
+			for(var i=0; i<myarray.length; i++) {
+				if(myarray[i][mykey]==myvalue){
+					return i;
+					console.log("trouvé !");
+				}
+			}
+			return true;
+		}
+		
+		var tweetConversationel   = new Array();
+		var tweetConversationelSP = 0;
+		var tweetClient		  	  = new Array();
+		var tweetRetweet		  = new Array();
+		var maxRetweet
+		function tweetRetweetCount(mytweet){
+			tweet = mytweet.tsource
+			var retweetIsHere = false;
+			var myRT =	{
+				   			id:'',
+							tweet:tweet,
+							total:1,
+							SPtraine:''
+						} 
+			if(tweet.retweet_count>0){
+				for(var i=0; i<tweetRetweet.length; i++){
+					if(tweetRetweet[i].id==myRT.id){
+						myRT = tweetRetweet[i];
+						retweetIsHere=true;
+					}
+				}
+				
+				if (mytweet.qualification==5){
+					myTclient.numberNsp+=1;
+				}else{
+					myTclient.numberSp+=1;
+				}
+				
+				if(retweetIsHere==false){
+					tweetRetweet.push(myRT);
+				}else{
+					myRT.total+=1;	
+				}
+
+			}
+		}
+		function tweetRetweetReport(tweet){
+			
+		}
+		function tweetClientCount(tweet){
+			var myTclient =	{
+							client:tweet.tsource.source,
+							numberNsp:0,
+							numberSp:0,
+							total:1,
+							}
+			var clientIsHere = false;
+			for(var i=0; i<tweetClient.length; i++) {
+				if (tweetClient[i].client==tweet.tsource.source){
+					clientIsHere = true;
+					myTclient = tweetClient[i];
+				}
+			}
+			if (tweet.qualification==5){
+				myTclient.numberNsp+=1;
+			}else{
+				myTclient.numberSp+=1;
+			}
+			if(clientIsHere==false){
+				tweetClient.push(myTclient);
+			}else{
+				myTclient.total+=1
+			}
+		}
+		function tweetClientSort(a,b){
+			return (a.total < b.total)?1:-1;
+		}
+		function tweetClientReport(){
+			tweetClient.sort(tweetClientSort);
+			console.log("_______________________________");
+			for(var i=0; i<tweetClient.length; i++) {
+				if(tweetClient[i].total>1){
+					console.log("t: "+tweetClient[i].total+" / sp :"+tweetClient[i].numberSp+" : "+tweetClient[i].client);
+				}
+			}
+		}
+		function conversationalCount(tweet){
+			if(tweet.tsource.entities.user_mentions.length>2){
+				if (tweet.qualification!=5){
+					tweetConversationelSP+=1;
+				}
+				var myTc = {
+							polemique:tweet.qualification,
+							user_mentions:tweet.tsource.entities.user_mentions,
+							tsource:tweet
+							}
+				tweetConversationel.push(myTc);
+			}
+		}
+		function conversationalReport(){
+			console.log("_______________________________");
+			console.log("tweets conversationel    : "+tweetConversationel.length);
+			console.log("tweets conversationel sp : "+pourcent(tweetConversationelSP,tweetConversationel.length));
+			console.log("tweets conversationel nsp: "+pourcent(tweetConversationel.length-tweetConversationelSP,tweetConversationel.length));
+		}
+		function tweetsStats(){
+			for(var i=0; i<tweets.length; i++) {
+					conversationalCount(tweets[i])
+					tweetClientCount(tweets[i]);
+					tweetRetweetCount(tweets[i]);
+			}	
+			conversationalReport();
+			tweetClientReport();
+		}		
+		function numberUserUsePolemic(){
+			
+			for(var i=0; i<tweets.length; i++) {
+			/*	
+				var searchKeyValueArrayTest = searchKeyValueArray('userId',tweets[i].userId,userPol);
+					myUser = {
+							  userId: tweets[i].userId,
+							  userScreenName: tweets[i].userScreenName,
+							  
+							  };
+
+				if(searchKeyValueArrayTest==true){
+					myUser = userPol.push({
+										userId: tweets[i].userId,
+										userScreenName: tweets[i].userScreenName,
+										tweets:[]
+										});
+						if (tweets[i].qualification!=5){
+							
+						}else{
+							
+						}
+					
+				}
+				
+			*/	
+				if (tweets[i].qualification!=5){
+					var searchKeyValueArrayTest = searchKeyValueArray('userId',tweets[i].userId,userPol);
+					if(searchKeyValueArrayTest==true){
+						myUser = userPol.push({
+											userId: tweets[i].userId,
+											userScreenName: tweets[i].userScreenName,
+											tweets:[]
+											});
+						//var myUTweets = myUser.tweets = new Array();
+						//myUTweets.push(tweets[i]);
+					}
+				}else{
+					var searchKeyValueArrayTest = searchKeyValueArray('userId',tweets[i].userId,userPol);
+					if(searchKeyValueArrayTest==true){
+						myUser = userNoPol.push({
+											userId: tweets[i].userId,
+											userScreenName: tweets[i].userScreenName,
+											tweets:[]
+											});
+					}
+				}
+			}
+			console.log("user  SP	       : "+userPol.length);
+			console.log("user  nSP  	   : "+userNoPol.length);
+			console.log("nbrTP / user SP   : "+round2Dec((numberOfTweet-qTweet_0)/userPol.length));
+			console.log("nbrT  / user nSP  : "+round2Dec((numberOfTweet-qTweet_0)/userNoPol.length));
+		}
+		function Report(){
+			console.log("_______________________________");
+			console.log("Total de tweets   : "+numberOfTweet)
+			console.log("Total de tweets P : "+(numberOfTweet-qTweet_0))
+			console.log("question     : "+pourcent(qTweet_Q,numberOfTweet)+" %");
+			console.log("reference    : "+pourcent(qTweet_REF,numberOfTweet)+" %");
+			console.log("accord       : "+pourcent(qTweet_OK,numberOfTweet)+" %");
+			console.log("desaccord    : "+pourcent(qTweet_KO,numberOfTweet)+" %");
+			console.log("sans polemic : "+pourcent(qTweet_0,numberOfTweet)+" %");
+			numberUserUsePolemic();
+			tweetsStats();
+		}
 		// tweet Drawing (in raphael) 
 		function DrawTweets (){
 		// GROUPES TWEET ============================================
@@ -220,6 +443,7 @@
 		
 			var tweetDrawed = new Array();
 			var TweetHeight = 5;
+			
 			// DRAW  TWEETS ============================================
 			for(var i=0; i<nbrframes;i++) {
 				var addEheight = 5;
@@ -278,6 +502,7 @@
 		if(typeof(PaperSlider) !== 'undefined' ) {
 			PaperSlider.toFront();
 		}
+		Report();
 	}