在我本地Mysql_local_db數據庫創建了一個pandas數據表用來對pandas模塊的學習 學習過程借鑑學習藍鯨的網站分析筆記python
一、建立表mysql
CREATE TABLE pandastest( 城市 VARCHAR(255), 用戶ID INT(19), 訂單日期 DATE, 金額 DECIMAL(19,4), 金額區間 VARCHAR(255), 訂單數 INT(19), 上次訂單日期 DATE, 距上次訂單天數 INT(19), 上次金額 DECIMAL(19,4), 距上次訂單間隔區間 VARCHAR(255), 品類數 INT(19), KEY city (城市), KEY res_id(用戶ID) )ENGINE=INNODB DEFAULT CHARSET=utf8;
二、Kettle導入測試數據 對數據進行了處理sql
三、執行SQL查詢數據數據庫
四、Pycharm中編寫代碼數組
用pandas模塊進行鏈接MySQL數據庫 numpy 模塊進行建立數組 matplotlib進行繪圖
學習
代碼以下:測試
#coding:utf-8 import sys import MySQLdb from datetime import datetime import numpy as np import matplotlib.pyplot as plt import pandas as pd #系統編碼置爲'utf-8' reload(sys) sys.setdefaultencoding('utf-8') #鏈接mysql 其中conn爲pandas模塊 read_sql方法的第二個參數 conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='密碼',port=3306,db='local_db',charset='utf8') sql=''' SELECT 城市,用戶ID,訂單日期,金額,金額區間,訂單數 FROM pandastest WHERE 訂單日期<'2016-12-26' limit 10000 ''' #用pandas模塊中read_sql方法獲取數據表(含表頭和數據) real_sql 包含兩個參數 一個是執行的sql 這裏用sql變量代替 也可用字符串代替 一個是con=conn df = pd.read_sql(sql, con=conn) conn.close() #練習對df中訂單日期字段進行拆分紅年月日操做 for循環爲遍歷日期型數據 所以用datetime模塊中的strftime方法將日期型轉換爲字符型 date_time=pd.DataFrame((x.strftime("%Y-%m-%d").split('-') for x in df['訂單日期']),columns=['year','month','day']) #將date_time拆分開後的年月日和df的數據橫行合併 df=pd.merge(df,date_time,right_index=True, left_index=True) print df #按金額區間進行彙總 jinequjian=df.groupby('金額區間')['金額區間'].agg(len) print jinequjian #圖表字體爲華文細黑 字號爲11 plt.rc('font', family='STXihei', size=11) #建立一個一維數組 a=np.array([1,2,3,4]) #建立條形圖 數據源爲jinequjian這個變量(金額區間彙總) 設置顏色 透明度 居中對齊和圖表邊框 plt.barh([1,2,3,4],jinequjian,color='#052B6C',alpha=0.8,align='center',edgecolor='white') #y軸標題 plt.ylabel('金額區間') #x軸標題 plt.xlabel('客戶數') #x軸長度 plt.xlim(0,8000) #y軸長度 plt.ylim(0,6) #圖表的標題 plt.title('各金額區間客戶分佈狀況') #圖例及顯示位置 plt.legend(['客戶數'], loc='upper right') #背景網格線的顏色樣式 尺寸 和透明度 plt.grid(color='#375589',linestyle='--', linewidth=2,axis='y',alpha=0.4) #設置y軸上的數據分類名稱和金額區間group by 的字段保持一致 plt.yticks(a,('(000到500元含)','(500到1000元含)','(1000到1500元含)','(1500元以上)')) #展示表 plt.show()