python数据分析:知乎数据清洗整理和结论研究

人生苦短,我用Python

话不多说,先看看数据。

import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
os.chdir('C:/Users/花伦同学/Desktop/test/03/')#设置默认路径
data = pd.read_csv('知乎数据_201701utf8_2.csv',engine='python')#读取原始数据
data.head(10)#查看前10条数据
预览原数据

可以看到数据列表中,在“回答”、“提问”、“职业”等列中有NaN的空值,按照列的数据类型进行数据清洗,将空值替换为‘0’或者‘缺失数据’
创建数据清洗函数。

def data_cleaning(df):
    cols = df.columns
    for col in cols:
        if df[col].dtype ==  'object':
            df[col].fillna('缺失数据', inplace = True)
        else:
            df[col].fillna(0, inplace = True)
    return(df)
# 该函数可以将任意数据内空值替换
# 列为文字则返回‘缺失数据’否则列为数字返回‘0’

这个函数我们后面的文字中也会用到,适用面很广。

data0 = data_cleaning(data)
data0.head(10)

清洗后数据

数据清洗完成后,就可以进行数据分析了,这次主要从两个维度进行分析:
1.知友的全国分布情况。(主要是知友数量和知友的密度)
2.各个高校知友的关注和被关注情况。

第一个纬度分析。
data_city_num = data0.groupby('居住地').count()#按地域分组
data_city_num['知友数量'] = data_city_num["_id"]#得到知友各城市的数量
data_pop = pd.read_csv('六普常住人口数.csv', engine = 'python')#读取人口数据
#print(data_city_num.head(10))
data_pop['城市'] = data_pop['地区'].str[:-1]#建立新标签,去掉"市"
data_md = pd.merge(data_city_num, data_pop, left_index = True, right_on = '城市', how = 'inner')[['知友数量','城市','常住人口']]
#合并列表,为了下一步计算密度
data_md['知友密度'] = data_md['知友数量']/data_md['常住人口']#计算密度
#data_md.head(10)

为了方便比对,数量和密度之间的相对情况,这里创建一个标准化的函数对数据进行标准化。

def standard(df,*cols):
    colnames = []
    for col in cols:
        colname = col + '_std'
        df[colname] = (df[col] - df[col].min())/(df[col].max()-df[col].min())*100
        colnames.append(colname)
    return(df,colnames)
#标准化数据,返回dataframe和列名,返回类型为元祖

data_md_std = standard(data_md,'知友密度','知友数量')[0]#获取返回的dataframe
data_colnames = standard(data_md,'知友密度','知友数量')[1]#获取返回的列名
data_md_std.head()
#data_colnames
data_top20_md = data_md_std.sort_values('知友密度_std',ascending = False)[['城市','知友密度_std']].iloc[:20]
data_top20_sl = data_md_std.sort_values('知友数量_std',ascending = False)[['城市','知友数量_std']].iloc[:20]
#提取数量和密度的前20行数据,及top20
#print(data_top20_sl,data_top20_md)

然后制作图表,更直观的查看数据。

fig1 = plt.figure(num=1,figsize=(12,4))
y1 = data_top20_sl['知友数量_std']
plt.bar(range(20),
       y1,
       width = 1,
       facecolor = 'yellowgreen',
       edgecolor = 'k',
       tick_label = data_top20_sl['城市'])
plt.title('知友数量TOP20\n')
plt.grid(True, linestyle = '--', color = 'grey', axis = 'y')
for i, j in zip(range(20),y1):
    plt.text(i-0.5,2,'%.1f' %j, color = 'k', fontsize = 12)#用循环给图加标注

fig2 = plt.figure(num=2,figsize = (12,4))
y2 = data_top20_md['知友密度_std']
plt.bar(range(20),
       y2,
       width = 1,
       facecolor = 'lightblue',
       edgecolor = 'k',
       tick_label = data_top20_md['城市'])
plt.title('知友密度TOP20\n')
for i, j in zip(range(20),y2):
    plt.text(i-0.5,2,'%.1f' %j, color = 'k',fontsize = 12)#用循环给图加标注
知友数量TOP20

知友密度TOP20
第二个纬度分析

根据关注者和被关注的情况进行分组

data_gz = data0.groupby('教育经历').sum()[['关注','关注者']]
#data_gz.head(20)
data_top20_fans = data_gz.sort_values('关注者',ascending = False).drop(['缺失数据','医学','我的老師,是山川和大地','重庆第一工程尸培养基地',
                                                                     '五道口男子职业技术学院','为往圣继绝学','本科'])[:20]
#查看数据后发现教育经历有很多乱填的,这里要把这些信息去掉(┑( ̄Д  ̄)┍)
data_top20_fans
关注人数高校top20

然后做数据的可视化,结果就一目了然了。

plt.figure(figsize = (16,10))
x = data_top20_fans['关注']
y = data_top20_fans['关注者']
x_mean = data_top20_fans['关注'].mean()
y_mean = data_top20_fans['关注者'].mean()
plt.scatter(x,y,marker='.',
           s = y/1000,
           cmap = 'Blues',
           c = x,
           label = '学校')
plt.axvline(x_mean,label="平均关注人数:%i人" % x_mean,color='r',linestyle="--",alpha=0.8)  # 添加x轴参考线
plt.axhline(y_mean,label="平均粉丝数:%i人" % y_mean,color='g',linestyle="--",alpha=0.8)   # 添加y轴参考线
plt.legend(loc = 'upper left')
plt.grid()

for i,j,k in zip(x,y,data_top20_fans.index):
    plt.text(i+500,j+500,k)
关注人数高校top20

我们可以清楚的看到浙江大学在关注人数和被关注人数都是遥遥领先,其次是北京大学。北京电影学院的粉丝数量较多但关注的人数较少...

这里还介绍一种数据可视化的方法bokeh,大家可以参考这个代码试试。

from bokeh.plotting import figure, show, output_file
from bokeh.models import ColumnDataSource
from bokeh.models import HoverTool
df2 = data_top20_fans.copy()
df2.columns = ['gz','gzz']
df2.index.name = 'xx'
df2['size'] = df2['gzz'] / 20000
source = ColumnDataSource(df2)
hover = HoverTool(tooltips = [
                              ('学校','@xx'),
                              ('关注人数','@gz'),
                              ('被关注人数','@gzz')
                              ])
p = figure(plot_width = 800,plot_height = 600,title = 'top20',tools=[hover,'box_select,reset,wheel_zoom,pan,crosshair'])
p.circle(x = 'gz',y = 'gzz',source = source,size = 'size',fill_color = 'blue',fill_alpha = 0.6)
show(p)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容