File size: 5,838 Bytes
b070298 3a15783 b070298 3a15783 b070298 3a15783 b070298 3a15783 39756f7 3a15783 b070298 3a15783 b070298 3a15783 b070298 3a15783 aace1e6 3a15783 aace1e6 3a15783 aace1e6 b070298 3a15783 39756f7 3a15783 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
import gradio as gr
# Define the 44 BFI questions
questions = [
"1. Talks a lot",
"2. Notices other people’s weak points",
"3. Does things carefully and completely",
"4. Is sad, depressed",
"5. Is original, comes up with new ideas",
"6. Keeps their thoughts to themselves",
"7. Is helpful and not selfish with others",
"8. Can be kind of careless",
"9. Is relaxed, handles stress well",
"10. Is curious about lots of different things",
"11. Has a lot of energy",
"12. Starts arguments with others",
"13. Is a good, hard worker",
"14. Can be tense; not always easy going",
"15. Clever; thinks a lot",
"16. Makes things exciting",
"17. Forgives others easily",
"18. Isn’t very organized",
"19. Worries a lot",
"20. Has a good, active imagination",
"21. Tends to be quiet",
"22. Usually trusts people",
"23. Tends to be lazy",
"24. Doesn’t get upset easily; steady",
"25. Is creative and inventive",
"26. Has a good, strong personality",
"27. Can be cold and distant with others",
"28. Keeps working until things are done",
"29. Can be moody",
"30. Likes artistic and creative experiences",
"31. Is kind of shy",
"32. Kind and considerate to almost everyone",
"33. Does things quickly and carefully",
"34. Stays calm in difficult situations",
"35. Likes work that is the same every time",
"36. Is outgoing; likes to be with people",
"37. Is sometimes rude to others",
"38. Makes plans and sticks to them",
"39. Get nervous easily",
"40. Likes to think and play with ideas",
"41. Doesn’t like artistic things (plays, music)",
"42. Likes to cooperate; goes along with others",
"43. Has trouble paying attention",
"44. Knows a lot about art, music and books"
]
# Scoring function based on the provided SPSS syntax
def compute_bfi_scores(*args):
responses = list(args)
# Convert 'No response' to None, else to int
processed = []
for r in responses:
if r == "No response":
processed.append(None)
else:
processed.append(int(r))
# Define traits with their respective items and scoring parameters
traits = {
'Extraversion': {
'positive': [1, 11, 16, 26, 36],
'reverse': [6, 21, 31],
'threshold': 1,
'formula_pos_mult': 5,
'formula_reverse_mult': 3,
'formula_reverse_const': 12
},
'Agreeableness': {
'positive': [7, 17, 22, 32, 42],
'reverse': [2, 12, 27, 37],
'threshold': 1,
'formula_pos_mult': 5,
'formula_reverse_mult':4,
'formula_reverse_const':16
},
'Conscientiousness': {
'positive': [3, 13, 28, 33, 38],
'reverse': [8, 18, 23, 43],
'threshold': 1,
'formula_pos_mult':5,
'formula_reverse_mult':4,
'formula_reverse_const':16
},
'Neuroticism':{
'positive':[4, 14, 19, 29, 39],
'reverse':[9, 24, 34],
'threshold':1,
'formula_pos_mult':5,
'formula_reverse_mult':3,
'formula_reverse_const':12
},
'Openness':{
'positive':[5, 10, 15, 20, 25, 30, 40, 44],
'reverse':[35, 41],
'threshold':2,
'formula_pos_mult':8,
'formula_reverse_mult':2,
'formula_reverse_const':8
}
}
scores = {}
for trait, info in traits.items():
pos_items = [processed[i-1] for i in info['positive']]
rev_items = [processed[i-1] for i in info['reverse']]
missing_pos = pos_items.count(None)
missing_rev = rev_items.count(None)
total_missing = missing_pos + missing_rev
if total_missing > info['threshold']:
scores[trait] = "Incomplete"
else:
# Compute means, ignoring None
pos_values = [x for x in pos_items if x is not None]
rev_values = [x for x in rev_items if x is not None]
mean_pos = sum(pos_values) / len(pos_values) if pos_values else 0
mean_rev = sum(rev_values) / len(rev_values) if rev_values else 0
# Apply the scoring formula
score = (mean_pos * info['formula_pos_mult']) + (info['formula_reverse_const'] - (mean_rev * info['formula_reverse_mult']))
score = round(score, 2)
scores[trait] = score
# Prepare the output in Markdown format
output = "## Your Big Five Personality Traits Scores\n\n"
for trait, score in scores.items():
output += f"**{trait}**: {score}\n\n"
return output
# Create the Gradio interface
def create_interface():
with gr.Blocks() as demo:
gr.Markdown("## Big Five Inventory (BFI) Quiz")
gr.Markdown("Please rate the following statements on a scale from **1 (Disagree a lot)** to **5 (Agree a lot)**. If you prefer not to respond to a particular statement, select **'No response'**.")
# Create a grid layout for better organization
with gr.Column():
dropdowns = []
for q in questions:
dropdown = gr.Dropdown(
choices=["No response", 1, 2, 3, 4, 5],
label=q,
value="No response"
)
dropdowns.append(dropdown)
# Submit button
submit_btn = gr.Button("Submit")
# Results display
result = gr.Markdown()
# Link the button to the function
submit_btn.click(fn=compute_bfi_scores, inputs=dropdowns, outputs=result)
return demo
# Launch the interface
demo = create_interface()
demo.launch()
|