1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# -*- coding: utf-8 -*-
"""Day 05_Melt_pivot.ipynb
Automatically generated by Colaboratory.
Original file is located at
"""
 
from google.colab import drive
drive.mount('/gdrive')
 
# /gdrive/My Drive/Colab Notebooks/resources/ <==  My resource path
 
# %matplotlib inline
 
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import time
 
visited = pd.read_csv("/gdrive/My Drive/Colab Notebooks/resources/data/survey_visited.csv")
survey = pd.read_csv("/gdrive/My Drive/Colab Notebooks/resources/data/survey_survey.csv")
 
## 컬럼의 이름은 다르지만 두 데이터 프레임의 각 컬럼중 같은 의미의 컬럼이 있을때 병합
## 곱 병합이기 때문에 NAN이 발생한다.
 
 
visited.merge( survey, left_on = 'ident', right_on = 'taken' )
 
pd.Series( {"goat" : 4 , "amoeba" : np.nan} )
gapminder = pd.read_csv("/gdrive/My Drive/Colab Notebooks/resources/data/survey_visited.csv" , sep = ",")
 
gapminder
life_exp = gapminder.groupby( [ 'year'])['lifeExp'].mean()
life_exp
 
"""## 누락값이 생기는 경우 =>
잘못된 병합.
타임시리즈 참조
"""
 
ebola = pd.read_csv("/gdrive/My Drive/Colab Notebooks/resources/data/country_timeseries.csv")
 
## 널값 체크, 상당히 많다.
ebola.count()
num_missing = ebola.shape[0- ebola.count()
num_missing
 
# 한 열에 대해서 Null의 갯수를 체크.
np.count_nonzero(ebola['Cases_Guinea'].isnull()) 
 
ebola.Cases_Guinea.value_counts(dropna = False)
 
## NA값 대체
ebola.fillna(0).iloc[ 0:100:4 ]
 
ebola.fillna( method = 'ffill' )
 
## 유일하게 한 행에 NA가 하나도 없는 행만 남게 된다.
 
ebola.shape
ebola_dropna = ebola.dropna()
ebola_dropna
 
ebola.columns
ebola['Cases_multiple'= ebola['Cases_Guinea'+ ebola['Cases_Liberia'+ ebola['Cases_SierraLeone']
 
ebola_subset = ebola.loc[ : , ["Cases_Guinea""Cases_Liberia""Cases_SierraLeone""Cases_multiple"] ]
 
## NA는 포함되지 않았다.
ebola.Cases_Guinea.sum(skipna = False)
 
pew = pd.read_csv("/gdrive/My Drive/Colab Notebooks/resources/data/pew.csv")
pew.iloc[ : , 0 : 6]
 
"""Melt를 이용해 소득을 행으로 이동"""
 
pd.melt(pew, id_vars = 'religion' ) # 각 행을 녹여서 나열. 지정한 방향을 제외한 다른것들을 녹이기
 
# religion 컬럼을 기준으로 피보팅한 결과. 열에 있던 값을 행으로 변경
 
## variable 이름을 바꾸고 싶을때,
pew_long = pd.melt(pew , id_vars = 'religion', var_name = 'income' , value_name = "count")
pew_long
 
## 여러개의 컬름을 고정시켜서 데이터를 나타내기
 
bill = pd.read_csv("/gdrive/My Drive/Colab Notebooks/resources/data/billboard.csv")
 
## 컬럼의 이름이 값으로 갔다.
# pd.melt(bill)
 
##  필요로 하는 컬럼만 가져오자. 나머지는 variable과 value로 된다.
 
## 결과적으로 각 주차별 등수만 남게 된다.
pd.melt(bill, id_vars = ['year''artist''track''time''date.entered'], var_name = 'week', value_name = 'rating')
 
# => 곡명을 기준으로 각 주별 레이팅이 얼마인지 알기 편하다. 가령, 타임을 가지고 레이팅에 관계가 있을지 없을지 조사할 수 있다.
 
ebola.columns
ebola.iloc[ : 5 , [01231011 ]]
 
## Date와 Day를 고정하고 나머지를 풀어서 쓰자
ebola_long = pd.melt(ebola, id_vars=['Date''Day'])
ebola_long
 
# 각 날자별 value가 얼마나 늘어났는지 알 수 있다.
# 추세를 훨신 잘 반영해서 NaN을 채울 수 있다.
#
 
#열 이름을 분리해서 데이터 프레임에 추가
# variable에 _ 로 잘라서 오른쪽만 남기기.
 
variable_split =  ebola_long.variable.str.split("_")
variable_split # 두개의 리스트 요소를 가진 시리즈.
 
# 이 리스트 안에 있는 Cases를 추출
 
status_value  = variable_split.str.get(0)  # cases or death
country_value = variable_split.str.get(1)  # country name
 
status_value[ -5 : ]
 
## concat, split을 응용해서 에볼라 데이터를 Date Dat variable value status country.status country
##                                         날짜, ... Cases_국가명, 발병자수, Cases, 발병자 수, 국가명
 
weather = pd.read_csv("/gdrive/My Drive/Colab Notebooks/resources/data/weather.csv")
weather[:4]
 
## 모든 컬럼이 variable, 모든 데이터가 value로 들어간다  => 컬럼을 행으로!
weather_melt = pd.melt(weather, id_vars = ['id''year''month''element'], var_name = 'day', value_name = 'temp')
weather_melt
 
"""행 인덱스에다가 id와 year, month, day 를 넣고자 한다.
열에는 tmax 와 tmin을 각각 열로 삼고자 한다.
"""
 
# 열을 행으로!
weather_melt.pivot_table( index = ['id''year''month''day'] )
 
#element의 구성 요소인 tmax와 tmin이 열이 된다.
weather_melt.pivot_table( index = ['id''year''month''day'] , columns = 'element')
 
#각 셀에 temp를 넣는다
weather_t = weather_melt.pivot_table( index = ['id''year''month''day'] , columns = 'element', values = 'temp')
 
## melt와 피봇 테이블은 같이 쓰이는 경우가 잦다.
 
weather_t.reset_index()
 
 
cs


'딥러닝 모델 설계 > Machine Learning' 카테고리의 다른 글

Day 07_String_AggregationFuc  (0) 2019.07.10
Day 06_Visualization  (0) 2019.07.10
Day 5. Sort_String_Binomial_Distribution  (0) 2019.07.08
Day 4. Grouping, sorting, visualizing  (0) 2019.07.06
Day 4. Data Reconstruction  (0) 2019.07.06

+ Recent posts