從數據庫中讀取數據,具體操作為:
# -*- 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"

