Excel
1、maxifs()函數 maxifs函數返回一組給定條件或標准指定的單元格中的最大值。 maxifs(數據區域,條件區域,條件) 技巧: 選取某個分類中占比最大的值作為這個分類的唯一值。比如:選取sku編碼,單價占比最大的,作為sku編碼的唯一價格。 1、使用EXcel來解決:
- 首先數據清洗,計算sku編碼占比。只選擇某個店鋪某個月份的數據,並提取sku編碼,單價,將所有數據去重,使用countifs()函數計數,再計算占比,字段呈現:sku編碼,單價,個數,個數占比。
- 其次找出sku占比的最大值。提取sku編碼去重,使用maxifs()函數,找出最大的占比值,字段呈現:sku編碼,最大占比。
- 找出sku編碼占比最大的單價。字段:使用vlookup()函數,合並sku編碼&最大占比,查找單價,字段呈現:sku編碼,單價。
2、使用Python來解決
數據庫
1、取今日十一點這個時間,使用dateadd()函數
select DATEADD(hour,11,convert(varchar(100),GETDATE(),23)) as '時間'
Python
1、取某個字段中的某部分
以取商品名稱中【】裡面的內容為例,商品名稱的格式例如:成品台歷【A236-未來可期】
data1['商品名稱'].map(lambda x:re.findall("【(.*?)】",x)[0] if len(re.findall("【(.*?)】",x)) > 0 else '無')
data1['商品名稱'].map(lambda x :(x.split('【')[1]).split('】')[0] if len((x.split('【')[1]).split('】')) >0 else '無')
2、使用np.where()函數對字段判斷
np.where(condition,x,y)
滿足條件(condition),輸出x,不輸出滿足y。 有以下兩種寫法: 其一:
data1['商品分類'] =np.where(data1['商品最小分類'] =='環裝台歷' ,'定制台歷',np.where(data1['商品最小分類'] == '無環台歷','定制台歷',np.where(data1['商品最小分類'] == '商務台歷','定制台歷','成品台歷')))
其二:
data1['商品分類'] = np.where(data1['商品最小分類'].isin(['環裝台歷','無環台歷','商務台歷']) ,'定制台歷','成品台歷')
3、對數據中的某些行進行處理
data1.loc[data1['商品分類'] == '定制台歷','款式'] = '無'
4、根據兩列數據,對另外一列賦值
在修改郵件過程中遇到的最大問題:是對於款式的定義 最終實現的代碼為(注意:寫自定義的函數用來判斷值就可以了):
def style(x,y): if x =='成品台歷': if len(re.findall("【(.*?)】",y)[0]) >0: return re.findall("【(.*?)】",y)[0] else: return '無' else: return '無'data1['款式'] = data1.apply(lambda x:style(x.商品分類,x.商品名稱),axis=1)
5、將各數據源合並在一起(縱向)
Data_y = pd.concat([Data1, Data3]) # 將各來源的數據合並在一起
6、將幾個DataFrame橫向拼接
data_re = data_zy.join(data_dy).join(data_['name']) # 將幾個DataFrame橫向拼接
7、構建空的DataFrame
data2 = pd.DataFrame(columns = [['name','導演','主演']]) # 定義一個空的DataFrame,並定義列名
8、重命名列名
df.columns = ['name','導演','主演']
9、不輸出,警告信息
import warningswarnings.filterwarnings('ignore')
10、四分位數
q1 = data[col].quantile(q = 0.25) # 下四分位數q3 = data[col].quantile(q = 0.75) # 上四分位數q = q3 - q1 #四分位差
11、header = 0
header = 0 表示,第一行數據,而不是文件的第一行。
12、箱線圖構成
箱線圖是由5部分組成,分別是最小值、中位數、最大值和兩個四分位數。第一個”四分位數Q1“:又稱下四分位數,等於該樣本中所有數值由小到大排列後第25%的數字。中位數F:又稱第二四分位數(Q2),又稱“中位數”,等於該樣本中所有數值由小到大排列後第50%的數字。第三四分位數:又稱“上四分位數”,等於該樣本中所有數值由小到大排列後第75%的數字。
13、bokeh的官方參考網站Configuring plot tools — Bokeh 2.4.3 Documentation
#圖表的畫法p = figure(plot_width = 600,plot_height = 400)p.circle(df.index,df['A'],color = 'green',size = 10,alpha = 0.5)#### 框線p.outline_line_width = 7 #邊框線寬p.outline_line_alpha = 0.3 #邊框透明度p.outline_line_color = 'navy' #邊框線顏色# 繪圖背景p.background_fill_color = 'yellow' # 繪圖背景顏色p.background_fill_alpha = 0.5 # 繪圖背景透明度#外邊界設置p.border_fill_color = "red" # 外邊界背景p.min_border_left = 80 # 外邊界背景 -----左邊寬度p.min_border_right= 80 # 外邊界背景 -----右邊寬度p.min_border_top = 10 # 外邊界背景 -----上寬度p.min_border_bottom = 10 # 外邊界背景 -----下寬度#軸線的設置# 設置X軸線:標簽,線寬,軸線顏色p.xaxis.axis_label ='Temp'p.xaxis.axis_label_text_font_style ="FangSong" #設置字體p.xaxis.axis_label_standoff = 30 # 設置偏移距離p.xaxis.axis_line_width = 3p.xaxis.axis_line_color = "red"# 設置y軸線:標簽,字體顏色,字體角度p.yaxis.axis_label ='PPPP'p.yaxis.major_label_text_color = "red"p.yaxis.major_label_orientation = "vertical"p.axis.minor_tick_in = 5 # 刻度往繪圖區域內延伸長度p.axis.minor_tick_out = 3 # 刻度往繪圖區域外延伸長度p.xaxis.bounds =(2,4) #設置軸線范圍####格網設置p.xgrid.grid_line_color =None # 顏色設置,None時則不顯示p.ygrid.grid_line_alpha = 0.8 # 設置透明度p.ygrid.grid_line_dash = [6,4] # dash--->通過設置間隔來做虛線#設置次軸線 minor_linep.xgrid.minor_grid_line_color = 'navy'p.xgrid.minor_grid_line_alpha = 0.5 ####格網顏色填充p.ygrid.band_fill_alpha = 0.1p.ygrid.band_fill_color = 'navy'shw(p)p = figure(plot_width = 600,plot_height = 400)#圖例設置x = np.linspace(0,4*np.pi,100)y = sin(x)
14、bokeh輔助矩形:
# 輔助標注 - 矩形from bokeh.models.annotations import BoxAnnotation# 導入BoxAnnotation模塊center = BoxAnnotation(top=0.6, bottom=-0.3, left=7, right=12, # 設置矩形四邊位置 fill_alpha=0.1, fill_color='navy' # 設置透明度、顏色 )p.add_layout(center)# 繪制輔助矩形show(p)
15、轉字典格式:
exports = {'fruits' : fruits, '2015' : [2, 1, 4, 3, 2, 4], '2016' : [5, 3, 4, 2, 4, 6], '2017' : [3, 2, 4, 4, 5, 3]}