inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

모델링 및 평가(분류) 질문! 왜 수치형 데이터만 활용하는가?

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

모델링 및 평가(분류) 강의에서 X_train 데이터의 15개의 칼럼 데이터 중 일부 수치 데이터만 활용하여 머신러닝에 사용하는데, 모든 데이터를 다 활용하지 않는 이유가 있을까요? 만약 모든 데이터를 다 활용한다면 roc_auc_score의 변화는 어떻게 되나요?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
오벽 댓글 2 좋아요 0 조회수 110

원핫인코딩 데이터 합치기

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

피처 엔지니어링 강의 중 분리한 데이터 다시 합침 부분에서 강의영상과 출력값이 달라서 질문드립니다. 강의화면에서는 107 컬럼, 103컬럼인데요, 같은 코드 결과인데 컬럼수가 15개로 나온이유가 궁금합니다.

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
reverq 댓글 2 좋아요 0 조회수 164

피처 엔지니어링 원핫인코딩 Train/Test 컬럼 불일치

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

범주형 변수에 get.dummies를 이용하여 원핫인코딩 하는 작업 중 질문이 있습니다. train 데이터셋과 test 데이터셋의 컬럼수가 99개와 95개로 다릅니다. (다른 이유는 train 데이터셋과 test 데이터셋의 컬럼 중에 관측치가 다른 항목이 있기 때문이라고 하셨는데요, 그런 이유라면 다른 것이 정상인가요?) 그런데 영상에서는 100개로 나옵니다,, 강의 100개 vs 99개 컬럼 갯수가 다른 이유는 무엇일까요? 아래는 코드와 출력값 첨부드립니다. # 원핫 인코딩 n_train, n_test, c_train, c_test = get_nc_data() # 데이터 새로 불러오기 c_train = pd.get_dummies(c_train[cols]) c_test = pd.get_dummies(c_test[cols]) display(c_train.head()) display(c_test.head()) print(c_train.shape) print(c_test.shape)

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
reverq 댓글 2 좋아요 0 조회수 151

train과 test의 카테고리가 동일하지않은경우에도 똑같이 통용되는 코드인가요?

미해결

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
이승호 댓글 5 좋아요 0 조회수 273

[인프런 빅쿼리 빠짝스터디 3주차] 리텐션 분석

미해결

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

✅ 연습문제 (1) weekly retention --1) weekly retention WITH base AS ( -- 날짜 데이터 전처리 -- DATE도 실제 날짜와 일치하지 않을 수 있으니, 다시 확인하기 -- DATETIME(TIMESTAMP_MICROS(timestamp데이터),'대륙/국가') 기억하고 사용하기 SELECT DATETIME(TIMESTAMP_MICROS(event_timestamp),'Asia/Seoul') AS event_datetime, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp),'Asia/Seoul')) AS event_date, event_name, user_pseudo_id FROM `bigquery-432401.avdanced.app_logs_temp` ) -- 일자 간 차이 구하기 , cal_week AS ( SELECT DISTINCT user_pseudo_id, -- 최초일(week 단위로) 구하기 DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week, -- 원본 날짜 데이터에서 주차 데이터로 구하기 DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week FROM base ), cal_diff AS ( -- 주차데이터간 차이 구하기 SELECT *, DATE_DIFF(event_week, first_week,WEEK) AS diff_week FROM cal_week ), user_count AS ( -- 주차별 user 수 구하기 SELECT diff_week, COUNT(distinct user_pseudo_id) as user_cnt FROM cal_diff GROUP BY diff_week ) -- 출력 SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_week_user_cnt),2) AS retention_rate FROM ( SELECT diff_week, user_cnt, FIRST_VALUE(user_cnt) OVER(ORDER BY diff_week) AS first_week_user_cnt FROM user_count ) 아직 익숙하지 않아서 중간중간 다시 코드 보고 작성했다. 점점 더 익숙해지길! (2) Retain User WITH base AS ( -- 날짜 데이터 전처리 -- DATE도 실제 날짜와 일치하지 않을 수 있으니, 다시 확인하기 -- DATETIME(TIMESTAMP_MICROS(timestamp데이터),'대륙/국가') 기억하고 사용하기 SELECT DATETIME(TIMESTAMP_MICROS(event_timestamp),'Asia/Seoul') AS event_datetime, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp),'Asia/Seoul')) AS event_date, event_name, user_pseudo_id FROM `bigquery-432401.avdanced.app_logs_temp` WHERE event_date BETWEEN "2022-08-01" AND "2022-11-03" ) , cal_diff AS ( -- 날짜데이터 간 차이 구하기 SELECT *, DATE_DIFF("2022-11-03", event_date,DAY) AS diff_date FROM base ), user_type AS ( -- user type 구하기 -- 0. 해당없음 -- 1. new : 첫번째 접속 --2. current : 최근 30일내에 접속 -- 3. resurrected : 30일 이상 활동이 없고, 최근 7일 이내 다시 접속한 사용자 -- 4. dormant : 최근 60일 간 접속기록 없음 SELECT *, CASE -- 첫 번째 접속 => 'new' WHEN diff_date = FIRST_VALUE(diff_date) OVER(PARTITION BY user_pseudo_id ORDER BY event_date) THEN 'new' -- 최근 30일 내에 접속한 사용자 => 'current' WHEN diff_date <= 30 THEN 'current' -- 30일 이상 활동이 없고, 최근 7일 이내 다시 접속한 사용자 => 'resurrected' WHEN diff_date > 30 AND diff_date <= 37 THEN 'resurrected' -- 60일 이상 접속하지 않은 사용자 => 'dormant' WHEN diff_date > 60 THEN 'dormant' ELSE 'none' END AS type FROM cal_diff GROUP BY all ORDER BY user_pseudo_id,diff_date ) SELECT * FROM user_type 나름 user를 나눈다고 나눴는데, 잘 못 나눠진 느낌이 든다! 현업에는 어떻게 나눌지 궁금하다 (3) 어떤 user가 많은가? WITH base AS ( -- 날짜 데이터 전처리 SELECT DATETIME(TIMESTAMP_MICROS(event_timestamp),'Asia/Seoul') AS event_datetime, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp),'Asia/Seoul')) AS event_date, event_name, user_pseudo_id FROM `bigquery-432401.avdanced.app_logs_temp` WHERE event_date BETWEEN "2022-08-01" AND "2022-11-03" ), cal_diff AS ( -- 날짜데이터 간 차이 구하기 SELECT *, DATE_DIFF("2022-11-03", event_date, DAY) AS diff_date FROM base ), user_type AS ( -- user type 구하기 SELECT distinct user_pseudo_id, CASE WHEN diff_date = FIRST_VALUE(diff_date) OVER(PARTITION BY user_pseudo_id ORDER BY event_date) THEN 'new' WHEN diff_date <= 30 THEN 'current' WHEN diff_date > 30 AND diff_date <= 37 THEN 'resurrected' WHEN diff_date > 60 THEN 'dormant' ELSE 'none' END AS type FROM cal_diff ), cal_cnt AS ( -- 각 type별 사용자 수 계산 SELECT type, COUNT(user_pseudo_id) AS user_cnt FROM user_type GROUP BY type ) SELECT type, user_cnt, ROUND(user_cnt * 100.0 / (SELECT COUNT(*) FROM user_type), 2) AS ratio FROM cal_cnt ORDER BY ratio DESC new인 사용자가 69.87 %로 전체의 대다수를 차지한다. 그다음이 최근에 7일 내에 접속한 유저가 21.83%, resurrected : 30일 이상 활동이 없고, 최근 7일 이내 다시 접속한 사용자가 2.59%, 최근 60일 간 접속기록 없는 사용자가 1.25%를 차지하였다. 2022-11-03일 기준 "2022-08-01" 에서 "2022-11-03" 기간 동안 서비스를 이용하는 대다수의 사람들은 신규 가입자들이 많다는 것을 알 수 있다. 또한, current User가 많은 것으로 보아, 최근 7일이내에 서비스를 사용한 사람들의 비율이 두번째로 높다. 현재 신규이용자의 수가 대다수를 차지함으로 이 신규 사용자를 current user로 전환하기 위한 전략을 고안해야 할 것으로 보인다. none이 resurrected, dormant보다 많은데, type을 나누는 기준을 수정하면 더 효율적이게 나눌 수 있지 않을까 생각된다. (4) core event를 click_payment로 놓았을 때 Weekly retention WITH base AS ( SELECT event_name, user_pseudo_id, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_time FROM `bigquery-432401.avdanced.app_logs_temp` WHERE event_name = "click_payment" ), week_diff AS ( SELECT *, DATE_DIFF(event_week, first_week, WEEK) AS diff FROM ( SELECT DISTINCT user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week, DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week FROM base ) ), user_counts AS ( SELECT diff, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM week_diff GROUP BY diff ) SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_week_user_cnt), 2) AS retention_rate FROM ( SELECT diff, user_cnt, FIRST_VALUE(user_cnt) OVER(ORDER BY diff ASC) AS first_week_user_cnt FROM user_counts ) 1주차 이후로 사용자의 수가 급감. 2주차 부터는 계속 0.01을 유지. 15주차부터 24주차까지는 0 retention rate를 유지. 사용자가 1주차 이후로 대거 이탈함을 볼 수 있음. 15주차부터 0.01에서 0.0으로 감소. 1주차에 이벤트 혹은 서비스 런칭으로 사용자수가 급격히 증가하였으나, 서비스 경험이 사용자에게 매력적으로 다가오지 못하여 바로 그 다음주부터 급격하게 감소하는 것을 볼 수 있음. 따라서, core_event에 대한 근본적인 개선이 필요할 것으로 보임. ✅ 배운점 및 느낀점 리텐션 분석에 대한 전반적인 지식을 얻을 수 있었다. 아직, 데이터에서 리텐션 분석을 하는 것이 익숙치 않아 학습을 더 해야 할 것 같다. user type을 나누는 부분에서 더 짜임새 있는? 기준이 뭔지, 현업에서는 어떤 기준으로 사용자를 나누는지 궁금하다! 고객을 분석하기 위해서는 어떤 부분을 더 봐야하는 지 아직 크게 감이 없는데, 다른 레퍼런스를 보는 것이 필요할 것 같다는 생각이 들었다

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
망고맛있어 댓글 1 좋아요 0 조회수 152

엑셀의 2행에서 7행의 데이터를 다루는데 for row in range(2, 8): 으로 해야하는 이유는?

해결됨

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

2-4. [응용] 엑셀문서 값을 필드에 입력하기 관련입니다. 강의 내용 중 for문 안에 ws.Range를 넣어, 엑셀문서의 모든 행을 출력해보는 내용이 있습니다. 여기서 다루는 엑셀의 데이터는 아래와 같습니다. 여기서 다루는 범위는 2행(마크, 남 ...)부터 7행(슬아, 여, ...)이므로, for row in range(2,7): 이라고 해야 맞는 게 아닌가 싶은데, for row in range(2,7): 로 해보면 아래와 같이 원하는 결과가 아닙니다. 실제 7행인 ['리사', '여', '1969년 11월 7일', '게임'] 가 빠진 결과가 나옵니다. for row in range(2,7): data = list( ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0] ) data[2] = data[2].strftime("%Y년 %#m월 %#d일") print(data) ['마크', '남', '1984년 5월 14일', 'VR'] ['빌', '남', '1955년 10월 28일', '기부'] ['일론', '남', '1971년 6월 28일', '트위터'] ['제프', '남', '1964년 1월 12일', '독서'] ['리사', '여', '1969년 11월 7일', '게임'] 반면에, for row in range(2,8): 이라고 해야만 아래와 같이 엑셀의 2행부터 7행의 데이터가 원하는대로 출력이 됩니다. for row in range(2,8): data = list( ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0] ) data[2] = data[2].strftime("%Y년 %#m월 %#d일") print(data) ['마크', '남', '1984년 5월 14일', 'VR'] ['빌', '남', '1955년 10월 28일', '기부'] ['일론', '남', '1971년 6월 28일', '트위터'] ['제프', '남', '1964년 1월 12일', '독서'] ['리사', '여', '1969년 11월 7일', '게임'] ['슬아', '여', '1983년 6월 16일', '쇼핑'] 2행부터 7행의 데이터를 출력하는데 왜 for row in range(2,8): 로 하는 것이 맞는 것인지 궁금합니다.

  • python
  • 한컴오피스
  • 레벨업
learner 댓글 1 좋아요 1 조회수 97

한글 표의 필드명 표시방법이 있을까요?

해결됨

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

한글문서 표 안에 셀 별로 필드명을 지정했습니다. 일반 문서의 필드명은 누름틀 이름이 나오는데 셀의 필드명은 표시가 되지 않더라구요.. 셀의 필드명 확인하기가 번거로운데 혹시 방법이나 팁이 있나 싶어 여쭤봅니다

  • python
  • 한컴오피스
김성락 댓글 2 좋아요 1 조회수 1598

data = list( ~~~ .Value) 일 경우 오류 발생 이유?

해결됨

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

2-4. [응용] 엑셀문서 값을 필드에 입력하기 관련입니다. ※ 원 질문글 올린 이후, 공부해서 이 글에 자문자답하였습니다. 검토 부탁드립니다. 감사합니다. 질문을 드리기 위하여 파이썬 콘솔(IPython 적용)에서 진행한 코드를 아래에 먼저 제시 후 말씀드리겠습니다. excel = win32.gencache.EnsureDispatch("Excel.Application") excel.Visible = True wb = excel.Workbooks.Open(r"c:\Users\user\desktop\취미.xlsx") ws = wb.Worksheets(1) row = 2 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0]) print(data[2]) 1984-05-14 00:00:00+00:00 row = 2 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value) print(data[2]) Traceback (most recent call last): File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\IPython\core\interactiveshell.py", line 3577, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-9-a5cbf3d139c3>", line 1, in <module> print(data[2]) IndexError: list index out of range # 아래는, data = ~~~.value[0] 일 경우의 데이터 형태를 출력해 보기 위함. data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0]) print(data) ['마크', '남', pywintypes.datetime(1984, 5, 14, 0, 0, tzinfo=TimeZoneInfo('GMT Standard Time', True)), 'VR'] # 아래는, data = ~~~.value 일 경우의 데이터 형태를 출력해 보기 위함. data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value) print(data) [('마크', '남', pywintypes.datetime(1984, 5, 14, 0, 0, tzinfo=TimeZoneInfo('GMT Standard Time', True)), 'VR')] # 위에서 확인 결과, data = ~~~.value[0] 일 경우와 data = ~~~.value 일 경우에, # print로 데이터 출력한 결과는 거의 비슷하나, # data = ~~~.value 일 경우에는 대괄호 안에 괄호가 하나 더 있음. 위의 과정에서 아래와 같이 진행하면 물론 정상적으로 출력됩니다. row = 2 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0]) print(data[2]) 1984-05-14 00:00:00+00:00 하지만 아래와 같이 진행하면 오류가 납니다. 원 코드에서 ~~~.Value 뒤에 [0] 만 빼 본 것입니다. row = 2 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value) print(data[2]) Traceback (most recent call last): File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\IPython\core\interactiveshell.py", line 3577, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-9-a5cbf3d139c3>", line 1, in <module> print(data[2]) IndexError: list index out of range row = 2 로 지정했으므로, data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value) 은 엑셀의 (2,1)부터 (2,4)의 값을 리스트로 가져오는 것일테고, 원 코드인 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0]) 도 역시, 지정한 범위의 값들 중 첫번째 행의 값만 가져오므로, 엑셀의 (2,1)부터 (2,4)의 값을 리스트로 가져오는 것은 두 경우에 같아 보이는데, [질문 1] 왜 원 코드에서는 print(data[2]) 입력했을 때 정상적으로 출력이 되고, 원 코드에서 [0] 만 뺀 경우에는 print(data[2]) 입력했을 때 오류가 나는 것이지요? __________________________________________________________________________________ P.S. _1 --- 이 질문글 올리고 천천히 강의내용을 다시 읽어 보니, 위 코드의 두 번째 라인을 보면, 리턴되는 값을 리스트로 변환하는 코드가 들어 있습니다. 기본적으로 ws.Cells나 ws.Range가 리턴하는 값은 튜플인데, 이 중 특정 값을 수정하기 위해 튜플을 수정 가능한 리스트 자료형으로 변환을 해 주었습니다. 라는 글이 눈에 들어오네요. (※ 처음 읽었을 때는 무슨 말인지 잘 몰랐는데, 강의 내용에 다 써 있는데 제가 이해를 못했던 부분이 많네요.) [('마크', '남', pywintypes.datetime(1984, 5, 14, 0, 0, tzinfo=TimeZoneInfo('GMT Standard Time', True)), 'VR')] 요러한 형태가 말씀하신 튜플이라는 것이죠? 이런 형태의 data는 값을 수정할 수 없다는 말씀이죠? 반면에, ['마크', '남', pywintypes.datetime(1984, 5, 14, 0, 0, tzinfo=TimeZoneInfo('GMT Standard Time', True)), 'VR'] 요러한 형태는 튜플이 아닌 리스트 자료형이라는 것이죠? 이런 형태만이 data 값을 수정할 수 있다는 말씀이죠? [질문 2] 튜플 형태의 데이터에 대하서는 data 값을 수정할 수 없는 것 뿐만 아니라 0, 1, 2번째의 데이터를 선택하는 data[0] data[1] data[2] 이러한 형태의 명령어조차도 쓸 수 없는 것이죠? 제가 쓴 이 내용들이 맞는지만 확인 부탁드립니다. __________________________________________________________________________________ P.S. _2 --- 왕초보들이 더 쉽게 이해할 수 있게 개선의견을 말씀드리면, 아래와 같은 간단한 언급을 추가해주시면 더 좋지 않을까 합니다. (아래 쓴 내용이 맞다면요.) 튜플 형태의 data는 값을 수정할 수 없는데, 튜플 형태의 data를 print(data) 했을 때는 [( ~~~~ )] 형태로 확인되고, 리스트 형태의 data는 값을 수정할 수 있는데, 리스트 형태의 data를 print(data) 했을 때는, 괄호 ( ) 가 없이 [ ~~~ ] 형태로 확인되니 참고하세요. 참고로 튜플 형태의 data에 대해서는 data[2] 와 같은 형태로 데이터를 선택하는 명령어도 사용 불가능합니다. 튜플 형태의 data를 리스트 형태의 데이터로 바꿔야만 data[0] 와 같이 데이터를 선택하는 명령어를 사용 가능합니다. 확인 부탁드립니다. 감사합니다. __________________________________________________________________________________ __________________________________________________________________________________ 위 질문 글을 쓴 이후에 더 공부해 보고 아래와 같이 원인을 추정했습니다. 아래 내용이 위 [질문 1] 과 [질문 2]에 대한 답이 맞나요? 일코님이 바쁘실텐데 낮은 수준의 질문에 답변하느라 애쓰실 것에 죄송하여 그 사이에 자문자답(?)을 해보았습니다. [질문 1] Value[0]을 사용한 경우에는 정상적으로 출력되고, Value만 사용한 경우에는 오류가 발생하나요? [원인 분석] 엑셀에서 win32com을 사용하여 특정 셀 범위의 값을 가져올 때, Range.Value는 튜플 형태로 반환됩니다. 이때 반환된 값은 2차원 배열처럼 행(row) 단위로 묶여있습니다. ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value는 튜플 안의 튜플 형태로 데이터를 반환합니다. 예를 들어, (2,1)부터 (2,4)까지의 값을 가져오면 결과는 다음과 같습니다: (('마크', '남', datetime 객체, 'VR'),) 반면에 ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0]은 첫 번째 행의 값을 선택하는 것이므로, 단일 튜플이 됩니다: ('마크', '남', datetime 객체, 'VR') 따라서 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value)의 경우 data는 튜플 안에 또 다른 튜플이 있는 상태입니다. 이때 data[2]를 호출하면 "IndexError"가 발생하는 이유는 data가 한 개의 튜플을 포함하고 있기 때문입니다. 즉, data 안에는 튜플이 있고, 실제 데이터는 그 튜플 안에 들어 있기 때문입니다. 반면에 data = list(ws.Range(ws.Cells(row,1), ws.Cells(row,4)).Value[0])을 사용하면 튜플 중 첫 번째 행의 데이터를 직접 리스트로 변환하므로 data[2]를 정상적으로 호출할 수 있습니다. [위 내용 요약] Value[0] 사용하면 첫 번째 행의 데이터를 직접 가져오기 때문에 인덱싱이 가능하지만, Value만 사용하면 전체 범위가 튜플로 감싸져 있어 인덱싱 시 오류가 발생합니다. [질문 2] 튜플 형태의 데이터에서 값을 수정하거나 인덱싱할 수 있나요? [내용 추정] 튜플은 불변(immutable) 자료형이기 때문에 한 번 생성된 후에는 그 값을 수정할 수 없습니다. 하지만 튜플 내의 요소들을 조회하는 것은 가능합니다. 즉, 수정 불가: 튜플 내의 데이터를 변경하거나 삭제할 수 없습니다. mytuple = (1, 2, 3) mytuple[0] = 100 # TypeError 발생 조회 가능: 튜플 내 특정 인덱스의 데이터를 조회하는 것은 가능합니다. mytuple = (1, 2, 3) print(mytuple[0]) # 출력: 1 따라서 질문에서 언급한 것처럼 튜플 형태의 데이터에서는 값을 수정할 수 없지만, 인덱싱을 통해 특정 요소에 접근하는 것은 가능합니다. 즉: data[0] # 가능 data[1] # 가능 data[2] # 가능 따라서 인덱스 접근은 가능하지만 수정은 불가능합니다. 다만, 주의할 점은 위에서 data[0] # 가능 이라고 하였지만, 이것은 data가 튜플일 경우입니다. data가 튜플 내에 튜플인 경우, 즉 이중 튜플인 경우에는, data[0] # IndexError 발생 [위 내용 요약] 튜플은 불변 자료형으로 값을 수정할 수 없지만, 인덱스를 통해 요소를 조회하는 것은 가능합니다. 다만, 이중 튜플인 경우 인덱스를 통해 요소를 조회 시도 시 IndexError가 발생합니다.

  • python
  • 한컴오피스
  • 레벨업
learner 댓글 1 좋아요 1 조회수 256

여러 태그 제어하는 방법 강의 질문입니다

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

여러 태그 제어하는 방법 강의 질문입니다 해당 강의에서 알려주신대로 gmarket 에서 작업하면 봇으로 인식해서 진행이 안 됩니다. 사람인지 확인하는 절차가 나오는데 이 부분에서 더 이상 진행되지 않습니다. 강의를 위해서 만드신 사이트 말고 실제 gmarket 같은 곳에서 할 수 있는 방법을 알려주세요

  • python
  • 웹-크롤링
박종성 댓글 1 좋아요 0 조회수 100

무한 스크롤 처리하기 강의에서 실행이 안 됩니다.

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

안녕하세요 무한 스크롤 처리하기 강의에서 실행이 안 됩니다. 06:45 부분입니다. 이 code 수정한 영상 다시 올리셔야 할 것 같습니다. 바쁘셔서 강의 영상 다시 촬영하시기 힘드시면 소스 수정해야 한다고 자막으로라도 올려주세요 처음 수강하는 사람 입장에서 시간 낭비가 심합니다. 부탁합니다. last_height = driver.execute_script('return document.body.scrollHeight') while True: driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') time.sleep(1) new_height = driver.execute_script('return document.body.scrollHeight') if new_height == last_height: break last_height = new_height 강의에서 알려주신 대로 실행하면 한 번에 맨 마지막까지 scroll 됩니다. 강의에서 보여주시는 대로 되지 않습니다. 어떻게 해야 하는지 자세하게 알려주세요

  • python
  • 웹-크롤링
박종성 댓글 2 좋아요 0 조회수 128

작업형1 모의문제 3-9번

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 9번문제에서 시험때 제출할때 print(df.sort_values('subscribed').index[0]) 만 쓰면 될까요? 아니면 월별 데이터 갯수인 print(df)까지 해야하나요

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
란따 댓글 2 좋아요 0 조회수 91

AppBar 적용안됨

미해결

처음하는 플러터(Flutter) 기초부터 실전까지 [풀스택 Part4] (쉽고 견고하게 단계별로 다양한 프로젝트까지)

섹션 6 AppBar, Stack, Align 위젯 강의에서 동일 코드로 작성해도 AppBar 결과가 다르게 나옵니다. stless 입력 시 자동으로 작성되는 코드도 강의 내용과 다릅니다. 검색 해 봤는데 프로그램이 업데이트된 것 같기도 합니다.. 업데이트 된 부분은 강의 내용도 업데이트 해 주시면 좋을 것 같습니다. 결과물이 달라서 혼란스럽습니다. 도와주세요 !

  • flutter
  • firebase
  • dart
  • frontend
  • firestore
HYO JIN Kim 댓글 1 좋아요 0 조회수 158

작업형 1 모의 문제 1번 70% 데이터 추출 관련

미해결

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요! '앞에서부터 70% 데이터 중 views 컬럼의 3사분위 수에서 1사분위 수를 뺀 값을 구하시오' 이 부분에서 .loc을 사용했을 때와 그냥 슬라이싱을 했을 때의 행 개수 차이가 나서요.. 왜 이렇게 차이가 나는지 궁금해서 문의 남깁니다! 좋은 강의 준비해주셔서 고맙습니다 : )

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
Leena K 댓글 2 좋아요 0 조회수 127

맥OS 고급 입력 컨트롤

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

안녕하세요! 27강 고급 입력 컨트롤 내용에 관하여 질문 드리고자 합니다. from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys # 크롬 드라이버 생성 driver = webdriver.Chrome() # 페이지 이동 driver.get("https://www.naver.com") # 태그 찾기 search = driver.find_element(By.CSS_SELECTOR, "#query") # 문자 입력 search.send_keys('스타트코딩') #순차적 키 입력 search.send_keys(Keys.COMMAND, 'a') MAC OS에서 위와 같은 형태의 코드(전체선택 코드)가 작동하지 않아서, 아래의 코드를 사용하였습니다. from selenium.webdriver.common.action_chains import ActionChains actions = ActionChains(driver) actions.key_down(Keys.COMMAND).send_keys('a').key_up(Keys.COMMAND).perform() 다만, ActionChains 모듈을 사용하였을 때에도, command+a(전체선택), command+c(복사) 까지는 정상적으로 작동했는데, command+v(붙여넣기)의 경우에만 작동하지 않습니다. 혹시 이에 대한 해결 방법이 있을까요?

  • python
  • 웹-크롤링
daina 댓글 1 좋아요 0 조회수 105

[인프런 빅쿼리 빠짝스터디 3주차] 리텐션 연습문제

미해결

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

1번 과제 #weekly retention WITH base AS( SELECT DISTINCT user_id, event_name, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_date, user_pseudo_id FROM advanced.app_logs WHERE event_date BETWEEN '2022-08-01' AND '2022-11-03' ) , dates AS( SELECT DISTINCT user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER (PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week, DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week FROM base ) , first_week_and_diff AS ( SELECT *, DATE_DIFF(event_week, first_week, week) AS diff_of_week FROM dates ) , user_counts AS ( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY diff_of_week ORDER BY diff_of_week ) , first_week_user_count AS ( SELECT diff_of_week, user_cnt, FIRST_VALUE(user_cnt) OVER(ORDER BY diff_of_week) AS first_week_user_cnt FROM user_counts WHERE diff_of_week = 0 ) SELECT *, SAFE_DIVIDE(user_cnt, first_week_user_cnt) AS retain_rate FROM first_week_user_count 2번 과제 New+Current+Resurrected+Dormant User로 나누기 일단 1주일만에 리텐션이 6.8%대이니까, 신규유저의 기준을 7일로 두겠습니다. 리텐션이 반으로 떨어지는 3% 미만이 8주부터, 1% 미만이 12주부터여서 임의로 구간을 세팅하겠습니다. 이에 따라 미접속 8주차부터는 휴면 유저로 보겠습니다. 따라서 8주 뒤 다시 들어온 유저는 복귀 유저로 보겠습니다. # 신규 유저, 기존 유저, 이탈 유저, 복귀 유저로 나눈 쿼리 # 첫 event 후 7일 안 지난 유저 # event 후 7일 지났고, 마지막 접속으로부터 8주가 안 지난 유저 # event 후 7일이 지났고, 마지막 접속으로부터 8주가 지난 유저 # 첫 event 후 7일이 지났고, 마지막 접속으로부터 8주가 지났다가, 다시 event가 발생한 유저 WITH base AS( SELECT DISTINCT user_id, event_name, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_date, user_pseudo_id FROM advanced.app_logs WHERE event_date BETWEEN '2022-08-01' AND '2023-08-31' ) , dates AS ( SELECT MIN(event_date) AS first_date, MAX(event_date) AS last_date FROM base GROUP BY user_pseudo_id ) SELECT event_date, COUNT(DISTINCT CASE WHEN DATE_DIFF(event_date, first_date, DAY) < 8 THEN user_pseudo_id ELSE NULL END) AS new_user, COUNT(DISTINCT CASE WHEN DATE_DIFF(event_date, first_date, DAY) >= 8 AND DATE_DIFF(event_date, last_date, DAY) < 56 THEN user_pseudo_id ELSE NULL END) AS current_user, COUNT(DISTINCT CASE WHEN DATE_DIFF(event_date, first_date, DAY) >= 8 AND DATE_DIFF(event_date, last_date, DAY) >= 56 THEN user_pseudo_id ELSE NULL END) AS resurrected_user, COUNT(DISTINCT CASE WHEN DATE_DIFF(event_date, first_date, DAY) >= 8 END) AS dormant_user FROM dates GROUP BY event_date 2번 과제는 이렇게까진 짜보았으나 실패했습니다.. 짜보다보니 last_date가 절대로 event_date보다 +가 나올 수가 없더군요... 그래서 그냥 일반 날짜 컬럼을 붙일 수 있나...? 어떻게 해야하지? 하고 이미 짜둔 쿼리에 매몰돼서 구하질 못했네요 ㅎㅎ 혹시 이렇게 짜는 방향에 대해서 조언해주실 점이 있으시면 부탁드리겠습니다.. 3번 과제 아래와 같이 퍼널 나눴다. 획득 screen_view, click_login 활성화 click_banner, click_food_category, click_restaurant, click_food, view_recommend_extra_food, click_recommend_extra_food click_recommend_food, click_restaurant_nearby click_search, request_search 수익화 관련 click_cart click_payment 하지만 각 행동한 유저의 수를 구해보니 아래와 같았다. recommend 관련 행동을 한 유저가 오히려 더 적었다. 그래서 각 이벤트별로 유저 수를 구해보았고 #event가 click_cart일 때 weekly retention WITH base AS( SELECT DISTINCT user_id, event_name, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_date, user_pseudo_id FROM advanced.app_logs WHERE event_date BETWEEN '2022-08-01' AND '2023-08-31' AND user_pseudo_id IN (SELECT user_pseudo_id FROM advanced.app_logs WHERE event_name = 'click_cart') ) , dates AS( SELECT DISTINCT user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER (PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week, DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week FROM base ) , first_week_and_diff AS ( SELECT *, DATE_DIFF(event_week, first_week, week) AS diff_of_week FROM dates ) , user_counts AS ( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY diff_of_week ORDER BY diff_of_week ) , first_week_user_count AS ( SELECT diff_of_week, user_cnt, FIRST_VALUE(user_cnt) OVER(ORDER BY diff_of_week) AS first_week_user_cnt FROM user_counts ) SELECT *, SAFE_DIVIDE(user_cnt, first_week_user_cnt) AS retain_rate FROM first_week_user_count 4번 과제처럼 core event를 각각 설정해보았다. 4번 과제의 결과인 click_payment 했던 유저의 리텐션이 역시 제일 좋았었다. 반면 cart를 클릭한 유저의 리텐션은 비교적 조오금 낮았고 반대로 click_search, click_recommend_food, click_restaurant_nearby를 한 유저의 리텐션이 구매자 리텐션과 유사했다. 그래서 기본 행동들에서, 고객이 더 관심 기울여하는 행동인 검색, 추천 서비스 클릭하기 등의 행동을 유도하면 어떨까.. 싶었다! 사실 10% 이상으로 다 비슷하긴 하지만 약간의 차이라도 보이는 것들을 좀 추려보았다. 4번 과제 # click_payment event를 경험한 유저들의 weekly retention WITH base AS( SELECT DISTINCT user_id, event_name, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_date, user_pseudo_id FROM advanced.app_logs WHERE event_date BETWEEN '2022-08-01' AND '2023-08-31' AND user_pseudo_id IN (SELECT user_pseudo_id FROM advanced.app_logs WHERE event_name = 'click_payment') ) , dates AS( SELECT DISTINCT user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER (PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week, DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week FROM base ) , first_week_and_diff AS ( SELECT *, DATE_DIFF(event_week, first_week, week) AS diff_of_week FROM dates ) , user_counts AS ( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY diff_of_week ORDER BY diff_of_week ) , first_week_user_count AS ( SELECT diff_of_week, user_cnt, FIRST_VALUE(user_cnt) OVER(ORDER BY diff_of_week) AS first_week_user_cnt FROM user_counts ) SELECT *, SAFE_DIVIDE(user_cnt, first_week_user_cnt) AS retain_rate FROM first_week_user_count

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
Min Choi 댓글 1 좋아요 0 조회수 129

검정 방법의 조건??

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

어쩔때 적합도 검정을 해야하는지 어쩔때 독립성 검정을 해야하는지 헷갈리네요 ㅠ 혹시 구분하는 방법이 있을까요?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
김치현 댓글 2 좋아요 0 조회수 150

[인프런 빅쿼리 빠짝스터디 3주차] 리텐션 연습문제

미해결

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

1)WeeklyRetention을구하는쿼리를바닥부터스스로작성해보세요 WITH event_log_base AS ( SELECT DISTINCT DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATE_TRUNC(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), WEEK(MONDAY)) AS event_week, DATE_TRUNC(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), MONTH) AS event_month, user_id, user_pseudo_id, event_name, platform, event_params FROM advanced.app_logs ), user_first_visit AS ( SELECT user_pseudo_id, MIN(event_week) OVER (PARTITION BY user_pseudo_id) AS first_visit_week, event_week FROM event_log_base ), weekly_retention_base AS ( SELECT first_visit_week, DATE_DIFF(event_week, first_visit_week, WEEK) AS week_diff, COUNT(DISTINCT user_pseudo_id) AS active_users FROM user_first_visit GROUP BY first_visit_week, week_diff ) SELECT first_visit_week, week_diff, active_users, SAFE_DIVIDE(active_users, FIRST_VALUE(active_users) OVER (PARTITION BY first_visit_week ORDER BY week_diff ASC)) AS retention_rate FROM weekly_retention_base ORDER BY first_visit_week, week_diff; 2)RetainUser를New+Current+Resurrected+DormantUser로나누는쿼리를 작성해보세요. 신규 사용자: 첫 방문 후 30일 이내에 활동한 사용자. 첫 방문 날짜와 마지막 방문 날짜 간의 차이가 30일 이하일 경우 현재 사용자: 첫 방문 후 30일이 지난 사용자 중, 최근 30일 이내에 접속한 사용자. 첫 방문과 마지막 방문 간 차이가 30일을 넘고, 가장 최근 활동으로부터 30일 이내에 접속한 경우 휴면 사용자: 마지막 방문 이후 30일 이상 비활동 상태에 있는 사용자. 마지막 방문이 가장 최근 이벤트로부터 30일 이상 경과한 경우 복귀 사용자: 30일 이상 비활동 상태였다가 다시 활동을 시작한 사용자. 이전 방문 이후 30일 동안 비활동이 이어지다 다시 방문한 경우 WITH event_data AS ( SELECT DISTINCT DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, user_pseudo_id FROM advanced.app_logs ), -- 사용자별 첫 방문 및 마지막 방문 날짜 계산 user_first_last_visit AS ( SELECT user_pseudo_id, MIN(event_date) AS first_visit_date, MAX(event_date) AS last_visit_date FROM event_data GROUP BY user_pseudo_id ), -- 전체 이벤트 데이터에서 가장 최근의 이벤트 날짜를 계산 latest_event_date AS ( SELECT MAX(event_date) AS current_date FROM event_data ), -- 사용자의 이벤트 로그를 통해 비활동 기간을 기록하여 휴면 여부 판단 user_activity AS ( SELECT user_pseudo_id, event_date, LEAD(event_date) OVER (PARTITION BY user_pseudo_id ORDER BY event_date) AS next_event_date, CASE WHEN DATE_DIFF(LEAD(event_date) OVER (PARTITION BY user_pseudo_id ORDER BY event_date), event_date, DAY) > 30 THEN 1 ELSE 0 END AS dormant_history FROM event_data ), -- 사용자 유형 분류: 신규, 현재, 휴면, 복귀 사용자 user_category AS ( SELECT u.user_pseudo_id, u.first_visit_date, u.last_visit_date, led.current_date, MAX(ua.dormant_history) AS dormant_history, CASE WHEN DATE_DIFF(led.current_date, u.last_visit_date, DAY) > 30 THEN 'inactive_user' WHEN DATE_DIFF(u.last_visit_date, u.first_visit_date, DAY) <= 30 THEN 'first_month_user' WHEN MAX(ua.dormant_history) = 1 THEN 'returning_user' ELSE 'active_user' END AS user_type FROM user_first_last_visit AS u CROSS JOIN latest_event_date AS led LEFT JOIN user_activity AS ua ON u.user_pseudo_id = ua.user_pseudo_id GROUP BY u.user_pseudo_id, u.first_visit_date, u.last_visit_date, led.current_date ), -- 사용자 유형별 첫 방문 주차와 현재 주차 간 차이 계산 user_weekly_retention AS ( SELECT uc.user_type, ed.user_pseudo_id, ed.event_date, DATE_DIFF(DATE_TRUNC(ed.event_date, WEEK(MONDAY)), DATE_TRUNC(uc.first_visit_date, WEEK(MONDAY)), WEEK) AS week_difference FROM event_data AS ed JOIN user_category AS uc ON ed.user_pseudo_id = uc.user_pseudo_id ), -- 사용자 유형과 주차별 활성 사용자 수 집계 user_count_by_type_and_week AS ( SELECT user_type, week_difference, COUNT(DISTINCT user_pseudo_id) AS user_count FROM user_weekly_retention GROUP BY user_type, week_difference ), -- 유지율 계산을 위한 초기 사용자 수와 현재 주차별 유지율 계산 retention_calculation AS ( SELECT user_type, week_difference, user_count, FIRST_VALUE(user_count) OVER (PARTITION BY user_type ORDER BY week_difference) AS initial_user_count FROM user_count_by_type_and_week ) SELECT user_type, week_difference, ROUND(SAFE_DIVIDE(user_count, initial_user_count), 2) AS retention_rate FROM retention_calculation ORDER BY user_type, week_difference; 3)주어진데이터에서어떤사람들이리텐션이그나마높을까요?찾아보세요 2번을 참고해서 고객을 4개의 타입으로 분류하였을 때 first_month_user: 첫 주 이후 리텐션이 높지만 이후 감소하는 모습을 보인다. active_user: first_month_user와 비슷하게 첫 주 이후 빠르게 감소한다. returning_user: 2주부터 0.08로 떨어지지만 이후 완만하게 리텐션이 감소한다. 오랜기간 10주차 이후에도 일부 사용자가 유지되고 있는 모습을 보인다. inactive_user: 리텐션이 다른 유저에 비해 높다고는 할 수 없지만 20주차까지 꾸준하게 소수의사용자가 유지되고 있는 모습을 보인다. --> 따라서 returning_use이 가장 완만하게 리텐션이 감소, 가장 오랫동안 리텐션이 지속했기때문에 가장 높은 리텐션을 유지했다고 판단하였습니다. 4)CoreEvent를“click_payment”라고설정하고WeeklyRetention을구해주세요 WITH event_data AS ( SELECT DISTINCT user_pseudo_id, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATE_TRUNC(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), WEEK(MONDAY)) AS event_week, event_name FROM advanced.app_logs WHERE event_name = 'click_payment' -- Core event 필터링 ), -- 사용자별 첫 방문 주차와 현재 이벤트 주차 간의 차이 계산 user_first_week_data AS ( SELECT user_pseudo_id, MIN(event_week) OVER (PARTITION BY user_pseudo_id) AS first_visit_week, event_week AS current_week, DATE_DIFF(event_week, MIN(event_week) OVER (PARTITION BY user_pseudo_id), WEEK) AS week_difference FROM event_data ), -- 주차별 사용자 수 집계 user_count_by_week AS ( SELECT first_visit_week, week_difference, COUNT(DISTINCT user_pseudo_id) AS user_count FROM user_first_week_data GROUP BY first_visit_week, week_difference ORDER BY first_visit_week, week_difference ), -- 유지율 계산을 위한 초기 사용자 수와 주차별 유지율 계산 retention_base AS ( SELECT first_visit_week, week_difference, user_count, FIRST_VALUE(user_count) OVER (PARTITION BY first_visit_week ORDER BY week_difference) AS initial_user_count FROM user_count_by_week ) -- 최종 리텐션 비율 계산 및 결과 출력 SELECT first_visit_week, week_difference, ROUND(SAFE_DIVIDE(user_count, initial_user_count), 2) AS retention_rate FROM retention_base ORDER BY first_visit_week, week_difference;

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
진혁 댓글 1 좋아요 0 조회수 142

강의자료 다운

미해결

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

강의자료는 따로 다운로드 받을 순 없나요?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
jinknugk4174 댓글 2 좋아요 0 조회수 134

인기 태그

인프런 TOP Writers

주간 인기글