[스파르타코딩클럽]데이터분석 과정/TIL,WIL

통계 4/ 전처리 및 시각화/ 코드카타/ 파이썬

설득이 2024. 1. 24. 20:04

통계

p 값이 유의 수준보다 작거나 같으면 귀무 가설을 기각하고 유의한 차이가 있다는 결론을 낼 수 있다.

p 값이 유의 수준보다 크면 귀무가설을 기각하지 못하며 큰 차이가 존재한다는 결론을 낼 수 없다.

이때 유의 수준은 대부분 5% (0.05)이다.

 


전처리

-Pandas : 다양한 라이브러리를 사용하여 데이터를 불러오고 변환, 분석

-DataFrame : 표 형태 (index와 columns로 구성)

-Series : 하나의 속성을 가진 데이터 집합 ; 표에서 열 1줄

-set_index() : 특정 컬럼에 들어 있는 값을 인덱스로 활용

-reset_index() : 핸져 인덱스를 0부터 시작하는 정수로 변경

-info() : 데이터 정보 파악

-describe() : 기초통계량 확인

-astype() : 데이터 타입 변경

-iloc[로우,컬럼] : 정수 기반의 인덱스 사용해서 데이터 선택

-loc[로우, 컬럼] : 레이블 기반의 인덱스를 사용해서 데이터 선택

-[] : 슬라이싱

-isin() : 특정 값이나 리스트 안에 포함된 값들을 찾아내는 메소드, 원하는 조건에 해당하는 데이터를 빠르게 필터링 및 선택

-concat() : 데이터프레임을 위아래 혹은 좌우로 연결

-merge() : join과 유사

-> how :병합 방법을 나타내는 매개변수 (inner, outer, left, right)

-> on : 병합 기준이 되는 열 이름

-groupby : 데이터 프레임을 그룹화하고 그룹 단위로 데이터를 분할, 적용, 결합, 집계, 변환, 필터링

-pivot_table()

-sort_values() :  컬럼 기준으로 데이터 정렬

-sort_index() : 인덱스를 기준으로 데이터 정

 


SQL 코드카타

가격이 제일 비싼 식품의 정보 출력하기
food_product 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품 분류 식품 가격을 조회

 

  • 전체 조회 -> *
  • 가격이 제일 비싼 -> max(price)
  • 가격이 제일 비싼 = 조건 -> where 
  • 서브쿼리 작성
select *
from food_product
where price = (select max(price) from food_product);

 

 

Monthly Transcation 1
월별, 국가별, 거래 건수와 총액, 승인된 거래 건수와 총액을 찾는 SQL 쿼리를 작성하세요.
  • 월별 -> date_format()
  • 거래 건수 -> coutn(id)
  • 승인된 거래 건수 -> state = 'approved' -> sum
  • 승인된 거래 총액 -> state ='approved' -> sum 
  • case when 
select date_format(trans_date,'%Y-%m') month,
       country,
       count(id) as trans_count, 
       SUM(CASE WHEN state = 'approved' then 1 else 0 END) as approved_count, 
       SUM(amount) as trans_total_amount, 
       SUM(CASE WHEN state = 'approved' then amount else 0 END) as approved_total_amount
FROM Transactions
GROUP BY month, country

 

 

Employee Names
직원 이름을 알파벳 순서대로

 

  • 알파벳 순서 -> name asc;
select name
from employee
order by name asc;

 

 

 


파이썬 코드카타

크기가 작은 부분 문자
숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것
t="3141592"이고  p="271" 인 경우, 
t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개

 

  • p의 길이 <= t의 길이 <= 10000 -> len(p) len(t) 
  • 슬라이싱 사용
def solution(t, p):
    answer = 0
    for i in range(0, len(t)):
        if i+len(p) > len(t):
            continue
        else:
            if int(t[i:i+len(p)])<=int(p): #슬라이싱 사용
                answer += 1
    return answer

 

 

최소 직사각형
모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return하는 함수 완성

 

  • 가로 w 세로 h
  • sizes에서 값 추출 -> 큰 값 = w, 작은 값 = h -> for문 사용
  • .append사용
  • 모든 명합 수납 -> max
def solution(sizes):
    #가로 w 세로 h
    w = []
    h = []
    #sizes에서 값 추출 -> 큰 값 = w, 작은 값 = h
    for i in sizes :
        w.append(max(i))
        h.append(min(i))
    #가장 긴 것들 곱하기
    return max(w) * max(h)

 

 


파이썬

Human 클래스 만들기

class Human:
  def __init__(self, name, age, sex):
    self.name = name
    self.age = age
    self.sex = sex

areum = Human("아름",25,"여자")
print(areum.sex) #.name / . age / .sex

 

del 사용

class Human:
  def __init__(self, name, age, sex):
    self.name = name
    self.age = age
    self.sex = sex

  def who(self):
    print("이름: {} 나이: {} 성별: {}".format(self.name, self.age, self.sex) )
  
  def setinfo(self, name, age, sex):
    self.name = name
    self.age = age
    self.sex = sex

  def __del__(self):
    print("나의 죽음을 알리지 마라 ")

areum=Human("아름", 25, "여자")
del(areum)

 

class stock:
  def __init__(self, name, code):
    self.name = name
    self.code = code

  def set_name(self, name):
    self.name=name

  def set_code(self, code):
    self.code=code

  def get_name(self):
    return self.name
  
  def get_code(self):
    return self.code

 

-set은 클래스의 속성을 설정하는 역할, 객체의 속성을 외부에서 변경

-get은 객체의 속성을 가져오는 역할

import random

class account:
  def __init__(self, name, balance):
    self.name = name
    self.balance = balance
    self.bank = "SC은행"
    num1 = random.randint(0,999)
    num2 = random.randint(0,99)
    num3 = random.randint(0,999999)

    num1 = str(num1).zfill(3)
    num2 = str(num2).zfill(2)
    num3 = str(num3).zfill(6)
    self.account_number = num1 + '-' + num2 + '-' + num3

 

-.zfill : 문자열의 왼쪽에 0을 추구하여 문자열의 길이를 지정된 길이로 맞춤

-random : 랜덤 숫자를 생성 

-random.randint(a,b) : a부터 b 사이의 랜덤 숫자 생성

 


주제 생각하기

  • 인구가 줄어들면, 어느 분야의 소비가 줄어들까?
  • 교통비가 오르면 그와 관련된 카드를 많이 발급할까? -> 고객 행동 분석?