Why in a IPV4 packet, checksum is calculated against the IP header and not on the data like transport protocols tcp/udp?
It's a matter of speed: the Internet backbone routers direct millions of packets per second and calculating a checksum over the entire contents would drastically slow down the packet processing.
The IPv6 specification removes even the header checksum to allow routers to route packets even faster. (It's just one of many steps IPv6 has taken to reduce the amount of time routers must inspect every packet. It all adds up.) Discarding corrupted packets is now placed entirely on end nodes.