๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

HTML์—์„œ Python์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” PyScript (4) ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฐฑ์—”๋“œ(Back-End)/Node js

HTML์—์„œ Python์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” PyScript (4)

์ง•์ง•์•ŒํŒŒ์นด 2022. 11. 25. 14:38
728x90
๋ฐ˜์‘ํ˜•

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” itadventrue ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

https://itadventure.tistory.com/545

 

ํŒŒ์ด์Šคํฌ๋ฆฝํŠธ ๋„์ „๊ธฐ(4) - csv ์ฝ๊ณ  ๊ทธ๋ž˜ํ”„ ์ถœ๋ ฅํ•˜๊ธฐ

์ง€๋‚œ ๊ฒŒ์‹œ๊ธ€์— ์—ฐ์žฌ๋˜๋Š” ๋„์ „๊ธฐ 4ํŽธ์ž…๋‹ˆ๋‹ค . https://itadventure.tistory.com/544 ํŒŒ์ด์Šคํฌ๋ฆฝํŠธ ๋„์ „๊ธฐ(3) - ํŒ๋‹ค์Šค๋กœ csv ์ฝ๊ณ  ํ‘œ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ ์ง€๋‚œ ๊ฒŒ์‹œ๊ธ€์— ์—ฐ์žฌ๋˜๋Š” ๋„์ „๊ธฐ 3ํŽธ์ž…๋‹ˆ๋‹ค : https://itadventure.tist

itadventure.tistory.com

 

 

 

 

๐ŸŽ„ CSV ์ฝ์–ด์„œ ๊ทธ๋ž˜ํ”„ ์ถœ๋ ฅ

โ— Dataset ๋กœ๋“œ

https://www.kaggle.com/datasets/surajjha101/bigbasket-entire-product-list-28k-datapoints

 

์ด ๋ฐ์ดํ„ฐ ์„ธํŠธ์—๋Š” ๊ฐ„๋‹จํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ 10๊ฐœ์˜ ์†์„ฑ์ด ํฌํ•จ

  • index - ๋‹จ์ˆœํžˆ ์ธ๋ฑ์Šค!
  • product - ์ œํ’ˆ์˜ ์ œ๋ชฉ(๋‚˜์—ด๋œ ๋Œ€๋กœ)
  • category - ์ œํ’ˆ์ด ๋ถ„๋ฅ˜๋œ ์นดํ…Œ๊ณ ๋ฆฌ
  • sub_category - ์ œํ’ˆ์ด ๋ณด๊ด€๋œ ํ•˜์œ„ ์นดํ…Œ๊ณ ๋ฆฌ
  • brand - ์ œํ’ˆ์˜ ๋ธŒ๋žœ๋“œ
  • sale_price - ์‚ฌ์ดํŠธ์—์„œ ์ œํ’ˆ์ด ํŒ๋งค๋˜๋Š” ๊ฐ€๊ฒฉ
  • market_price - ์ œํ’ˆ์˜ ์‹œ์žฅ ๊ฐ€๊ฒฉ
  • type - ์ œํ’ˆ์ด ์†ํ•˜๋Š” ์œ ํ˜•
  • rating - ์ œํ’ˆ์ด ์†Œ๋น„์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋“ฑ๊ธ‰
  • description - ๋ฐ์ดํ„ฐ ์„ธํŠธ์— ๋Œ€ํ•œ ์„ค๋ช…(์ž์„ธํ•œ ๋‚ด์šฉ)

FE๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ "ํ• ์ธ"์€ (marketprice - saleprice) / market_price * 100์œผ๋กœ ์ƒ์„ฑ

์—ฌ๊ธฐ์—์„œ ์†Œ๋น„์ž๊ฐ€ ์ ์  ๋” ์ข‹์•„์ง€๋Š” ๊ฒƒ์„ ์–ป๋Š” ๋ฐ ๋„์›€์ด ๋จ

 

 

โ— ํŒ๋‹ค์Šค(Pandas)๋กœ CSV ์ฝ๊ธฐ

<html>
    <head>
    <title>
    Read CSV with Pandas using PyScript 
    </title>
    <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
    <script defer src="https://pyscript.net/alpha/pyscript.js"></script>

    <style type="text/css">
    table.dataframe th {
      background-color: #EA6153 !important;
      color: white !important;
      text-align:center !important;
      padding: 5px 15px;
      font-size:9pt !important;
    }
    table.dataframe td {
      color: black !important;
      text-align:center !important;
      padding: 5px 15px;
      font-size:9pt !important;
    }

    table.dataframe tr {
        background-color: #FFFFFF !important;
    }

    table.dataframe tr:nth-child(odd) {
        background-color: #E9E9E9 !important;
    }

    </style>
 
    <py-env>
        - pandas
    </py-env>
    </head>
    <body style="padding:20px;">
      <h2>ํŒŒ์ด์Šคํฌ๋ฆฝํŠธ์—์„œ ํŒ๋‹ค์Šค(Pandas)๋กœ CSV ์ฝ๊ธฐ</h1>
      <div id="csv" style="margin-top:10px"></div>
      <py-script>
        import pandas as pd 
        from pyodide.http import open_url

        # URL ์—์„œ csv ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ํŒ๋‹ค์Šค ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
        df = pd.read_csv(open_url("BigBasketProducts.csv"))

        # ์ถœ๋ ฅํ•  HTML ์š”์†Œ๋ฅผ ์„ ํƒ
        csv = Element('csv')

        # ํ•ด๋‹น HTML ์š”์†Œ์— ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
        csv.write(df)
      </py-script>

    </body>
</html>

 

๋ชจ๋“  ํ–‰์„ ์ถœ๋ ฅํ•˜๋ ค๋ฉด ๋ฐ‘ ์ฝ”๋“œ ์ถ”๊ฐ€

pd.set_option('display.max_rows', None)

 

 

 

๐ŸŽ„ "๋ธŒ๋žœ๋“œ๋ณ„ ํ‰์  ํ‰๊ท "์œผ๋กœ ๊ทธ๋ž˜ํ”„ ์ถ”์ถœํ•˜๊ธฐ

โ— ์„ธ๋ถ€ ๋‚ด์šฉ

๋ธŒ๋žœ๋“œ๋ณ„ ํ‰์  ํ‰๊ท ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์†Œ์Šค๋ฅผ ๊ตฌ์„ฑ

    # ํ‰์ ์„ ์ถ”์ถœ๋Œ€์ƒ์œผ๋กœ ๋ธŒ๋žœ๋“œ๋ณ„๋กœ ๊ทธ๋ฃนํ™”
    df_group = df[['rating']].groupby(df['brand'])

 

๊ฒฐ๊ณผ ์ถœ๋ ฅ

csv.write(df_group.mean())

 

โ— ํ‰๊ท  ์ถ”์ถœ ์ฝ”๋“œ ๊ตฌํ˜„

<html>
    <head>
    <title>
    Read CSV with Pandas using PyScript 
    </title>
    <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
    <script defer src="https://pyscript.net/alpha/pyscript.js"></script>

    <style type="text/css">
    table.dataframe th {
      background-color: #EA6153 !important;
      color: white !important;
      text-align:center !important;
      padding: 5px 15px;
      font-size:9pt !important;
    }
    table.dataframe td {
      color: black !important;
      text-align:center !important;
      padding: 5px 15px;
      font-size:9pt !important;
    }

    table.dataframe tr {
        background-color: #FFFFFF !important;
    }

    table.dataframe tr:nth-child(odd) {
        background-color: #E9E9E9 !important;
    }

    </style>
 
    <py-env>
        - pandas
    </py-env>
    </head>
    <body style="padding:20px;">
      <h2>ํŒŒ์ด์Šคํฌ๋ฆฝํŠธ์—์„œ ํŒ๋‹ค์Šค(Pandas)๋กœ CSV ์ฝ๊ธฐ</h1>
      <div id="csv" style="margin-top:10px"></div>
      <py-script>
        import pandas as pd 
        from pyodide.http import open_url

        # URL ์—์„œ csv ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ํŒ๋‹ค์Šค ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
        df = pd.read_csv(open_url("BigBasketProducts.csv"))

        # ๋ธŒ๋žœ๋“œ๋ณ„ ํ‰์  ํ‰๊ท ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์†Œ์Šค๋ฅผ ๊ตฌ์„ฑ
        df_group = df[['rating']].groupby(df['brand'])

        # ๋ชจ๋“  ํ–‰ ์ถœ๋ ฅ
        pd.set_option('display.max_rows', None)

        # ์ถœ๋ ฅํ•  HTML ์š”์†Œ๋ฅผ ์„ ํƒ
        csv = Element('csv')

        # ํ•ด๋‹น HTML ์š”์†Œ์— ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
        csv.write(df_group.mean())
      </py-script>

    </body>
</html>

 

 

โ— NaN ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๊ณค๋ž€ํ•˜๋‹ˆ 0์œผ๋กœ ๋ณ€๊ฒฝ

df_group = df[['rating']].fillna(0).groupby(df['brand'])

 

โ— Y ์ถ•์€ ์•„๋ž˜์—์„œ ์œ„๋กœ ์ˆœ์„œ๊ฐ€ ๋‚˜์—ด

plt.gca().invert_yaxis()

 

 

โ— ๊ทธ๋ž˜ํ”„ ์ฝ”๋“œ ๊ตฌํ˜„

<html>
    <head>
    <title>
    Read CSV with Pandas using PyScript 
    </title>
    
    <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
    <script defer src="https://pyscript.net/alpha/pyscript.js"></script>

    <style type="text/css">
    table.dataframe th {
      background-color: #EA6153 !important;
      color: white !important;
      text-align:center !important;
      padding: 5px 15px;
      font-size:9pt !important;
    }
    table.dataframe td {
      color: black !important;
      text-align:center !important;
      padding: 5px 15px;
      font-size:9pt !important;
    }

    table.dataframe tr {
        background-color: #FFFFFF !important;
    }

    table.dataframe tr:nth-child(odd) {
        background-color: #E9E9E9 !important;
    }

    </style>
    
    <py-env>
        - pandas
        - matplotlib
    </py-env>

</head>

<body style="padding:20px;">
    <h2>ํŒŒ์ด์Šคํฌ๋ฆฝํŠธ์—์„œ ํŒ๋‹ค์Šค(Pandas)๋กœ CSV ์ฝ๊ธฐ</h1>
    <div id="pltdiv"></div>
    <div id="csv" style="margin-top:10px"></div>
    <py-script>
        import pandas as pd 
        from pyodide.http import open_url

        # URL ์—์„œ csv ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ํŒ๋‹ค์Šค ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
        df = pd.read_csv(open_url("BigBasketProducts.csv"))

        # ๋ธŒ๋žœ๋“œ๋ณ„ ํ‰์  ํ‰๊ท ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์†Œ์Šค๋ฅผ ๊ตฌ์„ฑ + Nan ๊ฐ’์„ 0์œผ๋กœ + rating ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
        df_group = df.fillna(0).groupby('brand')[['rating']].mean().sort_values(by='rating', ascending=False)

        #df_group.columns = ['brand', 'rating']

        # ๋ชจ๋“  ํ–‰ ์ถœ๋ ฅ
        pd.set_option('display.max_rows', None)

        # ์ถœ๋ ฅํ•  HTML ์š”์†Œ๋ฅผ ์„ ํƒ
        csv = Element('csv')

        # ํ•ด๋‹น HTML ์š”์†Œ์— ํ‰์  ํ‰๊ท ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ
        csv.write(df_group)

        import matplotlib.pyplot as plt

        plt.rcParams.update({'font.size': 7})
        fig = plt.figure(figsize=(5, 20))    

        plt.plot(
          df_group['rating'].to_list(),
          df_group.index.to_list(),
          label='Rating of Brand' )
        
        plt.gca().invert_yaxis()
        
        pltdiv = Element('pltdiv')    
        pltdiv.write(fig)
      </py-script>
    </body>
</html>

 

 

728x90
๋ฐ˜์‘ํ˜•
Comments