1. 程式人生 > >python 資料分析---實現程式碼

python 資料分析---實現程式碼

程式碼實現了分析資料集所需的基本量值:均值方差協方差相關係數,也給出了繪製各類圖示的程式碼:柱狀直方餅狀箱式散點。

# -*- coding: utf-8 -*-
"""
Created on Fri Nov  9 10:25:46 2018

@author: user
"""

import numpy as np

"""
 生成虛擬資料
"""
n=5  # 特徵數目
m=6  # 樣本數目
data=np.random.rand(n,m)*10

"""
 基本描述性統計量
"""
d_mean=np.mean(data,0)  # mean(data):全部的均值,mean(data,0):按行做均值, mean(data,1):按列做均值
d_median=np.median(data)  # 中位數,解釋和使用同上
d_ptp=np.ptp(data,0)  # 極差,解釋和使用同上
d_var=np.var(data,0)  # 方差,同上
d_std=np.std(data,0)  # 標準差,同上
d_CV=d_std/d_mean  # 變異係數,即無量綱化,表示資料群的穩定程度. 此處除法是對應元素相除
for i in range(n):
    d_Zscore=(data[i,:]-np.mean(data,1))/np.std(data,1)  # 每個樣本第 i 個特徵取值的偏差程度


"""
衡量相關程度
"""
d_cov=np.cov(data[:,0],data[:,1])  # 前兩列資料的協方差矩陣 (0,0):第一列方差,(0.1)(1,0):兩列資料協方差,(1,1)第二列方差
d_cor=np.corrcoef(data[:,0],data[:,1])  # 前兩列資料的相關係數  各個元素解釋同上

"""
圖表分析
"""
"""
圖表分析(一):單資料描述
"""
import matplotlib
data=np.vectorize(int)(data)  # 修改一下資料,方便使用圖標表示
def drawBar(data):  # 柱狀圖
    n,m=np.shape(data)
    data=data.reshape(1,m*n)[0,::]
    xticks=list(set(data))  # 資料的種類
    dataGroup={}
    for i in data.tolist():
        if not i in dataGroup:
            dataGroup[i]=1
        else:
            dataGroup[i]=dataGroup[i]+1
    matplotlib.pyplot.bar(range(len(xticks)),[dataGroup.get(xtick,0) for xtick in xticks], align='center')
    matplotlib.pyplot.xticks(range(len(xticks)), xticks)  #設定柱的文字說明;第一個引數為文字說明的橫座標;第二個引數為文字說明的內容
    matplotlib.pyplot.xlabel('Score')  #設定座標的文字說明
    matplotlib.pyplot.ylabel('Frequency')
    matplotlib.pyplot.title('Scores Of Students')    #設定標題
    matplotlib.pyplot.show()
# drawBar(data)
def drawPie(data):   # 餅狀圖
    n,m=np.shape(data)
    data=data.reshape(1,m*n)[0,::]
    xticks=list(set(data))  # 資料的種類
    dataGroup={}
    for i in data.tolist():
        if not i in dataGroup:
            dataGroup[i]=1
        else:
            dataGroup[i]=dataGroup[i]+1
    matplotlib.pyplot.pie([dataGroup.get(xtick, 0) for xtick in xticks], labels=xticks, autopct='%1.1f%%')
    matplotlib.pyplot.title('Scores Of Students')
    matplotlib.pyplot.show()
    
def drawHist(data):  # 直方圖:橫座標為連續的量化區間,而不是間斷的種類。
    matplotlib.pyplot.hist(data, m*n)
    matplotlib.pyplot.xlabel('Scores')
    matplotlib.pyplot.ylabel('Frequency')
    matplotlib.pyplot.title('Scores Of Students')
    matplotlib.pyplot.show()
"""
圖表分析(二):資料關係描述
"""
def drawScatter(data1, data2):  # 散點圖
    matplotlib.pyplot.scatter(data1, data2)
    matplotlib.pyplot.xlabel('data1')
    matplotlib.pyplot.ylabel('data2')
    matplotlib.pyplot.title('data1 & data2')
    matplotlib.pyplot.show()
# drawScatter(data[:,1], data[:,2])
    
def drawBox(data):  # 箱式圖: 繪製出來的箱形圖中,包含3種資訊:(1) Q2所指的紅線為中位數;
                       # (2)Q1所指的藍框下側為下四分位數,Q3所指的藍框上側為上四分位數,Q3-Q1為四分為差。四分位差也是衡量資料的發散程度的指標之一。
                               # (3)上界線和下界線是距離中位數1.5倍四分位差的線,高於上界線或者低於下界線的資料為異常值。
    n,m=np.shape(data)
    data=data.reshape(1,m*n)[0,::]
    matplotlib.pyplot.boxplot([data], labels=['data'])
    matplotlib.pyplot.title('boxplot')
    matplotlib.pyplot.show()
# drawBox(data)  
    




其他的分析程式碼後續補充。