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.
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:
Jani, ty ses fakt borec!
OdpovědětVymazatTý jo!
OdpovědětVymazathusty!
OdpovědětVymazatJani, super! Spousta práce, jsi šikovná!
OdpovědětVymazatSkvělá práce Jani...
OdpovědětVymazatJani, super!
OdpovědětVymazatKlobouk dolů, jsi machryně! Úplně se stydím v pátek vystoupit.
OdpovědětVymazatBudu ti držet pěsti, aby tě ocenili!