1. 程式人生 > >【python資料探勘課程】十一.Pandas、Matplotlib結合SQL語句視覺化分析

【python資料探勘課程】十一.Pandas、Matplotlib結合SQL語句視覺化分析

這是非常好的一篇文章,可以認為是我做資料分析的轉折點,為什麼呢?
因為這是我做資料分析第一次引入SQL語句,然後愛不釋手;結合SQL語句返回結果進行資料分析的效果真的很好,很多大神看到可能會笑話晚輩,但是如果你是資料分析的新人,那我強烈推薦,尤其是結合網路爬蟲進行資料分析的。希望這篇文章對你有所幫助,如果文章中存在錯誤或不足之處,還請高擡貴手~

1.MySQL資料庫知識


其中建立的資料庫表csdn內容如下所示:

CREATE TABLE `csdn` (  
  `ID` int(11) NOT NULL AUTO_INCREMENT,  
  `URL` varchar(100) COLLATE utf8_bin DEFAULT NULL,  
  `Author` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '作者',  
  `Artitle` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '標題',  
  `Description` varchar(400) COLLATE utf8_bin DEFAULT NULL COMMENT '摘要',  
  `Manage` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '資訊',  
  `FBTime` datetime DEFAULT NULL COMMENT '釋出日期',  
  `YDNum` int(11) DEFAULT NULL COMMENT '閱讀數',  
  `PLNum` int(11) DEFAULT NULL COMMENT '評論數',  
  `DZNum` int(11) DEFAULT NULL COMMENT '點贊數',  
  PRIMARY KEY (`ID`)  
) ENGINE=InnoDB AUTO_INCREMENT=9371 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;  
執行結果如下圖所示:



        如果再安裝過程中,報錯:Fatal error in launcher: Unable to create process using “”C:\Program Files (x86)\Python33\python.exe“ ”C:\Program Files (x86)\Python33\pip.exe“使用下面的命令安裝。




2.繪製24小時部落格對比

SQL語句如下:

select HOUR(FBTime) as hh, count(*) as cnt from csdn group by hh;

分析博主24小時寫部落格的個時間段的部落格數量:

程式碼如下所示:
# coding=utf-8
'''
' 這篇程式碼主要講述獲取MySQL中資料,再進行簡單的統計
' 統計採用SQL語句進行 By:Eastmount CSDN
'''

import matplotlib.pyplot as plt
import matplotlib
import pandas as pd
import numpy as np
import pylab
import MySQLdb
from pylab import *


# 根據SQL語句輸出24小時的柱狀圖
try:
    conn = MySQLdb.connect(host='localhost',user='root',
                         passwd='123456',port=3306, db='test01')
    cur = conn.cursor() #資料庫遊標

    #防止報錯:UnicodeEncodeError: 'latin-1' codec can't encode character
    conn.set_character_set('utf8')
    cur.execute('SET NAMES utf8;')
    cur.execute('SET CHARACTER SET utf8;')
    cur.execute('SET character_set_connection=utf8;')
    sql = "select HOUR(FBTime) as hh, count(*) as cnt from csdn group by hh;"
    cur.execute(sql)
    result = cur.fetchall()        #獲取結果複合紙給result
    hour1 = [n[0] for n in result]
    print hour1
    num1 = [n[1] for n in result]
    print num1
    
    N = 23  
    ind = np.arange(N)  #賦值0-23  
    width=0.35  
    plt.bar(ind, num1, width, color='r', label='sum num')   
    #設定底部名稱    
    plt.xticks(ind+width/2, hour1, rotation=40) #旋轉40度
    for i in range(23):   #中心底部翻轉90度
        plt.text(i, num1[i], str(num1[i]),
                 ha='center', va='bottom', rotation=45) 
    plt.title('Number-24Hour')    
    plt.xlabel('hours')
    plt.ylabel('The number of blog')
    plt.legend()
    plt.savefig('08csdn.png',dpi=400)    
    plt.show()


#異常處理
except MySQLdb.Error,e:
    print "Mysql Error %d: %s" % (e.args[0], e.args[1])
finally:
    cur.close()
    conn.commit()  
    conn.close()

       
執行結果如下圖所示,突然發現我10點鐘沒有寫過部落格,哈哈!所以引數np.arange(23)設定成23,從圖中看出午夜寫部落格很平凡。

3.每年每月部落格對比

SQL語句如下:

select DATE_FORMAT(FBTime,'%Y%m') as 年份, count(*) as 數量 
from csdn_blog
group by DATE_FORMAT(FBTime,'%Y%m');

分析博主從2013年開始,每個月份寫部落格的數量:


程式碼如下所示:

# coding=utf-8
'''
' 這篇程式碼主要講述獲取MySQL中資料,再進行簡單的統計
' 統計採用SQL語句進行 By:Eastmount
'''

import matplotlib.pyplot as plt
import matplotlib
import pandas as pd
import numpy as np
import pylab
import MySQLdb
from pylab import *
import matplotlib.pyplot as plt

#根據SQL語句輸出散點
try:
    conn = MySQLdb.connect(host='localhost',user='root',
                         passwd='123456',port=3306, db='test01')
    cur = conn.cursor() #資料庫遊標

    #防止報錯:UnicodeEncodeError: 'latin-1' codec can't encode character
    conn.set_character_set('utf8')
    cur.execute('SET NAMES utf8;')
    cur.execute('SET CHARACTER SET utf8;')
    cur.execute('SET character_set_connection=utf8;')
    sql = '''select DATE_FORMAT(FBTime,'%Y%m'), count(*) from csdn
            group by DATE_FORMAT(FBTime,'%Y%m');'''
    cur.execute(sql)
    result = cur.fetchall()        #獲取結果複合紙給result
    date1 = [n[0] for n in result]
    print date1
    num1 = [n[1] for n in result]
    print num1
    print type(date1)
    plt.scatter(date1,num1,25,color='white',marker='o',
                edgecolors='#0D8ECF',linewidth=3,alpha=0.8)
    plt.title('Number-12Month')    
    plt.xlabel('Time')
    plt.ylabel('The number of blog')    
    plt.savefig('02csdn.png',dpi=400) 
    plt.show()


#異常處理
except MySQLdb.Error,e:
    print "Mysql Error %d: %s" % (e.args[0], e.args[1])
finally:
    cur.close()
    conn.commit()  
    conn.close()
            
執行結果如下圖所示:

然後發現改圖執行效果不好,下面進行改進。

4.通過DataFrame每年每月部落格對比

SQL語句查詢每年發表部落格資料:
select DATE_FORMAT(FBTime,'%Y'), Count(*) from csdn
group by DATE_FORMAT(FBTime,'%Y');

核心程式碼如下所示:

# coding=utf-8
'''
' 這篇程式碼主要講述獲取MySQL中資料,再進行簡單的統計
' 統計採用SQL語句進行 By:Eastmount
'''

import matplotlib.pyplot as plt
import matplotlib
import pandas as pd
import numpy as np
import pylab
import MySQLdb
from pylab import *
from pandas import *


# 根據SQL語句輸出24小時的柱狀圖
try:
    conn = MySQLdb.connect(host='localhost',user='root',
                         passwd='123456',port=3306, db='test01')
    cur = conn.cursor() #資料庫遊標

    #防止報錯:UnicodeEncodeError: 'latin-1' codec can't encode character
    conn.set_character_set('utf8')
    cur.execute('SET NAMES utf8;')
    cur.execute('SET CHARACTER SET utf8;')
    cur.execute('SET character_set_connection=utf8;')
    sql = '''select DATE_FORMAT(FBTime,'%Y'), Count(*) from csdn
                group by DATE_FORMAT(FBTime,'%Y');'''
    cur.execute(sql)
    result = cur.fetchall()        #獲取結果複合紙給result
    day1 = [n[0] for n in result]
    print len(day1)
    num1 = [n[1] for n in result]
    print len(num1),type(num1)
    matplotlib.style.use('ggplot')
    df=DataFrame(num1, index=day1,columns=['Nums'])
    plt.show(df.plot(kind='bar'))
    plt.savefig('05csdn.png',dpi=400)


#異常處理
except MySQLdb.Error,e:
    print "Mysql Error %d: %s" % (e.args[0], e.args[1])
finally:
    cur.close()
    conn.commit()  
    conn.close()

    
執行結果如下圖所示,同時設定SQL語句"%Y-%m-%d"可以設定年月日。



發現2015年我寫部落格最多,下面是繪製月份的對比,原理一樣。



同時如果想對比多個使用者,參考下面程式碼:
df=DataFrame(np.random.rand(6,4),index=['one','two','three','four','five','six'],
        columns=['A','B','C','D'])
df.columns.name='Genus'
參考文章:http://www.cnblogs.com/splended/p/5229699.html

5.時間序列圖

核心程式碼如下所示:
# coding=utf-8
'''
' 這篇程式碼主要講述獲取MySQL中資料,再進行簡單的統計
' 統計採用SQL語句進行 By:Eastmount CSDN
'''

import matplotlib.pyplot as plt
import matplotlib
import pandas as pd
import numpy as np
import pylab
import MySQLdb
from pylab import *


# 根據SQL語句輸出24小時的柱狀圖
try:
    conn = MySQLdb.connect(host='localhost',user='root',
                         passwd='123456',port=3306, db='test01')
    cur = conn.cursor() #資料庫遊標

    #防止報錯:UnicodeEncodeError: 'latin-1' codec can't encode character
    conn.set_character_set('utf8')
    cur.execute('SET NAMES utf8;')
    cur.execute('SET CHARACTER SET utf8;')
    cur.execute('SET character_set_connection=utf8;')
    sql = '''select DATE_FORMAT(FBTime,'%Y-%m-%d'), Count(*) from csdn
                group by DATE_FORMAT(FBTime,'%Y-%m-%d');'''
    cur.execute(sql)
    result = cur.fetchall()        #獲取結果複合紙給result
    day1 = [n[0] for n in result]
    print len(day1)
    num1 = [n[1] for n in result]
    print len(num1),type(num1)
    matplotlib.style.use('ggplot')
    #獲取第一天
    start = min(day1)
    print start
    #np.random.randn(len(num1)) 生成正確圖形 正態分佈隨機數
    ts = pd.Series(np.random.randn(len(num1)),
                   index=pd.date_range(start, periods=len(num1)))
    ts = ts.cumsum()
    ts.plot()
    plt.title('Number-365Day')    
    plt.xlabel('Time')
    plt.ylabel('The number of blog')
    plt.savefig('04csdn.png',dpi=400)    
    plt.show()


#異常處理
except MySQLdb.Error,e:
    print "Mysql Error %d: %s" % (e.args[0], e.args[1])
finally:
    cur.close()
    conn.commit()  
    conn.close()
            
執行結果如下所示:

同時如何設定具體的部落格數量呢?設定num1引數總數遞增的曲線,更多知識明天上班來解決及學習啦。

最後希望這篇文章對你有所幫助,尤其是我的學生和接觸資料探勘、資料分析的博友。這篇文字主要是記錄一些程式碼片段,作為線上筆記,也希望對你有所幫助。
一醉一輕舞,一夢一輪迴。
一曲一人生,一世一心願。
最近真的天天辦公室搞到12點多,有點對不起某些人了,而且今天心情不太好,對不住女神啦!
哎,歸去,也無風雨也無晴。
哎,綠么,亦有雪月亦有情。
老師,真是個神奇的職業,今天給學生輔導論文,從下午2點到晚上10點,醉了。
(By:Eastmount 2017-03-17 半夜12點  http://blog.csdn.net/eastmount/)



相關推薦

python資料課程.PandasMatplotlib結合SQL語句視覺分析

這是非常好的一篇文章,可以認為是我做資料分析的轉折點,為什麼呢?因為這是我做資料分析第一次引入SQL語句,然後愛不釋手;結合SQL語句返回結果進行資料分析的效果真的很好,很多大神看到可能會笑話晚輩,但是如果你是資料分析的新人,那我強烈推薦,尤其是結合網路爬蟲進行資料分析的。希

python資料課程二.PandasMatplotlib結合SQL語句對比圖分析

一. 直方圖四圖對比        資料庫如下所示,包括URL、作者、標題、摘要、日期、閱讀量和評論數等。        執行結果如下所示,其中繪製多個圖的核心程式碼為:        p1 = plt.subplot(221)        plt.bar(ind, num

python資料課程九.鳶尾花資料視覺線性迴歸決策樹花樣分析

這是《Python資料探勘課程》系列文章,也是我這學期上課的部分內容。本文主要講述鳶尾花資料集的各種分析,包括視覺化分析、線性迴歸分析、決策樹分析等,通常一個數據集是可以用於多種分析的,希望這篇文章對大

python資料課程.PandasMatplotlibPCA繪圖實用程式碼補充

這篇文章主要是最近整理《資料探勘與分析》課程中的作品及課件過程中,收集了幾段比較好的程式碼供大家學習。同時,做資料分析到後面,除非是研究演算法創新的,否則越來越覺得資料非常重要,才是有價值的東西。後面的課程會慢慢講解Python應用在Hadoop和Spark中,以及netwo

python資料課程五.Matplotlib呼叫imshow()函式繪製熱圖

前面系列文章講過資料探勘的各種知識,最近在研究人類時空動力學分析和冪率定律,發現在人類興趣轉移模型中,可以通過熱圖(斑圖)來進行描述的興趣轉移,如下圖所示。下一篇文章將簡單普及人類動力學相關知識研究。這

python資料課程八.線性迴歸及多項式迴歸分析四個案例分享

這是《Python資料探勘課程》系列文章,也是我這學期大資料金融學院上課的部分內容。本文主要講述和分享線性迴歸作業中,學生們做得比較好的四個案例,經過我修改後供大家學習,內容包括:    1.線性迴歸預測Pizza價格案例    2.線性迴歸分析波士頓房價案例    3.隨機

python資料課程六.邏輯迴歸LogisticRegression分析鳶尾花資料

今天是教師節,容我先感嘆下。祝天下所有老師教師節快樂,這是自己的第二個教師節,這一年來,無限感慨,有給一個人的指導,有給十幾個人講畢設,有幾十人的實驗,有上百人的課堂,也有給上千人的Python網路直播

python資料課程四.Scipy呼叫curve_fit實現曲線擬合

        前面系列文章講過各種知識,包括繪製曲線、散點圖、冪分佈等,而如何在在散點圖一堆點中擬合一條直線,也變得非常重要。這篇文章主要講述呼叫Scipy擴充套件包的curve_fit函式實現曲線擬

python資料課程七.社交網路Networkx庫分析人物關係(初識篇)

這是《Python資料探勘課程》系列文章,也是我大資料金融學院上課的部分內容。本章主要講述複雜網路或社交網路基礎知識,通過Networkx擴充套件包繪製人物關係,並分析了班級學生的關係學院資訊。本篇文章為初始篇,基礎文章希望對你有所幫助,如果文章中存在錯誤或不足支援,還請海涵

python資料課程.KNN最近鄰分類演算法分析詳解及平衡秤TXT資料集讀取

這是《Python資料探勘課程》系列文章,也是我這學期上課的部分內容及書籍的一個案例。本文主要講述KNN最近鄰分類演算法、簡單實現分析平衡秤資料集,希望這篇文章對大家有所幫助,同時提供些思路。內容包括:

python資料課程.樸素貝葉斯分類器詳解及中文文字輿情分析

這是《Python資料探勘課程》系列文章,也是我上課內容及書籍中的一個案例。本文主要講述樸素貝葉斯分類演算法並實現中文資料集的輿情分析案例,希望這篇文章對大家有所幫助,提供些思路。內容包括:1.樸素貝葉斯數學原理知識    2.naive_bayes用法及簡單案例    3.

Python資料課程四.決策樹DTC資料分析及鳶尾資料分析

        希望這篇文章對你有所幫助,尤其是剛剛接觸資料探勘以及大資料的同學,同時準備嘗試以案例為主的方式進行講解。如果文章中存在不足或錯誤的地方,還請海涵~一. 分類及決策樹介紹1.分類        分類其實是從特定的資料中挖掘模式,作出判斷的過程。比如Gmail郵箱

Python資料課程五.線性迴歸知識及預測糖尿病例項

        希望這篇文章對你有所幫助,尤其是剛剛接觸資料探勘以及大資料的同學,同時準備嘗試以案例為主的方式進行講解。如果文章中存在不足或錯誤的地方,還請海涵~        同時這篇文章是我上課的內容,所以參考了一些知識,強烈推薦大家學習斯坦福的機器學習Ng教授課程和Sc

Python資料課程六.NumpyPandasMatplotlib包基礎知識

        前面幾篇文章採用的案例的方法進行介紹的,這篇文章主要介紹Python常用的擴充套件包,同時結合資料探勘相關知識介紹該包具體的用法,主要介紹Numpy、Pandas和Matplotlib三

Python資料課程七.PCA降維操作及subplot子圖繪製

        這篇文章主要介紹四個知識點,也是我那節課講課的內容。        1.PCA降維操作;        2.Python中Sklearn的PCA擴充套件包;        3.Matplotlib的subplot函式繪製子圖;        4.通過Kmean

Python資料課程八.關聯規則挖掘及Apriori實現購物推薦

        這篇文章主要介紹三個知識點,也是我《資料探勘與分析》課程講課的內容。        1.關聯規則挖掘概念及實現過程;        2.Apriori演算法挖掘頻繁項集;        3.Python實現關聯規則挖掘及置信度、支援度計算。一. 關聯規則挖掘概

Python資料課程.安裝Python及爬蟲入門介紹

        最近因為需要給大資料金融學院的學生講解《Python資料探勘及大資料分析》的課程,所以在這裡,我將結合自己的上課內容,詳細講解每個步驟。作為助教,我更希望這門課程以實戰為主,同時按小組劃分學生,每個小組最後都提交一個基於Python的資料探勘及大資料分析相關

python資料課程邏輯迴歸LogisticRegression分析鳶尾花資料

plt.scatter(X[:50,0], X[:50,1], color='red',marker='o', label='setosa') 呼叫scatter()繪製散點圖,第一個引數為第一列資料(長度),第二個引數為第二列資料(寬度),第三、四個引數為設定點的顏色為紅色,款式為圓圈,最後標

Python資料課程三.Kmeans聚類程式碼實現作業及優化

        這篇文章直接給出上次關於Kmeans聚類的籃球遠動員資料分析案例,同時介紹這次作業同學們完成的圖例,最後介紹Matplotlib包繪圖的優化知識。        希望這篇文章對你有所幫助,尤其是剛剛接觸資料探勘以及大資料的同學,同時準備嘗試以案例為主的方式進行

python資料筆記八.線性迴歸及多項式迴歸分析四個案例分享

python資料探勘課程】十八.線性迴歸及多項式迴歸分析四個案例分享 #2018-03-30 18:24:56 March Friday the 13 week, the 089 day SZ SSMR 1.線性迴歸預測Pizza價格案例 2.線性迴歸分析波士頓房