[MUSIK SPELA] DUSTIN TRAN: Hej. Jag heter Dustin. Så jag kommer att presentera Dataanalys i R. Bara lite om mig själv. Jag är för närvarande en doktorand i Verkstads och yrkeshögskola. Jag studerar en korsning av maskininlärning och statistik så Dataanalys i R är riktigt grundläggande för vad Jag gör på en daglig basis. Och R är särskilt bra för dataanalys eftersom det är mycket bra för prototyper. Och oftast när du gör något slags dataanalys, en hel del av de problem kommer att kognitiva. Och så vill du bara ha några riktigt bra språk som är bara bra för att göra inbyggda funktioner, till skillnad att behöva handskas med låg nivå saker. Så i början, jag bara gå att införa det som är R, varför skulle du vill använda den, och sedan gå över till något demo, och bara gå därifrån. Så vad är R? R är bara ett språk utvecklat för statistiska beräkningar och visualisering. Så vad detta betyder är att det är en mycket bra språk för någon typ av sak som behandlar osäkerhet eller datavisualisering. Så du har alla dessa sannolikhetsfördelningar. Det kommer att bli inbyggda funktioner. Du har även utmärkt plottning paket. Python är ett annat konkurrerande språk för data. Och en sak som jag tycker att R är mycket bättre på är visualisering. Så vad du ser i demo som väl är bara ett mycket intuitivt språk som bara fungerar mycket bra. Det är också gratis och öppen källkod, som är något annat bra språk antar jag. Och här, ett gäng bara sökord kastas på dig. Det är dynamisk, vilket innebär att om du har en specifik typ tilldelats ett objekt än det bara kommer att ändra det i farten. Det är lat så det är smart om hur den gör beräkningar. Funktionell betydelse det kan verkligen fungera baserat bort av funktioner så anything-- någon form av manipulation är du gör, kommer det att baseras off funktioner. Så binära operatorer, till exempel, är bara av sig själva funktioner. Och allt som du kommer att göra är kommer att drivas av funktioner själv. Och sedan objektorienterat också. Så här är en XKCD plot. Inte bara för att jag känner mig som XKCD är grundläggande för något slag presentation, men eftersom Jag tycker detta verkligen hamrar den grad att en hel del av tid när du gör någon form av data analys, är inte problemet så mycket hur snabbt det går, men hur länge det kommer att ta dig att programmera uppgiften. Så här är bara analysera om strategi a eller b är effektivare. Detta kommer att bli något som du är kommer att ta itu mycket med i sorterar av låg nivå språk där du arbetar med seg fel, minnesallokering, initieringar, även gör de inbyggda funktionerna. Och det här är alla hanteras mycket, mycket elegant i R. Så bara för att hamra ut punkt, den största flaskhalsen kommer att vara kognitiv. Så dataanalys är ett mycket hårt problem. Oavsett om du gör maskininlärning eller du är göra just något slags grundläggande uppgifter prospektering, du inte vill ha att ta ett dokument och sedan sammanställa något varje gång du vill se vad en kolumn ser ut, vilka särskilda poster i en matris ser ut. Så du bara vill ha några riktigt trevligt gränssnitt du kan köra en enkel funktion att index för vad du vill och bara köra det därifrån. Och du behöver domän specifika språk för detta. Och R kommer verkligen att hjälpa dig definiera problemet och lösa det på detta sätt. Så här är ett diagram som visar programmering popularitet R som det gått över tiden. Som du kan se, liksom 2013 eller så det bara blåst upp enormt. Och detta har varit just på grund av detta stor trend inom teknologiindustrin om stora uppgifter. Också, inte bara teknik industrin, men egentligen alla branscher that-- eftersom en hel del av de branscher är typ av grundläggande betydelse för försöker lösa dessa problem. Och oftast, kan du ha några bra sätt att mäta dessa problem eller ens definiera dem eller lösa dem med hjälp av data. Så jag tror just nu R är den 11: e mest populära språket på TIOBE och det har vuxit sedan dess. Så här är lite mer funktioner i R. Det har ett enormt antal kollin och för alla dessa olika saker. Så varje gång du har en vissa problem, de flesta tids R kommer att ha den funktionen för dig. Så om du vill bygga någon form av maskin learning algoritm kallas Random Forest eller Beslutsträd, eller ens försöker ta medelvärdet av en funktion eller något av det här, R kommer att ha det. Och om du gör du bryr dig om optimering, en sak som är gemensam är att när du är klar prototyper någon form av högnivåspråk, du kommer att kasta det in-- Du kommer bara port att över till viss låg nivå språk. Vad är bra med R är att när du är gjort prototyper det, kan du köra C ++, eller Fortran, eller något av dessa lägre nivå och kära direkt i R. Så det är en riktigt cool funktion om R, om du verkligen bryr dig om optimeringspunkt. Och det är också riktigt bra för webb visualiseringar. Så D3.js, till exempel, är Jag antar en annan seminarium att vi presenterade i dag. Och detta är verkligen häftigt för göra interaktiva visualiseringar. Och D3.js förutsätter att du har någon form av data som ska ritas och R är ett bra sätt för att kunna göra dataanalys innan du exporterar det över till D3.js eller bara springa D3.js kommandon i R själv, liksom alla dessa andra bibliotek också. Så det var bara att införa vad är R och varför du kan använda den. Så förhoppningsvis har jag övertygat dig något om bara försöker se hur det är. Så jag ska gå vidare och gå igenom vissa fundamenta om R objekt och vad du kan verkligen göra. Så här är bara en gäng matematiska kommandon. Så säger you're-- du vill bygga språket själv och du bara vill att ha en massa olika verktyg. Någon sorts operation du tror att du skulle vill är ganska mycket kommer att vara i R. Så här är 2 plus 2. Här är två gånger pi. R har ett gäng inbyggda konstanter att du ofta kommer att använda som pi, e. Och sedan, här är 7 plus runif, så runif av en. Detta är en funktion som är genererar en slumpmässig uniform från 0 till 1. Och sedan finns det 3 upphöjt till 4. Det finns kvadratrötter. Det finns logg. Så loggar kommer att göra bas exponentiell av sig själv. Och sedan, om du anger en bas, då du kan göra vad basen du vill. Och så här är några andra kommandon. Så du har 23 mod 2. Då har du resten. Då har du vetenskapliga notation, om du också vill göra bara mer och mer komplicerade saker. Så här är uppdraget. Så typiska uppdrag inom R är gjort med en pil så det är mindre än och sedan bindestrecket. Så här jag bara tilldela 3 till variabeln val. Och då tänker jag skriva ut val och då skriver ut tre. Som standard i forskning tolk, det kommer att skriva ut saker för dig så du behöver inte ange skriva ut en val helst du vill skriva ut något. Du kan bara göra val och då det ska göra det åt dig. Du kan också använda är lika tekniskt som ett uppdrag operatör. Det finns små subtiliteter mellan att använda pilen operatör och likhets operatör för uppdrag. Mestadels av konvention, alla kommer bara använda pilen operatören. Och här, jag tilldela detta sned notation kallas 1 kolon 6. Detta genererar en vektor från 1 till 6. Och detta verkligen trevligt för då du bara tilldela vektorn till Val och som fungerar av sig själv. Så detta är redan gå från en single-- ett mycket intuitivt uppgifter struktur bara en dubbel på någon typ av typen i en vektor och som kommer att samla alla de skalära värden för dig. Så efter att ha gått från skalär, du har R-objekt och detta är en vektor. En vektor är någon form av samling av samma typ. Så här är ett gäng vektorer. Så det här är numeriskt. Numerisk är R: s sätt att säga dubbelt. Och så som standard, något antalet kommer att vara en dubbel. Så om du har c på 1,1, 3, negativt 5.7, är c ​​en funktion. Detta sammanfogar alla tre siffror i en vektor. Och detta kommer att be-- så om du märker 3 av sig själv, normalt du skulle anta att detta är som ett heltal, men eftersom alla vektorer är av samma typ, detta är en vektor med dubbel eller numeriskt i detta fall. rnorm är en funktion som genererar standardnormal variables-- eller standardnormalvärden. Och jag specificera två av dem. Så jag gör rnorm 2, tilldela det till devs, och sedan jag skriva ut devs. Så dessa är bara två slumpnormalvärden. Och sedan INTS om du gör du bryr dig om heltal. Så det här är bara om minnet fördelning och spara minnesstorlek. Så du skulle behöva lägga dina siffror från huvudstaden L. I allmänhet är detta R historiska notation för något som kallas lång heltal. Så för det mesta, kommer du vara att göra med dubbel. Och om du någonsin kommer senare På optimera din kod, du kan bara lägga till dessa L's efteråt eller under det om du är som prekognitiva om vad du kommer att göra dessa variabler. Så här är ett tecken vektor. Så, återigen, jag sammanfoga tre strängar här gången. Lägg märke till att dubbla strängar och enstaka strängar är desamma i R. Så jag har arthur och Marvins och så när jag skriver ut det, alla av dem kommer att visa dubbla strängar. Och om du även vill inkludera dubbel eller enkel sträng i dina karaktärer, då kan du antingen alternera dina strängar. Så Marvins för andra elementet, är detta kommer att show-- dig bara har dubbla strängar och sedan en enda sträng så detta är omväxlande. Annars, om du vill använda en dubbel string operatör i en dubbel sträng när du förklara det, då du bara använda escape operatören. Så du gör bakstreck dubbel sträng. Och slutligen, vi också ha logiska vektorer. Så logical-- så SANT och FALSKT, och de är kommer att vara versaler. Och sedan, återigen, jag sammanfoga dem och sedan tilldela dem till bools. Så bools kommer att visa du SANT, FALSKT, och TRUE. Så här är vektoriserade indexering. Så i början, jag Jag tar en function-- detta kallas en sequence-- sekvens från 2 till 12. Och jag tar en sekvens med 2. Så det kommer att göra 2, 4, 6, 8, 10 och 12. Och sedan är jag indexering att få den tredje delen. Så en sak att tänka på är att r index genom att utgå från 1. Så vals 3 kommer att ge du det tredje elementet. Detta är en slags annorlunda än andra språk där det börjar från noll. Så i C eller C ++, till exempel, du är kommer att få det fjärde elementet. Och här är vals från 3 till 5. Så en sak som är riktigt coolt är att du kan generera temporära variabler inne och sedan bara använda dem i farten. Så här är det 3 till 5. Så jag genererar en vektor 3, 4, och 5 och sedan Jag indexerar att få den tredje, fjärde och femte element. Så samma sätt kan du abstrakt detta att bara göra någon form av en vektor som ger dig indexering. Så här är vals och sedan första, tredje, och sjätte element. Och sedan, om du vill att göra ett komplement, så du bara göra minus efteråt och det kommer ge dig allt det är inte första, tredje, eller sjätte elementet. Så det här kommer att bli 4, 8 och 10. Och om du vill få ännu mer avancerad, Du kan sammanfoga booleska vektorer. Så detta index kommer att ge dig denna Boolean vektor längd 6. Så rep TRUE kommatecken 3. Detta kommer att upprepas TRUE tre gånger. Så det här kommer att ge dig en vektor SANT, SANT, SANT. rep FALSE 4-- detta kommer att ge dig en vektor av FALSKT, FALSKT, FALSKT, FALSKT. Och sedan c kommer att sammanfoga dessa två Booleans tillsammans. Så du kommer att få tre Trues och sedan fyra FALSEs. Så att när du index vals, du kommer att få TRUE, SANT, SANT. Så det kommer att säga ja, Jag vill ha dessa tre element. Och sedan FALSKT, FALSKT, FALSKT, FALSKT går att säga nej, jag vill inte de element så det kommer inte att lämna tillbaka dem. Och jag antar att det finns faktiskt ett stavfel här eftersom detta säger upprepning TRUE 3 och upprepa FALSKT 4, och tekniskt, du bara har sex element så upprepa FALSKT, det bör vara upprepa FALSKT 3. Jag tycker R är också smart nog sådana att om du bara specificera 4 här, då det kommer inte ens fel ut. Det kommer bara att ge dig detta värde. Så det ska bara ignorera det fjärde FALSKT. Så här är vektoriserade uppdrag. Så set.seed-- detta bara sätter utsäde för pseudoslumptal. Så jag ställer fröet till 42, vilket innebär att om jag skapar tre slumpmässiga normal värden, och sedan om du köra set.seed på egen hand dator med samma värde 42, då får du också Samma tre slump normaler. Så det här är riktigt bra för reproducerbarhet. Vanligtvis när du gör något slags vetenskaplig analys, du skulle vilja ställa fröet. På så sätt andra forskare kan bara reproducera exakt samma kod du har gjort eftersom de kommer att ha exakt Samma slumpvariabler that-- eller slumpmässig värden som du har tagit ut också. Och så den vektoriserade uppdraget Här visar de Vals 1 till 2. Så det tar de två första delarna av vals och sedan tilldelar dem till 0. Och sedan, du kan också bara göra liknande sak med Booleans. Så vals är inte lika med 0-- detta kommer ge dig en vektor FALSKT, FALSKT, SANT i det här fallet. Och sedan, det kommer att säga något av dessa index som var sant, då det kommer att tilldela till 5. Så det tar det tredje elementet här och sedan tilldelar den till 5. Och detta är verkligen trevligt jämfört med låg nivå språk där du måste använda för loopar att göra allt detta vektoriserade grejer eftersom det är bara väldigt intuitivt och det är en enda-liner. Och vad som är bra vektoriserad betecknings är att i R, dessa är typ av inbyggd så att de är nästan lika snabbt som gör i en låg nivå språk som motsätter sig att göra en for-loop i forskning och sedan ha den att göra den dynamiska indexering självt. Och det kommer att bli långsammare än att göra denna typ av vektoriserad sak där den kan göra det parallellt, där det gör den i gäng grunden. Så här är vektoriserad verksamhet. Så jag genererar ett värde 1 till 3, tilldela det till vec1, 3 och 5, vec2, addera dem. Den lägger dem komponentmässigt så det är ett plus 3, 2 plus 4, och så vidare. vec1 gånger vec2. Detta multiplicerar de två värderar komponent klokt. Så det är 1 gånger 3, 2 gånger 4, och därefter 3 gånger 5. Och sedan, på samma sätt kan du också göra comparisons-- logiska jämförelser. Så det är FALSKT FALSKT SANT i detta fall eftersom en inte är större än 3, 2 inte är större än fyra. Detta är, antar jag, en annan stavfel, 3 är definitivt inte större än 5. Yeah. Och så kan du bara göra allt dessa enkla operationer eftersom deras ärvt från klasserna själva. Så det var bara vektorn. Och det är typ av de mest fundamentala R-objekt eftersom givet en vektor, man kan konstruera mer avancerade objekt. Så här är en matris. Detta är i huvudsak abstraktion av vad en matris är själv. Så i det här fallet, det är tre olika vektorer, där var och en är en kolumn, eller så kan du betrakta det som var och en är en rad. Så jag lagra en matris från 1 till 9 och sedan jag ange 3 rader. Så 1 till 9 ger dig en vektor 1, 2, 3, 4, 5, 6, och hela vägen till 9. En sak att också ha i åtanke är att R-butiker värden i kolumn-dur format. Så med andra ord, när du ser en till 9, det kommer att lagra them-- det kommer att bli 1, 2, 3 i den första kolumnen, och då ska göra 4, 5, 6 i den andra kolumnen, och sedan 7, 8, 9 i den tredje kolumnen. Och här är några andra gemensamma funktioner som du kan använda. Så dim matta, kommer detta att ge dig dimensionerna av matrisen. Det kommer att återvända dig en vektor av dimensionen. Så i detta fall, eftersom vår matris är 3 av 3, det kommer att ge dig en numeriska vektor som är 3 3. Och här är bara visar matrismultiplikation. Så brukar, om du bara gör asterisk-- så matta asterisk mat-- Detta kommer att bli komponent-wise operation eller vad som kallas den Hadamard produkten. Så det kommer att göra varje elementet komponentmässigt. Men om du vill matris multiplication-- så multiplicera den första raden tider den andra matrisen första kolumnen och så on-- du skulle använda denna procent operation. Och T av mattan är bara en operation för transponering. Så jag säger ta transponering i matrisen, multiplicera det med matrisen själv. Och då det kommer att tillbaka till dig en annan 3 med 3 matris som visar den produkt du skulle vilja. Och så det var matris. Här är vad som kallas en dataram. En data ram du kan tänka på som en matris, men varje kolumn själv kommer att vara av en annan typ. Så vad är riktigt coolt om uppgifter ramar är att i dataanalys själv, du kommer att ha allt detta heterogena data och alla dessa verkligen röriga saker där var och en av kolumnerna själva kan vara av olika typer. Så här jag säger skapa en dataram, gör ints från 1 till 3, och sedan också har en karaktär vektor. Så jag kan indexera genom var och en av dessa kolumner och sedan ska jag få de värden själva. Och du kan också göra någon form av operationer på dataramar. Och för det mesta när du är gör dataanalys eller någon sorts av förbehandling, kommer du att arbeta med dessa datastrukturer där varje kolumn kommer vara av en annan typ. Slutligen så dessa är i huvudsak bara de fyra viktiga objekt i R. Lista kommer bara att samla in några andra objekt som du vill. Så det kommer att lagra detta i en variabel som du enkelt kan komma åt. Så här, jag tar en lista. Jag säger saker lika 3. Så jag kommer att ha en del i listan, och detta kallas saker, och det kommer att ha värdet 3. Jag kan också skapa en matris. Så detta är 1 till 4 och slutraden lika med 2, så en 2 av 2 matris. Även i listan och det kallas matta. moreStuff, en teckensträng, och även en annan lista i sig. Så detta är en lista som är 5 och björn. Så det har värdet 5 och det har teckensträngen björnen och det är en lista inuti en lista. Så du kan ha dessa rekursiva saker där du har another-- a skriver inom typen. Så på samma sätt, kan du ha en matris inuti en annan matris och så vidare. Och en lista är bara ett bra sätt att samla och sammanställa alla dessa olika objekt. Och slutligen, här är bara hjälpa ifall Detta var bara gått över mycket snabbt. Så när du är förvirrad om något slags funktion, du kan göra hjälp av den funktionen. Så du kan göra hjälp matris eller ett frågetecken matris. Och hjälp och frågetecknet är bara en förkortning för samma sak så de är alias. lm är en funktion som bara gör en linjär modell. Men om du bara har ingen aning om hur det verk, kan du bara göra hjälp av lm och det kommer att ge dig några typ av dokumentation som ser ungefär som en Mannen webbplatsen på Unix, där du har en kort beskrivning av vad den gör, även vad dess argument är, vad den returnerar, och bara tips om hur att använda det, och några exempel också. Så låt mig gå vidare och show några demo av att använda R. OK. Så jag gick över mycket snabbt bara data strukturer och någon sorts den op-- några av verksamheterna. Här är några funktioner. Så här jag ska bara att definiera en funktion. Så jag använder också tilldelningsopera här, och sedan säger jag förklara den som en funktion. Och det tar värdet x. Så detta är något värde som du vill och jag kommer att återvända x självt. Så detta är identiteten funktionen. Och vad är coolt om detta jämfört med andra språk och en annan låg-nivå språk är att x kan vara i sig någon typ och det kommer tillbaka den typen. Så du kan imagine-- så låt mig bara köra detta snabbt. Ursäkta. Så en sak jag bör också nämna är att denna editor jag använder kallas rstudio. Detta är vad som kallas en IDE. Och en sak som är riktigt trevligt om det här är att den innehåller en hel del av saker du vill göra i R av sig själv bara väldigt intuitivt. Så här är en tolk konsol. Så på samma sätt, kan du också få det här konsol rå bara genom att göra en kapital R. Och det är precis det samma sak som konsolen. Så jag kan bara göra id-funktion x, x, x. Och then-- och sedan att kommer att bli bra i sig. Så rstudio är stor eftersom det har konsolen. Det har också de dokument du vill köra på. Och då den har vissa variabler att du kan se i miljöer. Och sedan, om du har att göra tomter, då du kan bara se det här, i motsats till hantera alla dessa olika fönster av sig själva. Jag faktiskt personligen använder Vim, men jag känns som rstudio är utmärkt bara för att få en bra idé på hur man använder R. Vanligtvis när du försöker lära sig några nya uppdrag, du inte vill hantera för många saker på en gång. Så R är bara en very-- rstudio är ett mycket bra sätt att lära R utan att behöva ta itu med alla dessa andra saker. Så här jag kör id hej. Detta returnerar hej. id 123. Här är en vektor av heltal. Så på samma sätt, eftersom du kan ta någon någon sorts värde, Du kan göra åter id x så återgår 1234 och 5. Och låt mig bara visa er att detta verkligen är ett heltal. Och på samma sätt, om du gör klass id x, det kommer att bli heltal. Och då kan du också jämföra de två och det är sant. Så jag kontrollera om id till x lika jämlikar x och varsel att det ger dig två Trues. Så detta är inte att säga är de två objekten identiska, men är var och en av posterna inom vektorerna identiska. Här är bounded.compare. Så det här är något mer komplicerat genom att den har en, om tillstånd och annat och sedan tar det två argument i taget. Så x är av valfri typ. Och jag säger detta andra argumentet är en. Detta kan vara allt också. Men som standard, det kommer att ta 5 Om du inte anger något. Så här jag ska säga om x är större än ett. Så om jag inte anger ett, det säger att om x är större än 5, då kommer jag att återvända SANT. annars kommer jag att återvända FALSKT. Så låt mig gå vidare och definiera detta. Och nu ska jag köra bounded.compare 3. Så det säger är 3 färre than-- är 3 större än 5. Nej, det är inte så FALSKT. Och bounded.compare 3 och jag kommer att jämföra den med en lika 2. Så nu jag säger ja, nu har jag vill ha en att vara något annat. Så jag ska säga en, bör du vara 2. Jag kan antingen göra den här sortens notation eller jag säger en lika 2. Detta är en mer lättläst i att när du är titta på dessa verkligen komplicerade funktioner som ta flera arguments-- och detta kan vara tiotals oftentimes-- säger bara A är lika 2 är mer läsbar för dig så att senare i framtiden du vet vad du gör. Så i det här fallet, är jag säger är 3 större än två. Ja det är. Och på samma sätt, kan jag bara ta bort detta och säga, är 3 större än 2 där ett är lika med 2. Och det är också sant. Ja? PUBLIK: Är du exekvera rad för rad? DUSTIN TRAN: Ja jag är. Så vad jag gör här är tar denna text document-- och vad som är bra med rstudio är att Jag kan bara köra en short-- en nyckel genväg. Så jag gör Ctrl-Enter. Och sedan, jag tar rad i textdokumentet och sedan sätta i konsolen. Så här jag säger, bounded.compare och jag gör Kontroll-X. Så jag kan bara kör här också. Och då tar det linjen och sedan lägga till den här. Och sedan på samma sätt, kan jag kör här. Och så kommer det att bara hålla definiera linjerna in i konsolen så där. Och om du också märker lockigt hängslen är det precis som i C-syntax. x-- om om villkoret är också kommer att använda parenteser och sedan Du kan använda annat. En annan är annars om. Så detta kommer att bli x är lika är lika med ett, till exempel. Och då kommer jag att tillbaka något här. Lägg märke till att det finns två olika saker här som är på gång. En är att här jag specificera returnera värdet SANT. Här jag säger bara x. Så R kommer oftast som standard ta det sista arguments-- eller ta den sista raden i koden, och det kommer att bli vad det tillbaka. Så här är det samma sak som att göra retur x. Och bara för att visa dig. Och då kommer det att fungera bara sådär. Så låt mig fortsätta med detta. Så else if. Och egentligen, kan jag returnera något jag skulle vilja. Så jag har inte ens till retur Booleans hela tiden, Jag kan bara returnera något annat. Så jag kan göra retur björn. Så om x är lika är lika med ett, det kommer att återvända björn. Annars kommer det att återvända SANT. Jag kan också göra en vektor eller egentligen vad som helst. Och normalt statiskt typade språk, du måste ange en typ här. Och märker att det bara kan vara vad som helst. Och R är intelligent nog att det kommer bara göra detta och det kommer att fungera bra. Så låt mig definiera detta. Unexpected-- oh sorry. Det bör vara en lockig stag här. OK. Cool. Okej. Så nu ska vi jämföra 3 och en lika 3. Så det borde return-- yeah-- värdet björn. Så nu en mer allmän sak är som hur är andra datastrukturer. Så du har denna funktion. Detta kommer att fungera på något slag av värde som 3 eller något numeriskt, med andra ord, dubbel. Men hur är det något som en vektor. Så vad händer om du do-- så jag är kommer att tilldela val till, säg, 4 till 6. Så om jag tillbaka här, det här är en vektor från 4, 5, 6. Nu ska vi se vad som händer om jag gör bounded.compare val. Så detta kommer att ge dig 15 1251. Så med andra ord, det säger om man tittar på detta tillstånd så det står x är mindre än en eller något. Så detta är något förvirrande för nu du bara inte vet vad som händer. Så jag antar att en sak som är riktigt bra om bara försöka felsöka är att du bara kan göra val är större än en och se vad som händer där. Så val-- en är som standard 5 så låt oss bara göra Val större än 5. Så detta är en vektor FALSKT FALSKT SANT. Så nu när du tittar på detta, det kommer att säga om, och sedan det kommer att ge dig det här är en vektor av FALSKT FALSKT SANT. Så när du passerar detta i R, R har ingen aning om vad du gör. Eftersom det förväntar en enda värde, vilket är ett booleskt, och nu du ger det en vektor av Booleans. Så som standard, är R bara kommer att säga vad sjutton, Jag ska anta att du är kommer att ta det första elementet här. Så jag ska säga-- jag kommer att anta att detta är falskt. Så det kommer att säga nej, det är inte rätt. Likaså kommer det att vara Val lika lika med en. Nej, förlåt 5. Och det är också kommer att vara falsk också. Så det kommer att säga nej, Det är inte sant och så det är kommer att återvända denna sista. Så detta är antingen bra eller dåligt sak, beroende på hur du ser det. För när du är skapar dessa funktioner, du egentligen inte vet vad som händer. Så ibland man vill ett fel, eller kanske du bara vill ha en varning. I detta fall behöver R inte göra det. Så det är verkligen upp till dig baserat bort av vad du tror att språket bör göra i detta fall Om du passerar i en vektor av Booleans När du gör en om tillstånd. Så låt oss säga att du hade den ursprungliga en med om annars returnera TRUE och du är kommer att återvända FALSKT. Så ett sätt att abstrahera detta är att säga att jag behöver inte ens detta villkorade sak. En annan sak jag kan göra är att bara åter värdena själva. Så om du märker, om du gör val är större än 5, detta kommer att returnera en vektor FALSKT FALSKT SANT. Kanske detta är vad du vill ha för bounded.compare. Du vill returnera en vektor av Booleans där den jämför varje av värdena för sig själva. Så du kan bara göra bounded.compare Funktionen x, en lika 5. Och sedan istället för att göra detta om annat tillstånd, Jag kommer bara att återvända x är större än fem. Så om det är sant, då det kommer att återvända SANT. Och sedan om det inte är det kommer att återvända FALSKT. Och detta kommer att fungera för någon av dessa strukturer. Så jag kan bounded.compare c 1 6 eller 9 och sedan ska jag säga en lika med 6, till exempel. Och då det kommer att ge dig rätt Boolean vektor som du skapar. Så de är bara funktioner och nu vill jag bara visa er några interaktiva grafik. Jag tror inte att jag faktiskt har Wi-Fi här så låt mig bara gå vidare och hoppa över detta antar jag. Men en sak som är coolt är dock att om du bara vill testa ett gäng olika datakommandon, Det finns ett gäng olika datauppsättningar som redan är förladdad i R. Så en av dem är kallas iris dataset. Detta är en av de mest kända de i maskininlärning. Du kommer oftast bara göra någon form av testfall för att se om din kod körs. Så låt oss bara kolla vad iris är. Så denna sak kommer vara en dataram. Och det är typ av lång eftersom Jag bara skrivas ut iris. Det skrivs ut hela saken. Så det har alla dessa olika namn. Så iris är en samling olika blommor. I det här fallet är det träffande du arten av det, alla dessa olika bredder och längder av sepal och bladet. Och så normalt, om du vill skriva ut iris, till exempel, vill du inte ha det göra allt detta eftersom det kan ta över Hela din konsol. Så en sak som är riktigt trevligt är huvudet funktionen. Så om du bara gör head iris, kommer detta att ge dig de första fem rader eller sex antar jag. Och sedan väl, du kan bara specificera här. Så 20-- detta kommer att ge du de första 20 raderna. Och jag var faktiskt snäll av förvånad över att detta gav mig sex så låt mig gå vidare och kolla iris-- eller huvudet, sorry. Och här kommer det att ge du dokumentationen av vad värdet huvudet gör. Så det returnerar den första eller sista av ett objekt. Och då kommer jag att titta på standardinställningarna. Och sedan det står standard metod huvudet x och n är lika med 6L. Så detta returnerar de första sex elementen. Och på samma sätt om du märker här, jag behövde inte ange n lika med 6. Som standard den använder sex, antar jag. Och sedan, om jag vill ange en viss värde, då kan jag se det också. Så det är några enkla kommandon och Här är en annan som är bara-- väl, Jag can-- detta är faktiskt lite mer komplicerat, men detta kommer bara ta klassen av varje kolumn i iris dataset. Så det här kommer att visa dig vad var och en av dessa kolumner i termer av deras typer. Så sepal längd är numeriskt, sepal bredd är numeriskt. Alla dessa värden är bara numeriska eftersom du kan berätta från dessa data strukturera dessa är alla kommer att numeriskt. Och Species kolumnen kommer att vara en faktor. Så normalt, skulle du tro att Detta är som en teckensträng. Men om du bara gör irisSpecies, och sedan ska jag göra huvudet 5, och detta kommer att skriva ut ut de första fem värden. Och sedan märker detta nivåer. Så detta saying-- detta är R sätt av att ha kategoriska variabler. Så istället för att bara ha teckensträngar, den har nivåer som specificerar vilka av dessa saker är. Så låt oss säga irisSpecies en. Så vad du vill göra här är jag delmängder till denna Arter kolumnen. Så detta tar Arter kolumnen och sedan indexeras för att få det första elementet. Så detta bör ge dig setosa. Och det ger dig också nivåer här. Så du kan också jämföra detta till tecken setosa och detta kommer inte för att vara sant eftersom en är av en annan typ än den andra. Eller jag antar att det är sant eftersom R är mer intelligent än så. Och det ser ut på det här och sedan säger, kanske detta är vad du vill. Så det kommer att säga tecknet string setosa är samma som denna. Och sedan samma sätt kan du också bara ta dessa som så vidare. Så det är bara något slags snabba kommandon av dataset. Så här är några uppgifter prospektering. Så det här är lite mer involverad i dataanalysen. Och detta är hämtat från vissa bootcamp i forskning i Berkeley. Så bibliotek främmande. Så jag kommer att ladda in ett bibliotek som kallas främmande. Så detta kommer att ge mig read.dta så antar att jag har denna dataset. Denna lagras i den aktuella arbetskatalog för min konsol. Så låt oss bara se vad arbetskatalogen är. Så här är min arbetskatalogen. Och läs punktdata, detta sak, säger den här filen ligger i mappen data denna aktuella arbetskatalogen. Och read.dta detta inte är ett standardkommando. Jag antar att jag laddade den i redan. IEI antog jag laddade detta redan. Men så read.dta inte kommer att vara ett standardkommando. Och det är därför du kommer att ha att ladda i detta bibliotek package-- detta paket som kallas främmande. Och om du inte har paketet, tror jag utländskt är en av de inbyggda sådana. Annars kan du också do install.packages och detta kommer att installera paketet. Och detta kommer att ge dig R. Uh, nej. Och då jag kommer bara att sluta detta eftersom jag redan har det. Men vad är riktigt nice om R är att pakethanteringen Systemet är mycket elegant. Eftersom det kommer att lagra allt verkligen snyggt för dig. Så i det här fallet, det kommer att lagra det, tror jag, detta bibliotek här. Så när du vill installera nya paket, det är precis så enkelt som gör install.packages och R kommer att hantera alla paketen för dig. Så du behöver inte göra något i Python, där du har extern paket chefer som papper Anaconda där du är doing-- du installerar paket utanför Python och sedan försöker köra dem själv. Så det här är verkligen trevligt sätt. Och install.packages kräver internet. Det tar den från en server och förvaret som samlar all paketen kallas CRAN. Och du kan ange vilken typ av spegel du vill hämta paketen från. Så här jag tar denna dataset. Jag läser det i att använda den här funktionen. Så låt mig gå vidare och göra det. Så låt oss anta att du har denna dataset och du har absolut ingen aning om vad det är. Och detta faktiskt kommer upp ganska ofta i branschen där du bara har dessa ton och massor av röriga saker och de är otroligt omärkt. Så här har jag det här dataset och jag vet inte vad det är så jag är bara visar att kolla upp det. Så jag ska göra med huvudet först. Så jag kolla de första sex kolonner av vad denna dataset är. Så det här är statligt, pres04, och sedan alla dessa olika slags kolumner. Och vad som är intressant Här, antar jag, är att du skulle anta att detta ser som någon sorts val. Och jag gissar bara från tittar på filen nämna att detta är någon sorts samling av data om kandidaterna eller väljarna som röstade för specifika presidenter eller president kandidater inför valet 2004. Så här är värden 1, 2 så ett sätt att lagra presidenten kandidater är deras namn. I detta fall ser det ut som de är bara heltalsvärden. Så 2004 var det Bush kontra Kerry tror jag. Och nu, låt oss säga att du bara inte vet huruvida en motsvarar Bush eller 2 motsvarar Kerry eller och så vidare och så vidare, eller hur? Och detta är, precis för mig, ett ganska vanligt problem. Så vad kan man göra i detta fall? Så låt oss kolla allt det andra. staten, jag antar detta kommer från olika länder. partyid, intäkter. Låt oss titta på partyid. Så kanske en sak du kan göra är att titta på var och en av observationerna som har en partyid av Republikan eller demokrat eller något. Så låt oss titta bara på vad partyid är. Så jag kommer att ta dat och sedan ska jag att göra detta dollartecken operatör som jag gjorde tidigare och detta kommer att delmängd till den kolumnen. Och då kommer jag att leda detta i 20, bara för att se vad det ser ut. Så det här är bara en massa nationella kontor. Så med andra ord, du har saknade uppgifter om dessa killar. Men du märker också denna dat partyid är en faktor så detta ger dig olika kategorier. Så med andra ord, kan partyid ta Demokrat, republikan, oberoende, eller något annat. Så låt oss gå vidare och låt oss se vilka av dessa är-- oh, OK. Så jag ska delmängd att partyid och sedan titta på vilka som är Demokraten, till exempel. Detta kommer att ge dig en Boolean, en enorm Boolean av Trues och FALSEs. Och nu, låt oss säga att jag vill ha att delmängd till dessa killar. Så detta kommer att ta min dat och delmängd till vilken observationer har partyid jämlikar lika demokrat. Och detta är ganska lång eftersom det finns så många av dem. Så nu kommer jag att huvudet detta i 20. Och som du märker, lika jämlikar är intressant eftersom du är already-- du också inklusive de nationella kontoren. Så i det här fallet, du fortfarande inte kan få någon information för nu har du NAs och du bara vill se vilka av observation motsvarar demokraten och inte dessa saknade värden själva. Så hur skulle du bli av med dessa nationella kontor? Så här jag bara använder upp nyckeln på min markören och sedan säga att flytta runt. Och så här jag ska bara säga is.na datpartyid. Så detta och och kommer att ta två olika booleska vektorer och säger att det kommer att bli SANT och FALSKT till exempel. Så det kommer att göra denna komponent-wise. Så här jag säger take dataramen, delmängd till de som motsvarar demokraten, och ta bort någon av dem som inte är NA. Så här will-- bör ge dig något. Låt oss se is.na. Låt oss försöka is.na datpartyid. Och detta bör ge du-- sorry-- bara en Boolean vektor. Och sedan, eftersom det är så lång, Jag ska delmängd till 20. OK. Så detta bör fungera. Och här kommer också att vara Trues. Ah, så mitt fel här är att I'm-- jag använda C ++ och R omväxlande så jag gör detta misstag hela tiden. Den och operatören faktiskt den du vill. Du vill inte att använda två et-tecken, bara en enda. OK. Så låt oss se. Så vi subsetted till partyid där de är demokrat och de är inte saknas värden. Och nu ska vi titta på vilka de röstade för. Så det verkar som om de flesta av dem röstade på 1. Så jag ska gå vidare och säga att det är Kerry. Och på samma sätt kan du också gå till republikanska och förhoppningsvis ska detta ge dig 2. Det är bara en massa olika kolumner. Och faktiskt, det är 2. Så partyid alla republikanska, de flesta av dem röstar för 2. Så det verkar som, precis genom att titta på detta, Republikan kommer att bli en very-- eller partyid kommer att bli en mycket stor faktor i att bestämma vilken kandidat de är kommer att rösta för. Och detta är naturligtvis sant i allmänhet. Och detta matchar din intuition, förstås. Så det verkar som om jag är ont om tid så Låt mig bara ska gå vidare och visar några snabba bilder. Så här är något som är en aning mer komplicerat med visualisering. Så i det här fallet, är detta en mycket enkel analys av bara kontrollera vad president '04 är. Så i detta fall, låt oss säga att du ville svara på denna fråga. Så antar att vi ville veta omröstningen beteende i 2004 president valet och hur det varierar med ras. Så inte nog med att du vill se röstningsbeteende, men du vill delmängd av varje ras och typ av sammanfatta det. Och du kan bara berätta av detta komplex notation att detta är typ att få grumlig. Så en av de mer avancerade R paket som finns också typen av senaste kallas dplyr. Så det är här en rätt här. Och ggg-- ggplot2 är bara en trevlig sätt att göra bättre visualiseringar än den inbyggda ett. Så jag kommer att ladda dessa två bibliotek. Och då kommer jag att gå framåt och köra det här kommandot. Du kan bara behandla detta som en svart låda. Vad händer är att detta rör operatör passerar i detta argument in på här. Så jag säger grupp genom dat ras och sedan president 04. Och sedan, alla dessa andra kommandon filtrerar och sedan sammanfatta där jag gör räkna och då jag rita det här. OK coolt. Så låt oss gå vidare och se hur det ser ut. Så vad som händer här är att jag precis plottas varje race och sedan vilka de röstade för. Och dessa två olika värden motsvarar 2 och 1. Om du vill vara mer elegant, kan du också bara ange att 2 är Kerry-- eller 2 är Bush, och sedan 1 är Kerry. Och du kan också ha det i din legend. Och du kan också dela dessa stapeldiagram. För en sak är att om du märker, Detta är inte så lätt att identifiera vilken av dessa två värden är större. Så en sak du skulle vilja göra är att ta det här blåa område och bara flytta den här borta så du kan jämföra dessa två sida vid sida. Och jag antar att det är något jag har inte tid att göra just nu, men det är också väldigt lätt att göra. Du kan bara titta in manualsidor ggplot. Så du kan bara göra ggplot som som och läsa in den här mannen sidan. Så låt mig bara snabbt visa några coola saker. Låt oss gå vidare och gå att-- bara en tillämpning av maskininlärning. Så låt oss säga att vi har dessa tre paket så jag ska ladda dessa i. Så detta bara skriver ut några information efter jag laddat i sak. Så jag säger detta read.csv, denna dataset, och nu Jag ska gå vidare och titta och se vad som finns inuti denna dataset. Så de första 20 observationer. Så jag har bara X1, X2, och Y. Så det verkar vara ett gäng av dessa värden är allt från kanske 20 till 80 eller så. Och sedan på samma sätt för X2 och sedan denna Y verkar vara etiketterna 0 och 1. För att verifiera detta, kan jag bara göra sammanfattande uppgifter X1. Och sedan på samma sätt för alla dessa andra kolumner. Så sammanfattning är ett snabbt sätt att bara visar dig snabba värden. Åh, förlåt. Detta bör vara Y. Så i detta fall, ger kvantiler, medianer, maxar också. I det här fallet, dataY, kan du se att det bara kommer att bli 0 och 1. Också medelvärdet säger 0,6, betyder bara att det verkar som jag har fler 1s än 0s. Så låt mig gå vidare och show vad det ser ut. Så jag ska bara rita detta. Låt oss se hur du rensar det. Oh OK. OK. Så det här är vad det ser ut. Så det verkar som gula jag specificerade som 0, och sedan rött jag anges som 1s. Så här ser det ut som etikettpunkter och det verkar som du ville bara några sorts kluster på detta. Och låt mig bara gå vidare och show några du av dessa inbyggda funktioner. Så här är lm. Så det här är bara försöker för att passa till en rad i denna. Så vad är det bästa sättet att jag kan passa en rad sådana att det bästa kommer att separera denna typ av kluster. Och helst, kan du bara se att jag kör bara alla dessa kommandon och sedan kommer jag framåt och lägg till raden. Så detta verkar vara det bästa gissning. Det tar det bästa som minimerar felet i att försöka passa denna linje. Uppenbarligen ser den här typen av bra, men det är inte den bästa. Och linjära modeller, i allmänhet, kommer att vara riktigt bra för teori och bara typ av byggnads grunderna i maskin lärande. Men i praktiken, kommer du att vill göra något mer allmänt. Så du kan bara försöka köra något som kallas ett neuralt nätverk. Dessa saker är allt vanligare. Och de bara fungerar fantastiskt för stora datamängder. Så i det här fallet, vi bara have-- låt oss see-- vi har nrow. Så nrow är bara säga antal rader. Så i detta fall, jag har 100 observationer. Så låt mig gå vidare och göra ett neuralt nätverk. Så det här är verkligen trevligt eftersom jag kan bara säga Nnet och sedan jag regressing Y. Så Y är den kolumnen. Och sedan regression det på de andra två variabler. Så detta är kortare notation för X1 och X2. Så låt oss gå vidare och köra detta. Åh, förlåt. Jag måste köra hela den här grejen. Och detta är bara skriver ut notation för hur snabbt eller inte snabbt det konvergerat. Så det ser ut som det gjorde konvergera. Så låt mig gå vidare och skriva ut ut vad det ser ut. Se här är bilden och här är en kontur som visar hur väl den passar. Och detta är bara-- du kan se detta att det är mycket, mycket trevligt. Det kan även vara overfitting, men du kan också svarar för detta med andra tekniker som korsvalidering. Och dessa är också inbyggda i R. Och låt mig bara visa dig stödja vektormaskin. Detta är en annan riktigt vanligt Tekniken i maskininlärning. Det är mycket lik linjära modeller, men den använder vad som kallas en kärna metod. Och låt oss se hur bra det fungerar. Så denna en är mycket lik hur väl ett neuralt nätverk utför, men det är mycket mer smidigare. Och detta är baserat utanför av what-- hur SVMs arbete. Så det här är bara en mycket snabb översikt över några av de inbyggda funktionerna kan du göra och också några av prospekteringsdata. Så låt mig bara gå vidare och gå tillbaka till bilderna. Så uppenbarligen är detta inte särskilt omfattande. Och det här är egentligen bara en teaser visar dig vad du kan göra riktigt i R. Så om du skulle bara vilja att lära sig mer, här är ett gäng olika resurser. Så om du är förtjust i läroböcker eller du är bara förtjust i att läsa saker på nätet, då detta är en fantastisk en efter Hadley Wickham, som också skapat alla dessa riktigt coola paket. Om du är förtjust i filmer, då Berkeley har en fantastisk bootcamp det är several-- det är typ av lång. Och det kommer att lära dig nästan allt du vill veta om R. Och på liknande sätt, det finns Codeacademy och alla dessa andra slags interaktiva webbplatser. De är också att få common-- mer och mer vanligt. Så detta är mycket lik Codeacademy. Och slutligen, om du bara vill gemenskapen och hjälpa, dessa är ett gäng saker du kan gå till. Självklart, vi fortfarande använda e-postlistor, precis liksom nästan alla andra programmeringsspråk gemenskap. Och #rstats, är detta vårt samhälle Twitter. Det är faktiskt ganska vanligt. Och sedan användaren! Är bara vår konferens. Och sedan, naturligtvis, kan du använda alla dessa andra Q & A saker, gillar Stack Overflow, Google och sedan GitHub. Eftersom de flesta av dessa paket och en hel del av samhället kommer att centreras kring utveckling kod eftersom det är öppen källkod. Och det är bara riktigt trevligt på GitHub. Och slutligen, kan du kontakta mig om du bara har några snabba frågor. Så du kan hitta mig på Twitter här, min hemsida, och bara min e-post. Så förhoppningsvis, det var something-- bara en kort teaser vad R är verkligen kapabla att göra. Och förhoppningsvis, du bara kolla in dessa tre länkar och se vad du kan göra mer. Och jag antar att det är bara om det. Tack. [Applåder]