2주차 과제
import numpy as np
import pandas as pd
1. NumPy 배열 생산 및 연산
- NumPy를 사용해 3x3 정수배열(1부터 9까지)과 2x5 실수 배열(0~1 사이 난수)을 생성하세요. 생성한 배열을 계산하고 두 배열을 곱한 결과를 출력하세요.
- 배열의 형태를 유지하지 않아도 괜찮습니다.
arr1 = np.arange(1, 10).reshape(3,3)
arr2 = np.random.rand(2, 5)
print(arr1, '\n')
print(arr2, '\n')
[[1 2 3]
[4 5 6]
[7 8 9]]
[[0.53275297 0.46079039 0.63862169 0.63236122 0.98163941]
[0.86210443 0.97569107 0.99936253 0.01560557 0.53833269]]
Solution
- 행렬 내적
- 행렬 내적을 위해 arr2을 3x4 혹은 4x3으로 만들어 준 다음 내적을 하는 방법을 택한다.
- 요소별 곱
- 요소별 곱을 하기 위해 arr1, arr2를 flatten한 다음 arr1에 요소를 하나 추가해 곱한다.
arr2_c = arr2.copy()
arr2_c.resize(3, 4)
print(arr2_c)
print(np.dot(arr1, arr2_c))
[[0.53275297 0.46079039 0.63862169 0.63236122]
[0.98163941 0.86210443 0.97569107 0.99936253]
[0.01560557 0.53833269 0. 0. ]]
[[ 2.54284851 3.79999731 2.59000382 2.63108628]
[ 7.13284237 9.38367984 7.43294209 7.52625754]
[11.72283624 14.96736237 12.27588036 12.42142879]]
arr1_c = arr1.flatten().copy()
arr1_c = np.append(arr1_c, 10)
print(arr1_c)
print(np.multiply(arr1_c, arr2.flatten()))
[ 1 2 3 4 5 6 7 8 9 10]
[0.53275297 0.92158079 1.91586507 2.52944489 4.90819703 5.17262655
6.82983746 7.99490023 0.14045017 5.3833269 ]
2. Pandas를 활용한 데이터처리
- 아래 데이터를 DataFrame으로 생성하세요.
Name: [Alice, Bob, None, Charlie] Age: [25, None, 29, 35] City: [New york, None, Chicago, None] - 누락된 이름은 “Unknown”으로 나이는 평균 나이로 채우고 수정된 DataFrame을 출력하세요.
df = pd.DataFrame({
'Name': ['Alice', 'Bob', None, 'Charlie'],
'Age': [25, None, 29, 35],
'City': ['New york', None, 'Chicago', None]
})
df['Name'] = df['Name'].fillna('Unknown')
df['Age'] = df['Age'].fillna(df['Age'].mean())
df
| Name | Age | City | |
|---|---|---|---|
| 0 | Alice | 25.000000 | New york |
| 1 | Bob | 29.666667 | None |
| 2 | Unknown | 29.000000 | Chicago |
| 3 | Charlie | 35.000000 | None |
3. HTTP 통신을 활용한 데이터 읽기 및 저장
- 해당 링크에서 JSON 데이터를 가져오세요.
- 데이터를 파일로 저장한 뒤, “title”키의 값을 출력하세요.
df = pd.read_json('https://jsonplaceholder.typicode.com/todos')
df
| userId | id | title | completed | |
|---|---|---|---|---|
| 0 | 1 | 1 | delectus aut autem | False |
| 1 | 1 | 2 | quis ut nam facilis et officia qui | False |
| 2 | 1 | 3 | fugiat veniam minus | False |
| 3 | 1 | 4 | et porro tempora | True |
| 4 | 1 | 5 | laboriosam mollitia et enim quasi adipisci qui... | False |
| ... | ... | ... | ... | ... |
| 195 | 10 | 196 | consequuntur aut ut fugit similique | True |
| 196 | 10 | 197 | dignissimos quo nobis earum saepe | True |
| 197 | 10 | 198 | quis eius est sint explicabo | True |
| 198 | 10 | 199 | numquam repellendus a magnam | True |
| 199 | 10 | 200 | ipsam aperiam voluptates qui | False |
200 rows × 4 columns
df.to_json('assign.json')
df['title']
| title | |
|---|---|
| 0 | delectus aut autem |
| 1 | quis ut nam facilis et officia qui |
| 2 | fugiat veniam minus |
| 3 | et porro tempora |
| 4 | laboriosam mollitia et enim quasi adipisci qui... |
| ... | ... |
| 195 | consequuntur aut ut fugit similique |
| 196 | dignissimos quo nobis earum saepe |
| 197 | quis eius est sint explicabo |
| 198 | numquam repellendus a magnam |
| 199 | ipsam aperiam voluptates qui |
200 rows × 1 columns