Cover art generator with Python

In [1]:
# Generate the cover image for this course
# Author: Pedro C. de Siracusa | pedrosiracusa@gmail.com
In [2]:
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from PIL import Image

%matplotlib inline

Define a dict of words with their respective relevances

In [3]:
words = {
    'vida':95,
    'programar':90,
    'dados': 90,
    'ciência':92,
    'biologia':85,
    'meio ambiente':90,
    'sistemas complexos':80,
    'Python':90,
    'ecologia': 80,
    'bioinformática':80,
    'informação':80,
    'DNA': 80,
    'RNA': 80,
    'espécies':80,
    'zoologia':80,
    'botânica':80,
    'computadores': 85,
    'automação': 75,
    'comportamento animal':80,
    'saúde':80,
    'biodiversidade':83,
    'genômica':83,
    'proteômica':83,
    'conservação':83,
    'supercomputadores':85,
    'sequenciadores':85,
    'modelagem': 80,
    'processamento':80,
    'computação':80,
    'informática': 80,
    'big data':80,
    'conhecimento':70,
    'ferramentas':70,
    'inteligência artificial':80,
    'inovação':85,
    'velocidade':70,
    'avanço':70,
    'redes neurais':80,
    'evolução':87,
    'máquina':80,
    'paradigmas':80,
    'instrumentos':70,
    'habilidades':70,
    'tecnologia':85,
    'academia':80,
    'descobrir':70,
    'possibilidades':70,
    'desenvolvimento':80,
}

Use an image mask for laying the word cloud

In [4]:
mask = np.array(Image.open("./mask_penguin.jpg"))

Generate the word cloud

In [5]:
def generateWC():
    wc = WordCloud(background_color="white",  
                   max_words=1000, 
                   mask=mask, 
                   repeat=True,
                   colormap='plasma')

    wc.generate_from_frequencies(words)
    return wc

Plot and save the figure

In [6]:
def plotWc(wc, filename):
    plt.figure(figsize=(15,15))
    plt.imshow(wc, interpolation='bilinear')
    plt.axis('off')
    plt.text(-80,-70,'Introdução à Lógica de Programação',size=35,color='crimson', weight='semibold')
    plt.text(-80,-30,'Um curso prático para estudantes das ciências da vida',size=26.3,color='gray')
    plt.text(555, 0,'v0.2', size=15, color='darkgray', family='monospace', weight='semibold')

    plt.savefig(filename, dpi=300, bbox_inches='tight')

Generate $n$ (default=1) word clouds and plot them all. The user must select the preferred one then.

In [7]:
num_of_figures = 1

for i in range(num_of_figures):
    plotWc( generateWC(), filename=f'./figures/cover_art_{i}' )