레이블이 R인 게시물을 표시합니다. 모든 게시물 표시
레이블이 R인 게시물을 표시합니다. 모든 게시물 표시

전류분석 시뮬레이션 current IOT data simul Rstudio muti core

 IOT 데이터는 일반적으로, 초당 데이터베이스를 받는다. 하지만, 아래와 같은 케이스는 분단위로 데이터 셋을 받아도 연간 한개 포인트에 52만개의 데이터 이다. 이것과 관련 해서 7일 단위 30일 단위 평균을 구할 때, 속도의 문제가 발생 한다.

속도의 문제가 발생 할때, 우리는 어떻게 처리 해야 하며, 그리고, 데이터가 발생 할시 트렌드 분석을 해야 하는데, 트렌드는 비선형 형태로 데이터가 나타난다. 비선형 형태로 데이터가 나타 날때, 어떻게 Base line 신호를 주어야 하는 기준치를 나타낼 것인지 새로운 문제가 될것이다.

RST 6상 그래프 R plot 그리기

   RST 6상 그래프를 구글링해서 찾으러고 하니,  RST  3상만 나왔다.  RST 6상은 특수한 설비에서 작동되는 것이니,  나올 수가 없다.  교육용 자료로 만들려 하다 보니, 찾을 수가 없어 직접 그렸다. 

RST 3상은 360에서 3을 나누니,  120의 파형이 그래프로 보여지지만,   RST 6상은 360에서 6을 나누니 60도의 파형 그래프로 그려 졌다.   아래의 소스코드를 보고 그림을 그릴 수 있다. 


행렬(matrix)와 배열(array) 을 이용한 R 적용

 R에서 행렬(matrix)와  배열(array)를 쓰는 이유는 연산 속도의 사유로 많이 사용하게 된다.  dataframe으로 된  데이터 셋을 연산하게 되면 속도가 매우 느린 현상이 발생 하게 된다.   R에서 멀티코어 코딩을 하려면,  반드시 알고 넘어가야 하는 것이 행렬(matrix)와 배열(array)이다. 

집합 union(합집합), intersect(교집합), setdiff(차집합) 계산

  R에서 vector union(합집합), intersect(교집합), setdiff(차집합)은 실무에서는 데이터 기준을 세우고 돌릴때,  사용이 많이 된다.   벡터를 추가 하거나,  필요한 것만 불러 올 경우에는 집합 계산을 할 수 있다. 


포아송(Poisson) 분포 이론 및 R 예제

일반적으로 매우 회귀하여 일어날 확률이 아주 작은 경우에 포아송(Poisson) 분포를 사용한다. 예를 들어 고속도로 상에서 하루동안 발생하는 교통사고에 의한 사망자수, 어느 집에 한 시간 동안 걸려 오는 전화 통화수, 1주일간 어떤 동사무소에 접수되는 사망신고수, 하루동안 정전되는 횟수 등과 같이 회귀한 사건의 수를 확률 변수로 할때 이다.

구체적으로 포아송 분포가 적용되기 위해서는 다음의 가정을 만족하여야 한다.

  1. 독립성 : 한 단위 시간이나 공간에서 출현하는 성공횟수와 중복되지 않는 다른 단위 시간이나 공간에서 출현하는 성공횟수는 서로 독립이다.
  2. 비집략성 : 극히 작은 시간이나 공간에서 둘 또는 그 이상의 성공이 같이 일어날 확률은 매우 작으며 0으로 간주된다.
  3. 비례성 : 단위 시간이나 공간에서 성공의 평균출현횟수는 일정하며, 이는 시간이나 공간에 따라 변하지 않는다.

확률 분포 X가 위의 세가지 조건을 만족 할때, 성공의 평균출현 횟수를 m이라고 하고 하면 X의 확률 분포는 다음의 포아송 분포를 따른다.

R 4.2 Windows rJava 및 KOLNP 설치

KoLNP 로딩하면 아래와 같은 메시지가 나올 경우가 있다.  

warning message: in i.p(...) : 패키지 ‘c:/users/rdmkyg/appdata/local/temp/rtmps6vlku/file23e45dd83537/konlp_0.80.2.tar.gz’의 설치가 0이 아닌 종료상태를 가졌습니다

요새 R 4.2 버전을 설치 하면 나오는 메세지이다. 

unique와 duplicated의 차이 이해

실무에서는 unique와 duplicated는 많이 사용하는 데이터 이다.  예를 들어 부동산의 구별로 평당 가격 추세를 그리는 데이터셋을 정리하기 위한 함수를 그릴때, unique를 이용하고, duplicated는 데이터를 취합 할때, 중복이 없는지 확인 한다.   실무에서 데이터 전처리 하거라 모델을 사용할때 많이 사용하므로,  R을 진입 할때는 반드시 알고 넘어가야 한다. 

r download Edge 버전 흠… 이 페이지에 연결할 수 없습니다. cran.r-project.org이(가) 연결을 거부했습니다.

  Edge  버전에서 R download가 아래와 같이 안될때가 있다.   


흠… 이 페이지에 연결할 수 없습니다.

cran.r-project.org이(가) 연결을 거부했습니다.

다음을 시도해 보세요.

ERR_CONNECTION_REFUSED

R-4.2.0 for Windows downloag 페이지 오류 cran.r-project.org에서 연결을 거부했습니다.

   R Base를 다운로드 하려 하니  아래와 같은 문제가 발생 하였다.   구글링에서 r download 치고 검색하고 들어가면 아래와 같은 메세지가 뜬다. 


사이트에 연결할 수 없음

cran.r-project.org에서 연결을 거부했습니다.

다음 방법을 시도해 보세요.

ERR_CONNECTION_REFUSED

R(Rstudio) 에서 정렬, 순위, 순서, 정하기

   정렬, 순위, 순서 중  실무에서 가장 많이 하는 것이 정렬이다.  R에서는 데이터의 성격을 미리 보자고 할 때, 사용을 한다.  주식의 시세의 차이를 계산 하다든지 증감율을 계산을 하고 싶다면 반드시 해야하는 것이 정렬이다. 

  house 데이터 셋은 아래 링크와 같이 있다. 

https://drive.google.com/file/d/17bjJDtn8r8SazhUCE5N_WwKPZosuvm3m/view?usp=sharing


t-test 샘플의 크기가 다를때 사용하는 방법

  t-검정은  두 데이터 셋의 평균값을 비교하고 동일한 모집단의에서 나온 것인지 결정 할 수 있다. 

아래의 데이터 셋의 예에서  Group 1과 Group 2의  다른 샘플은 가진다면,   동일한 평균과 표준편차를 가질 것이라고 기대할 수 없다. 

  수학적으로 t-검정은 각각의 값에서 표분을 취하고 두 평균이 동일하다는 귀무가설을 가정하여 문제 설명을 설정 한다.  적용 가능 한 공식을 기반으로 특정 값을 계산 하고 표준 값과 비교하여 이에 따라 가정된 귀무가설을 수락할 것이라 가정한다. 

그룹 요약 통계집계함수 aggregate, tapply 병렬 최소최대값 pmin,pmax 2020년 , 2021년 20 대 대기업 연봉 변동

  그룹 요약 집계 함수는  대부분 dplyr의 group_by(변수명), summarise() 연산 할 수 있다.  하지만,  우리가 데이터를 분석하기 전에,  미리 간단하게 내용을 보고자 할 때는, Rbase 함수가 보다 간단하게 쓰일 경우가 있다.    20대 대기업 연봉 변동도, 아래 예제와 같이  aggregate, tapply 함수 ggplot2 그래프롤 그리면,  여러가지 인사이트를 얻을 수 있다. 


tapply function 함수로 평균 합계 구하기 , ggplot2로 시계열 그래프 예제

   apply family는 원래 R에서 처음 사용자에게는 넘기 힘든 벽이나,  마찮가지 이다.  하지만,  데이터의 형태를 쉽게 알기 위해 tapply를 만들었는데,  객체지향 프로그램을 잘 다루어 본 사람을 잘 아는데,  그렇지 않은 사람은 이해하기 어려울 수 있다. 

참고로 아래 분석에 사용하는 데이터 셋은 아래와 같다. 

  

출산 데이터 셋 

온도 데이터 셋


aggregate 집계 함수 사용법

   네이버 지식인에서 아래와 같은 질문이 왔다. 

R프로그램 질문이여
반별 점수 합계 어케 구하나요??


반별 점수 합계

aggregate 집계 함수는  R에 내장되어 있는 함수 이다.   R에서 사용 하지만,   Mongo DB에서도 사용을 한다.  

이것은 별도의 패키지 없이 데이터 프레임만 아래와 같이 만들면 간단 하게 해결이 된다. 

# 데이터 벡터를 이용한다. 
  학생 <- c("1","2","3","4","5","6","7","8")
  반 <-as.factor(c("4","4","4","4","5","5","5","5"))
  국어점수 <-  c(98,87,56,98,68,78,68,83)
  영어점수 <- c(65,12,78,65,98,90,87,58)


# 데이터 프레임을 만든다.   
  df <- data.frame(학생, 반, 국어점수, 영어점수)

# 데이터를 붙인다.   
  attach(df)

# 반별 국어점수를 구한다.     
  aggregate(국어점수 ~ 반, data = df, sum )  

  반 국어점수
1  4      339
2  5      297
    
 여기에서 국어점수~ 반 이 있는데,  국어점수는  집계하고자 데이터이고,  반은 범주형 데이터이다. 







콤마(comma) 달린 문자형(character) 날짜형(Date) type 으로 바꾸기

 네이버 지식인에서 아래와 같이 질문이 왔다.   날짜 변환은  현업 수기 입력 데이터를 받았을때,  많이 보는 데이터이다.    실무에서는 많이 겪어보는  문제이다.  


이건은 아래와 정규화 표현식으로 간단하게 풀 수 있다.   gsub() 함수는 문자열을 변경 할때 주로 사용한다.  

하지만,  콤마는 다른 것과 다르게,  gsub(변경전, 변경후, 데이터)에서  변경전 데이터를 입력 할때,   다른것과는 다르게  "\\."을 입력 하여야 한다. 

그리고,  날짜로 변환 하려면,  as.Date 함수를 사용하여야 한다.  이것은 R의 기본 내장 함수가 있으므로 별도의 패키지가 필요하지 않다. 


질문
내공100
R 날짜변환
안녕하세요 
아래 문자열형식으로 되어있는 컬럼을 
날짜형식으로 변경하고 싶은데 
에러가 계속 나타나네요 도와주세요 ㅠㅠ 


이건은 정규화 표현식을 쓰면 아주 간단하게 풀 수 있는 문제이다. 
그럼 아래와 같이 실행 해보겠다. 

# 벡터 character type 데이터 
 > date <- c("2020.01.01" , "2020.01.02", "2020.01.03","2020.01.04")

# 데이터 정규화 표현식 사용 및 데이터 변환 
 >  date <-  as.Date(gsub("\\.", "-", date))

# 데이터 결과 보기 
> date

"2020-01-01" "2020-01-02" "2020-01-03" "2020-01-04"

벡터 함수, max,min,sum,mean,median,cor,colSoms,rowSoms

   벡터 함수는 기초적으로 알아야 하는 함수이다.    모델을 돌리기 전,  데이터 탐색을 할 때, 벡터 함수를 미리 돌려 보고,  데이터가 맞는지 검증을 하게 된다.   물론 집계할 수 있는 colSomes, rowSums와 같은 함수도 있다.   이 것에 대한 내용을 알게 되면, 향후  dplyr 에서 summarise나  mutate 에서 자유로이 계산 할 수 있는 장점을 가지고 있다. 


3.8 벡터 함수

R의 큰 장점중 하나는 반복문과 첨자 없이 전체 벡터에 대한 함수를 연산할 수 있다는 접입니다. 주요 벡터 함수는 아래 표와 같습니다. 다음 숫자 벡터를 사용해 해당 함수를 실행해 보십시오.

y<-c(8,3,5,7,6,6,8,9,2,3,9,4,10,4,11)

일부 벡터 함수는 1개의 값 만을 출력 하기도 합니다.

mean(y)
## [1] 6.333333


R에서 사용되는 벡터 함수
연산 의미
max(x) x의 최대값
min(x) x의 최소값
sum(x) 모든 x값의 합
mean(x) x의 산술평균
median(x) x의 중위수
range(x) x의 최소값과 최대값의 차이
var(x) x의 표본분산
cor(x,y) 벡터 x와 y 와 상관관계
sort(x) x 값의 정렬
rank(x) x값을 순위 벡터
order(x) 오름차순으로 x를 정렬하는 순열을 포함한 정수 벡터
quantile(x) x 값의 사분위수를 나타내는 벡터
cumsum(x) 설정된 지점까지 모든 요소의 합을 포함하는 벡터
cumprod(x) 설정된 지점까지 모든 요소의 합을 포함하는 벡터
colMeans(x) 데이터 프레임 또는 행렬 x의 열 평균
colMeans(x) 데이터 프레임 또는 행렬 x의 열 평균
colSums(x) 데이터 프레임 또는 행렬 x의 열 합계
rowMeans(x) 데이터 프레임 또는 행렬 x의 행 평균
rowSums(x) 데이터 프레임 또는 행렬 x의 행 합

2 개의 값을 생성하는 벡터 함수도 있으며 예제의 실행 결과는 최소값 2와 최대값 11일 입니다.

range(y)
## [1]  2 11

R에서 가장 유용한 벡터 함수는 table 입니다. 이 함수가 얼마나 유용한지는 실제로 사용해봐야 압니다.

아래는 벡터 counts는 10,000개의 음이항 분포를 따르는 임의의 정수 입니다.
이 값을 10,000개의 잎에 남아 있는 곰팡이 병변의 수라고 가정 합니다.

counts <- rnbinom(10000, mu=0.92, size = 1.1)

counts 벡터의 첫 30개 값은 다음과 같습니다.

counts[1:30]
##  [1] 0 0 2 1 0 0 3 0 0 0 3 1 0 0 3 4 1 0 0 0 0 0 0 1 1 2 0 0 2 1

10,000 개의 숫자로 구성된 벡터에서 각 숫자는 몇 개인가? 이 작업은 상당한 연산이 필요하지만 R을 사용하면 쉽게 계산 할 수 있습니다.

table(counts)
## counts
##    0    1    2    3    4    5    6    7    8    9   10   12   18 
## 5163 2510 1246  587  262  131   48   24   19    4    4    1    1

0은 5천개 정도 있고 , 1은 2천 개 정도가 있습니다. 데이터를 돌리때 마다 숫자는 바뀝니다.


예제 1

아래는 각 도/연도별(2001~2020) 출생 인원을 예시로 나타낸 표입니다. 출생 년도별 총 인원을 구하시고, 시/도별 2001~2020년까지 총 출생 인원과 평균인원을 구하십시오.



시/도 연도별 출생 인원
행정구역 2001 2002 2003 2004 2005 2006
서울특별시 114,764 102,008 101,227 99,828 90,468 93,922
부산광역시 35,848 30,767 30,117 28,231 25,681 25,881
대구광역시 28,111 24,260 24,513 23,259 20,804 20,360
인천광역시 30,494 26,775 26,832 25,092 23,026 23,711
광주광역시 18,198 16,036 15,954 14,729 13,327 13,679
대전광역시 17,290 15,631 15,712 15,024 13,950 14,489
울산광역시 13,600 11,666 11,720 11,151 10,469 10,740
경기도 126,264 116,854 120,433 117,812 109,533 115,111
강원도 16,873 15,314 14,349 13,776 12,657 12,455
충청북도 17,322 15,329 14,650 14,331 13,164 13,366
충청남도 21,962 19,059 18,627 18,640 17,521 18,625
전라북도 22,192 19,215 18,437 17,257 15,745 15,571
전라남도 22,588 19,242 18,333 17,256 15,818 15,905
경상북도 30,500 26,022 25,447 23,553 22,339 22,567
경상남도 36,475 32,203 32,102 30,922 28,471 29,524
제주특별자치도 7,453 6,530 6,583 6,097 5,734 5,853


아래와 링크와 같이 데이터 셋을 받고,   데이터를 로딩 합니다. 

https://docs.google.com/spreadsheets/d/1UIwxoew8zfyOkrt_ldKZDzSkaK3WiPP2/edit?usp=sharing&ouid=104041508737066115162&rtpof=true&sd=true

library(readxl)
born <- read_excel("born.xlsx")
str(born)
## tibble [16 × 21] (S3: tbl_df/tbl/data.frame)
##  $ 행정구역: chr [1:16] "서울특별시" "부산광역시" "대구광역시" "인천광역시" ...
##  $ 2001    : num [1:16] 114764 35848 28111 30494 18198 ...
##  $ 2002    : num [1:16] 102008 30767 24260 26775 16036 ...
##  $ 2003    : num [1:16] 101227 30117 24513 26832 15954 ...
##  $ 2004    : num [1:16] 99828 28231 23259 25092 14729 ...
##  $ 2005    : num [1:16] 90468 25681 20804 23026 13327 ...
##  $ 2006    : num [1:16] 93922 25881 20360 23711 13679 ...
##  $ 2007    : num [1:16] 101249 28426 22295 26712 14810 ...
##  $ 2008    : num [1:16] 94736 26670 20562 25365 13890 ...
##  $ 2009    : num [1:16] 89594 25110 19399 24379 13101 ...
##  $ 2010    : num [1:16] 93266 27415 20557 25752 13979 ...
##  $ 2011    : num [1:16] 91526 27759 20758 26118 13916 ...
##  $ 2012    : num [1:16] 93914 28673 21472 27781 14392 ...
##  $ 2013    : num [1:16] 84066 25831 19340 25560 12729 ...
##  $ 2014    : num [1:16] 83711 26190 19361 25786 12729 ...
##  $ 2015    : num [1:16] 83005 26645 19438 25491 12441 ...
##  $ 2016    : num [1:16] 75536 24906 18298 23609 11580 ...
##  $ 2017    : num [1:16] 65389 21480 15946 20445 10120 ...
##  $ 2018    : num [1:16] 58074 19152 14400 20087 9105 ...
##  $ 2019    : num [1:16] 53673 17049 13233 18522 8364 ...
##  $ 2020    : num [1:16] 47445 15058 11193 16040 7318 ...

데이터 셋을 보면 1번 컬럼은 character Type이고, 나머지는 numbering 타입입니다.
따라서 데이터를 데이터를 계산 할때는 1번 컬럼을 빼고 계산 해야 합니다. 빼는 방법은 대괄호 치고 원하는 컬럼 번호를 선택 born[2:21]하는 것입니다.

# 데이터 매트릭스로 바꾸어서 계산   
  temp <- data.frame(t(data.matrix(c("합계", colSums(born[2:21])))))

# rbind를 하기 위한 데이터 대치 
  colnames(temp) <-  colnames(born)

# rbind를 총합 한 데이터 추가   
  born <- rbind(born,temp)

데이터 계산을 할때, data.matrix에 첫번째 컬럼을 character로 넣고, 나머지는 컬럼을 계산 합니다. 그리고, 데이터가 세로로 만들어 지기 때문에, 이것을 가로로 만들어야 합니다. 이것을 계산할때 전치행렬 t(transpose)를 해야 합니다.data.matrix를 계산하고나면 컬럼 이름이 원래 이름과 다르기 때문에, born 데이터 프레임의 이름을 가져와서, data.matrix로 바꾼 것에다 다시 컬럼 명을 넣어 주어야 합니다.

데이터 계산이 끝나면, 계산한 데이터가 charater로 바뀌었기 때문에, 데이터 타입을 integer로 바꾸어야 합니다.

library(dplyr)
# 데이터 타입을 바꾸기   
  born <- born %>%  mutate_at(c(2:21), as.integer)

데이터 타입을 바꾸고 나면 rowSums() 열을 계산합니다. 열은 dplyr 패키지로 아주 간단하게 계산이 됩니다.

# 지역별 출산 합계
  born <-  born %>% 
    mutate(출산합계 = rowSums(born[2:21]))
  
# 지역별 출산 평균  
  born <- born %>% 
    mutate(출산평균 = rowMeans(born[2:21]))
  
  head(born)
## # A tibble: 6 × 23
##   행정구역 `2001` `2002` `2003` `2004` `2005` `2006` `2007` `2008` `2009` `2010`
##   <chr>     <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>
## 1 서울특…  114764 102008 101227  99828  90468  93922 101249  94736  89594  93266
## 2 부산광…   35848  30767  30117  28231  25681  25881  28426  26670  25110  27415
## 3 대구광…   28111  24260  24513  23259  20804  20360  22295  20562  19399  20557
## 4 인천광…   30494  26775  26832  25092  23026  23711  26712  25365  24379  25752
## 5 광주광…   18198  16036  15954  14729  13327  13679  14810  13890  13101  13979
## 6 대전광…   17290  15631  15712  15024  13950  14489  15780  14856  13915  14314
## # … with 12 more variables: `2011` <int>, `2012` <int>, `2013` <int>,
## #   `2014` <int>, `2015` <int>, `2016` <int>, `2017` <int>, `2018` <int>,
## #   `2019` <int>, `2020` <int>, 출산합계 <dbl>, 출산평균 <dbl>

R CRAN Mirror site 패키지 선택 하여 설치

  보안이 매우 중요한 회사에서는   웹사이트가 접속이 제한이 된다.   그래서,  R CRAN Mirror  사이트를 선택해서 설치 해야 한다.     앞으로의 보안 정책은  전부다 막고, 일부만 풀어 주는 방식으로 될 것이며,  물론 보안 신청 한 사이트는 보안 성을 검토하고 열어 줄 것이다.   일반적으로 R 에서 패키지를 설치 할때,  Mirror 사이트를 선택하라는 창이 나오는 경우가 있다.  우리는 일반적으로 가장 가까운 지역을 선택 한다. 

물론 나는 한국 사람이기 때문에   한국 지역에 있는 CRAN 사이트를 선택 한다.    

  개발 사이트 중에서 가장 위험 한 사이트는 Git-hub 이다.    특히  R은   CRAN  Mirror site에서 패키지를 많이 받는데,   매우 특수한 것은 Git-hub 에서 다운 받는 경우가 있다.   


 CRAN web site 찾는 법을 먼저 보자.   아래를 클릭 한다. 
r package mirror 사이트 


위 화면을 보면,  노란색 음영과 같이 Mirror 메뉴가 나오고,  그것을 클릭 하면,  해당 하는 사이트가 나온다. 

해당 하는 사이트(나는 서울을 선택 하였다.)를 클릭하면,  그냥 같은  UI 의 사이트가 나온다 . 하지만,  아래와 같이 패키지 설치 할때, repos  옵션에 url을 넣어 주면,  그 사이트에서 패키지를 다운 받는 다. 

> install.packages('doMC', repos='https://cran.seoul.go.kr/')

또한  컴퓨터 시작 할 때,  미리 선택 할 수 있다.    

일반적으로 local에서 사용할때는  아래링크를 참고 할 수 있고, 
만약에  Docker로 설치 하였으면,  아래와 같은 명령어를 쳐서 정리 하면 된다. 
$ vi .Rprofile
options(repos = "https://cran.seoul.go.kr/")
r

 위와 같이  vi 에디터로 수정 한 다음  저장 후 재시작 하면 된다. 

Rstudio 에서 Python 사용하는 방법 reticulate, ubuntu20.04

  Rstudio 에서 reticulate 패키지를 설치하면,  miniconda가 설치되면서,  python도 같이 설치가 되고 자동으로 링크가 많이 된다.    즉 Rstudio에서 파이썬을 사용할 수 있다는 것이다.   하지만 Docker 가상환경이라는 특별한 Case 에서는  miniconda가 설치가 되지 않는다.  

그러할 경우에는 직접 path 를 잡아 주어야 한다.   

벡터(vector) 와 첨자(subscript) , 벡터에서 위치(which) 및 연산 (max, min)

   벡터의 첨자 즉 괄호 계산은  처음 코딩 할때나 배울때,  어디에 쓰는지 알 수 없다.  하지만, 이것에 대한 기본을  알게 되면,  데이터 분석이나, 데이터를  정리 할때,  매우 유용하다.  R 프로그램 코딩 5년이 되어 가지만,  이것에 대한 사용을 알고 나서 앞으로 코딩 할때,  많은 도움이 되리라는 생각 이든다. 

Windows Docker 설치 with R 과 Rstudio

 windows에서 linux 기반의 R 을 설치 해도 일반 linux 기반의 R의 잘 돌아 간다.  

특히 요새 윈도우 버전에 업그레이드 되면서,  계정이름이 한글로 된 학교 사용자들이Windows R을 사용할때 아래와 같은 문제가 발생 된다.   


Warning message:

In normalizePath(path.expand(path), winslash, mustWork) :

  path[1]="C:/Users/???/Documents": 파일 이름, 디렉터리 이름 또는 볼륨 레이블 구문이 잘못되었습니다

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...