Praktik för experimentell psykologi 2023
Ignace Hooge, Roy Hessels, Jeroen Benjamins och Yentl de Kloe
Index
- Välkommen till Practicum Experimental Psychology (PEP)
- Om Författarna
- Uppdrag 1a Stroopuppgiften
- Uppgift 1b. Trappexperimentet
- Uppdrag 2. Detektionsuppgiften
- Uppgift 3a. Installera en programmeringsmiljö
- Uppgift 3b. Förstå kod och kommentera
- Uppdrag 4. Stränghantering
- Uppgift 5. Läsa filer från flera mappar
- Uppgift 6. Arbeta med elevstorleksdata
- Uppdrag 7. Segmentera och märka eyetracking-data
Välkommen till Practicum Experimental Psychology (PEP)
Av: Ignace Hooge och Roy Hessels, 2019
Under de kommande veckorna kommer du att bygga experiment, bearbeta signaler och analysera data med hjälp av programmeringsspråket Python och experimentbyggaren PsychoPy. Målet med den här kursen är att hjälpa dig att bli en skicklig experimentell psykolog. Färdigheterna du kommer att lära dig i den här kursen är användbar inom alla grenar av experimentell psykologi. Vi har valt Python och PsychoPy eftersom de är öppen källkod och populära. De kommer sannolikt att vara standardverktygen i den experimentella psykologin imorgon. I den här kursen kommer vi att behandla ämnen som är allmänt tillämpliga inom alla grenar av experimentell psykologi (t.ex. bygga ett experimentellt skript, automatiskt ladda filer och hantera felmeddelanden). Vi lär dig också grunderna för databehandling med hjälp av exempel från eyetracking-forskning (t.ex. beräkning av genomsnittlig pupillstorlek och automatisk märkning av fixationer). Medan vi använder eyetracking för att demonstrera databehandlingsteknikerna, generaliserar de lätt till analysen av andra vanliga mått inom psykologi (t.ex. hudkonduktans, hjärtfrekvens).
Uppgifterna i denna kurs är indelade i 3 typer av färdigheter: 1. Bygga ett experiment med visuella stimuli (Uppdrag 1, 2) 2. Utveckla och utöka dina allmänna pythonfärdigheter (Uppgift 3, 4 och 5) 3. Bearbeta tidsserier data (uppdrag 6 och 7).
Vad behöver du för att delta i PEP? 1. En dator och en internetanslutning. Tillvägagångssättet som vi följer i PEP är mycket likt tillvägagångssättet i Experimenteren och Programmeren. En sak som skiljer sig är att vi har lagt till en ny inlärningsstrategi. Istället för att låta dig ta reda på allt själv, kan du också lära dig genom att studera ett fungerande exempel. Den här praktiken innehåller två uppgifter där du ska bygga ett experiment med hjälp av ett YouTube-klipp. Du förväntas bygga ditt projekt tillsammans med klippet. 2. Grundläggande Python-kunskaper. Den bästa förberedelsen för den här kursen är att fräscha upp Python-färdigheterna som du har lärt dig under Programmeren.
Betygsättning i PEPPEP består av 7 inlämningsuppgifter och 8 träffar (1a och 1b räknas som en uppgift; 3 och 3b räknas som en uppgift). För att bli godkänd på kursen måste du göra de 7 inlämningsuppgifterna. Du ansvarar för att ditt arbete signeras av din lärare.
Lycka till med PEP och ha det riktigt kul!
Om Författarna
Ignace Hooge (1966) studerade experimentell fysik vid Utrecht University och doktorerade 1996 (avhandling: Control of eye movement in visual search). Sedan 2001 är han anställd vid den samhällsvetenskapliga fakulteten. Hans huvudsakliga intressen är VisionScience, Oculomotor Control och eye-tracking-metodik. Ignace är programkoordinator för masterprogrammet Applied Cognitive Psychology och belönades med årets lärare vid Utrecht University 2015. Publikationer: scholar.google/citations?user=uSRpKW4AAAAJ
Roy Hessels (1990) studerade psykologi och tillämpad kognitiv psykologi vid UtrechtUniversity och doktorerade 2017 vid samma universitet. Hans huvudsakliga intressen är ögonrörelser och den roll de spelar i interaktion med andra och världen. I sin forskning använder Roy bärbara eyetrackers och dubbla eyetracking-inställningar, och hans deltagare sträcker sig från spädbarn till vuxna. Publikationer: scholar.google/citations?user=u1A7Z34AAAAJ
Jeroen Benjamins (1980) har en magisterexamen i experimentell psykologi med aminor i neurobiopsykologi, och doktorerade i psykologi 2008. Han är anställd sedan 2015 som biträdande professor vid Utrecht University. Jeroen bedriver forskning inom både hälsopsykologi och kognitiv psykologi. Han använder de senaste (mobila) eyetracking-teknikerna och hans kunskaper inom onlineforskning och programmering för att göra psykologisk forskning bättre. Publications:scholar.google/citations?user=6A5vWv4AAAAJ
Yentl de Kloe (1993) studerade psykologi med en biämne i artificiell intelligens och tillämpad kognitiv psykologi vid Utrecht University. Sedan oktober 2018 är hon anställd vid samma universitet som forskare och hon arbetar med en doktorsavhandling. I sin forskning använder hon eyetracking med spädbarn för att studera utvecklingen av uppmärksamhet och blickföljd. Yentl är främst intresserad av dataanalys och älskar att lära sig och tillämpa olika datavetenskapliga tekniker med hjälp av olika programmeringsspråk.
Uppdrag 1a Stroopuppgiften
Av: Ignace Hooge, 2018Revision: Roy Hessels, 2021
Mål:
I slutet av denna uppgift kommer du att kunna: - Installera PsychoPy - Programmera ett enkelt experiment i PsychoPy - Generera ett python-skript med PsychoPy - Känna igen lite Python-kod i skriptet
I den här uppgiften kommer du att bygga ett enkelt experiment från grunden med PsychoPy. Övningen är tänkt att visa dig hur effektivt och effektivt PsychoPy kan vara. Följ bara stegen nedan.
Ladda ner och installera PsychoPy.
Gå till YouTube och starta klippet av John Peirce (skaparen av PsychoPy).youtube/watch?v=VV6qhuQgsiI
Starta YouTube-klippet och bygg din Stroop-uppgift tillsammans med hans film.
Kör Stroop-uppgiften. Tänk på hur du enkelt kan manipulera experimentet (annan skärm, fler försök etc.). I vilket typsnitt presenteras stimuli och instruktioner? Typsnittsstimuli: ................. Typsnittsinstruktioner: ................ .....
Gå till knappen PsychoPy-skript och generera Python-skript (se de röda pilarna i de två versionerna av PsychoPy nedan).
Skapa skriptet. Titta i Python-skriptet för # Initiera komponenter för rutinmässiga "instruktioner". Kan du hitta typsnittet på instruktionerna? Vad är typsnittet på instruktionerna? ................. Ersätt det typsnittet med tider. Kör skriptet genom att trycka på den gröna springande mannen eller den gröna pilen (beroende på vilken version av PsychoPy du har). Vad hände med typsnittet i instruktionerna för experimentet?
Du kan försöka hitta saker i din kod och ändra dem. Leta efter expInfo ={'session': '001', 'deltagare': ''}. Ändra session till session och deltagare i provperson. Spara Python-skriptet och kör det. Fungerade det?
Gå till # Ställ in fönstret.
Vad syftar siffrorna efter storlek på (i mitt fall är det [3440, 1440])? ................Ändra siffrorna till 4000 och 2000. Spara och kör koden. Vad hände och varför? Händde ingenting? Du kanske inte såg något hända. Gå tillbaka till skriptet och titta på utdata (under skriptfönstret, eller i fönstret 'Experiment löpare' i den senaste versionen av PsychoPy). Där kan du läsa:
VARNING Användaren begärde helskärm med storlek [4000 2000], men skärmen är faktiskt [3440, 1440]. Använder verklig storlek
Förstår du vad som hände?
Ta en titt på resten av Python-koden. Vilka andra inställningar av experimentet kan du hitta som du har ställt in själv tidigare?................................... ................................................................ .....
Det finns forskare som använder PsychoPy ofta och utelämnar det grafiska användargränssnittet och programmet direkt i manusredigeraren. Om du vill lära dig genom att studera arbetsexempel, sök bara efter dem. Det finns gott om dem.
Uppgift 1b. Trappexperimentet
Av: Yentl de Kloe och Ignace Hooge, 2018-Revision: Roy Hessels, 2021; 2022
Mål:
I slutet av denna uppgift: - kommer du att kunna programmera mer komplicerade experiment i PsychoPy - ha kunskap om att införliva Python-kod i PsychoPy-projekt - ha kunskap om olika typer av trappor - ha kunskap om maskering - har sett några smarta strategier för att bygga experiment
Den här uppgiften skiljer sig lite från vad du är van vid i andra kurser. Det är faktiskt av samma format som uppgift 1. Vi skapade tre YouTube-klipp och du förväntas bygga ett PsychoPy-experiment tillsammans med YouTube-klippet. Det aktuella experimentet är komplicerat. Du förstår förmodligen inte allt som visas i det här klippet. Vi anser att detta inte är ett problem. Vi förväntar oss att du lär dig tillräckligt för att kunna utföra uppgift 2, där du programmerar en upptäcktsuppgift utan hjälp av ett klipp. På YouTube kan du hitta många handledningar som kan hjälpa dig att bygga ett experiment. Tillvägagångssättet som valts i den aktuella uppgiften gör dig bekant med att lära av ett exempel. Att lära sig genom exempel är en metod som många människor använder nuförtiden. YouTube innehåller mycket nonsens, men också riktigt värdefulla exempel (om du är intresserad av andra programmeringsspråk kan du kolla lärande/kurser efter att du är klar med uppgiften).
I det här uppdraget kommer du att bygga en adaptiv trappa. Om du har gått kurser i perception kan du ha lärt dig om trappmetoder tidigare. Om inte, läs avsnitten om "Trösklar" och "Experimentering" på sidan PsychophysicsWikipedia (en.wikipedia/wiki/Psychophysics).
Du kan nu börja med det första klippet. Glöm inte att köra ditt program efter att du har lagt till nya element. Du behöver inte slutföra trappan varje gång du testar den (det skulle ta lång tid). I slutet av uppdraget kommer du att göra en ordentlig körning av trappan.
Del 1: youtube/watch?v=BQe_z3Y2hpoObs: handledningen gjordes på en äldre version av PsychoPy. Se beskrivningen av videon för några mindre ändringar om du använder den senaste versionen av PsychoPy.
Runt 1:24. Yentl pratar om att mäta trösklar med trappan. Vilken typ av trösklar pratar hon om? (Tips: läs Wikipedia-avsnittet om "Trösklar").............................Yentl nämner också galler. Mer specifikt är gallren som Yentl använder kända som Gabor-lappar. Vad är en Gabor-lapp? ............................
Runt 5:56. Du har skapat en välkomstskärm som försvinner efter ett tryck på mellanslagstangenten. Prova att köra experimentet genom att trycka på den lilla gröna mannen eller grönpilen (vilken du ser beror på vilken version av PsychoPy du har) i gränssnittets övre del. Ser du din välkomstskärm? Försök och tryck på några slumpmässiga tangenter (inte mellanslagstangenten), vad händer? Hur kan du förklara det? Tryck på mellanslagstangenten och kontrollera själv att ditt experiment gör vad det borde göra.
Runt 7:29. Yentl nämner interfolierade trappor. Vad är en interfolierad trappa? ............................Om du inte kan ta reda på vad en interfolierad trappa är, oroa dig inte. Vi återkommer till frågan om vad interfolierade trappor är senare.
Runt 9:50. Nreps är satt till 40 i det här exemplet. När behöver du fler reps, när behöver du färre? ............................
Om att välja ett högt eller lågt antal för Nreps: Om du ställer in Nreps till 1, kan du förvänta dig att du skulle ha en testversion för varje tillstånd. Men om du provar detta kommer du att upptäcka att så inte är fallet. Prioriteten i denna trappprocedur är att avsluta trappan. Trappan börjar med en 1-upp-1-ner-procedur och ändras till en 1-upp-3-ner-procedur efter den första vändningen (igen, ta en titt på Wikipedia-sidan om du inte vet vad detta betyder). Efter varje reversering kommer PsychoPy att flyttas till nästa stegstorlek som du anger i villkorsfilen (i det här fallet kommer de att ställas in på [4,2,2,1]). Trappan slutar efter den senaste vändningen. Om du ställer in Nreps till ett antal mindre än vad som behövs för att avsluta trappan, kommer den att avsluta trappan och sedan avslutas. Men om du ställer in den på fler försök än vad som behövs (i det här fallet 50), kommer den att fortsätta finjustera med den minsta stegstorleken (i det här fallet [1]) genom 1-upp-3-ned tills antalet set reps är nådde.
Runt 10:00. Yentl talar om en mask (hon hänvisade också till mask i början av filmen). Vad är visuell maskering? ............................Varför använder forskare masker i sina experiment? ............................Varför används en mask mellan presentationen av de två gallren? Vad är den perfekta masken för Gabor-lappar? ............................Vad är en perfekt mask för ansiktsstimuli? ............................(detta är en bra källa scholarpedia/artikel/Visual_masking)
Runt 12:32. Yentl skapar ett galler på 4 cm gånger 4 cm. Om deltagaren befinner sig på ett avstånd av 0 från skärmen, vad är diametern på gallret i grader? ............................
Runt 18:39 programmerar Yentl på språket Python. Först skapar hon en tom lista. Senare skriver hon
list('Ori-Mask_' + str(x))
Du är förmodligen inte bekant med den här typen av Python-programmering. Om du vill försöka förstå kommandot, starta Spyder och prova följande. Om du inte har Spyder på din dator kan du hoppa över detta eller installera Spyder (gå till uppdrag3a, det är en instruktion för att installera Spyder)
cars = ['Renault', 'Peugeot', 'Mercedes']cars("Hyundai")print(cars)
Om du inte vill bli distraherad av Python-programmering ännu, oroa dig inte, den här typen av syntax förklaras och används i uppgift 4. Om du inte förstår detta just nu, acceptera det och fokusera på de andra sakerna hon visar i klämma.
Ta en kort paus innan du börjar med del 2 i denna uppgift.Del 2: youtube/watch?v=DM2HCT0KMxE
Ta en kort paus innan du börjar med del 3 i denna uppgift.Del 3: youtube/watch?v=paEZolBmIYM
Runt 2:52. Yentl visar att trappan kan köras sekventiellt. Vad är fördelen med att köra dem sekventiellt? ............................Vad är fördelen med att köra trappan sammanflätad? ............................Vad är nackdelen med en sammanflätad trappa? ............................
Nu när du har byggt ett trappexperiment är det dags att köra det och analysera data. Att köra 6 trappor med minst 40 försök per trappa kan dock ta lång tid. Det är inte särskilt roligt, om du samtidigt lär dig hur man bygger experiment. Om du gör följande ändringar i experimentet bör det bli mycket snabbare och fortfarande ge vettiga resultat (vilket innebär att du kan tolka dem):
Ändra nreps till 20 i Adap_Stair
Ta bort de två trapporna för horisontell orientering från Excel-filen
Ändra stegstorlekar till [3,3,2,2] i Excel-filen
Ändra startVal till 5 för trappor med etiketten '_High' i Excel-filen
Ändra startVal till 0 för trappor med etiketten '_Low' i Excel-filen
Spara Excel-filen och ladda om den i Adap_Stair
När du har gjort dessa ändringar kan du köra experimentet. Tänk på att mätning av trösklar är en knepig verksamhet. Om du inte koncentrerar dig under några försök eller ändrar avståndet mellan dig själv och datorskärmen kan du sluta påverka mätningen. Om du byter sittställning ett par gånger och inte koncentrerar dig på en halv minut kan dina resultat snabbt bli otolkbara. Det är inte konstigt att mätning av trösklar vanligtvis görs med vältränade deltagare fixerade i ett hakstöd. Med det i åtanke, kör ditt reviderade trappexperiment och öppna datafilen i Excel (efter att ha läst tipsen nedan). Datafilen sparas i mappen där ditt experiment är placerat, med början med deltagarnumret och ett understreck. VIKTIGT:
- Vi rekommenderar att du gör en kopia av din datafil innan du öppnar den i Excel. Om något går fel kan du alltid gå tillbaka till originalet utan att behöva köra om ditt trappexperiment.
- Nummerformatet för din datafil kanske inte är identiskt med det som används på din dator. Om du inte vet vad detta betyder, Google "nummerformat Excel" eller titta på följande video (på holländska):youtube/watch?v=dcHpkczDHJc
Visualisera trapporna Om du plottar de två trapporna per orientering i en graf, kan du uppskatta orienteringsdiskrimineringströskeln. För att göra det, slutför följande steg:
- Spara datafilen som en .xlsx-fil (detta gör att grafer kan sparas med data)
- Välj all data och sortera den efter "Adap_Stair" (under Data -> Sortera)
- Gör en graf (av typen Scatter med raka linjer) för den vertikala orienteringen och en graf för den sneda orienteringen. Se till att du väljer rätt delar från kolumnerna "Adap_Stair" och "Adap_Stair".
Tips: Rita intensiteten som en funktion av repetitionsnummer (thisRepN) för en trappa först innan du försöker lägga till den andra trappan. Du kanske vill Google hur man lägger till en andra rad till en befintlig spridningsdiagram.
Ta en titt på dina två grafer. En sak att först titta efter är om trappan konvergerade. Det betyder att intensiteten i de sista försöken ligger nära varandra för de två trapporna. Konvergerade trapporna?................................
Uppskatta trösklarna för orienteringsdiskriminering för sned- och vertikalorientering. Vad är dem? Är de nära varandra?................................
Stämmer dina resultat med det som beskrivs av "snedeffekten"? Tips: checkWikipedia..................................
Uppdrag 2. Detektionsuppgiften
Av: Ignace Hooge, 2019Revision: Roy Hessels, 2022
Mål:
I slutet av denna uppgift kommer du att kunna: - bygga ett detektionsexperiment i PsychoPy från grunden. - dela upp ett stort problem i mindre delar, som du kan lösa separat. - gör en plan innan du faktiskt börjar programmera. - skriva en form av pseudokod.
Ditt uppdragVälkommen till uppdraget att bygga en upptäcktsuppgift. Dess syfte är att ge dig erfarenhet av att bygga ett experiment, inklusive alla steg och tankeprocesser som är involverade. I slutet av uppdraget krävs att du producerar tre stycken arbeten.
- En plan. Detta kan ha formen av en storyboard (se nedan för detaljer), men du kan också välja ett annat tillvägagångssätt om du föredrar det.
- Någon form av pseudokod (se nedan för detaljer). Men det här behöver inte vara "riktig" pseudokod: det vi vill se är att du har delat upp programmeringen av ett komplett experiment effektivt i delproblem som du kan lösa separat.
- Ett fungerande PsychoPy-projekt (=datorprogram).
Inledning Att bygga ett experiment är en komplicerad uppgift. Du står inför två problem samtidigt. Den första är att du som nybörjare sannolikt kommer att göra många fel eftersom du ännu inte är så bekant med experimentbyggarmiljön. Att lära sig arbeta med ett program är ungefär som att lära sig prata franska, spela fiol eller snowboard: det kräver mycket övning. Det andra problemet är att den underliggande uppgiften kan vara svår att reda ut. Som ett exempel, säg att du måste skriva en algoritm för att poängsätta svaren på ett frågeformulär. Detta innebär faktiskt två separata utmaningar. Du måste hitta en formel för själva rescoring (rescoring-algoritmen), och du måste kunna implementera formeln i din datormiljö (till exempel ett programmeringsspråk). Att arbeta i PsychoPy är inte programmering i bokstavlig mening. Det har dock mycket ovanligt med programmering. Härifrån avser jag att bygga ett experiment i
PsychoPy som programmering. Många forskare och programmerare skriver allt i pseudokod först (en.wikipedia/wiki/Pseudocode). Detta är ett smart tillvägagångssätt, eftersom att tänka på ett datorspråk eller datormetod kan vara mycket restriktivt och kräver att du arbetar med en hög detaljnivå. I den här uppgiften kommer du dock inte att skriva egentlig pseudokod, bara något som ser ganska likt ut. Låt mig förklara varför vi använder detta till synes komplicerade tillvägagångssätt. Programmering är helt enkelt att skriva eller skapa instruktioner för en dator. Du måste strukturera och förklara de uppgifter du vill att den ska göra på ett sådant sätt att den förstår dem. Så du måste göra två saker rätt: tala datorns språk perfekt och ordna problemet du vill lösa på ett sådant sätt att det kan uttryckas på det språket. Du bör betrakta datorn som en mycket lojal men riktigt dum tjänare. När du säger åt den att göra något måste du se till att inte anta att den kommer att förstå vad du menar. Du måste veta exakt vad den vet och vad den kan. Du måste också vara väldigt tydlig och helt otvetydig. Det kan tyckas lätt, men det är faktiskt väldigt svårt.
Ett exempel Hittills har vi hoppat över det som bör vara ditt första steg när du programmerar. Om du ska programmera ett experiment behöver du en plan för själva experimentet. Vi föreslår något liknande storyboards som används när man gör filmer. Dessa har fördelen att de låter dig presentera information parallellt såväl som insekvens. För att klargöra vad jag menar ska jag ge ett komplett exempel, från början till slut.
Jag ska producera två saker. 1. En storyboard. 2. Pseudokod.
Plan och pseudokod: ett heltäckande exempelMitt experiment i det här exemplet är enkelt. Antag ett sökexperiment. Jag tar del av bilderna "var är Wally" som gör och inte innehåller Wally(en.wikipedia/wiki/Where%27s_Wally%3F). Deltagarens uppgift kommer att vara att avgöra om en stimulansskärm innehåller Wally. Dessa bilder är mitt mål närvarande och mål frånvarande försök. Nedan ser du ett exempel på asoryboard för experimentet var är Wally.
Storyboarden.
Figur 1. Mitt var är Wally-experimentet. Det här är en slarvig och ful storyboard ("wiw" betyder "var är wally" och "sub" och "subj" betyder "ämne"). Jag förväntar mig att du gör en bättre. Har jag missat någon information?
Förbered storyboarden som du vill, men jag hoppas att du gör ett bättre jobb som jag gjorde. Ibland är det bästa bara att rita det på en whiteboard och sedan fotografera det. PowerPoint och Illustrator kan också vara till stor hjälp, men en affisch på ett stort pappersark kan också räcka. Kom ihåg att jag precis slängde ihop något för att göra exemplet i figur 1; din version behöver inte se ut så. Det är absolut inte meningen att du ska kopiera det jag har gjort (även om du kan om du vill) – det finns förmodligen mycket bättre, smartare och mer attraktiva sätt att göra detta på. Allt jag har gjort är att ge ett exempel för dem som inte kan visualisera vad jag amaskerar för. Hur som helst räcker inte storyboardet ensamt – man måste också kunna motivera och förklara det (vilket jag inte har gjort här).
Pseudokoden I din pseudokod, inkludera allt som behövs för att genomföra stimuluspresentationen. Namnge alla relevanta variabler (exponeringstider, antal försök, etc.) och ge dem värden. Är min lista komplett eller har jag missat något?
Ladda upp bilder Presentera en välkomstskärm. Vänta på mellanslagstangenten tryck för att fortsätta Upprepa för
Visa olika fixeringspunkter för 0 till 1 sVälj mål frånvarande eller mål närvarande stimulans Visa stimulans tills subj väljer vänster (närvarande) eller höger (frånvarande) pilstapelSpela in svar Beräkna antal korrekta svarVisa försökspersonens poängTacka försökspersonen för deltagandet
Allmänna råd
Det som är viktigt är att du bryter ner din uppgift i deluppgifter. Hela den här övningen är avsedd att låta dig öva på att sönderdela ett stort problem i så små bitar som var och en kan hanteras inom rimlig tid. Du kan kalla detta ett "anti-holistiskt" tillvägagångssätt. Och som du måste ha insett vid det här laget är det ett tillvägagångssätt jag är ett stort fan av.
Din uppgift för idag
Hur bra är studenter från Utrecht University på att särskilja kort visade bilder från Utrecht och Amersfoort? Bygg ett enkelt upptäcktsexperiment med materialet du kan hitta på Blackboard. Materialet du måste använda består av två uppsättningar bilder (bilder från Utrecht, bilder från Amersfoort, bilder med masker och ett fixeringskors). Följ proceduren ovan, börja med en plan i form av en storyboard och pseudokod. Det är ditt jobb att programmera en upptäcktsuppgift av randomiserade försök. Tänk på följande: 1. För att bestämma vilken presentationstid du vill använda kan du köra korta piloter. 2. Tänk på allt du kan vilja randomisera (inklusive timing). 3. Du måste beräkna om varje svar från ämnet är korrekt, och visa antalet korrekta svar på ämnet i slutet. 4. En upptäcktsuppgift är inte en reaktionstidsuppgift. 5. Du måste använda maskerna. Om du inte har någon aning om vad en mask är avsedd för, fråga Google eller google scholar. Om du inte hittar något, fråga en lärare. 6. Programmera ett försök innan du programmerar hela experimentet. 7. Fundera på om du måste producera mer (instruktioner, tack, etc.).
Lycka till!
Uppgift 3a. Installera en programmeringsmiljö
Jeroen Benjamins och Ignace Hooge (2018)Språkredigering Sarah Cranko (2020)Redigerad för Python 3 av Jeroen Benjamins (2021)
För att kunna programmera i Python behöver du både en tolk och en editor. Innan vi förklarar vad dessa är och hur du använder dem, kommer du först att installera en IDE (integrerad utvecklingsmiljö) på din dator. I princip är du fri att välja vilken IDE du vill. I denna manual har vi valt att använda Anaconda, eftersom den här miljön fungerar bra på både Windows och Apple-datorer.
Gå till anaconda/produkter/individ, Anacondas webbplats för gratisversionen av deras programvara.
Klicka på knappen märkt Ladda ner, sidan rullas nedåt (vänster: Safari-exempel på en Mac, höger: Firefox-exempel på en Windows-dator)
Ladda ner versionen av python 64-bitars grafiska installationsprogram genom att klicka på den första länken under Apple- eller Windows-logotypen. (vänster: Safari-exempel på en Mac, höger: Firefox-exempel på en Windows-dator)
Om du använder en Windows-dator kan din webbläsare ställa följande fråga. Välj Spara fil.
Om du använder en Safari kan din webbläsare ställa följande fråga. Välj Tillåt.
Installation på en Mac tar följande steg:Hitta installationsprogrammet i din nedladdningsmapp.
Dubbelklicka på installationsikonen. När du får upp dialogskärmar, klicka alltid på ok, ja, godkänn och fortsätt tills du får en knapp märkt installera.
Klicka på installera och vänta ett par minuter.
På nästa skärm (se nedan), gör ett val. Du behöver inte installationsprogrammet längre, så det kan gå till papperskorgen.
Installation på en Windows PC tar följande steg: På en Windows PC hittar du installationsprogrammet i din webbläsares nedladdningsmapp (seered frame).
Välj "Öppna fil". Alternativ: om du vet var din webbläsare lagrar dina nedladdningar, gå till den mappen och dubbelklicka på installationsprogrammet för att öppna det.
Den första dialogskärmen visas. När du får en dialogskärm, klicka alltid på ok, ja, rekommenderas och acceptera och fortsätt. Om du får en varning om att din installationsplats innehåller mellanslag kan du antingen välja att ignorera den eller välja en annan installationsmapp om du vill. Efter några klick får du en knappmärkt installation (se exempel nedan).
Klicka på installera.
Efter installationen klickar du på Nästa.
Du är klar med installationen. Lämna kryssrutorna markerade om du vill ha extrainformation (det öppnar vissa webbläsarfönster som du kan stänga), eller avmarkera dem och klicka på Slutför. Du är färdig.
Hur man använder Python i AnacondaAnaconda Navigator är en miljö där du kan använda olika Python-baserade och Python-relaterade programvaror (som R-studio för dataanalys). I den här kursen kommer vi att använda Spyder inom Anaconda Navigator för att redigera och programmera i Python.
För att använda Spyder på en Mac, ta följande steg: Hitta programmet Anaconda Navigator och klicka på det.
Efter en kort stund kommer huvudmenyn för Anaconda att dyka upp (första gången du kör programmet kommer du att bli tillfrågad om du vill rapportera fel tillbaka till Anaconda-utvecklarna. Välj ett alternativ här och klicka på 'Ok, och visa inte igen '):
Vissa program och miljöer är förinstallerade och kan användas omedelbart. Andra kan du installera senare. För den här kursen kommer vi att använda Spyder. Klicka på Starta under Spyder-ikonen (röd ram).
När Spyder har startat kommer du att se dess programmeringsmiljö: (Om du uppmanas att installera något som heter Kite väljer du Avvisa)
Denna miljö består av ett par element som du kommer att använda i den här kursen. I det nedre högra hörnet (röd ram) hittar du Interactive Pythonconsole (förkortad som IPython-konsol). Här kan du mata in Python-kommandon direkt och köra dem. Den vänstra sidan av Spyder-miljön (grön ram) är redigeraren. I editorn kan du skapa och använda python-skript. Skillnaden mellan python i konsolen och python i ett skript kommer att diskuteras senare i kursen. I det övre högra hörnet (blå ram) hittar du flera element som kan väljas genom att klicka på de olika flikarna, såsom Variable Explorer, File Explorer
och en hjälpfunktion. Slutligen har Spyder, liksom många andra program, en menyrad överst (orange ram).
Om du inte gillar det mörka temat i Spyder kan du ställa in det på ljust genom att hitta Preferences i menyn längst till vänster och ändra syntaxmarkeringstema i panelen Utseende från Spyder Dark till Spyder och starta om Spyder:
För att använda Spyder på en Windows 10 PC, gör följande:
Hitta programmet Anaconda Navigator (i röd ram) efter att ha klickat på Windows-ikonen i det nedre vänstra hörnet av aktivitetsfältet och klicka på det.
Efter en kort stund kommer huvudmenyn för Anaconda att dyka upp (första gången du kör programmet kommer du att bli tillfrågad om du vill rapportera fel tillbaka till Anaconda-utvecklarna. Välj ett alternativ här och klicka på 'Ok, och visa inte igen '):
Vissa program och miljöer är förinstallerade och kan användas omedelbart. Andra kan du installera senare. För den här kursen kommer vi att använda Spyder. Klicka på 'Starta' under Spyder-ikonen (röd ram).
Din Windows-brandvägg kan försöka blockera Spyder. Om så är fallet kommer du att se en skärm som visas nedan. Välj "Tillåt åtkomst" (detta är en engångsåtgärd).
När Spyder har startat ser du dess programmeringsmiljö:
Denna miljö består av ett par element som du kommer att använda i den här kursen. I det nedre högra hörnet (röd ram) hittar du Interactive Python-konsolen (förkortad som IPython-konsol). Här kan du mata in Python-kommandon direkt och köra dem. Den vänstra sidan av Spyder-miljön (grön ram) är redigeraren. I editorn kan du skapa och använda python-skript. Skillnaden mellan python i konsolen och python i ett skript kommer att diskuteras senare i kursen. I det övre högra hörnet (blå ram) hittar du flera element som kan väljas genom att klicka på de olika flikarna, såsom Variable Explorer, File Explorer och en hjälpfunktion. Slutligen har Spyder, liksom många andra program, en menyrad överst (orangeram).
Om du inte gillar det mörka temat i Spyder kan du ställa in det på ljust genom att hitta Inställningar i Verktyg-menyn och ändra syntaxmarkeringstema i panelen Utseende från Spyder Dark till Spyder och starta om Spyder:
Uppgift 3b. Förstå kod och kommentera
Av Jeroen Benjamins 2019, revision 2020 Redigerad av Jeroen Benjamins, 2022
Mål:
I slutet av denna uppgift kommer du att kunna: - Läsa programmeringsfel och tolka dem rätt - skilja på kod du förstår och kod du inte förstår
Inledning Den här övningen handlar om att förstå kod och kommentera kod. Denna färdighet är viktig när det kommer till programmering. Ganska ofta kommer du att hänvisa till Google när du har fastnat för att lösa ett programmeringsproblem, särskilt när du vill programmera något du inte har gjort tidigare (till exempel en ny typ av analys som du vill ska kunna utföra). Någon där ute på webben kan ha löst ditt problem. Du kan hitta en kod som verkar lösa ditt programmeringsproblem, ladda ner den och försök bara ändra den koden för att passa dina specifika behov. Detta är vanlig programmeringspraxis. På nederländska säger vi "beter goed gejat, dan slecht bedacht" vilket översätts till "hellre stjäla bra än att hitta på dåligt". För att kunna ändra en kod för att passa dina behov är det viktigt att kunna läsa och förstå någon annans kod . En bra bit kod har därför vanligtvis kommentarer; textbitar i koden som inte exekveras som kod i sig, utan är avsedda som anteckningar för programmeraren/programmerarna som förklarar vad en kodbit gör och varför den behövs. Denna kommentar är inte bara användbar för andra, utan också för dig själv: du kanske har kodat något ganska smart för ett år sedan, men du skulle inte vara den första programmeraren som blir förbryllad över sin egen kod ett år senare om du inte kommenterade den ordentligt. I Python börjar varje rad med kommentarer i en kodbit med #tecken.
Ett exempel på detta skulle vara att kommentera vilka paket du använder för att köra din kod och kommentera varför du använder den:
Importera SciPy eftersom det stöder specialfunktioner, integration, lösare för vanliga differentialekvationer (ODE), gradientoptimering, parallellprogrammeringsverktyg, en expression-to-C++-kompilator för snabb exekvering och andra.
importera scipy som sp
De första fyra kodraderna i exemplet ovan är alltså kommentarer för en programmerare som förklarar varför någon använder SciPy-paketet.
I den här övningen kommer du själv att kommentera. Du kommer att köra en bit kod som vi tog från webben och försöka förstå vad varje rad gör och sedan lägga till dina kommentarer till koden. På detta sätt kan du enkelt återbesöka och återanvända delar av denna kod för din egen programmering senare. I slutet av övningen kommer du att jämföra din kommenterade kod med den kommenterade koden för en annan grupp för att jämföra och lära dig hur mycket du kunde förstå av koden.
Koden som vi kommer att köra och kommentera är en Exploratory Data Analysis (EDA) på ett företags försäljnings- och lagermönster som vi har hämtat från Kaggle(kaggle/flenderson/sales-analysis). Kaggle är en onlinegemenskap av datavetare som analyserar data tillsammans – det är ett bra ställe att hitta datamängder för att öva programmeringsfärdigheter på.
Datauppsättningen hämtad från Kaggle innehåller en detaljerad beskrivning av vilka produkter som finns i ett lager (detaljerna finns på kaggle/flenderson/sales-analysis). Filen innehåller observationer av både historisk försäljning och aktiva lagerdata. Det största problemet för dataanalytikerna är att avgöra vilka produkter som ska fortsätta att sälja och vilka produkter som ska tas bort från lagret. Det första steget är, precis som i alla resultatanalyser, att få en bra bild av data. Koden vi hittade online gör exakt detta: Det är en utforskning av data. Om vi förstår koden kan vi använda några trevliga knep från den för att utforska en egen framtida datauppsättning.
Datan som vi använder finns i fildata och koden som användes för EDA är uncommentedcoolcode. Ladda ner dessa filer från Blackboard.
Innan vi ska använda koden, låt oss först titta på data i filen. Öppna den i Excel genom att först öppna Excel och sedan från Excel bläddra till datafilen och öppna filen.
Bestäm hur många produkter och hur många beskrivande faktorer per produkt som finns i datan. Detta bör vara möjligt genom att bestämma antalet rader och kolumner i din data. Att öppna en CSV-fil i Excel kan leda till att all data läggs i en kolumn, eftersom Excel tolkar data som bitar av text per rad. Excel har ett alternativ för att konvertera text till separata kolumner. Om du har en kolumn med data efter att ha öppnat data, hitta alternativet i Excel för att konvertera texten till kolumner och använd kommatecknet för att separera varje rad med text till kolumner. (om du fastnar här, fråga Google eller en lärare).
- Hur många rader och kolumner finns det i data?........................... ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ........................
Låt oss nu se om koden fungerar på vår dator. Starta Spyder med Anaconda Navigator, öppna uncommentedcoolcode och kör den med den gröna pilen eller tryck på F5.
- Vad hände?
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............
- Många varningar visas i iPython-konsolen (om du inte ser iPythonconsole: i Spyders övre menyrad, gå till Visa, sedan Panes och välj sedan iPythonconsole). Kan du se felet/felen och i så fall vad är felet?
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............
- Vad betyder "Spårning (senaste samtalet senast):" i iPython-konsolen?
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............
- Hur indikerar Python var felet finns? (Tips: leta efter namnet på den scriptuncommentedcoolcode i varningarna i iPython-konsolen).
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............
- Korrigera kodraden som orsakar felet, spara filen somcommentedcoolcode och kör den igen. Fungerar koden nu eller får du andra fel?
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............
Som du kanske har räknat ut själv, verkar rad 46 till 48 utföra någon åtgärd på en variabel som heter sales_data_hits och ger ett fel på dessa rader.
6a) Förekommer variabeln sales_data_hits någon annanstans i koden? Vad är det för fel här?
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............
6b) Observera att vi kunde ha förutsett detta fel innan vi kör koden. Hur berättar Spyder oss om något är fel?
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............
6c) Vad ska vara namnet på variabeln sales_data_hits (Tips: titta på rader med kod före och efter rad 46 till 48). Korrigera raderna 46 till 48 i enlighet med detta.
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............
Nu borde vi ha en löpande kodbit som vi kan utforska för eget bruk.(Vi borde ha en kodbit som inte har några orange markörer i Spyder). Spara den i en ny fil som heter commentedcoolcode2. Tänk på de första raderna med kod. Dessa rader beskriver vilka paket som används för denna kod.
- Googla vad pandorna och sjöfödda paketen är och lägg en kommentarsrad ovanför rad 1 och 3 som beskriver vad vart och ett av dessa paket gör (notera själv nedan om du vill också).
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............
Förstå kod rad för rad
Koden producerar mycket utdata i iPython-konsolen och det är svårt att urskilja vilken utdata som genereras av vilken kodrad. Det kan hjälpa att förstå en bit kod genom att försöka rad för rad. Det finns olika sätt att förstå kod rad för rad:
Kommentera ut: välj rader med koder som du inte är intresserad av och kommentera dem, så att de hoppas över när du kör det. I Spyder kan du göra detta genom att först välja raderna du vill kommentera, sedan högerklicka med musen och välj alternativet "kommentera/avkommentera" från menyn som dyker upp. Till exempel, när du väljer allt och framåt från rad 6 och kommenterar det, är de enda raderna som kommer att exekveras raderna 1 till 5, vilket gör det möjligt att testa vad dessa rader gör.
Figur 1. Exempel på att kommentera allt under rad 5 till testrad 1 till 5
- I ditt commentedcoolcode2-skript väljer du alla rader och framåt från den första raden som börjar med utskrift (detta bör vara runt rad 16, beroende på hur många rader av kommentarer du lagt till i fråga 7) och kommentera alla markerade rader. Du kan nu testa vad de första kodraderna gör. Kör det kommenterade skriptet och se vad som händer.
8a) Finns det någon utgång i iPython-konsolen?
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............
8b) Vad händer i Spyders variabelutforskare? Vad gör den första linesales_data = pd_csv(“data”)? Skriv ner ditt svar som kommentar ovanför denna rad i ditt manus.
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............
Kör val: Ett annat sätt att förstå kod är genom att välja en kodrad och kopiera den till iPython-konsolen.
8c) Välj raden sales_data(), kopiera den och klistra in den i iPython-konsolen och tryck på enter. Vad händer nu? Återigen lägg till med en kommentar i ditt skript vad denna kodrad gör.
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............
Som du märker skapar vissa kodbitar utdata när de körs direkt i iPythonconsole, men inte när de är en del av ett skript. I ett skript måste du säga till python att skriva ut koden explicit.
- Ändra sales_data() till print(sales_data()) och körcommentedcoolcode2 igen för att kontrollera om den nu genererar utdata när skriptet körs. På samma sätt ta reda på vad sales_data() gör och lägg till en kommentar. Vad gör tillägget av include=’all’?
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................
- Välj och avkommentera de nästa fyra raderna kod (fyra rader kod som börjar med utskrift). Kör skriptet igen och du kommer att se mer utdata. Det kan vara svårt att spåra vilken linje som har producerat vilken utgång igen. Kan du urskilja eller gissa vad var och en av de fyra raderna har gjort?
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................
Var är jag? knep: Ett bra knep för att förstå kod rad för rad är att lägga till någon tillfällig kod som skriver ut text som ger dig en bättre indikation på vilken kod som producerar vilken information.
- Till exempel, lägg till följande rad kod:print("Hej! Jag har precis utfört formkommandot") efter raden:print(sales_data)
och lägg till lineprint("Skriptet igen här. Jag har nu utfört nuniquekommandot") efter line:print(sales_data())
Skriv ner som kommentarer i ditt manus (och på raderna nedan) vad shape andnunique-kommandot gör
................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................
- Resten av den här övningen är att försöka förstå resten av koden. Gör detta genom att avkommentera mer och mer av koden och bara prova saker. Använd commentingout, kör val och var är jag-tricket för att gå igenom resten av koden. Försök att ta reda på hur koden gör boxplots, hur den lägger till titlar till boxplots, hur den beräknar en korrelation och visualiserar delar av data, etc.
Slutligen, kom ihåg när du kommenterar:
- det är inga problem och faktiskt en bra idé att också kommentera det du inte förstår och kanske till och med kommentera dessa kodbitar.
- eftersom det här är någon annans kod kan det vara bra att se om det finns alternativa sätt att göra samma sak och att kolla efter kodrader som gör samma sak och därför är överflödiga.
- leka: eftersom detta inte är din faktiska data och du alltid kan ladda ner den igen från blackboard: försök att ändra siffror och se vad som händer. Testa att ta bort rader och se vad som händer osv.
Webbplatser som används för denna övning:pandas.pydata/pandas-docs/version/0.21/index.htmlseaborn.pydata/introduction.html#introductionkaggle
Uppdrag 4. Stränghantering
Av Ignace Hooge, 2019
Mål:
I slutet av denna uppgift kommer du att kunna: - Manipulera strängar i Python - Extrahera egenskaper för en bittext enkelt - Programmera på ett objektorienterat sätt utan att explicit veta det
Inledning Den här övningen handlar om stränghantering. Detta ämne är förutom beräkning (t.ex. att förutsäga vädret, göra komplicerad statistik), en mycket viktig aspekt av programmering i allmänhet. Stränghantering krävs för att söka i databaser, Internet och är mycket viktig i gränssnittet för datorer. Det mesta av innehållet i den första delen av denna övning stals från Internet.
Den första delen av denna uppgift är avsedd att bekanta dig med några mycket praktiska funktioner i programmeringsspråket Python. Om du provar all kod i den första delen av uppgiften utan att använda Google kommer du att lära dig mycket. I denna uppgift är det din uppgift att kortfattat beskriva (på .............) vad den specifika koden gör. Här är resan viktigare än målet. Tänk på att att experimentera med kod och beskriva med dina egna ord vad kod gör, är en bra metod för att förbättra dina programmeringsfärdigheter. I den andra delen av uppgiften kommer du att tillämpa dina nyvunna kunskaper. Om du gör den första delen av denna uppgift på allvar är den andra delen lättare.
Del 1. Grunderna i String ManipulationFör att manipulera strängar kan vi använda några av Pythons inbyggda metoder.
Skapande av strängar Börja din resa med följande strängord = "Jag är en hjälte eftersom jag kan Python"
Få åtkomst till tecken i ett strängord[0]ord[-1]........................................ ................................................................ ................................................................ .
Förlänga(ord)................................................ ................................................................ ...................................................
Hitta teckensword('e')word("P")word("hjälte")............................... ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................
Obs: variabelnamnet här är word. Koden i denna uppgift kan ge dig idén om att ordet är speciellt. Det är det inte, om du ersätter ordet med palsternacka eller någon annan bortglömd grönsak kommer koden att fungera perfekt. Jag börjar om med en ny variabel.
Countcardoon = "Räkna, antalet blanksteg"cardoon(' ')................................... ................................................................ ................................................................ ...
Skiva: Använd [ # : # ] för att få bokstäver. Tänk på att python, precis som många andra språk, börjar räknas från 0!!cardoon[0]............................. ................................................................ ................................................................ .........karton[0:1]................................... ................................................................ ................................................................ ...karton[0:3]........................................ ................................................................ ...................................................cardoon[: 3]........................................................ ................................................................ ........................................kardon[-3:].... ................................................................ ................................................................ .................................kardon[3:]........... ................................................................ ................................................................ ...........................kardong[:-3]................. ................................................................ ................................................................ .....................kardon[:]........................ ................................................................ ................................................................ ............
Split Stringscardoon(' ')................................................ ................................................................ ............................................
Låt oss använda en ny variabelblabla = "
Börjar med / Slutar med
blabla("r")................................................ ................................................................... .... ................................................blabla( "e") ................................................... ................................................................... .... ......................................blabla("s"). ............................................................ ............................................................ ................................................
Upprepa strängar"."* 10................................................... ................................................................ ............................................
Replaceingblabla("rum", "värld")......................................... ................................................................ ................................................
Ändra versaler och gemener Stringsblabla()......................................... ................................................................ ..............................................bla bla(). ................................................................ ................................................................ .....................................bla bla().......... ................................................................ ................................................................ ............................bla bla()................... ................................................................ ................................................................ ...................bla bla()............................ ................................................................ ................................................................ ..........
Reversing' '.join(reversed(blabla))
Remsa. Python-strängar har metoderna strip(), lstrip(), rstrip() för att ta bort alla tecken från båda ändarna av en sträng. Om tecknen som ska tas bort inte specificeras kommer blanksteg att tas bort Ta bort nyradstecken från slutet av strängen
blabla = " xyz "
Bla bla(' ')............................................ ................................................... ...........................................BLA bla().. ................................................... ................................................... .. .................................BLA bla().......... ........................................................... ........................................................... ... .................................BLA bla().................. ................................................................... ................................................................... ...................................
Sammankoppling. För att sammanfoga strängar i Python använd "+" operatorn.a_var = "Jag " + "är " + "smart idag"a_var2 = "Hej " + "Världen, " + " "........... ................................................................ ................................................................ ...........................
Gå med":".join(blabla)......................................... ................................................................ ............................................... " ". gå med (blah)........................................................ ............................................................ ............................................................
Testning. En sträng i Python kan testas för sanningsvärde. Returtypen kommer att vara inbooleskt värde (True or False)newstring = "Paul de Leeuw är 93 år gammal och inte grappig"newstring()........................ ................................................................ ................................................................ ................newstring()................................ ................................................................ ................................................................ ........newstring()................................................. ................................................................ ................................................newstring ()................................................ ................................................................ ...................................newstring()....... ................................................................ ................................................................ ...................................newstring()................ ................................................................ ................................................................ ......................newstring()......................... ................................................................ ................................................................ .............newstring()................................. ................................................................ ................................................................ ....newstring()................................................... ................................................................ ............................................
Del 2. Tillämpa strängmanipulation
I denna del av uppgiften kommer du att tillämpa dina förvärvade kunskaper om stränghantering. Importera en text till en variabel (med namnet teckzd).
filnamn = "en text"fil = öppen(filnamn, "r")teckzd = fil()print(teckzd)
Nedan kan du läsa vad du ska göra
- Ersätt alla förekomster av Brexit med Tixeb.
- Räkna antalet ord
- Räkna antalet ord som börjar med ett d
- Räkna artiklarna (räkna artiklarna)
- Beräkna medellängden på orden
Uppgift 5. Läsa filer från flera mappar
Av: Roy Hessels, 2018 (reviderad 2021)Redaktion: Ignace Hooge, 2019
Mål:
I slutet av denna uppgift kommer du att kunna: - Förstå grunderna för sökvägar på en dator - Gå igenom en mappstruktur och ladda textfiler - Manipulera data som laddas från en textfil - Visualisera data från flera filer i en graf - ( Valfritt) Spara textfiler i en mappstruktur
I denna uppgift ska du ladda och analysera svarsdata från 10 deltagare. Varje deltagare genomförde 20 försök i en detektionsuppgift, där de var tvungna att svara så snabbt och så exakt som möjligt om ett mål var närvarande i astimulus eller inte.
När du spelar in, lagrar och analyserar experimentella data från flera deltagare är det viktigt att tänka på en datastruktur i förväg. Med datastruktur menar vi hur data lagras (i mappar eller en mappstruktur), hur den lagras (t.ex. en textfil, kommaseparerad eller tabbseparerad, eller ett företagsformat som excel eller MATLAB) och hur uppgifterna är organiserade i allmänhet. Hur ska du spara data från dina experiment om du har valet? Vi tycker att tillgängligheten till uppgifterna är ett viktigt övervägande. Om du har erfarenhet av analys av en stor mängd data har du förmodligen också idéer om hur du ska organisera data. Lagras data från varje deltagare i samma eller i olika mappar? En bra tumregel som vi (författarna till denna kurs) alltid arbetar med är en mapp för varje experiment eller experimentellt tillstånd, där datafiler från varje deltagare placeras i sin egen deltagarmapp.
Ta en titt på datafilerna du kommer att analysera idag. De finns i mappen "Important_Experiment_nr2". I figur 1 kan du se hur experimentdata är strukturerad för denna uppgift. Svarsdata från varje deltagare sparas i en atab-avgränsad textfil. I det här fallet har varje deltagare bara en fil, men det kan hända att du spelar in mycket mer data per försök. Inom eyetracking-forskning är det till exempel vanligt att ha en fil med eyetracking-data per försök för varje deltagare.
Figur 1. Mappstruktur för experimentdata i denna uppgift.
Varje textfil innehåller 21 rader. Den första raden är vad vi kallar rubriken. Rubriken innehåller namnen på variablerna. Öppna en av datafilerna för att verifiera den föregående. De nästa 20 raderna innehåller data för ett försök vardera. Data för deltagare 1 visas i figur 2. Den första kolumnen ("Target") innehåller 1:or och 0:or. En 0 betyder att målet inte var närvarande i detta försök, en 1 betyder att det var det. Den andra kolumnen ("Svar") innehåller nollor för när deltagaren svarade att målet var frånvarande, och 1:or för när deltagaren svarade att målet var närvarande. Den tredje kolumnen ("RT") innehåller reaktionstiden i millisekunder för varje försök.
Figur 2. Exempel på datafil för Deltagare06a. Du kan se att namnet på datafilen består av ett datum (15 februari 2019) och ett nummer (11). Detta är en typisk tabbavgränsad textfil. Andra vanliga smaker är kommaseparerade eller mellanslagsseparerade filer, se t.ex. sv.wikipedia/wiki/Delimiter-separated_values. Filen
består av tre kolumner och 21 rader. Den första raden kallas rubriken och innehåller namnen på variablerna i kolumnerna.
Går igenom en mappstruktur
Vi vill analysera alla textfiler i vårt experiment. För att göra detta måste vi ta reda på var filerna finns och vad de heter. Vi kan göra detta genom att "gå" genom mappstrukturen. Att gå igenom en mappstruktur innebär att gå igenom alla mappar och undermappar och hitta de filer du är intresserad av. Öppna din Python-redigerare och skapa ett nytt skript.
Ditt skript bör börja med att tömma Spyders minne
Lägg sedan till följande rader:
Dessa kodrader kommer att ladda de relevanta paketen så att du kan läsa filer och arbeta med dem. Spara skriptet i samma mapp som där dina experimentella data finns. Lägg den inte i datamappen. Först måste du berätta för ditt skript var data kan hittas.
Skapa en variabel med namnet datafold och lagra namnet på din datamapp i denna variabel. Nu ska vi gå igenom datamappen. Lägg till raderna nedan i ditt manus:
Kör ditt skript. Detta kommer att skriva ut ett antal rader i Python-konsolen. Försök att förstå vad du ser. Om din python-kod är korrekt kommer du att få mycket text på din konsol. Beroende på ditt operativsystem ser du till exempel
Important_Experiment_nr2/Participant12 eller
importera relevanta paket
import OS # för att gå igenom mappar importera fnmatch # för att matcha filnamn importera numpy som np # för att ladda datafiler
gå igenom mappar
för root, dirnames, filnamn i os(datafold): print(root) print(filenames)
rensa minnet
från IPython import get_ipythonget_ipython().magic('reset -sf')
Important_Experiment_nr2\Participant12
Intermezzo om stigar
Det som just har dykt upp på konsolen kallas för en bana. Låt oss först ge dig ett exempel på en mer komplicerad väg:
/Users/roy/Desktop/new_awesome_python_course/fileio
Det betyder att det i mappen Användare finns en mapp som heter roy och den mappen innehåller mappen new_awesome_python_course som i sin tur innehåller scriptet fileio. "/" kallas sökvägsavgränsaren. Denna separator är olika för olika operativsystem. För Mac OS X är det "/", för Windows är det "\". När du bygger större banor vill du inte tänka på vilket operativsystem du eller användaren av din kod använder när du programmerar. Lösningen är att undvika "/" och "\" och använda kommandot plattformsoberoende filseparator i Python. Skriv print(os) i din konsol. Vad ser du? Stämmer det överens med det vi just sa om filseparatorerna för varje operativsystem?
Här slutar intermezzot om stigar. Vi återgår till utdata från ditt Python-skript. Kom ihåg att vi gick igenom en mappstruktur.
Fråga: Vad hänvisar variablerna rot och filnamn till i ditt skript?................................... ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ............................
I vissa fall, till exempel om du arbetar med Mac OS X, kanske du märker att en viss fil (.DS_Store) finns i varje mapp. Detta är en osynlig systemfil som vi inte vill analysera. Men om vi går igenom alla filer kommer vi att stöta på det ofta. För att kringgå detta problem kommer vi att filtrera våra filer för textfiler specifikt. Det här är filerna som innehåller våra experimentella data. Du kan filtrera filer efter deras filnamn eller tillägg med paketet fnmatch. Vi har redan lagt till det paketet till vårt skript tidigare.
Gör nu följande. Lägg först till en variabel ovanför din loop och kalla den för matchningar. Se till att det är en tom array. Du kan skapa en tom array genom att skriva:
matchar = []
Vi kommer att lägga till alla filnamn som vi stöter på som är textfiler till variabelmatchningarna. Lägg sedan till följande rader i slingan som går genom mappstrukturen. Se till att indraget fortfarande är korrekt!
Kör skriptet igen. Skriv matchningar i din konsol och tryck på enter. Försök att förstå vad din kod gör.
Fråga: Förstår du vad appe