csvのデータを棒グラフに表示するまで

#目的
csvで手に入れたデータを、rで可視化する

Rでは、データフレーム、リスト、ベクトル、行列・・・
と表構造だけでも幾つかのデータ構造があり、
求められているデータ構造に変換しないと、処理がうまくいかない。

今回は
1. CSVファイルを取り込む
2. データフレームをvectorに変換する
3. barplotによって、データを棒グラフで表示する




#サンプルデータ
以下のサイトより、日経平均株価のcsvデータを取得する
http://k-db.com/indices/I101

または以下をコピペし、
I101 2.csv
というファイル名で保存する

```
highest,low,end
17864.7,17684.66,17750.68
17905.37,17666.48,17865.23
17638.93,16767.09,17518.3
17235.44,16942.13,17041.45
17242.27,16947.95,17163.92
16839.52,16652.26,16708.9
17208.24,16922.21,17110.91
16993.96,16332.45,16958.53
16734.58,16017.26,16017.26
17031.32,16387.61,16416.19
17088.31,16812.65,17048.37
17037.26,16665.05,16955.57
17597.87,17057.6,17147.11
17393.83,16944.41,17240.95
17717.75,17414.55,17715.63
17546.57,17184.78,17218.96
17975.31,17509.64,17697.96
18172.04,17767.34,17767.34
18469.38,18064.3,18191.32
18547.38,18327.52,18374
18951.12,18394.43,18450.98
19113.18,19017.27,19033.71
18991.01,18783.36,18982.23
18922.9,18764.54,18873.35
18870.7,18744.44,18769.06
19071.41,18780.94,18789.69
18943.46,18824.65,18886.7
18979.83,18651.13,18916.02
19869.08,18982.25,18986.8
19507.17,19325.15,19353.56
19054.89,18859.11,19049.91
18897.87,18562.51,18565.9
18911.78,18611.09,18883.42
19282.21,19020.75,19230.48
19125.06,19025.78,19046.55
19475.4,19260.12,19301.07
19764.21,19475.28,19492.6
19811.51,19677.21,19698.15
19660.9,19444.54,19504.48
19967.88,19862.74,19939.9
20002.12,19926.22,19938.13
20012.4,19797.55,20012.4
19867.95,19707.67,19747.47
19994.05,19831.25,19883.94
19992.44,19926.1,19944.41
19871.75,19786.53,19847.58
19954,19834.76,19924.89
19879.81,19715.74,19879.81
19959.06,19761.56,19859.81
19840,19643.97,19649.18
19726.01,19628.84,19630.63
19451.09,19252.04,19393.69
19601.49,19388.91,19596.91
19725.83,19597.99,19697.77
19724.12,19602.01,19691.39
19674.05,19457.05,19671.26
19684.41,19389.74,19642.74
19294.15,19164.86,19265.6
19167.09,18995.96,19116.41
19151.89,18926.91,18926.91
18861.11,18641.22,18683.24
19202.34,18784.69,19083.1
19080.89,18809.48,18935.71
18925.51,18815.12,18903.02
18964.99,18760.79,18777.04
19088.76,18937.45,18947.12
18915.64,18746.61,18825.3
18579.14,18376.01,18435.87
18605.41,18167.64,18554.28
18253.13,18147.98,18207.15
18314.09,18078.43,18131.23
18397.52,18238.78,18291.8
18170.67,17758.12,18096.9
18126.39,17831.53,17891
18359.71,18223.8,18234.74
18438.67,18184.96,18438.67
18400.69,18121.68,18141.17
18379.23,18043.08,18322.98
18372.72,18094.85,18186.1
18079.46,17869.74,18005.49
17775.77,17537.85,17725.13
17831.58,17389.57,17722.42
17460.97,17179.4,17388.15
17366.95,16901.49,16930.84
17886.49,17562.6,17645.11
17880.51,17483.69,17880.51
17865.84,17571.83,17571.83
18295.9,18069.5,18070.21
18468.2,18289.63,18432.27
18291.97,18094.99,18171.6
18329.57,17995.98,18026.48
18344.07,17925.09,17965.7
18362.99,18124.35,18264.22
18420.56,17956.15,18299.62
18770.51,17756.76,18770.51
17962.56,17415.61,17427.08
18013.64,17478.72,17860.47
18312.13,17608.17,17792.16
18481.57,18176.75,18182.39
18467.44,17857.3,18095.4
18777.47,18165.69,18165.69
19019.61,18749.77,18890.48
19192.82,18901.09,19136.32
18810.05,18486.46,18574.44
18442.84,17714.3,18376.83
18835.35,17747.5,17806.7
19154.65,18498.8,18540.68
19737.54,19435.83,19435.83
20246.47,20033.29,20033.52
20521.97,20218.03,20222.63
20663.18,20545.25,20554.47
20668.87,20541,20620.26
20605.46,20484.67,20519.45
20633.91,20306.98,20595.55
20703.2,20303.02,20392.77
20946.93,20582.01,20720.75
20820.86,20617.05,20808.69
20754,20567.51,20724.56
20817.48,20664.44,20664.44
20715.48,20469.87,20614.06
20552.04,20448.49,20520.36
20562.2,20396.5,20548.11
20585.24,20466.8,20585.24
20583.57,20443.89,20522.83
20425.69,20205.21,20302.91
20423.58,20070.62,20328.89
20486.93,20278.73,20350.1
20631.54,20527.78,20544.53
20708.23,20648.76,20683.95
20677.84,20576.19,20593.67
20850,20710.34,20841.97
20658.95,20611.22,20650.92
20612.5,20522.25,20600.12
20496.6,20401.09,20463.33
20435.53,20322.2,20385.33
20120.15,19911.39,20089.77
19978.24,19720.15,19779.83
19855.5,19115.2,19855.5
20310.89,19737.64,19737.64
20428,20337.18,20376.59
20310.72,20012.23,20112.12
20557.51,20431.25,20539.79
20601.73,20479.85,20522.5
20346.74,20225.27,20329.32
20243.18,20118.26,20235.73
20361.6,20093.16,20109.95
20785.76,20650,20706.15
20866.58,20758.6,20771.4
20952.71,20838.22,20868.03
20809.42,20531.13,20809.42
20433.3,20174.14,20428.19
20194.45,20075.91,20174.24
20200.51,19990.55,19990.82
20323.08,20126.57,20219.27
20368.21,20234.16,20257.94
20401.48,20205.1,20387.79
20437.26,20331.19,20407.08
20382.97,20178.04,20382.97
20264.92,20016.32,20046.36
20332.42,20095.48,20096.3
20544.94,20359.06,20457.19
20480.25,20363.18,20460.9
20552.46,20438.21,20488.19
20506.35,20397.73,20473.51
20619.61,20470.26,20543.19
20595.41,20410.27,20569.87
20636.41,20508.4,20563.15
20655.33,20473.27,20551.46
20513.22,20363.21,20472.58
20473.85,20378.77,20437.48
20417.77,20318.54,20413.77
20278.31,20130.84,20264.41
20320.9,20175.78,20202.87
20278.89,20148.51,20196.56
20087.7,19946.75,20026.38
19890.27,19741.22,19890.27
19750.76,19633.75,19732.92
19717.8,19546.82,19570.24
19791.88,19494.7,19764.72
19626.75,19467.65,19624.84
19679.63,19586.81,19620.91
19458.75,19302.71,19379.19
19461.08,19257.85,19291.99
19549.39,19399.16,19531.63
19852.66,19502.61,19520.01
20133.78,20031.71,20058.95
20069.24,19909.86,19983.32
20142.47,20013.74,20020.04
20252.12,20116.19,20187.65
20144.66,19983,20133.9
19909.09,19678.22,19909.09
19725.86,19474.23,19634.49
19815.25,19638.37,19652.88
19894.35,19742.12,19885.77
19913.42,19823.86,19869.76
19922.5,19828.65,19908.68
19975.66,19825.69,19905.46
20006,19845.31,19907.63
19957.32,19822.49,19937.72
19845.53,19693.63,19789.81
19667.48,19501.31,19640.54
19424.09,19241.29,19397.98
19435.08,19289.04,19435.08
19433.89,19115.14,19312.79
19195.23,18927.95,19034.84
19607.25,19206.99,19206.99
19474.07,19227.29,19411.4
19590.03,19099.87,19285.63
19623.11,19397.01,19471.12
19775.45,19542.22,19746.2
19770.64,19646.35,19713.45
19778.6,19584.73,19754.36
19565.44,19416.63,19560.22
19557.17,19312.7,19476.56
19555.72,19389.24,19544.48
19479.89,19373.39,19437
19349.2,19226.71,19246.06
19335.8,19042.25,19254.25
19008.13,18774.42,18991.11
18836.93,18583.52,18723.52
18924.38,18577.06,18665.11
18878.15,18733.87,18790.55
18979.64,18808.3,18971
18767.5,18655.36,18751.84
18732.66,18586.84,18703.6
18910.52,18730.57,18815.16
18939.17,18775.23,18826.88
18865.39,18714.64,18797.94
18790.83,18587.13,18785.79
18648.77,18552.81,18585.2
18603.48,18427.98,18603.48
18509.08,18402.02,18466.92
18360.92,18297.67,18332.3
18322.5,18237.35,18264.79
18202.61,18092.32,18199.17
18009.45,17901.26,17987.09
18074.26,17978.9,18004.77
17962.11,17864.55,17913.36
18005.45,17884.34,17979.72
17673.27,17550.03,17652.68
17799.49,17653.61,17711.93
17700.67,17603.07,17648.5
17619.34,17484.67,17504.62
17743.11,17535.04,17678.74
17654.6,17271.87,17335.85
17628.4,17459.45,17558.04
17808.47,17661.1,17674.39
17778.83,17575.1,17606.22
17850.59,17615.93,17795.73
17768.41,17633.47,17768.3
```

#手順
## CSVを取り込む
まず作業ディレクトリを作成し、そこへ先ほどのデータを配置し、
以下のコマンドで読み込む
I101 2.csv

```
x <- read.csv('I101 2.csv')
```

read関数には、幾つかの読み込み方式がある。
今回はカンマ区切りのデータであるので、read.csvを使った。
これは、read.tableにて、sep=','という感じで区切り文字を指定したりもできる。

表示を行うと、以下のように表示される

```
> x
     highest      low      end
1   17864.70 17684.66 17750.68
2   17905.37 17666.48 17865.23
3   17638.93 16767.09 17518.30
4   17235.44 16942.13 17041.45
5   17242.27 16947.95 17163.92
6   16839.52 16652.26 16708.90
7   17208.24 16922.21 17110.91
8   16993.96 16332.45 16958.53
9   16734.58 16017.26 16017.26
10  17031.32 16387.61 16416.19
11  17088.31 16812.65 17048.37
12  17037....
```

##　行や列を取得する方法
**１行目を取得する**
変数を指定し、行数を指定し、列は空欄とする


```
> x[1,]
  highest      low      end
1 17864.7 17684.66 17750.68

```

逆にすると、１列目のデータを取得できる

```
> x[,1]
  [1] 17864.70 17905.37 17638.93 17235.44 17242.27 16839.52 17208.24 16993.96 16734.58 17031.32
 [11] 17088.31 17037.26 17597.87 17393.83 17717.75 17546.57 17975.31 18172.04 18469.38 18547.38
 [21] 18951.12 19113.18 18991.01 18922.90 18870.70 19071.41 18943.46 18979.83 19869.08 19507.17
 [31] 19054.89 18897.87 18911.78 19282.21 19125.06 19475.40 19764.21 19811.51 19660.90 19967.88
 
```

両方指定すると、１行１列のデータを取得できる

```
> x[1,1]
[1] 17864.7
```

**highest列を取得する**
列番号でも指定できるが、ヘッダー名でも指定することができる。
変数名$ヘッダー名
で列指定でデータを取得できる

```
> x$highest
  [1] 17864.70 17905.37 17638.93 17235.44 17242.27 16839.52 17208.24 16993.96 16734.58 17031.32
 [11] 17088.31 17037.26 17597.87 17393.83 17717.75 17546.57 17975.31 18172.04 18469.38 18547.38
 [21] 18951.12 19113.18 18991.01 18922.90 18870.70 19071.41 18943.46 18979.83 19869.08 19507.17
 [31] 19054.89 18897.87 18911.78 19282.21 19125.06 19475.40 19764.21 19811.51 19660.90 19967.88
 [41] 20002.12 20012.40 19867.95 19994.05 19992.44 19871.75 19954.00 19879.81 19959.06 19840.00
 [51] 19726.01 19451.09 19601.49 19725.83 19724.12 19674.05 19684.41 19294.15 19167.09 19151.89
 
```

##vectorへ変換
highest列を一列取得し
preという変数に格納
as.vector()関数で
preをvector型へ変換する

'''
> pre <-x$highest
> as.vector(pre)
  [1] 17864.70 17905.37 17638.93 17235.44 17242.27 16839.52 17208.24 16993.96 16734.58 17031.32
 [11] 17088.31 17037.26 17597.87 17393.83 17717.75 17546.57 17975.31 18172.04 18469.38 18547.38
 [21] 18951.12 19113.18 18991.01 18922.90 18870.70 19071.41 18943.46 18979.83 19869.08 19507.17
 [31] 19054.89 18897.87 18911.78 19282.21 19125.06 19475.40 19764.21 19811.51 19660.90 19967.88
 [41] 20002.12 20012.40 19867.95 19994.05 19992.44 19871.75 19954.00 19879.81 19959.06 19840.00

'''

is.vector()関数で、変数がvectorとなっていることを確認する

```
> is.vector(pre)
[1] TRUE
```

vector型へと変換できた

##棒グラフへ出力する
barplot()にて、vectorを出力する

```
barplot(pre)
```

![スクリーンショット 2016-02-03 23.46.32.png](https://qiita-image-store.s3.amazonaws.com/0/57455/f4094354-b25f-b232-ae67-be5a4362b4e2.png)

グラフが描画できた。

ちなみに、ソートミスで右端が２０１５年１月、左端が２０１６年２月２日の日経平均株価である。
左端最初の底は２０１６年初頭の資源安による株安で左へ上がっているのは黒田バズーカである。
その前の山を登って次の谷がチャイナショックによる株安である

***
#エラー対応

以下のようなデータを取得した時、

```
> ren <- read.table('len_width.txt', header = TRUE)
> ren
    len width  sp
1  58.2   7.1 Sp2
2  54.7  12.8 Sp1
3  47.4  18.4 Sp1
4  38.6  13.7 Sp1
5  46.5   9.3 Sp2
6  51.2  11.0 Sp2
7  47.8   9.9 Sp2
8  71.7  12.5 Sp2
9  48.6  18.0 Sp1
10 68.6  15.9 Sp2
11 51.0  14.3 Sp1
12 42.6  11.1 Sp1
13 46.6   6.0 Sp2
14 56.0  10.8 Sp2
15 26.4   4.9 Sp2
16 50.1   8.6 Sp2
17 44.0  14.1 Sp1
18 56.7  21.1 Sp1
19 51.6  16.0 Sp1
20 54.9  21.5 Sp1
21 56.2  18.3 Sp1
22 50.2   6.2 Sp2
23 36.5   7.8 Sp2
24 54.9  13.0 Sp1
25 47.3  10.2 Sp2
26 29.9   3.7 Sp2
27 71.9  24.3 Sp1
28 44.6  14.8 Sp1
29 60.4   7.6 Sp2
30 45.3   8.6 Sp2
31 62.5  10.6 Sp2
32 50.1  10.8 Sp1
33 54.3  11.6 Sp2
34 59.1  12.5
```

このようなエラーが発生した。

```
> barplot(ren)
Error in barplot.default(ren) : 
   'height' はベクトルか行列でなければなりません 
```

まず、棒グラフのデータなのに変量が３あるので当然むりであるので、
一列目だけを取り出したデータにした

```
> ren[,1]
 [1] 58.2 54.7 47.4 38.6 46.5 51.2 47.8 71.7 48.6 68.6 51.0 42.6 46.6 56.0 26.4 50.1 44.0 56.7 51.6
[20] 54.9 56.2 50.2 36.5 54.9 47.3 29.9 71.9 44.6 60.4 45.3 62.5 50.1 54.3 59.1 36.4 39.0 44.4 40.1
[39] 57.8 45.3 58.7 49.8 46.3 39.2 39.0 35.7 60.0 51.6 47.0 47.5
> barplot(ren[,1])
```

![スクリーンショット 2016-02-05 1.59.45.png](https://qiita-image-store.s3.amazonaws.com/0/57455/e5846ffe-a260-fcdc-e268-7473c7359b65.png)

訂正前、単純に記述が誤っているだけで、
これで正常にグラフを描画することができました。

csvから取得してきたデータは、何型だったのか？
取得してきたren変数の中身と、
renから取得した一列のデータ構造を以下で確認する

```
> is.vector(ren) 
[1] FALSE
> is.matrix(ren)
[1] FALSE
> is.array(ren)
[1] FALSE
> is.list(ren)
[1] TRUE
> is.data.frame(ren)
[1] TRUE
```

ren(csvから取得した構造そのまま)では、vectorでも行列でもない


```
> is.vector(ren[,1])
[1] TRUE
> is.matrix(ren[,1])
[1] FALSE
> is.array(ren[,1])
[1] FALSE
> is.list(ren[,1])
[1] FALSE
> is.data.frame(ren[,1])
[1] FALSE
```

列を取り出すと、行列ではないが、vectorとして取得できる。
そのため、barplotでは引数として受け取ることができる。