강의 내용 정리
미해결
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
강의 내용을 듣고 정리하고 학습한 내용을 제 블로그나 노션에 정리해도 괜찮나요?
- python
- 웹-크롤링
172만명의 커뮤니티!! 함께 토론해봐요.
미해결
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
강의 내용을 듣고 정리하고 학습한 내용을 제 블로그나 노션에 정리해도 괜찮나요?
미해결
실습으로 손에 잡히는 SQLD(2과목)
첫 설정하고 잘 db도 연결해서 쿼리도 했는데 그다음날 다시 들어가니 ORA-12541: 데이터베이스에 접속할 수 없습니다. %s에 리스너가 없습니다. (CONNECTION_ID=NLVRNlPuRjCSIQBsRDyXvQ==) 이런 항목이 뜹니다ㅠㅠ
미해결
실습으로 손에 잡히는 SQLD(2과목)
환경설정에서 막혀서 이틀정도 헤매다가 chat-gpt에 검색으로 해결한 내용 공유드립니다. (Mac OS 환경에서 터미널로 작성한 내용입니다) docker compose up -d 명령으로 다운로드 완료 [+] Running 13/13 ✔ sqlserver Pulled 1972.2s ✔ 9b857f539cb1 Pull complete 255.4s ✔ 2678dac613fe Pull complete 1703.6s ✔ c88a287125cd Pull complete 1965.5s ✔ a11052f2d5bd Pull complete 1966.1s ✔ oracle Pulled 2792.4s ✔ 9c4def932b31 Pull complete 594.0s ✔ d701f846bb57 Pull complete 2258.2s ✔ f62e8298f905 Pull complete 2425.8s ✔ 20f5a8cddc81 Pull complete 2543.3s ✔ f18c9ed317b9 Pull complete 2705.3s ✔ cb3a8f950dc8 Pull complete 2785.5s ✔ afaeda8e1723 Pull complete 2786.0s [+] Running 3/3 ✔ Network sqld_default Created 7.0s ✔ Container oracle Started 28.3s ✔ Container sql-server Started 만약 위의 내용처럼 정상적으로 다운로드되지 않는다면 아래 내용 차례대로 다시입력 docker rm -f $(docker ps -qa) colima stop colima start --memory 4 --arch x86_64 cd .yml 파일이 있는 경로로 이동 docker compose up -d 이렇게 설치 완료후 dbeaver에 oracle 연결 시도를 하였는데, 리소스가 없음 오류발생 해결방법 : 아래의 코드를 복사하여 터미널에 한번에 입력 (oracle-xe 를 다운로드) docker run \ --restart unless-stopped \ --name oracle \ -e ORACLE_PASSWORD=1111111 \ -p 1521:1521 \ -d \ gvenzl/oracle-xe 다운로드가 완료되면 dbeaver에서 xe/sqld_user/pass 로 다시 oracle 연결 -> 성공
미해결
FastAPI 완벽 가이드
안녕하세요, 먼저 좋은 내용의 강의 감사합니다. 다름 아니라 강의 비디오에서 'FastAPI Form 다루기 - 01'부터 녹음 된 소리가 울림이 커서 명료하지 않게 들리는 것 같습니다. 혹시 번거로우시겠지만, 좋은 강의 경험을 위해 그 전까지의 영상과 같이 오디오를 깔끔하게 변환해주실 수 있을지 문의 드립니다. 감사합니다.
미해결
초보자를 위한 ChatGPT API 활용법 - API 기본 문법부터 12가지 프로그램 제작 배포까지
Python 버전을 낮게 해서 Streamlit설치까지 완료했어요. 하지만 streamlit run을 하면 사이트에서도 아무것도 안 뜨고 터미널에서도 오류가 뜬 다고 나와 요
해결됨
초보자를 위한 BigQuery(SQL) 입문
안녕하세요. 열혈 수강자 이지수입니다 : ) 문제가 하나씩 풀리니 넘 재밌고 뿌듯합니다 ㅎㅎ 17번 문제에서 풀어준 포켓몬 수를 B 전체 포켓몬 수를 A로 두었는데요 COUNT IF B/A 이런식으로 축약해서 연산할 수는 없나요? 감사합니다. SELECT trainer_id, COUNTIF(status="Released") as B , #풀어준 포켓몬의 수 COUNT(pokemon_id) as A, #전체 포켓몬의 수 COUNTIF(status="Released")/COUNT(pokemon_id) as released_ratio FROM basic.trainer_pokemon GROUP BY trainer_id HAVING released_ratio >=0.2
미해결
FastAPI 완벽 가이드
CORS 설명 주신 부분을 보면 처음 브라우저에서 request 날릴 때에는 Origin에 아무런 값이 들어가 있지 않아서 response를 받고 그 이후에 받은 html의 javascript 쪽에서 다른 요청을 보냈을 때 기존에 요청하면서 받았던 Origin 값이 같이 들어가면서 이슈가 발생한다고 말씀주셨는데, blog json data 테스트 하는 거 보면 origin이 null인데 바로 cors 에러가 나나요 ?
미해결
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
ㅅ선생님 이전 8회 실기준비할 때 보면 대부분 원-핫 인코딩으로 하는 분위기였는데 이번에도 그렇게 준비해도 충분 하겠죠? 뭐랄까 Label Encoder는 실전에서 코드가 생각 잘 안나기도 하고 그래서요 ㅠㅠ 타겟값 옮겨겨놓기 target = train.pop('total') # 원핫 인코딩 train = pd.get_dummies(train) test = pd.get_dummies(test) # 데이터 분할을 해보자 from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0) # 랜포에 넣어보자 from sklearn.ensemble import RandomForestRegressor rf = RandomForestRegresosr(random_state=0) rf.fit (X_tr, y_tr) pred = rf.predict(X_val) # 제출 해보자 pred = rf.predict(test) submit = pd.DataFrame({'pred': pred}) 이렇게만 해서 40점은 받긴 했는데... (저번에 1유형 0점맞아서 재수 중..ㅠㅠ) submit.to _csv("result.csv", Index=False)
미해결
처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
pdf 14_async_sqlalchemy 데이터 검색(읽기) github 링크가 잘못 연결되어있습니다. https://gist.github.com/DaveLee-fun/3ff74108d3b58f8ffb731c1ec106691e 연결되어 있는 페이지에 코드는 async 비동기 실행 코드가 아닌 그냥 sqlalchemy 코드입니다.
해결됨
FastAPI 완벽 가이드
@app.get("/items") # 함수에 개별 인자값이 들어가 있는 경우 path parameter가 아닌 모든 인자는 query parameter # query parameter의 타입과 default값을 함수인자로 설정할 수 있음. async def read_item(skip: int = 0, limit: int = 2): return fake_items_db[skip : skip + limit] @app.get("/items_nd/") # 함수 인자값에 default 값이 주어지지 않으면 반드시 query parameter에 해당 인자가 주어져야 함. async def read_item_nd(skip: int, limit: int): return fake_items_db[skip : skip + limit] 안녕하세요 url 차이에 관해 질문드립니다. 위에 url은 "/items" 인데, 아래 url은 "/items_nd/" 으로 끝에 /가 붙어있는데요. 둘다 query params로 구성되어 있는데 위는 /로 안끝나고, 아래는 왜 /로 끝났는지 이유가 궁금합니다.
미해결
[개정판] 파이썬 머신러닝 완벽 가이드
안녕하세요 위와 같이 코드를 실행하면 아래와 같이 에러가 뜨네요 ㅠ 집에선 잘됬던거 같은데 회사에서 똑같이 하니 왜그런건지 ..!..ㅠ
해결됨
BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
목차 과제별 작성 쿼리 쿼리 작성 후 느낀점 과제별 작성 쿼리 (1) ARRAY·STRUCT ## 연습문제 1번 -- select -- title, -- genre -- from advanced.array_exercises -- cross join unnest(genres) as genre ## 연습문제 2번 -- select -- title, -- actor.actor, -- actor.character, -- from advanced.array_exercises -- cross join unnest(actors) as actor ## 연습문제 3번 -- select -- title, -- actor.actor, -- actor.character, -- genre -- from advanced.array_exercises -- cross join unnest (actors) as actor -- cross join unnest (genres) as genre ## 연습문제 4번 -- select -- user_id, -- event_date, -- event_name, -- user_pseudo_id, -- event_param.key, -- event_param.value, -- event_param.value.int_value -- from advanced.app_logs -- cross join unnest(event_params) as event_param -- where -- event_date = '2022-08-01' PIVOT ## 연습문제 1번 -- select -- order_date, -- sum(if(user_id=1, amount, 0)) as user_1, -- sum(if(user_id=1, amount, 0)) as user_2, -- sum(if(user_id=1, amount, 0)) as user_3, -- from advanced.orders -- group by -- order_date -- order by -- order_date asc ## 연습문제 2번 -- select -- user_id, -- sum(if(order_date='2023-05-01', amount, 0)) as 2023-05-01 , -- sum(if(order_date='2023-05-02', amount, 0)) as 2023-05-02 , -- sum(if(order_date='2023-05-03', amount, 0)) as 2023-05-03 , -- sum(if(order_date='2023-05-04', amount, 0)) as 2023-05-04 , -- sum(if(order_date='2023-05-05', amount, 0)) as 2023-05-05 -- from advanced.orders -- group by -- user_id ## 연습문제 3번 -- select -- user_id, -- max(if(order_date = '2023-05-01', 1, 0)) as 2023-05-01 , -- max(if(order_date = '2023-05-02', 1, 0)) as 2023-05-02 , -- max(if(order_date = '2023-05-03', 1, 0)) as 2023-05-03 , -- max(if(order_date = '2023-05-04', 1, 0)) as 2023-05-04 , -- max(if(order_date = '2023-05-05', 1, 0)) as 2023-05-05 -- from advanced.orders -- group by -- user_id ## 앱 로그 데이터 배열 PIVOT -- with base as ( -- select -- user_id, -- event_date, -- event_name, -- user_pseudo_id, -- event_param.key as key, -- event_param.value.string_value as string_value, -- event_param.value.int_value as int_value -- from advanced.app_logs -- cross join unnest(event_params) as event_param -- where -- event_date = '2022-08-01' and -- event_name = 'click_cart' -- ) -- select -- user_id, -- event_date, -- event_name, -- user_pseudo_id, -- max(if(key = 'firebase_screen', string_value, null)) as firebase_screen, -- max(if(key = 'food_id', int_value, null)) as food_id, -- max(if(key = 'session_id', string_value, null)) as session_id, -- from base -- group by all 퍼널 ## step1 : 퍼널정의, 유저 집계 방식 정하기 ## step2 : 데이터 확인 -- select -- *, -- event_param.key, -- event_param.value.string_value, -- event_param.value.int_value, -- from advanced.app_logs -- cross join unnest(event_params) as event_param -- where -- event_date between '2022-08-01' and '2022-08-18' -- limit 100 ## step3 : pivot 해서 concat 하기 좋은 형태로 만들기 with base as ( select *, max(if(event_param.key = 'firebase_screen', event_param.value.string_value, null)) as firebase_screen, max(if(event_param.key = 'food_id', event_param.value.int_value, null)) as food_id, max(if(event_param.key = 'session_id', event_param.value.string_value, null)) as session_id from advanced.app_logs cross join unnest(event_params) as event_param where event_date between '2022-08-01' and '2022-08-18' group by all ) ## step4 : concat해서 퍼널 컬럼 정의하기 , base2 as ( select *, concat(event_name, '-', firebase_screen) as event_name_with_screen from base ) ## step5 : 퍼널별 유저수 쿼리 작성 I step_number, cnt 컬럼 생성 -- select -- event_name_with_screen, -- case -- when(event_name_with_screen = 'screen_view-welcome') then 1 -- when(event_name_with_screen = 'screen_view-home') then 2 -- when(event_name_with_screen = 'screen_view-food_category') then 3 -- when(event_name_with_screen = 'screen_view-restaurant') then 4 -- when(event_name_with_screen = 'screen_view-cart') then 5 -- when(event_name_with_screen = 'click_payment-cart') then 6 -- else null -- end as step_number, -- count(distinct user_pseudo_id) as cnt -- from base2 -- group by -- 1 -- having -- step_number is not null ## step6 : 일자별 퍼널 쿼리 작성 select event_date, event_name_with_screen, case when(event_name_with_screen = 'screen_view-welcome') then 1 when(event_name_with_screen = 'screen_view-home') then 2 when(event_name_with_screen = 'screen_view-food_category') then 3 when(event_name_with_screen = 'screen_view-restaurant') then 4 when(event_name_with_screen = 'screen_view-cart') then 5 when(event_name_with_screen = 'click_payment-cart') then 6 else null end as step_number, count(distinct user_pseudo_id) as cnt from base2 group by all having step_number is not null order by event_date 쿼리 작성 후 느낀점 (1) ARRAY·STRUCT I 쿼리를 풀고난 이후 느낀점 1. '~별'이라고 해서 무조건 GROUP BY는 아니다 ARRAY 또는 STRUCT 같은 구조체 타입 컬럼을 만나기 전에는 '~별'이라는 텍스트가 있을 때 GROUP BY를 떠올렸습니다. 그러나 구조체 타입 컬럼을 다루고난 이후, 생각이 달라졌습니다. 비구조체 컬럼을 구조체 컬럼과 함께 출력할 때는 '~별'을 GROUP BY로 출력할 수 없다는 걸 알았습니다. 2. CROSS JOIN을 2개 이상 사용할 때는 CROSS JOIN을 2개 이상 입력할 때는 쉼표를 사용하지 않는다는 걸 알았습니다. 다른 구간에서 요소를 2개 이상 입력할 때는 쉼표를 사용해서 요소를 분리 했었는데, CROSS JOIN은 아니였습니다. CROSS JOIN을 2개 이상 사용할 때 쉼표를 쓰면 다음과 같은 오류가 발생하는 걸 알았습니다 : --> Syntax error: Unexpected keyword CROSS at [24:1] (2) PIVOT I 쿼리를 풀고난 이후 느낀점 1. 날짜 데이터와 다르게 일반 숫자데이터는 따옴표를 쓰지 않는다 EX) if(user_id=1, amount, 0) --> O if(user_id='1', amount, 0) --> X + if(user_id='2024-10-22', amount, 0) --> O 2. 컬럼명에 대시(또는 한글)를 사용할 때는 따옴표가 아닌 백틱으로 컬럼명을 감싼다 대시를 컬럼명으로 할 때는 백틱을 사용. as 2023-05-01 --> O as '2023-05-01' --> X + as 빠짝스터디 --> O as '빠짝스터디' --> X 3. 일반 테이블을 피봇테이블로 만들 때 고려해 봐야 할 2가지 1. 행에 2개 이상 중복이 있는지 확인한다. 2. 2개 이상 중복이 있지만, 피봇테이블로 변경 했을 때 효율적인지 생각해 본다. 위 2개 조건을 모두 충족하는 컬럼을 피봇테이블 만들 때 기준 컬럼으로 삼음. EX) *'앱 로그 데이터 배열 PIVOT 하기' 테이블 참고 student 열 중복 있음 (A, A, A, B, B, B) 기준 열로 삼으면 → 각 학생의 모든 과목 점수를 한눈에 볼 수 있어서 효율적! subject 열 중복 있음 (수학, 영어, 과학이 2번씩) 기준 열로 삼으면 → 과목별로 학생들의 점수를 볼 수는 있지만, 한 학생의 전체 성적을 보기는 어려움 score 열 중복이 없음. 기준 열로 삼으면 → 같은 점수끼리 모이겠지만, 효율이 떨어짐. (3) 퍼널 I 쿼리를 풀고난 이후 느낀점 1. concat 할 때 따옴표 사용 주의 처음 concat 할 때 다음과 같이 입력했습니다. concat(event_name, '-', 'firebase_screen') 'firebase_screen'라고 작성했었는데, 이렇게 하니깐 firebase_screen 내에 있는 데이터랑 concat 된 게 아니라 'firebase_screen'라는 문자 자체랑 concat이 되어서 혼란스러웠습니다. concat 내에서는 따옴표를 쓰지 않고, 컬럼끼리 연결해야겠다는 걸 알게 됐습니다.
미해결
문과생도, 비전공자도, 누구나 배울 수 있는 파이썬(Python)!
압축파일에 있는 자료를 관련 폴더에 다 넣어봐도 주피터에 뜨질 않습니다 ㅠ
미해결
문과생도, 비전공자도, 누구나 배울 수 있는 파이썬(Python)!
이런식으로 제대로 설치가 안되는데 어떻게 진행해야 하나요?
해결됨
직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
지난 번에 답변주신 코드에서 일부 수정하여 아래와 같이 코드를 실행해 보면 제대로 작동되지 않습니다. ChatGPT에 물어봐도 정확한 문제원인과 해결책을 알려주지 않아서 질문 올립니다. 제가 원하는 기능은, 바탕화면의 combine 폴더 안에 n개의 hwp파일을 위치 시킨 상태에서, 코드를 실행하면 hwp 문서들을 순서대로 끼워넣기 하여 "취합본.hwp"으로 저장하는 기능입니다. 지난 번에 일코님이 알려주신 코드는.. "개구리.hwp, 너구리.hwp, 다람쥐.hwp, 라마.hwp, ... "를 먼저 생성하고 나서 "취합본.hwp"을 만들어 내는 방법이었으므로, "# 샘플문서 생성"에 해당하는 코드를 제거하고 제가 원하는 기능으로 작동하기를 기대했습니다. 위와 같이 바탕화면의 combine 폴더 내에 1.hwp, 2.hwp, 3.hwp, 4.hwp, 5.hwp 문서를 넣어 두고 해당 폴더가 활성화된 상태에서 아래의 코드를 실행시켰습니다. from pyhwpx import Hwp # 임포트 hwp = Hwp() # 한/글 실행 import os # 끼워넣기 hwp.open(os.listdir()[0]) # 첫 번째(0) 파일 열기 for i in os.listdir()[1:]: # 첫 번째(0) 파일은 제외하고 두 번째(1)파일부터 아래 들여쓰기한 코드 반복 hwp.MoveDocEnd() # 한/글의 문서 끝으로 이동해서 hwp.BreakPage() # <----------------------- 페이지나누기(Ctrl-Enter) hwp.insert_file(i) # 문서끼워넣기(기본값은 섹션, 글자, 문단, 스타일 모두 유지) hwp.save_as("취합본.hwp") # 반복이 끝났으면 "취합본.hwp"로 다른이름으로저장 hwp.Quit() # 한/글 프로그램 종료 그러니까 원하는 대로 작동되지 않고 아래와 같이 나타납니다. [질문] 위의 코드는 왜 제가 원하는대로 작동이 되지 않는지? 또 그 해결방법은 무엇인지? [추가질문] 아래 코드 4줄은 한/글 자동화 코딩에서 거의 필수적으로 항상 쓰는 것 처럼 이해했었는데요. 위의 코드를 짜 주실 때 아래 4줄의 코드는 전혀 사용하지 않으셨었는데, 그 이유를 알 수 있을까요? import win32com.client as win32 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True hwp.RegisterModule("FilePathCheckDLL","FilePathCheckerModule") 궁금합니다. 답변 부탁드립니다. 감사합니다.
미해결
중고급 SQL과 실전 데이터 분석 101 문제 풀이
스키마 다운 그리고 db다운 그리고 select * from actor limilt 10; 후 실행하면 테이블은 표는 나오는데 안에 value값은 null로 나와요 뭘 잘 못한 걸까요? ㅜ 이틀 통안 삭제 다시 하면서 10번은 해본거 같아요
미해결
파이썬/장고로 결제 시작하기 (Feat. 아임포트) - 기본편
현재는 주문하기 버튼을 클릭하는 순간, 주문정보와 결제정보가 같이 생성되는데 예제이나 보통의 쇼핑몰에서는 결제 시점에 주문정보와 결제정보가 생성되겠죠..? 알리익스프레스의 경우 결제 도중에 취소하면, 결제대기? 비슷하게 주문목록에 남았던 것 같긴합니다. 근데 관리차원에서는 결제가 정상적으로 완료되는 시점에서만 주문과 결제정보를 생성하는게 좋을 것 같은데.. 이 과정에서 로직 상 문제가 될만한 점이 있을까요.?
해결됨
[백문이불여일타] 데이터 분석을 위한 기초 SQL
w3schools.com 에서 실습을 할 때 SELECT * FROM products ORDER BY price DESC LIMIT 3 으로 실행시켰는데, Error in SQL: Syntax error in ORDER BY clause. 이런 결과가 나오는 건 왜일까요?ㅠ
해결됨
직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
여러 개의 한글 문서를 '문서 끼워 넣기' 기능을 이용해 합치는 방법 문의 -- 박주현 -- 24.10.17 14:56 관련입니다. 해당 문의에 대해 아래와 같이 코드를 답변 주셨었는데요. from pyhwpx import Hwp # 임포트 hwp = Hwp() # 한/글 실행 # 샘플문서 생성 # 샘플문서 생성 import os os.chdir("c:\\users\\user\\desktop\\combine") for i in [ "개구리", "너구리", "다람쥐", "라마", "미어캣", "방울새", "사자", "얼룩말", "지렁이", "참새", "코끼리", "토끼", "펭귄", "호랑이", ]: hwp.SelectAll() hwp.Delete() hwp.set_font(Height=40) hwp.insert_text(i) hwp.save_as(f"{i}.hwp") # 끼워넣기 hwp.open(os.listdir()[0]) # "개구리.hwp" 열기 for i in os.listdir()[1:]: # 첫 번째(0) 파일은 제외하고 두 번째(1)파일부터 아래 들여쓰기한 코드 반복 hwp.MoveDocEnd() # 한/글의 문서 끝으로 이동해서 hwp.insert_file(i) # 문서끼워넣기(기본값은 섹션, 글자, 문단, 스타일 모두 유지) hwp.save_as("취합본.hwp") # 반복이 끝났으면 "취합본.hwp"로 다른이름으로저장 hwp.Quit() # 한/글 프로그램 종료 인터프리터 버전의 문제 및 pyhwpx 패키지 설치 등의 문제가 있었지만 그것들은 해결하였고, 코드가 동작하는데까지는 성공하였습니다. 일코님의 결과물과 제 결과물이 다릅니다. 일코님의 결과물은 아래 스크린샷과 같습니다. 반면에, 저의 "통합본.hwp"을 열어보면, 한 페이지마다 하나의 동물 이름이 입력되어 있는 것이 아니라 한 페이지 안에 모든 13개의 동물 이름이 아래 괄호 안과 같이 붙어 있는 형태입니다. (개구리너구리다람쥐라마미어캣방울새사자얼룩말지렁이참새코끼리토끼펭귄호랑이) 아래 스크린샷은 제 노트북 화면이니 함께 참고 부탁드립니다. 같은 코드인데 왜 결과가 다른지 혹시 이유를 문의드려도 될까요? 혹시 끼워넣기 할 때 새 페이지로 넘기기 한 후 끼워넣을 수 있는 코드가 있는지 아시는지요? 참고로, 제가 수동으로 빈문서를 열고, 끼워넣기(ctrl-o)를 통해 글자모양유지, 스타일유지, 문단모양유지, 쪽모양유지 체크한 상태에서 넣기 하면, 다음 페이지로 넘긴 상태에서 끼워넣기가 잘 됩니다. 반면에 제가 파이참에서 위 코드를 넣고 실행했을 때는 다음 페이지로 넘긴 상태에서 끼워넣기가 되는 것이 아니라 본래의 페이지의 맨 하단 커서 위치 뒤로 붙으므로 의도하는 결과가 아닙니다.
해결됨
세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
안녕하세요. 다보지는 않았지만, 열심히 수강하고 있습니다 : ) 다름아니라 강의보던중에 강사님 백준 등급이 어떻게 되시는지 호기심이 생겨 질문드립니다. 실례가 안된다면 알려주실 수 있나요?~ 세계 대회 진출자라고 하셔서 궁금하네요