playground.johannes.socialnetworks.survey.ivt2009.analysis.deprecated.DistanceSocioAttribute.java Source code

Java tutorial

Introduction

Here is the source code for playground.johannes.socialnetworks.survey.ivt2009.analysis.deprecated.DistanceSocioAttribute.java

Source

/* *********************************************************************** *
 * project: org.matsim.*
 * DistanceSocioAttribute.java
 *                                                                         *
 * *********************************************************************** *
 *                                                                         *
 * copyright       : (C) 2010 by the members listed in the COPYING,        *
 *                   LICENSE and WARRANTY file.                            *
 * email           : info at matsim dot org                                *
 *                                                                         *
 * *********************************************************************** *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *   See also COPYING, LICENSE and WARRANTY file                           *
 *                                                                         *
 * *********************************************************************** */
package playground.johannes.socialnetworks.survey.ivt2009.analysis.deprecated;

import gnu.trove.TDoubleDoubleHashMap;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;

import playground.johannes.sna.graph.Graph;
import playground.johannes.sna.graph.analysis.AnalyzerTask;
import playground.johannes.sna.graph.analysis.Degree;
import playground.johannes.sna.math.Discretizer;
import playground.johannes.sna.math.Distribution;
import playground.johannes.sna.math.Histogram;
import playground.johannes.sna.math.LinearDiscretizer;
import playground.johannes.sna.snowball.analysis.ObservedDegree;
import playground.johannes.sna.util.TXTWriter;
import playground.johannes.socialnetworks.graph.social.SocialGraph;
import playground.johannes.socialnetworks.graph.social.SocialVertex;
import playground.johannes.socialnetworks.graph.spatial.analysis.AcceptanceProbability;
import playground.johannes.socialnetworks.graph.spatial.analysis.Distance;
import playground.johannes.socialnetworks.snowball2.spatial.analysis.ObservedDistance;

import com.vividsolutions.jts.geom.Point;

/**
 * @author illenberger
 * 
 */
public class DistanceSocioAttribute extends AnalyzerTask {

    private Set<Point> choiceSet;

    public DistanceSocioAttribute(Set<Point> choiceSet) {
        this.choiceSet = choiceSet;
    }

    @Override
    public void analyze(Graph g, Map<String, DescriptiveStatistics> stats) {
        try {
            SocialGraph graph = (SocialGraph) g;
            Distance dist = new ObservedDistance();
            AcceptanceProbability acc = new AcceptanceProbability();
            Degree degree = new ObservedDegree();

            Discretizer discretizer = new LinearDiscretizer(1.0);
            /*
             * male
             */
            Set<SocialVertex> vertices = new HashSet<SocialVertex>();
            for (SocialVertex vertex : graph.getVertices()) {
                if ("m".equalsIgnoreCase(vertex.getPerson().getPerson().getSex()))
                    vertices.add(vertex);
            }

            DescriptiveStatistics ds = new DescriptiveStatistics();
            ds.addValue(ResponseRate.responseRate((Set) vertices));
            stats.put("alpha_male", ds);

            Distribution distr = dist.distribution(vertices);
            Distribution.writeHistogram(distr.absoluteDistributionLog2(1000), getOutputDirectory() + "/d_male_txt");
            ds = new DescriptiveStatistics();
            ds.addValue(distr.mean());
            stats.put("d_mean_male", ds);

            DescriptiveStatistics dStats = acc.distribution(vertices, choiceSet);
            TDoubleDoubleHashMap hist = Histogram.createHistogram(dStats, new LinearDiscretizer(1000.0), false);
            TXTWriter.writeMap(hist, "d", "p", getOutputDirectory() + "/p_acc_male.txt");
            //         Distribution.writeHistogram(dStats.absoluteDistributionLog2(1000), getOutputDirectory()+"/p_acc_male.txt");

            DescriptiveStatistics kDistr = degree.statistics(vertices);
            stats.put("k_male", kDistr);
            Distribution.writeHistogram(Histogram.createHistogram(kDistr, new LinearDiscretizer(1.0), false),
                    getOutputDirectory() + "/k_male.txt");

            System.out.println("Male: " + kDistr.getValues().length);
            /*
             * female
             */
            vertices = new HashSet<SocialVertex>();
            for (SocialVertex vertex : graph.getVertices()) {
                if ("f".equalsIgnoreCase(vertex.getPerson().getPerson().getSex()))
                    vertices.add(vertex);
            }

            ds = new DescriptiveStatistics();
            ds.addValue(ResponseRate.responseRate((Set) vertices));
            stats.put("alpha_female", ds);

            distr = dist.distribution(vertices);
            Distribution.writeHistogram(distr.absoluteDistributionLog2(1000),
                    getOutputDirectory() + "/d_female_txt");
            ds = new DescriptiveStatistics();
            ds.addValue(distr.mean());
            stats.put("d_femean_male", ds);

            dStats = acc.distribution(vertices, choiceSet);
            hist = Histogram.createHistogram(dStats, new LinearDiscretizer(1000.0), false);
            TXTWriter.writeMap(hist, "d", "p", getOutputDirectory() + "/p_acc_female.txt");
            //         Distribution.writeHistogram(acc.distribution(vertices, choiceSet).absoluteDistributionLog2(1000), getOutputDirectory()+"/p_acc_female.txt");

            kDistr = degree.statistics(vertices);
            stats.put("k_female", kDistr);
            Distribution.writeHistogram(Histogram.createHistogram(kDistr, new LinearDiscretizer(1.0), false),
                    getOutputDirectory() + "/k_female.txt");

            System.out.println("Female: " + kDistr.getValues().length);
            /*
             * edu
             */
            //         Education edu = new Education();
            //         edu.socioMatrix(graph);
            //         for(String att : edu.getAttributes()) {
            //            vertices = new HashSet<SocialVertex>();
            //            for (SocialVertex vertex : graph.getVertices()) {
            //               if (att.equalsIgnoreCase(vertex.getPerson().getEducation()))
            //                  vertices.add(vertex);
            //            }
            //
            //            stats.put("alpha_edu"+att, ResponseRate.responseRate((Set) vertices));
            //            
            //            distr = dist.distribution(vertices);
            //            Distribution.writeHistogram(distr.absoluteDistributionLog2(1000), getOutputDirectory() + "/d_edu"+att+".txt");
            //            stats.put("d_mean_edu"+att, distr.mean());
            //         
            //            dStats = acc.distribution(vertices, choiceSet);
            //            hist = Histogram.createHistogram(dStats, new LinearDiscretizer(1000.0), false);
            //            TXTWriter.writeMap(hist, "d", "p", getOutputDirectory()+"/p_acc_edu"+att+".txt");
            ////            Distribution.writeHistogram(acc.distribution(vertices, choiceSet).absoluteDistributionLog2(1000), getOutputDirectory()+"/p_acc_edu"+att+".txt");
            //            
            //            kDistr = degree.distribution(vertices);
            //            stats.put("k_mean_edu"+att, kDistr.getMean());
            //            Distribution.writeHistogram(Histogram.createHistogram(kDistr, new LinearDiscretizer(1.0), false), getOutputDirectory() + "/k_edu"+att+".txt");
            //
            //            System.out.println("Edu"+att+": " + kDistr.getValues().length);
            //         }
            /*
             * income
             */
            Map<Integer, Set<SocialVertex>> incomes = new HashMap<Integer, Set<SocialVertex>>();
            for (SocialVertex vertex : graph.getVertices()) {
                Set<SocialVertex> set = incomes.get(vertex.getPerson().getIncome());
                if (set == null) {
                    set = new HashSet<SocialVertex>();
                    incomes.put(vertex.getPerson().getIncome(), set);
                }
                set.add(vertex);
            }

            for (Entry<Integer, Set<SocialVertex>> entry : incomes.entrySet()) {
                vertices = entry.getValue();
                distr = dist.distribution(vertices);
                String att = String.valueOf(entry.getKey());

                Distribution.writeHistogram(distr.absoluteDistributionLog2(1000),
                        getOutputDirectory() + "/d_income" + att + ".txt");
                ds = new DescriptiveStatistics();
                ds.addValue(distr.mean());
                stats.put("d_mean_income" + att, ds);

                dStats = acc.distribution(vertices, choiceSet);
                hist = Histogram.createHistogram(dStats, new LinearDiscretizer(1000.0), false);
                TXTWriter.writeMap(hist, "d", "p", getOutputDirectory() + "/p_acc_income" + att + ".txt");
                //            Distribution.writeHistogram(acc.distribution(vertices, choiceSet).absoluteDistributionLog2(1000), getOutputDirectory()+"/p_acc_income"+att+".txt");

                kDistr = degree.statistics(vertices);
                stats.put("k_income" + att, kDistr);
                Distribution.writeHistogram(Histogram.createHistogram(kDistr, discretizer, false),
                        getOutputDirectory() + "/k_income" + att + ".txt");

                System.out.println("Income" + att + ": " + kDistr.getValues().length);
            }
            /*
             * civil status
             */
            Map<String, Set<SocialVertex>> civilstatus = new HashMap<String, Set<SocialVertex>>();
            for (SocialVertex vertex : graph.getVertices()) {
                Set<SocialVertex> set = civilstatus.get(vertex.getPerson().getCiviStatus());
                if (set == null) {
                    set = new HashSet<SocialVertex>();
                    civilstatus.put(vertex.getPerson().getCiviStatus(), set);
                }
                set.add(vertex);
            }

            for (Entry<String, Set<SocialVertex>> entry : civilstatus.entrySet()) {
                vertices = entry.getValue();
                distr = dist.distribution(vertices);
                String att = entry.getKey();

                Distribution.writeHistogram(distr.absoluteDistributionLog2(1000),
                        getOutputDirectory() + "/d_cstatus" + att + ".txt");
                ds = new DescriptiveStatistics();
                ds.addValue(distr.mean());
                stats.put("d_mean_cstatus" + att, ds);

                dStats = acc.distribution(vertices, choiceSet);
                hist = Histogram.createHistogram(dStats, new LinearDiscretizer(1000.0), false);
                TXTWriter.writeMap(hist, "d", "p", getOutputDirectory() + "/p_acc_cstatus" + att + ".txt");
                //            Distribution.writeHistogram(acc.distribution(vertices, choiceSet).absoluteDistributionLog2(1000), getOutputDirectory()+"/p_acc_cstatus"+att+".txt");

                kDistr = degree.statistics(vertices);
                stats.put("k_cstatus" + att, kDistr);
                Distribution.writeHistogram(Histogram.createHistogram(kDistr, discretizer, false),
                        getOutputDirectory() + "/k_cstatus" + att + ".txt");

                System.out.println("CivStatus" + att + ": " + kDistr.getValues().length);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}