Python 2.7_pandas鏈接MySQL數據處理_20161229

在我本地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()

 

相關文章
相關標籤/搜索