[Speel van musiek] Dustin TRAN: Hi. My naam se Dustin. So ek sal aanbied Data-analise in R. Net 'n bietjie oor myself. Ek is tans 'n nagraadse student in die Ingenieurswese en Toegepaste Wetenskappe. Ek bestudeer 'n kruising van masjien leer en statistieke so Data-analise in R is regtig fundamenteel tot watter Ek doen op 'n daaglikse basis. En R is veral goed vir data-analise want dit is baie goed vir prototyping. En gewoonlik wanneer jy doen 'n soort van data-analise, 'n baie van die probleme gaan kognitiewe. En so jy net wil hê 'n paar baie goeie taal wat is net goed vir doen ingeboude funksies, in teenstelling te om te gaan met 'n lae vlak dinge. So in die begin, is ek net gaan bekend te stel wat R, hoekom sou jy wil om dit te gebruik, en gaan dan oor in 'n paar demo, en net gaan van daar. So, wat is R? R is net 'n taal ontwikkel vir statistiese rekenaar en visualisering. So, wat dit beteken is dat dit is 'n baie goeie taal vir enige soort van ding wat handel oor onsekerheid of data visualisering. So jy het al hierdie waarskynlikheidsverdelings. Daar gaan wees ingeboude funksies. Jy sal ook 'n uitstekende plot pakkette. Python is 'n ander meeding taal vir data. En een ding wat ek vind dat R is baie beter is visualisering. So, wat jy sal sien in die demo as goed is net 'n baie intuïtief taal wat werk net baie goed. Dit is ook 'n gratis en open source, as enige ander goeie taal wat ek dink. En hier, 'n klomp van die net sleutelwoorde gegooi by jou. Dit is dinamiese, wat beteken as jy 'n spesifieke tipe wat aan 'n voorwerp as wat dit sal net verander op die vlieg. Dit is lui so dit is slim oor hoe dit berekeninge. Funksionele beteken dit kan regtig werk gebaseer af van funksies so anything-- enige vorm van manipulasie jy doen, sal dit gebaseer word funksies af. So binêre operateurs, byvoorbeeld, is net inherent funksies. En alles wat jy gaan doen, is gaan om te loop af funksies self. En georiënteerde dan voorwerp as well. So hier is 'n Kletskerk plot. Nie net omdat ek voel soos Kletskerk is fundamenteel tot enige soort van aanbieding, maar omdat Ek voel soos dit werklik hamers op die punt dat 'n groot deel van die tyd wanneer jy doen 'n soort van data analise, die probleem is nie soveel hoe vinnig dit loop, maar hoe lank dit gaan neem om die taak te programmeer. So hier is net te ontleed of strategie a of b is meer doeltreffend. Dit gaan wees iets wat jy gaan 'n baie om te hanteer in soort van lae-vlak tale waar jy met seg foute, geheuetoekenning, initializations, selfs die maak van die ingeboude funksies. En hierdie dinge is al hanteer baie, baie elegant in R. Dus net dit te hamer punt, die grootste knelpunt gaan kognitiewe wees. So data-analise is 'n baie harde probleem. Of jy doen masjien leer of jy doen net 'n soort van basiese data eksplorasie, jy wil nie hê 'n dokument te neem en dan stel iets wat elke keer as jy wil om te sien wat 'n kolom lyk, wat veral inskrywings in 'n matriks lyk. So jy net wil hê 'n paar baie mooi koppelvlak jy kan 'n eenvoudige funksie hardloop dat indekse wat jy wil en net loop dit van daar af. En jy moet domein spesifieke tale vir hierdie. En R sal regtig help jy definieer die probleem en los dit op hierdie wyse. So hier is 'n plot wat programmering gewildheid van R as dit is weg met verloop van tyd. So soos jy kan sien, soos 2013 of so dit is net opgeblaas geweldig. En dit is net as gevolg van daardie groot neiging in die IT-industrie oor die groot data. Ook, nie net die tegnologie bedryf, maar regtig enige bedryf that-- omdat 'n groot deel van die nywerhede is soort van fundamentele te probeer om hierdie probleme op te los. En gewoonlik, kan jy 'n paar goeie het manier van meet hierdie probleme of selfs definieer of los met behulp van data. So ek dink nou R is die 11de gewildste taal op TIOBE en dit groei sedertdien. So hier is 'n paar meer kenmerke van R. Dit het 'n enorme aantal pakkette en vir al hierdie verskillende dinge. So 'n tyd wat jy het 'n sekere probleem, die meeste die tyd R sal daardie funksie vir jou. Dus, of jy wil bou 'n soort van die masjien leer algoritme genoem Ewekansige Forest of besluit Bome, of selfs probeer om die gemiddelde te neem 'n funksie of enige van hierdie dinge, R sal dit. En as jy dink jy omgee optimalisering, een ding wat algemeen is dat na jy prototyping gedoen 'n soort van 'n hoë-vlak taal, jy sal gooi dat in-- sal jy net hawe wat oor sommige lae-vlak taal. Wat is goed oor R is dat sodra jy gedoen prototyping, kan jy hardloop C ++, of Fortran, of enige van hierdie laer vlak kinders direk in R. So dit is een regtig koel funksie oor R, as jy regtig omgee die optimalisering punt. En dit is ook baie goeie vir web visualisaties. So D3.js, byvoorbeeld, is Ek dink 'n ander seminaar dat ons wat vandag. En dit is regtig awesome vir doen interaktiewe visualisaties. En D3.js aanvaar dat jy 'n soort van data te geplot word en R is 'n goeie manier om te kan doen die data-analise voordat jy voer dit oor te D3.js of selfs net loop D3.js beveel in R self, sowel as al hierdie ander biblioteke sowel. So dit was net die bekendstelling van wat is R en waarom jy dalk dit gebruik. So hopelik, ek het oortuig dat jy iets oor net om te probeer om te sien wat dit is. So ek gaan om voort te gaan en gaan deur sommige beginsels oor R voorwerpe en wat jy kan regtig nie. So hier is net 'n n klomp van die wiskunde-opdragte. So sê you're-- jy wil bou taal jouself en jy wil net 'n klomp van verskillende gereedskap te hê. Enige soort van operasie jy dink jy wil wil hê, is pretty much gaan wees in R. So hier is 2 plus 2. Hier is 2 keer pi. R het 'n klomp van die gebou-in konstantes dat jy gereeld sal gebruik soos pi, e. En dan, hier is 7 plus runif, so runif van 1. Dit is 'n funksie wat genereer een ewekansige uniform 0-1. En dan is daar 3 tot die krag van 4. Daar is vierkantswortels. Daar is log. So teken sal nederig doen eksponensiële deur self. En dan, as jy spesifiseer 'n basis, dan jy kan doen wat basis wat jy wil. En dan is hier is 'n paar ander opdragte. So jy het 23 mod 2. Dan moet jy die res. Dan moet jy wetenskaplike notasie as jy ook wil net meer te doen en meer ingewikkeld dinge. So hier is opdrag. So tipies opdragte in R is gedoen met 'n pyl so dit is minder as en dan die koppelteken. So hier is ek net toeken 3 aan die veranderlike val. En dan is ek uit te druk val en dan is dit druk uit drie. By verstek in R tolk, dit sal dinge uit te druk vir jou sodat jy nie hoef te spesifiseer druk van 'n val enige tyd wat jy wil hê om iets te druk. Jy kan net nie val en dan sal dit doen dit vir jou. Ook, kan jy gebruik gelyk tegnies as 'n opdrag operateur. Daar is effense subtiliteite tussen die gebruik van die pyl operateur en die gelykes operateur vir opdragte. Meestal deur konvensie, almal sal net gebruik die pyl operateur. En hier, ek toewys skuins notasie genoem 1 kolon 6. Dit genereer 'n vektor van 1 tot 6. En dit regtig lekker want dan jy net ken die vektor val en wat werk deur die self. So dit is reeds gaan van 'n single-- 'n baie intuïtief data struktuur van net 'n dubbele 'n soort van tipe in 'n vektor en wat al versamel die skalaarproduk waardes vir jou. So na gaan van skalaar, jy het R voorwerpe en dit is 'n vektor. 'N Vektor is 'n soort van versameling van dieselfde tipe. So hier is 'n klomp van die vektore. So, dit is numeriese. Numeriese R se manier om te sê dubbel. En so by verstek, enige nommer sal wees om 'n dubbel. So as jy 'c van 1.1, 3, negatiewe 5.7, die c is 'n funksie. Dit concatenates al drie getalle in 'n vektor. En dit sal so as be-- jy agterkom 3 deur homself, normaalweg sou jy aanvaar dat dit soos 'n heelgetal, maar omdat alle vektore is dieselfde tipe, dit is 'n vektor van dubbelspel of numeriese in hierdie geval. rnorm is 'n funksie wat standaard normale variables-- of standaard normale waardes. En ek spesifiseer twee van hulle. So ek doen rnorm 2, toewys om dit te devs, en dan is ek uit te druk devs. So dit is net twee ewekansige normale waardes. En dan SY as jy dit doen jy omgee heelgetalle. So dit is net oor die geheue toekenning en spaar geheue grootte. So wat jy wil hê om by te voeg jou nommers deur die hoofstad L. In die algemeen, is dit R se historiese notasie vir iets genoem lang heelgetal. So die meeste van die tyd, sal jy wees wat met dubbelspel. En as jy ooit sal later op te optimaliseer jou kode, jy kan net voeg hierdie L's daarna of gedurende dit as jy soos precognitive oor wat jy gaan om hierdie veranderlikes te doen. So hier is 'n karakter vektor. So, weereens, ek concatenating drie snare hierdie tyd. Let daarop dat dubbele snare en enkele snare is dieselfde in R. So ek het Arthur en Marvin se en so wanneer ek druk dit uit, almal van hulle gaan dubbel stringe te vertoon. En as jy ook wil insluit die dubbele of enkele string in jou karakters, dan kan jy óf wissel jou snare. So Marvin se vir die tweede element, dit is gaan jou show-- net dubbel stringe en dan 'n enkele string so dit is afwisselend. Andersins, as jy wil 'n dubbele gebruik string operateur in 'n dubbele string wanneer jy dit is verklaar, dan jy net gebruik om die ontsnapping operateur. So jy doen agteroorskuisstreep dubbel string. En ten slotte, ons het ook het logiese vektore. So logical-- so WAAR en vals is, en hulle is gaan wees alles in hoofletters. En dan weer, ek concatenating hulle en dan die toeken van hulle te bools. So bools gaan om te wys jy WAAR, vals, en waar is. So hier is vectorized kruip. So in die begin, ek ek neem 'n function-- hierdie is 'n sequence-- genoem volgorde 2-12. En ek neem 'n reeks met 2. So dit gaan doen 2, 4, 6, 8, 10 en 12. En dan, ek is kruip die derde element te kry. So een ding om in gedagte te hou, is dat R indekse deur te begin vanaf 1. So Vals 3 gaan gee die derde element. Dit is 'n soort van verskillende van ander tale waar dit begin van nul. So in C of C ++, byvoorbeeld, is jy gaan die vierde element te kry. En hier is Vals 3-5. So een ding wat regtig cool is dat jy kan tydelike veranderlikes binne genereer en dan net gebruik om hulle op die vlieg. So hier is 3 tot 5. So ek skep van 'n vektor 3, 4, en 5 en dan Ek kruip die derde te kry, vierde en vyfde elemente. So so, kan jy abstrakte dit te doen net enige soort van 'n vektor wat gee jou kruip. So hier is Vals en dan die eerste, derde en sesde elemente. En dan, as jy wil hê 'n aanvulling te doen, sodat jy net nie die minus daarna en dit sal gee jou alles wat nie die eerste, derde, of sesde element. So dit sal wees 4, 8, en 10. En as jy wil te kry selfs meer gevorderde, jy kan koppel Boole vektore. So hierdie indeks gaan jy te gee hierdie Boole vektor van lengte 6. So rep WAAR komma 3. Dit sal waar drie keer herhaal. So dit sal jou 'n gee vektor WAAR, WAAR, WAAR. rep ONWAAR 4-- dit gaan om jou te gee 'n vektor van vals is, vals, vals is, vals. En dan is c gaan koppel daardie twee Booleans saam. So jy gaan drie te kry TRUEs en dan vier FALSEs. Sodat wanneer jy indeks Vals, is jy gaan die ware, WAAR, WAAR kry. So wat gaan om te sê ja, Ek wil daardie drie elemente. En dan vals is, vals, Vals is, vals gaan om te sê nie, ek wil nie die elemente so dit is nie van plan om hulle om terug te keer. En ek dink daar is eintlik 'n tikfout hier want dit sê herhaling WAAR 3 en herhaal ONWAAR 4, en tegnies, jy slegs ses elemente so herhaal ONWAAR, Herhaal ONWAAR 3 moet wees. Ek dink R is ook slim genoeg is om so dat as jy net spesifiseer 4 hier, dan dit sal nie eers fout uit. Dit sal net gee jou hierdie waarde. So dit sal net ignoreer daardie vierde ONWAAR is. So hier is vectorized opdrag. So set.seed-- dit stel net die saad vir pseudo random nommers. So ek die opstel van die saad te 42, wat beteken dat as ek genereer drie ewekansige normale waardes, en dan as jy hardloop set.seed op jou eie rekenaar met behulp van dieselfde waarde 42, dan kry jy ook die Dieselfde drie ewekansige normals. So, dit is regtig 'n goeie vir herhaalbaarheid. Gewoonlik, wanneer jy besig met 'n soort van wetenskaplike analise, jy wil die saad te stel. Op dié manier ander wetenskaplikes kan net presies dieselfde kode wat jy het reproduseer gedoen, want hulle sal die presiese het dieselfde ewekansige veranderlikes that-- of ewekansige waardes wat jy geneem het om uit sowel. En so het die vectorized opdrag hier is wat die Vals 1 tot 2. So dit neem om die eerste twee elemente Vals en dan wys hulle tot 0. En dan, jy kan ook net nie die soortgelyke ding met die Booleans. So Vals is nie gelyk sal dit aan 0-- gee jou 'n vektor vals is, vals, WAAR in hierdie geval. En dan, gaan dit 'n te sê van daardie indekse wat WAAR was, dan is dit gaan om dit te wys aan 5. So dit neem om die derde element hier en dan wys dit tot 5. En dit is baie mooi in vergelyking met 'n lae-vlak tale waar jy moet gebruik vir lusse al hierdie vectorized dinge te doen want dit is net baie intuïtief en dit is 'n enkele een-liner. En wat is 'n groot oor vectorized notasie is dat in R, dit is soort van ingeboude sodat hulle is amper so vinnig as doen in 'n lae-vlak taal as teenstelling met die maak van 'n lus vir in R en dan om dit te doen die dinamiese kruip self. En dit sal stadiger as om te wees hierdie soort van vectorized ding waar hy dit kan doen in parallel, waar dit is om dit te doen in threading basies. So hier is vectorized bedrywighede. So ek genereer 'n waarde 1 tot 3, toeken wat aan vek1, 3 tot 5, vek2, voeg hulle saam. Dit voeg hulle komponent-wyse so dit is 1 plus 3, 2 plus 4, en so aan. vek1 keer vek2. Dit vermeerder die twee waardes komponent wyse. So dit is 1 keer 3, 2 keer 4, en dan 3 keer 5. En dan, net soos jy kan ook doen comparisons-- logiese vergelykings. So dit is onwaar onwaar WAAR in hierdie geval, want 1 is nie groter as 3, 2 is nie groter as 4. Dit is, dink ek, 'n ander tikfout, 3 is beslis nie meer as 5. Ja. En so kan jy net doen alles hierdie eenvoudige operasies omdat hul geërf uit die klasse hulself. So dit was net die vektor. En dit is soort van die mees fundamentele R voorwerp omdat gegee 'n vektor, jy kan bou van meer gevorderde voorwerpe. So hier is 'n matriks. Dit is in wese die onttrekking van wat 'n matriks is self. So in hierdie geval, dit is drie verskillende vektore, waar elkeen 'n kolom, of jy kan dit oorweeg as elkeen 'n ry. So ek stoor 'n matriks van 1 tot 9 en dan is ek spesifiseer 3 rye. So 1 tot 9 sal gee jou 'n vektor 1, 2, 3, 4, 5, 6, en al die pad tot 9. Een ding om ook in gedagte hou, is dat R winkels waardes in kolom-groot-formaat. So met ander woorde, wanneer jy sien 1 tot 9, gaan dit te stoor them-- dit gaan wees 1, 2, 3 in die eerste kolom, en dan sal dit doen 4, 5, 6 in die tweede kolom, en dan 7, 8, 9 in die derde kolom. En hier is 'n paar ander algemene funksies wat jy kan gebruik. So dowwe mat, dit sal jou gee die dimensies van die matriks. Dit gaan om terug te keer 'n vektor van die dimensie. So in hierdie geval, omdat ons matriks is 3 by 3, dit gaan vir jou 'n numeriese vektor wat is 3 3. En hier is net wat matriksvermenigvuldiging. So gewoonlik, as jy net doen asterisk-- so mat asterisk mat-- dit gaan wees komponent-wyse werking of wat genoem word die Hadamard produk. So dit gaan elke te doen element komponent-wyse. Maar, as jy wil hê matriks multiplication-- so vermenigvuldig die eerste ry tye die tweede matriks se eerste kolom en so on-- jy sal gebruik hierdie persent operasie. En t van mat is net 'n operasie vir getransponeerde. So ek sê neem die getransponeerde in die matriks, vermenigvuldig dit met die matriks self. En dan gaan dit terug te keer na jou 'n ander 3 deur 3 matriks vertoning die produk wat jy wil hê. En so dit was matriks. Hier is wat genoem word 'n data raam. A data raam wat jy kan dink as 'n matriks, maar elke kolom self gaan wees van 'n ander soort. So, wat is regtig cool oor data rame is dat in data-ontleding self, jy gaan al hierdie te hê heterogene data en al hierdie werklik morsig dinge waar elk van die kolomme hulself kan word van verskillende tipes. So hier ek sê 'n data raam, doen SY 1-3, en dan ook 'n karakter vektor. So kan ek indeks deur elk van hierdie kolomme en dan sal ek die waardes self. En jy kan ook doen 'n soort van bedrywighede op data rame. En die meeste van die tyd wanneer jy data-analise of 'n soort doen van preprocessing, sal jy werk met hierdie data strukture waar elke kolom gaan te wees van 'n ander soort. Ten slotte, so dit is in wese net die vier noodsaaklike voorwerpe in R. Lys sal net versamel enige ander voorwerpe wat jy wil. So sal dit in die winkel in een veranderlike wat jy maklik kan bekom. So hier, ek neem 'n lys. Ek sê dinge gelyk aan 3. So ek gaan een element te hê in die lys, en dit is goed genoem, en dit gaan om die waarde 3 te hê. Ek kan ook 'n matriks. So, dit is 1 tot 4 en die einde ry gelyk 2, so 'n 2 by 2 matriks. Ook in die lys en dit genoem mat. moreStuff, 'n karakter string, en selfs 'n ander lys op sigself. So, dit is 'n lys wat is 5 en beer. So het dit die waarde 5 en dit het die karakter string beer en dit is 'n lys in 'n lys. So kan jy hierdie dinge het rekursiewe dinge waar jy het another-- n tik in die tipe. So so, kan jy 'n matriks het binne 'n ander matriks en so aan. En 'n lys is net 'n goeie manier van die insameling en saamgevoeg al hierdie verskillende voorwerpe. En ten slotte, hier is net help in die geval Dit was net weg baie vinnig verby. So wanneer jy verward oor 'n soort van funksie, jy kan hulp van daardie funksie te doen. Sodat jy kan help matriks of 'n vraagteken matriks. En hulp en die vraagteken is net snelskrif vir die dieselfde ding sodat hulle is aliasse. lm is 'n funksie wat net nie 'n lineêre model. Maar as jy net het geen idee hoe om dit werk, kan jy net hulp van lm doen en wat gee jou 'n paar soort van dokumentasie wat lyk amper soos 'n man bladsy in Unix, waar jy het 'n kort beskrywing van wat dit doen nie, ook wat sy argumente is, wat dit terug, en net wenke oor hoe om dit te gebruik, en 'n paar voorbeelde sowel. So laat my voor en show gaan sommige demo van die gebruik van R. OK. So het ek oor baie vinnig net die data strukture en 'n soort van die op-- sommige van die bedrywighede. Hier is 'n paar funksies. So hier is ek net gaan 'n funksie te definieer. So ek ook met behulp van opdrag operateur hier, en dan ek sê verklaar dat dit as 'n funksie. En dit neem om die waarde x. So, dit is 'n waarde wat jy wil hê en ek gaan om terug te keer x self. So, dit is die identiteit funksie. En wat is koel oor hierdie in vergelyking met ander tale en 'n ander 'n lae-vlak tale is dat x kan wees van enige tipe self en dit sal die tipe terugkeer. Sodat jy kan imagine-- so laat my net loop hierdie vinnig. Jammer. So een ding wat ek moet ook melding is dat hierdie editor Ek gebruik genoem rstudio. Dit is wat genoem word 'n IDE. En een ding wat baie mooi oor hierdie is dat dit sluit 'n groot deel van die dinge wat jy wil doen in R self net baie intuïtief. So hier is 'n tolk console. So so, kan jy ook hierdie konsole rou net deur 'n kapitaal R. En dit is presies die dieselfde ding as die konsole. So ek kan net doen id funksie x, x, x. En then-- en dan sal goed self. So rstudio is groot want dit het die konsole. Dit het ook die dokumente jy wil om te loop op. En dan is dit het 'n paar veranderlikes dat jy kan sien in 'n omgewing. En dan, as jy ' erwe te doen, dan is jy kan net sien dit hier, in teenstelling met die bestuur van al hierdie verskillende vensters deur hulself. Ek het eintlik persoonlik gebruik Vim, maar ek voel soos rstudio is uitstekend net vir die kry 'n goeie idee hoe R. Gewoonlik gebruik, wanneer jy probeer om te leer 'n paar nuwe taak, jy wil nie om te hanteer te veel dinge op een slag. So R is net 'n very-- rstudio is 'n baie goeie manier van leer R sonder om te gaan met al hierdie ander dinge. So hier Ek hardloop id hallo. Dit keer terug hallo. id 123. Hier is 'n vektor van heelgetalle. So op soortgelyke wyse, want jy kan neem 'n ander soort van waarde, wat jy kan doen terugkeer id van x sodat dit terugkeer 1234 en 5. En laat my net wys dat dit is inderdaad 'n heelgetal. En so, as jy doen die klas id x, dit gaan heelgetal wees. En dan, kan jy ook vergelyk die twee en dit is waar. So ek gekyk word of id van x gelyk gelykes x en kennis dat dit gee jou twee TRUEs. So is dit nie te sê is die twee voorwerpe identies, maar elkeen van die inskrywings binne die vektore identies. Hier is bounded.compare. So, dit is 'n bietjie meer ingewikkeld in dat dit 'n as toestand en anders en dan neem dit twee argumente op 'n tyd. So x is van enige soort. En ek sê dit tweede argument is 'n. Dit kan enigiets wees as well. Maar by verstek, dit gaan te neem 5 as jy nie spesifiseer niks. So hier gaan ek om te sê As x is groter as 'n. So as ek spesifiseer nie 'n, dit sê as x is groter as 5, dan gaan ek om terug te keer WAAR. anders, ek gaan om terug te keer ONWAAR is. So laat my gaan voort en definieer hierdie. En nou gaan ek hardloop bounded.compare 3. So dit sê is 3 minder than-- is 3 meer as 5. Nee, dit is nie so ONWAAR is. En bounded.compare 3 en ek gaan om dit te vergelyk met 'n gelykes 2. So nou is ek sê ja, nou ek wil 'n iets anders te wees. So ek gaan 'n om te sê, moet jy 2. Ek kan óf doen hierdie soort van notasie of ek sê 'n gelykes 2. Dit is 'n meer leesbare in dat wanneer jy kyk na hierdie werklik ingewikkelde funksies wat neem verskeie arguments-- en hierdie kan dosyne oftentimes-- net sê 'n gelykes 2 is meer leesbaar is vir jou sodat later in die toekoms sal jy weet wat jy doen. So in hierdie geval, ek is woord is 3 meer as 2. Ja, dit is. En so, kan ek net verwyder en sê, is 3 meer as 2 waar 'n gelykes 2. En dit is ook waar. Ja? GEHOOR: Is jy uitvoering reël vir reël? Dustin TRAN: Ja, ek is. So wat ek hier doen, is neem hierdie teks document-- en wat is groot oor rstudio is dat Ek kan net hardloop 'n short-- n sleutel kombenasie. So ek doen Control-Enter. En dan, ek neem die lyn in die teks dokument en dan om in die konsole. So hier ek sê, bounded.compare en ek doen Control-X. So ek kan net loop hier. En dan is dit sal neem om die lyn en dan sit dit hier. En dan op soortgelyke wyse, kan ek nie loop hier. En dan sal dit hou net die definisie die lyne in die konsole soos dit. En as jy ook kennis van die krullerige draadjies is daar net soos in C sintaksis. x-- indien die indien toestand is ook gaan hakies te gebruik en dan jy kan gebruik anders. Nog een is anders as. So dit gaan wees x gelyk is gelyk aan ', byvoorbeeld. En dan gaan ek terug iets hier. Let daarop dat daar twee verskillende dinge hier wat gaan aan. Een daarvan is dat hier ek spesifiseer terugkeer om die waarde WAAR. Hier is ek net sê x. So R sal gewoonlik deur verstek neem die laaste arguments-- of neem die laaste reël van die kode, en wat sal wees wat dit teruggekeer. So hier is dit dieselfde iets soos dit te doen terugkeer x. En net om jou te wys. En dan, sal dit werk net so. So laat my gaan voort met hierdie. So anders as. En regtig, ek kan terugkeer iets wat ek wil. So ek het nie eens te terugkeer Booleans al die tyd, Ek kan net terug iets anders. So ek kan terugkeer beer doen. So as x gelyk is gelyk aan ', dit gaan beer om terug te keer. Andersins, dit gaan om terug te keer WAAR. Ek kan ook nie 'n vektor of regtig iets. En gewoonlik in staties getikte tale, jy het 'n soort hier spesifiseer. En agterkom dat dit net kan wees nie. En R is intelligent genoeg dat dit sal net doen nie en dit sal werk boete. So laat my definieer hierdie. Unexpected-- oh sorry. Dit moet 'n krullerige brace hier te wees. OK. Cool. Alle regte. So laat ons nou vergelyk 3 en 'n gelykes 3. So dit moet return-- yeah-- die waarde beer. So nou 'n meer algemene ding is soos Wat van ander data strukture. So jy het hierdie funksie. Dit gaan om te werk op enige soort van waarde soos 3 of enige numeriese, Met ander woorde, dubbel. Maar wat van iets soos 'n vektor. So wat gebeur as jy so do-- Ek is gaan val aan, sê, 4 toe te ken aan 6. So as ek terug kom nie, so is 'n vektor van 4, 5, 6. Nou laat ons kyk wat gebeur as ek dit doen bounded.compare val. So dit gaan om jou te gee 15 1251. So met ander woorde, dit sê As jy kyk na hierdie toestand so dit sê x is minder as 'n of iets. So, dit is 'n bietjie verwarrend want nou jy weet net nie wat gaan aan. So ek dink een ding wat werklik goed oor net probeer om te ontfout is dat jy net kan doen Val is groter as 'n en kyk wat daar gebeur. So val-- n is by verstek 5 so Laat ons net Val meer as 5. So, dit is 'n vektor ONWAAR ONWAAR WAAR. So nou wanneer jy op soek na hierdie, dit gaan om te sê as, en dan gaan dit te gee jy hierdie is 'n vektor van false false WAAR. So wanneer jy dit in R, R het geen idee wat jy doen. Omdat dit verwag 'n enkele waarde, wat is 'n Boole, en nou jy gee dit 'n vektor van Booleans. So by verstek, R is net gaan om te sê wat die heck, Ek gaan om te aanvaar dat jy gaan die eerste element hier neem. So ek gaan say-- ek gaan om aan te neem dat dit ONWAAR is. So dit gaan om te sê Nee, dit is nie reg nie. Net so, dit gaan wees Val gelyk gelyk aan 'n. Nee, jammer 5. En dit gaan ook om vals te wees as goed. So dit gaan nie om te sê, dit is nie waar nie so goed so dit is gaan hierdie laaste een om terug te keer. So, dit is óf 'n goeie ding of n slegte ding, afhangende van hoe jy dit sien. Want as jy die skep van hierdie funksies, jy nie eintlik weet wat gaan aan. So soms jy wil 'n fout wil, of miskien het jy wil net 'n waarskuwing. In hierdie geval, R dit nie doen nie. So dit is regtig tot jy die basis van wat jy dink die taal moet doen in hierdie geval As jy in 'n vektor van Booleans slaag wanneer jy doen 'n indien toestand. So kom ons sê dat jy het die oorspronklike een met as anders terugkeer waar en jy gaan om terug te keer ONWAAR is. So een manier ekserpering dit is om te sê ek nie eens hierdie voorwaardelike ding nodig. Nog 'n ding wat ek kan doen, is net die terugkeer van die waardes self. So as jy sien, as jy doen Val is groter as 5, dit gaan 'n terugkeer vektor ONWAAR ONWAAR WAAR. Miskien is dit wat jy wil vir bounded.compare. Jy wil 'n vektor van Booleans om terug te keer waar dit vergelyk elk van die waardes vir hulself. So kan jy net nie bounded.compare funksie x, 'n gelykes 5. En dan in plaas van om hierdie as anders toestand, Ek gaan net om terug te keer x is groter as 5. So as dit waar is, dan dit gaan om terug te keer WAAR. En dan as dit nie, dit is gaan om terug te keer ONWAAR is. En dit sal werk vir enige van hierdie strukture. So ek kan bounded.compare c 1 6 of 9 en dan gaan ek om te sê 'n gelykes 6, byvoorbeeld. En dan gaan dit gee jou die reg Boole vektor wat jy ontwerp. So dit is net funksies En nou, laat my net wys jou 'n paar interaktiewe beeldmateriaal. Ek dink nie ek het eintlik ' Wi-Fi hier so laat my net voort te gaan en slaan hierdie een wat ek dink. Maar een ding wat is cool is egter dat as jy net wil 'n klomp van die toets verskillende data opdragte, daar is 'n klomp van die verskillende datastelle wat reeds preloaded in R. So een van hulle is genoem die iris dataset. Dit is een van die mees bekende kinders in die masjien leer. Jy sal gewoonlik net doen 'n soort van toets gevalle te sien of jou kode loop. So laat ons net kyk wat iris is. So hierdie ding gaan 'n data raam te wees. En dit is soort van 'n lang, omdat Ek het net gedruk iris. Dit is die druk van die hele ding. So dit het al hierdie verskillende name. So iris is 'n versameling van verskillende blomme. In hierdie geval, is dit vertel jy die spesies van dit, al hierdie verskillende breedtes en lengtes van die kelkblaarkrans en die blom. En so normaal as jy wil iris te druk, byvoorbeeld, jy nie wil hê om dit te hê al hierdie dinge doen, want dit kan oorneem jou hele console. So een ding wat werklik mooi is die hoof funksie. So as jy net doen hoof iris, dit sal jou gee die eerste vyf rye, of ses wat ek dink. En jy dan goed, kan net hier spesifiseer. So 20-- sal dit gee jy die eerste 20 rye. En ek was eintlik soort verbaas dat dit my gegee het ses so laat my gaan voort en kyk iris-- of kop, jammer. En hier is dit sal gee u die dokumentasie van wat die waarde kop nie. So dit gee die eerste of die laaste van 'n voorwerp. En dan gaan ek kyk na die standaard. En dan sê dit dat die verstek metode kop x en N gelyk 6L. So hierdie gee die eerste ses elemente. En insgelyks as jy hier sien, het ek het nie n te spesifiseer gelyk 6. By verstek dit gebruik ses, dink ek. En dan, as ek wil 'n sekere spesifiseer waarde, dan kan ek sien wat as goed. So dit is 'n paar eenvoudige opdragte en hier is 'n ander een wat just-- goed, Ek can-- dit is eintlik 'n bietjie meer kompleks, maar dit sal net die klas van elke kolom van die iris dataset. So dit sal jou wys wat elk van hierdie kolomme is in terme van hul tipes. So kelkblaarkrans lengte is numeriese, kelkblaarkrans breedte numeriese. Al hierdie waardes is net numeriese want jy kan vertel van hierdie data struktureer dit is al gaan numeriese. En die Soort kolom gaan 'n faktor wees. So normaalweg, sou jy dink dat dit is soos 'n karakter string. Maar as jy net doen irisSpecies, en dan gaan ek kop 5 te doen, en dit gaan druk uit die eerste vyf waardes. En dan agterkom vlakke. So dit is saying-- dit is R se manier van 'n kategoriese veranderlikes. So in plaas van net met karakterstringe, dit het vlakke spesifiseer wat van hierdie dinge is. So kom ons sê irisSpecies 1. So wat jy hier wil doen, is ek subsetting hierdie Soort kolom. So dit neem die Soort kolom en dan dit indekse die eerste element te kry. So dit moet gee jou setosa. En dit gee jou ook vlakke hier. So kan jy ook vergelyk om dit te die karakter setosa en dit is nie van plan om waar te wees, want die een is van 'n ander soort as die ander. Of ek dink dit is waar, want R is meer intelligent as dit. En dit lyk op hierdie en dan sê, miskien is dit wat jy wil. So dit gaan om die karakter te sê string setosa is dieselfde as hierdie een. En dan so, kan jy ook net gryp hierdie soos so aan. So dit is net 'n soort van vinnige bevele van die dataset. So hier is 'n paar data eksplorasie. So, dit is 'n bietjie meer betrokke by die data-analise. En dit is geneem uit 'n paar Boot Camp in R in Berkeley. So biblioteek buitelandse. So ek gaan om te laai in 'n biblioteek wat genoem buitelandse. So dit gaan my te gee read.dta so aanvaar dat ek hierdie dataset. Dit word in die huidige gestoor werk gids van my console. So laat ons net sien wat die werk gids is. So hier is my gids te werk. En lees dot data, hierdie ding, sê hierdie lêer is geleë in die data gids van hierdie huidige werk gids. En read.dta dit is nie 'n verstek opdrag. Ek dink ek laai dit in reeds. IEI aanvaar ek gelaai dit in reeds. Maar so read.dta gaan nie 'n verstek opdrag te wees. En dit is hoekom jy gaan te hê om te laai in hierdie biblioteek package-- hierdie pakket genaamd buitelandse. En as jy nie het nie die pakket, dink ek buitelandse is een van die ingeboude in kinders. Anders, kan jy ook doen install.packages en dit sal die pakket installeer. En dit sal vir jou R. Uh, nee. En dan is ek net gaan om te stop dit omdat ek het dit reeds. Maar wat is regtig lekker oor R is dat die pakket bestuur stelsel is baie elegant. Want dit sal alles stoor baie mooi vir jou. So in hierdie geval, dit gaan om te slaan dit in, glo ek, hierdie biblioteek hier. So wanneer jy wil nuwe pakkette te installeer, dit is net so eenvoudig soos doen install.packages en R sal almal te bestuur die pakkette vir jou. So jy hoef nie iets te doen in Python, waar jy moet eksterne pakket bestuurders soos papier Anaconda waar jy doing-- jy installeer die pakkette buite Python en dan probeer jy dit self uit te voer. So, dit is baie mooi manier. En install.packages vereis internet. Dit neem dit van 'n bediener en die bron wat versamel al die pakkette is CRAN genoem. En jy kan spesifiseer watter soort spieël jy wil die pakkette te laai van. So hier is ek neem hierdie dataset. Ek lees dit in die gebruik van hierdie funksie. So laat my gaan voort en doen dit. So laat ons aanvaar dat jy het hierdie dataset en jy het absoluut geen idee wat dit is. En dit kom eintlik op redelik dikwels in die bedryf waar jy net hierdie tonne en tonne van morsig dinge en hulle is ongelooflik sonder etiket. So hier het ek hierdie dataset en ek weet nie wat dit is, sodat ek net wys om dit te sien. So ek gaan eerste hoof te doen. So ek die eerste ses kyk kolomme van wat hierdie dataset is. So, dit is die staat, pres04, en dan al hierdie verskillende soort van kolomme. En wat is interessant hier, dink ek, is dat jy sou aanvaar dat dit lyk soos 'n soort van die verkiesing. En ek dink net uit kyk na die lêer noem dit 'n soort van die versameling van data oor kandidate of kiesers wat vir 'n spesifieke presidente gestem of president kandidate vir die 2004-verkiesing. So hier is waardes 1, 2 so 'n manier te stoor die president kandidate is hulle name. In hierdie geval, dit lyk soos hulle is net heelgetalwaardes. So 2004, was dit Bush versus Kerry Ek glo nie. En nou, kom ons sê jy weet net nie of 1 stem ooreen met Bush of 2 ooreenstem met Kerry of en so aan en so voort, reg? En dit is net vir my, 'n redelik algemene probleem. So wat kan jy doen in hierdie geval? So laat ons gaan al hierdie ander dinge. staat, ek neem hierdie kom uit verskillende lande. partyid, inkomste. Kom ons kyk na partyid. So miskien een ding wat jy kan doen, is om kyk na elk van die waarnemings wat 'n partyid van die Republikeinse of demokratiese of iets. So laat ons net kyk na wat partyid is. So ek gaan neem dat en dan gaan ek hierdie dollar teken te doen operateur wat ek gedoen het voorheen en dit gaan subset aan daardie kolom. En dan gaan ek hierdie aan die hoof in 20, net om te sien wat dit lyk. So dit is net 'n klomp van die NAS. So met ander woorde, jy het ontbreek data oor hierdie ouens. Maar jy moet ook agterkom dat partyid is 'n faktor so dit gee jou verskillende kategorieë. So met ander woorde, kan partyid neem Demokratiese, Republikeinse, Onafhanklike, of iets anders. So laat ons gaan voort en laat ons sien watter van hierdie is-- O, OK. So ek gaan subset te partyid en dan kyk na watter is Demokratiese, byvoorbeeld. Dit gaan vir jou 'n Boole, 'n groot Boole van TRUEs en FALSEs. En nou, kom ons sê ek wil te subset van hierdie ouens. So dit gaan my dat te neem en subset na wat ookal waarnemings het partyid gelykes gelyk demokratiese. En dit is nogal lank, weens daar is so baie van hulle. So nou, ek gaan om dit te kop in 20. En as jy agterkom, is gelyk aan gelykes is interessant dat jy already-- jy ook met die NAS. So in hierdie geval, het jy nog nie kan kry enige inligting, want nou het jy NAS en jy wil net om te sien wat van die waarneming ooreenstem met demokratiese en nie dié van ontbrekende waardes hulself. So hoe sal jy ontslae te raak van hierdie NAS? So hier is ek net die op-sleutel op my wyser en dan sê die skuif. En dan is hier is ek net gaan is.na datpartyid te sê. So dit en en sal twee verskillende Boole vektore en sê dit gaan wees Ware en valse byvoorbeeld. So dit gaan hierdie komponent-wyse te doen. So hier ek sê neem die data raam, subset aan die kinders wat ooreenstem met demokratiese, en verwyder enige van hulle wat nie NA. Dus moet hierdie will-- gee jou iets. Kom ons kyk is.na. Kom ons probeer is.na datpartyid. En dit moet gee you-- sorry-- net 'n Boole vektor. En dan, want dit is so lank, Ek gaan subset tot 20. OK. So dit moet werk. En hierdie een sal ook TRUEs. Ag, so my fout hier is dat I'm-- ek gebruik C ++ en R uitruilbaar so ek maak hierdie fout al die tyd. Die en operateur eintlik die een wat jy wil. Jy wil nie om te gebruik twee -karakters, net 'n enkele een. OK. So laat ons sien. Sodat ons subsetted aan die partyid waar hulle is demokratiese en hulle is nie van ontbrekende waardes. En nou, laat ons kyk na watter hulle het vir. So lyk dit soos die meeste van hulle het vir 1. So ek gaan om voort te gaan en sê dit is Kerry. En so, kan jy ook gaan na die Republikeinse en hopelik, hierdie moet gee jou 2. Dit is net 'n klomp van die verskillende kolomme. En inderdaad, dit is 2. So partyid al Republikeinse, die meeste van hulle stem vir 2. So dit lyk, net deur te kyk na hierdie, Republikeinse gaan wees 'n very-- of die partyid gaan 'n baie wees groot faktor in die bepaling van watter kandidaat hulle is gaan stem. En dit is natuurlik waar in die algemeen. En dit ooreenstem met jou intuïsie, natuurlik. So dit lyk asof ek loop uit van die tyd so laat my net moet voortgaan en toon 'n paar vinnige beelde. So hier is iets wat effens meer ingewikkeld met visualisering. So in hierdie geval, dit is 'n baie eenvoudige ontleding van net nagaan wat die president van '04 is. So in hierdie geval, kom ons sê jy wou om hierdie vraag te beantwoord. So dink ons ​​wou die stem te leer ken gedrag in die 2004 president verkiesing en hoe dit verskil van ras. So nie net wat jy wil sien die stem gedrag, maar jy wil subset van elke ras en soort van 'n opsomming van dit. En jy kan net vertel deur hierdie komplekse notasie dat dit is 'n soort van om vaag. So een van die meer gevorderde R pakkette wat ook soort van onlangse genoem dplyr. So is dit hierdie een reg hier. En ggg-- ggplot2 is net 'n mooi manier van doen beter visualisaties as die gebou-in-een. So ek gaan om te laai hierdie twee biblioteke. En dan, ek gaan om te gaan voor en hardloop hierdie opdrag. Jy kan net behandel dit as 'n swart boks. Wat gebeur is dat die pyp operateur is verby in hierdie argument in hier. So ek sê groep dat ras en dan president 04. En dan, al hierdie ander opdragte is die filter en dan op te som waar ek doen telling en dan is ek die plot dit hier. OK cool. So laat ons gaan voort en sien wat dit daar lyk. So, wat hier gebeur, is dat ek net geplot elk van die wedstryde en dan watter hulle het vir. En hierdie twee verskillende waardes ooreenstem met 2 en 1. As jy wil meer te wees elegant, kan jy ook net spesifiseer dat 2 Kerry-- of 2 is Bush, en dan 1 is Kerry. En jy kan ook ' wat in jou legende. En jy kan ook verdeel hierdie staafgrafieke. Omdat een ding is dat, as jy agterkom, dit is nie baie maklik om te identifiseer Watter van hierdie twee waardes is groter. So een ding wat jy graag wil hê om doen, is om hierdie blou gebied en net beweeg dit hier sodat jy kan hierdie twee kante mekaar vergelyk deur. En ek dink dit is iets wat ek nie tyd het om nou te doen nie, maar dit is ook baie maklik om te doen. Jy kan net kyk na die man bladsye van ggplot. So jy kan net nie ggplot soos wat en lees in hierdie man bladsy. So laat my net vinnig wys jou 'n paar koel dinge. Kom ons gaan voort en gaan aan- net 'n aansoek van die masjien leer. So kom ons sê ons het hierdie drie pakkette so ek gaan om dit te laai in. So dit net druk 'n paar inligting nadat ek gelaai in die ding. So ek sê hierdie read.csv, hierdie dataset, en nou Ek gaan om voort te gaan en te kyk en sien wat binne hierdie dataset. So het die eerste 20 waarnemings. So ek moet net X1, X2, en Y. So dit lyk soos 'n klomp van hierdie waardes is wat wissel van miskien 20 en 80 of so. En dan insgelyks vir X2 en dan hierdie Y lyk etikette 0 en 1 te wees. Om dit te verifieer, kan ek net doen opsomming data X1. En dan insgelyks vir al hierdie ander kolomme. So opsomming is 'n vinnige manier net wat jy vinnig waardes. O, jammer. Hierdie een moet wees Y. So in hierdie geval, gee die Quantiles, mediane, maxes as well. In hierdie geval, dataY, kan jy sien dat dit net gaan wees 0 en 1. Ook die gemiddelde sê 0.6, beteken net dat dit lyk soos ek het meer 1s as 0s. So laat my voor en show gaan jy wat dit lyk. So ek is net gaan om dit te stip. Kom ons kyk hoe om dit te verwyder. O OK. OK. So dit is wat dit lyk. So lyk dit soos geel ek gespesifiseerde as 0, en dan rooi wat ek vermeld as 1s. So hier is dit lyk soos etiket punte en dit lyk soos jy wou net 'n paar soort groepering op hierdie punt. En laat my net voort en show gaan jy 'n paar van hierdie ingeboude funksies. So hier is lm. So dit is net probeer 'n lyn om dit aan te pas. So, wat is die beste manier om dat ek kan inpas n lyn soos dat dit die beste sal skei hierdie soort van groepering. En ideaal, kan jy net sien dat ek net loop al hierdie gebooie en dan, ek gaan voort en voeg die lyn. So dit lyk soos die beste raaiskoot. Dit is om die beste een wat verminder die fout in 'n poging om hierdie lyn te pas. Natuurlik, dit lyk soort goed, maar dit is nie die beste. En lineêre modelle, in algemene, gaan wees werklik 'n groot vir teorie en net soort van beginsels van die masjien gebou leer. Maar in die praktyk, jy gaan te wil iets meer algemeen te doen. So jy kan net probeer om iets genoem 'n neurale netwerk. Hierdie dinge is hoe meer algemeen. En hulle het net werk fantasties vir groot datastelle. So in hierdie geval, ons het net have-- laat se see-- ons nrow. So nrow is net sê aantal rye. So in hierdie geval, ek 100 waarnemings. So laat my gaan voort en maak 'n neurale netwerk. So, dit is baie mooi want ek kan net sê nnet en dan is ek agteruit Y. So het die Y is dat kolom. En dan agteruit dit op die ander twee veranderlikes. So, dit is korter notasie vir X1 en X2. So laat ons gaan voort en hardloop hierdie. O, jammer. Ek moet hierdie hele ding uit te voer. En dit is net die druk van notasie vir hoe vinnig of nie vinnig dit konvergeer. So dit lyk soos dit het konvergeer. So laat my voor en druk gaan uit wat dit daar lyk. Sien hier is die foto en hier is 'n kontoer wys hoe goed dit pas. En dit is just-- jy kan sien dit wat dit is baie, baie mooi. Dit kan selfs wees overfitting, maar jy kan ook rekening vir hierdie met ander tegnieke soos kruis-validering. En dit is ook gebou in R. En laat my net wys jou ondersteun vektor masjien. Dit is 'n ander baie algemeen tegniek in die masjien leer. Dit is baie soortgelyk aan lineêre modelle, maar dit gebruik wat 'n kern metode genoem. En laat ons sien hoe goed wat nie. So hierdie een is baie soortgelyk aan hoe goed 'n neurale netwerk voer, maar dit is baie meer gladder. En dit is die basis van what-- hoe SVMs werk. So dit is net 'n baie vinnige oorsig van sommige van die ingeboude funksies wat jy kan doen en ook 'n paar van die data-eksplorasie. So laat my net voort te gaan en terug te gaan na die skyfies. So natuurlik, dit is nie baie omvattend. En dit is regtig net 'n teaser toon wat jy regtig kan doen in R. So as jy wil, net soos om meer te leer, hier is 'n klomp van die verskillende bronne. So as jy lief vir handboeke of jy net lief vir lees dinge online, dan is dit 'n fantastiese een deur Hadley Wickham, wat ook geskep om al hierdie regtig cool pakkette. As jy lief is vir video's, dan Berkeley het 'n awesome Boot Camp dit is several-- dit is soort van 'n lang. En dit sal jy amper leer alles wat jy wil weet oor R. En so, daar is Codeacademy en al hierdie ander soort interaktiewe webtuistes. Hulle is ook om common-- meer en meer algemeen. So, dit is baie soortgelyk aan Codeacademy. En uiteindelik, as jy net wil Gemeenskap en te help, dit is 'n klomp van die dinge wat jy kan gaan na. Dit is duidelik dat ons nog steeds gebruik poslyste, net soos byna elke ander programmeertaal gemeenskap. En #rstats, dit is ons gemeenskap Twitter. Dit is eintlik baie algemeen. En dan gebruiker! Is net ons konferensie. En dan, natuurlik, kan jy gebruik om al hierdie ander Q & A dinge, soos Stack oorloop, Google, en dan GitHub. Omdat die meeste van hierdie pakkette en 'n groot deel van die gemeenskap sal gesentreer word rondom die ontwikkeling van kode, omdat dit open source. En dit is net regtig mooi op GitHub. En ten slotte, kan jy my kontak indien jy moet net 'n vinnige vrae. So jy my kan vind op Twitter hier, my webwerf, en net my e-pos. So hopelik, dit was something-- net 'n kort teaser van wat R is regtig in staat om dit te doen. En hopelik, jy moet net kyk uit hierdie drie skakels en kyk wat jy kan meer doen. En ek dink dit is net oor dit. Dankie. [Applous]