[Pandas] 1-3

Sooyeon·2023년 10월 13일
0

문제풀이 

목록 보기
1/95
post-thumbnail

[Pandas] 1-3
1.판다스 시작하기
2.판다스 데이터프레임과 시리즈
3.그래프 그리기

1. 판다스 시작하기


1-1.데이터 집합 불러오기

1.데이터 불러오기

  • read_csv 메서드
    쉼표(,)로 열이 구분되어 있는 데이터를 불러옴
    열이 탭(tab)으로 구분되어 있을 경우 => sep속성값으로 '\t'지정
  • 시리즈와 데이터프레임
    시리즈=> 엑셀 시트의 열 1개 의미
    데이터프레임 => 엑셀의 시트와 동일한 개념
  • type메서드
  • shape메서드 : 데이터의 행과 열의 크기에 대한 정보
  • columns메서드: 열 이름 확인 가능
  • dtypes 속성이나 info메서드 :데이터프레임 구성하는 값의 자료형

1-2. 데이터 추출하기

1.열 단위 데이터 추출하기

  • 데이터프레임에서 데이터를 열 단위로 추출하려면 대괄호와 열 이름 사용
    ->열 이름은 꼭 작은따옴표로 지정
    ->1개의 열만 추출하면 시리즈,2개 이상의 열은 데이터프레임 얻음

2.행 단위 데이터 추출하기

  • loc: 인덱스 기준으로 행 데이터 추출
  • iloc: 행 번호를 기준으로 행 데이터 추출

✳️ 인덱스:변할수 있으며 숫자가 아니라 문자열을 사용할 수도 있다
✳️ 행 번호: 데이터의 순서를 따라가므로 정수만으로 데이터를 조회하거나,
추출할 수 있음. 실제 데이터프레임에서는 확인할 수 없는 값.
✳️ tail 메서드와 loc속성 반환하는 자료형 다름 => dataframe,series

3.loc,iloc 속성 자유자재로 사용하기
행과 열을 지정하는 방법은 슬라이싱 과 range메서드를 사용하는 방법이 있다.

  • 1) 슬라이싱 구문으로 데이터 추출하기
    전달하는 열 지정값은 반드시 형식에 맞게 전달!!
    -loc 속성 : 열 지정값에 정수 리스트 x
    -iloc 속성: 열 지정값에 문자열 리스트 x
  • 2) range 메서드로 데이터 추출하기

1-3.기초적인 통계 계산하기

1. 그룹화한 데이터의 평균 구하기

  • lifeExp 열을 연도별로 그룹화하여 평균 계산하기
df.groupby('year')['lifeExp'].mean()
  • lifeExp,gdpPercap 열의 평균값을 연도,지역별로 그룹화하여 계산
df.groupby(['year','continent'])[['lifeExp','gdpPercap']].mean()
  • 그룹화한 데이터 개수 세기
    그룹화한 데이터의 개수 = 빈도수=>nunique메서드 사용

2.판다스 데이터프레임과 시리즈


2-1.나만의 데이터 만들기

1.시리즈와 데이터프레임 직접 만들기

1) 시리즈 만들기

s=pd.Series(['banana',42])

-시리즈를 생성할 때 문자열을 인덱스로 지정할 수 있다.
=>Series메서드의 index인자를 통해 전달

2) 데이터프레임 만들기
데이터프레임을 만들기 위해서는 딕셔너리를 Dataframe클래스에 전달
-시리즈와 같이 ,인덱스를 따로 지정하지 않으면 0부터 자동으로 생성
-따로 지정하려면, index 인자에 리스트 전달
-column 인자로 열 순서 지정

-순서가 보장된 딕셔너리를 전달하려면, orderdDict클래스 사용
=>딕셔너리 데이터 순서 유지하며 데이터프레임 만들 수 있다


2-2.시리즈 다루기 -기초

판다스의 데이터를 구성하는 가장 기본단위는 시리즈

1.데이터프레임에서 시리즈 선택하기

  • loc속성에 인덱스를 전달

    2.시리즈 속성과 메서드 사용하기 -index,values,keys

    1) index 속성 사용하기

    index속성에는 시리즈의 인덱스가 들어 있다.

    2)value속성 사용하기

    시리즈의 데이터가 저장되어 있다.

    3) keys 메서드 사용하기

    keys메서드는 index 속성과 같은 역할을 함

3.시리즈의 기초 통계 메서드 사용하기

  • append: 2개 이상의 시리즈 연결
  • describe: 요약 통계량 계산
  • drop_duplicates: 중복값이 없는 시리즈 반환
  • equals: 시리즈에 해당 값을 가진 요소가 있는지 확인
  • get_values: 시리즈 값 구하기 (values 속성과 동일)
  • isin: 시리즈에 포함된 값이 있는지 확인
  • min: 최솟값 반환
  • max:최댓값 반환
  • mean: 산술 평균 반환
  • median: 중간값 반환
  • replace : 특정 값을 가진 시리즈 값을 교체
  • sample : 시리즈에서 임의의 값 반환
  • sort_values: 값을 정렬
  • to_frame: 시리즈를 데이터프레임으로 변환

2-3. 시리즈 다루기 - 응용

1.시리즈와 불린 추출
정확한 인덱스를 모르는 경우 사용하는 방법이 불린
불린 추출: 특정 조건을 만족하는 값만 추출할 수 있다.

  • 시리즈와 불린 추출 사용하기

-리스트 형태로 시리즈에 전달하면 참인 인덱스만 추출
-ex)평균 나이보다 나이가 많은 사람의 데이터 추출

ages[ages>ages.mean()]

2.시리즈와 브로드캐스팅

  • 브로드캐스팅: 시리즈,데이터프레임에 있는 모든 데이터를 한번에 연산
  • 벡터: 시리즈처럼 여러 개의 값을 가진 데이터
  • 스칼라: 단순 크기를 나타내는 데이터
  • 벡터와 스칼라로 브로드캐스팅 수행하기
    =>결괏값으로 같은 길이의 벡터가 출력됨

2-4. 데이터프레임 다루기

1.불린 추출과 브로드캐스팅


2-5. 시리즈와 데이터프레임의 데이터 처리하기

1.시리즈와 데이터프레임의 데이터 처리하기

1.열의 자료형 바꾸기와 새로운 열 추가하기

  • 문자열 -> datetime자료형으로 바꾸기
  • 열 추가
  • 데이터프레임의 열 삭제하기

2-6. 데이터 저장하고 불러오기

1.피클로 저장하기
-데이터를 바이너리 형태로 직렬화한 오브젝트를 저장하는 방법
-피클로 저장하면 스프레드시트보다 더 작은 용량으로 저장 가능
-피클로 저장하려면 to_pickle메서드 사용
=>이때 저장 경로를 문자열로 전달해야 함
-피클 데이터는 반드시 read_pickle메서드로 읽어야함

names.to_pickle("../data/scientists_names_series.pickle")
  1. CSV파일과 TSV 파일로 저장하기
    -CSV파일: 데이터를 쉼표로 구분하여 저장한 파일
    -TSV:데이터를 탭으로 구분하여 저장한 파일
# CSV 파일
names.to_csv("../output/scientist_names_series.csv")
# TSV 파일 
scientists.to_csv("../output/scientist_df.tsv",sep='\t')

3.그래프 그리기


3-1 matplotlib 그래프 그리기

1.전체 그래프가 위치할 기본 틀을 만든다.
2.그래프를 그려 넣을 그래프 격자를 만든다.
3.격자에 그래프를 하나씩 추가한다. 순서는 왼쪽에서 오른쪽방향
4.만약 격자의 첫 번째 행이 꽉 차면 두 번째 행에 그래프를 그려 넣는다.

1.한번에 4개의 그래프 그리기

# 그래프 격자가 위치할 기본 틀 
fig=plt.figure()

# add_subplot 메서드로 그래프 격자를 그린다. 
# 첫번째 인자에는 행 크기,두번째 인자에는 열 크기 지정 

axes1=fig.add_subplot(2,2,1)
axes2=fig.add_subplot(2,2,2)
axes3=fig.add_subplot(2,2,3)
axes4=fig.add_subplot(2,2,4)
# plot 메서드에 데이터를 전달하여 그래프를 그리면 된다. 
axes1.plot(dataset_1['x'],dataset_1['y'],'o')
axes2.plot(dataset_2['x'],dataset_2['y'],'o')
axes3.plot(dataset_3['x'],dataset_3['y'],'o')
axes4.plot(dataset_4['x'],dataset_4['y'],'o')

fig

# 격자에 제목 추가 => set_title 메서드 
axes1.set_title('dataset_1')
axes2.set_title('dataset_2)
axes3.set_title('dataset_3)
axes4.set_title('dataset_4)


# 기본 틀(fig)에 제목 추가 => suptitle메서드 사용
fig.suptitle('Anscombe Data')


# 각 그래프의 이름과 숫자 겹쳐 보이는경우=>tight_layout메서드로 레이아웃 조절
fig.tight_layout()

3-2.matplotlib 라이브러리 자유자재로 사용하기

기초 그래프 그리기-히스토그램,산점도 그래프,박스 그래프

1.히스토그램
데이터프레임의 열 데이터 분포와 빈도를 살펴보는 용도


fig=plt.figure()
axes1=fig.add_subplot(1,1,1
                    
axes1.hist(tips['total_bill'],bins=10) # bin: x축 간격 조정
axes1.set_title('Histogram of Total Bill')
axes1.set_xlabel('Frequency')
axes1.set_ylabel('Total Bill')

fig

2.산점도 그래프
변수 2개를 사용해서 만드는 그래프,이변량 그래프

scatter_plot=plt.figure()
axes1=scatter_plot.add_subplot(1,1,1)
axes1.scatter(tips['total_bill'],tips['tip'])
axes1.set_title('Scatterplot of Total Bill vs Tip')
axes1.set_xlabel('Total Bill')
axes1.set_ylabel('Tip')

3.박스 그래프
이산형 변수와 연속형 변수를 함께 사용하는 그래프

boxplot=plt.figure()
axes1=boxplot.add_subplot(1,1,1)

axes1.boxplot([tips[tips['sex']=='Female']['tip'],
               tips[tips['sex']=='Male']['tip']],
               labels=['Female','Male'])
            
            
axes1.set_xlabel('Sex')
axes1.set_ylabel('Tip')
axes1.set_title('Boxplot of Tips by Sex')

다변량 그래프 그리기
3개 이상의 변수를 사용하는 다변량 그래프는
적재적소에 맞는 그래프 요소 (크기,색상,투명도 조정) 추가

1.산점도 그래프

scatter_plot=plt.figure()
axes1=scatter_plot.add_subplot(1,1,1)
axes1.scatter(
    x=tips['total_bill'],
    y=tips['tip'],
    s=tips['size']*10, # s는 점의 크기 
    c=tips['sex_color'], # c는 점의 색상 
    alpha=0.5)   # alpha 인잣값은 투명도를 조절 

axes1.set_title('Total Bill vs Tip Colored by Sex and Sized by Size')
axes1.set_xlabel('Total Bill')
axes1.set_ylabel('Tip')


3-3. seaborn 라이브러리 자유자재로 사용하기

단변량 그래프 그리기 - 히스토그램
-subplots메서드로 기본 틀 만들고->distplot 메서드에서 total_bill열 데이터 전달하면 seaborn 라이브러리로 히스토그램 그릴 수 있다.

ax=plt.subplots()
ax=sns.distplot(tips['total_bill'],kde=False)
ax.set_title('Total Bill Histogram with Density Plot')
ax.set_xlabel('Total Bill')
ax.set_ylabel('Frequency')


=> 밀집도 그래프를 제외하고 싶다면, kde=False로 설정한다.
=> 밀집도 그래프만 나타내려면 hist=False로 설정

count 그래프
이산값을 나타낸 그래프.

ax=plt.subplots()
ax=sns.countplot(x='day',data=tips)
ax.set_title('Count of days')
ax.set_xlabel('Day of Week')
ax.set_ylabel('Frequency')

다양한 종류의 이변량 그래프 그리기

1.seaborn 라이브러리로 산점도 그래프 그리기
-seaborn 라이브러리의 regplot메서드를 사용해야 함
(산점도 그래프와 회귀선을 함께 그릴 수 있다,회귀선 제거는 fit_reg=False)

ax=plt.subplots()
ax=sns.regplot(x='total_bill',y='tip',data=tips)
ax.set_title('Scatterplot of Total Bill and Tip')
ax.set_xlabel('Total Bill')
ax.set_ylabel('Tip')

# 회귀선 제거 
ax=plt.subplots()
ax=sns.regplot(x='total_bill',y='tip',data=tips,fit_reg=False)
ax.set_title('Scatterplot of Total Bill and Tip')
ax.set_xlabel('Total Bill')
ax.set_ylabel('Tip')

  1. jointplot (산점도 그래프와 히스토그램을 한번에 그려줌)
    (x,y인자에 원하는 열 이름 지정, data 인잣값은 데이터프레임)
joint=sns.jointplot(x='total_bill',y='tip',data=tips)
joint.set_axis_labels(xlabel='Total Bill',ylabel='Tip')
joint.fig.suptitle('Joint Plot of Total Biil and Tip',fontsize=10,y=1.03)

  1. 산점도 그래프의 데이터를 구분하기 쉽게 그리고 싶다면 육각 그래프 사용
    (특정 데이터의 개수가 많아지면 점점 진한 색으로 표현된다.)
    joinplot 메서드를 그래도 사용하며,kind인잣값을 hex로 지정함
hexbin=sns.jointplot(x='total_bill',y='tip',data=tips,kind='hex')
hexbin.set_axis_labels(xlabel='Total Bill',ylabel='Tip')
hexbin.fig.suptitle('Hexbin Joint Plot of Total Bill and Tip',fontsize=10,y=1.03)

  1. 이차원 밀집도 그리기 (kdeplot)
    (shade 인잣값을 True로 지정하면 음영 효과 줄 수 있다.)
ax=plt.subplots()
ax=sns.kdeplot(data=tips['total_bill'],data2=tips['tip'],shade=True)
ax.set_title('Kernel Density Plot of Total Bill and Tip') 
ax.set_xlabel('Total Bill')
ax.set_ylabel('Tip')

5.바 그래프 그리기

ax=plt.subplots()
ax=sns.barplot(x='time',y='total_bill',data=tips)
ax.set_title('Bar plot of avetage total bill for time of day')
ax.set_xlabel('Time of day')
ax.set_ylabel('Average total bill')

  1. 관계 그래프 그리기
    관계 그래프는 pairplot 메서드에 데이터프레임을 넣는 방법
fig=sns.pairplot(tips)


다변량 그래프 그리기-seaborn

  1. seaborn 라이브러리로 바이올린 그래프 그리기 -색상 추가
    -hue로 열이름 추가하면 색상 추가
ax=plt.subplots()
ax=sns.violinplot(x='time',y='total_bill',hue='sex',data=tips,split=True)

  1. 산점도, 관계 그래프 그리기- 색상 추가
scateer=sns.lmplot(x='total_bill',y='tip',data=tips,hue='sex',fit_reg=False)
fig=sns.pairplot(tips,hue='sex')


3.산점도 그래프의 크기와 모양 조절하기
점 크기 조절: scatter_kws에 딕셔너리 형태로 인잣값 전달
크기 조절시, 's':tips['size'] 전달
4.산점도 그래프의 점을 다른 기호로 표현하고 싶다면
mrkers 인잣값에 표현하고자 하는 기호를 리스트에 담아 전달
markers=['o','x']


3-4. 데이터프레임과 시리즈로 그래프 그리기

데이터프레임과 시리즈로 그래프 그리기

# 밀집도 그래프 kde
ax=plt.subplots()
ax=tips['tip'].plot.kde()
# 산점도 그래프 scatter
fig,ax=plt.subplots()
ax=tips.plot.scatter(x='total_bill',y='tip',ax=ax)
# 육각 그래프 hexbin 
fig,ax=plt.subplots()
ax=tips.plot.hexbin(x='total_bill',y='tip',ax=ax)

0개의 댓글