本文主要经过pandas,NumPy来对大数据进行处理,使用matplotlib来进行信息的图形化显示。python
数据获得手,咱们就须要对咱们爬取的数据进行清洗工做,为以后的数据分析作铺垫,若是清洗的不到位势必会对以后的数据分析形成影响。
下文将从数据格式统1、空值处理、数据去重等方面来介绍。算法
数据样式数据库
该文件以`csv`的格式存储,存放在个人电脑(`r"C:Users22392DesktopenName.csv"`) 中其中的数据以`@`符号做为分隔符,仅只有`search`操做/`query`操做之中能够找到名字 `search`操做中式用户搜索的英文名字,`query`操做中则是用户想要找到对英文名字的中文名字 (在此假定为该用户的中文名字)。
1 .经过pd.read_csv("路径")
,来读取csv
文件,获得pandas.core.frame.DataFrame
对象
2 .将获得的data对象转化为数组,而且遍历数组
3 .经过split("@")
方法对数组中的每一条字符串数据进行遍历分割
4 .将数据分类,分别存放于二维列表query_lst
和search_lst
中
5 .把列表信息分别设置列索引,并转化为DataFrame
对象(search_data
和query_data
)
6 .search_data
存放中文名字,query_data
存放英文名字数组
import pandas as pd import numpy as np from pandas import DataFrame data = pd.read_csv(r"C:Users22392DesktopenName.csv",sep="@ ",encoding='utf-8', engine='python') dataset = np.asarray(data) lst=[] query_lst=[] search_lst=[] query_search_lst=[] for x in dataset: lst = str(x).split("@") if lst[0]=="['query": lst[0]='query' lst[-1]=lst[-1][0:-2] query_lst.append(lst) query_search_lst.append(lst) elif lst[0]=="['search": lst[0]='search' lst[-1] = lst[-1][0:-2] search_lst.append(lst) query_search_lst.append(lst) search_columns = ["operate","user",'name','路径',"描述","state","时间"] search_data = DataFrame(search_lst,columns =search_columns) query_columns =["operate","user","name","sex","条件1","条件2","条件3","条件4","条件5","条件6","时间"] query_data = DataFrame(query_lst,columns=query_columns) query_data = query_data.loc[:, ["operate","user","name","sex"]]
search["operate","user",'name',"state"]
search_data
中name
为空的行['user','name']
彻底相同的行,只保留一个查询得到的:query_data["operate","user","name","sex"]
1.去掉['user','name']
彻底相同的行,只保留一个
2 .去掉query
中name
为空的行
3 .去掉user
重复的行,只保留第一个,确保一个用户,一个姓名app
#去掉'user','name'相同的行,且name不为空 search=search_data[search_data["name"] != ""].drop_duplicates(subset=['user','name'],keep='first',inplace=False) search=search.loc[: ,["operate","user","name","state"]] q_data=query_data.drop_duplicates(subset=['user','name'],keep='first',inplace=False) #将用户的名字保存在列表中 name=(q_data[q_data["name"]!=""].drop_duplicates(subset=['user'],keep='first',inplace=False)).name.tolist()
此处只列出对女生的算法分析:
1 选择sex
为female
,且name
不为空的user
信息存放在一个列表中f2_list
,遍历搜索信息;
2 因为search
中不包含性别信息,因此要经过user
是否存在于f2_list
中来进行判断,该用户是否为female
,而后将female
搜索的名字,保存在一个列表中;
3 经过dataframe
对象的value_counts()
方法获取top20数据。字体
#选出女生的用户 female=q_data[(q_data["sex"]=="female" )&(q_data["name"]!="") ] f1=female.drop_duplicates(subset=['user'],keep='first',inplace=False) f2_list=f1.user.tolist() #选出男生的用户 male = q_data[(q_data["sex"]=="male")&(q_data["name"]!="")] m1=male.drop_duplicates(subset=['user'],keep='first',inplace=False) m2_list=male.user.tolist() f3_list=[]#女生搜索的英文名字 m3_list=[]#男生搜索的英文名字 for x in range(0,len(search)): #当用户编号出如今存储女上的用户编号的列表中的时候 if search.iloc[x,1] in f2_list: #用户为女生 f3_list.append(search_data.iloc[x,2]) elif search.iloc[x,1] in m2_list: #用户为男生 m3_list.append(search.iloc[x,2]) #女生top20英文名数量统计 f4=DataFrame(f3_list).value_counts() print(f4[0:20]) #男生top20英文名统计 m4=DataFrame(m3_list).value_counts() print(m4[0:20])
获取数据以下
女生:大数据
男生:spa
女生名字中最多的汉字top20.net
#对女生用户信息进行处理 {筛选掉一个用户屡次输入姓名的,只保留第一个} #出如今女生名字中对多的20个汉字(除去姓式) f1=female.drop_duplicates(subset=['user'],keep='first',inplace=False) f2=f1.name.tolist() #存放姓 f3=[] #存放名 f4=[] book_names = ["赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤", "许", "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水", "窦", "章", "云", "苏", "潘", "葛", "奚", "范", "彭", "郎", "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "俞", "任", "袁", "柳", "酆", "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤", "滕", "殷", "罗", "毕", "郝", "邬", "安", "常", "乐", "于", "时", "傅", "皮", "卞", "齐", "康", "伍", "余", "元", "卜", "顾", "孟", "平", "黄", "和", "穆", "萧", "尹", "姚", "邵", "湛", "汪", "祁", "毛", "禹", "狄", "米", "贝", "明", "臧", "计", "伏", "成", "戴", "谈", "宋", "茅", "庞", "熊", "纪", "舒", "屈", "项", "祝", "董", "梁", "杜", "阮", "蓝", "闵", "席", "季", "麻", "强", "贾", "路", "娄", "危", "江", "童", "颜", "郭", "梅", "盛", "林", "刁", "钟", "徐", "邱", "骆", "高", "夏", "蔡", "田", "樊", "胡", "凌", "霍", "虞", "万", "支", "柯", "昝", "管", "卢", "莫", "经", "房", "裘", "缪", "干", "解", "应", "宗", "丁", "宣", "贲", "邓", "郁", "单", "杭", "洪", "包", "诸", "左", "石", "崔", "吉", "钮", "龚", "程", "嵇", "邢", "滑", "裴", "陆", "荣", "翁", "荀", "羊", "於", "惠", "甄", "曲", "家", "封", "芮", "羿", "储", "靳", "汲", "邴", "糜", "松", "井", "段", "富", "巫", "乌", "焦", "巴", "弓", "牧", "隗", "山", "谷", "车", "侯", "宓", "蓬", "全", "郗", "班", "仰", "秋", "仲", "伊", "宫", "宁", "仇", "栾", "暴", "甘", "钭", "厉", "戎", "祖", "武", "符", "刘", "景", "詹", "束", "龙", "叶", "幸", "司", "韶", "郜", "黎", "蓟", "薄", "印", "宿", "白", "怀", "蒲", "台", "丛", "鄂", "索", "咸", "籍", "赖", "卓", "蔺", "屠", "蒙", "池", "乔", "阴", "郁", "胥", "能", "苍", "双", "闻", "莘", "党", "翟", "谭", "贡", "劳", "逄", "姬", "申", "扶", "堵", "冉", "宰", "郦", "雍", "却", "璩", "桑", "桂", "濮", "牛", "寿", "通", "边", "扈", "燕", "冀", "郏", "浦", "尚", "农", "温", "别", "庄", "晏", "柴", "瞿", "阎", "充", "慕", "连", "茹", "习", "宦", "艾", "鱼", "容", "向", "古", "易", "慎", "戈", "廖", "庚", "终", "暨", "居", "衡", "步", "都", "耿", "满", "弘", "匡", "国", "文", "寇", "广", "禄", "阙", "东", "殴", "殳", "沃", "利", "蔚", "越", "夔", "隆", "师", "巩", "厍", "聂", "晁", "勾", "敖", "融", "冷", "訾", "辛", "阚", "那", "简", "饶", "空", "曾", "毋", "沙", "乜", "养", "鞠", "须", "丰", "巢", "关", "蒯", "相", "查", "后", "荆", "红", "游", "竺", "权逯", "盖益", "桓", "公", "万俟", "司马", "上官", "欧阳", "夏侯", "诸葛", "闻人", "东方", "赫连", "皇甫", "尉迟", "公羊", "澹台", "公冶", "宗政", "濮阳", "淳于", "单于", "太叔", "申屠", "公孙", "仲孙", "轩辕", "令狐", "钟离", "宇文", "长孙", "慕容", "鲜于", "闾丘", "司徒", "司空", "亓官", "司寇", "仉", "督", "子车", "颛孙", "端木", "巫马", "公西", "漆雕", "乐正", "壤驷", "公良", "拓跋", "夹谷", "宰父", "谷粱", "晋", "楚", "闫", "法", "汝", "鄢", "涂", "钦", "段干", "百里", "东郭", "南门", "呼延", "归海", "羊舌", "微生", "岳", "帅", "缑", "亢", "况", "郈", "有", "琴", "梁丘", "左丘", "东门", "西门", "商", "牟", "佘", "佴", "伯", "赏", "宫", "墨", "哈", "谯", "笪", "年", "爱", "阳", "佟", "第五", "言福"] for x in f2: if len(x)<2 or len(x)>4: f2.remove(x) elif x[0] in book_names and len(x)<4: f3.append(x[0]) for y in x[1:]: f4.append(y) elif x[:2] in book_names and len(x)>2: f3.append(x[:2]) for y in x[1:]: f4.append(y) else: f2.remove(x) #f31=DataFrame(f3).value_counts() #print(f31[0:20]) f41=DataFrame(f4).value_counts() #女生名字中最多的汉字top20 print(f41[0:20])
女生名字中最多的汉字top20
男生姓名中最多的汉字top203d
名字字数以及单姓和复姓人数
在name列表中,进行筛选,条件为
1 姓名字数在[2,4]
2 如果单姓,则姓名长度小于4
3 如果复姓,则姓名长度大于2
4 将名字字数信息,存放在字典之中
名字中子的个数:
#单姓人数 single_count = [] #复姓人数 double_count = [] d={"2":0,"3":0,"4":0} book_names = ["赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤", "许", "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水", "窦", "章", "云", "苏", "潘", "葛", "奚", "范", "彭", "郎", "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "俞", "任", "袁", "柳", "酆", "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤", "滕", "殷", "罗", "毕", "郝", "邬", "安", "常", "乐", "于", "时", "傅", "皮", "卞", "齐", "康", "伍", "余", "元", "卜", "顾", "孟", "平", "黄", "和", "穆", "萧", "尹", "姚", "邵", "湛", "汪", "祁", "毛", "禹", "狄", "米", "贝", "明", "臧", "计", "伏", "成", "戴", "谈", "宋", "茅", "庞", "熊", "纪", "舒", "屈", "项", "祝", "董", "梁", "杜", "阮", "蓝", "闵", "席", "季", "麻", "强", "贾", "路", "娄", "危", "江", "童", "颜", "郭", "梅", "盛", "林", "刁", "钟", "徐", "邱", "骆", "高", "夏", "蔡", "田", "樊", "胡", "凌", "霍", "虞", "万", "支", "柯", "昝", "管", "卢", "莫", "经", "房", "裘", "缪", "干", "解", "应", "宗", "丁", "宣", "贲", "邓", "郁", "单", "杭", "洪", "包", "诸", "左", "石", "崔", "吉", "钮", "龚", "程", "嵇", "邢", "滑", "裴", "陆", "荣", "翁", "荀", "羊", "於", "惠", "甄", "曲", "家", "封", "芮", "羿", "储", "靳", "汲", "邴", "糜", "松", "井", "段", "富", "巫", "乌", "焦", "巴", "弓", "牧", "隗", "山", "谷", "车", "侯", "宓", "蓬", "全", "郗", "班", "仰", "秋", "仲", "伊", "宫", "宁", "仇", "栾", "暴", "甘", "钭", "厉", "戎", "祖", "武", "符", "刘", "景", "詹", "束", "龙", "叶", "幸", "司", "韶", "郜", "黎", "蓟", "薄", "印", "宿", "白", "怀", "蒲", "台", "丛", "鄂", "索", "咸", "籍", "赖", "卓", "蔺", "屠", "蒙", "池", "乔", "阴", "郁", "胥", "能", "苍", "双", "闻", "莘", "党", "翟", "谭", "贡", "劳", "逄", "姬", "申", "扶", "堵", "冉", "宰", "郦", "雍", "却", "璩", "桑", "桂", "濮", "牛", "寿", "通", "边", "扈", "燕", "冀", "郏", "浦", "尚", "农", "温", "别", "庄", "晏", "柴", "瞿", "阎", "充", "慕", "连", "茹", "习", "宦", "艾", "鱼", "容", "向", "古", "易", "慎", "戈", "廖", "庚", "终", "暨", "居", "衡", "步", "都", "耿", "满", "弘", "匡", "国", "文", "寇", "广", "禄", "阙", "东", "殴", "殳", "沃", "利", "蔚", "越", "夔", "隆", "师", "巩", "厍", "聂", "晁", "勾", "敖", "融", "冷", "訾", "辛", "阚", "那", "简", "饶", "空", "曾", "毋", "沙", "乜", "养", "鞠", "须", "丰", "巢", "关", "蒯", "相", "查", "后", "荆", "红", "游", "竺", "权逯", "盖益", "桓", "公", "万俟", "司马", "上官", "欧阳", "夏侯", "诸葛", "闻人", "东方", "赫连", "皇甫", "尉迟", "公羊", "澹台", "公冶", "宗政", "濮阳", "淳于", "单于", "太叔", "申屠", "公孙", "仲孙", "轩辕", "令狐", "钟离", "宇文", "长孙", "慕容", "鲜于", "闾丘", "司徒", "司空", "亓官", "司寇", "仉", "督", "子车", "颛孙", "端木", "巫马", "公西", "漆雕", "乐正", "壤驷", "公良", "拓跋", "夹谷", "宰父", "谷粱", "晋", "楚", "闫", "法", "汝", "鄢", "涂", "钦", "段干", "百里", "东郭", "南门", "呼延", "归海", "羊舌", "微生", "岳", "帅", "缑", "亢", "况", "郈", "有", "琴", "梁丘", "左丘", "东门", "西门", "商", "牟", "佘", "佴", "伯", "赏", "宫", "墨", "哈", "谯", "笪", "年", "爱", "阳", "佟", "第五", "言福"] for x in name: if len(x)<2 or len(x)>4: name.remove(x) elif x[0] in book_names and len(x)<4:4 d[str(len(x))]+=1 single_count.append(x) elif x[:2] in book_names and len(x)>2: d[str(len(x))]+=1 double_count.append(x) else: name.remove(x)
利用series对象的plot(kind='bar')
方法,可实现柱状图的显示。
#女生top20 import matplotlib.pyplot as plt f4=DataFrame(f3_list).value_counts() (f4[0:20]).plot(kind='bar')
在jupyter中运行显示以下:
词云图
词云显示:
f5 =((DataFrame(f4).value_counts())[0:20]).index lst=[] for x in f5: lst.append(str(x)[2]) # # #生成词云 import matplotlib.pyplot as plt import wordcloud plt.rcParams['font.sans-serif']=['KaiTi'] plt.rcParams['axes.unicode_minus'] = False word_clean=" ".join(lst) wc = wordcloud.WordCloud(font_path='C:/Windows/Fonts/simkai.ttf',#指定字体类型 background_color = "white",#指定背景颜色 max_words = 20, # 词云显示的最大词数 max_font_size = 255#指定最大字号 ) #指定模板 wc = wc.generate(word_clean)##生成词云 plt.imshow(wc) plt.axis("off") plt.show()
绘制柱状图
import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 # 获取数据 names =lst nums = (DataFrame(f4).value_counts())[0:20].values print(names) print(nums) # 绘图 plt.figure(figsize=[10, 6]) plt.bar(names, nums, width=0.3, color='green') # 设置标题 plt.xlabel("字", fontproperties='SimHei', size=12) plt.ylabel("人数", fontproperties='SimHei', rotation=90, size=12) plt.title("女生姓名汉字top20", fontproperties='SimHei', size=16) plt.xticks(list(names), fontproperties='SimHei', rotation=-45, size=10) # 显示数字 for a, b in zip(list(names), list(nums)): plt.text(a, b, b, ha='center', va='bottom', size=6) plt.show()
#推荐的类似名,未在库中现 s1=search_data.loc[: ,["name","state"]] s2=s1[s1["state"]=="推荐的类似名"] s2.name.value_counts()