Perl for visualization

Post on 31-May-2015

2.270 views 0 download

description

Data::Cube calculates Hash Array in order to pass the data array to d3.js !

Transcript of Perl for visualization

Perl forVisualization

YAPCASIA:2013 9/21113年9月21日土曜日

print Dumper $me{ twitter => “@muddydixon”, organization => “NIFTY”, job => “low spec full stack engineer”, skill => [ “data collecting”, “data cleansing”, “visualization”, ]}

213年9月21日土曜日

Today’s Topic

313年9月21日土曜日

Today’s Topic

413年9月21日土曜日

Key of VisualizationSTORIES

are main concept of visualizationare buried in dataenhance your business

513年9月21日土曜日

VisualizationTwo purposes:

1.Explanatory visualization 2.Exploratory visualization

613年9月21日土曜日

Explanatory visualizationcommunicating information clearly and effectively

713年9月21日土曜日

813年9月21日土曜日

Can you findSTORIES?

913年9月21日土曜日

1013年9月21日土曜日

1113年9月21日土曜日

1213年9月21日土曜日

加齢による技術向上

The more use, the higher skill

1313年9月21日土曜日

1413年9月21日土曜日

ひとりでできない10年選手はいなかった

Everybody who touch perl 10 years use perl :)1513年9月21日土曜日

1613年9月21日土曜日

7-9年目にがんばろう

7-10 years users practice more!

1713年9月21日土曜日

1813年9月21日土曜日

ここから読み取るのはムリ

We cannot find STORIES from text log1913年9月21日土曜日

This is thePOWER of Explanatoryvisualization

2013年9月21日土曜日

I / You caninform STORIES in data

to my / your colleagueto my / your bossto my / your audiences

2113年9月21日土曜日

Exploratory visualizationVisualization allow you to find STORIES from dataData Mining

2213年9月21日土曜日

via(道具としての)データサイエンティストのつかい方

2313年9月21日土曜日

ProblemsData Mining Engineer

a few domain specific knowledgeDomain Specialist

a few mining skill2413年9月21日土曜日

GOALBusinessSuccess

Domain Specific Knowledge

Data Mining Skill

2513年9月21日土曜日

How to applyDomain Specific Knowledgeto Data Mining Processes

2613年9月21日土曜日

What is Glue between two?What is Ladder to Goal?

2713年9月21日土曜日

GOALBusinessSuccess

Domain Specific Knowledge

Data Mining Skill

2813年9月21日土曜日

Ans. Visualization

2913年9月21日土曜日

GOALBusinessSuccess

Domain Specific Knowledge

Data Mining Skill

Trends

five-numbersummary

Co-occurence

Mosaic map

Flow chart

Parallel chart3013年9月21日土曜日

3113年9月21日土曜日

Domain Specific Expert

Data Mining Engineer

3213年9月21日土曜日

It looks like communicationto your data and your collaborators

3313年9月21日土曜日

Exploratory Visualizationfor Exploratory Data Analysis

do before model processing or fitting, testing

with Domain specific knowledge

3413年9月21日土曜日

How to communicate ?RSS-PlusSYSTATSPSSPands

3513年9月21日土曜日

We have Perl !!

3613年9月21日土曜日

Perl Data Language

3713年9月21日土曜日

Perl Data Languagestandard Perl the ability to compactly store and speedily manipulate the large N-dimensional data arrays which are the bread and butter of scientific computing.PDL turns Perl into a free, array-oriented, numerical language similar to (but, we believe, better than) such commercial packages as IDL and MatLab. One can write simple perl

3813年9月21日土曜日

Perl Data Languagestandard Perl the ability to compactly store and speedily manipulate the large N-dimensional data arrays which are the bread and butter of scientific computing.PDL turns Perl into a free, array-oriented, numerical language similar to (but, we believe, better than) such commercial packages as IDL and MatLab. One can write simple perl

3913年9月21日土曜日

Perl Data Languagestandard Perl the ability to compactly store and speedily manipulate the large N-dimensional data arrays which are the bread and butter of scientific computing.PDL turns Perl into a free, array-oriented, numerical language similar to (but, we believe, better than) such commercial packages as IDL and MatLab. One can write simple perl

We wantHash Object

4013年9月21日土曜日

#!/usr/bin/env perluse strict;use warnings;use Data::Dumper;use PDL; my $obj;$obj = pdl([[1,2,3],[4,5,6]]);print $obj; # [# [1 2 3]# [4 5 6]# ] $obj = pdl([{a => 1, b => 2, c => 3}, {a => 4, b => 5, c => 6}]);# Hash given as a pdl - but not {PDL} key! at Basic/Core/Core.pm.PL (i.e. PDL::Core.pm) line 1292.

# 工エェ(´Д`)ェエ工

4113年9月21日土曜日

4213年9月21日土曜日

Data::Cubeis an array of multi-dimensional datahas OLAP methods: dice, slice, etc.

4313年9月21日土曜日

Slice Rotate

DiceDrill-down

4413年9月21日土曜日

4513年9月21日土曜日

4613年9月21日土曜日

4713年9月21日土曜日

え・・・4813年9月21日土曜日

Data::Cube released!processing Array of Hash Objectadd / remove rollup measure add / remove dimensionadd / remove hierarchy

4913年9月21日土曜日

Data::Cube 1. Data Date Country SalesPerson Product Units Unit_Cost Total 3/15/2005 US Sorvino Pencil 56 2.99 167.44 3/7/2006 US Sorvino Binder 7 19.99 139.93 8/24/2006 US Sorvino Desk 3 275.00 825.00 9/27/2006 US Sorvino Pen 76 1.99 151.24 5/22/2005 US Thompson Pencil 32 1.99 63.68 10/14/2006 US Thompson Binder 57 19.99 1139.43 4/18/2005 US Andrews Pencil 75 1.99 149.25 4/10/2006 US Andrews Pencil 66 1.99 131.34 10/31/2006 US Andrews Pencil 114 1.29 147.06

5013年9月21日土曜日

Data::Cube 2. Usage my $file = shift; my $data = Text::CSV::Slurp->load(file => $file); my $cube;  say "============================================================"; say "raw data size: ".(scalar @$data)."\n";  say "\n============================================================"; $cube = new Data::Cube("experience"); $cube->put($data); say Dumper $cube->rollup(noValues => 1);  say "\n============================================================"; $cube->add_dimension("skill"); say Dumper $cube->rollup(noValues => 1);

5113年9月21日土曜日

Data::Cube 2. Usage my $file = shift; my $data = Text::CSV::Slurp->load(file => $file); my $cube;  say "============================================================"; say "raw data size: ".(scalar @$data)."\n";  say "\n============================================================"; $cube = new Data::Cube("experience"); $cube->put($data); say Dumper $cube->rollup(noValues => 1);  say "\n============================================================"; $cube->add_dimension("skill"); say Dumper $cube->rollup(noValues => 1);

たったのこれだけ

5213年9月21日土曜日

Data::Cube 3. Results$VAR1 = [ { 'count' => 150, 'dim' => 10年以上 }, { 'count' => 76, 'dim' => 1~3年 }, { 'count' => 32, 'dim' => 1年未満 }, { 'count' => 93, 'dim' => 4~6年 }, { 'count' => 43, 'dim' => 7~9年 } ];

5313年9月21日土曜日

Data::Cube 4. Results$VAR1 = [ { 'dim' => 10年以上, 'values' => [ { 'count' => 79, 'dim' => 上級者(一通り書こうと思えば書ける。わかんなかったらとりあえずソースコード読んじゃう) }, { 'count' => 71, 'dim' => 中級者(だいたいやりたいことはできるが、本やサイトを頼りにして確認したりする) }]}, { 'dim' => 1~3年, 'values' => [ { 'count' => 8, 'dim' => 上級者(一通り書こうと思えば書ける。わかんなかったらとりあえずソースコード読んじゃう) }, { 'count' => 56, 'dim' => 中級者(だいたいやりたいことはできるが、本やサイトを頼りにして確認したりする) }, { 'count' => 12, 'dim' => 初級者(人に聞いたりしないとなかなか書けない) }]}, { 'dim' => 1年未満, 'values' => [ { 'count' => 11, 'dim' => 中級者(だいたいやりたいことはできるが、本やサイトを頼りにして確認したりする) }, { 'count' => 21, 'dim' => 初級者(人に聞いたりしないとなかなか書けない) }]}, { 'dim' => 4~6年, 'values' => [ { 'count' => 25, 'dim' => 上級者(一通り書こうと思えば書ける。わかんなかったらとりあえずソースコード読んじゃう) }, { 'count' => 64, 'dim' => 中級者(だいたいやりたいことはできるが、本やサイトを頼りにして確認したりする) }, { 'count' => 4, 'dim' => 初級者(人に聞いたりしないとなかなか書けない) }]}, { 'dim' => 7~9年, 'values' => [ { 'count' => 19, 'dim' => 上級者(一通り書こうと思えば書ける。わかんなかったらとりあえずソースコード読んじゃう) }, { 'count' => 23, 'dim' => 中級者(だいたいやりたいことはできるが、本やサイトを頼りにして確認したりする) }, { 'count' => 1, 'dim' => 初級者(人に聞いたりしないとなかなか書けない) }]}];

5413年9月21日土曜日

Data::Cube 5. Measure my $cube = new Data::Cube("Country"); $cube->put($data); $cube->add_measure("sum", sub { my $sum = 0; foreach my $d (@_){ $sum += $d->{Units};} $sum;}); $cube->add_measure("mean", sub { my $sum = 0; foreach my $d (@_){ $sum += $d->{Units};} $sum / (scalar @_);}); print Dumper $cube->rollup(noValues => 1);  $cube->add_dimension("Product"); print Dumper $cube->rollup(noValues => 1);

5513年9月21日土曜日

Data::Cube 5. Measure my $cube = new Data::Cube("Country"); $cube->put($data); $cube->add_measure("sum", sub { my $sum = 0; foreach my $d (@_){ $sum += $d->{Units};} $sum;}); $cube->add_measure("mean", sub { my $sum = 0; foreach my $d (@_){ $sum += $d->{Units};} $sum / (scalar @_);}); print Dumper $cube->rollup(noValues => 1);  $cube->add_dimension("Product"); print Dumper $cube->rollup(noValues => 1);たったのこれだけ

5613年9月21日土曜日

Data::Cube 6. Measure$VAR1 = [ { 'count' => 10, 'dim' => 'CA', 'sum' => 687, 'mean' => '68.7' }, { 'count' => 11, 'dim' => 'UK', 'sum' => 764, 'mean' => '69.4545454545455' }, { 'count' => 22, 'dim' => 'US', 'sum' => 1103, 'mean' => '50.1363636363636' } ];

5713年9月21日土曜日

Data::Cube 7. Measure$VAR1 = [ { 'values' => [ { 'count' => 5, 'dim' => 'Binder', 'sum' => 288, 'mean' => '57.6'}, { 'count' => 1, 'dim' => 'Pen', 'sum' => 51, 'mean' => 51}, { 'count' => 1, 'dim' => 'PenSet', 'sum' => 61, 'mean' => 61}, { 'count' => 3, 'dim' => 'Pencil', 'sum' => 287, 'mean' => '95.6666666666667'} ], 'dim' => 'CA' }, { 'values' => [ { 'count' => 4, 'dim' => 'Binder', 'sum' => 242, 'mean' => '60.5'}, { 'count' => 1, 'dim' => 'Pen', 'sum' => 12, 'mean' => 12}, { 'count' => 3, 'dim' => 'PenSet', 'sum' => 205, 'mean' => '68.3333333333333'}, { 'count' => 3, 'dim' => 'Pencil', 'sum' => 305, 'mean' => '101.666666666667'} ], 'dim' => 'UK' },

5813年9月21日土曜日

to Visualization$cube -> HASH ref -> JSONJSON -> d3.js -> visualization

5913年9月21日土曜日

Summary

6013年9月21日土曜日

Summaryせっかく紹介しましたが、僕はこの手の処理はRでやります

6113年9月21日土曜日

> data = read.csv("./data/perl5census2013.csv")> summary(data) address experience 関東地方 :292 1~3年 : 76 近畿地方 : 39 10年以上:150 中部地方 : 23 1年未満 : 32 九州地方・沖縄: 17 4~6年 : 93 北海道地方 : 12 7~9年 : 43 東北地方 : 6 (Other) : 5 skill 初級者(人に聞いたりしないとなかなか書けない) : 38 上級者(一通り書こうと思えば書ける。わかんなかったらとりあえずソースコード読んじゃう):131 中級者(だいたいやりたいことはできるが、本やサイトを頼りにして確認したりする) :225

frequencyatbusiness frequencyatprivate Min. : 1.000 Min. : 1.000 1st Qu.: 2.000 1st Qu.: 2.000 Median : 6.000 Median : 5.000 Mean : 5.779 Mean : 5.388 3rd Qu.:10.000 3rd Qu.: 8.000 Max. :10.000 Max. :10.000

versionmanager システム Perl  (rpm, yum, インストール済みのperl等) :136 システム Perl  (rpm, yum, インストール済みのperl等), perlbrew : 92 perlbrew : 76 システム Perl  (rpm, yum, インストール済みのperl等), perlbrew, plenv: 14 perlbrew, plenv : 12 plenv : 9 (Other) : 55 2行

6213年9月21日土曜日

Summary: but継続的な可視化を専門家に見せるとき圧倒的な優位性!

6313年9月21日土曜日

Summary: ExampleTime Series

sales, repeat rate, DAU, system info, activitiesEffects of trial / campaign

attribution, condition, cost, cash back, etc.

6413年9月21日土曜日