как получить data-data из csv-файла, содержащего все отношения в одну строку? - PullRequest
1 голос
/ 29 апреля 2019

Я хочу построить график отношений в сети для предприятий.В моем csv-файле все данные для этих растений содержатся в одной строке для каждого растения.Например: номер растения, название растения, сопутствующие растения, антагонисты.Теперь мне нужен график сети x, где название растения находится посередине и имеет отношение ко всем сопутствующим растениям (каждое сопутствующее растение является узлом, а основное растение имеет ребра для всех этих сопутствующих растений).

Для apple данные выглядят так:

1,apple,"pearl,strawberry,onion,potato","rose,cabbage,dill"

Я знаю, как создать сам график, потому что я работал над другим старым файлом csv, в котором завод и каждый компаньон находились в отдельной строке, например:

apple,pearl
apple,strawberry
apple,onion
apple,potato

Я хочу знать, как читать и получать ребра из этого нового CSV, в котором все спутники на одной строке разделены запятой.Есть предложения?

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Вы не должны разбивать свои строки CSV на ',', как предложено в другом вопросе.Ваши переменные в CSV содержат ',', поэтому вы получите неверный результат.Просто используйте pandas.read_csv():

df = pd.read_csv('WAKA.csv', header=None)


    0   1       2                               3
0   1   apple   pearl,strawberry,onion,potato   rose,cabbage,dill
1   2   apple1  pearl,strawberry,onion,potato   rose,cabbage,dill

, затем выполните итерации для строк, получите столбец 1, разбейте строку в столбце 2 на ',' и добавьте его в свой график networkx:


for l in df.iterrows():   # Iterate through dataframe rows
    G.add_edges_from(     # Add edges to graph
        (l[1][1], fruit)  # It is the edge: element from column 1 and splitted fruit
        for fruit in l[1][2].strip('"').split(',')  # Crop '"' and split by ','
    )

затем просто нарисуйте его:

nx.draw(
    G,
    node_size=3500,
    font_size=40,
    labels={n: n for n in G.nodes}
)

enter image description here

0 голосов
/ 29 апреля 2019

Я не знаю много о NetworkX, но вы можете извлечь всю свою информацию в словарь и использовать ее для заполнения графика NetworkX.

plants = {}

with open('plant-data.csv') as fd:
    for line in fd:
        plant = line.split(',')

        plant_number = line[0]
        plant_name = line[1]
        plant_companions = line[2]
        plant_antagonists = line[3]

        plants[plant_name] = (plant_number, plant_companions, plant_antagonists)

Чтобы получить всех спутников apple,Вы можете просто получить доступ к plants["apple"][1].

...