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()[0for 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

+ Recent posts