文章目录
- 一、连接数据库
- pymysql
- 二、数据处理
- json & simplejson
- 标准化 sklearn.preprocessing
- datetime
- 三、统计分析
- statsmodels
- 四、可视化
- seaborn
- matplotlib
一、连接数据库
pymysql
import pymysql
#打开数据库连接
host = '111.235.32'
user = 'user'
passwd = '123'
db = 'admin'
db = pymysql.connect(host,user,passwd,db,charset="utf8", port=3306)
#使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
#使用 execute() 方法执行 SQL 查询
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
#使用 fetchone() 方法获取单条数据.
#fetchall(): 接收全部的返回结果行.
#rowcount:一个只读属性,并返回执行execute()方法后影响的行数。
data = cursor.fetchone()
print ("Database version : %s " % data)
#搭配使用的例子
try:
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行(一般是sql语句做了增删改操作时用,不提交无法保存改动)
db.commit()
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
(fname, lname, age, sex, income ))
except:
# 发生错误时回滚
db.rollback()
print ("Error: unable to fetch data")
#关闭游标
cursor.close()
# 关闭数据库连接
db.close()
如果只是查数据的话,也可以这样:
#定义函数
def read_data_sql(host,user,passwd,db,sql_query):
conn = pymysql.connect(host = host,user = user,passwd = passwd,db = db,charset="utf8",port=3306)
sql_query = sql_query
df = pd.read_sql(sql_query, con=conn)
return df
#数据库和查询语句
host = '111.235.32'
user = 'user'
passwd = '123'
db = 'admin'
sql_query = """
select id,email from cs where st='1'
"""
result = read_data_sql(host,user,passwd,db,sql_query)
二、数据处理
json & simplejson
有些帖子认为simplejson在效率上更有优势,但本文未做检验,只列出常用函数。
dump、dumps、load、loads
带s跟不带s的区别: 带s的是对字符串的处理,而不带s的是对文件对象的处理。
import json
#json.load()用于从json文件中读取数据。
#将字符串转换成python对象,输出<class 'dict'>
json.load(open('json.json'))
json.loads(str)
json_list = json.loads(json_str, encoding='utf-8', strict=False)
#从文件中读取json字符串然后转换成python对象
python_object = json.load('json.json')
#将字典类型转换成字符串类型,输出<class 'str'>
json.dumps(dist)
#json.dump()用于将dict类型的数据转成str,并写入到json文件中
json.dump(dist,'json.json')
json.dump(name_emb, open(emb_filename, “w”))
import simplejson
simplejson_list = simplejson.loads(simplejson_str, encoding='utf-8', strict=False)
#dumps是“转储”的意思,是从Python里转出成其他格式,即 dict -> json(str)
#loads是“加载”的意思,是从其他格式转成Python内置格式,即 json(str) -> dict
在使用loads对json字符串进行转换时,有时候可能因为json字符串的格式不是完全的符合json格式,会造成loads报错,这时候我们可以设置参数strict=False,表示loads()时,不严格检查json格式。
标准化 sklearn.preprocessing
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder().fit_transform(df['register_year'])
df['year_encode']=le
df1=df.drop(columns=['u','r','y'])
scaled_df = StandardScaler().fit_transform(df1)#标准化
features = ['t', 'r', 'u', 'f'] #必须要和原版一一对应!
df2 = pd.DataFrame(scaled_df,columns=features)
其他标准化:
scale#直接将给定数据进行标准化
StandardScaler#可保存训练集中的均值、方差参数,然后直接用于转换测试集数据
MinMaxScaler#缩放到指定最大和最小值(通常是1-0)之间,可增强方差非常小的属性的稳定性,也可维持稀疏矩阵中为0的条目。
Normalizer#正则化:计算每个样本p-范数,再对每个元素除以该范数,处理后每个样本的p-范数(l1-norm,l2-norm)等于1。如果后续要使用二次型等方法计算两个样本之间的相似性会有用。
datetime
此处只列一些容易混淆或者笔者刚用到过的,更详细的还请参考这位作者
#string和datetime的转换
from datetime import datetime #从datetime模块引入datetime类
#把str转换为datetime
datetime.strptime('2017-8-1 18:20:20', '%Y-%m-%d %H:%M:%S')
datetime.strptime('2017-8-1')
#把datetime对象格式化为字符串
now = datetime.now()
print(now.strftime('%a, %b %d %H:%M'))
#时间的加减
from datetime import datetime,timedelta
now = datetime.now()
now + timedelta(hours=10)
now - timedelta(days=1)
now + timedelta(days=2, hours=12)
三、统计分析
statsmodels
statsmodels 中的回归操作都是基于矩阵,正常情况下需要在数据集中多加一行常数项。
import statsmodels.api as sm
from statsmodels.regression.linear_model import OLS,WLS
from statsmodels.tools.tools import rank,add_constant
sm.add_constant()
dat = sm.datasets.get_rdataset("Guerry", "HistData").data
# Fit regression model (using the natural log of one of the regressors)
results = smf.ols('Lottery ~ Literacy + np.log(Pop1831)', data=dat).fit()
# Inspect the results
print(results.summary())
四、可视化
seaborn
import seaborn as sns
sns.set()#设置并使用 seaborn 默认的主题、尺寸大小以及调色板
sns.set_style('whitegrid')#背景色:darkgrid、whitegrid、dark、white、ticks
sns.despine() # 只留下X,Y轴
sns.countplot() #以bar的形式展示每个类别的数量
sns.relplot(data=user.average_stars,kind='line')
#kind可选scatter或line
sns.distplot()
'''
矩形为直方图(默认hist=true),曲线为核密度估计(默认kde=true)
bins控制直方图的区间划分
rag:控制是否生成观测数值的小细条
fit:控制拟合的参数分布图形,能够直观地评估它与观察数据的对应关系(黑色线条为确定的分布),如fit = norm表示拟合正态分布
kde_kws={"label":"KDE"}
vertical=True
'''
#热力图,用途:可视化一下已经有的数字
sns.heatmap(data=corr_u17,annot = True, square=True, cmap="Blues",mask= corr_u17 < 0.45)
#robust:排除极端值影响;square:是否是正方形;annot: 是否在格子上显示数字
matplotlib
import matplotlib.pyplot as plt
#参数设置
plt.rc("font",family="SimHei",size="12") #用于解决中文显示不了的问题
plt.rcParams['figure.figsize'] = (8.0, 4.0) # 设置figure_size尺寸
plt.rcParams['figure.dpi'] = 300 #分辨率
# 默认的像素:[6.0,4.0],分辨率为100,图片尺寸为 600&400
# 指定dpi=200,图片尺寸为 1200*800
# 指定dpi=300,图片尺寸为 1800*1200
# 设置figsize可以在不改变分辨率情况下改变比例
plt.rcParams['image.cmap'] = 'gray' # 设置 颜色 style
#画图函数
plt.plot(use_index=True)
#kind参数: 'line', 'bar', 'barh', 'kde','hexbin','hist','box','area','pie','scatter'
在ipython窗口输入:
%matplotlib inline,则在终端窗口中输出图片
%matplotlib qt5,则在图片窗口表现图片