What is the difference between I2C and UART?
About the same as the difference between a tennis shoe and an elephant. That is they serve completely different purposes.
I2C is inter-chip communication. UART is for communicating with an external device.
How do I know when to choose between SPI and I2C?
You look at the device you want to communicate with. If it is a I2C device, SPI makes no sense. If it is a SPI device, I2C makes no sense.