student_sample_panel / common /Interview.py
elaineaishophouse's picture
Upload 15 files
441d880 verified
Raw History Blame Contribute Delete
2.76 kB
from typing import List, Optional
from pydantic import BaseModel
import pandas as pd
from itertools import groupby
class QAEntry(BaseModel):
Num: int
Section: str
Question: str
Expected_Output: Optional[str]
Respondent: Optional[str]
Answer: Optional[str]
class InterviewReport(BaseModel):
Entries: List[QAEntry]
def __repr__(self):
output = ""
for section, entries in groupby(self.Entries, key=lambda entry: entry.Section):
output += f"{section}:\n"
for entry in entries:
output += f"Q {entry.Num}: {entry.Question}\n"
output += f"Expected Output: {entry.Expected_Output if entry.Expected_Output else 'No Expected Output'}\n"
output += f"Respondent: {entry.Respondent if entry.Respondent else 'No Respondent'}\n"
output += f"A: {entry.Answer if entry.Answer else 'No Answer'}\n"
return output
def get_respondent_responses(self,respondent):
respondent_entries = [
entry for entry in self.Entries
if entry.Respondent and entry.Respondent.lower() == respondent.lower()
]
return respondent_entries
@staticmethod
def generate_interview_script(interview_file):
df = pd.read_excel(interview_file)
qa_entries = []
for idx, row in enumerate(df.to_dict('records')):
print(f"Processing row {idx}: {row}") # Debug: show the full row being processed
entry = QAEntry(
Num = row['Num'],
Section = row['Section'],
Question = row['Question'],
Expected_Output = row.get('Expected_Output') if pd.notna(row.get('Expected_Output')) else None,
Respondent = None,
Answer = None
)
qa_entries.append(entry)
return InterviewReport(Entries = qa_entries)
@staticmethod
def generate_interview_report(interview_file):
df = pd.read_excel(interview_file)
qa_entries = [
QAEntry(
Num = row['Num'],
Section = row['Section'],
Question = row['Question'],
Expected_Output = row.get('Expected_Output') if pd.notna(row.get('Expected_Output')) else "No Expected Output Provided",
Respondent = row.get('Respondent') if pd.notna(row.get('Respondent')) else "No Respondent Provided",
Answer = row.get('Answer') if pd.notna(row.get('Answer')) else "No Answer Provided"
)
for row in df.to_dict('records')
]
return InterviewReport(Entries = qa_entries)