1 00:00:00,000 --> 00:00:00,750 2 00:00:00,750 --> 00:00:09,800 >> [MUSIC SPILLE] 3 00:00:09,800 --> 00:00:13,014 4 00:00:13,014 --> 00:00:13,680 DUSTIN TRAN: Hei. 5 00:00:13,680 --> 00:00:14,980 Jeg heter Dustin. 6 00:00:14,980 --> 00:00:18,419 Så jeg skal presentere Data Analysis i R. 7 00:00:18,419 --> 00:00:19,710 Bare litt om meg selv. 8 00:00:19,710 --> 00:00:24,320 Jeg er for tiden en graduate student i ingeniør- og Applied Sciences. 9 00:00:24,320 --> 00:00:28,330 Jeg studerer et skjæringspunkt mellom maskinlæring og statistikk 10 00:00:28,330 --> 00:00:31,375 så dataanalyse i R er virkelig grunnleggende for hva 11 00:00:31,375 --> 00:00:33,790 Jeg gjør på en daglig basis. 12 00:00:33,790 --> 00:00:35,710 >> Og R er spesielt godt for dataanalyse 13 00:00:35,710 --> 00:00:39,310 fordi det er veldig bra for prototyping. 14 00:00:39,310 --> 00:00:43,590 Og som regel, når du gjør noe slag av dataanalyse, mye av problemene 15 00:00:43,590 --> 00:00:44,920 skal kognitive. 16 00:00:44,920 --> 00:00:48,700 Og så du bare vil ha noen virkelig god språk som 17 00:00:48,700 --> 00:00:53,770 er bare bra for å gjøre innebygde funksjoner, i motsetning 18 00:00:53,770 --> 00:00:57,430 å måtte hanskes med lavnivå ting. 19 00:00:57,430 --> 00:01:01,040 Så i begynnelsen, jeg bare går å introdusere hva er R, hvorfor skulle 20 00:01:01,040 --> 00:01:04,540 du ønsker å bruke det, og deretter gå over i noen demo, 21 00:01:04,540 --> 00:01:07,060 og bare gå videre derfra. 22 00:01:07,060 --> 00:01:08,150 >> Så hva er R? 23 00:01:08,150 --> 00:01:11,180 R er bare et språk utviklet for statistisk databehandling 24 00:01:11,180 --> 00:01:12,450 og visualisering. 25 00:01:12,450 --> 00:01:16,000 Så hva dette betyr er at det er en veldig god språk 26 00:01:16,000 --> 00:01:22,400 for alle slags ting som omhandler usikkerhet eller datavisualisering. 27 00:01:22,400 --> 00:01:24,850 Så du har alle disse sannsynlighetsfordelinger. 28 00:01:24,850 --> 00:01:27,140 Det kommer til å være innebygde funksjoner. 29 00:01:27,140 --> 00:01:31,650 Du vil også ha utmerket plotting pakker. 30 00:01:31,650 --> 00:01:34,110 >> Python er et annet konkurrerende språk for data. 31 00:01:34,110 --> 00:01:40,020 Og en ting som jeg synes at R er mye bedre på er visualisering. 32 00:01:40,020 --> 00:01:45,200 Så hva du vil se i demoen som vel er bare en veldig intuitivt språk 33 00:01:45,200 --> 00:01:48,050 som bare fungerer svært godt. 34 00:01:48,050 --> 00:01:53,140 Det er også gratis og åpen kildekode, som er noen andre gode språk jeg gjette. 35 00:01:53,140 --> 00:01:55,440 >> Og her, en haug med bare søkeord kastet på deg. 36 00:01:55,440 --> 00:02:00,450 Det er dynamisk, noe som betyr hvis du har en bestemt type tilordnet et objekt 37 00:02:00,450 --> 00:02:02,025 enn det vil bare endre det på sparket. 38 00:02:02,025 --> 00:02:05,670 Det er lat, så det er smart om hvordan den gjør beregninger. 39 00:02:05,670 --> 00:02:12,250 Funksjonell betyr det kan virkelig operere basert off av funksjoner så anything-- 40 00:02:12,250 --> 00:02:16,910 noen form for manipulasjon du er gjør, vil det være basert på funksjoner. 41 00:02:16,910 --> 00:02:20,162 >> Så binære operatorer, for eksempel, er bare iboende funksjoner. 42 00:02:20,162 --> 00:02:21,870 Og alt som du kommer til å gjøre er 43 00:02:21,870 --> 00:02:24,690 kommer til å bli kjørt av aktuelle funksjoner. 44 00:02:24,690 --> 00:02:27,140 Og deretter objektorientert i tillegg. 45 00:02:27,140 --> 00:02:30,930 >> Så her er en XKCD plot. 46 00:02:30,930 --> 00:02:34,350 Ikke bare fordi jeg har lyst til XKCD er grunnleggende for noen form 47 00:02:34,350 --> 00:02:37,770 av presentasjonen, men fordi Jeg føler at dette virkelig 48 00:02:37,770 --> 00:02:42,160 hammers det punktet at mye av den tid når du gjør noen form for data 49 00:02:42,160 --> 00:02:46,570 analyse, er ikke problemet så mye hvor fort det går, 50 00:02:46,570 --> 00:02:49,850 men hvor lang tid det kommer til å ta deg programmere oppgaven. 51 00:02:49,850 --> 00:02:54,112 Så her er bare å analysere hvorvidt strategi a eller b er mer effektiv. 52 00:02:54,112 --> 00:02:55,820 Dette kommer til å være noe som du er 53 00:02:55,820 --> 00:02:58,290 kommer til å håndtere mye med i liksom lavnivåspråk 54 00:02:58,290 --> 00:03:03,440 hvor du arbeider med SEG feil, fordeling av minne, initializations, 55 00:03:03,440 --> 00:03:05,270 selv gjør de innebygde funksjoner. 56 00:03:05,270 --> 00:03:09,920 Og denne ting er alle håndtert veldig, veldig elegant i R. 57 00:03:09,920 --> 00:03:12,839 >> Så bare for å hamre dette punkt, den største flaskehals 58 00:03:12,839 --> 00:03:13,880 kommer til å være kognitiv. 59 00:03:13,880 --> 00:03:17,341 Slik at dataanalyse er et svært vanskelig problem. 60 00:03:17,341 --> 00:03:19,340 Om du gjør maskinlæring eller du er 61 00:03:19,340 --> 00:03:22,550 gjør bare en slags grunnleggende utforskning av data, 62 00:03:22,550 --> 00:03:25,290 du ikke ønsker å ha for å ta ut et dokument 63 00:03:25,290 --> 00:03:27,440 og deretter kompilere noe hver gang du 64 00:03:27,440 --> 00:03:31,010 ønsker å se hva en kolonne ser ut, Hva spesielt oppføringer i en matrise 65 00:03:31,010 --> 00:03:32,195 ser ut. 66 00:03:32,195 --> 00:03:34,320 Så du bare vil ha noen virkelig fint grensesnitt 67 00:03:34,320 --> 00:03:37,740 du kan kjøre en enkel funksjon som indekserer til hva 68 00:03:37,740 --> 00:03:41,870 du ønsker, og bare kjøre det derfra. 69 00:03:41,870 --> 00:03:44,190 Og du trenger domene bestemte språk for dette. 70 00:03:44,190 --> 00:03:51,750 Og R vil virkelig hjelpe deg å definere den Problemet og løse det på denne måten. 71 00:03:51,750 --> 00:03:58,690 >> Så her er et plott som viser programmering populariteten av R som det er gått over tid. 72 00:03:58,690 --> 00:04:04,060 Så som du kan se, som 2013 eller så det bare blåst opp enormt. 73 00:04:04,060 --> 00:04:09,570 Og dette har vært bare på grunn av at stor trend i teknologibransjen 74 00:04:09,570 --> 00:04:10,590 om store data. 75 00:04:10,590 --> 00:04:13,010 Også, ikke bare teknologi industri, men egentlig 76 00:04:13,010 --> 00:04:16,490 alle bransjer at-- fordi mye av de næringene 77 00:04:16,490 --> 00:04:20,589 er liksom grunnleggende for prøver å løse disse problemene. 78 00:04:20,589 --> 00:04:24,590 Og som regel, kan du ha noen god måte å måle disse problemene 79 00:04:24,590 --> 00:04:29,720 eller til og med å definere dem eller løse dem ved hjelp av data. 80 00:04:29,720 --> 00:04:35,430 Så jeg tror akkurat nå R er den 11. mest populære språket på TIOBE 81 00:04:35,430 --> 00:04:38,200 og det har vært økende siden da. 82 00:04:38,200 --> 00:04:40,740 83 00:04:40,740 --> 00:04:43,080 >> Så her er noen mer funksjonene i R. Den har 84 00:04:43,080 --> 00:04:46,900 et enormt antall pakker og for alle disse forskjellige ting. 85 00:04:46,900 --> 00:04:52,470 Så når du har en visst problem, mest 86 00:04:52,470 --> 00:04:55,060 tiden R vil ha som funksjon for deg. 87 00:04:55,060 --> 00:04:58,520 Så om du vil bygge en slags maskin 88 00:04:58,520 --> 00:05:02,770 læring algoritme kalt Random Forest eller beslutningstrær, 89 00:05:02,770 --> 00:05:07,530 eller til og med prøver å ta gjennomsnittet av en funksjon eller noen av denne ting, 90 00:05:07,530 --> 00:05:10,000 R vil ha det. 91 00:05:10,000 --> 00:05:14,190 >> Og hvis du gjør det du bryr deg om optimalisering, en ting som er felles 92 00:05:14,190 --> 00:05:17,430 er at når du er ferdig prototyping en slags høy-nivå språk, 93 00:05:17,430 --> 00:05:19,810 du vil kaste det in-- vil du bare port som over 94 00:05:19,810 --> 00:05:21,550 til en viss lavnivå språk. 95 00:05:21,550 --> 00:05:26,090 Hva er bra om R er at når du er ferdig prototyping det, kan du kjøre C ++, 96 00:05:26,090 --> 00:05:29,510 eller Fortran, eller en hvilken som helst av disse lavere nivå seg direkte inn R. 97 00:05:29,510 --> 00:05:32,320 Så det er en virkelig kul funksjon om R, 98 00:05:32,320 --> 00:05:35,930 hvis du virkelig bryr deg om optimalisering punktet. 99 00:05:35,930 --> 00:05:39,490 >> Og det er også veldig bra for web-visualiseringer. 100 00:05:39,490 --> 00:05:43,530 Så D3.js, for eksempel, er Jeg antar en annen seminar 101 00:05:43,530 --> 00:05:45,130 som vi presenterte i dag. 102 00:05:45,130 --> 00:05:48,510 Og dette er virkelig kjempebra for gjør interaktive visualiseringer. 103 00:05:48,510 --> 00:05:54,460 Og D3.js forutsetter at du har en slags data som skal plottes 104 00:05:54,460 --> 00:05:58,080 og R er en flott måte å være i stand til å gjøre dataanalysen før du eksporterer det 105 00:05:58,080 --> 00:06:04,220 over til D3.js eller bare kjøre D3.js kommandoer inn i R selv, 106 00:06:04,220 --> 00:06:08,240 samt alle disse andre bibliotek i tillegg. 107 00:06:08,240 --> 00:06:13,041 >> Så det var bare innføringen av hva er R og hvorfor du kan bruke den. 108 00:06:13,041 --> 00:06:14,790 Så forhåpentligvis har jeg overbevist deg noe 109 00:06:14,790 --> 00:06:18,460 om bare å prøve å se hvordan det er. 110 00:06:18,460 --> 00:06:23,930 Så jeg kommer til å gå videre og gå gjennom noen grunnleggende om R objekter 111 00:06:23,930 --> 00:06:26,150 og hva du kan virkelig gjøre. 112 00:06:26,150 --> 00:06:29,690 >> Så her er bare en haug med matematiske kommandoer. 113 00:06:29,690 --> 00:06:35,000 Så si you're-- du ønsker å bygge språket selv og du bare ønsker 114 00:06:35,000 --> 00:06:38,080 å ha en haug med ulike verktøy. 115 00:06:38,080 --> 00:06:42,520 Noen form for operasjon du tror du vil ønsker er ganske mye kommer til å være i R. 116 00:06:42,520 --> 00:06:44,150 >> Så her er to pluss to. 117 00:06:44,150 --> 00:06:46,090 Her er to ganger pi. 118 00:06:46,090 --> 00:06:51,870 R har en haug med innebygde konstanter at du bruker ofte som pi, e. 119 00:06:51,870 --> 00:06:56,230 >> Og så, her er 7 pluss runif, så runif av 1. 120 00:06:56,230 --> 00:07:02,450 Dette er en funksjon som er genererer en tilfeldig uniform fra 0 til 1. 121 00:07:02,450 --> 00:07:04,400 Og så er det tre til makten til fire. 122 00:07:04,400 --> 00:07:06,430 Det er kvadratrøtter. 123 00:07:06,430 --> 00:07:07,270 >> Det er log. 124 00:07:07,270 --> 00:07:14,500 Så logg vil gjøre basen eksponensiell av seg selv. 125 00:07:14,500 --> 00:07:18,337 Og så, hvis du angir en base, deretter du kan gjøre hva basen du vil. 126 00:07:18,337 --> 00:07:19,920 Og så her er noen andre kommandoer. 127 00:07:19,920 --> 00:07:22,180 Så du har 23 mod 2. 128 00:07:22,180 --> 00:07:24,910 Da har du resten. 129 00:07:24,910 --> 00:07:27,110 Da har du vitenskapelig notasjon hvis du også 130 00:07:27,110 --> 00:07:34,060 ønsker å gjøre bare mer og mer kompliserte ting. 131 00:07:34,060 --> 00:07:37,320 >> Så her er oppdraget. 132 00:07:37,320 --> 00:07:40,830 Så typiske oppgaver i R er gjort med en pil 133 00:07:40,830 --> 00:07:43,440 så det er mindre enn og deretter bindestrek. 134 00:07:43,440 --> 00:07:47,250 Så her er jeg bare tildele 3 til den variable val. 135 00:07:47,250 --> 00:07:50,160 >> Og så skal jeg skrive ut val og skriver den ut ut tre. 136 00:07:50,160 --> 00:07:53,920 Som standard i R tolk, det vil skrive ut ting for deg 137 00:07:53,920 --> 00:07:57,280 slik at du ikke trenger å spesifisere skrive ut en val som helst du ønsker å skrive ut noe. 138 00:07:57,280 --> 00:08:00,200 Du kan bare gjøre val og da det vil gjøre det for deg. 139 00:08:00,200 --> 00:08:04,380 >> Dessuten kan du bruke er lik teknisk som et oppdrag operatør. 140 00:08:04,380 --> 00:08:07,190 Det er små finesser mellom å bruke pil 141 00:08:07,190 --> 00:08:10,730 operatør og likhets operatør for oppdrag. 142 00:08:10,730 --> 00:08:15,470 Det meste av konvensjonen, alle vil bare bruke pilen operatør. 143 00:08:15,470 --> 00:08:21,850 >> Og her, jeg tildele dette skrå notasjon kalles en kolon 6. 144 00:08:21,850 --> 00:08:26,010 Dette genererer en vektor fra 1 til 6. 145 00:08:26,010 --> 00:08:29,350 Og dette er virkelig fint fordi da du bare tildele vektoren til val 146 00:08:29,350 --> 00:08:34,270 og som virker av seg selv. 147 00:08:34,270 --> 00:08:37,799 >> Så dette er allerede kommer fra en single-- en meget intuitiv data 148 00:08:37,799 --> 00:08:41,070 Strukturen av bare en dobbelt av noen type typen i en vektor 149 00:08:41,070 --> 00:08:45,670 og som vil samle alle de skalare verdier for deg. 150 00:08:45,670 --> 00:08:50,770 Så etter å ha gått fra skalar, du har R gjenstander, og dette er en vektor. 151 00:08:50,770 --> 00:08:55,610 En vektor er noen form for Samlingen av samme type. 152 00:08:55,610 --> 00:08:58,150 Så her er en haug med vektorer. 153 00:08:58,150 --> 00:08:59,800 >> Så dette er numerisk. 154 00:08:59,800 --> 00:09:02,440 Numerisk er R måte å si dobbel. 155 00:09:02,440 --> 00:09:07,390 Og så som standard, noe nummer vil være en dobbel. 156 00:09:07,390 --> 00:09:13,150 >> Så hvis du har c på 1,1, 3, negativt 5,7, er c en funksjon. 157 00:09:13,150 --> 00:09:16,760 Dette Setter sammen alle tre numre i en vektor. 158 00:09:16,760 --> 00:09:19,619 Og dette vil be-- så hvis du legger merke til tre av seg selv, 159 00:09:19,619 --> 00:09:21,910 normalt du ville anta at dette er som et helt tall, 160 00:09:21,910 --> 00:09:25,050 men fordi alle vektorer er av samme type, 161 00:09:25,050 --> 00:09:28,660 dette er en vektor av dobbeltrom eller numerisk i dette tilfellet. 162 00:09:28,660 --> 00:09:34,920 >> rnorm er en funksjon som genererer standard normal variables-- 163 00:09:34,920 --> 00:09:36,700 eller standard normale verdier. 164 00:09:36,700 --> 00:09:38,360 Og jeg angi to av dem. 165 00:09:38,360 --> 00:09:43,840 Så jeg gjør rnorm 2, tildele det til devs, og da jeg skriver ut devs. 166 00:09:43,840 --> 00:09:47,350 Så dette er bare to tilfeldige normale verdier. 167 00:09:47,350 --> 00:09:50,060 >> Og så ints hvis du gjør du bryr deg om heltall. 168 00:09:50,060 --> 00:09:54,650 Så dette er bare om minne tildeling og lagringsminne størrelse. 169 00:09:54,650 --> 00:10:01,460 Så du ville ha til å føye tallene fra hovedstaden L. 170 00:10:01,460 --> 00:10:04,170 >> Generelt er denne R historiske notasjon 171 00:10:04,170 --> 00:10:06,940 for noe som kalles lang heltall. 172 00:10:06,940 --> 00:10:09,880 Så mesteparten av tiden, vil du være å håndtere dobles. 173 00:10:09,880 --> 00:10:15,180 Og hvis du noen gang vil senere på optimalisere koden din, 174 00:10:15,180 --> 00:10:18,110 du kan bare legge til disse L's etterpå eller i løpet av det 175 00:10:18,110 --> 00:10:22,280 Hvis du er som precognitive om hva du kommer til å gjøre disse variablene. 176 00:10:22,280 --> 00:10:25,340 177 00:10:25,340 --> 00:10:26,890 >> Så her er et tegn vektor. 178 00:10:26,890 --> 00:10:31,440 Så, igjen, jeg concatenating tre strenger denne gangen. 179 00:10:31,440 --> 00:10:36,230 Legg merke til at doble strenger og enkelt strenger er de samme i R. 180 00:10:36,230 --> 00:10:41,000 Så jeg har arthur og Marvin og så når jeg skriver det ut, alle av dem 181 00:10:41,000 --> 00:10:43,210 kommer til å vise doble strenger. 182 00:10:43,210 --> 00:10:45,880 Og hvis du også ønsker å inkludere dobbel eller enkel streng 183 00:10:45,880 --> 00:10:50,070 i figurene dine, så du kan enten veksle dine strenger. 184 00:10:50,070 --> 00:10:53,540 >> Så Marvins for andre element, er denne 185 00:10:53,540 --> 00:10:56,380 kommer til å show-- deg bare har doble strenger 186 00:10:56,380 --> 00:10:59,050 og deretter en enkelt streng så dette er vekslende. 187 00:10:59,050 --> 00:11:04,040 Ellers, hvis du ønsker å bruke en dobbel string operatør i en dobbel string 188 00:11:04,040 --> 00:11:07,090 når du forkynner det, da du bare bruke flukt operatør. 189 00:11:07,090 --> 00:11:10,600 Så du gjør backslash dobbel streng. 190 00:11:10,600 --> 00:11:13,330 >> Og til slutt, vi også har logiske vektorer. 191 00:11:13,330 --> 00:11:15,890 Så logical-- så TRUE og USANN, og de er 192 00:11:15,890 --> 00:11:18,880 kommer til å være store bokstaver. 193 00:11:18,880 --> 00:11:22,370 Og så, igjen, jeg concatenating dem og deretter tildele dem til bools. 194 00:11:22,370 --> 00:11:24,590 Så bools kommer til å vise du TRUE, FALSE, og SANN. 195 00:11:24,590 --> 00:11:28,280 196 00:11:28,280 --> 00:11:31,620 >> Så her er vektorisert indeksering. 197 00:11:31,620 --> 00:11:34,870 Så i begynnelsen, jeg jeg tar en function-- 198 00:11:34,870 --> 00:11:39,230 Dette kalles en sequence-- sekvens 2-12. 199 00:11:39,230 --> 00:11:42,490 Og jeg tar en sekvens med 2. 200 00:11:42,490 --> 00:11:46,660 Så det kommer til å gjøre 2, 4, 6, 8, 10 og 12. 201 00:11:46,660 --> 00:11:50,080 Og så er jeg indeksering for å få det tredje element. 202 00:11:50,080 --> 00:11:55,770 >> Så en ting å huske på er at R indekser ved å starte fra en. 203 00:11:55,770 --> 00:12:00,550 Så vals 3 kommer til å gi du det tredje elementet. 204 00:12:00,550 --> 00:12:04,580 Dette er liksom forskjellig fra andre språk hvor det starter fra null. 205 00:12:04,580 --> 00:12:09,780 Så i C eller C ++, for eksempel, er du kommer til å få det fjerde element. 206 00:12:09,780 --> 00:12:13,280 >> Og her er vals fra 3 til 5. 207 00:12:13,280 --> 00:12:16,030 Så en ting som er virkelig kult er at du 208 00:12:16,030 --> 00:12:20,410 kan generere midlertidige variabler inne og så bare bruke dem på sparket. 209 00:12:20,410 --> 00:12:21,960 Så her er 3 til 5. 210 00:12:21,960 --> 00:12:25,070 Så jeg genererer en vektor 3, 4 og 5, og deretter 211 00:12:25,070 --> 00:12:29,700 Jeg indeksering for å få den tredje, fjerde og femte elementer. 212 00:12:29,700 --> 00:12:32,280 >> Så samme måte kan du abstrakt dette å bare gjøre 213 00:12:32,280 --> 00:12:35,280 noen form av en vektor som gir deg indeksering. 214 00:12:35,280 --> 00:12:40,050 Så her er vals og deretter første, tredje og sjette elementer. 215 00:12:40,050 --> 00:12:42,800 Og så, hvis du vil å gjøre et supplement, 216 00:12:42,800 --> 00:12:45,210 slik at du bare gjøre det minus etterpå og som vil 217 00:12:45,210 --> 00:12:48,600 gi deg alt det er ikke første, tredje eller sjette element. 218 00:12:48,600 --> 00:12:51,590 Slik at dette vil være 4, 8 og 10. 219 00:12:51,590 --> 00:12:54,380 >> Og hvis du ønsker å få enda mer avansert, 220 00:12:54,380 --> 00:12:57,610 du kan sette sammen boolske vektorer. 221 00:12:57,610 --> 00:13:05,210 Så denne indeksen kommer til å gi deg dette boolsk vektor av lengde 6. 222 00:13:05,210 --> 00:13:07,280 Så rep TRUE komma tre. 223 00:13:07,280 --> 00:13:09,680 Dette vil gjenta TRUE tre ganger. 224 00:13:09,680 --> 00:13:12,900 Så dette vil gi deg en vektor TRUE, TRUE, TRUE. 225 00:13:12,900 --> 00:13:17,470 >> rep FALSE 4-- dette kommer til å gi deg en vektor av FALSE, FALSE, FALSE, FALSE. 226 00:13:17,470 --> 00:13:21,280 Og deretter c kommer til å slå sammen disse to Booleans sammen. 227 00:13:21,280 --> 00:13:24,090 Så du kommer til å få tre Trues og deretter fire misoppfatter. 228 00:13:24,090 --> 00:13:28,460 >> Slik at når du indeks vals, er du kommer til å få den TRUE, TRUE, TRUE. 229 00:13:28,460 --> 00:13:31,420 Så det kommer til å si ja, Jeg vil at disse tre elementene. 230 00:13:31,420 --> 00:13:33,520 Og så FALSE, FALSE, FALSE, FALSE kommer 231 00:13:33,520 --> 00:13:37,140 å si nei, jeg vil ikke ha disse elementene så det ikke kommer til å returnere dem. 232 00:13:37,140 --> 00:13:41,490 >> Og jeg antar det er faktisk en skrivefeil her fordi dette sier gjenta TRUE 3 233 00:13:41,490 --> 00:13:47,990 og gjenta FALSK 4, og teknisk, du bare har seks elementer så gjenta FALSE, 234 00:13:47,990 --> 00:13:50,470 det bør være gjenta FALSK tre. 235 00:13:50,470 --> 00:13:55,260 Jeg tror R er også smart nok slik at hvis du bare angi fire her, så 236 00:13:55,260 --> 00:13:56,630 det vil ikke engang feilstedene. 237 00:13:56,630 --> 00:13:58,480 Det vil bare gi deg denne verdien. 238 00:13:58,480 --> 00:14:00,970 Så det vil bare ignorere det fjerde FALSK. 239 00:14:00,970 --> 00:14:05,310 240 00:14:05,310 --> 00:14:09,270 >> Så her er vektorisert oppdrag. 241 00:14:09,270 --> 00:14:15,480 Så set.seed-- dette bare setter frø for pseudo tall. 242 00:14:15,480 --> 00:14:20,110 Så jeg sette frø til 42, noe som betyr at hvis jeg generere 243 00:14:20,110 --> 00:14:22,950 tre tilfeldig normal verdier, og hvis du 244 00:14:22,950 --> 00:14:27,400 kjøre set.seed på egen hånd datamaskinen ved hjelp av samme verdi 42, 245 00:14:27,400 --> 00:14:30,990 Da får du også den samme tre tilfeldige normaler. 246 00:14:30,990 --> 00:14:33,411 >> Så dette er veldig bra for reproduserbarhet. 247 00:14:33,411 --> 00:14:35,910 Vanligvis, når du gjør noen slags vitenskapelig analyse, 248 00:14:35,910 --> 00:14:37,230 du ønsker å sette frø. 249 00:14:37,230 --> 00:14:41,270 På den måten andre forskere kan bare reprodusere nøyaktig samme kode du har 250 00:14:41,270 --> 00:14:44,790 gjort fordi de vil ha nøyaktig samme tilfeldige variabler at-- eller tilfeldig 251 00:14:44,790 --> 00:14:47,270 verdier som du har tatt ut også. 252 00:14:47,270 --> 00:14:49,870 253 00:14:49,870 --> 00:14:53,910 >> Og så den vektorisert oppdrag her viser de vals 1 til 2. 254 00:14:53,910 --> 00:14:59,290 Så det tar de to første elementene av vals og deretter tildeler dem til 0. 255 00:14:59,290 --> 00:15:03,940 Og så, du kan også bare gjøre det lignende ting med Booleans. 256 00:15:03,940 --> 00:15:09,340 >> Så vals er ikke lik 0-- denne vilje gi deg en vektor FALSE, FALSE, TRUE 257 00:15:09,340 --> 00:15:10,350 i dette tilfellet. 258 00:15:10,350 --> 00:15:13,770 Og så kommer det til å si noe av disse indeksene det var sant, 259 00:15:13,770 --> 00:15:15,270 så det kommer til å tildele det til fem. 260 00:15:15,270 --> 00:15:18,790 Så det tar det tredje elementet her og deretter tildeler den til fem. 261 00:15:18,790 --> 00:15:22,300 >> Og dette er virkelig fin sammenlignet med lavt nivå språk 262 00:15:22,300 --> 00:15:25,560 hvor du må bruke for sløyfer å gjøre alt dette vektorisert stuff 263 00:15:25,560 --> 00:15:30,281 fordi det er bare veldig intuitiv og det er en enkel one-liner. 264 00:15:30,281 --> 00:15:32,030 Og hva er flott om vektorisert notasjon 265 00:15:32,030 --> 00:15:37,020 er at i R, disse er liksom innebygd, slik at de er nesten like raskt 266 00:15:37,020 --> 00:15:42,490 som gjør i et lavnivå språk som motsetning til å gjøre en for løkke i R 267 00:15:42,490 --> 00:15:46,317 og deretter å ha den til å gjøre den dynamiske indeksering selv. 268 00:15:46,317 --> 00:15:48,900 Og det vil være tregere enn å gjøre denne typen vektorisert ting 269 00:15:48,900 --> 00:15:55,950 hvor det kan gjøre det i parallell, hvor det gjør det i threading utgangspunktet. 270 00:15:55,950 --> 00:15:58,650 >> Så her er vektorisert operasjoner. 271 00:15:58,650 --> 00:16:04,920 Så jeg generere en verdi 1 til 3, å tilordne det til vec1, 3 til 5, vec2, 272 00:16:04,920 --> 00:16:05,950 å legge dem sammen. 273 00:16:05,950 --> 00:16:11,490 Den legger dem komponent-messig så Det er en plus 3, 2 pluss 4, og så videre. 274 00:16:11,490 --> 00:16:13,330 >> vec1 ganger vec2. 275 00:16:13,330 --> 00:16:16,110 Dette multipliserer to verds komponent klok. 276 00:16:16,110 --> 00:16:21,830 Så det er en ganger tre, to ganger 4, og deretter tre ganger fem. 277 00:16:21,830 --> 00:16:28,250 >> Og så, på samme måte kan du også gjøre comparisons-- logiske sammenligninger. 278 00:16:28,250 --> 00:16:33,640 Så det er false false TRUE i dette tilfelle fordi en ikke er større enn 3, 279 00:16:33,640 --> 00:16:35,920 2 ikke er større enn fire. 280 00:16:35,920 --> 00:16:41,160 Dette er, antar jeg, en annen skrivefeil, 3 er definitivt ikke større enn fem. 281 00:16:41,160 --> 00:16:41,660 Yeah. 282 00:16:41,660 --> 00:16:45,770 Og så kan du bare gjøre alt disse enkle operasjoner 283 00:16:45,770 --> 00:16:48,350 fordi deres arvet fra klassene selv. 284 00:16:48,350 --> 00:16:51,110 285 00:16:51,110 --> 00:16:52,580 >> Så det var bare vektoren. 286 00:16:52,580 --> 00:16:56,530 Og det er liksom den mest grunnleggende R objektet, fordi gitt en vektor, 287 00:16:56,530 --> 00:16:59,170 du kan konstruere mer avanserte objekter. 288 00:16:59,170 --> 00:17:00,560 >> Så her er en matrise. 289 00:17:00,560 --> 00:17:05,030 Dette er egentlig det abstraksjon av hva en matrise er seg selv. 290 00:17:05,030 --> 00:17:10,099 Så i dette tilfellet, er det tre forskjellige vektorer, hvor hver og en er en kolonne, 291 00:17:10,099 --> 00:17:12,710 eller du kan vurdere det som hver og en er en rad. 292 00:17:12,710 --> 00:17:18,250 >> Så jeg lagrer en matrise fra 1 til 9 og da er jeg spesifiserer tre rader. 293 00:17:18,250 --> 00:17:23,364 Så 1 til 9 vil gi deg en vektor en, 2, 3, 4, 5, 6, og hele veien til 9. 294 00:17:23,364 --> 00:17:29,250 >> En ting til også huske på er at R butikker verdier i kolonne-dur format. 295 00:17:29,250 --> 00:17:34,160 Så med andre ord, når du ser en til 9, det kommer til å lagre them-- 296 00:17:34,160 --> 00:17:36,370 det kommer til å være 1, 2, 3 i den første kolonnen 297 00:17:36,370 --> 00:17:38,510 og da vil det gjøre 4, 5, 6 i den andre kolonnen 298 00:17:38,510 --> 00:17:41,440 og 7, 8, 9 i den tredje kolonnen. 299 00:17:41,440 --> 00:17:45,570 >> Og her er noen andre fellesfunksjoner du kan bruke. 300 00:17:45,570 --> 00:17:49,650 Så svak matte, dette vil gi deg dimensjonene på matrisen. 301 00:17:49,650 --> 00:17:52,620 Det kommer til å returnere deg en vektor av dimensjonen. 302 00:17:52,620 --> 00:17:55,580 Så i dette tilfelle, fordi vår matrisen er 3 ved 3, 303 00:17:55,580 --> 00:18:01,900 det kommer til å gi deg en numerisk vektor som er 3 3. 304 00:18:01,900 --> 00:18:05,270 >> Og her er bare viser matrisemultiplikasjon. 305 00:18:05,270 --> 00:18:11,970 Så vanligvis, hvis du bare gjøre asterisk-- så matte stjerne mat-- 306 00:18:11,970 --> 00:18:15,380 dette kommer til å være komponent-messig drift 307 00:18:15,380 --> 00:18:17,300 eller det som kalles Hadamard produktet. 308 00:18:17,300 --> 00:18:21,310 Så det kommer til å gjøre hver element komponent-messig. 309 00:18:21,310 --> 00:18:23,610 Men hvis du vil ha matrise multiplication-- 310 00:18:23,610 --> 00:18:29,380 så multiplisere første rad ganger den andre matrisen første kolonne 311 00:18:29,380 --> 00:18:34,510 og så on-- du ville bruke dette prosent operasjon. 312 00:18:34,510 --> 00:18:38,110 >> Og t av matten er bare en operasjon for transponere. 313 00:18:38,110 --> 00:18:42,590 Så jeg sier ta transponere i matrisen, multipliserer det med matrisen 314 00:18:42,590 --> 00:18:43,090 selv. 315 00:18:43,090 --> 00:18:45,006 Og så kommer det til å tilbake til dere en annen 3 316 00:18:45,006 --> 00:18:50,700 med 3 matrise som viser produktet du ønsker. 317 00:18:50,700 --> 00:18:53,750 >> Og så det var matrise. 318 00:18:53,750 --> 00:18:56,020 Her er det som kalles en dataramme. 319 00:18:56,020 --> 00:19:00,780 En dataramme du kan tenke på som en matrise, men hver kolonne i seg selv 320 00:19:00,780 --> 00:19:02,990 kommer til å være av en annen type. 321 00:19:02,990 --> 00:19:07,320 >> Så hva er egentlig kult om data rammer er at i dataanalyse seg selv, 322 00:19:07,320 --> 00:19:11,260 du kommer til å ha alt dette heterogene data og alle disse virkelig 323 00:19:11,260 --> 00:19:15,640 rotete ting hvor hver av kolonnene seg selv kan være av forskjellige typer. 324 00:19:15,640 --> 00:19:21,460 Så her sier jeg lage en dataramme, gjør ints fra 1 til 3, 325 00:19:21,460 --> 00:19:24,750 og deretter har også et tegn vektor. 326 00:19:24,750 --> 00:19:28,470 Så jeg kan indeksere gjennom hver av disse kolonnene 327 00:19:28,470 --> 00:19:30,930 og så skal jeg få verdiene selv. 328 00:19:30,930 --> 00:19:34,370 Og du kan også gjøre noen form av operasjoner på datarammer. 329 00:19:34,370 --> 00:19:38,040 Og mesteparten av tiden når du er gjør dataanalyse eller annen form 330 00:19:38,040 --> 00:19:42,042 av forbehandling, vil du være jobbe med disse datastrukturer 331 00:19:42,042 --> 00:19:44,250 der hver kolonne kommer å være av en annen type. 332 00:19:44,250 --> 00:19:47,880 333 00:19:47,880 --> 00:19:52,970 >> Til slutt, så disse er egentlig bare de fire essensielle objekter i R. List 334 00:19:52,970 --> 00:19:55,820 vil bare samle noen andre objekter du ønsker. 335 00:19:55,820 --> 00:20:00,130 Så det vil lagre dette i ett variabel som du enkelt kan få tilgang. 336 00:20:00,130 --> 00:20:02,370 >> Så her, jeg tar en liste. 337 00:20:02,370 --> 00:20:04,460 Jeg sier ting er lik 3. 338 00:20:04,460 --> 00:20:08,060 Så jeg kommer til å ha ett element i listen, og dette kalles ting, 339 00:20:08,060 --> 00:20:10,570 og det kommer til å ha verdien 3. 340 00:20:10,570 --> 00:20:13,140 >> Jeg kan også lage en matrise. 341 00:20:13,140 --> 00:20:17,970 Så dette er 1 til 4 og slutten rad lik 2, slik at en 2 ganger 2 matrise. 342 00:20:17,970 --> 00:20:20,270 Også på listen og det heter matte. 343 00:20:20,270 --> 00:20:24,690 moreStuff, en tegnstreng, og enda en annen liste i seg selv. 344 00:20:24,690 --> 00:20:27,710 >> Så dette er en liste som er fem og bjørn. 345 00:20:27,710 --> 00:20:30,990 Så det har verdien 5 og det har tegnstrengen bjørn 346 00:20:30,990 --> 00:20:32,710 og det er en liste inne i en liste. 347 00:20:32,710 --> 00:20:35,965 Så du kan ha disse rekursive tingene der 348 00:20:35,965 --> 00:20:38,230 du har another-- en skriver innenfor den type. 349 00:20:38,230 --> 00:20:41,420 Så på samme måte, kan du ha en matrise inne i en annen matrise og så videre. 350 00:20:41,420 --> 00:20:44,264 Og en liste er bare en god måte samle inn og aggregere 351 00:20:44,264 --> 00:20:45,430 alle disse forskjellige objekter. 352 00:20:45,430 --> 00:20:50,210 353 00:20:50,210 --> 00:20:57,150 >> Og til slutt, her er bare hjelpe i tilfelle dette var bare borte over svært raskt. 354 00:20:57,150 --> 00:21:01,350 Så når du er forvirret om noen form for funksjonen 355 00:21:01,350 --> 00:21:03,510 du kan gjøre hjelp av denne funksjonen. 356 00:21:03,510 --> 00:21:07,120 Så du kan gjøre hjelp matrise eller et spørsmålstegn matrise. 357 00:21:07,120 --> 00:21:11,430 Og hjelp og spørsmålstegnet er bare forkortelse for det samme 358 00:21:11,430 --> 00:21:13,040 slik at de er aliaser. 359 00:21:13,040 --> 00:21:16,820 >> lm er en funksjon som bare gjør en lineær modell. 360 00:21:16,820 --> 00:21:20,340 Men hvis du bare aner ikke hvordan det fungerer, kan du bare gjøre hjelp av lm 361 00:21:20,340 --> 00:21:24,610 og som vil gi deg litt slags dokumentasjon som 362 00:21:24,610 --> 00:21:27,960 ser litt som en mannen siden i Unix, hvor 363 00:21:27,960 --> 00:21:34,210 du har en kort beskrivelse av hva den gjør det, også hva argumentene er, 364 00:21:34,210 --> 00:21:38,850 hva den returnerer, og bare tips om hvordan å bruke det, og noen eksempler også. 365 00:21:38,850 --> 00:21:41,680 366 00:21:41,680 --> 00:21:52,890 >> Så la meg gå videre og showet noen demo av å bruke R. OK. 367 00:21:52,890 --> 00:21:55,470 Så jeg gikk over svært raskt bare data 368 00:21:55,470 --> 00:21:59,440 strukturer og en slags av op-- noen av operasjonene. 369 00:21:59,440 --> 00:22:02,960 Her er noen av funksjonene. 370 00:22:02,960 --> 00:22:06,750 >> Så her skal jeg bare å definere en funksjon. 371 00:22:06,750 --> 00:22:09,970 Så jeg er også bruker oppdrag operatør her, 372 00:22:09,970 --> 00:22:12,610 og da sier jeg erklære det som en funksjon. 373 00:22:12,610 --> 00:22:14,140 Og det tar verdien x. 374 00:22:14,140 --> 00:22:18,210 Så dette er en verdi du vil og jeg kommer til å gå tilbake x selv. 375 00:22:18,210 --> 00:22:20,840 Så dette er identiteten funksjon. 376 00:22:20,840 --> 00:22:23,670 >> Og hva som er kult om dette sammenlignet med andre språk 377 00:22:23,670 --> 00:22:26,330 og et lavt nivå språk er at x 378 00:22:26,330 --> 00:22:29,350 kan være av hvilken som helst type i seg selv og det vil returnere den typen. 379 00:22:29,350 --> 00:22:35,251 Så du kan imagine-- så la meg bare kjøre dette raskt. 380 00:22:35,251 --> 00:22:35,750 Unnskyld. 381 00:22:35,750 --> 00:22:40,300 >> Så en ting jeg bør også nevne er at denne editoren jeg bruker 382 00:22:40,300 --> 00:22:41,380 kalles rstudio. 383 00:22:41,380 --> 00:22:44,389 Dette er det som kalles en IDE. 384 00:22:44,389 --> 00:22:46,180 Og en ting som er virkelig fint om dette 385 00:22:46,180 --> 00:22:51,500 er at den omfatter en masse av ting du vil gjøre i R av seg selv 386 00:22:51,500 --> 00:22:53,180 bare veldig intuitivt. 387 00:22:53,180 --> 00:22:55,550 >> Så her er tolk konsoll. 388 00:22:55,550 --> 00:23:02,160 Så på samme måte, kan du også få dette konsollen rå bare ved å gjøre en kapital R. 389 00:23:02,160 --> 00:23:05,630 Og dette er akkurat den samme som konsollen. 390 00:23:05,630 --> 00:23:12,210 Så jeg kan bare gjøre id funksjon x, x, x. 391 00:23:12,210 --> 00:23:16,130 Og then-- og da at vil bli bra selv. 392 00:23:16,130 --> 00:23:19,200 393 00:23:19,200 --> 00:23:21,740 >> Så rstudio er stor fordi den har konsollen. 394 00:23:21,740 --> 00:23:25,360 Det har også dokumentene du ønsker å kjøre på. 395 00:23:25,360 --> 00:23:28,629 Og så har noen variabler som du kan se i miljøer. 396 00:23:28,629 --> 00:23:30,420 Og så, hvis du har å gjøre tomter, så du 397 00:23:30,420 --> 00:23:33,730 kan bare se det her, i motsetning til administrere alle disse forskjellige vinduer 398 00:23:33,730 --> 00:23:35,940 av seg selv. 399 00:23:35,940 --> 00:23:40,530 >> Jeg faktisk personlig bruker Vim, men jeg føler at rstudio er utmerket bare 400 00:23:40,530 --> 00:23:44,640 for å få en god idé av hvordan du bruker R. Vanligvis 401 00:23:44,640 --> 00:23:47,040 når du prøver å lære noen ny oppgave, 402 00:23:47,040 --> 00:23:49,590 du ikke ønsker å håndtere for mange ting på en gang. 403 00:23:49,590 --> 00:23:53,120 Så R er bare en very-- rstudio er en veldig god måte å lære på R 404 00:23:53,120 --> 00:23:56,760 uten å måtte forholde seg til alle disse andre tingene. 405 00:23:56,760 --> 00:23:58,600 >> Så her Jeg kjører id hallo. 406 00:23:58,600 --> 00:24:00,090 Dette returnerer hei. 407 00:24:00,090 --> 00:24:01,740 id 123. 408 00:24:01,740 --> 00:24:04,610 Her er en vektor av heltall. 409 00:24:04,610 --> 00:24:08,620 Så på samme måte, fordi du kan ta noen noen form for verdi, 410 00:24:08,620 --> 00:24:16,060 du kan gjøre retur id av x slik at det returnerer 1234 og 5. 411 00:24:16,060 --> 00:24:22,210 >> Og la meg bare vise deg at dette er faktisk et heltall. 412 00:24:22,210 --> 00:24:28,800 Og på samme måte, hvis du gjør klasse id x, kommer det til å være heltall. 413 00:24:28,800 --> 00:24:34,170 Og så kan du også sammenligne de to, og det er sant. 414 00:24:34,170 --> 00:24:38,350 Så jeg sjekke om id av x tilsvarer tilsvarer x og varsel 415 00:24:38,350 --> 00:24:39,760 at det gir deg to Trues. 416 00:24:39,760 --> 00:24:44,280 Så dette er ikke si er de to objektene identiske 417 00:24:44,280 --> 00:24:46,845 men er hver av oppføringene innenfor vektorene identiske. 418 00:24:46,845 --> 00:24:50,000 419 00:24:50,000 --> 00:24:52,090 >> Her er bounded.compare. 420 00:24:52,090 --> 00:24:58,470 Så dette er litt mer komplisert ved at den har en hvis tilstand og annet 421 00:24:58,470 --> 00:25:00,960 og så tar det to argumenter om gangen. 422 00:25:00,960 --> 00:25:02,640 Så x er av en hvilken som helst type. 423 00:25:02,640 --> 00:25:06,280 Og jeg sier dette andre argumentet er en. 424 00:25:06,280 --> 00:25:08,380 Dette kan være alt i tillegg. 425 00:25:08,380 --> 00:25:12,490 Men som standard, det kommer til å ta 5 hvis du ikke spesifiserer noe. 426 00:25:12,490 --> 00:25:16,730 >> Så her kommer jeg til å si dersom x er større enn en. 427 00:25:16,730 --> 00:25:19,220 Så hvis jeg ikke angir et, det sier at dersom x er større enn 5, 428 00:25:19,220 --> 00:25:20,470 så jeg kommer til å returnere SANN. 429 00:25:20,470 --> 00:25:23,230 annet, kommer jeg til å returnere USANN. 430 00:25:23,230 --> 00:25:24,870 Så la meg gå videre og definere dette. 431 00:25:24,870 --> 00:25:30,600 432 00:25:30,600 --> 00:25:34,550 >> Og nå kommer jeg til å kjøre bounded.compare tre. 433 00:25:34,550 --> 00:25:39,150 Så det sier er tre mindre than-- er tre mer enn fem. 434 00:25:39,150 --> 00:25:41,830 Nei, det er ikke så FALSK. 435 00:25:41,830 --> 00:25:46,550 >> Og bounded.compare 3 og jeg kommer å sammenligne den med en lik 2. 436 00:25:46,550 --> 00:25:50,700 Så nå er jeg sier ja, nå er jeg ønsker en å være noe annet. 437 00:25:50,700 --> 00:25:52,750 Så jeg kommer til å si en, bør du være to. 438 00:25:52,750 --> 00:25:56,640 >> Jeg kan enten gjøre denne typen notasjon eller jeg si en er lik to. 439 00:25:56,640 --> 00:25:58,720 Dette er en mer lesbar i at når du er 440 00:25:58,720 --> 00:26:01,450 ser på disse virkelig kompliserte funksjoner som 441 00:26:01,450 --> 00:26:08,110 ta flere arguments-- og dette kan være flere titalls oftentimes-- bare si 442 00:26:08,110 --> 00:26:11,140 en er lik to er mer lesbar for deg slik at senere i fremtiden 443 00:26:11,140 --> 00:26:13,020 vil du vite hva du gjør. 444 00:26:13,020 --> 00:26:17,120 >> Så i dette tilfellet, er jeg ordtaket er 3 større enn 2. 445 00:26:17,120 --> 00:26:18,270 Ja det er. 446 00:26:18,270 --> 00:26:22,350 Og på samme måte, jeg kan bare fjerne dette og si, er 3 større enn 2 447 00:26:22,350 --> 00:26:23,440 hvor en er lik to. 448 00:26:23,440 --> 00:26:26,230 Og det er også sant. 449 00:26:26,230 --> 00:26:26,730 Ja? 450 00:26:26,730 --> 00:26:29,670 >> PUBLIKUM: Er du utførende linje for linje? 451 00:26:29,670 --> 00:26:30,670 >> DUSTIN TRAN: Ja jeg er. 452 00:26:30,670 --> 00:26:33,900 Så hva jeg gjør her er ta denne teksten document-- 453 00:26:33,900 --> 00:26:39,825 og hva er flott om rstudio er at Jeg kan bare kjøre en short-- en snarvei. 454 00:26:39,825 --> 00:26:41,820 Så jeg gjør Ctrl-Enter. 455 00:26:41,820 --> 00:26:44,850 >> Og så, jeg tar den linje i tekstdokumentet 456 00:26:44,850 --> 00:26:46,710 og deretter sette i konsollen. 457 00:26:46,710 --> 00:26:50,800 Så her sier jeg, bounded.compare og jeg gjør Kontroll-X. 458 00:26:50,800 --> 00:26:52,540 Så jeg kan bare ikke kjøre her også. 459 00:26:52,540 --> 00:26:54,920 Og deretter som vil ta linje og deretter sette den her. 460 00:26:54,920 --> 00:26:57,900 Og deretter på samme måte, jeg kan ikke kjøre her. 461 00:26:57,900 --> 00:27:04,630 Og så vil det bare fortsette å definere linjene inn i konsollen sånn. 462 00:27:04,630 --> 00:27:10,690 >> Og hvis du også legge merke til den krøllete bukseseler er det akkurat som i C syntaks. 463 00:27:10,690 --> 00:27:13,910 X- hvis hvis betingelsen er også kommer til å bruke parenteser og deretter 464 00:27:13,910 --> 00:27:15,350 du kan bruke annet. 465 00:27:15,350 --> 00:27:17,496 En annen er annet hvis. 466 00:27:17,496 --> 00:27:21,440 Så dette kommer til å bli x lik lik en, for eksempel. 467 00:27:21,440 --> 00:27:24,190 468 00:27:24,190 --> 00:27:26,350 Og så kommer jeg til å returnere noe her. 469 00:27:26,350 --> 00:27:29,490 >> Legg merke til at det finnes to forskjellig ting her som skjer. 470 00:27:29,490 --> 00:27:34,360 Det ene er at her jeg spesifisere returnere verdien TRUE. 471 00:27:34,360 --> 00:27:35,950 Her jeg sier bare x. 472 00:27:35,950 --> 00:27:39,970 Så R vil vanligvis som standard ta den siste arguments-- 473 00:27:39,970 --> 00:27:43,510 eller ta den siste linje av koden, og som vil være hva det er returnert. 474 00:27:43,510 --> 00:27:46,920 Så her er dette den samme ting som gjør retur x. 475 00:27:46,920 --> 00:27:49,450 476 00:27:49,450 --> 00:27:50,540 >> Og bare for å vise deg. 477 00:27:50,540 --> 00:27:54,000 478 00:27:54,000 --> 00:27:57,052 Og da vil det fungere bare sånn. 479 00:27:57,052 --> 00:27:58,260 Så la meg fortsette med dette. 480 00:27:58,260 --> 00:28:00,630 >> Så annet hvis. 481 00:28:00,630 --> 00:28:04,060 Og egentlig, kan jeg returnere noe jeg ønsker. 482 00:28:04,060 --> 00:28:06,680 Så jeg trenger ikke engang å retur Booleans hele tiden, 483 00:28:06,680 --> 00:28:08,410 Jeg kan bare returnere noe annet. 484 00:28:08,410 --> 00:28:10,670 Så jeg kan gjøre retur bjørn. 485 00:28:10,670 --> 00:28:12,989 >> Så hvis x er lik lik en, det kommer til å gå tilbake bjørn. 486 00:28:12,989 --> 00:28:14,530 Ellers kommer det til å returnere SANN. 487 00:28:14,530 --> 00:28:19,310 Jeg kan også gjøre en vektor eller egentlig hva som helst. 488 00:28:19,310 --> 00:28:22,210 >> Og normalt i statisk skrevne språk, 489 00:28:22,210 --> 00:28:23,840 du må angi en type her. 490 00:28:23,840 --> 00:28:25,750 Og legg merke til at det bare kan være hva som helst. 491 00:28:25,750 --> 00:28:32,400 Og R er intelligent nok til at det vil bare gjøre dette, og det vil fungere fint. 492 00:28:32,400 --> 00:28:33,620 >> Så la meg definere dette. 493 00:28:33,620 --> 00:28:39,460 494 00:28:39,460 --> 00:28:41,230 Unexpected-- oh sorry. 495 00:28:41,230 --> 00:28:44,336 Det bør være en klammeparentes her. 496 00:28:44,336 --> 00:28:44,836 OK. 497 00:28:44,836 --> 00:28:45,336 Cool. 498 00:28:45,336 --> 00:28:52,580 499 00:28:52,580 --> 00:28:54,530 OK. 500 00:28:54,530 --> 00:28:58,250 Så nå la oss sammenligne tre og en er lik 3. 501 00:28:58,250 --> 00:29:01,860 Så det bør return-- yeah-- verdien bjørn. 502 00:29:01,860 --> 00:29:06,740 >> Så nå en mer generell ting er som hva om andre datastrukturer. 503 00:29:06,740 --> 00:29:09,110 Så du har denne funksjonen. 504 00:29:09,110 --> 00:29:15,360 Dette kommer til å fungere på alle slags av verdi som 3 eller numerisk, 505 00:29:15,360 --> 00:29:17,500 med andre ord dobbelt. 506 00:29:17,500 --> 00:29:19,330 >> Men hva om noe sånt som en vektor. 507 00:29:19,330 --> 00:29:27,750 Så hva skjer hvis du do-- så jeg er kommer til å tildele val til, si, 4 til 6. 508 00:29:27,750 --> 00:29:31,640 Så hvis jeg kommer tilbake dette, dette er en vektor fra 4, 5, 6. 509 00:29:31,640 --> 00:29:34,935 >> La oss nå se hva som skjer hvis jeg gjør bounded.compare val. 510 00:29:34,935 --> 00:29:37,680 511 00:29:37,680 --> 00:29:42,450 Så dette kommer til å gi deg 15 1251. 512 00:29:42,450 --> 00:29:46,440 Så med andre ord, er det å si hvis du ser på denne tilstanden 513 00:29:46,440 --> 00:29:50,040 så det står x er mindre enn en eller noe. 514 00:29:50,040 --> 00:29:51,880 Så dette er litt forvirrende fordi nå 515 00:29:51,880 --> 00:29:53,379 du vet bare ikke hva som skjer. 516 00:29:53,379 --> 00:29:58,690 Så jeg antar en ting som er virkelig godt om bare prøver å feilsøke 517 00:29:58,690 --> 00:30:04,600 er at du bare kan gjøre val er større enn en og se hva som skjer der. 518 00:30:04,600 --> 00:30:09,720 >> Så val-- en er som standard 5 så La oss bare gjøre Val større enn 5. 519 00:30:09,720 --> 00:30:14,280 Så dette er en vektor false false TRUE. 520 00:30:14,280 --> 00:30:17,206 Så nå når du ser på dette, det kommer til å si om, 521 00:30:17,206 --> 00:30:20,080 og da kommer det til å gi deg dette er en vektor av false false TRUE. 522 00:30:20,080 --> 00:30:23,450 >> Så når du passerer dette i R, R har ingen anelse om hva du gjør. 523 00:30:23,450 --> 00:30:26,650 Fordi det forventer ett enkelt verdi, noe som er en boolsk, og nå 524 00:30:26,650 --> 00:30:29,420 du gir det en vektor av Booleans. 525 00:30:29,420 --> 00:30:31,970 Så som standard, er R bare kommer til å si hva pokker, 526 00:30:31,970 --> 00:30:35,440 Jeg kommer til å anta at du er kommer til å ta det første elementet her. 527 00:30:35,440 --> 00:30:38,320 Så jeg kommer til å say-- jeg kommer å anta at dette er usant. 528 00:30:38,320 --> 00:30:40,890 Så det kommer til å si nei, dette er ikke riktig. 529 00:30:40,890 --> 00:30:45,246 >> Tilsvar, kommer det til å være val tilsvarer tilsvarer en. 530 00:30:45,246 --> 00:30:47,244 Nei, beklager fem. 531 00:30:47,244 --> 00:30:48,910 Og det er også kommer til å være falsk også. 532 00:30:48,910 --> 00:30:52,410 Så det kommer til å si nei, Det er ikke sant, så vel så det er 533 00:30:52,410 --> 00:30:53,680 kommer til å returnere denne siste. 534 00:30:53,680 --> 00:30:56,420 535 00:30:56,420 --> 00:31:01,360 >> Så dette er enten en god ting eller en dårlig ting, avhengig av hvordan du ser det. 536 00:31:01,360 --> 00:31:05,104 Fordi når du er skape disse funksjonene, 537 00:31:05,104 --> 00:31:06,770 du trenger faktisk ikke vet hva som skjer. 538 00:31:06,770 --> 00:31:10,210 Så noen ganger du ønsker en feil, eller kanskje du bare vil ha en advarsel. 539 00:31:10,210 --> 00:31:12,160 I dette tilfellet betyr R ikke gjøre det. 540 00:31:12,160 --> 00:31:14,300 Så det er egentlig opp til du basert off av hva 541 00:31:14,300 --> 00:31:17,310 tror du språket bør gjøre i dette tilfellet 542 00:31:17,310 --> 00:31:22,920 hvis du passerer i en vektor av Booleans når du gjør en hvis tilstand. 543 00:31:22,920 --> 00:31:31,733 >> Så la oss si at du hadde den opprinnelige ett med hvis annet returnere SANN, og du er 544 00:31:31,733 --> 00:31:34,190 kommer til å returnere USANN. 545 00:31:34,190 --> 00:31:39,300 Slik at en måte å abstrahere dette er å si at jeg 546 00:31:39,300 --> 00:31:41,530 trenger ikke engang dette betinget ting. 547 00:31:41,530 --> 00:31:47,220 En annen ting jeg kan gjøre er bare retur verdiene selv. 548 00:31:47,220 --> 00:31:53,240 Så hvis du legger merke til, hvis du do val er større enn 5, 549 00:31:53,240 --> 00:31:56,350 dette kommer til å returnere en vektor false false TRUE. 550 00:31:56,350 --> 00:31:58,850 >> Kanskje dette er hva du ønsker for bounded.compare. 551 00:31:58,850 --> 00:32:02,940 Du ønsker å returnere en vektor av Booleans hvor den sammenligner hver av verdiene 552 00:32:02,940 --> 00:32:04,190 til seg selv. 553 00:32:04,190 --> 00:32:11,165 Så kan du bare gjøre bounded.compare Funksjonen x, a er lik fem. 554 00:32:11,165 --> 00:32:13,322 555 00:32:13,322 --> 00:32:15,363 Og så i stedet for å gjøre dette hvis annet tilstand, 556 00:32:15,363 --> 00:32:21,430 Jeg kommer bare til å gå tilbake x er større enn fem. 557 00:32:21,430 --> 00:32:23,620 Så hvis det er sant, så det kommer til å returnere SANN. 558 00:32:23,620 --> 00:32:26,830 Og så hvis det ikke er det, er det kommer til å returnere USANN. 559 00:32:26,830 --> 00:32:30,880 >> Og dette vil fungere for noen av disse strukturer. 560 00:32:30,880 --> 00:32:41,450 Så jeg kan bounded.compare c en 6 eller 9 og så kommer jeg til å si en lik 6, 561 00:32:41,450 --> 00:32:42,799 f.eks. 562 00:32:42,799 --> 00:32:44,840 Og så kommer det til å gi deg den rette boolsk 563 00:32:44,840 --> 00:32:48,240 vektor som du designer. 564 00:32:48,240 --> 00:32:50,660 >> Så de er bare funksjoner og nå la meg bare 565 00:32:50,660 --> 00:32:54,980 vise deg noen interaktive grafikk. 566 00:32:54,980 --> 00:32:59,700 Jeg tror ikke jeg har faktisk Wi-Fi her så la meg bare gå videre 567 00:32:59,700 --> 00:33:01,970 og hoppe over dette antar jeg. 568 00:33:01,970 --> 00:33:05,260 >> Men en ting som er kult skjønt er at hvis du bare 569 00:33:05,260 --> 00:33:09,600 ønsker å teste en haug med ulike datakommandoer, 570 00:33:09,600 --> 00:33:13,320 det er en haug med forskjellige datasett som allerede er forhåndslagret i R. 571 00:33:13,320 --> 00:33:15,770 Så en av dem er kalt iris datasettet. 572 00:33:15,770 --> 00:33:18,910 Dette er en av de mest kjente de i maskinlæring. 573 00:33:18,910 --> 00:33:23,350 Du vil som regel bare gjøre noen form for testtilfeller for å se om koden din kjører. 574 00:33:23,350 --> 00:33:27,520 Så la oss bare sjekke hva iris er. 575 00:33:27,520 --> 00:33:33,130 >> Så denne ting kommer å være en dataramme. 576 00:33:33,130 --> 00:33:36,000 Og det er slags lenge fordi Jeg har nettopp skrevet ut iris. 577 00:33:36,000 --> 00:33:38,810 Det å skrive ut hele greia. 578 00:33:38,810 --> 00:33:42,830 Så det har alle disse forskjellige navn. 579 00:33:42,830 --> 00:33:45,505 Så iris er en samling av forskjellige blomster. 580 00:33:45,505 --> 00:33:48,830 I dette tilfellet er det å fortelle du arter av det, 581 00:33:48,830 --> 00:33:54,760 alle disse forskjellige bredder og lengder av sepal og bladet. 582 00:33:54,760 --> 00:33:58,880 >> Og så normalt, hvis du vil skrive ut iris, 583 00:33:58,880 --> 00:34:03,680 for eksempel, trenger du ikke ønsker å ha det gjøre alt dette fordi det kan ta over 584 00:34:03,680 --> 00:34:05,190 hele konsollen. 585 00:34:05,190 --> 00:34:09,280 Så en ting som er virkelig hyggelig er hodet ikke fungerer. 586 00:34:09,280 --> 00:34:12,929 Så hvis du bare gjøre hodet iris, vil dette gi deg 587 00:34:12,929 --> 00:34:17,389 de første fem rader eller seks tror jeg. 588 00:34:17,389 --> 00:34:19,909 Og så godt, du kan bare spesifisere her. 589 00:34:19,909 --> 00:34:22,914 Så 20-- dette vil gi du de første 20 radene. 590 00:34:22,914 --> 00:34:24,830 Og jeg faktisk var snill overrasket over at dette 591 00:34:24,830 --> 00:34:28,770 ga meg seks så la meg gå videre og sjekk iris-- eller hode, beklager. 592 00:34:28,770 --> 00:34:31,699 593 00:34:31,699 --> 00:34:34,960 Og her vil det gi du dokumentasjonen 594 00:34:34,960 --> 00:34:37,960 av hva verdien hodet gjør. 595 00:34:37,960 --> 00:34:40,839 Slik at den returnerer den første eller siste av et objekt. 596 00:34:40,839 --> 00:34:42,630 Og så kommer jeg til å se på standardinnstillingene. 597 00:34:42,630 --> 00:34:47,340 Og så står det standard metode hode x og n er lik 6L. 598 00:34:47,340 --> 00:34:50,620 Så dette returnerer de seks første elementene. 599 00:34:50,620 --> 00:34:55,050 Og på samme måte hvis du legger merke til her, jeg trengte ikke å spesifisere n er lik seks. 600 00:34:55,050 --> 00:34:56,840 Som standard bruker den seks, antar jeg. 601 00:34:56,840 --> 00:35:00,130 Og så, hvis jeg ønsker å spesifisere en viss verdi, så jeg kan se det også. 602 00:35:00,130 --> 00:35:02,970 603 00:35:02,970 --> 00:35:10,592 >> Så det er noen enkle kommandoer og her er en annen en som er just-- godt, 604 00:35:10,592 --> 00:35:12,550 Jeg can-- dette er faktisk litt mer komplisert, 605 00:35:12,550 --> 00:35:17,130 men dette vil bare ta klassen for hver kolonne i iris datasettet. 606 00:35:17,130 --> 00:35:20,910 Så dette vil vise deg hva hver av disse kolonner er i form av sine typer. 607 00:35:20,910 --> 00:35:23,665 Så sepal lengde er numerisk, sepal bredde er numerisk. 608 00:35:23,665 --> 00:35:26,540 Alle disse verdier er bare numerisk fordi du kan fortelle fra disse dataene 609 00:35:26,540 --> 00:35:29,440 strukturere disse er alle kommer til numerisk. 610 00:35:29,440 --> 00:35:34,310 >> Og Arter kolonne kommer til å være en faktor. 611 00:35:34,310 --> 00:35:37,270 Så normalt, tror du at dette er som en tegnstreng. 612 00:35:37,270 --> 00:35:48,830 Men hvis du bare gjøre irisSpecies, og så kommer jeg til å gjøre hodet 5, 613 00:35:48,830 --> 00:35:51,820 og dette kommer til å skrive ut ut de første fem verdier. 614 00:35:51,820 --> 00:35:54,150 >> Og deretter legge merke til dette nivået. 615 00:35:54,150 --> 00:35:58,870 Så dette er saying-- dette er R måte av å ha kategoriske variabler. 616 00:35:58,870 --> 00:36:03,765 Så i stedet for bare ha tegnstrenger, 617 00:36:03,765 --> 00:36:06,740 det har nivåer spesifiserer hvilke av disse tingene er. 618 00:36:06,740 --> 00:36:12,450 >> Så la oss si irisSpecies en. 619 00:36:12,450 --> 00:36:17,690 Så hva du ønsker å gjøre her er jeg undergruppe til denne Arter kolonnen. 620 00:36:17,690 --> 00:36:21,480 Så dette tar Arter kolonne og deretter 621 00:36:21,480 --> 00:36:23,820 den indekserer å få det første elementet. 622 00:36:23,820 --> 00:36:27,140 Så dette burde gi deg setosa. 623 00:36:27,140 --> 00:36:28,710 Og det gir deg også nivåer her. 624 00:36:28,710 --> 00:36:32,812 >> Så du kan også sammenligne dette til karakteren setosa 625 00:36:32,812 --> 00:36:34,645 og dette ikke kommer å være sant fordi man 626 00:36:34,645 --> 00:36:37,940 er av en annen type enn den andre. 627 00:36:37,940 --> 00:36:40,590 Eller jeg antar det er sant fordi R er mer intelligent enn det. 628 00:36:40,590 --> 00:36:45,420 Og det ser ut på dette og deretter sier, kanskje dette er hva du ønsker. 629 00:36:45,420 --> 00:36:51,860 Så det kommer til å si tegnet string setosa er den samme som denne. 630 00:36:51,860 --> 00:37:01,290 Og deretter på samme måte, kan man også bare ta disse som så videre. 631 00:37:01,290 --> 00:37:05,580 >> Så det er bare en slags raske kommandoer av datasettet. 632 00:37:05,580 --> 00:37:08,030 Så her er noen data leting. 633 00:37:08,030 --> 00:37:11,360 Så dette er en litt mer involvert i dataanalysen. 634 00:37:11,360 --> 00:37:18,340 Og dette er tatt fra noen bootcamp i R for i Berkeley. 635 00:37:18,340 --> 00:37:20,790 >> Så bibliotek utenlandske. 636 00:37:20,790 --> 00:37:24,880 Så jeg kommer til å laste inn en bibliotek som heter utenlandske. 637 00:37:24,880 --> 00:37:32,460 Så dette kommer til å gi meg read.dta så anta at jeg har dette datasettet. 638 00:37:32,460 --> 00:37:39,000 Denne er lagret i den aktuelle arbeidsmappen min konsoll. 639 00:37:39,000 --> 00:37:42,190 Så la oss bare se hva arbeidsmappen er. 640 00:37:42,190 --> 00:37:44,620 >> Så her er min arbeidskatalog. 641 00:37:44,620 --> 00:37:50,040 Og lese punktdata, dette ting, sier denne filen 642 00:37:50,040 --> 00:37:54,650 ligger i datamappen til denne gjeldende arbeidskatalog. 643 00:37:54,650 --> 00:38:00,520 Og read.dta dette ikke er en standard kommandoen. 644 00:38:00,520 --> 00:38:02,760 Jeg antar jeg lastet det inn allerede. 645 00:38:02,760 --> 00:38:04,750 IEI antok jeg lastet dette inn allerede. 646 00:38:04,750 --> 00:38:08,115 >> Men så read.dta ikke kommer å være en standardkommandoen. 647 00:38:08,115 --> 00:38:11,550 Og det er derfor du kommer til å ha å laste inn dette biblioteket package-- 648 00:38:11,550 --> 00:38:14,500 denne pakken kalt utenlandske. 649 00:38:14,500 --> 00:38:16,690 Og hvis du ikke har pakken, tror jeg 650 00:38:16,690 --> 00:38:19,180 fremmed er en av de innebygde seg. 651 00:38:19,180 --> 00:38:31,150 Ellers kan du også gjøre install.packages 652 00:38:31,150 --> 00:38:33,180 og dette vil installere pakken. 653 00:38:33,180 --> 00:38:36,878 Og dette vil gi deg R. Uh, nei. 654 00:38:36,878 --> 00:38:39,830 655 00:38:39,830 --> 00:38:43,140 Og da er jeg bare kommer til å stoppe dette fordi jeg allerede har gjort det. 656 00:38:43,140 --> 00:38:46,920 >> Men hva er egentlig fint om R er at pakken ledelsen 657 00:38:46,920 --> 00:38:48,510 Systemet er meget elegant. 658 00:38:48,510 --> 00:38:52,470 Fordi det vil lagre alt virkelig pent for deg. 659 00:38:52,470 --> 00:38:59,780 Så i dette tilfellet, det kommer til å lagre det inn, tror jeg, dette biblioteket her. 660 00:38:59,780 --> 00:39:02,390 >> Så når du vil installere nye pakker, 661 00:39:02,390 --> 00:39:04,980 det er like enkelt som gjør install.packages 662 00:39:04,980 --> 00:39:07,500 og R vil administrere alle pakkene for deg. 663 00:39:07,500 --> 00:39:12,900 Så du trenger ikke å gjøre noe i Python, hvor du har ekstern pakke 664 00:39:12,900 --> 00:39:15,330 ledere som papir Anaconda hvor du er 665 00:39:15,330 --> 00:39:18,310 doing-- du installerer pakker utenfor Python 666 00:39:18,310 --> 00:39:20,940 og deretter prøver å kjøre dem selv. 667 00:39:20,940 --> 00:39:22,210 Så dette er veldig fin måte. 668 00:39:22,210 --> 00:39:25,590 >> Og install.packages krever internett. 669 00:39:25,590 --> 00:39:31,950 Det tar det fra en server og depotet som 670 00:39:31,950 --> 00:39:33,960 samler alle pakkene kalles CRAN. 671 00:39:33,960 --> 00:39:40,690 Og du kan angi hvilken slags speil du ønsker å laste ned pakker fra. 672 00:39:40,690 --> 00:39:43,420 >> Så her jeg tar dette datasettet. 673 00:39:43,420 --> 00:39:46,240 Jeg leser det i å bruke denne funksjonen. 674 00:39:46,240 --> 00:39:49,360 Så la meg gå videre og gjøre det. 675 00:39:49,360 --> 00:39:52,900 >> Så la oss anta at du har dette datasettet 676 00:39:52,900 --> 00:39:55,550 og du har absolutt aner ikke hva det er. 677 00:39:55,550 --> 00:39:58,560 Og dette faktisk kommer opp ganske ofte i bransjen 678 00:39:58,560 --> 00:40:00,910 der du bare har disse tonn på tonn med rotete ting 679 00:40:00,910 --> 00:40:02,890 og de er utrolig umerket. 680 00:40:02,890 --> 00:40:06,380 Så her har jeg denne datasett og jeg vet ikke 681 00:40:06,380 --> 00:40:08,400 hva det er så er jeg bare viser å sjekke det ut. 682 00:40:08,400 --> 00:40:10,620 >> Så jeg kommer til å gjøre med hodet først. 683 00:40:10,620 --> 00:40:14,190 Så jeg sjekke de første seks kolonner av hva dette datasettet er. 684 00:40:14,190 --> 00:40:21,730 Så dette er staten, pres04, og deretter alle disse forskjellige slags kolonner. 685 00:40:21,730 --> 00:40:25,612 Og hva er interessant her, antar jeg, er at du 686 00:40:25,612 --> 00:40:27,945 vil anta at dette ser som en slags valg. 687 00:40:27,945 --> 00:40:30,482 688 00:40:30,482 --> 00:40:32,190 Og jeg antar bare fra ser på filen 689 00:40:32,190 --> 00:40:41,070 nevne dette er en slags samling av data om kandidater eller velgere 690 00:40:41,070 --> 00:40:44,920 som stemte for spesifikke presidenter eller president kandidater 691 00:40:44,920 --> 00:40:46,550 for 2004 valget. 692 00:40:46,550 --> 00:40:52,920 >> Så her er verdiene 1, 2 slik at en måte å lagre 693 00:40:52,920 --> 00:40:56,540 presidenten kandidater er navnene deres. 694 00:40:56,540 --> 00:40:59,780 I dette tilfellet ser det ut som de er bare heltallsverdier. 695 00:40:59,780 --> 00:41:04,030 Så 2004, det var Bush versus Kerry tror jeg. 696 00:41:04,030 --> 00:41:09,010 Og nå, la oss si at du bare ikke vet om en tilsvarer Bush eller to 697 00:41:09,010 --> 00:41:11,703 tilsvarer Kerry eller og så videre og så videre, ikke sant? 698 00:41:11,703 --> 00:41:15,860 >> Og dette er bare for meg, et ganske vanlig problem. 699 00:41:15,860 --> 00:41:18,230 Så hva kan du gjøre i dette tilfellet? 700 00:41:18,230 --> 00:41:20,000 Så la oss sjekke alle disse andre tingene. 701 00:41:20,000 --> 00:41:22,790 >> tilstand, jeg antar dette kommer fra forskjellige stater. 702 00:41:22,790 --> 00:41:25,100 PartyId, inntekt. 703 00:41:25,100 --> 00:41:27,710 La oss se på PartyId. 704 00:41:27,710 --> 00:41:32,800 Så kanskje en ting du kan gjøre er se på hver av de observasjoner 705 00:41:32,800 --> 00:41:36,250 som har en PartyId av republikanske eller demokrat eller noe. 706 00:41:36,250 --> 00:41:38,170 Så la oss bare se på hva PartyId er. 707 00:41:38,170 --> 00:41:41,946 >> Så jeg kommer til å ta dat og da jeg kommer 708 00:41:41,946 --> 00:41:47,960 å gjøre dette dollartegn operatør som jeg gjorde tidligere 709 00:41:47,960 --> 00:41:50,770 og dette kommer til å undergruppe i den kolonnen. 710 00:41:50,770 --> 00:41:57,760 Og så kommer jeg til å dra dette i 20, bare for å se hvordan dette ser ut. 711 00:41:57,760 --> 00:42:00,170 >> Så dette er bare en haug med NAs. 712 00:42:00,170 --> 00:42:02,800 Så med andre ord, har du manglende data om disse gutta. 713 00:42:02,800 --> 00:42:08,100 Men du også legge merke til dette dat PartyId er en faktor 714 00:42:08,100 --> 00:42:10,030 så dette gir deg forskjellige kategorier. 715 00:42:10,030 --> 00:42:14,170 Så med andre ord, kan PartyId ta Demokrat, republikaner, Independent, 716 00:42:14,170 --> 00:42:16,640 eller noe annet. 717 00:42:16,640 --> 00:42:23,940 >> Så la oss gå videre og la oss se hvilke av disse er-- oh, OK. 718 00:42:23,940 --> 00:42:28,480 Så jeg kommer til å undergruppe å PartyId og deretter 719 00:42:28,480 --> 00:42:32,780 se på hvilke som er Demokrat, for eksempel. 720 00:42:32,780 --> 00:42:37,150 Dette kommer til å gi deg en boolsk, en stor boolsk av Trues og misoppfatter. 721 00:42:37,150 --> 00:42:41,630 >> Og nå, la oss si at jeg vil ha å undergruppe til disse gutta. 722 00:42:41,630 --> 00:42:47,260 Så dette kommer til å ta min dat og undergruppe til hvilken observasjoner 723 00:42:47,260 --> 00:42:48,910 har PartyId likhets lik demokrat. 724 00:42:48,910 --> 00:42:52,830 725 00:42:52,830 --> 00:42:55,180 Og dette er ganske lang fordi det er så mange av dem. 726 00:42:55,180 --> 00:42:59,060 Så nå kommer jeg til å dra dette i 20. 727 00:42:59,060 --> 00:43:05,690 728 00:43:05,690 --> 00:43:11,270 >> Og som du legger merke til, er lik likemenn er interessant ved at du er 729 00:43:11,270 --> 00:43:13,250 already-- du er også inkludert NAs. 730 00:43:13,250 --> 00:43:19,010 Så i dette tilfellet, har du fortsatt ikke kan få noe informasjon fordi nå har du NAs 731 00:43:19,010 --> 00:43:22,650 og du bare ønsker å se hvilke av observasjon tilsvarer demokrat 732 00:43:22,650 --> 00:43:24,670 og ikke disse mangler verdier selv. 733 00:43:24,670 --> 00:43:27,680 Så hvordan ville du bli kvitt disse NAs? 734 00:43:27,680 --> 00:43:36,410 >> Så her er jeg bare ved å bruke opp-tasten på min markøren og deretter si bevege seg rundt. 735 00:43:36,410 --> 00:43:39,778 Og så her jeg skal bare å si is.na datpartyid. 736 00:43:39,778 --> 00:43:48,970 737 00:43:48,970 --> 00:43:52,720 Så dette og og vil ta to forskjellige Boolske vektorer 738 00:43:52,720 --> 00:43:57,160 og sier det kommer til å bli TRUE og FALSE for eksempel. 739 00:43:57,160 --> 00:43:59,190 Så det kommer til å gjøre denne komponenten-messig. 740 00:43:59,190 --> 00:44:02,910 Så her sier jeg take dataramme, subset 741 00:44:02,910 --> 00:44:10,170 til de som svarer til demokrat, og fjerne noen av dem som ikke er NA. 742 00:44:10,170 --> 00:44:13,540 >> Så dette will-- bør gi deg noe. 743 00:44:13,540 --> 00:44:16,540 744 00:44:16,540 --> 00:44:17,600 La oss se is.na. 745 00:44:17,600 --> 00:44:24,670 746 00:44:24,670 --> 00:44:27,690 La oss prøve is.na datpartyid. 747 00:44:27,690 --> 00:44:36,290 748 00:44:36,290 --> 00:44:45,290 Og dette bør gi you-- sorry-- bare en boolsk vektor. 749 00:44:45,290 --> 00:44:49,260 Og så, fordi det er så lenge, Jeg kommer til å undergruppe til 20. 750 00:44:49,260 --> 00:44:49,760 OK. 751 00:44:49,760 --> 00:44:51,570 Så dette skal fungere. 752 00:44:51,570 --> 00:44:54,700 >> Og dette vil også være Trues. 753 00:44:54,700 --> 00:45:01,830 Ah, så min feil her er at I'm-- jeg bruke C ++ og R om hverandre så jeg gjør 754 00:45:01,830 --> 00:45:03,590 dette feil hele tiden. 755 00:45:03,590 --> 00:45:05,807 Den og operatør er faktisk den du ønsker. 756 00:45:05,807 --> 00:45:08,140 Du ønsker ikke å bruke to -tegn, bare en eneste en. 757 00:45:08,140 --> 00:45:14,970 758 00:45:14,970 --> 00:45:17,010 OK. 759 00:45:17,010 --> 00:45:18,140 >> Så la oss se. 760 00:45:18,140 --> 00:45:20,930 761 00:45:20,930 --> 00:45:23,920 Så vi subsetted til PartyId hvor de er demokrat 762 00:45:23,920 --> 00:45:25,300 og de er ikke manglende verdier. 763 00:45:25,300 --> 00:45:27,690 Og nå la oss se på hvilke som de stemte på. 764 00:45:27,690 --> 00:45:31,530 Så det virker som de fleste av dem stemte for en. 765 00:45:31,530 --> 00:45:36,090 Så jeg kommer til å gå videre og si at er Kerry. 766 00:45:36,090 --> 00:45:39,507 >> Og på lignende måte, kan man også gå til republikanske 767 00:45:39,507 --> 00:45:41,090 og forhåpentligvis, dette burde gi deg to. 768 00:45:41,090 --> 00:45:49,730 769 00:45:49,730 --> 00:45:51,770 Det er bare en haug med forskjellige kolonner. 770 00:45:51,770 --> 00:45:53,070 Og ja, det er to. 771 00:45:53,070 --> 00:45:55,750 Så PartyId alt republikaner, de fleste av dem er å stemme for 2. 772 00:45:55,750 --> 00:45:58,390 >> Så det virker som, bare ved å se på dette, 773 00:45:58,390 --> 00:46:00,600 Republikanske kommer til å være en very-- eller PartyId 774 00:46:00,600 --> 00:46:02,790 kommer til å være en svært stor faktor i å bestemme 775 00:46:02,790 --> 00:46:05,420 hvilken kandidat de er kommer til å stemme for. 776 00:46:05,420 --> 00:46:07,120 Og dette er selvsagt sant generelt. 777 00:46:07,120 --> 00:46:10,139 Og dette passer din intuisjon, selvfølgelig. 778 00:46:10,139 --> 00:46:11,930 Så det virker som jeg er kjører ut av tid så 779 00:46:11,930 --> 00:46:17,040 la meg bare bør gå foran og vise noen raske bilder. 780 00:46:17,040 --> 00:46:21,120 Så her er noe som er litt mer komplisert med visualisering. 781 00:46:21,120 --> 00:46:26,450 Så i dette tilfellet, er dette en svært enkel analyse av bare sjekke hva 782 00:46:26,450 --> 00:46:28,500 president i '04 er. 783 00:46:28,500 --> 00:46:33,920 >> Så i dette tilfellet, la oss si du ønsket å svare på dette spørsmålet. 784 00:46:33,920 --> 00:46:38,540 Så antar vi ønsket å vite stemmegivningen atferd i 2004 president valget 785 00:46:38,540 --> 00:46:41,170 og hvordan det varierer etter rase. 786 00:46:41,170 --> 00:46:44,380 Så ikke bare vil du se valgatferd, 787 00:46:44,380 --> 00:46:47,860 men du ønsker å undergruppe av hvert rase og liksom oppsummere det. 788 00:46:47,860 --> 00:46:50,770 Og du kan bare fortelle av dette komplekset notasjon 789 00:46:50,770 --> 00:46:52,580 at dette er slags få disig. 790 00:46:52,580 --> 00:46:56,390 >> Så en av de mer avanserte R pakker som er også slags siste 791 00:46:56,390 --> 00:47:00,070 kalles dplyr. 792 00:47:00,070 --> 00:47:03,060 Så det er denne retten her. 793 00:47:03,060 --> 00:47:08,080 Og ggg-- ggplot2 er bare en hyggelig måte å gjøre bedre visualiseringer 794 00:47:08,080 --> 00:47:09,400 enn den innebygde en. 795 00:47:09,400 --> 00:47:11,108 >> Så jeg kommer til å laste disse to bibliotekene. 796 00:47:11,108 --> 00:47:13,200 797 00:47:13,200 --> 00:47:16,950 Og så, jeg kommer til å gå videre og kjøre denne kommandoen. 798 00:47:16,950 --> 00:47:19,050 Du kan bare behandle dette som en svart boks. 799 00:47:19,050 --> 00:47:23,460 >> Det som skjer er at dette røret operatør passerer i dette argumentet 800 00:47:23,460 --> 00:47:24,110 inn her. 801 00:47:24,110 --> 00:47:28,070 Så jeg sier gruppe av dat rase og deretter president 04. 802 00:47:28,070 --> 00:47:31,530 Og så, alle disse andre kommandoer filtrerer og deretter sammenfatte 803 00:47:31,530 --> 00:47:34,081 hvor jeg gjør telling og da er jeg plotte det her. 804 00:47:34,081 --> 00:47:39,980 805 00:47:39,980 --> 00:47:42,500 OK kult. 806 00:47:42,500 --> 00:47:44,620 Så la oss gå videre og se hvordan dette ser ut. 807 00:47:44,620 --> 00:47:52,280 808 00:47:52,280 --> 00:47:57,290 >> Så hva som skjer her er at jeg bare plottet hvert av løpene og deretter 809 00:47:57,290 --> 00:47:59,670 hvilke som de stemte på. 810 00:47:59,670 --> 00:48:03,492 Og disse to forskjellige verdier tilsvarer to og en. 811 00:48:03,492 --> 00:48:05,325 Hvis du ønsker å være mer elegant, kan du også 812 00:48:05,325 --> 00:48:11,770 bare spesifisere at to er Kerry-- eller 2 er Bush, og deretter en er Kerry. 813 00:48:11,770 --> 00:48:13,700 Og du kan også ha at i din legende. 814 00:48:13,700 --> 00:48:17,410 >> Og du kan også dele disse søylediagrammer. 815 00:48:17,410 --> 00:48:19,480 Fordi en ting er at hvis du legger merke til, 816 00:48:19,480 --> 00:48:24,560 dette er ikke veldig lett å identifisere hvilke av disse to verdier er større. 817 00:48:24,560 --> 00:48:27,920 Så en ting du ønsker å gjøre er å ta dette blå området 818 00:48:27,920 --> 00:48:31,855 og bare flytte den over her slik at du kan sammenligne disse to side ved side. 819 00:48:31,855 --> 00:48:34,480 Og jeg antar det er noe jeg har ikke tid til å gjøre akkurat nå, 820 00:48:34,480 --> 00:48:36,660 men det er også veldig enkelt å gjøre. 821 00:48:36,660 --> 00:48:40,310 Du kan bare se inn mannen sidene av ggplot. 822 00:48:40,310 --> 00:48:47,170 Så du kan bare gjøre ggplot som det og lese inn denne mannen siden. 823 00:48:47,170 --> 00:48:51,920 >> Så la meg bare raskt vise deg noen kule ting. 824 00:48:51,920 --> 00:48:57,610 La oss gå videre og gå to-- bare en anvendelse av maskinlæring. 825 00:48:57,610 --> 00:49:02,450 Så la oss si vi har disse tre pakker så jeg kommer til å laste disse inn. 826 00:49:02,450 --> 00:49:05,500 827 00:49:05,500 --> 00:49:09,170 Så dette skriver bare ut noen informasjon etter at jeg har lagt i ting. 828 00:49:09,170 --> 00:49:15,220 Så jeg sier dette read.csv, dette datasettet, og nå 829 00:49:15,220 --> 00:49:18,940 Jeg kommer til å gå videre og se og se hva som er inni dette datasettet. 830 00:49:18,940 --> 00:49:22,080 >> Så de første 20 observasjoner. 831 00:49:22,080 --> 00:49:27,190 Så jeg må bare X1, X2, og Y. Så det virker som en haug av disse verdiene 832 00:49:27,190 --> 00:49:31,640 er i området fra kanskje 20 til 80, eller så. 833 00:49:31,640 --> 00:49:37,700 Og deretter på samme måte for X2 og deretter Dette Y synes å være etiketter 0 og 1. 834 00:49:37,700 --> 00:49:49,500 >> For å bekrefte dette, kan jeg bare gjøre oppsummering data X1. 835 00:49:49,500 --> 00:49:51,660 Og deretter tilsvarende for alle disse andre kolonner. 836 00:49:51,660 --> 00:49:55,300 Så sammendraget er en rask måte bare viser deg raske verdier. 837 00:49:55,300 --> 00:49:56,330 Oh, sorry. 838 00:49:56,330 --> 00:49:58,440 Dette bør være Y. 839 00:49:58,440 --> 00:50:03,420 >> Slik at i dette tilfellet, gir kvantilmålet, medianer, maxes også. 840 00:50:03,420 --> 00:50:07,130 I dette tilfellet, dataY, kan du se at det bare kommer til å være 0 og 1. 841 00:50:07,130 --> 00:50:10,100 Også middelverdien sier 0.6, betyr bare at det 842 00:50:10,100 --> 00:50:13,380 virker som jeg har flere 1s enn 0s. 843 00:50:13,380 --> 00:50:16,160 >> Så la meg gå videre og showet du hva dette ser ut. 844 00:50:16,160 --> 00:50:17,470 Så jeg bare kommer til å plotte dette. 845 00:50:17,470 --> 00:50:22,852 846 00:50:22,852 --> 00:50:24,636 La oss se hvordan du fjerner dette. 847 00:50:24,636 --> 00:50:30,492 848 00:50:30,492 --> 00:50:31,468 Oh OK. 849 00:50:31,468 --> 00:50:35,840 850 00:50:35,840 --> 00:50:36,340 OK. 851 00:50:36,340 --> 00:50:37,590 >> Så dette er hva det ser ut som. 852 00:50:37,590 --> 00:50:46,310 Så det virker som gulfarger jeg spesifiserte som 0, og deretter rødt jeg spesifisert som 1s. 853 00:50:46,310 --> 00:50:52,190 Så her ser det ut som label poeng og det 854 00:50:52,190 --> 00:50:56,410 virker som du bare ville ha noen slags clustering på dette. 855 00:50:56,410 --> 00:51:01,020 >> Og la meg bare gå videre og showet du noen av disse innebygde funksjoner. 856 00:51:01,020 --> 00:51:03,580 Så her er lm. 857 00:51:03,580 --> 00:51:06,060 Så dette er bare prøver for å passe til en linje i dette. 858 00:51:06,060 --> 00:51:08,640 Så hva er den beste måten at jeg kan passe en linje slik 859 00:51:08,640 --> 00:51:14,020 at det beste vil skille denne typen clustering. 860 00:51:14,020 --> 00:51:21,790 Og ideelt sett, kan du bare se at jeg bare kjøre alle disse kommandoene 861 00:51:21,790 --> 00:51:25,450 og da, jeg kommer videre og legge linjen. 862 00:51:25,450 --> 00:51:28,970 >> Så dette virker som det beste gjetning. 863 00:51:28,970 --> 00:51:34,150 Det er å ta den beste som minimerer feilen i å prøve å passe denne linjen. 864 00:51:34,150 --> 00:51:40,000 Selvsagt, ser denne typen bra, men det er ikke den beste. 865 00:51:40,000 --> 00:51:43,130 Og lineære modeller, i generelt, kommer til å være 866 00:51:43,130 --> 00:51:46,811 virkelig flott for teori og bare en slags av bygningsgrunnleggende av maskin 867 00:51:46,811 --> 00:51:47,310 læring. 868 00:51:47,310 --> 00:51:50,330 Men i praksis, du kommer til ønsker å gjøre noe mer generelt. 869 00:51:50,330 --> 00:51:54,280 >> Så du kan bare prøve å kjøre noe som kalles et nettverk. 870 00:51:54,280 --> 00:51:57,110 Disse tingene er stadig mer vanlig. 871 00:51:57,110 --> 00:52:00,530 Og de bare fungerer utrolig for store datasett. 872 00:52:00,530 --> 00:52:07,080 Så i dette tilfellet, vi bare have-- la oss see-- vi har nrow. 873 00:52:07,080 --> 00:52:09,010 Så nrow er bare å si antall rader. 874 00:52:09,010 --> 00:52:11,790 Slik at i dette tilfellet, I har 100 observasjoner. 875 00:52:11,790 --> 00:52:15,010 >> Så la meg gå videre og lage et nettverk. 876 00:52:15,010 --> 00:52:18,620 Så dette er veldig hyggelig fordi jeg kan bare si nnet 877 00:52:18,620 --> 00:52:21,767 og da jeg tilbakegang Y. Så Y er at kolonnen. 878 00:52:21,767 --> 00:52:23,850 Og deretter tilbakegang det på de to andre variablene. 879 00:52:23,850 --> 00:52:27,360 Så dette er kortere notasjon for X1 og X2. 880 00:52:27,360 --> 00:52:29,741 >> Så la oss gå videre og kjøre dette. 881 00:52:29,741 --> 00:52:30,240 Oh, sorry. 882 00:52:30,240 --> 00:52:32,260 Jeg trenger å kjøre hele greia. 883 00:52:32,260 --> 00:52:37,500 Og dette er bare utskrift notasjon for hvor raskt eller ikke raskt det 884 00:52:37,500 --> 00:52:38,460 konvergerte. 885 00:52:38,460 --> 00:52:41,420 Så det ser ut som det gjorde møtes. 886 00:52:41,420 --> 00:52:44,970 Så la meg gå videre og print ut hva dette ser ut. 887 00:52:44,970 --> 00:52:51,260 >> Se her er bildet, og her er en kontur som viser hvor godt det passer. 888 00:52:51,260 --> 00:52:56,380 Og dette er just-- du kan se dette at dette er veldig, veldig hyggelig. 889 00:52:56,380 --> 00:52:59,400 Det kan også være overfitting, men du kan også 890 00:52:59,400 --> 00:53:03,390 redegjøre for dette med andre teknikker som kryss-validering. 891 00:53:03,390 --> 00:53:06,180 Og disse er også bygget inn R. 892 00:53:06,180 --> 00:53:09,170 >> Og la meg bare vise deg støtte vektor maskin. 893 00:53:09,170 --> 00:53:12,470 Dette er en annen veldig vanlig teknikk i maskinlæring. 894 00:53:12,470 --> 00:53:18,550 Det er svært lik den lineære modeller, men den bruker det som kalles en kernel-metoden. 895 00:53:18,550 --> 00:53:22,790 Og la oss se hvor godt det gjør. 896 00:53:22,790 --> 00:53:26,430 Så dette er veldig lik hvordan vel et nettverk utfører, 897 00:53:26,430 --> 00:53:27,900 men det er mye mer jevnere. 898 00:53:27,900 --> 00:53:35,740 Og dette er basert off av what-- hvordan SVMer arbeid. 899 00:53:35,740 --> 00:53:40,250 >> Så dette er bare en veldig rask oversikt over noen 900 00:53:40,250 --> 00:53:43,822 av de innebygde funksjoner kan du gjøre og også noen av de data leting. 901 00:53:43,822 --> 00:53:45,905 Så la meg bare gå videre og gå tilbake til lysbildene. 902 00:53:45,905 --> 00:53:50,290 903 00:53:50,290 --> 00:53:53,670 >> Så åpenbart, er dette ikke veldig omfattende. 904 00:53:53,670 --> 00:53:57,140 Og dette er egentlig bare en teaser viser deg hva du egentlig kan gjøre i R. 905 00:53:57,140 --> 00:53:59,100 Så hvis du hadde akkurat som for å lære mer, her 906 00:53:59,100 --> 00:54:01,210 er en haug med ulike ressurser. 907 00:54:01,210 --> 00:54:06,890 >> Så hvis du er glad i lærebøker eller du er bare glad i å lese ting på nettet, 908 00:54:06,890 --> 00:54:09,670 så dette er en fantastisk ett av Hadley Wickham, 909 00:54:09,670 --> 00:54:13,010 som også skapte alle disse virkelig kule pakker. 910 00:54:13,010 --> 00:54:17,420 Hvis du er glad i videoer, deretter Berkeley har en fantastisk bootcamp 911 00:54:17,420 --> 00:54:21,060 det er several-- det er slags lang. 912 00:54:21,060 --> 00:54:24,210 Og det vil lære deg nesten alt du ønsker å vite om R. 913 00:54:24,210 --> 00:54:27,770 >> Og på samme måte, det er Codeacademy og alle disse andre slags 914 00:54:27,770 --> 00:54:29,414 av interaktive nettsteder. 915 00:54:29,414 --> 00:54:31,580 De er også å få common-- mer og mer vanlig. 916 00:54:31,580 --> 00:54:33,749 Så dette er veldig lik Codeacademy. 917 00:54:33,749 --> 00:54:35,790 Og til slutt, hvis du bare ønsker fellesskap og hjelpe, 918 00:54:35,790 --> 00:54:38,800 disse er en haug med ting du kan gå til. 919 00:54:38,800 --> 00:54:40,880 Selvfølgelig, vi fortsatt bruke e-postlister, bare 920 00:54:40,880 --> 00:54:44,860 som nesten alle andre programmeringsspråk samfunnet. 921 00:54:44,860 --> 00:54:47,880 Og #rstats, er dette samfunnet vårt Twitter. 922 00:54:47,880 --> 00:54:49,580 Det er faktisk ganske vanlig. 923 00:54:49,580 --> 00:54:50,850 Og så bruker! 924 00:54:50,850 --> 00:54:52,340 Er bare vår konferanse. 925 00:54:52,340 --> 00:54:55,390 >> Og så, selvfølgelig, kan du bruke alle disse andre Q & A ting, 926 00:54:55,390 --> 00:54:57,680 som Stack Overflow, Google, og deretter GitHub. 927 00:54:57,680 --> 00:55:00,490 Fordi de fleste av disse pakkene og mye av samfunnet 928 00:55:00,490 --> 00:55:03,420 vil være sentrert rundt utvikle kode fordi det er åpen kildekode. 929 00:55:03,420 --> 00:55:05,856 Og det er bare veldig hyggelig på GitHub. 930 00:55:05,856 --> 00:55:08,730 Og til slutt, kan du kontakte meg hvis du bare har noen raske spørsmål. 931 00:55:08,730 --> 00:55:13,530 Så du kan finne meg på Twitter her, hjemmesiden min, og bare min e-post. 932 00:55:13,530 --> 00:55:17,840 Så forhåpentligvis, som var something-- bare en kort teaser 933 00:55:17,840 --> 00:55:20,900 av hva R er virkelig i stand til å gjøre. 934 00:55:20,900 --> 00:55:23,990 Og forhåpentligvis, du bare sjekk ut disse tre lenker 935 00:55:23,990 --> 00:55:25,760 og se hva du kan gjøre mer. 936 00:55:25,760 --> 00:55:28,130 Og jeg antar det er bare om det. 937 00:55:28,130 --> 00:55:28,630 Takk. 938 00:55:28,630 --> 00:55:30,780 >> [APPLAUSE] 939 00:55:30,780 --> 00:55:31,968