from selenium import webdriver from selenium.webdriver.chrome.options import Options # from selenium.webdriver.chrome.service import Service # from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import requests from bs4 import BeautifulSoup import time options = Options() user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" options.add_argument(f"user-agent={user_agent}") options.add_experimental_option("detach", True) driver = webdriver.Chrome(options=options) url = "https://kream.co.kr/search?shop_category_id=34" driver.get(url) time.sleep(2) for i in range(1): driver.execute_script("window.scrollTo(0, document.body.scrollHeight)") time.sleep(2) html = driver.page_source soup = BeautifulSoup(html, "html.parser") items = soup.select(".product_card") for item in items: brand = item.select_one(".product_info_brand.brand") name = item.select_one(".translated_name") link = item.select_one(".item_inner").attrs['href'] click = name.text driver.find_element(By.PARTIAL_LINK_TEXT, click).send_keys(Keys.CONTROL+Keys.ENTER) time.sleep(1) driver.switch_to.window(driver.window_handles[-1]) html = driver.page_source soup2 = BeautifulSoup(html, "html.parser") model_num = soup2.select_one("div:nth-child(3) > div.product_info") print(brand.text.strip()) print(name.text) print(model_num.text.strip()) print(f"https://kream.co.kr{link}") print() driver.close() driver.switch_to.window(driver.window_handles[0]) 아무것도 모르는 상태에서 시작했는데 좋은 강의 올려주신 덕분에 크롤링을 조금이나마 맛보게 된 것 같습니다. 어설프게나마 완성은 한거 같은데 궁금한게 있어서 질문 남깁니다. 상품 링크를 타고 들어가야 원하는 정보를 긁어올 수 있는 사이트인데, 자바스크립트로 동작하게끔 되어 있습니다. 시행착오 끝에 셀레니움으로 동작을 시켜봤는데 제품 하나하나마다 새창을 열어서 정보를 가져온 후에 창을 닫고.. 다시 새창을 열어서 정보를 가져온 후에 창을 닫고.. 하다보니 시간도 너무 오래 걸리고 이렇게 하는게 맞는 건지 의구심이 듭니다. 어떻게 해야 속도를 높힐 수 있을까요?
일단 실기가 명확한 풀이과정이 없기는 하기는 하나저는 X_tr, y_tr로 accuracy_score, precision_score, recall_score, f1_score, roc_auc_score 비교한 뒤에점수가 높은것을 바탕으로 다시 train을 fit시키는게 일반적으로 더 나은 전략이 아닌가싶은데(양이 더많으니까)혹시 이게 크게 리스크가 있다거나 혹은 의미가 없다고 볼수있을까요? 강의에서는 X_tr, y_tr로만 하고 끝내길래 궁금해서 여쭤봅니다.
안녕하세요! 머신러닝 학습 중에 DT,RF,XGBOOST 모두 선생님이 하신 것과 동일하게 코드 작성하고 실행했는데 모두 결과값이 다르게 나와서요. 제가 무언가를 잘못 한 걸까요?? 이게 DT랑 RF는 결과값이 똑같이 나왔습니다. from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier() rf.fit(X_tr[cols], y_tr) pred = rf.predict_proba(X_val[cols]) pred[:10] array([[1.], [1.], [1.], [1.], [1.], [1.], [1.], [1.], [1.], [1.]]) 이게 XGB입니다. from xgboost import XGBClassifier xgb = XGBClassifier() xgb.fit(X_tr[cols], y_tr) pred = xgb.predict_proba(X_val[cols]) pred[:10] array([[9.999634e-01, 3.657642e-05], [9.999634e-01, 3.657642e-05], [9.999634e-01, 3.657642e-05], [9.999634e-01, 3.657642e-05], [9.999634e-01, 3.657642e-05], [9.999634e-01, 3.657642e-05], [9.999634e-01, 3.657642e-05], [9.999634e-01, 3.657642e-05], [9.999634e-01, 3.657642e-05], [9.999634e-01, 3.657642e-05]], dtype=float32) 그리고 이 예측데이터로 roc_auc 스코어를 뽑아내려고 하니 이런 오류가 뜨면서 안된다고 해서요. 무엇이 문제인지 궁금합니다ㅠㅠ from sklearn.metrics import roc_auc_score roc_auc_score(y_val,pred[:,1]) /usr/local/lib/python3.10/dist-packages/sklearn/metrics/_ranking.py in _binary_roc_auc_score(y_true, y_score, sample_weight, max_fpr) 337 """Binary roc auc score.""" 338 if len(np.unique(y_true)) != 2: --> 339 raise ValueError( 340 "Only one class present in y_true. ROC AUC score " 341 "is not defined in that case." ValueError: Only one class present in y_true. ROC AUC score is not defined in that case.
N=4 일 때 좌표 4개가 주어지고 1명, 2명, 3명, 4명 모였을 때의 경우의 수를 비교해야할 것 같은데 1명 모였을때 경우의 수, 2명 모였을 때 경우의 수, 3명 모였을 때 경우의 수, 4명 모였을 때 경우의 수를 어떻게 그 좌표 조합을 만들 수 있는지 고민입니다. 1명 모였을 때는 단일 반복문, 2명일 때 2중 반복문, 3명일 때 3중 반복문이 필요할 것 같은데... 이게 N개면 N개의 반복문을 만드는게 맞나 싶어서요.. ㅠ
기출 3회 작업형 2에서 피처엔지니어링 전 df.select _dtypes(exclude = "o").copy() .... 로 트레인 데이터와 테스트 데이터를 수치와 범주형으로 나눈 후 수치형 MinMaxScaler 범주형 원핫인코딩으로 각각 피처링을 하셨는데 이때 수치형을 보면 cols = ["A", "B"...]로 오브젝트형을 지정하셨더라구요. 피처엔지니어링때 cols =[ ] 를 별도 지정하더라도 위 데이터를 나누는 과정이 필수일까요?? 아래처럼 해도 되면 concat도 필요없을거 같아서요. 예) df.select _dtypes(exclude = "o").copy() << 이과정없이 from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() cols = ['Age', 'FamilyMembers'] train[cols] = scaler.fit _transform(train[cols]) test[cols] = scaler. transform(test[cols]) from sklearn.preprocessing import LabelEncoder cols = ['Nationality'] for col in cols: le = LabelEncoder() train[col] = le.fit _transform(train[col]) test[col] = le.transfrom(test[col])
[리뉴얼] 처음하는 파이썬 백엔드와 웹기술 입문 (파이썬 중급, flask[플라스크] 로 이해하는 백엔드 및 웹기술 기본) [풀스택 Part1-1]
터미널에서 conda activate가 되어 있는 경우에는 conda 설치 위치의 bin을 참조하게 되더라구요. 그래서 강의를 따라서 설치 후 서버를 실행하면 /USERS/{유저}/opt/ananconda3/~~ 를 계속 참조해서 오류가 발생합니다. 이런 경우엔 conda 가상환경을 꺼주시면 정상적으로 동작합니다. conda deactivate mysql.server start
선생님! 6:05초에 logit("종속변수 ~ 독립변수 + " ) 넣어줄때요, 종속변수는 문제에서 생존여부(Survived)를 예측하고자 한다고 했기때문에 종속변수가 되는걸까요? 아니면 문제 1번에서 Gender 와 Survived 간의 독립성 검정을 한다고 했을때 문제 2번에 Gender가 독립변수인게 적혀있기 때문에 Survived 는 자동으로 종속변수가 되는걸까요? 종속변수를 어떻게 확인해야 하는지 잘 모르겠습니다!
마지막 RAG 강의에서, 첫번째 명령문을 실행시키면, !pip install -q langchain langchain-openai tiktoken chromadb typer 호환과 관련된 에러가 발생합니다. ===================== ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. spacy 3.7.4 requires typer<0.10.0,>=0.3.0, but you have typer 0.12.3 which is incompatible. weasel 0.3.4 requires typer<0.10.0,>=0.3.0, but you have typer 0.12.3 which is incompatible. ===================== ChatGPT를 통하여 여러 해결방안을 제시받아 시도해 보았는데 해결이 되지 않습니다. 손쉬운 해결 방법이 있을지요?
파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
수업대로 127.0.0.1:8000/items/{id} 를 넣었는데 starlette.routing.NoMatchFound: No route exists for name "static" and params "path". internal Server Error 가 나옵니다 ㅠ BASE_DIR, directory 모두 수업대로 다 입력했습니다. 구글링을 해도 방법을 찾질 못해서요.
안녕하세요. ERD 읽는법 강의에 사용된 표 자료에서 보면은, ONE - MANY 가 보통 컬럼으로 매치가 되는데 테이블 : 테이블로 ONE-MANY가 매치 되는곳이 두군데 있더라구요. employees(one) - orders(many) products(one) - orderdetails (many) 그런데 orders 테이블안을 보면 employees를 전체 사용하는 무언가가 있는것이 아닌, employeeID가 FK 되어 있거든요. 그러면 테이블별 매칭이 아닌 employee테이블 내 employeeID 컬럼 (one) - orders테이블 내 employeesid(many)로 연결되어야 하는게 아닌가요?
안녕하세요. as로 명명하는 것에 관해 질문드립니다. "2-5. 집계(GROUP BY + HAVING + SUM/COUNT)"에서 선생님께선 다음과 같이 쿼리를 작성해주셨는데요. select type1, count(id) as cnt from `basic.pokemon` group by type1 having cnt >= 10 order by cnt desc count(id)를 cnt로 명명한 후, having과 order by에서 그 별명을 이용하여 간단히 입력하신 걸 이해했습니다. 여기서 sql에 익숙해지고자, 여러 시험을 해보았는데, 다음과 같은 쿼리도 같은 결과를 출력할 수 있었습니다. select type1, count(type1) as cnt from `basic.pokemon` group by type1 having count(id) >= 10 order by count(kor_name) desc select 내의 count 괄호 내에는 type1 열을 불러 읽고, having 내의 count 괄호 내에는 id 열을 불러 읽고, order by 내의 count 괄호 내에는 kor_name 열을 불러 읽고, as로 select 내의 count 함수를 따로 명명해주었지만 그 별명을 사용하지는 않았습니다. 즉, 각 count 함수의 변수를 모두 전혀 다른 것들을 불러 읽는 엉망진창(...)으로 만들어 보았는데요. 그럼에도 불구하고, 문제 없이 같은 결과가 출력된다는 것은, as는 입력 간편화를 위해 이용하는 것이니, 명명을 하더라도 이용하지 않아도 출력상 문제는 없다고 이해해도 될까요? 그리고 count 내 변수를 랜덤하게 지정해도 같은 결과가 나옴에도 불구하고, id 열을 변수로 쓰는 이유는, 실무에서는 값이 누락되어 있을 가능성이 있을 열이 아닌, 하나의 row마다 반드시 값이 주어지는 열(=id 열)을 쓰는 것이 잘못된 집계를 피하기 위함이라고 이해해도 될까요? 글이 길어졌지만, 답변을 기다립니다. 미리 감사합니다.