{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "### start to get data PK504B10100004341 from 2021-10-30 00:00:00 to 2021-10-31 00:00:00\n", "# get data from 2021-10-30 00:00:00 to 2021-10-31 00:00:00......... \n", "all data-getting done, bms_count is 3754, gps_count is 0, system_count is 0, accum_count is 0 \n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py:4441: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " return super().rename(\n" ] } ], "source": [ "# 获取数据\n", "import sys\n", "from LIB.BACKEND import DBManager\n", "from LIB.MIDDLE.OutlierDetection.VoltOutlier.V_1_0_0 import sta\n", "import pymysql\n", "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "\n", "plt.rcParams['font.sans-serif'] = ['SimHei']\n", "plt.rcParams['axes.unicode_minus'] = False\n", "\n", "# 更新sn列表\n", "host='rm-bp10j10qy42bzy0q7.mysql.rds.aliyuncs.com'\n", "port=3306\n", "db='qixiang_oss'\n", "user='qixiang_oss'\n", "password='Qixiang2021'\n", "conn = pymysql.connect(host=host, port=port, user=user, password=password, database=db)\n", "cursor = conn.cursor()\n", "cursor.execute(\"select sn, imei, add_time from app_device\")\n", "res = cursor.fetchall()\n", "df_sn = pd.DataFrame(res, columns=['sn', 'imei', 'add_time'])\n", "df_sn = df_sn.reset_index(drop=True)\n", "conn.close();\n", "\n", "window = 50\n", "step = 10\n", "window2 = 5\n", "step2 = 3\n", "volt_column = ['单体电压1', '单体电压2',\n", " '单体电压3', '单体电压4','单体电压5', '单体电压6','单体电压7', '单体电压8','单体电压9', '单体电压10', '单体电压11', '单体电压12',\n", " '单体电压13', '单体电压14','单体电压15', '单体电压16','单体电压17', '单体电压18','单体电压19', '单体电压20']\n", "columns = ['时间戳', '单体电压1', '单体电压2','单体电压3', '单体电压4','单体电压5', '单体电压6','单体电压7', '单体电压8','单体电压9', '单体电压10', '单体电压11', '单体电压12',\n", "'单体电压13', '单体电压14','单体电压15', '单体电压16','单体电压17', '单体电压18','单体电压19', '单体电压20']\n", "dbManager = DBManager.DBManager()\n", "\n", "all_result = pd.DataFrame(columns=['sn', 'suptype', 'type', 'num', 'alarm_time'])\n", "for sn in df_sn['sn'].tolist()[0:3]:\n", " st = '2021-10-30 00:00:00'\n", " et = '2021-10-31 00:00:00'\n", "\n", " \n", " df_data = dbManager.get_data(sn=sn, start_time=st, end_time=et, data_groups=['bms'])\n", " # \n", " df_bms = df_data['bms']\n", "\n", " df_ori = df_bms[columns]\n", " df_ori.rename(columns = {'时间戳':'time'}, inplace=True)\n", " df = df_ori.drop_duplicates(subset=['time']) # 删除时间相同的数据\n", " df = df.reset_index(drop=True)\n", " df_result_1,time_list_1 = sta.cal_voltdiff_uniform(df,volt_column, window=window, step=step, window2=window2, step2=step2)\n", " df_result_2,time_list_2 = sta.cal_volt_uniform(df,volt_column, window=window, step=step)\n", "\n", " df_result_1['time'] = time_list_1\n", " df_result_2['time'] = time_list_2\n", " # second_list = [((pd.to_datetime(x)-pd.to_datetime(time_list[0])).total_seconds()) for x in time_list] # 距离第一个点的分钟数\n", "\n", " # fig = plt.figure(figsize=(20,10))\n", "\n", " # length = len(df_result)\n", " # for column in volt_column:\n", " # # plt.plot([x for x in range(0, length)], df_result[column][0:length], label=column)\n", " # plt.scatter(time_list[:], df_result[column][:length], label=column)\n", "\n", " # plt.legend()\n", " # plt.title('{}电压离群(电压滤波窗口大小:{}, 步进大小:{}'.format(sn, window, step, window2, step2))\n", " # sn = sn.replace('/','_')\n", " # plt.savefig('./结果/新数据/' + sn + '.png')\n", " # plt.close()\n", "\n", " # 报警\n", " # df_result_1['time'] = time_list_1\n", " # alarm_result = sta.alarm(df_result_1, volt_column, alarm_window=20, alarm_ratio=0.9, alarm_threshold=3.5)\n", " # alarm_result['sn'] = [sn] * len(alarm_result)\n", " # alarm_result['suptype'] = ['电压变化量离群'] * len(alarm_result)\n", " # all_result = pd.concat([all_result, alarm_result])\n", "\n", " # df_result_2['time'] = time_list_2\n", " # alarm_result = sta.alarm(df_result_2, volt_column, alarm_window=20, alarm_ratio=0.9, alarm_threshold=3.5)\n", " # alarm_result['sn'] = [sn] * len(alarm_result)\n", " # alarm_result['suptype'] = ['电压离群'] * len(alarm_result)\n", "\n", " # 记录偏差超过3的电芯编号\n", " df_all_result = sta.instorage(sn, df_result_1, df_result_2)\n", " \n", " # all_result = pd.concat([all_result, alarm_result])\n", " # all_result.to_csv('./result_volt.csv')\n", " break" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "### start to get data MGMCLN750N215I037 from 2021-10-23 00:00:00 to 2021-10-31 00:00:00\n", "# get data from 2021-10-30 00:00:00 to 2021-10-31 00:00:00......... \n", "all data-getting done, bms_count is 32625, gps_count is 0, system_count is 0, accum_count is 0 \n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py:4441: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " return super().rename(\n" ] } ], "source": [ "# 单车运行\n", "# 获取数据\n", "import sys\n", "from LIB.BACKEND import DBManager\n", "from LIB.MIDDLE.OutlierDetection.VoltOutlier.V_1_0_0 import sta\n", "import pymysql\n", "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "\n", "plt.rcParams['font.sans-serif'] = ['SimHei']\n", "plt.rcParams['axes.unicode_minus'] = False\n", "\n", "# 更新sn列表\n", "# host='rm-bp10j10qy42bzy0q7.mysql.rds.aliyuncs.com'\n", "# port=3306\n", "# db='qixiang_oss'\n", "# user='qixiang_oss'\n", "# password='Qixiang2021'\n", "# conn = pymysql.connect(host=host, port=port, user=user, password=password, database=db)\n", "# cursor = conn.cursor()\n", "# cursor.execute(\"select sn, imei, add_time from app_device\")\n", "# res = cursor.fetchall()\n", "# df_sn = pd.DataFrame(res, columns=['sn', 'imei', 'add_time'])\n", "# df_sn = df_sn.reset_index(drop=True)\n", "# conn.close();\n", "\n", "window = 50\n", "step = 10\n", "window2 = 5\n", "step2 = 3\n", "volt_column = ['单体电压1', '单体电压2',\n", " '单体电压3', '单体电压4','单体电压5', '单体电压6','单体电压7', '单体电压8','单体电压9', '单体电压10', '单体电压11', '单体电压12',\n", " '单体电压13', '单体电压14','单体电压15', '单体电压16','单体电压17', '单体电压18','单体电压19', '单体电压20']\n", "columns = ['时间戳', '单体电压1', '单体电压2','单体电压3', '单体电压4','单体电压5', '单体电压6','单体电压7', '单体电压8','单体电压9', '单体电压10', '单体电压11', '单体电压12',\n", "'单体电压13', '单体电压14','单体电压15', '单体电压16','单体电压17', '单体电压18','单体电压19', '单体电压20']\n", "dbManager = DBManager.DBManager()\n", "sns = ['MGMCLN750N215I037']\n", "all_result = pd.DataFrame(columns=['sn', 'suptype', 'type', 'num', 'alarm_time'])\n", "for sn in sns:\n", " sn = 'MGMCLN750N215I037'\n", " st = '2021-10-23 00:00:00'\n", " et = '2021-10-31 00:00:00'\n", "\n", " \n", " df_data = dbManager.get_data(sn=sn, start_time=st, end_time=et, data_groups=['bms'])\n", " # \n", " df_bms = df_data['bms']\n", "\n", " df_ori = df_bms[columns]\n", " df_ori.rename(columns = {'时间戳':'time'}, inplace=True)\n", " df = df_ori.drop_duplicates(subset=['time']) # 删除时间相同的数据\n", " df = df.reset_index(drop=True)\n", " df_result_1,time_list_1 = sta.cal_voltdiff_uniform(df,volt_column, window=window, step=step, window2=window2, step2=step2)\n", " df_result_2,time_list_2 = sta.cal_volt_uniform(df,volt_column, window=window, step=step)\n", "\n", " df_result_1['time'] = time_list_1\n", " df_result_2['time'] = time_list_2\n", " # second_list = [((pd.to_datetime(x)-pd.to_datetime(time_list[0])).total_seconds()) for x in time_list] # 距离第一个点的分钟数\n", "\n", " # fig = plt.figure(figsize=(20,10))\n", "\n", " # length = len(df_result)\n", " # for column in volt_column:\n", " # # plt.plot([x for x in range(0, length)], df_result[column][0:length], label=column)\n", " # plt.scatter(time_list[:], df_result[column][:length], label=column)\n", "\n", " # plt.legend()\n", " # plt.title('{}电压离群(电压滤波窗口大小:{}, 步进大小:{}'.format(sn, window, step, window2, step2))\n", " # sn = sn.replace('/','_')\n", " # plt.savefig('./结果/新数据/' + sn + '.png')\n", " # plt.close()\n", "\n", " # 报警\n", " # df_result_1['time'] = time_list_1\n", " # alarm_result = sta.alarm(df_result_1, volt_column, alarm_window=20, alarm_ratio=0.9, alarm_threshold=3.5)\n", " # alarm_result['sn'] = [sn] * len(alarm_result)\n", " # alarm_result['suptype'] = ['电压变化量离群'] * len(alarm_result)\n", " # all_result = pd.concat([all_result, alarm_result])\n", "\n", " # df_result_2['time'] = time_list_2\n", " # alarm_result = sta.alarm(df_result_2, volt_column, alarm_window=20, alarm_ratio=0.9, alarm_threshold=3.5)\n", " # alarm_result['sn'] = [sn] * len(alarm_result)\n", " # alarm_result['suptype'] = ['电压离群'] * len(alarm_result)\n", "\n", " # 记录偏差超过3的电芯编号\n", " df_all_result = sta.instorage(sn, df_result_1, df_result_2)\n", " \n", " # all_result = pd.concat([all_result, alarm_result])\n", " # all_result.to_csv('./result_volt.csv')\n", " break" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
1340单体电压1单体电压10单体电压11单体电压12单体电压13单体电压14单体电压15单体电压16单体电压17...单体电压19单体电压2单体电压20单体电压3单体电压4单体电压5单体电压6单体电压7单体电压8单体电压9
1340NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

1 rows × 21 columns

\n", "
" ], "text/plain": [ " 1340 单体电压1 单体电压10 单体电压11 单体电压12 单体电压13 单体电压14 单体电压15 单体电压16 单体电压17 ... \\\n", "1340 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... \n", "\n", " 单体电压19 单体电压2 单体电压20 单体电压3 单体电压4 单体电压5 单体电压6 单体电压7 单体电压8 单体电压9 \n", "1340 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "\n", "[1 rows x 21 columns]" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(df_bms[1340:1341][volt_column] - df_bms[1340:1341][volt_column].mean(1))/df_bms[1340:1341][volt_column].std(1)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
单体电压1单体电压2单体电压3单体电压4单体电压5单体电压6单体电压7单体电压8单体电压9单体电压10单体电压11单体电压12单体电压13单体电压14单体电压15单体电压16单体电压17单体电压18单体电压19单体电压20
13401.00.01.00.00.0-5.00.0-3.01.03.01.02.0-2.01.03.02.0-1.0-1.0-2.0-1.0
\n", "
" ], "text/plain": [ " 单体电压1 单体电压2 单体电压3 单体电压4 单体电压5 单体电压6 单体电压7 单体电压8 单体电压9 单体电压10 单体电压11 \\\n", "1340 1.0 0.0 1.0 0.0 0.0 -5.0 0.0 -3.0 1.0 3.0 1.0 \n", "\n", " 单体电压12 单体电压13 单体电压14 单体电压15 单体电压16 单体电压17 单体电压18 单体电压19 单体电压20 \n", "1340 2.0 -2.0 1.0 3.0 2.0 -1.0 -1.0 -2.0 -1.0 " ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_bms[1340:1341][volt_column] - 4159" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1340 2.0\n", "dtype: float64" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_bms[1340:1341][volt_column].std(1) " ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Int64Index([1389], dtype='int64')" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_bms[df_bms['时间戳']=='2021-10-23 04:15:26'].index" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
单体电压1单体电压2单体电压3单体电压4单体电压5单体电压6单体电压7单体电压8单体电压9单体电压10...单体电压12单体电压13单体电压14单体电压15单体电压16单体电压17单体电压18单体电压19单体电压20time
1340.7020750.2280560.7126090.0384480.070050-3.0900800.322860-1.1940020.2491240.933818...1.218230-1.1308000.7126090.8179470.828481-0.235430-0.351301-0.814787-0.4882402021-10-23 04:15:26
1350.6660680.3008210.7370880.0573230.118198-3.2704800.341404-1.1094370.1486350.767525...1.183501-1.0587080.7776710.5544650.879129-0.135446-0.257195-0.703607-0.4804012021-10-23 04:17:06
1360.6243900.2921640.7123320.0967360.174907-3.4014090.380106-1.0269700.0478800.624390...1.191128-0.9683410.8100450.3214780.927302-0.108462-0.206176-0.577487-0.4309172021-10-23 04:18:46
1370.5842560.3100900.6787950.1115570.215551-3.4809530.423538-0.956742-0.0018910.489716...1.189310-0.9094720.8584210.1210110.943507-0.058615-0.153154-0.493497-0.3989582021-10-23 04:20:25
1380.5858150.3211950.6861880.1113230.229946-3.5386150.448942-0.846786-0.0437990.412443...1.142430-0.9015350.859560-0.0711740.987308-0.016425-0.116798-0.399668-0.3631692021-10-23 04:22:06
..................................................................
2886-0.0281280.1377130.3588350.6482440.254777-3.1108220.410863-0.037883-0.232991-1.436152...0.6905170.7262870.794574-1.8101070.5539420.7132790.7197830.1247060.3068062021-10-30 09:42:21
2887-0.0320190.1729030.3379790.6453620.283903-3.0631590.4148250.070442-0.211326-1.475012...0.6055160.7279000.796208-1.8990870.5286710.6852080.7250540.1814410.3038252021-10-30 09:44:01
28880.0113800.2493150.3087990.5984600.264833-3.0404030.4406980.083795-0.270522-1.460200...0.5053540.7226000.779498-1.9541750.5467350.6915650.7355310.1820720.4148352021-10-30 09:45:41
28890.0309370.2648480.3151520.5968510.244727-3.0174560.4534860.121483-0.353885-1.513381...0.5037900.7502770.747762-1.9208400.5591240.6999730.7603380.1717860.4056982021-10-30 09:47:17
28900.0356170.2695940.2877920.5893630.235797-3.0242890.4541760.103210-0.375144-1.506035...0.5139710.7817450.732349-1.8985970.5321690.7193510.7843440.1760030.4203802021-10-30 09:48:59
\n", "

940 rows × 21 columns

\n", "
" ], "text/plain": [ " 单体电压1 单体电压2 单体电压3 单体电压4 单体电压5 单体电压6 单体电压7 \\\n", "134 0.702075 0.228056 0.712609 0.038448 0.070050 -3.090080 0.322860 \n", "135 0.666068 0.300821 0.737088 0.057323 0.118198 -3.270480 0.341404 \n", "136 0.624390 0.292164 0.712332 0.096736 0.174907 -3.401409 0.380106 \n", "137 0.584256 0.310090 0.678795 0.111557 0.215551 -3.480953 0.423538 \n", "138 0.585815 0.321195 0.686188 0.111323 0.229946 -3.538615 0.448942 \n", "... ... ... ... ... ... ... ... \n", "2886 -0.028128 0.137713 0.358835 0.648244 0.254777 -3.110822 0.410863 \n", "2887 -0.032019 0.172903 0.337979 0.645362 0.283903 -3.063159 0.414825 \n", "2888 0.011380 0.249315 0.308799 0.598460 0.264833 -3.040403 0.440698 \n", "2889 0.030937 0.264848 0.315152 0.596851 0.244727 -3.017456 0.453486 \n", "2890 0.035617 0.269594 0.287792 0.589363 0.235797 -3.024289 0.454176 \n", "\n", " 单体电压8 单体电压9 单体电压10 ... 单体电压12 单体电压13 单体电压14 \\\n", "134 -1.194002 0.249124 0.933818 ... 1.218230 -1.130800 0.712609 \n", "135 -1.109437 0.148635 0.767525 ... 1.183501 -1.058708 0.777671 \n", "136 -1.026970 0.047880 0.624390 ... 1.191128 -0.968341 0.810045 \n", "137 -0.956742 -0.001891 0.489716 ... 1.189310 -0.909472 0.858421 \n", "138 -0.846786 -0.043799 0.412443 ... 1.142430 -0.901535 0.859560 \n", "... ... ... ... ... ... ... ... \n", "2886 -0.037883 -0.232991 -1.436152 ... 0.690517 0.726287 0.794574 \n", "2887 0.070442 -0.211326 -1.475012 ... 0.605516 0.727900 0.796208 \n", "2888 0.083795 -0.270522 -1.460200 ... 0.505354 0.722600 0.779498 \n", "2889 0.121483 -0.353885 -1.513381 ... 0.503790 0.750277 0.747762 \n", "2890 0.103210 -0.375144 -1.506035 ... 0.513971 0.781745 0.732349 \n", "\n", " 单体电压15 单体电压16 单体电压17 单体电压18 单体电压19 单体电压20 \\\n", "134 0.817947 0.828481 -0.235430 -0.351301 -0.814787 -0.488240 \n", "135 0.554465 0.879129 -0.135446 -0.257195 -0.703607 -0.480401 \n", "136 0.321478 0.927302 -0.108462 -0.206176 -0.577487 -0.430917 \n", "137 0.121011 0.943507 -0.058615 -0.153154 -0.493497 -0.398958 \n", "138 -0.071174 0.987308 -0.016425 -0.116798 -0.399668 -0.363169 \n", "... ... ... ... ... ... ... \n", "2886 -1.810107 0.553942 0.713279 0.719783 0.124706 0.306806 \n", "2887 -1.899087 0.528671 0.685208 0.725054 0.181441 0.303825 \n", "2888 -1.954175 0.546735 0.691565 0.735531 0.182072 0.414835 \n", "2889 -1.920840 0.559124 0.699973 0.760338 0.171786 0.405698 \n", "2890 -1.898597 0.532169 0.719351 0.784344 0.176003 0.420380 \n", "\n", " time \n", "134 2021-10-23 04:15:26 \n", "135 2021-10-23 04:17:06 \n", "136 2021-10-23 04:18:46 \n", "137 2021-10-23 04:20:25 \n", "138 2021-10-23 04:22:06 \n", "... ... \n", "2886 2021-10-30 09:42:21 \n", "2887 2021-10-30 09:44:01 \n", "2888 2021-10-30 09:45:41 \n", "2889 2021-10-30 09:47:17 \n", "2890 2021-10-30 09:48:59 \n", "\n", "[940 rows x 21 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_result_2[df_result_2['单体电压6']<-3]" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "No handles with labels found to put in legend.\n", "No handles with labels found to put in legend.\n", "No handles with labels found to put in legend.\n", "No handles with labels found to put in legend.\n", "No handles with labels found to put in legend.\n", "No handles with labels found to put in legend.\n", "No handles with labels found to put in legend.\n", "No handles with labels found to put in legend.\n", "No handles with labels found to put in legend.\n", "No handles with labels found to put in legend.\n", "No handles with labels found to put in legend.\n", "No handles with labels found to put in legend.\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 结果分析\n", "# 获取数据\n", "import sys\n", "from LIB.BACKEND import DBManager\n", "from LIB.MIDDLE.OutlierDetection.VoltOutlier.V_1_0_0 import sta\n", "import pymysql\n", "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "from sqlalchemy import create_engine\n", "from sqlalchemy.orm import sessionmaker\n", "from urllib import parse\n", "\n", "plt.rcParams['font.sans-serif'] = ['SimHei']\n", "plt.rcParams['axes.unicode_minus'] = False\n", "\n", "# # 更新sn列表\n", "# host='rm-bp10j10qy42bzy0q7.mysql.rds.aliyuncs.com'\n", "# port=3306\n", "# db='qixiang_oss'\n", "# user='qixiang_oss'\n", "# password='Qixiang2021'\n", "# conn = pymysql.connect(host=host, port=port, user=user, password=password, database=db)\n", "# cursor = conn.cursor()\n", "# cursor.execute(\"select sn, imei, add_time from app_device\")\n", "# res = cursor.fetchall()\n", "# df_sn = pd.DataFrame(res, columns=['sn', 'imei', 'add_time'])\n", "\n", "# host = 'rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com'\n", "# port = 3306\n", "# user = 'qx_cas'\n", "# password = parse.quote_plus('Qx@123456')\n", "# database = 'qx_cas'\n", "\n", "# db_engine = create_engine(\n", "# \"mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8\".format(\n", "# user, password, host, port, database\n", "# ))\n", "# DbSession = sessionmaker(bind=db_engine)\n", "# df_result = pd.read_sql('select * from outlierdetection_volt', db_engine)\n", "\n", "fig = plt.figure(figsize=(20,10))\n", "ax1 = fig.add_subplot(2,1,1)\n", "ax2 = fig.add_subplot(2,1,2)\n", "glm_sns = []\n", "df_alarm = pd.DataFrame(columns=['sn'])\n", "alarm_sn = []\n", "for i in range(len(df_sn)):\n", " if (df_sn.loc[i, 'imei'])[0:3] == 'MGM':\n", " glm_sns.append(df_sn.loc[i, 'sn'])\n", "for sn in glm_sns:\n", " df = df_result[df_result['sn']==sn]\n", " if not df.empty and not df[(df['value']>4) | (df['value']<-4)].empty:\n", " df_volt_out = df[df['type']=='电压离群'][['time','cellnum','value']]\n", " cellnums = sorted(set(df_volt_out['cellnum'].tolist()))\n", " for cellnum in cellnums:\n", " df_f = df_volt_out[df_volt_out['cellnum']==cellnum]\n", " ax1.scatter(df_f['time'], df_f['value'], label=cellnum)\n", " ax1.legend()\n", " ax1.set_title('{} 电压离群结果图'.format(sn))\n", "\n", " \n", " df_voltdiff_out = df[df['type']=='电压变化量离群'][['time','cellnum','value']]\n", " cellnums = sorted(set(df_voltdiff_out['cellnum'].tolist()))\n", " for cellnum in cellnums:\n", " df_f = df_voltdiff_out[df_voltdiff_out['cellnum']==cellnum]\n", " ax2.scatter(df_f['time'], df_f['value'], label=cellnum)\n", " ax2.legend()\n", " ax2.set_title('{} 电压变化量离群结果图'.format(sn))\n", " plt.savefig('./result/filter/{}.jpg'.format(sn), bbox_inches='tight')\n", " ax1.clear()\n", " ax2.clear()\n", "# df_alarm = pd.DataFrame({'sn':alarm_sn}).to_csv('alarm.csv')\n", "\n", " \n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "### start to get data MGMCLN750N215N155 from 2021-10-24 00:00:00 to 2021-10-31 00:00:00\n", "# get data from 2021-10-30 00:00:00 to 2021-10-31 00:00:00......... \n", "all data-getting done, bms_count is 1309, gps_count is 0, system_count is 0, accum_count is 0 \n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py:4441: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " return super().rename(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "### start to get data MGMCLN750N215I004 from 2021-10-24 00:00:00 to 2021-10-31 00:00:00\n", "# get data from 2021-10-30 00:00:00 to 2021-10-31 00:00:00......... \n", "all data-getting done, bms_count is 1278, gps_count is 0, system_count is 0, accum_count is 0 \n", "\n", "### start to get data MGMCLN750N215I027 from 2021-10-24 00:00:00 to 2021-10-31 00:00:00\n", "# get data from 2021-10-30 00:00:00 to 2021-10-31 00:00:00......... \n", "all data-getting done, bms_count is 25810, gps_count is 0, system_count is 0, accum_count is 0 \n", "\n", "### start to get data MGMCLN750N215I033 from 2021-10-24 00:00:00 to 2021-10-31 00:00:00\n", "# get data from 2021-10-30 00:00:00 to 2021-10-31 00:00:00......... \n", "all data-getting done, bms_count is 6234, gps_count is 0, system_count is 0, accum_count is 0 \n", "\n", "### start to get data MGMCLN750N215I065 from 2021-10-24 00:00:00 to 2021-10-31 00:00:00\n", "# get data from 2021-10-30 00:00:00 to 2021-10-31 00:00:00......... \n", "all data-getting done, bms_count is 41028, gps_count is 0, system_count is 0, accum_count is 0 \n", "\n", "### start to get data MGMCLN750N215N096 from 2021-10-24 00:00:00 to 2021-10-31 00:00:00\n", "# get data from 2021-10-30 00:00:00 to 2021-10-31 00:00:00......... \n", "all data-getting done, bms_count is 15967, gps_count is 0, system_count is 0, accum_count is 0 \n", "\n", "### start to get data MGMCLN750N215N268 from 2021-10-24 00:00:00 to 2021-10-31 00:00:00\n", "# get data from 2021-10-30 00:00:00 to 2021-10-31 00:00:00......... \n", "all data-getting done, bms_count is 41563, gps_count is 0, system_count is 0, accum_count is 0 \n", "\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 获取数据\n", "import sys\n", "from LIB.BACKEND import DBManager\n", "from LIB.MIDDLE.OutlierDetection.VoltOutlier.V_1_0_0 import sta\n", "import pymysql\n", "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "import numpy as np\n", "\n", "import matplotlib.ticker as ticker\n", "\n", "plt.rcParams['font.sans-serif'] = ['SimHei']\n", "plt.rcParams['axes.unicode_minus'] = False\n", "\n", "# 更新sn列表\n", "host='rm-bp10j10qy42bzy0q7.mysql.rds.aliyuncs.com'\n", "port=3306\n", "db='qixiang_oss'\n", "user='qixiang_oss'\n", "password='Qixiang2021'\n", "conn = pymysql.connect(host=host, port=port, user=user, password=password, database=db)\n", "cursor = conn.cursor()\n", "cursor.execute(\"select sn, imei, add_time from app_device\")\n", "res = cursor.fetchall()\n", "df_sn = pd.DataFrame(res, columns=['sn', 'imei', 'add_time'])\n", "df_sn = df_sn.reset_index(drop=True)\n", "conn.close();\n", "\n", "window = 50\n", "step = 10\n", "window2 = 5\n", "step2 = 3\n", "volt_column = ['单体电压1', '单体电压2',\n", " '单体电压3', '单体电压4','单体电压5', '单体电压6','单体电压7', '单体电压8','单体电压9', '单体电压10', '单体电压11', '单体电压12',\n", " '单体电压13', '单体电压14','单体电压15', '单体电压16','单体电压17', '单体电压18','单体电压19', '单体电压20']\n", "columns = ['时间戳', '单体电压1', '单体电压2','单体电压3', '单体电压4','单体电压5', '单体电压6','单体电压7', '单体电压8','单体电压9', '单体电压10', '单体电压11', '单体电压12',\n", "'单体电压13', '单体电压14','单体电压15', '单体电压16','单体电压17', '单体电压18','单体电压19', '单体电压20']\n", "dbManager = DBManager.DBManager()\n", "\n", "all_result = pd.DataFrame(columns=['sn', 'suptype', 'type', 'num', 'alarm_time'])\n", "sns = ['MGMCLN750N215N155', 'MGMCLN750N215I004', 'MGMCLN750N215I027', 'MGMCLN750N215I033', 'MGMCLN750N215I065', 'MGMCLN750N215N096',\n", "'MGMCLN750N215N268' ]\n", "fig = plt.figure(figsize=(20,10))\n", "ax1 = fig.add_subplot(2,1,1)\n", "ax2 = fig.add_subplot(2,1,2)\n", "st = '2021-10-24 00:00:00'\n", "et = '2021-10-31 00:00:00'\n", "for sn in sns:\n", "\n", " df_data = dbManager.get_data(sn=sn, start_time=st, end_time=et, data_groups=['bms'])\n", " # \n", " df_bms = df_data['bms']\n", "\n", " df_ori = df_bms[columns]\n", " df_ori.rename(columns = {'时间戳':'time'}, inplace=True)\n", " df = df_ori.drop_duplicates(subset=['time']) # 删除时间相同的数据\n", " df = df.reset_index(drop=True)\n", " df_result_1,time_list_1 = sta.cal_voltdiff_uniform(df,volt_column, window=window, step=step, window2=window2, step2=step2)\n", " df_result_2,time_list_2 = sta.cal_volt_uniform(df,volt_column, window=window, step=step)\n", "\n", " df_result_1['time'] = time_list_1\n", " df_result_2['time'] = time_list_2\n", " # second_list = [((pd.to_datetime(x)-pd.to_datetime(time_list[0])).total_seconds()) for x in time_list] # 距离第一个点的分钟数\n", "\n", " \n", "\n", " length = len(df_result_2)\n", " for column in volt_column:\n", " # plt.plot([x for x in range(0, length)], df_result[column][0:length], label=column)\n", " ax1.scatter(time_list_2[:], df_result_2[column][:length], label=column)\n", "\n", " ax1.legend()\n", " ax1.set_title('{} 电压离群结果图'.format(sn))\n", " tick_spacing = int(len(time_list_2) /20) #通过修改tick_spacing的值可以修改x轴的密度\n", " ax1.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing ))\n", " for tick in ax1.get_xticklabels():\n", " \n", " tick.set_rotation(90)\n", "\n", " length = len(df_result_1)\n", " for column in volt_column:\n", " # plt.plot([x for x in range(0, length)], df_result[column][0:length], label=column)\n", " ax2.scatter(time_list_1[:], df_result_1[column][:length], label=column)\n", "\n", " ax2.legend()\n", " ax2.set_title('{} 电压变化量离群结果图'.format(sn))\n", " tick_spacing = int(len(time_list_1) /20) #通过修改tick_spacing的值可以修改x轴的密度\n", " ax2.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing ))\n", " for tick in ax2.get_xticklabels():\n", " \n", " tick.set_rotation(90)\n", " plt.tight_layout()\n", " plt.savefig('./result/filter2/{}.jpg'.format(sn), bbox_inches='tight')\n", " ax1.clear()\n", " ax2.clear()\n", "\n", " \n", "\n", " # 报警\n", " # df_result_1['time'] = time_list_1\n", " # alarm_result = sta.alarm(df_result_1, volt_column, alarm_window=20, alarm_ratio=0.9, alarm_threshold=3.5)\n", " # alarm_result['sn'] = [sn] * len(alarm_result)\n", " # alarm_result['suptype'] = ['电压变化量离群'] * len(alarm_result)\n", " # all_result = pd.concat([all_result, alarm_result])\n", "\n", " # df_result_2['time'] = time_list_2\n", " # alarm_result = sta.alarm(df_result_2, volt_column, alarm_window=20, alarm_ratio=0.9, alarm_threshold=3.5)\n", " # alarm_result['sn'] = [sn] * len(alarm_result)\n", " # alarm_result['suptype'] = ['电压离群'] * len(alarm_result)\n", "\n", " # 记录偏差超过3的电芯编号\n", " # df_all_result = sta.instorage(sn, df_result_1, df_result_2)\n", " \n", " # all_result = pd.concat([all_result, alarm_result])\n", " # all_result.to_csv('./result_volt.csv')\n", " " ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "df_volt_out = df[df['type']=='电压变化量离群'][['time','cellnum','value']]" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(20,6))\n", "ax = fig.add_subplot(1,1,1)\n", "cellnums = sorted(set(df_volt_out['cellnum'].tolist()))\n", "for cellnum in cellnums:\n", " df_f = df_volt_out[df_volt_out['cellnum']==cellnum]\n", " ax.scatter(df_f['time'], df_f['value'], label=cellnum)\n", "ax.legend()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df_f.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "interpreter": { "hash": "b3ba2566441a7c06988d0923437866b63cedc61552a5af99d1f4fb67d367b25f" }, "kernelspec": { "display_name": "Python 3.8.8 64-bit ('base': conda)", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }