2 분 소요

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

1. 데이터 리모델링과 처리

  • 주어진 데이터를 Pandas DataFrame으로 만들고 groupby기능을 이용해 Year별 총 Sales를 구하세요.
  • 구한 결과를 바탕으로 Year별 총 매출을 Total_Sales라는 새로운 컬럼으로 추가한 DataFrame을 출력하세요.
Year Quater Sales
2023 Q1 200
2023 Q2 300
2023 Q3 250
df = pd.DataFrame({
    "Year" : [2023, 2023, 2023],
    "Quater" : ["Q1", "Q2", "Q3"],
    "Sales" : [200, 300, 250]
})

Year_sum = df.groupby("Year").sum()
df["Total_Sales"] = Year_sum.loc[2023, "Sales"]
df
Year Quater Sales Total_Sales
0 2023 Q1 200 750
1 2023 Q2 300 750
2 2023 Q3 250 750

2. 정형 데이터와 비정형 데이터 처리

정형 데이터 처리

  • 주어진 데이터를 DataFrame으로 만들고 Age가 30세 이상(>= 30), Salary가 5만 이상(>= 50000)인 직원만 필터링한 DataFrame을 만드세요.
  • 필터링 된 결과에서 직원의 Name, Age, Department 컬럼만 출력하세요. (또는 필요한 컬럼만)
data = {
    "ID" : [1, 2, 3, 4, 5],
    "Name" : ["Alice", "Bob", "Charlie", "David", "Eve"],
    "Age" : [25, 32, 45, 29, 40],
    "Department" : ["HR", "Finance", "IT", "Marketing", "IT"],
    "Salary" : [48000, 52000, 60000, 45000, 70000]
}
df = pd.DataFrame(data)
r_df = df[(df["Age"] >= 30) & (df["Salary"] >= 50000)]
r_df[["Name", "Age", "Department"]]
Name Age Department
1 Bob 32 Finance
2 Charlie 45 IT
4 Eve 40 IT

비정형 데이터 처리

  • API에서 JSON 데이터를 가저와 DataFrame으로 변환 후 아래 필드를 추출해 새로운 DataFrame을 만드세요.
필드 변환 내용
id ID
name Name
username Username
email Email
adress.city City
company.name Company
  • City"Lebsackbury" 또는 "Roscoeview"에 해당하는 사용자만 필터링하세요.
  • 필터링 된 DataFrame을 CSV파일로 저장하세요.
df = pd.read_json("https://jsonplaceholder.typicode.com/users")

new_df = pd.DataFrame({
    "ID" : df["id"],
    "Name" : df["name"],
    "Username" : df["username"],
    "Email" : df["email"],
    "City" : df["address"].apply(lambda x : x["city"]),
    "Company" : df["company"].apply(lambda x : x["name"])
})

new_df = new_df[(new_df["City"] == "Lebsackbury") | (new_df["City"] == "Roscoeview")]
new_df.to_csv("new_df.csv", index=False)
new_df
ID Name Username Email City Company
4 5 Chelsey Dietrich Kamren Lucio_Hettinger@annie.ca Roscoeview Keebler LLC
9 10 Clementina DuBuque Moriah.Stanton Rey.Padberg@karina.biz Lebsackbury Hoeger LLC
df = pd.read_json("https://jsonplaceholder.typicode.com/users")

df = pd.json_normalize(df["address"])
df
street suite city zipcode geo.lat geo.lng
0 Kulas Light Apt. 556 Gwenborough 92998-3874 -37.3159 81.1496
1 Victor Plains Suite 879 Wisokyburgh 90566-7771 -43.9509 -34.4618
2 Douglas Extension Suite 847 McKenziehaven 59590-4157 -68.6102 -47.0653
3 Hoeger Mall Apt. 692 South Elvis 53919-4257 29.4572 -164.2990
4 Skiles Walks Suite 351 Roscoeview 33263 -31.8129 62.5342
5 Norberto Crossing Apt. 950 South Christy 23505-1337 -71.4197 71.7478
6 Rex Trail Suite 280 Howemouth 58804-1099 24.8918 21.8984
7 Ellsworth Summit Suite 729 Aliyaview 45169 -14.3990 -120.7677
8 Dayna Park Suite 449 Bartholomebury 76495-3109 24.6463 -168.8889
9 Kattie Turnpike Suite 198 Lebsackbury 31428-2261 -38.2386 57.2232

3. 시각화 및 시계열 데이터 활용

  • 아래 데이터를 PandasMatplotlib를 사용해 시계열 그래프로 시각화하세요.
  • X축은 날짜, Y축은 가격으로 설정하고 가격의 추세를 선 그래프로 나타내세요.
Data Price
2023-01-01 100
2023-02-01 120
2023-03-01 130
2023-04-01 125
2023-05-01 140
df = pd.DataFrame({
    "Data" : ["2023-01-01", "2023-02-01", "2023-03-01", "2023-04-01", "2023-05-01"],
    "Price" : [100, 120, 130, 125, 140]
})

plt.plot(df["Data"], df["Price"])
plt.xlabel("Data")
plt.ylabel("Price")
plt.show()

png