array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 数据分析——数据处理实例 - 爱码网
Tao-RY

前言:自己也是小白,主要用作练习和熟悉方法,其实里面很多处理方法还是花了心思去想的(可能还是不是特别简便,特别是膜拜的那个问题,欢迎指正),不涉及算法知识,仅锻炼自己的数据处理能力,数据集如有需要指明用处可共享,这里推荐一篇文章Python数据分析实战基础

数据分析专栏:

  1. 数据分析——python基础
  2. 数据分析——numpy
  3. 数据分析——pandas
  4. 数据分析——数据可视化
  5. 数据分析——数据处理实例

一、微博热点话题发现

数据介绍: Use of this dataset in publications must be acknowledged by referencing the following publication:
King-wa Fu, CH Chan, Michael Chau. Assessing Censorship on Microblogs in China: Discriminatory Keyword Analysis and Impact Evaluation of the ‘Real Name Registration’ Policy. IEEE Internet Computing. 2013; 17(3): 42-50. http://doi.ieeecomputersociety.org/10.1109/MIC.2013.28
在这里插入图片描述
我们的任务是提取热点话题,代码如下

# -*- coding: utf-8 -*-
"""
Created on Sat Oct 12 18:51:28 2019
@author: try
"""
 
import pandas as pd
import matplotlib.pyplot as plt
#import re
 
 
#读取数据
user_data=pd.read_table(r\'userdata.csv\',sep=\',\')
week_data=pd.read_table(r\'week1.csv\',sep=\',\',encoding=\'utf-8\',error_bad_lines=False)
V_count=user_data[\'verified\'].value_counts()#统计是否认证人数
plt.figure(1)
V_count.plot(kind=\'bar\')#画是否认证人数对比图
 
#统计发博和被转发次数
uid_count=week_data[\'uid\'].value_counts()
retweeted_uid_count=week_data[\'retweeted_uid\'].value_counts()
#mid_data=mid_count.loc[mid_count>10]
 
#用dataframe进行正则提取,提取话题
data_text=week_data[\'text\']
#str.extract用正则从字符数据中抽取匹配的数据,只返回第一个匹配的数据
out_text=data_text.str.extract(r\'#(.*?)#\',expand=True)
out_text1=out_text.dropna()#删除空行
out_text1=out_text1.reset_index(drop=True)#重新设置index
out_text1.columns=[\'text_R\']
out_text1.rename(columns={\'text_R\':\'text\'},inplace=True)
 
#对话题统计
out_text_count=out_text1[\'text\'].value_counts()#统计话题数目
out_text_count=out_text_count.loc[out_text_count>1000]
plt.figure(2)
out_text_count.plot(kind=\'bar\',width=0.8)
 
#转发次数分区间统计
t_data=week_data[\'retweeted_uid\'].value_counts()
Se_t=pd.Series(t_data)
#分区间统计
bin_t=range(0,3000,100)
count_t=pd.cut(Se_t,bin_t).value_counts()
plt.figure(3)
plt.title(\'被转发次数统计\')
count_t.plot(kind=\'bar\')

提取结果如下
​​在这里插入图片描述
在这里插入图片描述

二、膜拜单车数据分析

数据:2017年5月两周内,北京40余万辆摩拜单车被30余万摩拜用户的使用情况(该开源数据来源于2017年摩拜算法挑战赛)。数据包含300余万条出行记录数据,每条的数据包含了订单号(orderid )、用户编号(userid )、单车编号(bikeid)、单车类(biketype)、开始使用单车时间(starttime)、使用起点坐标(startloc)和使用终点坐标(endloc),其中起点和终点坐标经过了geohash加密(数据考虑到各方面原因,就不放出来了)
python代码如下

# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
 
import pandas as pd
import geohash
 
#读取
data=pd.read_csv(r\'mobike_train_data.csv\',sep=\',\')
 
#日期格式处理
data.starttime=data.starttime.astype(\'str\')
data.starttime=pd.to_datetime(data.starttime,format=\'%Y-%m-%d %H:%M:%S\')
data=data.dropna()#缺失值删除
 
#geohash解码
data["start_lat_lng"] = data["geohashed_start_loc"].apply(lambda s: geohash.decode(s))   
data["end_lat_lng"] = data["geohashed_end_loc"].apply(lambda s: geohash.decode(s))
 
 
#筛选14-24号的数据
data_14=data.loc[data.starttime<=\'2017-05-14 23:59:59\']
data_15=data.loc[(data.starttime<=\'2017-05-15 23:59:59\')&(data.starttime>\'2017-05-14 23:59:59\')]
data_16=data.loc[(data.starttime<=\'2017-05-16 23:59:59\')&(data.starttime>\'2017-05-15 23:59:59\')]
#data_17=data.loc[(data.starttime<=\'2017-05-17 23:59:59\')&(data.starttime>\'2017-05-16 23:59:59\')]
#17号数据是空的
data_18=data.loc[(data.starttime<=\'2017-05-18 23:59:59\')&(data.starttime>\'2017-05-17 23:59:59\')]
data_19=data.loc[(data.starttime<=\'2017-05-19 23:59:59\')&(data.starttime>\'2017-05-18 23:59:59\')]
data_20=data.loc[(data.starttime<=\'2017-05-20 23:59:59\')&(data.starttime>\'2017-05-19 23:59:59\')]
data_21=data.loc[(data.starttime<=\'2017-05-21 23:59:59\')&(data.starttime>\'2017-05-20 23:59:59\')]
data_22=data.loc[(data.starttime<=\'2017-05-22 23:59:59\')&(data.starttime>\'2017-05-21 23:59:59\')]
data_23=data.loc[(data.starttime<=\'2017-05-23 23:59:59\')&(data.starttime>\'2017-05-22 23:59:59\')]
data_24=data.loc[(data.starttime<=\'2017-05-24 23:59:59\')&(data.starttime>\'2017-05-23 23:59:59\')]
 
#统计14号数据
bike_count_14=data_14[\'bikeid\'].value_counts()
user_count_14=data_14[\'userid\'].value_counts()
 
#时间分区间统计
bin=pd.date_range(start=\'2017-05-14 00:00:00\',end=\'2017-05-15 00:00:00\',freq=\'0.5H\')
data_scattertime=pd.cut(data_14[\'starttime\'],bin)
scattertime_count=data_scattertime.value_counts(sort=False)
scattertime_count.plot(kind=\'line\')

14号的分时间段的订单量结果图
在这里插入图片描述

三、2017国赛数模B题数据处理

之所以选择这一题进行练习,是因为这一题涉及地图、经纬度相关模块和方法
代码如下

# -*- coding: utf-8 -*-
"""
Created on Fri Oct 18 20:17:00 2019
@author: 1
"""
 
import pandas as pd
import matplotlib.pyplot as plt
import smopy
 
#读取数据
df=pd.read_excel(\'附件一:已结束项目任务数据.xls\')
 
#地图上画出任务的坐标
hz=smopy.Map((22.45, 112.65, 23.9, 114.5),z=10)
#hz.show_ipython()
#其中需要输入的参数为(lat_min, lon_min, lat_max, lon_max),即区域的经纬度范围。z为缩放程度,如果不指定的话smopy会自动使用最大缩放程度。
x, y = hz.to_pixels(df[\'任务gps 纬度\'], df[\'任务gps经度\'])
ax = hz.show_mpl(figsize=(8, 6))
ax.plot(x, y, \'or\', ms=2)
 
 
#找定价高的地方
df_max=df.loc[df[\'任务标价\']>=70]
x1, y1 = hz.to_pixels(df_max[\'任务gps 纬度\'], df_max[\'任务gps经度\'])
ax.plot(x1,y1,\'ob\',ms=2)
 
#读取会员数据
df_vip=pd.read_table(\'附件二:会员信息数据.csv\',sep=\'\\s+\')
x2,y2=hz.to_pixels(df_vip[\'纬度\'],df_vip[\'纬度\'])
ax.plot(x2,y2,\'og\',ms=2)
plt.show()

处理结果
在这里插入图片描述

四、杭电宣讲会信息爬取

爬取内容: 宣讲单位,宣讲时间,所在学校,宣讲地点,单位简介等
项目需求

  1. 实现两层网页的信息爬取,并将爬取的信息进行整合保存到 excel 文件中。
    (1) 基础:爬取一个外层页中,所有内层页的信息
    (2) 进阶:爬取多个外层页中, 所有内层页的信息
  2. 每个题目中, 至少爬取上述给定爬取内容中的五项。
  3. 自学数据可视化方法,将爬取结果以曲线图、 柱状图等方式显示。
    代码如下
# -*- coding: utf-8 -*-
"""
Created on Sat Nov  2 20:29:39 2019

@author: 1
"""

import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
import pandas as pd
import json
import re

#http://career.hdu.edu.cn/module/getcareers?start_page=1&k=&panel_name=&type=inner&day=&count=15&start=1&_=1572698708166    第一页
#http://career.hdu.edu.cn/module/getcareers?start_page=1&k=&panel_name=&type=inner&day=&count=15&start=2&_=1572698708167    第二页
#http://career.hdu.edu.cn/module/getcareers?start_page=1&k=&panel_name=&type=inner&day=&count=15&start=3&_=1572698708168    第三页
#http://career.hdu.edu.cn/module/careers?menu_id=6438

#http://career.hdu.edu.cn/detail/career?id=career_talk_id 二级网页
# 发起请求
def start_requests(url):
    #print(url) # 查看在抓取哪个链接
    r = requests.get(url)
    return r.text

# 解析一级网页,获取career_talk_id列表
def get_id(text):
    #soup = BeautifulSoup(text, \'html.parser\')
    list_id=[]
    content=json.loads(text)
    for item in content[\'data\']:
        list_id.append(item[\'career_talk_id\'])
    return list_id#返回序列

# 解析二级网页,获取公司简介信息
def parse_page(text):
    mydict={}
    soup = BeautifulSoup(text, \'html.parser\')
    pattern=re.compile(r\'[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b\u4e00-\u9fa5\d+]\')
    #data_name=soup.find(\'h1\',class_="dm-text",style="font-weight:normal;").text.split(\'宣讲单位:\')[1]
    data_name=pattern.findall(soup.find(\'h1\',class_="dm-text",style="font-weight:normal;").text.split(\'宣讲单位:\')[1])
    data_company=pattern.findall(str(soup.select(\'#data_details > div.main > div > div:nth-child(2) > div.dm-cont\')))
    #div class="dm-cont" style="font-size:14px;line-height:22px;"
    data_time=soup.find_all(\'p\',class_="dm-text")[0].text.split(\'宣讲时间:\')[1]
    data_school=soup.find_all(\'p\',class_="dm-text")[1].text.split(\'所在学校:\')[1]
    data_place=soup.find_all(\'p\',class_="dm-text")[2].text.split(\'宣讲地点:\')[1]
    str_data=\'\'.join(data_company)
    str_name=\'\'.join(data_name)
    mydict[\'宣讲地点\']=data_place
    mydict[\'公司简介\']=str_data.replace(\'1422\',\'\')
    mydict[\'宣讲学校\']=data_school
    mydict[\'宣讲单位\']=str_name
    mydict[\'宣讲时间\']=data_time
    return mydict#返回字典

#数据整理
def get_result():
    for i in range(1572698708166, 1572698708168):
        url = \'http://career.hdu.edu.cn/module/getcareers?start_page=1&k=&panel_name=&type=inner&day=&count=15&start={}&_={}\'.format(i-1572698708165,i)
        text = start_requests(url)
        list_id= get_id(text) # 解析一级页面,获取二级页面的career_talk_id
        for career_id in list_id: # 解析二级页面 
            url_2=\'http://career.hdu.edu.cn/detail/career?id={}\'.format(career_id)
            page = start_requests(url_2)
            mydict= parse_page(page)#dict的信息
            result_list.append(mydict)
    return result_list#返回列表    

#运行,可视化+写入excel
if __name__ == \'__main__\':
    result_list=[]
    result_list=get_result()
    df=pd.DataFrame(result_list)
    df[\'宣讲时间\'].value_counts().plot(kind=\'bar\')
    df.to_excel(\'data.xlsx\')
 

最终得到data.xlsx和一个宣讲时间数量统计图(属实无聊,但是作业要做hhhhh):
在这里插入图片描述

五、宣讲会信息统计——groupby

现有数据如下格式:
在这里插入图片描述
我们需要根据日期统计日点击量,画出日点击量图
代码如下

# -*- coding: utf-8 -*-
"""
Created on Thu Nov  7 18:39:18 2019

@author: 1
"""

import pandas as pd
from matplotlib import pyplot as plt

df=pd.read_excel(\'test.xls\',header=None)
df.columns=[\'公司\',\'时间\',\'地点\',\'学校\',\'地点\',\'点击量\']
df[\'time\']=df[\'时间\'].str.extract(r\'(\d+年\d+月\d+日)\', expand=False)
df_new=df.iloc[:,[5,6]]
df_sum=df_new[\'点击量\'].groupby(df_new[\'time\']).sum()
plt.figure(1)
df_sum.plot(kind=\'bar\')
plt.xlabel(\'日期\')
plt.ylabel(\'点击量\')

df.groupby会生成GroupBy的对象,可以调用mean(), count(), sum()等方法产生一个Series,其中索引为‘id’中的唯一值,去除重复值。格式:df.groupby(df[‘含重复值的列’]).计算函数()

得出结果如下
在这里插入图片描述

分类:

技术点:

相关文章: