实训笔记20190808--MySQL

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43895902/article/details/98844811

利用MySQL,Oracle进行Python的数据分析

  • :MySQL数据库的思想以及操作流程:

    1. 数据库是一种关系型数据库
      在Java语言或者其他计算机语言作为后台开发来讲,数据库的’关系’体现在one to one manyto one many to many(有中间表产生) one to many
    2. 在Python数据分析,人工智能技术领域不是以上理解
      是将数据通过numpy,pandas,matplotlib进行数据分析
      体现在数据的发布思想,将数据发布给客户,人工智能设备–作为数据集
  • MySQL数据库实战

  1. 只能满足小型企业级的开发,对于数据集不是很适合,数据存储量较大,数据比较安全
  2. Oracle–针对大数据/人工智能利用很多
  3. 数据库分为DDL,DCL.DML语句:
    DML : 数据库操作语言(Data Maniplulation Language)–用于检索或者修改数据
    DDL : 数据库定义语言(Data Defination Language)–用于定义数据的结构
    DCL : 数据库控制语言(Data Control Language)–用于数据库用户的权限–DBA

  • MySQL企业级的安装流程,以及企业版本的选择
  1. MySQL分为 客户端 和 服务器端 --MySQL自身按照携带基于DOS的客户端和服务器端
  2. 注意事项:
    - 用户名和密码的设置 root root
    - 端口默认:3306,Oracle默认:5521
    - 编码格式:默认英文,手动修改UTF8(数据库里没有’-'数据库里面没有特殊字符)
    - 出现乱码问题:
    进入MySQL目录下面,找到my.ini文件,此文件可以修改MySQL的配置信息–重新启动MySQLservice服务
    - MySQL的卸载(难点)
    1) 进入控制面板,删除MySQL安装程序包
    2) 进入安装目录,删除MySQL文件
    3) 进入系统C盘的,win/用户下面找MySQL的字样,全部删除
    4) 在cmd窗口:regedit进入注册表
    5) 建议删除回收站
    回收站的文件属于系统不再加载的文件–可以不用删除–盗版
    回收站里的文件属于系统加载文件–需要删除–激活

学习mysql

  • show databases 表示的是显示当前所有数据库!—目的是什么、?查看切换数据库
    shop:数据库—问题:在shop下面建一个表User—操作?
    注意:mysql必须先有数据库,再有表!
    use shop 切换到当前的shop数据库下面建立表 语法 :use 数据名称

  • CRUD操作
    mysql> create table user(id int primary key auto_increment,name char(12),sex varchar(2),age int);
    ERROR 1050 (42S01): Table ‘user’ already exists
    mysql> create table UserPython(id int primary key auto_increment,name char(12),sex varchar(2),age int);
    Query OK, 0 rows affected (0.02 sec)

讲解 :char () 和 varchar()----都是字符串操作

  • varchar数据类型执行数据的速度快!但是会给磁盘产生垃圾磁盘!----数据库回收磁盘碎片,会造成内存浪费!
    mysql自身内存不大,不建议使用!但是在Oracle里面建议使用Varchar–因为Oracle追求读写速度!
  • char类型执行效率较快!但是不产生磁盘垃圾碎片!
    适合mysql用
mysql> show tables;
+----------------+
| Tables_in_shop |
+----------------+
| adminuser      |
| billitem       |
| category       |
| categorysecond |
| message        |
| orderitem      |
| orders         |
| product        |
| shopcartitem   |
| student        |
| user           |
| userpython     |
+----------------+
12 rows in set (0.05 sec)
mysql> insert into UserPython(id,name,sex,age)value(1001,'zhangsan','男',30);
  • mysql插入值有 3种方式
  1. insert into UserPython(id,name,sex,age)value(1001,‘zhangsan’,‘男’,30);
    此写法:是将字段和 值就行一一匹配对应,数据安全、数据好维护等–效率高!
    sql底层只执行一次匹配字段

  2. insert into UserPython values(2,‘zhangsan’,‘m’,30);
    此写法:是将字段和 值不是匹配对应,数据不是很安全、数据不好维护等–效率高!
    sql底层只能寻找和 key 有关系的values —执行2次以上匹配–不建议

  3. insert into UserPython values(‘zhangsan’,‘m’,30);
    此写法:必须满足id是具有主键Primary key机制 ,然后通过id主键去自动匹配数据库的字段对应的value

  • select * from UserPython;
    备注:在sql优化/查询里面,尽量不要使用* ----*会将数据库的列columns全部加载!
Query OK, 1 row affected (0.01 sec)

mysql> select * from UserPython;
+----+----------+------+------+
| id | name     | sex  | age  |
+----+----------+------+------+
|  1 | zhangsan | m    |   30 |
+----+----------+------+------+
1 row in set (0.00 sec)

mysql> insert into UserPython values(2,'zhangsan','m',30);
Query OK, 1 row affected (0.01 sec)

mysql> select * from UserPython;
+----+----------+------+------+
| id | name     | sex  | age  |
+----+----------+------+------+
|  1 | zhangsan | m    |   30 |
|  2 | zhangsan | m    |   30 |
+----+----------+------+------+
2 rows in set (0.00 sec)

实现MySQLClient操作数据分析案例

# 导包/模块
import os;
import pandas;
import MySQLdb;
# 连接数据库  
connection = MySQLdb.connect(
        host='localhost',
        user='root',
        passwd='root',
        db='python',
        charset='utf8'
        );       
#导入数据到MySQL。遍历目录,把里面的所有数据入库
rootDir="C:\\ZhangTao\\python课件\\0808\\测试数据\\";
# 定义一个exeSQL输出SQL执行结果
def exeSQL(sql):
    print("exeSQL: " + sql)
    connection.query(sql);

for fileName in os.listdir(rootDir): 
    print(fileName)
    path = os.path.join(rootDir, fileName)     
    if ".txt" in fileName:
        path = path.replace("\\", "\\\\");
        #拿到文件名中的时间字段
        datetime = fileName[0:8];
        tableName = "订购明细" + datetime;
        #建表、导入数据到表中
        exeSQL("drop table if exists " + tableName)
        exeSQL("create table " + tableName + "(订单编号 int, 订购日期 datetime, 用户ID int, 产品 char(8), `单价(元)` int, 数量 int, 订购金额 int);");
        #mysql将数据导入表的固定语句
        exeSQL("LOAD DATA LOCAL INFILE '" + path + "' INTO TABLE `" + tableName + "` CHARACTER SET 'UTF8' COLUMNS TERMINATED BY ',' LINES TERMINATED BY '\\n' IGNORE 1 ROWS;");
        
        #建立日订购统计表
        exeSQL("create table if not exists 日订购统计表(统计日期 date, 订购用户数 int, 订购次数 int, 人均订购金额 double, 订购总额 double);");
        exeSQL("delete from 日订购统计表 where 统计日期='" + datetime + "';");
        exeSQL("insert into 日订购统计表 select '" + datetime + "', count(distinct 用户ID), count(用户ID), sum(订购金额)/count(distinct 用户ID), sum(订购金额) from `" + tableName + "`;");

statDay = pandas.read_sql('select * from 日订购统计表;', con=connection);
#关闭数据库
connection.close();
print('\n日订购统计表数据如下:');
print(statDay);

#绘图
font = {
    'family' : 'SimHei'
}

matplotlib.rc('font', **font);

# 1.折线图
plot1 = plt.plot(statDay['统计日期'], statDay['订购用户数']);
plt.show();
plot2 = plt.plot(statDay['统计日期'], statDay['订购次数']);
plt.show();
plot3 = plt.plot(statDay['统计日期'], statDay['人均订购金额']);
plt.show();
plt.legend(('订购用户数', '订购次数', '人均订购金额'))

# 2.柱状图
x=statDay['统计日期']
x_labels=['0901','0902','0903','0904','0905','0906','0907','0908']
y=statDay['订购总额']
plt.bar(x,y,width=0.5)
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.xticks(x,x_labels)
#修改x坐标
plt.xlabel('统计日期')
#修改y坐标
plt.ylabel('订购总额')
#添加标题
plt.title('柱状图')
plt.show()

# 3.饼状图
price=statDay['订购总额']
prices=sum(statDay['订购总额'])
price_perc=price/prices
#添加名称
labels=['0901','0902','0903','0904','0905','0906','0907','0908']
#添加颜色
colors=['blue','red','blue','red','blue','red','blue','red']
#绘制饼状图  pie
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
# labels 名称 colors:颜色,explode=分裂  autopct显示百分比
paches,texts,autotexts=plt.pie(price_perc,labels=labels,colors=colors,autopct='%0.1f%%')
#设置饼状图中的字体颜色
for text in autotexts:
    text.set_color('white')
#设置字体大小
for text in texts+autotexts:
    text.set_fontsize(20)
plt.show()

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43895902/article/details/98844811
今日推荐