數據特征分析:1.基礎分析概述& 分布分析


 基礎分析概述

幾個基礎分析思路:

分布分析

對比分析

統計分析

帕累托分析

正態性檢測

相關性分析

分布分析

 

分布分析是研究數據的分布特征和分布類型,分定量數據定性數據區分基本統計量。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline
#讀取數據
data = pd.read_csv(r'C:\Users\Administrator\Desktop\python數據分析\深圳羅湖二手房信息.csv',
                   engine = 'python')
data.head()

plt.scatter()散點圖
plt.scatter(data['經度'], data['緯度'], #做個簡單的三角圖,按照經緯度作為它的X Y軸
                s = data['房屋單價']/500, #按照房屋的單價來控制圖形的大小
                c = data['參考總價'], cmap = 'Reds',#按照參考總價來顯示顏色
                alpha = 0.4)        #########plt.scatter()散點圖

 

plt.scatter() 散點圖

如果有底圖就可以把它的位置給分布出來;點越大代表房屋的單價越高,顏色越深代表總價越高;

通過數據可見,一共8個字段
 定量字段:房屋單價,參考首付,參考總價,*經度,*緯度,*房屋編碼
 定性字段:小區,朝向

 1.極差 

#極差
def d_range(df, *cols):
    krange = [] #空列表,為了保持它的值
    for col in cols:
        crange = df[col].max() - df[col].min()
        krange.append(crange)
    return (krange)  ##創建函數求極差
key1 = "參考總價"
key2 = "參考首付"
dr = d_range(data, key1, key2)
print("%s極差為:%f \n%s極差為:%f"% ( key1, dr[0], key2, dr[1])) #求出數據對應列的極差
參考總價極差為:175.000000 
參考首付極差為:52.500000

從極差中看到銷售的穩定程度

2. 頻率分布情況:定量字段

(① 通過直方圖直接判斷分組組數)

.hist(bins = 8) 直方圖
#頻率分布情況(通過直方圖直接判斷分組組數)
data[key1].hist(bins = 8) #參考總價 簡單查看數據分組,確定分組組數 --->>一般8-16組,這里按照8組為參考

可以看出主要集中在160萬以上,60萬以下。

 頻率分布的划分方式:直方圖可以快速的看到它的排列情況,把它拆分:分組划分

 

(②求出分組區間)

 pd.cut(data[key1], 10, right = False).value_count(sort=True) sort=True <-等價-> ascending=True
#頻率分布情況,分組區間 ;對參考總價進行分組。 
gcut = pd.cut(data[key1], 10, right = False) #分成10份,是否包含末端值選False
gcut  #type(gcut)-->>Series
gcut_count = gcut.value_counts(sort = False) #做一個統計,不排序
gcut_count

# pd.cut(x, bins, right):按照組數對x分組,且返回一個和x同樣長度的分組dataframe,right → 是否右邊包含,默認True
# 通過groupby查看不同組的數據頻率分布

data['%s分組區間'% key1] = gcut.values  
data.head()

 

(③ 求出目標字段下頻率分布的其他統計量  --->>>  頻數,頻率,累計頻率)

 分組情況,做累計頻率的分組情況

r_zj = pd.DataFrame(gcut_count)
r_zj

.apply(lambda x:"%.2f%%"% (x*100)) 以百分比顯示
.style.bar(subset = ['頻率', '累計頻率']) 在格子中的條形圖
#區間出現頻率
r_zj = pd.DataFrame(gcut_count)
r_zj.rename(columns = {gcut_count.name:'頻數'}, inplace = True) #重命名下,修改頻數字段名
r_zj['頻率'] = r_zj['頻數']/r_zj['頻數'].sum()       #計算頻率
r_zj['累計頻率'] = r_zj['頻率'].cumsum()     #計算累計頻率  
r_zj['頻率%'] = r_zj['頻率'].apply(lambda x:"%.2f%%"% (x*100)) #以百分比顯示頻率
r_zj['累計頻率%'] = r_zj['累計頻率'].apply(lambda x:"%.2f%%"% (x*100)) #以百分比顯示累計頻率
r_zj.style.bar(subset = ['頻率', '累計頻率']) #可視化顯示

 

(④ 繪制頻率直方圖)

r_zj['頻率'].plot(kind = 'bar',figsize = (12, 2),grid = True,color = 'k',alpha = 0.4 ) 直方圖
for i, j, k in zip(range(x), y, m):     plt.text(i - 0.1, j + 0.01, '%i'% k, color = 'k')
#直方圖
r_zj['頻率'].plot(kind = 'bar',
                figsize = (12, 2),
                grid = True,
                color = 'k',
                alpha = 0.4 ) #plt.title('參考總價分布頻率直方圖')
x = len(r_zj)
y = r_zj['頻率']
m = r_zj['頻數']

for i, j, k in zip(range(x), y, m):
    plt.text(i - 0.1, j + 0.01, '%i'% k, color = 'k')  #-0.1 、+0.01是調整它的位置的
#添加頻率標簽

頻率分布情況 - 定性字段

( ① 通過計數統計判斷不同類別的頻率)

# 頻率分布情況 - 定性字段 -->> ① 通過計數統計判斷不同類別的頻率
cx_g = data['朝向'].value_counts(sort = True)
print(cx_g)
# 可視化顯示
r_cx = pd.DataFrame(cx_g)
r_cx.rename(columns ={cx_g.name:'頻數'}, inplace = True)  # 修改頻數字段名
r_cx['頻率'] = r_cx / r_cx['頻數'].sum()  # 計算頻率
r_cx['累計頻率'] = r_cx['頻率'].cumsum()  # 計算累計頻率
r_cx['頻率%'] = r_cx['頻率'].apply(lambda x: "%.2f%%" % (x*100))  # 以百分比顯示頻率
r_cx['累計頻率%'] = r_cx['累計頻率'].apply(lambda x: "%.2f%%" % (x*100))  # 以百分比顯示累計頻率
r_cx.style.bar(subset=['頻率','累計頻率'], color='#d65f5f',width=100)

 

( ② 繪制頻率直方圖、餅圖)

.plot 由Series、DataFrame直接繪制圖表; plt.pie() 繪制餅圖
# 頻率分布情況 - 定量字段
# ② 繪制頻率直方圖、餅圖

plt.figure(num = 1,figsize = (12,2))
r_cx['頻率'].plot(kind = 'bar',
                 width = 0.8,
                 rot = 0,
                 color = 'k',
                 grid = True,
                 alpha = 0.5)
plt.title('參考總價分布頻率直方圖')
# 繪制直方圖

plt.figure(num = 2)
plt.pie(r_cx['頻數'],
       labels = r_cx.index,
       autopct='%.2f%%',
       shadow = True)
plt.axis('equal') #調整它的形狀
# 繪制餅圖

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM