統計類別數量並且使用pyplot畫出柱狀圖


從數據庫中讀取數據,具體操作為:

# -*- coding: utf-8 -*-
from numpy import *
import numpy as np
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/db_websiterecommend?charset=utf8')
sql = pd.read_sql('t_url_classify', engine, chunksize = 110000)
output='C:\\Users\\lenovo\\Desktop\\count_.xls'
'''z
用create_engine建立連接,連接地址的意思依次為“數據庫格式(mysql)+程序名(pymysql)+賬號密碼@地址端口/數據庫名(test)”,最后指定編碼為utf8;
all_gzdata是表名,engine是連接數據的引擎,chunksize指定每次讀取1萬條記錄。這時候sql是一個容器,未真正讀取數據。
'''
counts = [ i['classify'].value_counts() for i in sql] #逐塊統計
counts = pd.concat(counts).groupby(level=0).sum() #合並統計結果,把相同的統計項合並(即按index分組並求和)
counts = counts.reset_index() #重新設置index,將原來的index作為counts的一列。
counts.columns = ['type', 'num']
counts=pd.DataFrame(counts)
print(counts)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
print(counts.type)
print(counts.num)
#plt.style.use('mystyle')
x=np.arange(counts.type.size)
plt.bar(x,counts.num,color='red')
ax=plt.gca()
ax.set_xticklabels(counts.type)
plt.show()

然后對於統計出來的數據是列表的,所以要進行整合成兩個類別,所以就要將其轉換成pandas,然后進行賦給其值列名,然后才方便后面的操作

否則不進行上面的操作的話,就得出以下的結果,這樣子的話就達不到目的:

 

畫圖的代碼為:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
print(counts.type)
print(counts.num)
#plt.style.use('mystyle')
x=np.arange(counts.type.size)
plt.bar(x,counts.num,color='red')
ax=plt.gca()
ax.set_xticklabels(counts.type)
plt.show()
使用plt.bar()去畫圖
首先是數據是dataframe格式的。
也就是兩個變量,即兩列
例如:
type num
0 優秀作品 11120
1 創新與合作 823
2 教學資源 24914
3 新聞動態 3177
4 競賽與評獎 14114
5 競賽組織 9645
6 視頻教學 98
7 項目與招聘 4734
接下來:使用bar()繪制圖形:
由於plot只接受數值類型,所以我們首先要:
輸入:x = np.arange(data.category.size)
就是轉換為其有多少個數據
畫出來的圖為:
接下來要設置x軸標識為類別:
ax=plt.gca()
ax.set_xticklabels(counts.type)

 

然后畫出來的圖為:
注意:

 

紅色部分不能定義為index,否則輸不出來,因為其默認就是有index
或者對於使用D.plot()的方式的話,就是可以這樣子:
counts.plot(kind='bar',color='red')
ax=plt.gca()
ax.set_xticklabels(counts.type)
plt.show()

 保存圖片:

 plt.savefig("bar.jpg"

 


免責聲明!

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



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