import pandas as pd import numpy as np from matplotlib import pyplot as plt # 支持中文 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False
採集代碼:https://github.com/song-zhixue/lagoupython
data = pd.read_csv("./lagou_data.csv",sep = ',',encoding = 'gbk') data.head()
這裏我只作了簡單得清洗就是去掉空值git
- 去重 - 去空 - 1刪除 - 2替換 - 3填充 - 去異常 - 1非法數據 好比原本應該是數字列的中間夾雜着一些漢字或者是符號 - 2異常數據 異乎尋常的大數值或者是小數值
data.isnull() data.isnull().any() # 按照列統計空值,查看哪一列有空值
城市 False 公司全稱 False 企業編碼 False 公司簡介 False 公司logo False 公司規模 False 發佈時間 False 區域 True 學歷 False 融資狀況 False 類型 False 工做性質 False 經度 True 緯度 True 地鐵 True 福利 False 職位名稱 False 薪資 False 工做年限 False 崗位 False dtype: bool
data = data.dropna() # 默認會刪除包含缺失值的行 data
data["城市"].value_counts() 北京 258 上海 149 深圳 136 廣州 54 成都 48 杭州 31 武漢 22 南京 12 重慶 7 蘇州 5 天津 4 石家莊 3 長沙 3 廈門 3 西安 2 鄭州 2 青島 2 大連 2 佛山 2 長春 1 貴陽 1 Name: 城市, dtype: int64
ret = data["城市"].value_counts().head(10).plot(kind='pie',autopct='%1.2f%%',figsize=(10,8)) # 取前10個結果進行繪圖 ret plt.show
ret = data["城市"].value_counts().plot(kind='pie',autopct='%1.2f%%',figsize=(10,8),explode = np.linspace(0,1.5,21)) # 每隔1.5個長度繪製一次,一共21條數據 ret plt.show
data["學歷"].value_counts() 本科 613 大專 73 不限 50 碩士 11 Name: 學歷, dtype: int64 data["學歷"].value_counts().plot(kind='bar') plt.xticks(rotation=0)
data["工做年限"].value_counts() 3-5年 317 1-3年 193 5-10年 90 不限 79 應屆畢業生 62 1年如下 5 10年以上 1 Name: 工做年限, dtype: int64 data["工做年限"].value_counts().plot(kind='barh',color="orange")
data["公司規模"].value_counts() 150-500人 190 50-150人 181 15-50人 130 2000人以上 112 500-2000人 100 少於15人 34 Name: 公司規模, dtype: int64 data["公司規模"].value_counts().plot(kind='pie',autopct='%1.2f%%')
data["公司規模"].value_counts().plot(kind='barh',color="red")
data["融資狀況"].value_counts() 不須要融資 187 A輪 118 B輪 114 上市公司 96 未融資 88 天使輪 55 C輪 54 D輪及以上 35 Name: 融資狀況, dtype: int64 data["融資狀況"].value_counts().plot(kind='bar') plt.xticks(rotation=45)
# 利用結巴進行分詞 import jieba # 繪製詞雲 import wordcloud # 自定義詞雲背景 from PIL import Image data["福利"] all_str = '' for i in data["福利"]: all_str += i # 利用jieba進行分詞 lis = jieba.lcut(all_str) txt = " ".join(lis) # mask = np.array(Image.open("./詞雲.jpg")) # 自定義背景圖 w = wordcloud.WordCloud( font_path="msyh.ttc", width=400, height=400, background_color="white", # colormap="Reds", # mask=mask, # contour_width=1, # contour_color="red" ) w.generate(txt) w.recolor() # 隨機詞雲中的字體顏色 # w.to_file("福利.png") # 將詞雲保存在本地 w.to_image() # 查看生成的詞雲
利用地圖無憂進行地圖可視化:https://www.dituwuyou.com/github
data[["經度","緯度"]] # 取經度和緯度這兩列數據
data[["經度","緯度"]].to_csv("./地圖經緯度.csv",encoding="gbk") # 導出csv用地圖無憂繪製地圖
導出到csv樣式正則表達式
- https://www.dituwuyou.com/orgs/321267/maps - 帳號:xxxxxx - 密碼:xxxxxx
咱們得到的數據都是以字符串形式存儲的,並且像工資(20k—30k)都是以區間的形式表現出來的,應該求其平均值(工資25k)app
原數據:字體
data["薪資"].value_counts() 15k-30k 71 15k-25k 68 10k-20k 58 20k-40k 49 20k-30k 32 10k-15k 30 25k-50k 24 8k-15k 22 20k-35k 20 10k-18k 16 12k-20k 16 8k-12k 15 15k-20k 13 12k-18k 13 25k-40k 12 6k-12k 11 25k-35k 9 12k-24k 9 30k-50k 9
清洗後的數據編碼
# 統計每一個公司給出的平均工資 pattern = '\d+' # 正則表達式-匹配連續數字 data['平均工資']= data["薪資"].str.findall(pattern) avg_salary = [] for k in data['平均工資']: salary_list = [int(n) for n in k] salary = sum(salary_list)/2 avg_salary.append(salary) data['平均工資'] = avg_salary # 新建立一列平均工資 data['平均工資'] 0 11.5 2 13.0 3 15.0 4 22.5 5 30.0 6 20.0 8 15.0 9 75.0 10 15.0 11 17.0 12 12.5 13 37.5 14 11.5 15 12.0 16 12.5 17 22.5 19 25.0
根據平均薪資繪製頻數直方圖spa
# 平均工資直方圖 plt.figure(figsize=(15,5),dpi=80) plt.hist(data['平均工資'], alpha=0.8, color='steelblue') plt.xlabel('工資/千元') plt.ylabel('頻數') plt.title("python工程師平均工資直方圖") plt.show()
能夠看出python的薪資範圍在10k-15k比較多3d