Determining sender/receiver address in transaction Suppose that I were given a wallet address, i can retrieve all the transactions for the particular address.

My question is: 

1) Assuming the wallet address is sender, how could it determine the receiver of the address? Vice versa if the wallet address is receiver, how could it determine the sender address from transaction detail? I have seen few transactions but couldn't think a full proof solution to it.

Taking this transaction as example, how could i know which address actually initiate send bitcoin transaction to the wallet address mz95VxTekXHVZCPVjtK7pF2dMa7yF8QMkM.

2) Using the same transaction id, how could i know the miner fee paid by a particular sender? I know that the both sender address pay a total of 0.000035 BTC fee, but how do I know how much each of them paid initially (the miner fee each of them set before sending transaction)?
There is no 1-to-1 mapping between senders and recipients. That's why things like CoinJoin is possible. Transactions are split in two parts: inputs (that redeem previously unspent outputs) and outputs (that send the coins). The redeemed coins are essentially pooled together before being sent so at this point there is no notion of which coin is which.

The transaction fee are also paid by this pool so no one specifically paid for the transaction but the sum of the inputs.