Jana Fedrová: Časosběrná analýza dat ze sociálních sítí


Den před dnem D, kdy jsme si měli vybírat firmy na stáž a mentory, jsem pořád neměla jasno, o čem by měl být můj závěrečný projekt. Věděla jsem, že musí zahrnovat hlavně programování v Pythonu. K tomu jsem přičichla už na podzim v rámci kurzu PyLadies, kde jsme naprogramovaly 1d-piškvorky a hada a moc mě to bavilo. Teď přišel čas na další výzvu.

Speed dating dopadl přesně podle mých představ. Dostala jsem se na stáž do Kiwi.com a odtud mám i mentora Jirku Suchana. Na první schůzce, jsme se domluvili, jak by měl projekt vypadat. Můj nápad byl, připojit se na twitter a odtud stahovat nějaké údaje a z nich vytvořit graf. Jaká budeme stahovat data, mi pak pomohl domyslet právě Jirka. Dohodli jsme se na vytvoření databáze, kam budeme stahovat informace o vybraných lidech. Kolik denně napíšou tweetů, kolik za ně dostanou lajků a když už stahuji lajky, proč nepřidat ještě retweety… Z těchto dat pak vytvoříme graf s počtem followerů jednotlivých lidí. Chceme tam vidět, jestli s hodně lajkovanými tweety počet followerů roste a naopak.

Jakmile mi Jirka vytvořil databázi, začala jsem vytvářet v DataGripu první tabulky. 



Paráda. Tohle šlo docela hladce. Brzy se mi od Jirky na Slacku začaly objevovat první odkazy na materiály k nastudování, další jsem si pilně googlila a psala první kousky kódu.


První úkol: Napiš funkce, které budou vkládat data z twittru do databáze

Po prvním překvapení, že to takhle přes Python jde, začínám číst materiály a pouštím se nadšeně do práce. Studuju…


Tohle docela šlo, žádná velká věda. Vznikají první funkce a já se cítím trochu jako programátor. Ještě bylo třeba udělat pár změn v tabulkách v DataGripu, takže jejich výsledná podoba je tato:


Jdeme dál… Jirkovi posílám kousky kódu přes Slack a dostávám další radu do života:

Nauč se používat Git a GitHub! (druhý úkol)

Kdysi jsem se s obojím už setkala, ale moc jsme se nespřátelili. Proč s tím teď začínat? Abych tam postupně zaznamenávala svůj projekt, mohla se vracet k předchozím verzím a porovnávat v nich změny. Na GitHubu pak mám vše zálohované a mentor může jednoduše koukat na můj kód a posílat cenné rady.

Jirka mi nainstaloval PyCharm a po mém naříkání, že nevím, jak tam s Gitem pracovat a jak z PyCharmu posílat kód na GitHub, mě odkázal na dokumentaci na netu.  Trápím se, ale nakonec jsem to rozjela a můžeme pokračovat.


A můj první commit: 


Třetí úkol: Spoj se s Twittrem

To jsem zkoušela už dříve, takže jdu na to. Začínám v Pythonu stahovat followery a zapisovat je do databáze. Vznikají další funkce, ale rozhodně to už nejde lehce.

Začínám mít pocit, že to časově nestihnu a vlastně že to asi nezvládnu. Sedím nad projektem každou volnou chvilku. Je mi líto dětí, které marně prosí, ať jdu s nimi stavět jeřáb z lega nebo na hřiště dělat hrady z písku. Proto jim balím batůžky a odvážím na týden k babičce.

Teď mám klid u toho sedět od rána do večera. Už mám funkci download followers, která stáhne slovník z api.twitter.com . Ten obsahuje seznam followerů konkrétního uživatele. Postupně ukládáme data z jednotlivých stránek do databáze.

A jdeme dál. Funkce get_user_details. Ta vrací ID uživatele, kterého sledujeme. Funkce count_followers spočítá kolik followerů uživatel má v jednotlivých dnech. Upravuju kód, aby se jeden uživatel nestáhl v jeden den 2x. Jirka mě trpělivě učí základní věci jako proč použít „if __name__ == '__main__':“ a současně upravujeme chyby, které nacházíme už v napsaném kódu.

Jeden z mých dalších commitů na Githubu: 
Mám přesně 100 řádků kódu. Hurá!

A co jsem si nově nastudovala… 


Mou oblíbenou webovou stránkou se stává https://stackoverflow.com/ a taky google, kde automaticky začínám spojením „How to…“



Čtvrtý úkol: Musíme udělat grafy

Projekt dělíme na 3 soubory. První obsahuje kód se všemi funkcemi, další jej spouští a třetí mi posílá Jirka s předchystaným kódem na graf. Za to mu v duchu posílám obrovské díky a snažím se splnit dílčí úkoly, které jsem dostala. Vytvořit druhou osu Y, upravit barvy a hlavně dostat na všechny osy skutečné hodnoty. K tomu mi pomáhá mimo jiné tahle stránka https://plot.ly/python/ a časem se opravdu na ose X objevuje datum.

Kód k vykreslení grafu:  

Dál pracujeme na kódu, upravujeme funkce, vytváříme nové, snažím se dostat další hodnoty na obě osy Y. Pocit, že to nejde, že přece holka z PyLadies nemá dost znalostí na takový projekt, střídá radost z dílčích drobných úspěchů a tak to jde den za dnem. Rodinka se občas vrátí, takže děti postupně posílám na výlety s tátou, půjčuji švagrové, naší „adoptivní“ babičce a slibuju, že jim to v srpnu vynahradím. Sama zapínám počítač ještě před snídaní a z pyžama vylézám někdy odpoledne. Párkrát se mi o projektu zdá i v noci. Odpovědi na nekonečné množství otázek, dostávám od Jirky obratem na Slacku. 


Pátý úkol: Potřebujeme získat tweety

Přidávám funkce add_tweets_info, která vkládá do databáze info o tweetech a count_tweets, abych spočítala, kolik jich denně uživatel napsal. Pak si uvědomuji, že počty lajků a retweetů se přece můžou denně měnit. Vzniká funkce update_tweet_info,  pak vytvářím download_tweets, kdy pomocí API dostávám slovník s informacemi o tweetech. A pak ještě další a další.

Program už docela dělá to, co po něm chci 

V tuto chvíli zasahuje Jirka a programu upravuje kabátek a hlavně vylaďuje chyby a přidává další důležité kousky kódu. 


Šestý úkol: Nastuduj si dokumentaci k Flasku a něco jednoduchého vytvoř.

Tento úkol pro mě byl obzvlášť bolavý. Dlouho se mi nedařilo, ale nakonec jsem našla moc pěkně zpracované a pro mě použitelné materiály. Z návodu jsem měla pocit, že mě vedou za ručičku, a tak mě to začalo bavit a zkoušela jsem si přidat i některé vlastní kousky: tlačítka, dynamicky generované texty a vytvořit si odkazy.

Postupovala jsem podle těchto stránek:


A tohle je můj výsledek. S projektem to má společné jen to, že používám Flask, ale na něčem ho nastudovat přece musím :)

Kódem se „chlubím“ tady https://github.com/Jana-F/Flask_cats


Sedmý úkol: Je třeba vytvořit webovou aplikaci

Při představě, že je třeba dostat graf na web, ze mě opadá radost z mého kočičího veledíla. Tohle je pro mě už vyšší dívčí a netuším, jak na to. Upravuji proto barvy v grafu, přemýšlím, co je třeba změnit v kódu, a pohrávám si s myšlenkou, že vlastně stačí, aby program fungoval přes konzoli. Cítím se dost v časovém stresu a tohle jde do programu přidat kdykoliv později.

V téhle fázi projekt aktivně převzal Jirka a začal kouzlit s kódem. Objevují se mi pull requesty na GitHubu a já jen schvaluji („merdžuji“) nové a nové části kódu do svého projektu. Snažím se je alespoň poctivě procházet a pochopit, co jak funguje. Googlím a znovu jen googlím… Co je *args, **kwargs? Co je jinja2? Po pár pull requestech i tohle vzdávám, ztrácím se. Díky Jirkovi se z mého amatérského kódu, který fungoval přes konzoli, stala webová aplikace, která automaticky stahuje data z twittru a vykresluje grafy pro zadaného uživatele. Profi kód dělaný člověkem s lety praxe v IT je tady  



Popis funkce programu

Po rozkliknutí odkazu výše se dostanete na tuto stránku:

Po přidání člověka mezi sledované osoby (zadám si ho do políčka výše a potvrdím, že ho chci sledovat), se denně do databáze stahují jeho followeři. Pokud je jich méně jak 800, stahuji údaje o každém sledujícím zvlášť. Když je jich více, stáhne se jen celkový počet followerů. Toto je z důvodu omezení, které API twitteru má. Počet tweetů a lajků se dá lehce zjistit i do minulosti. Proto se na grafu objeví i za dřívější dny, kdy uživatel ještě nebyl sledovaný. Počet sledujících se zobrazuje až ode dne jeho přidání.

 


 


Program jde v budoucnu ještě rozšiřovat o další informace, které twitter přes API poskytuje. Z těchto dat by šly vykreslit další grafy, přečíst tweety a je možné o sobě ale i o jiných uživatelích získávat přehledné informace.

Pro mě je užitečnost celého tohoto projektu především v tom, že jsem se naučila spoustu nových věcí. Vyzkoušela jsem si práci s API, s databází, vykreslování grafů přes Python a trošku i Flask. Celkově jsem si ukousla velké sousto a poprala se s ním, jak nejlíp jsem dokázala. Naučila jsem se pracovat s dokumentací, hledat rady na stackoverflow a taky konkrétní nové věci v Pythonu. Jirkovi děkuji za desítky hodin, které projektu věnoval a své rodině, že to s dočasně nepoužitelnou mámou zvládli.


Dění mých tří týdnů je shrnuto v README souboru:
 


Komentáře

Okomentovat

Populární příspěvky z tohoto blogu

Barbora Junová: Podpora začínajícího podnikání zaměřeného na prodej výrobků a poskytování služeb

Gabriela Kubová, Lucie Čuprová: Analýza ruských e-shopů pomocí srovnávače cen Yandex

Kateřina Kolouchová & Lenka Tomešová: Vliv počasí na kriminalitu v New Yorku a Brně