d0 <- read.csv(file = 'https://stats.dip.jp/01_ds/data/dirty_data1.csv')
summary(d0) # 要約統計値 NA's:1 (NAが1つ含まれている)
## 会社名 気温 湿度 風速
## Length:22 Min. :12.00 Min. :-50.00 Min. :-1.000
## Class :character 1st Qu.:20.00 1st Qu.: 30.00 1st Qu.: 1.000
## Mode :character Median :32.40 Median : 50.00 Median : 2.000
## Mean :28.18 Mean : 39.73 Mean : 2.052
## 3rd Qu.:34.10 3rd Qu.: 51.00 3rd Qu.: 4.000
## Max. :50.40 Max. : 60.00 Max. : 5.000
## NA's :1 NA's :1
library(DT)
datatable(d0)
d1 <- na.omit(d0)
summary(d1) # 要約統計値 NAがなくなった。
## 会社名 気温 湿度 風速
## Length:20 Min. :12.00 Min. :-50.00 Min. :-1.000
## Class :character 1st Qu.:18.50 1st Qu.: 27.50 1st Qu.: 0.750
## Mode :character Median :32.40 Median : 50.00 Median : 2.000
## Mean :27.97 Mean : 38.55 Mean : 2.105
## 3rd Qu.:34.10 3rd Qu.: 51.00 3rd Qu.: 4.000
## Max. :50.40 Max. : 60.00 Max. : 5.000
datatable(d1)
#1-3
# 各気象変数の許容範囲に入っているか否かを示す論理式を作成
is.tp <- -20 <= d1$気温 & d1$気温 <= 50
is.hm <- 0 <= d1$湿度 & d1$湿度 <= 100
is.ws <- 0 <= d1$風速 & d1$風速 <= 70
summary(is.tp)
## Mode FALSE TRUE
## logical 2 18
summary(is.hm)
## Mode FALSE TRUE
## logical 1 19
summary(is.ws)
## Mode FALSE TRUE
## logical 1 19
# 適切な範囲のレコードだけを抽出する。
d2 <- d1[is.tp & is.hm & is.ws, ]
datatable(d2)
#1-4
d3 <- d2
d3$気温 <- round(d2$気温, 1)
d3$湿度 <- round(d2$湿度, 0)
d3$風速 <- round(d2$風速, 0)
datatable(d3)
#1-5
d3$会社名
## [1] "ソニー" "Sony" "SONY" "sony"
## [5] "ソニー株式会社" "Sony(株)" "ソニー(株)" "sony"
## [9] "富士通" "Fujitsu" "Fujitu" "FUJITSU"
## [13] "富士通株式会社" "富士通(株)" "fujitsu" "FUJITSU"
# ソニー株式会社を意味する表記
LAB.SONY <- c("ソニー", "Sony(株)", "ソニー(株)", "Sony", "SONY", "sony")
# 富士通株式会社を意味する表記
LAB.FUJITSU <- c("富士通", "富士通(株)", "Fujitsu", "FUJITSU", "fujitsu", "Fujitu", "fujitu")
# %in%の記号は右辺の集合に含まれるか否かを示す論理記号
is.sony <- d3$会社名 %in% LAB.SONY
is.fujitsu <- d3$会社名 %in% LAB.FUJITSU
d4 <- d3
# 各メーカーの正式名称に統一
d4$会社名[is.sony] <- 'ソニー株式会社'
d4$会社名[is.fujitsu] <- '富士通株式会社'
d4$会社名
## [1] "ソニー株式会社" "ソニー株式会社" "ソニー株式会社" "ソニー株式会社"
## [5] "ソニー株式会社" "ソニー株式会社" "ソニー株式会社" "ソニー株式会社"
## [9] "富士通株式会社" "富士通株式会社" "富士通株式会社" "富士通株式会社"
## [13] "富士通株式会社" "富士通株式会社" "富士通株式会社" "富士通株式会社"
# クリーンデータ(clean data)
datatable(d4)
#PYTHON
import pandas as pd
d0 = pd.read_csv('https://stats.dip.jp/01_ds/data/dirty_data1.csv')
d0.head()
## 会社名 気温 湿度 風速
## 0 ソニー 14.0 50.0 4.0
## 1 Sony 38.2 54.0 1.1
## 2 SONY 20.4 20.0 0.0
## 3 sony 34.1 51.0 2.0
## 4 ソニー株式会社 20.0 60.0 4.0
#2-1
d1 = d0.dropna()
d1
## 会社名 気温 湿度 風速
## 0 ソニー 14.0000 50.0 4.0
## 1 Sony 38.2000 54.0 1.1
## 2 SONY 20.4000 20.0 0.0
## 3 sony 34.1000 51.0 2.0
## 4 ソニー株式会社 20.0000 60.0 4.0
## 5 Sony(株) 32.4000 49.1 1.0
## 6 ソニー(株) 12.0000 30.0 5.0
## 7 sony 34.1000 51.0 2.0
## 8 SONY 50.4000 20.0 0.0
## 11 ソニー 14.0000 -50.0 4.0
## 12 富士通 14.0000 50.0 4.0
## 13 Fujitsu 38.2000 54.0 1.0
## 14 Fujitu 20.4000 20.0 0.0
## 15 FUJITSU 34.1000 51.0 2.0
## 16 富士通株式会社 20.0000 60.0 4.0
## 17 Fujitsu(株) 32.4000 49.0 -1.0
## 18 富士通(株) 12.0000 30.0 5.0
## 19 fujitsu 34.1134 51.0 2.0
## 20 FUJITSU 50.4000 20.0 0.0
## 21 FUJITSU 34.1000 51.0 2.0
#2-2
is_tp = (-20 <= d1['気温']) & (d1['気温'] <= 50)
is_hm = ( 0 <= d1['湿度']) & (d1['湿度'] <= 100)
is_ws = ( 0 <= d1['風速']) & (d1['風速'] <= 70)
d2 = d1[is_tp & is_hm & is_ws]
d2
## 会社名 気温 湿度 風速
## 0 ソニー 14.0000 50.0 4.0
## 1 Sony 38.2000 54.0 1.1
## 2 SONY 20.4000 20.0 0.0
## 3 sony 34.1000 51.0 2.0
## 4 ソニー株式会社 20.0000 60.0 4.0
## 5 Sony(株) 32.4000 49.1 1.0
## 6 ソニー(株) 12.0000 30.0 5.0
## 7 sony 34.1000 51.0 2.0
## 12 富士通 14.0000 50.0 4.0
## 13 Fujitsu 38.2000 54.0 1.0
## 14 Fujitu 20.4000 20.0 0.0
## 15 FUJITSU 34.1000 51.0 2.0
## 16 富士通株式会社 20.0000 60.0 4.0
## 18 富士通(株) 12.0000 30.0 5.0
## 19 fujitsu 34.1134 51.0 2.0
## 21 FUJITSU 34.1000 51.0 2.0
#2-3
d3 = d2
d3 = d2.round({'気温':1, '湿度':0, '風速':0})
d3
## 会社名 気温 湿度 風速
## 0 ソニー 14.0 50.0 4.0
## 1 Sony 38.2 54.0 1.0
## 2 SONY 20.4 20.0 0.0
## 3 sony 34.1 51.0 2.0
## 4 ソニー株式会社 20.0 60.0 4.0
## 5 Sony(株) 32.4 49.0 1.0
## 6 ソニー(株) 12.0 30.0 5.0
## 7 sony 34.1 51.0 2.0
## 12 富士通 14.0 50.0 4.0
## 13 Fujitsu 38.2 54.0 1.0
## 14 Fujitu 20.4 20.0 0.0
## 15 FUJITSU 34.1 51.0 2.0
## 16 富士通株式会社 20.0 60.0 4.0
## 18 富士通(株) 12.0 30.0 5.0
## 19 fujitsu 34.1 51.0 2.0
## 21 FUJITSU 34.1 51.0 2.0
#2-4
# ソニー株式会社を意味する表記
LAB_SONY = {"ソニー", "Sony(株)", "ソニー(株)", "Sony", "SONY", "sony"}
# 富士通株式会社を意味する表記
LAB_FUJITSU = {"富士通", "富士通(株)", "Fujitsu", "FUJITSU", "fujitsu", "Fujitu", "fujitu"}
for i, row in d3.iterrows():
if row['会社名'] in LAB_SONY:
d3.at[i, '会社名'] = 'ソニー株式会社'
for i, row in d3.iterrows():
if row['会社名'] in LAB_FUJITSU:
d3.at[i, '会社名'] = '富士通株式会社'
d3
## 会社名 気温 湿度 風速
## 0 ソニー株式会社 14.0 50.0 4.0
## 1 ソニー株式会社 38.2 54.0 1.0
## 2 ソニー株式会社 20.4 20.0 0.0
## 3 ソニー株式会社 34.1 51.0 2.0
## 4 ソニー株式会社 20.0 60.0 4.0
## 5 ソニー株式会社 32.4 49.0 1.0
## 6 ソニー株式会社 12.0 30.0 5.0
## 7 ソニー株式会社 34.1 51.0 2.0
## 12 富士通株式会社 14.0 50.0 4.0
## 13 富士通株式会社 38.2 54.0 1.0
## 14 富士通株式会社 20.4 20.0 0.0
## 15 富士通株式会社 34.1 51.0 2.0
## 16 富士通株式会社 20.0 60.0 4.0
## 18 富士通株式会社 12.0 30.0 5.0
## 19 富士通株式会社 34.1 51.0 2.0
## 21 富士通株式会社 34.1 51.0 2.0
d0 <- read.csv(file = 'https://stats.dip.jp/01_ds/data/dirty_data2.csv')
summary(d0)
## 会社名 気温 湿度 風速
## Length:22 Min. :12.00 Min. :-50.00 Min. :-1.000
## Class :character 1st Qu.:20.00 1st Qu.: 30.00 1st Qu.: 1.000
## Mode :character Median :32.40 Median : 50.00 Median : 2.000
## Mean :28.18 Mean : 39.73 Mean : 2.052
## 3rd Qu.:34.10 3rd Qu.: 51.00 3rd Qu.: 4.000
## Max. :50.40 Max. : 60.00 Max. : 5.000
## NA's :1 NA's :1
## 全天日射量MJ
## Min. :-1.200
## 1st Qu.: 0.340
## Median : 1.235
## Mean : 2.701
## 3rd Qu.: 2.385
## Max. :23.400
## NA's :2
library(DT)
datatable(d0)
d1 <- na.omit(d0)
summary(d1)
## 会社名 気温 湿度 風速
## Length:18 Min. :12.00 Min. :-50.00 Min. :-1.000
## Class :character 1st Qu.:15.50 1st Qu.: 30.00 1st Qu.: 1.000
## Mode :character Median :32.40 Median : 50.00 Median : 2.000
## Mean :28.05 Mean : 38.89 Mean : 2.228
## 3rd Qu.:34.11 3rd Qu.: 51.00 3rd Qu.: 4.000
## Max. :50.40 Max. : 60.00 Max. : 5.000
## 全天日射量MJ
## Min. :-1.200
## 1st Qu.: 0.340
## Median : 1.215
## Mean : 2.791
## 3rd Qu.: 2.250
## Max. :23.400
datatable(d1)
is.tp <- -20 <= d1$気温 & d1$気温 <= 50
is.hm <- 0 <= d1$湿度 & d1$湿度 <= 100
is.ws <- 0 <= d1$風速 & d1$風速 <= 70
summary(is.tp)
## Mode FALSE TRUE
## logical 2 16
summary(is.hm)
## Mode FALSE TRUE
## logical 1 17
summary(is.ws)
## Mode FALSE TRUE
## logical 1 17
d2 <- d1[is.tp & is.hm & is.ws, ]
datatable(d2)
d3 <- d2
d3$気温 <- round(d2$気温, 1)
d3$湿度 <- round(d2$湿度, 0)
d3$風速 <- round(d2$風速, 0)
datatable(d3)
d3$ 会社名
## [1] "東芝" "Toshiba" "TOSHIBA"
## [4] "toshiba" "東芝株式会社" "東芝(株)"
## [7] "東芝(株)" "トヨタ" "Toyota"
## [10] "Toyoda" "トヨタ自動車株式会社" "トヨタ(株)"
## [13] "toyota" "TOYOTA"
datatable(d4)
import pandas as pd
d0 = pd.read_csv('https://stats.dip.jp/01_ds/data/dirty_data2.csv')
d0.head()
## 会社名 気温 湿度 風速 全天日射量MJ
## 0 東芝 14.0 50.0 4.0 1.23
## 1 Toshiba 38.2 54.0 1.1 2.33
## 2 TOSHIBA 20.4 20.0 0.0 2.01
## 3 toshiba 34.1 51.0 2.0 0.02
## 4 東芝株式会社 20.0 60.0 4.0 0.20
d1 = d0.dropna()
d1
## 会社名 気温 湿度 風速 全天日射量MJ
## 0 東芝 14.0000 50.0 4.0 1.2300
## 1 Toshiba 38.2000 54.0 1.1 2.3300
## 2 TOSHIBA 20.4000 20.0 0.0 2.0100
## 3 toshiba 34.1000 51.0 2.0 0.0200
## 4 東芝株式会社 20.0000 60.0 4.0 0.2000
## 5 東芝(株) 32.4000 49.1 1.0 1.2000
## 6 東芝(株) 12.0000 30.0 5.0 1.1111
## 8 TOSHIBA 50.4000 20.0 0.0 -1.2000
## 11 とうしば 14.0000 -50.0 4.0 0.3400
## 12 トヨタ 14.0000 50.0 4.0 1.6600
## 13 Toyota 38.2000 54.0 1.0 -0.3000
## 15 Toyoda 34.1000 51.0 2.0 10.0100
## 16 トヨタ自動車株式会社 20.0000 60.0 4.0 3.1100
## 17 Toyota(株) 32.4000 49.0 -1.0 2.7800
## 18 トヨタ(株) 12.0000 30.0 5.0 1.4400
## 19 toyota 34.1134 51.0 2.0 0.5500
## 20 Tokyoda 50.4000 20.0 0.0 0.3400
## 21 TOYOTA 34.1000 51.0 2.0 23.4000
is_tp = (-20 <= d1['気温']) & (d1['気温'] <= 50)
is_hm = ( 0 <= d1['湿度']) & (d1['湿度'] <= 100)
is_ws = ( 0 <= d1['風速']) & (d1['風速'] <= 70)
d2 = d1[is_tp & is_hm & is_ws]
d2
## 会社名 気温 湿度 風速 全天日射量MJ
## 0 東芝 14.0000 50.0 4.0 1.2300
## 1 Toshiba 38.2000 54.0 1.1 2.3300
## 2 TOSHIBA 20.4000 20.0 0.0 2.0100
## 3 toshiba 34.1000 51.0 2.0 0.0200
## 4 東芝株式会社 20.0000 60.0 4.0 0.2000
## 5 東芝(株) 32.4000 49.1 1.0 1.2000
## 6 東芝(株) 12.0000 30.0 5.0 1.1111
## 12 トヨタ 14.0000 50.0 4.0 1.6600
## 13 Toyota 38.2000 54.0 1.0 -0.3000
## 15 Toyoda 34.1000 51.0 2.0 10.0100
## 16 トヨタ自動車株式会社 20.0000 60.0 4.0 3.1100
## 18 トヨタ(株) 12.0000 30.0 5.0 1.4400
## 19 toyota 34.1134 51.0 2.0 0.5500
## 21 TOYOTA 34.1000 51.0 2.0 23.4000
d3 = d2
d3 = d2.round({'気温':1, '湿度':0, '風速':0})
d3
## 会社名 気温 湿度 風速 全天日射量MJ
## 0 東芝 14.0 50.0 4.0 1.2300
## 1 Toshiba 38.2 54.0 1.0 2.3300
## 2 TOSHIBA 20.4 20.0 0.0 2.0100
## 3 toshiba 34.1 51.0 2.0 0.0200
## 4 東芝株式会社 20.0 60.0 4.0 0.2000
## 5 東芝(株) 32.4 49.0 1.0 1.2000
## 6 東芝(株) 12.0 30.0 5.0 1.1111
## 12 トヨタ 14.0 50.0 4.0 1.6600
## 13 Toyota 38.2 54.0 1.0 -0.3000
## 15 Toyoda 34.1 51.0 2.0 10.0100
## 16 トヨタ自動車株式会社 20.0 60.0 4.0 3.1100
## 18 トヨタ(株) 12.0 30.0 5.0 1.4400
## 19 toyota 34.1 51.0 2.0 0.5500
## 21 TOYOTA 34.1 51.0 2.0 23.4000
LAB_TOSHIBA = {"東芝", "tosiba","東芝(株)","東芝(株)","とうしば", "Toshiba", "TOSHIBA", "toshiba"}
LAB_TOYOTA = {"トヨタ", "トヨタ(株)", "Toyota", "TOYOTA", "toyota","Toyoda"}
for i, row in d3.iterrows():
if row['会社名'] in LAB_TOSHIBA:
d3.at[i, '会社名'] = '東芝株式会社'
for i, row in d3.iterrows():
if row['会社名'] in LAB_TOYOTA:
d3.at[i, '会社名'] = 'トヨタ自動車株式会社'
d3
## 会社名 気温 湿度 風速 全天日射量MJ
## 0 東芝株式会社 14.0 50.0 4.0 1.2300
## 1 東芝株式会社 38.2 54.0 1.0 2.3300
## 2 東芝株式会社 20.4 20.0 0.0 2.0100
## 3 東芝株式会社 34.1 51.0 2.0 0.0200
## 4 東芝株式会社 20.0 60.0 4.0 0.2000
## 5 東芝株式会社 32.4 49.0 1.0 1.2000
## 6 東芝株式会社 12.0 30.0 5.0 1.1111
## 12 トヨタ自動車株式会社 14.0 50.0 4.0 1.6600
## 13 トヨタ自動車株式会社 38.2 54.0 1.0 -0.3000
## 15 トヨタ自動車株式会社 34.1 51.0 2.0 10.0100
## 16 トヨタ自動車株式会社 20.0 60.0 4.0 3.1100
## 18 トヨタ自動車株式会社 12.0 30.0 5.0 1.4400
## 19 トヨタ自動車株式会社 34.1 51.0 2.0 0.5500
## 21 トヨタ自動車株式会社 34.1 51.0 2.0 23.4000