'Code'에 해당되는 글 161건

Code/R 프로그래밍

R 공부_데이터 처리

반응형
#chapter4. 데이터 가공과 처리
# 교제 81p 부터 참고할 것
# 1. 외부데이터를 이용한 데이터 가공과 처리 - 파일 입출력을 활용
# 2. 데이터의 취득과 정재
#    - csv 파일을 이용하여 데이터 수집
#    - 결측값과 이상값을 분석

library(help=datasets)  # R에서 제공하는 기본 데이터 셋 
str(iris)
head(iris,10)  # 10 숫자 적어주면 숫자만큼 출력 / 반대로 tail()
summary(iris)  # 변수들의 기초 통계량
plot(iris)  # 시각적으로 보여주는 것
plot(iris$Petal.Width, iris$Petal.Length, col=iris$Species) # 품종을가지고 너비, 길이 

#3*3 행렬
x <- matrix(1:9,ncol = 3) # 3개의 열
x

# apply : 특정 영역을 대상으로 집계를 하는 함수
# apply (데이터 셋, 방향, 함수)
# 방향:  1 - 가로 방향으로 집계,  2 - 세로 방향으로 집계 
apply(x,1, sum)   # 가로 끼리의 합
apply(x,2,sum)    # 세로 끼리의 합

apply(iris[,1:4], 2, sum)  # [ , 1:4] : 행은 모두, 열은 품종을 제외한 1 ~ 4까지만 

# 데이터 수집
# 계산서 금액(total_bill), 팁 액수(tip), 계산한 사람의 성별(sex), 요일(day),
# 시간(time), 동석자수(size), 흡연자 포함여부(smoker)
tips <- read.csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv')
str(tips) #data.frame으로 되어있으며 7개의 변수를 가지고 있다는 뜻. 이것만을 가지고 우리가 알 수 있는 정보는 많이 없다. 
head(tips, 10) #위에 것 보다 조금 더 구체적으로 데이터를 보기 위해서 

# 탐색적 데이터 분석
summary(tips)
install.packages('dplyr')   # 보조 기억장치에 저장 / 막강한 함수, 데이터 추출에 사용, 함수 연결 연산자가 있어서 사용용
install.packages('ggplot2')  # r에서 지원하는 시각화는 그래프를 좀 더 고퀄로
library(dplyr)
library(ggplot2)  # 주기억장치에 저장 

# 동석자수(size)
plot(tips$size)  # 기본 동그라미로 그려진 그래프
plot(tips$size, type='l')  # 꺽은선 그래프

# dplyr 가 가진 강력한 함수 연결 
tips %>% ggplot(aes(size,color=sex))+geom_histogram(fill="white") # 배경담고, line그리고 싶으면 line, 히스토그램으로 그리고 싶으면 historam
# %>% : 함수 연결 

# 계산서 금액에 따른 팁 액수
# tips %>% ggplot(aes(total_bill : x축,tip : y축)) 만 하면 그래프 없음
# aes () : 옵션
tips %>% ggplot(aes(total_bill,tip)) + geom_point(aes(col=day))  #상관관계 나타내는 삼전도 나타냄

#성별에 따른 경향을 추가한다.
# pch : 그래프에 나타나는 모양, 동그라미냐 네모냐 세모냐
tips %>% ggplot(aes(total_bill,tip)) + geom_point(aes(col=day, pch=sex, size=3))


# 데이터 분석 - 테이블 형태로 읽어옴 / 머리글 설정 
students <- read.table("C:/R_project/studio/student.txt", header = T)
students
str(students)

#/ stringAsFactor=F : 문자열 포함하여 팩터로 읽지 마세요  
# factor -> char로 변경
students <- read.table("파일 경로/student.txt", header = T, stringsAsFactor=F)
str(students)

# as.is = T :  요인이 문자열로 해석되길 바랄 경우 T, stringsAsFactor=F와 같은 개념
# NA(결측값)을 문자열로 오해하지 않도록 설정하는 작업
students<-read.table("파일 경로/student.txt",header=TRUE,stringsAsFactors = FALSE,na.strings = "NA")
str(students)

students<-read.table("파일 경로/student.txt",header=TRUE,as.is=T,na.strings="NA")
str(students)

#doBy 패키지
#install.packages('doBy')
library(doBy)

.libPaths() # 현재 라이브러리가 저장된 위치를 확인하는 함수

quantile(iris$Sepal.Length) # 4분위수 -> 평균에서 퍼저있는 모양 볼려고

# 10분위 수  
quantile(iris$Sepal.Length, seq(0,1, by=0.1))

# 정렬
head(orderBy(~Sepal.Width, iris)) # sepal.width를 정렬하여 보여줌
head(orderBy(~Species+Sepal.Width ,iris)) # 여러 항목을 기준으로 정렬하기

# 랜덤 샘플링( 기본값: 중복을 허용하지 않음)
sample(1:10, 5 )  # 1에서 10 범위 안에 5개 숫자를 무작위로 추출해주세요 

sample(1:10, 5, replace = T)  # 중복 허용하여 추출
sample(1:10,10)
sample(1:45, 6)
str(iris)
# nrow(데이터셋) : 데이터 셋의 행의 수
head(iris[sample(nrow(iris), nrow(iris)),],10)  
# 앞에 추출할 데이터, 뒤에 원본 데이터
# iris 앞에서 6개 데이터 가져올 것이다. sample로 섞여있는 데이터 

# split(데이터, 분리조건)
split(iris, iris$Species)   # 품종별로 분류해라

# split : 전체 부분에서 일부 자르는 것
# subset : 특정 부분에서 일부 자르는 것

head(subset(iris,Species=='virginica')) # 앞에서 부터  6개의 데이터 가져오세요 / 품종이 virginica인 데이터
head(subset(iris,Species=='virginica' & Sepal.Length > 5.0))  # 두개 이상 조건 줄 때 &로 연결

#merge: 두 데이터 프레임에서 공통된 값을 기준으로 묶는 함수
x <- data.frame(name=c("aaa","bbb","ccc"), korean=c(90,100,95))
y <- data.frame(name=c("ccc","bbb","aaa"), english=c(90,95,100))
merge(x,y)

# 그룹 함수
# aggregate(그룹 조건, 데이터 셋, 함수)
aggregate(Sepal.Width~Species,iris,mean)

students <- read.table("파일 경로/student.txt", header=T, as.is=T)
students

# 파생변수,average = korean+english+math
students$average <- (students$kor+students$eng+students$math)/3
students

# 결측값 처리
test<-c(15,20,30,NA,45)
test

# 변수명[행, 열]
test[test<40]

# 3의 배수가 아닌 값만 추출
test[test %% 3 != 0]

#is.na() : 결측값입니까? true, false
test[is.na(test)]
# 결측값 제외 
test[!is.na(test)]

# 2의 배수이면서 na가 아닌 요소값만 출력하세요
test[!is.na(test) & test%%2==0]

# 데이터 프레임형태의 자료형을 이용하여 결측값을 제거하는 작업
members <-data.frame(name=c("길동","춘향","철수","영희"), age=c(13,11,22,23),
                      gender = c("M","F","M","F"))
members

# 성별이 여성인 경우만 추출 
# 데이터셋[형 조건식, 열 조건식] -> 행의 조건만 있고 전체 출력이라 열은 , 만
members[members$gender=="F",]

# 20살 미만인 남성만 출력
members[members$gender=="M" & members$age<20,]

# 데이터 정제
# 1. 결측값 처리
# is.na() 결측값 있으면 t, 아니면 f
# na.omit() : 결측값이 들어있는 행 제거
# na.rm() : T일 때 결측값을 제거하고 추출하세요 / 결측값 제거하고 통계함수 계산
# 2. 이상치값 처리

install.packages("gapminder")
# 스웨덴 비영리단체에서 만든 통계 분석 서비스
# 1952년부터 2007년까지 5년간격으로 여러나라의 인구, 1인당 gdp, 기대 수명 등
library(gapminder)
str(gapminder)

# 각 나라의 기대 수명 -> 열정보 가져오는 것 / 여러개 넣을 때는 c
install.packages("dplyr")
library("dplyr")
gapminder[,c("country","lifeExp","year")]
# 크로아티아 나라의 기대수명과 년도 보기
gapminder[gapminder$country== "Croatia",c("country","pop")]

# croatia의 1990년도 이후의 기대수명과 인구를 추출하세요
gapminder[gapminder$country== "Croatia" & gapminder$year>=1990,c("lifeExp","pop")]

# apply : 특정 영역을 대상으로 집계를 하는 함수
# apply (데이터 셋, 방향, 함수)
# 방향:  1 - 가로 방향으로 집계,  2 - 세로 방향으로 집계 
apply(gapminder[gapminder$country== "Croatia" & gapminder$year>=1990,c("lifeExp","pop")], 2, mean)

# gaminder 데이터 셋의 관측 자료 중 대한민국 인구의 최댓값과 해당 년도 출력
apply(gapminder[gapminder$country=="Korea, Rep.",c("year","pop")],2,max)
# 2007 년 아시안 대륙의 인구 총합
apply(gapminder[gapminder$continent== "Asia" & gapminder$year==2007, "pop"],2, sum)


# dplylr 라이브러리 - select(특정열을 추출할 때), filter(특정 행을 추출할 때)
# 연결 연산자 %>%  (단축키 : ctrl+shift+m)
select(gapminder, country, lifeExp, pop)
filter(gapminder, country == "Croatia")

# 전체 인구의 평균 
mean(gapminder$pop)

#summarize
summarize(gapminder, pop_mean=mean(pop))

# 대륙별 인구 평균 - group_by를 통해 대륙을 그룹으로 묶음 
summarize(group_by(gapminder, continent), pop_mean=mean(pop))

# 대륙별 각 나라의 인구의 평균을 계산하여 추출하시오
summarize(group_by(gapminder,continent, country), avg=mean(pop))

gapminder %>% group_by(continent, country) %>% summarize(avg_pop = mean(pop))

# croatia 나라의 국가이름, 년, 기대수명을 골라 평균 수명 구하는 것
temp <- filter(gapminder,country =="Croatia")
temp2 <- select(temp, country, year, lifeExp)
temp3 <- apply(temp2[,"lifeExp"],2, mean)
temp3

gapminder %>% filter(country=="Croatia") %>%  select(country, year, lifeExp) %>% summarize(mean_lifeExp=mean(lifeExp))


# plot[ y축 데이터, 옵션]
# plot[x축 데이터, y축 데이터, 옵션]
y <- c(1,1,2,2,3,3,4,4,5,5)
plot(y)

x <- 1:10
y <- 1:10
plot(x,y,xlim = c(11,0))  # 옵션 중에 xlim = : x축 눈금 lim : limit

x <- c(1,3,2,4,6,5,7,6,9)
plot(x, main = "Simple Time Series", sub = "그래프1", type="b", lty="dashed")

# type 옵션
# #“p”   점으로
# #“l”   선으로
# #“b”   점과 선 둘다 동시에
# #“o”   점과 선 둘다 동시에 (단 겹쳐짐 : overplotted)
# #“h”   히스토그램과 비슷한 형태로 (histogram)
# #“s”   계단모양으로 (stair steps)
# #“S”   계단모양으로 (upper stair steps)
# #“n”   좌표찍지 않음
# lty = 0, lty = "blank" : 그리지 않음
# lty = 1, lty = "solid" : 실선 (기본값)
# lty = 2, lty = "dashed" : 대시
# lty = 3, lty = "dotted" : 점
# lty = 4, lty = "dotdash" : 점과 대시
# lty = 5, lty = "longdash" : 긴 대시

x <- runif(100) # 난수 생성
y <- runif(100)

plot(x,y,pch=ifelse(y>0.5, 1,18),col="red")

x <- c(1,3,6,8,9)
y <- c(12,56,78,32,9)
plot(x,y)

# 화살표 그리기
arrows(3,56,1,12)

# 사각형 그릴려면 시작은 왼쪽 아래, 오른쪽 위
rect(4,20,6,50)  
rect(4,20,6,40, density = 5)  

# 그래픽 텍스트
text(4,40,"이것은 샘플입니다.")

# size = 1: 아랫쪽, 2 : 왼쪽, 3 : 위 4 : 오른쪽
mtext("상단의 문자열입니다.",side=3)

aaa <- c(250,300,250,280,310)
bbb <- c(180,200,210,190,170)
ccc <- c(210,250,260,210,270)

# axes : 기본 T, F 하면 테두리 사라짐 / x, y축을 표시하지 않습니다. 
# ann : 기본 T, F 하면 x축과 y축 라벨 사라 짐 /  x, y축 제목을 지정하지 않습니다
plot(aaa, type="o", ylim=c(0,400), col="red", axes = F, ann=F)
axis(1, at=1:5, lab=c("a","b","c","d","e")) # 축의 라벨 1 : x축 / 위에 다 f로 주고 실행해야 함
axis(2, ylim=c(0:400))
title(main="Sample Graph", col.main="red")
title(xlab = "DAY", col.lab="black")
title(ylab = "values", col.lab="blue")

lines(bbb,type="o",col="green", lty=2, pch=21)
lines(ccc, type="o", col="blue", lty=2, pch=11)

# legend(x, y, 범례 담을 내용 ) : 범례
legend(4,400,c("BaseBall","SoccerBall","BeachBall"), col = c("red", "green","blue"),lty=1:3,pch=13)

# r의 내장 데이터 cars의 데이터를 이용한 분석
# 1920년대에 수집된 데이터 셋
# 50대의 차량으로 부터 speed와 dist(제동거리) 두 변수 측정
str(cars)

# 산점도(산포도) : 두 변수 사이의 ㅣ상관관계를 점으로 표현한 그래프
# pch=1, col="red", 속도와 제동거리 비교
plot(cars$speed, cars$dist, main="속도와 제동거리의 상관관계", xlab="속도", ylab="제동거리",pch=1, col="red")

# 선 그래프 - 시간의흐름에 따라 데이터의 흐름 달라지는 데이터(시계월) -> 막대 그래프로 표현 하는것이 효율적
plot(cars$speed, cars$dist, main="속도와 제동거리의 상관관계", xlab="속도", ylab="제동거리",pch=1, col="red", type="l")

#시계열 그래프/ 자료형 (time series)
#시간의 순서에 따라 자료가 정렬되어 있는 형
# 1871년부터  1970년까지의 연동별 나일강의 유량을 기록하고 있는 시계열 데이터
Nile
str(Nile)


# 나일강의 유량을 그래프로 표시하시오
# main="나일강의 연도별 유량 변화"
# xlab="연도" ylab="유량"

plot(Nile, type="l",main="나일강의 연도별 유량 변화", xlab="연도", ylab="유량", col="red")
# 1. 산점도(산포도)
#  - x축과 y축에 점으로 표현한 그래프
#  - 연속 값으로 된 변수의 관계를 쵸현할 대 사용
# 2. 막대그래프(히스토그램)
#  - 데이터 크기를 막대로 표현한 그래프
#  - 집단간의 차이를 표현할 때 주로 사용
# 3. 선 그래프
#  - 시간에 따라 달라지는 데이터를 표현할 때 
#  - 시계열 데이터라고 부름
# 4. 상자수염 그래프
#  - 데이터의 분포를 직사각형의 상자 모양으로 표현하는 그래프
#  - 평귬나 볼때보다 데이터의 특성을 잘 나타낼 수 있다.

# 막대 그래프
x <- c(1,2,3,4,5,6)
barplot(x, names="매출")

# 복잡한 형태의 막대그래프로 표현하는 작업
#xx <- matrix(1:10, dim=c(3,2))
xx <- matrix(c(1,2,3,4,5,6), 3,2)
xx 
barplot(xx) # -> 누적 막대 그래프
barplot(xx,beside = T, names=c("korea","china")) # -> 누적 하지 말고 세워서 그리기

# 시즌 별(a,b,c,d,e) 
# aaa : baseball판매현황
# bbb : Soccer
# ccc : BeachBall

barplot(aaa, main="BaseBall 판매량", xlab="Season", ylab="판매량", names.arg=c("A","B","c","D","E"),density=c(10,20,30,40,50))

Ball_type <- matrix(c(aaa,bbb,ccc),5,3)
Ball_type
barplot(Ball_type, main="Ball Type별 시즌 판매량",xlab="Ball Type",
        ylab="매출",beside=T,names.arg=c("BaseBall","SoccerBall","BeachBall"),
        col=rainbow(5), ylim=c(0,400))
legend(10,400,c("BaseBall","SoccerBall","BeachBall"), fill=rainbow(5))


# 2015년 인구 통계 자료 로딩
people <- read.csv("C:/Users/User/Desktop/Data/people/people2015.csv", header = F)
str(people)

# 성별을 라벨로, level은 1,2만 가지도록 -> 1일때 남자, 2일때 여자
people$V1 <- factor(people$V1,levels=c(1,2),labels = c("남자","여자"))
str(people)

people$V3 <- factor(people$V3, levels =1:14, 
                    labels = c("가구주", "가구주의 배우자", "자녀", "자녀의 배우자",
                               "가구주의 부모", "배우자의 부모", "손자녀, 그 배우자",
                               "증손자녀, 그 배우자", "조부모", "형제자매, 그 배우자",
                               "형제자매의 자녀, 그 배우자", "부모의 형제자매, 그 배우자","기타 친인척", "그 외 같이 사는 사람"))

people$V4 <- factor(people$V4, levels =1:8,labels=c("안받았음","초등학교","중학교","고등학교",'대학4년제미만','대학4년제이상','석사과정','박사과정'))
str(people)

# 출생아별 빈도표 생성
table_v5 <- table(people$V5)
table_v5

barplot(table_v5, main="출생아 빈도수", xlab="출생아수",ylab="빈도수")

table_v1 <- table(people$V1)
table_v1

table_v4 <- table(people$V1,people$V4)
table_v4

barplot(table_v4, main="성별에 따른 학력 분포",xlab="학력",ylab="성별",beside = T, ylim=c(1,70000), col=c("red","blue"),legend.text=T)
hist(people$V2, breaks=c(seq(0,90,10)),main="연령별 분포",xlab="연령",ylab="빈도수")

# 파이차트
T_sales <- c(210,110,400,550,700,450)
pie(T_sales)

pie(T_sales, init.angle = 90,col=rainbow(length(T_sales)))



student.txt
0.00MB

반응형

'Code > R 프로그래밍' 카테고리의 다른 글

R공부_그래프, 함수  (0) 2019.07.18
R 공부_db연동, 그래프그리기  (0) 2019.07.18
R 공부_txt 파일 불러오기  (0) 2019.07.18
R공부_Day1_5. 제어문과 함수  (0) 2019.07.18
R 공부_ Day1_Data Frame  (0) 2019.07.18
Code/R 프로그래밍

R 공부_txt 파일 불러오기

반응형
# file I/O : 파일 입출력 
no <- c(1,2,3,4)
name <- c("aa","bb","cc","dd")
price <- c(500,1000,300,700)
qty <- c(5,2,7,9)
data <- data.frame(No=no, Name=name, Price=price, QTY=qty)
data

ls()
#89

save(no,name,data,file="파일경로/test.dat")   # 주소 설정할 때 \ 표시 아니고 슬래시 / 사용, dat 파일 형태로 저장

#삭제 함수
rm(data,no,name)

ls()

#저장된 data 불러오기
load("파일경로/test.dat")

ls()
a <- file("test.txt",open="w", encoding = "UTF-8")
cat("임시로 만든다.\n",file= a)
cat("동해물과 백두산이 마르고 닳도록\n", file=a)
cat("하느님이 보우하사 우리나라만세\n", file=a)
cat("무궁화 삼천리 화려강산\n", file=a)
cat("대한사람 대한으로 길이보전하세\n", file=a)
close(a)


s <- readLines("test.txt", encoding = "UTF-8")


#csv() : , 컴마로 구분되어 있는 자료형 / false 면 header 생성, 
x <- read.csv("파일경로/a.csv")
x



#범주형 아닌데 범주로 받아오면 안될 때 사용 -> x 는 factor로 가져오고 , y는 chr로 가져옴 isas도 대체 가능
y <- read.csv("파일 경로/a.csv",stringsAsFactors = F)  # 문자를 포함하고 있는 것을 factor로 인식하지 마세요
yx

#header : 머리글 가지고 있냐 아니냐 기본 T 임 -> 열머리글 있다는 소리, 그렇기 때문에 열 머리글 없으면 첫번째 행의 값을 열머리로 정함 
z <- read.csv("파일경로/b.csv",stringsAsFactors = F, header = F) 
z

names(z) <- c("id", "name", "score")  # 이름 부여한다. z의 열머리글에 
z

data


help("read.csv")

a.csv
0.00MB
b.csv
0.00MB
test.dat
0.00MB

반응형

'Code > R 프로그래밍' 카테고리의 다른 글

R 공부_db연동, 그래프그리기  (0) 2019.07.18
R 공부_데이터 처리  (0) 2019.07.18
R공부_Day1_5. 제어문과 함수  (0) 2019.07.18
R 공부_ Day1_Data Frame  (0) 2019.07.18
R 공부_Day1_ 문자 다루는 함수  (0) 2019.07.18
Code/R 프로그래밍

R공부_Day1_5. 제어문과 함수

반응형
# 조건문 : [], if, if ~ else, ifelse

x <- 11
if( x%%2 ==0 ) print("짝수") else print("홀수")

ifelse(x%%2==0, "짝수","홀수")

y <- -9               
if(y%%2 == 0){        # 한줄 이상일 때 블럭으로 묶음
    print(y)
    print("짝수")
}else{
    print(y)
    print("홀수")
}

xx <- c(15,20,30,NA,45)  # NA ; 자료형으로 쓸 수 있는 결측값, 
xx

xx[xx <40]      # 40보다 작은 거
xx[xx %% 2!=0]  # 홀수

!is.na(xx)   # na면 t, 아니면 f
is.na(xx)
xx[is.na(xx)]

# 성적 출력 / switch
point <- 85   
grade <- point %/% 10  # 10으로 나눈 몫(정수)만 가져와라

switch(as.character(grade), # 형변환 ass
      '10' = print("A"),
      '9' = print("B"),
      '8' = print("C"),
      '7' = print("D"),
      print("F"))

sum <- 0
for(i in seq(1,10))
    sum <- sum+i
sum

dan <- 3
for(i in seq(1,9))
    cat(dan, "x", i, "=", dan*i, "\n")

print(class(dan)) #class는 자료형을 확인해준다.

gugu <- function(){
    dan <- readline("단을 입력하세요 : ")  #readline() : 줄 단위로 입력받아라 , 다 입력하고 ENTER 치면 넘어가겠다.
    dan <- as.integer(dan)                 # int로 형변환
    for(i in seq(1, 9)){
        cat(dan,"x", i, "=", dan*i, "\n")
    }
}
gugu()

print(class(dan)) #class는 자료형을 확인해준다.

gugu <- function(){
    dan <- readline("단을 입력하세요 : ")  #readline() : 줄 단위로 입력받아라 , 다 입력하고 ENTER 치면 넘어가겠다.
    dan <- as.integer(dan)                 # int로 형변환
    for(i in seq(1, 9)){
        cat(dan,"x", i, "=", dan*i, "\n")
    }
}
gugu()


dan <- 3
for(i in seq(1,9))
    cat(dan, "x", i, "=", dan*i, "\n")

sum1 <- 0
i <- 1
while(i <= 10){
    sum1 <- sum1 + i
    i <- i+1
}
sum1

sum1 <- 0
i <- 1
repeat{
    if(i>10) break
    else print(i)
    i <- i+1
}
sum1

for(i in seq(1,10)){
    count <- 0
    for(j in seq(1, i)){
        if(i%%j==0) {
            count <- count+1
        }
    }
    if(count == 2) print(i)
}


#구구단
for(i in 2:9){
    cat("\n=====",i,"단 ======\n")
    for(j in 1:9)
        cat(i," x ",j," = ",i*j,"\n")
    
}

x <- c(1,2,3,4,5)
max(x) #최댓값
min(x) #최솟값
median(x) #중위수
mean(x) #평균
summary(x) #통계량

hello <- function() {
    print("hello")
}
hello()


# 리턴값은 있지만 매개변수가 없는 것
func1 <- function() {
    x <- 10
    y <- 20
    return (x+y)
}
func1()

# 리턴값은 있지만 매개변수가 있는 것
func1 <- function(x,y){
    return(sum(x,y))
}
func1(1,2)

# 함수 안에 함수 사용하는 것
test <- function(x,y){
    xx <- x+1
    yy <- y+1
    xxx <- func1(xx,yy)
    return(xxx)
}
test(9,19)

test2 <- function(){
    x<-10
    y<-10
    return(invisible(x*y))    # 값을 화면에 출력하지 마라라
}
test2()  # invisible 때문에 값 출력 안됨
result <- test2()  # 리턴값 변수에 저장
result

# page 81





반응형

'Code > R 프로그래밍' 카테고리의 다른 글

R 공부_데이터 처리  (0) 2019.07.18
R 공부_txt 파일 불러오기  (0) 2019.07.18
R 공부_ Day1_Data Frame  (0) 2019.07.18
R 공부_Day1_ 문자 다루는 함수  (0) 2019.07.18
R 공부_Day1_ 숫자를 다루는 함수  (0) 2019.07.18
Code/R 프로그래밍

R 공부_ Day1_Data Frame

반응형
# 행렬 : 2차원 이상 넘어가는 것을 r에서 행렬로 씀
# 행과 열로 나누어 사용
# rbind : 행단위로 결합
# cbind : 열단위로 결합
# merge : 동일한 key 값 기준 결합
# 배열 :  행렬이랑 벡터 확장 구조

var1 <- c(1,2,3)
var2 <- c(4,5,6)
var3 <- c(7,8,9)
mat1 <- rbind(var1, var2, var3)
mat2 <- cbind(var1, var2, var3)
mat1
mat2

colnames(mat1) <-c("A", "B", "C") # 하나 이상의 데이터 담을 때 벡터 
mat1

# 벡터는 하나의 자료형 담기 때문에 문자랑 숫자랑 같이 벡터에 넣으면 숫자도 문자가 됨
xx<-c('a',1,'b')
xx
yy<-c(1,2,3)
yy

# 데이터 프레임 : 다양한 자료형으로 모아서 구성된 행렬
no <- c(1,2,3,4)
name <- c("이순신","홍길동","장보고","강감찬")
korean <- c(990,85,100,95)
english <- c(100,90,85,80)

student <- data.frame(No=no, Name = name, KOR = korean,ENG = english )   # 데이터 프레임 만들기 : data.frame(필드명, 값)
student

# 대괄호 조건 : [행 조건식, 열 조건식]
student[1, ]  # 행 조건에 값이 있고, 열 조건 값 없으면 모든 열 / 1 = 첫행만 보여주세요


student[-3, ]

# 리스트(list) : key 와 values를 쌍으로 묶어서 씀 / java의  map, 
member <- list(name = "홍길동", address = "korea",tel="010-0000-0000")
member

member$name   # 키의 값을 가져오고 싶을 때 $이름 적으면 속하는 값 가져옴

member$age = 30
member

# 배열 : 행렬(matrix)은 2차원만 가능하지만, 배열 그 이상은 가능

# 3행 4열의 2차원 배열 생성
# dimension으로 행과 열의 차수를 결정해 줌
# 열단위로 들어감
array(1:12, dim=c(3,4))

x <- array(1:6, dim=c(3,2))
x
x[1][1]
dim(x) # 행과 열을 나타냄

# class () : 자료형을 추출하는 함수
class(c(1,6))  # c(1,6) -> 자료형 숫자임을 출력시킴

class(matrix(c(1,2)))

# is.numeric : 안에 있는 타입이 numeric이냐? 맞으면 true 아니면 false
is.numeric(c(1,2))
is.numeric(c("a","b"))
is.character(c("a","b"))

# as.자료형() : 강제 형변환
as.numeric(c("1","2","3"))

# integer(int), num : 실수, chr : 문자형, cplx: 복소수, factor: 팩터
# 결측값 : 임의대로 누락했거나 범위 벗어난 값  NULL, NA(Not a Number), NaN(숫자가 아니다.)

1:7  # factor

c(1,2,3,4,5)
c(1:5)

seq(from = 1, to = 5, by = 2) 3 순열

rep(c(1:3), times = 2)   # 123을 두번 반복
rep(c(1:3),each=2)    # 11 22 33 이렇게 됨

x <- c(1,2,3,4,5,6)
length(x)
#벡터는 요소로 접근할 수 있다.
x[1]
#대괄호연산자는 두개 쓸 수 없다.
#행과열의값을 갖고있지않다. 행렬이 아니다. 엄밀히 말하면 1차원이다. 따라서 대괄호 안에 하나의 요소만 있어야한다. 그래서 아래와 같이 쓰면 에러가 난다. 
#x[1,2,3]
#x[1,2]
# (-)하면 그 값을 빼고 가져와라
x[-1]

y <- c(10,20,30,40,50)
y
#y[1,2,3] # ->에러,  첫번째 요소 두번재 요소 세번재 요소 가져오고 싶으면 다음 줄 
y[c(1,2,3)] # -> 하나 이상의 문자 가져올 때 벡터로 값을 붙여서
y[-c(1,2,3)]

# 배열 생성 함수 :  array(), matrix() - 2차원 행렬,
# 행 중심 rbind, 열 중심 cbind  -> 배열 만드는 함수

#?array
x <- array(data = 1:5, dim =c(2,4)) # data 1-5까지 배열 만들어라 생략가능, c(2,4) -> 벡터에 2와 4 즉 2행 4열
# 배열의 크기보다 값(data)가 작을 때 빈 곳을 반복해서 채워짐. 
x

# 기본적으로 같은 타입을 묶는다. 숫자는 숫자, 문자는 문자. 숫자와 문자가 같이 있으면 다 문자로 취급한다.
# 데이터 프레임 : 여러 데이터를 묶어서 사용. 즉 여러 자료형의 벡터를 묶어서 사용할 때 좋음
name <- c("홍길동","장보고","이순신")
age <- c(17,21,19)
blood.type <- c("A","O","B")
people <- data.frame(name, age, blood.type)
people
# 혈액형처럼 범주에 속하면 factor
str(people) # 데이터 프레임 형태 보는 거 

반응형
Code/R 프로그래밍

R 공부_Day1_ 문자 다루는 함수

반응형
xx <- c("a","b","c","d","e")
xx

# paste : 문자열 합치는 것 
paste(xx[1],xx[2])   # -> index 1과 2를 출력하되 합쳐서 출력 / 공백으로 연결

paste("hello","world")  # 줄 띄어지고 따옴표 있음
print(500)

# cat : 따옴표가 없어 짐 -> 하나의 문자가 아니다 / 줄 띄움이 없음
cat("hello","world","\n")  # -> 줄 바꿈 연결해야 함
print(500)

substring("abcdefghijklmn",2,5)#  ->2번째에서 5번째까지 뽑아서 추출

#runif(개수) : 5개의 난수 
x <- runif(5)  # 인덱스 1개 일 때 인덱스의 값만큼 난수 발생,
x
xx <- runif(5,10,20)  # 3개 일 때: 10 - 20까지 5개의 난수
xx

# AND(&), OR(|), NOT(!)
# any() : 어느거 하나, or의 의미 갖고 있음
# all() : 모두, and의 의미
x <- runif(5)
x

# 문제 1 : x가 0.4 ~ 0.7 사이에 있는 가
(x >= 0.4) & (x <= 0.7)

# 문제 2 : x 중에 0.9이상의 값이 있는 가
any(x >= 0.9)

# 문제 3 : x의 값 모두 0.9 이하 인가
all(x <= 0.9)

반응형

'Code > R 프로그래밍' 카테고리의 다른 글

R공부_Day1_5. 제어문과 함수  (0) 2019.07.18
R 공부_ Day1_Data Frame  (0) 2019.07.18
R 공부_Day1_ 숫자를 다루는 함수  (0) 2019.07.18
R 공부_ Day1_기본 문법과 사용법  (0) 2019.07.18
R Studio 기본 셋팅  (0) 2019.07.09
Code/R 프로그래밍

R 공부_Day1_ 숫자를 다루는 함수

반응형
# 숫자를 다루는 함수
# 기초통계량에 사용되는 함수 
# head() : 앞에 6개를 가져와라 
head(iris) #iris 가져오라  

#tail:마지막 6개를  추출해주세요 
tail(iris) 

head(iris,15)  # 15개 까지 보여주세요 

# summary : 기초 통계에서 많이 사용하는 데이터 5개를 보여주세요 # 숫자 형태의 데이터 구조 볼 때 사용 
summary(iris) 

#전체 구조를 보여주세요 -> 데이터 프레임, 150개 데이터, 5개의 변수로 이루어짐 
# $ 속성, : num -> 자료형, vector로 되어있음 
str(iris) 

val<- c (1,2,3,4,5,6,7,8,9)  
val 

summary(val) #데이터 형태가 숫자다 하면 사용, 데이터 셋의 형태나 구조 볼 때 str 

# vector (벡터) : 하나의 데이터 형을 가지고 있는 데이터 집합 / index 는 1부터 시작 
# 결칙치 / 결칙값 / na : 누락된 값 


x <- c(1,2,3,4,5,6) 
x 
# rnorm(갯수) : 정규분포 난수를 발생시켜주는 함수 
xx <- rnorm(30) 
xx 

length(x) # vector 구성하는 요소의 개수 
mean(x) # 평균값 
range(x) # 범위( 최솟값, 최댓값) 
var(x) # 분산 : 평균값에서 얼마나 떨어져있는지 
sd(x) # 표준 편차 

x 
x[2] 
x[-2] 

#벡터 합치기 
x <- c(3,6,9,12,15) 
y <- c(5,10,15,20,25) 
z <- append(x,y)  # 뒤에 추가하는 함수 
z 

c(1,2) + c(4,5) 

c(1,2,3)+1 

v <- -5:5 
v 

# seq() : 연속된 값을 가지는 벡터 생성 
q <- seq(1,5) 
qq <- seq(1,10,by=2) 
q 
qq 

x <- c(1,2,3) 
y <- c(4,2,7) 
x == y # 비교 연산자 

(xx <- rep(c("a","b","c"), times=4))  # rep : 반복하기 위해 , 벡터 times = 숫자만큼 반복 

yy <- unique(xx) # 중복 제거 
yy 











반응형

'Code > R 프로그래밍' 카테고리의 다른 글

R 공부_ Day1_Data Frame  (0) 2019.07.18
R 공부_Day1_ 문자 다루는 함수  (0) 2019.07.18
R 공부_ Day1_기본 문법과 사용법  (0) 2019.07.18
R Studio 기본 셋팅  (0) 2019.07.09
R 설치 및 R studio 설치  (0) 2019.07.09
Code/R 프로그래밍

R 공부_ Day1_기본 문법과 사용법

반응형

* 수업때 공부한 내용을 소스로 올려 놓은 것!

 

# 도움말 : help() 또는 ?
help(log)

# 변수와 대입연산자(=, <-)
1+2

(11+54-13)*76/9

9%%3

5/2

5%/%2

4**2

4^2

# 대입 연산자 (<- 권장)
x = 5
x

x <- 7
x

(x <- 2) #x에 2 넣고 찍어주세요


#rm : 변수 삭제 용도
rm(x)

# list 함수 : 현재 시스템에서 사용중인 변수의 목록을 출력하는 함수
ls()

help(ls)

# 출력 방법
x <- "one"
x

print(x)

print(x,quot=F) # "" 없애기 위해

sprintf("%s님의 나이는 %i입니다.","홍길동",33) # %i: int, %s : 문자열, %d : 10진수, % 개수에 맞게 포맷팅 해줘야 함
sprintf("%s님의 키는 %5.1f 입니다.","홍길동",172.4567) # %5.1f : float 형식이며 5자리이고 소수점 아래 1자리만 -> .을 포함해서 5자리임






반응형

'Code > R 프로그래밍' 카테고리의 다른 글

R 공부_ Day1_Data Frame  (0) 2019.07.18
R 공부_Day1_ 문자 다루는 함수  (0) 2019.07.18
R 공부_Day1_ 숫자를 다루는 함수  (0) 2019.07.18
R Studio 기본 셋팅  (0) 2019.07.09
R 설치 및 R studio 설치  (0) 2019.07.09
Code/Python

슬라이스

반응형

 

전 게시글과 이어지는 작업으로 시퀀스 자료형 사용함

 

- 슬라이스(slice) : 무엇인가의 일부를 잘라낸다는 뜻으로 시퀀스 일부를 잘라냄

ex ) 시퀀스객체 [ 시작인덱스 : 끝 인덱스]

>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[0:4]	#0에서 3까지 잘라서 새 시퀀스 만듦
#결과 [0,10,20,30]

 

 

- 리스트 중간부분 가져오기 

>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[4:7]	# 4에서 6까지 잘라서 새 시퀀스 만듦
#결과 [40,50,60]

>>> a[4:-1]	# 4에서 -1(마지막값)이므로 -2까지만 뽑아서 새 시퀀스 만듦
#결과 [40,50,60,70,80]

 

 

- 인덱스 증가폭 사용 : 인덱스의 증가폭을 지정하여 범위 내에서 인덱스를 건너뛰며 요소를 가져올 수 있음

>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[2:8:3]	# 2부터 7까지 값 가져오는데 인덱스가 3씩 증가
#결과 [20,50]

 

 

- 인덱스 생략하기 : 시작 인덱스 혹은 끝 인덱스를 생략하면 맨 처음부터 / 맨 끝까지 돌아갈 때 사용 

                         객체 길이 몰라도 사용할 수 있음

 

>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[:7]	#0에서 6까지 잘라서 새 시퀀스 만듦
#결과 [0,10,20,30,40,50,60]

>>> a[7:]	# 7에서 끝까지 요소 가져옴
#결과 [70,80,90]

 

 

- 인덱스 생략하면서 증가폭 사용

>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[:7:2]	#0에서 6까지 인덱스는 2씩 증가하여 0,2,4,6
#결과 [0,20,40,60]

>>> a[7::2] # 7부터 끝까지 2씩 증가
#결과 [70,90]

>>> a[::2]	#0부터 끝까지 2씩 증가
# [0,20,40,60,80]

>>> a[:::]	#0부터 끝까지 출력
# [0,10,20,30,40,50,60,70,80,90]

 

- len 응용하기 

>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[0:len(a)]	#0에서 a의 길이까지 -> -1 이 되기때문에 마지막 인덱스 가르킴
#결과 [0,10,20,30,40,50,60,70,80,90]

 

- 리스트, 튜플, range, 문자열에 모두 사용 가능

- 수정, 삭제는 리스트만 가능하며, 삭제 시 리스트는 새로 시퀀스를 생성하는 것이 아니라 기존 객체에 저장됨

 

 

반응형

'Code > Python' 카테고리의 다른 글

숫자야구파일.py  (0) 2019.07.25
주소록 관리 프로그램.py  (0) 2019.07.24
시퀀스 자료형  (0) 2019.07.10
리스트, 튜플  (0) 2019.07.10
문자열 사용하기  (0) 2019.07.10
Code/Python

시퀀스 자료형

반응형

 

시퀀스 자료형 :  연속적으로 이어진 자료형 (리스트, 튜플, range, 문자열 등)

 

 

- 특정 값 존재 여부 : 값 in 시퀀스 객체       or      값 not in 시퀀스 객체

>>> a = [1,10,20,30,40,50,60,70,80,90]
>>> 30 in a
#결과 True

>>> 1 in range(10)
#결과 True

 

 

- 시퀀스 객체 연결하기 : 변수를 만들지 않고 직접 연결 가능하여, 서로 연결하여 새 객체 생성

대신, range는 + 연산자를 통하여 객체르 생성 할 수 없음 -> range를 리스트 혹은 튜플로 만들어서 연결

>>> a = [1,10,20,30]
>>> b = [40,50,60,70,80,90]
>>> a+b
#결과 [1,10,20,30,40,50,60,70,80,90]

 

 

- 시퀀스 객체 반복하기 : * 연산자는 시퀀스 객체를 특정 횟수만큼 반복하여 새 시퀀스 만든다. 

(0 혹은 음수를 곱하면 빈 객체 만들고, 실수는 곱할 수 없음)

>>> [0,1,2] * 2
#결과 [0,1,2,0,1,2,0,1,2]

 

 

- 시퀀스 객체의 요소 개수 구하기 : len() 함수를 이용하여 개수 구할 수 있음

>>> len(a) 
>>> len(range(0,10,2))
>>> len('hello,world')

 

 

- 인덱스 사용하기  : 시퀀스의 객체의 각 요소는 순서가 정해져있음 -> 이 순서를 인덱스라고 함

[]를 사용하여 [] 안에 인덱스 지정하면 해당 요소에 접근 가능        ex) 시퀀스객체 [ 인덱스 ]

>>> a = [1,2,3]
>>> a[0]
#결과 1
>>> a[-1]
#결과 3

- range, 리스트 , 튜플, 문자열 모두에 사용 가능

- 인덱스는 0부터 사용 

- 음수는 뒤에서부터 요소 접근하여 마지막 값이 -1, 그 전 값이 -2 .. 이런 형태로 됨

- 인덱스 범위 벗어나면 IndexError 뜸

 

 

- 요소 수정하기 : 시퀀스객체[인덱스]  = 값

- 튜플과 range 문자열 변경 불가 

 

 

- del 요소 삭제 : 시퀀스 객체 요소를 삭제함         ex) del 시퀀스개개체[인덱스]

- 튜플과 range와 문자열 삭제 불가

 

 

반응형

'Code > Python' 카테고리의 다른 글

주소록 관리 프로그램.py  (0) 2019.07.24
슬라이스  (0) 2019.07.10
리스트, 튜플  (0) 2019.07.10
문자열 사용하기  (0) 2019.07.10
불과 비교, 논리 연산자  (0) 2019.07.10
Code/Python

리스트, 튜플

반응형

 

리스트 (List) : 목록이란 뜻으로 값들을 일렬로 저장한 것

리스트 이름 = [값, 값, 값]

- 여러 가지 자료형 저장 가능 : [문자열, 숫자, 정수, 불] 을 리스트 하나에 생성 가능

 

- range() : 연속된 숫자를 생성하는데 사용. 지정한 횟수 숫자는 생성되는 숫자에 포함되지 않음

>>> a = list(range(10))
>>> a

#결과 [0,1,2,3,4,5,6,7,8,9]

range(10) : 0 ~ 9까지의 값을 순차적으로 출력

 

>>> c =  list(range(-4, 10, 2))
>>> c

#결과 [-4,-2,0,2,4,6,8]

range(시작, 끝. 증가폭) : 처음 시작 값부터 (끝 - 1 ) 까지의 수를 2씩 증가하는 인덱스로 뽑아옴

 

 

- 튜플(tuple) : 리스트처럼 요소를 일렬로 저장하지만, 안에 저장된 요소를 변경 , 추가, 삭제를 할 수 없다.

튜플  = (값, 값, 값)

 

>>> a = (1,2,3,4,5)
>>> a 

#결과 (1,2,3,4,5)

* 리스트와 차이점 : 리스트는 []를 사용하며 안에 요소 변경 추가 삭제 가능,  튜플은 ()사용하며, 안에 요소 변경 불가

 

- range 사용하여 튜플 만들기

>>> a = tuple(range(10))
>>> a 

#결과 (0,1,2,3,4,5,6,7,8,9)

 

- 튜플을 리스트로 만들고 리스트를 튜플로 만들기

>>> a = [1,2,3]		#리스트
>>> tuple(a)		#튜플
#결과 (1,2,3)

>>> b = (4,5,6)		#튜플
>>> list(b)		#리스트
#결과 [4,5,6]

tuple() 과 list()를 사용하며, 튜플은 값을 변경할 수 없어 그래도 사용해야 함

 

 

 

반응형

'Code > Python' 카테고리의 다른 글

슬라이스  (0) 2019.07.10
시퀀스 자료형  (0) 2019.07.10
문자열 사용하기  (0) 2019.07.10
불과 비교, 논리 연산자  (0) 2019.07.10
변수와 입력 사용  (1) 2019.07.09
 [ 1 ]  [ 2 ]  [ 3 ]  [ 4 ]  [ 5 ]  [ 6 ]  [ 7 ]  [ 8 ]  [ ··· ]  [ 17 ] 

푸터바

태그

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

  • Today :
  • Yesterday :
  • Total :