1 00:00:00,000 --> 00:00:00,750 2 00:00:00,750 --> 00:00:09,800 >> [MUSIK SPELA] 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 Jag heter Dustin. 6 00:00:14,980 --> 00:00:18,419 Så jag kommer att presentera Dataanalys i R. 7 00:00:18,419 --> 00:00:19,710 Bara lite om mig själv. 8 00:00:19,710 --> 00:00:24,320 Jag är för närvarande en doktorand i Verkstads och yrkeshögskola. 9 00:00:24,320 --> 00:00:28,330 Jag studerar en korsning av maskininlärning och statistik 10 00:00:28,330 --> 00:00:31,375 så Dataanalys i R är riktigt grundläggande för vad 11 00:00:31,375 --> 00:00:33,790 Jag gör på en daglig basis. 12 00:00:33,790 --> 00:00:35,710 >> Och R är särskilt bra för dataanalys 13 00:00:35,710 --> 00:00:39,310 eftersom det är mycket bra för prototyper. 14 00:00:39,310 --> 00:00:43,590 Och oftast när du gör något slags dataanalys, en hel del av de problem 15 00:00:43,590 --> 00:00:44,920 kommer att kognitiva. 16 00:00:44,920 --> 00:00:48,700 Och så vill du bara ha några riktigt bra språk som 17 00:00:48,700 --> 00:00:53,770 är bara bra för att göra inbyggda funktioner, till skillnad 18 00:00:53,770 --> 00:00:57,430 att behöva handskas med låg nivå saker. 19 00:00:57,430 --> 00:01:01,040 Så i början, jag bara gå att införa det som är R, varför skulle 20 00:01:01,040 --> 00:01:04,540 du vill använda den, och sedan gå över till något demo, 21 00:01:04,540 --> 00:01:07,060 och bara gå därifrån. 22 00:01:07,060 --> 00:01:08,150 >> Så vad är R? 23 00:01:08,150 --> 00:01:11,180 R är bara ett språk utvecklat för statistiska beräkningar 24 00:01:11,180 --> 00:01:12,450 och visualisering. 25 00:01:12,450 --> 00:01:16,000 Så vad detta betyder är att det är en mycket bra språk 26 00:01:16,000 --> 00:01:22,400 för någon typ av sak som behandlar osäkerhet eller datavisualisering. 27 00:01:22,400 --> 00:01:24,850 Så du har alla dessa sannolikhetsfördelningar. 28 00:01:24,850 --> 00:01:27,140 Det kommer att bli inbyggda funktioner. 29 00:01:27,140 --> 00:01:31,650 Du har även utmärkt plottning paket. 30 00:01:31,650 --> 00:01:34,110 >> Python är ett annat konkurrerande språk för data. 31 00:01:34,110 --> 00:01:40,020 Och en sak som jag tycker att R är mycket bättre på är visualisering. 32 00:01:40,020 --> 00:01:45,200 Så vad du ser i demo som väl är bara ett mycket intuitivt språk 33 00:01:45,200 --> 00:01:48,050 som bara fungerar mycket bra. 34 00:01:48,050 --> 00:01:53,140 Det är också gratis och öppen källkod, som är något annat bra språk antar jag. 35 00:01:53,140 --> 00:01:55,440 >> Och här, ett gäng bara sökord kastas på dig. 36 00:01:55,440 --> 00:02:00,450 Det är dynamisk, vilket innebär att om du har en specifik typ tilldelats ett objekt 37 00:02:00,450 --> 00:02:02,025 än det bara kommer att ändra det i farten. 38 00:02:02,025 --> 00:02:05,670 Det är lat så det är smart om hur den gör beräkningar. 39 00:02:05,670 --> 00:02:12,250 Funktionell betydelse det kan verkligen fungera baserat bort av funktioner så anything-- 40 00:02:12,250 --> 00:02:16,910 någon form av manipulation är du gör, kommer det att baseras off funktioner. 41 00:02:16,910 --> 00:02:20,162 >> Så binära operatorer, till exempel, är bara av sig själva funktioner. 42 00:02:20,162 --> 00:02:21,870 Och allt som du kommer att göra är 43 00:02:21,870 --> 00:02:24,690 kommer att drivas av funktioner själv. 44 00:02:24,690 --> 00:02:27,140 Och sedan objektorienterat också. 45 00:02:27,140 --> 00:02:30,930 >> Så här är en XKCD plot. 46 00:02:30,930 --> 00:02:34,350 Inte bara för att jag känner mig som XKCD är grundläggande för något slag 47 00:02:34,350 --> 00:02:37,770 presentation, men eftersom Jag tycker detta verkligen 48 00:02:37,770 --> 00:02:42,160 hamrar den grad att en hel del av tid när du gör någon form av data 49 00:02:42,160 --> 00:02:46,570 analys, är inte problemet så mycket hur snabbt det går, 50 00:02:46,570 --> 00:02:49,850 men hur länge det kommer att ta dig att programmera uppgiften. 51 00:02:49,850 --> 00:02:54,112 Så här är bara analysera om strategi a eller b är effektivare. 52 00:02:54,112 --> 00:02:55,820 Detta kommer att bli något som du är 53 00:02:55,820 --> 00:02:58,290 kommer att ta itu mycket med i sorterar av låg nivå språk 54 00:02:58,290 --> 00:03:03,440 där du arbetar med seg fel, minnesallokering, initieringar, 55 00:03:03,440 --> 00:03:05,270 även gör de inbyggda funktionerna. 56 00:03:05,270 --> 00:03:09,920 Och det här är alla hanteras mycket, mycket elegant i R. 57 00:03:09,920 --> 00:03:12,839 >> Så bara för att hamra ut punkt, den största flaskhalsen 58 00:03:12,839 --> 00:03:13,880 kommer att vara kognitiv. 59 00:03:13,880 --> 00:03:17,341 Så dataanalys är ett mycket hårt problem. 60 00:03:17,341 --> 00:03:19,340 Oavsett om du gör maskininlärning eller du är 61 00:03:19,340 --> 00:03:22,550 göra just något slags grundläggande uppgifter prospektering, 62 00:03:22,550 --> 00:03:25,290 du inte vill ha att ta ett dokument 63 00:03:25,290 --> 00:03:27,440 och sedan sammanställa något varje gång du 64 00:03:27,440 --> 00:03:31,010 vill se vad en kolumn ser ut, vilka särskilda poster i en matris 65 00:03:31,010 --> 00:03:32,195 ser ut. 66 00:03:32,195 --> 00:03:34,320 Så du bara vill ha några riktigt trevligt gränssnitt 67 00:03:34,320 --> 00:03:37,740 du kan köra en enkel funktion att index för vad 68 00:03:37,740 --> 00:03:41,870 du vill och bara köra det därifrån. 69 00:03:41,870 --> 00:03:44,190 Och du behöver domän specifika språk för detta. 70 00:03:44,190 --> 00:03:51,750 Och R kommer verkligen att hjälpa dig definiera problemet och lösa det på detta sätt. 71 00:03:51,750 --> 00:03:58,690 >> Så här är ett diagram som visar programmering popularitet R som det gått över tiden. 72 00:03:58,690 --> 00:04:04,060 Som du kan se, liksom 2013 eller så det bara blåst upp enormt. 73 00:04:04,060 --> 00:04:09,570 Och detta har varit just på grund av detta stor trend inom teknologiindustrin 74 00:04:09,570 --> 00:04:10,590 om stora uppgifter. 75 00:04:10,590 --> 00:04:13,010 Också, inte bara teknik industrin, men egentligen 76 00:04:13,010 --> 00:04:16,490 alla branscher that-- eftersom en hel del av de branscher 77 00:04:16,490 --> 00:04:20,589 är typ av grundläggande betydelse för försöker lösa dessa problem. 78 00:04:20,589 --> 00:04:24,590 Och oftast, kan du ha några bra sätt att mäta dessa problem 79 00:04:24,590 --> 00:04:29,720 eller ens definiera dem eller lösa dem med hjälp av data. 80 00:04:29,720 --> 00:04:35,430 Så jag tror just nu R är den 11: e mest populära språket på TIOBE 81 00:04:35,430 --> 00:04:38,200 och det har vuxit sedan dess. 82 00:04:38,200 --> 00:04:40,740 83 00:04:40,740 --> 00:04:43,080 >> Så här är lite mer funktioner i R. Det har 84 00:04:43,080 --> 00:04:46,900 ett enormt antal kollin och för alla dessa olika saker. 85 00:04:46,900 --> 00:04:52,470 Så varje gång du har en vissa problem, de flesta 86 00:04:52,470 --> 00:04:55,060 tids R kommer att ha den funktionen för dig. 87 00:04:55,060 --> 00:04:58,520 Så om du vill bygga någon form av maskin 88 00:04:58,520 --> 00:05:02,770 learning algoritm kallas Random Forest eller Beslutsträd, 89 00:05:02,770 --> 00:05:07,530 eller ens försöker ta medelvärdet av en funktion eller något av det här, 90 00:05:07,530 --> 00:05:10,000 R kommer att ha det. 91 00:05:10,000 --> 00:05:14,190 >> Och om du gör du bryr dig om optimering, en sak som är gemensam 92 00:05:14,190 --> 00:05:17,430 är att när du är klar prototyper någon form av högnivåspråk, 93 00:05:17,430 --> 00:05:19,810 du kommer att kasta det in-- Du kommer bara port att över 94 00:05:19,810 --> 00:05:21,550 till viss låg nivå språk. 95 00:05:21,550 --> 00:05:26,090 Vad är bra med R är att när du är gjort prototyper det, kan du köra C ++, 96 00:05:26,090 --> 00:05:29,510 eller Fortran, eller något av dessa lägre nivå och kära direkt i R. 97 00:05:29,510 --> 00:05:32,320 Så det är en riktigt cool funktion om R, 98 00:05:32,320 --> 00:05:35,930 om du verkligen bryr dig om optimeringspunkt. 99 00:05:35,930 --> 00:05:39,490 >> Och det är också riktigt bra för webb visualiseringar. 100 00:05:39,490 --> 00:05:43,530 Så D3.js, till exempel, är Jag antar en annan seminarium 101 00:05:43,530 --> 00:05:45,130 att vi presenterade i dag. 102 00:05:45,130 --> 00:05:48,510 Och detta är verkligen häftigt för göra interaktiva visualiseringar. 103 00:05:48,510 --> 00:05:54,460 Och D3.js förutsätter att du har någon form av data som ska ritas 104 00:05:54,460 --> 00:05:58,080 och R är ett bra sätt för att kunna göra dataanalys innan du exporterar det 105 00:05:58,080 --> 00:06:04,220 över till D3.js eller bara springa D3.js kommandon i R själv, 106 00:06:04,220 --> 00:06:08,240 liksom alla dessa andra bibliotek också. 107 00:06:08,240 --> 00:06:13,041 >> Så det var bara att införa vad är R och varför du kan använda den. 108 00:06:13,041 --> 00:06:14,790 Så förhoppningsvis har jag övertygat dig något 109 00:06:14,790 --> 00:06:18,460 om bara försöker se hur det är. 110 00:06:18,460 --> 00:06:23,930 Så jag ska gå vidare och gå igenom vissa fundamenta om R objekt 111 00:06:23,930 --> 00:06:26,150 och vad du kan verkligen göra. 112 00:06:26,150 --> 00:06:29,690 >> Så här är bara en gäng matematiska kommandon. 113 00:06:29,690 --> 00:06:35,000 Så säger you're-- du vill bygga språket själv och du bara vill 114 00:06:35,000 --> 00:06:38,080 att ha en massa olika verktyg. 115 00:06:38,080 --> 00:06:42,520 Någon sorts operation du tror att du skulle vill är ganska mycket kommer att vara i R. 116 00:06:42,520 --> 00:06:44,150 >> Så här är 2 plus 2. 117 00:06:44,150 --> 00:06:46,090 Här är två gånger pi. 118 00:06:46,090 --> 00:06:51,870 R har ett gäng inbyggda konstanter att du ofta kommer att använda som pi, e. 119 00:06:51,870 --> 00:06:56,230 >> Och sedan, här är 7 plus runif, så runif av en. 120 00:06:56,230 --> 00:07:02,450 Detta är en funktion som är genererar en slumpmässig uniform från 0 till 1. 121 00:07:02,450 --> 00:07:04,400 Och sedan finns det 3 upphöjt till 4. 122 00:07:04,400 --> 00:07:06,430 Det finns kvadratrötter. 123 00:07:06,430 --> 00:07:07,270 >> Det finns logg. 124 00:07:07,270 --> 00:07:14,500 Så loggar kommer att göra bas exponentiell av sig själv. 125 00:07:14,500 --> 00:07:18,337 Och sedan, om du anger en bas, då du kan göra vad basen du vill. 126 00:07:18,337 --> 00:07:19,920 Och så här är några andra kommandon. 127 00:07:19,920 --> 00:07:22,180 Så du har 23 mod 2. 128 00:07:22,180 --> 00:07:24,910 Då har du resten. 129 00:07:24,910 --> 00:07:27,110 Då har du vetenskapliga notation, om du också 130 00:07:27,110 --> 00:07:34,060 vill göra bara mer och mer komplicerade saker. 131 00:07:34,060 --> 00:07:37,320 >> Så här är uppdraget. 132 00:07:37,320 --> 00:07:40,830 Så typiska uppdrag inom R är gjort med en pil 133 00:07:40,830 --> 00:07:43,440 så det är mindre än och sedan bindestrecket. 134 00:07:43,440 --> 00:07:47,250 Så här jag bara tilldela 3 till variabeln val. 135 00:07:47,250 --> 00:07:50,160 >> Och då tänker jag skriva ut val och då skriver ut tre. 136 00:07:50,160 --> 00:07:53,920 Som standard i forskning tolk, det kommer att skriva ut saker för dig 137 00:07:53,920 --> 00:07:57,280 så du behöver inte ange skriva ut en val helst du vill skriva ut något. 138 00:07:57,280 --> 00:08:00,200 Du kan bara göra val och då det ska göra det åt dig. 139 00:08:00,200 --> 00:08:04,380 >> Du kan också använda är lika tekniskt som ett uppdrag operatör. 140 00:08:04,380 --> 00:08:07,190 Det finns små subtiliteter mellan att använda pilen 141 00:08:07,190 --> 00:08:10,730 operatör och likhets operatör för uppdrag. 142 00:08:10,730 --> 00:08:15,470 Mestadels av konvention, alla kommer bara använda pilen operatören. 143 00:08:15,470 --> 00:08:21,850 >> Och här, jag tilldela detta sned notation kallas 1 kolon 6. 144 00:08:21,850 --> 00:08:26,010 Detta genererar en vektor från 1 till 6. 145 00:08:26,010 --> 00:08:29,350 Och detta verkligen trevligt för då du bara tilldela vektorn till Val 146 00:08:29,350 --> 00:08:34,270 och som fungerar av sig själv. 147 00:08:34,270 --> 00:08:37,799 >> Så detta är redan gå från en single-- ett mycket intuitivt uppgifter 148 00:08:37,799 --> 00:08:41,070 struktur bara en dubbel på någon typ av typen i en vektor 149 00:08:41,070 --> 00:08:45,670 och som kommer att samla alla de skalära värden för dig. 150 00:08:45,670 --> 00:08:50,770 Så efter att ha gått från skalär, du har R-objekt och detta är en vektor. 151 00:08:50,770 --> 00:08:55,610 En vektor är någon form av samling av samma typ. 152 00:08:55,610 --> 00:08:58,150 Så här är ett gäng vektorer. 153 00:08:58,150 --> 00:08:59,800 >> Så det här är numeriskt. 154 00:08:59,800 --> 00:09:02,440 Numerisk är R: s sätt att säga dubbelt. 155 00:09:02,440 --> 00:09:07,390 Och så som standard, något antalet kommer att vara en dubbel. 156 00:09:07,390 --> 00:09:13,150 >> Så om du har c på 1,1, 3, negativt 5.7, är c ​​en funktion. 157 00:09:13,150 --> 00:09:16,760 Detta sammanfogar alla tre siffror i en vektor. 158 00:09:16,760 --> 00:09:19,619 Och detta kommer att be-- så om du märker 3 av sig själv, 159 00:09:19,619 --> 00:09:21,910 normalt du skulle anta att detta är som ett heltal, 160 00:09:21,910 --> 00:09:25,050 men eftersom alla vektorer är av samma typ, 161 00:09:25,050 --> 00:09:28,660 detta är en vektor med dubbel eller numeriskt i detta fall. 162 00:09:28,660 --> 00:09:34,920 >> rnorm är en funktion som genererar standardnormal variables-- 163 00:09:34,920 --> 00:09:36,700 eller standardnormalvärden. 164 00:09:36,700 --> 00:09:38,360 Och jag specificera två av dem. 165 00:09:38,360 --> 00:09:43,840 Så jag gör rnorm 2, tilldela det till devs, och sedan jag skriva ut devs. 166 00:09:43,840 --> 00:09:47,350 Så dessa är bara två slumpnormalvärden. 167 00:09:47,350 --> 00:09:50,060 >> Och sedan INTS om du gör du bryr dig om heltal. 168 00:09:50,060 --> 00:09:54,650 Så det här är bara om minnet fördelning och spara minnesstorlek. 169 00:09:54,650 --> 00:10:01,460 Så du skulle behöva lägga dina siffror från huvudstaden L. 170 00:10:01,460 --> 00:10:04,170 >> I allmänhet är detta R historiska notation 171 00:10:04,170 --> 00:10:06,940 för något som kallas lång heltal. 172 00:10:06,940 --> 00:10:09,880 Så för det mesta, kommer du vara att göra med dubbel. 173 00:10:09,880 --> 00:10:15,180 Och om du någonsin kommer senare På optimera din kod, 174 00:10:15,180 --> 00:10:18,110 du kan bara lägga till dessa L's efteråt eller under det 175 00:10:18,110 --> 00:10:22,280 om du är som prekognitiva om vad du kommer att göra dessa variabler. 176 00:10:22,280 --> 00:10:25,340 177 00:10:25,340 --> 00:10:26,890 >> Så här är ett tecken vektor. 178 00:10:26,890 --> 00:10:31,440 Så, återigen, jag sammanfoga tre strängar här gången. 179 00:10:31,440 --> 00:10:36,230 Lägg märke till att dubbla strängar och enstaka strängar är desamma i R. 180 00:10:36,230 --> 00:10:41,000 Så jag har arthur och Marvins och så när jag skriver ut det, alla av dem 181 00:10:41,000 --> 00:10:43,210 kommer att visa dubbla strängar. 182 00:10:43,210 --> 00:10:45,880 Och om du även vill inkludera dubbel eller enkel sträng 183 00:10:45,880 --> 00:10:50,070 i dina karaktärer, då kan du antingen alternera dina strängar. 184 00:10:50,070 --> 00:10:53,540 >> Så Marvins för andra elementet, är detta 185 00:10:53,540 --> 00:10:56,380 kommer att show-- dig bara har dubbla strängar 186 00:10:56,380 --> 00:10:59,050 och sedan en enda sträng så detta är omväxlande. 187 00:10:59,050 --> 00:11:04,040 Annars, om du vill använda en dubbel string operatör i en dubbel sträng 188 00:11:04,040 --> 00:11:07,090 när du förklara det, då du bara använda escape operatören. 189 00:11:07,090 --> 00:11:10,600 Så du gör bakstreck dubbel sträng. 190 00:11:10,600 --> 00:11:13,330 >> Och slutligen, vi också ha logiska vektorer. 191 00:11:13,330 --> 00:11:15,890 Så logical-- så SANT och FALSKT, och de är 192 00:11:15,890 --> 00:11:18,880 kommer att vara versaler. 193 00:11:18,880 --> 00:11:22,370 Och sedan, återigen, jag sammanfoga dem och sedan tilldela dem till bools. 194 00:11:22,370 --> 00:11:24,590 Så bools kommer att visa du SANT, FALSKT, och TRUE. 195 00:11:24,590 --> 00:11:28,280 196 00:11:28,280 --> 00:11:31,620 >> Så här är vektoriserade indexering. 197 00:11:31,620 --> 00:11:34,870 Så i början, jag Jag tar en function-- 198 00:11:34,870 --> 00:11:39,230 detta kallas en sequence-- sekvens från 2 till 12. 199 00:11:39,230 --> 00:11:42,490 Och jag tar en sekvens med 2. 200 00:11:42,490 --> 00:11:46,660 Så det kommer att göra 2, 4, 6, 8, 10 och 12. 201 00:11:46,660 --> 00:11:50,080 Och sedan är jag indexering att få den tredje delen. 202 00:11:50,080 --> 00:11:55,770 >> Så en sak att tänka på är att r index genom att utgå från 1. 203 00:11:55,770 --> 00:12:00,550 Så vals 3 kommer att ge du det tredje elementet. 204 00:12:00,550 --> 00:12:04,580 Detta är en slags annorlunda än andra språk där det börjar från noll. 205 00:12:04,580 --> 00:12:09,780 Så i C eller C ++, till exempel, du är kommer att få det fjärde elementet. 206 00:12:09,780 --> 00:12:13,280 >> Och här är vals från 3 till 5. 207 00:12:13,280 --> 00:12:16,030 Så en sak som är riktigt coolt är att du 208 00:12:16,030 --> 00:12:20,410 kan generera temporära variabler inne och sedan bara använda dem i farten. 209 00:12:20,410 --> 00:12:21,960 Så här är det 3 till 5. 210 00:12:21,960 --> 00:12:25,070 Så jag genererar en vektor 3, 4, och 5 och sedan 211 00:12:25,070 --> 00:12:29,700 Jag indexerar att få den tredje, fjärde och femte element. 212 00:12:29,700 --> 00:12:32,280 >> Så samma sätt kan du abstrakt detta att bara göra 213 00:12:32,280 --> 00:12:35,280 någon form av en vektor som ger dig indexering. 214 00:12:35,280 --> 00:12:40,050 Så här är vals och sedan första, tredje, och sjätte element. 215 00:12:40,050 --> 00:12:42,800 Och sedan, om du vill att göra ett komplement, 216 00:12:42,800 --> 00:12:45,210 så du bara göra minus efteråt och det kommer 217 00:12:45,210 --> 00:12:48,600 ge dig allt det är inte första, tredje, eller sjätte elementet. 218 00:12:48,600 --> 00:12:51,590 Så det här kommer att bli 4, 8 och 10. 219 00:12:51,590 --> 00:12:54,380 >> Och om du vill få ännu mer avancerad, 220 00:12:54,380 --> 00:12:57,610 Du kan sammanfoga booleska vektorer. 221 00:12:57,610 --> 00:13:05,210 Så detta index kommer att ge dig denna Boolean vektor längd 6. 222 00:13:05,210 --> 00:13:07,280 Så rep TRUE kommatecken 3. 223 00:13:07,280 --> 00:13:09,680 Detta kommer att upprepas TRUE tre gånger. 224 00:13:09,680 --> 00:13:12,900 Så det här kommer att ge dig en vektor SANT, SANT, SANT. 225 00:13:12,900 --> 00:13:17,470 >> rep FALSE 4-- detta kommer att ge dig en vektor av FALSKT, FALSKT, FALSKT, FALSKT. 226 00:13:17,470 --> 00:13:21,280 Och sedan c kommer att sammanfoga dessa två Booleans tillsammans. 227 00:13:21,280 --> 00:13:24,090 Så du kommer att få tre Trues och sedan fyra FALSEs. 228 00:13:24,090 --> 00:13:28,460 >> Så att när du index vals, du kommer att få TRUE, SANT, SANT. 229 00:13:28,460 --> 00:13:31,420 Så det kommer att säga ja, Jag vill ha dessa tre element. 230 00:13:31,420 --> 00:13:33,520 Och sedan FALSKT, FALSKT, FALSKT, FALSKT går 231 00:13:33,520 --> 00:13:37,140 att säga nej, jag vill inte de element så det kommer inte att lämna tillbaka dem. 232 00:13:37,140 --> 00:13:41,490 >> Och jag antar att det finns faktiskt ett stavfel här eftersom detta säger upprepning TRUE 3 233 00:13:41,490 --> 00:13:47,990 och upprepa FALSKT 4, och tekniskt, du bara har sex element så upprepa FALSKT, 234 00:13:47,990 --> 00:13:50,470 det bör vara upprepa FALSKT 3. 235 00:13:50,470 --> 00:13:55,260 Jag tycker R är också smart nog sådana att om du bara specificera 4 här, då 236 00:13:55,260 --> 00:13:56,630 det kommer inte ens fel ut. 237 00:13:56,630 --> 00:13:58,480 Det kommer bara att ge dig detta värde. 238 00:13:58,480 --> 00:14:00,970 Så det ska bara ignorera det fjärde FALSKT. 239 00:14:00,970 --> 00:14:05,310 240 00:14:05,310 --> 00:14:09,270 >> Så här är vektoriserade uppdrag. 241 00:14:09,270 --> 00:14:15,480 Så set.seed-- detta bara sätter utsäde för pseudoslumptal. 242 00:14:15,480 --> 00:14:20,110 Så jag ställer fröet till 42, vilket innebär att om jag skapar 243 00:14:20,110 --> 00:14:22,950 tre slumpmässiga normal värden, och sedan om du 244 00:14:22,950 --> 00:14:27,400 köra set.seed på egen hand dator med samma värde 42, 245 00:14:27,400 --> 00:14:30,990 då får du också Samma tre slump normaler. 246 00:14:30,990 --> 00:14:33,411 >> Så det här är riktigt bra för reproducerbarhet. 247 00:14:33,411 --> 00:14:35,910 Vanligtvis när du gör något slags vetenskaplig analys, 248 00:14:35,910 --> 00:14:37,230 du skulle vilja ställa fröet. 249 00:14:37,230 --> 00:14:41,270 På så sätt andra forskare kan bara reproducera exakt samma kod du har 250 00:14:41,270 --> 00:14:44,790 gjort eftersom de kommer att ha exakt Samma slumpvariabler that-- eller slumpmässig 251 00:14:44,790 --> 00:14:47,270 värden som du har tagit ut också. 252 00:14:47,270 --> 00:14:49,870 253 00:14:49,870 --> 00:14:53,910 >> Och så den vektoriserade uppdraget Här visar de Vals 1 till 2. 254 00:14:53,910 --> 00:14:59,290 Så det tar de två första delarna av vals och sedan tilldelar dem till 0. 255 00:14:59,290 --> 00:15:03,940 Och sedan, du kan också bara göra liknande sak med Booleans. 256 00:15:03,940 --> 00:15:09,340 >> Så vals är inte lika med 0-- detta kommer ge dig en vektor FALSKT, FALSKT, SANT 257 00:15:09,340 --> 00:15:10,350 i det här fallet. 258 00:15:10,350 --> 00:15:13,770 Och sedan, det kommer att säga något av dessa index som var sant, 259 00:15:13,770 --> 00:15:15,270 då det kommer att tilldela till 5. 260 00:15:15,270 --> 00:15:18,790 Så det tar det tredje elementet här och sedan tilldelar den till 5. 261 00:15:18,790 --> 00:15:22,300 >> Och detta är verkligen trevligt jämfört med låg nivå språk 262 00:15:22,300 --> 00:15:25,560 där du måste använda för loopar att göra allt detta vektoriserade grejer 263 00:15:25,560 --> 00:15:30,281 eftersom det är bara väldigt intuitivt och det är en enda-liner. 264 00:15:30,281 --> 00:15:32,030 Och vad som är bra vektoriserad betecknings 265 00:15:32,030 --> 00:15:37,020 är att i R, dessa är typ av inbyggd så att de är nästan lika snabbt 266 00:15:37,020 --> 00:15:42,490 som gör i en låg nivå språk som motsätter sig att göra en for-loop i forskning 267 00:15:42,490 --> 00:15:46,317 och sedan ha den att göra den dynamiska indexering självt. 268 00:15:46,317 --> 00:15:48,900 Och det kommer att bli långsammare än att göra denna typ av vektoriserad sak 269 00:15:48,900 --> 00:15:55,950 där den kan göra det parallellt, där det gör den i gäng grunden. 270 00:15:55,950 --> 00:15:58,650 >> Så här är vektoriserad verksamhet. 271 00:15:58,650 --> 00:16:04,920 Så jag genererar ett värde 1 till 3, tilldela det till vec1, 3 och 5, vec2, 272 00:16:04,920 --> 00:16:05,950 addera dem. 273 00:16:05,950 --> 00:16:11,490 Den lägger dem komponentmässigt så det är ett plus 3, 2 plus 4, och så vidare. 274 00:16:11,490 --> 00:16:13,330 >> vec1 gånger vec2. 275 00:16:13,330 --> 00:16:16,110 Detta multiplicerar de två värderar komponent klokt. 276 00:16:16,110 --> 00:16:21,830 Så det är 1 gånger 3, 2 gånger 4, och därefter 3 gånger 5. 277 00:16:21,830 --> 00:16:28,250 >> Och sedan, på samma sätt kan du också göra comparisons-- logiska jämförelser. 278 00:16:28,250 --> 00:16:33,640 Så det är FALSKT FALSKT SANT i detta fall eftersom en inte är större än 3, 279 00:16:33,640 --> 00:16:35,920 2 inte är större än fyra. 280 00:16:35,920 --> 00:16:41,160 Detta är, antar jag, en annan stavfel, 3 är definitivt inte större än 5. 281 00:16:41,160 --> 00:16:41,660 Yeah. 282 00:16:41,660 --> 00:16:45,770 Och så kan du bara göra allt dessa enkla operationer 283 00:16:45,770 --> 00:16:48,350 eftersom deras ärvt från klasserna själva. 284 00:16:48,350 --> 00:16:51,110 285 00:16:51,110 --> 00:16:52,580 >> Så det var bara vektorn. 286 00:16:52,580 --> 00:16:56,530 Och det är typ av de mest fundamentala R-objekt eftersom givet en vektor, 287 00:16:56,530 --> 00:16:59,170 man kan konstruera mer avancerade objekt. 288 00:16:59,170 --> 00:17:00,560 >> Så här är en matris. 289 00:17:00,560 --> 00:17:05,030 Detta är i huvudsak abstraktion av vad en matris är själv. 290 00:17:05,030 --> 00:17:10,099 Så i det här fallet, det är tre olika vektorer, där var och en är en kolumn, 291 00:17:10,099 --> 00:17:12,710 eller så kan du betrakta det som var och en är en rad. 292 00:17:12,710 --> 00:17:18,250 >> Så jag lagra en matris från 1 till 9 och sedan jag ange 3 rader. 293 00:17:18,250 --> 00:17:23,364 Så 1 till 9 ger dig en vektor 1, 2, 3, 4, 5, 6, och hela vägen till 9. 294 00:17:23,364 --> 00:17:29,250 >> En sak att också ha i åtanke är att R-butiker värden i kolumn-dur format. 295 00:17:29,250 --> 00:17:34,160 Så med andra ord, när du ser en till 9, det kommer att lagra them-- 296 00:17:34,160 --> 00:17:36,370 det kommer att bli 1, 2, 3 i den första kolumnen, 297 00:17:36,370 --> 00:17:38,510 och då ska göra 4, 5, 6 i den andra kolumnen, 298 00:17:38,510 --> 00:17:41,440 och sedan 7, 8, 9 i den tredje kolumnen. 299 00:17:41,440 --> 00:17:45,570 >> Och här är några andra gemensamma funktioner som du kan använda. 300 00:17:45,570 --> 00:17:49,650 Så dim matta, kommer detta att ge dig dimensionerna av matrisen. 301 00:17:49,650 --> 00:17:52,620 Det kommer att återvända dig en vektor av dimensionen. 302 00:17:52,620 --> 00:17:55,580 Så i detta fall, eftersom vår matris är 3 av 3, 303 00:17:55,580 --> 00:18:01,900 det kommer att ge dig en numeriska vektor som är 3 3. 304 00:18:01,900 --> 00:18:05,270 >> Och här är bara visar matrismultiplikation. 305 00:18:05,270 --> 00:18:11,970 Så brukar, om du bara gör asterisk-- så matta asterisk mat-- 306 00:18:11,970 --> 00:18:15,380 Detta kommer att bli komponent-wise operation 307 00:18:15,380 --> 00:18:17,300 eller vad som kallas den Hadamard produkten. 308 00:18:17,300 --> 00:18:21,310 Så det kommer att göra varje elementet komponentmässigt. 309 00:18:21,310 --> 00:18:23,610 Men om du vill matris multiplication-- 310 00:18:23,610 --> 00:18:29,380 så multiplicera den första raden tider den andra matrisen första kolumnen 311 00:18:29,380 --> 00:18:34,510 och så on-- du skulle använda denna procent operation. 312 00:18:34,510 --> 00:18:38,110 >> Och T av mattan är bara en operation för transponering. 313 00:18:38,110 --> 00:18:42,590 Så jag säger ta transponering i matrisen, multiplicera det med matrisen 314 00:18:42,590 --> 00:18:43,090 själv. 315 00:18:43,090 --> 00:18:45,006 Och då det kommer att tillbaka till dig en annan 3 316 00:18:45,006 --> 00:18:50,700 med 3 matris som visar den produkt du skulle vilja. 317 00:18:50,700 --> 00:18:53,750 >> Och så det var matris. 318 00:18:53,750 --> 00:18:56,020 Här är vad som kallas en dataram. 319 00:18:56,020 --> 00:19:00,780 En data ram du kan tänka på som en matris, men varje kolumn själv 320 00:19:00,780 --> 00:19:02,990 kommer att vara av en annan typ. 321 00:19:02,990 --> 00:19:07,320 >> Så vad är riktigt coolt om uppgifter ramar är att i dataanalys själv, 322 00:19:07,320 --> 00:19:11,260 du kommer att ha allt detta heterogena data och alla dessa verkligen 323 00:19:11,260 --> 00:19:15,640 röriga saker där var och en av kolumnerna själva kan vara av olika typer. 324 00:19:15,640 --> 00:19:21,460 Så här jag säger skapa en dataram, gör ints från 1 till 3, 325 00:19:21,460 --> 00:19:24,750 och sedan också har en karaktär vektor. 326 00:19:24,750 --> 00:19:28,470 Så jag kan indexera genom var och en av dessa kolumner 327 00:19:28,470 --> 00:19:30,930 och sedan ska jag få de värden själva. 328 00:19:30,930 --> 00:19:34,370 Och du kan också göra någon form av operationer på dataramar. 329 00:19:34,370 --> 00:19:38,040 Och för det mesta när du är gör dataanalys eller någon sorts 330 00:19:38,040 --> 00:19:42,042 av förbehandling, kommer du att arbeta med dessa datastrukturer 331 00:19:42,042 --> 00:19:44,250 där varje kolumn kommer vara av en annan typ. 332 00:19:44,250 --> 00:19:47,880 333 00:19:47,880 --> 00:19:52,970 >> Slutligen så dessa är i huvudsak bara de fyra viktiga objekt i R. Lista 334 00:19:52,970 --> 00:19:55,820 kommer bara att samla in några andra objekt som du vill. 335 00:19:55,820 --> 00:20:00,130 Så det kommer att lagra detta i en variabel som du enkelt kan komma åt. 336 00:20:00,130 --> 00:20:02,370 >> Så här, jag tar en lista. 337 00:20:02,370 --> 00:20:04,460 Jag säger saker lika 3. 338 00:20:04,460 --> 00:20:08,060 Så jag kommer att ha en del i listan, och detta kallas saker, 339 00:20:08,060 --> 00:20:10,570 och det kommer att ha värdet 3. 340 00:20:10,570 --> 00:20:13,140 >> Jag kan också skapa en matris. 341 00:20:13,140 --> 00:20:17,970 Så detta är 1 till 4 och slutraden lika med 2, så en 2 av 2 matris. 342 00:20:17,970 --> 00:20:20,270 Även i listan och det kallas matta. 343 00:20:20,270 --> 00:20:24,690 moreStuff, en teckensträng, och även en annan lista i sig. 344 00:20:24,690 --> 00:20:27,710 >> Så detta är en lista som är 5 och björn. 345 00:20:27,710 --> 00:20:30,990 Så det har värdet 5 och det har teckensträngen björnen 346 00:20:30,990 --> 00:20:32,710 och det är en lista inuti en lista. 347 00:20:32,710 --> 00:20:35,965 Så du kan ha dessa rekursiva saker där 348 00:20:35,965 --> 00:20:38,230 du har another-- a skriver inom typen. 349 00:20:38,230 --> 00:20:41,420 Så på samma sätt, kan du ha en matris inuti en annan matris och så vidare. 350 00:20:41,420 --> 00:20:44,264 Och en lista är bara ett bra sätt att samla och sammanställa 351 00:20:44,264 --> 00:20:45,430 alla dessa olika objekt. 352 00:20:45,430 --> 00:20:50,210 353 00:20:50,210 --> 00:20:57,150 >> Och slutligen, här är bara hjälpa ifall Detta var bara gått över mycket snabbt. 354 00:20:57,150 --> 00:21:01,350 Så när du är förvirrad om något slags funktion, 355 00:21:01,350 --> 00:21:03,510 du kan göra hjälp av den funktionen. 356 00:21:03,510 --> 00:21:07,120 Så du kan göra hjälp matris eller ett frågetecken matris. 357 00:21:07,120 --> 00:21:11,430 Och hjälp och frågetecknet är bara en förkortning för samma sak 358 00:21:11,430 --> 00:21:13,040 så de är alias. 359 00:21:13,040 --> 00:21:16,820 >> lm är en funktion som bara gör en linjär modell. 360 00:21:16,820 --> 00:21:20,340 Men om du bara har ingen aning om hur det verk, kan du bara göra hjälp av lm 361 00:21:20,340 --> 00:21:24,610 och det kommer att ge dig några typ av dokumentation som 362 00:21:24,610 --> 00:21:27,960 ser ungefär som en Mannen webbplatsen på Unix, där 363 00:21:27,960 --> 00:21:34,210 du har en kort beskrivning av vad den gör, även vad dess argument är, 364 00:21:34,210 --> 00:21:38,850 vad den returnerar, och bara tips om hur att använda det, och några exempel också. 365 00:21:38,850 --> 00:21:41,680 366 00:21:41,680 --> 00:21:52,890 >> Så låt mig gå vidare och show några demo av att använda R. OK. 367 00:21:52,890 --> 00:21:55,470 Så jag gick över mycket snabbt bara data 368 00:21:55,470 --> 00:21:59,440 strukturer och någon sorts den op-- några av verksamheterna. 369 00:21:59,440 --> 00:22:02,960 Här är några funktioner. 370 00:22:02,960 --> 00:22:06,750 >> Så här jag ska bara att definiera en funktion. 371 00:22:06,750 --> 00:22:09,970 Så jag använder också tilldelningsopera här, 372 00:22:09,970 --> 00:22:12,610 och sedan säger jag förklara den som en funktion. 373 00:22:12,610 --> 00:22:14,140 Och det tar värdet x. 374 00:22:14,140 --> 00:22:18,210 Så detta är något värde som du vill och jag kommer att återvända x självt. 375 00:22:18,210 --> 00:22:20,840 Så detta är identiteten funktionen. 376 00:22:20,840 --> 00:22:23,670 >> Och vad är coolt om detta jämfört med andra språk 377 00:22:23,670 --> 00:22:26,330 och en annan låg-nivå språk är att x 378 00:22:26,330 --> 00:22:29,350 kan vara i sig någon typ och det kommer tillbaka den typen. 379 00:22:29,350 --> 00:22:35,251 Så du kan imagine-- så låt mig bara köra detta snabbt. 380 00:22:35,251 --> 00:22:35,750 Ursäkta. 381 00:22:35,750 --> 00:22:40,300 >> Så en sak jag bör också nämna är att denna editor jag använder 382 00:22:40,300 --> 00:22:41,380 kallas rstudio. 383 00:22:41,380 --> 00:22:44,389 Detta är vad som kallas en IDE. 384 00:22:44,389 --> 00:22:46,180 Och en sak som är riktigt trevligt om det här 385 00:22:46,180 --> 00:22:51,500 är att den innehåller en hel del av saker du vill göra i R av sig själv 386 00:22:51,500 --> 00:22:53,180 bara väldigt intuitivt. 387 00:22:53,180 --> 00:22:55,550 >> Så här är en tolk konsol. 388 00:22:55,550 --> 00:23:02,160 Så på samma sätt, kan du också få det här konsol rå bara genom att göra en kapital R. 389 00:23:02,160 --> 00:23:05,630 Och det är precis det samma sak som konsolen. 390 00:23:05,630 --> 00:23:12,210 Så jag kan bara göra id-funktion x, x, x. 391 00:23:12,210 --> 00:23:16,130 Och then-- och sedan att kommer att bli bra i sig. 392 00:23:16,130 --> 00:23:19,200 393 00:23:19,200 --> 00:23:21,740 >> Så rstudio är stor eftersom det har konsolen. 394 00:23:21,740 --> 00:23:25,360 Det har också de dokument du vill köra på. 395 00:23:25,360 --> 00:23:28,629 Och då den har vissa variabler att du kan se i miljöer. 396 00:23:28,629 --> 00:23:30,420 Och sedan, om du har att göra tomter, då du 397 00:23:30,420 --> 00:23:33,730 kan bara se det här, i motsats till hantera alla dessa olika fönster 398 00:23:33,730 --> 00:23:35,940 av sig själva. 399 00:23:35,940 --> 00:23:40,530 >> Jag faktiskt personligen använder Vim, men jag känns som rstudio är utmärkt bara 400 00:23:40,530 --> 00:23:44,640 för att få en bra idé på hur man använder R. Vanligtvis 401 00:23:44,640 --> 00:23:47,040 när du försöker lära sig några nya uppdrag, 402 00:23:47,040 --> 00:23:49,590 du inte vill hantera för många saker på en gång. 403 00:23:49,590 --> 00:23:53,120 Så R är bara en very-- rstudio är ett mycket bra sätt att lära R 404 00:23:53,120 --> 00:23:56,760 utan att behöva ta itu med alla dessa andra saker. 405 00:23:56,760 --> 00:23:58,600 >> Så här jag kör id hej. 406 00:23:58,600 --> 00:24:00,090 Detta returnerar hej. 407 00:24:00,090 --> 00:24:01,740 id 123. 408 00:24:01,740 --> 00:24:04,610 Här är en vektor av heltal. 409 00:24:04,610 --> 00:24:08,620 Så på samma sätt, eftersom du kan ta någon någon sorts värde, 410 00:24:08,620 --> 00:24:16,060 Du kan göra åter id x så återgår 1234 och 5. 411 00:24:16,060 --> 00:24:22,210 >> Och låt mig bara visa er att detta verkligen är ett heltal. 412 00:24:22,210 --> 00:24:28,800 Och på samma sätt, om du gör klass id x, det kommer att bli heltal. 413 00:24:28,800 --> 00:24:34,170 Och då kan du också jämföra de två och det är sant. 414 00:24:34,170 --> 00:24:38,350 Så jag kontrollera om id till x lika jämlikar x och varsel 415 00:24:38,350 --> 00:24:39,760 att det ger dig två Trues. 416 00:24:39,760 --> 00:24:44,280 Så detta är inte att säga är de två objekten identiska, 417 00:24:44,280 --> 00:24:46,845 men är var och en av posterna inom vektorerna identiska. 418 00:24:46,845 --> 00:24:50,000 419 00:24:50,000 --> 00:24:52,090 >> Här är bounded.compare. 420 00:24:52,090 --> 00:24:58,470 Så det här är något mer komplicerat genom att den har en, om tillstånd och annat 421 00:24:58,470 --> 00:25:00,960 och sedan tar det två argument i taget. 422 00:25:00,960 --> 00:25:02,640 Så x är av valfri typ. 423 00:25:02,640 --> 00:25:06,280 Och jag säger detta andra argumentet är en. 424 00:25:06,280 --> 00:25:08,380 Detta kan vara allt också. 425 00:25:08,380 --> 00:25:12,490 Men som standard, det kommer att ta 5 Om du inte anger något. 426 00:25:12,490 --> 00:25:16,730 >> Så här jag ska säga om x är större än ett. 427 00:25:16,730 --> 00:25:19,220 Så om jag inte anger ett, det säger att om x är större än 5, 428 00:25:19,220 --> 00:25:20,470 då kommer jag att återvända SANT. 429 00:25:20,470 --> 00:25:23,230 annars kommer jag att återvända FALSKT. 430 00:25:23,230 --> 00:25:24,870 Så låt mig gå vidare och definiera detta. 431 00:25:24,870 --> 00:25:30,600 432 00:25:30,600 --> 00:25:34,550 >> Och nu ska jag köra bounded.compare 3. 433 00:25:34,550 --> 00:25:39,150 Så det säger är 3 färre than-- är 3 större än 5. 434 00:25:39,150 --> 00:25:41,830 Nej, det är inte så FALSKT. 435 00:25:41,830 --> 00:25:46,550 >> Och bounded.compare 3 och jag kommer att jämföra den med en lika 2. 436 00:25:46,550 --> 00:25:50,700 Så nu jag säger ja, nu har jag vill ha en att vara något annat. 437 00:25:50,700 --> 00:25:52,750 Så jag ska säga en, bör du vara 2. 438 00:25:52,750 --> 00:25:56,640 >> Jag kan antingen göra den här sortens notation eller jag säger en lika 2. 439 00:25:56,640 --> 00:25:58,720 Detta är en mer lättläst i att när du är 440 00:25:58,720 --> 00:26:01,450 titta på dessa verkligen komplicerade funktioner som 441 00:26:01,450 --> 00:26:08,110 ta flera arguments-- och detta kan vara tiotals oftentimes-- säger bara 442 00:26:08,110 --> 00:26:11,140 A är lika 2 är mer läsbar för dig så att senare i framtiden 443 00:26:11,140 --> 00:26:13,020 du vet vad du gör. 444 00:26:13,020 --> 00:26:17,120 >> Så i det här fallet, är jag säger är 3 större än två. 445 00:26:17,120 --> 00:26:18,270 Ja det är. 446 00:26:18,270 --> 00:26:22,350 Och på samma sätt, kan jag bara ta bort detta och säga, är 3 större än 2 447 00:26:22,350 --> 00:26:23,440 där ett är lika med 2. 448 00:26:23,440 --> 00:26:26,230 Och det är också sant. 449 00:26:26,230 --> 00:26:26,730 Ja? 450 00:26:26,730 --> 00:26:29,670 >> PUBLIK: Är du exekvera rad för rad? 451 00:26:29,670 --> 00:26:30,670 >> DUSTIN TRAN: Ja jag är. 452 00:26:30,670 --> 00:26:33,900 Så vad jag gör här är tar denna text document-- 453 00:26:33,900 --> 00:26:39,825 och vad som är bra med rstudio är att Jag kan bara köra en short-- en nyckel genväg. 454 00:26:39,825 --> 00:26:41,820 Så jag gör Ctrl-Enter. 455 00:26:41,820 --> 00:26:44,850 >> Och sedan, jag tar rad i textdokumentet 456 00:26:44,850 --> 00:26:46,710 och sedan sätta i konsolen. 457 00:26:46,710 --> 00:26:50,800 Så här jag säger, bounded.compare och jag gör Kontroll-X. 458 00:26:50,800 --> 00:26:52,540 Så jag kan bara kör här också. 459 00:26:52,540 --> 00:26:54,920 Och då tar det linjen och sedan lägga till den här. 460 00:26:54,920 --> 00:26:57,900 Och sedan på samma sätt, kan jag kör här. 461 00:26:57,900 --> 00:27:04,630 Och så kommer det att bara hålla definiera linjerna in i konsolen så där. 462 00:27:04,630 --> 00:27:10,690 >> Och om du också märker lockigt hängslen är det precis som i C-syntax. 463 00:27:10,690 --> 00:27:13,910 x-- om om villkoret är också kommer att använda parenteser och sedan 464 00:27:13,910 --> 00:27:15,350 Du kan använda annat. 465 00:27:15,350 --> 00:27:17,496 En annan är annars om. 466 00:27:17,496 --> 00:27:21,440 Så detta kommer att bli x är lika är lika med ett, till exempel. 467 00:27:21,440 --> 00:27:24,190 468 00:27:24,190 --> 00:27:26,350 Och då kommer jag att tillbaka något här. 469 00:27:26,350 --> 00:27:29,490 >> Lägg märke till att det finns två olika saker här som är på gång. 470 00:27:29,490 --> 00:27:34,360 En är att här jag specificera returnera värdet SANT. 471 00:27:34,360 --> 00:27:35,950 Här jag säger bara x. 472 00:27:35,950 --> 00:27:39,970 Så R kommer oftast som standard ta det sista arguments-- 473 00:27:39,970 --> 00:27:43,510 eller ta den sista raden i koden, och det kommer att bli vad det tillbaka. 474 00:27:43,510 --> 00:27:46,920 Så här är det samma sak som att göra retur x. 475 00:27:46,920 --> 00:27:49,450 476 00:27:49,450 --> 00:27:50,540 >> Och bara för att visa dig. 477 00:27:50,540 --> 00:27:54,000 478 00:27:54,000 --> 00:27:57,052 Och då kommer det att fungera bara sådär. 479 00:27:57,052 --> 00:27:58,260 Så låt mig fortsätta med detta. 480 00:27:58,260 --> 00:28:00,630 >> Så else if. 481 00:28:00,630 --> 00:28:04,060 Och egentligen, kan jag returnera något jag skulle vilja. 482 00:28:04,060 --> 00:28:06,680 Så jag har inte ens till retur Booleans hela tiden, 483 00:28:06,680 --> 00:28:08,410 Jag kan bara returnera något annat. 484 00:28:08,410 --> 00:28:10,670 Så jag kan göra retur björn. 485 00:28:10,670 --> 00:28:12,989 >> Så om x är lika är lika med ett, det kommer att återvända björn. 486 00:28:12,989 --> 00:28:14,530 Annars kommer det att återvända SANT. 487 00:28:14,530 --> 00:28:19,310 Jag kan också göra en vektor eller egentligen vad som helst. 488 00:28:19,310 --> 00:28:22,210 >> Och normalt statiskt typade språk, 489 00:28:22,210 --> 00:28:23,840 du måste ange en typ här. 490 00:28:23,840 --> 00:28:25,750 Och märker att det bara kan vara vad som helst. 491 00:28:25,750 --> 00:28:32,400 Och R är intelligent nog att det kommer bara göra detta och det kommer att fungera bra. 492 00:28:32,400 --> 00:28:33,620 >> Så låt mig definiera detta. 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 vara en lockig stag här. 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 Okej. 500 00:28:54,530 --> 00:28:58,250 Så nu ska vi jämföra 3 och en lika 3. 501 00:28:58,250 --> 00:29:01,860 Så det borde return-- yeah-- värdet björn. 502 00:29:01,860 --> 00:29:06,740 >> Så nu en mer allmän sak är som hur är andra datastrukturer. 503 00:29:06,740 --> 00:29:09,110 Så du har denna funktion. 504 00:29:09,110 --> 00:29:15,360 Detta kommer att fungera på något slag av värde som 3 eller något numeriskt, 505 00:29:15,360 --> 00:29:17,500 med andra ord, dubbel. 506 00:29:17,500 --> 00:29:19,330 >> Men hur är det något som en vektor. 507 00:29:19,330 --> 00:29:27,750 Så vad händer om du do-- så jag är kommer att tilldela val till, säg, 4 till 6. 508 00:29:27,750 --> 00:29:31,640 Så om jag tillbaka här, det här är en vektor från 4, 5, 6. 509 00:29:31,640 --> 00:29:34,935 >> Nu ska vi se vad som händer om jag gör bounded.compare val. 510 00:29:34,935 --> 00:29:37,680 511 00:29:37,680 --> 00:29:42,450 Så detta kommer att ge dig 15 1251. 512 00:29:42,450 --> 00:29:46,440 Så med andra ord, det säger om man tittar på detta tillstånd 513 00:29:46,440 --> 00:29:50,040 så det står x är mindre än en eller något. 514 00:29:50,040 --> 00:29:51,880 Så detta är något förvirrande för nu 515 00:29:51,880 --> 00:29:53,379 du bara inte vet vad som händer. 516 00:29:53,379 --> 00:29:58,690 Så jag antar att en sak som är riktigt bra om bara försöka felsöka 517 00:29:58,690 --> 00:30:04,600 är att du bara kan göra val är större än en och se vad som händer där. 518 00:30:04,600 --> 00:30:09,720 >> Så val-- en är som standard 5 så låt oss bara göra Val större än 5. 519 00:30:09,720 --> 00:30:14,280 Så detta är en vektor FALSKT FALSKT SANT. 520 00:30:14,280 --> 00:30:17,206 Så nu när du tittar på detta, det kommer att säga om, 521 00:30:17,206 --> 00:30:20,080 och sedan det kommer att ge dig det här är en vektor av FALSKT FALSKT SANT. 522 00:30:20,080 --> 00:30:23,450 >> Så när du passerar detta i R, R har ingen aning om vad du gör. 523 00:30:23,450 --> 00:30:26,650 Eftersom det förväntar en enda värde, vilket är ett booleskt, och nu 524 00:30:26,650 --> 00:30:29,420 du ger det en vektor av Booleans. 525 00:30:29,420 --> 00:30:31,970 Så som standard, är R bara kommer att säga vad sjutton, 526 00:30:31,970 --> 00:30:35,440 Jag ska anta att du är kommer att ta det första elementet här. 527 00:30:35,440 --> 00:30:38,320 Så jag ska säga-- jag kommer att anta att detta är falskt. 528 00:30:38,320 --> 00:30:40,890 Så det kommer att säga nej, det är inte rätt. 529 00:30:40,890 --> 00:30:45,246 >> Likaså kommer det att vara Val lika lika med en. 530 00:30:45,246 --> 00:30:47,244 Nej, förlåt 5. 531 00:30:47,244 --> 00:30:48,910 Och det är också kommer att vara falsk också. 532 00:30:48,910 --> 00:30:52,410 Så det kommer att säga nej, Det är inte sant och så det är 533 00:30:52,410 --> 00:30:53,680 kommer att återvända denna sista. 534 00:30:53,680 --> 00:30:56,420 535 00:30:56,420 --> 00:31:01,360 >> Så detta är antingen bra eller dåligt sak, beroende på hur du ser det. 536 00:31:01,360 --> 00:31:05,104 För när du är skapar dessa funktioner, 537 00:31:05,104 --> 00:31:06,770 du egentligen inte vet vad som händer. 538 00:31:06,770 --> 00:31:10,210 Så ibland man vill ett fel, eller kanske du bara vill ha en varning. 539 00:31:10,210 --> 00:31:12,160 I detta fall behöver R inte göra det. 540 00:31:12,160 --> 00:31:14,300 Så det är verkligen upp till dig baserat bort av vad 541 00:31:14,300 --> 00:31:17,310 du tror att språket bör göra i detta fall 542 00:31:17,310 --> 00:31:22,920 Om du passerar i en vektor av Booleans När du gör en om tillstånd. 543 00:31:22,920 --> 00:31:31,733 >> Så låt oss säga att du hade den ursprungliga en med om annars returnera TRUE och du är 544 00:31:31,733 --> 00:31:34,190 kommer att återvända FALSKT. 545 00:31:34,190 --> 00:31:39,300 Så ett sätt att abstrahera detta är att säga att jag 546 00:31:39,300 --> 00:31:41,530 behöver inte ens detta villkorade sak. 547 00:31:41,530 --> 00:31:47,220 En annan sak jag kan göra är att bara åter värdena själva. 548 00:31:47,220 --> 00:31:53,240 Så om du märker, om du gör val är större än 5, 549 00:31:53,240 --> 00:31:56,350 detta kommer att returnera en vektor FALSKT FALSKT SANT. 550 00:31:56,350 --> 00:31:58,850 >> Kanske detta är vad du vill ha för bounded.compare. 551 00:31:58,850 --> 00:32:02,940 Du vill returnera en vektor av Booleans där den jämför varje av värdena 552 00:32:02,940 --> 00:32:04,190 för sig själva. 553 00:32:04,190 --> 00:32:11,165 Så du kan bara göra bounded.compare Funktionen x, en lika 5. 554 00:32:11,165 --> 00:32:13,322 555 00:32:13,322 --> 00:32:15,363 Och sedan istället för att göra detta om annat tillstånd, 556 00:32:15,363 --> 00:32:21,430 Jag kommer bara att återvända x är större än fem. 557 00:32:21,430 --> 00:32:23,620 Så om det är sant, då det kommer att återvända SANT. 558 00:32:23,620 --> 00:32:26,830 Och sedan om det inte är det kommer att återvända FALSKT. 559 00:32:26,830 --> 00:32:30,880 >> Och detta kommer att fungera för någon av dessa strukturer. 560 00:32:30,880 --> 00:32:41,450 Så jag kan bounded.compare c 1 6 eller 9 och sedan ska jag säga en lika med 6, 561 00:32:41,450 --> 00:32:42,799 till exempel. 562 00:32:42,799 --> 00:32:44,840 Och då det kommer att ge dig rätt Boolean 563 00:32:44,840 --> 00:32:48,240 vektor som du skapar. 564 00:32:48,240 --> 00:32:50,660 >> Så de är bara funktioner och nu vill jag bara 565 00:32:50,660 --> 00:32:54,980 visa er några interaktiva grafik. 566 00:32:54,980 --> 00:32:59,700 Jag tror inte att jag faktiskt har Wi-Fi här så låt mig bara gå vidare 567 00:32:59,700 --> 00:33:01,970 och hoppa över detta antar jag. 568 00:33:01,970 --> 00:33:05,260 >> Men en sak som är coolt är dock att om du bara 569 00:33:05,260 --> 00:33:09,600 vill testa ett gäng olika datakommandon, 570 00:33:09,600 --> 00:33:13,320 Det finns ett gäng olika datauppsättningar som redan är förladdad i R. 571 00:33:13,320 --> 00:33:15,770 Så en av dem är kallas iris dataset. 572 00:33:15,770 --> 00:33:18,910 Detta är en av de mest kända de i maskininlärning. 573 00:33:18,910 --> 00:33:23,350 Du kommer oftast bara göra någon form av testfall för att se om din kod körs. 574 00:33:23,350 --> 00:33:27,520 Så låt oss bara kolla vad iris är. 575 00:33:27,520 --> 00:33:33,130 >> Så denna sak kommer vara en dataram. 576 00:33:33,130 --> 00:33:36,000 Och det är typ av lång eftersom Jag bara skrivas ut iris. 577 00:33:36,000 --> 00:33:38,810 Det skrivs ut hela saken. 578 00:33:38,810 --> 00:33:42,830 Så det har alla dessa olika namn. 579 00:33:42,830 --> 00:33:45,505 Så iris är en samling olika blommor. 580 00:33:45,505 --> 00:33:48,830 I det här fallet är det träffande du arten av det, 581 00:33:48,830 --> 00:33:54,760 alla dessa olika bredder och längder av sepal och bladet. 582 00:33:54,760 --> 00:33:58,880 >> Och så normalt, om du vill skriva ut iris, 583 00:33:58,880 --> 00:34:03,680 till exempel, vill du inte ha det göra allt detta eftersom det kan ta över 584 00:34:03,680 --> 00:34:05,190 Hela din konsol. 585 00:34:05,190 --> 00:34:09,280 Så en sak som är riktigt trevligt är huvudet funktionen. 586 00:34:09,280 --> 00:34:12,929 Så om du bara gör head iris, kommer detta att ge dig 587 00:34:12,929 --> 00:34:17,389 de första fem rader eller sex antar jag. 588 00:34:17,389 --> 00:34:19,909 Och sedan väl, du kan bara specificera här. 589 00:34:19,909 --> 00:34:22,914 Så 20-- detta kommer att ge du de första 20 raderna. 590 00:34:22,914 --> 00:34:24,830 Och jag var faktiskt snäll av förvånad över att detta 591 00:34:24,830 --> 00:34:28,770 gav mig sex så låt mig gå vidare och kolla iris-- eller huvudet, sorry. 592 00:34:28,770 --> 00:34:31,699 593 00:34:31,699 --> 00:34:34,960 Och här kommer det att ge du dokumentationen 594 00:34:34,960 --> 00:34:37,960 av vad värdet huvudet gör. 595 00:34:37,960 --> 00:34:40,839 Så det returnerar den första eller sista av ett objekt. 596 00:34:40,839 --> 00:34:42,630 Och då kommer jag att titta på standardinställningarna. 597 00:34:42,630 --> 00:34:47,340 Och sedan det står standard metod huvudet x och n är lika med 6L. 598 00:34:47,340 --> 00:34:50,620 Så detta returnerar de första sex elementen. 599 00:34:50,620 --> 00:34:55,050 Och på samma sätt om du märker här, jag behövde inte ange n lika med 6. 600 00:34:55,050 --> 00:34:56,840 Som standard den använder sex, antar jag. 601 00:34:56,840 --> 00:35:00,130 Och sedan, om jag vill ange en viss värde, då kan jag se det också. 602 00:35:00,130 --> 00:35:02,970 603 00:35:02,970 --> 00:35:10,592 >> Så det är några enkla kommandon och Här är en annan som är bara-- väl, 604 00:35:10,592 --> 00:35:12,550 Jag can-- detta är faktiskt lite mer komplicerat, 605 00:35:12,550 --> 00:35:17,130 men detta kommer bara ta klassen av varje kolumn i iris dataset. 606 00:35:17,130 --> 00:35:20,910 Så det här kommer att visa dig vad var och en av dessa kolumner i termer av deras typer. 607 00:35:20,910 --> 00:35:23,665 Så sepal längd är numeriskt, sepal bredd är numeriskt. 608 00:35:23,665 --> 00:35:26,540 Alla dessa värden är bara numeriska eftersom du kan berätta från dessa data 609 00:35:26,540 --> 00:35:29,440 strukturera dessa är alla kommer att numeriskt. 610 00:35:29,440 --> 00:35:34,310 >> Och Species kolumnen kommer att vara en faktor. 611 00:35:34,310 --> 00:35:37,270 Så normalt, skulle du tro att Detta är som en teckensträng. 612 00:35:37,270 --> 00:35:48,830 Men om du bara gör irisSpecies, och sedan ska jag göra huvudet 5, 613 00:35:48,830 --> 00:35:51,820 och detta kommer att skriva ut ut de första fem värden. 614 00:35:51,820 --> 00:35:54,150 >> Och sedan märker detta nivåer. 615 00:35:54,150 --> 00:35:58,870 Så detta saying-- detta är R sätt av att ha kategoriska variabler. 616 00:35:58,870 --> 00:36:03,765 Så istället för att bara ha teckensträngar, 617 00:36:03,765 --> 00:36:06,740 den har nivåer som specificerar vilka av dessa saker är. 618 00:36:06,740 --> 00:36:12,450 >> Så låt oss säga irisSpecies en. 619 00:36:12,450 --> 00:36:17,690 Så vad du vill göra här är jag delmängder till denna Arter kolumnen. 620 00:36:17,690 --> 00:36:21,480 Så detta tar Arter kolumnen och sedan 621 00:36:21,480 --> 00:36:23,820 indexeras för att få det första elementet. 622 00:36:23,820 --> 00:36:27,140 Så detta bör ge dig setosa. 623 00:36:27,140 --> 00:36:28,710 Och det ger dig också nivåer här. 624 00:36:28,710 --> 00:36:32,812 >> Så du kan också jämföra detta till tecken setosa 625 00:36:32,812 --> 00:36:34,645 och detta kommer inte för att vara sant eftersom en 626 00:36:34,645 --> 00:36:37,940 är av en annan typ än den andra. 627 00:36:37,940 --> 00:36:40,590 Eller jag antar att det är sant eftersom R är mer intelligent än så. 628 00:36:40,590 --> 00:36:45,420 Och det ser ut på det här och sedan säger, kanske detta är vad du vill. 629 00:36:45,420 --> 00:36:51,860 Så det kommer att säga tecknet string setosa är samma som denna. 630 00:36:51,860 --> 00:37:01,290 Och sedan samma sätt kan du också bara ta dessa som så vidare. 631 00:37:01,290 --> 00:37:05,580 >> Så det är bara något slags snabba kommandon av dataset. 632 00:37:05,580 --> 00:37:08,030 Så här är några uppgifter prospektering. 633 00:37:08,030 --> 00:37:11,360 Så det här är lite mer involverad i dataanalysen. 634 00:37:11,360 --> 00:37:18,340 Och detta är hämtat från vissa bootcamp i forskning i Berkeley. 635 00:37:18,340 --> 00:37:20,790 >> Så bibliotek främmande. 636 00:37:20,790 --> 00:37:24,880 Så jag kommer att ladda in ett bibliotek som kallas främmande. 637 00:37:24,880 --> 00:37:32,460 Så detta kommer att ge mig read.dta så antar att jag har denna dataset. 638 00:37:32,460 --> 00:37:39,000 Denna lagras i den aktuella arbetskatalog för min konsol. 639 00:37:39,000 --> 00:37:42,190 Så låt oss bara se vad arbetskatalogen är. 640 00:37:42,190 --> 00:37:44,620 >> Så här är min arbetskatalogen. 641 00:37:44,620 --> 00:37:50,040 Och läs punktdata, detta sak, säger den här filen 642 00:37:50,040 --> 00:37:54,650 ligger i mappen data denna aktuella arbetskatalogen. 643 00:37:54,650 --> 00:38:00,520 Och read.dta detta inte är ett standardkommando. 644 00:38:00,520 --> 00:38:02,760 Jag antar att jag laddade den i redan. 645 00:38:02,760 --> 00:38:04,750 IEI antog jag laddade detta redan. 646 00:38:04,750 --> 00:38:08,115 >> Men så read.dta inte kommer att vara ett standardkommando. 647 00:38:08,115 --> 00:38:11,550 Och det är därför du kommer att ha att ladda i detta bibliotek package-- 648 00:38:11,550 --> 00:38:14,500 detta paket som kallas främmande. 649 00:38:14,500 --> 00:38:16,690 Och om du inte har paketet, tror jag 650 00:38:16,690 --> 00:38:19,180 utländskt är en av de inbyggda sådana. 651 00:38:19,180 --> 00:38:31,150 Annars kan du också do install.packages 652 00:38:31,150 --> 00:38:33,180 och detta kommer att installera paketet. 653 00:38:33,180 --> 00:38:36,878 Och detta kommer att ge dig R. Uh, nej. 654 00:38:36,878 --> 00:38:39,830 655 00:38:39,830 --> 00:38:43,140 Och då jag kommer bara att sluta detta eftersom jag redan har det. 656 00:38:43,140 --> 00:38:46,920 >> Men vad är riktigt nice om R är att pakethanteringen 657 00:38:46,920 --> 00:38:48,510 Systemet är mycket elegant. 658 00:38:48,510 --> 00:38:52,470 Eftersom det kommer att lagra allt verkligen snyggt för dig. 659 00:38:52,470 --> 00:38:59,780 Så i det här fallet, det kommer att lagra det, tror jag, detta bibliotek här. 660 00:38:59,780 --> 00:39:02,390 >> Så när du vill installera nya paket, 661 00:39:02,390 --> 00:39:04,980 det är precis så enkelt som gör install.packages 662 00:39:04,980 --> 00:39:07,500 och R kommer att hantera alla paketen för dig. 663 00:39:07,500 --> 00:39:12,900 Så du behöver inte göra något i Python, där du har extern paket 664 00:39:12,900 --> 00:39:15,330 chefer som papper Anaconda där du är 665 00:39:15,330 --> 00:39:18,310 doing-- du installerar paket utanför Python 666 00:39:18,310 --> 00:39:20,940 och sedan försöker köra dem själv. 667 00:39:20,940 --> 00:39:22,210 Så det här är verkligen trevligt sätt. 668 00:39:22,210 --> 00:39:25,590 >> Och install.packages kräver internet. 669 00:39:25,590 --> 00:39:31,950 Det tar den från en server och förvaret som 670 00:39:31,950 --> 00:39:33,960 samlar all paketen kallas CRAN. 671 00:39:33,960 --> 00:39:40,690 Och du kan ange vilken typ av spegel du vill hämta paketen från. 672 00:39:40,690 --> 00:39:43,420 >> Så här jag tar denna dataset. 673 00:39:43,420 --> 00:39:46,240 Jag läser det i att använda den här funktionen. 674 00:39:46,240 --> 00:39:49,360 Så låt mig gå vidare och göra det. 675 00:39:49,360 --> 00:39:52,900 >> Så låt oss anta att du har denna dataset 676 00:39:52,900 --> 00:39:55,550 och du har absolut ingen aning om vad det är. 677 00:39:55,550 --> 00:39:58,560 Och detta faktiskt kommer upp ganska ofta i branschen 678 00:39:58,560 --> 00:40:00,910 där du bara har dessa ton och massor av röriga saker 679 00:40:00,910 --> 00:40:02,890 och de är otroligt omärkt. 680 00:40:02,890 --> 00:40:06,380 Så här har jag det här dataset och jag vet inte 681 00:40:06,380 --> 00:40:08,400 vad det är så jag är bara visar att kolla upp det. 682 00:40:08,400 --> 00:40:10,620 >> Så jag ska göra med huvudet först. 683 00:40:10,620 --> 00:40:14,190 Så jag kolla de första sex kolonner av vad denna dataset är. 684 00:40:14,190 --> 00:40:21,730 Så det här är statligt, pres04, och sedan alla dessa olika slags kolumner. 685 00:40:21,730 --> 00:40:25,612 Och vad som är intressant Här, antar jag, är att du 686 00:40:25,612 --> 00:40:27,945 skulle anta att detta ser som någon sorts val. 687 00:40:27,945 --> 00:40:30,482 688 00:40:30,482 --> 00:40:32,190 Och jag gissar bara från tittar på filen 689 00:40:32,190 --> 00:40:41,070 nämna att detta är någon sorts samling av data om kandidaterna eller väljarna 690 00:40:41,070 --> 00:40:44,920 som röstade för specifika presidenter eller president kandidater 691 00:40:44,920 --> 00:40:46,550 inför valet 2004. 692 00:40:46,550 --> 00:40:52,920 >> Så här är värden 1, 2 så ett sätt att lagra 693 00:40:52,920 --> 00:40:56,540 presidenten kandidater är deras namn. 694 00:40:56,540 --> 00:40:59,780 I detta fall ser det ut som de är bara heltalsvärden. 695 00:40:59,780 --> 00:41:04,030 Så 2004 var det Bush kontra Kerry tror jag. 696 00:41:04,030 --> 00:41:09,010 Och nu, låt oss säga att du bara inte vet huruvida en motsvarar Bush eller 2 697 00:41:09,010 --> 00:41:11,703 motsvarar Kerry eller och så vidare och så vidare, eller hur? 698 00:41:11,703 --> 00:41:15,860 >> Och detta är, precis för mig, ett ganska vanligt problem. 699 00:41:15,860 --> 00:41:18,230 Så vad kan man göra i detta fall? 700 00:41:18,230 --> 00:41:20,000 Så låt oss kolla allt det andra. 701 00:41:20,000 --> 00:41:22,790 >> staten, jag antar detta kommer från olika länder. 702 00:41:22,790 --> 00:41:25,100 partyid, intäkter. 703 00:41:25,100 --> 00:41:27,710 Låt oss titta på partyid. 704 00:41:27,710 --> 00:41:32,800 Så kanske en sak du kan göra är att titta på var och en av observationerna 705 00:41:32,800 --> 00:41:36,250 som har en partyid av Republikan eller demokrat eller något. 706 00:41:36,250 --> 00:41:38,170 Så låt oss titta bara på vad partyid är. 707 00:41:38,170 --> 00:41:41,946 >> Så jag kommer att ta dat och sedan ska jag 708 00:41:41,946 --> 00:41:47,960 att göra detta dollartecken operatör som jag gjorde tidigare 709 00:41:47,960 --> 00:41:50,770 och detta kommer att delmängd till den kolumnen. 710 00:41:50,770 --> 00:41:57,760 Och då kommer jag att leda detta i 20, bara för att se vad det ser ut. 711 00:41:57,760 --> 00:42:00,170 >> Så det här är bara en massa nationella kontor. 712 00:42:00,170 --> 00:42:02,800 Så med andra ord, du har saknade uppgifter om dessa killar. 713 00:42:02,800 --> 00:42:08,100 Men du märker också denna dat partyid är en faktor 714 00:42:08,100 --> 00:42:10,030 så detta ger dig olika kategorier. 715 00:42:10,030 --> 00:42:14,170 Så med andra ord, kan partyid ta Demokrat, republikan, oberoende, 716 00:42:14,170 --> 00:42:16,640 eller något annat. 717 00:42:16,640 --> 00:42:23,940 >> Så låt oss gå vidare och låt oss se vilka av dessa är-- oh, OK. 718 00:42:23,940 --> 00:42:28,480 Så jag ska delmängd att partyid och sedan 719 00:42:28,480 --> 00:42:32,780 titta på vilka som är Demokraten, till exempel. 720 00:42:32,780 --> 00:42:37,150 Detta kommer att ge dig en Boolean, en enorm Boolean av Trues och FALSEs. 721 00:42:37,150 --> 00:42:41,630 >> Och nu, låt oss säga att jag vill ha att delmängd till dessa killar. 722 00:42:41,630 --> 00:42:47,260 Så detta kommer att ta min dat och delmängd till vilken observationer 723 00:42:47,260 --> 00:42:48,910 har partyid jämlikar lika demokrat. 724 00:42:48,910 --> 00:42:52,830 725 00:42:52,830 --> 00:42:55,180 Och detta är ganska lång eftersom det finns så många av dem. 726 00:42:55,180 --> 00:42:59,060 Så nu kommer jag att huvudet detta i 20. 727 00:42:59,060 --> 00:43:05,690 728 00:43:05,690 --> 00:43:11,270 >> Och som du märker, lika jämlikar är intressant eftersom du är 729 00:43:11,270 --> 00:43:13,250 already-- du också inklusive de nationella kontoren. 730 00:43:13,250 --> 00:43:19,010 Så i det här fallet, du fortfarande inte kan få någon information för nu har du NAs 731 00:43:19,010 --> 00:43:22,650 och du bara vill se vilka av observation motsvarar demokraten 732 00:43:22,650 --> 00:43:24,670 och inte dessa saknade värden själva. 733 00:43:24,670 --> 00:43:27,680 Så hur skulle du bli av med dessa nationella kontor? 734 00:43:27,680 --> 00:43:36,410 >> Så här jag bara använder upp nyckeln på min markören och sedan säga att flytta runt. 735 00:43:36,410 --> 00:43:39,778 Och så här jag ska bara säga is.na datpartyid. 736 00:43:39,778 --> 00:43:48,970 737 00:43:48,970 --> 00:43:52,720 Så detta och och kommer att ta två olika booleska vektorer 738 00:43:52,720 --> 00:43:57,160 och säger att det kommer att bli SANT och FALSKT till exempel. 739 00:43:57,160 --> 00:43:59,190 Så det kommer att göra denna komponent-wise. 740 00:43:59,190 --> 00:44:02,910 Så här jag säger take dataramen, delmängd 741 00:44:02,910 --> 00:44:10,170 till de som motsvarar demokraten, och ta bort någon av dem som inte är NA. 742 00:44:10,170 --> 00:44:13,540 >> Så här will-- bör ge dig något. 743 00:44:13,540 --> 00:44:16,540 744 00:44:16,540 --> 00:44:17,600 Låt oss se is.na. 745 00:44:17,600 --> 00:44:24,670 746 00:44:24,670 --> 00:44:27,690 Låt oss försöka is.na datpartyid. 747 00:44:27,690 --> 00:44:36,290 748 00:44:36,290 --> 00:44:45,290 Och detta bör ge du-- sorry-- bara en Boolean vektor. 749 00:44:45,290 --> 00:44:49,260 Och sedan, eftersom det är så lång, Jag ska delmängd till 20. 750 00:44:49,260 --> 00:44:49,760 OK. 751 00:44:49,760 --> 00:44:51,570 Så detta bör fungera. 752 00:44:51,570 --> 00:44:54,700 >> Och här kommer också att vara Trues. 753 00:44:54,700 --> 00:45:01,830 Ah, så mitt fel här är att I'm-- jag använda C ++ och R omväxlande så jag gör 754 00:45:01,830 --> 00:45:03,590 detta misstag hela tiden. 755 00:45:03,590 --> 00:45:05,807 Den och operatören faktiskt den du vill. 756 00:45:05,807 --> 00:45:08,140 Du vill inte att använda två et-tecken, bara en enda. 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å låt oss se. 760 00:45:18,140 --> 00:45:20,930 761 00:45:20,930 --> 00:45:23,920 Så vi subsetted till partyid där de är demokrat 762 00:45:23,920 --> 00:45:25,300 och de är inte saknas värden. 763 00:45:25,300 --> 00:45:27,690 Och nu ska vi titta på vilka de röstade för. 764 00:45:27,690 --> 00:45:31,530 Så det verkar som om de flesta av dem röstade på 1. 765 00:45:31,530 --> 00:45:36,090 Så jag ska gå vidare och säga att det är Kerry. 766 00:45:36,090 --> 00:45:39,507 >> Och på samma sätt kan du också gå till republikanska 767 00:45:39,507 --> 00:45:41,090 och förhoppningsvis ska detta ge dig 2. 768 00:45:41,090 --> 00:45:49,730 769 00:45:49,730 --> 00:45:51,770 Det är bara en massa olika kolumner. 770 00:45:51,770 --> 00:45:53,070 Och faktiskt, det är 2. 771 00:45:53,070 --> 00:45:55,750 Så partyid alla republikanska, de flesta av dem röstar för 2. 772 00:45:55,750 --> 00:45:58,390 >> Så det verkar som, precis genom att titta på detta, 773 00:45:58,390 --> 00:46:00,600 Republikan kommer att bli en very-- eller partyid 774 00:46:00,600 --> 00:46:02,790 kommer att bli en mycket stor faktor i att bestämma 775 00:46:02,790 --> 00:46:05,420 vilken kandidat de är kommer att rösta för. 776 00:46:05,420 --> 00:46:07,120 Och detta är naturligtvis sant i allmänhet. 777 00:46:07,120 --> 00:46:10,139 Och detta matchar din intuition, förstås. 778 00:46:10,139 --> 00:46:11,930 Så det verkar som om jag är ont om tid så 779 00:46:11,930 --> 00:46:17,040 Låt mig bara ska gå vidare och visar några snabba bilder. 780 00:46:17,040 --> 00:46:21,120 Så här är något som är en aning mer komplicerat med visualisering. 781 00:46:21,120 --> 00:46:26,450 Så i det här fallet, är detta en mycket enkel analys av bara kontrollera vad 782 00:46:26,450 --> 00:46:28,500 president '04 är. 783 00:46:28,500 --> 00:46:33,920 >> Så i detta fall, låt oss säga att du ville svara på denna fråga. 784 00:46:33,920 --> 00:46:38,540 Så antar att vi ville veta omröstningen beteende i 2004 president valet 785 00:46:38,540 --> 00:46:41,170 och hur det varierar med ras. 786 00:46:41,170 --> 00:46:44,380 Så inte nog med att du vill se röstningsbeteende, 787 00:46:44,380 --> 00:46:47,860 men du vill delmängd av varje ras och typ av sammanfatta det. 788 00:46:47,860 --> 00:46:50,770 Och du kan bara berätta av detta komplex notation 789 00:46:50,770 --> 00:46:52,580 att detta är typ att få grumlig. 790 00:46:52,580 --> 00:46:56,390 >> Så en av de mer avancerade R paket som finns också typen av senaste 791 00:46:56,390 --> 00:47:00,070 kallas dplyr. 792 00:47:00,070 --> 00:47:03,060 Så det är här en rätt här. 793 00:47:03,060 --> 00:47:08,080 Och ggg-- ggplot2 är bara en trevlig sätt att göra bättre visualiseringar 794 00:47:08,080 --> 00:47:09,400 än den inbyggda ett. 795 00:47:09,400 --> 00:47:11,108 >> Så jag kommer att ladda dessa två bibliotek. 796 00:47:11,108 --> 00:47:13,200 797 00:47:13,200 --> 00:47:16,950 Och då kommer jag att gå framåt och köra det här kommandot. 798 00:47:16,950 --> 00:47:19,050 Du kan bara behandla detta som en svart låda. 799 00:47:19,050 --> 00:47:23,460 >> Vad händer är att detta rör operatör passerar i detta argument 800 00:47:23,460 --> 00:47:24,110 in på här. 801 00:47:24,110 --> 00:47:28,070 Så jag säger grupp genom dat ras och sedan president 04. 802 00:47:28,070 --> 00:47:31,530 Och sedan, alla dessa andra kommandon filtrerar och sedan sammanfatta 803 00:47:31,530 --> 00:47:34,081 där jag gör räkna och då jag rita det här. 804 00:47:34,081 --> 00:47:39,980 805 00:47:39,980 --> 00:47:42,500 OK coolt. 806 00:47:42,500 --> 00:47:44,620 Så låt oss gå vidare och se hur det ser ut. 807 00:47:44,620 --> 00:47:52,280 808 00:47:52,280 --> 00:47:57,290 >> Så vad som händer här är att jag precis plottas varje race och sedan 809 00:47:57,290 --> 00:47:59,670 vilka de röstade för. 810 00:47:59,670 --> 00:48:03,492 Och dessa två olika värden motsvarar 2 och 1. 811 00:48:03,492 --> 00:48:05,325 Om du vill vara mer elegant, kan du också 812 00:48:05,325 --> 00:48:11,770 bara ange att 2 är Kerry-- eller 2 är Bush, och sedan 1 är Kerry. 813 00:48:11,770 --> 00:48:13,700 Och du kan också ha det i din legend. 814 00:48:13,700 --> 00:48:17,410 >> Och du kan också dela dessa stapeldiagram. 815 00:48:17,410 --> 00:48:19,480 För en sak är att om du märker, 816 00:48:19,480 --> 00:48:24,560 Detta är inte så lätt att identifiera vilken av dessa två värden är större. 817 00:48:24,560 --> 00:48:27,920 Så en sak du skulle vilja göra är att ta det här blåa område 818 00:48:27,920 --> 00:48:31,855 och bara flytta den här borta så du kan jämföra dessa två sida vid sida. 819 00:48:31,855 --> 00:48:34,480 Och jag antar att det är något jag har inte tid att göra just nu, 820 00:48:34,480 --> 00:48:36,660 men det är också väldigt lätt att göra. 821 00:48:36,660 --> 00:48:40,310 Du kan bara titta in manualsidor ggplot. 822 00:48:40,310 --> 00:48:47,170 Så du kan bara göra ggplot som som och läsa in den här mannen sidan. 823 00:48:47,170 --> 00:48:51,920 >> Så låt mig bara snabbt visa några coola saker. 824 00:48:51,920 --> 00:48:57,610 Låt oss gå vidare och gå att-- bara en tillämpning av maskininlärning. 825 00:48:57,610 --> 00:49:02,450 Så låt oss säga att vi har dessa tre paket så jag ska ladda dessa i. 826 00:49:02,450 --> 00:49:05,500 827 00:49:05,500 --> 00:49:09,170 Så detta bara skriver ut några information efter jag laddat i sak. 828 00:49:09,170 --> 00:49:15,220 Så jag säger detta read.csv, denna dataset, och nu 829 00:49:15,220 --> 00:49:18,940 Jag ska gå vidare och titta och se vad som finns inuti denna dataset. 830 00:49:18,940 --> 00:49:22,080 >> Så de första 20 observationer. 831 00:49:22,080 --> 00:49:27,190 Så jag har bara X1, X2, och Y. Så det verkar vara ett gäng av dessa värden 832 00:49:27,190 --> 00:49:31,640 är allt från kanske 20 till 80 eller så. 833 00:49:31,640 --> 00:49:37,700 Och sedan på samma sätt för X2 och sedan denna Y verkar vara etiketterna 0 och 1. 834 00:49:37,700 --> 00:49:49,500 >> För att verifiera detta, kan jag bara göra sammanfattande uppgifter X1. 835 00:49:49,500 --> 00:49:51,660 Och sedan på samma sätt för alla dessa andra kolumner. 836 00:49:51,660 --> 00:49:55,300 Så sammanfattning är ett snabbt sätt att bara visar dig snabba värden. 837 00:49:55,300 --> 00:49:56,330 Åh, förlåt. 838 00:49:56,330 --> 00:49:58,440 Detta bör vara Y. 839 00:49:58,440 --> 00:50:03,420 >> Så i detta fall, ger kvantiler, medianer, maxar också. 840 00:50:03,420 --> 00:50:07,130 I det här fallet, dataY, kan du se att det bara kommer att bli 0 och 1. 841 00:50:07,130 --> 00:50:10,100 Också medelvärdet säger 0,6, betyder bara att det 842 00:50:10,100 --> 00:50:13,380 verkar som jag har fler 1s än 0s. 843 00:50:13,380 --> 00:50:16,160 >> Så låt mig gå vidare och show vad det ser ut. 844 00:50:16,160 --> 00:50:17,470 Så jag ska bara rita detta. 845 00:50:17,470 --> 00:50:22,852 846 00:50:22,852 --> 00:50:24,636 Låt oss se hur du rensar det. 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å det här är vad det ser ut. 852 00:50:37,590 --> 00:50:46,310 Så det verkar som gula jag specificerade som 0, och sedan rött jag anges som 1s. 853 00:50:46,310 --> 00:50:52,190 Så här ser det ut som etikettpunkter och det 854 00:50:52,190 --> 00:50:56,410 verkar som du ville bara några sorts kluster på detta. 855 00:50:56,410 --> 00:51:01,020 >> Och låt mig bara gå vidare och show några du av dessa inbyggda funktioner. 856 00:51:01,020 --> 00:51:03,580 Så här är lm. 857 00:51:03,580 --> 00:51:06,060 Så det här är bara försöker för att passa till en rad i denna. 858 00:51:06,060 --> 00:51:08,640 Så vad är det bästa sättet att jag kan passa en rad sådana 859 00:51:08,640 --> 00:51:14,020 att det bästa kommer att separera denna typ av kluster. 860 00:51:14,020 --> 00:51:21,790 Och helst, kan du bara se att jag kör bara alla dessa kommandon 861 00:51:21,790 --> 00:51:25,450 och sedan kommer jag framåt och lägg till raden. 862 00:51:25,450 --> 00:51:28,970 >> Så detta verkar vara det bästa gissning. 863 00:51:28,970 --> 00:51:34,150 Det tar det bästa som minimerar felet i att försöka passa denna linje. 864 00:51:34,150 --> 00:51:40,000 Uppenbarligen ser den här typen av bra, men det är inte den bästa. 865 00:51:40,000 --> 00:51:43,130 Och linjära modeller, i allmänhet, kommer att vara 866 00:51:43,130 --> 00:51:46,811 riktigt bra för teori och bara typ av byggnads grunderna i maskin 867 00:51:46,811 --> 00:51:47,310 lärande. 868 00:51:47,310 --> 00:51:50,330 Men i praktiken, kommer du att vill göra något mer allmänt. 869 00:51:50,330 --> 00:51:54,280 >> Så du kan bara försöka köra något som kallas ett neuralt nätverk. 870 00:51:54,280 --> 00:51:57,110 Dessa saker är allt vanligare. 871 00:51:57,110 --> 00:52:00,530 Och de bara fungerar fantastiskt för stora datamängder. 872 00:52:00,530 --> 00:52:07,080 Så i det här fallet, vi bara have-- låt oss see-- vi har nrow. 873 00:52:07,080 --> 00:52:09,010 Så nrow är bara säga antal rader. 874 00:52:09,010 --> 00:52:11,790 Så i detta fall, jag har 100 observationer. 875 00:52:11,790 --> 00:52:15,010 >> Så låt mig gå vidare och göra ett neuralt nätverk. 876 00:52:15,010 --> 00:52:18,620 Så det här är verkligen trevligt eftersom jag kan bara säga Nnet 877 00:52:18,620 --> 00:52:21,767 och sedan jag regressing Y. Så Y är den kolumnen. 878 00:52:21,767 --> 00:52:23,850 Och sedan regression det på de andra två variabler. 879 00:52:23,850 --> 00:52:27,360 Så detta är kortare notation för X1 och X2. 880 00:52:27,360 --> 00:52:29,741 >> Så låt oss gå vidare och köra detta. 881 00:52:29,741 --> 00:52:30,240 Åh, förlåt. 882 00:52:30,240 --> 00:52:32,260 Jag måste köra hela den här grejen. 883 00:52:32,260 --> 00:52:37,500 Och detta är bara skriver ut notation för hur snabbt eller inte snabbt det 884 00:52:37,500 --> 00:52:38,460 konvergerat. 885 00:52:38,460 --> 00:52:41,420 Så det ser ut som det gjorde konvergera. 886 00:52:41,420 --> 00:52:44,970 Så låt mig gå vidare och skriva ut ut vad det ser ut. 887 00:52:44,970 --> 00:52:51,260 >> Se här är bilden och här är en kontur som visar hur väl den passar. 888 00:52:51,260 --> 00:52:56,380 Och detta är bara-- du kan se detta att det är mycket, mycket trevligt. 889 00:52:56,380 --> 00:52:59,400 Det kan även vara overfitting, men du kan också 890 00:52:59,400 --> 00:53:03,390 svarar för detta med andra tekniker som korsvalidering. 891 00:53:03,390 --> 00:53:06,180 Och dessa är också inbyggda i R. 892 00:53:06,180 --> 00:53:09,170 >> Och låt mig bara visa dig stödja vektormaskin. 893 00:53:09,170 --> 00:53:12,470 Detta är en annan riktigt vanligt Tekniken i maskininlärning. 894 00:53:12,470 --> 00:53:18,550 Det är mycket lik linjära modeller, men den använder vad som kallas en kärna metod. 895 00:53:18,550 --> 00:53:22,790 Och låt oss se hur bra det fungerar. 896 00:53:22,790 --> 00:53:26,430 Så denna en är mycket lik hur väl ett neuralt nätverk utför, 897 00:53:26,430 --> 00:53:27,900 men det är mycket mer smidigare. 898 00:53:27,900 --> 00:53:35,740 Och detta är baserat utanför av what-- hur SVMs arbete. 899 00:53:35,740 --> 00:53:40,250 >> Så det här är bara en mycket snabb översikt över några 900 00:53:40,250 --> 00:53:43,822 av de inbyggda funktionerna kan du göra och också några av prospekteringsdata. 901 00:53:43,822 --> 00:53:45,905 Så låt mig bara gå vidare och gå tillbaka till bilderna. 902 00:53:45,905 --> 00:53:50,290 903 00:53:50,290 --> 00:53:53,670 >> Så uppenbarligen är detta inte särskilt omfattande. 904 00:53:53,670 --> 00:53:57,140 Och det här är egentligen bara en teaser visar dig vad du kan göra riktigt i R. 905 00:53:57,140 --> 00:53:59,100 Så om du skulle bara vilja att lära sig mer, här 906 00:53:59,100 --> 00:54:01,210 är ett gäng olika resurser. 907 00:54:01,210 --> 00:54:06,890 >> Så om du är förtjust i läroböcker eller du är bara förtjust i att läsa saker på nätet, 908 00:54:06,890 --> 00:54:09,670 då detta är en fantastisk en efter Hadley Wickham, 909 00:54:09,670 --> 00:54:13,010 som också skapat alla dessa riktigt coola paket. 910 00:54:13,010 --> 00:54:17,420 Om du är förtjust i filmer, då Berkeley har en fantastisk bootcamp 911 00:54:17,420 --> 00:54:21,060 det är several-- det är typ av lång. 912 00:54:21,060 --> 00:54:24,210 Och det kommer att lära dig nästan allt du vill veta om R. 913 00:54:24,210 --> 00:54:27,770 >> Och på liknande sätt, det finns Codeacademy och alla dessa andra slags 914 00:54:27,770 --> 00:54:29,414 interaktiva webbplatser. 915 00:54:29,414 --> 00:54:31,580 De är också att få common-- mer och mer vanligt. 916 00:54:31,580 --> 00:54:33,749 Så detta är mycket lik Codeacademy. 917 00:54:33,749 --> 00:54:35,790 Och slutligen, om du bara vill gemenskapen och hjälpa, 918 00:54:35,790 --> 00:54:38,800 dessa är ett gäng saker du kan gå till. 919 00:54:38,800 --> 00:54:40,880 Självklart, vi fortfarande använda e-postlistor, precis 920 00:54:40,880 --> 00:54:44,860 liksom nästan alla andra programmeringsspråk gemenskap. 921 00:54:44,860 --> 00:54:47,880 Och #rstats, är detta vårt samhälle Twitter. 922 00:54:47,880 --> 00:54:49,580 Det är faktiskt ganska vanligt. 923 00:54:49,580 --> 00:54:50,850 Och sedan användaren! 924 00:54:50,850 --> 00:54:52,340 Är bara vår konferens. 925 00:54:52,340 --> 00:54:55,390 >> Och sedan, naturligtvis, kan du använda alla dessa andra Q & A saker, 926 00:54:55,390 --> 00:54:57,680 gillar Stack Overflow, Google och sedan GitHub. 927 00:54:57,680 --> 00:55:00,490 Eftersom de flesta av dessa paket och en hel del av samhället 928 00:55:00,490 --> 00:55:03,420 kommer att centreras kring utveckling kod eftersom det är öppen källkod. 929 00:55:03,420 --> 00:55:05,856 Och det är bara riktigt trevligt på GitHub. 930 00:55:05,856 --> 00:55:08,730 Och slutligen, kan du kontakta mig om du bara har några snabba frågor. 931 00:55:08,730 --> 00:55:13,530 Så du kan hitta mig på Twitter här, min hemsida, och bara min e-post. 932 00:55:13,530 --> 00:55:17,840 Så förhoppningsvis, det var something-- bara en kort teaser 933 00:55:17,840 --> 00:55:20,900 vad R är verkligen kapabla att göra. 934 00:55:20,900 --> 00:55:23,990 Och förhoppningsvis, du bara kolla in dessa tre länkar 935 00:55:23,990 --> 00:55:25,760 och se vad du kan göra mer. 936 00:55:25,760 --> 00:55:28,130 Och jag antar att det är bara om det. 937 00:55:28,130 --> 00:55:28,630 Tack. 938 00:55:28,630 --> 00:55:30,780 >> [Applåder] 939 00:55:30,780 --> 00:55:31,968