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_citizen_median = models.IntegerField(initial=0) signal_immi_mp_median = models.IntegerField(initial=0) signal_immi_mp_hist_1 = models.IntegerField(initial=0) signal_immi_mp_hist_2 = models.IntegerField(initial=0) signal_immi_mp_hist_3 = models.IntegerField(initial=0) signal_immi_mp_hist_4 = models.IntegerField(initial=0) signal_immi_mp_hist_5 = models.IntegerField(initial=0) signal_immi_citizen_hist_1 = models.IntegerField(initial=0) signal_immi_citizen_hist_2 = models.IntegerField(initial=0) signal_immi_citizen_hist_3 = models.IntegerField(initial=0) signal_immi_citizen_hist_4 = models.IntegerField(initial=0) signal_immi_citizen_hist_5 = models.IntegerField(initial=0) signal_immi_hist_max = models.IntegerField(initial=0) string_immi_citizen_median = models.StringField() string_immi_mp_median = models.StringField() # Fields for redistribution signals signal_red_citizen_median = models.IntegerField(initial=0) signal_red_mp_median = models.IntegerField(initial=0) signal_red_mp_hist_1 = models.IntegerField(initial=0) signal_red_mp_hist_2 = models.IntegerField(initial=0) signal_red_mp_hist_3 = models.IntegerField(initial=0) signal_red_mp_hist_4 = models.IntegerField(initial=0) signal_red_mp_hist_5 = models.IntegerField(initial=0) signal_red_citizen_hist_1 = models.IntegerField(initial=0) signal_red_citizen_hist_2 = models.IntegerField(initial=0) signal_red_citizen_hist_3 = models.IntegerField(initial=0) signal_red_citizen_hist_4 = models.IntegerField(initial=0) signal_red_citizen_hist_5 = models.IntegerField(initial=0) signal_red_hist_max = models.IntegerField(initial=0) string_red_citizen_median = models.StringField() string_red_mp_median = models.StringField() # Fields for environment signals signal_env_citizen_median = models.IntegerField(initial=0) signal_env_mp_median = models.IntegerField(initial=0) signal_env_mp_hist_1 = models.IntegerField(initial=0) signal_env_mp_hist_2 = models.IntegerField(initial=0) signal_env_mp_hist_3 = models.IntegerField(initial=0) signal_env_mp_hist_4 = models.IntegerField(initial=0) signal_env_mp_hist_5 = models.IntegerField(initial=0) signal_env_citizen_hist_1 = models.IntegerField(initial=0) signal_env_citizen_hist_2 = models.IntegerField(initial=0) signal_env_citizen_hist_3 = models.IntegerField(initial=0) signal_env_citizen_hist_4 = models.IntegerField(initial=0) signal_env_citizen_hist_5 = models.IntegerField(initial=0) signal_env_hist_max = models.IntegerField(initial=0) string_env_citizen_median = models.StringField() string_env_mp_median = 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"]]) #leftright = models.StringField(widget=widgets.RadioSelectHorizontal, label="Wie würde Sie sich selbst auf einer politischen Links-Rechts-Skala einordnen?", # choices=[["1", "Sehr links"], ["2", "Links"], ["3", "Eher links"], ["4", "Moderat"], ["5", "Eher rechts"], ["6", "Rechts"], ["7", "Sehr rechts"], ["-1", "Ich möchte die Frage nicht beantworten"] ]) 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 belief_fully_agree_immigration_citizens = models.IntegerField(label='Stark erleichtern.', min=0, max=100) belief_agree_immigration_citizens = models.IntegerField(label='Erleichtern.', min=0, max=100) belief_neutral_immigration_citizens = models.IntegerField(label='Unverändert lassen.', min=0, max=100) belief_disagree_immigration_citizens = models.IntegerField(label='Einschränken.', min=0, max=100) belief_fully_disagree_immigration_citizens = models.IntegerField(label='Stark einschränken.', min=0, max=100) belief_fully_agree_immigration_mps = models.IntegerField(label='Stark erleichtern.', min=0, max=100) belief_agree_immigration_mps = models.IntegerField(label='Erleichtern.', min=0, max=100) belief_neutral_immigration_mps = models.IntegerField(label='Unverändert lassen.', min=0, max=100) belief_disagree_immigration_mps = models.IntegerField(label='Einschränken.', min=0, max=100) belief_fully_disagree_immigration_mps = models.IntegerField(label='Stark einschränken.', min=0, max=100) belief_fully_agree_redistribution_citizens = models.IntegerField(label='Stimme voll zu', min=0, max=100) belief_agree_redistribution_citizens = models.IntegerField(label='Stimme zu', min=0, max=100) belief_neutral_redistribution_citizens = models.IntegerField(label='Weder noch', min=0, max=100) belief_disagree_redistribution_citizens = models.IntegerField(label='Stimme nicht zu', min=0, max=100) belief_fully_disagree_redistribution_citizens = models.IntegerField(label='Stimme gar nicht zu', min=0, max=100) belief_fully_agree_redistribution_mps = models.IntegerField(label='Stimme voll zu', min=0, max=100) belief_agree_redistribution_mps = models.IntegerField(label='Stimme zu', min=0, max=100) belief_neutral_redistribution_mps = models.IntegerField(label='Weder noch', min=0, max=100) belief_disagree_redistribution_mps = models.IntegerField(label='Stimme nicht zu', min=0, max=100) belief_fully_disagree_redistribution_mps = models.IntegerField(label='Stimme gar nicht zu', min=0, max=100) belief_fully_agree_environment_citizens = models.IntegerField(label='Stimme voll zu', min=0, max=100) belief_agree_environment_citizens = models.IntegerField(label='Stimme zu', min=0, max=100) belief_neutral_environment_citizens = models.IntegerField(label='Weder noch', min=0, max=100) belief_disagree_environment_citizens = models.IntegerField(label='Stimme nicht zu', min=0, max=100) belief_fully_disagree_environment_citizens = models.IntegerField(label='Stimme gar nicht zu', min=0, max=100) belief_fully_agree_environment_mps = models.IntegerField(label='Stimme voll zu', min=0, max=100) belief_agree_environment_mps = models.IntegerField(label='Stimme zu', min=0, max=100) belief_neutral_environment_mps = models.IntegerField(label='Weder noch', min=0, max=100) belief_disagree_environment_mps = models.IntegerField(label='Stimme nicht zu', min=0, max=100) belief_fully_disagree_environment_mps = models.IntegerField(label='Stimme gar nicht zu', min=0, max=100) ## Posterior beliefs about the attitudes of citizens and MPs belief_fully_agree_immigration_citizens_2 = models.IntegerField(label='Stark erleichtern.', min=0, max=100) belief_agree_immigration_citizens_2 = models.IntegerField(label='Erleichtern.', min=0, max=100) belief_neutral_immigration_citizens_2 = models.IntegerField(label='Unverändert lassen.', min=0, max=100) belief_disagree_immigration_citizens_2 = models.IntegerField(label='Einschränken.', min=0, max=100) belief_fully_disagree_immigration_citizens_2 = models.IntegerField(label='Stark einschränken.', min=0, max=100) belief_fully_agree_immigration_mps_2 = models.IntegerField(label='Stark erleichtern.', min=0, max=100) belief_agree_immigration_mps_2 = models.IntegerField(label='Erleichtern.', min=0, max=100) belief_neutral_immigration_mps_2 = models.IntegerField(label='Unverändert lassen.', min=0, max=100) belief_disagree_immigration_mps_2 = models.IntegerField(label='Einschränken.', min=0, max=100) belief_fully_disagree_immigration_mps_2 = models.IntegerField(label='Stark einschränken.', min=0, max=100) belief_fully_agree_redistribution_citizens_2 = models.IntegerField(label='Stimme voll zu', min=0, max=100) belief_agree_redistribution_citizens_2 = models.IntegerField(label='Stimme zu', min=0, max=100) belief_neutral_redistribution_citizens_2 = models.IntegerField(label='Weder noch', min=0, max=100) belief_disagree_redistribution_citizens_2 = models.IntegerField(label='Stimme nicht zu', min=0, max=100) belief_fully_disagree_redistribution_citizens_2 = models.IntegerField(label='Stimme gar nicht zu', min=0, max=100) belief_fully_agree_redistribution_mps_2 = models.IntegerField(label='Stimme voll zu', min=0, max=100) belief_agree_redistribution_mps_2 = models.IntegerField(label='Stimme zu', min=0, max=100) belief_neutral_redistribution_mps_2 = models.IntegerField(label='Weder noch', min=0, max=100) belief_disagree_redistribution_mps_2 = models.IntegerField(label='Stimme nicht zu', min=0, max=100) belief_fully_disagree_redistribution_mps_2 = models.IntegerField(label='Stimme gar nicht zu', min=0, max=100) belief_fully_agree_environment_citizens_2 = models.IntegerField(label='Stimme voll zu', min=0, max=100) belief_agree_environment_citizens_2 = models.IntegerField(label='Stimme zu', min=0, max=100) belief_neutral_environment_citizens_2 = models.IntegerField(label='Weder noch', min=0, max=100) belief_disagree_environment_citizens_2 = models.IntegerField(label='Stimme nicht zu', min=0, max=100) belief_fully_disagree_environment_citizens_2 = models.IntegerField(label='Stimme gar nicht zu', min=0, max=100) belief_fully_agree_environment_mps_2 = models.IntegerField(label='Stimme voll zu', min=0, max=100) belief_agree_environment_mps_2 = models.IntegerField(label='Stimme zu', min=0, max=100) belief_neutral_environment_mps_2 = models.IntegerField(label='Weder noch', min=0, max=100) belief_disagree_environment_mps_2 = models.IntegerField(label='Stimme nicht zu', min=0, max=100) belief_fully_disagree_environment_mps_2 = models.IntegerField(label='Stimme gar nicht zu', min=0, max=100) #belief_agree_redistribution_citizens = models.FloatField(label='Was denken Sie, wie viele von 100 erwachsenen deutschen Bürgerinnen und Bürgern antworten "Die Regierung sollte Maßnahmen ergreifen, um die Einkommensunterschiede zu verringern"?', min=0, max=100) #belief_agree_environment_citizens = models.FloatField(label='Was denken Sie, wie viele von 100 erwachsenen deutschen Bürgerinnen und Bürgern antworten "Politik zur Bekämpfung des Klimawandels ist schon zu weit gegangen"?', min=0, max=100) #belief_agree_immigration_mps = models.FloatField(label='Was denken Sie, wie viele von 100 Angehörige des deutschen Bundestags antworten "Zuzugsmöglichkeiten für Ausländer sollten eingeschränkt werden"?', min=0, max=100) #belief_agree_redistribution_mps = models.FloatField(label='Was denken Sie, wie viele von 100 Angehörige des deutschen Bundestags antworten "Die Regierung sollte Maßnahmen ergreifen, um die Einkommensunterschiede zu verringern"?', min=0, max=100) #belief_agree_environment_mps = models.FloatField(label='Was denken Sie, wie viele von 100 Angehörige des deutschen Bundestags antworten "Politik zur Bekämpfung des Klimawandels ist schon zu weit gegangen"?', min=0, max=100) #belief_agree_immigration_citizens_2 = models.FloatField(label='Was denken Sie nun, wie viele von 100 erwachsenen deutschen Bürgerinnen und Bürgern antworten "Zuzugsmöglichkeiten für Ausländer sollten eingeschränkt werden"?', min=0, max=100) #belief_agree_redistribution_citizens_2 = models.FloatField(label='Was denken Sie nun, wie viele von 100 erwachsenen deutschen Bürgerinnen und Bürgern antworten "Die Regierung sollte Maßnahmen ergreifen, um die Einkommensunterschiede zu verringern"?', min=0, max=100) #belief_agree_environment_citizens_2 = models.FloatField(label='Was denken Sie nun, wie viele von 100 erwachsenen deutschen Bürgerinnen und Bürgern antworten "Politik zur Bekämpfung des Klimawandels ist schon zu weit gegangen"?', min=0, max=100) #belief_agree_immigration_mps_2 = models.FloatField(label='Was denken Sie nun, wie viele von 100 Angehörige des deutschen Bundestags antworten "Zuzugsmöglichkeiten für Ausländer sollten eingeschränkt werden"?', min=0, max=100) #belief_agree_redistribution_mps_2 = models.FloatField(label='Was denken Sie nun, wie viele von 100 Angehörige des deutschen Bundestags antworten "Die Regierung sollte Maßnahmen ergreifen, um die Einkommensunterschiede zu verringern"?', min=0, max=100) #belief_agree_environment_mps_2 = models.FloatField(label='Was denken Sie nun, wie viele von 100 Angehörige des deutschen Bundestags antworten "Politik zur Bekämpfung des Klimawandels ist schon zu weit gegangen"?', min=0, max=100) class Subsession(BaseSubsession): def creating_session(self): # Read immigration signal data data_signal_immi_citizen_median_init = pandas.read_csv("signal_immi_data_citizen_median.csv") self.session.vars["data_signal_immi_citizen_median"] = data_signal_immi_citizen_median_init data_signal_immi_mp_median_init = pandas.read_csv("signal_immi_data_mp_median.csv") self.session.vars["data_signal_immi_mp_median"] = data_signal_immi_mp_median_init data_signal_immi_citizen_hist_init = pandas.read_csv("signal_immi_data_citizen_hist.csv") self.session.vars["data_signal_immi_citizen_hist"] = data_signal_immi_citizen_hist_init data_signal_immi_mp_hist_init = pandas.read_csv("signal_immi_data_mp_hist.csv") self.session.vars["data_signal_immi_mp_hist"] = data_signal_immi_mp_hist_init # Read redistribution signal data data_signal_red_citizen_median_init = pandas.read_csv("signal_red_data_citizen_median.csv") self.session.vars["data_signal_red_citizen_median"] = data_signal_red_citizen_median_init data_signal_red_mp_median_init = pandas.read_csv("signal_red_data_mp_median.csv") self.session.vars["data_signal_red_mp_median"] = data_signal_red_mp_median_init data_signal_red_citizen_hist_init = pandas.read_csv("signal_red_data_citizen_hist.csv") self.session.vars["data_signal_red_citizen_hist"] = data_signal_red_citizen_hist_init data_signal_red_mp_hist_init = pandas.read_csv("signal_red_data_mp_hist.csv") self.session.vars["data_signal_red_mp_hist"] = data_signal_red_mp_hist_init # Read environmental protection signal data data_signal_env_citizen_median_init = pandas.read_csv("signal_env_data_citizen_median.csv") self.session.vars["data_signal_env_citizen_median"] = data_signal_env_citizen_median_init data_signal_env_mp_median_init = pandas.read_csv("signal_env_data_mp_median.csv") self.session.vars["data_signal_env_mp_median"] = data_signal_env_mp_median_init data_signal_env_citizen_hist_init = pandas.read_csv("signal_env_data_citizen_hist.csv") self.session.vars["data_signal_env_citizen_hist"] = data_signal_env_citizen_hist_init data_signal_env_mp_hist_init = pandas.read_csv("signal_env_data_mp_hist.csv") self.session.vars["data_signal_env_mp_hist"] = data_signal_env_mp_hist_init # Create random values for share of MPs and citizens who agree with a policy statement, not used in this version #possible_values_citizens = [21, 27, 34, 41, 47, 53, 59, 65, 72, 78, 84, 89, 93] # Possible infos about citizens #possible_values_mps = [5, 11, 17, 23, 31, 37, 43, 49, 55, 61, 67, 73, 79] # Possible infos about MPs import itertools 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 # Assign alternative (simple) signals #p.info_citizens = random.choice(possible_values_citizens) #p.info_mps = random.choice(possible_values_mps)