Skip to content

Commit

Permalink
Updated
Browse files Browse the repository at this point in the history
  • Loading branch information
prateekpanwar committed Dec 21, 2018
1 parent ac98bad commit a9212bd
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 6 deletions.
21 changes: 15 additions & 6 deletions classification.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,18 +134,27 @@ def validation(i):
#X = X[(X['Trans'] > 2) & (X['Received'] > 200)]
#X1 = X[X['Final bal'] <= 1]
#X.drop(X1.index.values, axis=0, inplace=True)

formula_address = []
for i in range(len(X)):
rec = str(int(X.iloc[i]['Received']))
rec = len(rec)
trans = str(X.iloc[i]['Trans'])
trans = len(trans)
max_val = max([rec, trans])
min_val = min([rec, trans])
calc = min_val - (math.e/max_val)
formula_address.append(calc)
X = X.reset_index()
#X['Final bal'] = ((X['Final bal']) / (X['Trans']))
X['Received'] = (X['Received'] - X['Trans']) / (X['Trans']+X['Received'])
#X['Sent'] = (X['Sent']) / (X['Sent']+X['Received'])
X['Received'] = abs(X['Received'] - X['Trans']) / (X['Trans']+X['Received'])
X['ins'] = pd.Series(formula_address)
#X['outs'] = ((X['ins'] - X['outs']) / (X['outs']+X['ins']))

addr = list(X['Address'])
X = X.drop(['Address', 'Trans', 'ins', 'index', 'outs', 'Sent', 'Final bal'], axis=1)
#X = X.drop(['Address', 'Trans', 'index', 'outs', 'Sent', 'Final bal'], axis=1)

clustering = KMeans(n_clusters = 2, random_state=11) # 3 for groups and 5 are random points
clustering.fit(X)
clustering = KMeans(n_clusters = 3, random_state=7) # 3 for groups and 5 are random points
clustering.fit(X[['Received', 'ins']])

pred_labels = clustering.labels_

Expand Down
92 changes: 92 additions & 0 deletions classification_v2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 21 12:45:20 2018
@author: agile
"""

import blockchain
from sklearn.cluster import KMeans
from datetime import datetime
import pandas as pd
import math
import pickle




def validation(i):
address_details = pd.DataFrame(columns=['Address', 'Trans', 'Final bal', 'Received', 'Sent'])
for j in i:
try:
temp_addr = blockchain.blockexplorer.get_address(j)
n_tx = temp_addr.n_tx
final_bal = temp_addr.final_balance/100000000
recd = temp_addr.total_received/100000000
sent = temp_addr.total_sent/100000000

temp = {'Address': j, 'Trans': n_tx, 'Final bal': final_bal, 'Received': recd, 'Sent': sent}
address_details = address_details.append(temp , ignore_index=True)
except Exception as e:
print(e, j)
return address_details


clustering = pickle.load(open("cluster.sav", 'rb'))
X = validation(['37k5U5xQJkojFHkHVgrY7Dq7xtJJNSqVid', '17YyZSNFt31pzGXfZtrzs7Y5Nd56rG2uU5',
'39vi392JLo4ksHUQrajddPJoK1wH8rmUyS', '1CSvNmJ4kCgQr9ubPaerrdhx7yUdLgKyKo',
'1JNW9w4kPiiBgaEW12xT5kiHxQgZxFRTQ4'])

print(datetime.now())
print('--------------------------------')

intermediate_address = X[(X['Trans'] <= 5) & (X['Final bal'] <= 10)]
intermediate_address.Sent = 'intermediate address'
X.drop(intermediate_address.index.values, axis=0, inplace=True)

still_waiting = X[X['Trans'] == 1]
still_waiting.Sent = 'still waiting'
X.drop(still_waiting.index.values, axis=0, inplace=True)
cold_store = X[abs(X['Final bal'] - X['Received']) <= 10]
cold_store.Sent = 'Cold Storage'
X.drop(cold_store.index.values, axis=0, inplace=True)
formula_address = []
for i in range(len(X)):
rec = str(int(X.iloc[i]['Received']))
rec = len(rec)
trans = str(X.iloc[i]['Trans'])
trans = len(trans)
max_val = max([rec, trans])
min_val = min([rec, trans])
calc = min_val - (math.e/max_val)
formula_address.append(calc)
X = X.reset_index()

X['Received'] = abs(X['Received'] - X['Trans']) / (X['Trans']+X['Received'])
X['Sent'] = pd.Series(formula_address)

addr = list(X['Address'])
predictions = clustering.predict(X[['Received', 'Sent']])

final_labels=pd.DataFrame(columns=['Address', 'Label'])

for i in range(len(addr)):
label = ''
if predictions[i] == 0:
label = 'Other'
elif predictions[i] == 1:
label = 'Light Exchange'
else:
label = 'Main Exhange'

final_labels = final_labels.append({'Address': addr[i], 'Label': label}, ignore_index=True)

for i in intermediate_address, cold_store, still_waiting:
i = i[['Address', 'Sent']]
i.columns = ['Address', 'Label']
try:
final_labels = pd.concat([final_labels, i], ignore_index=True)
except:
1

Binary file added cluster.sav
Binary file not shown.

0 comments on commit a9212bd

Please sign in to comment.