unzip_file not working with the remote file

As @Buttered_Toast and @Sébastien Serre mentioned I first need to save file to a local directory before unzipping. So here is my final code:

$source="http://downloads.wordpress.org/theme/ona-creative.1.0.0.zip";
$file = get_theme_root() . "https://wordpress.stackexchange.com/" . $slug . '.zip';
file_put_contents( $file, file_get_contents( $source ));
$unzipfile = unzip_file( $file, get_theme_root() );