做的网站怎样评估价值电子商务方案设计案例
一. 检测重复值
1.1 检测
data =pd.read_csv("./teacher/订单数据.csv")检测行与行之前是否有重复值
data.drop_duplicates()检测 列是否有重复值出现, keep = first 从前往后判定 , last是从后往前判定data.drop_duplicates(subset=["产品类别","省份"],keep="last") 
1.2 删除重复值 drop_duplicates
data.drop_duplicates(subset = ["产品类别","省份"],keep="first") 
二. 时间分组
2.1 时间修饰器
数据类型必须是 datetime64[ns]可以获取年份
data.日期.dt.year获取周几 但是默认周日 是 0 ,用replace 将 0 换成 7
data.日期.dt.weekday.replace({0:7}) 
2.2 将 data 表 的日期 按照 年进行分组
data.groupby(by=[data.日期.dt.year]).agg({"金额":"sum"})用时间修饰器 将 日期 提取年份 
2.3 将 data 表 的日期 按照 年月 进行分组
- data.日期.dt.strftime("%Y-%m-01")  
- strftime 相当于python 中的 f“{}”
 
 
data.groupby(by=[data.日期.dt.strftime("%Y-%m-01")]).agg({"金额":"sum"}) 
2.4 下单的时段
- 0-4 : 午夜 5-7 : 凌晨 8-11: 早晨 12-14: 中午 15-18 : 下午 19-21 : 傍晚 22 - 23 : 深夜
 
定义时段
- map() (是对series 进行循环的)
 
def func(x):if x<5:return "午夜"elif x<8:return "凌晨"elif x<12:return "早晨"elif x<15:return "中午"elif x<19:return "下午"elif x<22:return "傍晚"else:return "深夜"data["时段"] = data.日期.dt.hour.map(func)data.日期.dt.hour 这里计算出 hour后, 返回到func中,再返回出 相应的时间 
2.5 下单时间距今差值
计算数据的最大的日期
way1
ds = data.groupby(by=["省份"]).日期.max()Timestamp('2016-07-28 20:12:12')因为ds = data.groupby(by=["省份"]).日期.max() 计算出来的数据类型是时间戳
所有想计算出 天数  需要用  np.timedelta64(1,"D")(datetime(2016,7,29) - ds)  / np.timedelta64(1,"D") 
三 .重采样(resamle)
- 要求日期时间类型的列 必须作为行索引
 
将 列 日期 转为 行索引
data.set_index(["日期"],inplace=True)data.resample("Y").agg({"金额":"sum"})
这样就会 按照年进行分组金额
日期	
2013-12-31	853625
2014-12-31	124443
2015-12-31	1228887
2016-12-31	377721 
四. 数据分箱 (只能对序列 类型分箱)
- 连续数据类型 : 数字
 - 离散数据类型 : 文字
 - 一般看的数据表达的含义 
- 连续 : 时间类型 可以进行 运算 ,也可以 进行正反推
 - 离散 : 当前 时间 范围有限,所以任务 时间 是离散型
 
 
数据的分箱 可以 把 连续数据类型 修改成 离散数据类型
- 时间 : 0~23 就是离散类型
 
4.1 pd.cut() 分箱操作
pd.cut(data.金额,bins=1000)
分箱操作  bins 是分箱的数量 
三种分箱操作
pd.cut(data.金额,bins=1000) #等分间隔
pd.cut(data.金额,bins=range(0,20001,5000))[(0, 5000] < (5000, 10000] < (10000, 15000] < (15000, 20000]pd.cut(data.金额,bins=[0,500,1500,5000,10000,20000],labels=list("ABCDE"))['A' < 'B' < 'C' < 'D' < 'E'] 
4.2 按照 百分位进行 分箱 , 就是 25% ,50% (pd.qcut)
pd.qcut(data.金额,q=4)  意思是 按照 4 分位进行计算 0.25
[(1.999, 15.75] < (15.75, 40.0] < (40.0, 175.0] < (175.0, 17890.0]]可以用
data.金额.quantile(0),data.金额.quantile(0.25),data.金额.quantile(0.5),data.金额.quantile(0.75),data.金额.quantile(1) 进行验证(2.0, 15.75, 40.0, 175.0, 17890.0) 
五. 字符修饰器
5.1 contains() 包含...
#包含自行车字样 
data.loc[data.产品子类别.str.contains("自行车")].groupby(by=["产品子类别"]).金额.sum() 
5.2 startswith() 以...开头
data.loc[data.产品子类别.str.startswith("自行车")].groupby(by=["产品子类别"]).金额.sum() 
5.3 endswith() 以... 结尾
data.loc[data.产品子类别.str.endswith("自行车")].groupby(by=["产品子类别"]).金额.sum() 
5.4 str.upper(). 大写 str.lower(). 小写 str.title(). 首字母大写 str.swapcase() 大小写转换
 data.产品名称.str.upper().str.lower().str.title().str.swapcase() 
5.5 字符串的分割 与 拼接 str.split(). str.join()
data.产品名称.str.split(" ").str.join("-")以空格分隔 ,再用 - 拼接 
5.6 指定出现的字符
data.产品名称.str.count("T") 
5.7 每个字符的长度
data.产品名称.str.len() 
5.8 编码和解码 encode 编码 decode 解码
data.产品子类别.str.encode("936").str.decode("GB2312") 
5.9 居中对齐 左对其 右对齐
data.产品子类别.str.center(15)  居中对齐
data.产品子类别.str.ljust(15)    左对齐
data.产品子类别.str.rjust(15)    右对齐 
6.0 字符长度固定 zfill 和 str.pad()
data.产品子类别.str.zfill(10)0       00000车胎和内胎
1       0000000骑行服
2       00000旅行自行车
3       00000山地自行车
4       00000车胎和内胎data.产品子类别.str.pad(10,side="left",fillchar="-") 左填充 -
0       -----车胎和内胎
1       -------骑行服
2       -----旅行自行车
3       -----山地自行车
 
6.1 数据类型的判断
s.str.isalpha()  #字母s.str.isnumeric()  #纯数字组成s.str.isdigit()   #数字s.str.istitle()  # 开头是大写 其他都小写 
六 . 时间序列
6.1 获取当前日期时间 datetime.now() .strftime() 就是类似format
#获取当前日期时间
datetime.now().strftime("%Y-%m-%d %H:%M:%S") 
6.2 时间戳 Timestamp
pd.Timestamp(1234567890,unit="s",tz="Asia/ShangHai")
unit是 时间单位 s是秒 m是月 ,tz是时区把一个序列中的字符 转换成  datetime64
pd.to_datetime([("2015-1-1")])
DatetimeIndex(['2015-01-01'], dtype='datetime64[ns]', freq=None)#Timestamp  
pd.Timestamp(datetime(2050,1,1))
Timestamp('2050-01-01 00:00:00')pd.Timestamp("2038-1-1 T23")  
#Timestamp('2038-01-01 23:00:00')
#T 是 time 时间
 
6.3 时间的相关计算
- Timedelta :代表 时间单位
 
Timedelta :代表 时间单位
pd.Timestamp(2234567890,unit="s") - np.timedelta64(1,"D")np.timedelta64(1,"D")  1 d for day 
- 一年当中第多少天
 
pd.Timestamp(2234567890,unit="s").dayofyear  #一年当中第多少天 
- 一年中的第多少周
 
pd.Timestamp(2234567890,unit="s").weekofyear #一年中的第多少周 
- 当前月份有多少天
 
pd.Timestamp("2020-2-2",unit="s").days_in_month 
七. 内置样式
给空值 高亮
df.style.highlight_null()df.style.highlight_between(subset=["A"],color="#ff10002f")df.style.background_gradient(cmap="rainbow")
梯度背景色格式
df.style.format({"A":"¥{:,.2f}"})"¥" 表示人民币符号。
{:,.2f} 是一个格式说明符,用于格式化浮点数,具体含义如下:
: 表示格式说明符的开始。
, 表示千位分隔符,用于在数字中插入逗号,提高可读性。
.2f 表示保留两位小数的浮点数日期
df1.style.format({"日期":"{:%Y年%m月%d}"})订单ID	日期
0	a01	2015年11月13
1	a02	2015年11月20
2	a03	2015年11月11
3	a04	2015年07月27
4	a05	2015年11月16df1.日期.dt.strftime("%Y年")
0    2015年
1    2015年
2    2015年
3    2015年
4    2015年
Name: 日期, dtype: object 
 
 
 
 
 
 
 
 
 
