반응형

바쁜 분은 이것만

  1. 한 달(거래일 9/30 → 10/31)로 보면 낚시 +24.0%, 벌목 -23.9%로 계열마다 방향이 갈렸어요
  2. 그런데 10/29 거래까지는 6계열 모두 플러스였고, 월말 이틀(10/30·31)에 크게 내려왔어요
  3. 등급별 평균은 일반 -7.7%, 고급 -3.3%, 희귀 +5.1%. 희귀에는 13~17골드짜리 싼 재료가 섞여 있어 흔들림도 가장 컸어요

10월 한 달 모은 로스트아크 거래소 시세로 각인서, 강화 재료를 차례로 봤고 이번이 생활 재료 차례예요. 재료가 25개나 돼서 이번엔 채집·벌목·채광·수렵·낚시·고고학 계열로 묶어 보고, API가 주는 등급(일반·고급·희귀)으로도 나눠 봤습니다. 게임 공략이 아니라 모은 숫자를 파이썬으로 세어 보는 글이에요.

1. 데이터와 빈 날

수집 방법은 로스트아크 오픈API 거래소 시세 매일 자동 수집하기 (파이썬 + cron)에 있어요. 이 글도 yday_avg(전일 평균 거래가)만 씁니다.

  • 전일 평균가라서 수집일에서 하루를 뺀 날이 실제 거래일이에요. 10월 거래를 끝까지 보려고 11/1 수집분(= 10/31 거래)까지 넣었습니다. 그래서 범위는 거래일 9/30~10/31, 수집일로는 10/1~11/1이에요.
  • 수집일 기준 빈 날은 10/2, 10/7, 10/14(수집 실패), 10/24(수집 안 됨), 그리고 10/4예요. 10/4는 다른 카테고리는 들어왔는데 생활만 빠진 날입니다.
  • 그래서 거래일로는 10/1, 10/3, 10/6, 10/13, 10/23이 비고, 32일 중 27일치가 남아요. 25개 재료 모두 27일이 다 있었어요.

생활 카테고리에는 재료 말고도 제작 키트, 도구 제작 부품 같은 아이템과, 전일 평균가가 0으로 찍히는 날이 많은 10개 묶음 아이템 몇 종이 같이 들어 있어요. 이런 것들은 본문에서 빼고 100개 묶음 재료 25개만 봤습니다. 계열 묶음은 이름을 보고 제가 나눈 것이고(들꽃 → 채집, 목재 → 벌목, 철광석 → 채광, 생고기·가죽 → 수렵, 생선·잉어 → 낚시, 유물 → 고고학), 등급은 API의 grade 값을 그대로 썼어요.

2. 계열별 한 달 변화

생활 재료 25개의 10월 변화율 (거래일 9/30 → 10/31, 전일 평균가 기준). 주황 = 오름, 파랑 = 내림

계열 평균(재료 변화율의 단순 평균)으로 보면 이렇습니다.

  • 낚시 +24.0%: 4개 모두 올랐어요. 오레하 태양 잉어가 +39.4%로 25개 중 상승 1위입니다.
  • 수렵 +13.8%: 다듬은 생고기(-0.3%)만 거의 제자리이고 나머지는 올랐어요.
  • 채광 -1.3%, 채집 -4.8%: 계열 안에서 오른 것과 내린 것이 섞여서 평균이 0 근처예요. 채광은 단단한 철광석 +21.6%, 아비도스 철광석 -30.6%로 정반대였어요.
  • 고고학 -11.2%: 진귀한 유물(+26.7%)만 오르고 나머지 3개는 -22~-26%.
  • 벌목 -23.9%: 4개가 -23.4%~-24.5%로 거의 똑같이 내렸어요.

벌목 4개는 한 달 내내 같이 움직였어요. 4개 모두 10/15 거래에 최고가, 10/31 거래에 최저가였고, 최저 대비 최고 폭도 61.0~63.6%로 붙어 있습니다. 아래 선 그래프에서 벌목 칸의 회색 선이 안 보이는 건 4줄이 주황 선 하나에 겹쳐서예요.

3. 월말 이틀이 숫자를 바꿨다

9/30 거래 평균가를 100으로 놓은 계열별 지수. 색 선 = 계열 평균, 회색 선 = 재료 하나하나 (빈 날은 선으로 이어 그림)

선 그래프를 보면 6칸 모두 마지막 두 점에서 뚝 떨어져요. 그래서 끝점을 10/29 거래로 바꿔서 다시 세어 봤습니다.

계열 9/30 → 10/29 거래 9/30 → 10/31 거래
채집 +16.9% -4.8%
벌목 +5.5% -23.9%
채광 +30.9% -1.3%
수렵 +31.2% +13.8%
낚시 +40.5% +24.0%
고고학 +16.0% -11.2%

10/29 거래까지는 6계열 모두 플러스였어요. 이틀 사이(10/30 금·10/31 토 거래)에 계열 평균이 많게는 30포인트 넘게 빠졌고, 25개 중 11개가 한 달 최저가를 10/31 거래에 찍었습니다. "한 달 변화율"은 시작일과 끝일 이틀만 비교하는 숫자라, 끝이 어디에 걸리느냐에 따라 부호까지 바뀐다는 걸 보여 주는 예예요. 왜 월말에 내렸는지는 이 데이터에 없어서 말할 수 없습니다.

모양도 계열마다 달라요. 낚시는 10/16 거래 무렵 정점(생선·붉은 살 생선·아비도스 태양 잉어 모두 이날 최고가) 뒤로 꾸준히 내려왔고, 채광은 10/22 거래 무렵이 꼭대기예요. 낚시 칸에서 혼자 늦게 튀어 오르는 회색 선은 오레하 태양 잉어로, 10/10 거래 333.6골드가 최저, 10/22 거래 774.2골드가 최고였어요.

4. 등급별: 일반·고급·희귀

일반  6개  변화   -7.7%  변동 폭  72.6%  오름 3 / 내림 3
고급  6개  변화   -3.3%  변동 폭  66.1%  오름 3 / 내림 3
희귀 13개  변화   +5.1%  변동 폭  93.3%  오름 8 / 내림 5

희귀만 평균이 플러스이고, 변동 폭(한 달 최저 대비 최고가 몇 % 높았는지)도 희귀가 93.3%로 가장 커요. 다만 이걸 "희귀 등급이 더 출렁인다"로 읽기 전에 볼 게 있어요.

  • 희귀 13개에는 진귀한 가죽(12.1~30.4골드), 진귀한 유물(11.8~27.1골드)처럼 아주 싼 재료가 들어 있어요. 이 둘의 변동 폭이 151.2%, 129.7%라 평균을 끌어올립니다. 1~2골드만 바뀌어도 10% 넘게 잡히는 구간이에요.
  • 희귀에는 2,000~9,000골드대 재료도 같이 있어서, 가격대가 가장 넓은 묶음이에요. 상승·하락 1위(오레하 태양 잉어 +39.4%, 아비도스 철광석 -30.6%)가 모두 희귀입니다.
  • 일반·고급은 6개씩이라 3번에서 본 월말 이틀의 영향이 평균에 그대로 들어가요.

5. 어떻게 계산했나 (파이썬 csv + datetime)

강화 재료 글과 같은 방식으로 수집일에서 하루를 빼 거래일로 바꾸고, {이름: {거래일: 전일 평균가}} 딕셔너리에 모았어요. 계열은 딕셔너리로 직접 적었습니다.

import csv, datetime as dt
from collections import defaultdict

FAMILY = {   # 계열 -> 아이템 (생활 카테고리의 100개 묶음 재료만)
    "채집": ["들꽃", "수줍은 들꽃", "화사한 들꽃", "아비도스 들꽃"],
    "벌목": ["목재", "부드러운 목재", "튼튼한 목재", "아비도스 목재"],
    "채광": ["철광석", "묵직한 철광석", "단단한 철광석", "아비도스 철광석"],
    "수렵": ["두툼한 생고기", "다듬은 생고기", "진귀한 가죽", "오레하 두툼한 생고기", "아비도스 두툼한 생고기"],
    "낚시": ["생선", "붉은 살 생선", "오레하 태양 잉어", "아비도스 태양 잉어"],
    "고고학": ["고대 유물", "희귀한 유물", "진귀한 유물", "아비도스 유물"],
}
FIRST, LAST = dt.date(2026, 9, 30), dt.date(2026, 10, 31)   # 거래일 기준
price, grade = defaultdict(dict), {}
for r in csv.DictReader(open("lostark/data/market_history.csv", encoding="utf-8")):
    if r["category"] != "생활":
        continue
    trade_day = dt.date.fromisoformat(r["date"]) - dt.timedelta(days=1)   # 전일 평균가 = 하루 전 거래
    if FIRST <= trade_day <= LAST:
        price[r["name"]][trade_day] = float(r["yday_avg"])
        grade[r["name"]] = r["grade"]

items = [n for ns in FAMILY.values() for n in ns]
days = sorted(set.union(*(set(price[n]) for n in items)))
print(f"재료 {len(items)}개 / 거래일 {len(days)}일 ({days[0]:%m/%d}~{days[-1]:%m/%d})")
print("빠진 거래일:", [f"{d:%m/%d}" for d in (FIRST + dt.timedelta(i) for i in range(32)) if d not in days])

def change(n):
    return (price[n][LAST] / price[n][FIRST] - 1) * 100

print("\n[계열별] 재료 변화율 단순 평균 (거래일 9/30 → 10/31)")
for fam, ns in FAMILY.items():
    cs = [change(n) for n in ns]
    print(f"{fam:4} {sum(cs) / len(cs):+6.1f}%  | " + ", ".join(f"{n} {change(n):+.1f}%" for n in ns))

rank = sorted(items, key=change)
print("\n[상승 Top 3]")
for n in rank[::-1][:3]:
    print(f"{n:12} {grade[n]} {price[n][FIRST]:>8,.1f} → {price[n][LAST]:>8,.1f}  {change(n):+6.1f}%")
print("\n[하락 Top 3]")
for n in rank[:3]:
    print(f"{n:12} {grade[n]} {price[n][FIRST]:>8,.1f} → {price[n][LAST]:>8,.1f}  {change(n):+6.1f}%")

(등급별 평균과 10/29 끝점 비교는 같은 파일 아래쪽에 이어서 계산했어요.) 실행한 출력에서 위 코드에 해당하는 부분 그대로입니다.

$ .venv/bin/python plan/ref_code/loa_oct_life/life.py
재료 25개 / 거래일 27일 (09/30~10/31)
빠진 거래일: ['10/01', '10/03', '10/06', '10/13', '10/23']

[계열별] 재료 변화율 단순 평균 (거래일 9/30 → 10/31)
채집     -4.8%  | 들꽃 -18.8%, 수줍은 들꽃 +7.1%, 화사한 들꽃 +4.6%, 아비도스 들꽃 -12.0%
벌목    -23.9%  | 목재 -24.0%, 부드러운 목재 -23.4%, 튼튼한 목재 -23.7%, 아비도스 목재 -24.5%
채광     -1.3%  | 철광석 +2.9%, 묵직한 철광석 +1.1%, 단단한 철광석 +21.6%, 아비도스 철광석 -30.6%
수렵    +13.8%  | 두툼한 생고기 +3.4%, 다듬은 생고기 -0.3%, 진귀한 가죽 +25.2%, 오레하 두툼한 생고기 +32.7%, 아비도스 두툼한 생고기 +8.0%
낚시    +24.0%  | 생선 +15.8%, 붉은 살 생선 +18.3%, 오레하 태양 잉어 +39.4%, 아비도스 태양 잉어 +22.5%
고고학   -11.2%  | 고대 유물 -25.5%, 희귀한 유물 -22.7%, 진귀한 유물 +26.7%, 아비도스 유물 -23.1%

[상승 Top 3]
오레하 태양 잉어    희귀    454.0 →    632.8   +39.4%
오레하 두툼한 생고기  희귀  6,997.6 →  9,285.7   +32.7%
진귀한 유물       희귀     13.5 →     17.1   +26.7%

[하락 Top 3]
아비도스 철광석     희귀  3,071.0 →  2,129.9   -30.6%
고대 유물        일반    248.4 →    185.1   -25.5%
아비도스 목재      희귀  2,976.5 →  2,247.4   -24.5%
  • 11/1 수집분까지 읽으면 11/2 수집분(11/1 거래)도 같이 들어올 수 있어서, 거래일 범위로 한 번 더 걸렀어요. 이 줄이 없으면 LAST를 바꿔도 딕셔너리에 11월 값이 섞입니다.
  • 10/1은 수집이 두 번 돌았지만 두 줄의 전일 평균가가 같아서 덮어써도 값이 바뀌지 않아요.

차트는 같은 딕셔너리로 matplotlib(font.family = "AppleGothic")에서 그렸어요. 선 그래프는 plt.subplots(2, 3, sharey=True)로 6칸을 만들고 y축을 공유해서, 계열끼리 높이를 바로 비교할 수 있게 했습니다.

6. 이 숫자를 읽을 때 주의할 점

  • 끝점 하나에 많이 흔들려요. 3번 표처럼 끝을 이틀만 당겨도 부호가 바뀌는 계열이 4개예요. 변화율만 보지 말고 선 그래프를 같이 보는 게 좋습니다.
  • 계열 평균은 단순 평균이에요. 180골드짜리와 9,000골드짜리를 같은 무게로 더했습니다. 가격으로 가중하면 비싼 희귀 재료 쪽으로 기울어요.
  • 거래량이 없어서 얼마나 많이 거래됐는지는 모르고, 오르고 내린 이유도 이 데이터에는 없어요.

정리

항목 10월 값 (생활 재료 25개, 거래일 9/30 → 10/31)
오름 / 내림 14개 / 11개
계열 1위 / 꼴찌 낚시 +24.0% / 벌목 -23.9%
상승 1위 오레하 태양 잉어 +39.4% (454.0 → 632.8)
하락 1위 아비도스 철광석 -30.6% (3,071.0 → 2,129.9)
등급별 평균 일반 -7.7% / 고급 -3.3% / 희귀 +5.1%
끝점을 10/29로 6계열 모두 플러스 (+5.5% ~ +40.5%)
데이터 27일치 (거래일 10/1·3·6·13·23 없음), 전일 평균가 기준

10월 시세 시리즈: 로스트아크 각인서 시세 10월 한 달 변화 · 로스트아크 강화 재료 시세 10월 추이와 요일별 패턴

참고: LOST ARK Open API — Markets (/markets/items, YDayAvgPrice) / Python 공식 문서 — csv.DictReader, datetime.timedelta / Matplotlib 문서 — pyplot.subplots, Axes.barh

반응형

+ Recent posts