python 데이터 분석 학습 노트 8
48487 단어 python 데이터 분석
1 sqlite 3 기반 경량급 접근
가 벼 운 관계 형 데이터베이스
예제 코드 는 다음 과 같다.
import sqlite3
#
with sqlite3.connect(":memory:") as con:
#
c = con.cursor()
#
c.execute('''
CREATE TABLE sensors(
data text,
city text,
code text,
sensor_id real,
temperature real)
''')
#
for table in c.execute("SELECT name FROM sqlite_master WHERE type='table'"):
print('Table', table)
#
c.execute("INSERT INTO sensors VALUES('2016-02-27','uTRECHT','Red',42,15.14)")
#
c.execute("SELECT * FROM sensors")
print(c.fetchone())
#
con.execute("DROP TABLE sensors")
#
print("#of table", c.execute("SELECT COUNT (*) FROM sqlite_master WHERE type='table'").fetchone()[0])
#
con.close()
실행 결 과 는 다음 과 같 습 니 다.
Table ('sensors',)
('2016-02-27', 'uTRECHT', 'Red', 42.0,15.14)
#of table 0
2. pandas 를 통 해 데이터 베 이 스 를 방문 합 니 다.
예제 코드 는 다음 과 같다.
import statsmodels.api as sm
from pandas.io.sql import read_sql
import sqlite3
#
with sqlite3.connect(":memory:") as con:
#
c = con.cursor()
#
data_loader = sm.datasets.sunspots.load_pandas()
df = data_loader.data
#
rows = [tuple(x) for x in df.values]
#
con.execute("CREATE TABLE sunspots (year,sunactivity)")
#
con.executemany("INSERT INTO sunspots(year,sunactivity) VALUES (?,?)", rows)
#
c.execute("SELECT COUNT(*) FROM sunspots")
print(c.fetchone())
# ,
print("Deleted", con.execute("DELETE FROM sunspots where sunactivity >20").rowcount, "row")
# read_sql dataFrame
print(read_sql("SELECT * FROM sunspots where year <1732", con))
#
con.execute("DROP TABLE sunspots")
c.close()
실행 결 과 는 다음 과 같 습 니 다.
(309,)
Deleted 217 row
year sunactivity
0 1700.0 5.0
1 1701.0 11.0
2 1702.0 16.0
3 1707.0 20.0
4 1708.0 10.0
5 1709.0 8.0
6 1710.0 3.0
7 1711.0 0.0
8 1712.0 0.0
9 1713.0 2.0
10 1714.0 11.0
11 1723.0 11.0
3 SQLAlchemy
python 의 클래스 를 데이터베이스 에 표시 할 수 있 습 니 다. 클래스 는 자바 의 hibenate 입 니 다.
예제 코드 는 다음 과 같다.
Alchemy_entities.py
from sqlalchemy import Column, ForeignKey, Integer, Float, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy import create_engine
from sqlalchemy import UniqueConstraint
#
Base = declarative_base()
#
class Station(Base):
__tablename__ = 'station' #
id = Column(Integer, primary_key=True) # id
name = Column(String(14), nullable=False, unique=True) #
def __repr__(self):
return "Id=%d name=%s" % (self.id, self.name)
#
class Sensor(Base):
__tablename__ = 'sensor' #
id = Column(Integer, primary_key=True) # id
last = Column(Integer)
multiplier = Column(Float)
station_id = Column(Integer, ForeignKey('station.id')) #
station = relationship(Station)
def __repr__(self):
return "Id=%d last=%d multiplier=%.1f station_id=%d" % (self.id, self.last, self.multiplier, self.station_id)
if __name__ == "__main__":
print("This script is used by another script. Run python alchemy_query.py")
Populate_db.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from .alchemy_entities import Base, Sensor, Station
def populate(engine):
# DBSession
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()
#
de_bilt = Station(name='De Bilt')
session.add(de_bilt)
session.add(Station(name='Utrecht'))
session.commit()
print('Station', de_bilt)
#
temp_sesor = Sensor(last=20, multiplier=.1, station=de_bilt)
session.add(temp_sesor)
session.commit()
print("Sensor", temp_sesor)
if __name__ == "__main__":
print("This script is used by another script. Run python alchemy_query.py")
Alchemy_query.py
from Eight.alchemy_entities import Base, Station, Sensor
from Eight.populate_db import populate
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import os
from pandas.io.sql import read_sql
#
engine = create_engine('sqlite:///demo.db')
#
Base.metadata.drop_all(engine)
#
Base.metadata.create_all(engine)
populate(engine)
Base.metadata.bind = engine
DBSession = sessionmaker()
DBSession.bind = engine
session = DBSession()
# station
station = session.query(Station).first()
# station
print('all station', session.query(Station).all())
# sensor
print('all sensor', session.query(Sensor).all())
# station sensor
print('query sensor by station', session.query(Sensor).filter(Sensor.station == station).one())
# pandas read_sql
print('read_sql all station', read_sql("SELECT * FROM station", engine.raw_connection()))
# ,
try:
os.remove('demo.db')
print('Delete demo.db')
except OSError as e:
# [WinError 32] , 。: 'demo.db'
print(e)
pass
실행 결 과 는 다음 과 같 습 니 다.
Station Id=1 name=De Bilt
Sensor Id=1 last=20 multiplier=0.1station_id=1
all station [Id=1 name=De Bilt, Id=2name=Utrecht]
all sensor [Id=1 last=20 multiplier=0.1station_id=1]
query sensor by station Id=1 last=20multiplier=0.1 station_id=1
read_sql all station id name
0 1 De Bilt
1 2 Utrecht
[WinError 32] 다른 프로그램 이 이 파일 을 사용 하고 있 습 니 다. 프로 세 스에 접근 할 수 없습니다.:demo.db'
4 Pony ORM
파 이 썬 이 쓴 orm 패키지.
from pony.orm import Database, db_session
from pandas.io.sql import to_sql
import statsmodels.api as sm
# sqlite
db = Database('sqlite', ':memory:')
#
with db_session:
data_loader = sm.datasets.sunspots.load_pandas()
df = data_loader.data
to_sql(df, "sunspots", db.get_connection())
print(db.select("count(*) FROM sunspots"))
실행 결 과 는 다음 과 같 습 니 다.
[309]
5 Dataset 게으름뱅이 데이터베이스
sqlalchemy 의 포장 기 입 니 다.
import dataset
from pandas.io.sql import read_sql
from pandas.io.sql import to_sql
import statsmodels.api as sm
#
db = dataset.connect('sqlite:///:memory:')
# books
table = db["books"]
# , insert
table.insert(dict(title="Numpy Beginner's guide", author='Ivan Idris'))
table.insert(dict(title="Numpy Cookbook", author='Ivan Idris'))
table.insert(dict(title="Learning Numpy", author='Ivan Idris'))
# pandas read_sql
print(read_sql('SELECT * FROM books', db.executable.raw_connection()))
#
data_loader = sm.datasets.sunspots.load_pandas()
df = data_loader.data
to_sql(df, "sunspots", db.executable.raw_connection())
table = db['sunspots']
# 5
for row in table.find(_limit=5):
print(row)
print("Table", db.tables)
실행 결 과 는 다음 과 같 습 니 다.
id author title
0 1 Ivan Idris Numpy Beginner's guide
1 2 Ivan Idris Numpy Cookbook
2 3 Ivan Idris Learning Numpy
OrderedDict([('index', 0), ('YEAR',1700.0), ('SUNACTIVITY', 5.0)])
OrderedDict([('index', 1), ('YEAR',1701.0), ('SUNACTIVITY', 11.0)])
OrderedDict([('index', 2), ('YEAR',1702.0), ('SUNACTIVITY', 16.0)])
OrderedDict([('index', 3), ('YEAR',1703.0), ('SUNACTIVITY', 23.0)])
OrderedDict([('index', 4), ('YEAR',1704.0), ('SUNACTIVITY', 36.0)])
Table ['books', 'sunspots']
Process finished with exit code 0
6 pymongo 와 mongodb
데이터 저장 디 렉 터 리 지정
Mkdir h:/data/db
Mongod --dbpath h:/data/db
Python 에 mongodb 드라이버 설치
Python -m pip install pymongo
현재 드라이버 버 전 번호 보기
C:\Users\Administrator>python -m pipfreeze|grep pymongo
pymongo==3.3.1
mongodb 의 테스트 데이터 베 이 스 를 연결 합 니 다.
예제 코드 는 다음 과 같다.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/1/3 11:41
# @Author : Retacn
# @Site : mongodb
# @File : mongodb_conn.py
# @Software: PyCharm
__author__ = "retacn"
__copyright__ = "property of mankind."
__license__ = "CN"
__version__ = "0.0.1"
__maintainer__ = "retacn"
__email__ = "[email protected]"
__status__ = "Development"
from pymongo import MongoClient
import statsmodels.api as sm
import json
import pandas as pd
#
client = MongoClient()
db = client.test_database
# json
data_loader = sm.datasets.sunspots.load_pandas()
df = data_loader.data
rows = json.loads(df.T.to_json()).values()
db.sunspots.insert(rows)
#
cursor = db['sunspots'].find({})
df = pd.DataFrame(list(cursor))
print(df)
db.drop_collection('sunspots')
실행 결 과 는 다음 과 같 습 니 다.
SUNACTIVITY YEAR _id
0 16.6 1825.0 586b24872e29db269c8854f4
1 11.0 1745.0 586b24872e29db269c8854f5
2 4.3 1856.0 586b24872e29db269c8854f6
3 26.1 1921.0 586b24872e29db269c8854f7
4 15.5 1975.0 586b24872e29db269c8854f8
5 47.8 1831.0 586b24872e29db269c8854f9
6 38.0 1955.0 586b24872e29db269c8854fa
7 14.2 1922.0 586b24872e29db269c8854fb
8 37.6 1920.0 586b24872e29db269c8854fc
9 6.4 1797.0 586b24872e29db269c8854fd
10 4.1 1798.0 586b24872e29db269c8854fe
11 28.0 1720.0 586b24872e29db269c8854ff
12 111.2 1871.0 586b24872e29db269c885500
13 83.4 1750.0 586b24872e29db269c885501
14 27.9 1963.0 586b24872e29db269c885502
15 85.9 1761.0 586b24872e29db269c885503
16 32.3 1880.0 586b24872e29db269c885504
17 70.9 1830.0 586b24872e29db269c885505
18 17.9 1985.0 586b24872e29db269c885506
19 8.6 1996.0 586b24872e29db269c885507
20 88.8 1939.0 586b24872e29db269c885508
21 16.3 1866.0 586b24872e29db269c885509
22 22.0 1746.0 586b24872e29db269c88550a
23 1.4 1913.0 586b24872e29db269c88550b
24 5.0 1812.0 586b24872e29db269c88550c
25 14.5 1800.0 586b24872e29db269c88550d
26 84.8 1780.0 586b24872e29db269c88550e
27 138.3 1837.0 586b24872e29db269c88550f
28 54.8 1858.0 586b24872e29db269c885510
29 12.2 1813.0 586b24872e29db269c885511
.. ... ... ...
279 132.0 1787.0 586b24872e29db269c88560b
280 9.6 1944.0 586b24872e29db269c88560c
281 47.8 1752.0 586b24872e29db269c88560d
282 139.0 1870.0 586b24872e29db269c88560e
283 5.7 1911.0 586b24872e29db269c88560f
284 20.6 1854.0 586b24872e29db269c885610
285 121.5 1836.0 586b24872e29db269c885611
286 159.0 1959.0 586b24872e29db269c885612
287 59.1 1862.0 586b24872e29db269c885613
288 64.6 1840.0 586b24872e29db269c885614
289 66.5 1772.0 586b24872e29db269c885615
290 5.0 1902.0 586b24872e29db269c885616
291 82.9 1786.0 586b24872e29db269c885617
292 24.2 1842.0 586b24872e29db269c885618
293 4.4 1954.0 586b24872e29db269c885619
294 95.8 1860.0 586b24872e29db269c88561a
295 109.6 1938.0 586b24872e29db269c88561b
296 21.0 1724.0 586b24872e29db269c88561c
297 5.0 1700.0 586b24872e29db269c88561d
298 63.7 1883.0 586b24872e29db269c88561e
299 25.4 1886.0 586b24872e29db269c88561f
300 12.1 1899.0 586b24872e29db269c885620
301 61.5 1846.0 586b24872e29db269c885621
302 35.6 1891.0 586b24872e29db269c885622
303 79.7 1936.0 586b24872e29db269c885623
304 77.2 1861.0 586b24872e29db269c885624
305 36.3 1826.0 586b24872e29db269c885625
306 6.0 1879.0 586b24872e29db269c885626
307 26.2 1897.0 586b24872e29db269c885627
308 41.0 1794.0 586b24872e29db269c885628
[309 rows x 3 columns]
7 redis 를 이용 하여 데 이 터 를 저장 합 니 다.
in - memory 형 키 데이터 베이스 입 니 다. c 가 쓴 것 입 니 다.
예제 코드 는 다음 과 같다.
import redis
import statsmodels.api as sm
import pandas as pd
# redis
r = redis.StrictRedis()
#
data_loader = sm.datasets.sunspots.load_pandas()
df = data_loader.data
# json
data = df.T.to_json()
r.set('sunspots', data)
#
blob = r.get('sunspots')
print(pd.read_json(blob))
실행 결 과 는 다음 과 같 습 니 다.
0 1 10 100 101 102 103 104 105 \
SUNACTIVITY 5 11 3 14.5 34 45 43.1 47.5 42.2
YEAR 1700 1701 1710 1800.0 1801 1802 1803.0 1804.0 1805.0
106 ... 90 91 92 93 94 95 96 \
SUNACTIVITY 28.1 ... 89.9 66.6 60 46.9 41 21.3 16
YEAR 1806.0 ... 1790.0 1791.0 1792 1793.0 1794 1795.0 1796
97 98 99
SUNACTIVITY 6.4 4.1 6.8
YEAR 1797.0 1798.0 1799.0
8 Apache Cassandra
키 값 과 전통 관계 형 데이터베이스 특성 을 결합 한 혼합 형 데이터베이스 로 열 을 위 한 데이터베이스 입 니 다.
Cassandra 설치
apache - cassandra - 3.10 - bin. tar. gz 다운로드
2 cassandra. bat 수정, JAVA 추가HOME 변수
set JAVA_HOME=C:\Java\jdk1.8.0_71
이 컴퓨터 의 메모리 가 크 지 않 으 면 가상 컴퓨터 의 메모 리 를 줄 일 수 있 습 니 다. 기본 값 은 2G 입 니 다.
-Xms512m^
-Xmx512m^
3 python 설치 약
4 cqlsh. bat 를 수정 하고 python 경 로 를 설정 합 니 다.
set path =D:\Python35
5 환경 변수 추가
Path=F:\apache-cassandra-3.10\bin;
6 cmd 실행 카 산 드 라, 데이터베이스 시작
이 장 에서 python 3.5 를 지원 하 는 드라이버 를 찾 을 수 없 기 때문에 ptyhon 2.7 을 사용 합 니 다.
디 스 플레이 코드 는 다음 과 같 습 니 다.
from cassandra import ConsistencyLevel
from cassandra.cluster import Cluster
from cassandra.query import SimpleStatement
import statsmodels.api as sm
# ,
cluster = Cluster()
session = cluster.connect()
# keyspace .
session.execute(
"CREATE KEYSPACE IF NOT EXISTS mykeyspace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };")
session.set_keyspace('mykeyspace')
#
session.execute("CREATE TABLE IF NOT EXISTS sunspots (year decimal PRIMARY KEY, sunactivity decimal);")
#
query = SimpleStatement(
"INSERT INTO sunspots (year, sunactivity) VALUES (%s, %s)",
consistency_level=ConsistencyLevel.QUORUM)
#
data_loader = sm.datasets.sunspots.load_pandas()
df = data_loader.data
rows = [tuple(x) for x in df.values]
#
for row in rows:
session.execute(query, row)
#
print(session.execute("SELECT COUNT(*) FROM sunspots")._current_rows[0])
session.execute('DROP KEYSPACE mykeyspace')
cluster.shutdown()
실행 결 과 는 다음 과 같 습 니 다.
Row(count=309)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
데이터 분석 기초(一)텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.