"Szara codzienność" analityka czyli jak ułatwić sobie pracę: Usecase Tomasz Chojecki
2 Agenda 1. Czego potrzebują dane z badań na początku 2. Przechodząc do konkretów: jak w praktyce ujarzmić dane w "siedmiu linijkach" kodu 3. Pętla, jako sposób na ostateczne rozwiązanie problemu pracy z wieloma zmiennymi 4. Analityk ma zawsze czas na kawę: o automatyzacji na każdy dzień 5. Włącznie procedur w procesy działania firmy
3 Dlaczego? Transparentność Kontrola Powtarzalność Efektywność
4 Czego potrzebują dane z badań na początku W zależności od zaufania do źródła danych na wstępie warto / trzeba zawsze sprawdzić kilka rzeczy: Zmienne techniczne -status -flash -itp Tok wywiadu czyli poprawność filtrów Rozkład zrealizowanej próby Eliminacja ściemy -pytania otwarte -schematy odpowiedzi Spójność logiczna odpowiedzi respondentów
5 Przechodząc do konkretów: jak w praktyce ujarzmić dane w "siedmiu linijkach" kodu get file, save outfile, keep, drop, compressed COUNT, COMPUTE if, DO IF, ENDIF, AND, OR, not, range, any RECODE, recode into, TO, THRU do repeat, end repeat numeric, string, VARIABLES LABELS, VALUELABELS, formats sort cases, select if frequencies, EXECUTE
6 Pętla, jako sposób na ostateczne rozwiązanie problemu pracy z wieloma zmiennymi (1) Sytuacja: Badanie online, Pytanie o spontaniczną znajomość marek napojów gazowanych w formie pytania otwartego, Pytanie o znajomość wspomaganą w formie pytania zamkniętego z kafeterią 35 pozycji, Klucz do pytania otwartego wzięty z pytania zamkniętego, Umiemy stosować w syntaxie warunki if. Zadanie: Uspójnienie odpowiedzi między pytaniami
7 Pętla, jako sposób na ostateczne rozwiązanie problemu pracy z wieloma zmiennymi (2) Możliwości: 35 x Wizard'Compute Variable ' 35 linii syntax'u if(s1_x=1) W1_x=1. Pętla lub lub do repeats1=s1_1 to S1_35 / W1=W1_1 to W1_35. if(s1=1) W1=1. end repeat.
8 Analityk ma zawsze czas na kawę: o automatyzacji na każdy dzień (1) Używamy syntax'u, posiłkujemy się kreatorami, wykorzystujemy pętle Możemy cały proces przejrzeć, sprawdzić, uruchomić ponownie Możemy w nowym projekcie wykorzystać całość lub fragmenty istniejącego skryptu po jego ewentualnej modyfikacji I co dalej? Czy to już koniec? Nie! Możemy pójść krok dalej
9 Analityk ma zawsze czas na kawę: o automatyzacji na każdy dzień (2) Tworzenie klocków czyli zamykanie często powtarzanych fragmentów w bloki i ich późniejsze wywoływanie Pozwala to: Zunifikować pewne czynności Ograniczyć miejsce / skrócić syntax Uprościć składnię Używać excela jako do wsparcia generowania syntaxu
10 Kilka przykładów
11 Definiowanie zestawów odpowiedzi (Multiple Response Sets)
12 Definiowanie zestawów odpowiedzi (Multiple Response Sets) Efekt użycia przycisku 'Wklej' / 'Paste' w kreatorze SPSS * Define Multiple Response Sets. MRSETS /MDGROUP NAME=$PSMerrorLABEL='Błędy w PSM' CATEGORYLABELS=VARLABELS VARIABLES=PSMerror_1 PSMerror_2 PSMerror_3 PSMerror_4 PSMerror_5 PSMerror_6 PSMerror_7 PSMerror_8 VALUE=1 /DISPLAY NAME=[$PSMerror].
13 Definiowanie zestawów odpowiedzi (Multiple Response Sets) Polecenia zamknięte w makrze DEFINE!mdGrupa(Nazwa=!charend(';') / Zmienne=!charend(';') / Labelka=!default('""')!cmdend). MRSETS /MDGROUP NAME=!Nazwa LABEL=!Labelka CATEGORYLABELS=VARLABELS VARIABLES=!Zmienne VALUE=1 /DISPLAY NAME=[!Nazwa].!ENDDEFINE I ich wywołanie!mdgrupa Nazwa=$PSMerror ; Zmienne=PSMerror_1 to PSMerror_8. lub!mdgrupa Nazwa=$PSMerror ; Zmienne=PSMerror_1 to PSMerror_8 ; Labelka="Błędy w PSM".
14 Definiowanie zestawów odpowiedzi (Multiple Response Sets) Dalsze uproszczenie makra DEFINE!mdGrupa(!POS!TOKEN(1)/!POS!CHAREND(';')/!POS!default('""')!CMDEND). MRSETS /MDGROUP NAME=!1 LABEL=!3 CATEGORYLABELS=VARLABELS VARIABLES=!2 VALUE=1.!ENDDEFINE. I wywołanie jego nowej postaci!mdgrupa $PSMerror PSMerror_1 to PSMerror_8. lub!mdgrupa $PSMerror PSMerror_1 to PSMerror_8; "Błędy w PSM".
15 Kontrola spójności odpowiedzi na pytania PSM (Price Sensitivity Meter) Blok pytań: Jaka cena jest niska za dany produkt / usługę? (B) Jaka cena jest wysoka lecz wciąż akceptowalna? (C) Jaka cena jest zbyt wysoka aby rozważać zakup? (D) Jaka cena jest podejrzanie niska i może oznaczać niską jakość? (A) Warunki do sprawdzenia: A < B, A < C, A < D, B < C, B < D, C < D Chcemy by 'raport' zawierał informacje o liczbie: Błędnych wywiadów (jakikolwiek błąd) Poszczególnych błędów w wywiadach Poprawnych wywiadów
16 Kontrola spójności odpowiedzi na pytania PSM (Price Sensitivity Meter) numeric Q4error_1 to Q4error_8 (f1). recode Q4error_1 to Q4error_8 (else=0). recode Q4_1 Q4_2 Q4_3 Q4_4 (999=sysmis). if(q4_2>=q4_1) Q4error_2=1. if(q4_2>=q4_3) Q4error_3=1. if(q4_2>=q4_4) Q4error_4=1. if(q4_1>=q4_3) Q4error_5=1. if(q4_1>=q4_4) Q4error_6=1. if(q4_3>=q4_4) Q4error_7=1. count Q4error_1=Q4error_2 to Q4error_7 (1). recode Q4error_1 (1 thru 6=1)(else=0). recode Q4error_1 (1=0)(0=1) into Q4error_8. recode Q4_1 Q4_2 Q4_3 Q4_4 (sysmis=999). var lab Q4error_1 "Jakikolwiek błąd" Q4error_2 "-Za Tani >= Tani" Q4error_3 "-Za Tani >= Drogi" Q4error_4 "-Za Tani >= Za Drogi" Q4error_5 "- Tani >= Drogi" Q4error_6 "-Tani >= Za Drogi" Q4error_7 "- Drogi >= Za Drogi" Q4error_8 "Jest ok".!mdgrupa $Q4error Q4error_1 to Q4error_8 ; "Błędy w PSM".
17 Kontrola spójności odpowiedzi na pytania PSM (Price Sensitivity Meter) Define!KtrPSM(Tani=!charend(';') / ZaTani=!charend(';') / Drogi=!charend(';') / ZaDrogi=!charend(';') / Missing=!cmdend). numeric PSMerror_1 to PSMError_8 (f1). recode PSMerror_1 to PSMError_8 (else=0). recode!tani!zatani!drogi!zadrogi(!missing=sysmis). if(!zatani>=!tani) PSMerror_2=1. if(!zatani>=!drogi) PSMerror_3=1. if(!zatani>=!zadrogi) PSMerror_4=1. if(!tani>=!drogi) PSMerror_5=1. if(!tani>=!zadrogi) PSMerror_6=1. if(!drogi>=!zadrogi) PSMerror_7=1. count PSMerror_1=PSMerror_2 to PSMerror_7 (1). recode PSMerror_1 (1 thru hi=1)(else=0). recode PSMerror_1 (1=0)(0=1) into PSMerror_8. recode!tani!zatani!drogi!zadrogi(sysmis=!missing). var lab PSMerror_1 "Jakikolwiek błąd" PSMerror_2 "-Za Tani >= Tani" PSMerror_3 "- Za Tani >= Drogi" PSMerror_4 "-Za Tani >= Za Drogi" PSMerror_5 "- Tani >= Drogi" PSMerror_6 "- Tani >= Za Drogi" PSMerror_7 "- Drogi >= Za Drogi" PSMerror_8 "Jest ok".!mdgrupa $PSMerror PSMerror_1 to PSMerror_8 ; "Błędy w PSM".!EndDefine.
18 Kontrola spójności odpowiedzi na pytania PSM (Price Sensitivity Meter) Wywołanie i efekt!ktrpsm Tani=Q4_2 ; ZaTani=Q4_1 ; Drogi=Q4_3 ; ZaDrogi=Q4_4 ; Missing=999. Nieważona liczebność Liczebność % z N Ogółem w kolumnie Ogółem 450 450 100,0% Jakikolwiek błąd 145 145 32,2% - ZaTani >= Tani 125 125 27,8% - ZaTani >= Drogi 31 31 6,9% Błędy w PSM - ZaTani >= ZaDrogi 22 22 4,9% - Tani >= Drogi 50 50 11,1% - Tani >= ZaDrogi 28 28 6,2% - Drogi >= ZaDrogi 34 34 7,6% Jest ok 305 305 67,8%
19 Włącznie procedur w procesy działania firmy Transparentność: Zapis całości procesu oraz sposobu wykonania poszczególnych jego etapów Kontrola: Możliwość weryfikacji sposobu przetwarzania / analizowania danych Komfort pewność co do jakości danych i analiz Powtarzalność: Możliwość i łatwość adaptacji w przypadku zmiany założeń, oczekiwań, danych źródłowych itp. Możliwość wykorzystania części lub całości w przyszłych podobnych projektach Źródło elastyczności zespołu (wymienność/ zastępowalność osób) Efektywność: Szybkość, minimalizacja ryzyka błędów i konieczności powtórzeń
20 Podsumowanie: Poziomy wykorzystywania syntaxu 1 2 3 4 5 Nigdy i nigdzie Wklejam Piszę Zamykam w klocki Tworzę własne
21 Dziękuję Tomasz Chojecki tomasz.chojecki@grupaiqs.pl