python數(shù)據(jù)分析:知乎數(shù)據(jù)清洗整理和結(jié)論研究

人生苦短吁讨,我用Python

話不多說髓迎,先看看數(shù)據(jù)。

import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
os.chdir('C:/Users/花倫同學(xué)/Desktop/test/03/')#設(shè)置默認(rèn)路徑
data = pd.read_csv('知乎數(shù)據(jù)_201701utf8_2.csv',engine='python')#讀取原始數(shù)據(jù)
data.head(10)#查看前10條數(shù)據(jù)
預(yù)覽原數(shù)據(jù)

可以看到數(shù)據(jù)列表中建丧,在“回答”排龄、“提問”、“職業(yè)”等列中有NaN的空值翎朱,按照列的數(shù)據(jù)類型進(jìn)行數(shù)據(jù)清洗橄维,將空值替換為‘0’或者‘缺失數(shù)據(jù)’
創(chuàng)建數(shù)據(jù)清洗函數(shù)。

def data_cleaning(df):
    cols = df.columns
    for col in cols:
        if df[col].dtype ==  'object':
            df[col].fillna('缺失數(shù)據(jù)', inplace = True)
        else:
            df[col].fillna(0, inplace = True)
    return(df)
# 該函數(shù)可以將任意數(shù)據(jù)內(nèi)空值替換
# 列為文字則返回‘缺失數(shù)據(jù)’否則列為數(shù)字返回‘0’

這個函數(shù)我們后面的文字中也會用到拴曲,適用面很廣争舞。

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

清洗后數(shù)據(jù)

數(shù)據(jù)清洗完成后,就可以進(jìn)行數(shù)據(jù)分析了疗韵,這次主要從兩個維度進(jìn)行分析:
1.知友的全國分布情況兑障。(主要是知友數(shù)量和知友的密度)
2.各個高校知友的關(guān)注和被關(guān)注情況。

第一個緯度分析蕉汪。
data_city_num = data0.groupby('居住地').count()#按地域分組
data_city_num['知友數(shù)量'] = data_city_num["_id"]#得到知友各城市的數(shù)量
data_pop = pd.read_csv('六普常住人口數(shù).csv', engine = 'python')#讀取人口數(shù)據(jù)
#print(data_city_num.head(10))
data_pop['城市'] = data_pop['地區(qū)'].str[:-1]#建立新標(biāo)簽流译,去掉"市"
data_md = pd.merge(data_city_num, data_pop, left_index = True, right_on = '城市', how = 'inner')[['知友數(shù)量','城市','常住人口']]
#合并列表,為了下一步計算密度
data_md['知友密度'] = data_md['知友數(shù)量']/data_md['常住人口']#計算密度
#data_md.head(10)

為了方便比對者疤,數(shù)量和密度之間的相對情況福澡,這里創(chuàng)建一個標(biāo)準(zhǔn)化的函數(shù)對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化。

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)
#標(biāo)準(zhǔn)化數(shù)據(jù)驹马,返回dataframe和列名革砸,返回類型為元祖

data_md_std = standard(data_md,'知友密度','知友數(shù)量')[0]#獲取返回的dataframe
data_colnames = standard(data_md,'知友密度','知友數(shù)量')[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('知友數(shù)量_std',ascending = False)[['城市','知友數(shù)量_std']].iloc[:20]
#提取數(shù)量和密度的前20行數(shù)據(jù),及top20
#print(data_top20_sl,data_top20_md)

然后制作圖表糯累,更直觀的查看數(shù)據(jù)算利。

fig1 = plt.figure(num=1,figsize=(12,4))
y1 = data_top20_sl['知友數(shù)量_std']
plt.bar(range(20),
       y1,
       width = 1,
       facecolor = 'yellowgreen',
       edgecolor = 'k',
       tick_label = data_top20_sl['城市'])
plt.title('知友數(shù)量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)#用循環(huán)給圖加標(biāo)注

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)#用循環(huán)給圖加標(biāo)注
知友數(shù)量TOP20

知友密度TOP20
第二個緯度分析

根據(jù)關(guān)注者和被關(guān)注的情況進(jìn)行分組

data_gz = data0.groupby('教育經(jīng)歷').sum()[['關(guān)注','關(guān)注者']]
#data_gz.head(20)
data_top20_fans = data_gz.sort_values('關(guān)注者',ascending = False).drop(['缺失數(shù)據(jù)','醫(yī)學(xué)','我的老師,是山川和大地','重慶第一工程尸培養(yǎng)基地',
                                                                     '五道口男子職業(yè)技術(shù)學(xué)院','為往圣繼絕學(xué)','本科'])[:20]
#查看數(shù)據(jù)后發(fā)現(xiàn)教育經(jīng)歷有很多亂填的泳姐,這里要把這些信息去掉(┑( ̄Д  ̄)┍)
data_top20_fans
關(guān)注人數(shù)高校top20

然后做數(shù)據(jù)的可視化效拭,結(jié)果就一目了然了。

plt.figure(figsize = (16,10))
x = data_top20_fans['關(guān)注']
y = data_top20_fans['關(guān)注者']
x_mean = data_top20_fans['關(guān)注'].mean()
y_mean = data_top20_fans['關(guān)注者'].mean()
plt.scatter(x,y,marker='.',
           s = y/1000,
           cmap = 'Blues',
           c = x,
           label = '學(xué)校')
plt.axvline(x_mean,label="平均關(guān)注人數(shù):%i人" % x_mean,color='r',linestyle="--",alpha=0.8)  # 添加x軸參考線
plt.axhline(y_mean,label="平均粉絲數(shù):%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)
關(guān)注人數(shù)高校top20

我們可以清楚的看到浙江大學(xué)在關(guān)注人數(shù)和被關(guān)注人數(shù)都是遙遙領(lǐng)先,其次是北京大學(xué)缎患。北京電影學(xué)院的粉絲數(shù)量較多但關(guān)注的人數(shù)較少...

這里還介紹一種數(shù)據(jù)可視化的方法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 = [
                              ('學(xué)校','@xx'),
                              ('關(guān)注人數(shù)','@gz'),
                              ('被關(guān)注人數(shù)','@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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挤渔,一起剝皮案震驚了整個濱河市肮街,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌判导,老刑警劉巖嫉父,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異眼刃,居然都是意外死亡熔号,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門鸟整,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朦蕴,你說我怎么就攤上這事篮条。” “怎么了吩抓?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵涉茧,是天一觀的道長。 經(jīng)常有香客問我疹娶,道長伴栓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任雨饺,我火速辦了婚禮钳垮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘额港。我一直安慰自己饺窿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布移斩。 她就那樣靜靜地躺著肚医,像睡著了一般。 火紅的嫁衣襯著肌膚如雪向瓷。 梳的紋絲不亂的頭發(fā)上肠套,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機(jī)與錄音猖任,去河邊找鬼你稚。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的入宦。 我是一名探鬼主播哺徊,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乾闰!你這毒婦竟也來了落追?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涯肩,失蹤者是張志新(化名)和其女友劉穎轿钠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體病苗,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疗垛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了硫朦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贷腕。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖咬展,靈堂內(nèi)的尸體忽然破棺而出泽裳,到底是詐尸還是另有隱情,我是刑警寧澤破婆,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布涮总,位于F島的核電站,受9級特大地震影響祷舀,放射性物質(zhì)發(fā)生泄漏瀑梗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一裳扯、第九天 我趴在偏房一處隱蔽的房頂上張望抛丽。 院中可真熱鬧,春花似錦饰豺、人聲如沸铺纽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狡门。三九已至,卻和暖如春锅很,著一層夾襖步出監(jiān)牢的瞬間其馏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工爆安, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叛复,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像褐奥,于是被迫代替她去往敵國和親咖耘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容