背景:运维每周会给到一份全国‘失联’快递柜的数据,作为分析人员。需要知道每台柜子的失联原因。
需要做的事:将这份快递柜的数据拆分成全国6个大区,对应的6个文件,在每个文件的最后新增一个字段,添加数据有效性,让运维同事选择原因,然后回收6份数据,将数据汇总合并,统计失联原因的分布。
第一步:数据拆分,将文件拆解成6份
初始数据结构,典型中国式报表,前两列数据合并,区域数据错误,需要调整替换,最后还需要增加一列包含数据验证的列,方便一线同事选择,也方便后续数据汇总。
import os
import pandas as pd
import numpy as np
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.worksheet.datavalidation import DataValidation
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.styles import Border,PatternFill,Font
import psycopg2
# 数据拆分
# 拆分生成新文件,设置数据有效性,设置表格样式,配置邮件发送
#---------------------------------------------------------------------------
#数据读取和清洗
file_path = r'C:\Users\james\Desktop\运维数据\11111111' #设置根目录
file_name = r'快递柜运力状态监控数据.xlsx' #设置excel文件名,一般为固定
#①连接数据库并获取维表数据及清洗
conn = psycopg2.connect(database="database",
user="root",
password="admin",
host="localhost",
port="443")
cursor = conn.cursor()
cursor.execute('select * from dim_city')
df_city = pd.DataFrame(cursor.fetchall())
df_city.columns = ['big_city_name','city_code','city_name','region']
#②读取excel数据表及清洗
path = file_path + '\\' + file_name
df = pd.read_excel(path)
df['城市'] = df['城市'].ffill() #对城市数据进行向下填充
df.dropna(subset=['失联状态'],inplace=True) #删除掉非失联状态的数据
#③两个数据合并,增加维度信息,以便后续