
벌써 5주 차, 실시간 파이썬 수업이 막을 내렸어요 !
아직 나는 많이 서툰데, 벌써 끝이라고요? ( o 0 o ) ← 이런 느낌이에요!
실력은 아직 부족하지만, 파이썬 분석 프로젝트를 위한 주제 선정과 팀 배정, 그리고 첫 피어 세션까지 무사히 마쳤고,
드디어 내일은 프로젝트 수업의 첫걸음을 떼게 되었어요. 두근두근!
걱정도 되지만, 한편으로는 기대도 가득합니다.
무엇보다 팀원들에게 피해를 주고 싶지 않다는 마음에 이번 주는 더욱 열심히 공부했어요
제가 작성하는 모든 내용은 강의에서 배운 내용을 바탕으로, 스스로 응용한 것이니 참고해 주세요!
1. Matplotlib을 이용한 시각화
import numpy as np
import matplotlib.pyplot as plt
- 시각화를 위해선 관련 라이브러리를 불러와야겠죠?
x = np.linspace(0, 2 * np.pi, 100) # # 0부터 2π까지 100개 점 생성
y1 = np.sin(x)
y2 = np.cos(x)
# 도화지 옵션
plt.figure(figsize = (12,8),dpi = 600 ) # dpi는 해상도, 이렇게 하면 조금더 선명해짐
plt.plot(x, y1, label='sinx', color='hotpink', linewidth=3)
plt.plot(x, y2, label='cosx', color='#5d83ac', linewidth=3)
plt.legend(loc = (1,1))
plt.plot(x,y1,color ='hotpink')
plt.plot(x,y2,color ='#5d83ac')
plt.title('Sin,Cos Graph')
plt.xlabel('radians')
plt.ylabel('values')
plt.grid() # 격자무늬 그려짐

저는 시각화할때 색상을 정말 중요시하는데요
이왕이면 그릴거면 예뻤음 좋겠어서 메모장에 마음에 드는 색상을 적어놓고 시각화할때마다 불러와서 사용하는 거 같아요 !
1 - 1 . Plotly 시각화로 바꿔보기
위에서 matplotlib으로 해본 그래프를 그대로 plotly 그래프로 그려볼건데요
html 형식으로 되어 있어 발표용으로 할땐 이렇게 하라고 하시더라구요 !
분석할 땐 나만 보는거니까 확인정도를 matplotlib 으로 하는
뭐 그렇대요
import numpy as np
import plotly.graph_objects as go
# 1. 데이터 생성
x = np.linspace(0, 2*np.pi, 100) # 0 부터 2파이까지 100개의 점 생성
y1 = np.sin(x)
y2 = np.cos(x)
# 2. 그래프 객체 생성
fig = go.Figure()
# 3. sin(x) 선 추가
fig.add_trace(go.Scatter(
x=x, y=y1, # # x축에 들어갈 값 x, y축에 들어갈 값들 (예: sin(x))
mode='lines', # 선으로 표시
name='sinx', # 범례에 표시될 이름
line=dict(color='hotpink', width=3) # 선 색상 및 두께
))
# 4. cos(x) 선 추가
fig.add_trace(go.Scatter(
x=x, y=y2,
mode='lines',
name='cosx',
line=dict(color='#5d83ac', width=3)
))
# 5. 레이아웃 설정 (제목, 축 이름, 그리드)
fig.update_layout(
title='Sin, Cos Graph', # 제목
xaxis_title='radians', # x축 이름
yaxis_title='values', # y축 이름
legend=dict( # 범례 위치 수동 설정
x=1,
y=1,
xanchor='left',
yanchor='top'
),
width=600, # 폭 (픽셀)
height=400, # 높이 (픽셀)
)
# 6. 그리드 켜기
fig.update_xaxes(showgrid=True)
fig.update_yaxes(showgrid=True)
# 7. 그래프 출력
fig.show()
# 8. HTML로 저장 (현재 디렉토리에 저장됨)
fig.write_html("sin_cos_plot.html")
-> 요기 들어가시면 plotly로 그린 그래프 확인 가능합니다 ! sin_cos_plot.html
2. Subplots
여러 개의 시각화를 동시에 진행하는 방법
x1 = np.arange( , ) # 범위 설정해주시고
x2 = np.arange( , )
y1 = x1 # 각각 식 적어주시고
y2 = x2
fig,(graph1, graph2) = plt. subplots(nrows = 1, ncols = 2, figsize = (8,4))
#nrows = 1, ncols = 2 - 1행 2열
#nrows = 2, ncols = 2 - 2행 2열
#nrows = 3, ncols = 2 - 3행 2열
#nrows = 3, ncols = 3 - 3행 3열
graph1.plot(x1, y1, color ="#f0bad5", marker = 'o') # 색상지정해주고 , marker 표시 지정
graph2.bar(x2, y2, color ="#437147")
3. 산점도 그래프 연습
- GDP vs Life Expectancy by Continent
import pandas as pd
url = "https://raw.githubusercontent.com/resbaz/r-novice-gapminder-files/master/data/gapminder-FiveYearData.csv"
df = pd.read_csv(url)
df
일단 파일 불러오고
df['continent'].unique()
이렇게 어떤 대륙들이 포함되어 있는지 살펴봤어요
3-1 . Matplotlib 활용
df_Asia = df[df['continent']=='Asia']
df_Europe = df[df['continent']=='Europe']
df_Africa= df[df['continent']=='Africa']
df_Americas = df[df['continent']=='Americas']
df_Oceania = df[df['continent']=='Oceania']
plt.scatter(x = df_Asia['gdpPercap'], y=df_Asia['lifeExp'], color = "#090E3D",label = 'Asia')
plt.scatter(x = df_Europe['gdpPercap'], y=df_Europe['lifeExp'], color = "#9DA2D9",label = 'Europe')
plt.scatter(x = df_Africa['gdpPercap'], y=df_Africa['lifeExp'], color = "#5C63A1",label = 'Africa')
#plt.scatter(x = df_Americas['gdpPercap'], y=df_Americas['lifeExp'], color = "#8F97D4",label = 'Americas')
#plt.scatter(x = df_Oceania['gdpPercap'], y=df_Oceania['lifeExp'], color = "#C5CBFF",label = 'Oceania')
#겹쳐도 비슷하긴한데 색이 확실히 많으니까 겹치는게 보이긴한데 눈에 안띔
plt.legend()
plt.xlabel('GDP per Capita')
plt.ylabel('Life Expectancy')
plt.title('GDP vs Life Expectancy by Continent')
plt.show()

처음에는 5개국을 모두 그렸는데 겹쳐있다보니 잘안보이더라구요 그래서 3대륙으로 줄였어요
-> 저는 이렇게 해석했어요
사실 이정도면 다 뜯어고치고 새로 말을 만들어 준거긴한데.... 결론은 같으니,,,, 뭐,,,,,ㅎㅎㅎ
3-2. Plotly 활용
- 이게 좋은점이 겹쳐서 보지 못했던 관점들이 생기기도 하고
겹쳐서 올려도 각각 따로 볼 수 있으니 좋더라구요 !
import pandas as pd
import plotly.express as px
# 데이터 불러오기
df = pd.read_csv("https://raw.githubusercontent.com/resbaz/r-novice-gapminder-files/master/data/gapminder-FiveYearData.csv")
df_2007 = df[df['year'] == 2007]
# 산점도 그래프 생성
fig = px.scatter(
df_2007,
x='gdpPercap',
y='lifeExp',
color='continent',
hover_name='country',
size='pop',
title='GDP vs Life Expectancy (2007)',
labels={'gdpPercap': 'GDP per Capita', 'lifeExp': 'Life Expectancy'},
)
# 축 범위 조정 (range 줄이기)
fig.update_layout(
xaxis=dict(
title='GDP per Capita',
range=[0, 60000], # 범위는 위에 Matplotlib의 형태를 따라가기 위해
tickvals=[0, 10000, 20000, 30000, 40000, 50000, 60000] #조정한거임
),
yaxis=dict(
title='Life Expectancy',
range=[30, 85],
tickvals=[30, 40, 50, 60, 70, 80]
)
)
# 그래프 출력
fig.show()
# HTML 파일로 저장
fig.write_html("gdp_lifeExp_by_continent_nicer_range.html")
-> 요기 들어가시면 확인할 수 있습니다 :)
gdp_lifeExp_by_continent_nicer_range.html
이렇게 보게 되면 위에서 Matplotlib에서 했던 분석보다 더 정밀하게 가능하더라구요 !
많은 부분을 놓치고 있었구나... 깨닫게 됨,,,,,
3 - 3
많은 것을 깨닫고 Plotly로 애니메이션 차트로도 만들어봤는데요 !
# Plotly 애니메이션 차트 그리기
fig = px.scatter(
df,
x="gdpPercap", # x축: GDP per capita
y="lifeExp", # y축: Life Expectancy
size="pop", # 원 크기: 인구 수
color="continent", # 색상: 대륙
hover_name="country", # hover 시 표시될 국가 이름
animation_frame="year", # 애니메이션 프레임: 연도
range_x=[0, 60000], # x축 범위 조정
range_y=[30, 90], # y축 범위 조정
title="Animated: GDP per Capita vs Life Expectancy (1952-2007)",
)
# 축 라벨 및 레이아웃 조정
fig.update_layout(
xaxis_title="GDP per Capita",
yaxis_title="Life Expectancy",
template="plotly_white"
)
# HTML로 저장
fig.write_html("gapminder_animated_chart.html")
# 차트 보여주기
fig.show()
-> 이건 진짜 꼭 확인해보셔요 ! gapminder_animated_chart.html
4. 한글폰트 적용해서 barplot 만들어보기
plt.rc('font', family = 'Malgun Gothic') # 한글폰트 적용
x = ['망댜', ' 쩡유 ', '쟈빵']
height= [100,130,160]
color = ['#f0bad5',"#ee84b9","#cf2379"]
plt.bar(x,height,color=color,alpha = 0.6)
#plt.ylim(90,170)
- 한글 적용 폰트는 plt.rc('font', family = 'Malgun Gothic') 기억하기 !

# 선장난을 조금 치면
plt.rc('font', family = 'Malgun Gothic') # 한글폰트 적용
x = ['망댜', ' 쩡유 ', '쟈빵']
height= [100,130,160]
color = ['#f0bad5',"#ee84b9","#cf2379"]
plt.bar(x,height,color=color,alpha = 0.6)
plt.ylim(0,360)
# 이렇게 하면 셋의 키가 비등비등해보임
# 망댜가 키성장을 조금만 더 노력하면 따라잡을 수 있을 것처럼 보임

-> 이렇게 ylim을 조정하면 처음과 완전히 다르게 보이죠 ?
5. 꺾은선 그래프와 BoxPlot 연습
- 애플 주식 데이터를 들고왔어요
하루만 늦게 해봤더라면 머리가 덜 아팠을텐데,,,,,
- ticker(티커)는 주식 시장에서 회사나 주식을 식별하는 고유한 약어예요.
- 예를 들어:
- 애플(Apple)은 AAPL
- 삼성전자는 미국 증시에 상장되어 있지 않지만, 한국 주식의 경우 005930.KS 같은 형식으로 쓸 수 있어요.
- 구글(Alphabet)은 GOOGL
- 마이크로소프트는 MSFT
-즉, 주가 데이터를 요청할 때 "이 회사 주가를 가져오세요" 라고 알려주는 코드가 바로 ticker입니다.
- 만약 한국 주가를 원하면, 보통 티커 뒤에 .KS (코스피), .KQ (코스닥) 같은 식으로 붙여서 요청해요.
- 예)
- 삼성전자 주가 (코스피) = 005930.KS
- 카카오 주가 (코스닥) = 035720.KQ
-=>ticker = 주식 종목 코드(약자)
이렇게 간단하게 모르는 것들 정리해 두고
1. 데이터 찍어보기
2. info() 찍어보기
3. 기술통계량 확인할 수 있는 describe 찍어보기
제가 이 데이터를 보고 가장 당황했던 점이

-> 이렇게 멀티 인덱스로 되어 있어서 깜짝 놀랬거든요 ?
- 5주간 배우면서 처음 만난 멀티인덱스,,,,
- 그걸 이제 오늘 배움
- 연습한건 28일 멀티인덱스 배운건 29일 ,,,,, ㅎㅎㅎ
-> 정말 뭐랄까,,,, 분석 초보가 겨우겨우 분석해낸거라 자세한 코드 공유는 생략하고 큼직큼직한거 위주로 공유하면서
되새겨 볼게요
import pandas as pd
data['Date'] = pd.to_datetime(data['Date']) # 먼저 전체 날짜 컬럼 변환
data['year'] = data['Date'].dt.year
data['month'] = data['Date'].dt.month
data['day'] = data['Date'].dt.day
data
-> 이렇게 년,월,일의 새로운 컬럼을 만들어서 날짜를 쪼개주고
- 보기 힘들었던 date 컬럼은 drop() 사용해서 지웠어요
- 뭣도 모르지만 일단 value_counts() 사용해서 월별 카운트 찍어보고 sort_index써서 순서정렬까지
# data([('Close', 'AAPL'),
# ('High', 'AAPL'),
# ('Low', 'AAPL'),
# ('Volume', 'AAPL'),]
# 이런 형태로 컬럼들이 되어 있어
-> 다들 아셨나요..... 멀티 인덱스인 데이터들은 시각화 함수 사용할때 접근을 다르게 해야한다는 것을.....
# 그러면 Close/AAPL 컬럼을 선택할때
data[('Close', 'AAPL')] # 이렇게해줘야함
-> 컬럼 자체를 이렇게 선택해줘야만 하는,,,,,
- 근데 난중엔 귀찮아서 컬럼들을 다 묶어버림
- 그리 좋은 코드는 아니여서 생략하겠습니다....
sns.boxplot(data=d , x=' ' , y=' ', color="#DFBAEE") # 각 자리에 잘 넣어주고
plt.show()

- 2023년엔 무슨 일이 있었을까,,,, 궁금해지는
sns.boxplot(data=data, x=' ', y=' ', hue=' ') # hue는 색상으로 그룹을 나눠주는 역할

- 어김없이 제가 해석해보았구요
이게 그래프가 바꿀때마다 코드 자체는 같고 bar. boxplot.poinplot.lineplot 여기만 달라지거든요
: 즉, 주인장이 그래프만 보여줄거라는 말임


pointplot의 경우엔 연속형 데이터엔 적합하지 않다는걸 엊그제 깨달았구요 (학습일지 쓰는 동안에 날짜가 바뀌어버림.,,,)


5-1 .주가 데이터를 활용한 Plotly
문득 이렇게 써내려오다 든 생각인데
이렇게 멋진걸 해냈는데 통일된 썸네일을 주기 위해 올려둔 이 썸네일이 갑자기 미워짐 ....
너무 멋져서 여기저기 자랑하고 싶은데,,,,,
여러분들은 어떤 썸네일이 더 들어오고 싶어요?
시간과 노력이 들어간 시각화 썸네일 VS 통일감을 주는 썸네일
우와 ! 저 이걸로 A/B Test 한번 해볼까요?
진짜 미쳤네,,,,,
다음 포스팅은 A,B 테스트로 가져오기 위해
주말엔 A/B Test 공부 해봐야겠어요
이번 포스팅은 제 노력이 와방방 들어가서 어디서도 공유하고 싶지 않아요,,,,,
진짜,,,,,,,,,,,아무도 몰랐음 좋겠다,,,,,,
정말 필요한 그런 분들만 보고
그랬음 좋겠다......
오늘은 해시태그 안쓸래요.
그래도 파이썬의 눈뜨게 해준 강사님만 태그하고 마무리 합니다 !





































