def processDataAndCreateEntities():
    global amtTransObjDict, entityList, transactList
    sortedTransactionDict = cl.OrderedDict(
        reversed(sorted(amtTransObjDict.items())))
    print sortedTransactionDict.keys()
    print sortedTransactionDict.__len__()
    topTenPercent = sortedTransactionDict.__len__() * 0.005

    print topTenPercent
    listRequired = list(sortedTransactionDict)
    print listRequired[0]

    elm = 0
    addressEntityMap = {}

    while (topTenPercent > 1):
        keyVal = listRequired[elm]
        ElementList = sortedTransactionDict[keyVal]
        for Element in ElementList:
            addrInp = Element[0]
            adrO = Element[1]
            # print "Inputs ----------------------"
            flag = 0
            list = []
            foundAddress = []
            sourceEntity = None
            sinkEntity = None
            for adrI in addrInp:
                if (adrI.address not in list):
                    list.append(adrI.address)
                if (adrI.address in addressEntityMap.keys()):
                    flag = 1
                    foundAddress.append(adrI.address)

            if (flag == 0):
                sourceEntity = Entity(list)
                entityList.append(sourceEntity)
                for element in list:
                    addressEntityMap[element] = sourceEntity
            else:
                Elist = []
                for eachAddr in foundAddress:
                    if (addressEntityMap[eachAddr] not in Elist):
                        Elist.append(addressEntityMap[eachAddr])

                parentEntity = Elist[0]
                for addr in list:
                    if addr not in parentEntity.getAddrList():
                        parentEntity.addAddress(addr)
                        addressEntityMap[addr] = parentEntity

                if (Elist.__len__() > 1):
                    for ent in Elist[1:]:
                        addrHold = ent.getAddrList()
                        inTrans = ent.getInTransact()
                        outTrans = ent.getOutTransact()
                        for addr in addrHold:
                            parentEntity.addAddress(addr)
                            addressEntityMap[addr] = parentEntity
                        for inT in inTrans:
                            inT.updateDest(parentEntity)
                            parentEntity.addInTransact(inT)
                        for outT in outTrans:
                            outT.updateOrigin(parentEntity)
                            parentEntity.addOutTransact(outT)
                        entityList.remove(ent)
                sourceEntity = parentEntity
            # v1 = g.add_vertex()
            # entityAddr[v1] = list

            # print "Outputs ----------------------"
            # v2 = g.add_vertex()
            if (adrO.address in addressEntityMap.keys()):
                sinkEntity = addressEntityMap[adrO.address]
            else:
                sinkEntity = Entity([adrO.address])
                entityList.append(sinkEntity)
                addressEntityMap[adrO.address] = sinkEntity

            transactObj = Transaction(sourceEntity, sinkEntity, adrO.value)
            sourceEntity.addOutTransact(transactObj)
            sinkEntity.addInTransact(transactObj)
            transactList.append(transactObj)
            # entityAddr[v2] = [adrO.address]
            # edgeTrans = g.add_edge(v1, v2)
            # edgeWeight[edgeTrans] = adrO.value
            # transactionHashValue[edgeTrans] = transObj.hash
        print elm
        elm += 1
        topTenPercent -= 1