<jupyter_start><jupyter_text>Reading a network from CSVYou can read a network from node and link CSV files. For it to be a valid MATSim network, the CSVs need to have the following data columns:Nodes:   - id - unique ID for the Node   - x - x spatial coordinate in a given projection   - y - y spatial coordinate in a given projection   Links:   - id - unique ID for the Link   - from - source Node ID   - to - target Node ID   - length - link length in metres   - freespeed - meter/seconds speed   - capacity - vehicles/hour   - permlanes - number of lanes   - modes - set of modes   Following the [MATSim network schema](https://www.matsim.org/files/dtd/network_v2.dtd). As well as be strongly connected for modes available to agents. Check out Section/Notebook 6.1. Validating Network - MATSim Specific for more details about validating Network.<jupyter_code>csv_nodes = '../example_data/example_csv/nodes.csv'
csv_links = '../example_data/example_csv/links.csv'
from genet import read_csv
n = read_csv(csv_nodes, csv_links, epsg='epsg:27700')
n.print()<jupyter_output>Graph info: Name: Network graph
Type: MultiDiGraph
Number of nodes: 4
Number of edges: 2
Average in degree:   0.5000
Average out degree:   0.5000 
Schedule info: Schedule:
Number of services: 0
Number of routes: 0
Number of stops: 0
{'fraction_non_alphanumeric': 0.07745398773006135, 'fraction_numerical': 0.01763803680981595, 'mean_word_length': 3.694244604316547, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 4, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '516541', 'license': 'MIT', 'n_tokens_mistral': 405, 'n_tokens_neox': 377, 'n_words': 166, 'path': 'notebooks/2.4. Reading CSV data.ipynb', 'repo_name': 'arup-group/genet', 'size': '1304'}