본문 바로가기

IT To do and To was

22년 1월 7일_데이터 예측에 따른 연산 및 머신러닝 기초 중 기초

728x90
반응형

금요일[와 벌써 금요일이라고..? 이번 주가 어떻게 지나간거지..]

 

1. 라이브러리

2. 코드

3. 후기

 

1. 라이브러리

pandas -> 머신러닝 활용여부를 판단 = 데이터를 정제하는 역할

텐서플로도 머신러닝에 활용되는 것이지만 다른 라이브러리와 같이 import해서 사용하는 것, ..

 

2. 코드

import numpy as np

a = numpy.random.randint(1, 10, (2, 3))
b = np.random.randint(1, 10, (2, 3))

print(a)
print(b)
print( '-' *10)

print(a+b)
print('-' * 10)

print(a-b)
print('-' * 10)

print(a*b)
print('-' * 10)

print(a / b)
print('-' * 10)

print(a * 5)
print('-' * 10)

print(a > b)
[[7 8 6]
 [8 1 5]]
[[3 8 5]
 [1 1 3]]
----------
[[10 16 11]
 [ 9  2  8]]
----------
[[4 0 1]
 [7 0 2]]
----------
[[21 64 30]
 [ 8  1 15]]
----------
[[2.33333333 1.         1.2       ]
 [8.         1.         1.66666667]]
----------
[[35 40 30]
 [40  5 25]]
----------
[[ True False  True]
 [ True False  True]]
In [11]:
arr = np.array(['ba','ch','ap'])

print(np.sort(arr)) #정렬
['ap' 'ba' 'ch']
In [15]:
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]])

print(arr)
print('-' * 20)

print(arr.mean())  #평균
print(arr.sum()) #더하기
print(arr.std()) #편차
print(arr.var())
print(arr.min()) #최소값
print(arr.max()) #최대값
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]
 [13 14 15]
 [16 17 18]]
--------------------
9.5
171
5.188127472091127
26.916666666666668
1
18
In [19]:
# sqrt 제곱근 exp지수함수

arr = np.arange(10)

print(arr)

print(np.sqrt(arr))
print(np.exp(arr))
[0 1 2 3 4 5 6 7 8 9]
[0.         1.         1.41421356 1.73205081 2.         2.23606798
 2.44948974 2.64575131 2.82842712 3.        ]
[1.00000000e+00 2.71828183e+00 7.38905610e+00 2.00855369e+01
 5.45981500e+01 1.48413159e+02 4.03428793e+02 1.09663316e+03
 2.98095799e+03 8.10308393e+03]
In [23]:
a = np.random.randint(0, 10, (2, 3))
print(a)
np.savetxt("./data/score.csv", a)                     
[[3 7 7]
 [1 5 2]]
#판다스 시작
import pandas as pd
In [95]:
age = pd.Series([24,36,None,67,89,45,234,7,5,23]) #시리즈
score = pd.Series([2,6,8,0,36,None,609,67,48,96])
salary = pd.Series([2,3,4,5,None,7,8,9,6,8])
print(age[0])

print(age)
print(score)
print(salary)
24.0
0     24.0
1     36.0
2      NaN
3     67.0
4     89.0
5     45.0
6    234.0
7      7.0
8      5.0
9     23.0
dtype: float64
0      2.0
1      6.0
2      8.0
3      0.0
4     36.0
5      NaN
6    609.0
7     67.0
8     48.0
9     96.0
dtype: float64
0    2.0
1    3.0
2    4.0
3    5.0
4    NaN
5    7.0
6    8.0
7    9.0
8    6.0
9    8.0
dtype: float64
In [ ]:
import pandas as pd

a = [1, 7, 2]

# 레이블 생성
myvar = pd.Series(a, index = ["x", "y", "z"])

print(myvar) #레이블로 접근
print(myvar["y"])
In [36]:
#pandas = DataFrame

df = pd.DataFrame({'age' : age,
                   'score' : score,
                   'salay' : salary})
# print(df)
df
df.head() #앞에 5개만 노출
df.tail() #뒤에 5개만 노출 함수안에 숫자를 넣으면 그 숫자만큼 행이 노출됨
Out[36]:
agescoresalay56789
45 27 7
234 609 8
7 67 9
5 48 6
23 96 8
In [42]:
df.loc[0] #행 인덱스가 나옴
Out[42]:
age      24
score     2
salay     2
Name: 0, dtype: int64
In [41]:
df.index 
df.columns
df.values
Out[41]:
array([[ 24,   2,   2],
       [ 36,   6,   3],
       [ 23,   8,   4],
       [ 67,   0,   5],
       [ 89,  36,   6],
       [ 45,  27,   7],
       [234, 609,   8],
       [  7,  67,   9],
       [  5,  48,   6],
       [ 23,  96,   8]], dtype=int64)
In [45]:
df.describe() #요약정보 확인 -> 많이 쓰인다고 함
Out[45]:
agescoresalaycountmeanstdmin25%50%75%max
10.000000 10.000000 10.000000
55.300000 89.900000 5.800000
67.998448 185.052215 2.299758
5.000000 0.000000 2.000000
23.000000 6.500000 4.250000
30.000000 31.500000 6.000000
61.500000 62.250000 7.750000
234.000000 609.000000 9.000000
In [48]:
#데이터 전치
df.T
Out[48]:
0123456789agescoresalay
24 36 23 67 89 45 234 7 5 23
2 6 8 0 36 27 609 67 48 96
2 3 4 5 6 7 8 9 6 8
In [49]:
df.sort_values(by='score') #score기준으로 오름 차순 정렬 훈련이 잘 됐는지 검증하는데 머신러닝 할 때는 정렬되어있는게 좋은 건 아니라고 함
Out[49]:
agescoresalay3012548796
67 0 5
24 2 2
36 6 3
23 8 4
45 27 7
89 36 6
5 48 6
7 67 9
23 96 8
234 609 8
In [51]:
df.sort_values(by='age', ascending=False) #올림차순을 false로 하여 내림차순으로 변경 != ture 일 경우 올림차순(default)
Out[51]:
agescoresalay6435102978
234 609 8
89 36 6
67 0 5
45 27 7
36 6 3
24 2 2
23 8 4
23 96 8
7 67 9
5 48 6
In [53]:
df.info() #데이터의 전반적인 정보를 확인
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   age     10 non-null     int64
 1   score   10 non-null     int64
 2   salay   10 non-null     int64
dtypes: int64(3)
memory usage: 368.0 bytes
In [63]:
#데이터 열 추가
df['class'] = pd.Series([1,1,2,2,3,3,4,4,3,2])

df.head()
# 데이터 열 삭제
df.drop(columns=['class']) 
df.drop(columns=['class'], inplace=True) 
In [72]:
df.drop(labels=[0,1], axis = 0 ) #삭제된 데이터 프레임이 실제로 지워지기 위함이라면 inplace = True를 기재해야함
Out[72]:
agescoresalay23456789
23 8 4
67 0 5
89 36 6
45 27 7
234 609 8
7 67 9
5 48 6
23 96 8
In [96]:
stu_class = pd.Categorical([1,2,3,None,1,2,3,4,1,3])
gender = pd.Categorical(['F', None,'F','F','F','F','F','F','M','M'])

df = pd.DataFrame({'age' : age,
                   'score' : score,
                   'salay' : salary,
                    'stu_class' : stu_class,
                  'gender' : gender})
# Series 타입으로 추출
df.gender
df[df.score > 3.0 ]
Out[96]:
agescoresalaystu_classgender1246789
36.0 6.0 3.0 2 NaN
NaN 8.0 4.0 3 F
89.0 36.0 NaN 1 F
234.0 609.0 8.0 3 F
7.0 67.0 9.0 4 F
5.0 48.0 6.0 1 M
23.0 96.0 8.0 3 M
In [91]:
cctv = pd.read_csv("data/cctv_in_seoul.csv", encoding = "utf-8")

cctv.head()
cctv.tail()
cctv.describe()
Out[91]:
소계2013년도 이전2014년2015년2016년countmeanstdmin25%50%75%max
25.000000 25.000000 25.000000 25.000000 25.000000
1179.080000 764.760000 159.480000 205.200000 385.880000
556.728983 415.510257 104.132976 137.877059 182.479981
485.000000 238.000000 21.000000 30.000000 81.000000
748.000000 464.000000 78.000000 103.000000 292.000000
1015.000000 573.000000 142.000000 184.000000 377.000000
1496.000000 1070.000000 218.000000 269.000000 467.000000
2780.000000 1843.000000 430.000000 584.000000 932.000000
In [93]:
popseoul = pd.read_excel("data/population_in_seoul.xls")

popseoul.head()
popseoul.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 29 entries, 0 to 28
Data columns (total 14 columns):
 #   Column    Non-Null Count  Dtype 
---  ------    --------------  ----- 
 0   기간        28 non-null     object
 1   자치구       28 non-null     object
 2   세대        28 non-null     object
 3   인구        28 non-null     object
 4   인구.1      28 non-null     object
 5   인구.2      28 non-null     object
 6   인구.3      28 non-null     object
 7   인구.4      28 non-null     object
 8   인구.5      28 non-null     object
 9   인구.6      28 non-null     object
 10  인구.7      28 non-null     object
 11  인구.8      28 non-null     object
 12  세대당인구     28 non-null     object
 13  65세이상고령자  28 non-null     object
dtypes: object(14)
memory usage: 3.3+ KB
In [94]:
df = pd.read_json('data/score.json')

df
Out[94]:
idnamemathphysicschemistry012
A001 Tom 60 66 61
A002 James 89 76 51
A003 Jenny 79 90 78
In [208]:
#결측치 - 값이 들어가 있지 않는 것, 조인으로 엑셀파일을 같이 함칠수 있음 = 행제거 및 값을 채워넣음 or  열 자체를 삭제

df = pd.DataFrame({'age' : age,
                   'score' : score,
                   'salay' : salary,
                    'stu_class' : stu_class,
                  'gender' : gender})

df_new = df.copy() #별도로 만들어버리는 것
In [202]:
df_new
#isno = None만 찾아주는 것
pd.isna(df_new)
Out[202]:
agescoresalaystu_classgender0123456789
False False False False False
False False False False True
True False False False False
False False False True False
False False True False False
False True False False False
False False False False False
False False False False False
False False False False False
False False False False False
In [203]:
# 열별로 결측치 확인
df_new.isnull().sum()
Out[203]:
age          1
score        1
salay        1
stu_class    1
gender       1
dtype: int64
In [204]:
#결측지 제거
df_new = df_new.dropna()
df_new #제거된 table만보임

df_hi = df.copy()
In [133]:
x = df_hi["age"].mean()
df_hi["age"] = df_hi["age"].fillna(value=x)


df_hi
Out[133]:
agescoresalaystu_classgender0123456789
24.0 2.0 2.0 1 F
36.0 6.0 3.0 2 NaN
30.0 8.0 4.0 3 F
67.0 0.0 5.0 NaN F
89.0 36.0 NaN 1 F
45.0 NaN 7.0 2 F
234.0 609.0 8.0 3 F
7.0 67.0 9.0 4 F
5.0 48.0 6.0 1 M
23.0 96.0 8.0 3 M
In [143]:
df['stu_class'].isin([1,2]) #3,4안보이게
Out[143]:
0    True
1    True
4    True
5    True
8    True
Name: stu_class, dtype: bool
In [209]:
# df = df[df['stu_class'].isin([1,2])]
df_i = df.copy()
In [213]:
#2반을 3반으로change
# df_i = df(df["stu_class"]) == 2
# df_i.loc[:,'class'] = 3
# df_i

for a in df_i.index :
    if df_i.loc[a,'stu_class'] == 2 :
        df_i.loc[a, 'stu_class'] = 3
        
df_i        
Out[213]:
agescoresalaystu_classgender0123456789
24.0 2.0 2.0 1 F
36.0 6.0 3.0 3 NaN
NaN 8.0 4.0 3 F
67.0 0.0 5.0 NaN F
89.0 36.0 NaN 1 F
45.0 NaN 7.0 3 F
234.0 609.0 8.0 3 F
7.0 67.0 9.0 4 F
5.0 48.0 6.0 1 M
23.0 96.0 8.0 3 M
In [159]:
fruit = pd.DataFrame(
        {'Num' : [12, 23, 33, 34, 77],
         'Fruit' : ['ap','ba','ch','le','pe']})
grade = pd.DataFrame(
        {'Num' : [12, 33, 55],
         'Grade' : ['A','B','C']})
prince = pd.DataFrame(
        {'No' : [12,33, 55],
         'Grade' : [134, 745, 456]})

# print(fruit)
# print(grade)
# print(prince)
In [161]:
df = pd.concat([fruit, grade, prince])
df
Out[161]:
NumFruitGradeNo01234012012
12.0 ap NaN NaN
23.0 ba NaN NaN
33.0 ch NaN NaN
34.0 le NaN NaN
77.0 pe NaN NaN
12.0 NaN A NaN
33.0 NaN B NaN
55.0 NaN C NaN
NaN NaN 134 12.0
NaN NaN 745 33.0
NaN NaN 456 55.0
In [163]:
#inner join 같은 키의 값이 노출됨
df = pd.merge(fruit, grade, on ='Num')
df
Out[163]:
NumFruitGrade01
12 ap A
33 ch B
In [171]:
#left join/ Right join/ outer join
df = pd.merge(fruit, grade, on = 'Num', how = 'left')
df
print(df.isnull().sum())
df = pd.merge(fruit, grade, on = 'Num', how = 'right')
df
df = pd.merge(fruit, grade, on = 'Num', how = 'outer')
df
Num      0
Fruit    0
Grade    3
dtype: int64
Out[171]:
NumFruitGrade012345
12 ap A
23 ba NaN
33 ch B
34 le NaN
77 pe NaN
55 NaN C
In [174]:
#카럼이름이 다를 경우 기재할 때 _how 의 left는 왼쪽의 있는 벤다이어그램 +겹치는 거를 노출시킴
df = pd.merge(fruit, prince, left_on = 'Num', right_on='No', how = 'left')
df
Out[174]:
NumFruitNoGrade01234
12 ap 12.0 134.0
23 ba NaN NaN
33 ch 33.0 745.0
34 le NaN NaN
77 pe NaN NaN
In [226]:
#범주형 데이터 /더미데이터(범주형 데이터) /비닝 -구간을 나눠줌, 
df = pd.read_csv('data/dirtydata.csv')
pd.get_dummies(df['Duration'])
Out[226]:
304560450012345678910111213141516171819202122232425262728293031
0 0 1 0
0 0 1 0
0 0 1 0
0 1 0 0
0 1 0 0
0 0 1 0
0 0 1 0
0 0 0 1
1 0 0 0
0 0 1 0
0 0 1 0
0 0 1 0
0 0 1 0
0 0 1 0
0 0 1 0
0 0 1 0
0 0 1 0
0 0 1 0
0 1 0 0
0 0 1 0
0 1 0 0
0 0 1 0
0 1 0 0
0 0 1 0
0 1 0 0
0 0 1 0
0 0 1 0
0 0 1 0
0 0 1 0
0 0 1 0
0 0 1 0
0 0 1 0
In [251]:
bins = [df['Maxpulse'].min(), 110, df['Maxpulse'].max()]
#bins = [100, 110, 120, 130]
#위의 값을 아래의 bins처럼 반환한값.
df['Maxp'] = pd.cut(x =df['Maxpulse'], bins=bins, labels=['Low', 'High'])  #다시 열을 만들어서 labels을 추가한 값 
#cut이라는 메소드의 키값을 넣은것
df
# bins = [df['Calories'].min(), 300, df['Calories'].max()]
# df['Calories'] = pd.cut(x =df['Calories'], bins=bins, labels=[0,1])
# df
Out[251]:
DurationDatePulseMaxpulseCaloriesMaxpCalor012345678910111213141516171819202122232425262728293031
60 '2020/12/01' 110 130 1 High NaN
60 '2020/12/02' 117 145 1 High NaN
60 '2020/12/03' 103 135 1 High NaN
45 '2020/12/04' 109 175 0 High NaN
45 '2020/12/05' 117 148 1 High NaN
60 '2020/12/06' 102 127 0 High NaN
60 '2020/12/07' 110 136 1 High NaN
450 '2020/12/08' 104 134 0 High NaN
30 '2020/12/09' 109 133 NaN High NaN
60 '2020/12/10' 98 124 0 High NaN
60 '2020/12/11' 103 147 1 High NaN
60 '2020/12/12' 100 120 0 High NaN
60 '2020/12/12' 100 120 0 High NaN
60 '2020/12/13' 106 128 1 High NaN
60 '2020/12/14' 104 132 1 High NaN
60 '2020/12/15' 98 123 0 High NaN
60 '2020/12/16' 98 120 0 High NaN
60 '2020/12/17' 100 120 0 High NaN
45 '2020/12/18' 90 112 NaN High NaN
60 '2020/12/19' 103 123 1 High NaN
45 '2020/12/20' 97 125 0 High NaN
60 '2020/12/21' 108 131 1 High NaN
45 NaN 100 119 0 High NaN
60 '2020/12/23' 130 101 0 NaN NaN
45 '2020/12/24' 105 132 0 High NaN
60 '2020/12/25' 102 126 1 High NaN
60 20201226 100 120 0 High NaN
60 '2020/12/27' 92 118 0 High NaN
60 '2020/12/28' 103 132 NaN High NaN
60 '2020/12/29' 100 132 0 High NaN
60 '2020/12/30' 102 129 1 High NaN
60 '2020/12/31' 92 115 0 High NaN
In [ ]:
 
In [252]:
#csv를 어떻게 pandas에 활용할 수 있는가?
df = pd.read_csv('data/ds6/survey_person.csv', encoding='utf-8')
print(df)
tt = pd.read_csv('data/ds6/survey_site.csv', encoding='utf-8')
print(tt)
cf = pd.read_csv('data/ds6/survey_visited.csv', encoding='utf-8')
print(cf)
dd = pd.read_csv('data/ds6/survey_survey.csv', encoding='utf-8')
dd
# df.isnull().sum()

3. 후기

점점 새로운 걸 배우는게 늘어가면서 배운것을 활용하는 것보다 구글링 하는게 더 많아지고 광대한 정보에 머리가 살짝씩 아파온다.. 주말은 기력을 좀 충전해야할 거같다.

 

tomorrow with list

 

. 준한테 할 말 딱 정해보기{쓰읍..할 수 있을까..}

. 즐겁게 시간 보내기

. 충분한 휴식 취하기

728x90
반응형