from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random import pandas import random import string author = 'Laurenz R. K. Günther' doc = """ This is the first part. All templates are fixed. """ class Constants(BaseConstants): name_in_url = 'Group_counter' players_per_group = None num_rounds = 1 class Group(BaseGroup): number_males = models.IntegerField(initial=0) number_females = models.IntegerField(initial=0) #number_diverse = models.IntegerField(initial=0) age_group_1 = models.IntegerField(initial=0) age_group_2 = models.IntegerField(initial=0) age_group_3 = models.IntegerField(initial=0) age_group_4 = models.IntegerField(initial=0) uneducated = models.IntegerField(initial=0) educated = models.IntegerField(initial=0) income_group_1 = models.IntegerField(initial=0) income_group_2 = models.IntegerField(initial=0) income_group_3 = models.IntegerField(initial=0) subject_numbering = models.IntegerField(initial=0) class Player(BasePlayer): is_quota_full = models.BooleanField() count_females = models.IntegerField(initial=0) count_males = models.IntegerField(initial=0) #count_diverse = models.IntegerField(initial=0) count_age_group_1 = models.IntegerField(initial=0) count_age_group_2 = models.IntegerField(initial=0) count_age_group_3 = models.IntegerField(initial=0) count_age_group_4 = models.IntegerField(initial=0) count_uneducated = models.IntegerField(initial=0) count_educated = models.IntegerField(initial=0) count_income_group_1 = models.IntegerField(initial=0) count_income_group_2 = models.IntegerField(initial=0) count_income_group_3 = models.IntegerField(initial=0) # Fields for immigration signals signal_immi_cdu_median = models.IntegerField(initial=0) signal_immi_spd_median = models.IntegerField(initial=0) signal_immi_gruene_median = models.IntegerField(initial=0) signal_immi_fdp_median = models.IntegerField(initial=0) signal_immi_linke_median = models.IntegerField(initial=0) string_immi_cdu_median = models.StringField() string_immi_spd_median = models.StringField() string_immi_gruene_median = models.StringField() string_immi_fdp_median = models.StringField() string_immi_linke_median = models.StringField() string_immi_own_attitude = models.StringField() string_rg_magnitude = models.StringField() # Fields for redistribution signals signal_red_cdu_median = models.IntegerField(initial=0) signal_red_afd_median = models.IntegerField(initial=0) signal_red_spd_median = models.IntegerField(initial=0) signal_red_gruene_median = models.IntegerField(initial=0) signal_red_fdp_median = models.IntegerField(initial=0) signal_red_linke_median = models.IntegerField(initial=0) string_red_cdu_median = models.StringField() string_red_afd_median = models.StringField() string_red_spd_median = models.StringField() string_red_gruene_median = models.StringField() string_red_fdp_median = models.StringField() string_red_linke_median = models.StringField() string_red_own_attitude = models.StringField() # Fields for environment signals signal_env_cdu_median = models.IntegerField(initial=0) signal_env_afd_median = models.IntegerField(initial=0) signal_env_spd_median = models.IntegerField(initial=0) signal_env_gruene_median = models.IntegerField(initial=0) signal_env_fdp_median = models.IntegerField(initial=0) signal_env_linke_median = models.IntegerField(initial=0) string_env_cdu_median = models.StringField() string_env_afd_median = models.StringField() string_env_spd_median = models.StringField() string_env_gruene_median = models.StringField() string_env_fdp_median = models.StringField() string_env_linke_median = models.StringField() string_env_own_attitude = models.StringField() color = models.StringField() info_citizens = models.IntegerField() info_mps = models.IntegerField() agreed_to_conditions = models.BooleanField( label='Ich habe die Instruktionen gelesen und verstanden und will an der Studie teilnehmen.', choices=[[False, "Ja"], [True, "Nein"]]) captcha = models.StringField(label="Bitte tragen Sie hier die oben dargestellten Buchstaben ein.") attention_1a = models.CharField(label="Sehr häufig", blank=True) attention_1b = models.CharField(label="Häufig", blank=True) attention_1c = models.CharField(label="Manchmal", blank=True) attention_1d = models.CharField(label="Selten", blank=True) attention_1e = models.CharField(label="Sehr selten", blank=True) gender = models.StringField(widget=widgets.RadioSelectHorizontal, label="Welches Geschlecht haben Sie?", choices=[["0", "Männlich"], ["1", "Weiblich"]]) age = models.IntegerField(label="Wie alt sind Sie?", min=18, max=130) #zip_code = models.FloatField(label="Bitte nennen die die Postleitzahl Ihres Hauptwohnsitzes.") education = models.StringField(widget=widgets.RadioSelect, label="Wählen Sie bitte aus den folgenden Möglichkeiten Ihren höchsten erreichten Schulabschluss oder Hochschulabschluss aus.", choices=[["1", "Kein Schulabschluss"], ["2", "Hauptschulabschluss"], ["3", "Mittlere Reife"], ["4", "Fachhochschulreife oder Hochschulreife"], ["5", "Universitätsabschluss"] ] ) income = models.StringField(widget=widgets.RadioSelect, label="Wie hoch war das monatliche Nettoeinkommen Ihres Haushalts im letzten Monat?", choices=[["1", "Bis 2000 Euro"], ["2", "2000 Euro bis 3600 Euro"], ["3", "Mehr als 3600 Euro"]]) attitude_immigration = models.StringField(widget=widgets.RadioSelectHorizontal, label="Wie sollte die Regierung Ihrer Meinung nach die Zuzugsmöglichkeiten für Ausländer gestalten?", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) attitude_redistribution = models.StringField(widget=widgets.RadioSelectHorizontal, label="Die Regierung sollte Maßnahmen ergreifen, um die Einkommensunterschiede zu verringern.", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) attitude_environment = models.StringField(widget=widgets.RadioSelectHorizontal, label="Zur Reduzierung des Klimawandels sollten die Abgaben auf fossile Brennstoffe wie Öl, Gas und Kohle erhöht werden.", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) attitude_immigration_confidence = models.StringField(widget=widgets.RadioSelectHorizontal, label="Wie sicher sind Sie, dass Sie über das Wissen und die Erfahrung verfügen, um die Politik im Bereich Zuzugsmöglichkeiten für Ausländer zu bewerten?", choices=[["1", "Sehr unsicher"], ["2", "Eher unsicher"], ["3", "Eher sicher"], ["4", "Sehr sicher"]] ) attitude_immigration_importance = models.StringField(widget=widgets.RadioSelectHorizontal, label="Wie wichtig finden Sie das Thema Zuzugsmöglichkeiten für Ausländer?", choices=[["1", "Sehr unwichtig"], ["2", "Eher unwichtig"], ["3", "Eher wichtig"], ["4", "Sehr wichtig"]] ) attitude_redistribution_confidence = models.StringField(widget=widgets.RadioSelectHorizontal, label="Wie sicher sind Sie, dass Sie über das Wissen und die Erfahrung verfügen, um die Umverteilungspolitik zu bewerten?", choices=[["1", "Sehr unsicher"], ["2", "Eher unsicher"], ["3", "Eher sicher"], ["4", "Sehr sicher"]] ) attitude_redistribution_importance = models.StringField(widget=widgets.RadioSelectHorizontal, label="Wie wichtig finden Sie das Thema Umverteilung?", choices=[["1", "Sehr unwichtig"], ["2", "Eher unwichtig"], ["3", "Eher wichtig"], ["4", "Sehr wichtig"]] ) attitude_environment_confidence = models.StringField(widget=widgets.RadioSelectHorizontal, label="Wie sicher sind Sie, dass Sie über das Wissen und die Erfahrung verfügen, um die Politik im Bereich Klimawandel zu bewerten?", choices=[["1", "Sehr unsicher"], ["2", "Eher unsicher"], ["3", "Eher sicher"], ["4", "Sehr sicher"]] ) attitude_environment_importance = models.StringField(widget=widgets.RadioSelectHorizontal, label="Wie wichtig finden Sie das Thema Klimawandel?", choices=[["1", "Sehr unwichtig"], ["2", "Eher unwichtig"], ["3", "Eher wichtig"], ["4", "Sehr wichtig"]] ) ## Prior beliefs about the attitudes of citizens and MPs prior_belief_median_immigration_cdu = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) prior_belief_median_immigration_afd = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) prior_belief_median_immigration_spd = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) prior_belief_median_immigration_gruene = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) prior_belief_median_immigration_fdp = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) prior_belief_median_immigration_linke = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) prior_belief_median_redistribution_cdu = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) prior_belief_median_redistribution_afd = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) prior_belief_median_redistribution_spd = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) prior_belief_median_redistribution_gruene = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) prior_belief_median_redistribution_fdp = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) prior_belief_median_redistribution_linke = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) prior_belief_median_environment_cdu = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) prior_belief_median_environment_afd = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) prior_belief_median_environment_spd = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) prior_belief_median_environment_gruene = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) prior_belief_median_environment_fdp = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) prior_belief_median_environment_linke = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) # Posterior beliefs about the attitudes of parties posterior_belief_median_immigration_cdu = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) posterior_belief_median_immigration_afd = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) posterior_belief_median_immigration_spd = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) posterior_belief_median_immigration_gruene = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) posterior_belief_median_immigration_fdp = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) posterior_belief_median_immigration_linke = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stark erleichtern."], ["2", "Erleichtern."], ["3", "Unverändert lassen."], ["4", "Einschränken."], ["5", "Stark einschränken."]] ) posterior_belief_median_redistribution_cdu = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) posterior_belief_median_redistribution_spd = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) posterior_belief_median_redistribution_gruene = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) posterior_belief_median_redistribution_fdp = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) posterior_belief_median_redistribution_linke = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) posterior_belief_median_environment_cdu = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) posterior_belief_median_environment_afd = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) posterior_belief_median_environment_spd = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) posterior_belief_median_environment_gruene = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) posterior_belief_median_environment_fdp = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) posterior_belief_median_environment_linke = models.StringField(widget=widgets.RadioSelectHorizontal, label="", choices=[["1", "Stimme voll zu"], ["2", "Stimme zu"], ["3", "Teils/teils"], ["4", "Stimme nicht zu"], ["5", "Stimme gar nicht zu"]] ) class Subsession(BaseSubsession): def creating_session(self): # Read immigration signal data data_signal_immi_cdu_median_init = pandas.read_csv("signal_immi_data_cdu_median.csv") self.session.vars["data_signal_immi_cdu_median"] = data_signal_immi_cdu_median_init #data_signal_immi_afd_median_init = pandas.read_csv("signal_immi_data_afd_median.csv") #self.session.vars["data_signal_immi_afd_median"] = data_signal_immi_afd_median_init data_signal_immi_spd_median_init = pandas.read_csv("signal_immi_data_spd_median.csv") self.session.vars["data_signal_immi_spd_median"] = data_signal_immi_spd_median_init data_signal_immi_gruene_median_init = pandas.read_csv("signal_immi_data_gruene_median.csv") self.session.vars["data_signal_immi_gruene_median"] = data_signal_immi_gruene_median_init data_signal_immi_fdp_median_init = pandas.read_csv("signal_immi_data_fdp_median.csv") self.session.vars["data_signal_immi_fdp_median"] = data_signal_immi_fdp_median_init data_signal_immi_linke_median_init = pandas.read_csv("signal_immi_data_linke_median.csv") self.session.vars["data_signal_immi_linke_median"] = data_signal_immi_linke_median_init # Read redistribution signal data data_signal_red_cdu_median_init = pandas.read_csv("signal_red_data_cdu_median.csv") self.session.vars["data_signal_red_cdu_median"] = data_signal_red_cdu_median_init data_signal_red_afd_median_init = pandas.read_csv("signal_red_data_afd_median.csv") self.session.vars["data_signal_red_afd_median"] = data_signal_red_afd_median_init data_signal_red_spd_median_init = pandas.read_csv("signal_red_data_spd_median.csv") self.session.vars["data_signal_red_spd_median"] = data_signal_red_spd_median_init data_signal_red_gruene_median_init = pandas.read_csv("signal_red_data_gruene_median.csv") self.session.vars["data_signal_red_gruene_median"] = data_signal_red_gruene_median_init data_signal_red_fdp_median_init = pandas.read_csv("signal_red_data_fdp_median.csv") self.session.vars["data_signal_red_fdp_median"] = data_signal_red_fdp_median_init data_signal_red_linke_median_init = pandas.read_csv("signal_red_data_linke_median.csv") self.session.vars["data_signal_red_linke_median"] = data_signal_red_linke_median_init # Read environmental protection signal data data_signal_env_cdu_median_init = pandas.read_csv("signal_env_data_cdu_median.csv") self.session.vars["data_signal_env_cdu_median"] = data_signal_env_cdu_median_init data_signal_env_afd_median_init = pandas.read_csv("signal_env_data_afd_median.csv") self.session.vars["data_signal_env_afd_median"] = data_signal_env_afd_median_init data_signal_env_spd_median_init = pandas.read_csv("signal_env_data_spd_median.csv") self.session.vars["data_signal_env_spd_median"] = data_signal_env_spd_median_init data_signal_env_gruene_median_init = pandas.read_csv("signal_env_data_gruene_median.csv") self.session.vars["data_signal_env_gruene_median"] = data_signal_env_gruene_median_init data_signal_env_fdp_median_init = pandas.read_csv("signal_env_data_fdp_median.csv") self.session.vars["data_signal_env_fdp_median"] = data_signal_env_fdp_median_init data_signal_env_linke_median_init = pandas.read_csv("signal_env_data_linke_median.csv") self.session.vars["data_signal_env_linke_median"] = data_signal_env_linke_median_init # RANDOMIZE TREATMENTS import itertools colors = itertools.cycle(['treatment_immigration']) # ONLY TREATMENT IMMIGRATION FOR TESTING #colors = itertools.cycle(['treatment_immigration', 'treatment_redistribution', 'treatment_environment']) for p in self.get_players(): p.color = next(colors) p.participant.vars["color"] = p.color