

下記のコードを実行すると `t` の値を変えてもノードが赤くなりません。間違い等あればご指摘頂きたいです。

環境はJupyter Notebookでnetworkxのバージョンは2.6.3まで入ってます。

[code]

    import pandas as pd 
    df_links =　pd.read_csv（"links.csv''）
    df_links
    
[/code]

[code]

    import pandas as pd
    df_links = pd.read_csv("links.csv")
    df_links
    
    import networkx as nx
    import matplotlib.pyplot as plt
    
    G = nx.Graph()
    
    NUM = len(df_links.index)
    for i in range(1,NUM+1):
        node_no = df_links.columns[i].strip("Node")
        G.add_node(str(node_no))
    
    for i in range(NUM):
        for j in range(NUM):
            node_name=  "Node"+str(j)
            if df_links[node_name].iloc[i]==1:
                G.add_edge(str(i),str(j))
    
    nx.draw_networkx(G,node_color="k", edge_color="k", font_color="w")
    
    plt.show()
    
[/code]

[code]

    import numpy as np
    
    def determine_link(percent):
        rand_val = np.random.rand()
        if rand_val<=percent:
            return 1
        else:
            return 0
        
    def simulate_percolation(num, list_active, percent_percolation):
        for i in range(num):
            if list_active[i]==1:
                for j in range(num):
                     node_name=  "Node" + str(j)
                if df_links[node_name].iloc[i]==1:
                        if determine_link(percent_percolation)==1:
                            list_active[j] = 1
        
        return list_active
    
    percent_percolation = 0.1
    T_NUM = 36
    NUM = len(df_links.index)
    list_active= np.zeros(NUM)
    list_active[0]=1
    list_timeSeries= []
    
    for t in range(T_NUM):
        list_active= simulate_percolation(NUM,list_active,percent_percolation)
        list_timeSeries.append(list_active.copy())
                        
    def active_node_coloring(list_active):
        list_color = []
        for i in range(len(list_timeSeries[t])):
            if list_timeSeries[t][i]==1:
                list_color.append("r")
            else:
                list_color.append("k")
        
        return list_color
    
    t= 0
    
    nx.draw_networkx(G,font_color="w",node_color=active_node_coloring(list_timeSeries[t]))
    
    plt.show()
    
    t= 11
    
    nx.draw_networkx(G,font_color="w",node_color=active_node_coloring(list_timeSeries[t]))
    
    plt.show()
    
[/code]


CC BY-SA 4.0
2022-01-22T13:36:27.173
85861
2022-01-23T17:06:41.610
2022-01-23T16:17:13.013
3060
49477
question
python
Python 実践データ分析100本ノック　ノック72に関して


間違い部分が判明しました。  
使っているツールのモードを間違えてPythonでは重要なインデントの違いが見つけられなくなっていました。  
以下の関数の途中のインデントが違っています。

質問のソースで誤りの部分

[code]

    def simulate_percolation(num, list_active, percent_percolation):
        for i in range(num):
            if list_active[i]==1:
                for j in range(num):
                     node_name=  "Node" + str(j)
                if df_links[node_name].iloc[i]==1: #### この行のインデントがずれて少なくなっていた
                        if determine_link(percent_percolation)==1:
                            list_active[j] = 1
        
        return list_active
    
[/code]

正しい内容

[code]

    def simulate_percolation(num, list_active, percent_percolation):
        for i in range(num):
            if list_active[i]==1:
                for j in range(num):
                    node_name = "Node" + str(j)
                    if df_links[node_name].iloc[i]==1:
                        if determine_link(percent_percolation)==1:
                            list_active[j] = 1
        return list_active
    
[/code]


CC BY-SA 4.0
2022-01-23T17:06:41.610
85887
2022-01-23T17:06:41.610
26370
85861
answer