關(guān)于
學(xué)習(xí)日月光華老師的《Python數(shù)據(jù)分析從入門(mén)到機(jī)器學(xué)習(xí)》梢褐,通過(guò)寫(xiě)該文來(lái)鞏固數(shù)據(jù)分析中使用的知識(shí)點(diǎn)彻犁。
主要是針對(duì)鏈家的數(shù)據(jù)進(jìn)行各個(gè)不同方向的分析钉汗,本文是第一篇,針對(duì)數(shù)據(jù)中各個(gè)房源成交單價(jià)的分析阶冈。
準(zhǔn)備
工具 :Anaconda润绵、juyter notebook
類(lèi)庫(kù):numpy捌治、pandas岗钩、matplotlib
分析及代碼實(shí)現(xiàn)
想要進(jìn)行數(shù)據(jù)分析,首先肯定是要讀入整個(gè)的數(shù)據(jù)肖油,由于整個(gè)數(shù)據(jù)有有個(gè).csv文件,如下圖
data_list = []
for i in range(1, 8):
try:
data = pd.read_csv('C:\\Users\\nash.wan\\Desktop\\lianjia\\lianjia{}.csv'.format(i), encoding='gbk')
except:
data = pd.read_csv('C:\\Users\\nash.wan\\Desktop\\lianjia\\lianjia{}.csv'.format(i))
finally:
data_list.append(data)
由于有7個(gè)文件兼吓,通過(guò)一個(gè)循環(huán)來(lái)讀入,然后放到定義的data_list中去构韵,由于每個(gè)文件夾的編碼方式不一致周蹭,我們通過(guò)try...except...finally來(lái)實(shí)現(xiàn)讀取,代碼如上面疲恢。
? ? 涉及知識(shí)點(diǎn):pandas.read_csv()讀取csv文件的數(shù)據(jù)
把所有的數(shù)據(jù)放到list中后凶朗,下面就就行多表合并,取出list中的數(shù)據(jù)合并成一個(gè)DataFrame中去显拳,并且賦值給data如下:
data = pd.concat(data_list)
查看合并后的表格式棚愤,如下:
???concat多表合并
??? ? pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, ? ? levels=None, names=None, verify_integrity=False)
??? ? 1.objs: series,dataframe或者是panel構(gòu)成的序列l(wèi)sit
??? ? 2.axis: 需要合并鏈接的軸杂数,0是行宛畦,1是列
??? ? 3.join:連接的方式 inner,或者outer
然后取出cjdanjia一列的數(shù)據(jù)揍移,并且對(duì)其進(jìn)行數(shù)據(jù)清洗
dj = data.cjdanjia.dropna() #取出cjdanjia一列的數(shù)據(jù)次和,并且清洗掉數(shù)據(jù)中NaN值
dj = dj.map(lambda x: round(float(x.split('元')[0])/10000, 1)) #清洗掉單價(jià)后面的元/平,得到以萬(wàn)元為單位的float類(lèi)型的Series
dj = dj[dj > 0] #清洗掉數(shù)據(jù)中為0的數(shù)據(jù)
結(jié)果如下圖:
??? ?a.DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
???? ?1.how值為any或者all.all僅在切片元素全為NA時(shí)才拋棄該行(列)那伐,默認(rèn)為any
???? ?2.thresh=3 那么一行當(dāng)中至少有三個(gè)非NA值時(shí)才將其保留
???? b.map() 是一個(gè)Series的函數(shù)踏施,DataFrame結(jié)構(gòu)中沒(méi)有map()。map()將一個(gè)自定義函數(shù)應(yīng)用于Series結(jié)構(gòu)中的每個(gè)元素(elements)罕邀。
經(jīng)過(guò)數(shù)據(jù)清洗后畅形,得到了單價(jià)的有效Series,下面對(duì)該Series離散處理
bins = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 16] #定義數(shù)據(jù)離散的區(qū)間
pd.cut(dj, bins).value_counts() #得出每個(gè)區(qū)間的數(shù)量
處理后的結(jié)果如下:
? ? 涉及知識(shí)點(diǎn):
? ? ?pandas快速定義分類(lèi)
???? ?pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')
???? ?x:必須是一維數(shù)組
???? ?bins: 即不同的面元(就是不同的范圍)接受三種類(lèi)型的輸入 整數(shù)诉探,序列(比如數(shù)組)和IntervalIndex---輸入整數(shù)日熬,進(jìn)行平均分成整數(shù)等份
???? ?right:最后一個(gè)bins是否包含最右邊的數(shù)據(jù),默認(rèn)為T(mén)rue(為左開(kāi)右閉)
? ? ?value_counts()
? ? ??計(jì)算數(shù)據(jù)出現(xiàn)的頻率
數(shù)據(jù)進(jìn)行離散化肾胯,通過(guò)pandas的繪圖函數(shù)plot()進(jìn)行直方圖繪圖
zongjia.plot.barh(figsize = (10, 8)) #進(jìn)行直方圖繪圖
? ? 涉及知識(shí)點(diǎn):
? ? ?Series.plot方法的函數(shù):
? ? ??label:用于圖例的標(biāo)簽
? ? ??ax:要在其上進(jìn)行繪制的matplotlib subplot對(duì)象竖席。如果沒(méi)有設(shè)置耘纱,則使用當(dāng)前matplotlib subplot
? ? ??style:將要傳給matplotlib的風(fēng)格字符串(for example: ‘ko–’)
? ? ??alpha:圖表的填充不透明(0-1)
? ? ??kind:可以是’line’, ‘bar’, ‘barh’, ‘kde’
? ? ??logy:在Y軸上使用對(duì)數(shù)標(biāo)尺
? ? ??use_index:將對(duì)象的索引用作刻度標(biāo)簽
? ? ??rot:旋轉(zhuǎn)刻度標(biāo)簽(0-360)
? ? ??xticks:用作X軸刻度的值
? ? ??yticks:用作Y軸刻度的值
? ? ??xlim:X軸的界限
? ? ??ylim:Y軸的界限
? ? ??grid:顯示軸網(wǎng)格線
? ? ??figsize:表示圖像大小的元組
直方圖展示如下:
總結(jié)
到目前為止,對(duì)單價(jià)的分析到此為止毕荐,通過(guò)直方圖能夠直觀的展示北京地區(qū)各板塊的成交房源單價(jià)區(qū)間揣炕。
未完,后面陸續(xù)寫(xiě)會(huì)針對(duì)其他的方向?qū)︽溂覕?shù)據(jù)進(jìn)行分析东跪。
? ? 如果對(duì)您有點(diǎn)幫助的話畸陡,麻煩您給點(diǎn)個(gè)贊,謝謝虽填。
鏈家數(shù)據(jù)分析二-數(shù)據(jù)分組處理:鏈家數(shù)據(jù)分析二-數(shù)據(jù)分組處理