- Pobierz link
- X
- Inne aplikacje
- Pobierz link
- X
- Inne aplikacje
Ostatnio miałem taką przygodę, że chciałem pomóc pewnej osobie z ankietami. Zacznijmy jednak może od mojej dygresji.
Ankiety do pracy dyplomowej... po co?
Ja jestem akurat przeciwnikiem sztucznego intelektualizowania społeczeństwa i wywyższania studiów jako czegoś "wspaniałego". Dziś studia to taka szkoła średnia II poziomu, tak jest i koniec. W jakim celu do pracy dyplomowej są potrzebne ankiety ? Przecież każdy chyba wie, że większość osób i tak to będzie symulować. Np. można zrobić sobie w arkuszu kalkulacyjnym sztuczne odpowiedzi, albo prościej poprosić kilka osób o zrobienie ankiety w np. formularzu Google. Jeżeli potrzebujemy 100 ankiet to jak 10 osób zrobi nam po 10 razy ankietę to uzyskamy ten sam efekt, czyli 100 ankiet.
Więc teraz sobie sami odpowiedzmy, jaką takie "badania" mają wartość ? Zerową przecież nawet jak założymy, że pierwsze 10 ankiet jest "szczerych" to jednak pozostałe 90 jest wyklikane po znajomości.
Ja na studiach magisterskich do swojej pracy na szczęście mogłem korzystać ze źródłem wtórnych, czyli ankiet i badań przeprowadzonych już wcześniej, nie musiałem się z tym bawić, ale osoba której pomagałem, nie miała już tyle szczęścia.
100 ankiet za jednym zamachem!
Niestety coś poszło nie po myśli pewnej osoby i ankiety zostały źle wykonane. Nie wchodzę w szczegóły, bo nie jest to teraz ważne. Ważne jest to, że była potrzeba na 100 ankiet na cito.
Jak pisałem wcześniej jednym z rozwiązań jest ręczne zrobienie 100 ankiet np. w formularzu Google. Innym wyjściem jest otwarcie np. Excela zrobienia nagłówków z "pytaniami" i ręczne wypełnienie tych100 rekordów. Możliwe... ale jednak czasochłonne i chyba już lepiej zrobić te 100 ankiet ręcznie w formularzu.
Ja poszedłem jednak innym torem i napisałem prosty skrypt w Python, który tworzy nam plik Excel (może to być też CSV ale ja jednak zostałem przy Excel-u) z odpowiedziami do wcześniej przygotowanej "ankiety". Ten kod poniżej nie jest tym od ankiet, to przykładowy kod.
from openpyxl import Workbook
import random
import os
# List of questions with answers
questions = [
{"question": "Sex", "answers": ["Female", "Male"]}, #0
{"question": "Age", "answers": ["19-20", "21-22", "23-24", "25-26", "27 or more"]}, #1
{"question": "Country", "answers": ["Poland", "USA", "China", "Russia", "Other"]}#2
]
multi_choice_questions = [
{"question": "Check 1, 2, 3 or all", "options": ["1","2","3"]},
# Add more questions here
]
# Create 100 answers
wb = Workbook()
ws = wb.active
ws.append(["Question"] + [q["question"] for q in questions + multi_choice_questions])
for i in range(1, 101):
row = [i]
for q in questions:
answer = random.choice(q["answers"])
row.append(answer)
for q in multi_choice_questions:
num_answers = random.randint(1, len(q["options"]))
answers = random.sample(q["options"], num_answers)
row.append(', '.join(answers))
ws.append(row)
file = "questions.xlsx"
default_directory = os.path.dirname(__file__)
file_path = os.path.join(default_directory, file) #
wb.save(file_path)
wb.close()
Program ten można bardziej rozbudować, ja jednak zrobiłem go na szybko, zajęło to dzień ponieważ zacząłem na komputerze a skończyłem na tablecie. I tak wieczorem na komputerze jeszcze troszkę go edytowałem. Pozwoliło mi to na zrozumienie, dlaczego tablet nie zastąpił laptopa i nigdy tego nie zrobi. To jednak osobny temat.
Co ten skrypt robi?
W pierwszej kolejności potrzebujemy 2 bibliotek
from openpyxl import Workbook
import random
import os
1. Pozwoli nam pracować z arkuszem kalkulacyjnym,
2. Potrzebny nam jest do losowania,
3. Potrzebny jest do lokalizowania miejsca zapisu pliku.
Poniżej definiujemy listę pytań oraz pytań wielokrotnego wyboru.
{"question": "Sex", "answers": ["Female", "Male"]}
Budowa jest prosta z prawej strony #0 dodałem indeks, może być potrzebny jak chcemy wskazać ręcznie konkretne pytanie.
Budowa jest prosta z prawej strony #0 dodałem indeks, może być potrzebny jak chcemy wskazać ręcznie konkretne pytanie.
Kolejnym krokiem jest tworzenie pliku Excela, aktywujemy i dodajemy nagłówki które są "question" w 2 zmiennych powyżej.
Generowanie odpowiedzi to pętla for gdzie ustawiamy ilość odpowiedzi jaką potrzebujemy. Na zasadzie 1 do X+1 gdzie X to ilość odpowiedzi. Czyli jak chcemy 100 to dajemy 101.
Program do każdego pytania losuje liczbę odpowiedzi od 1 do liczby dostępnych opcji. I robi tak X razy.
Na końcu zapisuje utworzony arkusz do pliku, w przykładzie jest to questions.xlsx i warto pamiętać, że plik powstaje w miejscu w którym jest uruchomiony program, ale możemy to zmienić.
Tym sposobem otrzymamy Excela z odpowiedziami do ankiety, tutaj najbardziej czasochłonne może być wpisywanie pytań wraz z odpowiedziami. Ponieważ każde pytanie musimy tu wpisać wraz z opcjami do wyboru.
Co warto dodać?
Tego tutaj nie zrobiłem ale jeżeli w naszej ankiecie mamy np. pytanie czy jesteś studentem a później pytanie wskaż uczelnie i np.: AGH, UEK, UJ, Inne to w przypadku odpowiedzi "Nie" pytanie o uczelnie nie powinno zostać uznane. Tutaj można zrobić np. warunek, że gdy w pytaniu o bycie studentem padnie odpowiedź "Nie" to w kolejnym wpisz "Nie studiuję". I to nie powinno być możliwą odpowiedzią do wyboru, ponieważ program losując odpowiedź może wybrać coś w stylu
Nie studiuję, ale w pytaniu o to czy studiuję już mam Tak. Jest to oczywisty błąd logiczny.
Nie studiuję, ale w pytaniu o to czy studiuję już mam Tak. Jest to oczywisty błąd logiczny.
Podobny problem może nas spotkać jak w pytaniu z wieloma opcjami do wyboru, będzie odpowiedź w stylu "Nie..." np. Które z tych marek znasz: "A", "B", "C", "D", "E", "F", "Nie znam tych marek". Chcemy dowiedzieć się jaka marka jest popularniejsza. Program może wylosować odp. "Nie znam...", "C", "F". I znowu błąd, ponieważ nie możesz nie znać oraz znać marek, pytanie było które znasz ,a tych których nie znasz, nie zaznaczasz, chyba, że nie znasz żadnej to masz gotową odpowiedź.
Można pierwszy problem rozwiązać albo na poziomie skryptu z losowaniem odpowiedzi, bądź na poziomie osobnego programu, który zmieni nam odpowiedzi już w gotowym pliku Excel. Gdzie w kolumnie z pytaniem "Czy studiujesz" jak wykryje odpowiedź "Nie" to w kolumnie obok zmieni wartość odpowiedzi na "Nie studiuję". O to przykład
import pandas as pd
df = pd.read_excel('questions.xlsx')
column_with_question = df['Czy studiujesz?']
df.loc[column_with_question == 'Nie', 'Na jakiej uczelni studiujesz?'] = 'Nie studiuję'
df.to_excel('questions-update.xlsx', index=False)
Ponownie krótki opis.
Pobieramy dane z pliku xlsx, Przygotowujemy zmienną z kolumna do sprawdzenia. Zmieniamy wartość tam gdzie wynik będzie True czyli w kolumnie "Czy studiujesz" jest Nie to w kolumnie "Na jakiej uczelni studiujesz" w rzędzie z odpowiedzią "Nie" wstawiamy "Nie studiuję".
I koniec z ankietą
I tym prostym sposobem, uzyskujemy interesującą nas ilość odpowiedzi na przygotowane pytania.
Co jest nam potrzebne ?
Zainstalowany Python na komputerze, i biblioteki, być może jak chcesz to będziesz musiał pobrać bibliotekę openpyxl ponieważ pozostałe powinny być zainstalowane z Pythonem.
Zainstalowany Python na komputerze, i biblioteki, być może jak chcesz to będziesz musiał pobrać bibliotekę openpyxl ponieważ pozostałe powinny być zainstalowane z Pythonem.
pip install openpyxl w CMD pozwoli zainstalować bibliotekę do pracy z arkuszem kalkulacyjnym.
Wystarczy sam Python, tutaj nie potrzebne jest specjalne IDE ale polecam Visual Studio Code.
Warto też utworzyć sobie folder w którym zapiszemy nasz skrypt ponieważ plik xlsx zostanie utworzony właśnie tam gdzie uruchomimy nasz program, oczywiście można ręcznie ustalić miejsce jego utworzenia.
Program może wymagać zmian i ulepszeń. Najważniejsze to uproszczenie modelu dodawania pytań, zamiast w kodzie to np. w pliku tekstowym zewnętrznym. Może to pozwolić na lepszą elastyczność w działaniu programu. Ponieważ teraz jak chcemy dodać pytanie, musimy uruchomić kod źródłowy programu i ręcznie dodać go. Nie jest to trudne ale można to ulepszyć, aby takie pytanie dodać do pliku tekstowego. Również można dodać warunki, że w przypadku odpowiedzi, które automatyczne powinny wykluczyć inne jak wcześniej przykład ze studiowaniem, program wykryje jeszcze w trakcie tworzenia ankiet.
Tutaj link do GitHub wraz z kodem 1 i 2 skryptu.
Komentarze
Prześlij komentarz