μλ£ μλ΄: pandas λΌμ΄λΈλ¬λ¦¬ νν 리μΌμ μλ Lessons for new pandas usersμ 01-Lesson λ΄μ©μ λ΄κ³ μλ€.
# pandas λͺ¨λμμ DataFrame ν¨μμ read_csv ν¨μ μν¬νΈ
from pandas import DataFrame, read_csv
# matplolib.pyplot λͺ¨λκ³Ό pandas λͺ¨λμ κ°κ° pltμ pdλΌλ λ³μΉμΌλ‘ μν¬νΈ
import matplotlib.pyplot as plt
import pandas as pd
# μ₯¬νΌν° λ
ΈνΈλΆμμ κ·Έλνλ₯Ό μ§μ λνλ΄κΈ° μν΄ μ¬μ©νλ μ½λ
# νμ΄μ¬ μ λ¬Έ μλν°μμλ μ¬μ©νμ§ μμ
%matplotlib inline
1880λ
μ νμ΄λ μμ΄λ€ μ€μμ κ°μ₯ λ§μ΄ μ¬μ©λλ 5κ°μ μ΄λ¦μ λ΄μ 리μ€νΈ names
μ
ν΄λΉ μ΄λ¦μΌλ‘ μΆμμ κ³ λ μμ΄λ€μ μ«μλ₯Ό λ΄μ λ°μ΄ν° births
κ° λ€μκ³Ό κ°λ€.
# μμ΄ μ΄λ¦κ³Ό μΆμμ κ³ μ«μ 리μ€νΈ
names = ['Bob', 'Jessica', 'Mary', 'John', 'Mel']
births = [968, 155, 77, 578, 973]
λ κ°μ 리μ€νΈλ₯Ό ν©νμ¬ μ΄λ¦κ³Ό μ«μλ₯Ό μμΌλ‘ λ¬ΆκΈ° μν΄μ zip
ν¨μλ₯Ό μ΄μ©νλ€.
zip
ν¨μμ 리ν΄κ°μ zip
ν΄λμ€μ κ°μ²΄μ΄λ€.zip
κ°μ²΄λ μμμλ€μ 리μ€νΈμ λΉμ·νλ€.zip
κ°μ²΄λ iterable
μλ£νμ΄λ€.
μ¦, μλ₯Ό λ€μ΄ for
λ°λ³΅λ¬Έκ³Ό ν¨κ» μ¬μ©νμ¬ κ° νλͺ©μ μμλλ‘ νμ©ν μ μλ€.for item in zip(names, births):
name, num = item
print(name, "μ΄λ¦μΌλ‘",num, "λͺ
μ΄ μ κ³ λμλ€.")
zip
κ°μ²΄λ₯Ό 리μ€νΈ μλ£νμΌλ‘ νλ³νμ νλ©΄ μλ€μ 리μ€νΈλ‘ νμ©ν μ μμΌλ©°, μ¬κΈ°μλ
μ΄ κΈ°λ₯μ νμ©νλ€.BabyDataSet = list(zip(names, births))
print(BabyDataSet)
μ£Όμ: zip
ν¨μμ λν μ 보λ μλ λͺ
λ ΉμΌλ‘ νμΈν μ μλ€.
help(zip)
zip
μ νμ©νμ¬ μ΄λ¦κ³Ό μ«μλ₯Ό μλ‘ μμΌλ‘ λ¬Άμλ€. νμ§λ§ λ°μ΄ν° λΆμμ μν΄μλ
pandas
λͺ¨λμμ λ°μ΄ν° νλ μ(DataFrame
) κ°μ²΄λ₯Ό μ΄μ©νλ κ²μ΄ λ³΄λ€ μ μ©νλ€.
BabyDataSet
μ λ°μ΄ν° νλ μ κ°μ²΄λ‘ λ³ννλ©΄ μμ
νμΌμ μ¬μ©λλ μ€νλ μ€μ¬νΈ(spreadsheet)μ κ°μ
νκ° λλ€.
df = pd.DataFrame(data = BabyDataSet, columns = ['Names', 'Births'])
df
μ μ μ₯λ λ°μ΄ν° νλ μμ νμΈνλ©΄ λ€μκ³Ό κ°λ€.
columns
μ μ¬μ©λ Names
μ Births
κ° κ° μ΄μ νλͺ©μ΄λ¦μΌλ‘ μ§μ λ κ²μ νμΈν μ μλ€.df
μ΄ λ°μ΄ν° νλ μμ births 1880.csv
λΌλ μ΄λ¦μ csv
νμΌλ‘ μ μ₯ν΄λ³΄μ.
λ°μ΄ν° νλ μ κ°μ²΄μ ν¬ν¨λ to_csv
λ©μλλ λ°μ΄ν° νλ μ κ°μ²΄λ₯Ό csv
νμΌλ‘ λ³ν ν μ μ₯νλ€.
μ μ₯ μμΉλ λ°μ΄ν° νλ μ κ°μ²΄μ λμΌν λλ ν 리μ΄λ€.
λ¨Όμ μλ λͺ
λ ΉμΌλ‘ to_csv
λ©μλμ λν΄ μ 보λ₯Ό νμΈνλ κ²μ κΆμ₯νλ€.
help(df.to_csv)
to_csv
λ©μλλ μ μ₯λλ νμΌμ μ΄λ¦ μ΄μΈμ index
μ header
λΌλ λ κ°μ ν€μλ μΈμλ₯Ό λ μ¬μ©νλ€.
κ°κ° μμΈκ³Ό ν€λ νλͺ©μ ν¨κ» μ¬μ©ν κ²μΈμ§ μ¬λΆλ₯Ό κ²°μ νλ€.
df.to_csv('births1880.csv', index = False, header = False)
csv νμΌμ λΆλ¬μ€κΈ° μν΄, pandas λͺ¨λμ read_csv
ν¨μλ₯Ό μ΄μ©νλ€.
read_csv
ν¨μλ₯Ό μ΄ν΄λ³΄μ.
help(read_csv)
read_csv
ν¨μλ λ§μ μΈμλ€μ λ°μ μ μμ§λ§ μ¬κΈ°μ μ°λ¦¬λ csv νμΌμ μμΉλ§ μ¬μ©νλ€.
λλ¨Έμ§ μΈμλ ν€μλ μΈμλ‘ μ§μ λ κΈ°λ³Έκ°μ΄ μ¬μ©λλ€.
Location = 'births1880.csv'
df = pd.read_csv(Location)
df
λ₯Ό νμΈνλ©΄ κΈ°μ‘΄μ λ°μ΄ν°μ λΉμ·νκ² λ³΄μΈλ€.
df
λ¬Έμ κ° νλ μλ€.
read_csv
ν¨μκ° csv νμΌμ 첫 λ²μ§Έ μ€μ ν€λ(header)λ‘ μ¬μ©νμλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ read_csv
ν¨μμ 맀κ°λ³μ header
λ₯Ό None
μΌλ‘ μ€μ ν΄λ³΄μ.
νμ΄μ¬μμ None
μ null κ°μ μλ―Ένλ€.
df = pd.read_csv(Location, header=None)
df
μ΄ νλͺ©μΌλ‘ μ¬μ©λ μ΄λ¦λ€μ μ§μ νμ§ μμκΈ° λλ¬Έμ 0, 1, 2 λ±μ μμΈμ κΈ°λ³Έκ°μΌλ‘ μ¬μ©νμλ€.
λ§μ½ μ΄μ νΉμ ν μ΄λ¦λ€μ μ¬μ©νκ³ μΆλ€λ©΄, names
λΌλ 맀κ°λ³μλ₯Ό μ¬μ©νλ€.
μ΄λ, header
λΌλ 맀κ°λ³μλ μλ΅κ°λ₯νλ€.
df = pd.read_csv(Location, names=['Names','Births'])
df
ν λ²νΈ 0, 1, 2, 3, 4λ λ°μ΄ν° νλ μ κ°μ²΄μ κΈ°λ³Έμ μΌλ‘ ν¬ν¨λ μμΈ(index
) κΈ°λ₯μΌλ‘ μ¬μ©λλ€.
μ£Όμ: λμΌν μμΈμ΄ μ¬λ¬ λ² λμ¬ μ μλ€.
λμΌλ‘ μ§κΈκΉμ§ μ¬μ©ν csv νμΌμ μμ ν΄ λ³΄μ. λ μ΄μ νμ μλ€.
import os
os.remove('births1880.csv')
λ°μ΄ν°λ 1880λ μ νμ΄λ μμ΄μ μ΄λ¦κ³Ό μΆμμλ‘ κ΅¬μ±λμ΄ μμΌλ©°, 5κ°μ κΈ°λ‘, μ¦ 5νμΌλ‘ μ΄λ£¨μ΄μ Έ μκ³ , κ²°μΈ‘μΉ(missing values)λ μλ€. μ¦, λͺ¨λ λ°μ΄ν°κ° μλ²½νλ€.
κ·Έλ°λ° κ²½μ°μ λ°λΌ μ΄λ€ μ΄μ μ΄μ§ λ°μ΄ν°κ° μ¬μ©λκ±°λ μμ΄μΌ λ°μ΄ν°κ° μλ κ²½μ°, μ¦, κ²°μΈ‘μΉκ° μ‘΄μ¬νλ κ²½μ°κ° μλ€. κ·Έλ° κ²½μ°κ° λ°μνλ©΄ λ°μ΄ν° λΆμμ΄ μ λλ‘ μ§νλμ§ μλλ€. λ°λΌμ μλ£νμ΄ μλ‘ λ€λ₯Έ λ°μ΄ν°κ° λμΌν μ΄μ μμΉνμ§ μλμ§, μλλ©΄ κ²°μΈ‘μΉκ° μλμ§ μ¬λΆλ₯Ό λ¨Όμ νμΈνμ¬ λμ² λ°©μμ κ°κ΅¬ν΄μΌ νλ€.
μ΄λ€ μ΄(column)μ΄ λμΌν μλ£νμΌλ‘ ꡬμ±λμ΄ μλμ§ μ¬λΆλ₯Ό νμΈνλ €λ©΄
λ°μ΄ν° νλ μ κ°μ²΄μ μμ± μ€μμ dtypes
λ₯Ό νμΈνλ©΄ λλ€.
df.dtypes
μ κ²°κ³Όλ μλ λ΄μ©μ λ΄κ³ μλ€.
Names
νλͺ©μ μ¬μ©ν 첫째 μ΄μ μλ£νμ object
μ΄λ€. object
λ νμ΄μ¬μμ μ 곡νλ μ΅μμ ν΄λμ€μ΄λ€. Births
νλͺ©μ μ¬μ©ν λμ§Έ μ΄μ μλ£νμ int64
μ΄λ€.int64
λ 64λΉνΈμ© μ μ μλ£νμ λνλΈλ€.float
), λ¬Έμμ΄ λ± μ μν μ΄μΈμ μλ£νμ μ¬μ©νλ©΄ μ€λ₯κ° λ°μνλ€. λͺ¨λ μ΄μ΄ μλλΌ, μλ₯Ό λ€μ΄, Births
μ΄μ νμ
μ μκ³ μΆλ€λ©΄, μλμ κ°μ μ½λλ₯Ό μμ±νλ©΄ λλ€.
df.Births.dtype
μλ₯Ό λ€μ΄, κ°μ₯ μΈκΈ°μλ μ΄λ¦ μ¦, μΆμμκ° κ°μ₯ λμ μ΄λ¦μ μ°ΎκΈ° μν΄μ λ€μ λ κ°μ§ λ°©μ μ€μ ν κ°μ§λ₯Ό νμ©ν μ μλ€.
max()
ν¨μ μ μ©λ°©λ² 1: νΉμ μ΄μ κΈ°μ€μΌλ‘ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νκΈ°
Sorted = df.sort_values(['Births'], ascending=False)
μ΄μ 첫째 νμ νμΈνλ©΄ λλ€.
Sorted.head(1)
λ°©λ² 2: νΉμ μ΄μ λν΄ μΌκ΄μ μΌλ‘ max()
λ©μλ μ μ©νκΈ°
df['Births'].max()
μ§κΈκΉμ§ λ€λ£¬ λ°μ΄ν°λ κ²¨μ° 5μ€μ§λ¦¬μ΄λ€.
λ°λΌμ 1880λ
λμ κ°μ₯ μΈκΈ° μμλ μ΄λ¦μ΄ Mel
μ΄λΌλ μ¬μ€μ ν λμ μμ λ³Ό μ μλ€.
νμ§λ§ λ°μ΄ν°κ° μ‘°κΈλ§ μ»€μ Έλ κ·Έλ° μ 보λ₯Ό μ½κ² λμΌλ‘ νμΈν μ μλ€.
λ°λΌμ μΌλ°μΈμ΄ μνλ μ 보λ₯Ό μ½κ² μ»μ μ μλλ‘ νκΈ° μν΄ λ°μ΄ν°λ₯Ό μκ°ννμ¬ μ λ¬νλ μΌμ΄
λ§€μ° μ€μνλ€.
λ°μ΄ν° νλ μ κ°μ²΄λ plot()
μ΄λΌλ μκ°ν λ©μλλ₯Ό μ 곡νλ€.
df['Names']
: df
μ μ μ₯λ λ°μ΄ν° νλ μ κ°μ²΄μ Names
μ΄μ κ°λ¦¬ν¨λ€.df['Births'].plot()
plt.xlabel("μκ°")
plt.show()
λ°λΌμ Births
μ΄μ μ»κ³ μ νλ©΄ μλμ κ°μ΄ λͺ
λ Ήνλ©΄ λλ€.
df['Births']
μ΄μ μμ μ΅λ μΆμμλ₯Ό νμΈνλ df['Births'].max()
λ₯Ό νμ©νμ¬
μ΅λ μΆμμκ° μ¬μ©λ λͺ¨λ νμ νμΈν μ μλ€.
λ€μκ³Ό κ°μ΄ νλ©΄ λλ€.
df['Names'][df['Births'] == df['Births'].max()]
μ κ²°κ³Όμ μνλ©΄ 4λ² μμΈ ν, μ¦, λ€μ― λ²μ§Έ μ€μμλ§ μμ νμΈν μ΅λ μΆμμ 973λͺ
μ΄ μ¬μ©λμλ€.
μ¦, Mel
μ΄λ¦ λ¨λ
μΌλ‘ κ°μ₯ λ§μ΄ μΆμμμ΄λ€μ μ΄λ¦μΌλ‘ μ¬μ©λμλ€.
μλμ κ°μ΄ λͺ λ Ήν΄λ λμΌν κ²°κ³Όλ₯Ό μ»λλ€.
Sorted['Names'].head(1)
μκ°ν κ·Έλνμ μ’ λ λ€μν μ 보λ₯Ό μ 곡ν μ λ μλ€. μλ νλ‘κ·Έλ¨μ κ·Έλνμ λ€μν ν μ€νΈ μ 보λ₯Ό μ λ ₯νλ λ°©λ²μ 보μ¬μ£Όλ μμ μ΄λ€.
# κ·Έλν λ§λ€κΈ°
df['Births'].plot()
# λ°μ΄ν°μ
μ μλ μ΅λκ°
MaxValue = df['Births'].max()
# μ΅λκ°μ κ°μ§ μ΄λ¦ νμΈ
MaxName = df['Names'][df['Births'] == df['Births'].max()].values
# κ·Έλν μμ 보μ¬μ€ ν
μ€νΈ
Text = str(MaxValue) + " - " + MaxName
# κ·Έλνμ ν
μ€νΈ μΆκ°νκΈ°
plt.annotate(Text, xy=(1, MaxValue), xytext=(8, 0),
xycoords=('axes fraction', 'data'), textcoords='offset points')
plt.show()