판다스와 플라스크 sqlAlchemy 연결하기

Computer 관심/Pandas|2021. 10. 18. 19:20
반응형

판다스에서 DB로

 

https://stackoverflow.com/questions/43571991/pandas-df-to-database-using-flask-sqlalchemy

 

Pandas df to database using flask-sqlalchemy

I'm trying to insert a pandas dataframe into a mysql database. I am using flask-sqlalchemy. I have created this table: class Client_Details(db.Model): __tablename__ = "client_history"

stackoverflow.com

 

DB에서 판다스로

 

https://stackoverflow.com/questions/29525808/sqlalchemy-orm-conversion-to-pandas-dataframe

 

SQLAlchemy ORM conversion to pandas DataFrame

Is there a solution converting a SQLAlchemy to a pandas DataFrame? Pandas has the capability to use pandas.read_sql but this requires use of raw SQL. I have two reasons for wan...

stackoverflow.com

 

댓글()

[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 [ ] 옆의 필드에 코드를 입력을 해보자

 

댓글()