Categories: R

R 언어의 데이터 유형 (Vector, List, Matrix, Data Frame)

안녕하세요! R 언어를 배우는 여정, 어떻게 느껴지고 있나요? 처음엔 낯설고 어려운 용어들 때문에 힘들 수도 있지만, 막상 친해지고 보면 정말 매력적인 친구랍니다. 오늘 우리는 R 언어의 가장 기본적이면서도 중요한 데이터 유형들을 함께 탐험해볼 거예요. 바로 벡터, 리스트, 매트릭스, 그리고 데이터 프레임이죠! 마치 블록 쌓기처럼, 이 네 가지 데이터 유형을 잘 이해해야만 원하는 데이터 분석을 멋지게 해낼 수 있답니다.

각각의 데이터 유형이 어떤 특징을 가지고 있고, 어떻게 활용되는지, 제가 최대한 쉽고 재미있게 설명해 드릴게요. 함께 흥미진진한 R 데이터 세계로 떠나볼까요?

 

 

벡터의 이해와 활용

R 언어를 배우는 여정에서 가장 먼저 만나게 되는 친구, 바로 벡터예요! 마치 기차처럼 쭉 연결된 데이터들의 행렬, 그것이 벡터의 본질이랍니다. 숫자, 문자, 논리값 등 다양한 유형의 데이터들을 한 줄로 늘어놓은 모습을 상상해 보세요. 마치 데이터들의 퍼레이드 같지 않나요? ^^

벡터는 R에서 가장 기본적인 데이터 구조이면서 동시에 놀랍도록 강력한 도구이기도 해요. 이 작은 녀석들이 모여 데이터 분석의 거대한 세계를 만들어낸다고 생각하면 정말 신기하지 않나요?! 자, 그럼 벡터의 세계로 함께 떠나볼까요?

벡터 생성하기

먼저 벡터를 생성하는 방법부터 알아보아요. 가장 간단한 방법은 c() 함수를 사용하는 거예요. c() 함수 안에 원하는 값들을 쉼표로 구분해서 넣어주면 끝! 예를 들어, 1부터 5까지의 숫자를 담은 벡터를 만들고 싶다면 c(1, 2, 3, 4, 5)라고 입력하면 돼요. 참 쉽죠?

하지만 벡터는 숫자만 담을 수 있는 건 아니에요. 문자도 담을 수 있답니다! "apple", "banana", "cherry"처럼 따옴표 안에 문자열을 넣어주면 문자형 벡터가 생성돼요. 마치 과일 바구니 같네요! ?

논리값(TRUE/FALSE)도 벡터에 저장할 수 있어요. 예를 들어, c(TRUE, FALSE, TRUE)와 같이 입력하면 논리형 벡터가 만들어진답니다. 이렇게 다양한 유형의 데이터를 담을 수 있다는 것이 벡터의 매력 중 하나예요.

벡터 연산

벡터의 진정한 힘은 바로 연산 기능에 있어요. 벡터끼리 덧셈, 뺄셈, 곱셈, 나눗셈 등의 연산을 할 수 있을 뿐만 아니라, 각 원소에 대해 동일한 연산을 한 번에 적용할 수도 있답니다! 예를 들어, 1부터 10까지의 숫자를 담은 벡터에 2를 곱하고 싶다면, 각각의 숫자에 일일이 2를 곱할 필요 없이 벡터 전체에 2를 곱하면 돼요. 얼마나 편리한가요?!

유용한 벡터 함수

seq() 함수를 사용하면 일정한 간격으로 증가하는 숫자 벡터를 손쉽게 만들 수 있어요. 예를 들어, 1부터 10까지 1씩 증가하는 벡터는 seq(1, 10, by = 1)로 만들 수 있고, 1부터 10까지 2씩 증가하는 벡터는 seq(1, 10, by = 2)로 만들 수 있어요. 이 함수는 특히 데이터 시각화를 할 때 아주 유용하게 쓰인답니다!

rep() 함수는 특정 값을 반복해서 벡터를 생성할 수 있게 해줘요. 예를 들어, 숫자 1을 5번 반복하는 벡터는 rep(1, times = 5)로 만들 수 있고, 문자열 “hello”를 3번 반복하는 벡터는 rep("hello", times = 3)로 만들 수 있어요. 데이터 분석에서 특정 값을 채워 넣을 때 아주 유용하게 활용할 수 있어요.

벡터 활용하기

벡터의 각 원소에 접근하려면 [] 안에 인덱스를 넣어주면 돼요. 예를 들어, x <- c(1, 5, 10, 15, 20)라는 벡터가 있을 때, 세 번째 원소는 x[3]으로 접근할 수 있고, 두 번째부터 네 번째 원소까지는 x[2:4]로 접근할 수 있어요. 마치 데이터 보물 상자에서 원하는 보석을 꺼내는 것 같죠?!

벡터는 이름을 붙일 수도 있어요. names() 함수를 이용하면 각 원소에 이름을 지정할 수 있답니다. 예를 들어, names(x) <- c("a", "b", "c", "d", "e")라고 하면 벡터 x의 각 원소에 “a”부터 “e”까지의 이름이 붙게 돼요. 이렇게 이름을 붙여놓으면 데이터를 관리하기가 훨씬 편리해진답니다!

벡터의 길이는 length() 함수를 사용해서 알아낼 수 있어요. 예를 들어, length(x)는 벡터 x의 길이, 즉 원소의 개수를 반환해요. 벡터의 길이를 아는 것은 데이터 분석의 첫걸음이라고 할 수 있죠.

마지막으로, is.vector() 함수를 사용하면 해당 객체가 벡터인지 아닌지 확인할 수 있어요. is.vector(x)는 x가 벡터이면 TRUE, 아니면 FALSE를 반환해요. 이 함수는 코드를 디버깅할 때 유용하게 쓰일 수 있답니다.

결론

이처럼 벡터는 R 언어에서 데이터를 다루는 가장 기본적이면서도 강력한 도구예요. 벡터를 잘 이해하고 활용하는 것은 R 언어로 데이터 분석을 하는 데 있어서 가장 중요한 첫걸음이라고 할 수 있답니다! 다음에는 리스트에 대해 알아볼 거예요. 기대해 주세요~!

 

리스트의 특징과 다양한 활용법

벡터가 R 언어에서 가장 기본적인 데이터 유형이라면, 리스트는 한층 더 자유롭고 유연한 구조를 자랑하는 녀석이에요. 마치 뷔페처럼 다양한 종류의 데이터를 한 접시에 담을 수 있다고 생각하면 돼요! 숫자, 문자열, 심지어 또 다른 리스트까지?! 정말 놀랍지 않나요? 이러한 유연성 덕분에 리스트는 복잡한 데이터 구조를 표현하는 데 탁월한 능력을 보여준답니다. 자, 그럼 리스트의 매력 속으로 풍덩 빠져볼까요~?

리스트 생성과 특징

리스트는 다른 프로그래밍 언어의 배열이나 딕셔너리와 유사한 기능을 하지만, 훨씬 더 강력한 힘을 가지고 있어요. 벡터처럼 c() 함수를 사용해서 만들 수 있지만, 리스트를 생성할 땐 list() 함수를 사용하는 게 일반적이에요. 각각의 요소는 이름을 가질 수도 있고, 이름 없이 존재할 수도 있죠. 이름을 붙여주면 나중에 해당 요소에 접근하기가 훨씬 편리해진답니다! 예를 들어, my_list 와 같이 리스트를 만들 수 있어요. 이렇게 하면 my_list$name으로 "R"이라는 값에 바로 접근할 수 있답니다. 정말 간편하죠?

리스트의 강점

리스트의 진정한 강점은 바로 다양한 데이터 유형을 한꺼번에 담을 수 있다는 점이에요. 숫자형 벡터, 문자열 벡터, 논리형 값, 심지어 다른 리스트나 행렬까지도 하나의 리스트 안에 담을 수 있죠. 마치 마법 상자 같지 않나요? 예를 들어 학생들의 정보를 담는 리스트를 생각해 보세요. 이름은 문자열, 성적은 숫자, 합격 여부는 논리값으로 저장할 수 있겠죠? 이 모든 정보를 하나의 리스트에 깔끔하게 담아 관리할 수 있다는 것이 리스트의 가장 큰 장점이랍니다!

리스트 활용법

자, 이제 리스트를 활용하는 다양한 방법들을 살펴볼게요. 리스트는 데이터 분석, 모델링, 그리고 함수의 입력값이나 출력값으로 사용되는 등 R 프로그래밍의 거의 모든 영역에서 활용된답니다. 특히, 함수에서 여러 개의 값을 반환해야 할 때 리스트는 정말 유용하게 쓰여요. 함수의 결과를 하나의 리스트에 담아 반환하면, 여러 개의 값을 한 번에 전달할 수 있거든요. 정말 효율적이죠?!

리스트 관련 주요 함수

리스트를 다룰 때 꼭 알아둬야 할 함수들이 몇 가지 있어요. length() 함수는 리스트의 길이, 즉 리스트 안에 몇 개의 요소가 있는지 알려줘요. names() 함수는 리스트 요소들의 이름을 확인하고 설정할 수 있게 해주죠. str() 함수는 리스트의 구조를 한눈에 보여주는 아주 유용한 함수랍니다. 리스트가 복잡하게 중첩되어 있을 때 str() 함수를 사용하면 구조를 파악하는 데 큰 도움이 돼요. 마지막으로 typeof() 함수를 사용하면, 리스트의 유형을 확인할 수 있어요. 당연히 "list"가 출력되겠죠?! ^^

리스트 요소 접근

리스트의 각 요소에 접근하는 방법도 알아두면 좋겠죠? [[ ]] 연산자를 사용하면 특정 위치의 요소에 접근할 수 있고, $ 연산자를 사용하면 이름으로 요소에 접근할 수 있어요. 예를 들어 my_list[[1]]은 첫 번째 요소를, my_list$name은 "name"이라는 이름을 가진 요소를 가리킨답니다. [ ] 연산자는 리스트의 부분집합을 추출할 때 사용하는데, 결과값도 역시 리스트 형태로 반환된다는 점을 기억해 두세요!

리스트 활용의 중요성

R의 리스트는 매우 유연하고 강력한 기능을 제공하기 때문에, 처음에는 다소 복잡하게 느껴질 수도 있어요. 하지만 걱정 마세요! 꾸준히 연습하고 활용하다 보면 리스트의 매력에 푹 빠지게 될 거예요. 리스트를 잘 활용하면 복잡한 데이터 구조를 효율적으로 다룰 수 있고, R 프로그래밍 실력도 쑥쑥 향상될 거예요.

 

매트릭스 생성 및 연산

벡터 다음으로, 이번에는 매트릭스에 대해 알아볼까요? 매트릭스는 행과 열로 이루어진 2차원 데이터 구조라고 생각하시면 돼요! 마치 바둑판처럼 말이죠! R에서는 이 매트릭스를 다루는 다양한 기능들을 제공하고 있어서 데이터 분석에 정말 유용하게 활용할 수 있답니다. 자, 그럼 매트릭스를 만드는 방법부터 차근차근 살펴볼게요~!

matrix() 함수를 이용한 매트릭스 생성

가장 기본적인 매트릭스 생성 함수는 matrix()예요. matrix(data, nrow, ncol) 형태로 사용하는데, 여기서 data는 매트릭스에 들어갈 값들을 벡터 형태로 넣어주시면 돼요. nrow는 행의 개수, ncol은 열의 개수를 지정하는 부분이에요. 예를 들어 1부터 6까지의 숫자로 2행 3열의 매트릭스를 만들고 싶다면 matrix(1:6, nrow = 2, ncol = 3) 이렇게 작성하면 된답니다! 참 쉽죠?!

byrow 옵션을 이용한 행 방향 채우기

byrow라는 아주 유용한 옵션도 있어요! 기본적으로 matrix() 함수는 열 방향으로 값을 채워 넣는데, byrow = TRUE 옵션을 추가하면 행 방향으로 값을 채워 넣을 수 있답니다. 가끔 데이터를 입력할 때 행 방향으로 넣어야 편한 경우가 있잖아요~? 그럴 때 사용하면 정말 편리해요!

dim() 함수를 이용한 벡터를 매트릭스로 변환

dim() 함수를 이용해서 이미 존재하는 벡터를 매트릭스 형태로 바꿀 수도 있어요. 예를 들어 1부터 12까지의 숫자를 가진 벡터 my_vector가 있다고 해볼게요. 이 벡터를 3행 4열의 매트릭스로 변환하고 싶다면, dim(my_vector) 이렇게 간단하게 작성하면 된답니다. 마법 같죠?! ^^

매트릭스 연산

자, 이제 매트릭스를 만들었으니 연산을 해봐야겠죠? 매트릭스 연산은 생각보다 간단해요! 덧셈, 뺄셈, 곱셈, 나눗셈 등 사칙연산을 일반 숫자처럼 사용할 수 있어요. 예를 들어 matrix1 + matrix2처럼 작성하면 두 매트릭스의 같은 위치에 있는 원소끼리 더해진답니다. 신기하지 않나요? 하지만, 매트릭스 곱셈은 일반 곱셈과는 조금 달라요. matrix1 %*% matrix2처럼 %*% 연산자를 사용해야 해요! 이 부분은 꼭 기억해 두세요! 행렬 곱셈의 규칙에 따라 계산되기 때문에, matrix1의 열의 개수와 matrix2의 행의 개수가 같아야 곱셈이 가능하다는 점도 잊지 마세요~!

t() 함수를 이용한 전치, solve() 함수를 이용한 역행렬 계산

t() 함수를 이용하면 매트릭스를 전치할 수도 있어요. 전치란 행과 열을 바꾸는 것을 말하는데, 데이터 분석에서 종종 필요한 기능이에요. solve() 함수는 역행렬을 구하는 데 사용돼요. 역행렬은 선형대수에서 중요한 개념인데, 연립방정식을 풀거나 특정 변환을 되돌리는 데 사용된답니다. 좀 어렵게 들릴 수도 있지만, R에서는 이런 복잡한 계산도 간단한 함수 하나로 해결할 수 있다는 게 정말 놀랍지 않나요?!

매트릭스 원소 접근

매트릭스의 각 원소에 접근하는 방법도 알아둘 필요가 있어요. matrix[행, 열] 형태로 원하는 원소를 선택할 수 있답니다. 예를 들어 matrix[1, 2]는 첫 번째 행, 두 번째 열의 원소를 나타내요. 특정 행이나 열 전체를 선택하고 싶다면, matrix[1, ]처럼 행이나 열의 인덱스를 비워두면 된답니다. 정말 편리하죠?

행/열 합계 및 평균 계산

rowSums(), colSums(), rowMeans(), colMeans() 함수들을 사용하면 각 행이나 열의 합계와 평균을 구할 수 있어요. 데이터 분석에서 아주 자주 사용되는 함수들이니 꼭 기억해 두세요! 예를 들어 rowSums(matrix)는 매트릭스의 각 행의 합계를 벡터 형태로 반환해준답니다.

cbind()와 rbind() 함수를 이용한 매트릭스 결합

cbind()rbind() 함수는 각각 열과 행 방향으로 벡터나 매트릭스를 결합하는 데 사용돼요. 데이터를 합치거나 새로운 변수를 추가할 때 정말 유용한 함수들이에요. cbind(matrix1, matrix2)matrix1matrix2를 열 방향으로 결합한 새로운 매트릭스를 생성하고, rbind(matrix1, matrix2)는 행 방향으로 결합한답니다.

매트릭스의 중요성

매트릭스는 데이터를 표 형태로 다루는 데 최적화되어 있어서 데이터 분석에서 정말 중요한 역할을 해요. R에서 제공하는 다양한 매트릭스 함수들을 잘 활용하면 데이터 분석 작업을 훨씬 효율적으로 수행할 수 있을 거예요! 다음에는 데이터 프레임에 대해 알아볼 텐데, 기대되시죠?! 데이터 프레임은 매트릭스보다 더욱 강력한 기능들을 제공하는 데이터 구조랍니다. 함께 재미있게 공부해 봐요!

 

데이터 프레임 구조와 데이터 분석

드디어 R 언어 학습의 꽃이라고 할 수 있는 데이터 프레임에 대해 알아볼 시간이에요! 마치 레고 블록처럼, 데이터 프레임은 다양한 데이터 유형을 담을 수 있는 멋진 구조를 가지고 있어요. 엑셀 스프레드시트와 비슷하다고 생각하면 이해하기 쉬울 거예요. 행(row)과 열(column)로 이루어진 표 형태로 데이터를 저장하고 관리하는데, 각 열은 서로 다른 데이터 유형을 가질 수 있다는 게 특징이죠! 예를 들어, 한 열에는 숫자, 다른 열에는 문자열, 또 다른 열에는 날짜 데이터를 저장할 수 있답니다. 정말 유연하죠?!

데이터 프레임 생성

데이터 프레임은 data.frame() 함수를 사용해서 만들 수 있어요. 각 열은 벡터로 구성되고, 모든 벡터의 길이는 같아야 해요. 길이가 다르면 오류가 발생하니 주의해야 해요! 만약 길이가 다른 벡터를 사용하면 R은 짧은 벡터를 재활용해서 길이를 맞추려고 시도하는데, 이는 종종 예상치 못한 결과를 초래할 수 있어요. 예를 들어, c(1, 2)c(3, 4, 5)를 이용해 데이터 프레임을 만들면, 첫 번째 벡터가 c(1, 2, 1)로 자동 변환되어 의도하지 않은 데이터가 생성될 수 있죠.

자, 이제 데이터 프레임을 생성하는 예시를 볼까요? data.frame(이름 = c("철수", "영희", "민수"), 나이 = c(25, 23, 27), 키 = c(180.5, 165.2, 178.9)) 이렇게 하면 이름, 나이, 키 정보를 가진 데이터 프레임이 뚝딱 만들어진답니다! 이름 열은 문자열, 나이와 키 열은 각각 정수와 실수형 숫자로 구성되어 있어요. 각 열의 데이터 유형을 명시적으로 지정하고 싶다면 as.character(), as.integer(), as.numeric()과 같은 함수를 활용할 수도 있답니다.

데이터 프레임 분석 기초

데이터 프레임을 만들었다면 이제 분석을 해야겠죠? R은 데이터 분석에 특화된 언어인 만큼, 데이터 프레임을 다루는 데 유용한 함수들을 아주 많이 제공해요. head() 함수를 사용하면 데이터 프레임의 처음 6개 행을 볼 수 있고, tail() 함수는 마지막 6개 행을 보여줘요. 데이터가 너무 많아서 전체를 확인하기 어려울 때 유용하게 쓰일 수 있겠죠?

특정 열을 선택하고 싶다면 $ 연산자나 [] 연산자를 사용할 수 있어요. 예를 들어, 위에서 만든 데이터 프레임의 이름 열만 보고 싶다면 데이터프레임$이름 또는 데이터프레임["이름"]과 같이 입력하면 된답니다. subset() 함수를 이용하면 특정 조건을 만족하는 행만 추출할 수도 있어요. 예를 들어 나이가 25살 이상인 사람들의 정보만 보고 싶다면 subset(데이터프레임, 나이 >= 25)와 같이 입력하면 된답니다. 정말 편리하죠?!

통계량 계산

데이터 분석에서 자주 사용되는 기능 중 하나는 바로 통계량 계산이에요. R에서는 mean(), median(), sd(), var(), max(), min() 등 다양한 함수를 제공해서 평균, 중앙값, 표준편차, 분산, 최댓값, 최솟값 등을 간단하게 계산할 수 있어요. 이러한 함수들을 이용하면 데이터의 분포와 특징을 파악하는 데 도움이 된답니다. 예를 들어, mean(데이터프레임$키)는 키 데이터의 평균을 계산해줘요.

apply 함수 활용

데이터 프레임을 다룰 때 apply() 함수 계열도 아주 유용해요. apply() 함수는 데이터 프레임의 행이나 열에 특정 함수를 적용할 수 있도록 해주는데, lapply(), sapply(), tapply() 등 다양한 변형 함수들이 있어요. 각 함수의 차이점을 이해하고 상황에 맞게 적절한 함수를 사용하는 것이 중요해요. 예를 들어, lapply(데이터프레임[, c("나이", "키")], mean)은 나이와 키 열에 각각 평균값을 계산해 리스트 형태로 반환해준답니다.

외부 데이터 불러오기

외부 데이터 파일을 불러와서 데이터 프레임으로 만들 수도 있어요! CSV, Excel, TXT 등 다양한 파일 형식을 지원해서 정말 편리해요. read.csv(), read.table(), read.xlsx() 등의 함수를 사용하면 된답니다. 파일 경로를 정확하게 지정하는 것만 잊지 않으면 돼요! 데이터 분석 프로젝트에서는 외부 데이터를 불러오는 작업이 필수적이기 때문에 이러한 함수들을 능숙하게 사용하는 것이 중요해요. 데이터를 불러온 후에는 데이터의 구조를 파악하고 필요에 따라 데이터를 정제하는 과정이 필요할 수도 있어요. 결측값 처리, 이상값 제거, 데이터 변환 등 다양한 전처리 작업을 통해 데이터의 품질을 높여야 분석 결과의 신뢰성을 확보할 수 있답니다!

데이터 시각화

R은 데이터 시각화에도 뛰어난 기능을 제공해요. ggplot2 패키지는 다양한 종류의 그래프를 그리는 데 사용되는 강력한 도구예요. 산점도, 막대 그래프, 히스토그램 등 다양한 시각화 기법을 활용해서 데이터의 패턴과 관계를 직관적으로 파악할 수 있답니다. ggplot2 패키지는 문법이 조금 복잡할 수 있지만, 익숙해지면 아주 유용하게 활용할 수 있을 거예요. 데이터 시각화는 데이터 분석 결과를 효과적으로 전달하는 데 중요한 역할을 하기 때문에 꼭 익혀두는 것이 좋겠죠?

데이터 분석 마무리

R 언어와 데이터 프레임을 이용하면 데이터 분석의 세계를 자유롭게 탐험할 수 있어요! 다양한 함수와 패키지를 활용해서 데이터를 분석하고 시각화하면서 데이터에 숨겨진 인사이트를 발견하는 재미를 느껴보세요! 데이터 분석은 마치 보물찾기와 같아서, 끊임없이 배우고 탐구하는 자세가 중요하답니다. 새로운 기법들을 배우고 실제 데이터에 적용해보면서 데이터 분석 능력을 키워나가세요! 데이터 분석의 여정은 쉽지 않지만, 그만큼 보람 있는 경험이 될 거예요! 화이팅!

 

R 언어의 데이터 유형들을 살펴보는 시간, 어떠셨나요? 처음엔 조금 낯설게 느껴졌을 수도 있지만, 이제 벡터, 리스트, 매트릭스, 데이터 프레임이라는 친근한 친구가 생긴 것 같지 않나요? 각각의 특징과 활용법을 배우면서 R의 매력에 푹 빠지셨기를 바라요. 마치 레고 블록처럼 이 데이터 유형들을 조합해서 원하는 데이터 분석을 멋지게 해낼 수 있답니다! 앞으로 데이터 분석 여정에서 든든한 동반자가 되어줄 거예요. 이 친구들과 함께라면 어떤 데이터도 두렵지 않아요. 이제 여러분의 손으로 직접 데이터를 다뤄보고, 놀라운 인사이트를 발견하는 즐거움을 경험해보세요! R과 함께 즐거운 코딩 시간 보내세요!

 

Itlearner

Share
Published by
Itlearner

Recent Posts

R에서 작업 디렉토리 설정과 파일 불러오기 (getwd(), setwd(), read.csv()

안녕하세요! R을 이용한 데이터 분석, 어디서부터 시작해야 할지 막막하셨죠? R 초보자분들이 가장 먼저 마주하는 어려움…

2시간 ago

R에서 패키지(Package) 설치 및 관리 (install.packages, library)

R 언어로 데이터 분석을 시작하려는 여러분, 안녕하세요! R은 정말 강력한 도구지만, 처음엔 어디서부터 시작해야 할지…

7시간 ago

R 언어에서 변수 할당 (<- vs = 차이점)

안녕하세요, 여러분! R 언어를 배우는 여정에서 만나서 정말 반가워요! 🤗 오늘 우리가 함께 알아볼 주제는…

12시간 ago

R에서 첫 번째 코드 실행 (Hello World 예제)

안녕하세요! 드디어 R 프로그래밍의 세계에 첫발을 내딛으려는 여러분을 환영합니다! R을 처음 접하시는 분들께는 낯설고 어렵게…

22시간 ago

R 언어 설치 및 개발 환경 설정 (RStudio 활용법)

안녕하세요! 데이터 분석의 세계로 떠나고 싶은 분들, 모두 환영해요! 요즘 데이터 분석이 핫한 분야인 건…

1일 ago

R 언어란? Python과 비교한 특징

안녕하세요! 데이터 분석에 관심이 생겨서 이것저것 찾아보고 계신가요? 요즘 데이터 과학 분야에서 R 언어와 Python이…

1일 ago