<｜begin▁of▁sentence｜>### Instruction:
Given a graph with weighted edges [('0', '3', 3), ('0', '1', -5), ('0', '2', 2), ('1', '2', 4), ('2', '3', 1)], can you compute the shortest paths between all pairs of nodes using Johnson's Algorithm provided by NetworkX, considering there could be negative weights?
### Response:
import networkx as nx

# Create a weighted directed graph
G = nx.DiGraph()
G.add_weighted_edges_from([
    ('0', '3', 3),
    ('0', '1', -5),
    ('0', '2', 2),
    ('1', '2', 4),
    ('2', '3', 1)
])

# Use Johnson's algorithm to find all pairs shortest paths
all_pairs_shortest_paths = nx.johnson(G, weight='weight')

# Access the shortest path from node '0' to node '2'
shortest_path_0_to_2 = all_pairs_shortest_paths['0']['2']
print('Shortest path from node 0 to 2:', shortest_path_0_to_2)
<|EOT|>
