1. 程式人生 > >Python資料字典處理Excel,並統計總數,畫出餅圖

Python資料字典處理Excel,並統計總數,畫出餅圖

     之前給大家分享了使用pyechats庫畫折線圖和柱狀圖,也是讀取Excel表格中資料來畫圖的,這裡我使用的是Python3;現在給大家分享使用matplotlib畫圖,也是讀取本地Excel表格中的資料來畫圖,但是這個我們採用資料字典,可以統計Excel中的資料。而且今天分享的這個方法很實用,有很大的擴充套件性。很多畫圖的方法都可以採用這個程式碼;

    現在也是給大家逐一講解,這有利於大家理解和學習,可以更好的學習Python,後面會附上完整的程式碼執行結果截圖,首先我們需要匯入讀取Excel的庫xrld,和畫圖的庫matplotlib。安裝方法我就不多說了,這些庫和之前安裝庫的方法基本是一樣的。

匯入所需的庫,如下:

import xlrd
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from pylab import *

from datetime import date,datetime

開啟本地Excel表格,並讀取相應的列和行:

# 開啟檔案
    workbook = xlrd.open_workbook(r'C:\Users\ASUS\Desktop\txt1\python3\yxz22.xlsx')
    # 獲取所有sheet
    #print(workbook.sheet_names()) # [u'sheet1', u'sheet2']
    # 根據sheet索引或者名稱獲取sheet內容
    sheet1 = workbook.sheet_by_index(0) # sheet索引從0開始
    # sheet的名稱,行數,列數
    #print(sheet1.name,sheet1.nrows,sheet1.ncols)
    # 獲取整行和整列的值(陣列)
    rows = sheet1.row_values(0)
    cols4 = sheet1.col_values(4)# 獲取第四行內容
    cols3 = sheet1.col_values(3) # 獲取第三列內容
    cols2 = sheet1.col_values(2)
    cols1 = sheet1.col_values(1)
    cols0 = sheet1.col_values(0)

接下來就是採用資料字型統計Excel中表格中相同的物件資料,同時把它存入陣列a和陣列b中:

dic={}#採用資料字典統計文章型別數目
    for item in cols0:
        if item in dic.keys():
            dic[item]+=1
        else:
            dic[item]=1
    a=[]
    b=[]
    for key in dic:
        a.append(key)        
        b.append(dic[key])

之後根據上面陣列a和陣列b中的值進行基本的數學計算,算出每種相同的資料型別在總的型別數量中所佔的比例,這裡所使用的的數學的基本演算法:

 for u in b:
        i=u/t
        size.append(i)
        plt.plot(size)

然後根據剛剛計算的結果匯入到畫圖的庫中,然後畫圖餅圖:

 plt.pie(size,labels=label,colors="rgb",autopct='%1.lf%%',shadow=True,startangle=90)

以下就是完整的程式碼的:

import xlrd
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from pylab import *

from datetime import date,datetime

def read_excel():
    # 開啟檔案
    workbook = xlrd.open_workbook(r'C:\Users\ASUS\Desktop\txt1\python3\yxz22.xlsx')
    # 獲取所有sheet
    #print(workbook.sheet_names()) # [u'sheet1', u'sheet2']
    # 根據sheet索引或者名稱獲取sheet內容
    sheet1 = workbook.sheet_by_index(0) # sheet索引從0開始
    # sheet的名稱,行數,列數
    #print(sheet1.name,sheet1.nrows,sheet1.ncols)
    # 獲取整行和整列的值(陣列)
    rows = sheet1.row_values(0)
    cols4 = sheet1.col_values(4)# 獲取第四行內容
    cols3 = sheet1.col_values(3) # 獲取第三列內容
    cols2 = sheet1.col_values(2)
    cols1 = sheet1.col_values(1)
    cols0 = sheet1.col_values(0)
    
    dic={}#採用資料字典統計文章型別數目
    for item in cols0:
        if item in dic.keys():
            dic[item]+=1
        else:
            dic[item]=1
    a=[]
    b=[]
    for key in dic:
        a.append(key)        
        b.append(dic[key])
    plt.rcParams['font.sans-serif']=['SimHei']#正常顯示中文標籤
    size=[]
    t=sum(b)#統計總的發表篇幅
    label=a
    #計算每種型別所佔的比例
    for u in b:
        i=u/t
        size.append(i)
        plt.plot(size)
    plt.title('文章型別比例圖')
    plt.pie(size,labels=label,colors="rgb",autopct='%1.lf%%',shadow=True,startangle=90)
    #plt.axis('equal')
    plt.show()
    

if __name__ == '__main__':
    read_excel()

下面就是結果截圖:


這個是我爬取某個部落格存入Excel中的資料,經過剛才的程式碼讀取,最終畫出來的餅圖;

好了,今天就分享到這裡了,如果有什麼疑問或者需求請給我留言,或許我能夠解決一二!