Nubes de palabras | Tutorial de nube de palabras de Python (notas DVwP)

más sobre las funciones comunes de DataFrame en la entrada de pandas

Tutorial de nubes de palabras

Preparación de datos

Descarguemos, importemos y limpiemos nuestro conjunto de datos primario de inmigración canadiense utilizando el método pandas read_excel() para cualquier visualización.

df_can = pd.read_excel('https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DV0101EN-SkillsNetwork/Data%20Files/Canada.xlsx',
                       sheet_name='Canada by Citizenship',
                       skiprows=range(20),
                       skipfooter=2)

print('Data downloaded and read into a dataframe!')

# clean up the dataset to remove unnecessary columns (eg. REG) 
df_can.drop(['AREA','REG','DEV','Type','Coverage'], axis = 1, inplace = True)

# let's rename the columns so that they make sense
df_can.rename (columns = {
    
    'OdName':'Country', 'AreaName':'Continent','RegName':'Region'}, inplace = True)

# for sake of consistency, let's also make all column labels of type string
df_can.columns = list(map(str, df_can.columns))

# set the country name as index - useful for quickly looking up countries using .loc method
df_can.set_index('Country', inplace = True)

# add total column
df_can['Total'] =  df_can.sum (axis = 1)

# years that we will be using in this lesson - useful for plotting later on
years = list(map(str, range(1980, 2014)))
# print ('data dimensions:', df_can.shape)

Nubes de palabras

Word Las nubes (también conocidas como nubes de texto o nubes de etiquetas) funcionan de una manera simple: cuanto más aparece una palabra específica en una fuente de datos textuales (como un discurso, una publicación de blog o una base de datos), más grande y audaz aparece en la nube de palabras.

Afortunadamente, ya existe un paquete de Python en Python para generar wordnubes. El paquete, llamado, word_cloudfue desarrollado por Andreas Mueller . Puede obtener más información sobre el paquete siguiendo este enlace .

Usemos este paquete para aprender a generar una nube de palabras para un documento de texto dado.

Primero, instalemos el paquete.

# install wordcloud
# !conda install -c conda-forge wordcloud==1.4.1 --yes
# ! pip install wordcloud
# import package and its set of stopwords
from wordcloud import WordCloud, STOPWORDS

print ('Wordcloud is installed and imported!')

WordLas nubes se utilizan comúnmente para realizar análisis de alto nivel y visualización de datos de texto. En consecuencia, vamos a apartarnos del conjunto de datos de inmigración y trabajar con un ejemplo que implica analizar datos de texto. Intentemos analizar una novela corta escrita por Lewis Carroll titulada Alice's Adventures in Wonderland . Vamos a descargar un archivo .txt de la novela.

# download file and save as alice_novel.txt
!wget --quiet https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DV0101EN-SkillsNetwork/Data%20Files/alice_novel.txt

# open the file and read it into a variable alice_novel
alice_novel = open('alice_novel.txt', 'r').read()
    
print ('File downloaded and saved!')
File downloaded and saved!

A continuación, usemos las palabras vacías de las que importamos word_cloud. Usamos el conjunto de funciones para eliminar las palabras vacías redundantes.

stopwords = set(STOPWORDS)

Cree un objeto de nube de palabras y genere una nube de palabras. Para simplificar, generemos una nube de palabras utilizando solo las primeras 2000 palabras de la novela.

# instantiate a word cloud object
alice_wc = WordCloud(
    background_color='white',
    max_words=2000,
    stopwords=stopwords
)

# generate the word cloud
alice_wc.generate(alice_novel)

¡Increíble! Ahora que la wordnube está creada, visualicémosla.

# display the word cloud
plt.imshow(alice_wc, interpolation='bilinear')
plt.axis('off')
plt.show()

Inserte la descripción de la imagen aquí
¡Interesante! Entonces, en las primeras 2000 palabras de la novela, las palabras más comunes son Alice , dijo , pequeña , Reina , etc. Cambiemos el tamaño de la nube para que podamos ver un poco mejor las palabras menos frecuentes.

fig = plt.figure()
fig.set_figwidth(14) # set width
fig.set_figheight(18) # set height

# display the cloud
plt.imshow(alice_wc, interpolation='bilinear')
plt.axis('off')
plt.show()

Inserte la descripción de la imagen aquí
¡Mucho mejor! Sin embargo, dicho no es realmente una palabra informativa. Así que agregémoslo a nuestras palabras vacías y volvamos a generar la nube.

stopwords.add('said') # add the words said to stopwords

# re-generate the word cloud
alice_wc.generate(alice_novel)

# display the cloud
fig = plt.figure()
fig.set_figwidth(14) # set width
fig.set_figheight(18) # set height

plt.imshow(alice_wc, interpolation='bilinear')
plt.axis('off')
plt.show()

Inserte la descripción de la imagen aquí
¡Excelente! ¡Esto parece realmente interesante! Otra cosa interesante que puede implementar con el word_cloudpaquete es superponer las palabras en una máscara de cualquier forma. Usemos una máscara de Alice y su conejo. Ya creamos la máscara para ti, así que vamos a descargarla y llamarla alice_mask.png .

# download image
!wget --quiet https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DV0101EN-SkillsNetwork/labs/Module%204/images/alice_mask.png
    
# save mask to alice_mask
alice_mask = np.array(Image.open('alice_mask.png'))
    
print('Image downloaded and saved!')
Image downloaded and saved!

Echemos un vistazo a cómo se ve la máscara.

fig = plt.figure()
fig.set_figwidth(14) # set width
fig.set_figheight(18) # set height

plt.imshow(alice_mask, cmap=plt.cm.gray, interpolation='bilinear')
plt.axis('off')
plt.show()

Inserte la descripción de la imagen aquí
Dar forma a la wordnube de acuerdo con la máscara es sencillo con el word_cloudpaquete. Para simplificar, continuaremos usando las primeras 2000 palabras de la novela.

# instantiate a word cloud object
alice_wc = WordCloud(background_color='white', max_words=2000, mask=alice_mask, stopwords=stopwords)

# generate the word cloud
alice_wc.generate(alice_novel)

# display the word cloud
fig = plt.figure()
fig.set_figwidth(14) # set width
fig.set_figheight(18) # set height

plt.imshow(alice_wc, interpolation='bilinear')
plt.axis('off')
plt.show()

Inserte la descripción de la imagen aquí
¡Realmente impresionante!

Desafortunadamente, nuestros datos de inmigración no tienen datos de texto, pero donde hay voluntad, hay una manera. Generemos datos de texto de muestra de nuestro conjunto de datos de inmigración, digamos datos de texto de 90 palabras.

¿Cuál fue la inmigración total de 1980 a 2013?

total_immigration = df_can['Total'].sum()
total_immigration
6409153

Usando países con nombres de una sola palabra, dupliquemos el nombre de cada país en función de cuánto contribuyen a la inmigración total.

max_words = 90
word_string = ''
for country in df_can.index.values:
    # check if country's name is a single-word name
    if len(country.split(' ')) == 1:
        repeat_num_times = int(df_can.loc[country, 'Total']/float(total_immigration)*max_words)
        word_string = word_string + ((country + ' ') * repeat_num_times)
                                     
# display the generated text
word_string
'China China China China China China China China China Colombia Egypt France Guyana Haiti India India India India India India India India India Jamaica Lebanon Morocco Pakistan Pakistan Pakistan Philippines Philippines Philippines Philippines Philippines Philippines Philippines Poland Portugal Romania '

No estamos tratando con palabras vacías aquí, por lo que no es necesario pasarlas al crear la nube de palabras.

# create the word cloud
wordcloud = WordCloud(background_color='white').generate(word_string)

print('Word cloud created!')
Word cloud created!
# display the cloud
fig = plt.figure()
fig.set_figwidth(14)
fig.set_figheight(18)

plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()

Inserte la descripción de la imagen aquí
Según la nube de palabras anterior, parece que la mayoría de las personas que inmigraron provienen de uno de los 15 países que se muestran en la nube de palabras. Una imagen interesante que podría crear es quizás usar el mapa de Canadá y una máscara y superponer la nube de palabras en la parte superior del mapa de Canadá. ¡Sería una imagen interesante de construir!

Supongo que te gusta

Origin blog.csdn.net/weixin_43360896/article/details/111932683
Recomendado
Clasificación