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