I am curious about privacy of bitcoin transactions. I heard that if you are good enough at hacking, you can get private data from bitcoin transaction, or associate someone to transaction. How is it possible? Is it possible to associate someone to transaction without IP (for example: I don't know IP, but know email or other private data), or is there some other ways to do so? Can someone explain this side of BTC transactions really well?
IP addresses are not private information. As for email and name no one can get that information based on the blockchain data alone unless you go out of your way to publicly associate your identity with a specific address. For example by mentioning your email, name and address together on some website. Another possibility is that you reveal your identity to some service like a bitcoin exchange or payment processor and then send or receive bitcoin using that service. That service will now have some idea of what addresses belong to you simply because you used their service. The world at large will not know though.
Note also that you have many addresses in your wallet not just one address. Ideally you use a different address each time you want to receive bitcoin. This is better from a privacy and security standpoint. It also makes it easy for you to track who sent you how much by giving each person a different address for every transaction.