前言

数据用的是上一篇我们从百度实时疫情数据扒下来的,具体数据获取方式见本blog上一篇。

我们主要获取中国和世界的累计确诊人数分别制作词云,词越大表示确诊人数越多.

准备工作

代码主要用到两个模块:

  1. openpyxl
  2. WordCloud

wordcloud 库把词云当作一个WordCloud对象

  • wordcloud.WordCloud()代表一个文本对应的词云
  • 可以根据文本中词语出现的频率等参数绘制词云
  • 绘制词云的形状、尺寸和颜色均可设定
  • 以WordCloud对象为基础,配置参数、加载文本、输出文件
参数 描述
width 指定词云对象生成图片的宽度,默认400像素
height 指定词云对象生成图片的高度,默认200像素
min_font_size 指定词云中字体的最小字号,默认4号
font_step 指定词云中字体字号的步进间隔,默认为1
font_path 指定文体文件的路径,默认None,解决中文乱码
max_words 指定词云显示的最大单词数量,默认200
stop_words 指定词云的排除词列表,即不显示的单词列表
mask 指定词云形状,默认为长方形,需要引用imread()函数
background_color 指定词云图片的背景颜色,默认为黑色

实现效果图

中国疫情词云

img

世界疫情词云

img

具体代码实现

import openpyxl
from wordcloud import WordCloud

# 读取数据
wb = openpyxl.load_workbook('data.xlsx')
# 获取工作表
ws =wb['国内疫情']

# 国内疫情数据
frequency_in = {}
for row in ws.values:
    # 去除表头
    if row[0] == '省份':
        pass
    else:
        # 将省份和累计确诊数关联 float转换为浮点型
        frequency_in[row[0]] = float(row[1])

# 海外疫情数据
frequency_out = {}
# 获取表名
sheet_name = wb.sheetnames
for each in sheet_name:
    if '洲' in each:
        ws = wb[each]
        for row in ws.values:
            if row[0] =='国家':
                pass
            else:
                # 写入字典
                frequency_out[row[0]] = float(row[1])


# 创建生成词云方法
def generate_pic(frequency, name):
    # font_path 字体路径 解决不显示中文
    wordcloud = WordCloud(font_path='msyh.ttc',
                          width=1920,
                          height=1080)
    # 根据确诊病例生成词云
    wordcloud.generate_from_frequencies(frequency)
    wordcloud.to_file('%s.png'%(name))
    print("ok!")


generate_pic(frequency_in, "国内疫情词云")
generate_pic(frequency_out, "世界疫情词云")



一个可爱的人