Kada je najbolje vrijeme za streaming na Facebook Liveu? Analizirao sam 5000 postova na Facebooku kako bih to otkrio.

Streaming na usluzi Facebook Live može biti moćna marketinška strategija za startupe i tvrtke. Mogu dijeliti znanje, pružati vrijednost, biti izloženi i prikupljati visokokvalitetne potencijalne kupce.

Unaprijed pripremite sesiju na usluzi Facebook Live. Istražite svoju ciljnu publiku i napravite detaljan dnevni red. Sesija može dramatično potaknuti vaše poslovanje.

Bio sam šef proizvoda i tehnologije mog prethodnog startupa koji se bavio otkrivanjem prijevara. Odlučio sam isprobati Facebook Live kao novu marketinšku strategiju.

U to je vrijeme još uvijek bilo prilično novo. Nakon što je završena Facebook Live sesija, relevantni ljudi dobili su Facebook obavijesti da se pridruže sesiji. To je još više povećalo izloženost.

Mnogo je postova koji govore o tome kako bolje izgraditi svoju Facebook sesiju uživo. Oni raspravljaju o tome koje teme treba obraditi, gradeći dnevni red, kutove kamere, trajanje sesije i još mnogo toga.

No, postoji jedan dio zagonetke koji vlasnici tvrtki i trgovci često zaboravljaju ili na koje ne obraćaju pažnju: Kada je najbolje vrijeme za streaming vaše Facebook Live sesije?

Na ovo pitanje možete odgovoriti obrazovanom pretpostavkom zasnovanom na poznavanju ciljne publike.

Na primjer:

  • Trudne mame spremne su pojesti vašu sesiju uživo u ponedjeljak popodne.
  • Tinejdžeri u dobi od 18 do 22 godine u dobrom su razmišljanju u subotu ujutro.

No, oko nas je toliko podataka koje možemo koristiti s nekoliko klikova na gumb. Zapravo ostajete ako ne koristite neke podatke na odgovarajući način.

Gotovo svaka marketinška platforma ili društvena mreža otvara API usluge. Vi kao tehnološki poduzetnik možete ih lako konzumirati. Ovi podaci mogu pružiti vrijedne zaključke koji vaše poslovne ciljeve mogu odvesti dalje od konkurencije.

Ovaj se pristup često naziva odlukama na temelju podataka .

Jednom kada počnete opravdavati bilo koju ili barem većinu svojih poslovnih odluka koristeći podatke koje posjedujete ili podatke koje možete prikupiti iz različitih izvora, možete prestati nagađati i početi donositi odluke temeljene na podacima.

Odluke na temelju podataka volim smatrati izvorima mase. Lior Zoref bio je na ovom TED-ovom predavanju. Pozvao je vola na pozornicu i zamolio publiku da pogodi njegovu težinu. Ako ste ovo gledali, vjerojatno će vas svladati koliko je točan prosjek gužve u usporedbi sa stvarnom težinom vola: 1.792 kilograma ili 1795 kilograma!

Kad pojedinačno nagađate o svojim poslovnim ciljevima, ne razlikujete se od bilo koje osobe koja sjedi u gomili i pokušava procijeniti težinu vola. Možete čak biti i onaj koji je pogodio 300 ili 8000 funti, što bi vaše poslovanje moglo koštati puno nepotrebnih troškova.

Ali ako koristite mudrost mnoštva za donošenje odluka na temelju podataka, najvjerojatnije ćete biti ispred svih ostalih. U poslovnom smislu bit ćete ispred svojih konkurenata.

Nisam čisti prodavač. Ali s osnovnim vještinama analize podataka mogu svoje poslovanje gurnuti naprijed u svim aspektima, uključujući marketing.

Provest ću vas kroz praktični detaljni vodič o pristupu podacima na Facebooku. Zatim kako to analizirati na temelju naših potreba u vezi s optimiziranim vremenom za emitiranje na Facebook Liveu.

Da biste slijedili ovaj vodič, trebate:

  • Facebook račun
  • Facebook grupa koju biste željeli analizirati

    Ako je to privatna grupa, tada morate biti član grupe

  • Instaliran Python 2.7
  • Instalirana Jupyterova bilježnica
  • Instalirana je Python knjižnica API-ja grafikona Facebooka

Jupyterova bilježnica preporučeni je alat za analizu podataka u Pythonu. Ima puno vrhunaca. Omogućuje vam pokretanje isječaka koda i spremanje rezultata u memoriju. Dakle, nećete izvoditi sve svoje skripte iznova i iznova svaki put kad implementirate manju promjenu. To je presudno pri analizi podataka, jer neki zadaci mogu potrajati puno vremena za izvršavanje.

Iako to nije bitno, preporučujem rad unutar virtualnog okruženja Python. Evo posta koji sam napisao o prednostima virtualnog okruženja pri korištenju Pythona.

Preporučujem rad u Ubuntu okruženju kada radite analizu podataka pomoću Jupyterovih prijenosnih računala.

Korak 1 - Dobivanje ID-a Facebook grupe

Da bismo dobili podatke iz Facebook API-ja, moramo navesti ID entiteta od kojeg želimo dobiti podatke, u našem slučaju, Facebook grupe.

Lookup-id.com lijep je alat pomoću kojeg možete pronaći ID grupe na temelju njezinog URL-a. Kopirajte URL svoje grupe i zalijepite ga u traku za pretraživanje.

U ovom ćemo članku koristiti grupu: Web dizajn i razvoj.

ID: 319479604815804

Korak 2 - Upoznavanje Graph API Explorer-a

Da bi iz API-ja dobio najviše od Facebook API-ja, Facebook je razvio igralište za programere nazvano Graph API Explorer.

Graph API Explorer omogućuje nam privremeni pristupni token i započinjanje ispitivanja mogućnosti koje nudi Facebook API.

Kliknite Dohvati žeton. Nemojte odabrati nikakvo dopuštenje. Pritisnite Get Access Token .

Facebook API ima mnogo krajnjih točaka koje možete koristiti. U ovom ćemo priručniku koristiti dvije glavne krajnje točke:

  • Krajnja točka grupe
  • Krajnja točka reakcija

Da biste shvatili strukturu odgovora koji očekujete da dobijete, navedite URL krajnje točke i kliknite Pošalji .

Ispitajmo krajnju točku URL-a za prikupljanje posljednjih postova iz feeda grupe. Upišite ovaj URL u Graph API Explorer:

319479604815804/feed

i pritisnite Submit .

Sada biste trebali vidjeti posljednje postove iz feeda grupe u JSON strukturi. Sadrži sadržaj posta, njegov ID i ažurirano vrijeme. Klikom na jedan od id-ova i dodavanjem na kraj URL-a:

319479604815804_1468216989942054/reactions?summary=total_count

Trebali biste vidjeti popis reakcija za određeni post i sažetak ukupnog broja reakcija.

Na ovaj način možete se poigrati svim značajkama koje Facebook API nudi.

Another tool for examining API endpoints of APIs which don’t offer a playground is Postman. You can read more about this tool and essential tools for web developers.

Step 3 — Our plan and assumptions

Our goal is to find the best time to have a Facebook Live session in the group that contains our target audience. To do that, we assume that the more activity there is in the group at a specific time, the most likely our Facebook Live session will gain more traction.

So our goal now is to figure out when there is a peak in the group’s activity over time. And by when I mean a specific weekday and time.

To do that, we are going to grab the last 5,000 posts from the group’s feed. Then we’ll plot the distribution of the times they were updated.

We assume that longer posts indicate more activity in the group because members spend more time in the group writing them. So, our next step will be to take into consideration the length of each post in the distribution.

Reaction on Facebook is probably a great indication of people engaging with a specific post. Thus, our last step will be to collect the total number of reactions for each post. Then take that into account in the distribution of activity over weekdays and hours.

Because reactions may come after the post, we should be cautious using this data analysis approach.

Step 4 — Let’s analyze some data!

To start a Jupyter notebook, you should execute:

ipython notebook

and then choose New → Python 2.

To analyze and plot the data, we are going to use the numpy and matplotlib libraries. These are very popular Python libraries you should use to better analyze your data.

Let’s import all the libraries we need:

import matplotlib.pyplot as pltimport numpy as npimport facebookimport urlparseimport datetimeimport requests

and specify our access token and group id:

ACCESS_TOKEN = 'INSERT_ACCESS_TOKEN_HERE'GROUP_ID = '319479604815804' # Web Design and Development group

Then, let’s initialize the API object with our access token:

graph = facebook.GraphAPI(ACCESS_TOKEN)

Now we want to grab the posts from the group’s feed. To avoid errors during the API calls, we will limit each API call to 50 posts and iterate over 100 API calls:

posts = []url = "{}/feed?limit=50".format(GROUP_ID)until = Nonefor i in xrange(100): if until is not None: url += "&until={}".format(until) response = graph.request(url) data = response.get('data') if not data: break posts = posts + data next_url = response.get("paging").get("next") parsed_url = urlparse.urlparse(next_url) until = urlparse.parse_qs(parsed_url.query)["until"][0]
In each API call, we specify the until parameter to get older posts.
Now, let’s organize the posts into weekdays and hours of the day:
weekdays = {i: 0 for i in xrange(7)}
hours_of_day = {i: 0 for i in xrange(24)}
hours_of_week = np.zeros((7,24), dtype=np.int)for post in posts: updated = datetime.datetime.strptime(post.get("updated_time"), "%Y-%m-%dT%H:%M:%S+0000") weekday = updated.weekday() hour_of_day = updated.hour weekdays[weekday] += 1 hours_of_day[hour_of_day] += 1 hours_of_week[weekday][hour_of_day] += 1

and then, plot the results using matplotlib bar charts:

plt.bar(weekdays.keys(), weekdays.values(),)plt.show()
plt.bar(hours_of_day.keys(), hours_of_day.values(),)plt.show()

With only this basic analysis, we can already learn a lot about better or worse time slots for broadcasting to this group. But it does not seem informative enough. Maybe because the data is divided into 2 graphs and missing some critical information.

Let’s try to present a heat map of the data, that enables us to see 3D information:

plt.imshow(hours_of_week, cmap="hot")plt.show()

Well, this is much better! We can see that the group is very active on Monday to Friday between 6:00 am and 10:00 am.

Now let’s take into consideration to post length and see how it affects the results:

weekdays_content = {i: 0 for i in xrange(7)}hours_of_day_content = {i: 0 for i in xrange(24)}hours_of_week_content = np.zeros((7,24), dtype=np.int)for post in posts: updated = datetime.datetime.strptime(post.get("updated_time"), "%Y-%m-%dT%H:%M:%S+0000") weekday = updated.weekday() hour_of_day = updated.hour content_length = len(post["message"]) if "message" in post else 1 weekdays_content[weekday] += content_length hours_of_day_content[hour_of_day] += content_length hours_of_week_content[weekday][hour_of_day] += content_length

The heatmap we get:

This is nice but should be treated with caution. On one hand, we can see a very specific time that is the optimized time slot to have our Facebook Live session. But, it might be an outlier of a super long post.

I’ll leave it to you to figure it out in your next data analysis project. Take a larger amount of posts or grab an older batch of 5000 posts from the group’s feed.

To take reactions into account when analyzing the data, we need to make another API call for each post.

This is because it’s a different API endpoint:

weekdays_reactions = {i: 0 for i in xrange(7)}hours_of_day_reactions = {i: 0 for i in xrange(24)}hours_of_week_reactions = np.zeros((7,24), dtype=np.int)for i, post in enumerate(posts): url = "//graph.facebook.com/v2.10/{id}/reactions?access_token={token}&summary=total_count".format( id=post["id"], token=ACCESS_TOKEN )
headers = { "Host": "graph.facebook.com" }
response = requests.get(url, headers=headers)
try: total_reactions = 1 + response.json().get("summary").get("total_count") except: total_reactions = 1
updated = datetime.datetime.strptime(post.get("updated_time"), "%Y-%m-%dT%H:%M:%S+0000") weekday = updated.weekday() hour_of_day = updated.hour weekdays_reactions[weekday] += total_reactions hours_of_day_reactions[hour_of_day] += total_reactions hours_of_week_reactions[weekday][hour_of_day] += total_reactions

We used a low-level approach by specifying the exact HTTP request and did not use the Facebook Python library. This is because that library doesn’t support the last version of the Facebook API required when querying the reactions endpoint.

The heat map generated from this data:

We can conclude that the three approaches we used agree on Monday and Wednesday, 6:00 am to 7:00 am.

Conclusions

Data analysis can be challenging and often requires creativity. But it also exciting and very rewarding.

After choosing our time to broadcast on Facebook Live based on the analysis presented here, we had a huge success and a lot of traction during our Live session.

I encourage you to try and use data analysis to make data-driven decisions in your next business move. And start thinking in terms of data-driven decisions.

You can find the Github repository here.

I originally published this on CodingStartups.