산술 데이터를 갖는 열에 대한 주요 기술 통계 정보(평균, 표준편차, 최대값, 최소값, 중간값 등)를 요약 출력한다.
>>> df.describe() mpg cylinders displacement weight acceleration model year origincount 398.000000398.000000398.000000398.000000398.000000398.000000398.000000mean 23.5145735.454774193.4258792970.42462315.56809076.0100501.572864std 7.8159841.701004104.269838846.8417742.7576893.6976270.802055min9.0000003.00000068.0000001613.0000008.00000070.0000001.00000025%17.5000004.000000104.2500002223.75000013.82500073.0000001.00000050%23.0000004.000000148.5000002803.50000015.50000076.0000001.00000075%29.0000008.000000262.0000003608.00000017.17500079.0000002.000000max46.6000008.000000455.0000005140.00000024.80000082.0000003.000000
만약 산술 데이터가 아닌 열에 대한 정보를 포함하고 싶을 떄는 include='all' 옵션을 추가하면된다.
>>> df.describe(include='all') mpg cylinders displacement horsepower weight acceleration model year origin name
count 398.000000 398.000000 398.000000 398 398.000000 398.000000 398.000000 398.000000 398
unique NaN NaN NaN 94 NaN NaN NaN NaN 305
top NaN NaN NaN 150.0 NaN NaN NaN NaN "ford pinto"
freq NaN NaN NaN 22 NaN NaN NaN NaN 6
mean 23.514573 5.454774 193.425879 NaN 2970.424623 15.568090 76.010050 1.572864 NaN
std 7.815984 1.701004 104.269838 NaN 846.841774 2.757689 3.697627 0.802055 NaN
min 9.000000 3.000000 68.000000 NaN 1613.000000 8.000000 70.000000 1.000000 NaN
25% 17.500000 4.000000 104.250000 NaN 2223.750000 13.825000 73.000000 1.000000 NaN
50% 23.000000 4.000000 148.500000 NaN 2803.500000 15.500000 76.000000 1.000000 NaN
75% 29.000000 8.000000 262.000000 NaN 3608.000000 17.175000 79.000000 2.000000 NaN
max 46.600000 8.000000 455.000000 NaN 5140.000000 24.800000 82.000000 3.000000 NaN
문자열 데이터가 들어가 있는 열의 unique(고유값 개수), top(최빈값), freq(빈도수) 정보가 추가된다.
데이터 개수 확인
각 열의 데이터 수
df.count()
각 열이 가지고 있는 데이터 개수를 Series 객체로 반환한다. 이때 유효한 값의 개수만을 계산하는 점을 주의해야한다.
corr()는 두 열 간의 상관계수를 계산한다. 산술 데이터를 갖는 모든 열에 대해 2개씩 서로 짝을 짓고, 각각의 경우에 대해 상관계수를 계산한다.
>>> df.corr() mpg cylinders displacement weight acceleration model year originmpg 1.000000-0.775396-0.804203-0.8317410.4202890.5792670.563450cylinders -0.7753961.0000000.9507210.896017-0.505419-0.348746-0.562543displacement -0.8042030.9507211.0000000.932824-0.543684-0.370164-0.609409weight -0.8317410.8960170.9328241.000000-0.417457-0.306564-0.581024acceleration 0.420289-0.505419-0.543684-0.4174571.0000000.2881370.205873model year 0.579267-0.348746-0.370164-0.3065640.2881371.0000000.180662origin 0.563450-0.562543-0.609409-0.5810240.2058730.1806621.000000>>> df[['mpg','weight']].corr() mpg weightmpg 1.000000-0.831741weight -0.8317411.000000
상관계수란? 두 변수 x,y 사이의 상관관계의 정도를 나타내는 수치이다.
상관계수 r은 항상 -1과 1 사이에 있다.
상관계수의 절대값의 크기는 직선관계에 가까운 정도를 나타내고, 부호는 직선관계의 방향을 나타낸다. 상관계수의 절대값이 클수록, 즉 상관계수의 값이 1 또는 -1에 가까울 수록 두 변수 사이의 연관성이 크고, 0에 가까울 수록 매우 약함을 의미한다. 1. r > 0 - 양의 상관관계 : 산점도에서 점들이 우상향방향으로 띠를 형성한다. 즉, 한 변수의 값이 작으면 다른 변수의 값도 작고, 한 변수의 값이 크면 다른 변수의 값도 크다. 이러한 경향을 하나의 직선으로 나타냈을 때 그 직선의 기울기는 양수가 된다. 2. r < 0 - 음의 상관관계 : 산점도에서 점들이 우하향방향으로 띠를 형성한다. 즉, 한 변수의 값이 작으면 다른 변수의 값은 크다. 이러한 경향을 하나의 직선으로 나타냈을 때 그 직선의 기울기는 음수가 된다. 3. r = +1 : 모든 점이 정확히 기울기가 양수인 직선 위에 위치한다. 4. r = -1 : 모든 점이 정확히 기울기가 음수인 직선 위에 위치한다.
상관계수의 단위는 없다. 따라서 단위가 다른 여러 쌍의 변수에서 직선관계의 정도를 비교할 수 있다.
그래프를 이용한 시각화 방법은 데이터의 분포와 패턴을 파악하는데 크게 도움이 된다. Pandas는 matplotlib 라이브러리의 기능을 일부 내장하고 있어, 별도로 import를 하지 않고도 간단한 그래프를 그릴 수 있다.
Series 혹은 DataFrame 객체에 plot() 메소드를 적용해 그래프를 그릴 수 있으며, kind 옵션으로 그래프 종류를 선택할 수 있다.
선 그래프
df.plot()
mac terminer에서 plot() 으로 그래프를 그려도 다음과 같이 보여지지 않는다.
>>> df_ns.plot()<matplotlib.axes._subplots.AxesSubplot object at 0x10e9c5710>
이때는 matplotlib.pyplot 을 import하고 show()메소드로 보이게 할 수 있다.
import pandas as pdimport matplotlib.pyplot as pltdf = pd.read_excel('./korea_20200506120515.xlsx')df_ns = df.iloc[[1,2],3:]df_ns.index = ['North','South']df_ns.columns = df_ns.columns.map(int)print(df_ns.tail())df_ns.plot()plt.show()
시간의 흐름에 따른 연도별 발전량 변화 추이를 보기 위해서는 연도 값을 x축에 표시하는 것이 적절하다. 행렬을 전치하여 변경할 수 있다.
tdf_ns = df_ns.T>>>print(tdf_ns.head()) North South1992247131019932211444199423116501995230184719962132055>>> tdf_ns.plot()<matplotlib.axes._subplots.AxesSubplot object at 0x114a61eb8>>>> plt.show()
막대 그래프
df.plot(kind='bar')
tdf_ns.plot(kind='bar')plt.show()
히스토그램
df.plot(kind='hist')
히스토그램의 x축은 발전량을 일정한 간격을 갖는 여러 구간으로 나눈 것이며, y축은 연간 발전량이 x축에서 나눈 발전량 구간에 속하는 연도의 수를 빈도로 나타낸 것이다.
산점도
import pandas as pdimport matplotlib.pyplot as pltdf = pd.read_csv('./auto-mpg.csv')df.columns = ['mpg', 'cylinders', 'displacement', 'horsepower', 'weight', 'acceleration', 'model year', 'origin', 'name']
df.plot(x='weight', y='mpg', kind='scatter')<matplotlib.axes._subplots.AxesSubplot object at 0x11a76c358>plt.show()
x축(weight)과 y축(mpg)의 관계는 차량의 무게가 클수록 mpg(연비)가 전반적으로 낮아지는 경향을 보이며, 역 상관관계를 갖는다고 해석할 수 있다.
박스 플롯
박스 플롯은 특정 변수의 데이터 분포와 분산 정도에 대한 정보를 제공한다.
>>> df[['mpg','cylinders']].plot(kind='box')<matplotlib.axes._subplots.AxesSubplot object at 0x11a7ecb70>>>> plt.show()