일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 동적계획법
- 프로그래머스
- django
- 데이터베이스
- Kruskal
- 마라마라빔
- DFS
- MyPlaylist
- programmers
- 백준
- Planned
- Bellman-Ford
- 코드트리
- BFS
- 장고
- SQL
- 실습
- B대면노래방
- codetree
- 모각코
- 파이썬
- 함밥
- 최소스패닝트리
- 소프트웨어공학
- 그리디알고리즘
- 백트래킹
- DP
- minimum spanning tree
- 종합설계
- 알고리즘
- Today
- Total
Leta Learns
221209 | 본문
#평균 연봉(초봉) scatter plot
이런 식으로 데이터 전처리를 해주었다.
이 프로젝트 하면서 갑자기 엑셀 실력이 늘고 있는 것 같다.
코드 만드는데 엄청 오래 걸렸는데 다 하고 보니 엄청 간단하군..
아래 링크에서 데이터 전처리 해야겠다는 힌트를 얻고, 그걸 그대로 scatter plot으로 나타내주었다.
https://workingwithpython.com/matplotlib_scatterplot/
#연봉 scatter plot 코드
import io
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
salary = pd.read_csv(io.BytesIO(file_uploaded['salary.csv']), encoding='cp949')
plt.scatter(salary['field'], salary['salary'])
plt.show()
근데 이 코드를 돌리면
이런 그래프가 나온다 ㅋㅋㅋㅋ
y(연봉)값이 엄청 많아서 다 겹쳐서 나온 것이다.
scatter 말고 다른 걸로 해봐야 할 것 같다.
하.. 근데 어떻게 하는지 모르겠다...
y축 값들이 정렬이 안 되어있는데 이걸 어떻게 수정하는지 모르겠다.
거의 하루종일 찾아봤는데 답이 없어서 다른 것부터 했다.
#scatter 성공함
성공했다.... 내가 성공한 건 아니고 선배가 도와줬다.... 좋은 사람...... ㅠ
salary.csv에서 연봉값을 가져올 때 int로 가져오는 줄 알았는데 string으로 가져와져서 그런 거였다 ㅜㅜ
#천 단위에 붙는 ',' 제거 ex)1,000
salary.replace(',','', regex=True, inplace=True)
#str -> int 변환
salary = salary.astype({'salary':'int'})
판다스는 참.. 신기한 게 많구나
암튼 최종 코드는 이렇게 간단하다!!!!!
#연봉 box plot
import io
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
salary = pd.read_csv(io.BytesIO(file_uploaded['salary.csv']), encoding='cp949')
df = pd.DataFrame(salary)
salary.replace(',','', regex=True, inplace=True)
salary = salary.astype({'salary':'int'})
plt.scatter(salary['field'], salary['salary'])
plt.show()
이렇게 연봉 분포도 잘 볼 수 있다...
그래프 보니까 마음이 편하다... 이쁘다...
#소재지 위, 경도로 변환하기
소재지도 어떻게 할 지 너무 막막했었는데 팀원이 도움을 주었다... 너무 고맙다.
주소를 입력하면 위, 경도로 변환해주는 함수를 발견했다.
####### 도로명주소 위도 경도 값으로 바꿔주기 ########
geo_local = Nominatim(user_agent='South Korea')
# 위도, 경도 반환하는 함수
def geocoding(address):
try:
geo = geo_local.geocode(address)
x_y = [geo.latitude, geo.longitude]
return x_y
except:
return [0,0]
이 코드인데 더 자세한 내용은 아래의 링크에서 확인할 수 있다!
[python] 주소값만 있을 때 위경도 찾는 방법 (tistory.com)
geocoding 함수를 사용해서 주소를 위, 경도로 변환한 후 아래와 같이 데이터 프레임을 만들어주었다.
이제 이걸 지도에 표시해야 한다.
이것도 팀원이 링크를 주었다...ㅎ 사랑
[Python] 시각화 사용법 - folium 을 통한 지도 시각화 및 마커(marker) 찍기 — 나무늘보의 개발 블로그 (tistory.com)
링크에서는 seoul_map이라고 하는데 나는 한국 전체 지도를 쓸거라서 korea_map이라고 했다.
참고로 이 코드를 돌리면 주소를 위경도로 변환하는 과정이 7-8분 정도 소요가 된다.
그래서 오타 하나 나면 7-8분을 또 쌩으로 기다려야 했다....
#처음 맵 위치 잡기
korea_map = g.Map(location=[37.55, 126.98], tiles = 'Stamen Terrain', zoom_start = 12)
# korea_map
#지도에 위치 나타내기
for i in range(len(address_df)):
marker01 = g.Marker([address_df.loc[i]['latitude'], address_df.loc[i]['longitude']],
icon = g.Icon(color='blue'))
marker01.add_to(korea_map)
korea_map
이렇게 하면
이런 식으로 지도에 마커를 찍을 수 있다!
사실 소재지는 좀 다른 식으로 해보려고 했었는데 어떻게 하는지 정말 감이 안 잡혀서 그냥 이런 식으로 지도에 찍었다.
하다가 모르겠어서 소재지는 뺄까 생각도 했는데 팀원이 열심히 크롤링해준거라 좀 마음에 걸렸었는데,, 이렇게라도 사용해서 다행이다.