[9일차(4일차)]
* df 인덱스는 0부터 시작된다.
* df의 열 중 하나만 떼오면 Series가 된다
* 정렬하면 뒤죽박죽 -> df.reset_index(drop=True) *기본값:drop=F
* 날짜표현 : pd.to_datetime() : 기본은 2024-01-01
-> pd.to_datetime(%Y%m%d) : 20240101
* df.index : 자체로 0열인 index를 array로 뽑을 수 있다!!!!!
—>list_불라 = df.index[0]
—> x = month_count[product_name].index 해도
>>> m_c df의 인덱스(제일 왼쪽 세로열) 나옴
*** index가 숫자만은 아니다, 여러 변수들일수도 있음
<데이터 시각화>
* 이론
- (16pg) 데이터 변수유형
- (28pg) 변수에 따른 시각화 방법분류
- (34pg) Code기반/NoCode기반
- (36pg) 용도별 차트 분류
- (51pg) 시각화 유의사항
<각 기본문법 & 선 - 막대 그래프>
❑ Matplotlib —> plt
* import matplotlib.pyplot as plt *그리드 : plt.grid(True, axis="x")
* plt.plot( x데, y데, label=“-”, marker=“*”, linestyle=“—”,color=“”)
*n번쓰면 한 그래프에 n번 표시
* 그래프 이름쓰기/라벨링 : plt.title(“-”) / plt.xlabel(“-”)
* 종이 여러개 쓰기 : figure 2개 씀
* 종이1장에 그래프 2개 : figure 1개 / subplot 2개
* subplot *최적간격 자동조절
—> fig, (ax1, ax2) = plt.subplots(2, 1, constrained_layout=True)
+ ax1.plot(year, python) # 현재 선택된 figure에 선 그래프
+ ax2.plot(year, java) # 현재 선택된 figure에 선 그래프
*원래 plt.plot인데 ax1, ax2 선언해뒀으니 써야지
+ plt.show() # 그래프를 표시
▷ 라벨링&이름 *ax1은 그래프 이름
+ ax1.plot(year, python) # ax1에 파이썬 선 그래프
+ ax1.set_title("파이썬의 점유율") # ax1의 제목을 "파이썬의 점유율"
+ ax1.set_xlabel("연도”, fontsize=15) # ax1의 xlabel을 "연도"로 설정
+ ax1.set_ylabel("점유율") # ax1의 ylabel을 "점유율"로 설정
+ plt.show() # 그래프를 표시
▷ 눈금격자 & 특정범위
+ plt.xticks( [2018, 2019, 2020, 2021, 2022] )
+ plt.xticks( [mon for mon in range(1, 13)] ) —> 1~12까지
+ plt.ylim(0, 6000)
+ plt.xlim(0, 35000)
❑ Seaborn —> sns ※ 훨씬 깔끔 / matplot 기반이라 matplot호출필요
* import matplotlib.pyplot as plt *같이 쓴다
* import seaborn as sns
* x축에 ~~, y축에 ~~ 등 각각 넣어줘야 함!
—> sns.lineplot(x = year, y = python, label=“-”)
* 내장테마 5가지 : sns.set_style(“—”)
* seaborn 사용해도, 옵션조절은 matplot으로 설정 <—눈금격자는 다 plt다
* subplot
fig, (ax1, ax2) = plt.subplots(1, 2, constrained_layout=True)
fig = sns.lineplot(x=year, y=python, label="python", ax=ax1) sns.lineplot(x=year, y=java, label="java", ax=ax2)
❑ 선그래프 plt.plot sns.lineplot / 막대그래프 plt.bar sns.barplot
* matplot으로 그래프 그리려면 데이터 묶어야 함
—> 데이터 묶기 : gb_mon = df.groupby(“월”)
* plt.plot(df_mon["어른"], label="어른")
—> x, y데이터가 df[“-”]로 들어간다
* seaborn으로 그래프 그리려면 묶을 필요 없이 data 매개변수에 대입
> sns.lineplot(data=df, x=“월”, y=“어른”, errorbar=None, hue=“”)
* hue : 비교해서 보고 싶은 기준값
* error bar : 기본값은 95% 신뢰구간의 범위 표시함
———
* 막대그래프도 plt.bar / sns.barplot 만 달라지지 똑같다!
* plt.barh( ) : 가로 막대그래프
※ 그래프 그릴때 대상데이터를 추출해서 새로 df 만들어 두고 시작 soso
—> df_2019 = df[df[“연”]==2019][[“열”, ”-”, “-”]].sum()
—> df_sat = df[df[“요일”]==“토”]
* 문제유형은 4일차 오전, 오후 연습문제 참고 *
<파이차트> *plt만 있음
※파이차트 만들기 위해 각각의 레이블과 값 가져옴
—> labels = df_2019.index.tolist()
—> data = df_2019.tolist()
* plt.pie(x=data, labels=labels, autopct="%1.1f%%")
* plt.show()
<히스토그램> : 특정구간의 빈도 표현
* plt.hist(df_sat["어린이"], bins=10, histtype="bar")
* plt.title("bar")
* plt.figure()
* todo1 = sns.histplot(data=df_april2017, x="어른", bins=20)
* sns.histplot(
data=df_feb,
x="어린이",
hue="연",
binrange=(0, 800),
bins=10,
multiple="dodge", : 겹치지 않게 (쌓아올린 히스토그램인 경우)
shrink=0.8, : 막대의 너비조절
)
<박스그래프> : 데이터 분포 보여줌
* 여러개 그리기
—> plt.boxplot( [df_apr["어린이"], df_apr["어른"], df_apr["청소년"]] )
* plt.xticks( [1, 2, 3], labels=["어린이", "어른", "청소년"] )
* plt.title("2018년 4월의 입장객 수")
* plt.show()
&
* sns.boxplot(data=df_apr, y="어린이")
* sns.boxplot(data=df_2018, x="월", y="어린이")
<산점도> : 두 변수간 관계
* plt.scatter(df['어른'], df['청소년'])
&
* sns.scatterplot(data=df, x='어른', y='어린이')
* sns.regplot : 상관도를 선까지 그려줌
—> sns.regplot( x_data, y_data, line_kws={“color” : “red”} )
<히트맵>
* 피어슨 상관계수가 (+1) , (-1) 에 가까울수록 상관관계가 있다
* df_corr = df.corr(numeric_only=True)
* sns.heatmap(df_corr, , annot=True) *annot : 각 칸에 상관계수 뜸
[10일차(5일차)]
— 머신러닝 데이터 프로젝트 —
<이론>
* 데이터 수집 -> EDA: 탐색적 데이터 분석과정 -> …
* 과적합(과소, 과대) : 머신러닝의 가장 큰 문제
—> …k-Fold : 일부만 따지는 비소모적 교차검증 중 하나, 과적합 해결책
—> k개 데이터 fold 세트 만들어 k번만큼 각 fold에 학습/검증
* 과적합 : 모델이 학습용데이터에만 최적화되어 있어
검증데이터로 평가시 성능이 잘 나오지 않는 것을 말 함
* 결측치 처리(즉, 데이터 정제)방법
: 삭제-( 전체(열 제거), 부분(행 제거) ) / 대체-(일괄, 유사유형)
: 전체삭제(결측값이 발생한 변수 삭제)
: 부분삭제(결측값 발생한 관측치의 인덱스 행에 해당된 데이터 모두 삭제)
* 연속형 데이터-> boxplot , 이산형 데이터-> histogram 사용이 굿
* 특성엔지니어링 : 스케일링, 바이닝(연속->범주), 더미(범주->연속)
—+ 새로운 관측치를 추가하지는 X
***추가설명 : df.drop( [“Cab”], axis=1, inplace = True) :값 재정의 필요X
—> 전체삭제 됨 (axis=1) / df.dropna() : 부분삭제
—> df.fillna() : 결측치에 대해 일괄대체
<활용>
* titanic['Survived'].value_counts().plot(kind='bar')
* titanic['Age'] = titanic['Age'].fillna(0) <—age데이터 중 결측치 0으로
—> 아예 제거는= titanic['Age’].dropna()
* plt.hist(titanic['Age'], bins = 10) <— 구간을 10개로 나눠 보여줌
* Reviews기준으로 내림차순 정렬한 뒤, 상위 30개 출력
—> print( df.sort_values(“Reviews”, ascending=False).iloc[:30] )
* feature = dataset[ : , :3] : 모든 행과 0~2까지의 열 만큼의 df의미
* 한개의 칼럼(열)만 추출하면 Series 데이터로 저장됨
* 상위, 하위 범주 출력 & 합
—> quiz_3 = day_df.groupby("Product")["Quantity Ordered"]
.count().sort_values(ascending=False).head(1)
.head(3).sum()
.tail(4).sum()
.count().sort_values(ascending=False)[-3:].sum()
[11일차(1일차)]
* Chat GPT를 이용하여 데이터 분석 및 처리를 요청하고, 코드를 받는다.
<Langchain을 활용한 데이터 정제>
* LangChain Agent 개설
* LangChain Agent : pandas의 dataframe을 자동으로 분석
* Agent : 생성 AI를 활용해서, 생각과 행동을 통해 의사결정을 주체적으로
수행하는 AI 비서의 역할을 수행합니다.
* Agent 생각하는 과정 다 보지 않고 최종결과만 원한다면
—> agent = create_pandas_dataframe_agent(ChatOpenAI(temperature=0, model='gpt-3.5-turbo'), df, verbose=True,
agent_type=AgentType.OPENAI_FUNCTIONS,)
* agent.run(소스데이터, “질문”)
* qa_bot(소스데이터, “질문”) <— 직접 만든 함수
❑ open ai api key
: 유료 사용가능
❑ 내 google_search_key https://serpapi.com/dashboard
: 에서 얻어올 수 있다.
'EEE > 파이썬' 카테고리의 다른 글
[SQL 시작만 N번째?] 데이터베이스란? SQL은 뭔 (0) | 2024.04.04 |
---|---|
[파이썬 시작만 N번째?] 실무에서 사용할 능력 키우기_(2) : Pandas 시작 (1) | 2024.03.28 |
[파이썬 시작만 N번째?] 실무에서 사용할 능력 키우기_(1) (1) | 2024.03.28 |