import os
os.getcwd()
'C:\\Users\\hoon\\ADP'
import pandas as pd
bike_data = pd.read_csv("공공자전거 이용정보(월별)_21.01.csv", encoding="ANSI")
bike_data
대여일자 | 대여소번호 | 대여소명 | 대여구분코드 | 성별 | 연령대코드 | 이용건수 | 운동량 | 탄소량 | 이동거리(M) | 이용시간(분) | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2021-01 | 3 | 중랑센터 | 일일(회원) | M | AGE_003 | 2 | 47.68 | 0.40 | 1720.00 | 25 |
1 | 2021-01 | 3 | 중랑센터 | 정기 | M | AGE_003 | 11 | 578.98 | 2.87 | 12390.48 | 166 |
2 | 2021-01 | 3 | 중랑센터 | 정기 | M | AGE_004 | 1 | 81.65 | 0.53 | 2291.05 | 13 |
3 | 2021-01 | 5 | 상암센터 정비실 | 일일(회원) | \N | AGE_004 | 1 | 511.95 | 3.53 | 15209.58 | 47 |
4 | 2021-01 | 5 | 상암센터 정비실 | 일일(회원) | M | AGE_004 | 6 | 371.10 | 3.39 | 14642.60 | 134 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
68726 | 2021-01 | 9999 | 시스템관리팀 | 정기 | \N | AGE_002 | 1 | \N | \N | 0.00 | 4 |
68727 | 2021-01 | 9999 | 시스템관리팀 | 정기 | \N | AGE_004 | 1 | 35.86 | 0.32 | 1392.98 | 8 |
68728 | 2021-01 | 9999 | 시스템관리팀 | 정기 | NaN | AGE_003 | 1 | 0.00 | 0.00 | 0.00 | 1 |
68729 | 2021-01 | 9999 | 시스템관리팀 | 정기 | F | AGE_005 | 1 | 246.57 | 3.01 | 12972.02 | 83 |
68730 | 2021-01 | 9999 | 시스템관리팀 | 정기 | M | AGE_004 | 3 | 79.00 | 0.60 | 2606.34 | 93 |
68731 rows × 11 columns
bike_data.isnull().head()
대여일자 | 대여소번호 | 대여소명 | 대여구분코드 | 성별 | 연령대코드 | 이용건수 | 운동량 | 탄소량 | 이동거리(M) | 이용시간(분) | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | False | False | False | False | False | False | False | False | False | False | False |
1 | False | False | False | False | False | False | False | False | False | False | False |
2 | False | False | False | False | False | False | False | False | False | False | False |
3 | False | False | False | False | False | False | False | False | False | False | False |
4 | False | False | False | False | False | False | False | False | False | False | False |
bike_data.isnull().sum()
대여일자 0 대여소번호 0 대여소명 0 대여구분코드 0 성별 8789 연령대코드 0 이용건수 0 운동량 0 탄소량 0 이동거리(M) 0 이용시간(분) 0 dtype: int64
bike_data.describe()
대여소번호 | 이용건수 | 이동거리(M) | 이용시간(분) | |
---|---|---|---|---|
count | 68731.000000 | 68731.000000 | 6.873100e+04 | 68731.000000 |
mean | 1465.989335 | 11.532002 | 3.203742e+04 | 296.821260 |
std | 926.816780 | 19.273029 | 5.464598e+04 | 484.693005 |
min | 3.000000 | 1.000000 | 0.000000e+00 | 0.000000 |
25% | 675.000000 | 2.000000 | 4.229060e+03 | 46.000000 |
50% | 1342.000000 | 4.000000 | 1.326039e+04 | 128.000000 |
75% | 2173.000000 | 13.000000 | 3.684233e+04 | 342.000000 |
max | 9999.000000 | 361.000000 | 1.974164e+06 | 18097.000000 |
bike_data.columns
Index(['대여일자', '대여소번호', '대여소명', '대여구분코드', '성별', '연령대코드', '이용건수', '운동량', '탄소량', '이동거리(M)', '이용시간(분)'], dtype='object')
bike_data.head()
대여일자 | 대여소번호 | 대여소명 | 대여구분코드 | 성별 | 연령대코드 | 이용건수 | 운동량 | 탄소량 | 이동거리(M) | 이용시간(분) | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2021-01 | 3 | 중랑센터 | 일일(회원) | M | AGE_003 | 2 | 47.68 | 0.40 | 1720.00 | 25 |
1 | 2021-01 | 3 | 중랑센터 | 정기 | M | AGE_003 | 11 | 578.98 | 2.87 | 12390.48 | 166 |
2 | 2021-01 | 3 | 중랑센터 | 정기 | M | AGE_004 | 1 | 81.65 | 0.53 | 2291.05 | 13 |
3 | 2021-01 | 5 | 상암센터 정비실 | 일일(회원) | \N | AGE_004 | 1 | 511.95 | 3.53 | 15209.58 | 47 |
4 | 2021-01 | 5 | 상암센터 정비실 | 일일(회원) | M | AGE_004 | 6 | 371.10 | 3.39 | 14642.60 | 134 |
bike_data.shape
(68731, 11)
bike_data.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 68731 entries, 0 to 68730 Data columns (total 11 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 대여일자 68731 non-null object 1 대여소번호 68731 non-null int64 2 대여소명 68731 non-null object 3 대여구분코드 68731 non-null object 4 성별 59942 non-null object 5 연령대코드 68731 non-null object 6 이용건수 68731 non-null int64 7 운동량 68731 non-null object 8 탄소량 68731 non-null object 9 이동거리(M) 68731 non-null float64 10 이용시간(분) 68731 non-null int64 dtypes: float64(1), int64(3), object(7) memory usage: 5.8+ MB
bike_data["대여구분코드"].unique()
array(['일일(회원)', '정기', '단체', '일일(비회원)', 'BIL_021'], dtype=object)
bike_data["대여구분코드"].value_counts()
정기 38981 일일(회원) 25762 단체 2378 일일(비회원) 1162 BIL_021 448 Name: 대여구분코드, dtype: int64
bike_data[bike_data["대여소명"]=="중랑센터"]
대여일자 | 대여소번호 | 대여소명 | 대여구분코드 | 성별 | 연령대코드 | 이용건수 | 운동량 | 탄소량 | 이동거리(M) | 이용시간(분) | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2021-01 | 3 | 중랑센터 | 일일(회원) | M | AGE_003 | 2 | 47.68 | 0.40 | 1720.00 | 25 |
1 | 2021-01 | 3 | 중랑센터 | 정기 | M | AGE_003 | 11 | 578.98 | 2.87 | 12390.48 | 166 |
2 | 2021-01 | 3 | 중랑센터 | 정기 | M | AGE_004 | 1 | 81.65 | 0.53 | 2291.05 | 13 |
bike_data[bike_data["성별"].isnull()]
대여일자 | 대여소번호 | 대여소명 | 대여구분코드 | 성별 | 연령대코드 | 이용건수 | 운동량 | 탄소량 | 이동거리(M) | 이용시간(분) | |
---|---|---|---|---|---|---|---|---|---|---|---|
23 | 2021-01 | 101 | 101. (구)합정동 주민센터 | 일일(회원) | NaN | AGE_002 | 1 | 251.63 | 2.11 | 9077.50 | 64 |
24 | 2021-01 | 101 | 101. (구)합정동 주민센터 | 일일(회원) | NaN | AGE_003 | 1 | 43.17 | 0.46 | 1982.06 | 30 |
35 | 2021-01 | 101 | 101. (구)합정동 주민센터 | 정기 | NaN | AGE_002 | 11 | 799.37 | 8.19 | 35251.45 | 284 |
57 | 2021-01 | 102 | 102. 망원역 1번출구 앞 | 일일(회원) | NaN | AGE_002 | 9 | 870.05 | 8.21 | 35380.06 | 441 |
58 | 2021-01 | 102 | 102. 망원역 1번출구 앞 | 일일(회원) | NaN | AGE_004 | 1 | 43.67 | 0.30 | 1282.19 | 13 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
68692 | 2021-01 | 3587 | 3587.우성식품 앞 | 정기 | NaN | AGE_002 | 5 | 426.34 | 2.78 | 11974.87 | 91 |
68693 | 2021-01 | 3587 | 3587.우성식품 앞 | 정기 | NaN | AGE_003 | 7 | 541.47 | 4.32 | 18618.84 | 157 |
68694 | 2021-01 | 3587 | 3587.우성식품 앞 | 정기 | NaN | AGE_004 | 2 | 771.85 | 5.32 | 22930.77 | 116 |
68714 | 2021-01 | 3588 | 3588.세종대학교(영실관) | 정기 | NaN | AGE_002 | 8 | 142.07 | 1.28 | 5491.81 | 49 |
68728 | 2021-01 | 9999 | 시스템관리팀 | 정기 | NaN | AGE_003 | 1 | 0.00 | 0.00 | 0.00 | 1 |
8789 rows × 11 columns
bike_data.loc[bike_data["성별"].isnull(), "성별" ] = "U"
bike_data[bike_data["성별"].isnull()]
대여일자 | 대여소번호 | 대여소명 | 대여구분코드 | 성별 | 연령대코드 | 이용건수 | 운동량 | 탄소량 | 이동거리(M) | 이용시간(분) |
---|
bike_data["성별"].value_counts()
\N 23279 M 19915 F 16721 U 8789 m 21 f 6 Name: 성별, dtype: int64
import numpy as np
bike_data.loc[bike_data["성별"] == "\\N", "성별"] == np.nan
3 False 5 False 6 False 7 False 11 False ... 68712 False 68713 False 68722 False 68726 False 68727 False Name: 성별, Length: 23279, dtype: bool
bike_data[bike_data["성별"] == "\\N"]
대여일자 | 대여소번호 | 대여소명 | 대여구분코드 | 성별 | 연령대코드 | 이용건수 | 운동량 | 탄소량 | 이동거리(M) | 이용시간(분) | |
---|---|---|---|---|---|---|---|---|---|---|---|
3 | 2021-01 | 5 | 상암센터 정비실 | 일일(회원) | \N | AGE_004 | 1 | 511.95 | 3.53 | 15209.58 | 47 |
5 | 2021-01 | 10 | 위트콤 | 단체 | \N | AGE_003 | 3 | 0.00 | 0.00 | 0.00 | 8 |
6 | 2021-01 | 10 | 위트콤 | 일일(비회원) | \N | AGE_008 | 1 | 0.00 | 0.00 | 0.00 | 168 |
7 | 2021-01 | 10 | 위트콤 | 일일(회원) | \N | AGE_005 | 1 | 0.00 | 0.00 | 0.00 | 52 |
11 | 2021-01 | 10 | 위트콤 | 정기 | \N | AGE_001 | 1 | \N | \N | 0.00 | 17 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
68712 | 2021-01 | 3588 | 3588.세종대학교(영실관) | 정기 | \N | AGE_004 | 1 | 372.37 | 3.12 | 13433.22 | 75 |
68713 | 2021-01 | 3588 | 3588.세종대학교(영실관) | 정기 | \N | AGE_005 | 3 | 103.55 | 0.93 | 4022.91 | 27 |
68722 | 2021-01 | 9999 | 시스템관리팀 | 단체 | \N | AGE_004 | 2 | 201.48 | 1.48 | 6360.00 | 83 |
68726 | 2021-01 | 9999 | 시스템관리팀 | 정기 | \N | AGE_002 | 1 | \N | \N | 0.00 | 4 |
68727 | 2021-01 | 9999 | 시스템관리팀 | 정기 | \N | AGE_004 | 1 | 35.86 | 0.32 | 1392.98 | 8 |
23279 rows × 11 columns
bike_data["성별"].value_counts()
\N 23279 M 19915 F 16721 U 8789 m 21 f 6 Name: 성별, dtype: int64
bike_data.dropna(inplace= True)
bike_data.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 68731 entries, 0 to 68730 Data columns (total 11 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 대여일자 68731 non-null object 1 대여소번호 68731 non-null int64 2 대여소명 68731 non-null object 3 대여구분코드 68731 non-null object 4 성별 68731 non-null object 5 연령대코드 68731 non-null object 6 이용건수 68731 non-null int64 7 운동량 68731 non-null object 8 탄소량 68731 non-null object 9 이동거리(M) 68731 non-null float64 10 이용시간(분) 68731 non-null int64 dtypes: float64(1), int64(3), object(7) memory usage: 6.3+ MB
bike_data.loc[bike_data["운동량"] == "\\N", "운동량"] == np.nan
11 False 178 False 285 False 2292 False 3314 False ... 66971 False 68092 False 68325 False 68596 False 68726 False Name: 운동량, Length: 124, dtype: bool
bike_data.loc[bike_data["운동량"] == "\\N", "운동량"] == np.nan
bike_data.loc[bike_data["탄소량"] == "\\N", "탄소량"] == np.nan
11 False 178 False 285 False 2292 False 3314 False ... 66971 False 68092 False 68325 False 68596 False 68726 False Name: 탄소량, Length: 124, dtype: bool
bike_data[["운동량", "탄소량"]].dtypes
운동량 object 탄소량 object dtype: object
#bike_data[["운동량", "탄소량"]] = bike_data[["운동량", "탄소량"]].astype(float)
df1 = pd.DataFrame({"a" : ["a","b","c"], "b" : [1,2,3]})
df1
a | b | |
---|---|---|
0 | a | 1 |
1 | b | 2 |
2 | c | 3 |
df2 = pd.DataFrame({"a": ["a","b","d"], "c" : ["가","나","다"]})
df2
a | c | |
---|---|---|
0 | a | 가 |
1 | b | 나 |
2 | d | 다 |
pd.merge(df1, df2, how = "inner", on = "a")
a | b | c | |
---|---|---|---|
0 | a | 1 | 가 |
1 | b | 2 | 나 |
pd.merge(df1, df2, how = "outer", on = "a")
a | b | c | |
---|---|---|---|
0 | a | 1.0 | 가 |
1 | b | 2.0 | 나 |
2 | c | 3.0 | NaN |
3 | d | NaN | 다 |
pd.merge(df1, df2, how = "left", on = "a")
a | b | c | |
---|---|---|---|
0 | a | 1 | 가 |
1 | b | 2 | 나 |
2 | c | 3 | NaN |
pd.merge(df1, df2, how = "right", on = "a")
a | b | c | |
---|---|---|---|
0 | a | 1.0 | 가 |
1 | b | 2.0 | 나 |
2 | d | NaN | 다 |
import matplotlib.pyplot as plt
import numpy as np
random_sample = np.random.normal(loc = 10, scale = 2, size =1000)
plt.hist(random_sample, bins = 100)
plt.show()
import pylab
import scipy.stats as stats
norm_sample = np.random.normal(loc = 20, scale = 5, size = 100)
stats.probplot(norm_sample, dist = 'norm', plot=pylab)
pylab.show()
import random
avg_values = []
for i in range(1,10001):
random_sample = random.sample(range(1,1000),100)
x = np.mean(random_sample)
avg_values.append(x)
plt.hist(avg_values, bins = 100)
plt.show()