βπ» λ°°μ΄μ
λ°μ΄ν°λ₯Ό μκ°ννλ λ°©λ²μ μ΅ν μ μμλ€. μ§λ μ μκ°ν, κ·Έλν μκ°νλ₯Ό λ€λ£° μ μμκ³ μ΄μ λ€λ₯Έ λ°μ΄ν°λ€λ μμ©νμ¬ μκ°νν΄ λ³Ό μ μμ κ² κ°λ€.
π λͺ©μ°¨
1. assert
2. μ κ· ννμ μΉν
3. 5κ° νΈμμ μ 곡 μλΉμ€ μ‘°ννκΈ°
4. κ°νΈνκ² DB μ μ°κ²°νμ¬ λ°μ΄ν° μ μ₯νκΈ°
5. μμΈ μ§λ λΆλ¬μ€κΈ°
6. μμΈμ νΈμμ λ°μ΄ν°λ₯Ό μ§λμ μκ°ννκΈ° : μμΈμ νΈμμ μ μ μ¨
7. μμΈμ νΈμμ λ°μ΄ν°λ₯Ό μ§λμ μκ°ννκΈ° : μμΈμ GS νΈμμ μ’ν
8. mataplotlib.pylot (plt) κ·Έλν νκΈ κΉ¨μ§ νμ μꡬ ν΄κ²°νκΈ°
9. μ κ΅ νΈμμ μ μ μ¨ κ·Έλν μκ°ννκΈ° : λ§λ κ·Έλν
10. μ κ΅ νΈμμ μ μ μ¨ κ·Έλν μκ°ννκΈ° : νμ΄ κ·Έλν
λ€μ΄κ°λ©°
μ§λ νΈμμ λ°μ΄ν°λ₯Ό κ°μ§κ³ μκ°ννμμ΅λλ€. μ°Έκ³ λΆνλ립λλ€ :)
assert
νμ΄μ¬μμ assert λ κ°μ μ€μ λ¬ΈμΌλ‘, κ°λ°μκ° μλ¬λ₯Ό λ§λ€κ³ μΆμλ μ¬μ©νλ€.
a = 10
try:
assert a != 10 # μ¬κΈ°μ μλ¬ λ°μ
except:
print("Assert μλ¬ λ¨") # except μ ν΄λΉνλ―λ‘ μΆλ ₯λ¨
μ£Όλ‘, νΉμ λ²μ λ€μ κ°λ°μμ μ¬μ©μκ° λκ°μ΄ λ§μΆ°μ€ νμκ° μμ λ μ¬μ©νλ€κ³ νλ€.
μ κ· ννμ μΉν
νμ΄μ¬μμ λ¬Έμμ΄μ μ κ· ννμμ μ¬μ©νμ¬ νΉμ λ¬Έμλ‘ μΉνν μ μλ€.
import re
re.sub(μ κ· ννμ, μΉννκ³ μΆμ λ¬Έμ, ν΄λΉ λ¬Έμμ΄)
re λͺ¨λμ sub() λ©μλλ₯Ό ν΅ν΄ μ¬μ©νλ©΄ λ¬Έμμ΄μ νΉμ 쑰건μ λ§λ λ¬Έμλ‘ μΉνν μ μκ² λλ€.
5κ° νΈμμ μ 곡 μλΉμ€ μ‘°ννκΈ°
μμμ μ§νν 5κ° λΈλλ νΈμμ λ°μ΄ν°λ₯Ό μ¬μ©νμ¬, μ 곡νλ μλΉμ€λ€μ μ‘°νν΄λ³΄μ.
service = []
for x in νΈμμ ['offeringService'].valuse:
try:
if type(x) == list:
for y in x:
service.append(y)
elif type(x) != float:
service.append(x)
except:
pass
list(set(service))
5κ° νΈμμ ν΅νμ΄μ μ 곡νλ μλΉμ€ νλͺ©λ€μ λͺ¨λ service μ λ£μκ³ set μ ν΅ν΄ μ€λ³΅μ μ κ±°νλ€.
# μ§ν©μΌλ‘ λ§λ¦
master = {"λ°°μ‘μλΉμ€": {'무μΈνλ°°μ μ', 'νλ±μ€μλΉμ€', 'delivery_service', 'post'},
"μμ½ν" : {'drug', 'μμ½ν'},
"μΈμΆμλΉμ€" : {'atm', 'ATM', 'withdrawal', 'smart_atm', 'μλ'}
}
κ·Έλ¦¬κ³ , μ±μ§μ΄ κ°μ μλΉμ€λΌλ¦¬ λ¬Άμ΄μ μ μ₯νμλ€.
μ΄μ , νΈμμ μ§μ λ€μ΄ λ°°μ‘μλΉμ€, μμ½ν, μΈμΆμλΉμ€ κ° μΈ κ°μ§ μλΉμ€λ₯Ό νλμ§ μνλμ§ μ²΄ν¬νμ¬ column μ μ μ₯ν μ μλ€.
νΈμμ .loc[νΈμμ ['offeringService'].notnull(), 'λ°°μ‘μλΉμ€'] = \
νΈμμ .loc[νΈμμ ['offeringService'].notnull(), 'offeringService'].\
apply(lambda x : 'Y' if len(set(x) & master['λ°°μ‘μλΉμ€']) > 0 else 'N')
# κ²°μΈ‘μΉκ° μλ€λ©΄ N μΌλ‘ μ μ₯νλ€.
νΈμμ ['λ°°μ‘μλΉμ€'] = νΈμμ ['λ°°μ‘μλΉμ€'].fillna("N")
λ°°μ‘μλΉμ€(key) μ ν΄λΉνλ value κ° μ€ νλλΌλ μμΌλ©΄ λ°°μ‘μλΉμ€λ₯Ό νλ μ§μ μ΄λ€.
λ°°μ‘μλΉμ€λ₯Ό νλ μ§μ μλ λ°°μ‘μλΉμ€ column μ Y, νμ§ μλ μ§μ μλ N μ μ μ₯νλ€.
νΈμμ .loc[νΈμμ ['offeringService'].notnull(), 'μμ½ν'] = \
νΈμμ .loc[νΈμμ ['offeringService'].notnull(), 'offeringService'].\
apply(lambda x : 'Y' if len(set(x) & master['μμ½ν']) > 0 else 'N')
νΈμμ ['μμ½ν'] = νΈμμ ['μμ½ν'].fillna("N")
νΈμμ .loc[νΈμμ ['offeringService'].notnull(), 'μΈμΆμλΉμ€'] = \
νΈμμ .loc[νΈμμ ['offeringService'].notnull(), 'offeringService'].\
apply(lambda x : 'Y' if len(set(x) & master['μΈμΆμλΉμ€']) > 0 else 'N')
νΈμμ ['μΈμΆμλΉμ€'] = νΈμμ ['μΈμΆμλΉμ€'].fillna("N")
μμ½νκ³Ό μΈμΆμλΉμ€λ μμ κ°μ λ°©μμΌλ‘ μ§ννλ€.
κ·Έλ λ€λ©΄, μΈ κ°μ§ μλΉμ€λ₯Ό μ 곡νλ μ§μ λΉμ¨μ νμΈν΄λ³Ό μ μλ€.
νΈμμ ['λ°°μ‘μλΉμ€'].value_counts(normalize=True)
νΈμμ ['μμ½ν'].value_counts(normalize=True)
νΈμμ ['μΈμΆμλΉμ€'].value_counts(normalize=True)
μ΄λ κ², 5κ° νΈμμ λ°μ΄ν°λ‘ κ° μλΉμ€λ₯Ό μ 곡νκ³ μλ μ§μ λΉμ¨κ³Ό μλ μ§μ λΉμ¨μ νμΈν μ μλ€.
κ°νΈνκ² DB μ μ°κ²°νμ¬ λ°μ΄ν° μ μ₯νκΈ°
νμ΄μ¬μμλ, 쿼리문μ λ λ¦¬μ§ μμλ λ°μ΄ν°λ₯Ό DB μ λ£μ μ μλ€.
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://user_name:user_address/db_name", echo=False)
νΈμμ .to_sql(name="convenience", if_exists='append', con=engine)
λ¨Όμ , DB λ₯Ό μ°κ²°νκΈ° μν΄ create_engine λͺ¨λμμ sqlalchemy λ₯Ό λΆλ¬μ¨λ€.
κ·Έλ¦¬κ³ , engine μ κΈ°μ‘΄ db μ°κ²° κ³μ κ³Ό λ°μ΄ν°λ₯Ό λ£μ DB λ₯Ό νμνλ€.
to_sql() λ©μλλ₯Ό μ¬μ©νμ¬ νΈμμ λ°μ΄ν°λ₯Ό convenience λΌλ ν μ΄λΈ λͺ μΌλ‘ λ°λ‘ μ μ₯ν μ μλ€.
DB ꡬ쑰λ₯Ό λͺ°λΌλ λ°μ΄ν°λ₯Ό λ£κ³ λΉΌκ³ μμ νλ κ³Όμ κΉμ§ ν μ μλ€.
λ¨, μ΅κ³ μ μ±λ₯μ μλΆν μ μλ€.
λν, ν΄λΉ data λ€μ μλ£νλ€μ μμλ‘ text, bigint λ± μΌλ‘ λ€ λλ €λ°κΈ° λλ¬Έμ μΌμΌμ΄ μλ£νμ μμ ν΄μΌνλ λ²κ±°λ‘μμ΄ μλ€.
κ·Έλ¦¬κ³ , μ΄λ¬ν κ³Όμ μ 'κ°μ²΄ κ΄κ³ λ§€ν(ORM, Object-Relation Mapping)' μ΄λΌκ³ νλ€.
μμΈ μ§λ λΆλ¬μ€κΈ°
νμ΄μ¬μμλ, folium μ΄λΌλ λͺ¨λλ‘ μ§λλ₯Ό λμΈ μ μλ€.
import folium # μμΌλ©΄ pip install folium
# μμΉμ μ€ ν¬κΈ°λ₯Ό μ€μ ν΄μ€λ€.
seoul_map = folium.Map(location=[37.55, 126.98], zoom_start=12)
seoul_map
folium μ Map() λ©μλλ₯Ό ν΅ν΄ ν΄λΉ μμΉμ μ€ ν¬κΈ°λ₯Ό μ€μ ν΄μ£Όλ©΄, μνλ μμΈ μμΉμ μ§λλ₯Ό λμμ€λ€.
μμΈμ νΈμμ λ°μ΄ν°λ₯Ό μ§λμ μκ°ννκΈ° : μμΈμ νΈμμ μ μ μ¨
μμΈμ 'ꡬ'λ₯Ό μκ°ν ν μ μλ μ λ³΄κ° λ΄κΈ΄ json νμΌμ ν΅ν΄ μ κ·Όν΄λ³΄μ.
import json
geo_data = json.load(open("./skorea_municipalities_geo_simple.json", "r", encoding="utf-8"))
μ§λ¦¬ λ°μ΄ν°μ νΈμμ λ°μ΄ν°λ₯Ό λ£μ΄ folium μ ν΅ν΄ μμΈμ νΈμμ μ μ μ¨μ μκ°νν΄λ³΄μ.
folium.Choropleth(geo_data = geo_data,
data = μμΈνΈμμ ,
columns = [μμΈνΈμμ .index, 'shopName'],
fill_color='YlOrRd', fill_opacity=0.7, line_opacity=0.3,
key_on = 'feature.properties.name').add_to(seoul_map)
folium μ Choropleth() λ©μλλ₯Ό ν΅ν΄, seoul_map μ μ κ΅ νΈμμ μ μ μ¨μ μκ°ν ν μ μλ€.
μμΈμ νΈμμ λ°μ΄ν°λ₯Ό μ§λμ μκ°ννκΈ° : μμΈμ GS νΈμμ μ’ν
μ΄λ²μλ λ§μ»€ ννλ‘ μμΈμμ GS νΈμμ μμΉλ₯Ό μκ°νν΄λ³΄μ.
# λ€μ μ΄κΈ°ν
seoul_map = folium.Map(location=[37.55, 126.98], zoom_start=12)
# μμΈ λ°μ΄ν°λ₯Ό ν΅ν΄ μμΈ GS25 νΈμμ μ§λμ λ§μ»€ νμνκΈ°
for idx, row in μμΈ[['brand', 'lat', 'longs']].iterrows():
try:
if row.brand == 'GS25':
folium.Marker([row.longs, row.lat], popup=row.brand).add_to(seoul_map)
except:
pass
folium μ Marker() λ©μλλ₯Ό ν΅ν΄ ν΄λΉ νΈμμ μ μλ, κ²½λ‘ λ°μ΄ν°λ₯Ό λ£μ΄ seoul_map μ λ§μ»€λ₯Ό λμΈ μ μλ€.
mataplotlib.pylot (plt) κ·Έλν νκΈ κΉ¨μ§ νμ μꡬ ν΄κ²°νκΈ°
μ΄μ , κ·Έλν ννλ‘λ νμΈνκΈ° μν΄ mataplotlib.pylot (as plt) λ₯Ό μ¬μ©ν κ²μ΄λ€.
본격μ μΌλ‘ μμνκΈ° μ , plt κ·Έλνλ μμ§ νκΈμ μ λλ‘ μ§μνμ§ μμμ, νκΈ κΉ¨μ§ νμ λ¬Έμ κ° μλ€.
μ΄λ₯Ό μ½λλ₯Ό κ³μ μ€νμμΌμ νκΈ κΉ¨μ§ νμμ μΌμμ μΌλ‘ ν΄κ²°ν μ μμ§λ§, κ³μ μ½λλ₯Ό μμ±νλλ°μ λ²κ±°λ‘μμ΄ μκΈ°μ μꡬ ν΄κ²° λ°©λ²μ ν΅ν΄ μ€μ ν΄λμ.
[ μ£ΌνΌν° λ ΈνΈλΆ plt νκΈ κΉ¨μ§ μꡬ ν΄κ²°νκΈ° ]
μ£ΌνΌν° λ ΈνΈλΆ(Jupyter notebook) - Matplotlib νκΈ κΉ¨μ§ νμ ν΄κ²°
plt.figure().add_subplot().set_title('νκΈ μ λͺ© ν μ€νΈ Plot') plt.plot(x, y)β λ¬Έμ νμ μ£ΌνΌν° λ ΈνΈλΆμμ Matplotlib ν¨ν€μ§λ₯Ό μ΄μ©νμ¬ κ·Έλνλ₯Ό κ·Έλ €λΌ λ, λ²λ‘λ μΆ, μ λͺ©(title)λ±μμ νκΈμ μ¬μ©νλ©΄ ν
itisik.tistory.com
λλ μ ν΄λΉ λ§ν¬λ₯Ό ν΅ν΄, νκΈ ν°νΈ κΉ¨μ§ λ¬Έμ λ₯Ό μꡬμ μΌλ‘ ν΄κ²°νλ€.
μ κ΅ νΈμμ μ μ μ¨ κ·Έλν μκ°ννκΈ° : λ§λ κ·Έλν
μ΄μ , κ·Έλν ννλ‘ μ κ΅ νΈμμ μ μ μ¨μ λνλ΄λ³΄μ.
import matplotlib.pyplot as plt
import numpy as np
# νΈμμ data λΆλ¬μ€κΈ°(νΈμμ μ)
data = νΈμμ .groupby(['brand'])['shopName'].count()
# plt κ° μ€μ
plt.style.use("ggplot") # λ€λ₯Έ λ°©μμΌλ‘λ κ°λ₯: seaborn λ±
plt.tilte("μ κ΅ νΈμμ μ μ μ¨")
x = np.arrange(data.value.size)
name = data.index
values = data.values
# plt μ€μ
plt.bar(x, values)
plt.xticks(x, name)
plt.legend(loc='best', labels='μ μ μ¨')
# plt μΆλ ₯
plt.show()
λ§λ κ·Έλν ννμ νΈμμ μ μ μ¨μ λ³Ό μ μλ€.
μ κ΅ νΈμμ μ μ μ¨ κ·Έλν μκ°ννκΈ° : νμ΄ κ·Έλν
μ΄λ²μλ μν ννμΈ νμ΄ κ·Έλνλ‘ μ κ΅ νΈμμ μ μ μ¨μ λνλ΄λ³΄μ.
import matplotlib.pyplot as plt
import numpy as np
# νΈμμ data λΆλ¬μ€κΈ°(νΈμμ μ)
data = νΈμμ .groupby(['brand'])['shopName'].count()
# plt κ° μ€μ
plt.style.use("ggplot")
plt.figure(figsize=(15,15))
plt.title('μ κ΅ νΈμμ μ μ μ¨')
x = np.arange(data.values.size)
name = data.index
values = data.values
# plt μ€μ
plt.pie(values, labels=data.index) # μνμ νμ΄ νν
plt.legend(loc='best', labels=data.index)
# plt μΆλ ₯
plt.show()
μνμ νμ΄ νν κ·Έλνλ‘ νΈμμ μ μ μ¨μ λ³Ό μ μλ€.
'Python > [κΈ°μ΄ κ°μ μ 리]' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
python κΈ°μ΄ 13 (0) | 2023.03.12 |
---|---|
python κΈ°μ΄ 12 (3) | 2023.03.06 |
python κΈ°μ΄ 10 (0) | 2023.03.03 |
python κΈ°μ΄ 9 (0) | 2023.03.01 |
python κΈ°μ΄ 8 (0) | 2023.02.26 |