python讀取excel制作柱狀圖和詞雲圖片


問題描述

需要將excel中的一列內容轉換成柱狀圖和詞雲,所以用到了matplotlib/xlrd/wordcloud三個庫來解決問題

  • xlrd:讀取excel文件
  • matplotlib:畫柱狀圖
  • wordcloud:生成詞雲

具體步驟

  1. xlrd讀取文件:
import xlrd
def start_generate():
    path = "test.xlsx"
    data = xlrd.open_workbook(path)
    sheet1 = data.sheet_by_name('Sheet1') # Sheet1 左下角的sheet
    list1 = sheet1.col_values(0) # 第一列的數據列表
  1. matplotlib:畫柱狀圖
import matplotlib.pyplot as plt
def draw_from_dict(dicdata, RANGE):
    #dicdata:字典的數據。
    #RANGE:截取顯示的字典的長度。
    by_value = sorted(dicdata.items(),key = lambda item:item[1],reverse=True) # 對字典進行排序
    x = []
    y = []

    for d in by_value:
        x.append(d[0])
        y.append(d[1])

    plt.barh(x[0:RANGE], y[0:RANGE]) # 橫向柱狀圖
    plt.tight_layout() # 左側顯示不全,使用該函數
    plt.savefig('plt.png') # 保存
    plt.show()
  1. wordcloud:詞雲
from wordcloud import WordCloud
def draw_from_list(lis): # 傳入的list
    text = ' '.join(lis)

    wordcloud = WordCloud(background_color='white',
                          max_words=300,
                          font_path="Kai.ttf", # 當前目錄下中文楷體 結尾有下載
                          width=1600,
                          height=1000).generate(text)

    wordcloud.to_file("WordCloud.png")
  1. 完整代碼(完成的是對第一列數據的操作,需要其他列數據自行修改)
import xlrd
import matplotlib.pyplot as plt
from wordcloud import WordCloud

def draw_from_list(lis):
    text = ' '.join(lis)
    wordcloud = WordCloud(background_color='white',
                          max_words=300,
                          font_path="Kai.ttf",
                          width=1600,
                          height=1000).generate(text)

    wordcloud.to_file("WordCloud.png")

def draw_from_dict(dicdata, RANGE):
    #dicdata:字典的數據。
    #RANGE:截取顯示的字典的長度。
    by_value = sorted(dicdata.items(),key = lambda item:item[1],reverse=True)
    x = []
    y = []

    for d in by_value:
        x.append(d[0])
        y.append(d[1])

    plt.barh(x[0:RANGE], y[0:RANGE])
    plt.tight_layout()
    plt.savefig('test.png')
    plt.show()

def start_generate():
    path = "test.xlsx"
    data = xlrd.open_workbook(path)
    sheet1 = data.sheet_by_name('Sheet1')
    list1 = sheet1.col_values(0)

    dic = dict()

    for i in list1:
        val = dic.get(i)
        if val:
            dic[i] = val+1
        else:
            dic[i] = 1
    draw_from_list(list1)
    draw_from_dict(dic, len(dic))

if __name__ == '__main__':
    start_generate()

遇到的問題

開始生成柱狀圖的時候,ylable全是亂碼,通過這個鏈接解決了(注意去掉對應配置的'#',最后一步rebuild很重要!)
matplotlib圖例中文亂碼?(知乎回答)

下載鏈接

字體可以在這里下載,可能比鏈接中的那個快:
鏈接: https://pan.baidu.com/s/1Nf8vWOxs5iG7k0EIQm-cew 提取碼: ypk3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM