├── edgelist_output ├── directed_edgelist.csv ├── undirected_edgelist.csv ├── l_projected_graph_edgelist.csv ├── signed_edgelist.csv ├── weighted_edgelist.csv ├── bipartite_edgelist.csv └── multigraph_edgelist.csv ├── graph_img ├── 03_karate_graph_center.png ├── 03_karate_graph_overall.png ├── 03_karate_graph_periphery.png ├── 03_sucrose_neighbor_nodes.png ├── 03_genshin_impact_average_rank.png ├── 03_genshin_impact_min_edge_cut.png ├── 03_genshin_impact_min_node_cut.png ├── 06_louvain_disconnected_community.png ├── 02_genshin_impact_character_network.png ├── 03_genshin_impact_centrality_summary.png ├── 03_genshin_impact_mutual_connection.png ├── 05_louvain_community_visualization.png └── 04_karate_graph_common_neighbors_node_2_33.png ├── requirements.txt ├── environment.yml ├── genshin_data ├── node_list.json └── edge_list.json └── README.md /edgelist_output/directed_edgelist.csv: -------------------------------------------------------------------------------- 1 | A,B 2 | A,D 3 | B,C 4 | E,F 5 | -------------------------------------------------------------------------------- /edgelist_output/undirected_edgelist.csv: -------------------------------------------------------------------------------- 1 | A,B 2 | A,D 3 | B,C 4 | E,F 5 | -------------------------------------------------------------------------------- /edgelist_output/l_projected_graph_edgelist.csv: -------------------------------------------------------------------------------- 1 | 1,2 2 | 1,3 3 | 1,4 4 | 2,4 5 | -------------------------------------------------------------------------------- /edgelist_output/signed_edgelist.csv: -------------------------------------------------------------------------------- 1 | A,B,1 2 | A,D,1 3 | B,C,-1 4 | E,F,-1 5 | -------------------------------------------------------------------------------- /edgelist_output/weighted_edgelist.csv: -------------------------------------------------------------------------------- 1 | A,B,6 2 | A,D,2 3 | B,C,13 4 | E,F,20 5 | -------------------------------------------------------------------------------- /edgelist_output/bipartite_edgelist.csv: -------------------------------------------------------------------------------- 1 | 1,a 2 | 1,b 3 | 1,c 4 | 2,a 5 | 2,b 6 | 2,d 7 | 3,c 8 | 4,a 9 | -------------------------------------------------------------------------------- /graph_img/03_karate_graph_center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/03_karate_graph_center.png -------------------------------------------------------------------------------- /graph_img/03_karate_graph_overall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/03_karate_graph_overall.png -------------------------------------------------------------------------------- /graph_img/03_karate_graph_periphery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/03_karate_graph_periphery.png -------------------------------------------------------------------------------- /graph_img/03_sucrose_neighbor_nodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/03_sucrose_neighbor_nodes.png -------------------------------------------------------------------------------- /graph_img/03_genshin_impact_average_rank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/03_genshin_impact_average_rank.png -------------------------------------------------------------------------------- /graph_img/03_genshin_impact_min_edge_cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/03_genshin_impact_min_edge_cut.png -------------------------------------------------------------------------------- /graph_img/03_genshin_impact_min_node_cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/03_genshin_impact_min_node_cut.png -------------------------------------------------------------------------------- /graph_img/06_louvain_disconnected_community.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/06_louvain_disconnected_community.png -------------------------------------------------------------------------------- /edgelist_output/multigraph_edgelist.csv: -------------------------------------------------------------------------------- 1 | A,B,friend 2 | A,B,neighbor 3 | A,B,coworker 4 | A,C,coworker 5 | B,C,neighbor 6 | B,C,family 7 | B,C,coworker 8 | C,D,coworker 9 | -------------------------------------------------------------------------------- /graph_img/02_genshin_impact_character_network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/02_genshin_impact_character_network.png -------------------------------------------------------------------------------- /graph_img/03_genshin_impact_centrality_summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/03_genshin_impact_centrality_summary.png -------------------------------------------------------------------------------- /graph_img/03_genshin_impact_mutual_connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/03_genshin_impact_mutual_connection.png -------------------------------------------------------------------------------- /graph_img/05_louvain_community_visualization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/05_louvain_community_visualization.png -------------------------------------------------------------------------------- /graph_img/04_karate_graph_common_neighbors_node_2_33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KangboLu/Graph-Analysis-with-NetworkX/HEAD/graph_img/04_karate_graph_common_neighbors_node_2_33.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | backcall==0.2.0 2 | backports.functools-lru-cache==1.6.4 3 | certifi==2021.10.8 4 | charset-normalizer==2.0.8 5 | colorama==0.4.4 6 | cycler==0.11.0 7 | Cython==0.29.23 8 | debugpy==1.5.1 9 | decorator==5.1.0 10 | entrypoints==0.3 11 | fonttools==4.28.2 12 | idna==3.3 13 | igraph==0.9.8 14 | ipykernel==6.5.0 15 | ipython==7.30.0 16 | jedi==0.18.1 17 | joblib==1.1.0 18 | jupyter-client==7.1.0 19 | jupyter-core==4.9.1 20 | kiwisolver==1.3.2 21 | leidenalg==0.8.8 22 | matplotlib==3.5.0 23 | matplotlib-inline==0.1.3 24 | nest-asyncio==1.5.1 25 | networkx==2.6.3 26 | numpy==1.21.4 27 | packaging==21.3 28 | pandas==1.3.4 29 | parso==0.8.2 30 | pickleshare==0.7.5 31 | Pillow==8.4.0 32 | pip==21.3.1 33 | plotly==5.4.0 34 | prompt-toolkit==3.0.22 35 | Pygments==2.10.0 36 | pyparsing==3.0.6 37 | python-dateutil==2.8.2 38 | python-igraph==0.9.8 39 | python-louvain==0.15 40 | pytz==2021.3 41 | pywin32==302 42 | pyzmq==22.3.0 43 | requests==2.26.0 44 | scikit-learn==1.0.1 45 | scipy==1.7.3 46 | setuptools==59.4.0 47 | setuptools-scm==6.3.2 48 | six==1.16.0 49 | smart-open==5.2.1 50 | tenacity==8.0.1 51 | texttable==1.6.4 52 | threadpoolctl==3.0.0 53 | tomli==1.2.2 54 | tornado==6.1 55 | tqdm==4.62.3 56 | traitlets==5.1.1 57 | urllib3==1.26.7 58 | wcwidth==0.2.5 59 | wheel==0.37.0 60 | -------------------------------------------------------------------------------- /environment.yml: -------------------------------------------------------------------------------- 1 | name: network_analysis 2 | channels: 3 | - pytorch 4 | - conda-forge 5 | - defaults 6 | dependencies: 7 | - backcall=0.2.0=pyh9f0ad1d_0 8 | - backports=1.0=py_2 9 | - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0 10 | - ca-certificates=2021.10.8=h5b45459_0 11 | - colorama=0.4.4=pyh9f0ad1d_0 12 | - debugpy=1.5.1=py38h885f38d_0 13 | - decorator=5.1.0=pyhd8ed1ab_0 14 | - entrypoints=0.3=pyhd8ed1ab_1003 15 | - ipykernel=6.5.0=py38h595d716_1 16 | - ipython=7.30.0=py38haa244fe_0 17 | - jedi=0.18.1=py38haa244fe_0 18 | - jupyter_client=7.1.0=pyhd8ed1ab_0 19 | - jupyter_core=4.9.1=py38haa244fe_1 20 | - libsodium=1.0.18=h8d14728_1 21 | - matplotlib-inline=0.1.3=pyhd8ed1ab_0 22 | - nest-asyncio=1.5.1=pyhd8ed1ab_0 23 | - openssl=3.0.0=h8ffe710_2 24 | - parso=0.8.2=pyhd8ed1ab_0 25 | - pickleshare=0.7.5=py_1003 26 | - pip=21.3.1=pyhd8ed1ab_0 27 | - prompt-toolkit=3.0.22=pyha770c72_0 28 | - pygments=2.10.0=pyhd8ed1ab_0 29 | - python=3.8.12=h900ac77_2_cpython 30 | - python-dateutil=2.8.2=pyhd8ed1ab_0 31 | - python_abi=3.8=2_cp38 32 | - pywin32=302=py38h294d835_2 33 | - pyzmq=22.3.0=py38h09162b1_1 34 | - setuptools=59.4.0=py38haa244fe_0 35 | - six=1.16.0=pyh6c4a22f_0 36 | - sqlite=3.37.0=h8ffe710_0 37 | - tornado=6.1=py38h294d835_2 38 | - traitlets=5.1.1=pyhd8ed1ab_0 39 | - ucrt=10.0.20348.0=h57928b3_0 40 | - vc=14.2=hb210afc_5 41 | - vs2015_runtime=14.29.30037=h902a5da_5 42 | - wcwidth=0.2.5=pyh9f0ad1d_2 43 | - wheel=0.37.0=pyhd8ed1ab_1 44 | - zeromq=4.3.4=h0e60522_1 45 | - pip: 46 | - certifi==2021.10.8 47 | - charset-normalizer==2.0.8 48 | - cycler==0.11.0 49 | - cython==0.29.23 50 | - fonttools==4.28.2 51 | - idna==3.3 52 | - igraph==0.9.8 53 | - joblib==1.1.0 54 | - kiwisolver==1.3.2 55 | - leidenalg==0.8.8 56 | - matplotlib==3.5.0 57 | - networkx==2.6.3 58 | - numpy==1.21.4 59 | - packaging==21.3 60 | - pandas==1.3.4 61 | - pillow==8.4.0 62 | - plotly==5.4.0 63 | - pyparsing==3.0.6 64 | - python-igraph==0.9.8 65 | - python-louvain==0.15 66 | - pytz==2021.3 67 | - requests==2.26.0 68 | - scikit-learn==1.0.1 69 | - scipy==1.7.3 70 | - setuptools-scm==6.3.2 71 | - smart-open==5.2.1 72 | - tenacity==8.0.1 73 | - texttable==1.6.4 74 | - threadpoolctl==3.0.0 75 | - tomli==1.2.2 76 | - tqdm==4.62.3 77 | - urllib3==1.26.7 78 | prefix: D:\Anaconda3\envs\network_analysis 79 | -------------------------------------------------------------------------------- /genshin_data/node_list.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "Xinyan", 4 | "nation": "Liyue" 5 | }, 6 | { 7 | "id": "Keqing", 8 | "nation": "Liyue" 9 | }, 10 | { 11 | "id": "Bennett", 12 | "nation": "Mondstadt" 13 | }, 14 | { 15 | "id": "Xiangling", 16 | "nation": "Liyue" 17 | }, 18 | { 19 | "id": "Zhongli", 20 | "nation": "Liyue" 21 | }, 22 | { 23 | "id": "Kaeya", 24 | "nation": "Mondstadt" 25 | }, 26 | { 27 | "id": "Klee", 28 | "nation": "Mondstadt" 29 | }, 30 | { 31 | "id": "Mona", 32 | "nation": "Mondstadt" 33 | }, 34 | { 35 | "id": "Yanfei", 36 | "nation": "Liyue" 37 | }, 38 | { 39 | "id": "Chongyun", 40 | "nation": "Liyue" 41 | }, 42 | { 43 | "id": "Diluc", 44 | "nation": "Mondstadt" 45 | }, 46 | { 47 | "id": "Kamisato Ayaka", 48 | "nation": "Inazuma" 49 | }, 50 | { 51 | "id": "Ningguang", 52 | "nation": "Liyue" 53 | }, 54 | { 55 | "id": "Xingqiu", 56 | "nation": "Liyue" 57 | }, 58 | { 59 | "id": "Eula", 60 | "nation": "Mondstadt" 61 | }, 62 | { 63 | "id": "Beidou", 64 | "nation": "Liyue" 65 | }, 66 | { 67 | "id": "Albedo", 68 | "nation": "Mondstadt" 69 | }, 70 | { 71 | "id": "Amber", 72 | "nation": "Mondstadt" 73 | }, 74 | { 75 | "id": "Ganyu", 76 | "nation": "Liyue" 77 | }, 78 | { 79 | "id": "Barbara", 80 | "nation": "Mondstadt" 81 | }, 82 | { 83 | "id": "Rosaria", 84 | "nation": "Mondstadt" 85 | }, 86 | { 87 | "id": "Sucrose", 88 | "nation": "Mondstadt" 89 | }, 90 | { 91 | "id": "Hu Tao", 92 | "nation": "Liyue" 93 | }, 94 | { 95 | "id": "Kaedehara Kazuha", 96 | "nation": "Inazuma" 97 | }, 98 | { 99 | "id": "Lisa", 100 | "nation": "Mondstadt" 101 | }, 102 | { 103 | "id": "Traveler", 104 | "nation": "NA" 105 | }, 106 | { 107 | "id": "Xiao", 108 | "nation": "Liyue" 109 | }, 110 | { 111 | "id": "Qiqi", 112 | "nation": "Liyue" 113 | }, 114 | { 115 | "id": "Venti", 116 | "nation": "Mondstadt" 117 | }, 118 | { 119 | "id": "Diona", 120 | "nation": "Mondstadt" 121 | }, 122 | { 123 | "id": "Fischl", 124 | "nation": "Mondstadt" 125 | }, 126 | { 127 | "id": "Noelle", 128 | "nation": "Mondstadt" 129 | }, 130 | { 131 | "id": "Razor", 132 | "nation": "Mondstadt" 133 | }, 134 | { 135 | "id": "Tartaglia", 136 | "nation": "Snezhnaya" 137 | }, 138 | { 139 | "id": "Jean", 140 | "nation": "Mondstadt" 141 | } 142 | ] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Graph-Analysis-with-NetworkX 2 | Graph Analysis with NetworkX 3 | 4 | # Dependencies: 5 | The [`environment.yml`](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/environment.yml) YAML file in the root folder has the exact conda environment I used for this project. 6 | The [`requirements.txt`](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/requirements.txt) text file in the root folder has the exact Python environment I used for this project. 7 | * Option 1: **Run below with conda to create a new environment** to have the exact same environment I used for running the notebooks: 8 | `conda env create -f environment.yml` will create a conda environment called `network_analysis`. 9 | Then, you can run `conda env list` to view your existing environments. 10 | You can run `conda activate network_analysis` to use the new environment. 11 | 12 | * Option 2: **If you don't want to use conda to create a environment**, you can try install Python packages I used with the following command: 13 | `pip install -r requirements.txt` 14 | 15 | ## Notebook 1: Graph Types: 16 | 17 | [Click here to see the notebook](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/01_graph_types.ipynb) 18 | 19 | This notebook covers how to create the following graphs using NetworkX: 20 | 1. Undirected graph 21 | 2. Directed graph 22 | 3. Signed graph 23 | 4. Weighted graph 24 | 5. Multigraph 25 | 6. Bipartite Graph 26 | 7. Projected Graph 27 | 28 | ## Notebook 2: Spring Layout: 29 | 30 | [Click here to see the notebook](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/02_graph_layouts_spring_layout.ipynb) 31 | 32 | This notebook covers how to create visualization using the spring layout in NetworkX for Genshin Impact character network: 33 | ![genshin_impact_character_network](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/02_genshin_impact_character_network.png) 34 | 35 | ## Notebook 3: Graph Statistics: 36 | 37 | [Click here to see the notebook part 1](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/03_graph_statistics_part_1.ipynb) 38 | 39 | Notebook 3 part 1 covers how to calculate and interpret graph statistics for the following topic: 40 | 1. Triadic Closer: 41 | * Local Clustering Coefficient (LCC) 42 | * Global Clustering Coefficient (GCC): Average LCC and Transitivity 43 | 2. Distance Measures: 44 | * Average Distance (Average Shortest Path Length) 45 | * Eccentricity 46 | * Diameter 47 | * Radius 48 | * Center 49 | * Periphery 50 | 51 | ![Karate Network](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/03_karate_graph_overall.png) 52 | 53 | #### Karate Network with Center Visualized: 54 | ![Karate Network with Center Visualized](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/03_karate_graph_center.png) 55 | 56 | #### Karate Network with Periphery Visualized: 57 | ![Karate Network with Periphery Visualized](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/03_karate_graph_periphery.png) 58 | 59 | [Click here to see the notebook part 2](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/03_graph_statistics_part_2.ipynb) 60 | 61 | Notebook 3 part 2 covers how to calculate and interpret graph statistics for the following topic: 62 | 1. Connectivity: 63 | * Strongly Connected 64 | * Weakly Connected 65 | 2. Robustness: 66 | * Density 67 | * Node Connectivity 68 | * Min Node CUt 69 | * Edge Connectivity 70 | * Min Edge Cut 71 | * Isolates 72 | 73 | ![Sucrose Neighbors](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/03_sucrose_neighbor_nodes.png) 74 | 75 | #### Mutual Connection: 76 | ![Mutual Connection](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/03_genshin_impact_mutual_connection.png) 77 | 78 | #### Min Node Cut Example: 79 | ![Min Node Cut](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/03_genshin_impact_min_node_cut.png) 80 | 81 | #### Min Edge Cut Example: 82 | ![Min Edge Cut](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/03_genshin_impact_min_edge_cut.png) 83 | 84 | [Click here to see the notebook part 3](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/03_graph_statistics_part_3.ipynb) 85 | 86 | Notebook 3 part 3 covers how to calculate and interpret graph statistics for the following topic: 87 | 1. Centreality (Node Importance): 88 | * Degree Centrality 89 | * CLoseness Centrality 90 | * Node Betweenness Centrality 91 | * Edge Betweenness Centrality 92 | * PageRank Centrality with PageRank Algorithm 93 | * Auth and Hub Centrality with HITS Algorithm 94 | 2. Centrality Ranking by Averging Centrality Measures 95 | #### Summary Table for Centrality Measures: 96 | ![Summary Table for Centrality Measures](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/03_genshin_impact_centrality_summary.png) 97 | 98 | #### Final Output of Averaging Centrality Ranking: 99 | ![Final Output of Averaging Centrality Ranking](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/03_genshin_impact_average_rank.png) 100 | 101 | ## Notebook 4: Graph Link Prediction: 102 | 103 | [Click here to see the notebook part 1](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/04_link_prediction_measures_part_1.ipynb) 104 | 105 | Notebook 4 part 1 covers how to calculate and interpret the below common link prediction features: 106 | 1. Non-community Based Measures 107 | * The Number of Common Neighbors 108 | * Jaccard Coefficient 109 | * Resource Allocation Index 110 | * Adamic-Adar Index 111 | * Preferential Attachment 112 | #### Visualizing the Common Neighbors for Potential Connection between Node 2 and Node 33 113 | ![Common Neighbors for Potential Connection between Node 2 and Node 33](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/04_karate_graph_common_neighbors_node_2_33.png) 114 | 115 | ## Notebook 5: Graph Community Detection Algorithms: 116 | 117 | [Click here to see the notebook](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/05_community_detection.ipynb) 118 | 119 | Notebook 5 covers how to use implemented community detection algorithms in NetworkX, python-louvain, and leidenalg 120 | 1. Community Detection Algorithms: 121 | * Girvan-Newman 122 | * Label-Propagation 123 | * Louvain 124 | * Leiden 125 | #### Visualizing the community partition by Louvain Algorithm: 126 | ![Louvain Algorithm Partition Output](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/05_louvain_community_visualization.png) 127 | 128 | 129 | ## Notebook 6: Comparison of Louvain and Leiden for Community Detection: 130 | 131 | [Click here to see the notebook](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/06_Louvain_Leiden_comparison.ipynb) 132 | 133 | Stanford Network Analysis Project dataset is used for comparing performance: [DBLP collaboration network](https://snap.stanford.edu/data/com-DBLP.html) 134 | | node total | edge total | Average clustering coefficient | 135 | |------------|------------|--------------------------------| 136 | | 317,080 | 1,049,866 | 0.6324 | 137 | 138 | Notebook 6 compares the community detection results using Louvain and Leiden algorithms in open source Python package called [python-louvain](https://github.com/taynaud/python-louvain) and [leidenalg](https://github.com/vtraag/leidenalg/). The notebook will highlight the disadvanatge sof Louvain algorithm and demonstrate why Leiden may be the algorithm you want to use for community detection. 139 | 140 | | | Louvain | Leiden | 141 | |------------|----------|----------| 142 | | Modularity | 0.821751 | 0.830028 | 143 | 144 | | | Louvain | Leiden | 145 | |------------------------|---------|--------| 146 | | Disconnected Community | 5 | 0 | 147 | 148 | #### Visualizing the disconnected community partition by Louvain Algorithm: 149 | ![Louvain Algorithm Partition Disconnected Output](https://github.com/KangboLu/Graph-Analysis-with-NetworkX/blob/main/graph_img/06_louvain_disconnected_community.png) 150 | -------------------------------------------------------------------------------- /genshin_data/edge_list.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "type": "voice", 4 | "from": "Albedo", 5 | "to": "Klee" 6 | }, 7 | { 8 | "type": "voice", 9 | "from": "Amber", 10 | "to": "Klee" 11 | }, 12 | { 13 | "type": "story", 14 | "from": "Eula", 15 | "to": "Amber" 16 | }, 17 | { 18 | "type": "voice", 19 | "from": "Bennett", 20 | "to": "Amber" 21 | }, 22 | { 23 | "type": "voice", 24 | "from": "Diona", 25 | "to": "Xiangling" 26 | }, 27 | { 28 | "type": "voice", 29 | "from": "Fischl", 30 | "to": "Bennett" 31 | }, 32 | { 33 | "type": "voice", 34 | "from": "Ningguang", 35 | "to": "Ganyu" 36 | }, 37 | { 38 | "type": "voice", 39 | "from": "Razor", 40 | "to": "Diluc" 41 | }, 42 | { 43 | "type": "voice", 44 | "from": "Sucrose", 45 | "to": "Eula" 46 | }, 47 | { 48 | "type": "voice", 49 | "from": "Traveler", 50 | "to": "Klee" 51 | }, 52 | { 53 | "type": "voice", 54 | "from": "Venti", 55 | "to": "Barbara" 56 | }, 57 | { 58 | "type": "voice", 59 | "from": "Venti", 60 | "to": "Eula" 61 | }, 62 | { 63 | "type": "voice", 64 | "from": "Xiangling", 65 | "to": "Ganyu" 66 | }, 67 | { 68 | "type": "voice", 69 | "from": "Xinyan", 70 | "to": "Beidou" 71 | }, 72 | { 73 | "type": "voice", 74 | "from": "Zhongli", 75 | "to": "Keqing" 76 | }, 77 | { 78 | "type": "voice", 79 | "from": "Barbara", 80 | "to": "Amber" 81 | }, 82 | { 83 | "type": "story", 84 | "from": "Ningguang", 85 | "to": "Beidou" 86 | }, 87 | { 88 | "type": "story", 89 | "from": "Xiangling", 90 | "to": "Beidou" 91 | }, 92 | { 93 | "type": "voice", 94 | "from": "Hu Tao", 95 | "to": "Qiqi" 96 | }, 97 | { 98 | "type": "story", 99 | "from": "Diluc", 100 | "to": "Jean" 101 | }, 102 | { 103 | "type": "story", 104 | "from": "Klee", 105 | "to": "Jean" 106 | }, 107 | { 108 | "type": "voice", 109 | "from": "Keqing", 110 | "to": "Ganyu" 111 | }, 112 | { 113 | "type": "voice", 114 | "from": "Lisa", 115 | "to": "Jean" 116 | }, 117 | { 118 | "type": "voice", 119 | "from": "Lisa", 120 | "to": "Klee" 121 | }, 122 | { 123 | "type": "voice", 124 | "from": "Mona", 125 | "to": "Jean" 126 | }, 127 | { 128 | "type": "voice", 129 | "from": "Noelle", 130 | "to": "Jean" 131 | }, 132 | { 133 | "type": "voice", 134 | "from": "Qiqi", 135 | "to": "Hu Tao" 136 | }, 137 | { 138 | "type": "voice", 139 | "from": "Rosaria", 140 | "to": "Diluc" 141 | }, 142 | { 143 | "type": "voice", 144 | "from": "Rosaria", 145 | "to": "Kaeya" 146 | }, 147 | { 148 | "type": "voice", 149 | "from": "Xingqiu", 150 | "to": "Chongyun" 151 | }, 152 | { 153 | "type": "story", 154 | "from": "Chongyun", 155 | "to": "Xingqiu" 156 | }, 157 | { 158 | "type": "story", 159 | "from": "Hu Tao", 160 | "to": "Xingqiu" 161 | }, 162 | { 163 | "type": "voice", 164 | "from": "Xinyan", 165 | "to": "Ningguang" 166 | }, 167 | { 168 | "type": "voice", 169 | "from": "Yanfei", 170 | "to": "Ningguang" 171 | }, 172 | { 173 | "type": "voice", 174 | "from": "Barbara", 175 | "to": "Rosaria" 176 | }, 177 | { 178 | "type": "voice", 179 | "from": "Diluc", 180 | "to": "Lisa" 181 | }, 182 | { 183 | "type": "voice", 184 | "from": "Ganyu", 185 | "to": "Xingqiu" 186 | }, 187 | { 188 | "type": "voice", 189 | "from": "Hu Tao", 190 | "to": "Keqing" 191 | }, 192 | { 193 | "type": "voice", 194 | "from": "Hu Tao", 195 | "to": "Xiangling" 196 | }, 197 | { 198 | "type": "voice", 199 | "from": "Keqing", 200 | "to": "Ningguang" 201 | }, 202 | { 203 | "type": "voice", 204 | "from": "Klee", 205 | "to": "Amber" 206 | }, 207 | { 208 | "type": "voice", 209 | "from": "Lisa", 210 | "to": "Albedo" 211 | }, 212 | { 213 | "type": "voice", 214 | "from": "Noelle", 215 | "to": "Fischl" 216 | }, 217 | { 218 | "type": "voice", 219 | "from": "Razor", 220 | "to": "Venti" 221 | }, 222 | { 223 | "type": "voice", 224 | "from": "Traveler", 225 | "to": "Diluc" 226 | }, 227 | { 228 | "type": "voice", 229 | "from": "Venti", 230 | "to": "Mona" 231 | }, 232 | { 233 | "type": "voice", 234 | "from": "Xiangling", 235 | "to": "Hu Tao" 236 | }, 237 | { 238 | "type": "voice", 239 | "from": "Xingqiu", 240 | "to": "Xiangling" 241 | }, 242 | { 243 | "type": "voice", 244 | "from": "Zhongli", 245 | "to": "Tartaglia" 246 | }, 247 | { 248 | "type": "voice", 249 | "from": "Albedo", 250 | "to": "Sucrose" 251 | }, 252 | { 253 | "type": "voice", 254 | "from": "Albedo", 255 | "to": "Jean" 256 | }, 257 | { 258 | "type": "voice", 259 | "from": "Amber", 260 | "to": "Noelle" 261 | }, 262 | { 263 | "type": "voice", 264 | "from": "Barbara", 265 | "to": "Venti" 266 | }, 267 | { 268 | "type": "voice", 269 | "from": "Beidou", 270 | "to": "Kaedehara Kazuha" 271 | }, 272 | { 273 | "type": "voice", 274 | "from": "Bennett", 275 | "to": "Barbara" 276 | }, 277 | { 278 | "type": "voice", 279 | "from": "Chongyun", 280 | "to": "Zhongli" 281 | }, 282 | { 283 | "type": "voice", 284 | "from": "Chongyun", 285 | "to": "Xingqiu" 286 | }, 287 | { 288 | "type": "voice", 289 | "from": "Diluc", 290 | "to": "Kaeya" 291 | }, 292 | { 293 | "type": "voice", 294 | "from": "Diona", 295 | "to": "Diluc" 296 | }, 297 | { 298 | "type": "voice", 299 | "from": "Eula", 300 | "to": "Jean" 301 | }, 302 | { 303 | "type": "voice", 304 | "from": "Fischl", 305 | "to": "Lisa" 306 | }, 307 | { 308 | "type": "voice", 309 | "from": "Jean", 310 | "to": "Rosaria" 311 | }, 312 | { 313 | "type": "voice", 314 | "from": "Kaeya", 315 | "to": "Klee" 316 | }, 317 | { 318 | "type": "voice", 319 | "from": "Klee", 320 | "to": "Sucrose" 321 | }, 322 | { 323 | "type": "voice", 324 | "from": "Lisa", 325 | "to": "Diluc" 326 | }, 327 | { 328 | "type": "voice", 329 | "from": "Ningguang", 330 | "to": "Keqing" 331 | }, 332 | { 333 | "type": "voice", 334 | "from": "Razor", 335 | "to": "Klee" 336 | }, 337 | { 338 | "type": "voice", 339 | "from": "Sucrose", 340 | "to": "Lisa" 341 | }, 342 | { 343 | "type": "voice", 344 | "from": "Xiangling", 345 | "to": "Zhongli" 346 | }, 347 | { 348 | "type": "voice", 349 | "from": "Xiangling", 350 | "to": "Xinyan" 351 | }, 352 | { 353 | "type": "story", 354 | "from": "Albedo", 355 | "to": "Xingqiu" 356 | }, 357 | { 358 | "type": "voice", 359 | "from": "Albedo", 360 | "to": "Xingqiu" 361 | }, 362 | { 363 | "type": "voice", 364 | "from": "Beidou", 365 | "to": "Ningguang" 366 | }, 367 | { 368 | "type": "voice", 369 | "from": "Diluc", 370 | "to": "Mona" 371 | }, 372 | { 373 | "type": "voice", 374 | "from": "Fischl", 375 | "to": "Mona" 376 | }, 377 | { 378 | "type": "voice", 379 | "from": "Ganyu", 380 | "to": "Beidou" 381 | }, 382 | { 383 | "type": "voice", 384 | "from": "Jean", 385 | "to": "Klee" 386 | }, 387 | { 388 | "type": "voice", 389 | "from": "Jean", 390 | "to": "Noelle" 391 | }, 392 | { 393 | "type": "story", 394 | "from": "Noelle", 395 | "to": "Kaeya" 396 | }, 397 | { 398 | "type": "voice", 399 | "from": "Lisa", 400 | "to": "Amber" 401 | }, 402 | { 403 | "type": "voice", 404 | "from": "Razor", 405 | "to": "Bennett" 406 | }, 407 | { 408 | "type": "voice", 409 | "from": "Rosaria", 410 | "to": "Venti" 411 | }, 412 | { 413 | "type": "story", 414 | "from": "Beidou", 415 | "to": "Xiangling" 416 | }, 417 | { 418 | "type": "story", 419 | "from": "Chongyun", 420 | "to": "Xiangling" 421 | }, 422 | { 423 | "type": "voice", 424 | "from": "Xiao", 425 | "to": "Hu Tao" 426 | }, 427 | { 428 | "type": "voice", 429 | "from": "Xiao", 430 | "to": "Ganyu" 431 | }, 432 | { 433 | "type": "voice", 434 | "from": "Xingqiu", 435 | "to": "Xinyan" 436 | }, 437 | { 438 | "type": "voice", 439 | "from": "Xinyan", 440 | "to": "Zhongli" 441 | }, 442 | { 443 | "type": "voice", 444 | "from": "Yanfei", 445 | "to": "Eula" 446 | }, 447 | { 448 | "type": "voice", 449 | "from": "Amber", 450 | "to": "Jean" 451 | }, 452 | { 453 | "type": "voice", 454 | "from": "Amber", 455 | "to": "Kaeya" 456 | }, 457 | { 458 | "type": "story", 459 | "from": "Klee", 460 | "to": "Amber" 461 | }, 462 | { 463 | "type": "voice", 464 | "from": "Beidou", 465 | "to": "Xinyan" 466 | }, 467 | { 468 | "type": "voice", 469 | "from": "Bennett", 470 | "to": "Jean" 471 | }, 472 | { 473 | "type": "voice", 474 | "from": "Chongyun", 475 | "to": "Hu Tao" 476 | }, 477 | { 478 | "type": "voice", 479 | "from": "Diona", 480 | "to": "Venti" 481 | }, 482 | { 483 | "type": "voice", 484 | "from": "Eula", 485 | "to": "Yanfei" 486 | }, 487 | { 488 | "type": "voice", 489 | "from": "Hu Tao", 490 | "to": "Xingqiu" 491 | }, 492 | { 493 | "type": "story", 494 | "from": "Qiqi", 495 | "to": "Hu Tao" 496 | }, 497 | { 498 | "type": "story", 499 | "from": "Eula", 500 | "to": "Jean" 501 | }, 502 | { 503 | "type": "voice", 504 | "from": "Kaeya", 505 | "to": "Albedo" 506 | }, 507 | { 508 | "type": "voice", 509 | "from": "Keqing", 510 | "to": "Xiao" 511 | }, 512 | { 513 | "type": "voice", 514 | "from": "Keqing", 515 | "to": "Yanfei" 516 | }, 517 | { 518 | "type": "voice", 519 | "from": "Klee", 520 | "to": "Jean" 521 | }, 522 | { 523 | "type": "voice", 524 | "from": "Klee", 525 | "to": "Diluc" 526 | }, 527 | { 528 | "type": "voice", 529 | "from": "Ningguang", 530 | "to": "Yanfei" 531 | }, 532 | { 533 | "type": "story", 534 | "from": "Yanfei", 535 | "to": "Ningguang" 536 | }, 537 | { 538 | "type": "voice", 539 | "from": "Noelle", 540 | "to": "Kaeya" 541 | }, 542 | { 543 | "type": "voice", 544 | "from": "Sucrose", 545 | "to": "Noelle" 546 | }, 547 | { 548 | "type": "voice", 549 | "from": "Venti", 550 | "to": "Razor" 551 | }, 552 | { 553 | "type": "voice", 554 | "from": "Yanfei", 555 | "to": "Ganyu" 556 | }, 557 | { 558 | "type": "voice", 559 | "from": "Albedo", 560 | "to": "Lisa" 561 | }, 562 | { 563 | "type": "voice", 564 | "from": "Bennett", 565 | "to": "Klee" 566 | }, 567 | { 568 | "type": "voice", 569 | "from": "Ganyu", 570 | "to": "Xiao" 571 | }, 572 | { 573 | "type": "voice", 574 | "from": "Jean", 575 | "to": "Lisa" 576 | }, 577 | { 578 | "type": "voice", 579 | "from": "Jean", 580 | "to": "Amber" 581 | }, 582 | { 583 | "type": "voice", 584 | "from": "Jean", 585 | "to": "Diluc" 586 | }, 587 | { 588 | "type": "voice", 589 | "from": "Jean", 590 | "to": "Sucrose" 591 | }, 592 | { 593 | "type": "voice", 594 | "from": "Kaeya", 595 | "to": "Jean" 596 | }, 597 | { 598 | "type": "voice", 599 | "from": "Kaeya", 600 | "to": "Lisa" 601 | }, 602 | { 603 | "type": "voice", 604 | "from": "Kaeya", 605 | "to": "Amber" 606 | }, 607 | { 608 | "type": "voice", 609 | "from": "Klee", 610 | "to": "Albedo" 611 | }, 612 | { 613 | "type": "story", 614 | "from": "Albedo", 615 | "to": "Klee" 616 | }, 617 | { 618 | "type": "voice", 619 | "from": "Noelle", 620 | "to": "Barbara" 621 | }, 622 | { 623 | "type": "voice", 624 | "from": "Razor", 625 | "to": "Barbara" 626 | }, 627 | { 628 | "type": "voice", 629 | "from": "Rosaria", 630 | "to": "Lisa" 631 | }, 632 | { 633 | "type": "voice", 634 | "from": "Sucrose", 635 | "to": "Klee" 636 | }, 637 | { 638 | "type": "voice", 639 | "from": "Traveler", 640 | "to": "Qiqi" 641 | }, 642 | { 643 | "type": "voice", 644 | "from": "Zhongli", 645 | "to": "Ganyu" 646 | }, 647 | { 648 | "type": "voice", 649 | "from": "Zhongli", 650 | "to": "Yanfei" 651 | }, 652 | { 653 | "type": "voice", 654 | "from": "Amber", 655 | "to": "Eula" 656 | }, 657 | { 658 | "type": "voice", 659 | "from": "Barbara", 660 | "to": "Jean" 661 | }, 662 | { 663 | "type": "voice", 664 | "from": "Barbara", 665 | "to": "Noelle" 666 | }, 667 | { 668 | "type": "voice", 669 | "from": "Beidou", 670 | "to": "Ganyu" 671 | }, 672 | { 673 | "type": "voice", 674 | "from": "Eula", 675 | "to": "Diona" 676 | }, 677 | { 678 | "type": "voice", 679 | "from": "Keqing", 680 | "to": "Xiangling" 681 | }, 682 | { 683 | "type": "voice", 684 | "from": "Klee", 685 | "to": "Lisa" 686 | }, 687 | { 688 | "type": "voice", 689 | "from": "Klee", 690 | "to": "Mona" 691 | }, 692 | { 693 | "type": "story", 694 | "from": "Albedo", 695 | "to": "Lisa" 696 | }, 697 | { 698 | "type": "story", 699 | "from": "Eula", 700 | "to": "Lisa" 701 | }, 702 | { 703 | "type": "story", 704 | "from": "Razor", 705 | "to": "Lisa" 706 | }, 707 | { 708 | "type": "voice", 709 | "from": "Mona", 710 | "to": "Venti" 711 | }, 712 | { 713 | "type": "voice", 714 | "from": "Qiqi", 715 | "to": "Xinyan" 716 | }, 717 | { 718 | "type": "story", 719 | "from": "Albedo", 720 | "to": "Sucrose" 721 | }, 722 | { 723 | "type": "voice", 724 | "from": "Xiangling", 725 | "to": "Chongyun" 726 | }, 727 | { 728 | "type": "voice", 729 | "from": "Xiao", 730 | "to": "Zhongli" 731 | }, 732 | { 733 | "type": "voice", 734 | "from": "Xiao", 735 | "to": "Beidou" 736 | }, 737 | { 738 | "type": "voice", 739 | "from": "Xiao", 740 | "to": "Venti" 741 | }, 742 | { 743 | "type": "voice", 744 | "from": "Xingqiu", 745 | "to": "Hu Tao" 746 | }, 747 | { 748 | "type": "voice", 749 | "from": "Xingqiu", 750 | "to": "Albedo" 751 | }, 752 | { 753 | "type": "story", 754 | "from": "Klee", 755 | "to": "Albedo" 756 | }, 757 | { 758 | "type": "voice", 759 | "from": "Amber", 760 | "to": "Bennett" 761 | }, 762 | { 763 | "type": "voice", 764 | "from": "Bennett", 765 | "to": "Razor" 766 | }, 767 | { 768 | "type": "voice", 769 | "from": "Chongyun", 770 | "to": "Xiao" 771 | }, 772 | { 773 | "type": "story", 774 | "from": "Xingqiu", 775 | "to": "Chongyun" 776 | }, 777 | { 778 | "type": "voice", 779 | "from": "Diona", 780 | "to": "Kaeya" 781 | }, 782 | { 783 | "type": "voice", 784 | "from": "Diona", 785 | "to": "Albedo" 786 | }, 787 | { 788 | "type": "voice", 789 | "from": "Eula", 790 | "to": "Lisa" 791 | }, 792 | { 793 | "type": "voice", 794 | "from": "Ganyu", 795 | "to": "Keqing" 796 | }, 797 | { 798 | "type": "voice", 799 | "from": "Jean", 800 | "to": "Barbara" 801 | }, 802 | { 803 | "type": "voice", 804 | "from": "Kaeya", 805 | "to": "Diluc" 806 | }, 807 | { 808 | "type": "voice", 809 | "from": "Keqing", 810 | "to": "Beidou" 811 | }, 812 | { 813 | "type": "voice", 814 | "from": "Lisa", 815 | "to": "Noelle" 816 | }, 817 | { 818 | "type": "voice", 819 | "from": "Mona", 820 | "to": "Lisa" 821 | }, 822 | { 823 | "type": "story", 824 | "from": "Zhongli", 825 | "to": "Ningguang" 826 | }, 827 | { 828 | "type": "voice", 829 | "from": "Noelle", 830 | "to": "Klee" 831 | }, 832 | { 833 | "type": "voice", 834 | "from": "Qiqi", 835 | "to": "Xiao" 836 | }, 837 | { 838 | "type": "voice", 839 | "from": "Rosaria", 840 | "to": "Jean" 841 | }, 842 | { 843 | "type": "voice", 844 | "from": "Sucrose", 845 | "to": "Albedo" 846 | }, 847 | { 848 | "type": "voice", 849 | "from": "Traveler", 850 | "to": "Kaeya" 851 | }, 852 | { 853 | "type": "voice", 854 | "from": "Traveler", 855 | "to": "Jean" 856 | }, 857 | { 858 | "type": "voice", 859 | "from": "Venti", 860 | "to": "Jean" 861 | }, 862 | { 863 | "type": "voice", 864 | "from": "Venti", 865 | "to": "Diluc" 866 | }, 867 | { 868 | "type": "voice", 869 | "from": "Venti", 870 | "to": "Diona" 871 | }, 872 | { 873 | "type": "voice", 874 | "from": "Xinyan", 875 | "to": "Chongyun" 876 | }, 877 | { 878 | "type": "voice", 879 | "from": "Yanfei", 880 | "to": "Xingqiu" 881 | }, 882 | { 883 | "type": "voice", 884 | "from": "Yanfei", 885 | "to": "Hu Tao" 886 | }, 887 | { 888 | "type": "voice", 889 | "from": "Zhongli", 890 | "to": "Ningguang" 891 | }, 892 | { 893 | "type": "voice", 894 | "from": "Amber", 895 | "to": "Albedo" 896 | }, 897 | { 898 | "type": "voice", 899 | "from": "Barbara", 900 | "to": "Lisa" 901 | }, 902 | { 903 | "type": "voice", 904 | "from": "Barbara", 905 | "to": "Diluc" 906 | }, 907 | { 908 | "type": "voice", 909 | "from": "Beidou", 910 | "to": "Zhongli" 911 | }, 912 | { 913 | "type": "voice", 914 | "from": "Chongyun", 915 | "to": "Qiqi" 916 | }, 917 | { 918 | "type": "story", 919 | "from": "Kaeya", 920 | "to": "Diluc" 921 | }, 922 | { 923 | "type": "voice", 924 | "from": "Diona", 925 | "to": "Lisa" 926 | }, 927 | { 928 | "type": "voice", 929 | "from": "Ganyu", 930 | "to": "Yanfei" 931 | }, 932 | { 933 | "type": "voice", 934 | "from": "Jean", 935 | "to": "Kaeya" 936 | }, 937 | { 938 | "type": "voice", 939 | "from": "Jean", 940 | "to": "Eula" 941 | }, 942 | { 943 | "type": "voice", 944 | "from": "Kaedehara Kazuha", 945 | "to": "Beidou" 946 | }, 947 | { 948 | "type": "voice", 949 | "from": "Kaeya", 950 | "to": "Fischl" 951 | }, 952 | { 953 | "type": "voice", 954 | "from": "Klee", 955 | "to": "Diona" 956 | }, 957 | { 958 | "type": "voice", 959 | "from": "Lisa", 960 | "to": "Razor" 961 | }, 962 | { 963 | "type": "voice", 964 | "from": "Lisa", 965 | "to": "Sucrose" 966 | }, 967 | { 968 | "type": "voice", 969 | "from": "Mona", 970 | "to": "Diluc" 971 | }, 972 | { 973 | "type": "voice", 974 | "from": "Ningguang", 975 | "to": "Xingqiu" 976 | }, 977 | { 978 | "type": "voice", 979 | "from": "Sucrose", 980 | "to": "Fischl" 981 | }, 982 | { 983 | "type": "voice", 984 | "from": "Traveler", 985 | "to": "Bennett" 986 | }, 987 | { 988 | "type": "voice", 989 | "from": "Traveler", 990 | "to": "Razor" 991 | }, 992 | { 993 | "type": "voice", 994 | "from": "Yanfei", 995 | "to": "Keqing" 996 | }, 997 | { 998 | "type": "voice", 999 | "from": "Chongyun", 1000 | "to": "Xiangling" 1001 | }, 1002 | { 1003 | "type": "voice", 1004 | "from": "Diona", 1005 | "to": "Barbara" 1006 | }, 1007 | { 1008 | "type": "voice", 1009 | "from": "Diona", 1010 | "to": "Klee" 1011 | }, 1012 | { 1013 | "type": "voice", 1014 | "from": "Eula", 1015 | "to": "Sucrose" 1016 | }, 1017 | { 1018 | "type": "voice", 1019 | "from": "Fischl", 1020 | "to": "Rosaria" 1021 | }, 1022 | { 1023 | "type": "voice", 1024 | "from": "Jean", 1025 | "to": "Albedo" 1026 | }, 1027 | { 1028 | "type": "story", 1029 | "from": "Barbara", 1030 | "to": "Jean" 1031 | }, 1032 | { 1033 | "type": "story", 1034 | "from": "Eula", 1035 | "to": "Kaeya" 1036 | }, 1037 | { 1038 | "type": "story", 1039 | "from": "Noelle", 1040 | "to": "Klee" 1041 | }, 1042 | { 1043 | "type": "voice", 1044 | "from": "Ningguang", 1045 | "to": "Beidou" 1046 | }, 1047 | { 1048 | "type": "voice", 1049 | "from": "Ningguang", 1050 | "to": "Xiangling" 1051 | }, 1052 | { 1053 | "type": "story", 1054 | "from": "Hu Tao", 1055 | "to": "Qiqi" 1056 | }, 1057 | { 1058 | "type": "voice", 1059 | "from": "Rosaria", 1060 | "to": "Klee" 1061 | }, 1062 | { 1063 | "type": "voice", 1064 | "from": "Xiangling", 1065 | "to": "Diona" 1066 | }, 1067 | { 1068 | "type": "story", 1069 | "from": "Xinyan", 1070 | "to": "Xiangling" 1071 | }, 1072 | { 1073 | "type": "voice", 1074 | "from": "Xinyan", 1075 | "to": "Xiangling" 1076 | }, 1077 | { 1078 | "type": "voice", 1079 | "from": "Albedo", 1080 | "to": "Barbara" 1081 | }, 1082 | { 1083 | "type": "voice", 1084 | "from": "Beidou", 1085 | "to": "Xiangling" 1086 | }, 1087 | { 1088 | "type": "voice", 1089 | "from": "Beidou", 1090 | "to": "Xiao" 1091 | }, 1092 | { 1093 | "type": "story", 1094 | "from": "Kaedehara Kazuha", 1095 | "to": "Beidou" 1096 | }, 1097 | { 1098 | "type": "story", 1099 | "from": "Hu Tao", 1100 | "to": "Chongyun" 1101 | }, 1102 | { 1103 | "type": "voice", 1104 | "from": "Eula", 1105 | "to": "Razor" 1106 | }, 1107 | { 1108 | "type": "voice", 1109 | "from": "Jean", 1110 | "to": "Diluc" 1111 | }, 1112 | { 1113 | "type": "voice", 1114 | "from": "Kaeya", 1115 | "to": "Rosaria" 1116 | }, 1117 | { 1118 | "type": "story", 1119 | "from": "Lisa", 1120 | "to": "Kaeya" 1121 | }, 1122 | { 1123 | "type": "voice", 1124 | "from": "Keqing", 1125 | "to": "Ningguang" 1126 | }, 1127 | { 1128 | "type": "voice", 1129 | "from": "Keqing", 1130 | "to": "Ningguang" 1131 | }, 1132 | { 1133 | "type": "voice", 1134 | "from": "Ningguang", 1135 | "to": "Zhongli" 1136 | }, 1137 | { 1138 | "type": "voice", 1139 | "from": "Noelle", 1140 | "to": "Amber" 1141 | }, 1142 | { 1143 | "type": "voice", 1144 | "from": "Traveler", 1145 | "to": "Lisa" 1146 | }, 1147 | { 1148 | "type": "voice", 1149 | "from": "Traveler", 1150 | "to": "Noelle" 1151 | }, 1152 | { 1153 | "type": "voice", 1154 | "from": "Xingqiu", 1155 | "to": "Ningguang" 1156 | }, 1157 | { 1158 | "type": "story", 1159 | "from": "Sucrose", 1160 | "to": "Albedo" 1161 | }, 1162 | { 1163 | "type": "story", 1164 | "from": "Jean", 1165 | "to": "Barbara" 1166 | }, 1167 | { 1168 | "type": "voice", 1169 | "from": "Bennett", 1170 | "to": "Fischl" 1171 | }, 1172 | { 1173 | "type": "voice", 1174 | "from": "Chongyun", 1175 | "to": "Xinyan" 1176 | }, 1177 | { 1178 | "type": "voice", 1179 | "from": "Eula", 1180 | "to": "Amber" 1181 | }, 1182 | { 1183 | "type": "voice", 1184 | "from": "Eula", 1185 | "to": "Barbara" 1186 | }, 1187 | { 1188 | "type": "voice", 1189 | "from": "Eula", 1190 | "to": "Yanfei" 1191 | }, 1192 | { 1193 | "type": "voice", 1194 | "from": "Fischl", 1195 | "to": "Kaeya" 1196 | }, 1197 | { 1198 | "type": "voice", 1199 | "from": "Ganyu", 1200 | "to": "Ningguang" 1201 | }, 1202 | { 1203 | "type": "voice", 1204 | "from": "Hu Tao", 1205 | "to": "Chongyun" 1206 | }, 1207 | { 1208 | "type": "voice", 1209 | "from": "Klee", 1210 | "to": "Bennett" 1211 | }, 1212 | { 1213 | "type": "voice", 1214 | "from": "Lisa", 1215 | "to": "Fischl" 1216 | }, 1217 | { 1218 | "type": "voice", 1219 | "from": "Rosaria", 1220 | "to": "Barbara" 1221 | }, 1222 | { 1223 | "type": "voice", 1224 | "from": "Rosaria", 1225 | "to": "Albedo" 1226 | }, 1227 | { 1228 | "type": "voice", 1229 | "from": "Sucrose", 1230 | "to": "Kaeya" 1231 | }, 1232 | { 1233 | "type": "voice", 1234 | "from": "Sucrose", 1235 | "to": "Amber" 1236 | }, 1237 | { 1238 | "type": "voice", 1239 | "from": "Tartaglia", 1240 | "to": "Zhongli" 1241 | }, 1242 | { 1243 | "type": "voice", 1244 | "from": "Traveler", 1245 | "to": "Fischl" 1246 | }, 1247 | { 1248 | "type": "voice", 1249 | "from": "Traveler", 1250 | "to": "Beidou" 1251 | }, 1252 | { 1253 | "type": "voice", 1254 | "from": "Traveler", 1255 | "to": "Ningguang" 1256 | }, 1257 | { 1258 | "type": "voice", 1259 | "from": "Xiangling", 1260 | "to": "Beidou" 1261 | }, 1262 | { 1263 | "type": "voice", 1264 | "from": "Xinyan", 1265 | "to": "Hu Tao" 1266 | }, 1267 | { 1268 | "type": "story", 1269 | "from": "Yanfei", 1270 | "to": "Xinyan" 1271 | }, 1272 | { 1273 | "type": "voice", 1274 | "from": "Amber", 1275 | "to": "Lisa" 1276 | }, 1277 | { 1278 | "type": "voice", 1279 | "from": "Diluc", 1280 | "to": "Diona" 1281 | }, 1282 | { 1283 | "type": "voice", 1284 | "from": "Eula", 1285 | "to": "Venti" 1286 | }, 1287 | { 1288 | "type": "voice", 1289 | "from": "Klee", 1290 | "to": "Razor" 1291 | }, 1292 | { 1293 | "type": "voice", 1294 | "from": "Klee", 1295 | "to": "Kaeya" 1296 | }, 1297 | { 1298 | "type": "story", 1299 | "from": "Bennett", 1300 | "to": "Klee" 1301 | }, 1302 | { 1303 | "type": "voice", 1304 | "from": "Lisa", 1305 | "to": "Barbara" 1306 | }, 1307 | { 1308 | "type": "story", 1309 | "from": "Jean", 1310 | "to": "Lisa" 1311 | }, 1312 | { 1313 | "type": "voice", 1314 | "from": "Noelle", 1315 | "to": "Bennett" 1316 | }, 1317 | { 1318 | "type": "voice", 1319 | "from": "Noelle", 1320 | "to": "Fischl" 1321 | }, 1322 | { 1323 | "type": "voice", 1324 | "from": "Traveler", 1325 | "to": "Barbara" 1326 | }, 1327 | { 1328 | "type": "voice", 1329 | "from": "Xingqiu", 1330 | "to": "Qiqi" 1331 | }, 1332 | { 1333 | "type": "voice", 1334 | "from": "Yanfei", 1335 | "to": "Zhongli" 1336 | }, 1337 | { 1338 | "type": "story", 1339 | "from": "Mona", 1340 | "to": "Albedo" 1341 | }, 1342 | { 1343 | "type": "story", 1344 | "from": "Noelle", 1345 | "to": "Amber" 1346 | }, 1347 | { 1348 | "type": "story", 1349 | "from": "Bennett", 1350 | "to": "Barbara" 1351 | }, 1352 | { 1353 | "type": "voice", 1354 | "from": "Bennett", 1355 | "to": "Noelle" 1356 | }, 1357 | { 1358 | "type": "voice", 1359 | "from": "Ganyu", 1360 | "to": "Xiangling" 1361 | }, 1362 | { 1363 | "type": "story", 1364 | "from": "Zhongli", 1365 | "to": "Hu Tao" 1366 | }, 1367 | { 1368 | "type": "voice", 1369 | "from": "Kaedehara Kazuha", 1370 | "to": "Kamisato Ayaka" 1371 | }, 1372 | { 1373 | "type": "voice", 1374 | "from": "Kaeya", 1375 | "to": "Diona" 1376 | }, 1377 | { 1378 | "type": "voice", 1379 | "from": "Kaeya", 1380 | "to": "Sucrose" 1381 | }, 1382 | { 1383 | "type": "voice", 1384 | "from": "Keqing", 1385 | "to": "Zhongli" 1386 | }, 1387 | { 1388 | "type": "voice", 1389 | "from": "Keqing", 1390 | "to": "Xinyan" 1391 | }, 1392 | { 1393 | "type": "voice", 1394 | "from": "Keqing", 1395 | "to": "Xingqiu" 1396 | }, 1397 | { 1398 | "type": "story", 1399 | "from": "Razor", 1400 | "to": "Klee" 1401 | }, 1402 | { 1403 | "type": "voice", 1404 | "from": "Lisa", 1405 | "to": "Mona" 1406 | }, 1407 | { 1408 | "type": "voice", 1409 | "from": "Mona", 1410 | "to": "Albedo" 1411 | }, 1412 | { 1413 | "type": "voice", 1414 | "from": "Mona", 1415 | "to": "Kaeya" 1416 | }, 1417 | { 1418 | "type": "voice", 1419 | "from": "Ningguang", 1420 | "to": "Beidou" 1421 | }, 1422 | { 1423 | "type": "voice", 1424 | "from": "Razor", 1425 | "to": "Lisa" 1426 | }, 1427 | { 1428 | "type": "voice", 1429 | "from": "Sucrose", 1430 | "to": "Jean" 1431 | }, 1432 | { 1433 | "type": "voice", 1434 | "from": "Sucrose", 1435 | "to": "Albedo" 1436 | }, 1437 | { 1438 | "type": "voice", 1439 | "from": "Traveler", 1440 | "to": "Amber" 1441 | }, 1442 | { 1443 | "type": "voice", 1444 | "from": "Xiangling", 1445 | "to": "Ningguang" 1446 | }, 1447 | { 1448 | "type": "voice", 1449 | "from": "Xingqiu", 1450 | "to": "Beidou" 1451 | }, 1452 | { 1453 | "type": "voice", 1454 | "from": "Xingqiu", 1455 | "to": "Zhongli" 1456 | }, 1457 | { 1458 | "type": "voice", 1459 | "from": "Zhongli", 1460 | "to": "Xiao" 1461 | }, 1462 | { 1463 | "type": "story", 1464 | "from": "Hu Tao", 1465 | "to": "Zhongli" 1466 | }, 1467 | { 1468 | "type": "voice", 1469 | "from": "Barbara", 1470 | "to": "Bennett" 1471 | }, 1472 | { 1473 | "type": "voice", 1474 | "from": "Diluc", 1475 | "to": "Jean" 1476 | }, 1477 | { 1478 | "type": "voice", 1479 | "from": "Diluc", 1480 | "to": "Eula" 1481 | }, 1482 | { 1483 | "type": "story", 1484 | "from": "Diona", 1485 | "to": "Diluc" 1486 | }, 1487 | { 1488 | "type": "voice", 1489 | "from": "Diona", 1490 | "to": "Jean" 1491 | }, 1492 | { 1493 | "type": "voice", 1494 | "from": "Eula", 1495 | "to": "Diluc" 1496 | }, 1497 | { 1498 | "type": "voice", 1499 | "from": "Hu Tao", 1500 | "to": "Zhongli" 1501 | }, 1502 | { 1503 | "type": "voice", 1504 | "from": "Hu Tao", 1505 | "to": "Ningguang" 1506 | }, 1507 | { 1508 | "type": "voice", 1509 | "from": "Hu Tao", 1510 | "to": "Beidou" 1511 | }, 1512 | { 1513 | "type": "voice", 1514 | "from": "Hu Tao", 1515 | "to": "Xiao" 1516 | }, 1517 | { 1518 | "type": "story", 1519 | "from": "Noelle", 1520 | "to": "Jean" 1521 | }, 1522 | { 1523 | "type": "voice", 1524 | "from": "Kaeya", 1525 | "to": "Noelle" 1526 | }, 1527 | { 1528 | "type": "story", 1529 | "from": "Klee", 1530 | "to": "Kaeya" 1531 | }, 1532 | { 1533 | "type": "voice", 1534 | "from": "Keqing", 1535 | "to": "Ganyu" 1536 | }, 1537 | { 1538 | "type": "story", 1539 | "from": "Mona", 1540 | "to": "Klee" 1541 | }, 1542 | { 1543 | "type": "voice", 1544 | "from": "Mona", 1545 | "to": "Klee" 1546 | }, 1547 | { 1548 | "type": "voice", 1549 | "from": "Ningguang", 1550 | "to": "Jean" 1551 | }, 1552 | { 1553 | "type": "story", 1554 | "from": "Beidou", 1555 | "to": "Ningguang" 1556 | }, 1557 | { 1558 | "type": "voice", 1559 | "from": "Traveler", 1560 | "to": "Diluc" 1561 | }, 1562 | { 1563 | "type": "voice", 1564 | "from": "Venti", 1565 | "to": "Albedo" 1566 | }, 1567 | { 1568 | "type": "voice", 1569 | "from": "Yanfei", 1570 | "to": "Qiqi" 1571 | }, 1572 | { 1573 | "type": "voice", 1574 | "from": "Zhongli", 1575 | "to": "Venti" 1576 | }, 1577 | { 1578 | "type": "voice", 1579 | "from": "Zhongli", 1580 | "to": "Hu Tao" 1581 | } 1582 | ] --------------------------------------------------------------------------------