1 00:00:00,000 --> 00:00:00,750 2 00:00:00,750 --> 00:00:09,800 >> [Musik spiller] 3 00:00:09,800 --> 00:00:13,014 4 00:00:13,014 --> 00:00:13,680 DUSTIN TRAN: Hej. 5 00:00:13,680 --> 00:00:14,980 Mit navn er Dustin. 6 00:00:14,980 --> 00:00:18,419 Så jeg vil præsentere Dataanalyse i R. 7 00:00:18,419 --> 00:00:19,710 Bare en lille smule om mig selv. 8 00:00:19,710 --> 00:00:24,320 Jeg er i øjeblikket en ph.d.-studerende i den tekniske og Applied Sciences. 9 00:00:24,320 --> 00:00:28,330 Jeg studerer et skæringspunkt for machine learning og statistik 10 00:00:28,330 --> 00:00:31,375 så Dataanalyse i R er virkelig grundlæggende for hvad 11 00:00:31,375 --> 00:00:33,790 Jeg gør på daglig basis. 12 00:00:33,790 --> 00:00:35,710 >> Og R er især god til dataanalyse 13 00:00:35,710 --> 00:00:39,310 fordi det er meget godt for prototyper. 14 00:00:39,310 --> 00:00:43,590 Og som regel, når du laver en slags dataanalyse, en masse af problemerne 15 00:00:43,590 --> 00:00:44,920 vil kognitive. 16 00:00:44,920 --> 00:00:48,700 Og så du bare vil have nogle virkelig gode sprog, 17 00:00:48,700 --> 00:00:53,770 er bare god til at gøre indbyggede funktioner, i modsætning 18 00:00:53,770 --> 00:00:57,430 at skulle beskæftige sig med lavt niveau ting. 19 00:00:57,430 --> 00:01:01,040 Så i starten, jeg bare at indføre, hvad der er R, hvorfor skulle 20 00:01:01,040 --> 00:01:04,540 du ønsker at bruge det, og derefter gå over i nogle 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å hvad er R? 23 00:01:08,150 --> 00:01:11,180 R er blot et sprog udviklet til statistisk databehandling 24 00:01:11,180 --> 00:01:12,450 og visualisering. 25 00:01:12,450 --> 00:01:16,000 Så hvad dette betyder, at det er en meget god sprog 26 00:01:16,000 --> 00:01:22,400 for nogen form for ting, der beskæftiger sig med usikkerhed eller datavisualisering. 27 00:01:22,400 --> 00:01:24,850 Så du har alle disse sandsynlighedsfordelinger. 28 00:01:24,850 --> 00:01:27,140 Der vil være indbyggede funktioner. 29 00:01:27,140 --> 00:01:31,650 Du har også fremragende plotte pakker. 30 00:01:31,650 --> 00:01:34,110 >> Python er en anden konkurrerende sprog for data. 31 00:01:34,110 --> 00:01:40,020 Og en ting, som jeg synes, at R er meget bedre til, er visualisering. 32 00:01:40,020 --> 00:01:45,200 Så hvad vil du se i demoen som godt er bare en meget intuitiv sprog 33 00:01:45,200 --> 00:01:48,050 der bare virker særdeles godt. 34 00:01:48,050 --> 00:01:53,140 Det er også gratis og open source, som er et andet godt sprog, jeg gætte. 35 00:01:53,140 --> 00:01:55,440 >> Og her, en flok bare søgeord kastet på dig. 36 00:01:55,440 --> 00:02:00,450 Det er dynamisk, hvilket betyder, hvis du har en specifik type tildelt et objekt 37 00:02:00,450 --> 00:02:02,025 end det vil bare ændre det i farten. 38 00:02:02,025 --> 00:02:05,670 Det er doven, så det er smart om hvordan den gør beregninger. 39 00:02:05,670 --> 00:02:12,250 Funktionel betyder at det kan virkelig fungere baseret ud af funktioner, så anything-- 40 00:02:12,250 --> 00:02:16,910 enhver form for manipulation, du er gør, vil den blive baseret ud funktioner. 41 00:02:16,910 --> 00:02:20,162 >> Så binære operatorer, f.eks er blot sagens natur funktioner. 42 00:02:20,162 --> 00:02:21,870 Og alt det, du kommer til at gøre, er 43 00:02:21,870 --> 00:02:24,690 vil blive kørt væk funktioner selv. 44 00:02:24,690 --> 00:02:27,140 Og så objektorienteret så godt. 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 kun fordi jeg har lyst til XKCD er grundlæggende for enhver slags 47 00:02:34,350 --> 00:02:37,770 for præsentation, men fordi Jeg har lyst til dette virkelig 48 00:02:37,770 --> 00:02:42,160 hamrer det punkt, at en stor del af tid, når du laver en slags data 49 00:02:42,160 --> 00:02:46,570 analyse, er problemet ikke så meget, hvor hurtigt det kører, 50 00:02:46,570 --> 00:02:49,850 men hvor lang tid det kommer til at tage dig at programmere opgaven. 51 00:02:49,850 --> 00:02:54,112 Så her er bare at analysere, om strategi på a eller b er mere effektiv. 52 00:02:54,112 --> 00:02:55,820 Dette vil være noget, som du er 53 00:02:55,820 --> 00:02:58,290 kommer til at beskæftige sig meget med i slags lav-niveau sprog 54 00:02:58,290 --> 00:03:03,440 hvor du beskæftiger sig med SEG fejl, hukommelse tildeling, startværdier, 55 00:03:03,440 --> 00:03:05,270 selv gør de indbyggede funktioner. 56 00:03:05,270 --> 00:03:09,920 Og det her er alle håndteret meget, meget elegant i R. 57 00:03:09,920 --> 00:03:12,839 >> Så bare at hamre dette punkt, den største flaskehals 58 00:03:12,839 --> 00:03:13,880 vil være kognitive. 59 00:03:13,880 --> 00:03:17,341 Så dataanalyse er en meget hård problem. 60 00:03:17,341 --> 00:03:19,340 Uanset om du gør maskine læring eller du er 61 00:03:19,340 --> 00:03:22,550 gør netop en slags grundlæggende udforskning data, 62 00:03:22,550 --> 00:03:25,290 du ikke ønsker at have at tage et dokument 63 00:03:25,290 --> 00:03:27,440 og derefter kompilere noget, hver gang du 64 00:03:27,440 --> 00:03:31,010 ønsker at se, hvad en kolonne ser ud, hvilke særlige poster i en matrix 65 00:03:31,010 --> 00:03:32,195 ser ud. 66 00:03:32,195 --> 00:03:34,320 Så du bare vil have nogle virkelig rart grænseflade 67 00:03:34,320 --> 00:03:37,740 kan du køre en simpel funktion at indekser til uanset 68 00:03:37,740 --> 00:03:41,870 du gerne vil og bare køre den derfra. 69 00:03:41,870 --> 00:03:44,190 Og du har brug for domæne specifikke sprog for dette. 70 00:03:44,190 --> 00:03:51,750 Og R vil virkelig hjælpe dig med at definere den problem og løse det på denne måde. 71 00:03:51,750 --> 00:03:58,690 >> Så her er et plot, der viser programmering popularitet af R som det er gået over tid. 72 00:03:58,690 --> 00:04:04,060 Så som du kan se, ligesom 2013 eller så det bare blæst op voldsomt. 73 00:04:04,060 --> 00:04:09,570 Og det har været netop på grund af det kæmpe trend i teknologibranchen 74 00:04:09,570 --> 00:04:10,590 om store data. 75 00:04:10,590 --> 00:04:13,010 Også ikke kun teknologien industri, men virkelig 76 00:04:13,010 --> 00:04:16,490 enhver industri at-- fordi en masse af industrier 77 00:04:16,490 --> 00:04:20,589 er slags grundlæggende for forsøger at løse disse problemer. 78 00:04:20,589 --> 00:04:24,590 Og som regel, kan du have nogle gode måde at måle disse problemer 79 00:04:24,590 --> 00:04:29,720 eller endda definere dem eller løse dem ved hjælp af data. 80 00:04:29,720 --> 00:04:35,430 Så jeg tror lige nu R er den 11. mest populære sprog på TIOBE 81 00:04:35,430 --> 00:04:38,200 og det har været stigende siden da. 82 00:04:38,200 --> 00:04:40,740 83 00:04:40,740 --> 00:04:43,080 >> Så her er nogle flere funktioner i R. Det har 84 00:04:43,080 --> 00:04:46,900 et enormt antal kolli og for alle disse forskellige ting. 85 00:04:46,900 --> 00:04:52,470 Så hver gang du har en bestemt problem, de fleste 86 00:04:52,470 --> 00:04:55,060 tiden R vil have denne funktion for dig. 87 00:04:55,060 --> 00:04:58,520 Så uanset om du ønsker at opbygge en slags maskine 88 00:04:58,520 --> 00:05:02,770 læring algoritme kaldet Random Forest eller Decision Trees, 89 00:05:02,770 --> 00:05:07,530 eller endog forsøger at tage gennemsnittet af en funktion eller en hvilken som helst af det her, 90 00:05:07,530 --> 00:05:10,000 R vil have det. 91 00:05:10,000 --> 00:05:14,190 >> Og hvis du gør, du holder af optimering, en ting, der er fælles 92 00:05:14,190 --> 00:05:17,430 er, at når du er færdig prototyping en slags højniveausprog, 93 00:05:17,430 --> 00:05:19,810 du vil smide det in-- Du vil bare port, at over 94 00:05:19,810 --> 00:05:21,550 til nogle lavniveau-sprog. 95 00:05:21,550 --> 00:05:26,090 Hvad er godt ved R er, at når du er gjort prototyping det, kan du køre C ++, 96 00:05:26,090 --> 00:05:29,510 eller Fortran, eller nogen af ​​disse lavere niveau dem direkte ind i R. 97 00:05:29,510 --> 00:05:32,320 Så det er en rigtig cool funktion om R, 98 00:05:32,320 --> 00:05:35,930 hvis du virkelig bekymrer sig om optimering punkt. 99 00:05:35,930 --> 00:05:39,490 >> Og det er også rigtig god for web visualiseringer. 100 00:05:39,490 --> 00:05:43,530 Så D3.js, for eksempel, er Jeg gætter andet seminar 101 00:05:43,530 --> 00:05:45,130 at vi præsenterede i dag. 102 00:05:45,130 --> 00:05:48,510 Og det er virkelig fantastisk for laver interaktive visualiseringer. 103 00:05:48,510 --> 00:05:54,460 Og D3.js forudsætter, at du har en slags data, der skal plottes 104 00:05:54,460 --> 00:05:58,080 og R er en fantastisk måde at være i stand til at gøre dataanalyse, før du eksporterer den 105 00:05:58,080 --> 00:06:04,220 over til D3.js eller bare køre D3.js kommandoer i R selv, 106 00:06:04,220 --> 00:06:08,240 samt alle disse andre biblioteker samt. 107 00:06:08,240 --> 00:06:13,041 >> Så det var bare at indførelsen af hvad er R, og hvorfor du måske bruge det. 108 00:06:13,041 --> 00:06:14,790 Så forhåbentlig, jeg har overbevist dig noget 109 00:06:14,790 --> 00:06:18,460 om prøver bare at se, hvad det er ligesom. 110 00:06:18,460 --> 00:06:23,930 Så jeg har tænkt mig at gå videre og gå igennem nogle grundlæggende om R objekter 111 00:06:23,930 --> 00:06:26,150 og hvad du virkelig kan gøre. 112 00:06:26,150 --> 00:06:29,690 >> Så her er blot en flok matematiske kommandoer. 113 00:06:29,690 --> 00:06:35,000 Så siger you're-- du ønsker at opbygge sprog dig selv og du bare vil 114 00:06:35,000 --> 00:06:38,080 at have en masse forskellige værktøjer. 115 00:06:38,080 --> 00:06:42,520 Enhver form for operation, du tror, ​​du gerne ønsker, er temmelig meget vil være i R. 116 00:06:42,520 --> 00:06:44,150 >> Så her er 2 plus 2. 117 00:06:44,150 --> 00:06:46,090 Her er 2 gange pi. 118 00:06:46,090 --> 00:06:51,870 R har en flok indbyggede konstanter at du ofte vil bruge som pi, e. 119 00:06:51,870 --> 00:06:56,230 >> Og så, her er 7 plus runif, så runif 1. 120 00:06:56,230 --> 00:07:02,450 Dette er en funktion, der er genererer en tilfældig ensartet fra 0 til 1. 121 00:07:02,450 --> 00:07:04,400 Og så er der 3 til potensen af ​​4. 122 00:07:04,400 --> 00:07:06,430 Der er kvadratrødder. 123 00:07:06,430 --> 00:07:07,270 >> Der er log. 124 00:07:07,270 --> 00:07:14,500 Så log vil gøre basen eksponentiel af sig selv. 125 00:07:14,500 --> 00:07:18,337 Og så, hvis du angiver en base, så du kan gøre hvad basen, du ønsker. 126 00:07:18,337 --> 00:07:19,920 Og så er her nogle 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 Så har du resten. 129 00:07:24,910 --> 00:07:27,110 Så har du videnskabelig notation, hvis du også 130 00:07:27,110 --> 00:07:34,060 ønsker at gøre bare mere og mere komplicerede ting. 131 00:07:34,060 --> 00:07:37,320 >> Så her er opgaven. 132 00:07:37,320 --> 00:07:40,830 Så typiske opgaver i R er udført med en pil 133 00:07:40,830 --> 00:07:43,440 så det er mindre end og derefter bindestreg. 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å er jeg udskrivning ud val og så er det udskrives tre. 136 00:07:50,160 --> 00:07:53,920 Som standard i R tolk, det vil udskrive tingene ud for dig 137 00:07:53,920 --> 00:07:57,280 så du ikke behøver at angive udskrive en val enhver tid, du ønsker at udskrive noget. 138 00:07:57,280 --> 00:08:00,200 Du kan bare gøre val og så det vil gøre det for dig. 139 00:08:00,200 --> 00:08:04,380 >> Du kan også bruge lig teknisk som en opgave operatør. 140 00:08:04,380 --> 00:08:07,190 Der er små finesser mellem at bruge pilen 141 00:08:07,190 --> 00:08:10,730 operatør og lighedstegnet operatør for opgaver. 142 00:08:10,730 --> 00:08:15,470 Mest af konvention, alle vil bare bruge pilen operatør. 143 00:08:15,470 --> 00:08:21,850 >> Og her, jeg tildele denne skrå notation kaldes 1 colon 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 det er virkelig rart, fordi så du lige tildele vektoren val 146 00:08:29,350 --> 00:08:34,270 og der virker af sig selv. 147 00:08:34,270 --> 00:08:37,799 >> Så dette er allerede går fra en single-- en meget intuitiv data 148 00:08:37,799 --> 00:08:41,070 struktur blot en dobbelt af nogle type af typen i en vektor 149 00:08:41,070 --> 00:08:45,670 og som vil samle alle de skalare værdier for dig. 150 00:08:45,670 --> 00:08:50,770 Så efter at gå fra skalar, du har R objekter, og dette er en vektor. 151 00:08:50,770 --> 00:08:55,610 En vektor er en hvilken som helst slags indsamling af samme type. 152 00:08:55,610 --> 00:08:58,150 Så her er en flok 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åde at sige dobbelt. 155 00:09:02,440 --> 00:09:07,390 Og så som standard, enhver nummer vil være en dobbelt. 156 00:09:07,390 --> 00:09:13,150 >> Så hvis du har C på 1,1, 3, negativ 5,7, c er en funktion. 157 00:09:13,150 --> 00:09:16,760 Dette sammenkæder alle tre numre i en vektor. 158 00:09:16,760 --> 00:09:19,619 Og det vil være-- så hvis du bemærker 3 af sig selv, 159 00:09:19,619 --> 00:09:21,910 normalt du ville påtage sig at dette er ligesom et heltal, 160 00:09:21,910 --> 00:09:25,050 men fordi alle vektorer er af samme type, 161 00:09:25,050 --> 00:09:28,660 dette er en vektor af double eller numerisk i dette tilfælde. 162 00:09:28,660 --> 00:09:34,920 >> rnorm er en funktion, der genererer standard normal variables-- 163 00:09:34,920 --> 00:09:36,700 eller standard normale værdier. 164 00:09:36,700 --> 00:09:38,360 Og jeg angive to af dem. 165 00:09:38,360 --> 00:09:43,840 Så jeg gør rnorm 2, tildele det til udviklere, og så er jeg udskrive udviklere. 166 00:09:43,840 --> 00:09:47,350 Så disse er blot to tilfældige normale værdier. 167 00:09:47,350 --> 00:09:50,060 >> Og så int'er hvis du gør du holder af heltal. 168 00:09:50,060 --> 00:09:54,650 Så det er bare om hukommelse allokering og spare hukommelse. 169 00:09:54,650 --> 00:10:01,460 Så du ville have til at tilføje dine tal fra hovedstaden L. 170 00:10:01,460 --> 00:10:04,170 >> Generelt er det R historiske notation 171 00:10:04,170 --> 00:10:06,940 for noget, der hedder lang heltal. 172 00:10:06,940 --> 00:10:09,880 Så det meste af tiden, vil du beskæftige sig med double. 173 00:10:09,880 --> 00:10:15,180 Og hvis du nogensinde vil senere på at optimere din kode, 174 00:10:15,180 --> 00:10:18,110 du kan bare tilføje disse L's bagefter eller under det 175 00:10:18,110 --> 00:10:22,280 hvis du ligesom precognitive hvad du kommer til at gøre disse variabler. 176 00:10:22,280 --> 00:10:25,340 177 00:10:25,340 --> 00:10:26,890 >> Så her er en vektor karakter. 178 00:10:26,890 --> 00:10:31,440 Så igen, jeg sammenkæde tre strygere denne gang. 179 00:10:31,440 --> 00:10:36,230 Bemærk at dobbelt strygere og enkelt strenge er det samme i R. 180 00:10:36,230 --> 00:10:41,000 Så jeg har Arthur og Marvin 's og så når jeg printe det ud, alle af dem 181 00:10:41,000 --> 00:10:43,210 vil vise dobbelte strenge. 182 00:10:43,210 --> 00:10:45,880 Og hvis du også ønsker at inkludere dobbelt eller enkelt streng 183 00:10:45,880 --> 00:10:50,070 i dine karakterer, så kan du enten veksle dine strenge. 184 00:10:50,070 --> 00:10:53,540 >> Så Marvin for andet element, er det 185 00:10:53,540 --> 00:10:56,380 vil show-- dig bare har dobbelt strenge 186 00:10:56,380 --> 00:10:59,050 og derefter en enkelt streng så dette er alternerende. 187 00:10:59,050 --> 00:11:04,040 Ellers, hvis du ønsker at bruge en dobbelt string operatør i en dobbelt snor 188 00:11:04,040 --> 00:11:07,090 når du erklære det, så du bare bruge escape operatør. 189 00:11:07,090 --> 00:11:10,600 Så du gør det backslash dobbelt snor. 190 00:11:10,600 --> 00:11:13,330 >> Og endelig har vi også har logiske vektorer. 191 00:11:13,330 --> 00:11:15,890 Så logical-- så sandt og FALSK, og de er 192 00:11:15,890 --> 00:11:18,880 vil være store bogstaver. 193 00:11:18,880 --> 00:11:22,370 Og så igen, jeg sammenkæde dem og derefter tildele dem til bools. 194 00:11:22,370 --> 00:11:24,590 Så bools vil vise du SAND, FALSK, og SAND. 195 00:11:24,590 --> 00:11:28,280 196 00:11:28,280 --> 00:11:31,620 >> Så her er vektoriseret indeksering. 197 00:11:31,620 --> 00:11:34,870 Så i starten, jeg Jeg tager en function-- 198 00:11:34,870 --> 00:11:39,230 dette kaldes en sequence-- sekvens fra 2 til 12. 199 00:11:39,230 --> 00:11:42,490 Og jeg tager en sekvens med 2. 200 00:11:42,490 --> 00:11:46,660 Så det kommer til at gøre 2, 4, 6, 8, 10 og 12. 201 00:11:46,660 --> 00:11:50,080 Og så er jeg indeksering at få det tredje element. 202 00:11:50,080 --> 00:11:55,770 >> Så én ting at huske på er at R indekser ved at starte fra 1. 203 00:11:55,770 --> 00:12:00,550 Så vals 3 vil give du det tredje element. 204 00:12:00,550 --> 00:12:04,580 Dette er slags forskellig fra andre sprog, hvor det starter fra nul. 205 00:12:04,580 --> 00:12:09,780 Så i C eller C ++, for eksempel, er du kommer til at få det fjerde element. 206 00:12:09,780 --> 00:12:13,280 >> Og her er vals 3.-5. 207 00:12:13,280 --> 00:12:16,030 Så en ting, der er virkelig cool er, at du 208 00:12:16,030 --> 00:12:20,410 kan generere midlertidige variabler inde og så bare bruge dem på flue. 209 00:12:20,410 --> 00:12:21,960 Så her er på 3 til 5. 210 00:12:21,960 --> 00:12:25,070 Så jeg genererer en vektor 3, 4 og 5 og derefter 211 00:12:25,070 --> 00:12:29,700 Jeg indeksere at få den tredje, fjerde, og femte elementer. 212 00:12:29,700 --> 00:12:32,280 >> Så samme måde kan du abstrakt dette til bare gøre 213 00:12:32,280 --> 00:12:35,280 nogen form for en vektor der giver dig indeksering. 214 00:12:35,280 --> 00:12:40,050 Så her er vals og derefter første, tredje og sjette elementer. 215 00:12:40,050 --> 00:12:42,800 Og så, hvis du vil at gøre et supplement, 216 00:12:42,800 --> 00:12:45,210 så du bare gøre det minus bagefter og der vil 217 00:12:45,210 --> 00:12:48,600 giver dig alt det er ikke det første, tredje eller sjette element. 218 00:12:48,600 --> 00:12:51,590 Så dette vil være 4, 8 og 10. 219 00:12:51,590 --> 00:12:54,380 >> Og hvis du ønsker at få endnu mere avanceret, 220 00:12:54,380 --> 00:12:57,610 du kan sammenkæde booleske vektorer. 221 00:12:57,610 --> 00:13:05,210 Så dette indeks vil give dig denne Boolean vektor af længde 6. 222 00:13:05,210 --> 00:13:07,280 Så rep TRUE komma 3. 223 00:13:07,280 --> 00:13:09,680 Dette vil gentage TRUE tre gange. 224 00:13:09,680 --> 00:13:12,900 Så dette vil give dig en vektor SAND, SAND, SAND. 225 00:13:12,900 --> 00:13:17,470 >> rep FALSK 4-- dette vil give dig en vektor af falsk, falsk, falsk, falsk. 226 00:13:17,470 --> 00:13:21,280 Og så c kommer til at sammenkæde disse to Booleans sammen. 227 00:13:21,280 --> 00:13:24,090 Så du kommer til at få tre TRUEs og derefter fire FALSEs. 228 00:13:24,090 --> 00:13:28,460 >> Så når du indeks vals, er du kommer til at få den sande, SAND, SAND. 229 00:13:28,460 --> 00:13:31,420 Så det kommer til at sige ja, Jeg vil have disse tre elementer. 230 00:13:31,420 --> 00:13:33,520 Og så falsk, falsk, Falsk, falsk går 231 00:13:33,520 --> 00:13:37,140 at sige nej, jeg vil ikke have de elementer så det kommer ikke til at returnere dem. 232 00:13:37,140 --> 00:13:41,490 >> Og jeg tror der er faktisk en tastefejl her fordi det siger gentag TRUE 3 233 00:13:41,490 --> 00:13:47,990 og igen og igen, 4, og teknisk set, du kun har seks elementer så gentag FALSK, 234 00:13:47,990 --> 00:13:50,470 det bør være igen og igen, 3. 235 00:13:50,470 --> 00:13:55,260 Jeg tror R er også smart nok sådan at hvis du bare angive 4 her, og 236 00:13:55,260 --> 00:13:56,630 Det vil ikke engang fejl ud. 237 00:13:56,630 --> 00:13:58,480 Det vil bare give dig denne værdi. 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 vektoriseret opgave. 241 00:14:09,270 --> 00:14:15,480 Så set.seed-- det bare sætter frø til pseudotilfældige numre. 242 00:14:15,480 --> 00:14:20,110 Så jeg sætte frø til 42, hvilket betyder, at hvis jeg generere 243 00:14:20,110 --> 00:14:22,950 tre tilfældige normale værdier, og derefter, hvis du 244 00:14:22,950 --> 00:14:27,400 køre set.seed på din egen computer ved hjælp af samme værdi 42, 245 00:14:27,400 --> 00:14:30,990 så får du også den samme tre tilfældige normale. 246 00:14:30,990 --> 00:14:33,411 >> Så dette er virkelig god for reproducerbarhed. 247 00:14:33,411 --> 00:14:35,910 Normalt, når du laver nogle slags videnskabelig analyse, 248 00:14:35,910 --> 00:14:37,230 du ønsker at sætte frø. 249 00:14:37,230 --> 00:14:41,270 På den måde andre forskere kan bare reproducere nøjagtig samme kode, du har 250 00:14:41,270 --> 00:14:44,790 gjort, fordi de vil have den nøjagtige samme stokastiske variable at-- eller tilfældig 251 00:14:44,790 --> 00:14:47,270 værdier, som du har taget ud samt. 252 00:14:47,270 --> 00:14:49,870 253 00:14:49,870 --> 00:14:53,910 >> Og så vektoriseret opgave her viser de Vals 1 til 2. 254 00:14:53,910 --> 00:14:59,290 Så det tager de første to elementer for Vals og derefter tildeler dem til 0. 255 00:14:59,290 --> 00:15:03,940 Og så kan du også bare gøre det lignende ting med Booleans. 256 00:15:03,940 --> 00:15:09,340 >> Så vals er ikke lig med 0-- denne vilje give dig en vektor FALSK, FALSK, SAND 257 00:15:09,340 --> 00:15:10,350 i dette tilfælde. 258 00:15:10,350 --> 00:15:13,770 Og så, det vil sige enhver af disse indekser, der var sandt, 259 00:15:13,770 --> 00:15:15,270 så det kommer til at tildele den pågældende til 5. 260 00:15:15,270 --> 00:15:18,790 Så det tager det tredje element her og derefter tildeler den til 5. 261 00:15:18,790 --> 00:15:22,300 >> Og det er virkelig rart i forhold til lav-niveau sprog 262 00:15:22,300 --> 00:15:25,560 hvor du skal bruge til sløjfer at gøre alt dette vektoriseret ting 263 00:15:25,560 --> 00:15:30,281 fordi det er bare meget intuitiv og det er en enkelt one-liner. 264 00:15:30,281 --> 00:15:32,030 Og hvad er stor om vektoriseret notation 265 00:15:32,030 --> 00:15:37,020 er, at i R, er disse slags indbygget, så de er næsten lige så hurtigt 266 00:15:37,020 --> 00:15:42,490 som gør i et lavt niveau sprog som modsætning til at gøre en for-løkke i R 267 00:15:42,490 --> 00:15:46,317 og derefter have det til at gøre den dynamiske indeksering selv. 268 00:15:46,317 --> 00:15:48,900 Og der vil være langsommere end at gøre denne slags vektoriseret ting 269 00:15:48,900 --> 00:15:55,950 hvor det kan gøre det i parallel, hvor det gør det i gevindskæring dybest set. 270 00:15:55,950 --> 00:15:58,650 >> Så her er vektoriseret operationer. 271 00:15:58,650 --> 00:16:04,920 Så jeg generere en værdi 1 til 3, tildele det til vec1, 3 og 5, vec2, 272 00:16:04,920 --> 00:16:05,950 at tilføje dem sammen. 273 00:16:05,950 --> 00:16:11,490 Den tilføjer dem komponent-wise, så det er 1 plus 3, 2 plus 4, og så videre. 274 00:16:11,490 --> 00:16:13,330 >> vec1 gange vec2. 275 00:16:13,330 --> 00:16:16,110 Dette multiplicerer to værdier komponent klogt. 276 00:16:16,110 --> 00:16:21,830 Så det er 1 gange 3, 2 gange 4, og derefter 3 gange 5. 277 00:16:21,830 --> 00:16:28,250 >> Og så, på samme måde kan du også gøre comparisons-- logiske sammenligninger. 278 00:16:28,250 --> 00:16:33,640 Så det er FALSK FALSK SAND i dette tilfælde, fordi 1 ikke er større end 3, 279 00:16:33,640 --> 00:16:35,920 2 ikke er større end 4. 280 00:16:35,920 --> 00:16:41,160 Det er, tror jeg, en anden tastefejl, 3 er absolut ikke større end 5. 281 00:16:41,160 --> 00:16:41,660 Ja. 282 00:16:41,660 --> 00:16:45,770 Og så kan du bare gøre alt disse enkle operationer 283 00:16:45,770 --> 00:16:48,350 fordi deres arvet fra klasserne 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 slags af de mest grundlæggende R objekt, fordi givet en vektor, 287 00:16:56,530 --> 00:16:59,170 du kan konstruere mere avancerede objekter. 288 00:16:59,170 --> 00:17:00,560 >> Så her er en matrix. 289 00:17:00,560 --> 00:17:05,030 Dette er hovedsagelig indvinding af, hvad en matrix er selv. 290 00:17:05,030 --> 00:17:10,099 Så i dette tilfælde er det tre forskellige vektorer, hvor hver enkelt er en kolonne, 291 00:17:10,099 --> 00:17:12,710 eller du kan overveje det som hver enkelt er en række. 292 00:17:12,710 --> 00:17:18,250 >> Så jeg lagring af en matrix fra 1 til 9 og så er jeg angive 3 rækker. 293 00:17:18,250 --> 00:17:23,364 Så 1 til 9 vil give dig en vektor 1, 2, 3, 4, 5, 6, og hele vejen til 9. 294 00:17:23,364 --> 00:17:29,250 >> En ting at også huske på er, at R gemmer værdierne i kolonne-dur format. 295 00:17:29,250 --> 00:17:34,160 Så med andre ord, når du ser 1 til 9, det vil gemme them-- 296 00:17:34,160 --> 00:17:36,370 det vil være 1, 2, 3 i den første kolonne, 297 00:17:36,370 --> 00:17:38,510 og så det vil gøre 4, 5, 6 i anden kolonne 298 00:17:38,510 --> 00:17:41,440 og derefter 7, 8, 9 i tredje kolonne. 299 00:17:41,440 --> 00:17:45,570 >> Og her er nogle andre fælles funktioner, du kan bruge. 300 00:17:45,570 --> 00:17:49,650 Så dim mat, vil dette give dig dimensionerne af matricen. 301 00:17:49,650 --> 00:17:52,620 Det kommer til at returnere dig en vektor dimension. 302 00:17:52,620 --> 00:17:55,580 Så i dette tilfælde, fordi vores matrix er 3 med 3, 303 00:17:55,580 --> 00:18:01,900 det kommer til at give dig en numerisk vektor, der er 3 3. 304 00:18:01,900 --> 00:18:05,270 >> Og her er bare viser matrixmultiplikation. 305 00:18:05,270 --> 00:18:11,970 Så normalt, hvis du bare gøre asterisk-- så mat stjerne mat-- 306 00:18:11,970 --> 00:18:15,380 dette vil være komponent-wise operation 307 00:18:15,380 --> 00:18:17,300 eller hvad hedder det Hadamard produkt. 308 00:18:17,300 --> 00:18:21,310 Så det kommer til at gøre hver element komponent-wise. 309 00:18:21,310 --> 00:18:23,610 Men hvis du vil matrix multiplication-- 310 00:18:23,610 --> 00:18:29,380 så at gange den første række gange den anden matrix første kolonne 311 00:18:29,380 --> 00:18:34,510 og så on-- du ville bruge denne procent operation. 312 00:18:34,510 --> 00:18:38,110 >> Og t måtten er blot en operation for transponering. 313 00:18:38,110 --> 00:18:42,590 Så jeg siger tage Transpose i matricen, ganges med matricen 314 00:18:42,590 --> 00:18:43,090 selv. 315 00:18:43,090 --> 00:18:45,006 Og så det kommer til at tilbage til dig en anden 3 316 00:18:45,006 --> 00:18:50,700 med 3 matrix viser det produkt, du gerne vil. 317 00:18:50,700 --> 00:18:53,750 >> Og så var matrix. 318 00:18:53,750 --> 00:18:56,020 Her er hvad der kaldes en data frame. 319 00:18:56,020 --> 00:19:00,780 En data ramme, du kan tænke på som en matrix, men hver kolonne selv 320 00:19:00,780 --> 00:19:02,990 vil være af en anden type. 321 00:19:02,990 --> 00:19:07,320 >> Så hvad er virkelig cool om data rammer er, at i dataanalyse selv, 322 00:19:07,320 --> 00:19:11,260 du kommer til at have alt dette heterogene data og alle disse virkelig 323 00:19:11,260 --> 00:19:15,640 rodet ting hvor hver af kolonnerne selv kan være af forskellige typer. 324 00:19:15,640 --> 00:19:21,460 Så her jeg siger skabe en dataramme, gør int'er fra 1 til 3, 325 00:19:21,460 --> 00:19:24,750 og derefter også en vektor karakter. 326 00:19:24,750 --> 00:19:28,470 Så jeg kan indeksere gennem hver af disse kolonner 327 00:19:28,470 --> 00:19:30,930 og så vil jeg få værdierne selv. 328 00:19:30,930 --> 00:19:34,370 Og du kan også gøre en slags af operationer på data frames. 329 00:19:34,370 --> 00:19:38,040 Og det meste af tiden, når du er gør dataanalyse eller en slags 330 00:19:38,040 --> 00:19:42,042 af forbehandling, vil du være arbejde med disse datastrukturer 331 00:19:42,042 --> 00:19:44,250 hvor hver kolonne går at være af en anden type. 332 00:19:44,250 --> 00:19:47,880 333 00:19:47,880 --> 00:19:52,970 >> Endelig så disse er i bund de fire væsentlige objekter i R. List 334 00:19:52,970 --> 00:19:55,820 vil bare indsamle nogen andre objekter, du ønsker. 335 00:19:55,820 --> 00:20:00,130 Så det vil lagre dette i en variabel, som du nemt kan få adgang til. 336 00:20:00,130 --> 00:20:02,370 >> Så her, jeg tager en liste. 337 00:20:02,370 --> 00:20:04,460 Jeg siger ting lig med 3. 338 00:20:04,460 --> 00:20:08,060 Så jeg har tænkt mig at have et element i listen, og dette kaldes ting, 339 00:20:08,060 --> 00:20:10,570 og det kommer til at have værdien 3. 340 00:20:10,570 --> 00:20:13,140 >> Jeg kan også oprette en matrix. 341 00:20:13,140 --> 00:20:17,970 Så det er 1 til 4 og slutrække er lig med 2, så en 2 af 2 matrix. 342 00:20:17,970 --> 00:20:20,270 Også på listen, og det hedder mat. 343 00:20:20,270 --> 00:20:24,690 moreStuff, en tekststreng, og endda en anden liste i sig selv. 344 00:20:24,690 --> 00:20:27,710 >> Så dette er en liste, der er 5 og bjørn. 345 00:20:27,710 --> 00:20:30,990 Så det har værdien 5, og det har tegnstreng bjørn 346 00:20:30,990 --> 00:20:32,710 og det er en liste i en liste. 347 00:20:32,710 --> 00:20:35,965 Så du kan få disse rekursive ting, hvor 348 00:20:35,965 --> 00:20:38,230 du har another-- a skrive af typen. 349 00:20:38,230 --> 00:20:41,420 Så på samme måde, kan du have en matrix inde i en anden matrix og så videre. 350 00:20:41,420 --> 00:20:44,264 Og en liste er bare en god måde indsamle og aggregere 351 00:20:44,264 --> 00:20:45,430 alle disse forskellige objekter. 352 00:20:45,430 --> 00:20:50,210 353 00:20:50,210 --> 00:20:57,150 >> Og endelig, her blot hjælpe i tilfælde Dette var blot gået over meget hurtigt. 354 00:20:57,150 --> 00:21:01,350 Så når du er forvirret om en slags funktion, 355 00:21:01,350 --> 00:21:03,510 kan du gøre ved hjælp af denne funktion. 356 00:21:03,510 --> 00:21:07,120 Så du kan gøre for hjælp matrix eller et spørgsmålstegn matrix. 357 00:21:07,120 --> 00:21:11,430 Og hjælp og spørgsmålstegnet er bare forkortelse for det samme 358 00:21:11,430 --> 00:21:13,040 så de er aliaser. 359 00:21:13,040 --> 00:21:16,820 >> LM er en funktion, bare gør en lineær model. 360 00:21:16,820 --> 00:21:20,340 Men hvis du bare har ingen idé om, hvordan det værker, kan du bare gøre hjælp af lm 361 00:21:20,340 --> 00:21:24,610 og der vil give dig nogle slags dokumentation, 362 00:21:24,610 --> 00:21:27,960 ser lidt ligesom en mand side i Unix, hvor 363 00:21:27,960 --> 00:21:34,210 du har en kort beskrivelse af, hvad det gør, også hvad dens argumenter er, 364 00:21:34,210 --> 00:21:38,850 hvad den returnerer, og kun tips til, hvordan at bruge det, og nogle eksempler så godt. 365 00:21:38,850 --> 00:21:41,680 366 00:21:41,680 --> 00:21:52,890 >> Så lad mig gå videre og show nogle demo af at bruge R. OK. 367 00:21:52,890 --> 00:21:55,470 Så jeg gik over meget hurtigt bare data 368 00:21:55,470 --> 00:21:59,440 strukturer og nogle slags af op-- nogle af operationerne. 369 00:21:59,440 --> 00:22:02,960 Her er nogle funktioner. 370 00:22:02,960 --> 00:22:06,750 >> Så her jeg bare at definere en funktion. 371 00:22:06,750 --> 00:22:09,970 Så jeg også bruger tildelingsoperator her, 372 00:22:09,970 --> 00:22:12,610 og så siger jeg erklære den som en funktion. 373 00:22:12,610 --> 00:22:14,140 Og det tager den x-værdi. 374 00:22:14,140 --> 00:22:18,210 Så dette er en hvilken som helst værdi, du vil og jeg har tænkt mig at vende tilbage x selv. 375 00:22:18,210 --> 00:22:20,840 Så det er identiteten funktion. 376 00:22:20,840 --> 00:22:23,670 >> Og hvad er cool om dette i forhold til andre sprog 377 00:22:23,670 --> 00:22:26,330 og et andet lavt niveau sprog er, at X 378 00:22:26,330 --> 00:22:29,350 kan være af enhver type i sig selv og det vil vende tilbage denne type. 379 00:22:29,350 --> 00:22:35,251 Så du kan imagine-- så lad mig bare køre dette hurtigt. 380 00:22:35,251 --> 00:22:35,750 Undskyld. 381 00:22:35,750 --> 00:22:40,300 >> Så én ting, jeg bør også nævne er, at denne editor jeg bruger 382 00:22:40,300 --> 00:22:41,380 kaldes rstudio. 383 00:22:41,380 --> 00:22:44,389 Dette er, hvad der kaldes en IDE. 384 00:22:44,389 --> 00:22:46,180 Og én ting, der er virkelig nice om dette 385 00:22:46,180 --> 00:22:51,500 er, at det indeholder en masse af ting, du ønsker at gøre i R af sig selv 386 00:22:51,500 --> 00:22:53,180 lige meget intuitivt. 387 00:22:53,180 --> 00:22:55,550 >> Så her er en tolk konsol. 388 00:22:55,550 --> 00:23:02,160 Så på samme måde, kan du også få denne konsol rå bare ved at gøre et stort R. 389 00:23:02,160 --> 00:23:05,630 Og det er præcis den samme som konsollen. 390 00:23:05,630 --> 00:23:12,210 Så jeg kan bare gøre id-funktion x, x, x. 391 00:23:12,210 --> 00:23:16,130 Og then-- og derefter at vil være fint i sig selv. 392 00:23:16,130 --> 00:23:19,200 393 00:23:19,200 --> 00:23:21,740 >> Så rstudio er stor fordi det har konsollen. 394 00:23:21,740 --> 00:23:25,360 Det har også de dokumenter du gerne vil køre på. 395 00:23:25,360 --> 00:23:28,629 Og så det har nogle variabler at du kan se i miljøer. 396 00:23:28,629 --> 00:23:30,420 Og så, hvis du har at gøre plots, så er du 397 00:23:30,420 --> 00:23:33,730 kan kun se det her, i modsætning til forvalte alle disse forskellige vinduer 398 00:23:33,730 --> 00:23:35,940 af sig selv. 399 00:23:35,940 --> 00:23:40,530 >> Jeg faktisk personligt bruge Vim, men jeg lyst rstudio er fremragende bare 400 00:23:40,530 --> 00:23:44,640 for at få en god idé af, hvordan man bruger R. Normalt 401 00:23:44,640 --> 00:23:47,040 når du forsøger at lære nogle nye opgave, 402 00:23:47,040 --> 00:23:49,590 du ikke ønsker at håndtere alt for mange ting på én gang. 403 00:23:49,590 --> 00:23:53,120 Så R er blot en very-- rstudio er en meget god måde at lære R 404 00:23:53,120 --> 00:23:56,760 uden at skulle beskæftige sig med alle disse andre ting. 405 00:23:56,760 --> 00:23:58,600 >> Så her jeg kører id hej. 406 00:23:58,600 --> 00:24:00,090 Dette returnerer hej. 407 00:24:00,090 --> 00:24:01,740 id 123. 408 00:24:01,740 --> 00:24:04,610 Her er en vektor af heltal. 409 00:24:04,610 --> 00:24:08,620 Så på samme måde, fordi du kan træffe en slags værdi, 410 00:24:08,620 --> 00:24:16,060 du kan gøre returnere id X, så det returnerer 1234 og 5. 411 00:24:16,060 --> 00:24:22,210 >> Og lad mig lige vise dig, at dette er faktisk et heltal. 412 00:24:22,210 --> 00:24:28,800 Og på samme måde, hvis du gør klasse id x, går det at være heltal. 413 00:24:28,800 --> 00:24:34,170 Og så kan du også sammenligne de to, og det er sandt. 414 00:24:34,170 --> 00:24:38,350 Så jeg kontrollere, om id for x lig ligemænd x og varsel 415 00:24:38,350 --> 00:24:39,760 at det giver dig to TRUEs. 416 00:24:39,760 --> 00:24:44,280 Så dette er ikke at sige, er de to objekter er identiske, 417 00:24:44,280 --> 00:24:46,845 men hver af de angivelser inden for de vektorer 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å det er lidt mere kompliceret ved, at det har en hvis tilstand og andet 421 00:24:58,470 --> 00:25:00,960 og så tager det to argumenter ad gangen. 422 00:25:00,960 --> 00:25:02,640 Så x er af enhver type. 423 00:25:02,640 --> 00:25:06,280 Og jeg siger dette andet argument er en. 424 00:25:06,280 --> 00:25:08,380 Dette kan være alt så godt. 425 00:25:08,380 --> 00:25:12,490 Men som standard, det vil tage 5 Hvis du ikke angiver noget. 426 00:25:12,490 --> 00:25:16,730 >> Så her vil jeg sige hvis x er større end en. 427 00:25:16,730 --> 00:25:19,220 Så hvis jeg ikke angiver en, det siger, at hvis x er større end 5, 428 00:25:19,220 --> 00:25:20,470 så jeg har tænkt mig at vende tilbage SAND. 429 00:25:20,470 --> 00:25:23,230 andet, vil jeg vende tilbage FALSK. 430 00:25:23,230 --> 00:25:24,870 Så lad mig gå videre og definere dette. 431 00:25:24,870 --> 00:25:30,600 432 00:25:30,600 --> 00:25:34,550 >> Og nu jeg har tænkt mig at køre bounded.compare 3. 433 00:25:34,550 --> 00:25:39,150 Så det siger er 3 mindre than-- er 3 større end 5. 434 00:25:39,150 --> 00:25:41,830 Nej, det er ikke så FALSK. 435 00:25:41,830 --> 00:25:46,550 >> Og bounded.compare 3 og jeg har tænkt mig at sammenligne den med en lig med 2. 436 00:25:46,550 --> 00:25:50,700 Så nu er jeg siger ja, nu har jeg ønsker en at være noget andet. 437 00:25:50,700 --> 00:25:52,750 Så jeg har tænkt mig at sige en, skal du være 2. 438 00:25:52,750 --> 00:25:56,640 >> Jeg kan enten gøre denne slags notation eller jeg sige en er lig med 2. 439 00:25:56,640 --> 00:25:58,720 Dette er en mere læsbar i, at når du er 440 00:25:58,720 --> 00:26:01,450 ser på disse virkelig komplicerede funktioner, 441 00:26:01,450 --> 00:26:08,110 tage flere arguments-- og dette kan være snesevis oftentimes-- bare at sige 442 00:26:08,110 --> 00:26:11,140 et lig 2 er mere læsbar for dig, så senere i fremtiden 443 00:26:11,140 --> 00:26:13,020 vil du vide, hvad du laver. 444 00:26:13,020 --> 00:26:17,120 >> Så i dette tilfælde, er jeg siger, er 3 større end 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åde kan jeg bare fjerne dette og siger, er 3 større end 2 447 00:26:22,350 --> 00:26:23,440 hvor a er lig med 2. 448 00:26:23,440 --> 00:26:26,230 Og det er også sandt. 449 00:26:26,230 --> 00:26:26,730 Ja? 450 00:26:26,730 --> 00:26:29,670 >> PUBLIKUM: Er du fuldbyrdende 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å hvad jeg gør her er tager denne tekst document-- 453 00:26:33,900 --> 00:26:39,825 og hvad der er fantastisk ved rstudio er, at Jeg kan bare køre en short-- en vigtig genvej. 454 00:26:39,825 --> 00:26:41,820 Så jeg gør Ctrl-Enter. 455 00:26:41,820 --> 00:26:44,850 >> Og så, jeg tager den linje i teksten dokument 456 00:26:44,850 --> 00:26:46,710 og derefter sætte i konsollen. 457 00:26:46,710 --> 00:26:50,800 Så her jeg siger, bounded.compare og jeg gør Ctrl-X. 458 00:26:50,800 --> 00:26:52,540 Så jeg kan bare køre her. 459 00:26:52,540 --> 00:26:54,920 Og så der vil tage line og derefter sætte det her. 460 00:26:54,920 --> 00:26:57,900 Og så på samme måde, jeg kan gøre køre her. 461 00:26:57,900 --> 00:27:04,630 Og så vil det bare holde definere linjerne i konsollen som. 462 00:27:04,630 --> 00:27:10,690 >> Og hvis du også mærke til krøllede seler er der ligesom i C syntaks. 463 00:27:10,690 --> 00:27:13,910 x-- hvis hvis betingelse er også vil bruge parenteser og derefter 464 00:27:13,910 --> 00:27:15,350 du kan bruge andet. 465 00:27:15,350 --> 00:27:17,496 En anden grund er ellers hvis. 466 00:27:17,496 --> 00:27:21,440 Så dette vil være x lig er lig med en, for eksempel. 467 00:27:21,440 --> 00:27:24,190 468 00:27:24,190 --> 00:27:26,350 Og så jeg har tænkt mig at returnere noget her. 469 00:27:26,350 --> 00:27:29,490 >> Bemærk, at der er to forskellige ting her, som der foregår. 470 00:27:29,490 --> 00:27:34,360 Den ene er, at her jeg angive returnere værdien SAND. 471 00:27:34,360 --> 00:27:35,950 Her Jeg siger bare x. 472 00:27:35,950 --> 00:27:39,970 Så R vil sædvanligvis ved standard tage det sidste arguments-- 473 00:27:39,970 --> 00:27:43,510 eller tage den sidste linje i koden, og det vil være, hvad det er returneret. 474 00:27:43,510 --> 00:27:46,920 Så her er den samme ting som at gøre tilbagevenden x. 475 00:27:46,920 --> 00:27:49,450 476 00:27:49,450 --> 00:27:50,540 >> Og bare for at vise dig. 477 00:27:50,540 --> 00:27:54,000 478 00:27:54,000 --> 00:27:57,052 Og så vil det fungere ligesom det. 479 00:27:57,052 --> 00:27:58,260 Så lad mig fortsætte med dette. 480 00:27:58,260 --> 00:28:00,630 >> Så ellers hvis. 481 00:28:00,630 --> 00:28:04,060 Og virkelig, jeg kan vende tilbage noget jeg gerne vil. 482 00:28:04,060 --> 00:28:06,680 Så jeg behøver ikke engang at retur Booleans hele tiden, 483 00:28:06,680 --> 00:28:08,410 Jeg kan bare returnere noget andet. 484 00:28:08,410 --> 00:28:10,670 Så jeg kan gøre tilbagevenden bjørn. 485 00:28:10,670 --> 00:28:12,989 >> Så hvis X er lig er lig med en, det kommer til at vende tilbage bjørn. 486 00:28:12,989 --> 00:28:14,530 Ellers går det til at returnere SAND. 487 00:28:14,530 --> 00:28:19,310 Jeg kan også gøre en vektor eller virkelig noget. 488 00:28:19,310 --> 00:28:22,210 >> Og normalt statisk maskinskrevne sprog, 489 00:28:22,210 --> 00:28:23,840 du er nødt til at angive en type her. 490 00:28:23,840 --> 00:28:25,750 Og bemærk, at det bare kan være alt. 491 00:28:25,750 --> 00:28:32,400 Og R er intelligent nok, at det vil bare gøre det, og det vil fungere fint. 492 00:28:32,400 --> 00:28:33,620 >> Så lad mig definere dette. 493 00:28:33,620 --> 00:28:39,460 494 00:28:39,460 --> 00:28:41,230 Unexpected-- oh undskyld. 495 00:28:41,230 --> 00:28:44,336 Det bør være en krøllet 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å lad os nu sammenligne 3 og en lig med 3. 501 00:28:58,250 --> 00:29:01,860 Så det burde return-- yeah-- værdien bjørn. 502 00:29:01,860 --> 00:29:06,740 >> Så nu en mere generel ting er ligesom Hvad med andre datastrukturer. 503 00:29:06,740 --> 00:29:09,110 Så du har denne funktion. 504 00:29:09,110 --> 00:29:15,360 Dette kommer til at arbejde på en slags værdi 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 hvad med noget som en vektor. 507 00:29:19,330 --> 00:29:27,750 Så hvad sker der, hvis du do-- så jeg er vil tildele val til, sige, 4 til 6. 508 00:29:27,750 --> 00:29:31,640 Så hvis jeg returnere dette, dette er en vektor fra 4, 5, 6. 509 00:29:31,640 --> 00:29:34,935 >> Lad os nu se hvad der sker hvis jeg gør bounded.compare val. 510 00:29:34,935 --> 00:29:37,680 511 00:29:37,680 --> 00:29:42,450 Så dette vil give dig 15 1251. 512 00:29:42,450 --> 00:29:46,440 Så med andre ord, det siger hvis man ser på denne betingelse 513 00:29:46,440 --> 00:29:50,040 så det siger x er mindre end en eller noget. 514 00:29:50,040 --> 00:29:51,880 Så dette er en anelse forvirrende, fordi nu 515 00:29:51,880 --> 00:29:53,379 du bare ikke ved, hvad der foregår. 516 00:29:53,379 --> 00:29:58,690 Så jeg gætte én ting, der er virkelig godt om blot forsøger at debug 517 00:29:58,690 --> 00:30:04,600 er, at du bare kan gøre val er større end en og se hvad der sker der. 518 00:30:04,600 --> 00:30:09,720 >> Så val-- a er som standard 5 så lad os bare Val større end 5. 519 00:30:09,720 --> 00:30:14,280 Så dette er en vektor FALSK FALSK SAND. 520 00:30:14,280 --> 00:30:17,206 Så nu når du kigger på dette, går det til at sige, om, 521 00:30:17,206 --> 00:30:20,080 og så det kommer til at give dig denne er en vektor af false false SAND. 522 00:30:20,080 --> 00:30:23,450 >> Så når du passerer dette i R, R har ingen idé om, hvad du laver. 523 00:30:23,450 --> 00:30:26,650 Fordi det forventer en enkelt værdi, som er en boolesk og nu 524 00:30:26,650 --> 00:30:29,420 du giver det en vektor af Booleans. 525 00:30:29,420 --> 00:30:31,970 Så som standard, R er bare kommer til at sige, hvad dælen, 526 00:30:31,970 --> 00:30:35,440 Jeg har tænkt mig at antage, at du er kommer til at tage det første element her. 527 00:30:35,440 --> 00:30:38,320 Så jeg har tænkt mig at say-- jeg har tænkt mig at antage, at dette er forkert. 528 00:30:38,320 --> 00:30:40,890 Så det kommer til at sige nej, det er ikke rigtigt. 529 00:30:40,890 --> 00:30:45,246 >> Ligeledes går det til være val lig er lig med en. 530 00:30:45,246 --> 00:30:47,244 Nej, undskyld 5. 531 00:30:47,244 --> 00:30:48,910 Og det vil også være falsk så godt. 532 00:30:48,910 --> 00:30:52,410 Så det kommer til at sige nej, Det er ikke sandt så godt, så det er 533 00:30:52,410 --> 00:30:53,680 vil returnere denne sidste. 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, afhængigt af hvordan du se den. 536 00:31:01,360 --> 00:31:05,104 Fordi når du er skaber disse funktioner, 537 00:31:05,104 --> 00:31:06,770 Du behøver faktisk ikke ved, hvad der foregår. 538 00:31:06,770 --> 00:31:10,210 Så nogle gange du ønsker en fejl, eller måske du bare vil have en advarsel. 539 00:31:10,210 --> 00:31:12,160 I dette tilfælde har R ikke. 540 00:31:12,160 --> 00:31:14,300 Så det er virkelig op til du baseret ud af, hvad 541 00:31:14,300 --> 00:31:17,310 du synes sproget skal gøre i dette tilfælde 542 00:31:17,310 --> 00:31:22,920 hvis du passerer i en vektor af Booleans når du laver en hvis tilstand. 543 00:31:22,920 --> 00:31:31,733 >> Så lad os sige, at du havde det oprindelige en med hvis ellers returnerer SAND, og ​​du er 544 00:31:31,733 --> 00:31:34,190 vil returnere FALSK. 545 00:31:34,190 --> 00:31:39,300 Så en måde bort dette er at sige, at jeg 546 00:31:39,300 --> 00:31:41,530 behøver ikke engang denne betingede ting. 547 00:31:41,530 --> 00:31:47,220 En anden ting, jeg kan gøre, er bare returnere værdier selv. 548 00:31:47,220 --> 00:31:53,240 Så hvis du bemærker, hvis du do val er større end 5, 549 00:31:53,240 --> 00:31:56,350 dette vil returnere en vektor false false SAND. 550 00:31:56,350 --> 00:31:58,850 >> Måske det er det, du ønsker for bounded.compare. 551 00:31:58,850 --> 00:32:02,940 Du ønsker at returnere en vektor af Booleans hvor den sammenligner hver af værdierne 552 00:32:02,940 --> 00:32:04,190 for sig selv. 553 00:32:04,190 --> 00:32:11,165 Så kan du bare bounded.compare funktion X, A er lig med 5. 554 00:32:11,165 --> 00:32:13,322 555 00:32:13,322 --> 00:32:15,363 Og så i stedet for at gøre dette, hvis andet tilstand, 556 00:32:15,363 --> 00:32:21,430 Jeg bare at vende tilbage x er større end 5. 557 00:32:21,430 --> 00:32:23,620 Så hvis det er sandt, så det kommer til at returnere sandt. 558 00:32:23,620 --> 00:32:26,830 Og så hvis det ikke er, det er vil returnere FALSK. 559 00:32:26,830 --> 00:32:30,880 >> Og det vil arbejde for nogen af ​​disse strukturer. 560 00:32:30,880 --> 00:32:41,450 Så jeg kan bounded.compare c 1 6 eller 9 og så vil jeg sige et lig 6, 561 00:32:41,450 --> 00:32:42,799 f.eks. 562 00:32:42,799 --> 00:32:44,840 Og så det kommer til at give dig den rigtige Boolean 563 00:32:44,840 --> 00:32:48,240 vektor, du designer. 564 00:32:48,240 --> 00:32:50,660 >> Så dem er blot funktioner og lad mig nu bare 565 00:32:50,660 --> 00:32:54,980 vise dig nogle interaktive visuals. 566 00:32:54,980 --> 00:32:59,700 Jeg tror ikke, jeg har faktisk Wi-Fi her så lad mig bare gå videre 567 00:32:59,700 --> 00:33:01,970 og springe denne ene jeg gætte. 568 00:33:01,970 --> 00:33:05,260 >> Men én ting, der er cool er dog, at hvis du bare 569 00:33:05,260 --> 00:33:09,600 ønsker at teste en flok forskellige data kommandoer, 570 00:33:09,600 --> 00:33:13,320 der er en masse forskellige datasæt , der allerede er indlæst i R. 571 00:33:13,320 --> 00:33:15,770 Så en af ​​dem er kaldet iris datasæt. 572 00:33:15,770 --> 00:33:18,910 Dette er en af ​​de mest kendte dem i machine learning. 573 00:33:18,910 --> 00:33:23,350 Du vil som regel bare gøre en slags testcases for at se om din kode kører. 574 00:33:23,350 --> 00:33:27,520 Så lad os bare kontrollere, hvad iris er. 575 00:33:27,520 --> 00:33:33,130 >> Så denne ting går at være en dataramme. 576 00:33:33,130 --> 00:33:36,000 Og det er lidt længe, ​​fordi Jeg udskrives iris. 577 00:33:36,000 --> 00:33:38,810 Det er at udskrive hele ting. 578 00:33:38,810 --> 00:33:42,830 Så det har alle disse forskellige navne. 579 00:33:42,830 --> 00:33:45,505 Så iris er en samling af forskellige blomster. 580 00:33:45,505 --> 00:33:48,830 I dette tilfælde er det at fortælle du arterne af det, 581 00:33:48,830 --> 00:33:54,760 alle disse forskellige bredder og længder af bægerblad og kronblad. 582 00:33:54,760 --> 00:33:58,880 >> Og så normalt, hvis du vil udskrive iris, 583 00:33:58,880 --> 00:34:03,680 for eksempel, behøver du ikke ønsker at have det gøre alt dette, fordi der kan tage over 584 00:34:03,680 --> 00:34:05,190 hele din konsol. 585 00:34:05,190 --> 00:34:09,280 Så en ting, der er virkelig nice er hoved-funktionen. 586 00:34:09,280 --> 00:34:12,929 Så hvis du bare gøre hoved iris, vil dette give dig 587 00:34:12,929 --> 00:34:17,389 de første fem rækker, eller seks jeg gætte. 588 00:34:17,389 --> 00:34:19,909 Og så godt, du kan bare angive her. 589 00:34:19,909 --> 00:34:22,914 Så 20-- dette vil give du de første 20 rækker. 590 00:34:22,914 --> 00:34:24,830 Og jeg faktisk var venlig af overrasket over, at dette 591 00:34:24,830 --> 00:34:28,770 gav mig seks, så lad mig gå videre og tjek iris-- eller hoved, undskyld. 592 00:34:28,770 --> 00:34:31,699 593 00:34:31,699 --> 00:34:34,960 Og her vil det give du dokumentationen 594 00:34:34,960 --> 00:34:37,960 hvad værdien hovedet gør. 595 00:34:37,960 --> 00:34:40,839 Så det returnerer den første eller sidste af et objekt. 596 00:34:40,839 --> 00:34:42,630 Og så jeg har tænkt mig at se på standardindstillingerne. 597 00:34:42,630 --> 00:34:47,340 Og så siger standard metode hoved X og n er lig 6L. 598 00:34:47,340 --> 00:34:50,620 Så dette returnerer de første seks elementer. 599 00:34:50,620 --> 00:34:55,050 Og på samme måde, hvis du bemærker her, jeg behøvede ikke at angive n er lig 6. 600 00:34:55,050 --> 00:34:56,840 Som standard bruger seks, tror jeg. 601 00:34:56,840 --> 00:35:00,130 Og så, hvis jeg ønsker at angive en vis værdi, så jeg kan se, at så godt. 602 00:35:00,130 --> 00:35:02,970 603 00:35:02,970 --> 00:35:10,592 >> Så det er nogle enkle kommandoer og her er en anden en, der er bare-- godt, 604 00:35:10,592 --> 00:35:12,550 Jeg can-- det er faktisk lidt mere kompleks, 605 00:35:12,550 --> 00:35:17,130 men det vil bare tage klassen af hver kolonne i iris datasæt. 606 00:35:17,130 --> 00:35:20,910 Så dette vil vise dig, hvad hver af disse søjler er i form af deres typer. 607 00:35:20,910 --> 00:35:23,665 Så bægerblad længde er numerisk, bægerblad bredde er numeriske. 608 00:35:23,665 --> 00:35:26,540 Alle disse værdier er lige numerisk fordi du kan fortælle fra disse data 609 00:35:26,540 --> 00:35:29,440 strukturere disse er alle kommer til at numerisk. 610 00:35:29,440 --> 00:35:34,310 >> Og de arter kolonne vil være en faktor. 611 00:35:34,310 --> 00:35:37,270 Så normalt, skulle man tro, at dette er ligesom en tegnstreng. 612 00:35:37,270 --> 00:35:48,830 Men hvis du bare gøre irisSpecies, og så vil jeg gøre hoved 5, 613 00:35:48,830 --> 00:35:51,820 og dette vil udskrive de første fem værdier. 614 00:35:51,820 --> 00:35:54,150 >> Og så bemærke dette niveau. 615 00:35:54,150 --> 00:35:58,870 Så dette er saying-- dette er R måde have kategoriske variable. 616 00:35:58,870 --> 00:36:03,765 Så i stedet for bare have tegnstrenge, 617 00:36:03,765 --> 00:36:06,740 det har niveauer angivelse hvilke af disse ting er. 618 00:36:06,740 --> 00:36:12,450 >> Så lad os sige irisSpecies 1. 619 00:36:12,450 --> 00:36:17,690 Så hvad du ønsker at gøre her er jeg Delsæt for denne art kolonne. 620 00:36:17,690 --> 00:36:21,480 Så dette tager Art-søjle og derefter 621 00:36:21,480 --> 00:36:23,820 den indekserer at få det første element. 622 00:36:23,820 --> 00:36:27,140 Så dette bør give dig setosa. 623 00:36:27,140 --> 00:36:28,710 Og det giver dig også niveauer 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 vil ikke til at være sandt, fordi en 626 00:36:34,645 --> 00:36:37,940 er af en anden type end den anden. 627 00:36:37,940 --> 00:36:40,590 Eller jeg tror det er sandt, fordi R er mere intelligent end. 628 00:36:40,590 --> 00:36:45,420 Og det ser på dette, og derefter siger, måske det er det, du ønsker. 629 00:36:45,420 --> 00:36:51,860 Så det kommer til at sige det tegn streng setosa er den samme som denne. 630 00:36:51,860 --> 00:37:01,290 Og så samme måde kan du også bare snuppe disse som så på. 631 00:37:01,290 --> 00:37:05,580 >> Så det er blot en slags hurtige kommandoer datasættet. 632 00:37:05,580 --> 00:37:08,030 Så her er nogle udforskning af data. 633 00:37:08,030 --> 00:37:11,360 Så det er lidt mere involveret i analysen af ​​data. 634 00:37:11,360 --> 00:37:18,340 Og dette er taget fra nogle Bootcamp i F i Berkeley. 635 00:37:18,340 --> 00:37:20,790 >> Så bibliotek udenlandske. 636 00:37:20,790 --> 00:37:24,880 Så jeg har tænkt mig at lægge i en bibliotek, der hedder udenlandske. 637 00:37:24,880 --> 00:37:32,460 Så dette vil give mig read.dta så antage, at jeg har denne datasæt. 638 00:37:32,460 --> 00:37:39,000 Dette er gemt i den aktuelle arbejdsmappe af min konsol. 639 00:37:39,000 --> 00:37:42,190 Så lad os bare se, hvad arbejdsmappen er. 640 00:37:42,190 --> 00:37:44,620 >> Så her er min arbejdsmappe. 641 00:37:44,620 --> 00:37:50,040 Og læse dot data, dette ting, siger denne fil 642 00:37:50,040 --> 00:37:54,650 ligger i data mappen denne aktuelle arbejdsmappe. 643 00:37:54,650 --> 00:38:00,520 Og read.dta dette ikke er en standard kommando. 644 00:38:00,520 --> 00:38:02,760 Jeg gætte, jeg indlæst det i forvejen. 645 00:38:02,760 --> 00:38:04,750 IEI overtog jeg indlæst denne i forvejen. 646 00:38:04,750 --> 00:38:08,115 >> Men så read.dta ikke vil at være en standard kommando. 647 00:38:08,115 --> 00:38:11,550 Og det er derfor, du kommer til at have at indlæse i dette bibliotek package-- 648 00:38:11,550 --> 00:38:14,500 denne pakke kaldet udenlandske. 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 udenlandsk er en af ​​de indbyggede dem. 651 00:38:19,180 --> 00:38:31,150 Ellers kan du også gø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 det vil give dig R. Øh, nej. 654 00:38:36,878 --> 00:38:39,830 655 00:38:39,830 --> 00:38:43,140 Og så er jeg bare kommer til at stoppe dette, fordi jeg allerede har det. 656 00:38:43,140 --> 00:38:46,920 >> Men hvad er virkelig rart om R er, at pakken ledelse 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 gemme alt virkelig pænt til dig. 659 00:38:52,470 --> 00:38:59,780 Så i dette tilfælde, det vil gemme det i, jeg tror, ​​dette bibliotek her. 660 00:38:59,780 --> 00:39:02,390 >> Så når du har lyst til installere nye pakker, 661 00:39:02,390 --> 00:39:04,980 det er lige så simpelt som gør install.packages 662 00:39:04,980 --> 00:39:07,500 og R vil administrere alle pakkerne til dig. 663 00:39:07,500 --> 00:39:12,900 Så du behøver ikke at gøre noget 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 uden for Python 666 00:39:18,310 --> 00:39:20,940 og så er du forsøger at køre dem selv. 667 00:39:20,940 --> 00:39:22,210 Så det er virkelig pæn måde. 668 00:39:22,210 --> 00:39:25,590 >> Og install.packages kræver internet. 669 00:39:25,590 --> 00:39:31,950 Det tager det fra en server og arkiv, 670 00:39:31,950 --> 00:39:33,960 samler alle pakkerne, hedder KRAN. 671 00:39:33,960 --> 00:39:40,690 Og du kan angive, hvilken slags spejl du vil hente pakkerne fra. 672 00:39:40,690 --> 00:39:43,420 >> Så her jeg tager dette datasæt. 673 00:39:43,420 --> 00:39:46,240 Jeg læser det i at bruge denne funktion. 674 00:39:46,240 --> 00:39:49,360 Så lad mig gå videre og gøre det. 675 00:39:49,360 --> 00:39:52,900 >> Så lad os antage, at du har denne datasæt 676 00:39:52,900 --> 00:39:55,550 og du har absolut ingen idé om, hvad det er. 677 00:39:55,550 --> 00:39:58,560 Og det faktisk kommer op temmelig ofte i industrien 678 00:39:58,560 --> 00:40:00,910 hvor du bare har disse tons og tonsvis af rodet ting 679 00:40:00,910 --> 00:40:02,890 og de er utroligt umærket. 680 00:40:02,890 --> 00:40:06,380 Så her jeg har denne datasæt og jeg ved ikke, 681 00:40:06,380 --> 00:40:08,400 hvad det er, så jeg er bare viser at tjekke det ud. 682 00:40:08,400 --> 00:40:10,620 >> Så jeg har tænkt mig at gøre med hovedet først. 683 00:40:10,620 --> 00:40:14,190 Så jeg tjekke de første seks kolonner af hvad dette datasæt er. 684 00:40:14,190 --> 00:40:21,730 Så dette er state, pres04, og derefter Alle disse forskellige slags kolonner. 685 00:40:21,730 --> 00:40:25,612 Og hvad er interessant her, tror jeg, er, at du 686 00:40:25,612 --> 00:40:27,945 vil antage, at det 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 gætter bare fra ser på fil 689 00:40:32,190 --> 00:40:41,070 nævne dette er en form for indsamling af data om ansøgere eller vælgere 690 00:40:41,070 --> 00:40:44,920 der stemte for bestemte præsidenter eller præsident kandidater 691 00:40:44,920 --> 00:40:46,550 for valget i 2004. 692 00:40:46,550 --> 00:40:52,920 >> Så her er værdier 1, 2 så en måde til at lagre 693 00:40:52,920 --> 00:40:56,540 Formand kandidater er deres navne. 694 00:40:56,540 --> 00:40:59,780 I dette tilfælde ser det ud de er bare heltalsværdier. 695 00:40:59,780 --> 00:41:04,030 Så 2004 var det Bush versus Kerry tror jeg. 696 00:41:04,030 --> 00:41:09,010 Og nu, lad os sige, at du bare ikke kender om 1 svarer til Bush eller 2 697 00:41:09,010 --> 00:41:11,703 svarer til Kerry eller og så videre og så videre, ikke? 698 00:41:11,703 --> 00:41:15,860 >> Og det er, bare for mig, et temmelig almindeligt problem. 699 00:41:15,860 --> 00:41:18,230 Så hvad kan du gøre i dette tilfælde? 700 00:41:18,230 --> 00:41:20,000 Så lad os se alle disse andre ting. 701 00:41:20,000 --> 00:41:22,790 >> tilstand, jeg går ud fra dette kommer fra forskellige stater. 702 00:41:22,790 --> 00:41:25,100 partyid, indkomst. 703 00:41:25,100 --> 00:41:27,710 Lad os se på partyid. 704 00:41:27,710 --> 00:41:32,800 Så måske en ting du kan gøre, er se på hver af observationerne 705 00:41:32,800 --> 00:41:36,250 at have en partyid af republikanske eller demokrat eller noget. 706 00:41:36,250 --> 00:41:38,170 Så lad os bare se på, hvad partyid er. 707 00:41:38,170 --> 00:41:41,946 >> Så jeg har tænkt mig at tage dat og så jeg har tænkt mig 708 00:41:41,946 --> 00:41:47,960 at gøre dette dollartegn operatør, at jeg gjorde tidligere 709 00:41:47,960 --> 00:41:50,770 og dette vil delmængde til den pågældende kolonne. 710 00:41:50,770 --> 00:41:57,760 Og så jeg har tænkt mig at lede dette i 20, bare for at se, hvad det ser ud. 711 00:41:57,760 --> 00:42:00,170 >> Så dette er bare en masse nationale kontorer. 712 00:42:00,170 --> 00:42:02,800 Så med andre ord har du manglende data om disse fyre. 713 00:42:02,800 --> 00:42:08,100 Men du også bemærke dette dat partyid er en faktor 714 00:42:08,100 --> 00:42:10,030 så det giver dig forskellige kategorier. 715 00:42:10,030 --> 00:42:14,170 Så med andre ord kan partyid tage Demokrat, republikaner, Independent, 716 00:42:14,170 --> 00:42:16,640 eller noget andet. 717 00:42:16,640 --> 00:42:23,940 >> Så lad os gå videre og lad os se, hvilke af disse is-- oh, OK. 718 00:42:23,940 --> 00:42:28,480 Så jeg har tænkt mig at delmængde at partyid og derefter 719 00:42:28,480 --> 00:42:32,780 se på, hvilke der er S, f.eks. 720 00:42:32,780 --> 00:42:37,150 Dette vil give dig en boolesk, en enorm Boolean af TRUEs og FALSEs. 721 00:42:37,150 --> 00:42:41,630 >> Og nu, lad os sige, jeg vil at delmængde til disse fyre. 722 00:42:41,630 --> 00:42:47,260 Så dette vil tage min dat og delmængde til uanset hvilken observationer 723 00:42:47,260 --> 00:42:48,910 har partyid ligemænd lig demokrat. 724 00:42:48,910 --> 00:42:52,830 725 00:42:52,830 --> 00:42:55,180 Og det er ganske lang, fordi der er så mange af dem. 726 00:42:55,180 --> 00:42:59,060 Så nu, jeg skal til at lede dette i 20. 727 00:42:59,060 --> 00:43:05,690 728 00:43:05,690 --> 00:43:11,270 >> Og som du bemærker, er lig ligemænd er interessant, fordi du er 729 00:43:11,270 --> 00:43:13,250 already-- du også herunder nationale kontorer. 730 00:43:13,250 --> 00:43:19,010 Så i dette tilfælde, du stadig ikke kan få alle oplysninger, fordi nu har du nationale kontorer 731 00:43:19,010 --> 00:43:22,650 og du blot ønsker at se, hvilke af de observation svarer til demokrat 732 00:43:22,650 --> 00:43:24,670 og ikke disse manglende værdier selv. 733 00:43:24,670 --> 00:43:27,680 Så hvordan ville du slippe af med disse kontorer? 734 00:43:27,680 --> 00:43:36,410 >> Så her er jeg bare ved hjælp af op-tasten på min markøren og derefter sige at bevæge sig rundt. 735 00:43:36,410 --> 00:43:39,778 Og så her jeg bare sige 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 tage to forskellige Boolske vektorer 738 00:43:52,720 --> 00:43:57,160 og siger, at det vil være SAND og FALSK f.eks. 739 00:43:57,160 --> 00:43:59,190 Så det kommer til at gøre denne komponent-wise. 740 00:43:59,190 --> 00:44:02,910 Så her jeg siger take datarammen, delmængde 741 00:44:02,910 --> 00:44:10,170 til dem, der svarer til demokrat, og fjerne nogen af ​​dem, der ikke er NA. 742 00:44:10,170 --> 00:44:13,540 >> Så denne will-- bør give dig noget. 743 00:44:13,540 --> 00:44:16,540 744 00:44:16,540 --> 00:44:17,600 Lad os se is.na. 745 00:44:17,600 --> 00:44:24,670 746 00:44:24,670 --> 00:44:27,690 Lad os 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 give du-- sorry-- blot en boolesk vektor. 749 00:44:45,290 --> 00:44:49,260 Og så, fordi det er så lang, Jeg har tænkt mig at delmængde til 20. 750 00:44:49,260 --> 00:44:49,760 OK. 751 00:44:49,760 --> 00:44:51,570 Så dette bør arbejde. 752 00:44:51,570 --> 00:44:54,700 >> Og det her vil også være TRUEs. 753 00:44:54,700 --> 00:45:01,830 Ah, så min fejl her er at I'm-- I bruge C ++ og R i flæng, så jeg gør 754 00:45:01,830 --> 00:45:03,590 denne fejl 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 at bruge to og-tegn, bare en enkelt. 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å lad os 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 værdier. 763 00:45:25,300 --> 00:45:27,690 Og lad os nu se på hvilke de er for. 764 00:45:27,690 --> 00:45:31,530 Så det ser ud som de fleste af dem stemte for 1. 765 00:45:31,530 --> 00:45:36,090 Så jeg har tænkt mig at gå videre og sige, at er Kerry. 766 00:45:36,090 --> 00:45:39,507 >> Og på samme måde, kan du også gå til republikanske 767 00:45:39,507 --> 00:45:41,090 og forhåbentlig, bør dette give dig 2. 768 00:45:41,090 --> 00:45:49,730 769 00:45:49,730 --> 00:45:51,770 Det er bare en masse forskellige kolonner. 770 00:45:51,770 --> 00:45:53,070 Og ja, det er 2. 771 00:45:53,070 --> 00:45:55,750 Så partyid alle republikanske, de fleste af dem stemmer på 2. 772 00:45:55,750 --> 00:45:58,390 >> Så det ser ud som, bare ved at kigge på dette, 773 00:45:58,390 --> 00:46:00,600 Republikanske bliver en very-- eller partyid 774 00:46:00,600 --> 00:46:02,790 vil være en meget stor faktor i fastlæggelsen 775 00:46:02,790 --> 00:46:05,420 hvilken kandidat de er vil stemme på. 776 00:46:05,420 --> 00:46:07,120 Og dette er naturligvis sandt i almindelighed. 777 00:46:07,120 --> 00:46:10,139 Og det passer til din intuition, selvfølgelig. 778 00:46:10,139 --> 00:46:11,930 Så det ser ud som om jeg er løbe tør for tid, så 779 00:46:11,930 --> 00:46:17,040 lad mig bare skal gå videre og vis nogle hurtige billeder. 780 00:46:17,040 --> 00:46:21,120 Så her er noget, der er lidt mere kompliceret med visualisering. 781 00:46:21,120 --> 00:46:26,450 Så i dette tilfælde, er dette en meget simpel analyse af blot at kontrollere, hvad 782 00:46:26,450 --> 00:46:28,500 formanden for '04 er. 783 00:46:28,500 --> 00:46:33,920 >> Så i dette tilfælde, lad os sige, at du ønskede at besvare dette spørgsmål. 784 00:46:33,920 --> 00:46:38,540 Så formoder, at vi ønskede at vide afstemningen adfærd i 2004 præsidentvalget 785 00:46:38,540 --> 00:46:41,170 og hvordan det varierer fra løb. 786 00:46:41,170 --> 00:46:44,380 Så ikke nok med at du vil se stemmeadfærd, 787 00:46:44,380 --> 00:46:47,860 men du ønsker at delmængde af hver race og slags opsummere det. 788 00:46:47,860 --> 00:46:50,770 Og du kan kun fortælle af dette kompleks notation 789 00:46:50,770 --> 00:46:52,580 at dette er en slags få uklar. 790 00:46:52,580 --> 00:46:56,390 >> Så en af ​​de mere avancerede R pakker, der er også slags nyere 791 00:46:56,390 --> 00:47:00,070 kaldes dplyr. 792 00:47:00,070 --> 00:47:03,060 Så det er denne ene lige her. 793 00:47:03,060 --> 00:47:08,080 Og ggg-- ggplot2 er bare en dejlig måde at gøre bedre visualiseringer 794 00:47:08,080 --> 00:47:09,400 end den indbyggede i ét. 795 00:47:09,400 --> 00:47:11,108 >> Så jeg har tænkt mig at indlæse disse to biblioteker. 796 00:47:11,108 --> 00:47:13,200 797 00:47:13,200 --> 00:47:16,950 Og så jeg har tænkt mig at gå videre og køre denne kommando. 798 00:47:16,950 --> 00:47:19,050 Du kan bare behandle det som en sort boks. 799 00:47:19,050 --> 00:47:23,460 >> Hvad sker er, at dette rør operatør passerer i dette argument 800 00:47:23,460 --> 00:47:24,110 ind på her. 801 00:47:24,110 --> 00:47:28,070 Så jeg siger gruppe af dat race og daværende præsident 04. 802 00:47:28,070 --> 00:47:31,530 Og så alle disse andre kommandoer filtrerer og derefter sammenfatter 803 00:47:31,530 --> 00:47:34,081 hvor jeg gør tæller og så jeg plotte det her. 804 00:47:34,081 --> 00:47:39,980 805 00:47:39,980 --> 00:47:42,500 OK cool. 806 00:47:42,500 --> 00:47:44,620 Så lad os gå videre og se, hvad det ser ud. 807 00:47:44,620 --> 00:47:52,280 808 00:47:52,280 --> 00:47:57,290 >> Så hvad der sker her, er, at jeg bare plottet hver af løbene og derefter 809 00:47:57,290 --> 00:47:59,670 hvilke de er for. 810 00:47:59,670 --> 00:48:03,492 Og disse to forskellige værdier svarer til 2 og 1. 811 00:48:03,492 --> 00:48:05,325 Hvis du ønsker at være mere elegant, kan du også 812 00:48:05,325 --> 00:48:11,770 bare angive, at 2 er Kerry-- eller 2 er Bush, og derefter 1 er Kerry. 813 00:48:11,770 --> 00:48:13,700 Og du kan også have at De i Deres legende. 814 00:48:13,700 --> 00:48:17,410 >> Og du kan også opdele disse søjlediagrammer. 815 00:48:17,410 --> 00:48:19,480 Fordi én ting er at, hvis du bemærker, 816 00:48:19,480 --> 00:48:24,560 dette er ikke meget let at identificere hvilken af ​​disse to værdier er større. 817 00:48:24,560 --> 00:48:27,920 Så en ting du gerne vil gøre er at tage denne blå område 818 00:48:27,920 --> 00:48:31,855 og bare flytte det over her, så du kan sammenligne disse to ved siden af ​​hinanden. 819 00:48:31,855 --> 00:48:34,480 Og jeg tror det er noget, jeg ikke har tid til at gøre lige nu, 820 00:48:34,480 --> 00:48:36,660 men det er også meget let at gøre. 821 00:48:36,660 --> 00:48:40,310 Du kan bare kigge ind man-siderne for ggplot. 822 00:48:40,310 --> 00:48:47,170 Så du kan bare ggplot ligesom at og læse i denne mand side. 823 00:48:47,170 --> 00:48:51,920 >> Så lad mig lige hurtigt vise dig nogle seje ting. 824 00:48:51,920 --> 00:48:57,610 Lad os gå videre og gå at-- blot en anvendelse af machine learning. 825 00:48:57,610 --> 00:49:02,450 Så lad os sige, at vi har disse tre pakker, så jeg har tænkt mig at indlæse disse i. 826 00:49:02,450 --> 00:49:05,500 827 00:49:05,500 --> 00:49:09,170 Så dette blot udskriver nogle oplysninger efter jeg lagt i ting. 828 00:49:09,170 --> 00:49:15,220 Så siger jeg read.csv, dette datasæt, og nu 829 00:49:15,220 --> 00:49:18,940 Jeg har tænkt mig at gå videre og se og se hvad der er inde i dette datasæt. 830 00:49:18,940 --> 00:49:22,080 >> Så de første 20 observationer. 831 00:49:22,080 --> 00:49:27,190 Så jeg bare have X1, X2, og Y. Så det virker som en flok af disse værdier 832 00:49:27,190 --> 00:49:31,640 spænder fra måske 20 til 80 eller deromkring. 833 00:49:31,640 --> 00:49:37,700 Og så fremdeles for X2 og derefter denne Y synes at være etiketter 0 og 1. 834 00:49:37,700 --> 00:49:49,500 >> For at bekræfte dette, kan jeg bare gøre sammenfatning af data X1. 835 00:49:49,500 --> 00:49:51,660 Og så fremdeles for alle disse andre kolonner. 836 00:49:51,660 --> 00:49:55,300 Så resumé er en hurtig måde blot viser dig hurtige værdier. 837 00:49:55,300 --> 00:49:56,330 Åh, undskyld. 838 00:49:56,330 --> 00:49:58,440 Dette bør man være Y. 839 00:49:58,440 --> 00:50:03,420 >> Så i dette tilfælde giver fraktiler, medianer, maxes så godt. 840 00:50:03,420 --> 00:50:07,130 I dette tilfælde dataY, kan du se at det bare kommer til at være 0 og 1. 841 00:50:07,130 --> 00:50:10,100 Også middelværdien siger 0,6, betyder blot, at det 842 00:50:10,100 --> 00:50:13,380 ser ud til jeg har flere 1s end 0'erne. 843 00:50:13,380 --> 00:50:16,160 >> Så lad mig gå videre og show dig, hvad det ligner. 844 00:50:16,160 --> 00:50:17,470 Så jeg bare at plotte dette. 845 00:50:17,470 --> 00:50:22,852 846 00:50:22,852 --> 00:50:24,636 Lad os se, hvordan man kan klare 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, hvad det ser ud. 852 00:50:37,590 --> 00:50:46,310 Så det ser ud som gule jeg specificeret som 0 og derefter rød jeg angivet som 1'ere. 853 00:50:46,310 --> 00:50:52,190 Så her ser det ud label punkter og det 854 00:50:52,190 --> 00:50:56,410 virker som om du bare ville nogle slags gruppering på dette. 855 00:50:56,410 --> 00:51:01,020 >> Og lad mig bare gå videre og show du nogle af disse indbyggede funktioner. 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 blot forsøger at montere en linje til dette. 858 00:51:06,060 --> 00:51:08,640 Så hvad er den bedste måde at jeg kan passe en linje sådan 859 00:51:08,640 --> 00:51:14,020 at det bedst vil adskille denne form for klyngedannelse. 860 00:51:14,020 --> 00:51:21,790 Og ideelt set, kan du bare se at jeg bare køre alle disse kommandoer 861 00:51:21,790 --> 00:51:25,450 og så, jeg har tænkt mig videre og tilføje linjen. 862 00:51:25,450 --> 00:51:28,970 >> Så det virker som det bedste gæt. 863 00:51:28,970 --> 00:51:34,150 Det er at tage den bedste, der minimerer fejlen i forsøget på at passe denne linje. 864 00:51:34,150 --> 00:51:40,000 Det er klart, det ser slags godt, men det er ikke den bedste. 865 00:51:40,000 --> 00:51:43,130 Og lineære modeller, i Generelt vil være 866 00:51:43,130 --> 00:51:46,811 virkelig stor for teori og bare slags af bygge- grundlæggende elementer i maskinen 867 00:51:46,811 --> 00:51:47,310 læring. 868 00:51:47,310 --> 00:51:50,330 Men i praksis, er du nødt til ønsker at gøre noget mere generelt. 869 00:51:50,330 --> 00:51:54,280 >> Så du kan bare prøve at køre noget, der hedder et neuralt netværk. 870 00:51:54,280 --> 00:51:57,110 Disse ting er stadig mere almindelige. 871 00:51:57,110 --> 00:52:00,530 Og de arbejder bare fantastisk til store datasæt. 872 00:52:00,530 --> 00:52:07,080 Så i dette tilfælde, vi kun have-- lad os see-- vi har nrow. 873 00:52:07,080 --> 00:52:09,010 Så nrow er bare at sige antal rækker. 874 00:52:09,010 --> 00:52:11,790 Så i dette tilfælde, jeg har 100 observationer. 875 00:52:11,790 --> 00:52:15,010 >> Så lad mig gå videre og gøre et neuralt netværk. 876 00:52:15,010 --> 00:52:18,620 Så dette er virkelig rart fordi jeg bare kan sige nnet 877 00:52:18,620 --> 00:52:21,767 og så er jeg regression Y. Så Y er denne kolonne. 878 00:52:21,767 --> 00:52:23,850 Og så regression det på de to andre variabler. 879 00:52:23,850 --> 00:52:27,360 Så det er kortere notation for X1 og X2. 880 00:52:27,360 --> 00:52:29,741 >> Så lad os gå videre og køre dette. 881 00:52:29,741 --> 00:52:30,240 Åh, undskyld. 882 00:52:30,240 --> 00:52:32,260 Jeg har brug for at køre det hele. 883 00:52:32,260 --> 00:52:37,500 Og dette er blot udskriver notation for hvor hurtigt eller ikke hurtigt det 884 00:52:37,500 --> 00:52:38,460 konvergeret. 885 00:52:38,460 --> 00:52:41,420 Så det ser ud som det gjorde konvergerer. 886 00:52:41,420 --> 00:52:44,970 Så lad mig gå videre og print ud af, hvad det ligner. 887 00:52:44,970 --> 00:52:51,260 >> Se her er billedet, og her er en kontur viser, hvor godt det passer. 888 00:52:51,260 --> 00:52:56,380 Og det er bare-- du kan se dette, at det er meget, meget rart. 889 00:52:56,380 --> 00:52:59,400 Det kunne endda være overfitting, men du kan også 890 00:52:59,400 --> 00:53:03,390 udgør dette med andre teknikker som krydsvalidering. 891 00:53:03,390 --> 00:53:06,180 Og disse er også indbygget i R. 892 00:53:06,180 --> 00:53:09,170 >> Og lad mig lige vise dig Support vektormaskine. 893 00:53:09,170 --> 00:53:12,470 Dette er en anden virkelig almindelig teknik i machine learning. 894 00:53:12,470 --> 00:53:18,550 Det er meget lig lineære modeller, men det bruger hvad der kaldes en kerne metode. 895 00:53:18,550 --> 00:53:22,790 Og lad os se, hvor godt det gør. 896 00:53:22,790 --> 00:53:26,430 Så dette er meget lig hvordan godt et neuralt netværk udfører, 897 00:53:26,430 --> 00:53:27,900 men det er meget mere smidig. 898 00:53:27,900 --> 00:53:35,740 Og det er baseret ud af hvad-- hvordan SVMs arbejde. 899 00:53:35,740 --> 00:53:40,250 >> Så dette er blot en meget hurtigt overblik over nogle 900 00:53:40,250 --> 00:53:43,822 af de indbyggede funktioner, du kan gøre og også nogle af udforskningen af ​​data. 901 00:53:43,822 --> 00:53:45,905 Så lad mig bare gå videre og gå tilbage til dias. 902 00:53:45,905 --> 00:53:50,290 903 00:53:50,290 --> 00:53:53,670 >> Så er naturligvis ikke meget omfattende. 904 00:53:53,670 --> 00:53:57,140 Og det er egentlig bare en teaser viser dig, hvad du virkelig kan gøre i R. 905 00:53:57,140 --> 00:53:59,100 Så hvis du vil bare gerne at lære mere, her 906 00:53:59,100 --> 00:54:01,210 er en masse forskellige ressourcer. 907 00:54:01,210 --> 00:54:06,890 >> Så hvis du er glad for lærebøger eller du er bare glad for at læse ting online, 908 00:54:06,890 --> 00:54:09,670 så er dette en fantastisk en af ​​Hadley Wickham, 909 00:54:09,670 --> 00:54:13,010 der også skabt alle disse virkelig cool pakker. 910 00:54:13,010 --> 00:54:17,420 Hvis du er glad for videoer, så Berkeley har en awesome bootcamp 911 00:54:17,420 --> 00:54:21,060 det er several-- der er slags lang. 912 00:54:21,060 --> 00:54:24,210 Og det vil lære dig næsten alt, hvad du gerne vil vide om R. 913 00:54:24,210 --> 00:54:27,770 >> Og på samme måde er der Codeacademy og alle disse andre slags 914 00:54:27,770 --> 00:54:29,414 af interaktive hjemmesider. 915 00:54:29,414 --> 00:54:31,580 De er også at få common-- mere og mere almindelige. 916 00:54:31,580 --> 00:54:33,749 Så dette er meget lig Codeacademy. 917 00:54:33,749 --> 00:54:35,790 Og endelig, hvis du bare vil Fællesskabet og hjælpe, 918 00:54:35,790 --> 00:54:38,800 disse er en flok ting, du kan gå til. 919 00:54:38,800 --> 00:54:40,880 Det er klart, vi stadig bruge postlister, bare 920 00:54:40,880 --> 00:54:44,860 Ligesom næsten alle andre programmeringssprog samfund. 921 00:54:44,860 --> 00:54:47,880 Og #rstats, dette er vores samfund Twitter. 922 00:54:47,880 --> 00:54:49,580 Det er faktisk ret almindelige. 923 00:54:49,580 --> 00:54:50,850 Og så bruger! 924 00:54:50,850 --> 00:54:52,340 Er bare vores konference. 925 00:54:52,340 --> 00:54:55,390 >> Og så, selvfølgelig, kan du bruge alle disse andre Q & A ting, 926 00:54:55,390 --> 00:54:57,680 Ligesom Stack Overflow, Google, og derefter GitHub. 927 00:54:57,680 --> 00:55:00,490 Fordi de fleste af disse pakker og en masse af fællesskabet 928 00:55:00,490 --> 00:55:03,420 vil være centreret omkring udvikling kode, fordi det er open source. 929 00:55:03,420 --> 00:55:05,856 Og det er bare virkelig rart på GitHub. 930 00:55:05,856 --> 00:55:08,730 Og endelig kan du kontakte mig, hvis du bare have nogen hurtige spørgsmål. 931 00:55:08,730 --> 00:55:13,530 Så du kan finde mig på Twitter her, min hjemmeside, og lige min e-mail. 932 00:55:13,530 --> 00:55:17,840 Så forhåbentlig, det var something-- kun en kort teaser 933 00:55:17,840 --> 00:55:20,900 hvad R er virkelig i stand til at gøre. 934 00:55:20,900 --> 00:55:23,990 Og forhåbentlig du bare tjek disse tre links 935 00:55:23,990 --> 00:55:25,760 og se, hvad du kan gøre mere. 936 00:55:25,760 --> 00:55:28,130 Og jeg tror det er bare om det. 937 00:55:28,130 --> 00:55:28,630 Tak. 938 00:55:28,630 --> 00:55:30,780 >> [Applaus] 939 00:55:30,780 --> 00:55:31,968