diff --git a/.gitignore b/.gitignore index fc461bd..813ec0c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ __pycache__/ *.png *.jpg /output/ +.venv/ diff --git a/Grafice.ipynb b/Grafice.ipynb index 3183e59..64b16a9 100644 --- a/Grafice.ipynb +++ b/Grafice.ipynb @@ -130,8 +130,8 @@ "metadata": {}, "outputs": [], "source": [ - "bachelors_df = pd.read_excel(input_directory / 'Răspunsuri Licență.xlsx', engine='openpyxl')\n", - "masters_df = pd.read_excel(input_directory / 'Răspunsuri Master.xlsx', engine='openpyxl')" + "bachelors_df = pd.read_excel(input_directory / 'CDOS Licență.xlsx', engine='openpyxl')\n", + "masters_df = pd.read_excel(input_directory / 'CDOS Master.xlsx', engine='openpyxl')" ] }, { @@ -192,7 +192,7 @@ "source": [ "# Setare configurabilă pentru includerea întrebării în titlul graficelor\n", "\n", - "INCLUDE_QUESTION_TITLE = False" + "INCLUDE_QUESTION_TITLE = True" ] }, { @@ -255,15 +255,20 @@ "metadata": {}, "outputs": [], "source": [ + "# Variabilă care controlează dacă răspunsurile goale ar trebui să nu fie afișate în întrebările de tip „da/nu”.\n", + "DROP_EMPTY_ANSWERS = True\n", "NO_ANSWER_VALUE = 'Nu știu / nu răspund'\n", "\n", "def plot_yes_no_question(ax: plt.Axes, answers: pd.Series) -> None:\n", " \"\"\"Reprezintă grafic răspunsurile la o întrebare de tip da/nu,\n", " sub formă de pie chart.\n", " \"\"\"\n", - " # Înlocuiește răspunsurile goale cu o formulare standard\n", - " answers = answers.fillna(NO_ANSWER_VALUE)\n", - " \n", + " if DROP_EMPTY_ANSWERS:\n", + " answers = answers.dropna()\n", + " else:\n", + " # Înlocuiește răspunsurile goale cu o formulare standard\n", + " answers = answers.fillna(NO_ANSWER_VALUE)\n", + "\n", " # Calculează vectorul de frecvență al răspunsurilor\n", " counts = answers.value_counts()\n", " \n", @@ -283,7 +288,7 @@ " # pandas pune automat numele coloanei pe axa verticală,\n", " # nu ne dorim asta\n", " ylabel='',\n", - " colors = ['#b62f8b','#d6556d','#fa9b3b'],\n", + " colors = ['#3158a3','#e5503a','#f9c000'],\n", " autopct='%1.1f%%',\n", " normalize=True)" ] @@ -295,7 +300,7 @@ "metadata": {}, "outputs": [], "source": [ - "answers = bachelors_df.iloc[:, -6]\n", + "answers = bachelors_df.iloc[:, col2index('NV')]\n", "\n", "fig = plt.figure()\n", "ax = fig.gca()\n", @@ -324,13 +329,16 @@ " # Dacă nu mai rămâne niciun răspuns, mă opresc\n", " if answers.empty:\n", " return\n", - " \n", + "\n", " # Calculează vectorul de frecvență al răspunsurilor\n", " counts = answers.value_counts()\n", "\n", " if counts.index.dtype == np.float32 or counts.index.dtype == np.float64:\n", " # Dintr-un motiv necunoscut, pandas interpretează numărul de răspunsuri ca float\n", " counts.index = counts.index.astype(int)\n", + " else:\n", + " # Dacă avem și răspunsuri non-număr, le ignorăm\n", + " counts = counts[pd.to_numeric(counts.index, errors='coerce').notnull()]\n", "\n", " counts = counts.sort_index()\n", "\n", @@ -338,7 +346,7 @@ " plot_question_title(ax, answers)\n", " # TODO: nu arată bine\n", " #plot_number_of_respondents(ax, answers)\n", - " counts.plot.bar(ax=ax, color = '#b62f8b')\n", + " counts.plot.bar(ax=ax, color = '#015d9e')\n", "\n", " # Afișează vertical valorile pe axa X\n", " ax.tick_params(axis='x', rotation=0)" @@ -351,7 +359,7 @@ "metadata": {}, "outputs": [], "source": [ - "answers = bachelors_df.iloc[:, 283]\n", + "answers = bachelors_df.iloc[:, col2index('MP')]\n", "\n", "fig = plt.figure()\n", "ax = fig.gca()\n", @@ -392,7 +400,7 @@ " plot_question_title(ax, answers)\n", " # TODO: nu se poziționează cum trebuie\n", " #plot_number_of_respondents(ax, answers)\n", - " counts.plot.barh(ax=ax, color='#b62f8b')" + " counts.plot.barh(ax=ax, color='#015d9e')" ] }, { @@ -402,7 +410,7 @@ "metadata": {}, "outputs": [], "source": [ - "answers = bachelors_df.iloc[:, col2index('HE')]\n", + "answers = bachelors_df.iloc[:, col2index('F')]\n", "\n", "fig = plt.figure()\n", "ax = fig.gca()\n", @@ -467,7 +475,7 @@ " plot_question_title(ax, answers)\n", " # TODO: nu se poziționează cum trebuie\n", " #plot_number_of_respondents(ax, answers, 4, -2.5)\n", - " counts.plot.barh(ax=ax, color = '#b62f8b')" + " counts.plot.barh(ax=ax, color = '#015d9e')" ] }, { @@ -479,7 +487,7 @@ }, "outputs": [], "source": [ - "answers = bachelors_df.iloc[:, 49]\n", + "answers = bachelors_df.iloc[:, col2index('H')]\n", "\n", "fig = plt.figure()\n", "ax = fig.gca()\n", @@ -504,9 +512,7 @@ "\n", "Studenții aleg inițial anul și specializarea lor. În funcție de acestea, sunt redirecționați la secțiuni diferite din formular.\n", "\n", - "Acest bloc de cod definește numărul coloanei de la care încep coloanele corespunzătoare fiecărei specializări.\n", - "\n", - "Link util pentru conversia de la coloană Excel în indice: https://www.vishalon.net/blog/excel-column-letter-to-number-quick-reference" + "Acest bloc de cod definește numărul coloanei de la care încep coloanele corespunzătoare fiecărei specializări." ] }, { @@ -520,24 +526,26 @@ "bachelors_offset_map = {\n", " 'I': {\n", " 'Informatică': col2index('F'),\n", - " 'Matematică': col2index('AX'),\n", - " 'Calculatoare și tehnologia informației': col2index('EX'),\n", + " 'Informatică ID': col2index('BD'),\n", + " 'Matematică': col2index('CY'),\n", + " 'Calculatoare și Tehnologia Informației': col2index('HF'),\n", " },\n", " 'II': {\n", - " 'Informatică': col2index('T'),\n", - " 'Matematici Aplicate': col2index('DU'),\n", - " 'Matematică': col2index('BM'),\n", - " 'Matematică - Informatică': col2index('CQ'),\n", - " 'Calculatoare și Tehnologia Informației': col2index('FL'),\n", + " 'Informatică': col2index('V'),\n", + " 'Matematici Aplicate': col2index('FZ'),\n", + " 'Matematică': col2index('DO'),\n", + " 'Matematică - Informatică': col2index('EU'),\n", + " 'Calculatoare și Tehnologia Informației': col2index('HU'),\n", " },\n", " 'III': {\n", - " 'Informatică': col2index('AH'),\n", - " 'Matematici Aplicate': col2index('EI'),\n", - " 'Matematică - Informatică': col2index('DE'),\n", - " 'Calculatoare și Tehnologia Informației': col2index('FZ'),\n", + " 'Informatică': col2index('AL'),\n", + " 'Matematici Aplicate': col2index('GO'),\n", + " 'Matematică': col2index('DO'),\n", + " 'Matematică - Informatică': col2index('FJ'),\n", + " 'Calculatoare și Tehnologia Informației': col2index('IJ'),\n", " },\n", " 'IV': {\n", - " 'Calculatoare și Tehnologia Informației': col2index('GN'),\n", + " 'Calculatoare și Tehnologia Informației': col2index('IY'),\n", " }\n", "}" ] @@ -567,7 +575,7 @@ " 'Calcul diferențial și integral',\n", " 'Competențe de bază într-o limbă străină',\n", " 'Competențe specifice într-o limbă străină',\n", - " 'Gândire critică și etică academică',\n", + " 'Gândire critică și etică academică în informatică',\n", " 'Geometrie și algebră liniară',\n", " 'Logică matematică și computațională',\n", " 'Limbaje formale și automate',\n", @@ -592,18 +600,19 @@ " 'Logică matematică',\n", " 'Programare procedurală',\n", " ],\n", - " 'Calculatoare și tehnologia informației': [\n", + " 'Calculatoare și Tehnologia Informației': [\n", " 'Analiză matematică',\n", + " 'Arhitectura sistemelor de calcul',\n", " 'Algebră și geometrie',\n", " 'Bazele electrotehnicii',\n", " 'Calcul numeric',\n", " 'Competențe de bază într-o limbă străină',\n", " 'Fizică',\n", - " 'Gândire critică și etică academică',\n", + " 'Grafică asistată de calculator',\n", " 'Matematici aplicate',\n", - " 'Proiectare asistată de calculator',\n", " 'Proiectare logică',\n", - " 'Programarea calculatoarelor',\n", + " 'Programarea calculatoarelor I',\n", + " 'Programarea calculatoarelor II',\n", " 'Tehnici de programare',\n", " 'Utilizarea sistemelor de operare',\n", " ],\n", @@ -690,16 +699,36 @@ " },\n", " 'III': {\n", " 'Informatică': [\n", - " 'Ecuații diferențiale și cu derivate parțiale',\n", - " 'Sisteme de gestiune a bazelor de date',\n", - " 'Dezvoltarea aplicațiilor Web',\n", + " 'Calculabilitate și complexitate',\n", + " 'Securitatea sistemelor informatice',\n", + " 'Inginerie software',\n", " 'Calcul numeric',\n", - " 'Programare declarativă',\n", + " 'Concepte și aplicații în Vederea Artificială',\n", + " 'Dezvoltarea aplicațiilor în cloud prin intermediul platformei Salesforce',\n", + " 'Front end avansat: React & Angular',\n", + " 'Grafica pe calculator',\n", + " 'Introducere în programarea jocurilor pe calculator',\n", + " 'Introducere în Reinforcement Learning',\n", + " 'Introducere în robotica',\n", + " 'Java Script server side: Node.js + GraphQL',\n", + " 'Procesarea Semnalelor',\n", + " 'Robotic Process Automation (RPA) folosind platforma UiPath',\n", " 'Tehnici de simulare',\n", - " 'Tehnici de optimizare',\n", - " 'Ingineria programării',\n", - " 'Criptografie și securitate',\n", - " 'Tehnici de compilare'\n", + " 'Blockchain',\n", + " 'Elemente de securitate și logică aplicată',\n", + " 'Fundamentele proiectării compilatoarelor',\n", + " 'Introducere în prelucrarea limbajului natural',\n", + " 'Învățare automată în Vedere Artificială',\n", + " 'Învățarea rețelelor neurale adânci (Intensiv)',\n", + " 'Metode Formale în Ingineria Software',\n", + " 'Production engineering',\n", + " 'Programarea aplicațiilor de simulare',\n", + " 'Programarea dispozitivelor mobile în Android',\n", + " 'Programarea dispozitivelor mobile în iOS',\n", + " 'Protocoale criptografice',\n", + " 'Strategii de planificare a unei echipe de roboți',\n", + " 'Tehnici de programare a aplicațiilor grafice',\n", + " 'Testarea Sistemelor Software'\n", " ],\n", " 'Matematici Aplicate': [\n", " 'Statistică',\n", @@ -719,26 +748,40 @@ " 'Statistică',\n", " ],\n", " 'Matematică - Informatică': [\n", - " 'Analiză numerică',\n", + " 'Statistică',\n", " 'Ecuații cu derivate parțiale',\n", + " 'Analiză numerică și metode numerice',\n", " 'Cercetări operaționale',\n", - " 'Tehnici Web',\n", - " 'Statistică',\n", - " 'Teoria numerelor cu ecuații în criptografie',\n", - " 'Rețele de calculatoare',\n", - " 'Inteligență artificială',\n", - " 'Programare logică'\n", + " 'Teoria numerelor cu aplicații în criptografie',\n", + " 'Front end avansat: React & Angular',\n", + " 'Java Script server side: Node.js + GraphQL',\n", + " 'Concepte și aplicații în Vederea Artificială',\n", + " 'Introducere în Reinforcement Learning',\n", + " 'Tehnici de simulare',\n", + " 'Grafica pe calculator',\n", + " 'Fundamentele proiectării compilatoarelor',\n", + " 'Metode Formale în Ingineria Software',\n", + " 'Programarea dispozitivelor mobile în iOS',\n", + " 'Strategii de planificare a unei echipe de roboți (SPER)',\n", + " 'Introducere în prelucrarea limbajului natural',\n", + " 'Programarea aplicațiilor de simulare',\n", + " 'Programarea dispozitivelor mobile în Android',\n", + " 'Protocoale criptografice',\n", + " 'Tehnici de programare a aplicațiilor grafice',\n", + " 'Blockchain',\n", + " 'Elemente de securitate și logică aplicată',\n", + " 'Învățare automată în Vedere Artificială',\n", + " 'Criptografie și teoria codurilor',\n", + " 'Elemente analiză clasică',\n", + " 'Grupuri de transformări în geometrie',\n", + " 'Grupuri Finite și Elemente de Teorie Galois',\n", + " 'Concepte Algebrice în Geometrie'\n", " ],\n", " 'Calculatoare și Tehnologia Informației': [\n", - " 'Arhitectura sistemelor de calcul',\n", - " 'Arhitectura sistemelor paralele',\n", - " 'Grafica pe calculator',\n", - " 'Inteligență artificială',\n", - " 'Metode de dezvoltare software',\n", " 'Proiectarea bazelor de date',\n", " 'Sisteme de operare',\n", - " 'Sisteme cu microprocesoare',\n", - " 'Tehnici Web',\n", + " 'Inteligenţă artificială',\n", + " \n", " ],\n", " },\n", " 'IV': {\n", @@ -778,7 +821,7 @@ "# Trebuie să luăm fiecare an de studiu pe rând\n", "for index, year in enumerate(('I', 'II', 'III', 'IV')):\n", " # Filtrăm răspunsurile\n", - " df_year = bachelors_df[bachelors_df['Anul de studiu în 2020-2021'] == f'Anul {year}'].copy()\n", + " df_year = bachelors_df[bachelors_df['Anul de studiu în 2021-2022'] == f'Anul {year}'].copy()\n", "\n", " # Determinăm specializarea\n", " if year == 'IV':\n", @@ -800,6 +843,13 @@ " \n", " # Grupăm răspunsurile pe ani după specializare\n", " for group_name, df_group in df_year.groupby(specialization):\n", + " # Sărim peste Info ID, de obicei sunt prea puține răspunsuri ca să fie relevante.\n", + " if group_name == 'Informatică ID':\n", + " continue\n", + " \n", + " if group_name.startswith('Matematic') and year == 'III':\n", + " continue\n", + " \n", " print('-', group_name)\n", " offset = bachelors_offset_map[year][group_name]\n", "\n", @@ -814,17 +864,17 @@ " \n", " if is_cti or is_info_year_3:\n", " # La CTI ordinea întrebărilor este puțin diferită\n", - " multiple_choice_question_indices = list(range(3)) + list(range(5, 9)) + [10]\n", - " rating_question_indices = [11]\n", - " yes_no_question_indices = [13] \n", + " multiple_choice_question_indices = [0, 2, 4, 5, 9, 10]\n", + " rating_question_indices = [13]\n", + " yes_no_question_indices = [7, 12]\n", " else:\n", - " multiple_choice_question_indices = list(range(3)) + list(range(4, 8)) + [9]\n", - " rating_question_indices = [10]\n", + " multiple_choice_question_indices = [0, 2, 4, 5, 9, 10]\n", + " rating_question_indices = [13]\n", " yes_no_question_indices = [12]\n", " \n", " # Cei din an terminal au o întrebare legată și de master\n", " if (year == 'III' and not is_cti) or year == 'IV':\n", - " yes_no_question_indices.append(14)\n", + " yes_no_question_indices.append(16)\n", "\n", " # Rezolv întrebările de tip selecție multiplă\n", " for i in multiple_choice_question_indices:\n", @@ -832,12 +882,17 @@ "\n", " answers = df_group.iloc[:, index]\n", " \n", - " # Obțin lista de materii pentru această specializare\n", - " known_subjects = subjects_map[year][group_name]\n", + " permitted_answers = None\n", + " \n", + " # Prima întrebare are ca opțiuni intervale de procente, nu materii\n", + " if i != 0:\n", + " # Obțin lista de materii pentru această specializare\n", + " known_subjects = subjects_map[year][group_name]\n", + " permitted_answers = known_subjects\n", "\n", " # Salvez graficul într-un fișier\n", " plot_to_file(plot_multiple_choice_question, answers, directory_path / f'{i}.png',\n", - " permitted_answers=known_subjects)\n", + " permitted_answers=permitted_answers)\n", " \n", " # Întrebările de tip rating\n", " for i in rating_question_indices:\n", @@ -874,15 +929,16 @@ "# Dictionary mapping each (year, study program) pair to a column number in the Excel\n", "masters_offset_map = {\n", " 'I': {\n", - " 'ARTIFICIAL INTELLIGENCE': col2index('EH'),\n", - " 'MATEMATICĂ DIDACTICĂ': col2index('IL'),\n", - " 'PROBABILITĂȚI ȘI STATISTICĂ ÎN FINANȚE ȘI ȘTIINȚE': col2index('JN'),\n", - " 'BAZE DE DATE ȘI TEHNOLOGII SOFTWARE': col2index('CF'),\n", - " 'INGINERIE SOFTWARE': col2index('DG'),\n", + " # Anul acesta nu au fost suficienți respondenți la master, așa că nu mai generăm grafice pentru ei.\n", + " #'ARTIFICIAL INTELLIGENCE': col2index('EH'),\n", + " #'MATEMATICĂ DIDACTICĂ': col2index('IL'),\n", + " #'PROBABILITĂȚI ȘI STATISTICĂ ÎN FINANȚE ȘI ȘTIINȚE': col2index('JN'),\n", + " #'BAZE DE DATE ȘI TEHNOLOGII SOFTWARE': col2index('CF'),\n", + " #'INGINERIE SOFTWARE': col2index('DG'),\n", " },\n", " 'II': {\n", - " 'Baze de date și tehnologii software': col2index('BS'),\n", - " 'Securitate și Logică Aplicată': col2index('S')\n", + " #'Baze de date și tehnologii software': col2index('BS'),\n", + " #'Securitate și Logică Aplicată': col2index('S')\n", " },\n", "}" ] @@ -899,7 +955,7 @@ "# Trebuie să luăm anii de studiu pe rând\n", "for index, year in enumerate(('I', 'II')):\n", " # Filtrăm răspunsurile\n", - " df_year = masters_df[masters_df['Anul de studiu în 2020-2021'] == f'Anul {year}'].copy()\n", + " df_year = masters_df[masters_df['Anul de studiu în 2021-2022'] == f'Anul {year}'].copy()\n", "\n", " # Coloana care indică specializarea e diferită în funcție de an\n", " specialization_column_index = 2 + index\n", @@ -911,9 +967,14 @@ "\n", " # Grupăm răspunsurile pe ani după specializare\n", " for group_name, df_group in df_year.groupby(specialization):\n", - " print('-', group_name)\n", - " offset = masters_offset_map[year][group_name]\n", + " master_year_offsets = masters_offset_map[year]\n", + " offset = master_year_offsets.get(group_name)\n", + " if offset is None:\n", + " print('Sărim peste', group_name)\n", + " continue\n", "\n", + " print('-', group_name)\n", + " \n", " # Determin directorul\n", " directory_path = output_directory / f'Master - Anul {year}' / group_name\n", " # Îl creez dacă nu există\n", @@ -998,69 +1059,65 @@ "\n", "# Un dicționar care împarte întrebările pe secțiuni, și definește pentru fiecare secțiune \n", "common_questions = {\n", - " 'Desfășurarea orelor în format online': {\n", - " SINGLE_CHOICE: ['HE', 'HK', 'HL', 'HM', 'HN', 'HO', 'HT', 'HU',],\n", - " MULTIPLE_CHOICE: ['HD', 'HQ', 'HR',],\n", - " YES_NO: ['HF', 'HP', 'HS',],\n", - " RATING: ['HG', 'HH', 'HI',],\n", - " },\n", " 'Bibliotecă': {\n", - " YES_NO: ['HY', 'HZ', 'IA', 'IB', 'IC', 'ID', 'IF',],\n", + " YES_NO: ['JP', 'JQ', 'JR', 'JU'],\n", + " SINGLE_CHOICE: ['JS'],\n", " },\n", " 'Site & Moodle': {\n", - " SINGLE_CHOICE: [ 'IJ', 'IK', 'IL',],\n", - " RATING: ['IG', 'II',],\n", + " SINGLE_CHOICE: ['KA'],\n", + " RATING: ['JW', 'JY', 'JZ'],\n", " },\n", " 'Modulul psihopedagogic': {\n", - " SINGLE_CHOICE: ['IN',],\n", - " RATING: ['IO',],\n", + " SINGLE_CHOICE: ['KC'],\n", + " YES_NO: ['KE', 'KF', 'KH', 'KI'],\n", + " RATING: ['KG'],\n", " },\n", " 'Reprezentarea studenților': {\n", - " SINGLE_CHOICE: ['IX', 'IY',],\n", - " YES_NO: ['JA', ],\n", - " RATING: ['JB', ],\n", + " YES_NO: ['KL', 'KM', 'KN', 'KR'],\n", + " RATING: ['KP'],\n", + " },\n", + " 'Conducerea Facultății': {\n", + " YES_NO: ['KS', 'KV', 'KW'],\n", + " RATING: ['KU', 'KX', 'KY']\n", " },\n", " 'Secretariat și orar': {\n", - " SINGLE_CHOICE: ['JI', 'JK', 'JM', 'JN', ],\n", - " RATING: ['JE', 'JH', 'JJ',],\n", + " SINGLE_CHOICE: ['LD'],\n", + " RATING: ['LA', 'LC'],\n", " },\n", " 'Carieră': {\n", - " SINGLE_CHOICE: ['JS',],\n", - " MULTIPLE_CHOICE: ['JQ',],\n", - " YES_NO: ['JP',],\n", + " SINGLE_CHOICE: ['LH', 'LK'],\n", + " YES_NO: ['LG', 'LJ'],\n", " },\n", " 'Cămine': {\n", - " SINGLE_CHOICE: ['JW',],\n", - " YES_NO: ['JV',],\n", - " RATING: ['JX', 'JY', 'JZ', 'KA', 'KB', 'KC', 'KD', 'KE', 'KF', 'KG',],\n", + " SINGLE_CHOICE: ['LN', 'LZ'],\n", + " YES_NO: ['LM'],\n", + " RATING: ['LO', 'LP', 'LQ', 'LR', 'LS', 'LT', 'LU', 'LV', 'LW', 'LX'],\n", " },\n", " 'Cantină': {\n", - " YES_NO: ['KI',],\n", - " RATING: ['KJ', 'KK', 'KL',],\n", + " YES_NO: ['MA'],\n", + " RATING: ['MB', 'MC', 'MD'],\n", " },\n", " 'Sport': {\n", - " SINGLE_CHOICE: ['KO', 'KP',]\n", + " SINGLE_CHOICE: ['MG'],\n", + " YES_NO: ['MH']\n", " },\n", - " 'Conducerea Facultății': {\n", - " YES_NO: ['KU', 'KY',],\n", + " 'Departamentul de Consiliere și Orientare pentru Carieră': {\n", + " YES_NO: ['MK', 'ML', 'MN'],\n", " },\n", " 'ASMI': {\n", - " SINGLE_CHOICE: ['LQ', 'LR',],\n", - " YES_NO: ['LL', 'LM', 'LS',],\n", - " RATING: ['LA', 'LB', 'LC', 'LD', 'LE', 'LF', 'LG', 'LH', 'LN', 'LP',],\n", + " SINGLE_CHOICE: ['MY', 'NE'],\n", + " YES_NO: ['NF', 'NG'],\n", + " RATING: ['MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'NA', 'NC'],\n", " },\n", " 'Practică': {\n", - " YES_NO: ['LT',],\n", - " RATING: ['LW', 'LZ', 'MB', 'MC', 'MD',],\n", - " },\n", - " 'Departamentul de Consiliere și Orientare pentru Carieră': {\n", - " YES_NO: ['ME', 'MF', 'MH', ]\n", + " YES_NO: ['NI'],\n", + " RATING: ['NK', 'NM', 'NO', 'NP', 'NQ'],\n", " },\n", " 'Șefi de grupă': {\n", - " YES_NO: ['MI', 'MJ', 'MK', 'ML',]\n", + " YES_NO: ['NR', 'NS', 'NT', 'NU']\n", " },\n", - " 'Activități extra': {\n", - " MULTIPLE_CHOICE: ['MM',]\n", + " 'Altele': {\n", + " YES_NO: ['NV', 'NX', 'NY']\n", " },\n", "}" ] @@ -1080,7 +1137,7 @@ "execution_count": null, "id": "d038d8a7", "metadata": { - "scrolled": false + "scrolled": true }, "outputs": [], "source": [ @@ -1101,11 +1158,11 @@ " \n", " # Pentru secțiunea „Bibliotecă”, vrem să ignorăm respondenții\n", " # care au zis că nu au permis de bibliotecă\n", - " if section == 'Bibliotecă' and index >= col2index('IA'):\n", - " filter_column_index = col2index('HZ')\n", + " if section == 'Bibliotecă' and index > col2index('JQ'):\n", + " filter_column_index = col2index('JQ')\n", " has_answer = common_df.iloc[:, filter_column_index] == 'Da'\n", " answers = answers[has_answer]\n", - " \n", + "\n", " plot_to_file(plot_fn, answers, section_output_directory / f'{index}.png')\n", "\n", " print(section)\n", @@ -1126,6 +1183,14 @@ " rating_question_indices = get_question_indices_by_type(RATING)\n", " plot_answers(plot_rating_question, rating_question_indices)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3c4ed6b0", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -1144,7 +1209,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/requirements.txt b/requirements.txt index bc5b845..c3f40f7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -pandas~=1.1 +pandas~=1.4 openpyxl~=3.0 -matplotlib~=3.3 +matplotlib~=3.5