R 코드
#- VADeaths.csv 이용
#- "Rural Male","Rural Female","Urban Male","Urban Female" 별로 나이대 사망률 누적그래프
install.packages("reshape")
library(reshape)
library(lobstr)
library(ggplot2)
data("VADeaths")
#df 에 VADeaths 데이터를 데이터 프레임 형태로 넣어줍니다. + 데이터 확인
VADeaths_df <- as.data.frame(VADeaths)
str(VADeaths_df)
View(VADeaths_df)
#데이터 프레임 생성
#나이대 를 확인하니 50-54, 55-59, 60-64,65-69, 70-74 가 행이름으로 표시 되어있습니다.
#나이별로 데이터를 출력하기 위해 age 열을 생성해주겠습니다.
age <- c('70-74','65-69','60-64','55-59','50-54')
VADeaths_df <- cbind(VADeaths_df,age)
VADeaths_df
#함수는 데이터를 재구성하는 함수
#age를 기준으로 데이터를 분리. measure.var 에는 표시하고 싶은 열들을 추가
VAD_melt <- melt(VADeaths_df,
id.vars = 'age',
measure.var = c('Rural Male', 'Rural Female', 'Urban Male', 'Urban Female'))
VAD_melt
#열 이름을 변경해줍니다. variable <- location, value <- deaths
names(VAD_melt) <- c('age', 'location', 'deaths')
VAD_melt
# theme() - panel의 디자인 변경
ggplot(VAD_melt, aes(x =location, y = deaths, fill = age)) +
geom_bar(stat = 'identity', position = 'stack') +
theme(plot.title = element_text(hjust = 0.5))
R 결과
python 코드
'''
VADeaths.csv 이용
"Rural Male","Rural Female","Urban Male","Urban Female" 별로 나이대 사망률 누적그래프
'''
dataframe = pd.read_csv('dataset/VADeaths.csv') # pandas의 csv파일을 읽어서 dataframe 형태로 만들어주는 read_csv함수를 이용해서 csv 파일을 읽음
x = dataframe.columns.tolist()[1:] # dataframe에서 column의 columns 함수로 타이틀들을 가져온후 tolist 함수로 이를 리스트로 만들어줌
# 리스트를 [1:]로 슬라이싱해서 0번째 값은 제외한 나머지 리스트를 x데이터로 사용하도록 함
# VAdeaths.csv의 columns는 "","Rural Male","Rural Female","Urban Male","Urban Female" 인데,
# 맨 앞의 ""을 제외하고"Rural Male","Rural Female","Urban Male","Urban Female" 을 x축으로 사용하기 위해 이와같이 처리
labels = [] # 막대그래프 label을 담을 리스트
datas = [] # 막대그래프의 데이터를 누적해서 담을 리스트
for data in dataframe.values: # 데이터프레임에서 행단위로 값을 가져와서 하나하나 순회
labels.append(data[0]) # 첫번째열은 "50-54" 와 같은 나이대 구분자이므로 label로 지정해 범례로 쓰기 위해 label 리스트에 넣음
datas.append(data[1:]) # 두번째열부터 마지막열은 실제 사망률 데이터이므로 이는 datas에 넣음
for i in range(len(datas)): # datas 개수만큼 반복 (이 데이터들을 누적해서 쌓을 예정)
if i == 0: # 첫번째 데이터는
plt.bar(x, datas[i], label=labels[i]) # 누적할 곳이 없으므로 bar 함수를 이용해서 막대그래프를 그림 (x축 데이터는 변수x, y축 데이터는 dats[i]로 지정. 범례가 될 label은 lables[i]로 지정)
else: # 첫번째 이후 데이터는 (누적해서 쌓기 위해 bottom이라는 옵션값이 추가로 들어감)
plt.bar(x, datas[i], label=labels[i], bottom=sum(datas[0:i])) # 위와 동일하게 bar함수를 이용해서 막대그래프를 그리는데, bottom 옵션을 이용해서 아래에 데이터를 쌓아서 그림
# i번쨰 그래프는 datas[0]~datas[i-1]까지의 sum을 쌓아서 막대그래가 누적되도도록 함
plt.legend() # 그래프에 범례를 표시하기 위해 legend 함수 호출
plt.savefig('ex2.png') # 그래프를 그려서 ex2.png 라는 이름의 파일에 저장하도록 함
python 결과
python 에서 나이대를 R처럼. 해야하는데 하는방법은 조금더 공부해서 수정.
'포트폴리오' 카테고리의 다른 글
python - tensorflow(iris 데이터셋 이용) (0) | 2022.06.28 |
---|---|
html 2022-06-28 (0) | 2022.06.28 |
R - weather.csv 비올 확률 계산 (0) | 2022.06.28 |
R - 시계열분석 2023년 한국 인구수 예측 (0) | 2022.06.24 |
R, python (airquility.csv 데이터 분석) 세로,가로 막대 그래프 (0) | 2022.06.24 |