朴实无华的学习之路

文章详细阐述了如何通过SSH开启MySQL服务,创建数据库和表,导入CSV数据,以及建立视图来分析工作日、出勤情况。同时,展示了如何利用Keras进行文本数据预处理,构建LSTM模型进行文本分类,包括模型训练和评估,以及模型保存与加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

远程连接ip(ssh)开启mysql:systemctl start mysqld

连接mysql -uroot -p123456

建库:create database employee;

用库:use employee;

建表:

CREATE TABLE employee(

emp_id int NOT NULL,

emp_sex char(40) DEFAULT NULL,

emp_email varchar(50) DEFAULT NULL,

emp_salary varchar(10) DEFAULT NULL,

emp_bonus varchar(10) DEFAULT NULL,

emp_job_id int DEFAULT NULL,

emp_dept_id int DEFAULT NULL,

emp_manager varchar(50) DEFAULT NULL,

emp_name char(10) DEFAULT NULL,

emp_date date DEFAULT NULL,

PRIMARY KEY (emp_id)

);

导入数据:

LOAD DATA local INFILE '/root/mysql/employee/employee.csv'

INTO TABLE employee

FIELDS TERMINATED BY ','

LINES TERMINATED BY '\n'

IGNORE 1 ROWS;

建表:

CREATE TABLE `attendance`(

`id` int NOT NULL,

`check_date` date NOT NULL,

`emp_id` int NOT NULL,

`clock_in` timestamp,

`clock_out` timestamp,

PRIMARY KEY (`id`),

UNIQUE KEY `uk_attendance`(`check_date`,`emp_id`)

);

导入数据:

LOAD DATA local INFILE '/root/mysql/employee/attendance.csv'

INTO TABLE attendance

FIELDS TERMINATED BY ','

LINES TERMINATED BY '\n'

IGNORE 1 ROWS;

建表:

CREATE TABLE `calendar`(

`id` int NOT NULL,

`calendar_date` date NOT NULL,

`calendar_year` int NOT NULL,

`calendar_month` int NOT NULL,

`calendar_day` int NOT NULL,

`is_work_day` varchar(1) NOT NULL DEFAULT('Y'),

PRIMARY KEY (`id`),

UNIQUE KEY `calendar_date`(`calendar_date`)

);

导入数据:

LOAD DATA local INFILE '/root/mysql/employee/calendar.csv'

INTO TABLE calendar

FIELDS TERMINATED BY ','

LINES TERMINATED BY '\n'

IGNORE 1 ROWS;

  1. 分析是工作日还是非工作日结果保存table1.

Create view table1 as(

Select a.id,a.check_date,c.is_work_day from attendance a

Left join calendar c on a.check_date = c.calendar_date)

  1. 查询2021年1月应出勤天数

Create view table2 as(

Select e.emp_name,c.calendar_date from employee e

cross join calendar c

where c.calendar_year = 2021 and c.calendar_month =1 and c.is_work_day = 'Y')

  1. 查询2021.1迟到信息

Create view table3 as(

Select a.check_date,e.emp_name,a.clock_in from attendance a

Left join employee e on a.emp_id=e.emp_id

Where EXTRACT(HOUR from a.clock_in)>= 9)

  1. 早退

Create view table4 as(

Select a.check_date,e.emp_name,a.clock_out from attendance a

Left join employee e on a.emp_id=e.emp_id

Where EXTRACT(HOUR from a.clock_out)< 18)

  1. 未打卡

Create view table5 as(

Select c.calendar_date,e.emp_name,a.clock_in,a.clock_out from employee e

cross join calendar c

left join attendance a on(e.emp_id = a.emp_id and a.check_date = c.calendar_date)

where c.calendar_year = 2021 and c.calendar_month =1 and c.is_work_day = 'Y' and (a.clock_in is null or a.clock_out is null))

 

 

 

 

(1) 分析城市对于岗位数量的需求,结果写入本地/root/excel/01.txt(格式为:城市 岗位数)
北京    1061
成都    52
广州    196
杭州    164
南京    30
厦门    16
上海    444
深圳    253
苏州    18
天津    9
武汉    24
西安    16
长沙    13

(2) 分析行业对于岗位的需求,结果写入本地/root/excel/02.txt(格式:企业领域 岗位数)
O2O    31
O2O ,生活服务    2
O2O,电子商务    2
O2O,广告营销    2
O2O,金融    11
O2O,旅游    1
O2O,企业服务    2
O2O,生活服务    20
O2O,数据服务    2
O2O,医疗健康    1
O2O,移动互联网    3
电子商务    114
电子商务,O2O    25
电子商务,广告营销    5
电子商务,教育    1
电子商务,金融    13
电子商务,旅游    7
电子商务,其他    3
电子商务,企业服务    8
电子商务,社交网络    2
电子商务,生活服务    7
电子商务,数据服务    3
电子商务,文化娱乐    7
电子商务,医疗健康    5
电子商务,移动互联网    16
分类信息    1
广告营销    5
广告营销,电子商务    1
广告营销,社交网络    1
广告营销,数据服务    1
广告营销,文化娱乐    2
教育    11
教育,金融    2
教育,其他    1
教育,数据服务    3
教育,移动互联网    2
教育,招聘    1
金融    308
金融 ,数据服务    1
金融,O2O    7
金融,电子商务    3
金融,教育    1
金融,其他    1
金融,企业服务    8
金融,数据服务    46
金融,医疗健康    1
金融,移动互联网    21
金融,招聘    1
金融、电子商务    1
金融、教育    13
旅游    5
旅游,生活服务    1
旅游,移动互联网    1
其他    34
其他,O2O    1
其他,电子商务    1
其他,企业服务    2
其他,生活服务    1
企业服务    34
企业服务,O2O    4
企业服务,分类信息    3
企业服务,广告营销    1
企业服务,教育    2
企业服务,金融    11
企业服务,其他    7
企业服务,生活服务    2
企业服务,数据服务    40
企业服务,文化娱乐    2
企业服务,信息安全    1
企业服务,医疗健康    2
企业服务,移动互联网    3
社交网络    10
社交网络,电子商务    3
社交网络,广告营销    2
社交网络,教育    1
社交网络,金融    3
社交网络,生活服务    2
社交网络,文化娱乐    1
生活服务    11
生活服务,电子商务    2
生活服务,旅游    1
生活服务,其他    1
数据服务    61
数据服务,广告营销    6
数据服务,金融    8
数据服务,其他    3
数据服务,企业服务    9
数据服务,文化娱乐    37
数据服务,信息安全    1
数据服务,医疗健康    1
数据服务,移动互联网    10
数据服务,硬件    3
数据服务,招聘    2
文化娱乐    18
文化娱乐,广告营销    1
文化娱乐,其他    1
文化娱乐,数据服务    1
文化娱乐,游戏    1
信息安全    2
信息安全 ,数据服务    2
信息安全,数据服务    3
信息安全,移动互联网    6
医疗健康    7
医疗健康,其他    1
医疗健康,数据服务    4
医疗健康,移动互联网    2
移动互联网    285
移动互联网 ,O2O    2
移动互联网 ,电子商务    2
移动互联网 ,游戏    12
移动互联网,O2O    190
移动互联网,电子商务    116
移动互联网,分类信息    5
移动互联网,广告营销    28
移动互联网,教育    26
移动互联网,金融    167
移动互联网,旅游    17
移动互联网,其他    11
移动互联网,企业服务    43
移动互联网,社交网络    14
移动互联网,生活服务    16
移动互联网,数据服务    96
移动互联网,文化娱乐    38
移动互联网,信息安全    6
移动互联网,医疗健康    15
移动互联网,硬件    14
移动互联网,游戏    21
移动互联网,招聘    1
移动互联网、O2O    1
移动互联网、金融    1
移动互联网、企业服务    1
硬件    7
硬件 ,数据服务    1
硬件,数据服务    5
游戏    23
游戏,电子商务    1
游戏,金融    2
游戏,数据服务    2
游戏,移动互联网    3
招聘    3

(3) 分析公司规模对于岗位的需求,结果写入本地/root/excel/03.txt(格式:公司规模 岗位数)
150-500人    533
15-50人    229
2000人以上    683
500-2000人    454
50-150人    359
少于15人    38

(4) 分析城市对薪资(取平均值)的影响,结果写入本地/root/excel/04.txt(格式:城市 平均薪资)
北京    15.2799246
成都    9.019230769
广州    10.65561224
杭州    14.0152439
南京    8.833333333
厦门    9.5
上海    14.38400901
深圳    15.31620553
苏州    12.11111111
天津    7.166666667
武汉    9.770833333
西安    8.125
长沙    8.884615385


(5) 分析公司规模对于薪资(取平均值)的影响,结果写入本地/root/excel/05.txt(格式: 公司规模 平均薪资)
150-500人    12.89681051
15-50人    11.41484716
2000人以上    16.18155198
500-2000人    15.01211454
50-150人    13.24791086
少于15人    10.46052632

(6) 分析学历对于薪资(取平均值)的影响,结果写入本地/root/excel/06.txt(格式:学历要求 平均薪资)
本科    14.88845694
博士    19
不限    12.1744186
大专    10.96597633
硕士    14.75986842

(7) 分析工作经验对于薪资、岗位的影响,结果写入本地/root/excel/07.txt(格式:工作年限 平均薪资 岗位数)
10年以上    33.16666667    6
1-3年    12.08305085    885
1年以下    8.378787879    33
3-5年    17.17346939    735
5-10年    23.41878173    197
不限    9.920980926    367
应届毕业生    6.342465753    73

(8) 试分析给出数据分析岗位需求量较大的公司top6,结果写入本地/root/excel/08.txt(格式:公司简称 岗位数)
美团点评    13
网易    6
京东商城    5
上海链家(原德佑)    4
个推    4
Gridsum 国双    4

(9) 现有一名本科、工作两年的择业人员,想要在北京转数据分析岗位,对岗位需求量分析给出建议投递简历的公司top5(岗位需求量降序),结果写入本地/root/excel/09.txt(格式:公司简称 岗位数)
今日头条    4
宜信    4
去哪儿网    3
人人行(借贷宝)    3
博晨技术    2

MySQL2:

system start mysqld

1. 环境中已经安装mysql8,用户名root,密码123456,开启数据库服务。
mysql -uroot -p123456
2. 创建数据库relation并使用此数据库;
create database relation
3. 在数据库relation下创建数据表user并导入数据(数据类型参考步骤说明,数据路径`/root/mysql/relation`)
create table user
(user_id INT not null primary key auto_increment,
user_name varchar(n))
         
LOAD DATA local INFILE '/root/mysql/relation/user.csv'
INTO TABLE user
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;  --已验证

4. 在数据库relation下创建数据表friend并导入数据(数据类型参考步骤说明,数据路径`/root/mysql/relation`)
create table friend 
(user_id int not null ,
friend_id int not null,
created_time datetime
)
LOAD DATA local INFILE '/root/mysql/relation/friend.csv'
INTO TABLE friend
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 ROWS; --已验证

5. 分析不同用户的好友数,结果存为视图table1。(字段:user_name f_num,没有对应字段可自行创建)
create view table1 as (select count(*) f_num , user_name from user u left join friend f on u.user_id=f.user_id group by user_id) --已验证

6. 查找用户“系乐”的所有朋友信息(姓名),结果存为视图table2。(字段:user_name f_name)
create view table2 as 
select u1.user_name ,u2.user_name f_name from friend f 
left join user u1 on u1.user_id=f.user_id 
left join user u2 on u2.user_id=f.friend_id
where u1.user_name='系乐'
--已验证

7. 查询用户的所有好友信息(姓名),结果存为视图table3。(字段:user_name f_name,f_name支持多个信息)
create view table3 as (select u.user_name ,u2.user_name f_name from user u left join friend f on u.user_id=f.user_id left join user u2 on u2.user_id=f.friend_id) --已验证

8. 查询“系乐”和“姚欣然”的共同好友信息(ID),结果存入视图table4。(字段:user_name1,user_name2,friend_id)
CREATE VIEW table4 AS
SELECT u1.user_name AS user_name1, u2.user_name AS user_name2, f.friend_id
FROM user u1
JOIN friend f ON u1.user_id = f.user_id
JOIN user u2 ON f.friend_id = u2.user_id
WHERE (u1.user_name = '系乐' AND u2.user_name = '姚欣然') OR (u1.user_name = '姚欣然' AND u2.user_name = '系乐') --已验证

9. 进行社交网络挖掘,以嫌疑人“姚欣然”(用户ID为2)为对象,查询其“朋友的朋友”可能是”潜在的嫌疑对象“,将”潜在的嫌疑对象“信息存入视图table5。(字段:user_id,user_name)
create view table5 as
select DISTINCT u.user_id, u.user_name
FROM friend f1
JOIN friend f2 ON f1.friend_id = f2.user_id
JOIN user u ON f2.friend_id = u.user_id
WHERE f1.user_id = 2 AND u.user_id NOT IN (SELECT friend_id FROM friend WHERE user_id = 2) --已验证

1.去重即可
答案:9

2.counif函数
答案:
日用 4 
零食 3
小家电 2

3.countifs函数             “>=”&J3 "<"&J3
答案:
50及以上 2
50以下 0

4.数据透视表(有ID用ID,无id用日期)
答案:
河北 51
黑龙江 45
吉林 36
辽宁 59
山西 101

5.数据透视表(有ID用ID,无id用日期)
答案:
饿了么 8
京东 11
美团 5
拼多多 4
淘宝 8

1.1588.9241
2.60.71%
3.61.29%
4.4996416.957
5.8288
6.51.55%
7.物品id    推广投入金额
1    225831.0434
2    74619.1168
3    73586.93386
4    259056.0924
5    110269.043
6    353627.5758
7    384288.515
8    370848.7625
9    225138.5471
10    222740.4037
11    315626.5368
12    147058.5437

1、启动hdfs集群,在node01上执行:

        start-dfs.sh(hdfs集群)

        start-yarn.sh(yarn服务)

或者执行start-all.sh全部启动

2、启动zookeeper,在所有机器上执行(配置了环境变量的):

        zkServer.sh start(启动zookeeper服务)

        zkServer.sh status(查看zk集群状态,两个follower,一个leader)

未配置环境变量,在ZOOKEEPER_HOME/bin 下执行:

        ./zkServer.sh start(启动zookeeper服务)

        ./zkServer.sh status(查看zk集群状态)

此时的进程:

 

        

 3、启动hive数仓(我的配置下的启动顺序):

        ①node02上执行:hive --service metastore

        ②node01上 执行:hiveserver2

        ③node03上执行:beeline -u jdbc:hive2://node01:10000 -u root

 

#pip install keras==2.3.1

import pandas as pd  
import jieba  
import jieba.analyse as analyse  
from keras.preprocessing.text import Tokenizer  
from keras.preprocessing import sequence  
from keras.models import Sequential  
from keras.layers import Dense 
from keras.layers.embeddings import Embedding  
import numpy as np  
from sklearn.model_selection import train_test_split 

#读取数据
data = ??? #读取csv数据文件,编码格式为utf-8
data = data.??? #删除空行 
data.head()

    打标签(文字->数字)

label = list(data['报警类型'].???)  #查看有多少不同的类 
print(label)  

#增添标签列 
def label_dataset(row):  
    num_label = label.index(row) #提取label的索引 
    return num_label  
data['label'] = data['报警类型'].???(label_dataset) #将label的索引‘报警类型’对应,并添加新列 
data.head()

    分词(jieba) 关键字

#中文分词  
def chinese_word_cut(row):  
    return " ".join(jieba.cut(row)) #结巴分词
data['报警内容分词'] = data['报警内容'].???(chinese_word_cut) #对每行进行分词
data['报警内容分词']
#查看每句话多少个词
for i in data['报警内容分词']:
    print(len(i))

    lstm
    建立词典,同一序列长度

#设置最频繁使用的词
max_words = 2000 
#每条最大的长度
max_length = 50 
#设置Embeddingceng层的维度
embedding_dim = 100 
tokenizer = Tokenizer(num_words=max_words) #文本标记类
tokenizer.???(data['报警内容分词'].values) #要训练的文本内容
word_index = tokenizer.word_index #单词映射为词索引
print('共有 %s 个不相同的词语.' % len(word_index))

X = tokenizer.???(data['报警内容分词'].values) #待转化为序列的文本
#填充X,让X的各个列的长度统一
X = sequence.???(X, maxlen=max_length) #截为相同长度
 
#设置标签格式
#Y = pd.get_dummies(data['label']).values #标签设置为独热编码
Y = data['label'].???('category') #标签设置为类别
#print(X.shape)
#print(Y.shape)

#拆分训练测试集和验证集
X_train, X_test, Y_train, Y_test = ???(X, Y, ???, shuffle=True, random_state = 42) #20%留作验证
#print(len(X_train))
#print(len(X_test))
#print(len(Y_train))
#print(len(Y_test))

    训练模型

from keras.layers import Dropout, Dense, LSTM, SpatialDropout1D#, sparse_categorical_crossentropy
#定义模型
model = Sequential([   #设置神经网络序列
            Embedding(input_dim=max_words, output_dim=embedding_dim), #embedding层,甚至输入和输出维度
            ???, #丢弃20%
            LSTM(50, dropout=0.2, recurrent_dropout=0.2), #LSTM层,丢弃20%
            Dense(3, ???) #全连接层进行最终分类,激活函数设置为softmax
                ])

#配置模型
import keras
model.compile(???='sparse_categorical_crossentropy', #损失函数
              ???='RMSprop', #优化器
              ???=['accuracy'] #评估指标
             )

epochs = 20  
batch_size = 200 
 
history = model.fit(X_train, #训练数据
                    Y_train,#标签
                    epochs=epochs, #训练轮次
                    batch_size=batch_size, #每批次大小
                    ???, #测试部分所占比例
                   )

import matplotlib.pyplot as plt
%matplotlib inline
plt.title('Accuracy')
plt.plot(history.history['accuracy'], label='train_acc') #训练集准确率
plt.plot(history.history['val_accuracy'], label='test_acc') #测试集准确率
plt.legend()
plt.show()
plt.title('Loss')
plt.plot(history.history['loss'], label='train_loss') #训练集损失
plt.plot(history.history['val_loss'], label='test_loss') #测试集损失
plt.legend()
plt.show()

    保存模型

#保存模型  
from keras.utils import plot_model  
model.???('model_LSTM_text.h5')  #  生成模型文件 'my_model.h5'  

#加载模型 
from keras.models import load_model 
model2 = ???('model_LSTM_text.h5') #为做区别,读取存储的模型命名为model2

#验证集标签预测
y_pred = model2.???(X_test) #对验证集进行预测,预测结果为概率
y_pred = y_pred.argmax(axis = 1) #每行最大值的索引,即概率最大的索引也是标签
y_pred

scores = model2.???(X_test, Y_test) #验证集进行评估[loss,accuary]
print("Accuracy: %.2f%%" % (scores[1]*100)) #验证集准确率

    混淆矩阵

import seaborn as sns
from sklearn.metrics import  confusion_matrix
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
conf_mat = ???(Y_test , y_pred) #混淆矩阵
fig = plt.figure(figsize=(10,8)) #设置图像大小
sns.???(conf_mat, annot=True, fmt='d',xticklabels=label, yticklabels=label) #绘制热度图
plt.ylabel('实际结果',fontsize=18)
plt.xlabel('预测结果',fontsize=18)


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值