http://memo.sugyan.com/entry/2017/08/20/210903
ひまなときに読んでみよう
データ分析に関する備忘録。主にR言語を使ったデータの前処理や統計、機械学習などの方法を記録。ビッククエリとトレジャーデータがお気に入り。オフラインとオンラインの連携が最近のマイブーム。
kepler.glのサイト画面 kepler.glを使ってコロナ対策の効果を分析したところ、テレビ、新聞、ネットのメディアから問い合わせや報道依頼が殺到。今も、土日返上で都内や全国の人流変化を分析しています。この記事では人流変化の可視化に便利なkepler.glにつ...
宇宙科学がちょっと入ってる!まあ、宇宙好きだし。 |
> install.packages("dplyr")
> library(dplyr)
> #サンプルデータ作成 > > #まずはベクトルデータをつくる(先頭のv.はベクトルだと分かりやすいように付けているだけです) > v.date <- c("2017-08-01","2017-08-02","2017-08-03","2017-08-04","2017-08-05") > v.sales <- c(100,200,300,40,500) > > #データフレームを作成 > df.data <- tbl_df(date = v.date, sales = v.sales) Error in tbl_df(date = v.date, sales = v.sales) : unused arguments (date = v.date, sales = v.sales)
> #データフレームを作成 > df.data <- data.frame(date = v.date, sales = v.sales) > class(df.data) #データ構造の確認 [1] "data.frame"
> #データ表示 > df.data date sales 1 2017-08-01 100 2 2017-08-02 200 3 2017-08-03 300 4 2017-08-04 40 5 2017-08-05 500
> #tbl_dfに変換 > df.data <- tbl_df(df.data) > class(df.data) #データ構造の確認 [1] "tbl_df" "tbl" "data.frame"
> #データ表示 > df.data # A tibble: 5 x 2 date sales <fctr> <dbl> 1 2017-08-01 100 2 2017-08-02 200 3 2017-08-03 300 4 2017-08-04 40 5 2017-08-05 500
> #dateを日付データに変換 > df.data$date <- as.Date(df.data$date) > > #データ表示 > df.data # A tibble: 5 x 2 date sales <date> <dbl> 1 2017-08-01 100 2 2017-08-02 200 3 2017-08-03 300 4 2017-08-04 40 5 2017-08-05 500
> #filter > filter(df.data, date > "2017-08-03") # A tibble: 2 x 2 date sales <date> <dbl> 1 2017-08-04 40 2 2017-08-05 500
> #filter > filter(df.data, date > "2017-08-03") # A tibble: 0 x 2 # ... with 2 variables: date <fctr>, sales <dbl> Warning message: In Ops.factor(date, "2017-08-03") : ‘>’ not meaningful for factors
> #select > select(df.data, sales) # A tibble: 5 x 1 sales <dbl> 1 100 2 200 3 300 4 40 5 500
> arrange(df.data, sales) # A tibble: 5 x 2 date sales <date> <dbl> 1 2017-08-04 40 2 2017-08-01 100 3 2017-08-02 200 4 2017-08-03 300 5 2017-08-05 500
> #arrange > arrange(df.data, desc(sales)) # A tibble: 5 x 2 date sales <date> <dbl> 1 2017-08-05 500 2 2017-08-03 300 3 2017-08-02 200 4 2017-08-01 100 5 2017-08-04 40
> #mutate > mutate(df.data, year = substring(date,1,4)) # A tibble: 5 x 3 date sales year <date> <dbl> <chr> 1 2017-08-01 100 2017 2 2017-08-02 200 2017 3 2017-08-03 300 2017 4 2017-08-04 40 2017 5 2017-08-05 500 2017
> df.data %>% + filter(date > "2017-08-03") %>% + select(sales) %>% + arrange(desc(sales)) # A tibble: 2 x 1 sales <dbl> 1 500 2 40
> #group_by summarise > df.data %>% + mutate(year = substring(date,1,4)) %>% + group_by(year) %>% + summarise(total = sum(sales)) # A tibble: 1 x 2 year total <chr> <dbl> 1 2017 1140
> #まずはベクトルを作成 > v.date <- c("2017-08-01","2017-08-02","2017-08-03","2017-08-04","2017-08-05") > v.user <- c(1000,20,300,4,50) > > #データフレームを作成 > df.data_2 <- data.frame(date = v.date, user = v.user) > class(df.data_2) #データ構造の確認 [1] "data.frame" > #tbl_dfに変換 > df.data_2 <- tbl_df(df.data_2) > class(df.data_2) #データ構造の確認 [1] "tbl_df" "tbl" "data.frame"
> #data > df.data # A tibble: 5 x 2 date sales <date> <dbl> 1 2017-08-01 100 2 2017-08-02 200 3 2017-08-03 300 4 2017-08-04 40 5 2017-08-05 500 > df.data_2 # A tibble: 5 x 2 date user <fctr> <dbl> 1 2017-08-01 1000 2 2017-08-02 20 3 2017-08-03 300 4 2017-08-04 4 5 2017-08-05 50
> #日付に変換 > df.data_2$date <- as.Date(df.data_2$date) > > #data > df.data # A tibble: 5 x 2 date sales <date> <dbl> 1 2017-08-01 100 2 2017-08-02 200 3 2017-08-03 300 4 2017-08-04 40 5 2017-08-05 500 > df.data_2 # A tibble: 5 x 2 date user <date> <dbl> 1 2017-08-01 1000 2 2017-08-02 20 3 2017-08-03 300 4 2017-08-04 4 5 2017-08-05 50
> #inner_join > inner_join(df.data, df.data_2, by = "date") # A tibble: 5 x 3 date sales user <date> <dbl> <dbl> 1 2017-08-01 100 1000 2 2017-08-02 200 20 3 2017-08-03 300 300 4 2017-08-04 40 4 5 2017-08-05 500 50
一度は富士山に登ってみたい |
2017/08/12時点の評価額は57万1千961円なり |
> #Rに最初からあるサンプルデータ(EuStockMarkets)を使う > #中身は主要株価指数:DAX(ドイツ)、SMI(スイス)、CAC(フランス)、FTSE(イギリス) > #データの先頭部分を確認してみる > head(EuStockMarkets) DAX SMI CAC FTSE [1,] 1628.75 1678.1 1772.8 2443.6 [2,] 1613.63 1688.5 1750.5 2460.2 [3,] 1606.51 1678.6 1718.0 2448.2 [4,] 1621.04 1684.1 1708.1 2470.4 [5,] 1618.16 1686.6 1723.1 2484.7 [6,] 1610.61 1671.6 1714.3 2466.8 > #作図 > plot(EuStockMarkets)
plot(EuStockMarkets)の結果。上からドイツ、スイス、フランス、イギリスの主要株価指数の日次データ |
> install.packages("dplyr")
> library(dplyr)
> #tbl_df(データフレーム拡張したデータ構造)に変換 > EuStockMarkets_df <- tbl_df(EuStockMarkets) Error in tbl_df(EuStockMarkets) : could not find function "tbl_df"
> library(dplyr) 次のパッケージを付け加えます: ‘dplyr’ 以下のオブジェクトは ‘package:data.table’ からマスクされています: between, first, last 以下のオブジェクトは ‘package:stats’ からマスクされています: filter, lag 以下のオブジェクトは ‘package:base’ からマスクされています: intersect, setdiff, setequal, union > #tbl_df(データフレーム拡張したデータ構造)に変換 > EuStockMarkets_df <- tbl_df(EuStockMarkets)
> EuStockMarkets_df # A tibble: 1,860 x 4 DAX SMI CAC FTSE <dbl> <dbl> <dbl> <dbl> 1 1628.75 1678.1 1772.8 2443.6 2 1613.63 1688.5 1750.5 2460.2 3 1606.51 1678.6 1718.0 2448.2 4 1621.04 1684.1 1708.1 2470.4 5 1618.16 1686.6 1723.1 2484.7 6 1610.61 1671.6 1714.3 2466.8 7 1630.75 1682.9 1734.5 2487.9 8 1640.17 1703.6 1757.4 2508.4 9 1635.47 1697.5 1754.0 2510.5 10 1645.89 1716.3 1754.3 2497.4 # ... with 1,850 more rows
> data.frame(EuStockMarkets_df)
> class(EuStockMarkets_df) [1] "tbl_df" "tbl" "data.frame"
> filter(EuStockMarkets_df, DAX <= 1450) Error in filter_impl(.data, quo) : matrix as column is not supported
> class(EuStockMarkets_df) [1] "tbl_df" "tbl" "data.frame"
> class(EuStockMarkets) [1] "mts" "ts" "matrix"
> #write.csvでcsvファイルを書き出す *row.names = Fは行番号を書き出さない処理
> write.csv(EuStockMarkets,"C:/Users/mtsuj/data.csv",row.names = F)
> #freadはcsvを高速で読み込む関数 > #*data.tableをインストールしてlibrary(data.table)で読み込む必要 > EuStockMarkets_df <- fread("C:/Users/mtsuj/data.csv")
> #freadで読み込むとdata.tableとdata.frameのデータ構造になる > class(EuStockMarkets_df) [1] "data.table" "data.frame" > > #今のデータ構造でも問題ないが、今回はtbl_dfに変換する > EuStockMarkets_df <- tbl_df(EuStockMarkets_df) > class(EuStockMarkets_df) [1] "tbl_df" "tbl" "data.frame" > > #filterでドイツの株価指数が1450以下のものを抽出 > filter(EuStockMarkets_df, DAX <= 1450) # A tibble: 6 x 4 DAX SMI CAC FTSE <dbl> <dbl> <dbl> <dbl> 1 1402.34 1788.0 1611.0 2446.3 2 1421.49 1820.5 1612.5 2488.4 3 1434.61 1858.2 1654.2 2517.1 4 1446.32 1870.3 1673.9 2538.8 5 1437.65 1878.4 1657.3 2541.2 6 1441.57 1881.5 1655.1 2557.2