>> [MUSIC SPILLE]
DUSTIN TRAN: Hei.
Jeg heter Dustin.
Så jeg skal presentere Data Analysis i R.
Bare litt om meg selv.
Jeg er for tiden en graduate student i ingeniør- og Applied Sciences.
Jeg studerer et skjæringspunkt mellom maskinlæring og statistikk
så dataanalyse i R er virkelig grunnleggende for hva
Jeg gjør på en daglig basis.
>> Og R er spesielt godt for dataanalyse
fordi det er veldig bra for prototyping.
Og som regel, når du gjør noe slag av dataanalyse, mye av problemene
skal kognitive.
Og så du bare vil ha noen virkelig god språk som
er bare bra for å gjøre innebygde funksjoner, i motsetning
å måtte hanskes med lavnivå ting.
Så i begynnelsen, jeg bare går å introdusere hva er R, hvorfor skulle
du ønsker å bruke det, og deretter gå over i noen demo,
og bare gå videre derfra.
>> Så hva er R?
R er bare et språk utviklet for statistisk databehandling
og visualisering.
Så hva dette betyr er at det er en veldig god språk
for alle slags ting som omhandler usikkerhet eller datavisualisering.
Så du har alle disse sannsynlighetsfordelinger.
Det kommer til å være innebygde funksjoner.
Du vil også ha utmerket plotting pakker.
>> Python er et annet konkurrerende språk for data.
Og en ting som jeg synes at R er mye bedre på er visualisering.
Så hva du vil se i demoen som vel er bare en veldig intuitivt språk
som bare fungerer svært godt.
Det er også gratis og åpen kildekode, som er noen andre gode språk jeg gjette.
>> Og her, en haug med bare søkeord kastet på deg.
Det er dynamisk, noe som betyr hvis du har en bestemt type tilordnet et objekt
enn det vil bare endre det på sparket.
Det er lat, så det er smart om hvordan den gjør beregninger.
Funksjonell betyr det kan virkelig operere basert off av funksjoner så anything--
noen form for manipulasjon du er gjør, vil det være basert på funksjoner.
>> Så binære operatorer, for eksempel, er bare iboende funksjoner.
Og alt som du kommer til å gjøre er
kommer til å bli kjørt av aktuelle funksjoner.
Og deretter objektorientert i tillegg.
>> Så her er en XKCD plot.
Ikke bare fordi jeg har lyst til XKCD er grunnleggende for noen form
av presentasjonen, men fordi Jeg føler at dette virkelig
hammers det punktet at mye av den tid når du gjør noen form for data
analyse, er ikke problemet så mye hvor fort det går,
men hvor lang tid det kommer til å ta deg programmere oppgaven.
Så her er bare å analysere hvorvidt strategi a eller b er mer effektiv.
Dette kommer til å være noe som du er
kommer til å håndtere mye med i liksom lavnivåspråk
hvor du arbeider med SEG feil, fordeling av minne, initializations,
selv gjør de innebygde funksjoner.
Og denne ting er alle håndtert veldig, veldig elegant i R.
>> Så bare for å hamre dette punkt, den største flaskehals
kommer til å være kognitiv.
Slik at dataanalyse er et svært vanskelig problem.
Om du gjør maskinlæring eller du er
gjør bare en slags grunnleggende utforskning av data,
du ikke ønsker å ha for å ta ut et dokument
og deretter kompilere noe hver gang du
ønsker å se hva en kolonne ser ut, Hva spesielt oppføringer i en matrise
ser ut.
Så du bare vil ha noen virkelig fint grensesnitt
du kan kjøre en enkel funksjon som indekserer til hva
du ønsker, og bare kjøre det derfra.
Og du trenger domene bestemte språk for dette.
Og R vil virkelig hjelpe deg å definere den Problemet og løse det på denne måten.
>> Så her er et plott som viser programmering populariteten av R som det er gått over tid.
Så som du kan se, som 2013 eller så det bare blåst opp enormt.
Og dette har vært bare på grunn av at stor trend i teknologibransjen
om store data.
Også, ikke bare teknologi industri, men egentlig
alle bransjer at-- fordi mye av de næringene
er liksom grunnleggende for prøver å løse disse problemene.
Og som regel, kan du ha noen god måte å måle disse problemene
eller til og med å definere dem eller løse dem ved hjelp av data.
Så jeg tror akkurat nå R er den 11. mest populære språket på TIOBE
og det har vært økende siden da.
>> Så her er noen mer funksjonene i R. Den har
et enormt antall pakker og for alle disse forskjellige ting.
Så når du har en visst problem, mest
tiden R vil ha som funksjon for deg.
Så om du vil bygge en slags maskin
læring algoritme kalt Random Forest eller beslutningstrær,
eller til og med prøver å ta gjennomsnittet av en funksjon eller noen av denne ting,
R vil ha det.
>> Og hvis du gjør det du bryr deg om optimalisering, en ting som er felles
er at når du er ferdig prototyping en slags høy-nivå språk,
du vil kaste det in-- vil du bare port som over
til en viss lavnivå språk.
Hva er bra om R er at når du er ferdig prototyping det, kan du kjøre C ++,
eller Fortran, eller en hvilken som helst av disse lavere nivå seg direkte inn R.
Så det er en virkelig kul funksjon om R,
hvis du virkelig bryr deg om optimalisering punktet.
>> Og det er også veldig bra for web-visualiseringer.
Så D3.js, for eksempel, er Jeg antar en annen seminar
som vi presenterte i dag.
Og dette er virkelig kjempebra for gjør interaktive visualiseringer.
Og D3.js forutsetter at du har en slags data som skal plottes
og R er en flott måte å være i stand til å gjøre dataanalysen før du eksporterer det
over til D3.js eller bare kjøre D3.js kommandoer inn i R selv,
samt alle disse andre bibliotek i tillegg.
>> Så det var bare innføringen av hva er R og hvorfor du kan bruke den.
Så forhåpentligvis har jeg overbevist deg noe
om bare å prøve å se hvordan det er.
Så jeg kommer til å gå videre og gå gjennom noen grunnleggende om R objekter
og hva du kan virkelig gjøre.
>> Så her er bare en haug med matematiske kommandoer.
Så si you're-- du ønsker å bygge språket selv og du bare ønsker
å ha en haug med ulike verktøy.
Noen form for operasjon du tror du vil ønsker er ganske mye kommer til å være i R.
>> Så her er to pluss to.
Her er to ganger pi.
R har en haug med innebygde konstanter at du bruker ofte som pi, e.
>> Og så, her er 7 pluss runif, så runif av 1.
Dette er en funksjon som er genererer en tilfeldig uniform fra 0 til 1.
Og så er det tre til makten til fire.
Det er kvadratrøtter.
>> Det er log.
Så logg vil gjøre basen eksponensiell av seg selv.
Og så, hvis du angir en base, deretter du kan gjøre hva basen du vil.
Og så her er noen andre kommandoer.
Så du har 23 mod 2.
Da har du resten.
Da har du vitenskapelig notasjon hvis du også
ønsker å gjøre bare mer og mer kompliserte ting.
>> Så her er oppdraget.
Så typiske oppgaver i R er gjort med en pil
så det er mindre enn og deretter bindestrek.
Så her er jeg bare tildele 3 til den variable val.
>> Og så skal jeg skrive ut val og skriver den ut ut tre.
Som standard i R tolk, det vil skrive ut ting for deg
slik at du ikke trenger å spesifisere skrive ut en val som helst du ønsker å skrive ut noe.
Du kan bare gjøre val og da det vil gjøre det for deg.
>> Dessuten kan du bruke er lik teknisk som et oppdrag operatør.
Det er små finesser mellom å bruke pil
operatør og likhets operatør for oppdrag.
Det meste av konvensjonen, alle vil bare bruke pilen operatør.
>> Og her, jeg tildele dette skrå notasjon kalles en kolon 6.
Dette genererer en vektor fra 1 til 6.
Og dette er virkelig fint fordi da du bare tildele vektoren til val
og som virker av seg selv.
>> Så dette er allerede kommer fra en single-- en meget intuitiv data
Strukturen av bare en dobbelt av noen type typen i en vektor
og som vil samle alle de skalare verdier for deg.
Så etter å ha gått fra skalar, du har R gjenstander, og dette er en vektor.
En vektor er noen form for Samlingen av samme type.
Så her er en haug med vektorer.
>> Så dette er numerisk.
Numerisk er R måte å si dobbel.
Og så som standard, noe nummer vil være en dobbel.
>> Så hvis du har c på 1,1, 3, negativt 5,7, er c en funksjon.
Dette Setter sammen alle tre numre i en vektor.
Og dette vil be-- så hvis du legger merke til tre av seg selv,
normalt du ville anta at dette er som et helt tall,
men fordi alle vektorer er av samme type,
dette er en vektor av dobbeltrom eller numerisk i dette tilfellet.
>> rnorm er en funksjon som genererer standard normal variables--
eller standard normale verdier.
Og jeg angi to av dem.
Så jeg gjør rnorm 2, tildele det til devs, og da jeg skriver ut devs.
Så dette er bare to tilfeldige normale verdier.
>> Og så ints hvis du gjør du bryr deg om heltall.
Så dette er bare om minne tildeling og lagringsminne størrelse.
Så du ville ha til å føye tallene fra hovedstaden L.
>> Generelt er denne R historiske notasjon
for noe som kalles lang heltall.
Så mesteparten av tiden, vil du være å håndtere dobles.
Og hvis du noen gang vil senere på optimalisere koden din,
du kan bare legge til disse L's etterpå eller i løpet av det
Hvis du er som precognitive om hva du kommer til å gjøre disse variablene.
>> Så her er et tegn vektor.
Så, igjen, jeg concatenating tre strenger denne gangen.
Legg merke til at doble strenger og enkelt strenger er de samme i R.
Så jeg har arthur og Marvin og så når jeg skriver det ut, alle av dem
kommer til å vise doble strenger.
Og hvis du også ønsker å inkludere dobbel eller enkel streng
i figurene dine, så du kan enten veksle dine strenger.
>> Så Marvins for andre element, er denne
kommer til å show-- deg bare har doble strenger
og deretter en enkelt streng så dette er vekslende.
Ellers, hvis du ønsker å bruke en dobbel string operatør i en dobbel string
når du forkynner det, da du bare bruke flukt operatør.
Så du gjør backslash dobbel streng.
>> Og til slutt, vi også har logiske vektorer.
Så logical-- så TRUE og USANN, og de er
kommer til å være store bokstaver.
Og så, igjen, jeg concatenating dem og deretter tildele dem til bools.
Så bools kommer til å vise du TRUE, FALSE, og SANN.
>> Så her er vektorisert indeksering.
Så i begynnelsen, jeg jeg tar en function--
Dette kalles en sequence-- sekvens 2-12.
Og jeg tar en sekvens med 2.
Så det kommer til å gjøre 2, 4, 6, 8, 10 og 12.
Og så er jeg indeksering for å få det tredje element.
>> Så en ting å huske på er at R indekser ved å starte fra en.
Så vals 3 kommer til å gi du det tredje elementet.
Dette er liksom forskjellig fra andre språk hvor det starter fra null.
Så i C eller C ++, for eksempel, er du kommer til å få det fjerde element.
>> Og her er vals fra 3 til 5.
Så en ting som er virkelig kult er at du
kan generere midlertidige variabler inne og så bare bruke dem på sparket.
Så her er 3 til 5.
Så jeg genererer en vektor 3, 4 og 5, og deretter
Jeg indeksering for å få den tredje, fjerde og femte elementer.
>> Så samme måte kan du abstrakt dette å bare gjøre
noen form av en vektor som gir deg indeksering.
Så her er vals og deretter første, tredje og sjette elementer.
Og så, hvis du vil å gjøre et supplement,
slik at du bare gjøre det minus etterpå og som vil
gi deg alt det er ikke første, tredje eller sjette element.
Slik at dette vil være 4, 8 og 10.
>> Og hvis du ønsker å få enda mer avansert,
du kan sette sammen boolske vektorer.
Så denne indeksen kommer til å gi deg dette boolsk vektor av lengde 6.
Så rep TRUE komma tre.
Dette vil gjenta TRUE tre ganger.
Så dette vil gi deg en vektor TRUE, TRUE, TRUE.
>> rep FALSE 4-- dette kommer til å gi deg en vektor av FALSE, FALSE, FALSE, FALSE.
Og deretter c kommer til å slå sammen disse to Booleans sammen.
Så du kommer til å få tre Trues og deretter fire misoppfatter.
>> Slik at når du indeks vals, er du kommer til å få den TRUE, TRUE, TRUE.
Så det kommer til å si ja, Jeg vil at disse tre elementene.
Og så FALSE, FALSE, FALSE, FALSE kommer
å si nei, jeg vil ikke ha disse elementene så det ikke kommer til å returnere dem.
>> Og jeg antar det er faktisk en skrivefeil her fordi dette sier gjenta TRUE 3
og gjenta FALSK 4, og teknisk, du bare har seks elementer så gjenta FALSE,
det bør være gjenta FALSK tre.
Jeg tror R er også smart nok slik at hvis du bare angi fire her, så
det vil ikke engang feilstedene.
Det vil bare gi deg denne verdien.
Så det vil bare ignorere det fjerde FALSK.
>> Så her er vektorisert oppdrag.
Så set.seed-- dette bare setter frø for pseudo tall.
Så jeg sette frø til 42, noe som betyr at hvis jeg generere
tre tilfeldig normal verdier, og hvis du
kjøre set.seed på egen hånd datamaskinen ved hjelp av samme verdi 42,
Da får du også den samme tre tilfeldige normaler.
>> Så dette er veldig bra for reproduserbarhet.
Vanligvis, når du gjør noen slags vitenskapelig analyse,
du ønsker å sette frø.
På den måten andre forskere kan bare reprodusere nøyaktig samme kode du har
gjort fordi de vil ha nøyaktig samme tilfeldige variabler at-- eller tilfeldig
verdier som du har tatt ut også.
>> Og så den vektorisert oppdrag her viser de vals 1 til 2.
Så det tar de to første elementene av vals og deretter tildeler dem til 0.
Og så, du kan også bare gjøre det lignende ting med Booleans.
>> Så vals er ikke lik 0-- denne vilje gi deg en vektor FALSE, FALSE, TRUE
i dette tilfellet.
Og så kommer det til å si noe av disse indeksene det var sant,
så det kommer til å tildele det til fem.
Så det tar det tredje elementet her og deretter tildeler den til fem.
>> Og dette er virkelig fin sammenlignet med lavt nivå språk
hvor du må bruke for sløyfer å gjøre alt dette vektorisert stuff
fordi det er bare veldig intuitiv og det er en enkel one-liner.
Og hva er flott om vektorisert notasjon
er at i R, disse er liksom innebygd, slik at de er nesten like raskt
som gjør i et lavnivå språk som motsetning til å gjøre en for løkke i R
og deretter å ha den til å gjøre den dynamiske indeksering selv.
Og det vil være tregere enn å gjøre denne typen vektorisert ting
hvor det kan gjøre det i parallell, hvor det gjør det i threading utgangspunktet.
>> Så her er vektorisert operasjoner.
Så jeg generere en verdi 1 til 3, å tilordne det til vec1, 3 til 5, vec2,
å legge dem sammen.
Den legger dem komponent-messig så Det er en plus 3, 2 pluss 4, og så videre.
>> vec1 ganger vec2.
Dette multipliserer to verds komponent klok.
Så det er en ganger tre, to ganger 4, og deretter tre ganger fem.
>> Og så, på samme måte kan du også gjøre comparisons-- logiske sammenligninger.
Så det er false false TRUE i dette tilfelle fordi en ikke er større enn 3,
2 ikke er større enn fire.
Dette er, antar jeg, en annen skrivefeil, 3 er definitivt ikke større enn fem.
Yeah.
Og så kan du bare gjøre alt disse enkle operasjoner
fordi deres arvet fra klassene selv.
>> Så det var bare vektoren.
Og det er liksom den mest grunnleggende R objektet, fordi gitt en vektor,
du kan konstruere mer avanserte objekter.
>> Så her er en matrise.
Dette er egentlig det abstraksjon av hva en matrise er seg selv.
Så i dette tilfellet, er det tre forskjellige vektorer, hvor hver og en er en kolonne,
eller du kan vurdere det som hver og en er en rad.
>> Så jeg lagrer en matrise fra 1 til 9 og da er jeg spesifiserer tre rader.
Så 1 til 9 vil gi deg en vektor en, 2, 3, 4, 5, 6, og hele veien til 9.
>> En ting til også huske på er at R butikker verdier i kolonne-dur format.
Så med andre ord, når du ser en til 9, det kommer til å lagre them--
det kommer til å være 1, 2, 3 i den første kolonnen
og da vil det gjøre 4, 5, 6 i den andre kolonnen
og 7, 8, 9 i den tredje kolonnen.
>> Og her er noen andre fellesfunksjoner du kan bruke.
Så svak matte, dette vil gi deg dimensjonene på matrisen.
Det kommer til å returnere deg en vektor av dimensjonen.
Så i dette tilfelle, fordi vår matrisen er 3 ved 3,
det kommer til å gi deg en numerisk vektor som er 3 3.
>> Og her er bare viser matrisemultiplikasjon.
Så vanligvis, hvis du bare gjøre asterisk-- så matte stjerne mat--
dette kommer til å være komponent-messig drift
eller det som kalles Hadamard produktet.
Så det kommer til å gjøre hver element komponent-messig.
Men hvis du vil ha matrise multiplication--
så multiplisere første rad ganger den andre matrisen første kolonne
og så on-- du ville bruke dette prosent operasjon.
>> Og t av matten er bare en operasjon for transponere.
Så jeg sier ta transponere i matrisen, multipliserer det med matrisen
selv.
Og så kommer det til å tilbake til dere en annen 3
med 3 matrise som viser produktet du ønsker.
>> Og så det var matrise.
Her er det som kalles en dataramme.
En dataramme du kan tenke på som en matrise, men hver kolonne i seg selv
kommer til å være av en annen type.
>> Så hva er egentlig kult om data rammer er at i dataanalyse seg selv,
du kommer til å ha alt dette heterogene data og alle disse virkelig
rotete ting hvor hver av kolonnene seg selv kan være av forskjellige typer.
Så her sier jeg lage en dataramme, gjør ints fra 1 til 3,
og deretter har også et tegn vektor.
Så jeg kan indeksere gjennom hver av disse kolonnene
og så skal jeg få verdiene selv.
Og du kan også gjøre noen form av operasjoner på datarammer.
Og mesteparten av tiden når du er gjør dataanalyse eller annen form
av forbehandling, vil du være jobbe med disse datastrukturer
der hver kolonne kommer å være av en annen type.
>> Til slutt, så disse er egentlig bare de fire essensielle objekter i R. List
vil bare samle noen andre objekter du ønsker.
Så det vil lagre dette i ett variabel som du enkelt kan få tilgang.
>> Så her, jeg tar en liste.
Jeg sier ting er lik 3.
Så jeg kommer til å ha ett element i listen, og dette kalles ting,
og det kommer til å ha verdien 3.
>> Jeg kan også lage en matrise.
Så dette er 1 til 4 og slutten rad lik 2, slik at en 2 ganger 2 matrise.
Også på listen og det heter matte.
moreStuff, en tegnstreng, og enda en annen liste i seg selv.
>> Så dette er en liste som er fem og bjørn.
Så det har verdien 5 og det har tegnstrengen bjørn
og det er en liste inne i en liste.
Så du kan ha disse rekursive tingene der
du har another-- en skriver innenfor den type.
Så på samme måte, kan du ha en matrise inne i en annen matrise og så videre.
Og en liste er bare en god måte samle inn og aggregere
alle disse forskjellige objekter.
>> Og til slutt, her er bare hjelpe i tilfelle dette var bare borte over svært raskt.
Så når du er forvirret om noen form for funksjonen
du kan gjøre hjelp av denne funksjonen.
Så du kan gjøre hjelp matrise eller et spørsmålstegn matrise.
Og hjelp og spørsmålstegnet er bare forkortelse for det samme
slik at de er aliaser.
>> lm er en funksjon som bare gjør en lineær modell.
Men hvis du bare aner ikke hvordan det fungerer, kan du bare gjøre hjelp av lm
og som vil gi deg litt slags dokumentasjon som
ser litt som en mannen siden i Unix, hvor
du har en kort beskrivelse av hva den gjør det, også hva argumentene er,
hva den returnerer, og bare tips om hvordan å bruke det, og noen eksempler også.
>> Så la meg gå videre og showet noen demo av å bruke R. OK.
Så jeg gikk over svært raskt bare data
strukturer og en slags av op-- noen av operasjonene.
Her er noen av funksjonene.
>> Så her skal jeg bare å definere en funksjon.
Så jeg er også bruker oppdrag operatør her,
og da sier jeg erklære det som en funksjon.
Og det tar verdien x.
Så dette er en verdi du vil og jeg kommer til å gå tilbake x selv.
Så dette er identiteten funksjon.
>> Og hva som er kult om dette sammenlignet med andre språk
og et lavt nivå språk er at x
kan være av hvilken som helst type i seg selv og det vil returnere den typen.
Så du kan imagine-- så la meg bare kjøre dette raskt.
Unnskyld.
>> Så en ting jeg bør også nevne er at denne editoren jeg bruker
kalles rstudio.
Dette er det som kalles en IDE.
Og en ting som er virkelig fint om dette
er at den omfatter en masse av ting du vil gjøre i R av seg selv
bare veldig intuitivt.
>> Så her er tolk konsoll.
Så på samme måte, kan du også få dette konsollen rå bare ved å gjøre en kapital R.
Og dette er akkurat den samme som konsollen.
Så jeg kan bare gjøre id funksjon x, x, x.
Og then-- og da at vil bli bra selv.
>> Så rstudio er stor fordi den har konsollen.
Det har også dokumentene du ønsker å kjøre på.
Og så har noen variabler som du kan se i miljøer.
Og så, hvis du har å gjøre tomter, så du
kan bare se det her, i motsetning til administrere alle disse forskjellige vinduer
av seg selv.
>> Jeg faktisk personlig bruker Vim, men jeg føler at rstudio er utmerket bare
for å få en god idé av hvordan du bruker R. Vanligvis
når du prøver å lære noen ny oppgave,
du ikke ønsker å håndtere for mange ting på en gang.
Så R er bare en very-- rstudio er en veldig god måte å lære på R
uten å måtte forholde seg til alle disse andre tingene.
>> Så her Jeg kjører id hallo.
Dette returnerer hei.
id 123.
Her er en vektor av heltall.
Så på samme måte, fordi du kan ta noen noen form for verdi,
du kan gjøre retur id av x slik at det returnerer 1234 og 5.
>> Og la meg bare vise deg at dette er faktisk et heltall.
Og på samme måte, hvis du gjør klasse id x, kommer det til å være heltall.
Og så kan du også sammenligne de to, og det er sant.
Så jeg sjekke om id av x tilsvarer tilsvarer x og varsel
at det gir deg to Trues.
Så dette er ikke si er de to objektene identiske
men er hver av oppføringene innenfor vektorene identiske.
>> Her er bounded.compare.
Så dette er litt mer komplisert ved at den har en hvis tilstand og annet
og så tar det to argumenter om gangen.
Så x er av en hvilken som helst type.
Og jeg sier dette andre argumentet er en.
Dette kan være alt i tillegg.
Men som standard, det kommer til å ta 5 hvis du ikke spesifiserer noe.
>> Så her kommer jeg til å si dersom x er større enn en.
Så hvis jeg ikke angir et, det sier at dersom x er større enn 5,
så jeg kommer til å returnere SANN.
annet, kommer jeg til å returnere USANN.
Så la meg gå videre og definere dette.
>> Og nå kommer jeg til å kjøre bounded.compare tre.
Så det sier er tre mindre than-- er tre mer enn fem.
Nei, det er ikke så FALSK.
>> Og bounded.compare 3 og jeg kommer å sammenligne den med en lik 2.
Så nå er jeg sier ja, nå er jeg ønsker en å være noe annet.
Så jeg kommer til å si en, bør du være to.
>> Jeg kan enten gjøre denne typen notasjon eller jeg si en er lik to.
Dette er en mer lesbar i at når du er
ser på disse virkelig kompliserte funksjoner som
ta flere arguments-- og dette kan være flere titalls oftentimes-- bare si
en er lik to er mer lesbar for deg slik at senere i fremtiden
vil du vite hva du gjør.
>> Så i dette tilfellet, er jeg ordtaket er 3 større enn 2.
Ja det er.
Og på samme måte, jeg kan bare fjerne dette og si, er 3 større enn 2
hvor en er lik to.
Og det er også sant.
Ja?
>> PUBLIKUM: Er du utførende linje for linje?
>> DUSTIN TRAN: Ja jeg er.
Så hva jeg gjør her er ta denne teksten document--
og hva er flott om rstudio er at Jeg kan bare kjøre en short-- en snarvei.
Så jeg gjør Ctrl-Enter.
>> Og så, jeg tar den linje i tekstdokumentet
og deretter sette i konsollen.
Så her sier jeg, bounded.compare og jeg gjør Kontroll-X.
Så jeg kan bare ikke kjøre her også.
Og deretter som vil ta linje og deretter sette den her.
Og deretter på samme måte, jeg kan ikke kjøre her.
Og så vil det bare fortsette å definere linjene inn i konsollen sånn.
>> Og hvis du også legge merke til den krøllete bukseseler er det akkurat som i C syntaks.
X- hvis hvis betingelsen er også kommer til å bruke parenteser og deretter
du kan bruke annet.
En annen er annet hvis.
Så dette kommer til å bli x lik lik en, for eksempel.
Og så kommer jeg til å returnere noe her.
>> Legg merke til at det finnes to forskjellig ting her som skjer.
Det ene er at her jeg spesifisere returnere verdien TRUE.
Her jeg sier bare x.
Så R vil vanligvis som standard ta den siste arguments--
eller ta den siste linje av koden, og som vil være hva det er returnert.
Så her er dette den samme ting som gjør retur x.
>> Og bare for å vise deg.
Og da vil det fungere bare sånn.
Så la meg fortsette med dette.
>> Så annet hvis.
Og egentlig, kan jeg returnere noe jeg ønsker.
Så jeg trenger ikke engang å retur Booleans hele tiden,
Jeg kan bare returnere noe annet.
Så jeg kan gjøre retur bjørn.
>> Så hvis x er lik lik en, det kommer til å gå tilbake bjørn.
Ellers kommer det til å returnere SANN.
Jeg kan også gjøre en vektor eller egentlig hva som helst.
>> Og normalt i statisk skrevne språk,
du må angi en type her.
Og legg merke til at det bare kan være hva som helst.
Og R er intelligent nok til at det vil bare gjøre dette, og det vil fungere fint.
>> Så la meg definere dette.
Unexpected-- oh sorry.
Det bør være en klammeparentes her.
OK.
Cool.
OK.
Så nå la oss sammenligne tre og en er lik 3.
Så det bør return-- yeah-- verdien bjørn.
>> Så nå en mer generell ting er som hva om andre datastrukturer.
Så du har denne funksjonen.
Dette kommer til å fungere på alle slags av verdi som 3 eller numerisk,
med andre ord dobbelt.
>> Men hva om noe sånt som en vektor.
Så hva skjer hvis du do-- så jeg er kommer til å tildele val til, si, 4 til 6.
Så hvis jeg kommer tilbake dette, dette er en vektor fra 4, 5, 6.
>> La oss nå se hva som skjer hvis jeg gjør bounded.compare val.
Så dette kommer til å gi deg 15 1251.
Så med andre ord, er det å si hvis du ser på denne tilstanden
så det står x er mindre enn en eller noe.
Så dette er litt forvirrende fordi nå
du vet bare ikke hva som skjer.
Så jeg antar en ting som er virkelig godt om bare prøver å feilsøke
er at du bare kan gjøre val er større enn en og se hva som skjer der.
>> Så val-- en er som standard 5 så La oss bare gjøre Val større enn 5.
Så dette er en vektor false false TRUE.
Så nå når du ser på dette, det kommer til å si om,
og da kommer det til å gi deg dette er en vektor av false false TRUE.
>> Så når du passerer dette i R, R har ingen anelse om hva du gjør.
Fordi det forventer ett enkelt verdi, noe som er en boolsk, og nå
du gir det en vektor av Booleans.
Så som standard, er R bare kommer til å si hva pokker,
Jeg kommer til å anta at du er kommer til å ta det første elementet her.
Så jeg kommer til å say-- jeg kommer å anta at dette er usant.
Så det kommer til å si nei, dette er ikke riktig.
>> Tilsvar, kommer det til å være val tilsvarer tilsvarer en.
Nei, beklager fem.
Og det er også kommer til å være falsk også.
Så det kommer til å si nei, Det er ikke sant, så vel så det er
kommer til å returnere denne siste.
>> Så dette er enten en god ting eller en dårlig ting, avhengig av hvordan du ser det.
Fordi når du er skape disse funksjonene,
du trenger faktisk ikke vet hva som skjer.
Så noen ganger du ønsker en feil, eller kanskje du bare vil ha en advarsel.
I dette tilfellet betyr R ikke gjøre det.
Så det er egentlig opp til du basert off av hva
tror du språket bør gjøre i dette tilfellet
hvis du passerer i en vektor av Booleans når du gjør en hvis tilstand.
>> Så la oss si at du hadde den opprinnelige ett med hvis annet returnere SANN, og du er
kommer til å returnere USANN.
Slik at en måte å abstrahere dette er å si at jeg
trenger ikke engang dette betinget ting.
En annen ting jeg kan gjøre er bare retur verdiene selv.
Så hvis du legger merke til, hvis du do val er større enn 5,
dette kommer til å returnere en vektor false false TRUE.
>> Kanskje dette er hva du ønsker for bounded.compare.
Du ønsker å returnere en vektor av Booleans hvor den sammenligner hver av verdiene
til seg selv.
Så kan du bare gjøre bounded.compare Funksjonen x, a er lik fem.
Og så i stedet for å gjøre dette hvis annet tilstand,
Jeg kommer bare til å gå tilbake x er større enn fem.
Så hvis det er sant, så det kommer til å returnere SANN.
Og så hvis det ikke er det, er det kommer til å returnere USANN.
>> Og dette vil fungere for noen av disse strukturer.
Så jeg kan bounded.compare c en 6 eller 9 og så kommer jeg til å si en lik 6,
f.eks.
Og så kommer det til å gi deg den rette boolsk
vektor som du designer.
>> Så de er bare funksjoner og nå la meg bare
vise deg noen interaktive grafikk.
Jeg tror ikke jeg har faktisk Wi-Fi her så la meg bare gå videre
og hoppe over dette antar jeg.
>> Men en ting som er kult skjønt er at hvis du bare
ønsker å teste en haug med ulike datakommandoer,
det er en haug med forskjellige datasett som allerede er forhåndslagret i R.
Så en av dem er kalt iris datasettet.
Dette er en av de mest kjente de i maskinlæring.
Du vil som regel bare gjøre noen form for testtilfeller for å se om koden din kjører.
Så la oss bare sjekke hva iris er.
>> Så denne ting kommer å være en dataramme.
Og det er slags lenge fordi Jeg har nettopp skrevet ut iris.
Det å skrive ut hele greia.
Så det har alle disse forskjellige navn.
Så iris er en samling av forskjellige blomster.
I dette tilfellet er det å fortelle du arter av det,
alle disse forskjellige bredder og lengder av sepal og bladet.
>> Og så normalt, hvis du vil skrive ut iris,
for eksempel, trenger du ikke ønsker å ha det gjøre alt dette fordi det kan ta over
hele konsollen.
Så en ting som er virkelig hyggelig er hodet ikke fungerer.
Så hvis du bare gjøre hodet iris, vil dette gi deg
de første fem rader eller seks tror jeg.
Og så godt, du kan bare spesifisere her.
Så 20-- dette vil gi du de første 20 radene.
Og jeg faktisk var snill overrasket over at dette
ga meg seks så la meg gå videre og sjekk iris-- eller hode, beklager.
Og her vil det gi du dokumentasjonen
av hva verdien hodet gjør.
Slik at den returnerer den første eller siste av et objekt.
Og så kommer jeg til å se på standardinnstillingene.
Og så står det standard metode hode x og n er lik 6L.
Så dette returnerer de seks første elementene.
Og på samme måte hvis du legger merke til her, jeg trengte ikke å spesifisere n er lik seks.
Som standard bruker den seks, antar jeg.
Og så, hvis jeg ønsker å spesifisere en viss verdi, så jeg kan se det også.
>> Så det er noen enkle kommandoer og her er en annen en som er just-- godt,
Jeg can-- dette er faktisk litt mer komplisert,
men dette vil bare ta klassen for hver kolonne i iris datasettet.
Så dette vil vise deg hva hver av disse kolonner er i form av sine typer.
Så sepal lengde er numerisk, sepal bredde er numerisk.
Alle disse verdier er bare numerisk fordi du kan fortelle fra disse dataene
strukturere disse er alle kommer til numerisk.
>> Og Arter kolonne kommer til å være en faktor.
Så normalt, tror du at dette er som en tegnstreng.
Men hvis du bare gjøre irisSpecies, og så kommer jeg til å gjøre hodet 5,
og dette kommer til å skrive ut ut de første fem verdier.
>> Og deretter legge merke til dette nivået.
Så dette er saying-- dette er R måte av å ha kategoriske variabler.
Så i stedet for bare ha tegnstrenger,
det har nivåer spesifiserer hvilke av disse tingene er.
>> Så la oss si irisSpecies en.
Så hva du ønsker å gjøre her er jeg undergruppe til denne Arter kolonnen.
Så dette tar Arter kolonne og deretter
den indekserer å få det første elementet.
Så dette burde gi deg setosa.
Og det gir deg også nivåer her.
>> Så du kan også sammenligne dette til karakteren setosa
og dette ikke kommer å være sant fordi man
er av en annen type enn den andre.
Eller jeg antar det er sant fordi R er mer intelligent enn det.
Og det ser ut på dette og deretter sier, kanskje dette er hva du ønsker.
Så det kommer til å si tegnet string setosa er den samme som denne.
Og deretter på samme måte, kan man også bare ta disse som så videre.
>> Så det er bare en slags raske kommandoer av datasettet.
Så her er noen data leting.
Så dette er en litt mer involvert i dataanalysen.
Og dette er tatt fra noen bootcamp i R for i Berkeley.
>> Så bibliotek utenlandske.
Så jeg kommer til å laste inn en bibliotek som heter utenlandske.
Så dette kommer til å gi meg read.dta så anta at jeg har dette datasettet.
Denne er lagret i den aktuelle arbeidsmappen min konsoll.
Så la oss bare se hva arbeidsmappen er.
>> Så her er min arbeidskatalog.
Og lese punktdata, dette ting, sier denne filen
ligger i datamappen til denne gjeldende arbeidskatalog.
Og read.dta dette ikke er en standard kommandoen.
Jeg antar jeg lastet det inn allerede.
IEI antok jeg lastet dette inn allerede.
>> Men så read.dta ikke kommer å være en standardkommandoen.
Og det er derfor du kommer til å ha å laste inn dette biblioteket package--
denne pakken kalt utenlandske.
Og hvis du ikke har pakken, tror jeg
fremmed er en av de innebygde seg.
Ellers kan du også gjøre install.packages
og dette vil installere pakken.
Og dette vil gi deg R. Uh, nei.
Og da er jeg bare kommer til å stoppe dette fordi jeg allerede har gjort det.
>> Men hva er egentlig fint om R er at pakken ledelsen
Systemet er meget elegant.
Fordi det vil lagre alt virkelig pent for deg.
Så i dette tilfellet, det kommer til å lagre det inn, tror jeg, dette biblioteket her.
>> Så når du vil installere nye pakker,
det er like enkelt som gjør install.packages
og R vil administrere alle pakkene for deg.
Så du trenger ikke å gjøre noe i Python, hvor du har ekstern pakke
ledere som papir Anaconda hvor du er
doing-- du installerer pakker utenfor Python
og deretter prøver å kjøre dem selv.
Så dette er veldig fin måte.
>> Og install.packages krever internett.
Det tar det fra en server og depotet som
samler alle pakkene kalles CRAN.
Og du kan angi hvilken slags speil du ønsker å laste ned pakker fra.
>> Så her jeg tar dette datasettet.
Jeg leser det i å bruke denne funksjonen.
Så la meg gå videre og gjøre det.
>> Så la oss anta at du har dette datasettet
og du har absolutt aner ikke hva det er.
Og dette faktisk kommer opp ganske ofte i bransjen
der du bare har disse tonn på tonn med rotete ting
og de er utrolig umerket.
Så her har jeg denne datasett og jeg vet ikke
hva det er så er jeg bare viser å sjekke det ut.
>> Så jeg kommer til å gjøre med hodet først.
Så jeg sjekke de første seks kolonner av hva dette datasettet er.
Så dette er staten, pres04, og deretter alle disse forskjellige slags kolonner.
Og hva er interessant her, antar jeg, er at du
vil anta at dette ser som en slags valg.
Og jeg antar bare fra ser på filen
nevne dette er en slags samling av data om kandidater eller velgere
som stemte for spesifikke presidenter eller president kandidater
for 2004 valget.
>> Så her er verdiene 1, 2 slik at en måte å lagre
presidenten kandidater er navnene deres.
I dette tilfellet ser det ut som de er bare heltallsverdier.
Så 2004, det var Bush versus Kerry tror jeg.
Og nå, la oss si at du bare ikke vet om en tilsvarer Bush eller to
tilsvarer Kerry eller og så videre og så videre, ikke sant?
>> Og dette er bare for meg, et ganske vanlig problem.
Så hva kan du gjøre i dette tilfellet?
Så la oss sjekke alle disse andre tingene.
>> tilstand, jeg antar dette kommer fra forskjellige stater.
PartyId, inntekt.
La oss se på PartyId.
Så kanskje en ting du kan gjøre er se på hver av de observasjoner
som har en PartyId av republikanske eller demokrat eller noe.
Så la oss bare se på hva PartyId er.
>> Så jeg kommer til å ta dat og da jeg kommer
å gjøre dette dollartegn operatør som jeg gjorde tidligere
og dette kommer til å undergruppe i den kolonnen.
Og så kommer jeg til å dra dette i 20, bare for å se hvordan dette ser ut.
>> Så dette er bare en haug med NAs.
Så med andre ord, har du manglende data om disse gutta.
Men du også legge merke til dette dat PartyId er en faktor
så dette gir deg forskjellige kategorier.
Så med andre ord, kan PartyId ta Demokrat, republikaner, Independent,
eller noe annet.
>> Så la oss gå videre og la oss se hvilke av disse er-- oh, OK.
Så jeg kommer til å undergruppe å PartyId og deretter
se på hvilke som er Demokrat, for eksempel.
Dette kommer til å gi deg en boolsk, en stor boolsk av Trues og misoppfatter.
>> Og nå, la oss si at jeg vil ha å undergruppe til disse gutta.
Så dette kommer til å ta min dat og undergruppe til hvilken observasjoner
har PartyId likhets lik demokrat.
Og dette er ganske lang fordi det er så mange av dem.
Så nå kommer jeg til å dra dette i 20.
>> Og som du legger merke til, er lik likemenn er interessant ved at du er
already-- du er også inkludert NAs.
Så i dette tilfellet, har du fortsatt ikke kan få noe informasjon fordi nå har du NAs
og du bare ønsker å se hvilke av observasjon tilsvarer demokrat
og ikke disse mangler verdier selv.
Så hvordan ville du bli kvitt disse NAs?
>> Så her er jeg bare ved å bruke opp-tasten på min markøren og deretter si bevege seg rundt.
Og så her jeg skal bare å si is.na datpartyid.
Så dette og og vil ta to forskjellige Boolske vektorer
og sier det kommer til å bli TRUE og FALSE for eksempel.
Så det kommer til å gjøre denne komponenten-messig.
Så her sier jeg take dataramme, subset
til de som svarer til demokrat, og fjerne noen av dem som ikke er NA.
>> Så dette will-- bør gi deg noe.
La oss se is.na.
La oss prøve is.na datpartyid.
Og dette bør gi you-- sorry-- bare en boolsk vektor.
Og så, fordi det er så lenge, Jeg kommer til å undergruppe til 20.
OK.
Så dette skal fungere.
>> Og dette vil også være Trues.
Ah, så min feil her er at I'm-- jeg bruke C ++ og R om hverandre så jeg gjør
dette feil hele tiden.
Den og operatør er faktisk den du ønsker.
Du ønsker ikke å bruke to -tegn, bare en eneste en.
OK.
>> Så la oss se.
Så vi subsetted til PartyId hvor de er demokrat
og de er ikke manglende verdier.
Og nå la oss se på hvilke som de stemte på.
Så det virker som de fleste av dem stemte for en.
Så jeg kommer til å gå videre og si at er Kerry.
>> Og på lignende måte, kan man også gå til republikanske
og forhåpentligvis, dette burde gi deg to.
Det er bare en haug med forskjellige kolonner.
Og ja, det er to.
Så PartyId alt republikaner, de fleste av dem er å stemme for 2.
>> Så det virker som, bare ved å se på dette,
Republikanske kommer til å være en very-- eller PartyId
kommer til å være en svært stor faktor i å bestemme
hvilken kandidat de er kommer til å stemme for.
Og dette er selvsagt sant generelt.
Og dette passer din intuisjon, selvfølgelig.
Så det virker som jeg er kjører ut av tid så
la meg bare bør gå foran og vise noen raske bilder.
Så her er noe som er litt mer komplisert med visualisering.
Så i dette tilfellet, er dette en svært enkel analyse av bare sjekke hva
president i '04 er.
>> Så i dette tilfellet, la oss si du ønsket å svare på dette spørsmålet.
Så antar vi ønsket å vite stemmegivningen atferd i 2004 president valget
og hvordan det varierer etter rase.
Så ikke bare vil du se valgatferd,
men du ønsker å undergruppe av hvert rase og liksom oppsummere det.
Og du kan bare fortelle av dette komplekset notasjon
at dette er slags få disig.
>> Så en av de mer avanserte R pakker som er også slags siste
kalles dplyr.
Så det er denne retten her.
Og ggg-- ggplot2 er bare en hyggelig måte å gjøre bedre visualiseringer
enn den innebygde en.
>> Så jeg kommer til å laste disse to bibliotekene.
Og så, jeg kommer til å gå videre og kjøre denne kommandoen.
Du kan bare behandle dette som en svart boks.
>> Det som skjer er at dette røret operatør passerer i dette argumentet
inn her.
Så jeg sier gruppe av dat rase og deretter president 04.
Og så, alle disse andre kommandoer filtrerer og deretter sammenfatte
hvor jeg gjør telling og da er jeg plotte det her.
OK kult.
Så la oss gå videre og se hvordan dette ser ut.
>> Så hva som skjer her er at jeg bare plottet hvert av løpene og deretter
hvilke som de stemte på.
Og disse to forskjellige verdier tilsvarer to og en.
Hvis du ønsker å være mer elegant, kan du også
bare spesifisere at to er Kerry-- eller 2 er Bush, og deretter en er Kerry.
Og du kan også ha at i din legende.
>> Og du kan også dele disse søylediagrammer.
Fordi en ting er at hvis du legger merke til,
dette er ikke veldig lett å identifisere hvilke av disse to verdier er større.
Så en ting du ønsker å gjøre er å ta dette blå området
og bare flytte den over her slik at du kan sammenligne disse to side ved side.
Og jeg antar det er noe jeg har ikke tid til å gjøre akkurat nå,
men det er også veldig enkelt å gjøre.
Du kan bare se inn mannen sidene av ggplot.
Så du kan bare gjøre ggplot som det og lese inn denne mannen siden.
>> Så la meg bare raskt vise deg noen kule ting.
La oss gå videre og gå to-- bare en anvendelse av maskinlæring.
Så la oss si vi har disse tre pakker så jeg kommer til å laste disse inn.
Så dette skriver bare ut noen informasjon etter at jeg har lagt i ting.
Så jeg sier dette read.csv, dette datasettet, og nå
Jeg kommer til å gå videre og se og se hva som er inni dette datasettet.
>> Så de første 20 observasjoner.
Så jeg må bare X1, X2, og Y. Så det virker som en haug av disse verdiene
er i området fra kanskje 20 til 80, eller så.
Og deretter på samme måte for X2 og deretter Dette Y synes å være etiketter 0 og 1.
>> For å bekrefte dette, kan jeg bare gjøre oppsummering data X1.
Og deretter tilsvarende for alle disse andre kolonner.
Så sammendraget er en rask måte bare viser deg raske verdier.
Oh, sorry.
Dette bør være Y.
>> Slik at i dette tilfellet, gir kvantilmålet, medianer, maxes også.
I dette tilfellet, dataY, kan du se at det bare kommer til å være 0 og 1.
Også middelverdien sier 0.6, betyr bare at det
virker som jeg har flere 1s enn 0s.
>> Så la meg gå videre og showet du hva dette ser ut.
Så jeg bare kommer til å plotte dette.
La oss se hvordan du fjerner dette.
Oh OK.
OK.
>> Så dette er hva det ser ut som.
Så det virker som gulfarger jeg spesifiserte som 0, og deretter rødt jeg spesifisert som 1s.
Så her ser det ut som label poeng og det
virker som du bare ville ha noen slags clustering på dette.
>> Og la meg bare gå videre og showet du noen av disse innebygde funksjoner.
Så her er lm.
Så dette er bare prøver for å passe til en linje i dette.
Så hva er den beste måten at jeg kan passe en linje slik
at det beste vil skille denne typen clustering.
Og ideelt sett, kan du bare se at jeg bare kjøre alle disse kommandoene
og da, jeg kommer videre og legge linjen.
>> Så dette virker som det beste gjetning.
Det er å ta den beste som minimerer feilen i å prøve å passe denne linjen.
Selvsagt, ser denne typen bra, men det er ikke den beste.
Og lineære modeller, i generelt, kommer til å være
virkelig flott for teori og bare en slags av bygningsgrunnleggende av maskin
læring.
Men i praksis, du kommer til ønsker å gjøre noe mer generelt.
>> Så du kan bare prøve å kjøre noe som kalles et nettverk.
Disse tingene er stadig mer vanlig.
Og de bare fungerer utrolig for store datasett.
Så i dette tilfellet, vi bare have-- la oss see-- vi har nrow.
Så nrow er bare å si antall rader.
Slik at i dette tilfellet, I har 100 observasjoner.
>> Så la meg gå videre og lage et nettverk.
Så dette er veldig hyggelig fordi jeg kan bare si nnet
og da jeg tilbakegang Y. Så Y er at kolonnen.
Og deretter tilbakegang det på de to andre variablene.
Så dette er kortere notasjon for X1 og X2.
>> Så la oss gå videre og kjøre dette.
Oh, sorry.
Jeg trenger å kjøre hele greia.
Og dette er bare utskrift notasjon for hvor raskt eller ikke raskt det
konvergerte.
Så det ser ut som det gjorde møtes.
Så la meg gå videre og print ut hva dette ser ut.
>> Se her er bildet, og her er en kontur som viser hvor godt det passer.
Og dette er just-- du kan se dette at dette er veldig, veldig hyggelig.
Det kan også være overfitting, men du kan også
redegjøre for dette med andre teknikker som kryss-validering.
Og disse er også bygget inn R.
>> Og la meg bare vise deg støtte vektor maskin.
Dette er en annen veldig vanlig teknikk i maskinlæring.
Det er svært lik den lineære modeller, men den bruker det som kalles en kernel-metoden.
Og la oss se hvor godt det gjør.
Så dette er veldig lik hvordan vel et nettverk utfører,
men det er mye mer jevnere.
Og dette er basert off av what-- hvordan SVMer arbeid.
>> Så dette er bare en veldig rask oversikt over noen
av de innebygde funksjoner kan du gjøre og også noen av de data leting.
Så la meg bare gå videre og gå tilbake til lysbildene.
>> Så åpenbart, er dette ikke veldig omfattende.
Og dette er egentlig bare en teaser viser deg hva du egentlig kan gjøre i R.
Så hvis du hadde akkurat som for å lære mer, her
er en haug med ulike ressurser.
>> Så hvis du er glad i lærebøker eller du er bare glad i å lese ting på nettet,
så dette er en fantastisk ett av Hadley Wickham,
som også skapte alle disse virkelig kule pakker.
Hvis du er glad i videoer, deretter Berkeley har en fantastisk bootcamp
det er several-- det er slags lang.
Og det vil lære deg nesten alt du ønsker å vite om R.
>> Og på samme måte, det er Codeacademy og alle disse andre slags
av interaktive nettsteder.
De er også å få common-- mer og mer vanlig.
Så dette er veldig lik Codeacademy.
Og til slutt, hvis du bare ønsker fellesskap og hjelpe,
disse er en haug med ting du kan gå til.
Selvfølgelig, vi fortsatt bruke e-postlister, bare
som nesten alle andre programmeringsspråk samfunnet.
Og #rstats, er dette samfunnet vårt Twitter.
Det er faktisk ganske vanlig.
Og så bruker!
Er bare vår konferanse.
>> Og så, selvfølgelig, kan du bruke alle disse andre Q & A ting,
som Stack Overflow, Google, og deretter GitHub.
Fordi de fleste av disse pakkene og mye av samfunnet
vil være sentrert rundt utvikle kode fordi det er åpen kildekode.
Og det er bare veldig hyggelig på GitHub.
Og til slutt, kan du kontakte meg hvis du bare har noen raske spørsmål.
Så du kan finne meg på Twitter her, hjemmesiden min, og bare min e-post.
Så forhåpentligvis, som var something-- bare en kort teaser
av hva R er virkelig i stand til å gjøre.
Og forhåpentligvis, du bare sjekk ut disse tre lenker
og se hva du kan gjøre mer.
Og jeg antar det er bare om det.
Takk.
>> [APPLAUSE]