basic functionality
This commit is contained in:
84
main.py
84
main.py
@@ -1,9 +1,89 @@
|
||||
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:
|
||||
print(row)
|
||||
print(phi_star.calculate_phi_star([[1, 1], [1, 1]]))
|
||||
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")
|
||||
|
||||
Reference in New Issue
Block a user