(11)再次獲取數(shù)據(jù)集的列名,具體實現(xiàn)代碼如下所示。
Index(['Address', 'FLAG', 'Avg min between sent tnx',
'Avg min between received tnx',
'Time Diff between first and last (Mins)', 'Sent tnx', 'Received Tnx',
'Number of Created Contracts', 'Unique Received From Addresses',
'Unique Sent To Addresses', 'min value received', 'max value received ',
'avg val received', 'min val sent', 'max val sent', 'avg val sent',
'min value sent to contract', 'max val sent to contract',
'avg value sent to contract',
'total transactions (including tnx to create contract',
'total Ether sent', 'total ether received',
'total ether sent contracts', 'total ether balance',
' Total ERC20 tnxs', ' ERC20 total Ether received',
' ERC20 total ether sent', ' ERC20 total Ether sent contract',
' ERC20 uniq sent addr', ' ERC20 uniq rec addr',
' ERC20 uniq sent addr.1', ' ERC20 uniq rec contract addr',
' ERC20 min val rec', ' ERC20 max val rec', ' ERC20 avg val rec',
' ERC20 min val sent', ' ERC20 max val sent', ' ERC20 avg val sent',
' ERC20 uniq sent token name', ' ERC20 uniq rec token name'],
dtype='object')
(12)根據(jù)指定的相關(guān)性閾值(0.7),選擇相關(guān)性超過閾值的列,并將這些列的名稱存儲在 to_drop 列表中。最后,打印輸出需要刪除的列數(shù)。具體實現(xiàn)代碼如下所示。
# 閾值設(shè)置為0.7
threshold = 0.7
# 選擇相關(guān)性超過閾值的列
to_drop = [column for column in upper.columns if (any(upper[column] > threshold) or any(upper[column] < -(threshold)))]
# 打印要刪除的列數(shù)
print('有 %d 列需要刪除。' % (len(to_drop)))
執(zhí)行后會輸出:
There are 13 columns to remove.
(13)列表to_drop 包含了根據(jù)相關(guān)性閾值需要刪除的列的名稱,可以通過輸出 to_drop 列表來查看這些列的名稱。具體實現(xiàn)代碼如下所示。
to_drop
執(zhí)行后將輸出顯示需要刪除的列的名稱;
['avg value sent to contract',
'total transactions (including tnx to create contract',
'total ether received',
'total ether sent contracts',
' ERC20 uniq sent addr',
' ERC20 uniq rec addr',
' ERC20 max val rec',
' ERC20 avg val rec',
' ERC20 min val sent',
' ERC20 max val sent',
' ERC20 avg val sent',
' ERC20 uniq sent token name',
' ERC20 uniq rec token name']
(14)創(chuàng)建數(shù)值的熱圖,以可視化數(shù)據(jù)集中各個數(shù)值列之間的相關(guān)性。熱圖使用不同的顏色表示相關(guān)性的強度,正相關(guān)和負相關(guān)分別以不同的顏色顯示,并在熱圖上標注相關(guān)性系數(shù)的數(shù)值。具體實現(xiàn)代碼如下所示。
# 創(chuàng)建數(shù)值值的熱圖
# 創(chuàng)建一個與相關(guān)性矩陣相同大小的全零矩陣,并在上三角部分設(shè)置為True,以遮蓋下三角部分
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True
# 使用白色背景風(fēng)格創(chuàng)建圖形
with sns.axes_style('white'):
# 創(chuàng)建圖形和軸對象
fig, ax = plt.subplots(figsize=(30, 20))
# 生成熱圖,顯示相關(guān)性矩陣,使用RdYlGn顏色圖,以0為中心,方形顯示,標注數(shù)值
sns.heatmap(corr, mask=mask, annot=True, cmap='RdYlGn', center=0, square=True, fmt='.2g')
執(zhí)行后會繪制相關(guān)性矩陣的熱圖(heatmap),如圖11-3所示。這種圖以矩陣的形式展示各個數(shù)值列之間的相關(guān)性,使用不同顏色表示相關(guān)性的強度,正相關(guān)和負相關(guān)分別以不同的顏色顯示。這種圖表有助于可視化數(shù)據(jù)集中各個數(shù)值屬性之間的關(guān)系,特別是相關(guān)性的強弱和方向。通過熱圖,可以快速識別哪些屬性之間存在強相關(guān)性,從而幫助進一步的數(shù)據(jù)分析和建模工作。
圖11-3 ?相關(guān)性矩陣的熱圖
(15)根據(jù) to_drop 列表刪除指定的列,并通過輸出 dataset.columns 來顯示刪除列后的列名,被刪除的列將不再包含在數(shù)據(jù)集中。具體實現(xiàn)代碼如下所示。
# 要刪除的列
drop = ['total transactions (including tnx to create contract','max val sent to contract',' ERC20 avg val rec',' ERC20 max val rec', ' ERC20 avg val sent', ' ERC20 min val sent', ' ERC20 max val sent',' ERC20 uniq sent token name',' ERC20 uniq sent token name',' ERC20 uniq rec token name','max val sent to contract','avg value sent to contract']
# 刪除指定的列
dataset.drop(to_drop, axis=1, inplace=True)
# 顯示刪除列后的列名
dataset.columns
執(zhí)行后會輸出:
Index(['Address', 'FLAG', 'Avg min between sent tnx',
???????'Avg min between received tnx',
???????'Time Diff between first and last (Mins)', 'Sent tnx', 'Received Tnx',
???????'Number of Created Contracts', 'Unique Received From Addresses',
???????'Unique Sent To Addresses', 'min value received', 'max value received ',
???????'avg val received', 'min val sent', 'max val sent', 'avg val sent',
???????'min value sent to contract', 'max val sent to contract',
???????'total Ether sent', 'total ether balance', ' Total ERC20 tnxs',
???????' ERC20 total Ether received', ' ERC20 total ether sent',
???????' ERC20 total Ether sent contract', ' ERC20 uniq sent addr.1',
???????' ERC20 uniq rec contract addr', ' ERC20 min val rec'],
??????dtype='object')
(16)在刪除指定的列后,數(shù)據(jù)集中的列數(shù)將發(fā)生變化,接下來可以使用以下代碼來獲取刪除列后的列數(shù):
len(dataset.columns)
執(zhí)行后會輸出:
27
(17)繪制相關(guān)性矩陣的熱圖,用不同顏色表示不同屬性之間的相關(guān)性強度。正相關(guān)和負相關(guān)分別以不同顏色顯示,而且相關(guān)系數(shù)的數(shù)值也被標注在熱圖上,以幫助更好地理解數(shù)據(jù)屬性之間的關(guān)系。具體實現(xiàn)代碼如下所示。
# 計算數(shù)值列之間的相關(guān)性矩陣
corr = dataset.corr()
# 創(chuàng)建一個與相關(guān)性矩陣相同大小的全零矩陣,并在上三角部分設(shè)置為True,以遮蓋下三角部分
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True
# 使用白色背景風(fēng)格創(chuàng)建圖形
with sns.axes_style('white'):
# 創(chuàng)建圖形和軸對象
fig, ax = plt.subplots(figsize=(30, 20))
# 生成熱圖,顯示相關(guān)性矩陣,使用RdYlGn顏色圖,以0為中心,方形顯示,標注數(shù)值
sns.heatmap(corr, mask=mask, annot=True, cmap='RdYlGn', center=0, square=True, fmt='.2g')
執(zhí)行后會繪制數(shù)值屬性相關(guān)性熱圖,如圖11-4所示,
圖11-4 ?數(shù)值屬性相關(guān)性熱圖
(18)繪制箱線圖,可以分別繪制變量的箱線圖以及帶有 FLAG 對比的變量的箱線圖。函數(shù)中的參數(shù) variable 是要繪制箱線圖的變量名稱。此外,通過 columns 變量獲取了數(shù)據(jù)集的列名。最后,獲取數(shù)據(jù)集中從第三列開始(索引為2)的所有列名。具體實現(xiàn)代碼如下所示。
# 繪制變量的箱線圖
def box_plot(variable):
plt.figure(figsize=(6,4))
sns.boxplot(y=dataset[variable])
plt.title("Boxplot for {}".format(variable))
plt.show()
# 繪制帶有 FLAG 對比的變量的箱線圖
def box_plot_y(variable):
plt.figure(figsize=(6,4))
sns.boxplot(y=dataset[variable], x=dataset['FLAG'])
plt.title("Boxplot for {} wrt Flag".format(variable))
plt.show()
# 獲取數(shù)據(jù)集的列名
columns = dataset.columns
columns
columns[2:]
執(zhí)行后會輸出:
Index(['Address', 'FLAG', 'Avg min between sent tnx',
'Avg min between received tnx',
'Time Diff between first and last (Mins)', 'Sent tnx', 'Received Tnx',
'Number of Created Contracts', 'Unique Received From Addresses',
'Unique Sent To Addresses', 'min value received', 'max value received ',
'avg val received', 'min val sent', 'max val sent', 'avg val sent',
'min value sent to contract', 'max val sent to contract',
'total Ether sent', 'total ether balance', ' Total ERC20 tnxs',
' ERC20 total Ether received', ' ERC20 total ether sent',
' ERC20 total Ether sent contract', ' ERC20 uniq sent addr.1',
' ERC20 uniq rec contract addr', ' ERC20 min val rec'],
dtype='object')
(19)針對數(shù)據(jù)集中每個數(shù)值列的箱線圖繪制,進行了單變量分析。具體實現(xiàn)代碼如下所示。
# 單變量分析 - 繪制每個數(shù)值列的箱線圖
for col in columns[2:]:
????box_plot(col)
上述代碼通過循環(huán)遍歷數(shù)據(jù)集中從第三列開始的每個數(shù)值列,并為每個列繪制了一個箱線圖,例如列“Sent_tnx”的箱線圖效果如圖11-5所示。箱線圖有助于顯示數(shù)據(jù)的分布、中位數(shù)、上下四分位數(shù)以及異常值的情況,從而幫助了解每個變量的統(tǒng)計特性。
圖11-5 ?列“Sent_tnx”的箱線圖
(20)執(zhí)行了帶有 FLAG 對比的箱線圖繪制,為數(shù)據(jù)集中從第三列開始的每個數(shù)值列繪制了箱線圖。具體實現(xiàn)代碼如下所示。
for col in columns[2:]:
??box_plot_y(col)
執(zhí)行后會繪制與數(shù)據(jù)集中每個數(shù)值列相關(guān)的箱線圖,并將它們與 FLAG 列進行了對比。具體繪制了多少個箱線圖取決于數(shù)據(jù)集中數(shù)值列的數(shù)量,例如列“Sent_tnx”的帶有 FLAG 對比的箱線圖效果如圖11-6所示。這些箱線圖可以幫助您了解每個數(shù)值列在欺詐和非欺詐交易之間的分布情況和差異。
圖11-6 ?列“Sent_tnx”的帶有 FLAG 對比的箱線圖
(21)計算訓(xùn)練數(shù)據(jù)集中 "FLAG" 列值為 1 的占比,即欺詐交易的百分比。具體計算方式是將 "FLAG" 列中值為 1 的行數(shù)除以總行數(shù),然后將結(jié)果乘以 100,得到百分比。具體實現(xiàn)代碼如下所示。文章來源:http://www.zghlxwxcb.cn/news/detail-785099.html
fraud = (sum(dataset['FLAG'])/len(dataset['FLAG'].index))*100
fraud
在上述代碼中,將計算的結(jié)果存儲在變量fraud,然后使用第2行代碼查看欺詐交易的百分比。執(zhí)行后會輸出:文章來源地址http://www.zghlxwxcb.cn/news/detail-785099.html
22.14205873386851
未完待續(xù)
到了這里,關(guān)于(11-3-03)檢測以太坊區(qū)塊鏈中的非法賬戶: 數(shù)據(jù)分析(2)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!