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 154 155 156 157 158 159 160 | # -*- coding: utf-8 -*- """Day 08_bitly_Json_TimeSeries.ipynb Automatically generated by Colaboratory. Original file is located at """ from google.colab import drive drive.mount('/gdrive') PATH = "/gdrive/My Drive/Colab Notebooks/resources/" # %matplotlib inline import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import pandas as pd import seaborn as sns import json import time from scipy.stats import norm, multivariate_normal # installing packages for interactive graphs import ipywidgets as widgets from IPython.display import display from ipywidgets import interact, interactive, fixed, interact_manual, IntSlider @interact( x =IntSlider(0,0,12) ) def test_model( x ): print(x) fr = open( PATH + "bitly_usagov/example.txt" ) fr.readlines() ## json.loads 은 제이슨 형태 문자열을 딕셔너리로. records = [ json.loads(line) for line in open(PATH + "bitly_usagov/example.txt") ] ## 리스트의 한 요소는 딕셔너리 ## 유용한 스킬 , records에 있는 rec에 'tz' 키가 있다면 읽어라 timezones = [ rec['tz'] for rec in records if 'tz' in rec ] len(timezones) #3440 # pd.Series(timezones).value_counts() ## 키를 타임존 이름으로, 벨류를 등장횟수로 해서 딕셔너리로 만들어주는 코드 def get_counts(seq): counts = {} for s in seq: if s in counts: counts[s] += 1 else: counts[s] = 1 return counts ## 도시 이름 세기 counts = get_counts(timezones) ## 특정 도시 등장횟수 검색 counts ## 딕셔너리 값기준 정렬. ## 키와 벨류의 위치를 바꿧다 vk = [(count, tz) for tz, count in counts.items()] vk.sort( reverse = True ) ############################################################# ######################### 비교 구문 ######################## ############################################################# ## 리스트안에 튜플이 있을때, 튜플의 첫번째 요소를 기준으로 정렬 된다. vk = [(count, tz) for tz, count in counts.items()] vk.sort(reverse = True) ## 상위 10개 출력 vk[:10] from collections import Counter counts = Counter(timezones) counts.most_common(10) ## 딕셔너리 하나 => 행 하나 , 키 => 컬럼, 행 인덱스 => 딕셔너리 인덱스 frame = pd.DataFrame(records) frame.info() frame[frame['tz'].isnull()].shape cleantz = frame['tz'].fillna('missing') sum(cleantz.isna()) cleantz.value_counts() cleantz[cleantz == ''] = 'Unknown' tz_counts = cleantz.value_counts() tz_counts[:10] ## 이름이 겹치게 보인다 tz_counts[:10].plot() # 긴 이름도 잘 보이게 할 수 있다. tz_counts[:10].plot(kind = 'barh') result = pd.Series([ x.split()[0] for x in frame.a.dropna() ] ) ## 상위 10개 추출 result.value_counts()[:10] cframe = frame[frame.a.notnull()] cframe[:2] ## 각 단어에서 windows 라는 단어가 있는지 없는지 알고 싶다. # cframe.a.str.contains("Windows") cframe.a.str.match(".+Windows.+") ## Where는 씨리즈 안에 있는 값을 갯수에 맞게 바꿀때 편리하다 os = np.where(cframe.a.str.match(".+Windows.+"), "Windows", "Not Windows") os.shape , cframe.shape ## cframe을 tz에 따라 그룹화 하고 , window와 not windows로도 구분한다. 그룹화된 인덱스가 그대로 os에서도 적용 되서 2개로 또 구분할 수 있다. ## unhashable type: 'numpy.ndarray' => 대괄호로 안묶었다!! hashable 어쩌구... cframe.groupby(['tz', os]).count()[:2] """# 구분""" import seaborn as sns tips = sns.load_dataset('tips') tips['size'].value_counts() ## 사이즈 별로 몇건이 있는지 궁금할때, ## 30번 이상의 주문이 있는 인원의 건수만 보고 싶을때 ## 건수로 자동으로 정렬 tips['size'].value_counts() ## 자동 정렬 X tips.groupby('size').size() tips['size'].count() ## 그룹 각각에 대해서 적용되는 함수 ## 그룹 사이즈가 30미만인 행은 제거. tips_filltered = tips.groupby('size').filter( lambda x : ( x['size'].count() >= 30 )) tips_filltered.shape tips_filltered['size'].value_counts() | cs |
'딥러닝 모델 설계 > Machine Learning' 카테고리의 다른 글
Day 09_Advanced Group_Agg_Apply (0) | 2019.07.12 |
---|---|
Day 09_TimeSeries (0) | 2019.07.12 |
Day 08. Movielens_Analysis (0) | 2019.07.11 |
Day 08.Baby Names Analysis_cumsum_pivot (0) | 2019.07.11 |
Day 08. MapFunc_OneHotEncode_Join (0) | 2019.07.11 |