基于基站定位数据的商圈分析代码详细解释
這一章的代碼注意,作者只在windows下面運行過,沒有在linux下面運行過
第一個代碼是為了看下數據的穩定程度,代碼中主要關注點是那個離差標準化
#-*- coding: utf-8 -*- #數據標準化到[0,1] import pandas as pd#參數初始化 filename = '../data/business_circle.xls' #原始數據文件 standardizedfile = '../tmp/standardized.xls' #標準化后數據保存路徑data = pd.read_excel(filename, index_col = u'基站編號') #讀取數據data = (data - data.min())/(data.max() - data.min()) #離差標準化 data = data.reset_index()data.to_excel(standardizedfile, index = False) #保存結果第二個代碼的意圖是為了獲知把數據分成幾類合適
#-*- coding: utf-8 -*- #譜系聚類圖 import pandas as pd#參數初始化 standardizedfile = '../data/standardized.xls' #標準化后的數據文件 data = pd.read_excel(standardizedfile, index_col = u'基站編號') #讀取數據import matplotlib.pyplot as plt from scipy.cluster.hierarchy import linkage,dendrogram #這里使用scipy的層次聚類函數Z = linkage(data, method = 'ward', metric = 'euclidean') #譜系聚類圖 P = dendrogram(Z, 0) #畫譜系聚類圖 plt.show()縱軸是類別數量,在3的地方橫向畫一條橫線,此時對應就是分成3類。
第三個代碼的分類總數根據第二個代碼來確定
#-*- coding: utf-8 -*- #層次聚類算法 import pandas as pd#參數初始化 standardizedfile = '../data/standardized.xls' #標準化后的數據文件 k = 3 #聚類數 data = pd.read_excel(standardizedfile, index_col = u'基站編號') #讀取數據from sklearn.cluster import AgglomerativeClustering #導入sklearn的層次聚類函數 model = AgglomerativeClustering(n_clusters = k, linkage = 'ward')#AgglomerativeClustering的意思是層次聚類 model.fit(data) #訓練模型#詳細輸出原始數據及其類別 r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1) #詳細輸出每個樣本對應的類別,Series是種數據結構 print("r=",r)#把建模后的數據傳給r r.columns = list(data.columns) + [u'聚類類別'] #重命名表頭,這樣同一類數據就會有相同的標簽 print("************************************************************") print("list(data.columns)",list(data.columns)) print("------------------------------------------------------------") print("------------------------------------------------------------") print("r.columns=",r.columns )import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號style = ['ro-', 'go-', 'bo-']#這個表示繪圖的樣式,r代表紅色,g代表綠色,b代表藍色,o-中,o表示用粗點標記,-表示連線 xlabels = [u'工作日人均停留時間', u'凌晨人均停留時間', u'周末人均停留時間', u'日均人流量'] pic_output = '../tmp/type_' #聚類圖文件名前綴#下面兩重for循環的意思是,外循環控制畫哪個圖,內循環負責把一條條彩線畫上去 #前面分成幾類,那么下面就會有幾個圖,圖中的每條線代表excel中的整行數據 for i in range(k): #逐一作圖,作出不同樣式plt.figure()tmp = r[r[u'聚類類別'] == i].iloc[:,:4] #前面把建模后的數據傳給了r,所以這里從r中獲取其中一類的所有行和前4列數據。#iloc是index location的意思,意思是用序號對行進行索引print("tmp=",tmp)print("ENNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN")for j in range(len(tmp)):#由于前面k=3,總數據量為431,所以j的范圍是1~146,1~146 1~139plt.plot(range(1, 5), tmp.iloc[j], style[i])#這個range指的是對數據的前四列屬性的具體值#上面的tmp.iloc[j]指的是分類后,某一特定類早上的某條數據。#上面的這個style用到了前面定義的一句話style = ['ro-', 'go-', 'bo-']plt.xticks(range(1, 5), xlabels, rotation = 20) #坐標標簽,rotation就是x軸標簽的傾斜程度#如果要根據需要來修改程序,那么上面的兩個(1,5)和前面的tmp = r[r[u'聚類類別'] == i].iloc[:,:4]這句話中的范圍要同時修改plt.title(u'商圈類別%s' %(i+1)) #我們計數習慣從1開始plt.subplots_adjust(bottom=0.15) #調整底部plt.savefig(u'%s%s.png' %(pic_output, i+1)) #保存圖片上面這個代碼的意思有兩部分:
一、聚類
二、三類數據各自繪圖
----------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------
最后來分析這三個圖,這三個圖到底什么意思呢?
這三個圖分別代表不同地點的情況。
注意,人均停留時間是不能根據離差標準化后的數據來進行觀察的。
離差標準化只是反應數據的波動程度。
由于最終目的是僅僅在一個進行經營,所以需要在以上三個圖(也就是三個地點中)中選擇同時滿足以下兩點的圖(地點):
一、在三個“停留時間”屬性中的數值波動不大
二、在原數據集中停留時間較長
以此進行商圈建設,會有較好的收益。
總結:對三個地方獲取數據,代碼的最終目標是判斷哪個地方建立商區比較合適,其余兩個地方放棄。
總結
以上是生活随笔為你收集整理的基于基站定位数据的商圈分析代码详细解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深圳乐易网络有限公司机试题String
- 下一篇: 电商产品评论数据情感分析代码详解