2025-03-17 17:25:31 +04:00

90 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import phi_star
import csv
from docx import Document
from docx.shared import RGBColor
COLUMNS_TRIM = 3
CRIT_LOW = 1.62
CRIT_HIGH = 2.33
if __name__ == '__main__':
males = 0
fems = 0
fem_responses = []
male_responses = []
with open("responses.csv", encoding="utf-8") as file:
reader = csv.reader(file)
headers = next(reader)
q_count = len(headers)
for i in range(COLUMNS_TRIM, q_count):
fem_responses.append({})
male_responses.append({})
for row in reader:
is_male = False
if row[1] == "мужской":
males+=1
is_male = True
else:
fems+=1
for i in range(COLUMNS_TRIM, q_count):
answer_array = row[i].split(";")
for answer in answer_array:
if answer == "":
answer = "не могу дать точный ответ"
if is_male:
male_responses[i - COLUMNS_TRIM][answer] = male_responses[i - COLUMNS_TRIM].get(answer, 0) + 1
else:
fem_responses[i - COLUMNS_TRIM][answer] = fem_responses[i - COLUMNS_TRIM].get(answer, 0) + 1
doc = Document()
doc.add_heading("Гендерные стереотипы")
doc.add_paragraph("Кол-во мужчин: " + str(males) + "\nКол-во женщин: " + str(fems) + "\nВсего опрошено: " + str(males + fems))
for i in range(0, q_count - COLUMNS_TRIM):
doc.add_paragraph("\n\n"+str(headers[i+COLUMNS_TRIM]))
all_keys = set(fem_responses[i].keys()) | set(male_responses[i].keys())
doc_table = doc.add_table(len(all_keys) + 1, 4)
doc_table.style = 'Table Grid'
doc_table.cell(0, 0).text = "Ответ"
doc_table.cell(0, 1).text = "Женщины"
doc_table.cell(0, 2).text = "Мужчины"
doc_table.cell(0, 3).text = "φ*эмп"
row = 1
for answer in all_keys:
male_count = male_responses[i].get(answer, 0)
fem_count = fem_responses[i].get(answer, 0)
table = [[fem_count, fems - fem_count],
[male_count, males-male_count]]
phisher = phi_star.calculate(table)
doc_table.cell(row, 0).text = answer
doc_table.cell(row, 1).text = str(fem_count)
doc_table.cell(row, 2).text = str(male_count)
doc_table.cell(row, 3).text = str(f"{phisher:.3f}")
if phisher >= CRIT_HIGH: color = RGBColor(0, 128, 0)
elif phisher <= CRIT_LOW: color = RGBColor(255, 0, 0)
else: color = RGBColor(128, 128, 0)
for cell in doc_table.rows[row].cells: cell.paragraphs[0].runs[0].font.color.rgb = color
row+=1
doc.save("output.docx")