日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

安装wordcloud_COVID19数据分析实战:WordCloud 词云分析

發(fā)布時間:2024/9/27 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安装wordcloud_COVID19数据分析实战:WordCloud 词云分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

↑↑點擊上方藍字,回復資料,N個G的驚喜

前言

上一篇文章(鏈接)我們對COVID19_line_list數據集進行了清洗以及初步分析。本文中我們將分析如何用詞云來展示文本信息的概要。

比如我們從詞云百度百科截取文字,制作詞云。簡單來說,詞云就是重要單詞的可視化,如下圖。

line list 數據集中有兩列很重要的文本信息,symptoms (癥狀) 以及summary(摘要)。我們可以輕易的提出兩個問題:

  • COVID19 的主要癥狀是什么
  • 文本摘要的內容主要是什么

我們將用詞云回答這兩個問題。

python 作為一個萬能膠水語言,各種有用的輪子自然不勝枚舉。wordcloud 便是專門用于制作詞云的包。安裝方式很簡單,pip即可。

準備數據

數據我們采用上篇中清理好的數據,這里我將清理好的數據保存為新的csv文件(COVID19_line_list_data_cleaned.csv)。

第一步,導入必要的庫。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from PIL import Image
from wordcloud import ImageColorGenerator
from wordcloud import WordCloud
import jieba
# read the data
line_list_data_cleaned_file = 'data/COVID19_line_list_data_cleaned.csv'
line_list_data_raw_df = pd.read_csv(line_list_data_cleaned_file)

我們需要分析的是symptom 和summary 兩列的信息。wordcloud 分析的文本為str 格式,因此我們需要將dataframe 每一行的數據組合成一個str 格式。

# prepare the text by using str.cat
all_symptoms = line_list_data_raw_df['symptom'].str.cat(sep=',')
print(type(all_symptoms))

可以看到all_symptoms 已經是str 格式。我們先分析symptom 列,后續(xù)會處理summary列的信息。

快速做經典詞云

借用經典的案例代碼,我們先用默認的參數制作詞云。

# fast show wordcloud
wordcloud = WordCloud().generate(all_symptoms)
plt.figure()
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

很不錯,已經有了初步的模樣,不過我們還是發(fā)現一些問題:

  • 有些詞太小了,幾乎看不見
  • 兩個fever 是個什么東西?
  • 字體好模糊,不能更清楚嗎?

當然能解決,wordCould 類帶有一些初始化參數,比如min_font_size控制最小的詞字體大小,像素大小通過width和height 來調節(jié)。默認的collocations 為True,用于合并重要性/頻次相當的文本。設定這些參數,我們可以輕而易舉的改善的詞云畫面。

# change the resolution and cancel the collocations
wordcloud = WordCloud(
min_font_size=10,
width=800,
height=400,
collocations=False).generate(all_symptoms)
plt.figure()
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

一款經典版的詞云就出爐了,看上去很不錯。我們的第一個問題也有了答案:fever 和cough 是最常見的癥狀。

更modern的詞云

這里有一幅人類體形圖,我們也可以將這些癥狀的詞條作為tag 刻畫在人物肖像上。這里需要用到wordcloud的mask 參數。mask 顧名思義就是用于掩蓋一些像素。

加載圖像,并且轉化為array作為mask。print mask的信息,我們可以看到大批量的255 255 255。這是一個好的mask,因為這個代表著白色,白色的區(qū)域我們將不會用于填寫詞條,僅僅對有色區(qū)域進行填寫。

# modern wordcloud
mask = np.array(Image.open('data/human_body_shape.png'))
print(mask)
[[255 255 255 0]
[255 255 255 0]
[255 255 255 0]
...
[255 255 255 0]
[255 255 255 0]
[255 255 255 0]]
[[255 255 255 0]
[255 255 255 0]
[255 255 255 0]
...
[255 255 255 0]
[255 255 255 0]
[255 255 255 0]]
[[255 255 255 0]
[255 255 255 0]
[255 255 255 0]
...
[255 255 255 0]
[255 255 255 0]
[255 255 255 0]]]

再次創(chuàng)建wordcloud,代碼幾乎和上次雷同,僅僅是添加一個mask參數,以及設定圖像的線條寬度contour_width 以及顏色contour_color。

wordcloud = WordCloud(
background_color="white",
min_font_size=10,
width=800,
height=400,
mask=mask,
collocations=False,
contour_width=2,
contour_color='black').generate(all_symptoms)
plt.figure()
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

效果看起來比經典款的要好一些,但是還有一些瑕疵。我們可以看到body 輪廓中很多空白處,這是因為symptom 統計的詞條類數目比較少,無法填滿圖像。

彩色圖像詞云

很明顯,summary 列的信息量要遠遠大于symptom,下面我們可以分析該列數據。這次我們選擇一幅彩色圖像,我把human換成robot。幾乎同樣的代碼,再次運行。

mask = np.array(Image.open('data/robot.png'))
all_summary = line_list_data_raw_df['summary'].str.cat(sep=',')
image_colors = ImageColorGenerator(mask)
wordcloud = WordCloud(
background_color="white",
min_font_size=10,
width=800,
height=400,
mask=mask,
collocations=False,
contour_width=1,
contour_color='black').generate(all_summary)
plt.figure()
plt.imshow(
wordcloud.recolor(
color_func=image_colors),
interpolation="bilinear")
plt.axis("off")
plt.show()

結果。。。oops, 說好的機器人呢?怎么只有兩個眼睛和幾個大門牙,一定是mask出了問題。

我們打印一下創(chuàng)建的mask矩陣。一堆堆零,邊框明明是白色的,為什么是零呢?datacamp 博客給出了一定的解釋(https://www.datacamp.com/community/tutorials/wordcloud-python)。總之,零不是我們想要的。

[[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
...
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
...
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
...
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
...
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
...
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
...
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
...
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]]

解決方案也很簡單,替換0為255,然后重新制作詞云。

mask[mask == 0] = 255

可愛的機器人終于出現了。

回到我們開始提到的問題,我們可以看到summary主要是關于新確認的(new confirmed)一些COVID 案例,病人(patient)可能和Wuhan相關。而且我們可以看到樣本中male 似乎比female 多一些。

到此我們的兩個問題都圓滿的通過詞云回答了。

bonus: 中文詞云

回到開篇的詞云圖,我們展示了一份中文詞云。如果直接借用我們今天的代碼可能會出現一些問題。這里我們僅僅貼出中文詞云制作的代碼,以及一點注意事項。

  • 處理畫面出現顯示異常,可能是字體的問題。
  • 畫面中詞分割不好?用jieba

ciyun.csv 就是從百度詞條隨便截取的,你可以換成任意的文章。

ciyun = 'data/ciyun.csv'
with open(ciyun) as f:
ciyun_str = f.read()

def jieba_processing_txt(text):
mywordlist = []
seg_list = jieba.cut(text, cut_all=False)
liststr = "/ ".join(seg_list)
for myword in liststr.split('/'):
if len(myword.strip()) > 1:
mywordlist.append(myword)
return ' '.join(mywordlist)
font = 'data/SourceHanSerifCN-Light.otf' # 可以下載或者用電腦的自帶的字體
wordcloud = WordCloud(
min_font_size=10,
width=800,
height=400,
collocations=False,font_path=font).generate(jieba_processing_txt(ciyun_str))
plt.figure()
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

總結

本文介紹了經典版以及畫面嵌套版的詞云制作。使用詞云可以一目了然的獲取海量文本內容的關鍵信息。詞云制作過程中的一些坑我們也進行了掩埋:

  • 畫面分辨率問題
  • 疊詞問題
  • 彩色畫面的嵌套問題
  • 中文亂碼的問題

作者:琥珀里有波羅的海

https://juejin.im/post/5ebe85185188255fd54df565

加入機器學習微信群請后臺回復【入群】

推薦閱讀:

徹底搞懂機器學習中的正則化

機器學習數學基礎與理論(書單)機器學習中需要了解的 5 種采樣方法Pandas切片操作:一個很容易忽視的錯誤歡迎挑戰(zhàn)!14個數據分析和機器學習項目!附數據集復旦大學機器學習、深度學習視頻公開課,附PDF課件下載“為沉迷學習點贊創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的安装wordcloud_COVID19数据分析实战:WordCloud 词云分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。