2017-10-06 11 views
-2

私はtitanic.txtデータセットを持っています。それは形をしている - 生き残ったカラムは1その後、乗客が生存している場合、 PassengerId生き残っ、PCLASS、名前、性別、年齢、SibSp、炒る、チケット、運賃、キャビンは、 1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S 2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C 3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S 4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,Sユナイテッドで行単位の行を計算する方法

を着手しました。着陸したのは乗客が乗った港です。

搭乗港での生存者と全乗客の比率を計算します。 これはどのようにawkコマンドを使って行うことができますか?

の予想される出力 - 1 C 0.553571 Q 0.38961 S 0.336957

+0

ここにも予想される出力を加えてください。私たちがこれをガイドするのがより簡単になります。 – RavinderSingh13

+0

@ RavinderSingh13予想される出力 –

+0

@ KarthikKを追加しました。出力が条件に合わない。あなたの出力を更新するか、あなたの条件を工夫してください – RomanPerekhrest

答えて

0

awk -F, 'NR>1 {sum[$NF]+=$2} 
     END {for(k in sum) print k,sum[k]/(NR-1)}' file 

をテストしていません。このような何か、分母は総旅客あるので、しかし、数自体は多くの意味があります。多分ポートあたりの生存率を望んでいたでしょうか?その場合は、count[$NF]++を追加し、それをENDブロックで割ります。

+1

あなたはタイプミスがあり、配列 'sum'を使ってアクセスしました、配列' count' –

+0

右、修正済み... – karakfa

0

おそらくこれはあなたからQ 0.38961を得た予想出力の確認、ないのに役立ちますあなたが初期応答を取得するように、あなたはそれ以外の場合は混乱するだろう、あなたが必要なものを明確に説明する必要があります:

$ cat f 
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S 
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C 
3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S 
4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S 

# denominator- total passengers of all ports with percentage 
# example : overall there were 3 passengers survived across all port, 
# in that port wise 
$ awk -F, '{sum[$NF]+=$2; total+=$2}END{for(k in sum)print k,sum[k]/total, (sum[k]/total)*100 }' f 
C 0.333333 33.3333 
S 0.666667 66.6667 

# denominator- total records of each port, with percentage 
# example : for port S, there were 3 passengers, 2 survived, so 66.66% 
awk -F, '{sum[$NF]+=$2; oc[$NF]++}END{for(k in sum)print k,sum[k]/oc[k],(sum[k]/oc[k])*100 }' f 
C 1 100 
S 0.666667 66.6667 

# denominator- total records in file, which karakfa suggested 
$ awk -F, '{sum[$NF]+=$2}END{for(k in sum)print k,sum[k]/NR }' f 
C 0.25 
S 0.5 
0

このプログラムは、各乗車ごとに、この乗車した人の知覚が生き残ったかどうかを計算する。

awk '{sum[NF]+=$2; tot[NF]++} END {for (emb in sum) print(emb, sum[emb]/tot[emb])}' file 
0
$ awk -F, '$2==1{a[$NF]++} END{for(i in a){print i,a[i]/NR}}' file 

$NF$NFとしてキーを持つ連想配列を作成して、第2のフィールドSurvivedすなわち$2==1 1.

あるたびに1だけ値をインクリメント Cまたは S
a[$NF]すなわち最後のフィールドに対応

出力:

C 0.25 
S 0.5 
関連する問題