<jupyter_start><jupyter_text>Python tasks to prepare for the courseCourse content in Jupyter Notebook for [Gitlab].[Gitlab]: https://gitlab.mi.hdm-stuttgart.de/maucher/DataMiningLab/-/tree/master<jupyter_code># Listen Warm-Up
import logging as log

# 1) Legen Sie zwei Listen gleicher Länge mit numerischen Datenelementen an.

pylist1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
pylist2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11]

# 2) Hängen Sie an die erste Liste die Elemente der zweiten Liste an.
pylist1.extend(pylist2)
print(pylist1)

# 3) Suchen Sie in der neuen Liste nach einem Element mit einem bestimmten Wert und bestimmen Sie an welcher Position das Element /#    in der Liste auftritt. Wie kann der Fall, dass der vorgegebene Wert nicht in der Liste ist, abgefangen werden?
try:
    print(pylist1.index(11))
except ValueError:
    log.warn('The element does not occure to be within the list.')
  
try:
    print(pylist1.index(0))
except ValueError:
    log.warn('The element does not occure to be within the list.')

# 4) Löschen Sie die Elemente von der zweiten bis zur vierten Stelle aus der Liste (Elemente an den Indizes 1,2 und 3)
del pylist1[1:3]
print(pylist1)
# 5) Fügen Sie die Elemente 4,2 und 1 an der Stelle 2 fortfolgend ein (so dass Liste erweitert wird)
values = [4, 2, 1]
for x in range(len(values)):
    pylist1.insert(2, x)
print('adjusted list: {}'.format(pylist1))
# 6) Sortieren Sie die Liste nach absteigenden Werten.
pylist1.sort()
# 7) Berechnen Sie die elementweise Summe zweier numerischer Listen gleicher Länge mithilfe einer List-Comprehension.
result = []
pylist1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
pylist2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for index, val in enumerate(pylist1):
    result.insert(index, pylist2[index]+val)
print('calculated result: {}'.format(result))
# Strings Warm-Up

# 1) Weisen Sie einen Text mit mindestens 10 Wörtern einer Stringvariablen text1 zu.
text1 = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, \
    sed diam nonumy eirmod tempor invidunt ut labore et dolore magna \
    aliquyam erat, sed diam voluptua. Stet clita kasd gubergren, \
    no sea takimata sanctus est Lorem ipsum dolor sit amet. \
    Stet clita kasd gubergren, no sea takimata \
    sanctus est Lorem ipsum dolor sit amet.'

# 2) Transformieren Sie text1 so, dass alle Wörter klein geschrieben sind.
textl = text1.lower()
print(textl)

#3) Aus wievielen Zeichen besteht der Text?
print('numer of letters: {}'.format(len(text1)))

#4) Aus wievielen unterschiedlichen Zeichen besteht der Text?
unique = []
for char in textl[::]:
    if char not in unique:
        unique.append(char)
print('unique chars: {}'.format(len(unique)))

#5) Zerlegen Sie den in der String-Variablen abgespeicherten Text in eine Liste list1 von Wörtern.
list1 = textl.split()
print('list of words: {}'.format(list1))
#6) Aus wievielen Wörtern besteht der Text?
print('text word count: {}'.format(len(list1)))

#7) Aus wievielen unterschiedlichen Wörtern besteht der Text?
unique = []
for word in list1[::]:
    if word not in unique:
        unique.append(word)
print('unique words: {}'.format(len(unique)))

#8) Legen Sie analog zu text1 noch zwei weitere Stringvariablen text2 und text3 an, die ungefähr so viele Wörter enthalten wie text1.
text2 = 'Lorem ipsum sit amet, consetetur dolor sadipscing elitr, \
    sed diam nonumy eirmod tempor invidunt ut labore et dolore \
    magna aliquyam erat, sed diam voluptua. Green. At vero et eos accusam \
    et justo duo dolores et ea rebum. Stet clita kasd gubergren, \
    no sea takimata sanctus est Lorem ipsum dolor sit amet. Yellow.'

text3 = 'Lorem ipsum dolor sit amet dolor, consetetur sadipscing elitr, \
    sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam \
    erat, sed diam voluptua. At amet vero eos et accusam et justo duo dolores \
    et ea rebum. Stet clita kasd gubergren, no takimata sea sanctus est gubergrens\
    Lorem ipsum dolor sit. Yellow fields and rosa cows.'

#9.1) Wiederholen Sie die oben genannten Schritte für text2 und text3. Die zugehörigen Wortlisten sollten mit liste2 und liste3 bezeichnet werden.
#9.2) Transformieren Sie text1 so, dass alle Wörter klein geschrieben sind.
text2 = text2.lower()
text3 = text3.lower()
print('lower case: {}'.format(text2))
print('lower case: {}'.format(text3))

#9.3) Aus wievielen Zeichen besteht der Text?
print('numer of letters: {}'.format(len(text2)))
print('numer of letters: {}'.format(len(text3)))

#9.4) Aus wievielen unterschiedlichen Zeichen besteht der Text?
unique = []
for char in text2[::]:
    if char not in unique:
        unique.append(char)
print('unique chars text2: {}'.format(len(unique)))

unique = []
for char in text3[::]:
    if char not in unique:
        unique.append(char)
print('unique chars text3: {}'.format(len(unique)))

#9.5) Zerlegen Sie den in der String-Variablen abgespeicherten Text in eine Liste list1 von Wörtern.
list2 = text2.split()
print('list of words: {}'.format(list2))

list3 = text3.split()
print('list of words: {}'.format(list3))
#9.6) Aus wievielen Wörtern besteht der Text?
print('text word count: {}'.format(len(list2)))
print('text word count: {}'.format(len(list3)))

#9.7) Aus wievielen unterschiedlichen Wörtern besteht der Text?
unique = []
for word in list2[::]:
    if word not in unique:
        unique.append(word)
print('unique words: {}'.format(len(unique)))

unique = []
for word in list3[::]:
    if word not in unique:
        unique.append(word)
print('unique words: {}'.format(len(unique)))

#10) Bestimmen Sie jetzt das gesamte Vokabular. Das gesamte Vokabular ist die Menge aller Worte,
# die mindestens in einem der 3 Texte vorkommen. Die Wörter des Vokabulars sollen in einer Liste 
# vocabular gespeichert werden. Aus wievielen Wörtern besteht das Vokabular?
list1.extend(list2)
list1.extend(list3)

unique = []
for word in list1[::]:
    if word not in unique:
        unique.append(word)
print('unique words overall: {}'.format(len(unique)))
# Dictionaries Warm-Up

# 1) Legen Sie für jeden der 3 Texte je ein Dictionary an, das als Keys alle Wörter des gesamten Vokabulars enthält und als Values die Häufigkeit des Worts im jeweiligen Text.

dict2 = {}
dict3 = {}

def count_words(list_words):
    counts = dict()
    for word in list_words[::]:
        if word in counts:
            counts[word] += counts.get(word, 0) + 1
        else:
            counts[word] = 1

    for word in counts:
        print('The {} occures {} times'.format(word, counts[word]))
    return counts

dict2 = count_words(list2)
dict3 = count_words(list3)

print(dict2)
print(dict3)
# 2) Legen Sie ein verschachteltes Dictionary an, dessen Keys Namen für die drei oben angelegten Texte sind und dessen Values die oben angelegten Dictionarys sind.
# 3) Fragen Sie die Häufigkeit eines im Vokabular enthaltenen Worts in jedem der 3 Texte aus dem verschachtelten Dictionary ab.
# Functions Warm-Up

# 1) Schreiben Sie eine Funktion, der eine Liste mit beliebig vielen Texten in Form von Stringvariablen \
#    übergeben wird. Aus dieser Liste soll ein verschachteltes Dictionary erzeugt und zurückgegeben werden, 
#    das als Keys Namen für die einzelnen Texte enthält und dessen Values Dictionaries sind, welche die Häufigkeit der Vokabularworte 
#    in den jeweiligen Texten enthalten (also das gleiche verschachtelte Dictionary, wie in der vorigen Aufgabe für 3 Texte angelegt wurde)

def text_dict(textlist):
    results = {}
    for txt in textlist[::]:
        res = txt.split()
        counts = dict()
        for word in res[::]:
            if word in counts:
                counts[word] += counts.get(word, 0) + 1
            else:
                counts[word] = 1
        name = 'text {}'.format(txt[0])
        results[name] = counts
    return results

string1 = 'the quick brown fox jumps over the lazy dog'
string2 = 'all the quick brown fox jumps over the lazy dog'
string3 = 'with the quick brown fox jumps over the lazy dog'
string4 = 'about the quick brown fox jumps over the lazy dog'

text1 = []
text1.append(string1)
text1.append(string2)
text1.append(string3)
text1.append(string4)
print(text1)

print(text_dict(text1))

# 2) Legen Sie eine Liste von Texten (Stringvariablen) an, übergeben Sie diese der oben implementierten Funktion und geben Sie das von der #    Funktion zurückgegebene verschachtelte Dictionary aus.
# Numpy Warm-Up

#1) Wie wird ein eindimensionales, wie ein zweidimensionales Numpy Array angelegt?
#2) Wie bestimmt man die Größe (Anzahl Zeilen und Anzahl Spalten) eines zweidimensionalen Numpy Arrays?
#3) Wie werden die Mittelwerte der Spalten eines Numpy Arrays ermittelt, wie werden die Standardabweichungen der Spalten eines Numpy Arrays berechnet?
#4) Wie können die Daten aus einem .csv File direkt in ein Numpy-Array eingelesen werden?
#5) Wie kann ein Numpy Array effizient in einem File abgespeichert werden? Wie können diese Daten aus dem File wieder in ein Numpy Array gelesen werden?
#6) Wie kann auf das Element in Zeile 1, Spalte 2 eines Numpy Arrays zugegriffen werden?
#7) Wie kann auf die zweite Zeile eines Numpy-Arrays zugegriffen werden?
#8) Wie kann auf die Spalten 2 bis 4 eines Numpy-Arrays zugegriffen werden?
#9) Wie kann das Skalarprodukt zweier eindimensionaler Numpy-Arrays bestimmt werden? 
#10) Wie kann ein zweidimensionales Numpy-Array mit einem anderen zweidimensionales Numpy-Array multipliziert werden (im Sinne einer Matrixmultiplikation)? 
#11) Wie kann ein eindimensionales Numpy Array mit einem zweidimensionalen Numpy Array multipliziert werden?
#12) Wie können Zeilen oder Spalten eines Numpy Arrays hinsichtlich ihrer Werte ansteigend oder absteigend sortiert werden?
# Scipy Warm-Up

#Machen Sie sich mit den Funktionen des Moduls Scipy.spatial.distance vertraut.
#1) Wie wird die paarweise euklidische Distanz zwischen den Zeilen eines Numpy Array berechnet?

#2) Machen Sie sich mit den Funktionen des Moduls Scipy.cluster.hierarchy vertraut.
#3) Wie wird mit diesem Modul ein hierarchisches Clustering von Vektoren berechnet und visualisiert?
#4) Welche Bedeutung haben die Parameter method und metric der Funktion linkage?
# Pandas Warm-Up

#1) Was ist der Vorteil eines Pandas Dataframe gegenüber einem Numpy Array?
#2) Wie legt man eine Pandas Dataframe an?
#3) Wie liest man eine .csv Datei in einen Pandas Dataframe?
#4) Wie schreibt man einen Pandas Dataframe in eine .csv Datei?
#5) Wie greift man auf den Index eines Pandas Dataframes zu?
#6) Wie greift man auf die Spaltennamen eines Dataframes zu?
#7) Wie greift man auf eine Spalte eines Dataframes zu?
#8) Wie greift man auf eine Zeile eines Dataframes zu?<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08540591271703425, 'fraction_numerical': 0.021398404504927263, 'mean_word_length': 4.195514383227694, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 7, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '530984', 'license': 'MIT', 'n_tokens_mistral': 3669, 'n_tokens_neox': 3659, 'n_words': 1413, 'path': 'src/proj0_preparation/prep_tasks_datamining.ipynb', 'repo_name': 'JaninaMattes/data_mining_lab_python', 'size': '10655'}