復(fù)現(xiàn)fish03課python基礎(chǔ)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline
%config InlineBackend.figure_format = 'retina'

以上就是導(dǎo)入數(shù)據(jù)包: pandas乖阵,numpy巾钉,pyplot
第二段是魔法字,不過這句話具體代表什么鼎兽,我并不知道。

??%matplotlib inline
%config InlineBackend.figure_format = 'retina' 是什么意思铣除,這個(gè)可以作為研究對象谚咬。只是當(dāng)下應(yīng)保持專注。把復(fù)現(xiàn)走完尚粘。

想把絕對路徑和相對路徑死磕出來

問題:關(guān)于絕對路徑择卦。

背景:今天想復(fù)現(xiàn)fish上節(jié)課的代碼,在讀取文件環(huán)節(jié)背苦,就遇到路徑問題了互捌。 以前,我直接把.ipynb文件建立在課件材料的同一個(gè)文件夾內(nèi)行剂,所以幾乎不需要care路徑的問題秕噪,只要文件嗎正確就能讀取到。 但是厚宰,今天斗爭欲上來了腌巾,我就把.ipynb不放在課件材料同一個(gè)文件夾內(nèi),想把文件讀取出來铲觉。 google了一下澈蝙,參照那些代碼嘗試建立絕對路徑,并未成功撵幽。 想求教老師同學(xué)們灯荧,幫助拿下絕對路徑這個(gè)山頭。

fish的代碼讀取文件是這樣:

  • df = pd.read_csv('HRSalaries.csv')
    df.head()

  • 而我把HRSalaries.csv放在win7電腦的這個(gè)位置盐杂,C:\Users\Administrator.USER-20170623BT\Desktop\第三課材料\第三課材料\HRSalaries.csv

  • 我的代碼是這樣:df = pd.read_csv(r"C:\Users\Administrator.USER-20170623BT\Desktop\第三課材料\第三課材料\HRSalaries.csv")
    結(jié)果報(bào)錯(cuò):OSError: Initializing from file failed

問題是:我到底該如何輸入絕對路徑逗载,才能成功讀取到HRSalaries.csv
先謝 哆窿。

df = pd.read_csv(r"C:\Users\bog\Desktop\3-python lesson\HRSalaries.csv")
df.head(20)
### 搞定了,原來是路徑中厉斟,不能有英文出現(xiàn)挚躯。  搞定了真開心。   回憶一下:用r“路徑\文件名.文件格式”
len(df)
#df是不是dataframe的簡稱啊擦秽,然后就習(xí)慣性把文件賦值給df這個(gè)名字码荔。
##len()方法是查閱總長度,是指有30284行嗎感挥?
30284
df.Department.value_counts()
##這會(huì)統(tǒng)計(jì)不同部門的人數(shù)缩搅,那有必要把文件原檔拿出來看看哦。 多種職位position也隸屬于某個(gè)部門department的链快。
###新增知識(shí)點(diǎn):value_counts()誉己,匯總相同的列在一起
POLICE                   12461
FIRE                      4798
SANITATION                2092
WATER MGMT                1796
AVIATION                  1252
TRANSPORTATION            1196
EMERGENCY MGMT            1182
GENERAL SERVICES           922
PUBLIC LIBRARY             874
FAMILY & SUPPORT           719
HEALTH                     568
FINANCE                    533
LAW                        455
CITY COUNCIL               265
BUILDINGS                  261
COMMUNITY DEVELOPMENT      216
BUSINESS AFFAIRS           177
DoIT                        97
MAYOR'S OFFICE              96
PROCUREMENT                 77
CULTURAL AFFAIRS            76
HUMAN RESOURCES             61
ANIMAL CONTRL               57
DISABILITIES                29
TREASURER                   24
Name: Department, dtype: int64
len(df.Department.unique())
###.unique()又是什么東東
25
df.Department.unique()
array(['EMERGENCY MGMT', 'POLICE', 'TRANSPORTATION', 'FIRE', 'WATER MGMT',
       'FAMILY & SUPPORT', 'HEALTH', 'SANITATION', 'AVIATION',
       'GENERAL SERVICES', 'PUBLIC LIBRARY', 'FINANCE', 'BUSINESS AFFAIRS',
       'HUMAN RESOURCES', 'LAW', 'BUILDINGS', 'COMMUNITY DEVELOPMENT',
       'ANIMAL CONTRL', "MAYOR'S OFFICE", 'CITY COUNCIL', 'DISABILITIES',
       'CULTURAL AFFAIRS', 'PROCUREMENT', 'DoIT', 'TREASURER'], dtype=object)

開始計(jì)算平均趨勢了

均值
中位數(shù)
眾數(shù)

salary = df.Annual_Salary#賦值數(shù)據(jù)段給salary
salary.sum() / len(salary)
#工資求和除以員工數(shù)量,就是平均工資
60836.98560295866
salary.mean()
##用mean()方法好簡單域蜗。  這是不是pandas里面的方法哦
60836.98560295866
np.mean(salary)
###這個(gè)明顯是numpy里面的啊
60836.98560295866

求所有部分的平均工資

df.groupby('Department').Annual_Salary.mean().sort_values(ascending=False)
Department
DoIT                     73831.979381
BUILDINGS                72137.885057
FIRE                     69383.989996
MAYOR'S OFFICE           68953.677083
WATER MGMT               64760.186526
COMMUNITY DEVELOPMENT    64262.597222
GENERAL SERVICES         63747.808026
TREASURER                63497.500000
POLICE                   63127.904984
TRANSPORTATION           62947.504181
PROCUREMENT              61452.584416
HEALTH                   61213.503521
CULTURAL AFFAIRS         61181.894737
DISABILITIES             58058.586207
BUSINESS AFFAIRS         57216.067797
HUMAN RESOURCES          57108.163934
LAW                      55917.958242
AVIATION                 55816.200479
SANITATION               55555.813576
FINANCE                  54286.375235
ANIMAL CONTRL            47604.473684
PUBLIC LIBRARY           44241.731121
EMERGENCY MGMT           42845.754653
CITY COUNCIL             38046.547170
FAMILY & SUPPORT         31193.307371
Name: Annual_Salary, dtype: float64
df.head(10)

sorted_salary = salary.sort_values()
sorted_salary

16629      3128
2247       3132
20961      3133
13423      3135
25422      3135
16451      3136
1732       3136
2215       3140
23454      3144
12291      3149
25959      3151
19186      3153
9905       3156
1752       3182
25170      3188
4739       3188
4858       3190
3688       3193
6947       3209
20065      3215
17837      3219
24322      3230
5840       3232
25971      3236
8175       3244
22631      3253
22602      3257
15958      3263
5194       3265
18713      3266
          ...  
23452    128174
27353    130023
14122    130788
18022    131070
17173    131461
7333     132249
20450    132283
11322    135289
14042    135623
14386    136798
6491     136806
17347    137121
7565     137153
13217    137300
12748    137305
10283    137574
16910    137583
4165     137584
29829    137669
1260     138506
14746    138546
15059    138760
2866     138826
8904     144240
3246     144914
20222    146247
11657    146776
3486     157054
27879    167858
6724     201448
Name: Annual_Salary, dtype: int64
(sorted_salary.iloc[15141] + sorted_salary.iloc[15142]) / 2
##最中間的兩位數(shù),除以2
61836.0
salary.median()
#使用pandas()快速實(shí)現(xiàn)
61836.0
plt.hist(salary, bins=50, rwidth=0.9)
plt.show()

![output_21_0.png](http://upload-images.jianshu.io/upload_images/4421285-3e0db43faedc6f01.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
plt.hist(salary, bins=25, rwidth=0.9, range=(100000, 210000))
plt.show()
##使用range指挑選10萬至21萬之間的
output_21_0.png
salary.mean() < salary.median()
True

均值小于中位數(shù)噪猾,圖形左偏霉祸。

救火員收入分布

fire_salary = df[df.Department == 'FIRE'].Annual_Salary
plt.hist(fire_salary, bins=50, rwidth=0.9)
plt.show()
![ ![output_41_0.png](http://upload-images.jianshu.io/upload_images/4421285-2ab6f41b5d48ba61.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ](http://upload-images.jianshu.io/upload_images/4421285-437edcb70967f98b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
fire_salary.mean()
69383.9899958316
fire_salary.median()
66260.0
fire_salary.mean()>fire_salary.median()
True

均值大于中數(shù),所以右偏

離散程度

salary.max() 
#工資最大值

201448
salary.min()
###工資最小值
3128
##全距
salary.max() - salary.min()
198320
Q1 = salary.quantile(0.25)
Q1
#一分位
55671.75
Q3 = salary.quantile(0.75)
Q3
#三分位
68558.5
IQR = Q3 - Q1
IQR
##四分位距出來了
12886.75
salary.quantile(0.5)
#二分位
61836.0
salary.median()
##看來二分位就等于中位數(shù)哦
61836.0
salary.plot(kind='box', vert=False, figsize=(15, 5))
plt.show()
###這樣的顯示說明了什么問題呢袱蜡? 離散程度很大啊丝蹭。  集中在四分位距的不錯(cuò),iqr坪蚁。
## IT員工的收入分布
doit_salary = df[df.Department == 'DoIT'].Annual_Salary.tolist()
plt.boxplot(doit_salary)
plt.show()
### 這里有一個(gè)tolist()方法奔穿,這是什么呢?敏晤,原來是把數(shù)據(jù)轉(zhuǎn)化成列表數(shù)據(jù)贱田。
![ ![output_42_0.png](http://upload-images.jianshu.io/upload_images/4421285-137828da2d0db8c4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ](http://upload-images.jianshu.io/upload_images/4421285-9846946810822c27.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
##建筑和IT收入差別
import seaborn as sns

sns.boxplot(data=df, y='Department', x='Annual_Salary')
plt.show()
###一個(gè)帥氣的包,seaborn嘴脾。  
output_42_0.png
###方差和標(biāo)準(zhǔn)差
mean = salary.mean()
np.sum((salary - mean)**2) / (len(salary) - 1)
###每個(gè)數(shù)減去均值求平方男摧,然后再相加,除以數(shù)量
271490393.4177519
###使用函數(shù)译打,就方便了耗拓、
var=salary.var()
var


271490393.4177519
###接下來是標(biāo)準(zhǔn)差的計(jì)算
np.sqrt(np.sum((salary - mean)**2) / (len(salary) - 1))
###本質(zhì)上就是方差開方
16476.965540346071
np.sqrt(271490393.4177519)
16476.965540346071
###函數(shù)出馬
std=salary.std()
std
16476.96554034607
拇指規(guī)則
len(salary[salary.between(mean - std, mean + std)]) / len(salary)
###大約68%的數(shù)據(jù)落在均值左右一個(gè)標(biāo)準(zhǔn)差的范圍內(nèi)

---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-32-4b2e7a7f4ef1> in <module>()
----> 1 len(salary[salary.between(mean - std, mean + std)]) / len(salary)
      2 ###大約68%的數(shù)據(jù)落在均值左右一個(gè)標(biāo)準(zhǔn)差的范圍內(nèi)


NameError: name 'mean' is not defined
len(salary[salary.between(mean - 2*std, mean + 2*std)]) / len(salary)
###大約95%的數(shù)據(jù),落在均值左右兩個(gè)標(biāo)準(zhǔn)差的范圍內(nèi)奏司。
#基本符合鐘形曲線
0.933364152687888

協(xié)方差

兩個(gè)變量與均值之差的乘積乔询,再把這些乘積求和除以數(shù)量

score = df.Review_Score
##定義評分
np.sum((salary - salary.mean()) * (score - score.mean())) / (len(salary)-1)
###工資變量減去工資均值*評分變量-評分均值,再除以數(shù)量




7.747599921809748
np.cov(salary, score)

array([[  2.71490393e+08,   7.74759992e+00],
       [  7.74759992e+00,   1.06173362e+00]])
cov = np.cov(salary, score)[0,1]
cov
#這是只要其中那個(gè)一個(gè)數(shù)的意思韵洋,0代表第一排竿刁,1代表第二位
7.7475999218100222

接下來就是相關(guān)系數(shù)

兩變量的協(xié)方差除以岸夯,兩變量的標(biāo)準(zhǔn)差乘積

np.cov(salary, score)[0,1] / (salary.std() * score.std())


0.00045633330757004046
np.corrcoef(salary, score)[0,1]
## 函數(shù)出馬,清算一半
0.00045633330757003586
plt.scatter(score, salary, alpha=0.3)
plt.show()
output_58_0.png
position = df[df.Position_Title == 'FIREFIGHTER']
print(np.corrcoef(position.Annual_Salary, position.Review_Score)[1,0])
plt.scatter(position.Review_Score, position.Annual_Salary)
plt.show()

0.0571267765462
output_59_1.png
#作業(yè)時(shí)間
## 1们妥、計(jì)算 HRSalaries 數(shù)據(jù)中評分Review_Score 的均值和中位數(shù)猜扮,并判斷其偏度是左偏還是右偏?
df




Review_Score =df.Review_Score
Review_Score.mean() >Review_Score.median()
False

均值小于中位數(shù)监婶,所以偏左

Review_Score.quantile(0.75)-Review_Score.quantile(0.25)
1.4000000000000004
rstd=Review_Score.std()
rstd
1.030404588021642
rmean=Review_Score.mean()
len(Review_Score[Review_Score.between(rmean - 2*rstd, rmean + 2*rstd)]) / len(Review_Score)

0.9617950072645621
position = df[df.Department == 'DoIT']
print(np.corrcoef(position.Annual_Salary, position.Review_Score)[1,0])
plt.scatter(position.Review_Score, position.Annual_Salary)
plt.show()
0.00602457101049
output_66_1.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旅赢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子惑惶,更是在濱河造成了極大的恐慌煮盼,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件带污,死亡現(xiàn)場離奇詭異僵控,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鱼冀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門报破,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人千绪,你說我怎么就攤上這事充易。” “怎么了荸型?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵盹靴,是天一觀的道長。 經(jīng)常有香客問我瑞妇,道長稿静,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任辕狰,我火速辦了婚禮改备,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柳琢。我一直安慰自己绍妨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布柬脸。 她就那樣靜靜地躺著他去,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倒堕。 梳的紋絲不亂的頭發(fā)上灾测,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼媳搪。 笑死铭段,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秦爆。 我是一名探鬼主播序愚,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼等限!你這毒婦竟也來了爸吮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤望门,失蹤者是張志新(化名)和其女友劉穎形娇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筹误,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桐早,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厨剪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哄酝。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖丽惶,靈堂內(nèi)的尸體忽然破棺而出炫七,到底是詐尸還是另有隱情,我是刑警寧澤钾唬,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站侠驯,受9級特大地震影響抡秆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吟策,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一儒士、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧檩坚,春花似錦着撩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赂乐,卻和暖如春薯鳍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挨措。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工挖滤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留崩溪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓斩松,卻偏偏與公主長得像伶唯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子惧盹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

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