一、导入数据包
#首先导入pandas、numpy、matplotlib等等包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
color = sns.color_palette()#调色盘,color=color[1]
#juypter要写
%matplotlib inline
#设置字体类型
import matplotlib
font={"family":"Microsoft YaHei"}
matplotlib.rc("font",family="Microsoft YaHei")
二、读取文件
#读取文件
titanic=pd.read_csv("titanic1.csv")
#查看表头
print(titanic.head())
#数据分别为乘客ID、生存、船舱等级、乘客名字、性别、年龄、兄弟姐妹、父母配偶、票号、票价、船舱、登舱口
#数据描述
print(titanic.describe())
#查看缺失值
print(titanic.isnull().any())
#年龄、船舱、登舱口有缺失
#描述信息
print(titanic.info())
#数据分布
print(titanic.shape)
三、数据处理-填补缺失值,删除无用列,数值转化
#1.删除
# 计算有多少重复值的值
titanic.duplicated().sum()
#去重
tb.drop_duplicates(inplace=True)
#删除Cabin列、Ticket列
#del titanic["Cabin"]
del titanic["Ticket"]
titanic.drop("Cabin",axis=1,inplace=True)
#删除空值的行
titanic= titanic.dropna(how="any",axis=0)
#2.填补
#用均值填补
titanic["Age"]=titanic["Age"].fillna(titanic["Age"].mean())
#登舱口用众数
#如果该列是字符串的,就将该列中出现次数最多的字符串赋予空值,mode()函数就是众数
titanic.Embarked[titanic.Embarked.isnull()] = titanic.Embarked.dropna().mode().values
#median()中位数
#3.转化
#将登舱口转化为数值型
titanic.loc[titanic["Embarked"]=="S","Embarked"]=1
titanic.loc[titanic["Embarked"]=="C","Embarked"]=2
titanic.loc[titanic["Embarked"]=="Q","Embarked"]=3
#将数值转化为字符串
def behavior_type(type):
if type == 1:
return "pv"
elif type == 2:
return "favor"
elif type == 3:
return "cart"
else:
return "buy"
tb["behavior_type"] = tb["behavior_type"].apply(behavior_type)
#时间格式转化
#2014-12-06 02 拆分为2014-12-06/02
tb["date"] = tb["time"].apply(lambda x:x.split(" ")[0])#日期
tb["time"] = tb["time"].apply(lambda x:x.split(" ")[1])#时间
#2014-09-19 转化格式, 并提取出年份、星期几, 月份
trade["day"]= pd.to_datetime(trade.day,format="%Y%m%d")
trade["year"]=trade.day.dt.year
trade["month"] = trade.day.dt.month#月份
trade["year_month"] = trade.day.dt.strftime("%Y-%m")
trade["week"] = trade.day.dt.dayofweek#周几#0为周一,6为周日
#2011-01-01 00:00:00 转化格式, 并提取出小时, 星期几, 月份
bike["datetime"] = pd.to_datetime(bike["datetime"])
bike["date"] = bike.datetime.dt.date
bike["year"]=bike.datetime.dt.year
bike["month"] = bike.datetime.dt.month#月份
bike["year_month"] = bike.datetime.dt.strftime("%Y-%m")
bike["week"] = bike.datetime.dt.dayofweek#周几#0为周一,6为周日
bike["hour"] = bike.datetime.dt.hour#时间
四、处理完成文件保存
四、处理完成文件保存
#1.保存为CSV格式
tb.to_csv("tb_user.csv",index = False)
五、数据统计计算
五、数据统计计算
#表关联[.merge(表1,表2,on=共同列,how=左连接)]
order_products_train= pd.merge(order_products_train,orders,on="order_id", how="left")
#计算
# 查看有多少个用户-去重计算
tb.drop_duplicates("user_id").count()
#查看列中不同值出现几次
a=tb["user_id"].value_counts()
#groupby 分组计算
#reset_index()重置索引
mcount=order_products_train[["department","count"]].groupby(["department"]).count().reset_index()
#定义列名/索引名
mcount.columns=["department","count"]
#.sort_values(by=根据什么排序,ascending=FALSE 逆序)
mcount=mcount.sort_values(by="count",ascending=False)
#数据透视表
w=bike.groupby(["week", "hour"])["count"].sum().reset_index()
when = w.pivot("week", "hour", "count")