[3. 엑셀 대신 파이썬: 재고찾기 프로그램] 사용한 코드와 설명

Computer 관심/Pandas|2020. 7. 18. 18:24
반응형

[3. 엑셀 대신 파이썬: 재고찾기 프로그램] 사용한 코드와 설명

#!/usr/bin/env python
# coding: utf-8

# In[1]:

#판다스를 불러온다.
import pandas as pd


# In[2]:

# 데이터의 모든 row를 보이게 한다. 이 설정을 안하면 생략하고 보여줌.
pd.set_option('display.max_rows', None)


# In[3]:

# 불러올 파일을 명시함
file = 'INV_CurrentStock.csv'


# In[4]:

# csv파일을 판다스의 데이타프레임으로 변환하여 반환.
df_csv_data = pd.read_csv(file)


# In[5]:

# df_new_data에 칼럼 Location과 Quantity를 삭제한 데이터프레임을 넣음
df_new_data = df_csv_data.drop(columns=['Location', 'Quantity'])


# In[6]:

# drop_duplicates()를 사용해서 중복되는 열을 삭제 후 Item, Description, Category 칼럼만 남김
df_new_data = df_new_data.drop_duplicates().filter(['Item','Description','Category'])


# In[7]:


# print(df_new_data)


# In[8]:

# 로케이션 칼럼인 Warehouse 인 row의 인덱스를 반환 
is_warehouse = df_csv_data['Location']=='Warehouse'


# In[9]:

# 로케이션 칼럼인 Display 인 row의 인덱스를 반환 
is_display = df_csv_data['Location']=='Display'


# In[10]:

# df_csv_data[is_warehouse]를 사용하여 칼럼에 웨어하우스 라고 적힌 열들을 얻어내고
# 필요한 정보인 Item 과 Quantity만 보이게 한다.
warehouse_qty = df_csv_data[is_warehouse].filter(['Item','Quantity'])


# In[11]:

# df_csv_data[is_display]를 사용하여 칼럼에 디스플레이 라고 적힌 열들을 얻어내고
# 필요한 정보인 Item 과 Quantity만 보이게 한다.
display_qty = df_csv_data[is_display].filter(['Item','Quantity'])


# In[12]:


# print(warehouse_qty)


# In[13]:

#df_new_data와 arehouse_qty합치기
marged_warehouse= pd.merge(df_new_data, warehouse_qty, how='left', left_on=['Item'], right_on=['Item'])


# In[14]:

#marged_warehouse와 display_qty를 합치고 중복되는 칼럼 이름에 왼쪽 _warehouse 오른쪽 _display를 달아줌
marged_data=pd.merge(marged_warehouse, display_qty, how='left', left_on=['Item'], right_on=['Item'], suffixes=('_warehouse', '_display'))


# In[15]:

# 이렇게 합쳤을때 데이터가 없는quantity_warehouse칼럼과 qauntity_display칼럼에
# NA라고 나오는데 fillan를 통해 0으로 바꿔준다.
na_to_zero_data = marged_data.fillna(dict(Quantity_warehouse=0, Quantity_display=0))


# In[16]:

# 웨어하우스에는 0개 이상, 디스플레이는 0개인 제품을 확인한다.
data = na_to_zero_data.loc[(non_to_zero_data['Quantity_warehouse'] > 0) & (non_to_zero_data['Quantity_display'] == 0)]

print(data)

댓글()

[2. 엑셀 대신 파이썬: 재고찾기 프로그램] 엑셀 대신 파이썬을 사용할때 이점

Computer 관심/Pandas|2020. 7. 18. 18:22
반응형

첫글을 쓰고 나서 필요한 코드들을 찾데 2-3시간 걸린 것 같다.

이렇게 한번 고생해서 해놓으면 다음엔 실행만 하면 내가 원하는 결과를 얻을 수 있는게 파이썬으로 스크립트를 만드는 것의 장점이다.

 

 

엑셀을 이용했을 때

 

1. 재고관리 프로그램에서 재고 데이터를 내려받는다. 

제품명 위치 갯수
제왕의 의자 warehouse 2
예수침대 warehouse 1
힘들어 침대 warehouse 1
밤의 왕 침대 warehouse 0
바바리안 책상 warehouse 0
제왕의 의자 display 0
바바리안 책상 display 1
힘들어 침대 display 1
밤의 왕 침대 display 0
예수침대 display 0

내려받아진 CSV 데이터의 형식은 위와 같다.

 

Quiz. 매장에 진열이 가능한 제품은 무엇들 인가?

 

진열이 가능한 제품을 찾는데 얼마나 걸렸는가?

만일 내려 받아진 데이터가 아래와 같으면 매장 진열이 필요한 제품을 쉽게 찾을 수 있을텐데... 아쉽게도 데이터를 그렇게 전달해 주지 않는다.

 

제품명 창고 매장
제왕의 의자 2 0
예수침대 1 0
힘들어 침대 1 1
밤의 왕 침대 0 0
바바리안 책상 0 1

 

 

2. 새로운 시트를 만든 뒤 제품명들을 복사해 넣는다.

 

3. 중복되는 이름을 제거한다.

 

4. 창고와 매장의 열에 SUMIFS 함수를 사용하여 위와 같은 테이블을 만든다. 

 

5. 필터를 사용하여 매장의 0 창고의 0 이상인 것들을 선택한다.

 

 

물론 어렵지는 않다. 그냥 번거롭고 쓸때 없는 시간이 소비될 뿐이다. 직원한테 이미 공식이 있는 포맷을 만들어서 

그 포멧에 맞게 데이터를 껴 넣기만 하라고 해도 컴퓨터가 버벅거리고 귀찮아서 잘 안한다.

그러면.... 우리가 팔아야 할 제품은 창고에서 세상밖으로 나오질 못하게 된다. 

 

 

 

파이썬을 사용했을 때

1. 엑셀을 다운 받는다.

2. 주피터노트북을 실행한다.

3. 코드를 실행한다.

 

아래의 데이터가 

제품명 위치 갯수
제왕의 의자 warehouse 2
예수침대 warehouse 1
힘들어 침대 warehouse 1
밤의 왕 침대 warehouse 0
바바리안 책상 warehouse 0
제왕의 의자 display 0
바바리안 책상 display 1
힘들어 침대 display 1
밤의 왕 침대 display 0
예수침대 display 0

이런 형태로 변환이 된다.

제품명 창고 매장
제왕의 의자 2 0
예수침대 1 0
힘들어 침대 1 1
밤의 왕 침대 0 0
바바리안 책상 0 1

 

 

댓글()

[1. 엑셀 대신 파이썬: 재고찾기 프로그램] 주피터 설치 및 실행

Computer 관심/Pandas|2020. 7. 18. 18:20
반응형

매장을 관리할때 창고에 제고가 있음에도 불구하고 제품이 디스플레이가 되지 않는 경우가 있다.

 

제품명: 왕의 의자

디스플레이: 0

창고: 3

 

지금까지는 제고관리 프로그램에서 제공하는 엑셀 파일을 사용해서 디스플레이가 되지 않는 상품을 찾아내곤 했다.

'제품의 디스플레이가 0개 and 창고에 있는 수 >1' 를 찾으면 되는 것이다. 

 

1)

product_name display warehouse
왕의 의자 0 3

엑셀에 경우 필터를 사용하여 werehouse에 0만 제외 시키고 모두 체크하고 display는 0만 체크 해놓으면 디스플레이가 되지 않은 제품들을 찾아 낼 수 있다.

 

하지만 문제는 엑셀이 이렇게 제공 되는 경우이다.

 

2)

product_name location warehouse
왕의 의자 display 0
왕의 의자 warehouse 3

엑셀에선 sumifs를 사용해서 2번 모양의 테이블을 1번처럼 만들 수 있다. 하지만 제고를 체크 할 때 마다 이러한 일을 반복해야 한다는 것이 너무 번거로웠다.

 

그래서 엑셀 대신 파이썬 & 주피터 노트북를 사용하여 디스플레이가 가능한 제고를 찾아내 보려고 한다.

 

 

1. 주피터노트 설치하기

pip install notebook

파이썬을 설치한 뒤 커맨드창에 위와 같이 입력한다.

 

2. 폴더 만들기

 

3. 만든 폴더에 들어가서 파일 경로 창에 cmd 실행하기

 

4. 주피터 노트북 실행하기

jupyter notebook

실행하면 위와 같이 브라우저에서 주피터 노트북이 실행된다.

 

3. New를 클릭하여 Python 3 노트북을 실행시킨다.

4. 이제 In [ ] 옆의 필드에 코드를 입력을 해보자

 

댓글()

플라스크 static 파일 경로(플라스크 이미지 url)

Computer 관심/Flask|2020. 3. 15. 01:01
반응형

플라스크로 이미지 주소를 전송하고 싶었다.

 

방법은 간단하다.(그런데 헤맷다..)

static이라는 폴더를 만든뒤

그 안에 이미지를 넣는 것이다.

 

체크를 하기 위해 플라스크를 돌려서 

localhost:5000/static/이라고 치면 not found가 나온다.

localhost:5000/static/파일이름.확장자 라고 url에 쳐야 스테틱 폴더에 넣어놓은 사진이 나온다.

 

댓글()

취미로 개발

Computer 관심/이것저것|2019. 12. 8. 20:39
반응형

사실 취미로 개발이 가능하다. 왜냐면 이미 많은 소스가 모듈/플로그인화 되어있어. 가져다 붙이면 많은 것들이 만들어진다. 하지만 "뭘 만들어 보고 싶은가... " 이게 가장 중요한거 같다.

요즘 이미 다양한 어플이나 앱이 나왔고 수 많은 어플들이 사람들에게 한번도 사용되지 않았다.

나에게 혹은 주변에게 도움이 되는걸 만들고 싶다. 

댓글()

visual code에서 파일 확장자 마다 인덴테이션 다르게 주기

Computer 관심|2019. 11. 4. 01:09
반응형

파이썬을 재미있게 하다가 vuejs를 가지고 개인적인 프로젝트를 해야했다.

저번에 맞추어 놓은 세팅은 모든 종류의 파일을 default로 space: 4로 바꾸는 것이 였다. 그래서 .vue 확장자와 .js확장자를 사용할때 탭을 누를때 마다 스페이스가 4칸으로 입력되는 것을 2칸으로 바꾸기 위해 계속해서 하단의 설정을 바꿔줘야 했다.

 

 

파일확장자 마다 다르게 인덴트를 주는 방법을 구글에서 단 3분 만에 찾고 적용 할 수 있었다. 거의 2주 -3주간 계속 작업할때마다 바꿔줬는데....  적당히 게을러야하는데 너무 게을러서 일을 더 번거롭게 한샘이다. 

 

방법은 다음과 같다.

1. 에디터 상단바의 view > commend palette...클릭 (ctr + shift + p)

2.  검색창에 settings 입력

3. preferences: open settings (Json)클릭

4. 아래 설정을 추가

 {
   
   ....
   
   "[python]": {
        "editor.insertSpaces": true,
        "editor.tabSize": 4  
    },
    "[javascript]": {
        "editor.insertSpaces": true,
        "editor.tabSize": 2
    },
    "[vue]": {
        "editor.insertSpaces": true,
        "editor.tabSize": 2
    }
 }

참조: 

https://stackoverflow.com/questions/42118651/how-to-set-python-language-specific-tab-spacing-in-visual-studio-code

댓글()

ngrok 대신 모바일에서 localhost에 접속할때 쓰는 것.(localtunnel)

Computer 관심/이것저것|2019. 9. 29. 09:57
반응형

지금까지 ngrok을 써왔다. 그런데 유료가 되면서 커넥션에 제한이 생겼다. 

그래서 찾은게 localtunnel ngrok과 사용 하는 방법은 똑같다. 

https://github.com/localtunnel/localtunnel

설치: npx localtunnel --port 3000

사용: lt --port 3000

 

 

'Computer 관심 > 이것저것' 카테고리의 다른 글

[인터넷 활용] JSON 형식의 데이터 웹사이트에서 CSV로 바꾸기  (0) 2020.07.18
취미로 개발  (0) 2019.12.08
es6  (0) 2019.09.28
네트워크  (0) 2019.03.26
[만든것] 사진 용량 줄여주는 프로그램  (0) 2019.02.21

댓글()

es6

Computer 관심/이것저것|2019. 9. 28. 11:49
반응형

import {} from 의 뜻

https://stackoverflow.com/questions/36795819/when-should-i-use-curly-braces-for-es6-import

 

https://www.sitepoint.com/state-management-in-react-native/

 

 

댓글()