App-Bin4TSV
view release on metacpan or search on metacpan
scripts/colpairs view on Meta::CPAN
sub pickN ( $@ ) {
my $n = shift @_ ;
splice @_ , 0, $n ;
}
sub reading ( ) {
if ( $o{'='} ) {
my $head = <> ;
chomp $head ;
@heads = split /\t/ , $head , -1 ;
}
while ( <> ) {
chomp ;
my @F = split /\t/ , $_ , -1 ;
if ( ! $o{N} && !$o{T} )
{
for my $i ( 0 .. $#F ) {
for my $j ( 0 .. $#F ) {
$pf -> [ $i ] [ $j ] { $F[$i] . "\t" . $F[$j] } ++ ;
}
}
}
elsif ( ! $o{T} )
{
for my $i ( 0 .. $#F ) {
for my $j ( 0 .. $#F ) {
$pf -> [ $i ] [ $j ] { $F[$i] } { $F[$j] } ++ ;
}
}
}
else
{
for my $i ( 0 .. $#F ) {
for my $j ( 0 .. $#F ) {
for my $k ( 0 .. $#F ) {
$tf -> [ $i ] [ $j ] [ $k ] { $F[$i] . "\t" . $F[$j] } { $F[$k] } ++ ;
}
}
}
}
$rows ++ ;
}
}
sub showing1 ( ) {
my $cols = @{ $pf } ;
@heads = ( 1 .. $cols ) unless @heads ; #defined $cols
my @diag = map { scalar keys %{ $pf -> [$_][$_]}} 0 .. $cols -1 ;
# åºå表ã®è¡¨é
my @out = ( (BOLD 'pairs') , map { UNDERLINE $_ } 1 .. $cols ) ;
push @out , UNDERLINE YELLOW 'col_' . ($o{'='} ? 'name' : 'num') ;
push @out , UNDERLINE('minstr') , UNDERLINE('maxstr') if 0 ne ($o{v}//'') ;
say join "\t" , @out ;
# åºå表ã®åè¡
my $cell ; # $cell -> [] []
for my $i ( 0 .. $cols - 1 ) {
my @out = () ;
# 表å´
push @out , ($i+1).':' ; #. color('reset') ; # åçªå·
# å³ä¸ã®é¨å
for my $j ( 0 .. $i -1 ) {
push @out , color('blue') . sprintf ( "%2.4f" , $cell->[$i][$j] * 100 ). color('reset');
#( min values %{ $pf->[$i][$j] } ) . "-" . ( max values %{ $pf->[$i][$j] } ) ;
}
# 対è§ç·ã®é¨å
push @out, color('bright_green') . (scalar keys %{$pf->[$i][$i]}) . color('reset') ;
# å·¦ä¸ã®é¨å
for my $j ( $i + 1 .. $cols -1 ) {
my $val0 = scalar keys %{ $pf->[$i][$j] } ;
my $prod = $diag[$i] * $diag[$j] ;
my $dmin = max $diag[$i] , $diag[$j] ;
my $val = $val0 ;
$val = color('bright_yellow') . $val . color( 'reset') . ':' if $val0 == $rows ; # çµåãæ° == ãã¼ã¿è¡æ°
$val = color('yellow').$val.color('reset') . '*' if $val0 == $prod ; # çµåãæ° == 2åããããã®å
¨çµåãæ°
$val = color('cyan').$val.color('reset') . '-' if $val0 == $dmin ; # çµåãæ° == 2åããããã®ç°ãªãæ°ã®å°ãªãæ¹
push @out , $val ;
my $tmp = min $prod, $rows ;
$cell -> [$j][$i] = $tmp == $dmin ? "nan" : ( $val0 - $dmin ) / ( $tmp - $dmin ) ; # ã¹ã³ã¢ã®è¨ç®
}
push @out , YELLOW $heads[$i] ; # color ( 'green') . $heads [$i] . color ( 'reset') ; # å
¥ååã®ååã追å
push @out , tabsplit1 (minstr keys %{ $pf->[$i][$i] } ) if 0 ne ( $o{v} // '') ;
push @out , tabsplit1 (maxstr keys %{ $pf->[$i][$i] } ) if 0 ne ( $o{v} // '') ;
print join "\t" , @out ;
print "\n" ;
}
}
sub showing2 ( ) {
my $cols = @{ $pf } ;
@heads = ( 1 .. $cols ) unless @heads ; #defined $cols
my @diag = map { scalar keys %{ $pf -> [$_][$_]}} 0 .. $cols -1 ;
# åºå表ã®è¡¨é
my @out = ( (BOLD 'freq').'(min-mid-max)' , map { UNDERLINE $_ } 1 .. $cols ) ;
push @out , UNDERLINE YELLOW 'col_' . ($o{'='} ? 'name' : 'num') ;
push @out , UNDERLINE('q_value') if 0.9 < ($o{v}//'1') ;
say join "\t" , @out ;
# åºå表ã®åè¡
my $cell ; # $cell -> [] []
for my $i ( 0 .. $cols - 1 ) {
my @out = () ;
push @out , ($i+1) . ':' ;
# å·¦ä¸
for my $j ( 0 .. $i - 1 ) {
my $val = do { my $t = pickN 1, ( qval $pf -> [$j][$i] ) ; $t =~ s/\t/|/r } ;
push @out , $val ;
}
# 対è§ç·
my $val = join'-',(min values%{$pf->[$i][$i]}),(midval $pf->[$i][$i]),(max values%{$pf->[$i][$i]}) ;
push @out , BRIGHT_GREEN $val ;
# å³ä¸
for my $j ( $i+1 .. $cols -1 ) {
my ( $val ) ; # ã»ã«ã®ä¸ã¤ã®å¤
my @tmp ;
push @tmp , min values %{ $pf->[$i][$j] } ;
push @tmp , midval $pf->[$i][$j] ;
push @tmp , max values %{ $pf->[$i][$j] } ;
$val = join "-" , @tmp ;
push @out , $val ;
}
push @out , YELLOW $heads [$i] ;
#push @out , UNDERLINE('most_freq') if 0.9 < ($o{v}//'1') ;
push @out , join "\t" , pickN $o{m}, @{[ map { tabsplit1 $_ } qval $pf->[$i][$i] ]} if 0.9 < ($o{v}//'1') ;
print join "\t" , @out ;
print "\n" ;
}
}
# éæ±ºå®æ§
sub nonDeterminability ( $$ ) {
my $cnt = 0 ;
my $pfij = $pf -> [ $_[0] ][ $_[1] ] ;
for ( keys %{ $pfij } ) { # $pfijv
if ( 1 < scalar keys %{ $pfij -> { $_ } } ) {
$cnt ++ ;
push @{ $pfijv -> [ $_[0] ] [ $_[1] ] } , $_ ; # <-- ãªããé£ãããã
}
}
return $cnt ;
}
sub showing3 ( ) {
my $cols = @{ $pf } ;
@heads = ( 1 .. $cols ) unless @heads ; #defined $cols
my @diag = map { scalar keys %{ $pf -> [$_][$_]}} 0 .. $cols -1 ;
# åºå表ã®è¡¨é
my @out = ( ( BOLD 'undec' ) , map { UNDERLINE $_ } 1 .. $cols ) ;
push @out , UNDERLINE YELLOW 'col_' . ($o{'='} ? 'name' : 'num') ;
push @out , UNDERLINE('value_not_determining_other_column_value') if 0.9 < ($o{v}//'1') ;
say join "\t" , @out ;
# åºå表ã®åè¡
my $cell ; # $cell -> [] []
for my $i ( 0 .. $cols - 1 ) {
my @out = () ;
push @out , ($i+1) . ':' ;
# å·¦ä¸
my @o2 ;
for my $j ( 0 .. $cols - 1 ) {
my $val = nonDeterminability ( $i , $j ) ;
push @o2 , $val ;
}
my $tmp = ( min grep { $_ != 0 } @o2 ) // '0' ;
my $posj ; # ã©ãã§æå°å¤ã¨ãªã£ãã®ã
do { $o2[$_] == $tmp and $o2[$_] = BOLD $o2[$_] and $posj //= $_ } for 0 .. $#o2 ;
push @out , @o2 ;
push @out , YELLOW $heads [$i] ; # ååã¾ãã¯åçªå·ãæ¿å
¥
my @o3 = sort { keys %{$pf->[$i][$posj]{$b}} <=> keys %{$pf->[$i][$posj]{$a}} || $a cmp $b } @{ $pfijv->[$i][$posj] } ;
$_ = $_ . FAINT '(' . (keys $pf->[$i][$posj]{$_} ) .')' for @o3 ;
push @out , pickN $o{m}, @o3 ; # @{ $pfijv->[$i][$posj] } ;
say join "\t" , @out ;
next ;
# 対è§ç·ã®é¨å
# push @out, color('bright_green') . (scalar keys %{$pf->[$i][$i]}) . color('reset') ;
push @out, 0 ;
# å³ä¸
for my $j ( $i+1 .. $cols -1 ) {
my $val = nonDeterminability ( $i , $j ) ;
push @out , $val ;
}
push @out , YELLOW $heads [$i] ;
say join "\t" , @out ; next ;
}
}
sub showing4 ( ) {
my $cols = @{ $tf } ;
@heads = ( 1 .. $cols ) unless @heads ; #defined $cols
my @diag = map { scalar keys %{ $tf -> [$_][$_][$_]}} 0 .. $cols -1 ;
# åºå表ã®è¡¨é
print GREEN join ("\t" , "wC" , 1 .. $cols , "dis") , "\n" ;
# åºå表ã®åè¡
my $cell ; # $cell -> [] []
for my $i ( 0 .. $cols - 1 ) {
my @out = () ;
push @out , color('green') . ($i+1) . color('reset') ;
# å·¦ä¸
for my $j ( 0 .. $i - 1 ) {
push @out , color('blue') . join ( "," , whichColDet ( $i , $j , 1 ) ) . color('reset') ;#whichColDet ( $i , $j ) ;
}
# 対è§ç·ã®é¨å
#push @out, color('bright_green') . ( scalar keys %{ $tf->[$i][$i][$i] } ) . color('reset') ;
my @diagD = whichColDet ( $i, $i , 0 ) ;
my %seen ; $seen{$_} = 1 for @diagD ;
push @out , color('bright_green') . join ( ',' , @diagD ) . color('reset') ;
# å³ä¸
for my $j ( $i+1 .. $cols -1 ) {
push @out , join (',', grep { ! $seen{$_} } whichColDet ( $i , $j , 0 ) ) ;
}
# ããã«1å
push @out, color('bright_green') . ( scalar keys %{ $tf->[$i][$i][$i] } ) . color('reset') ;
push @out , color ( 'green') . $heads [$i] . color ( 'reset') ;
print join "\t" , @out ;
print "\n" ;
}
}
sub whichColDet ( $$ $ ) {
my $tfij = $tf ->[ $_[0] ][ $_[1] ] ;
my @ret ;
for ( 0 .. scalar @{ $tfij } -1 ) {
next if $_ == $_[0] || $_ == $_[1] ;
my $cnt = 0 ;
for my $vi ( keys %{ $tfij -> [$_] } ) {
$cnt ++ if 1 < scalar keys %{ $tfij -> [$_]{$vi} } ;
}
push @ret , $_ + 1 if $cnt == $_[2] ;
}
return @ret ;
}
( run in 0.903 second using v1.01-cache-2.11-cpan-ff9377addf4 )