feat: add correlation func (not working)

This commit is contained in:
Kristofers Solo 2024-02-25 00:44:11 +02:00
parent ff35b5d2a3
commit 288225eeef
2 changed files with 95 additions and 28 deletions

View File

@ -1,10 +1,12 @@
#!/usr/bin/env python
import itertools
from pathlib import Path
from typing import Optional
import matplotlib.pyplot as plt
import pandas as pd
from question import checkbox
from question import checkbox, correlation
from question.correlation import Combination
BASE_DIR = Path(__file__).resolve().parent.parent
FILE_PATH = BASE_DIR / "data" / "responses.csv"
@ -15,43 +17,75 @@ def read_data(filename: Path) -> pd.DataFrame:
return pd.read_csv(filename)
QUESTIONS = {
"b": "Es plānoju samazināt pārtikas atkritumus mājsaimniecībā",
"c": "Kādā veidā Jūs samaziniet savu atkritumu daudzumu?",
"d": "Ražotu dzērienu vietā (limonādes, ūdens pudelēs, alkoholiskie dzērieni) es dzeršu krāna ūdeni.",
"e": "Kāda ir Jūsu uztura izvēle?",
"f": "Kuras no sekojošām rīcībām Jūs būtu gatavi veikt?",
"h": "Kāda veida transportlīdzekļus Jūs izmantojat?",
"i": "Ja esat automašīnas īpašnieks, kuru no minētajām iespējām Jūs izvēlētos, lai būtu videi draudzīgāks?",
"k": "Kurš no sekojošiem apgalvojumiem Jums ir tuvāks?",
"l": "Kuras no sekojošām darbībām Jūs pārsvarā veicat ar informācijas un komunikācijas tehnoloģiju (IKT) ierīcēm (telefona, datora, televizora u.c.) un to lietošanu?",
"m": "Kādas darbības Jūs mēģinat veikt, lai samazinātu enerģijas patēriņu?",
"o": "Kādā mājokļa tipā Jūs dzīvojat?",
"q": "Vai Jūs atteiktos no liekas mājokļa platības?",
"s": "Vai Jūsu dzīvesvieta ir papildus nosiltināta?",
"u": "Kurš no apgalvojumiem atbilst Jūsu dzīves situācijai?",
"v": "Kurš no šiem apgalvojumiem ir patiess par Jūsu mājdzīvniekiem?",
"w": "Kurš no apgalvojumiem par pārvietošanos brīvdienās un atvaļinājumos Jums ir patiess?",
"y": "Kurš no šiem apgalvojumiem par apģērbu un apavu iegādi attiecas uz Jums?",
"z": "Kurš no apgalvojumiem par Jums ir patiess?",
}
def individual_charts(data: pd.DataFrame) -> None:
for column, question in QUESTIONS.items():
checkbox.draw(data, question=question, filename=EXPORT_DIR / "individual" / f"{column}.png")
def correlation_charts(data: pd.DataFrame) -> None:
QUESTIONS: dict[str, str] = {
"b": "Es plānoju samazināt pārtikas atkritumus mājsaimniecībā",
"c": "Kādā veidā Jūs samaziniet savu atkritumu daudzumu?",
"d": "Ražotu dzērienu vietā (limonādes, ūdens pudelēs, alkoholiskie dzērieni) es dzeršu krāna ūdeni.",
"e": "Kāda ir Jūsu uztura izvēle?",
"f": "Kuras no sekojošām rīcībām Jūs būtu gatavi veikt?",
"h": "Kāda veida transportlīdzekļus Jūs izmantojat?",
"i": "Ja esat automašīnas īpašnieks, kuru no minētajām iespējām Jūs izvēlētos, lai būtu videi draudzīgāks?",
"k": "Kurš no sekojošiem apgalvojumiem Jums ir tuvāks?",
"l": "Kuras no sekojošām darbībām Jūs pārsvarā veicat ar informācijas un komunikācijas tehnoloģiju (IKT) ierīcēm (telefona, datora, televizora u.c.) un to lietošanu?",
"m": "Kādas darbības Jūs mēģinat veikt, lai samazinātu enerģijas patēriņu?",
"o": "Kādā mājokļa tipā Jūs dzīvojat?",
"q": "Vai Jūs atteiktos no liekas mājokļa platības?",
"s": "Vai Jūsu dzīvesvieta ir papildus nosiltināta?",
"u": "Kurš no apgalvojumiem atbilst Jūsu dzīves situācijai?",
"v": "Kurš no šiem apgalvojumiem ir patiess par Jūsu mājdzīvniekiem?",
"w": "Kurš no apgalvojumiem par pārvietošanos brīvdienās un atvaļinājumos Jums ir patiess?",
"y": "Kurš no šiem apgalvojumiem par apģērbu un apavu iegādi attiecas uz Jums?",
"z": "Kurš no apgalvojumiem par Jums ir patiess?",
}
export_path = EXPORT_DIR / "individual"
if not export_path.exists():
export_path.mkdir()
for column, question in QUESTIONS.items():
checkbox.draw(data, question=question, filename=export_path / f"{column}.png")
def create_combinations() -> dict[str, Combination]:
QUESTIONS = {
"Es plānoju samazināt pārtikas atkritumus mājsaimniecībā",
"Kāda ir Jūsu uztura izvēle?",
"Kurš no sekojošiem apgalvojumiem Jums ir tuvāks?",
"Kādā mājokļa tipā Jūs dzīvojat?",
"Vai Jūs atteiktos no liekas mājokļa platības?",
"Vai Jūs būtu ar mieru dzīvot koplietojamā mājoklī?",
"Vai Jūsu dzīvesvieta ir papildus nosiltināta?",
}
DEMOGRAPHIC = {
"Kāds ir Jūsu dzimums?",
"Kāds ir Jūsu vecums?",
"Kāds ir augstākais Jūsu iegūtais izglītības līmenis?",
# "Kurš no šiem variantiem atspoguļo Jūsu mājsaimniecības ikmēneša neto ienākumus?",
"Kāds ir Jūsu pašreizējais nodarbinātības statuss?",
"Kāda ir Jūsu dzīvesvieta?",
}
return {
f"{i + 1}": Combination(str(pair[0]), str(pair[1]))
for i, pair in enumerate(itertools.product(QUESTIONS, DEMOGRAPHIC))
}
def correlation_charts(data: pd.DataFrame) -> None:
export_path = EXPORT_DIR / "correlation"
if not export_path.exists():
export_path.mkdir()
for filename, comb in create_combinations().items():
correlation.draw(data, comb, filename=export_path / f"{filename}.png")
def main() -> None:
data = read_data(FILE_PATH)
individual_charts(data)
correlation_charts(data)
if __name__ == "__main__":

View File

@ -0,0 +1,33 @@
from dataclasses import dataclass
from pathlib import Path
from typing import Optional
import matplotlib.pyplot as plt
import pandas as pd
@dataclass
class Combination:
q1: str
q2: str
def draw(
df: pd.DataFrame,
comb: Combination,
/,
show: bool = False,
filename: Optional[Path] = None,
) -> None:
chart = pd.crosstab(df[comb.q1], df[comb.q2])
chart.plot(kind="bar")
plt.figure(figsize=(16, 9))
plt.title(comb.q1)
plt.xlabel("")
plt.ylabel("")
if filename:
plt.savefig(filename)
if show:
plt.show()