파이썬에서 R처럼 gather 함수와 자주 쓸 것 같은 시각화 코드
2019. 7. 6. 17:02ㆍ분석 Python/Visualization
파이썬 시각화 연습
난 처음에 R로 배우다 보니, ggplot으로 많이 시각화를 한다.
거기서는 특히 dplyr에 gather와 혼합을 해서 사용을 하는데, 그것과 비슷한 개념으로 코딩을 하고 싶어서
찾아봤지만, 결론은 굳이 그렇게 할 필요가 없었다
파이썬에서는 좀 더 쉽게 저차원에서 시각화를 하다 보니 좀만 알면 쉽고 이쁘게 할 수가 있었다.
파이썬에서 gather를 하려면 melt를 잘 이용해야 한다!
import pandas as pd
import numpy as np
names = [ 'Wilbur', 'Petunia', 'Gregory' ]
a = [ 67, 80, 64 ]
b = [ 56, 90, 50 ]
df = pd.DataFrame({'names':names,'a':a,'b':b})
## gather 함수
def gather( df, key, value, cols ):
id_vars = [ col for col in df.columns if col not in cols ]
id_values = cols
var_name = key
value_name = value
return pd.melt( df, id_vars, id_values, var_name, value_name )
gather( df, 'drug', 'heartrate', ['a','b'] )
이렇게 melt를 하면 쉽게 이용가능하다.
churn data로 시각화하기
churn 비율을 pie chart로 시각화 해보기
churn = pd.read_csv("./../Data/Churn.csv")
df = churn.groupby("churn").size().reset_index(name='counts')
# Make the plot with pandas
fig, ax = plt.subplots(figsize=(12, 7), subplot_kw=dict(aspect="equal"), dpi= 80)
data = df['counts']
categories = df['churn']
explode = [0.1 ,0.0]
def func(pct, allvals):
absolute = int(pct/100.*np.sum(allvals))
return "{:.1f}% ({:d} )".format(pct, absolute)
wedges, texts, autotexts = ax.pie(data,
autopct=lambda pct: func(pct, data),
textprops=dict(color="w"),
colors=plt.cm.Dark2.colors,
startangle=140,
explode=explode)
ax.legend(wedges, categories, title="Churn Class", loc="center left", bbox_to_anchor=(1, 0, 0.5, 1))
plt.setp(autotexts, size=10, weight=700)
ax.set_title("Class of Churn : Pie Chart")
plt.show()
다음으로는 속성별로 나눠서 진행하기 위한 과정 진행
int_type = churn.select_dtypes("int64").columns.tolist()
object_type = churn.select_dtypes("object").columns.tolist()
object_type = list(set(object_type) - set(["churn"]))
types = int_type + object_type
numeric_type = churn.select_dtypes("float").columns.tolist()
Categorical , Integer 변수 속성별 비율 파악하기 시각화
fig, ax = plt.subplots(3, 4, figsize=(20, 10))
for variable, subplot in zip(types , ax.flatten()):
props = churn.groupby(variable)['churn'].value_counts(normalize=True).unstack()
props.plot(kind='barh', stacked='True' ,ax = subplot)
for label in subplot.get_xticklabels():
label.set_rotation(90)
Numerical 변수, Churn 별로 Boxplot
fig, ax = plt.subplots(2, 4, figsize=(15, 10))
for var, subplot in zip(numeric_type, ax.flatten()):
sns.boxplot(x='churn' , y = var , data=churn,ax=subplot)
gather와 boxplot를 사용해서 한꺼번에 시각화해서 보는 방법
numeric_gather = gather( churn , 'key', 'value', numeric_type )
ax = sns.boxplot(x="key", y="value", hue="churn",
data=numeric_gather, palette="Set3")
plt.xticks(rotation=90)
plt.show()
Numeric Scatter Plot도 그리고 Density도 같이 그리기
sns.set_style("whitegrid") ;
sns.pairplot( data = churn , hue ='churn' ,vars=numeric_type )
이것은 파이썬 처음에 EDA 할 때 많이 쓸 것 같아서 한번 만들어 봤다
각 변수별로 보고 싶은데, 보통 귀찮으니 한꺼번에 하고 싶은 경우가 많다.
위에 있는 코드를 사용하면 한 번에 볼 수 있을 것 같다.
import seaborn as sns
sns.set(rc={'figure.figsize':(15.7,11.27)})
fig , ax = plt.subplots(1,2 , figsize = (25,10))
axx = ax.flatten()
g=sns.violinplot(x="value" , y="variable", hue = "occur" , palette="Set3", split=True,
scale="count", inner="quartile" ,scale_hue=False ,
data = gg[list(missing_cut.keys()) + ["occur"]].melt("occur"), ax = axx[0])
g.set_title("Generate" , size = 30)
g=sns.violinplot(x="value" , y="variable", hue = "occur" , palette="Set3", split=True,
scale="count", inner="quartile" ,scale_hue=False ,
data = Origin[list(missing_cut.keys()) + ["occur"]].melt("occur") , ax = axx[1])
g.set_title("RAW" , size = 30)
g.set_yticklabels("")
plt.show()
참고 :
https://towardsdatascience.com/how-to-perform-exploratory-data-analysis-with-seaborn-97e3413e841d
https://github.com/mwaskom/seaborn/issues/1027
728x90
'분석 Python > Visualization' 카테고리의 다른 글
[ Python ] plotly express facet_row , col scale free 하는 법 공유 (0) | 2019.10.18 |
---|---|
[ Python ] seaborn subplots x_ticklables rotate 하는 법 (0) | 2019.09.13 |
Python Group 별로 Bar Graph 그릴 때, (0) | 2019.06.09 |
Python에서 RocCurve 시각화하기. (0) | 2019.05.18 |
Confusion matrix 시각화 (0) | 2019.05.14 |