- 통계 분석
- 기술 통계 분석: 데이터를 요약해 설명하는 통계분석 기법
- 추론 통계 분석: 단순히 숫자를 요약하는 것을 넘어 어떤 값이 발생할 확률을 계산
- 통계적 가설 검정: 유의확률을 이용해 가설을 검정하는 방법(일반적으로 유의확률 5%를 판단 기준으로 삼는다.)
- 유의확률(P-Value): 실제로는 집단 간 차이가 없는데 우연히 차이가 있는 데이터가 추출될 확률
- 유의확률이 5%보다 클 경우
→집단 간 차이가 통계적으로 유의하지 않다.
→실제로 차이가 없더라도, 우연에 의해 이런 정도의 차이가 관찰될 가능성이 크다. - 유의활률이 5%보다 작을 경우
→집단 간 차이가 통계적으로 유의하다.
→실제로 차이가 없는데 우연에 의해 이런 정도의 차이가 관찰될 가능성이 적다.(우연이라고 보기 힘들다.)
- T-검정(T-Test)
- 두 집단의 평균에 통계적으로 유의한 차이가 있는지 알아볼 때 사용하는 통계 분석 기법
- 상관분석
- 두 연속 변수가 서로 관련이 있는지 검정하는 통계 분석 기법
- 상관계수: 상관분석을 통해 도출한 값, 0~1 사이의 값을 지니며 1에 가까울 수록 관련성이 크다.
→양수는 정비례, 음수는 반비례
- 파이썬 프로젝트 2일차
- 강남구, 종로구의 따릉이 대여소 지도 시각화
#강남구, 종로구 추출
df=place_list.query('address_district =="강남구"| address_district=="종로구"')
#지도 시각화
import folium
m = folium.Map(location=[37.5536067,126.9674308],
zoom_start=12)
from folium import Circle
for _, row in df.iterrows():
Circle(location = [row['address_lat'],row['address_long']],
radius=20,
popup=row['place_name'],
).add_to(m)
- 기존 진행 부분에서 이상치를 발견하고 수정
#파생변수 생성
usage_detail['distance_per_count']=usage_detail['use_distance']/usage_detail['use_count']
usage_detail['time_per_count']=usage_detail['use_time_min']/usage_detail['use_count']
#박스플롯으로 이상치 확인
sns.boxplot(data=usage_detail,y='distance_per_count')
#주중,주말 평균 이동거리
pct25=usage_new['distance_per_count'].quantile(.25)
pct75=usage_new['distance_per_count'].quantile(.75)
#상한,하한
iqr=pct75-pct25
pct25-1.5*iqr #하한
pct75+1.5*iqr #상한
#6462m 이상이면 NaN 부여(하한은 음의 값이라 제외)
usage_new['distance_per_count']=np.where(usage_new['distance_per_count']>6462,np.nan,usage_new['distance_per_count'])
usage_new['distance_per_count'].isna().sum() #결측치 빈도 확인 (NaN:203445개 생성)
#결측치를 제거하고 분석
mean_distance=usage_new.dropna(subset=['distance_per_count'])\
.groupby('weekday',as_index=False)\
.agg(mean_distance=('distance_per_count','mean'))
#주중,주말 평균 이용시간
pct25=usage_new['time_per_count'].quantile(.25)
pct75=usage_new['time_per_count'].quantile(.75)
#상한,하한
iqr=pct75-pct25
pct25-1.5*iqr #하한
pct75+1.5*iqr #상한
#62분 이상 사용이면 NaN 부여(하한은 음의 값이라 제외)
usage_new['time_per_count']=np.where(usage_new['time_per_count']>62,np.nan,usage_new['time_per_count'])
usage_new['time_per_count'].isna().sum() #결측치 빈도 확인(NaN:165467개)
#결측치를 제거하고 분석
mean_time=usage_new.dropna(subset=['time_per_count'])\
.groupby('weekday',as_index=False)\
.agg(mean_time=('time_per_count','mean'))
#그래프 시각화
fig, ax=plt.subplots(nrows=2);
sns.barplot(data=mean_distance,x='weekday',y='mean_distance',ax=ax[0]);
sns.barplot(data=mean_time,x='weekday',y='mean_time',ax=ax[1]);
'Data > [SeSAC 성동1기 전Z전능 데이터 분석가]' 카테고리의 다른 글
[성동1기 전Z전능 데이터 분석가] Day 41 (0) | 2023.12.12 |
---|---|
[성동1기 전Z전능 데이터 분석가] Day 38~40 (3) | 2023.12.11 |
[성동1기 전Z전능 데이터 분석가] Day 36 (0) | 2023.12.04 |
[성동1기 전Z전능 데이터 분석가] Day 35 (0) | 2023.12.01 |
[성동1기 전Z전능 데이터 분석가] Day 34 (2) | 2023.11.30 |