묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결mongoDB 기초부터 실무까지(feat. Node.js)
delete 메소드가 많은 이유가 궁금합니다.
User.findOneAndDelete User.deleteOne User.findByIdAndDelete이렇게 많은 인터페이스를 제공해주는 이유가 있을까요?단순히 편의를 위한 것인지, 상황에 따라 골라쓰는게 성능적으로 좋은 것인지 궁금합니다.
-
미해결mongoDB 기초부터 실무까지(feat. Node.js)
unique validation 처리
unique 에서 중복이 발생하면 catch 에 잡히는데, 이 때 unique 에러 때문에 발생한 에러인지 어떻게 알고 케이스를 나눠서 클라이언트에게 전달 할 수 있을까요?
-
해결됨다양한 사례로 익히는 SQL 데이터 분석
ntile 정규분포에 관하여 ... 향후 일을 하게 될 시
강의를 듣는 도중, ntile()의 경우, 분포가 skew가 심하면(정규분포가 아니라면), 순위를 매길 때, 문제가 생김을 배울 수 있었습니다. Q1. 저는 왜곡이 되어있는 걸 보자마자, 차라리 판다스나 Spark SQL로 데이터를 정규화 한뒤에, 시각화를 하는게 더 빠르지 않을까? 하는 생각이 들었는데요, 기업에서 일을 하게 될 때, 어떤 경우에 SQL을 쓰는지가 궁금합니다.저는 강사님의 강의를 수강하며, python 데이터 분석 -> 머신러닝 -> 딥러닝 이후, 현재 SQL강의를 수강하고 있습니다. 희망직무는 데이터 사이언스트 및 데이터 엔지니어를 희망하는데, 항상 채용공고를 보면, python 능력도 중요하지만 고급 SQL 능력도 자격요건으로 되어 있는 경우가 많았습니다.Q2. 현업에서 데이터를 가공하거나 처리할 때, 오히려 프로그래밍언어보다는 SQL를 훨씬 많이 쓴다고 하는데, Q1처럼 때에 따라 유동적으로 쓰는 것인지, 아니면 앞으로 데이터 분석을 연습할 때도, (이를 테면, 캐글과 같은) 파이썬 보다는 SQL위주로 연습하는 것이 더 적합한 건지 여쭙고 싶습니다. Q3. 이건 머신러닝과 관련된 이야기지만, 이렇게까지 skew가 개선되지 않을 때는 어떻게 해야하나요?from sklearn.preprocessing import StandardScaler # OverSampling을 해도 Skew가 개선되지 않음 # UnderSampling을 하면 데이터가 줄어들기 때문에, 사용에 유의가 필요하나 skew가 # 너무 심하기 때문에 사용함. from imblearn.under_sampling import CondensedNearestNeighbour from scipy import stats import numpy as np def log_transform(column): return np.log1p(column) scaler = StandardScaler() df["freq"] = log_transform(df["freq"]) df["freq"] = scaler.fit_transform(df[["freq"]]) cnn = CondensedNearestNeighbour(sampling_strategy='majority', random_state=42) X_resampled, y_resampled = cnn.fit_resample(df[["freq"]], df["user_id"].values) resampled_df = pd.DataFrame(data=X_resampled, columns=["freq"]) print(resampled_df) ####### freq 0 -0.352373 1 -0.352373 2 -0.352373 3 -0.352373 4 2.495698 ... ... 2557 -0.352373 2558 3.642937 2559 -0.352373 2560 -0.352373 2561 -0.352373 [2562 rows x 1 columns] ######### resampled_df["freq"] = log_transform(resampled_df["freq"]) resampled_df["freq"].skew() ### 2.4721717038971214
-
해결됨비전공자의 전공자 따라잡기 - 데이터베이스,SQL
설정에서 AutoIncrement를 바꿔도 수정이 되지 않습니다.
Row를 지운 후 auto_increment를 설정에서 1로 변경하도록 시도했습니다.아래 사진처럼 적용 완료되었다는 말만 나오고 도로 카운트가 원상복귀 됩니다.
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
데이터 엔지니어 되고싶은데
백엔드 엔지니어가 먼저 되어야 할까요? 스프링을 배워야 할까요?데이터 엔지니어가 백엔드부터 배워야 하는 이유ㅣ4년차 현직자의 솔직한 조언 - YouTube개발자 진로는 농업 데이터 엔지니어가 되고싶습니다팜모닝 데이터 분석가 | 그린랩스 (greenlabs.co.kr)
-
해결됨비전공자의 전공자 따라잡기 - 데이터베이스,SQL
3정규화 퀴즈에 관해 질문 드립니다.
제 3정규화 문제 풀이에서 서비스를 기본 키로 사용해야 한다고 설명해 주셨는데이런 식으로 기본 키를 추가해서 사용해주는 건 안되는 걸까요?
-
미해결비전공자의 전공자 따라잡기 - 데이터베이스,SQL
중간 테이블 관련해서 질문드립니다
강의에서 보여주신 ERD에서는 중간 테이블들이fk만 가지고 pk는 없다고 나오는데원래 중간 테이블을 만들 때는 pk 없이 fk들만 사용하는 건가요?
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
jupiter노트북 말고 명령어 실행 할 수 있나요?
이걸 주피터 노트북에서 했던거처럼 python에서 실행하는건가요?
-
미해결데이터 분석 SQL Fundamentals
join 결과 테이블 집합 레벨
안녕하세요 [ Group by 실습 01 ] 강의를 듣다가 실습 문제에서 결과 값이 이해가 되지 않아 질문드립니다.-- 부서명 SALES와 RESEARCH 소속 직원별로 과거부터 현재까지 모든 급여를 취합한 평균 급여(with 절로 풀기)수업 듣기 전, 위의 문제에서 with 절 안의 테이블을 만들려고 아래와 같이 적었습니다. (같은 테이블 결과값이 나오는지 확인만 하려고 select 뒤에 구체적인 컬럼을 적지 않고 * 를 적었습니다.) [수업 전 작성 답안 & 결과 테이블]select *from hr.emp ajoin hr.dept b on a.deptno = b.deptnojoin hr.emp_salary_hist c on a.empno = c.empnowhere b.dname in('SAELS','RESEARCH');--> dname 에 research 만 나타납니다. [강의 예시 답안]select *from hr.dept ajoin hr.emp b on a.deptno = b.deptnojoin hr.emp_salary_hist c on b.empno = c.empnowhere a.dname in('SALES','RESEARCH');--> 나와야 하는 결과값 잘 나옴. 위의 제가 적은 답안에서 어떤점이 잘못 되었는지 도무지 보이지않아서 질문드립니다.join 만 적을시 inner join 이 적용되므로, 집합 레벨은 모든 테이블의 join 될 수 있는 모든 컬럼값 끼리 붙을 텐데, 그러면 어떤 테이블을 먼저 적던지 순서에 상관 없이 같은 결과 값이 나와야 하는 것 아닌가요?inner join 할 시에 염두해 두어야 하는 순서나 유의점이 있을까요? 답변 부탁드립니다. 감사합니다.
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
SAKILA 폴더에서 가져온 SCHEMA와 DATA가 정확히 뭘까요
SCHEMA는 관계 정보고 (DESC명령어로 보는)DATA는 관계에 들어가는 데이터(SELECT 명령어로 보는)인가요?DB정보를 넘길때는 보통 이 두개 파일을 넘기게 되나요?
-
해결됨mongoDB 기초부터 실무까지(feat. Node.js)
updateMany에서 user._id를 못찾는 상황
강좌대로 Blog.updateMany({ "user._id": userId }, { "user.name": name })로 하니 블로그 데이터 유저 정보가 변경이 계속 안되고 있습니다 ㅠㅠ 유저 데이터는 정상적으로 변경이 되었는데요 문제점을 모르겠습니다.해당 코드 깃허브 : https://github.com/alinfanclub/KimDevlogServer/blob/updateMany/src/routes/userRouter.js userRouter.put("/:userId", async (req, res) => { try { const { userId } = req.params; if (!mongoose.isValidObjectId(userId)) return res.status(400).send({ err: "invalid userId" }); const { age, name } = req.body; if (!age && !name) return res.status(400).send({ err: "age or name is required" }); if (age && typeof age !== "number") return res.status(400).send({ err: "age must be a number" }); if (name && typeof name.first !== "string" && typeof name.last !== "string") return res.status(400).send({ err: "first and last name are strings" }); // let updateBody = {}; // if(age) updateBody.age = age; // if(name) updateBody.name = name; // const user = await User.findByIdAndUpdate(userId, updateBody, { new: true }); let user = await User.findById(userId); if (age) user.age = age; if (name) { user.name = name; await Blog.updateMany({ "user._id": userId }, { "user.name": name }); } await user.save(); return res.send({ user }); } catch (err) { console.log(err); return res.status(500).send({ err: err.message }); } });
-
미해결데이터 분석 SQL Fundamentals
집계함수를 사용할 때 반드시 group by 와 함께 써야하나요?
안녕하세요 선생님 :)집계(Aggregate) Analytic SQL 실습 - 03 에서 Q: product_id 총 매출액을 구하고, 전체 매출 대비 개별 상품의 총 매출액 비율을 소수점2자리로 구한 뒤 매출액 비율 내림차순으로 정렬 문제를 풀던 과정 중에 제가 select *from (select order_id, line_prod_seq, product_id, amount, sum(amount) as product_total_sum, round(amount/ sum(amount), 2) as total_sum_amount_ratiofrom nw.order_items)aorder by total_sum_amnt_ratio;이렇게 일단 쿼리를 적어서 실행시켜보았는데요.오류가 발생했는데 그 내용이 "order_items.order_id" 는 반드시 GROUP BY 절내에 있어야 하던지 또는 집계 함수 내에서 사용되어져야 한다.라고 하는데 왜 group by를 사용해야하는지 잘 모르겠어서 여쭤봅니다. select sum(amount) as product_total_sumfrom nw.order_items;와 같이 간단한 일반적 집계는 group by 없이 가능한데제 쿼리는 왜 실행이 안되는 걸까요?
-
미해결데이터베이스 중급(Modeling)
PK에 임의의 식별자(정수형 시퀀스값)부여에 관한 질문드립니다.
영상 마지막에 나온것처럼 PK에 해당하는 칼럼의 값을 프로그래머를 위해 넘겨주어야 한다고 말씀하신거처럼.클라이언트 화면에서는 임의의 식별자 데이터는 렌더링하지는 않지만 사용자(클라이언트 프로그램)가 어떤 데이터를 요청할 때 클라이언트는 해당 데이터(레코드)에 해당하는 PK의 값을 서버에 전달. 과 같은 방식일까요? 질문이 조금 매끄럽지가 않은것같아 좀 더 말해보면에로들어 도서 관리 DB의 도서(Book)테이블에 PK가 도서 번호(1,2,3,4..)이며 나머지 속성은 책 이름, 출판사 등의 속성을 가지고 있고, 책 테이블의 도서 번호를 참조한 자식 관계를 가진 대여 기록 테이블이 있을 때 사용자가 'RDBMS Modeling 기초'라는 책의 대여기록을 보고싶어서 해당 책이름을 클릭하면 내부 코드에서는 클라이언트 코드에서는 해당 책의 PK인 책번호를 서버에게 전달 후 서버는 해당 책번호를 통해 대여기록 테이블과 JOIN하여 클라이언트에 응답. 과 같은 방식이 일반적인지 궁금합니다
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
pymysql import 시 찾을 수 없는 모듈이라 나옵니다
pip install 시 설치가 이미 되어있다고 나오는데 import 시에는 찾을 수 없다고 나옵니다...
-
미해결데이터 분석 SQL Fundamentals
postgres DB 를 다시 설치해야할 것 같은데, 어떻게 진행해야 할까요?
안녕하세요. 실습용 스키마 설치글에 댓글로 postgres DB 다시 설치해야 될 것 같다고 답글을 드렸는데, 못보시는 것 같아 새 글로 작성드립니다. postgres DB 를 다시 설치해야할 것 같습니다. 어떻게 진행해야 할까요?
-
미해결다양한 사례로 익히는 SQL 데이터 분석
사용자별 월별 세션 접속 횟수의 구간별 분포 집계 SQL - where절
선생님 안녕하세요?강의 잘 보고 있습니다.월 말일 기준으로 2일전에 생성한 user를 제외하고, session 수를 카운트 하기 위해서 where 절 안에 아래와 같이 수업시간에 말씀주셨었는데요. select a.user_id, date_trunc('month', visit_stime)::date as month, count(*) as monthly_user_cntfrom ga.ga_sess ajoin ga.ga_users b on a.user_id = b.user_idwhere b.create_time <= (date_trunc('month', b.create_time) +interval '1 month' - interval '1 day')::date -2group by a.user_id, date_trunc('month', visit_stime)::date 이 부분에 의하면, 말일 기준으로 2일 전부터 말일까지 create된 user의 경우, 모든 month에서 session 데이터가 필터링 되는데 의도하신 바가 맞으신지요? 어떤 user가 9월 29일에 create 하고, 9월 30일에 session 기록이 있으면, 이건 count되지 않고,10월 3일의 session 기록은 10월에 count하는 것이 의도하신 것이 아닌지요?그럴경우에는 아래와 같이 where 절을 수정해야 count가 될 것 같아요.where b.create_time <= (date_trunc('month', a.visit_stime)+interval '1 month' - interval '1 day')::date -2
-
미해결데이터 분석 SQL Fundamentals
제발 설치 좀 도와주세요...
이전에도 설치가 안되서 고생하다가 지인이 관리자 계정으로 접근해서 설치하는 방법을 알려주셔서 겨우 설치를 완료했었습니다.비전문가이다보니까 기초 강의만 듣고는 강의가 이해가 안되어서 추가로 다른 강의를 더 듣고 다시 강의를 들으러 왔는데, 오랜만에 접속하니 오류창이 뜨면서 안열려서 기존 설치 내역을 모두 지우고 재설치를 시도하고있습니다.그런데 자꾸 기존 데이터와 호환이 안된다는 식의 알림창이 뜨네요... 너무 듣고싶어요.... 제발 설치 좀 도와주세요 ㅠㅠ
-
미해결데이터 분석 SQL Fundamentals
실습용 스키마 다운로드 및 설치
안녕하세요.실습용 스키마 다운로드 및 설치를 하려고 하는데, 스키마가 설치가 되지 않아 문의드립니다.운영체제는 mac os 를 사용하고 있으며 기본 세팅이 원래 영어로 되어 있습니다. 이전에 이미 DBeaver 가 설치 되어 있는 상태 였고 , 이전에 SQL 를 공부하고 있던 터라 다른스키마 데이터가 다운로드 되어 있는 상태였습니다. 아래 이미지는 [ postgres2 ] 가 기존에 있었던 저장되어 있던 파일들에 대한 스크린 샷 입니다. 기존의 [ postgres2] 를 [ 복사 - 붙여넣기 ] 하여 새로운 [ postgres2 1 ] 를 만들었고, [ postgres2 1 ]영상을 따라서 dump_postgres_analytics_funda.backup 파일을 다운 받고 다시 restore 로 설치를 했는데, 여전히 기존에 있던 스키마(기존에 있던 테이블들)만 나타납니다. [ 실습용 스키마 설치 이슈 시 적용 하세요 ] 영상을 따라 git hub 에서 파일을 다운받고 create schema nw; 를 실행했는데 오류가 나타났습니다. 구글에 오류를 검색해보니 (*참고 URL: https://velog.io/@shj5508/PostgreSQL-%ED%85%8C%EC%9D%B4%EB%B8%94-%EA%B6%8C%ED%95%9C-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0)( GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO username; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO username;) 라는 글이 있어 실행해 보았습니다. 아래 스크린샷이 실행 결과 입니다.(제 user name 은 grace 입니다.)그리고 다시 create schema nw; 를 실행하니 아래의 스크린 샷과 같은 오류가 나타납니다. 다른 방식으로 실습용 스키마를 설치하거나 저장할 수 없을까요? 도와주세요 ㅜㅜ
-
미해결데이터 분석 SQL Fundamentals
순위 함수 cume_dist, percent_rank 질문
실습에서 상품 매출 순위 상위 10%의 상품 및 매출액 구할때cume_dist함수 대신 percent_rank 사용해도 되나요?둘이 비슷해서 정확히 어떤 상황에서 두 함수를 구분하여 사용해야하는 지 감이 안 오네요..ㅠㅠ
-
해결됨클론코딩에서 알려주지 않는 것들 (시스템 이론과 DB) 1편
Surrogate Key를 사용했을 때 빠르게 찾을 수 있는 이유 설명부탁드립니다.
알고리즘에 의해서 ID가 Integer일 때 주민번호나 CIA(?)와 같이 스트링보다 빠르게 찾을 수 있는 이유를 알고싶습니다.