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:10, 0: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 , [0, 1, 2, 3, 10, 11 ]] ## 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 |