Programmieren lernen
PacmanÜber mich
English
English
  • Course Outline
  • 1 - Databricks
    • Getting Started
    • Working with Notebooks
      • Adding Documentation
      • Built-In Visualizations
      • Import Data
      • Export Data
  • 2 - Introduction
    • Types of Questions
      • Finding Individual Records
      • Summarizing Data
      • Exploring Data
      • Drawing Inferences From Data
      • Predicting Information
      • Finding Causality
    • Steps in Data Analytics
    • Dimensions of Data Sets
    • Dimensions of Records
    • Dimensions of Fields
    • Data Types and Scales
  • 3 - SQL
    • Basic SQL
      • What is SQL?
      • Import Data
      • Select Columns
      • Filter Rows
      • Aggregate and Group Rows
      • Filter Aggregated Rows
      • Sort Rows
    • Advanced SQL
      • Views
      • Set Operators
      • Subqueries
      • Window Functions
      • Date and Time
      • Arrays
      • JSON
      • Statistical Analysis
    • Multiple Data Sets with SQL
    • Text with SQL
      • Search Text
      • Analyzing Words
        • Prefilter the Data
        • Clean and Normalize
        • Tokenize and Count
        • Filter Stop Words
        • POS Tagging
      • Word Pairs
      • Extract Emoticons
  • 4 - Python
    • Python for Data Analytics
      • What is Python?
    • Natural Language Processing
  • 5 - R
    • R Basics
  • 6 - Visualization
    • Why Visualize Data?
    • Data Visualization with R
    • Types of Visualizations
      • Developments and Trends
      • Distributions
    • Pitfalls in Data Visualization
  • 7 - Tableau
    • Getting Data Into Tableau
  • 8 - Spreadsheets
    • What Is A Spreadsheet?
  • Data & Exercises
    • Simpsons
    • Covid19
    • TED Talks
    • Lemonade Market Research
    • Chicago Crimes
    • Tweets of German Politicians
    • Amazon Product Reviews
    • REWE Online Products
Powered by GitBook
On this page
  • Emotionen über Emojis identifizieren
  • Emojis mit Scala/Python und UDFs extrahieren
  • Emoticons extrahieren
  • Emoticons und sonstige Symbole extrahieren
  • Emojis mit SQL analysieren
  • Fehlende Emojis pflegen
  • Links

Was this helpful?

  1. 3 - SQL
  2. Text with SQL

Extract Emoticons

In diesem Abschnitt schauen wir uns an, wie wir systematisch Emojis aus Tweets auslesen und auswerten können.

PreviousWord PairsNextPython for Data Analytics

Last updated 4 years ago

Was this helpful?

Das folgende Notebook enthält Codebeispiele für das Extrahieren und Analysieren von Emoticons in Tweets (und anderen Texten):

Emotionen über Emojis identifizieren

Eine einfache Möglichkeit nach Emojis zu suchen ist die Verwendung des LIKE Operators:

select text, * 
from tweets
where text like '%😂%'

Damit können wir Texte zumindest nach dem Vorkommen einzelner Emojis hin untersuchen. Das reicht aber für erweiterte Analysen nicht aus. Besser wäre es, wenn wir aus den Texten (hier: Tweets) mit einem Befehl alle Emojis extrahieren könnten und mit einer Tabelle bekannter Emojis und deren Bedeutung abgleichen könnten. Wie das geht, beschreibe ich im Folgenden.

Emojis mit Scala/Python und UDFs extrahieren

Emoticons extrahieren

In Databricks können wir neben SQL auch Scala oder Python verwenden. Scala ist die Programmiersprache, mit der Apache Spark entwickelt wurde (Spark SQL ist ein Teil von Apache Spark). In Scala ist es mit einem Befehl über einen regulären Ausdruck möglich, alle Emojis zu extrahieren. Wir verpacken die Zeile noch in eine neue Funktion oder User Defined Function (UDF), so dass wir sie anschließend auch aus SQL heraus aufrufen können:

def findEmoticons(s: String): Array[String] = {
  val str = Option(s).getOrElse(return Array())
   """\p{block=Emoticons}""".r.findAllIn(str).toArray 
}

val findEmoticonsUDF = udf[Array[String], String](findEmoticons)
spark.udf.register("findEmoticons", findEmoticonsUDF)

Emoticons und sonstige Symbole extrahieren

def findEmoticons(s: String): Array[String] = {
  val str = Option(s).getOrElse(return Array())
   """[\p{block=Emoticons}\p{block=Dingbats}\p{block=Miscellaneous Symbols And Pictographs}]""".r.findAllIn(str).toArray 
}

val findEmoticonsUDF = udf[Array[String], String](findEmoticons)
spark.udf.register("findEmoticons", findEmoticonsUDF)

Emojis mit SQL analysieren

Die Zeile 2 sorgt dafür, dass die neue Funktion findEmoticons auch in SQL verfügbar ist. Wir können sie dann einfach auf die Spalte text anwenden:

select text, findEmoticons(text) as `emojis` 
from twitter_timelines
where size(findEmoticons(text)) > 0

Das Ergebnis der Funktion ist eine neue Spalte als Liste (Array) von Emojis:

select text, explode(emojis) as emoji
from (
  select text, findEmoticons(text) as `emojis` 
  from twitter_timelines
)

Der Vorteil, dass wir genau ein Emoji in einer Spalte haben, liegt auf der Hand: Wir können z.B. die neue Spalte emoji nutzen, um die Daten mit einer Liste von bekannten Emojis und deren Bedeutung zu verbinden. Diese Liste können wir uns z.B. selbst als Google Spreadsheet aufbauen, oder wir suchen nach einer solchen Liste im Internet.

Zur Demonstration habe ich eine Liste mit einigen Emojis und deren emotionaler Bedeutung in Google Spreadsheets angelegt, die ihr wie folgt laden könnt:

// Choose a name for your resulting table in Databricks
var tableName = "emoji_meaning"

// Replace this URL with the one from your Google Spreadsheets
// Click on File --> Publish to the Web --> Option CSV and copy the URL
var url = "https://docs.google.com/spreadsheets/d/e/2PACX-1vTqChTs7Na_R4x3v-2z3BCpnazVhgyDtxHApJag0k4IGekU_74gqA8Vg-OzXRLUlYD4BPtH2rJ1Okpt/pub?output=csv"

var localpath = "/tmp/" + tableName + ".csv"
dbutils.fs.rm("file:" + localpath)
"wget -O " + localpath + " " + url !!

dbutils.fs.mkdirs("dbfs:/datasets/gsheets")
dbutils.fs.cp("file:" + localpath, "dbfs:/datasets/gsheets")

sqlContext.sql("drop table if exists " + tableName)
var df = spark.read.option("header", "true").option("inferSchema", "true").csv("/datasets/gsheets/" + tableName + ".csv");
df.write.saveAsTable(tableName);

Nach dem Ausführen des obigen Blocks habt ihr die neue Tabelle emoji_meaning in eurem Databricks Account:

select * from emoji_meaning

Jetzt müssen wir die beiden Tabellen nur noch zusammenbringen:

select t.text, t.emoji, e.meaning
from (
  select text, explode(findEmoticons(text)) as `emoji` 
  from twitter_timelines
) t
-- Left join um auch Emojis ohne Eintrag in Bedeutungstabelle zu bekomen
left join emoji_meaning e
  on e.emoji = t.emoji

Fehlende Emojis pflegen

Wie wir schnell erkennen können, haben einige Zeilen in der Spalte meaning den Wert null. Das bedeutet, wir haben in unserer Tabelle emoji_meaning, also im Google Spreadsheet, dieses Emoji noch nicht mit einer Bedeutung versehen. Das können wir nachholen, die Tabelle neu laden, und das obige Statement erneut ausführen. Um möglichst schnell auf die fehlenden Emojis zu stoßen, können wir das Ergebnis entsprechend filtern:

select t.text, t.emoji, e.meaning
from (
  select text, explode(findEmoticons(text)) as `emoji` 
  from twitter_timelines
) t
left join emoji_meaning e
  on e.emoji = t.emoji
where e.meaning is null

Viel Spaß beim Analysieren!

Neben den älteren Emojis gibt es mittlerweile eine ganze Reihe weiterer Symbole, die ebenfalls erkannt werden können. Dazu müssen lediglich die Dingbats und Miscellaneous Symbols and Pictographs zusätzlich zum Block Emoticons hinzugefügt werden:

Wie wir mit Arrays in SQL umgehen ist bekannt bzw. könnt ihr im nachlesen. Wir können z.B. explode verwenden, um pro Zeile ein Emoji zu erhalten:

Links

🔗
Unicode-Blöcke
dafür vorgesehenen Tutorial
https://s3.us-east-1.amazonaws.com/nicolas.meseth/databricks-notebooks/extract_and_analyze_emojis.htmls3.us-east-1.amazonaws.com
Full Emoji List, v14.0
Logo
emojitracker: realtime emoji use on twitter
Logo