Unaprijedite svoje Python vještine izradom WhatsApp Chat Analyzera

Vođeni projekt koji vam pomaže zaroniti u stvaranje nečeg cool i naučiti korisne programske koncepte sami!

Pronalaženje načina da primijenite svoje znanje tek nakon procesa učenja u osnovi znači da se učenje dogodilo bez puno smisla. Sve što smo pokušali učiniti bilo je prikupiti sve znanje koje smo mogli u nadi da će ono koristiti u nekoj dalekoj, mističnoj budućnosti.

Zar se to ne čini odugovlačenjem?

Vjerujem u pristup učenju koji naglašava rad na projektima.

Kad pokušate nešto napraviti, otkrijete stotinu stvari koje ne znate. Otkrivate stvari za koje ste mislili da znate, ali zapravo ne znate. Putujete stvarima koje su izgledale tako jednostavno da ih niste ni obraćali. Popunite praznine u vašem učenju.

Također, super je zabavna i avanturistička.

Sve to možete dobiti samo ako radite projekt. Stoga mislim da se isplati usredotočiti čitavo učenje oko dovršetka projekta.

Ako želite zaroniti u izgradnju nečeg zanimljivog i usput naučiti korisne Python / programske vještine, ovaj vodič je za vas.

Ovim vodstvom želim vas provesti kroz stvaranje nečeg zanimljivog, omogućujući vam da iskusite teško shvatljive intuicije programiranja dok ga sastavljate. Nadamo se da ste prešli iz osnovnog Pythonista na napredni.

Ali, najvažnije, želim vam dati motivaciju i poticaj da podučavate sebe.

Što ćete naučiti

Evo nekoliko vještina iz udžbenika koje ćete pokupiti:

  • Upravljanje datotekama
  • Gudačke operacije u Pythonu
  • funkcije
  • moduli
  • pipujte i koristite pakete treće strane
  • Redovni izrazi (RegEx) u Pythonu

Ali ovo nije udžbenik. Uz njih, razvijat ćete i intuiciju o dobrim programskim praksama poput:

  • Važnost čitljivosti vašeg koda i stila kodiranja
  • Kada i kako razbiti svoj kôd na funkcije
  • Kako započeti uklanjanje pogrešaka koda (kada umjesto toga želite glavu udariti u zid)
  • Kako pregledati stvari na Internetu - koristite Google, koristite Prekrivanje stog, pročitajte dokumentaciju itd.
  • Shvatite potrebu za različitim strukturama podataka i kada koristiti što

Idemo onda na to.

P: "U redu, što ja gradim?"

U redu, evo ideje:

Prilikom razgovora s bliskim prijateljem jeste li ikada željeli znati:

  • Broj poruka koje je poslao svaki od vas
  • Prosječna duljina vaših poruka
  • Tko prvi tekst i prvi tekst u svakom razgovoru
  • Obrazac vremena razgovora - satni, dnevni i mjesečni
  • Najčešće dijeljene veze na web mjesto
  • Najčešće riječi koje koristi svaki od vas

Ne bi li bilo u redu kada biste napisali program koji bi sve te stvari izračunao za vas?

P: "Ali kako je uistinu cool?"

Reddit kaže kako je u redu "14k bodova"!

Vaš će program pronaći slične rezultate i ispisati ih za vas bez tih grafikona i vizuala.

P: "Super! Ali jesam li spreman? "

"Svaki veliki programer kojeg poznajete stigao je rješavajući probleme koje je nesposobno riješiti dok to zapravo nisu učinili."
- Patrick McKenzie

Razmišljajući o ovim linijama, vjerujem da:

  • Ako znate osnove sljedećeg na Pythonu - varijable, popise, rječnike, petlje, uvjete, funkcije - spremni ste.
  • U suprotnom, ako ste novi u Pythonu, ali poznajete osnove na nekom drugom jeziku, prođite kroz ovaj brzi Python vodič - i mislim da ćete biti spremni.

Dovoljno je zaroniti u prvu ekvivalentnu vježbu "Zdravo, Svijet". Ako to možete dovršiti, spremni ste.

P: "A kako ću je izgraditi?"

WhatsApp omogućuje izvoz bilo kojeg chata u tekstualnu datoteku koja izgleda ovako:

Na taj način možete napisati program koji će pročitati ovu datoteku za chat, analizirati je, analizirati i dati rezultate.

Ali to nije dovoljno pomoći, zar ne?

"U redu, učinimo to onda."

Plan za izgradnju WhatsApp analizatora razgovora

MS0: Postavite svoje okruženje

Kad započnete, ne želite trošiti sate na postavljanje svog okruženja. Polovica vaše motivacije ubija se tamo, zar ne?

Repl.it je izlaz iz ove frustracije postavljanja.

To je web stranica koja nudi internetski IDE za gotovo svaki jezik, kojem možete pristupiti besplatno sa samo nekoliko klikova. Izvrsno je za male projekte poput onog koji gradimo.

MS1: Uvjerenje da stvari funkcioniraju (ekvivalent "Pozdrav, svijet!")

Svaka knjiga / udžbenik za programiranje ikad započinje s "Pozdrav, svijet!" program. Zašto je to tako?

Osim što pozdravlja pridošlice, ovaj program obavlja posao uvjeravanja učenika da je njeno okruženje postavljeno i da stvari funkcioniraju. Dakle, ako ona radi kako treba, i njezin program će raditi.

Imajući na umu ove ciljeve, ovdje je vaš ekvivalentni program "Pozdrav, svijet!":

Ispiši "Volim te 3000" 3000 puta. (Ima li Marvelovih obožavatelja vani?)

Ovo je dobra prilika za duboko i:

  • Pogledajte da li ste spremni zaroniti dublje u projekt

Ako ne, onda je vrijeme da se bavite osnovama Pythona. Ne brinite, nije previše teško.

MS2: Pročitajte svoju chat datoteku pomoću Python programa

Ovdje ćete dalje sa svakim poglavljem sastaviti dio projekta.

Postoje dvije datoteke koje će vam trebati za projekt -

  1. Vaša Whatsapp datoteka za chat (završava u .txt)
  2. Python kodna datoteka (završava u .py)
Nakon što ih imate, ovo prvo poglavlje zahtijeva da otvorite chat datoteku pomoću programa Python i ispišete sav njezin sadržaj.

Ovo je dobra prilika za duboko i:

  • Shvatite kako postupati s datotekama pomoću Pythona

Upravljanje datotekama na Pythonu - od nule do heroja:

Znate da je bilo koji uređivač koji koristite za otvaranje tekstualne datoteke na računalu (bilježnica, VS kod, Vim itd.) Program, zar ne?

Znaš što? - to možete učiniti s vlastitim programom Python. Skoro lako!

Prođite kroz ovaj odličan tutorial Real Python-a da biste naučili koncepte upravljanja datotekama u Python-u.

MS3: Značajke # 1 i # 2 - broje ukupan broj poruka i ukupan broj riječi

Prebrojite koliko ste poruka i vaš prijatelj razmijenili.

Zatim prebrojite svaki pojedinačni udio - i prema broju poruka i prema broju riječi.

Ispišite rezultate.

Ovo je dobra prilika za duboko i:

  • Shvatite žice na Pythonu

Važne stvari koje morate zapamtiti o nizovima Pythona:

  • Žice se tretiraju kao popisi. Dakle, možete pretražiti ovako:
ako "- Paridhi:" u chat_line: counter + = 1
  • Pitonski nizovi poznati su (u usporedbi s onima na drugim jezicima) jer ih Python daje bogatom bibliotekom ugrađenih metoda koje možete koristiti za izvođenje operacija na njima. Predlažem vam da ovaj vodič koristite W3Schools kao referentni materijal za te metode.
  • Sposobnost Pythona da isječe i negativne nizove indeksa ponekad može biti vrlo koristan

Oprez: Sada ćete nadalje osjetiti kako vaš program raste u veličini i složenosti. Kad to učinite, trebali biste započeti biti svjesni svog stila kodiranja i imati na umu čitljivost koda.

Stil kodiranja i čitljivost koda:

Brian Kernighan kaže u svojoj knjizi "Praksa programiranja:"

"Svrha stila je olakšati čitanje koda sebi i drugima, a dobar stil je presudan za dobro programiranje."

Osobno, kad god pokušam donositi odluke o čitljivosti svog koda, u mojem se mozgu igra red iz filma "Zen of Python":

"Eksplicitna je bolja nego implicitna."

Evo tri jednostavna i primjenjiva pravila koja možete imati na umu za razvoj dobrog stila kodiranja:

1. Razmislite o izboru imena svojih varijabli

Ovdje smatram da su savjeti Briana Kernighan zaista korisni:

  • Globalne funkcije, klase i strukture trebaju imati opisne nazive koji sugeriraju njihovu ulogu u programu
  • Suprotno tome, kraća imena dovoljna su za lokalne varijable; unutar funkcije, n može biti dovoljno, npoints je u redu, a numberofPoints je overkill
  • Lokalne varijable koje se koriste na konvencionalni način mogu imati vrlo kratka imena. Upotreba i i j za indekse petlje, p i q za pokazivače i s i t za žice je toliko česta da je mala dobit i možda neki gubitak u duljim imenima.

2. Koristite funkcije kad god je to potrebno

  • Razdvojite duge dijelove koda u funkcije
  • Ne ponavljajte se (DRY) - koristite funkcije za uklanjanje duplikata koda

Više o funkcijama u sljedećem poglavlju.

3. Napišite korisne komentare

  • Komentari su namijenjeni pomaganju čitatelju programa. Ne pomažu se izgovorom stvari koje već jasno kaže ili kontradiktornim kodom - ili odvraćanjem čitatelja s detaljnim tipografskim prikazima.
  • Što je više moguće, napišite kod koji je lako razumjeti; što bolje učinite to, manje komentara vam treba. Za dobar kôd treba manje komentara od lošeg. Komentari su u najboljem slučaju nužno zlo.
  • Nemojte proturječiti kod. Većina se komentara slaže s kodom kad su napisani, ali kako se ispravljaju greške i program razvija, komentari se često ostavljaju u izvornom obliku, što rezultira neskladom s kodom.

Na kraju, zapamtite da se načela stila programiranja temelje na zdravom razumu vođenom iskustvom, a ne na proizvoljnim pravilima i propisima.

MS4: Značajka br. 3 - izračunava prosječnu dužinu poruka koje šalje svaka strana

Sada, kada ste izračunali svoj pojedinačni udio pomoću dvije metrike - broja poruka i broja riječi - pomoću njega možete izračunati svaku prosječnu dužinu poruka. Ispišite rezultate.

Ovo je dobra prilika za duboko i:

Shvatiti funkcije kao sredstva za:

  • Smanjite ponavljanje
  • Učinite kôd čitljivijim

Duboko zaronite u korištenje funkcija - motivacija i stil:

Umnožavanje može biti korijen zla u softveru. Funkcije su bile jedna od prvih tehnika razvijenih za kontrolu ovog zla.

Lako je razumjeti sintaksu funkcija pisanja, ali potrebna je praksa i određeni smisao dizajna da biste naučili kada probiti kôd na funkcije. Jedan je cilj osmisliti funkcije tako da ih se može ponovo upotrijebiti za širenje programa na nove slučajeve.

Što još? Donošenje takvih dizajnerskih izbora ono je što programiranje čini zabavnim.

Ovdje su tri heuristike iz knjige Boba Martina "Čisti kod" koje će vas voditi pri odabiru:

  1. Funkcije trebaju biti male. Kako mali? Ništa više od zaslon - ili 20 redaka.
  2. Funkcije trebaju imati opisna imena. Što je funkcija manja i više fokusirana, lakše je odabrati opisno ime. Ne bojte se dugo stvarati ime. Dugo je opisno ime bolje od kratkog zagonetnog imena. Dugo opisno ime bolje je od dugog opisnog komentara.
  3. Funkcije bi trebale činiti samo jednu stvar i bez nuspojava - njezina namjera treba biti jasna iz naziva.

Kad prvi put napišete funkciju, ona će se vjerojatno pojaviti duga i složena i neće slijediti nijedno od gore navedenih pravila. I to je u redu. Možete kôd kasnije pročistiti i preoblikovati. Mislim da nitko nije mogao započeti s pisanjem funkcija koje slijede sva gore spomenuta pravila.

Zapamtite da su to ciljevi izgradnje funkcija kojima trebate težiti. Ne dopustite da vas paraliziraju.

MS5: Značajka br. 4 - računajte broj prvih tekstova i pokažite ih

Želite li riješiti pitanje tko prvi puta objavljuje tekstove? Nakon ove prekretnice, hoćete.

Točno ćete znati koliko razgovora je svaki od vas pokrenuo i imat ćete popis tih prvih tekstova. Ispišite sve to.

Ovo je dobra prilika za duboko i:

  • Razumijevanje modula - ovdje će vam trebati Python-ov vremenski modul
  • Naučite kako izgledati stvari i pročitajte dokumentaciju

Oprez: Doktori se ne plaše. Oni su vam prijatelji.

Što su moduli?

Svaka datoteka izvornog koda Python čije ime završava .py nastavkom je modul.

Python instalacija dolazi sa standardnom bibliotekom koja sadrži takve module izvan okvira. Ovo su korisni dijelovi koda koji ne morate pisati.

MS6: Značajka br. 5 - obrasci vremena razgovaranja (satno, dnevno i mjesečno)

Sada je vrijeme da saznate svoje uobičajene obrasce za razgovor.

* U koji sat dana najviše razgovarate? Što je s ostalim satima?

* Koji dan u tjednu najčešće razgovarate najviše? Što je s ostalim danima?

* Koji mjesec ste najviše razgovarali? Što je s ostalima?

Ispišite rezultate.

Ovo je dobra prilika za duboko i:

  • Shvatite potrebu za različitim strukturama podataka za pohranu svih tih podataka i razmislite o tome kako dizajnirati strukturu podataka prema vašim potrebama

Napomena: ovdje ćete ponovo trebati vremenski modul. Važno vam je da znate da je to u redu ako se toga ne sjećate; Dopušteno vam je korištenje Googlea i provjeravanje dokumentacije onoliko puta koliko vam treba.

Oprez: Provedba ovoga može biti prilično škakljiva. Vjerojatno ćete većinu svog vremena za kodiranje provesti glavom po slomljenom kodu. Zapamtite: kriv nije računalo, nego vaš kod.

Kako ispraviti pogrešku u kodu:

  1. Objasnite prijatelju prijatelju ili koristite tehniku ​​gumene patke
  • Odaberi prijatelja (ili gumenu patku)
  • Otvorite problematični kôd i objasnite mu (/ to / njega), red po redak, polako i strpljivo
  • Pronađite problem bulji u vas, u svoje lice, bez ičije pomoći prijatelja (ili patke), kao da je magijom

2. Dodajte ispise

Iako dodavanje takvih izjava za ispis nije ispravan način uklanjanja pogrešaka, ponekad im se čini nevjerojatno učinkovitim - pogotovo kada radim s uređivačem teksta poput VIM-a, a ne na punopravnom IDE-u koji ima program za ispravljanje pogrešaka (ili kada previše ste lijeni da biste naučili kako koristiti program za uklanjanje pogrešaka.

Ali moram reći, nakon što naučite kako koristiti IDE ispravljač, nema povratka.

3. Koristite IDE program za uklanjanje pogrešaka

Što se tiče pisanja, repl.it još ne podržava program za uklanjanje pogrešaka. Moje omiljene IDE za Python koji to podržavaju su PyCharm i VS Code.

Alat za uklanjanje pogrešaka može biti toliko koristan da bih vam preporučio da prebacite i naučite kako koristiti program za uklanjanje pogrešaka u njemu. Vjerujte mi, to je potpuno vrijedno boli (pogotovo sada kada je vaš kôd prilično složen.)

Osobni savjet: Koristim IDE ispravljač jer Python nudi ispravljanje pogrešaka u standardnom modulu biblioteke - * pdb ** - i predložit ću vam da ga sada ne koristite.

MS7: Značajka br. 7 - web stranice s najviše dijeljenja

Ovo je dobra prilika za duboko i:

  • Saznajte RegEx
  • Shvatite Python rječnike kao tradicionalne hash tablice: mapiranje od naziva web mjesta prema broju pojava

Brzi uvod u RegEx:

Uobičajeni izraz je poseban tekstni niz za opis uzoraka pretraživanja.

Vjerojatno ste upoznati s nadimcima zamišljenih znakova, poput * .txt, da biste pronašli sve tekstualne datoteke u upravitelju datoteka. Redovite izraze možete razmišljati kao zamijene na steroidima. Omogućuju vam pretraživanje poput:

"Želim svaki niz koji se nalazi između" http: // "ili" https: // "i drugog / nakon toga, ako postoji. Ili inače, prvi /. "

Evo nekoliko mojih najdražih resursa za učenje RegEx-a:

  • RegexOne - interaktivni vodič za učenje RegEx-a
  • "Uvod u Regex na Pythonu"
  • Dokumentacija Pythona - naziva ih "malenim, visoko specijaliziranim programskim jezikom ugrađenim u Python."

MS8: Značajka br. 8 - najčešće riječi

Dopustit ću vam da ovo shvatite sami!

MS9: Ispišite sve gore u lijepim, urednim tablicama

Za ispis rezultata svake prekretnice morate koristiti neke iskaze ispisa. Sada je vrijeme da se usredotočimo na prezentaciju tih rezultata. Ispišite sve gore navedene rezultate u lijepim i urednim tablicama.

Da biste to učinili, možda ćete trebati restrukturirati veliki dio koda kako biste ispraznili ispise ispisa iz definicija funkcija (pod pretpostavkom da to već niste učinili).

Ovo je dobra prilika za duboko i:

  • Shvatite što znači kada ljudi savjetuju - "funkcije bi trebale raditi samo jedno"
  • Naučite pretraživati, instalirati i koristiti module trećih strana koje Python-ova sjajna i živopisna zajednica pruža putem pip-a
  • Dajte osobni dodir projektu s načinom oblikovanja tablica

Brzi temeljni premaz Python-ovog bogatog ekosustava otvorenog koda, trećih paketa:

Pythonov ekosistem ima doprinose u rasponu od pojedinačnih programera do megakorpora kao što su Facebook i Google (bogati ekosustav, zar ne?). Oni nude module i biblioteke koda koji pomažu u izradi web stranica, numeričkom programiranju, razvoju igara, znanosti podataka, strojnom učenju, dubokom učenju i, dobro, ispis lijepih tablica.

Sada, to je puno koda koji ne morate pisati.

PyPI je dom svih tih trećih Python paketa. Ovdje možete pronaći stranicu svakog paketa otvorenog koda, treće strane.

Evo nekoliko stvari koje će vas ubrzati kada koristite PyPI:

  • Svaki paket možete instalirati pomoću jednostavne naredbe terminala - pips. Možete točno pronaći ono što trebate otkucati na stranici paketa u PyPI-u.
pip instalacija tablice
  • Svaki dobar paket također sadrži vodič za upotrebu (ili dokumentaciju) za upotrebu na svojoj stranici u PyPI-u
  • Čak i novorođenčad može objaviti svoje pokusne pakete. Prije upotrebe treba biti oprezan; mogu biti nepotpuni ili ne održavani. Možete provjeriti povijest izdanja paketa ili njegove GitHub statistike da biste odredili njegovu vjerodostojnost.

MS10: Učinite sve ovo za datoteke grupnih chatova

Pomoću ove prekretnice program ćete proširiti na novi slučaj - grupne razgovore. Do ovog trenutka imali biste direktnu poruku chat chat s jednim prijateljem. Sada ćete izmijeniti svoj program tako da će raditi i sa WhatsApp datotekama za grupni chat.

Ovo je dobra prilika za duboko i:

  • Procijenite svoje funkcije. Možete li ponovo upotrijebiti barem neke od njih?
  • Osjetite prednosti dobrog načina kodiranja i dobre prakse programiranja
  • Pogledajte važnost sustava kontrole verzija i naučite Git

Dobar softver

Dobro će se sjetiti što Brian W. Kerninghan kaže o dobrom softveru u svojoj knjizi The Practice of Programming:

Osnovna načela koja čine temelj dobrog softvera su jednostavnost, koja programe čini kratkim i upravljivim; jasnoća, koja osigurava da su ljudi lako razumljivi, kao i strojevi; općenitost, što znači da dobro rade u širokom rasponu situacija i dobro se prilagođavaju novim situacijama; i automatizaciju, koja omogućuje stroju da radi posao umjesto nas, oslobađajući nas od svakodnevnih zadataka.

U redu, nadam se da vam je ovo bilo korisno. Stvarno ćete shvatiti sve mini lekcije u ovom vodiču nakon što se zapravo zaronite u bavljenju projektom.

Evo nekoliko koda za pokretanje:

Ne bojte se početi ispočetka, jer će vam stvari biti teško kad se zaglavite. To je avantura; super će se osjećati svaki put kada se iskopate.

Također, možete reći meni ili kolegama u vezi sa sumnjama u grupu Build To Learn Slack (slobodno se pridružite pomoću danog linka).

Za kraj, želim da se sjetite riječi Jen Simmons dok radite na ovom projektu (ili bilo kojem drugom programskom projektu u vezi s tim):

Whatsapp Chat Analyzer jedan je od 20 cool programa za programiranje koji sam spomenula u prošlom postu u nizu - Build To Learn. Ako želite da napravim sličan vodič za bilo koga drugog, slobodno komentirajte u nastavku ili mi se obratite izravno!

Pretplatite se na bilten Build to Learn da biste dobili e-poštu kada radim nove vodiče i članke.

Možete me kontaktirati i na Twitteru i na LinkedInu.