업무에 파이썬 활용할 줄 알기
데이터 분석 종합반 3주차 복습 본문
3-1. 3주차 오늘 배울 것
3-2. 데이터 분석 세팅
3-3. [미션1] 가장 적절한 고객 관리 타이밍_분석 준비하기
3-4. [미션1] 가장 적절한 고객 관리 타이밍_분석 및 시각화
3-5. [미션2] 제품 수요가 많은 지역을 찾아라_라인 그래프 그리기
3-6. [미션2] 제품 수요가 많은 지역을 찾아라_지도에서 한눈에 보기
3-7. 숙제_최적의 즉문즉답 시간대를 찾아라
3-1. 3주차 오늘 배울 것
상관관계 말고 어떤 분석을 할 수 있는지
막대, 라인 그래프 외 어떤 그래프를 그릴 수 있는지
3-2. 데이터 분석 세팅
3-3. [미션1] 가장 적절한 고객 관리 타이밍_분석 준비하기
테이블 구성해야할 것
요일이랑 시간을 빼내어야 함
[날짜 컬럼].dt.day_name
[날짜 컬럼].dt.hour
※ 주의사항
dt.hour()로 쓰면 안됨. 괄호없이 dt.hour로 써야 함.
3-4. [미션1] 가장 적절한 고객 관리 타이밍_분석 및 시각화
요일별 / 막대그래프
※ 한글이 깨질 때
시간별 / 라인그래프
왜 안돼지 갑자기
히트맵
<복습>
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
sparta_data = pd.read_table('/content/access_detail.csv', sep=',')
sparta_data.head()
print(type(sparta_data['access_date'][0]))
format='%Y-%m-%dT%H:%M:%S'
sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date'], format=format)
sparta_data.head()
print(type(sparta_data['access_date_time'][0]))
sparta_data['access_weekday'] = sparta_data['access_date_time'].dt.day_name()
sparta_data['access_hour'] = sparta_data['access_date_time'].dt.hour
sparta_data.tail()
#요일별 사용자수 구하기
weekdata = sparta_data.groupby('access_weekday')['user_id'].count()
weekdata
#시간별 사용자수 구하기
hourdata = sparta_data.groupby('access_hour')['user_id'].count()
hourdata = hourdata.sort_index(ascending=False)
hourdata
#요일별 사용자수 막대그래프
plt.figure(figsize=(10,5))
plt.bar(weekdata.index, weekdata)
plt.title('요일별 수강 완료 수강생 수')
plt.xlabel('요일')
plt.ylabel('수강생(명)')
plt.show()
#시간별 사용자수 라인그래프
plt.figure(figsize=(10,5))
plt.plot(hourdata.index, hourdata)
plt.title('시간별 수강 완료 사용자 수')
plt.xlabel('시간')
plt.ylabel('사용자(명)')
plt.xticks(np.arange(24))
plt.show()
#그래프 그리기 내가 이해한 것
#그래프 그릴 데이터테이블을 먼저 만들어 준 다음 그래프를 그려준다
#피벗테이블 만들기 / 요일별 시간대별 사용자수
weeks = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
sparta_data_pivot = pd.pivot_table(sparta_data, values = 'user_id',
index = ['access_weekday'],
columns = ['access_hour'],
aggfunc = "count").agg(weeks)
#.agg(weeks)가 뭘까
sparta_data_pivot
#히트맵 그래프 / 요일별 시간대별 사용자수
plt.figure(figsize=(14,5))
plt.pcolor(sparta_data_pivot)
plt.xticks(np.arange(0.5, len(sparta_data_pivot.columns), 1), sparta_data_pivot.columns)
plt.yticks(np.arange(0.5, len(sparta_data_pivot.index),1), sparta_data_pivot.index)
plt.title('요일별 종료 시간 히트맵')
plt.xlabel('시간')
plt.ylabel('요일')
plt.colorbar()
plt.show()
#plt.xticks, plt.yticks 함수 구성 이해안감
3-5. [미션2] 제품 수요가 많은 지역을 찾아라_라인 그래프 그리기
<My solution>
나는 이렇게 했는데, 강사님은 pd.DataFrame을 먼저 선언하셨다. pd.DataFrame을 먼저 선언하는 방식은 처음 배우는데?
<복습>
import pandas as pd
sparta_data = pd.read_table('/content/students_area_detail.csv', sep = ',')
sparta_data.head()
#그래프 그릴 데이터 테이블 만들어주기
#지역 분류
category_range = set(sparta_data['area']) #중복값제거
print(category_range, len(category_range))
#area, latitude, longtitude 컬럼만 남기기
area_info = sparta_data[['area','latitude','longitude']]
#중복제거
area_info = area_info.drop_duplicates(['area'])
#지역이름기준 정렬
area_info = area_info.sort_values(by=["area"], ascending=True)
#인덱스 재정렬
area_info = area_info.reset_index()
area_info
#지역별 학생수 데이터 정리
number_of_students = pd.DataFrame(sparta_data.groupby('area')['user_id'].count())
number_of_students
#2개 테이블 합치기
result = pd.merge(area_info, number_of_students, on="area")
result
#지역별 사용자수 그래프 그리기
import matplotlib.pyplot as plt
import numpy as np
plt.rc('font', family = 'NanumBarunGothic')
plt.figure(figsize=(10,5))
plt.plot(result['area'],result['user_id'])
plt.title('지역별 사용자 수')
plt.xlabel('지역')
plt.ylabel('사용자 수')
plt.xticks(np.arange(13))
plt.show()
#만약 여러개의 그래프를 나타내고 싶으면 어떻게 하나?
#이전 실습에서 다양한 여러개의 그래프를 나타냈던 것 같긴한데..
※ xticks의 사용 유무 그래프 차이
3-6. [미션2] 제품 수요가 많은 지역을 찾아라_지도에서 한눈에 보기
3-7. 숙제_최적의 즉문즉답 시간대를 찾아라
#수강생들의 수업 완료 시간대는 주로 한가한 주말일 것이다
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
raw = pd.read_table('/content/done_detail.csv', sep = ',')
raw.head()
#최종데이터: 수업 완료 요일별 수강생 수 (테이블,바그래프)
#done_date 시간 타입으로 변경하여 시간컬럼 따로 만들어주기
format = '%Y-%m-%dT%H:%M:%S'
raw['done_date_datetype'] = pd.to_datetime(raw['done_date'], format=format)
raw['done_day'] = raw['done_date_datetype'].dt.day_name()
raw.head()
#테이블 구성
weeks = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
users_bydoneday = raw.groupby('done_day')['user_id'].count()
users_bydoneday = users_bydoneday.agg(weeks) #이게 어떤 함수지?
users_bydoneday
#바그래프 구성
plt.figure(figsize=(10,5))
plt.bar(users_bydoneday.index, users_bydoneday)
plt.title('요일별 수강완료 수강생수')
plt.xlabel('수강완료 요일')
plt.ylabel('수강생수')
plt.show()
#몇명인지 나타낼 수 없나
#특별히 튀는 시간대가 있을 수 있지 않나?
#각 요일마다 시간대별 수강생 수 추이를 그려보고 싶은데?
#for문을 써서 7개의 그래프를 그려볼 수는 없을까?
#시간컬럼추가
#요일별 시간별
#일단 피벗테이블을 먼저 만들까?
#chatgpt를 활용하려면 뭘 어떻게 물어봐야하지?
※ users_bydoneday.agg(weeks)에서 agg()메서드는 어떤 역할을 하는가?
해당 함수 존재 여부에 따라 전후를 비교해보면 agg함수를 쓰지않으면 는 요일 정렬이 뒤죽박죽임
왜 일반적인 설명과 쓰임새가 다른 것 같지?
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.agg.html
<즉문즉답 답변>
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = sparta_data.groupby('access_date_time_weekday')['user_id'].count()
print(weekdata)
weekdata = weekdata.agg(weeks)
print()
print(weekdata)
------
access_date_time_weekday
Friday 859
Monday 1354
Saturday 926
Sunday 1541
Thursday 937
Tuesday 1624
Wednesday 887
Name: user_id, dtype: int64
Monday 1354
Tuesday 1624
Wednesday 887
Thursday 937
Friday 859
Saturday 926
Sunday 1541
Name: user_id, dtype: int64
잘모르겠는 것
피벗테이블 함수구성에서 .add(weeks)가 뭘까
plt.xticks, plt.yticks 함수 구성 이해안 됨
folium 패키지 함수들 전혀 이해가 안간다
import folium
from folium.plugins import MarkerCluster
m = folium.Map(location=[37.5536067,126.9674308],
zoom_start=8)
for n in result.index:
radius = result.loc[n,'user_id']
folium.CircleMarker([result['latitude'][n],result['longitude'][n]],
radius = radius/50,
fill=True
).add_to(m)
#folium.CircleMarker 이해하기
#마커를 지도위에 표시해줄건데
#마커를 어떤 위치에 어떤 형태로 표시할건지 정의
#그리고 .add_to(m)으로 그 표기를 m이라는 지도에 더해주겠다
#그래서 내가 하고자 하는 것
#사용자수 크기를 동그라미의 크기로 나타내고 싶음.
#1. 사용자수 데이터 가져오기
#loc
#행 또는 열의 데이터를 조회하는 함수임. 아.. pandas공부할 때 봤던 것 같다
#2. 사용자수 크기에 따라 동그라미 표기해주기
#folium.circleMarker
#loc[n,"열 이름"] => loc[]를 활용하여 n번째의 열을 조회 할수 있습니다!
#즉, n번째의 user의 수를 가져 올수 있는 것이죠!
※ loc 기억 되살리기 참고:
https://m.blog.naver.com/wideeyed/221964700554
[Pandas] loc[ ] 로 행, 열 조회하기
Pandas(판다스, 팬더스) Dataframe(2차원, 행열)에서 loc를 이용해서 행 또는 열의 데이터를 조회하는 방...
blog.naver.com
※ folium.CircleMarker 함수 구성 이해하기
Circle and CircleMarker — Folium 0.1.dev1+gc1d27de documentation
Circle and CircleMarker CircleMarker has a radius specified in pixels, while Circle is specified in meters. That means a CircleMarker will not change size on your screen when you zoom, while Circle will have a fixed position on the map. import folium m = f
python-visualization.github.io
'Python > [스파르타] 데이터 분석 종합반' 카테고리의 다른 글
데이터 분석 종합반 5주차 복습 (2) | 2023.12.04 |
---|---|
데이터 분석 종합반 4주차 복습 (0) | 2023.12.01 |
데이터 분석 종합반 2주차 (0) | 2023.11.28 |
데이터 분석 종합반 1주차 복습 (0) | 2023.11.21 |