Python下实现以mysql存储数据

数据来源

python实现数据的收集可以使用爬虫来实现,具体工具有spyder框架和基本的request库,这部分中文资料很丰富,步骤也很详细就不写了,我从事过一段时期的数据工作,实际工作中会处理海量数据,这些数据一般是公司自身的内部经营数据,需要从此挖掘出有价值的线索,所以数据获取这部分对于想深入数据科学的同学而言不是重点内容。

数据存储

数据存储是由于大规模数据通常是无法由excel处理的,而切割成小文件又实在是耽误时间,因为随着工作的进行,excel的文件会越来越多,相应的版本控制软件又没有,所以不得已下只能思考更为高效的处理手段。公司的数据是用分布式数据库也就是hadhoop架构下运行的,通过一个数据接口提供每天的excel版数据,因为要每天下真的很耽误工作,所以我在考虑将这部分数据装载进我的个人公司电脑的mysql中,之前的一些工作我已经使用pandas库实现了初步自动化,如果不是公司的权限管理非常严格,我会实现开机全部自动执行。 跑题了,所以今天的主题是如何将采集到的数据存入mysql数据库中。

首先要介绍两个库,pymysql 和 sqlalchemy
pymysql库是起到翻译官作用,作为一个挂钩,使python可以访问数据库,实质上这部分就是一个接口,使得数据库可以和python进行通信,或者说是通信协议统一,
sqlalchemy则是一种ORM哲学思路下的工具,将关系型的表结构转化为了对象结构,实际上打个比方,关系型数据库中有堆橘子,他会按照属性将每个橘子解构,并且贴上标签,这是橘子1,这是它的皮,这是它的果肉,这是它的子,有点恐怖的感觉。。。
ORM会将它的成分作为一个对象打包给你,所以区别就是你是想要一个橘子还是对每个橘子的某个组成属性进行调用或处理,两者因为哲学的不同,所以天然有不同的优劣势。

下面以代码举例,使用pymysql通过拼接sql语句方式向 hot_jingdian表中逐行写入记录,因为是自用版本并未考虑sql注入等安全性问题。

import pymysql
import pandas  as pd
import os,time


db = pymysql.connect(
        host = 'localhost',
        port = 3306,
        user = 'root',
        passwd ='*****',
        db = 'wen'
    
        )

cursor = db.cursor()
print("已建立游标,数据库已连接就绪---> ")

#-------------------------数据库表头建立部分,已建立请跳过

#-----------------------------



time_start = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
print('>>当前时间:',time_start)
print('>>正在处理...')

data = pd.read_excel('C:/Users/wen/Desktop/热门景区景点信息.xlsx')
print(data.head(5))
print(data.info())
print(len(data.index))
print(data.loc[2].values)

for i in range(0,data.shape[0]):
    row = data.loc[i].values
    JingDianName = str(row[1])
    Level = str(row[2])
    Sale_number = float(row[4])
    #print("Sale_number",type(Sale_number))
    #print("-------------------------")
    Url = str(row[10])
    insert_sql = 'insert into hot_jingdian( JingDianName,Level,Sale_number,Url) values(%s,%s,%s,%s)'
    param = (JingDianName,Level,Sale_number,Url)
    try:
        temp = cursor.execute(insert_sql,param)
        db.commit()
        print("执行第{}行数据".format(i))
    except Exception as e:
        print(e)
        db.rollback()

db.close()
cursor.close()
print("---End---")

这里面有一点要注意,pandas选取了某一行记录后原始记录中的字段名称就不对该行记录生效了,需要用列号选取

这里再增加一个向mysql直接导入本地excel文件的方法

"""
Created on Thu Apr  2 2020
该代码实现将excel文件转化为mysql存储
不用创建表,可以自动生成
@author: wen
"""

import pandas as pd 
import pymysql
from sqlalchemy import create_engine

datafile = 'C:/Users/wen/Desktop/热门景区景点信息.xlsx'
data = pd.read_excel(datafile)

connect = create_engine('mysql+pymysql://root:*******@localhost:3306/wen')
pd.io.sql.to_sql(data,'jingdian',con = connect,index = False ,if_exists='replace')
print("done")

这部分也是以我爬取获得的景点数据为例,通过sqlalchemy实现存储为mysql,这个方法的好处是不需要提前建立表头,这个还是很傻瓜式的,亲测自用代码。景点数据是采用pandas实现的,如果有评论想要讨论,我会考虑是否再写一篇关于pandas 的。

数据分析

数据分析应该结合已有的现成工具进行处理,因为目前的商业数据分析软件已经很成熟了,并不是急需自己造轮子,就算使用R语言进行可视化,依然不是一件节约时间的方案,同时可视化的美观程度并不是公司所关注的重点,达到平均水平程度即是满分,超过平均水平后还要看数据汇报的场合,所应对的场合比较低端依然不会对升值有多大效果,这里更加丰富的图形可视化在公司商用角度推荐echarts或R,或者付费使用tableau,这些都是比价成熟的商业应用选择。这部分可以选用商业的敏捷BI进行分析。后续有时间会总结一下数据分析软件和商业BI的相关使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值