CLOPOTUL

Sunt cei care citesc aceasta stire inaintea ta.
Abonați-vă pentru a primi articole noi.
E-mail
Nume
Nume de familie
Cum vrei să citești Clopoțelul?
Fără spam

]. „Proletar al muncii mintale”. Fizician de studii. Lucrez de peste 30 de ani în domeniul prelucrării informațiilor medicale și biologice.
Lucrez în R de exact 10 ani, după ce am migrat la el după 15 ani de colaborare strânsă cu Matlab. Motivul principal pentru migrarea către o altă platformă de lucru a fost propria mea migrație fizică la capătul opus al Pământului la Auckland, Noua Zeelandă. Aici viața din primele zile m-a împins în brațele lui R, pe care încă nu am fost nevoit să-l regret.

Din ce în ce mai des văd focare de interes pentru R în rețeaua profesională. Ei bine, articole despre el apar pe această resursă respectată. Mai jos de tăietură se află prima mea încercare de introducere în limba rusă la R - prima parte (verbală) a prezentării pe care am făcut-o pentru colegii de la Facultatea de Științe Animale, Universitatea de Stat Iova în urmă cu trei ani.
(in lateral: dar se dovedește că este dificil să te traduci singur...)


În această postare

  • Ce este R
  • De unde a venit
  • De ce îl iubesc
  • Mituri și adevăr

Ce s-a întâmplat R

În primul rând R este un sistem pentru calcule statistice și alte calcule științifice folosind un limbaj de programare S .

S- limbajul scris de către statisticieni pentru statisticieni. așa cum este definit de autorul John Chambers. Limbajul a fost foarte bine primit de la introducerea sa și a fost testat de generații de utilizatori statistici foarte pretențioși. Se poate considera că este destul de cunoscut și acceptat în comunitatea statistică globală. Pe limbă S O serie de modele epidemiologice, de mediu și financiare critice au fost implementate și sunt încă în funcțiune în întreaga lume și în multe industrii. Cum este limba din punctul de vedere al meu, ca „utilizator de scris”, S este o alternativă foarte plăcută la limbă SAS .

Din propria mea experiență - Introducere și primele lecții S Eu însumi l-am primit la începutul anilor 90 de la experții statistici ai OMS cu care m-am intersectat în cercetarea științifică la acea vreme.

Potrivit multor estimări, R (atât pentru mine, cât și nu prea exagerat) este unul dintre cele mai de succes proiecte open source, distribuit gratuit din zeci de oglinzi din întreaga lume conform standardelor de licență GNU.
Autorii refuză categoric toate propunerile de comercializare a proiectului, deși astăzi există motive să presupunem că numărul de copii instalate de R în lume depășește numărul total de copii. toata lumea alte sisteme de analiză statistică.

De la bun început și până în ziua de azi, proiectul evocă în mine cel mai profund respect (în pragul admirației) pentru stabilitate, suport pentru utilizatori, compatibilitate de cod etc., pe care l-aș combina în concept cultură.
Cu toate acestea, ultima propoziție este mai degrabă pentru subsecțiunile ulterioare.

De unde a venit? Sși ce legătură are asta cu R

Fără îndoială, Wikipedia vă va oferi mai multe scrisori.
Voi nota doar ceea ce consider important pentru înțelegerea locului lui S și R în această viață din această lume.

Laboratoarele Bell (alias Bell Labs, AT&T Bell Labaratories) sunt destul de faimoase în istoria științei și tehnologiei, și în special în IT. Cercetările statistice acolo au fost întotdeauna efectuate foarte serios și au fost susținute serios de toate instrumentele computerizate disponibile (citește - tone de cod Fortran și Lisp).

Ceea ce mai târziu a devenit limbajul S a luat naștere în anii 1970, la inițiativa și direcția lui John Chambers, ca un set de scripturi care au făcut mai ușoară „alimentarea” datelor în codul Fortran. Acestea. Accentul principal a fost pe sarcina de manipulare interactivă a datelor, compactitate, ușurință de scriere și lizibilitate a codului și obținerea de rezultate decente pe o varietate de dispozitive, tabele și grafice.

Sintaxa limbajului prevede construirea unor structuri de date aproape arbitrar complexe, instrumente pentru descrierea sarcinilor și obiectelor statistice specifice - statistici. teste, modele etc.

Din 1984, limba a căpătat un nume, propria „Biblie” (a fost publicată o carte de Chambers și Beckers: S: Un mediu interactiv pentru analiza datelor și grafică), a început să conțină implicit un „set gentleman” aproape complet de statistici și „oameni de știință probabilistici” - distribuții, generatoare de numere aleatorii, teste statistice, multe analize statistice standard, lucru cu matrici etc., ca să nu mai vorbim de un sistem dezvoltat de grafica stiintifica. Cel mai important lucru este că a devenit disponibil pentru utilizatorii din întreaga lume la un preț foarte rezonabil.

În 1988 (o altă carte publicată Noul limbaj S) - modificat folosind OOP, totul a devenit obiecte cu valori implicite foarte rezonabile, accesibilitate pentru modificare, elemente de auto-documentare etc., etc.

În același timp, laboratoarele au publicat codul sursă și „Bell Lab” S a devenit gratuit pentru studenți și pentru uz științific. Toate acestea erau legate cumva de „dekulakizarea” AT&T, dar nu mai eram foarte interesat de aceste detalii.

Au existat și probabil încă există implementări comerciale ale limbajului S. Am dat peste S-PlusȘi S2000. Au fost susținute de diferite companii în momente diferite, în principal trăind (traiesc?) datorită sprijinului creat anterior S aplicatii. În aceste versiuni post-Bell S a apărut o nouă versiune a motorului OOP, dar pentru utilizatorul pur a fost aproape fără sânge în ceea ce privește compatibilitatea codului istoric.

R- singura implementare necomercială, complet independentă (față de Bell original) a limbajului S.

Și într-un acord rar în aceste zile, într-un fel de neimaginat pentru mine, dezvoltatorii versiunilor actuale ale reclamei Sși non-profit R susțin compatibilitatea și continuitatea lor aproape completă.

Și acum R

În spatele oricărui fenomen semnificativ din această viață se află un fel de personalitate carismatică. Totuși, acest lucru se poate întâmpla și aceasta este definiția semnificației fenomenului.

În cazul lui R, există trei astfel de persoane.
L-am menționat deja pe John Chambers.

Ross Ihaka, student și apoi cercetător în cadrul Departamentului de Statistică al Universității din Auckland, a ales tema tezei sale (care a fost realizată la MIT, SUA) pentru a studia posibilitatea construirii unei mașini virtuale (VM) pentru statistică. limbaje de programare. Limba intermediară aleasă a fost Lisp (Lisp comun, CL) și implementează un prototip VM care „înțelege” mici subseturi de SASȘi S.
Ross s-a întors la Oakland pentru a-și finaliza dizertația, unde l-a cunoscut curând pe Robert Gentleman și a devenit interesat de proiectul R.
Ross nu și-a susținut niciodată dizertația, dar are deja o diplomă academică de la mai multe universități „pe baza meritului combinat”. Anul trecut i s-a acordat titlul și a primit postul de profesor asociat (profesor asistent) la universitatea sa de origine.

Robert Gentleman, un alt statistician pasionat de programare, originar din Canada, în timp ce se afla într-un stagiu la Universitatea din Auckland (pe atunci lucra în Australia), i-a sugerat lui Ross „să scrie ceva limbaj”.
Conform legendei pe care eu însumi am auzit-o de la acești „părinți fondatori”, în doar aproape o lună ei, într-un acces de entuziasm nebunesc, au rescris C.L. aproape toate echipele S, inclusiv o bibliotecă puternică de modelare liniară.

Motor de calcul R, urmând tradițiile prototipului, s-a ales binecunoscuta, general acceptată și liberă bibliotecă BLAS (cu posibilitatea de a folosi ATLAS etc. cu aceeași interfață).
Paul Murrel, unul dintre cei mai apropiați prieteni ai lui Ross și, de asemenea, angajat al Universității din Oakland, a dat peste cap și a scris (în C, se pare) un motor grafic de la zero care reproduce complet funcționalitatea acestuia în S.

Rezultatul a fost un pachet gratuit, complet funcțional, care și-a câștigat instantaneu un loc în procesul educațional de la Universitatea Oakland, pe deplin în concordanță cu descrierile din cărțile foarte detaliate și de înaltă calitate ale lui Chambers, care au fost publicate în mod tradițional în broșuri și de calitate medie a tipăririi, dar erau ieftine și accesibile.
Mai multe grupuri de activiști din mișcarea GNU (de exemplu GIS) au adoptat R ca platformă pentru calculul științific.

Dar cu adevărat cea mai largă faimă R dobândit în bioinformatică când unul dintre „părinții” Robert Gentleman, care era implicat la acea vreme în activitatea companiei Affimmetrix, a duplicat toate funcționalitățile software-ului comercial al companiei și a lansat (ei bine, mai mult de unul, desigur) open-ul proiect sursă Bioconductor. În prezent Bioconductor este liderul incontestabil în bioinformatică open source pentru toate „omicile” (genomică, proteomică, metabolomică etc.).

Desigur, limbajul unic de interfață pentru această revoltă de fantezii bioinformatice a devenit R.

Cercul a făcut cerc complet atunci când s-au pensionat Chambers, creatorul limbii S, a devenit membru cu drepturi depline al grupului de dezvoltatori activi R.

De ce îl iubesc (lista)

  1. Interactivitate, „Programare cu date” - stilul meu preferat de lucru
  2. Limbajul elegant (pentru un amator) - Iubesc listele, cadrele de date, programarea funcțională și funcțiile lambda (a-la) Libertatea de exprimare: aceeași problemă poate fi rezolvată în zece moduri (atenuează sentimentul de rutină)
  3. „Privește această lume cu sobru” - rareori „se prăbușește” sau „suspend” pe cineva, operațiuni logice cu date lipsă, gestionarea erorilor în timpul execuției (try-error), schimb ușor cu sistemul la nivelul I/O standard etc.
  4. Un set complet de proceduri statistice gata de utilizare
  5. Bine documentat și bine întreținut - compatibilitate, continuitate etc.
  6. Am adunat în jurul meu o comunitate profesională plăcută din punct de vedere uman (forumuri, conferințe cu utilizatori etc.)
  7. Interfață bine documentată pentru biblioteci externe și funcții pe orice - Fortran, C, Java. Prin urmare, o mare de biblioteci bine documentate cu privire la toate aspectele statisticii și științei datelor în aproape fiecare domeniu al științei, dar cu un accent principal pe bioinformatică/biostatistică; totul este actualizat în mod regulat și corect, dacă există voința autorului pentru asta
  8. Lipsa unei GUI obligatorii în „configurația de bază” - Ei bine, nu sunt o persoană „șoarece”!
În afara listei: sunt doar mulțumit că principalul meu instrument de lucru are... un suflet.
De fapt, asta încerc să arăt în articolul meu.

De ce și cum îl folosesc (exemple)

Am început să scriu în această secțiune, dar m-am oprit.
Altfel nu aș fi terminat niciodată.
Oh, probabil cândva mai târziu.

Mituri și adevăr

R lent
R este „subțire”, folosește bibliotecile blas/lapack/atlas pentru calcule, încearcă să scrii ceva mai repede decât acești buni „cai de bătaie” Fortran (adesea). Toate funcțiile critice, de regulă, folosesc operații vectoriale și sunt implementate în CU.
R folosește resursele de calcul în mod irațional, în special memoria
Da, dezvoltatorii admit acest păcat. Dar timpul de lucru al unui specialist este acum mult mai scump decât hardware-ul. Descărcați jucăriile de pe un computer de lucru modern și nu veți avea probleme cu R cu cele mai multe seturi de date reale.
Este posibil ca software-ul gratuit să nu fie de încredere
Pot fi: Fortran, Linux, C, Lisp, Java etc.
În loc de epilog
După cum am menționat mai sus, postarea de mai jos este de fapt o traducere a prezentării mele pentru un public țintă destul de specific și voi descrie pe scurt acest public.

Multe companii IT „curate” vor trebui să întâlnească astfel de oameni, deoarece producția de alimente concurează de mult timp cu petrolul și alte resurse energetice pentru a atrage capital și a genera profit. Iar capacitatea pieței de bioinformatică în medicină și farmacologie este limitată, indiferent de cum o priviți.

Așadar, publicul meu este reprezentat de oameni cu o educație de bază în genetică și ameliorare, medicină veterinară și, mai rar, biologie (în principal moleculară). Băieți și mătuși (mai multe dintre acestea din urmă), 20-30 de ani... programare (!) pe FORTRANe sau VB, gestionând faimos tabelele Excel cu 100.000 rânduri/coloane și „renunțând” periodic sarcinile lor (și programarea lor) pe clusterul lor Linux de calcul cu peste 500 de nuclee cu 12 TB de memorie partajată și din când în când necesitând extinderea memoriei discului cu un alt zece terabytes.

Baza metodologică este un amestec exploziv de analize de varianță la fel de vechi ca lumea, cu modele mixte rezolvate în nici un alt mod decât prin metoda probabilității maxime, rețele bayesiene de „topire a creierului” etc.

Date - tabele de date de la unități la zeci de mii de rânduri, incluzând uneori 1-5 coloane cu fenotipuri, dar din ce în ce mai des - zeci sau sute de coloane „Ka” de variabile care sunt slab corelate între ele și cu fenotipuri.

Ei bine, da, au și o „tradiție bună” de a privi totul în ceea ce privește legăturile de familie (genetică, până la urmă). Legăturile de rudenie sunt prezentate în mod tradițional sub forma unei matrice de „legături de rudenie” (pedigree) cu dimensiuni, de exemplu, de 40.000 x 40.000 (asta dacă există 40.000 de animale). Ei bine, sau (deocamdată, din fericire, doar în proiect) 20.000.000 x 20.000.000 - aceasta este pentru a „acoperi” cu un singur model toate cele 20 de milioane de animale istorice disponibile în baza de date ( DB2, dacă este pe cineva interesat, și nici măcar Cobol nu a fost încă „decupat” de peste tot...)

Pe mesele pline de literatură (în același timp) Fortran, Java, C#, Scala, Octavia, Linux for Dummies poți recunoaște absolvenții recent de bioinformatică. Dar oarecum repede mulți dintre ei părăsesc știința pentru a deveni „codatori”.

Cu toate acestea, cunosc și un caz de mișcare inversă. Asa de R va fi de folos multora.

Aș dori să vorbesc despre utilizarea mediului de analiză statistică gratuit R. Îl consider o alternativă la pachetele statistice precum SPSS Statistics. Spre profundul meu regret, este complet necunoscut în vastitatea Patriei noastre, dar în zadar. Cred că capacitatea de a scrie proceduri suplimentare de analiză statistică în S face din R un instrument util de analiză a datelor.

În semestrul de primăvară al anului 2010, am avut ocazia să susțin prelegeri și să conduc cursuri practice în cadrul cursului „Analiza datelor statistice” pentru studenții Departamentului de Sisteme inteligente a Universității de Stat pentru Științe Umaniste din Rusia.

Elevii mei au urmat anterior un curs semestrial de teoria probabilității care acoperă elementele de bază ale spațiilor de probabilitate discrete, probabilități condiționale, teorema lui Bayes, legea numerelor mari, unele informații despre legea normală și teorema limitei centrale.

În urmă cu aproximativ cinci ani, predam deja cursuri în cadrul cursului semestrial (apoi combinat) „Fundamentals of Probability Theory and Mathematical Statistics”, așa că mi-am extins notele (date studenților înainte de fiecare oră) despre statistică. Acum că Universitatea de Stat Rusă pentru Științe Umaniste are un server studențesc isdwiki.rsuh.ru al departamentului, le încarc simultan pe FTP.

A apărut întrebarea: ce program ar trebui să folosesc pentru a desfășura orele practice într-o clasă de informatică? Microsoft Excel folosit frecvent a fost respins atât pentru că era proprietar, cât și pentru că implementa incorect unele proceduri statistice. Puteți citi despre acest lucru, de exemplu, în cartea lui A.A. Makarov și Yu.N. Tyurin „Analiza statistică a datelor pe computer”. Foile de calcul Calc din suita gratuită de birou Openoffice.org au fost rusificate, astfel încât cu greu găsesc funcția necesară (denumirile lor au fost și ele prescurtate în mod dezgustător).

Cel mai des folosit pachet este SPSS Statistics. SPSS a fost acum achiziționat de IBM. Dintre avantajele IBM SPSS Statistics aș dori să subliniez:

  • Încărcarea convenabilă a datelor în diverse formate (Excel, SAS, prin OLE DB, prin ODBC Direct Driver);
  • Disponibilitatea atât a unui limbaj de comandă, cât și a unui sistem extins de meniu pentru acces direct la diverse proceduri de analiză statistică;
  • Mijloace grafice de afișare a rezultatelor;
  • Modul încorporat Statistics Coach care sugerează interactiv o metodă de analiză adecvată.
În opinia mea, dezavantajele IBM SPSS Statistics sunt:
  • Plata chiar si pentru studenti;
  • Necesitatea de a obține module (plătite suplimentar) care conțin proceduri speciale;
  • Acceptă numai sisteme de operare Linux pe 32 de biți, deși Windows acceptă atât 32 de biți, cât și 64 de biți.
Ca alternativă, am ales . Acest sistem a început să fie dezvoltat prin eforturile lui Robert Gentleman și Ross Ihak de la Departamentul de Statistică de la Universitatea din Melbourne în 1995. Primele litere ale numelor autorilor i-au determinat titlul. Ulterior, statisticieni de frunte s-au implicat în dezvoltarea și extinderea acestui sistem.

Consider avantajele sistemului în discuție:

  • Distribuirea programului sub Licența Publică GNU;
  • Disponibilitatea codului sursă și a modulelor binare în rețeaua extinsă de depozite CRAN (The Comprehensive R Archive Network). Pentru Rusia, acesta este serverul cran.gis-lab.info;
  • Disponibilitatea unui pachet de instalare pentru Windows (funcționează atât pe Vista pe 32, cât și pe 64 de biți). S-a dovedit întâmplător că instalarea nu necesită drepturi de administrator sub Windows XP;
  • Posibilitatea de a instala dintr-un depozit pe Linux (funcționează pentru mine pe versiunea pe 64 de biți a Ubuntu 9.10);
  • Disponibilitatea propriului limbaj de programare pentru procedurile statistice R, care a devenit de fapt un standard. Este, de exemplu, pe deplin susținut de noul IBM SPSS Statistics Developer;
  • Acest limbaj este o extensie a limbajului S dezvoltat la Bell Labs, care formează în prezent baza sistemului comercial S-PLUS. Majoritatea programelor scrise pentru S-PLUS pot fi executate cu ușurință în mediul R;
  • Abilitatea de a face schimb de date cu foi de calcul;
  • Posibilitatea de a salva întregul istoric de calcul în scopuri de documentare.
Pentru prima lecție au fost pregătite CD-uri pe care au fost înregistrate fișiere de instalare, documentație și manuale. Vă voi spune mai multe despre acesta din urmă. CRAN oferă ghiduri detaliate ale utilizatorului despre instalare, limbajul R (și subsetul său S), scrierea de proceduri statistice suplimentare și exportul și importul de date. Secțiunea Documentație contribuită conține un număr mare de publicații ale profesorilor de statistică care folosesc acest pachet în procesul educațional. Din păcate, nu există nimic în rusă, deși, de exemplu, există chiar unul în poloneză. Dintre cărțile în limba engleză, aș dori să menționez „Utilizarea R pentru statistici introductive” de profesorul John Verzani de la Universitatea City din New York și „Introduction to the R project for Statistical Computing” de profesorul Rossiter (Olanda) de la Universitatea Internațională. Institutul de Geoinformatică și Observații Pământului.

Prima lecție a fost dedicată instalării și învățării utilizării pachetului, familiarizării cu sintaxa limbajului R. Calculul integralelor folosind metoda Monte Carlo a fost folosit ca sarcină de testare. Iată un exemplu de calcul al probabilității de r.v. cu distribuție exponențială cu parametrul 3, luați o valoare mai mică de 0,5 (10000 este numărul de încercări).
> x=runif(10000,0,0.5)
> y=runif(10000,0,3)
>t=y<3*exp(-3*x)
> u=x[t]
>v=y[t]
> complot(u,v)
> i=0,5*3*lungime(u)/10000

Primele două linii specifică o distribuție uniformă a punctelor în dreptunghiul x, apoi acele puncte care se încadrează sub graficul densității exponențiale 3*exp(-3*x) sunt selectate, funcția plot afișează punctele în fereastra grafică de ieșire și în final se calculează integrala necesară.
A doua lecție a fost dedicată calculării statisticilor descriptive (quantile, mediană, medie, varianță, corelație și covarianță) și producerii de grafice (histograme, box-and-whiskers).
În clasele ulterioare a fost folosită biblioteca Rcmdr. Aceasta este o interfață grafică cu utilizatorul (GUI) pentru mediul R. Biblioteca este creată prin eforturile profesorului John Fox de la Universitatea McMaster din Canada.

Instalarea acestei biblioteci se realizează prin executarea comenzii install.packages("Rcmdr", dependencies=TRUE) în interiorul mediului R. Dacă mediul în sine este un interpret de limbaj R, atunci add-on-ul "Rcmdr" este o fereastră suplimentară. echipat cu un sistem de meniu care conține un număr mare de comenzi corespunzătoare procedurilor statistice standard. Acest lucru este deosebit de convenabil pentru cursurile în care principalul lucru este să-l înveți pe student să apese butoane (spre regretul meu, acestea devin din ce în ce mai frecvente).

Notele de seminar de la cursul meu anterior au fost extinse. Ele sunt disponibile și prin FTP de pe site-ul isdwiki.rsuh.ru. Aceste note conțineau tabele de valori critice care au fost folosite pentru calcule la bord. Anul acesta, elevii au fost încurajați să rezolve aceste probleme pe calculator și, de asemenea, să verifice tabelele folosind aproximațiile (normale) prevăzute și în note.

Au fost și unele greșeli ale mele. De exemplu, mi-am dat seama prea târziu că Rcmdr vă permite să importați date din pachetele descărcate, așa că eșantioanele relativ mari au fost procesate doar în clasele de analiză de regresie. Când prezentau teste neparametrice, studenții introduceau datele manual folosind notele mele. Un alt dezavantaj, după cum am înțeles acum, a fost numărul insuficient de teme pentru acasă pentru a scrie programe destul de complexe în limbajul R.

Trebuie remarcat faptul că mai mulți studenți seniori au participat la cursurile mele, iar unele au descărcat materiale de la prelegeri și seminarii. Studenții Departamentului de Sisteme Inteligente a Universității de Stat Ruse pentru Științe Umaniste primesc o pregătire fundamentală în matematică și programare, așa că utilizarea mediului R (în loc de foi de calcul și pachete statistice cu proceduri statistice fixe) mi se pare foarte utilă.

Dacă vă confruntați cu sarcina de a studia statisticile și mai ales de a scrie proceduri non-standard pentru prelucrarea datelor statistice, atunci vă recomand să vă îndreptați atenția către pachetul R.

Următorul subiect m-a determinat să scriu acest articol: În căutarea postării ideale, sau a ghicitoarei lui Habr. Faptul este că, după ce m-am familiarizat cu limbajul R, mă uit extrem de neînțelegător la orice încercare de a calcula ceva în Excel. Dar trebuie să recunosc că am făcut cunoștință cu R abia acum o săptămână.

Scop: Să colectezi date de la HabraHabr-ul tău preferat folosind limbajul R și să realizezi, de fapt, pentru ce a fost creat limbajul R, și anume: analiză statistică.

Deci, după ce ați citit acest subiect, veți învăța:

  • Cum puteți utiliza R pentru a extrage date din resursele Web
  • Cum se transformă datele pentru o analiză ulterioară
  • Ce resurse sunt lecturi foarte recomandate pentru oricine dorește să cunoască mai bine R?

Se așteaptă ca cititorul să fie suficient de independent pentru a se familiariza cu construcțiile de bază ale limbajului. Linkurile de la sfârșitul articolului sunt cele mai potrivite pentru asta.

Pregătirea

Vom avea nevoie de următoarele resurse:

După instalare, ar trebui să vedeți ceva de genul acesta:

În panoul din dreapta jos, în fila Pachete, puteți găsi o listă de pachete instalate. Va trebui să instalăm suplimentar următoarele:

  • Rcurl - pentru lucrul cu rețeaua. Oricine a lucrat cu CURL va înțelege imediat toate oportunitățile care se deschid.
  • XML - un pachet pentru lucrul cu arborele DOM al unui document XML. Avem nevoie de funcționalitate pentru a găsi elemente prin xpath
Faceți clic pe „Instalare pachete”, selectați-le pe cele de care aveți nevoie, apoi selectați-le cu o bifă, astfel încât să fie încărcate în mediul curent.

Obținerea datelor

Pentru a obține obiectul DOM al unui document primit de pe Internet, trebuie doar să urmați aceste rânduri:
url<-"http://habrahabr.ru/feed/posts/habred/page10/" cookie<-"Мои сверхсекретные печеньки" html<-getURL(url, cookie=cookie) doc<-htmlParse(html)
Vă rugăm să acordați atenție cookie-urilor trimise. Dacă doriți să repetați experimentul, va trebui să înlocuiți cookie-urile, pe care browserul dumneavoastră le primește după conectarea la site. În continuare, trebuie să obținem datele care ne interesează, și anume:
  • Când postarea a fost publicată
  • Câte vizualizări au fost?
  • Câte persoane au adăugat această intrare la favorite?
  • Câte clicuri pe +1 și -1 au fost (total)
  • Câte clicuri +1 au fost?
  • Cât -1
  • Evaluarea actuală
  • Numărul de comentarii
Fără a intra în prea multe detalii, vă voi da doar codul:
publicat<-xpathSApply(doc, "//div[@class="published"]", xmlValue) pageviews<-xpathSApply(doc, "//div[@class="pageviews"]", xmlValue) favs<-xpathSApply(doc, "//div[@class="favs_count"]", xmlValue) scoredetailes<-xpathSApply(doc, "//span[@class="score"]", xmlGetAttr, "title") scores<-xpathSApply(doc, "//span[@class="score"]", xmlValue) comments<-xpathSApply(doc, "//span[@class="all"]", xmlValue) hrefs<-xpathSApply(doc, "//a[@class="post_title"]", xmlGetAttr, "href")
Aici am folosit căutarea xpath pentru elemente și atribute.
În continuare, este foarte recomandat să creați un data.frame din datele primite - acesta este un analog al tabelelor bazei de date. Se vor putea face cereri de diferite niveluri de complexitate. Uneori ești uimit de cât de elegant poți să faci așa ceva în R.
postări<-data.frame(hrefs, published, scoredetailes, scores, pageviews, favs, comments)
După generarea data.frame, va trebui să corectați datele primite: convertiți liniile în numere, obțineți data reală într-un format normal etc. O facem astfel:

Postează$comentarii<-as.numeric(as.character(posts$comments)) posts$scores<-as.numeric(as.character(posts$scores)) posts$favs<-as.numeric(as.character(posts$favs)) posts$pageviews<-as.numeric(as.character(posts$pageviews)) posts$published<-sub(" декабря в ","/12/2012 ",as.character(posts$published)) posts$published<-sub(" ноября в ","/11/2012 ",posts$published) posts$published<-sub(" октября в ","/10/2012 ",posts$published) posts$published<-sub(" сентября в ","/09/2012 ",posts$published) posts$published<-sub("^ ","",posts$published) posts$publishedDate<-as.Date(posts$published, format="%d/%m/%Y %H:%M")

De asemenea, este util să adăugați câmpuri suplimentare care sunt calculate din cele deja primite:
scoruri împărțite<-sapply(strsplit(as.character(posts$scoredetailes), "\\D+", perl=TRUE),unlist) if(class(scoressplitted)=="matrix" && dim(scoressplitted)==4) { scoressplitted<-t(scoressplitted) posts$actions<-as.numeric(as.character(scoressplitted[,1])) posts$plusactions<-as.numeric(as.character(scoressplitted[,2])) posts$minusactions<-as.numeric(as.character(scoressplitted[,3])) } posts$weekDay<-format(posts$publishedDate, "%A")
Aici am convertit binecunoscutele mesaje de forma „Total 35: 29 și ↓6” într-o serie de date despre câte acțiuni au fost efectuate, câte plusuri au fost și câte minusuri au fost.

În acest moment, putem spune că toate datele au fost primite și convertite într-un format gata pentru analiză. Am formatat codul de mai sus ca o funcție gata de utilizare. La sfârșitul articolului puteți găsi un link către sursă.

Dar cititorul atent a observat deja că în acest fel am primit date pentru o singură pagină pentru a le obține pentru o serie întreagă. Pentru a obține date pentru o listă întreagă de pagini, a fost scrisă următoarea funcție:

GetPostsForPages<-function(pages, cookie, sleep=0) { urls<-paste("http://habrahabr.ru/feed/posts/habred/page", pages, "/", sep="") ret<-data.frame() for(url in urls) { ret<-rbind(ret, getPosts(url, cookie)) Sys.sleep(sleep) } return(ret) }
Aici folosim funcția de sistem Sys.sleep pentru a nu provoca accidental un efect habra asupra habr-ului în sine :)
Această funcție este propusă a fi utilizată după cum urmează:
postări<-getPostsForPages(10:100, cookie,5)
Astfel, descarcăm toate paginile de la 10 la 100 cu o pauză de 5 secunde. Nu ne interesează paginile până la 10, deoarece evaluările nu sunt încă vizibile acolo. După câteva minute de așteptare, toate datele noastre sunt în variabila postări. Recomand să le salvați imediat pentru a nu deranja hub-ul de fiecare dată! Acest lucru se face astfel:
write.csv(posts, file="posts.csv")
Și o citim după cum urmează:
postări<-read.csv("posts.csv")

Ura! Am învățat cum să primim date statistice de la Habr și să le salvăm local pentru următoarea analiză!

Analiza datelor

Voi lăsa această secțiune nespusă. Invit cititorul să se joace el însuși cu datele și să obțină propriile concluzii de lungă durată. De exemplu, încercați să analizați dependența stării de spirit a persoanelor plus și minus în funcție de ziua săptămânii. Voi da doar 2 concluzii interesante pe care le-am făcut.
Utilizatorii Habr sunt mult mai dispuși să voteze în favoare decât în ​​contra.
Acest lucru poate fi observat din graficul următor. Observați cât de mult mai uniform și mai larg este „norul” de minusuri decât răspândirea plusurilor. Corelația dintre pro și numărul de vizualizări este mult mai puternică decât pentru contra. Cu alte cuvinte: adăugăm fără să ne gândim, dar minus pentru acțiune!
(Îmi cer scuze pentru inscripțiile de pe grafice: încă nu mi-am dat seama cum să le afișez corect în rusă)

Există într-adevăr mai multe clase de postări
Această afirmație a fost folosită ca dat în postarea menționată, dar am vrut să mă asigur de ea în realitate. Pentru a face acest lucru, este suficient să calculați ponderea medie a plusurilor la numărul total de acțiuni, același pentru minusuri, și să împărțiți a doua la prima. Dacă totul ar fi omogen, atunci nu ar trebui să observăm multe vârfuri locale în histogramă, dar ele sunt acolo.


După cum puteți vedea, există vârfuri pronunțate în jurul valorii de 0,1, 0,2 și 0,25. Invit cititorul să găsească și să „numească” el însuși aceste clase.
Aș dori să remarc că R este bogat în algoritmi pentru gruparea datelor, aproximare, testarea ipotezelor etc.

Resurse utile

Dacă doriți cu adevărat să vă scufundați în lumea R, vă recomand următoarele link-uri. Vă rugăm să împărtășiți în comentarii blogurile și site-urile dvs. interesante pe tema R. Există cineva care scrie despre R în rusă?

Multe exemple și articole de pe acest site folosesc în mod activ limbajul de programare „R”.

R pentru Linux poate fi instalat de obicei folosind depozitele distribuției dvs. Folosesc distribuții bazate pe Debian, în care comanda standard pentru a instala R arată astfel:

Sudo apt install r-base

Trebuie să tastați acest lucru în terminal.

Frumusețea lui R este aceasta:

  1. Acest program este gratuit (distribuit sub licență GPL),
  2. Multe pachete au fost scrise pentru acest program pentru a rezolva o gamă largă de probleme. Toate sunt, de asemenea, gratuite.
  3. Programul este foarte flexibil: dimensiunile oricăror vectori și matrice pot fi modificate la cererea utilizatorului, datele nu au o structură rigidă. Această proprietate se dovedește a fi extrem de utilă în cazul prognozării, când cercetătorul trebuie să dea o prognoză pentru o perioadă arbitrară.

Ultima proprietate este deosebit de relevantă, deoarece alte pachete statistice (cum ar fi SPSS, Eviews, Stata) presupun că este posibil să fim interesați doar de analizarea datelor care au o structură fixă ​​(de exemplu, toate datele dintr-un fișier de lucru trebuie să fie de aceeași periodicitate). cu aceleași date de început și de sfârșit).

Cu toate acestea, R nu este cel mai prietenos program. În timp ce lucrați cu acesta, uitați de mouse - aproape toate cele mai importante acțiuni din el sunt efectuate folosind linia de comandă. Cu toate acestea, pentru a face viața puțin mai ușoară, iar programul în sine un pic mai primitor, există un program frontend numit RStudio. Îl poți descărca de aici. Este instalat după ce a fost deja instalat R. RStudio are multe instrumente convenabile și o interfață plăcută, cu toate acestea, analiza și prognoza din el sunt încă efectuate folosind linia de comandă.

Să încercăm să aruncăm o privire asupra acestui program minunat.

Cunoașterea RStudio

Interfața RStudio arată astfel:

În colțul din dreapta sus în RStudio este indicat numele proiectului (care deocamdată avem „Niciunul” - adică lipsește). Dacă facem clic pe această inscripție și selectăm „Proiect nou” (proiect nou), ni se va solicita să creăm un proiect. Pentru scopuri de prognoză de bază, trebuie doar să selectați „New Directory” (un folder nou pentru proiect), „Empty Project” (un proiect gol), apoi introduceți numele proiectului și selectați directorul în care să-l salvați. Folosește-ți imaginația și încearcă să găsești singur un nume :).

Când lucrați cu un singur proiect, puteți accesa oricând datele, comenzile și scripturile stocate în acesta.

În partea stângă a ferestrei RStudio se află consola. Aici vom introduce diverse comenzi. De exemplu, să scriem următoarele:

Această comandă va genera 100 de variabile aleatoare dintr-o distribuție normală cu așteptare zero și varianță unitară, apoi va crea un vector numit „x” și va scrie cele 100 de valori rezultate în el. Simbolul "<-» эквивалентен символу «=» и показывает какое значение присвоить нашей переменной, стоящей слева. Иногда вместо него удобней использовать символ «->”, deși variabila noastră în acest caz ar trebui să fie în dreapta. De exemplu, următorul cod va crea un obiect „y” care este absolut identic cu obiectul „x”:

Acești vectori apar acum în partea dreaptă sus a ecranului, sub fila, pe care am intitulat-o „Mediu”:

Modificări în fila „Mediu”.

Această parte a ecranului va afișa toate obiectele pe care le salvăm în timpul sesiunii. De exemplu, dacă creăm o matrice ca aceasta:

\(A = \begin(pmatrix) 1 & 1 \\ 0 & 1 \end(pmatrix) \)

cu aceasta comanda:

apoi va apărea în fila „Mediu”:

Orice funcție pe care o folosim ne cere să atribuim niște valori anumitor parametri. Funcția matrix() are următorii parametri:

  • date – vector cu date care ar trebui scrise în matrice,
  • nrow – numărul de rânduri din matrice,
  • ncol – numărul de coloane din matrice,
  • byrow - parametru logic. Dacă „TRUE” (adevărat), atunci matricea va fi completată pe rânduri (de la stânga la dreapta, rând cu rând). Implicit, acest parametru este setat la FALSE.
  • dimnames - o foaie cu nume de rânduri și coloane.

Unii dintre acești parametri au valori implicite (de exemplu, byrow=FALSE), în timp ce alții pot fi omiși (de exemplu, dimnames).

Unul dintre trucurile lui „R” este că orice funcție (de exemplu, matricea noastră() ) poate fi accesată prin specificarea valorilor direct:

Sau o puteți face așa cum am făcut-o mai devreme - observând secvența și omițând numele parametrilor.

Pentru a vedea conținutul oricărui obiect aflat în fila „Mediu”, trebuie doar să tipăriți numele acestuia în consolă:

O altă opțiune este să faceți clic pe numele obiectului din fila „Mediu”.

unde matrice este numele funcției care ne interesează. În acest caz, RStudio va deschide panoul „Ajutor” special pentru tine, cu o descriere:

De asemenea, puteți găsi ajutor pentru o funcție introducând numele funcției în fereastra „căutare” (pictogramă cu o lentilă) în fila „Ajutor”.

Dacă nu vă amintiți exact cum să scrieți numele unei funcții sau ce parametri sunt utilizați în ea, începeți să scrieți numele acesteia în consolă și apăsați butonul „Tab”:

Pe lângă toate acestea, puteți scrie scripturi în RStudio. Este posibil să aveți nevoie de ele dacă trebuie să scrieți un program sau să apelați o secvență de funcții. Scripturile sunt create folosind butonul cu semnul plus în colțul din stânga sus (trebuie să selectați „R Script” în meniul drop-down). În fereastra care se deschide după aceasta, puteți scrie orice funcții și comentarii. De exemplu, dacă vrem să trasăm un grafic cu linii peste seria x, o putem face astfel:

Trasează(x) linii(x)

Prima funcție construiește un grafic de dispersie simplu, iar a doua funcție adaugă linii peste punctele care leagă punctele în serie. Dacă selectați aceste două comenzi și apăsați „Ctrl+Enter”, acestea vor fi executate, determinând RStudio să deschidă fila „Plot” din colțul din dreapta jos și să afișeze graficul trasat în ea.

Dacă mai avem nevoie de toate comenzile tastate în viitor, atunci acest script poate fi salvat (dischetă în colțul din stânga sus).

În cazul în care trebuie să vă referiți la o comandă pe care ați tastat-o ​​deja cândva în trecut, există o filă „Istoric” în partea dreaptă sus a ecranului. În el puteți găsi și selecta orice comandă care vă interesează și faceți dublu clic pentru a o lipi în consolă. În consola propriu-zisă, puteți accesa comenzile anterioare folosind butoanele Sus și Jos de pe tastatură. Combinația de taste „Ctrl+Up” vă permite să afișați o listă cu toate comenzile recente din consolă.

În general, RStudio are o mulțime de comenzi rapide utile de la tastatură care fac lucrul cu programul mult mai ușor. Puteți citi mai multe despre ele.

După cum am menționat mai devreme, există multe pachete pentru R. Toate sunt localizate pe serverul CRAN și pentru a instala oricare dintre ele trebuie să-i cunoașteți numele. Instalarea și actualizarea pachetelor se realizează folosind fila „Pachete”. Mergând la el și făcând clic pe butonul „Instalare”, vom vedea ceva de genul următor meniu:

Să introducem în fereastra care se deschide: forecast este un pachet scris de Rob J. Hyndman, care conține o grămadă de funcții utile nouă. Faceți clic pe butonul „Instalare”, după care va fi instalat pachetul „prognoză”.

Alternativ, putem instala orice pachet, cunoscându-i numele, folosind comanda din consolă:

Install.packages(„neted”)

cu condiția ca acesta să fie, desigur, în depozitul CRAN. smooth este un pachet ale cărui funcții le dezvolt și le mențin.

Unele pachete sunt disponibile numai în codul sursă pe site-uri precum github.com și necesită ca acestea să fie create mai întâi. Pentru a construi pachete sub Windows, este posibil să aveți nevoie de programul Rtools.

Pentru a utiliza oricare dintre pachetele instalate, trebuie să-l activați. Pentru a face acest lucru, trebuie să îl găsiți în listă și să îl bifați sau să utilizați comanda din consolă:

Bibliotecă (prognoză)

O problemă neplăcută poate apărea în Windows: unele pachete sunt ușor de descărcat și asamblat, dar nu sunt instalate în niciun fel. R în acest caz scrie ceva de genul: „Atenție: nu se poate muta instalația temporară...”. Tot ce trebuie să faceți în acest caz este să adăugați folderul cu R la excepțiile din antivirus (sau să îl dezactivați în timpul instalării pachetelor).

După descărcarea pachetului, toate funcțiile incluse în acesta ne vor fi disponibile. De exemplu, funcția tsdisplay(), care poate fi folosită astfel:

Tsdisplay(x)

Ea ne va construi trei grafice, pe care le vom discuta în capitolul „Setul de instrumente pentru prognoză”.

Pe lângă pachetul de prognoză, folosesc destul de des pachetul Mcomp pentru diverse exemple. Conține serii de date din baza de date M-Competition. Prin urmare, vă recomand să îl instalați și dvs.

Foarte des vom avea nevoie nu doar de seturi de date, ci de date din clasa „ts” (seria temporală). Pentru a crea o serie temporală din orice variabilă, trebuie să rulați următoarea comandă:

Aici parametrul start ne permite să specificăm data de la care începe seria noastră temporală, iar frecvența specifică frecvența datelor. Numărul 12 din exemplul nostru indică faptul că avem de-a face cu date lunare. Ca rezultat al executării acestei comenzi, transformăm vectorul nostru „x” într-o serie temporală de date lunare începând din ianuarie 1984.

Acestea sunt elementele de bază ale R și RStudio de care vom avea nevoie.

P.P.S. Un ghid destul de bun pentru R este publicat pe site-ul web QSAR4U de către Pavel Polishchuk.

P.P.P.S. O mulțime de informații despre R sunt prezentate pe site-ul oficial.

Muncă independentă

Iată câteva sarcini pe care le puteți face singur în R. Rulați următoarele comenzi, vedeți ce se întâmplă și încercați să înțelegeți de ce s-a întâmplat acest lucru:

(41/3 + 78/4)*2 2^3+4 1/0 0/0 max(1,min(-2,5),max(2,pi)) sqrt(3^2+4^2 ) exp (2)+3i log(1024) log(1024, bază=2) c(1:3) c(1:5)*2 + 4 x

CLOPOTUL

Sunt cei care citesc aceasta stire inaintea ta.
Abonați-vă pentru a primi articole noi.
E-mail
Nume
Nume de familie
Cum vrei să citești Clopoțelul?
Fără spam