中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

數據挖掘實戰-客戶價值分析

發布時間:2020-02-29 16:24:27 來源:網絡 閱讀:336 作者:專注地一哥 欄目:編程語言

數據簡單分析

import pandas as pd

?

datafile= '../data/air_data.csv' ?# 航空原始數據,第一行為屬性標簽

resultfile = '../tmp/explore.csv' ?# 數據探索結果表

?

# 讀取原始數據,指定UTF-8編碼(需要用文本編輯器將數據裝換為UTF-8編碼)

data = pd.read_csv(datafile, encoding = 'utf-8')

?

# 包括對數據的基本描述,percentiles參數是指定計算多少的分位數表(如1/4分位數、中位數等)

explore = data.describe(percentiles = [], include = 'all').T ?# T是轉置,轉置后更方便查閱

explore['null'] = len(data)-explore['count'] ?# describe()函數自動計算非空值數,需要手動計算空值數

?

explore = explore[['null', 'max', 'min']]

explore.columns = [u'空值數', u'最大值', u'最小值'] ?# 表頭重命名

'''

這里只選取部分探索結果。

describe()函數自動計算的字段有count(非空值數)、unique(唯一值數)、top(頻數最高者)、

freq(最高頻數)、mean(平均值)、std(方差)、min(最小值)、50%(中位數)、max(最大值)

'''

簡單可視化

import pandas as pd

import matplotlib.pyplot as plt

?

datafile= '../data/air_data.csv' ?# 航空原始數據,第一行為屬性標簽

?

# 讀取原始數據,指定UTF-8編碼(需要用文本編輯器將數據裝換為UTF-8編碼)

data = pd.read_csv(datafile, encoding = 'utf-8')

?

# 客戶信息類別

# 提取會員入會年份

from datetime import datetime

ffp = data['FFP_DATE'].apply(lambda x:datetime.strptime(x,'%Y/%m/%d'))

ffp_year = ffp.map(lambda x : x.year)

# 繪制各年份會員入會人數直方圖

fig = plt.figure(figsize = (8 ,5)) ?# 設置畫布大小

plt.rcParams['font.sans-serif'] = 'SimHei' ?# 設置中文顯示

plt.rcParams['axes.unicode_minus'] = False

plt.hist(ffp_year, bins='auto', color='#0504aa')

plt.xlabel('年份')

plt.ylabel('入會人數')

plt.title('各年份會員入會人數')

plt.show()

plt.close

?

# 提取會員不同性別人數

male = pd.value_counts(data['GENDER'])['']

female = pd.value_counts(data['GENDER'])['']

# 繪制會員性別比例餅圖

fig = plt.figure(figsize = (7 ,4)) ?# 設置畫布大小

plt.pie([ male, female], labels=['',''], colors=['lightskyblue', 'lightcoral'],

???????autopct='%1.1f%%')

plt.title('會員性別比例')

plt.show()

plt.close

數據清洗

import numpy as np

import pandas as pd

?

datafile = '../data/air_data.csv' ?# 航空原始數據路徑

cleanedfile = '../tmp/data_cleaned.csv' ?# 數據清洗后保存的文件路徑

?

# 讀取數據

airline_data = pd.read_csv(datafile,encoding = 'utf-8')

print('原始數據的形狀為:',airline_data.shape)

?

# 去除票價為空的記錄

airline_notnull = airline_data.loc[airline_data['SUM_YR_1'].notnull() &

???????????????????????????????????airline_data['SUM_YR_2'].notnull(),:]

print('刪除缺失記錄后數據的形狀為:',airline_notnull.shape)

?

# 只保留票價非零的,或者平均折扣率不為0且總飛行公里數大于0的記錄。

index1 = airline_notnull['SUM_YR_1'] != 0

index2 = airline_notnull['SUM_YR_2'] != 0

index3 = (airline_notnull['SEG_KM_SUM']> 0) & (airline_notnull['avg_discount'] != 0)

index4 = airline_notnull['AGE'] > 100 ?# 去除年齡大于100的記錄

airline = airline_notnull[(index1 | index2) & index3 & ~index4]

print('數據清洗后數據的形狀為:',airline.shape)

airline.to_csv(cleanedfile) ?# 保存清洗后的數據

原始數據的形狀為: (62988, 44)
刪除缺失記錄后數據的形狀為: (62299, 44)
數據清洗后數據的形狀為: (62043, 44)

屬性選擇、構造與數據標準化

# 屬性選擇、構造與數據標準化

?

import pandas as pd

import numpy as np

?

# 讀取數據清洗后的數據

cleanedfile = '../tmp/data_cleaned.csv' ?# 數據清洗后保存的文件路徑

airline = pd.read_csv(cleanedfile, encoding = 'utf-8')

# 選取需求屬性

airline_selection = airline[['FFP_DATE','LOAD_TIME','LAST_TO_END',

?????????????????????????????????????'FLIGHT_COUNT','SEG_KM_SUM','avg_discount']]

print('篩選的屬性前5行為:\n',airline_selection.head())

?

?

?

# 代碼7-8

?

# 構造屬性L

L = pd.to_datetime(airline_selection['LOAD_TIME']) - \

pd.to_datetime(airline_selection['FFP_DATE'])

L = L.astype('str').str.split().str[0]

L = L.astype('int')/30

?

# 合并屬性

airline_features = pd.concat([L,airline_selection.iloc[:,2:]],axis = 1)

airline_features.columns = ['L','R','F','M','C']

print('構建的LRFMC屬性前5行為:\n',airline_features.head())

?

# 數據標準化

from sklearn.preprocessing import StandardScaler

data = StandardScaler().fit_transform(airline_features)

np.savez('../tmp/airline_scale.npz',data)

print('標準化后LRFMC五個屬性為:\n',data[:5,:])

篩選的屬性前5行為:

FFP_DATE LOAD_TIME LAST_TO_END FLIGHT_COUNT SEG_KM_SUM avg_discount

0 2006/11/2 2014/3/31 1 210 580717 0.961639

1 2007/2/19 2014/3/31 7 140 293678 1.252314

2 2007/2/1 2014/3/31 11 135 283712 1.254676

3 2008/8/22 2014/3/31 97 23 281336 1.090870

4 2009/4/10 2014/3/31 5 152 309928 0.970658

構建的LRFMC屬性前5行為:

L R F M C

0 90.200000 1 210 580717 0.961639

1 86.566667 7 140 293678 1.252314

2 87.166667 11 135 283712 1.254676

3 68.233333 97 23 281336 1.090870

4 60.533333 5 152 309928 0.970658

標準化后LRFMC五個屬性為:

[[ 1.43579256 -0.94493902 14.03402401 26.76115699 1.29554188]

[ 1.30723219 -0.91188564 9.07321595 13.12686436 2.86817777]

[ 1.32846234 -0.88985006 8.71887252 12.65348144 2.88095186]

[ 0.65853304 -0.41608504 0.78157962 12.54062193 1.99471546]

[ 0.3860794 -0.92290343 9.92364019 13.89873597 1.34433641]]

import pandas as pd

import numpy as np

from sklearn.cluster import KMeans ?# 導入kmeans算法

?

# 讀取標準化后的數據

airline_scale = np.load('../tmp/airline_scale.npz')['arr_0']

k = 5 ?# 確定聚類中心數

?

# 構建模型,隨機種子設為123

kmeans_model = KMeans(n_clusters = k,n_jobs=4,random_state=123)

fit_kmeans = kmeans_model.fit(airline_scale) ?# 模型訓練

?

# 查看聚類結果

kmeans_cc = kmeans_model.cluster_centers_ ?# 聚類中心

print('各類聚類中心為:\n',kmeans_cc)

kmeans_labels = kmeans_model.labels_ ?# 樣本的類別標簽

print('各樣本的類別標簽為:\n',kmeans_labels)

r1 = pd.Series(kmeans_model.labels_).value_counts() ?# 統計不同類別樣本的數目

print('最終每個類別的數目為:\n',r1)

# 輸出聚類分群的結果

cluster_center = pd.DataFrame(kmeans_model.cluster_centers_,\

?????????????columns = ['ZL','ZR','ZF','ZM','ZC']) ??# 將聚類中心放在數據框中

cluster_center.index = pd.DataFrame(kmeans_model.labels_ ).\

??????????????????drop_duplicates().iloc[:,0] ?# 將樣本類別作為數據框索引

print(cluster_center)

?

?

# 代碼7-10

?

?

import matplotlib.pyplot as plt

# 客戶分群雷達圖

labels = ['ZL','ZR','ZF','ZM','ZC']

legen = ['客戶群' + str(i + 1) for i in cluster_center.index] ?# 客戶群命名,作為雷達圖的圖例

lstype = ['-','--',(0, (3, 5, 1, 5, 1, 5)),':','-.']

kinds = list(cluster_center.iloc[:, 0])

# 由于雷達圖要保證數據閉合,因此再添加L列,并轉換為 np.ndarray

function(){ //亨達 http://www.hantecglobal.org.cn/

cluster_center = pd.concat([cluster_center, cluster_center[['ZL']]], axis=1)

centers = np.array(cluster_center.iloc[:, 0:])

?

# 分割圓周長,并讓其閉合

n = len(labels)

angle = np.linspace(0, 2 * np.pi, n, endpoint=False)

angle = np.concatenate((angle, [angle[0]]))

?

# 繪圖

fig = plt.figure(figsize = (8,6))

ax = fig.add_subplot(111, polar=True) ?# 以極坐標的形式繪制圖形

plt.rcParams['font.sans-serif'] = ['SimHei'] ?# 用來正常顯示中文標簽

plt.rcParams['axes.unicode_minus'] = False ?# 用來正常顯示負號

# 畫線

for i in range(len(kinds)):

????ax.plot(angle, centers[i], linestyle=lstype[i], linewidth=2, label=kinds[i])

# 添加屬性標簽

ax.set_thetagrids(angle * 180 / np.pi, labels)

plt.title('客戶特征分析雷達圖')

plt.legend(legen)

plt.show()

plt.close

各類聚類中心為:

[[ 1.1606821 -0.37729768 -0.08690742 -0.09484273 -0.15591932]

[-0.31365557 1.68628985 -0.57402225 -0.53682279 -0.17332449]

[ 0.05219076 -0.00264741 -0.22674532 -0.23116846 2.19158505]

[-0.70022016 -0.4148591 -0.16116192 -0.1609779 -0.2550709 ]

[ 0.48337963 -0.79937347 2.48319841 2.42472188 0.30863168]]

各樣本的類別標簽為:

[4 4 4 3 1 1]

最終每個類別的數目為:

3 24661

0 15739

1 12125

4 5336

2 4182

dtype: int64

ZL ZR ZF ZM ZC

0

4 1.160682 -0.377298 -0.086907 -0.094843 -0.155919

2 -0.313656 1.686290 -0.574022 -0.536823 -0.173324

0 0.052191 -0.002647 -0.226745 -0.231168 2.191585

3 -0.700220 -0.414859 -0.161162 -0.160978 -0.255071

1 0.483380 -0.799373 2.483198 2.424722 0.308632

?


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民勤县| 特克斯县| 五华县| 黎川县| 莱阳市| 甘洛县| 湖南省| 石河子市| 青河县| 雷山县| 莲花县| 郯城县| 河南省| 光泽县| 盖州市| 陇南市| 铜山县| 永清县| 通城县| 突泉县| 衡阳县| 新宾| 娄烦县| 沾化县| 荥经县| 怀柔区| 嘉鱼县| 临夏县| 巍山| 呼玛县| 资溪县| 阳春市| 连平县| 揭阳市| 黄梅县| 鸡西市| 出国| 疏附县| 云阳县| 玉山县| 康保县|