數據特征分析:1.分布分析
阿新 • • 發佈:2018-09-17
分享 ini zip 返回 二手 sort label cat width
幾個基礎分析思路:
分布分析、對比分析、統計分析、帕累托分析、正態性檢測、相關性分析
分布分析
分布分析是研究數據的分布特征和分布類型,分定量數據、定性數據區分基本統計量。
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(data[‘經度‘], data[‘緯度‘], #做個簡單的三角圖,按照經緯度作為它的X Y軸 s = data[‘房屋單價‘]/500, #按照房屋的單價來控制圖形的大小 c = data[‘參考總價‘], cmap = ‘Reds‘,#按照參考總價來顯示顏色 alpha = 0.4) #########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. 頻率分布情況:定量字段(① 通過直方圖直接判斷分組組數)
#頻率分布情況(通過直方圖直接判斷分組組數) data[key1].hist(bins = 8) #簡單查看數據分組,確定分組組數 --->>一般8-16組,這裏按照8組為參考
可以看出主要集中在160萬以上,60萬以下。
頻率分布的劃分方式:直方圖可以快速的看到它的排列情況,把它拆分:分組劃分
頻率分布情況:定量字段(②求出分組區間)
#頻率分布情況,分組區間 gcut = pd.cut(data[key1], 10, right = False) #分成10份,是否包含末端值選False gcut 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.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 ) #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‘) #添加頻率標簽
頻率分布情況 - 定性字段( ① 通過計數統計判斷不同類別的頻率)
# 頻率分布情況 - 定性字段 # ① 通過計數統計判斷不同類別的頻率 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)
頻率分布情況 - 定量字段( ② 繪制頻率直方圖、餅圖)
# 頻率分布情況 - 定量字段 # ② 繪制頻率直方圖、餅圖 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‘) # 繪制餅圖
數據特征分析:1.分布分析