2017-10-03 5 views
2

考える三つのファイル:199013つのcsvファイルからファイルを読み取り、次の統計を計算しますか?ソーシャルネットワークを定義

node,type 
2001 10,comic 
2001 8,comic 
2001 9,comic 
24-HOUR MAN/EMMANUEL,hero 
3-D MAN/CHARLES CHAN,hero 
4-D MAN/MERCURIO,hero 
8-BALL/,hero 
A '00,comic 
A '01,comic 
A 100,comic 
A 101,comic 

総ライン

- 2つの列、ノードおよびタイプが含まれています。各行は、ソーシャルネットワーク内のノードを定義します。 Nodeはノードの名前で、タイプは主人公かコミックです。

hero,comic 
24-HOUR MAN/EMMANUEL,AA2 35 
3-D MAN/CHARLES CHAN,AVF 4 
3-D MAN/CHARLES CHAN,AVF 5 
3-D MAN/CHARLES CHAN,COC 1 
3-D MAN/CHARLES CHAN,H2 251 
3-D MAN/CHARLES CHAN,H2 252 
3-D MAN/CHARLES CHAN,M/PRM 35 
3-D MAN/CHARLES CHAN,M/PRM 36 
3-D MAN/CHARLES CHAN,M/PRM 37 

96501行

- 2列、ヒーローや漫画が含まれています。各行は、ソーシャルネットワークのヒーローノードからコミックノードへのエッジを定義します。

hero1,hero2 
"LITTLE, ABNER","PRINCESS ZANDA" 
"LITTLE, ABNER","BLACK PANTHER/T'CHAL" 
"BLACK PANTHER/T'CHAL","PRINCESS ZANDA" 
"LITTLE, ABNER","PRINCESS ZANDA" 
"LITTLE, ABNER","BLACK PANTHER/T'CHAL" 
"BLACK PANTHER/T'CHAL","PRINCESS ZANDA" 
"STEELE, SIMON/WOLFGA","FORTUNE, DOMINIC" 
"STEELE, SIMON/WOLFGA","ERWIN, CLYTEMNESTRA" 

574468ライン

- 2つの列、hero1とHERO2が含まれています。各行は、1つのコミックに登場する2人のヒーローのインスタンスを定義します。

この問題を解決するにはどうすればよいでしょうか?

答えて

1

は、迅速な読み取りの後、それが見えます。

さんが質問を介して実行してみましょう:

A)Number of heroes - あなたは英雄に、nodes.csvでそのポイントをエントリのみをカウントする必要があります。

b)Number of comics - 本のためだけのものです。あなたはa)と同時にそれをやることができます。ヒーローや漫画のいずれかに重複がある場合は、重複を簡単に取り除く方法として、Setにそれらを保存したいと考えています。

c)Mean books per character - このデータはedges.csvに存在します。 HeroからCollection<Comic>にマップを作成したいとします。その後、すべてのコレクションサイズを実行して平均を取ることを望みます。 Comic -> Collection<Hero>: - Cと同じ)、ちょうど逆で

Map<String, Set<String>> heroToComic = new HashMap<>(); 
for (/* each csv row line - you need to implement it */) { 
    Set<String> heroComics = heroToComic.get(heroFromCsvLine); 
    if (null == heroComics) { 
     // we are adding first comic, so we need to initialize the set first 
     heroComics = new HashSet<>(); 
     heroToComic.put(heroFromCsvLine, heroComics); 
    } 
    heroComics.add(comicFromCsvLine); 
} 

// at this stage map is ready 
Collection<Set<String>> allComicsPerHero = heroToComic.values(); 
// now count the average size of collections contained in allComicsPerHero 
// cases d & e are similar 

D)Mean characters per book

流れは次のようになるであろう。

e)Mean partners per hero - そのデータはhero-network.csvです。あなたは「誰が誰を知っているか」のマップを保持したい。レコードA knows Bを読むときは、マップに2つのエントリ、すなわちA knows BB knows Aを入力する必要があります(入力にも逆の関係があることがわかっている場合を除きます)。もう一度、それはマップHero -> Collection<Hero>です。ヒーローは複数のヒーローを知っている可能性があるので、ここではCollectionを使用しているため、単純なマッピングではありません:)再び平均を数えることができます。

+0

私はa)とb)を完了しましたが、私はまだc)、d)、e)を進める方法がまだ分かりません。ファイルから読み込み中に、「Hero」から「Collection 」までのマップを作成するにはどうすればよいですか。 –

+1

c)の例を参照してください.d&eも同様です。独自のCSV解析を作成する必要がありますが、接続は簡単です。 –

+0

if(null ==漫画)の「コミック」とは何か?その条件文は正確に何をしていますか? –

0

この問題を解決するには複数の方法があります。私のやり方は次のようになります。

  • 各CSVファイルごとに別々のクラスを作成します。
  • 各クラスのArrayListsを作成し、CSVファイルの各行にオブジェクトを作成し、それぞれの配列リストに格納します。
  • ArrayListsを使用して必要な計算を繰り返します。一度にすべて CSV-sから任意の複雑なデータ構造を使用するか、またはデータとの関係のグラフ全体を構築する必要はありませんよう
関連する問題