Twitter: Start eines Experimentes und erste Zahlen

Nach einigen Gesprächen und diversen Diskussionen entschied ich mich zur Freigabe eines spezielleren Accounts zwecks Analyse der Fragen:
– Wie funktioniert das Ding mit Twitter eigentlich?
– Wie lassen sich bei Twitter mit welchem Aufwand (!) Autoritäten etablieren?
– Wie funktioniert bei Twitter die Statistik und die Auswertung der systemeigenen Statistik?
– Wie funktioniert bei Twitter die Verwertung der Hashtags?

Hier nun der erste Zahlenstand mit (Re)etablierung des Accounts.

Der Account bedient folgende Themen / Inhalte:
– Momentaufnahmen, Schnappschüsse (Digital, div. Rundreisen und sonstige Motive)
– Neu: Analogfotografie und Dokumentation der „Experimente“ mit div. Materialien, Farben und Motive
– Retweets: überwiegend S/W, monochrome
– Grundbefüllung via IFTTT vom Instagramaccount ausgehend

Die aktuellen Zahlen und auch Rückmeldungen via Twitter-Kontakte sind soweit überraschend gut und ich werde zeitnah analysieren, wie sich der Beziehungsaufbau bei dem System effektiver organisieren lassen kann.

Fragen, Austauschanregungen und Kontakt bitte via bekannten Telefonnummern (siehe Impressum)

Interaktionsanalyseprojekt (Instagram) Datenbankqueries

Nachfolgend einige Queries für die Interaktionen-Datenbank. Ich bitte die Hinweise zu beachten, welche am Ende der Liste stehen.

(A) Basisabfragen
(1) Einträge zählen
select count (*) from interaktionen.interakt

(2) Interaktionen (nach Accountname) aufsummieren
select count (distinct(name)) from interaktionen.interakt

(3) Tagclouds zählen
select count (distinct(tagcloud)) from interaktionen.interakt

(4) Tagclouds ausgeben
select distinct(tagcloud) from interaktionen.interakt group by tagcloud

(B) Likende / Interagierende
(1) Likende inkl. der Aufsummierung DEREN Likes
select count (name), name from interaktionen.interakt group by name order by count(name) DESC
select count (name), name from interaktionen.interakt group by name
select count(uid), name from interakt group by name order by count(uid) DESC;
(2) Likende und die gelikten Posts
select tagcloud, inflname from interakt where name = “’+edit1.text+“‘ order by inflname DESC

(C) Influencer / analysierte Accounts
(1) Ausgabe und Zuordnung der Likenden zu den analysierten Accounts (Influencer)
select inflname, name from interakt where name like ‚cdu%‘ group by name
Hinweis: „like ‚cdu%“ lässt sich entsprechend zu „‚%suchstring'“ oder auch „‚%suchstring%'“ austauschen
(2) Ausgabe und Aufsummierung der Interaktionen ZU DEN Influenceraccounts
select count (inflid), inflname from interaktionen.interakt group by inflid order by count(inflid) DESC;
select count (inflid), inflname from interaktionen.interakt group by inflid;
(3) Influencer auflisten
select distinct(inflname) from interakt;
(4) Influencer inkl. Summe der Likenden / Likes
select count(name),inflid,inflname from interakt group by inflname order by count (name);

(D) Tagclouds
(1) Ausgabe und Gewichtung der Tagclouds nach Aufsummierung der Likes je Tagcloud
select count(tagcloud), tagcloud from interakt group by tagcloud order by count(tagcloud) DESC;

(E) Tiefergehende Abfragen
(1) Auflistung von Interaktionen aus zwei Influenceraccounts.
select i1.inflid, i1.url, count(distinct i1.id) as „Anzahl1“ ,
count(distinct i2.id) as „Anzahl2“
from (select * from interakt where interakt.inflid = ‚ID1‘) „i1“
join (select * from interakt where interakt.inflid = ‚ID2‘) „i2“ on
(i1.url = i2.url)
group by i1.inflid, i1.url order by „Anzahl1“ desc, „Anzahl2“ desc
Quelle: Jens Pacholsky http://startup-helpers.de/

Sämtliche Abfragen wurden grob (!) auf Fehler geprüft und ich nehme für mich hier nicht die absolute Eleganz oder Fehlerfreiheit in Anspruch. Weitere Abfragen werden in unregelmäßigen Abständen hier hinzugefügt.

Datenbankfreigabe: Instagram, Interaktionsanalysen

Ab sofort werden die Analysen aus den Interaktionen mit diversen Accounts und deren Medien in unsere Strategieentwicklungen einbezogen. Ein zentrales Rechercheelement bildet die SQLite-Datenbank, die mit Hilfe der Instagram-API-Endpoints befüllt wird. Die Datei lässt sich hier herunter laden.

Hinweis:
Die ZIP-Datei ist verschlüsselt und ich gebe den Code ausschließlich nach Rücksprache den Kund_innen und den Geschäftsfreund_innen frei.

Umfang und Zahlen
Speicher: 2GB
Analysierte Accounts: 201
Erfasste Interaktionen: 54800587
Erfasste (unique) Interagierende Accounts: 912361
Erfasste (unique) Tagclouds: 40056
Erfasste (unique) Postings: 61439

Die Scrapingprozedur ist soweit stabil und ich werde die Datenbanken in kürzeren Abständen aktualisieren.

Inhalt und Struktur
Tabelle: interakt
Diese Tabelle beinhaltet alle Rohdaten aus der Interaktionsanalyseprozedur.
Die Spalten sind:
„name“ => der interagierende Account
„url“ => der Profillink des interagierenden Accounts
„uid“ => die InstagramID des interagierenden Accounts
„postid“ => die InstagramID des Postings, wo interagiert wurde
„posturl“ => die URL des Postings, wo interagiert wurde
„tagcloud“ => die Tagsammlung des Postings, wo interagiert wurde
„inflid“ => die InstagramID des Accounts, dessen Medien analysiert wurden
„zeit“ => Zeitstempel des Analysevorgangs

Tabelle: accounts
Diese Tabelle beinhaltet die Accounts, deren Medien auf Interaktionen analysiert wurden und die Angaben befinden sich in den Spalten „name“ (=> Accountname) und „id“ (=> InstagramID des Accounts).

Accountliste
accs

Update – Instagrambot, Screening der Medien auf Interaktionen

Nach einigen Überlegungen habe ich mich dazu entschieden, die ausgegliederte Instagramrechercheanwendung zu beenden und sämtliche Algorithmen in den bestehenden Bot zu überführen. Der „Bot“ kann also nicht mehr als typischer Bot begriffen werden, da diese Software nun auch über eine stabile Recherche- und Auswertungsfunktionssammlung verfügt.

[Analyse und Auswertungen der Interaktionen auf einen beliebigen (öffentlichen) Account]

Die Umsetzung der Funktionen basiert auf den Gedanken, die ich in diesem Blog unter dem Aspekt „Influencersuche“ bereits beschrieben hatte und die veröffentlichte Galerie zeigt einen Ausschnitt aus der Bedienung.
Die entwickelten Prozeduren gehen nach folgendem Muster vor:

[Datensammeln]
(a) Recherche der IDs des interessanten Accounts
(b) Download: Medienverzeichnis des interessanten Accounts
(c) Schritt-für-Schritt-Analyse der gecrawlten Medien auf die Endpoints „Likes“ und „Comments“ auf Basis der Media-ID und Erfassung der interagierenden Accounts (Username, User-ID etc.)

[Datenaufbereitung]
(a) Aufsummierung der Likes JE identifizierten Account
(b) Aufsummierung der Likesummen nach folgendem Beispielen:
– 1000 Accounts haben 1 x geliked
– 400 Accounts haben 100 x geliked
– 10 Accounts haben 300 x geliked

Datenbeispiele zu Instagramaccount aus dem Bereich „Politik“:
Hinweis:
Sämtliche sensible Daten sind in den nachfolgenden Beispieldateien selbstverständlich codiert.
Rohdaten: cl_rohdaten_codiert.xlsx
Summierte Daten: cl_sumlikeslikers_codiert.xlsx
Zusammenfassung: cl_zfg.xlsx

Die erhobenen und aufbereiteten Datensätze erlauben nun einen tieferen Blick auf die Accounts. Hierbei lassen sich Antworten auf folgende Fragen interpretieren:
(a) Existiert ein Ungleichgewicht zwischen der Followeranzahl und der Anzahl der Interagierenden?
(b) Sind die Interagierenden besonders aktiv, weniger aktiv oder selten aktiv?

Die grob beschriebene Funktion wird ab sofort in das Dienstleistungsspektrum der Wobus & Lehmann GbR eingegliedert.

Habt Ihr weitere faszinierende Ideen? Ich freue mich auf Kommentare, eMails und nette Telefonate.

Analysesoftware für die Hashtagdatenbank, erste Screenshots

Nachfolgend die ersten Screenshots aus der Versions 0.3Beta.

Funktionsliste und ToDo für die Version 0.4Beta:
– Abschaltung der „Einzelaufnahme“ und Übertrag der Funktionen auf die jeweils gewählte Monatsdatenbank
– Häufungsentwicklungen: Wechsel vom 2-Tagmodell auf Liste mit wahlweise Vergleichsfunktion via Diagram
– Gestaltungsmodul für die Diagramme: Farben, Fonts etc.

Recherchen via Locations mit Hilfe der Instagram-API

Für den Zugriff auf die gewünschten Datensätze liefert Instagram genau einen interessanten Einstiegspunkt:

Location – ID
https://api.instagram.com/v1/locations/{location-id}/media/recent?access_token=ACCESS-TOKEN

Nun stellte ich hier fest, dass die Location-ID via Recherche auf Basis der GeoCodes identifizierbar ist. Das lässt sich einfacher lösen und der Weg sieht so aus:

(1) Facebook-Account organisieren
(2) Zugriffstoken für FB organisieren
siehe: How to get a Facebook Token
(3) Abfrage der Facebook-Places API
Beispiel:
https://graph.facebook.com/search?q=[ort]&type=place&access_token=[deintoken]
(3.1) Auslesen und Interpretieren
Wichtige und interessante Variablen sind „name“ und „id“. Beide müssen für die weitere Verarbeitung entsprechend gespeichert werden. Die Ergebnisse werden im JSON-Format ausgegeben und sind entsprechend einfach auswertbar.

Die Erkenntnisse werden zeitnah in den Instagram-Bot übertragen und besagte Anwendung wird um eine Funktion erweitert, welche:
(a) Locations recherchiert
(b) Locations gewichtet
– nach Zeitstempel der Posts
– nach Hashtags

Hashtagprojekt – Datenbankabfragen

Mit Bekanntgabe des Projektes und Freigabe der Rohdatenpakete erreichen mich immer wieder Anfragen zu möglichen Queries. Die nachfolgenden Beispiele bilden einen Teil unserer Dateninterpretationssoftware ab.

[Prüfzeitpunkte]
select datum from example.tags group by datum;
Funktion: Ausgabe aller Prüfzeitpunkte.

[Häufungsauflistungen]
select haeufung from example.tags group by haeufung;
Funktion: Ausgabe aller erfassten Häufungen, unabhängig von Tag und Erfassungsdatum

[komplette Tagauflistung(en)]
(1) Pauschale Auflistung
select tag from example.tags group by tag;
Funktion: Auflistung aller erfassten Tags
(2) Auflistung inkl. Häufungen
select tag, haeufung from example.tags group by tag;
Funktion: Auflistung aller erfassten Tags inkl. deren Häufungen
(3) Auflistung inkl. Häufungen, nach Häufungsfilter
(3.1) absteigend
select tag, haeufung from example.tags where haeufung >=1000 group by tag order by haeufung desc;
Funktion: Auflistung aller Tags inkl. deren Häufungen, ab einer Mindesthäufung (absteigend nach Häufung)
(3.2) aufsteigend
select tag, haeufung from example.tags where haeufung >=1000 group by tag order by haeufung asc;
Funktion: Auflistung aller Tags inkl. deren Häufungen, ab einer Mindesthäufung (aufsteigend nach Häufung)

[Recherche(n)]
(1) Wortrecherche
select tag from example.tags where tag like 'leipzig%' group by tag;
Funktion: Ausgabe aller Tags, wo das gesuchte Wort am Anfang der Ergebnisse steht.
select tag from example.tags where tag like '%leipzig' group by tag;
Funktion: Ausgabe aller Tags, wo das gesuchte Wort am Ende der Ergebnisse steht.
(1.2) Wortrecherche mit Ausgabe der Häufungen
select tag, haeufung from example.tags where tag like 'leipzig%' group by tag;
select tag, haeufung from example.tags where tag like '%leipzig' group by tag;
(1.3) Wortrecherche nach Datum
select tag from example.tags where tag like 'leipzig%' and datum = '31.12.2016' group by tag;
select tag from example.tags where tag like '%leipzig' and datum = '31.12.2016' group by tag;
Bei beiden Ausgabebefehlen muss (!) im Vorfeld abgeklärt werden, ob in der Datenbank Einträge zum gesuchten Datum existieren.
(1.4) Wortrecherche nach Häufung
select tag, haeufung from example.tags where tag like 'kinder%' and haeufung > 1000 group by tag;
(1.5) Wortrecherche nach Häufung mit Datumsauflistung(en)
select tag, haeufung, datum from example.tags where tag = 'zimmer' and haeufung > 1000;

(2) Gruppenrecherche(n)
select tag from example.tags where tag like 'kind%' and tag like '%garten%' group by tag;
Funktion: Ausgabe aller Tags mit den Wortbestandteilen „Kind“ (Position: Anfang) und „Garten“ (Position: Egal)
select tag from example.tags where tag like 'kind%' and tag like '%garten' group by tag;
Funktion: Ausgabe aller Tags mit den Wortbestandteilen „Kind“ (Position: Anfang) und „Garten“ (Position: Ende)

[Erklärungen und Hinweise]
Die genannten Beispiele lassen sich im SQLite-Studio via Hauptmenü [Werkzeuge]=>[SQL-Editor] benutzen und wir nutzen einen Teil der o.g. Liste für die Features des eigenen Rechercheclients und Instagrambot. Durch die große Datenansammlung (freigegeben: ~70 Mio Datensätze) können die Zeiträume zwischen Abfrage und Ergebnispräsentation – je nach Hardware, Betriebssystem – zwischen 5 und 20 Sekunden andauern und ich empfehle bei intensiveren Rechercheprozeduren eine Auslagerung auf SSD-Platte (Bearbeitungsdauer ca. halbiert!).

Instagramrecherchearbeiten: ohne API und Token

Folgende Varianten wurden von mir getestet und als „produktiv“ eingestuft:

1) Grobüberlick über einen Account
https://www.instagram.com/[Accountname]/?__a=1
Diese Abfragemöglichkeit zeigt – im Wesentlichen – genau dieselben Inhalte (Accountgrunddaten, Medien plus Likes // Comments, usw) an, als wenn man eine beliebige Account-URL mit Hilfe des Browsers aufruft. Das Ergebnis wird hier im JSON-Format präsentiert und lässt sich über die (hoffentlich) bekannten Scrape- und Auswertungsprozeduren weiter verarbeiten.

2) Suche nach Medien, Accounts und Locations
https://www.instagram.com/web/search/topsearch/?query=test
Diese Abfragemöglichkeit fasst die Tagsuche, Accountsuche und Locationsuche zusammen und präsentiert die Ergebnisse in JSON-Format. Inhalte sind die Mediadaten der Tags, die Grunddaten der Accounts (Name, Nickname, Fans und Abos, Posts usw.) und die Grunddaten der Locations

3) Grunddaten eines Accounts
https://www.instagram.com/query/?q=ig_user(ID){id,username,external_url,full_name,profile_pic_url,biography,followed_by{count},follows{count},media{count},is_private,is_verified}
Diese Abfragemöglichkeit zeigt die wesentlichen Grunddaten eines Accounts an. Diese sind hier: ID, Username, externe URL, Name, Profil-Bild-URL, Abos und Fans, Posts und Bio. Das Ausgabeformat ist JSON.

4) Accountmedien
https://www.instagram.com/[accountname]/media/?max_id=20
Diese Abfragemöglichkeit zeigt die letzten 20 Posts eines beliebigen Accounts inklusive der Rohdaten (Likes, Comments, Zeitstempel usw.) der jeweiligen Medien. Ein komplettes Scrapen großer Feeds erscheint hier als unmöglich.

5) Tagrecherchen
https://www.instagram.com/explore/tags/[Tagname]/?__a=1
Diese Abfragemöglichkeit zeigt – im Prinzip – die Ergebnisse aus der Suche des Webanwendung und beinhaltet die jeweils beliebtesten und neuesten Beiträge inklusive deren Grunddaten (Likes, Comments, Zeitstempel usw.) aus der Tagsuche.

Hashtagprojekt – Einblicke in die Datenbank, Tagliste(n) und Queries

Der angedockte Client wurde um entsprechende Exportfunktionen erweitert und das Projekt beherbergt folgende Datensätze:

(a) Queries
Diese Angaben beschreiben die Tags, welche via API als Suchanfrage verarbeitet werden.

Downloads
searchview_0-9.zip
searchview_a-z.zip

(b) erfasste Tags
Diese Angaben sind das Ergebnis aus (a). Bitte hier beachten, dass die Listen ungewichtet sind und keine Häufungen ausgeben.

Downloads
tagview_0-9.zip
tagview_a-f.zip
tagview_g-m.zip
tagview_n-s.zip
tagview_t-z.zip

[Notiz] Instagram: Accountbeobachtungen und dauerhafte Auswertungen der Grunddaten

Nach einigen Gesprächen mit Kund_innen, Kolleg_innen und Geschäftsfreund_innen habe ich mich nun final dazu entschieden, eine kleinere Anwendung für die Accountbeobachtung zu entwickeln. Eigentlich hält sich hier der Programmieraufwand stark in Grenzen, aber ich wundere mich dennoch, dass eine simple Grunddatenschau (also: Anzahl der Posts, Fans und Abos) auf dem freien Markt via Tools und Dienstleistungen durchaus sehr teuer ist.
Also: ab Mitte der kommenden Woche werde ich unseren Partner_innen eine Lösung freigeben, welche sich stark am Hashtagprojekt orientiert. Die Grundlage hierfür ist eine Windowsanwendung mit angedockter SQLite-Datenbank, die per EMail-Schnittstelle ansteuerbar sein wird. Die konkrete Reportinggestaltung wird sich am Ursprungsprojekt orientieren.