[postgreSQL] python에서 postgreSQL과 shape file 사용하기
python2020. 3. 15. 00:37
postgeSQL 사용을 위한 SQL에 넣는 방법과 가져오는 방법¶
연결하기¶
In [1]:
import psycopg2
In [3]:
!conda install -c anaconda psycopg2 -y
In [2]:
conn = psycopg2.connect(
"host='<도메인>' dbname='<DB명>' user='<사용자명>' password='<비번>'")
cur = conn.cursor()
In [3]:
from sqlalchemy import create_engine
e = create_engine('postgresql://<사용자명>:<비번>@<도메인>:<port>/<DB명>')
파일 DB에 밀어넣기¶
In [4]:
cur.execute("""SELECT table_name FROM information_schema.tables
WHERE table_schema = 'public'""")
for table in cur.fetchall():
print(table)
In [6]:
import pandas as pd
score = pd.DataFrame(
{
'date': ['2019-07-28'] * 4,
'name': ['kim', 'lee', 'choi', 'park'],
'age': [19, 20, 19, 20],
'math_score': [91, 95, 92, 70],
'pass_yn': [True, True, True, False]
},
columns=['date', 'name', 'age', 'math_score', 'pass_yn'])
In [7]:
score
Out[7]:
In [8]:
score.to_sql(name='score', con=e)
In [9]:
cur.execute("""SELECT table_name FROM information_schema.tables
WHERE table_schema = 'public'""")
for table in cur.fetchall():
print(table)
지도자료 밀어넣기¶
In [11]:
import pyproj
from fiona.crs import from_epsg
from sqlalchemy import *
from geoalchemy2 import Geometry
from geoalchemy2 import WKTElement
In [14]:
import geopandas as gpd
shp = gpd.read_file('./CTPRVN_201905/TL_SCCO_CTPRVN.shp', encoding='cp949')
shp
Out[14]:
In [15]:
shp.plot(column='CTP_KOR_NM')
Out[15]:
In [20]:
shp1 = shp.copy()
In [21]:
shp1.to_sql('a', e, if_exists='replace', index=False)
바로 넣으면 에러가 뜸 shapely를 활용할 예정
In [27]:
import shapely
In [25]:
test = shp1.geometry[1]
test
Out[25]:
In [49]:
shapely.wkt.dumps(test)[1:100]
Out[49]:
In [29]:
shapely.wkt.loads(shapely.wkt.dumps(shp1.geometry[1]))
Out[29]:
In [30]:
shp1['geometry'] = shp1.apply(lambda x: shapely.wkt.dumps(x.geometry), axis=1)
In [31]:
shp1
Out[31]:
In [32]:
type(shp1)
Out[32]:
In [33]:
shp1.to_sql('a', e, if_exists='replace', index=False)
밀어넣기가 잘 된거 같으나 ...
In [34]:
import pandas as pd
shp1 = pd.read_sql('select * from a', e)
shp1
Out[34]:
In [35]:
type(shp1)
Out[35]:
가지고 오면 자료의 타입은 pandas 므로 geopandas 로 바꾸어 줘야되며
In [36]:
import geopandas as gpd
shp1 = gpd.GeoDataFrame(shp1)
type(shp1)
Out[36]:
In [37]:
shp1.plot()
dump로 바꾼부분때문에 그림이 그려지지 않으므로 loads해주고 사용하여야 된다.
In [38]:
shp1['geometry'] = shp1.apply(lambda x: shapely.wkt.loads(x.geometry), axis=1)
In [39]:
shp1.plot()
Out[39]:
In [40]:
shp.plot(column='CTP_KOR_NM')
Out[40]:
동적인 그림 그리기¶
In [41]:
from fiona.crs import from_epsg
In [42]:
import folium
m = folium.Map(location=[40.730610, -73.935242],
tiles='Stamen Toner',
zoom_start=12,
control_scale=True,
prefer_canvas=True)
In [43]:
m
Out[43]:
In [ ]:
'python' 카테고리의 다른 글
pandas-profiling (0) | 2020.06.11 |
---|---|
anaconda 활용법 (0) | 2020.06.04 |
python 메일 보내기 (0) | 2020.02.24 |
jupyter notebook 가상환경에 basemap 설치하기 (0) | 2020.02.23 |
numpy 정리(1) (0) | 2020.02.18 |