spark+matplotlib 數(shù)據(jù)可視化2018-05-25

from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local[*]").appName("shuangyu").getOrCreate()
#讀取數(shù)據(jù),并查看前5行
sc = spark.sparkContext
f = sc.textFile("/home/shuangyu/Downloads/ccFraud.csv")
f.take(5)

['"custID","gender","state","cardholder","balance","numTrans","numIntlTrans","creditLine","fraudRisk"',
'1,1,35,1,3000,4,14,2,0',
'2,2,2,1,0,9,0,18,0',
'3,2,2,1,0,27,9,16,0',
'4,1,15,1,0,12,0,5,0']

#準(zhǔn)備創(chuàng)建DataFrame
import pyspark.sql.types as typ
#獲取第一行,(第一行為列名)
header = f.first()
#數(shù)據(jù)去掉頭部扩然,并轉(zhuǎn)換成int
f = f.filter(lambda line:line != header).map(lambda line:[int(e) for e in  line.split(",")])
#創(chuàng)建schema
cols = [*[typ.StructField(h[1:-1],typ.IntegerType(),True) for h in header.split(",")]]
schema = typ.StructType(cols)
#創(chuàng)建dataframe
df = spark.createDataFrame(f,schema)
df.cache()
df.printSchema()

root
|-- custID: integer (nullable = true)
|-- gender: integer (nullable = true)
|-- state: integer (nullable = true)
|-- cardholder: integer (nullable = true)
|-- balance: integer (nullable = true)
|-- numTrans: integer (nullable = true)
|-- numIntlTrans: integer (nullable = true)
|-- creditLine: integer (nullable = true)
|-- fraudRisk: integer (nullable = true)

#查看數(shù)據(jù)中性別比例
df.groupBy("gender").count().show()

+------+-------+
|gender| count|
+------+-------+
| 1|6178231|
| 2|3821769|
+------+-------+

#獲取指定字段的一些統(tǒng)計(jì)信息
df.describe("balance","numTrans","numIntlTrans").show()

+-------+-----------------+------------------+-----------------+
|summary| balance| numTrans| numIntlTrans|
+-------+-----------------+------------------+-----------------+
| count| 10000000| 10000000| 10000000|
| mean| 4109.9199193| 28.9351871| 4.0471899|
| stddev|3996.847309737258|26.553781024523122|8.602970115863904|
| min| 0| 0| 0|
| max| 41485| 100| 60|
+-------+-----------------+------------------+-----------------+

#相關(guān)性.
df.corr("balance","numTrans")

0.0004452314017265386

可視化

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('ggplot')#樣式美化
# %matplotlib inline是用來(lái)使輸出圖像在notebook中輸出而不是單獨(dú)打開(kāi)一個(gè)窗口
#histogram 分桶,也就是畫(huà)直方圖中有多少個(gè)柱子
#返回的是一個(gè)tuple(List,List)袜漩,第一個(gè)list中是x,第二個(gè)是對(duì)應(yīng)的y
hist = df.select("balance").rdd.flatMap(lambda x: x).histogram(20)
print(type(hist))
hist

<class 'tuple'>

([0.0,
2074.25,
4148.5,
6222.75,
8297.0,
10371.25,
12445.5,
14519.75,
16594.0,
18668.25,
20742.5,
22816.75,
24891.0,
26965.25,
29039.5,
31113.75,
33188.0,
35262.25,
37336.5,
39410.75,
41485],
[3640021,
2258778,
1718633,
1035019,
601524,
343461,
192766,
104486,
54517,
27570,
13117,
5805,
2650,
1103,
358,
127,
45,
15,
1,
4])

#x里面有21個(gè)值湾碎,y有20個(gè)宙攻,所以x的最后一個(gè)要去掉(x軸最后是無(wú)窮區(qū)間)
data = {"bins":hist[0][:-1],"freq":hist[1]}
#width 柱子的x軸方向上的寬度,一般近似為x1-x0
plt.bar(data["bins"],data["freq"],width=2000)
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Just For Test")

<matplotlib.text.Text at 0x7f48b3d6fc18>

output_10_1.png
#sampleBy根據(jù)指定字段分層抽樣
sample_data = df.sampleBy('gender',{1:0.0002,2:0.0002}).select("balance","numTrans","numIntlTrans")
sample_data.take(5)

[Row(balance=4000, numTrans=71, numIntlTrans=2),
Row(balance=0, numTrans=12, numIntlTrans=0),
Row(balance=3000, numTrans=44, numIntlTrans=0),
Row(balance=6000, numTrans=20, numIntlTrans=0),
Row(balance=3000, numTrans=3, numIntlTrans=13)]

#按字段將值分開(kāi)
data_multi ={elem:sample_data.select(elem).rdd.flatMap(lambda x:x).collect()\
             for elem in ["balance","numTrans","numIntlTrans"]}
#畫(huà)散點(diǎn)圖胜茧,plt.scatter(x,y)
plt.scatter(data_multi["numTrans"],data_multi["balance"],c ='r',marker='o',label="numTrans-balance")
plt.scatter(data_multi["numIntlTrans"],data_multi["balance"],c ='b',marker="x",label="numInt-balance")
plt.grid(True)#網(wǎng)格
plt.xlabel("x value")
plt.ylabel("y value")
plt.legend(loc='upper right')#圖例的位置
plt.title("scatter view")

<matplotlib.text.Text at 0x7f48b3cdbf28>

output_12_1.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粘优,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子呻顽,更是在濱河造成了極大的恐慌雹顺,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件廊遍,死亡現(xiàn)場(chǎng)離奇詭異嬉愧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)喉前,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)没酣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人卵迂,你說(shuō)我怎么就攤上這事裕便。” “怎么了见咒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵偿衰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我改览,道長(zhǎng)下翎,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任宝当,我火速辦了婚禮视事,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庆揩。我一直安慰自己俐东,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布订晌。 她就那樣靜靜地躺著犬性,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腾仅。 梳的紋絲不亂的頭發(fā)上乒裆,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音推励,去河邊找鬼鹤耍。 笑死肉迫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稿黄。 我是一名探鬼主播喊衫,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杆怕!你這毒婦竟也來(lái)了族购?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤陵珍,失蹤者是張志新(化名)和其女友劉穎寝杖,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體互纯,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瑟幕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了留潦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片只盹。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖兔院,靈堂內(nèi)的尸體忽然破棺而出殖卑,到底是詐尸還是另有隱情,我是刑警寧澤坊萝,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布懦鼠,位于F島的核電站,受9級(jí)特大地震影響屹堰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜街氢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一扯键、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧珊肃,春花似錦荣刑、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至烈和,卻和暖如春爱只,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背招刹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工恬试, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窝趣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓训柴,卻偏偏與公主長(zhǎng)得像哑舒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子幻馁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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