시각화 / 코드카타 / 파이썬 / 판다스 / 과제
시각화
.pyplot : 2차원 데이터 시각화
-color, linestyle, marker 설정 가능
-범례 : legend()
-축 이름 설정 : set_xlabel, set_ylabel
-제목 설정 : set_title
-텍스트(위치, 위치, 텍스트, fontsize)
- line plot : 연속형, 변화와 추이를 나타낼 때 사용 (plt.plot)
- bar plot : 범주형 데이터에 사용하며 카테고리별로 분석할 때 사용 (plt.bar)
- histogram :연속형 데이터에 사용하여 분포, 빈도, 패턴을 분석할 때 사용 (plt.hist)
- pie chart : 범주형 데이터에 사용하며 상대적 비율을 표현할 때 사용 (plt.pie)
- box plot : 연속형, 중앙값, 사분위수, 최솟값, 최대값 이상치를 나타낼 때 사용 (plt.boxplot)
- scatter plot : 두 변수 간 관계, 군집, 이상치를 나타낼 때 사용 (plt.scatter)
SQL 코드카타
이름이 없는 동물의 아이디
동물 보호소에 들어온 동물 중, 이름이 없는 채로 들어온 동물의 ID를 조회하는 SQL문 작성
ID는 오름차순 정렬
- 이름이 없다 -> is null
- 정렬 : order by
SELECT animal_id
from animal_ins
where name is null
order by animal_id asc;
Immediate Food Delivery 2
즉시/전체 비율을 구하고 2번째 자리에서 반올림할 것
첫 주몬인 고객이 가장 빠르게 받을 때
- 반올림 -> round
- 즉시 -> sum()
- case when 사용
- 전체 -> count()
- 첫 주문인 고객 -> where 서브쿼리
#반올림
#즉시/전체 비율
select round(sum(case when order_date = customer_pref_delivery_date then 1 else 0 end) * 100 /count(distinct customer_id),2) as immediate_percentage
from delivery
#첫주문 조건
where (customer_id, order_date) in (
select customer_id, min(order_date)
from delivery
group by 1
);
Employee Salaries
봉급이 2000달러보다 크고 10개월 이하로 일한 직원
- ~보다 크다 -> >=
- 그리고 -> and
- 적게 일한 -> <
select name
from employee
where salary >= 2000 and months < 10
파이썬 코드카타
시저암호
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식
"AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"
공백은 아무리 밀어도 공백
소문자, 대문자, 공백으로만 이루어짐
- for문 사용
- 대문자일 경우/소문자일 경우 -> isupper/islower
- N만큼 밀어내기 () %26
def solution(s, n):
s = list(s)
#s에서 문자 꺼내기
for i in range(len(s)):
#대문자일 경우
if s[i].isupper():
#n만큼 밀어내기 -> 26으로 나누면 알 수 있음
s[i]=chr((ord(s[i])-ord('A')+ n)%26+ord('A'))
#소문자일 경우
elif s[i].islower():
#n만큼 밀어내기 -> 26으로 나누면 알 수 있음
s[i]=chr((ord(s[i])-ord('a')+ n)%26+ord('a'))
숫자 문자열과 영단
숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s
s가 의미하는 원래 숫자를 return 하도록 solution 함수
- 대응하는 영단어 -> dic
- for문 -> dic에서 문자 꺼내기
- 영단어의 idx는 정수 표현
- 해당 영단어의 idx를 replace -> 문자열 정
def solution(s):
#영단어 dic
dic = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
#dic에서 문자 꺼내기
for i in dic:
#영단어의 idx는 정수 표현
#해당 영단어의 idx를 replace -> 문자열을 정수
if i in s:
idx = str(dic.index(i))
s = s.replace(i,idx)
answer = int(s)
return answer
파이썬
- 예외
try: 실행 코드
except: 예외가 발생했을 때 수행할 코드
else: 예외가 발생하지 않았을 때 수행할 코드
finally: 예외 발생 여부와 상관없이 항상 수행할 코드
- enumerate()
인덱스와 원소로 이루어진 튜플을 만들어줌
- 슬라이싱 [] : [시작값:마지막값:간격]
음수를 입력하면 역순으로 접근
판다스
- Series
1차원 배열, 인덱스 사용 가능, 데이터 타입을 가진다.
dtype()으로 데이터 타입을 바꿀 수 있음
index는 0부터 순차적으로 부여
index 지정 가능
s = pd.Series(['마케팅','경영','개발','기획','인사'],index=['a','b','c','d','e'])
s
s= pd.Series(['마케팅','경영','인사','개발','기획'])
s.index = list('abcde')
s
shape 데이터 갯수 확인
NaN 비어있는 결측치 데이터
s = pd.Series(['선화', '강호', np.nan, '소정', '우영'])
s
s.isnull() #NaN값을 찾는 함수
s.isna()
s[s.isnull()] #위치 알려줌
s[s.isna()]
s.notnull() #NaN값이 아닌 값 찾기
s.notna()
s[s.notnull()]
추출 값 범위 정하기
np.random.seed(20)
sample2 = pd.Series(np.random.randint(100, 200, size=(15,)))
sample2[(sample2 >= 130) & (sample2 <= 170)]
- DataFrame
2차원 데이터 구조, 행과 열로 구성
열 이름 지정 가능
pd.DataFrame([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]], columns=['가', '나', '다'])
T는 행과 열을 바꿈
data = {
'name': ['Kim', 'Lee', 'Park'],
'age': [24, 27, 34],
'children': [2, 1, 3]
}
df = pd.DataFrame(data)
df
df.index
df.columns
df.values
df.dtypes
df.T #행,열 바꿈
inplace : rename, drop 등의 메서드를 사용할 때 변경 값을 저장할 때 사용
inplace = False : 저장안함
inplace = True : 저장함
df.index = list('abc')
df
df['name']
type(df['name'])
df[['name', 'children']]
df.rename(columns={'name': '이름'})
df.rename(columns={'name': '이름'}, inplace=True)
df
과제
Q1. 날짜 전처리
- to_datetime
- format 사용 19-02-01 => %y-%m-%d
Q2. groupby로 통계량 집계 : 요일별 푸시 회수의 평균과 중간값
- 평균 mean
- 중간값 median
- df 지정
Q3. Bar chart 시각화 : 요일별 평균 시각화
- 위에 데이터 사용
- bar chart -> plt.bar
- x축 이름 -> plt.xlabel
- df랑 push_count_by_dow의 길이가 다르기 때문에 둘 중 하나만 써야함 -> push_count_by_dow
- reset_index 사용 : 설정 인덱스를 제거
Q4. 아웃라이어 제거
- Z 스코어? 평균에서 벗어난 표준편차의 수
- 평균 : mean()
- 표준편차 : std()
- 이상치 확인 (df-mean) > threshold
- mean하고 std의 이상치 집계 : sum().sum()
- 제거 : drop()
주제 생각해보기
- 금융 시장의 동향 및 트렌드 분석 -> 전망 예측
- 금융 서비스 접근이 어려운 지역 또는 계층 -> 개선 -> 금융 확장? 포함?
- 예산 우선순위 정하기? 이런것도 되려나
감기걸려서 그런지 뭔가 집중이 잘됐다.(?) 오늘 집 근처에 ADsP 시험장 자리 나서 신청했다.
사실 시험 보는게 맞는지 모르겠지만! 주말에 강의가 주어진다고 하니까 주말을 이용해서 공부해봐야지!