In [159]:
%matplotlib inline
import math
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import csv
np.set_printoptions(precision=5)
plt.rcParams['font.size'] = 13
# 日本語対応
mpl.rcParams['font.family'] = 'Osaka'

In [160]:
data = pd.read_csv("Network1.csv")
data


Out[160]:
Participant.id_in_session Participant.code Participant.label Participant._is_bot Participant._index_in_pages Participant._max_page_index Participant._current_app_name Participant._round_number Participant._current_page_name Participant.ip_address ... Subsession.round_number Session.code Session.label Session.experimenter_name Session.time_scheduled Session.time_started Session.mturk_HITId Session.mturk_HITGroupId Session.comment Session.is_demo
0 1 n6zj80ba NaN 0 140 140 network1 20 ResultsSummary 10.71.223.81 ... 1 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
1 2 47yu3fhs NaN 0 140 140 network1 20 ResultsSummary 10.13.217.57 ... 1 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
2 3 pvfol3ln NaN 0 140 140 network1 20 ResultsSummary 10.111.206.121 ... 1 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
3 4 5bu9f5ak NaN 0 140 140 network1 20 ResultsSummary 10.170.178.66 ... 1 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
4 5 lae8sez4 NaN 0 140 140 network1 20 ResultsSummary 10.170.178.66 ... 1 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
5 6 zy7uujkq NaN 0 140 140 network1 20 ResultsSummary 10.238.24.253 ... 1 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
6 7 5msqrd8g NaN 0 140 140 network1 20 ResultsSummary 10.178.230.6 ... 1 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
7 8 s14c3qjo NaN 0 140 140 network1 20 ResultsSummary 10.79.194.218 ... 1 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
8 9 c4ej6485 NaN 0 140 140 network1 20 ResultsSummary 10.178.216.75 ... 1 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
9 1 n6zj80ba NaN 0 140 140 network1 20 ResultsSummary 10.71.223.81 ... 2 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
10 2 47yu3fhs NaN 0 140 140 network1 20 ResultsSummary 10.13.217.57 ... 2 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
11 3 pvfol3ln NaN 0 140 140 network1 20 ResultsSummary 10.111.206.121 ... 2 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
12 4 5bu9f5ak NaN 0 140 140 network1 20 ResultsSummary 10.170.178.66 ... 2 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
13 5 lae8sez4 NaN 0 140 140 network1 20 ResultsSummary 10.170.178.66 ... 2 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
14 6 zy7uujkq NaN 0 140 140 network1 20 ResultsSummary 10.238.24.253 ... 2 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
15 7 5msqrd8g NaN 0 140 140 network1 20 ResultsSummary 10.178.230.6 ... 2 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
16 8 s14c3qjo NaN 0 140 140 network1 20 ResultsSummary 10.79.194.218 ... 2 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
17 9 c4ej6485 NaN 0 140 140 network1 20 ResultsSummary 10.178.216.75 ... 2 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
18 1 n6zj80ba NaN 0 140 140 network1 20 ResultsSummary 10.71.223.81 ... 3 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
19 2 47yu3fhs NaN 0 140 140 network1 20 ResultsSummary 10.13.217.57 ... 3 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
20 3 pvfol3ln NaN 0 140 140 network1 20 ResultsSummary 10.111.206.121 ... 3 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
21 4 5bu9f5ak NaN 0 140 140 network1 20 ResultsSummary 10.170.178.66 ... 3 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
22 5 lae8sez4 NaN 0 140 140 network1 20 ResultsSummary 10.170.178.66 ... 3 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
23 6 zy7uujkq NaN 0 140 140 network1 20 ResultsSummary 10.238.24.253 ... 3 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
24 7 5msqrd8g NaN 0 140 140 network1 20 ResultsSummary 10.178.230.6 ... 3 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
25 8 s14c3qjo NaN 0 140 140 network1 20 ResultsSummary 10.79.194.218 ... 3 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
26 9 c4ej6485 NaN 0 140 140 network1 20 ResultsSummary 10.178.216.75 ... 3 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
27 1 n6zj80ba NaN 0 140 140 network1 20 ResultsSummary 10.71.223.81 ... 4 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
28 2 47yu3fhs NaN 0 140 140 network1 20 ResultsSummary 10.13.217.57 ... 4 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
29 3 pvfol3ln NaN 0 140 140 network1 20 ResultsSummary 10.111.206.121 ... 4 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
150 7 5msqrd8g NaN 0 140 140 network1 20 ResultsSummary 10.178.230.6 ... 17 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
151 8 s14c3qjo NaN 0 140 140 network1 20 ResultsSummary 10.79.194.218 ... 17 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
152 9 c4ej6485 NaN 0 140 140 network1 20 ResultsSummary 10.178.216.75 ... 17 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
153 1 n6zj80ba NaN 0 140 140 network1 20 ResultsSummary 10.71.223.81 ... 18 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
154 2 47yu3fhs NaN 0 140 140 network1 20 ResultsSummary 10.13.217.57 ... 18 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
155 3 pvfol3ln NaN 0 140 140 network1 20 ResultsSummary 10.111.206.121 ... 18 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
156 4 5bu9f5ak NaN 0 140 140 network1 20 ResultsSummary 10.170.178.66 ... 18 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
157 5 lae8sez4 NaN 0 140 140 network1 20 ResultsSummary 10.170.178.66 ... 18 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
158 6 zy7uujkq NaN 0 140 140 network1 20 ResultsSummary 10.238.24.253 ... 18 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
159 7 5msqrd8g NaN 0 140 140 network1 20 ResultsSummary 10.178.230.6 ... 18 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
160 8 s14c3qjo NaN 0 140 140 network1 20 ResultsSummary 10.79.194.218 ... 18 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
161 9 c4ej6485 NaN 0 140 140 network1 20 ResultsSummary 10.178.216.75 ... 18 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
162 1 n6zj80ba NaN 0 140 140 network1 20 ResultsSummary 10.71.223.81 ... 19 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
163 2 47yu3fhs NaN 0 140 140 network1 20 ResultsSummary 10.13.217.57 ... 19 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
164 3 pvfol3ln NaN 0 140 140 network1 20 ResultsSummary 10.111.206.121 ... 19 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
165 4 5bu9f5ak NaN 0 140 140 network1 20 ResultsSummary 10.170.178.66 ... 19 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
166 5 lae8sez4 NaN 0 140 140 network1 20 ResultsSummary 10.170.178.66 ... 19 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
167 6 zy7uujkq NaN 0 140 140 network1 20 ResultsSummary 10.238.24.253 ... 19 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
168 7 5msqrd8g NaN 0 140 140 network1 20 ResultsSummary 10.178.230.6 ... 19 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
169 8 s14c3qjo NaN 0 140 140 network1 20 ResultsSummary 10.79.194.218 ... 19 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
170 9 c4ej6485 NaN 0 140 140 network1 20 ResultsSummary 10.178.216.75 ... 19 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
171 1 n6zj80ba NaN 0 140 140 network1 20 ResultsSummary 10.71.223.81 ... 20 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
172 2 47yu3fhs NaN 0 140 140 network1 20 ResultsSummary 10.13.217.57 ... 20 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
173 3 pvfol3ln NaN 0 140 140 network1 20 ResultsSummary 10.111.206.121 ... 20 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
174 4 5bu9f5ak NaN 0 140 140 network1 20 ResultsSummary 10.170.178.66 ... 20 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
175 5 lae8sez4 NaN 0 140 140 network1 20 ResultsSummary 10.170.178.66 ... 20 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
176 6 zy7uujkq NaN 0 140 140 network1 20 ResultsSummary 10.238.24.253 ... 20 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
177 7 5msqrd8g NaN 0 140 140 network1 20 ResultsSummary 10.178.230.6 ... 20 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
178 8 s14c3qjo NaN 0 140 140 network1 20 ResultsSummary 10.79.194.218 ... 20 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1
179 9 c4ej6485 NaN 0 140 140 network1 20 ResultsSummary 10.178.216.75 ... 20 wppnzrsj NaN NaN NaN NaN NaN NaN NaN 1

180 rows × 34 columns


In [161]:
data = pd.read_csv("Network1.csv")

df = data.loc[:, [
        "Participant.id_in_session", 
        "Player.id_in_group", 
        "Player.player_role", 
        "Player.action", 
        "Player.opponents", 
        "Player.op_actions", 
        "Subsession.round_number", ]
             ]

In [162]:
df


Out[162]:
Participant.id_in_session Player.id_in_group Player.player_role Player.action Player.opponents Player.op_actions Subsession.round_number
0 1 1 1 1 [2, 9] [1, 0] 1
1 2 2 0 1 [3, 1] [1, 1] 1
2 3 3 1 1 [4, 2] [0, 1] 1
3 4 4 1 1 [5, 3] [0, 1] 1
4 5 5 1 0 [6, 4] [0, 0] 1
5 6 6 1 0 [7, 5] [1, 0] 1
6 7 7 1 1 [8, 6] [1, 0] 1
7 8 8 0 1 [9, 7] [0, 1] 1
8 9 9 0 0 [1, 8] [1, 1] 1
9 1 1 1 0 [2, 9] [0, 0] 2
10 2 2 0 0 [3, 1] [0, 0] 2
11 3 3 0 0 [4, 2] [0, 0] 2
12 4 4 0 0 [5, 3] [0, 0] 2
13 5 5 1 0 [6, 4] [0, 0] 2
14 6 6 0 0 [7, 5] [0, 0] 2
15 7 7 0 1 [8, 6] [0, 0] 2
16 8 8 1 0 [9, 7] [0, 0] 2
17 9 9 1 0 [1, 8] [0, 0] 2
18 1 1 1 0 [2, 9] [0, 0] 3
19 2 2 1 0 [3, 1] [0, 0] 3
20 3 3 1 0 [4, 2] [0, 0] 3
21 4 4 0 0 [5, 3] [0, 0] 3
22 5 5 1 0 [6, 4] [0, 0] 3
23 6 6 1 0 [7, 5] [1, 0] 3
24 7 7 1 0 [8, 6] [0, 0] 3
25 8 8 1 1 [9, 7] [0, 1] 3
26 9 9 1 0 [1, 8] [0, 0] 3
27 1 1 1 0 [2, 9] [0, 0] 4
28 2 2 1 0 [3, 1] [0, 0] 4
29 3 3 0 0 [4, 2] [0, 0] 4
... ... ... ... ... ... ... ...
150 7 7 0 0 [8, 6] [0, 0] 17
151 8 8 1 0 [9, 7] [0, 0] 17
152 9 9 1 0 [1, 8] [0, 0] 17
153 1 1 1 0 [2, 9] [0, 0] 18
154 2 2 1 0 [3, 1] [0, 0] 18
155 3 3 0 0 [4, 2] [0, 0] 18
156 4 4 0 0 [5, 3] [0, 0] 18
157 5 5 0 0 [6, 4] [0, 0] 18
158 6 6 1 0 [7, 5] [0, 0] 18
159 7 7 0 0 [8, 6] [0, 0] 18
160 8 8 1 0 [9, 7] [0, 0] 18
161 9 9 1 0 [1, 8] [0, 0] 18
162 1 1 1 0 [2, 9] [0, 0] 19
163 2 2 1 0 [3, 1] [0, 0] 19
164 3 3 1 0 [4, 2] [0, 0] 19
165 4 4 1 0 [5, 3] [0, 0] 19
166 5 5 1 0 [6, 4] [0, 0] 19
167 6 6 1 0 [7, 5] [0, 0] 19
168 7 7 0 0 [8, 6] [0, 0] 19
169 8 8 1 0 [9, 7] [0, 0] 19
170 9 9 1 0 [1, 8] [0, 0] 19
171 1 1 1 0 [2, 9] [0, 0] 20
172 2 2 0 0 [3, 1] [0, 0] 20
173 3 3 0 0 [4, 2] [0, 0] 20
174 4 4 1 0 [5, 3] [0, 0] 20
175 5 5 1 0 [6, 4] [0, 0] 20
176 6 6 1 0 [7, 5] [0, 0] 20
177 7 7 1 0 [8, 6] [0, 0] 20
178 8 8 0 0 [9, 7] [0, 0] 20
179 9 9 0 0 [1, 8] [0, 0] 20

180 rows × 7 columns


In [175]:
def plotStageAction(player_actions, player_roles, periods):
    fig, axes = plt.subplots(4, 5, figsize=(20, 16))
    fig.suptitle("Network1: red-active, blue-inactive", fontsize=24)
    for line_axes in axes:
        for ax in line_axes:
            for d in ["top", "bottom", "right", "left"]:
                ax.spines[d].set_visible(False)
                ax.tick_params(axis='x', which='both', bottom='off', top='off', labelbottom='off')
                ax.tick_params(axis='y', which='both', left='off', right='off', labelleft='off')
    
    x_list = [0, -0.64, -0.98, -0.87, -0.34, 0.34, 0.87, 0.98, 0.64, 0]#[0, 0.95, 0.59, -0.59, -0.95, 0]
    y_list = [1, 0.77, 0.18, -0.5, -0.94, -0.94, -0.5, 0.17, 0.77, 1]#[1, 0.31, -0.81, -0.81, 0.31, 1]
    
    for p in range(periods):
        ax_x = p//5
        ax_y = p%5
        axes[ax_x, ax_y].set_title("Period{}".format(p+1), fontsize=16)
        axes[ax_x, ax_y].plot(x_list, y_list, color='gray')
        for i in range(9):
            if player_roles[p][i] == 0:
                marker = "o"
            else:
                marker = "D"
                
            if player_actions[p][i] == 0:
                axes[ax_x, ax_y].plot(x_list[i], y_list[i], marker, color='red', markersize=12)
            elif player_actions[p][i] == 1:
                axes[ax_x, ax_y].plot(x_list[i], y_list[i], marker, color='blue', markersize=12)
            elif player_actions[p][i] == 2:
                axes[ax_x, ax_y].plot(x_list[i], y_list[i], marker, color='purple', markersize=12)
        axes[ax_x, ax_y].set_xlim(-1.1, 1.1)
        axes[ax_x, ax_y].set_ylim(-1.1, 1.1)
    plt.show()

In [176]:
nodes = [1, 2, 3, 4, 5, 6, 7, 8, 9]
periods = 20
player_actions = [[] for p in range(periods)]
player_roles = [[] for p in range(periods)]

for p in range(periods):
    players = df.iloc[p*len(nodes):(p+1)*len(nodes), :]
    player_actions[p] = list(players["Player.action"])
    player_roles[p] = list(players["Player.player_role"])

plotStageAction(player_actions, player_roles, p+1)



In [ ]: