Python Programming - Visualization PDF
Document Details
Uploaded by Deleted User
소프트웨어 융합 대학
2024
Tags
Summary
This document is a set of Python programming notes focusing on data visualization techniques. It details various Python graphing libraries and examples of how they are implemented. The document covers using matplotlib, pandas and other libraries for data visualization and includes multiple tasks (missions).
Full Transcript
Python Programming - visualization 2024년 2학기 소프트웨어융합대학 Data visualization module ❑ matplotlib ❑ Seaborn ❑ plotnine ❑ folium ❑ plotly ❑ pyecharts https://zzsza.github.io/development/2018/08/24/data-visualization-in-python/...
Python Programming - visualization 2024년 2학기 소프트웨어융합대학 Data visualization module ❑ matplotlib ❑ Seaborn ❑ plotnine ❑ folium ❑ plotly ❑ pyecharts https://zzsza.github.io/development/2018/08/24/data-visualization-in-python/ 2 Figure의 구성 요소 3 Pandas에서 그래프 그리기 ❑ 종류: 'line': 선 그래프 'bar': 막대 그래프 'barh': 수평 막대 그래프 'hist': 히스토그램 'box': 상자 그림 'area': 면적 그래프 4 pandas에서 기본 graph 그리기 (1) import pandas as pd import numpy as np row=4; col=5 df=pd.DataFrame(np.random.randn(row, col)) print(df) df.plot() 평균이 0이고, 표준편차가 1인 난수 발생 행이 4개, 열이 5개짜리 array 생성 [mission] 1.row와 col 값 변경해 보기 [주: 모든mission에 대해 새로운 cell을 만들어서 실행하기) Legend, major tick 등을 기본적으로 표시 5 pandas에서 기본 graph 그리기 (2) import pandas as pd [mission] import numpy as np 1. df의 row의 개수를 변경해 보기 np.random.seed(0) 2. column 이름 변경해 보기 df=pd.DataFrame(np.random.randn(100,3), index=pd.date_range('1/1/2023', periods=100), 3. column 수 늘여 보기 columns=['A','B','C’]) 4. 색깔 변경해 보기 df1=df.cumsum(); print(df1) df1.plot(color=['blue', 'green', 'orange']) 빨간색 (red) 검은색 (black) 색깔 이름 주황색 (orange) 흰색 (white) 노란색 (yellow) 라임색 (lime) 초록색 (green) 에메랄드색 (emerald) 청록색 (cyan) 터쿼이즈색 (turquoise) 파란색 (blue) 스카이 블루 (sky blue) 보라색 (purple) 코랄색 (coral) 핑크색 (pink) 쿠르마색 (khaki) 갈색 (brown) 은색 (silver) 회색 (gray) 6 pandas: bar chart import pandas as pd import numpy as np df=pd.DataFrame(np.random.randn(4,4), columns=['zero', 'one', 'two', 'three']) color_list=['blue', 'green', 'red', 'orange'] print(df) df.plot(kind='barh', color=color_list) zero one two three 0 -0.015682 0.160928 -0.190653 -0.394850 1 -0.267734 -1.128011 0.280442 -0.993124 2 0.841631 -0.249459 0.049495 0.493837 3 0.643314 -1.570623 -0.206904 0.880179 [mission] 1. Data frame의 index 이름을 설정해서 실험 2. kind를 'hist’, ‘bar’, ‘box’ 로 바꿔가면서 실험 7 matplotlib module: graph 그리기 import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 5., 0.2) plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^') plt.show() x value y value Line style (color+mark) [mission] 1. 변수 t의 값 범위 바꿔 보기 2. plt.plot()에서 y-value 바꿔보기 3. plot.plot()에서 color와 marker 바꿔보기 4. Line 추가하기 matplotlib.pyplot.plot()사용법 8 matplotlib module: pie chart 그리기 import matplotlib.pyplot as plt slang_usage = ['Rarely', 'Sometimes', 'Never', 'Often'] my_colors = ["#dde5b6", "#adc178", "#a98467", "#6c584c"] # my_colors = ['silver', 'gold', 'whitesmoke', 'lightgray'] # my_colors = plt.cm.Greens(np.linspace(0.2, 1, len(slang_usage))) values = [438, 401, 195, 109] plt.pie(values, labels=slang_usage, autopct='%.1f%%', colors=my_colors) plt.title('Pie Chart') plt.show() [mission] 1. values 바꿔보기 2. my_colors 바꿔보기 (세 가지 다 해 보기) matplotlib.pyplot.pie()사용법 9 matplotlib module: 수직막대 graph 그리기 import matplotlib.pyplot as plt import numpy as np x=list(np.arange(5)) years=['2019', '2020', '2021', '2022', '2023'] values=[100, 400, 600, 800, 900] my_colors=['r', 'b', 'g', 'y', 'violet'] plt.bar(x, values, color=my_colors, width=0.7) plt.xticks(x, years) plt.title('Cumulative purchase ') plt.xlabel('Year') plt.ylabel('Purchase') for i, v in enumerate(x): [mission] plt.text(v, values[i], values[i], fontsize=9, 1. plt.bar()의 option들 바꿔보기 color='blue', horizontalalignment='center', 2. plt_text()의 option들 바꿔보기 verticalalignment='bottom') plt.show() matplotlib.pyplot.bar()사용법 10 matplotlib module: 수평막대 graph 그리기 import matplotlib.pyplot as plt import numpy as np y=list(np.arange(5)) # [0, 1, 2, 3, 4] years=['2019', '2020', '2021', '2022', '2023'] values=[100, 400, 600, 800, 900] my_colors=['r', 'b', 'g', 'y', 'violet'] bars=plt.barh(y, values, color=my_colors, height=0.7) plt.yticks(y, years) plt.title('Cumulative purchase') plt.ylabel('Year') plt.xlabel('Purchase') for bar, value in zip(bars, values): plt.text(bar.get_width(), bar.get_y() + bar.get_height() / 2, str(value), ha='left', va='center') plt.show() [mission] 1. plt.barh()의 option들 바꿔보기 2. plt_text()의 option들 바꿔보기 11 산포도 그리기 (1) import matplotlib.pyplot as plt import numpy as np x = np.arange(1, 20, 2) y = np.random.randint(20, size=10) plt.scatter(x, y, color='b') plt.title('Scatter Plot') plt.xlabel('X-axis') plt.ylabel('Y-axis') plt.xticks(x, x) y_ticks = np.arange(0, max(y) + 1, 2) plt.yticks(y_ticks) [mission] plt.show() 1. x와 y의 값을 바꿔보기 (개수, 범위, 간격 등) 2. y_ticks 바꿔보기 3. plt.scatter()의 color 바꿔보기 12 산포도 그리기 (2) import matplotlib.pyplot as plt import numpy as np np.random.seed(0) n = 50 x = np.random.rand(n) y = np.random.rand(n) area = (30 * np.random.rand(n))**2 colors = np.random.rand(n) plt.scatter(x, y, s=area, c=colors, cmap='plasma') plt.show() [mission] 1. n을 바꿔보기 2. random number를 만드는 방법을 바꿔보기 (np.random.randint(s, f, n)) 3. cmap 바꿔보기 (‘viridis’, ‘coolwarm’, ‘cividis’) 13 Line graph 그리기 import matplotlib.pyplot as plt import numpy as np x = np.arange(0.1, 10, 0.1) y = np.sin(x) plt.plot(x, y, label='sin(x)', color='blue', linestyle='-', linewidth=2) plt.title('Line Graph') plt.xlabel('X-axis') plt.ylabel('Y-axis') plt.legend() plt.show() [mission] 1. y값을 만들기 위한 함수 바꿔보기 (cos(), exp(), log() 적용해 보기) 2. plt.plot()의 option 바꿔보기 14 Area graph 그리기 import pandas as pd import matplotlib.pyplot as plt [mission] data = { 1. plt.fill_between()의 option 바꿔보기 'Value1': [10, 15, 25, 20, 30], 'Value2': [5, 10, 15, 10, 20] 2. Value3 추가하기 } Date = ['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01', '2023-05-01'] df = pd.DataFrame(data, index=Date) plt.figure(figsize=(10, 6)) plt.fill_between(df.index, df['Value1'], label='Value1', color='skyblue', alpha=0.4) plt.fill_between(df.index, df['Value2'], label='Value2', color='orange', alpha=0.4) plt.title('Area Graph') plt.xlabel('Date') plt.ylabel('Values') plt.legend() plt.show() 15 종합해서 적용해 보기 (1) import pandas as pd import numpy as np def plot_line(df, xlabel, ylabel, title, legend_title): df.plot(kind='line', marker='o'); plt.title(title); plt.xlabel(xlabel); plt.ylabel(ylabel) plt.legend(title=legend_title); plt.show() return def plot_bar(df, xlabel, ylabel, title, legend_title): df.plot(kind='bar'); plt.title(title); plt.xlabel(xlabel); plt.ylabel(ylabel) plt.legend(title=legend_title); plt.show() return def plot_area(df, title): df.plot(kind='area', stacked=True); plt.title(title); plt.show() return def plot_pie(df, title): colors = plt.cm.Paired(range(len(df.columns))); sum_df = df.sum(axis=1) sum_df.plot(kind='pie', autopct='%1.1f%%', colors=colors); plt.title(title); plt.show() return 0 def draw_plots(df, xlabel, ylabel, title, legend_title): plot_line(df, xlabel, ylabel, title, legend_title) plot_bar(df, xlabel, ylabel, title, legend_title) plot_area(df, title) plot_pie(df, title) return item_list = ['Americano', 'Latte', 'Tea', 'Juice', 'Cake'] # 품목명 customer_list = ['Irene', 'Edith', 'Gaby', 'Anna', 'Erica', 'Charles', 'Bailey'] # 고객 이름 customer_purchase={} for item in item_list: # 각 품목의 구매액을 10,000~30,000 사이로 고객 수 만큼 생성 customer_purchase[item] = np.random.randint(10, 30, len(customer_list)) cp_df = pd.DataFrame(customer_purchase, index=customer_list) # data frame 생성 print(cp_df) draw_plots(cp_df, 'Customers', 'Amount', 'Customer-Item types', 'Customers') pc_df=cp_df.transpose() print(pc_df) draw_plots(pc_df, 'Item types', 'Amount', 'Item types-Customer', 'Item Types') 16 종합해서 적용해 보기 (2) import numpy as np import pandas as pd import matplotlib.pyplot as plt item_list = ['Americano', 'Latte', 'Tea', 'Juice', 'Cake'] customer_list = ['Irene', 'Edith', 'Gaby', 'Anna', 'Erica', 'Charles', 'Bailey'] customer_purchase = {} for item in item_list: customer_purchase[item] = np.random.randint(10, 50, len(customer_list)) cp_df = pd.DataFrame(customer_purchase, index=customer_list) plt.figure(figsize=(10, 6)) scatter = plt.scatter( np.repeat(cp_df.index, len(cp_df.columns)), np.tile(cp_df.columns, len(cp_df.index)), c=cp_df.values.flatten(), cmap='viridis', s=cp_df.values.flatten() * 20 ) plt.colorbar(scatter, label='Purchase Amount') plt.xlabel('Customer') plt.ylabel('Product') plt.title('Customer Purchase Amounts for Each Product') plt.show() 17