3주차 데이터 준비 및 변환 Mini Quest
import numpy as np
import pandas as pd
정형 데이터(Structured Data)
- 샘플 데이터프레임을 생성한 후 데이터의 기본 정보를 출력하는 코드를 작성하세요.
# 샘플 데이터
data = {
'이름': ['김철수', '이영희', '박민수', '최지현', '홍길동'],
'나이': [25, 30, 35, 28, 40],
'직업': ['개발자', '마케터', '개발자', '디자이너', 'CEO'],
'연봉': [4000, 3500, 5000, 4200, 10000],
'가입일': ['2020-05-21', '2019-07-15', '2021-01-10', '2018-11-03', '2017-09-27']
}
df = pd.DataFrame(data)
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 이름 5 non-null object
1 나이 5 non-null int64
2 직업 5 non-null object
3 연봉 5 non-null int64
4 가입일 5 non-null object
dtypes: int64(2), object(3)
memory usage: 332.0+ bytes
- 샘플 데이터에서 나이가 30 이상이고 연봉이 5,000 이하인 사람들만 필터링하는 코드를 작성하세요.
# 샘플 데이터
data = {
'이름': ['김철수', '이영희', '박민수', '최지현', '홍길동', '정지훈', '이지은'],
'나이': [25, 30, 35, 28, 40, 50, 22],
'직업': ['개발자', '마케터', '개발자', '디자이너', 'CEO', '디자이너', '마케터'],
'연봉': [4000, 3500, 5000, 4200, 10000, 4600, 3300],
'가입일': ['2020-05-21', '2019-07-15', '2021-01-10', '2018-11-03', '2017-09-27', '2016-04-11', '2022-03-19']
}
df = pd.DataFrame(data)
df[(df['나이'] >= 30) & (df['연봉'] <= 5000)]
| 이름 | 나이 | 직업 | 연봉 | 가입일 | |
|---|---|---|---|---|---|
| 1 | 이영희 | 30 | 마케터 | 3500 | 2019-07-15 |
| 2 | 박민수 | 35 | 개발자 | 5000 | 2021-01-10 |
| 5 | 정지훈 | 50 | 디자이너 | 4600 | 2016-04-11 |
- 샘플 데이터에서 가입 연도가 2019년 이전인 사람들을 찾아 연봉을 10% 인상 후 전체 평균 연봉을 계산하는 코드를 작성하세요.
# 샘플 데이터
data = {
'이름': ['김철수', '이영희', '박민수', '최지현', '홍길동', '정지훈', '이지은'],
'나이': [25, 30, 35, 28, 40, 50, 22],
'직업': ['개발자', '마케터', '개발자', '디자이너', 'CEO', '디자이너', '마케터'],
'연봉': [4000, 3500, 5000, 4200, 10000, 4600, 3300],
'가입일': ['2020-05-21', '2019-07-15', '2021-01-10', '2018-11-03', '2017-09-27', '2016-04-11', '2022-03-19']
}
df = pd.DataFrame(data)
df['가입일'] = pd.to_datetime(df['가입일'])
for i in range(len(df)):
year = df.loc[i, '가입일'].year
if year < 2019:
df.loc[i, '연봉'] *= 1.1
df['연봉'].mean()
5211.428571428572
비정형 데이터(Unstructured Data)
- JSON 형식의 데이터를 직접 생성한 후 Pandas 데이터프레임으로 변환하는 코드를 작성하세요.
# 샘플 데이터
data = '''
[
{"이름": "김철수", "나이": 25, "직업": "개발자", "연봉": 4000},
{"이름": "이영희", "나이": 30, "직업": "마케터", "연봉": 3500},
{"이름": "박민수", "나이": 35, "직업": "디자이너", "연봉": 4200}
]
'''
df = pd.read_json(data)
df
<ipython-input-20-c70357d01004>:1: FutureWarning: Passing literal json to 'read_json' is deprecated and will be removed in a future version. To read from a literal string, wrap it in a 'StringIO' object.
df = pd.read_json(data)
| 이름 | 나이 | 직업 | 연봉 | |
|---|---|---|---|---|
| 0 | 김철수 | 25 | 개발자 | 4000 |
| 1 | 이영희 | 30 | 마케터 | 3500 |
| 2 | 박민수 | 35 | 디자이너 | 4200 |
- 아래 샘플 데이터에서 한글과 공백을 제외한 모든 문자를 제거하고 공백을 하나로 정리하는 코드를 작성하세요
# 샘플 데이터
text = "안녕하세요!!! 저는 AI 모델-입니다. 12345 데이터를 정리해 보겠습니다."
import re
text = re.sub('[^가-힣 ]', '', text)
text = ' '.join(text.split())
text
'안녕하세요 저는 모델입니다 데이터를 정리해 보겠습니다'
- 주어진 텍스트 데이터를 문장 단위로 분리한 후 각 문장의 단어 개수를 데이터프레임으로 변환하는 코드를 작성하세요.
# 샘플 데이터
text = "자연어 처리는 재미있다. 파이썬과 pandas를 활용하면 편리하다. 데이터 분석은 흥미롭다."
text = text.split(' ')
df = pd.DataFrame(text, columns=['단어'])
df['단어 개수'] = df['단어'].apply(lambda x: len(x))
df
| 단어 | 단어 개수 | |
|---|---|---|
| 0 | 자연어 | 3 |
| 1 | 처리는 | 3 |
| 2 | 재미있다. | 5 |
| 3 | 파이썬과 | 4 |
| 4 | pandas를 | 7 |
| 5 | 활용하면 | 4 |
| 6 | 편리하다. | 5 |
| 7 | 데이터 | 3 |
| 8 | 분석은 | 3 |
| 9 | 흥미롭다. | 5 |