ラベル PYTHON の投稿を表示しています。 すべての投稿を表示
ラベル PYTHON の投稿を表示しています。 すべての投稿を表示

2018-12-24

PandasでUnicodeDecodeError: 'shift_jis' codec can't decode byte 0xff in position 0: illegal multibyte sequenceが起こった時の対処法

状況


- 読み込もうとしているCSVファイルが、unicode形式になっている
- 文字コードの確認方法はこちら。

CSVファイルが文字化けしてExcelで見れない時の対処法について|Excel実務のノウハウのお勉強


- pandasのread_csvメソッドで。以下のようにCSVを読み込もうとする

stop_words = pd.read_csv(stop_words_filename, encoding="shift-jis")

問題


- 以下のエラーが発生した

UnicodeDecodeError: 'shift_jis' codec can't decode byte 0xff in position 0: illegal multibyte sequence

原因


- Pandasは、基本的にurf-8で文字コードを読み込もうとしている。utf-8以外の場合、encoding指定をしてあげる必要がある。
- 上のコードでは、shift-jisで読み込もうとしている
- しかし、元のファイルがunicodeなので読み込めていない。

対策


- 元のファイルをutf-8でencoding指定なし、もしくはshift-jis形式に変換をおこなう必要がある。
- どちらにせよ、ファイルの形式をunicodeから何等かの値に変更する必要がある

Excelの場合はこちらをutf-8形式に保存する
ExcelファイルをUTF-8のCSV形式で保存する方法(Excel 2016最新機能)40,710

libreofficeで修整する場合はこう。

https://help.libreoffice.org/Common/Export_text_files/ja




2018-12-07

FlaskでWebアプリを作るときの忘備録

FlaskでWebアプリを作っているので、今後使いそうなところの忘備録

## flask-login


主な機能

  • login/logoutが login_user(user)/logout_user()で簡単に管理できる
  • ログインが必要なページを @login_requiredデコレーターで簡単に管理できる
  • グローバル変数current_userがスクリプトからもテンプレートからも使える
  • ログインしてない時はcurrent_userにAnonymousUserMixinオブジェクトがセットされ、いい感じに使える
    • is_active, is_authenticated == False
    • is_anonymous == True
    • get_id() returns None

## SQLAlchemy


  • Railsでいうrake db:migrateみたいな感じで、マイグレーション管理ができるパッケージ
  • flask db init -> DBの初期化
  • flask db migrate -> マイグレーションファイルの作成
  • flask db upgrade -> マイグレーションファイルの実行
  • flask db downgrade -> ロールバック

## One to One, One to Manyのリレーション


  • One to Manyのリレーションは下記コードの通り


class Person(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    addresses = db.relationship('Address', backref='person', lazy=True)

class Address(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(120), nullable=False)
    person_id = db.Column(db.Integer, db.ForeignKey('person.id'),
        nullable=False)

  • One to Oneのリレーションは下記コードの通り
    • modelsの外部にForeignKey指定でユーザーIDを指定してあげる
    • 引用元はflask mega tutorial


app/models.py: Followers association table
followers = db.Table('followers',
    db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
    db.Column('followed_id', db.Integer, db.ForeignKey('user.id'))
)

  • ユーザーモデルの中に、以下のように書いてあげる。


class User(UserMixin, db.Model):
    # ...
    followed = db.relationship(
        'User', secondary=followers,
        primaryjoin=(followers.c.follower_id == id),
        secondaryjoin=(followers.c.followed_id == id),
        backref=db.backref('followers', lazy='dynamic'), lazy='dynamic')

  • フォローするなら、こんな感じ。


class User(UserMixin, db.Model):
    #...

    def follow(self, user):
        if not self.is_following(user):
            self.followed.append(user)

    def unfollow(self, user):
        if self.is_following(user):
            self.followed.remove(user)

    def is_following(self, user):
        return self.followed.filter(
            followers.c.followed_id == user.id).count() > 0

routingしてあげるときはこんな感じ。

app/routes.py: Follow and unfollow routes.
@app.route('/follow/<username>')
@login_required
def follow(username):
    user = User.query.filter_by(username=username).first()
    if user is None:
        flash('User {} not found.'.format(username))
        return redirect(url_for('index'))
    if user == current_user:
        flash('You cannot follow yourself!')
        return redirect(url_for('user', username=username))
    current_user.follow(user)
    db.session.commit()
    flash('You are following {}!'.format(username))
    return redirect(url_for('user', username=username))

@app.route('/unfollow/<username>')
@login_required
def unfollow(username):
    user = User.query.filter_by(username=username).first()
    if user is None:
        flash('User {} not found.'.format(username))
        return redirect(url_for('index'))
    if user == current_user:
        flash('You cannot unfollow yourself!')
        return redirect(url_for('user', username=username))
    current_user.unfollow(user)
    db.session.commit()
    flash('You are not following {}.'.format(username))
    return redirect(url_for('user', username=username))




参考

2018-04-08

Python3でCrontabを設定し指定したキーワードからツイッターのいいねの自動実行を行う

#この記事の目的


  • PythonでCRONTABを利用して、いいね自動化プログラムを定期実行する方法をまとめます。
  • 内容としては主に以下の内容となります
    • CRONTABとは何かという話
    • 実際にCRONTABを使うときに必要な知識
    • PythonコードをCRONTABから実行する方法

2018-04-07

2018-04-03

Flaskにおけるredirectとrender_templateメソッドの違い

Flaskでredirectとrender_templateのちがいがよくわからなかったので調べたことまとめ。


Python3 Flask SQlite3で連携したときに起こったエラー一覧と対処法

sqlite3.OperationalError: table query has no column named cron


テーブルにそんな列名ないよ~ってこと。SQLite3の中の接続しているテーブルの中に、そのようなカラムが存在するか確認する。


sqlite3覚書 データベースに接続したり、中身のテーブル確認したり。

Python3でSQLite3を利用する。その時にコンソール上でSQLite3をいじる方法についてメモ。Python3で作ったデータがちゃんと入っているのか確認したいので、インタラクティブシェルでSQLite3の中身を見えないのかと思い確かめた。


2018-03-21

AIで似ているAV女優を紹介しているスケベAI「スケベ博士」を作りました。①アプリ紹介編

こんにちは。スケベサイエンティストのDAI(@never_be_a_pm)です。
AIで、画像から似ているAV女優を紹介してくれるLine Bot「スケベ博士」を作りました。



2018-03-12

Pythonによる画像学習:ひらがなからローマ字に変換する

CSVに存在するAV女優のデータには、AV女優名、AV女優名(ひらがな)、動画URLがあります。Microsoft Azure Face APIを利用するうえで、日本語に対応していなかったので、このひらがなの部分をローマ字に変換します。


pandasで作成したCSVのデータをよみこみ、一つ一つの上を取り出して、ひらがなの部分をローマ字に変換する処理を行い、その結果を再度pandasでCSVにエクスポートすることで、データの前処理を行いました。


ということで今回はそのコードをべた張りしておきます。
ちなみに、だれかがひらがなからローマ字にしてくれるラッパ-を作成してくれていたので、それを利用させてもらいました。ありがたや。


miurahr/pykakasi

pykakasi is re-imprelemtation of kakasi library by Python.
READMEに従って、

$ pip install pupykakasi

をすれば、インストールできると思います。使い方はREADMEにある通り、こんな感じ。
    from pykakasi import kakasi,wakati

    kakasi = kakasi()
    kakasi.setMode("H","a") # default: Hiragana no conversion
    kakasi.setMode("K","a") # default: Katakana no conversion
    kakasi.setMode("J","a") # default: Japanese no conversion
    kakasi.setMode("r","Hepburn") # default: use Hepburn Roman table
    kakasi.setMode("C", True) # add space default: no Separator
    kakasi.setMode("c", False) # capitalize default: no Capitalize
    conv = kakasi.getConverter()
    result = conv.do(text)

    wakati = wakati()
    conv = wakati.getConverter()
    result = conv.do(text)


で、このpykakasiを利用して、ひらがなからローマ字にして、CSVに加えました。

import pykakasi.kakasi as kakasi
import pandas as pd

kakasi = kakasi()
kakasi.setMode("H","a")
conv = kakasi.getConverter()

df1 = pd.read_csv("final.csv", index_col=0)
df = pd.read_csv('default.csv', index_col=0) #女優名・女優の画像URL・DMMの画像URLが列に入っている
romandf = pd.read_csv('roman.csv', index_col=0)

def getRomeNameByHira(hira):
    result = conv.do(hira)
    return result

for index, row in df1.iterrows():
    name = row["name"]
    kana = row["kana"]
    image = row["image"]
    dmmimage = row["dmmimage"]
    roman = getRomeNameByHira(row["kana"])
    print(roman)
    se = pd.Series([name,kana,image,dmmimage,roman],["name", "kana", "image","dmmimage","roman"])
    romandf = romandf.append(se,ignore_index=True)
romandf.to_csv("romaned.csv")

2018-03-11

Python 機械学習のためのMicrosoft Azure Face API活用② Microsoft Azure Face APIに、AV女優を学習させる

とりあえずメモで。
PythonでMicrosoft Azure Face APIを利用して、画像の学習が成功したので、とりあえず動かしてみたときのコードを置いておく。


2018-03-10

Python requestsでrequest bodyがJSON形式のデータを送信する方法

Pythonで、requestsを利用している際に、request bodyがJSON形式のデータを送信したかった。その際にはまったことの忘備録。


pythonでE: Unable to locate package python-pipと出てきたときの対処法

pythonでE: Unable to locate package python-pipと出た時の対処法を忘備録に。

2018-03-06

Python 機械学習のためのMicrosoft Azure Face API活用① Microsoft Azure Face APIに、AV女優を学習させるためにAPIドキュメントを読む

Microsoft Azure Face APIを利用して、スクレイピングで取得したAV女優の画像を学習させる。

#TODO

  • この記事を参考にして、Microsoft Face APIにAV女優の画像を学習させる
  • 今回はMicrosoft Azure Face APIを利用してみたいので、そのドキュメントを読んでまとめてみる

2018-03-03

Python 機械学習のための画像収集①:アダルトサイトからAV女優6000名の名簿データをスクレイピングし、スプレッドシートを公開しました

#やりたいこと

  • Microsoft AzureのFace APIを使って、Lineから送られてきた画像から、似ているAV女優を取得する




2018-02-25

javascriptのfor inに連想配列使うときに騙された

javascriptの連想配列を、for in で取得したいときに、うまくいかなかったので挙動確認したときのメモ。



2018-01-23

Python sqlite3を触ってみる

Pythonでローカルで動かすちょっとしたアプリケーションなら、sqlite3がよさそうなので、基本的な触り方をメモしておく。

2018-01-21

FlaskとAngular JSで{{}}がかぶってエラーが起こるときの対処法

FlaskとAngular JSを利用している際に、エラーが起こる


FlaskでAngular JSを利用して以下のようなHTMLコードを書いているときに、エラーが表示される。


<html ng-app>
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js"></script>
</head>
<body>
  <h1>リダイレクトURL</h1>
  <p>OAuth Providerで登録した、Client IDと、リダイレクトURLを入力してください。</p>
  <form>
    <label for="client_id">クライアントID</label>
    <input type="textfield" name="client_id" id="client_id" ng-model="client_id" placeholder="クライアントID"></input>
    <label for="redirect_uri">リダイレクトURL</input>
    <input type="textfield" name="redirect_uri" id="redirect_uri" ng-model="redirect_uri" placeholder="リダイレクトURL"></input>
    <label for="textfield">スコープ</label>
    <input type="textfield" name="scope" id="scope" ng-model="scope" placeholder="scope"></input>
  </form>
  <p>生成されたURL</p>
    <a href="https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=263680507619-6sm2e6jv584ilmd7h6jrn5dstk6magke.apps.googleusercontent.com&redirect_uri=http://127.0.0.1:5000/callback.html/&scope=https://www.googleapis.com/auth/calendar
">これじゃ</a>
    <p>{{client_id + redirect_uri + scope}} </p>
  {% if result %}
  <h1>アクセストークン</h1>
    <form method="post">
      <label>Access Token</label>
      <blockquote>{{ result }}</blockquote>
      <input type="textfield" name="access_token" value="{{result}}">
      <input type="submit"></input>
  </form>
  {% endif %}

  {% if schedule %}
  <h1>スケジュール一覧</h1>
  <blockquote>{{ schedule }}</blockquote>
  {% endif %}

<!-- javascript-->
<script>
</script>
</body>
</html>


jinja2.exceptions.UndefinedError
jinja2.exceptions.UndefinedError: 'client_id' is undefined


注目の投稿

めちゃくちゃ久しぶりにこのブログ書いたw 更新3年ぶりw > 多様性というゲームは尊厳と自由を勝ち取るゲームなのかもしれないな。  もともとツイッターでツイートした内容なんだけど、ちょっと深ぼる。 ----- 自分は男 x 30代x 二児の父 x 経営者 x 都心(共働き世...